Client can't answer to Server, Command methods don't work, ClientRPC do
I'm making a program where you can change the materials of an object by clicking a button. It must work with multiple devices, therefore a variable is synchronized.
It works when the server presses a button, but not when the client does it.
gameState is the synchronized variable, which synchronizes the state and allows to change an object at a time.
public enum GameState
{
Offline,
Connecting,
Lobby,
Countdown,
WaitingForRolls,
Scoring,
GameOver, // my part is next
BrownTree,
GreenTree,
PurpleTree,
MetalBox,
WoodenBox,
BaseChair,
Chair1,
Chair2,
Chair3,
Chair4,
Chair5,
Chair6,
Chair7,
Chair8,
Chair9,
Chair10
}
[SyncVar]
public GameState gameState;
Here are the buttons that change the materials
if (GUILayout.Button("Change tree Color", GUILayout.Width(100), GUILayout.Height(60)))
{
egs = FindObjectOfType<ExampleGameSession>();
if(egs.gameState == GameState.BrownTree)
{
egs.gameState = GameState.GreenTree;
}
else if(egs.gameState == GameState.GreenTree)
{
egs.gameState = GameState.PurpleTree;
}
else
{
egs.gameState = GameState.BrownTree;
}
}
GUI.color = Color.cyan;
if (GUILayout.Button ("Change box material", GUILayout.Width (100), GUILayout.Height (60)))
{
egs = FindObjectOfType<ExampleGameSession> ();
if (egs.gameState == GameState.MetalBox)
{
egs.gameState = GameState.WoodenBox;
}
else if (egs.gameState == GameState.WoodenBox)
{
egs.gameState = GameState.MetalBox;
}
else
{
egs.gameState = GameState.MetalBox;
}
}
GUI.color = Color.green;
if (GUILayout.Button ("Change chair material", GUILayout.Width (100), GUILayout.Height (60)))
{
egs = FindObjectOfType<ExampleGameSession> ();
if (egs.gameState == GameState.BaseChair)
{
egs.gameState = GameState.Chair1;
}
else if (egs.gameState == GameState.Chair1)
{
egs.gameState = GameState.Chair2;
}
else if (egs.gameState == GameState.Chair2)
{
egs.gameState = GameState.Chair3;
}
else if (egs.gameState == GameState.Chair3)
{
egs.gameState = GameState.Chair4;
}
else if (egs.gameState == GameState.Chair4)
{
egs.gameState = GameState.Chair5;
}
else if (egs.gameState == GameState.Chair5)
{
egs.gameState = GameState.Chair6;
}
else if (egs.gameState == GameState.Chair6)
{
egs.gameState = GameState.Chair7;
}
else if (egs.gameState == GameState.Chair7)
{
egs.gameState = GameState.Chair8;
}
else if (egs.gameState == GameState.Chair8)
{
egs.gameState = GameState.Chair9;
}
else if (egs.gameState == GameState.Chair9)
{
egs.gameState = GameState.Chair10;
}
else if (egs.gameState == GameState.Chair10)
{
egs.gameState = GameState.BaseChair;
}
else
{
egs.gameState = GameState.BaseChair;
}
}
Here are the Rpc and Cmd methods :
[ClientRpc]
public void RpcBrownTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = true;
tree2.GetComponent<SpriteRenderer>().enabled = false;
tree3.GetComponent<SpriteRenderer>().enabled = false;
}
[ClientRpc]
public void RpcGreenTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = false;
tree2.GetComponent<SpriteRenderer>().enabled = true;
tree3.GetComponent<SpriteRenderer>().enabled = false;
}
[ClientRpc]
public void RpcPurpleTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = false;
tree2.GetComponent<SpriteRenderer>().enabled = false;
tree3.GetComponent<SpriteRenderer>().enabled = true;
}
[ClientRpc]
public void RpcMetalBox()
{
GameObject box = GameObject.Find ("Cube");
ChangeMaterial cm = box.GetComponent<ChangeMaterial> ();
cm.rend.sharedMaterial = cm.material[0];
}
[ClientRpc]
public void RpcWoodenBox()
{
GameObject box = GameObject.Find ("Cube");
ChangeMaterial cm = box.GetComponent<ChangeMaterial> ();
cm.rend.sharedMaterial = cm.material[1];
}
[ClientRpc]
public void RpcBaseChair()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[0];
}
[ClientRpc]
public void RpcChair1()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[1];
}
[ClientRpc]
public void RpcChair2()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[2];
}
[ClientRpc]
public void RpcChair3()
{
GameObject chair = GameObject.Find("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[3];
}
[ClientRpc]
public void RpcChair4()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[4];
}
[ClientRpc]
public void RpcChair5()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[5];
}
[ClientRpc]
public void RpcChair6()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[6];
}
[ClientRpc]
public void RpcChair7()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[7];
}
[ClientRpc]
public void RpcChair8()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[8];
}
[ClientRpc]
public void RpcChair9()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[9];
}
[ClientRpc]
public void RpcChair10()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[10];
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
[Command]
public void CmdBrownTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = true;
tree2.GetComponent<SpriteRenderer>().enabled = false;
tree3.GetComponent<SpriteRenderer>().enabled = false;
}
[Command]
public void CmdGreenTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = false;
tree2.GetComponent<SpriteRenderer>().enabled = true;
tree3.GetComponent<SpriteRenderer>().enabled = false;
}
[Command]
public void CmdPurpleTree()
{
GameObject tree1 = GameObject.Find ("tree1");
GameObject tree2 = GameObject.Find ("tree2");
GameObject tree3 = GameObject.Find ("tree3");
tree1.GetComponent<SpriteRenderer>().enabled = false;
tree2.GetComponent<SpriteRenderer>().enabled = false;
tree3.GetComponent<SpriteRenderer>().enabled = true;
}
[Command]
public void CmdMetalBox()
{
GameObject box = GameObject.Find ("Cube");
ChangeMaterial cm = box.GetComponent<ChangeMaterial> ();
cm.rend.sharedMaterial = cm.material[0];
}
[Command]
public void CmdWoodenBox()
{
GameObject box = GameObject.Find ("Cube");
ChangeMaterial cm = box.GetComponent<ChangeMaterial> ();
cm.rend.sharedMaterial = cm.material[1];
}
[Command]
public void CmdBaseChair()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[0];
}
[Command]
public void CmdChair1()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[1];
}
[Command]
public void CmdChair2()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[2];
}
[Command]
public void CmdChair3()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[3];
}
[Command]
public void CmdChair4()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[4];
}
[Command]
public void CmdChair5()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[5];
}
[Command]
public void CmdChair6()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[6];
}
[Command]
public void CmdChair7()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[7];
}
[Command]
public void CmdChair8()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[8];
}
[Command]
public void CmdChair9()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[9];
}
[Command]
public void CmdChair10()
{
GameObject chair = GameObject.Find ("WoodenChair").transform.Find("chair").gameObject;
ChangeMaterial cm = chair.GetComponent<ChangeMaterial>();
cm.rend.sharedMaterial = cm.material[10];
}
And here is the relevant part of the Update in the ExampleGameSession class.
void Update()
{ if (gameState == GameState.BrownTree) {
RpcBrownTree ();
CmdBrownTree ();
}
if (gameState == GameState.GreenTree) {
RpcGreenTree ();
CmdGreenTree ();
}
if (gameState == GameState.PurpleTree) {
RpcPurpleTree();
CmdPurpleTree();
}
if (gameState == GameState.MetalBox) {
RpcMetalBox ();
CmdMetalBox ();
}
if (gameState == GameState.WoodenBox) {
RpcWoodenBox ();
CmdWoodenBox ();
}
if (gameState == GameState.BaseChair) {
RpcBaseChair ();
CmdBaseChair ();
}
if (gameState == GameState.Chair1) {
RpcChair1 ();
CmdChair1 ();
}
if (gameState == GameState.Chair2) {
RpcChair2 ();
CmdChair2 ();
}
if (gameState == GameState.Chair3) {
RpcChair3 ();
CmdChair3 ();
}
if (gameState == GameState.Chair4) {
RpcChair4 ();
CmdChair4 ();
}
if (gameState == GameState.Chair5) {
RpcChair5 ();
CmdChair5 ();
}
if (gameState == GameState.Chair6) {
RpcChair6 ();
CmdChair6 ();
}
if (gameState == GameState.Chair7) {
RpcChair7 ();
CmdChair7 ();
}
if (gameState == GameState.Chair8) {
RpcChair8 ();
CmdChair8 ();
}
if (gameState == GameState.Chair9) {
RpcChair9 ();
CmdChair9 ();
}
if (gameState == GameState.Chair10) {
RpcChair10 ();
CmdChair10 (); }
The Rpc methods execute. Whenever the server changes the material of an object, it is synchronized with the client. But the client cannot change the materials at all.
I have tried also tried to write the Cmd methods as CmdBrownTree() {RpcBrownTree();} but that did not work either.
The Command methods don't work at all. What am I doing wrong ?
Your answer
Follow this Question
Related Questions
How to command dedicated server 1 Answer
Network Not Updating On All Clients PLEASE HELP!!! 0 Answers
Unet: [Command] not running 1 Answer
How to change turns on button click using HLAPI? 0 Answers
UDPClient can't receive and send ? 0 Answers