Question to RPC and Command (Unet)
Hello, I have a question about synchronization in Unet. I am practising making Multiplayer Games and my idea was to make a small game where you have a bunch of cubes in front of you and by hovering over these cubes they turn into your player color. There is a timer and the player who has in the end most cubes with his color wins the game. So that demands that cubes get synchronized on all clients. So here I really tried for hours, but I simply dont get it as it seems.
Here is the code on the cube: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking;
public class ClickCube : NetworkBehaviour {
[SyncVar]
public GameObject owner;
public Renderer r;
private void Start()
{
r = GetComponent<Renderer>();
}
private void OnMouseOver()
{
owner = GameObject.FindGameObjectWithTag("Player");
if(isServer)
{
RpcUpdateCube(owner);
}
else
{
CmdUpdateCube(owner);
}
}
[Command]
public void CmdUpdateCube(GameObject ownerU)
{
owner = ownerU;
}
[ClientRpc]
public void RpcUpdateCube(GameObject ownerU)
{
owner = ownerU;
transform.name = "Cube " + owner;
r.material.color = owner.GetComponent<Player>().matColor;
}
}
If you know a solution. That would be awesome :D I have made some tries with a variety of code. I already know that this here is basically flawed. I just cut out all the experiments and what already worked was that the host could color cubes and the color of the cubes on the other clients also changed. But when a non-host hovers over a cube then the color changes on this client but the host doesnt get informed about it. I could only test it with a host and a client so far, so I dont know what would happen with multiple clients + host. My question is more about how this would work in general and not how this particular code could be improved. Thanks for help!