2016-09-11 2 views
0

このコードはプレーヤーにあり、メニュー内のボタンを押すと反応し、最初はオレンジ色になったときにボタン「btn_MenuKill」を押し、次回に色を元に戻すときSyncVarフック "void ProcessKillObject(bool _MP_Orange){"で、元の黄色にして "print"( "FIRE THE PROCESS")を実行します。エディタでコマンドがクライアントからトリガーされない

スタートホスト

1)ホスト・クライアント(エディタ上のボタンをクリックします)= [コマンド]

2作品)上のボタンをクリックしてください:ここで

は、状況/問題であり、リモートクライアント=機能しません。[コマンド]

生成された "リモート"クライアントでホストを起動します。

1)ホスト・クライアント上のボタンをクリックして= [コマンド]は、リモート・クライアント上のボタンをクリックしてください)

2作品= [コマンド] [コマンド]ときに動作しない理由を私は理解していない

作品ホストはエディタ上にあり、私はリモートのボタンを使用します。ここで

はコードです:

[SyncVar(hook = "ProcessKillObject")] public bool MP_KillOrange = false; 
[SyncVar(hook = "MoveMainMenu")] public bool MP_MainMenu; 
private NetworkIdentity objNetId; 
private Color32 yellowButtonColor = new Color32 (200, 200, 2, 255); 
private Color32 orangeButtonColor = new Color32 (255, 96, 0, 255); 

public void Btn_Kill() { 

    if (!isLocalPlayer) 
     return; 

    foreach (string objectTag in MP_Singleton.Instance.master_Object_List) { 
     GameObject dummy = GameObject.Find (objectTag); 
     Cmd_LocalAuthority (true, dummy); 
    } 

    Cmd_ProcessKill(); 
} 

// SyncVar Hook 
void ProcessKillObject(bool _MP_Orange) { 

    if (_MP_Orange) { 
     GameObject.Find ("btn_MenuKill").GetComponent<Button>().image.color = orangeButtonColor; 
    } else if (!_MP_Orange) { 
     GameObject.Find ("btn_MenuKill").GetComponent<Button>().image.color = yellowButtonColor; 

     print ("FIRE THE PROCESS"); 
    } 
} 

[Command] //>>>>>> THIS IS NOT TRIGGERED 
void Cmd_ProcessKill() { 

    // >>>>>>>>>>>>>>>>>>>>>> 
    GameObject.Find ("MyText").GetComponent<Text>().text = "HIT"; // TO SEE THAT THE COMMAD TRIGGER 
    //>>>>>>>>>>>>>>>>>>>>>>> 
    if (MP_KillOrange) 
     MP_MainMenu = !MP_MainMenu; 

    MP_KillOrange = !MP_KillOrange; 

} 


[Command] 
void Cmd_LocalAuthority(bool getAuthority, GameObject obj) { 

    objNetId = obj.GetComponent<NetworkIdentity>();  // get the object's network ID 

    if (getAuthority) { 
     objNetId.AssignClientAuthority (connectionToClient); // assign authority to the player 
    } else { 
     objNetId.RemoveClientAuthority (connectionToClient); // remove the authority from the player 
    } 
} 
+0

「Cmd_LocalAuthority(true、dummy);」を削除すると、それは動作しますが、私が移動するノンプレイヤーオブジェクトは、移動する場所にとどまっていません。 – PeterK

+0

解決済み、私はRPCを使用し、それは働いた。 – PeterK

答えて

0

私はRPCを追加し、それが動作します。

[ClientRpc] 
void Rpc_Position(GameObject myGO, float ranX, float ranY, int zDepth, float twist) { 

    myGO.transform.position = new Vector3 (ranX, ranY, zDepth); 
    myGO.transform.localEulerAngles = new Vector3(0f, 0f, twist); 

} 
関連する問題