Network commands sent from clients not working.
Hi, I've hit a road block with some networking code I'm working on. I have an engine I want players to be able to click on to switch on/off. The engine has a network identity and an OnMouseDown event on it. When the host clicks on the engine it turns off/on on the clients, but when the client clicks they are not doing anything. I checked the variable activated and it's being updated but the visual changes are not being executed.
Engine.cs
[SyncVar]
public bool activated = false;
void OnMouseDown(){
if (isServer)
{
this.activated = !this.activated;
RpcSwitchPower();
}
else
{
Player.localPlayer.SendMessage("CmdSwitchPower");
}
Debug.Log(activated);
}
public void SwitchPower()
{
GetComponent<AudioSource>().mute = !activated;
if (this.activated)
{
GetComponent<SpriteRenderer>().material.color = new Color(0.2f, 0.5f, 0.4f, 1f);
}
else
{
GetComponent<SpriteRenderer>().material.color = Color.red;
}
}
//Switch power on clients
[ClientRpc]
public void RpcSwitchPower(){
SwitchPower();
}
player.cs
//Tell server to switch the diesel engine
[Command]
void CmdSwitchPower()
{
print("Command to SwitchPower");
GameObject g = GameObject.Find("Engine_diesel");
g.GetComponent<EngineDieselControl>().activated = !g.GetComponent<EngineDieselControl>().activated;
g.GetComponent<EngineDieselControl>().RpcSwitchPower();
}
Answer by seanr · Jan 05, 2016 at 04:22 PM
SendMessage wont work with a command because the function's name is changed during a post-build code generation step. Call the function directly instead.
Your answer
Follow this Question
Related Questions
Unity Networking: Loading Screen 0 Answers
RPC isn't called when windowns lose focus 0 Answers
Simple ClientRpc Whats wrong with it? 0 Answers
Unity Network Manager or FullRPC 0 Answers
Question to RPC and Command (Unet) 0 Answers