Как синхронизировать неигровые свойства 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-ов ни в каких вопросах, руководствах или других ресурсах. Любые идеи будут полезны, спасибо.