2016-09-11 6 views
2

Я пытаюсь синхронизировать цвет своего куба с моего сценария сервера. У меня есть компонент Network Transform и Network Identity, и преобразование синхронизации работает хорошо, теперь мне нужно будет синхронизировать цвет. Мне нужно что-то вроде компонента «Сетевой материал» или как мне это сделать? Спасибо :) (я надеюсь, что вы получили то, что я имею в виду, извините за английский.)Unity 5 network color sync

ответ

1

Вы можете синхронизировать значения с помощью атрибута SyncVar:

[SyncVar] 
Color myColor; 

Это позволит сохранить изменения синхронизирована на клиентах и ​​сервере. Но это всего лишь поле в вашем классе цветового типа, оно фактически не изменяет цвет вашего рендера.

Вы можете изменить цвет вашего рендера на значение myColor в обратном вызове Update, но оно обновит его, даже если цвет не изменится.

Наилучший подход будет использовать крюк:

[SyncVar (hook = "OnColorChanged")] 
Color myColor; 

Это называют «OnColorChanged» функцию каждый раз, когда цвет обновляется.

Что-то, как это должно работать (если вы работаете с SpriteRenders):

[SyncVar (hook = "OnColorChanged")] 
Color myColor; 

void OnColorChanged(Color value) 
{ 
    myColor = value; 
    GetComponent<SpriteRenderer>().color = myColor; 
} 
+0

Спасибо за ваш ответ, поэтому я добавил этот код в мой клиент и сетевой сценарий, но я получаю эту ошибку теперь: ошибка UNetWeaver: скрипт UnityEngine.Networking.ConnectClient использует [SyncVar] myColor, но не является NetworkBehaviour. – sudoman281

+0

При объявлении класса он обычно происходит от MonoBehaviour, но для работы SyncVar он должен быть получен из NetworkBehaviour. Измените объявление класса из 'public Class myClass: MonoBehaviour' на' public Class myClass: NetworkBehaviour' – Leo

+0

Спасибо, изменив MonoBehaviour на Network, разрешил ошибку. Но мой куб не меняет цвет. Мой код: http://pastebin.com/TAStVciy – sudoman281