Как синхронизировать переменные в Unity3D Networking - PullRequest
0 голосов
/ 11 февраля 2019

Здравствуйте, заголовок был слишком общим, но у меня в голове несколько проблем.Я новичок в UnityNetworking.Я смотрю учебник YouTube из Quill18 и пытаюсь реализовать на моем проекте.Поэтому я знаю, что значения [SyncVar] можно устанавливать и синхронизировать только на сервере.Но даже когда я проверяю isServer> hasAuthority> isLocalPlayer, я не могу их правильно синхронизировать.Я могу только синхронизировать их только под isServer.Здесь начинается проблема ..

  • Итак, у меня есть две публичные переменные типа int с [SyncVar], и я проверяю их значения в Unity3D, если они изменились.
  • Если я изменю их в операторе isServer if, они изменятся как в Server, так и в Client на 100 и 100.
  • Но после этого, если я изменю их в hasAuthority, если оператор не изменится в том же выражениидля isLocalPlayer ...
  • Я пытался изменить их в функции перед проверкой, не работает ли isServer.
  • Даже если я попробую функцию [Command], я знаю, что она работает на сервере. Значения по-прежнему не изменились.

мой код

private void Update()
{
    ServerUpdate();
    ClientUpdate();
} 

[SyncVar] public int syncIT_1;
[SyncVar] public int syncIT_2;

void WillItSyncNow()
{
    if (isServer)
    {
        syncIT_1 = 300;
        syncIT_2 = 300;
    }       
}

[Command]
void CmdSyncPlease()
{
    syncIT_1 = 400;
    syncIT_2 = 400;
}

void ServerUpdate()
{       
    if (isServer)
    {   
        syncIT_1 = 100;
        syncIT_2 = 100;

        if (hasAuthority)
        {
            syncIT_1 = 200;
            syncIT_2 = 200;

            if (isLocalPlayer == true)
            {
                WillItSyncNow();
                CmdSyncPlease();
            }
        }
    }
}

Мой сервер-клиентПоследние значения:

enter image description here

Мой клиент Последние значения:

enter image description here

...