Como sincronizar propriedades de GameObject que não são do jogador no UNet / Unity5?
Estou trabalhando e aprendendo alguns conceitos básicos do Unity 5, UNET e redes. Eu fiz um jogo 3D simples, onde você gira e muda as cores dos objetos. Mas quero torná-lo multiplayer agora e estou tendo muitos problemas para descobrir como enviar as alterações pela rede para que todos os jogadores possam ver a cor de um único jogador mudar.
Parte do problema é que tem sido difícil encontrar a resposta usando o mecanismo de rede UNET mais recente. E às vezes me deparo com respostas que são da maneira mais antiga.
Portanto, a principal questão é: como faço para alterar em rede as alterações de propriedade de GameObject? Cor, forma, tamanho, etc.
Aqui está um código que eu tenho agora - e eu tive muitas versões diferentes, então vou postar a atual:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Player_Paint : NetworkBehaviour {
private int range = 200;
[SerializeField] private Transform camTransform;
private RaycastHit hit;
[SyncVar] private Color objectColor;
[SyncVar] private GameObject objIdentity;
void Update () {
CheckIfPainting();
}
void CheckIfPainting(){
if(Input.GetMouseButtonDown(0)) {
if (Physics.Raycast (camTransform.TransformPoint (0, 0, 0.5f), camTransform.forward, out hit, range)) {
string objName = hit.transform.name;
CmdPaint(objName);
}
}
}
[ClientRpc]
void RpcPaint(){
objIdentity.GetComponent<Renderer>().material.color = objectColor;
}
[Command]
void CmdPaint(string name) {
objIdentity = GameObject.Find (name); //tell us what was hit
objectColor = new Color(Random.value, Random.value, Random.value, Random.value);
RpcPaint ();
}
}
Eu tentei várias outras soluções, incluindo escrever um script separado nos objetos cuja cor eu quero mudar e incluir as funções [SyncVar] e hook. Eu também tentei o Debug.Log em cada uma das funções que espero atualizar os objetos nos clientes e eles estão executando com os dados esperados.
Realmente não sei mais o que fazer. Eu sinto que é uma coisa MUITO simples que eu quero fazer, mas não encontrei a sincronização de GameObject de outros jogadores em nenhuma pergunta, tutorial ou outro recurso. Qualquer idéia seria útil, obrigado.