2016-09-11 3 views
0

Этот код, расположенный на проигрывателе, реагирует на нажатие кнопки в меню, и идея заключается в нажатии кнопки «btn_MenuKill» в первый раз, когда она станет оранжевой, и в следующий раз, когда она изменит цвет назад к оригинальному желтому и сделать «print (« ПОЖАРНЫЙ ПРОЦЕСС »)», в SyncVar Hook «void ProcessKillObject (bool _MP_Orange) {".Команда не запускается от клиента

Вот ситуация/проблема:

Начало хоста в редакторе

1) кнопку на хост-клиент (редактор Click) = [Command] работает

2) Нажмите кнопку на удаленный клиент = не работает, не выпалить в [Command]

Старт хост в сгенерированном «удаленном» клиенте

1) Нажмите кнопку на хост-клиент = [Command] работает

2) Нажмите кнопку на пульте-клиенте = [Command] работает

Я не понимаю, почему [Command] не работает, если хост находится в редакторе, и я использую кнопку на пульте дистанционного управления.

Вот код:

[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); 

} 
Смежные вопросы