Как синхронизировать неигровые свойства GameObject в UNet / Unity5?

Я работаю и изучаю некоторые основы Unity 5, UNET и сетей. Я сделал простую 3D-игру, в которой вы ходите и меняете цвета объектов. Но я хочу сделать его многопользовательским сейчас, и у меня много проблем с выяснением того, как отправить изменения по сети, чтобы все игроки могли видеть изменение цвета одного игрока.

Часть проблемы заключается в том, что было трудно найти ответ, используя более новый сетевой механизм UNET. И иногда я сталкиваюсь с ответами, которые для старого пути.

Итак, главный вопрос в том, как мне изменить сетевые свойства GameObject, не относящиеся к игрокам? Цвет, форма, размер и т. Д.

Вот некоторый код, который у меня сейчас есть - и у меня было много разных версий, поэтому я просто опубликую текущую:

 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 ();
     }
 }

Я испробовал множество других решений, в том числе написание отдельного скрипта для объектов, цвет которых я хочу изменить, а также функции [SyncVar] и ловушек. Я также попробовал Debug.Log для каждой функции, которую я ожидаю обновить объекты на клиентах, и они выполняются с ожидаемыми данными.

Я действительно не знаю, что еще делать. Я чувствую, что это ОЧЕНЬ простая вещь, которую я хочу сделать, но я не сталкивался с синхронизацией неигровых GameObject-ов ни в каких вопросах, руководствах или других ресурсах. Любые идеи будут полезны, спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос