如何在Unity3D网络中同步变量

时间:2019-02-10 21:20:39

标签: c# unity3d unity3d-unet

你好标题太笼统了,但是我心里有几个问题。我是UnityNetworking的新手。我正在观看quill18上的youtube教程,并尝试在我的项目中实施。因此,我知道[SyncVar]值只能在服务器中设置和同步。但是,即使我检查了isServer> hasAuthority> isLocalPlayer,我也无法正确同步它们。我只能仅在isServer下进行同步。问题开始了。

  • 因此,我有两个带[SyncVar]的公共int变量,如果它们发生更改,我将从Unity3D检查它们的值。
  • 如果我在isServer if语句下更改它们,则它们在Server和Client中都将更改为100和100。
  • 但是在此之后,如果我在hasAuthority if语句中更改它们,则它们不会更改,同样适用于isLocalPlayer ...
  • 我尝试在检查isServer是否无效之前在函数中更改它们。
  • 即使我尝试使用[Command]函数,我也知道它在Server中运行的值仍然没有变化。

我的代码

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

0 个答案:

没有答案