Я пытаюсь использовать SyncVar, но я не совсем понимаю, что я делаю неправильно, если я делаю это неправильно. Вот ситуация:
У меня есть две общедоступные SyncVar: redFunds и blueFunds и две локальные «старые» версии для сравнения.
Я инициирую SyncVar в меню «Пуск» с помощью Cmd_UpdateXxx, это работает
У меня есть две кнопки, по одной для каждой SyncVar
В обновлении я сравниваю SyncVar и oldXxxFunds. Если хит я показываю на сцене
Когда я запускаю код, он отображает правильные числа на сцене на обоих проигрывателях (красный и синий), но это не полностью отражается в редакторе при просмотре «общедоступных» SyncVar. При нажатии красной кнопки это отражается в редакторе только на красном игроке, а не на синем.
Может кто-нибудь объяснить мне, что я делаю неправильно здесь? ... если я делаю что-то не так. Разве я не должен увидеть изменения и в редакторе?
[SyncVar] public int redFunds;
[SyncVar] public int blueFunds;
public int oldRedFunds;
public int oldBlueFunds;
private void Start ()
{
if (!isLocalPlayer)
return;
Cmd_UpdateRed (10);
Cmd_UpdateBlue (20);
}
// Button
void btn_Red ()
{
if (!hasAuthority)
return;
Cmd_UpdateRed (10000);
}
void btn_Blue ()
{
if (!hasAuthority)
return;
Cmd_UpdateBlue (20000);
}
[Command]
void Cmd_UpdateRed (int _value)
{
redFunds = _value;
}
[Command]
void Cmd_UpdateBlue (int _value)
{
blueFunds = _value;
}
void Update ()
{
if (redFunds != oldRedFunds)
{
txt_RedTotalFunds = GameObject.Find ("txt_RedTotalFunds").GetComponent<Text> ();
txt_RedTotalFunds.text = "$" + redFunds;
oldRedFunds = redFunds;
}
if (blueFunds != oldBlueFunds)
{
txt_BlueTotalFunds = GameObject.Find ("txt_BlueTotalFunds").GetComponent<Text> ();
txt_BlueTotalFunds.text = "$" + blueFunds;
oldBlueFunds = blueFunds;
}
}