c# - 如何在 Unity3D Networking 中同步变量
问题描述
你好标题太笼统了,但我有几个问题。我是 UnityNetworking 的新手。我正在观看 quill18 的 youtube 教程并尝试在我的项目中实施。所以我知道 [SyncVar] 值只能在服务器中设置和同步。但即使我检查 isServer > hasAuthority > isLocalPlayer 我也无法正确同步它们。我只能在 isServer 下同步它们。这里是问题开始..
- 所以我有两个带有 [SyncVar] 的公共 int 变量,如果它们发生变化,我会从 Unity3D 检查它们的值。
- 如果我在 isServer if 语句下更改它们,它们在服务器和客户端中都更改为 100 和 100。
- 但在此之后,如果我在 hasAuthority if 语句中更改它们,它们不会更改,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();
}
}
}
}
我的服务器客户端最新值:
我的客户最新价值观: