如果您完全由服务器完成所有初始化,然后将其推送到客户端,则您无需在之后进行同步。这也将消除处理重复信息的需要(这最终会在客户端浪费 CPU 时间)。
但是,如果您想让客户端也创建数据,那么我建议您让他们将适当的消息与他们的数据一起发送到服务器,然后服务器可以为他们创建对象。
在服务器实例上使用 NetworkServer.RegisterHandler 为您需要处理的每种类型的消息设置消息处理程序,
public enum netMessages{
hello = 101,
goodbye = 102,
action = 103,
}
...
NetworkServer.RegisterHandler((short)netMessages.hello, new NetworkMessageDelegate(hdl_hello));
NetworkServer.RegisterHandler((short)netMessages.goodbye, new NetworkMessageDelegate(hdl_goodbye));
...
private void hdl_hello (NetworkMessage msg){
nmgs_hello m = msg.ReadMessage<nmgs_hello>();
...
}
并使用 NetworkClient 的 Send 方法向服务器发送消息。
您还需要为实际消息定义基于 MessageBase 的消息类。
public class nmsg_hello : MessageBase {
public int x;
public float welcomeness;
}
注意:确保您的任何网络消息都不相互依赖,这似乎是 Unity 中的错误/功能(至少我上次尝试过),如果您的消息来自其他任何东西,它就不起作用比 MessageBase 因为它的直接祖先。