C# 统一多人全局变量
我有C# 统一多人全局变量,c#,unity3d,multiplayer,C#,Unity3d,Multiplayer,我有Player(networkbehavior)script附加到Player预置上,当客户端加入时会产生该预置,还有Global(monobhavior)script,它在场景内部 在全局脚本中,我有以下内容: class Global : MonoBehaviour { public static int gloablInteger; void Start() { globalInteger = 0; } } class Player
Player(networkbehavior)
script附加到Player预置上,当客户端加入时会产生该预置,还有Global(monobhavior)
script,它在场景内部
在全局脚本中,我有以下内容:
class Global : MonoBehaviour
{
public static int gloablInteger;
void Start()
{
globalInteger = 0;
}
}
class Player : Networkbehaviour
{
public void Start()
{
Global.globalInteger++;
}
}
在播放器脚本中,我有以下内容:
class Global : MonoBehaviour
{
public static int gloablInteger;
void Start()
{
globalInteger = 0;
}
}
class Player : Networkbehaviour
{
public void Start()
{
Global.globalInteger++;
}
}
我在更新函数中设置为Debug.Log(globalInteger),它打印0
,然后第一个客户端(主机)加入并打印1
,然后第二个客户端加入并仍然打印1
,而不是2
。为什么会发生这种情况?这对我很有效
这是我的剧本
客户
void Start ()
{
globalS.g++;
Debug.Log(globalS.g); //1,2,3,4,5
}
globalS
public static int g = 0;
我想你可能会重置globalInteger的值,或者没有调用globalInteger。globalInteger++以正确的方式,注意每个GameObject Start函数在运行时只调用一次。它对我有效
这是我的剧本
客户
void Start ()
{
globalS.g++;
Debug.Log(globalS.g); //1,2,3,4,5
}
globalS
public static int g = 0;
我认为您可能重置值globalInteger,或者没有调用全局。globalInteger++请注意,每个GameObject Start函数在运行时只调用一次。每次客户端加入时,都会在Start()中将globalInteger重置为0函数。每次客户端加入时,都会在Start()函数中将globalInteger重置为0。为什么?全局纸条被附加到场景中的空对象上,当客户端加载他在每个MonoBehavior上运行Start()的场景时,它会留在那里。我是多人游戏新手,所以不知道。我会尝试一下并告诉您发生了什么如果您正在使用UNet并希望在客户端之间同步一个值使用SyncVar,但还有一个问题,我需要同步自定义类。问题是,我设置了简单的环境,但在我的代码中,它是自定义类,通过文档,它只能同步简单的类型?全局纸条被附加到场景中的空对象上,当客户端加载他在每个MonoBehavior上运行Start()的场景时,它会留在那里。我是多人游戏新手,所以不知道。我会尝试一下并告诉您发生了什么如果您正在使用UNet并希望在客户端之间同步一个值使用SyncVar,但还有一个问题,我需要同步自定义类。在这个问题上,我设置了简单的环境,但在我的代码中,它是自定义类,通过文档,它只能同步简单的类型。我知道,但由于某种原因,它不起作用。如果我有全局单行为脚本,并且使用client1对其进行了更改,client2会看到更改吗?我知道,但由于某些原因,它不起作用。如果我有全局单行为脚本,并且使用client1对其进行了更改,client2会看到更改吗?