gpt4 book ai didi

unity-game-engine - 没有 NetworkServer.Spawn 的 SyncVar

转载 作者:行者123 更新时间:2023-12-02 15:40:11 25 4
gpt4 key购买 nike

我有一个在运行时生成和配置的有点复杂的对象树。由于服务器和客户端都可以获得执行此操作所需的信息,因此我希望双方独立生成对象,然后将联网部分链接起来以便随后同步。

也就是说,我需要一种方法来使 SyncVar 为存在于服务器和客户端但最初不是通过 NetworkServer.Spawn 生成的对象工作。有没有办法手动配置 NetworkIdentity 以便 Unity 网络系统知道某些东西是同一个对象?

我自己有能力在网络上唯一地识别这些对象,我只需要一种方法将其传达给 Unity。 NetworkIdentity.netId 是只读的,因此这不是一个选项。

最佳答案

如果您完全由服务器完成所有初始化,然后将其推送到客户端,则无需事后同步。这也将消除处理重复信息的需要(这最终会浪费客户端的 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 以外的任何内容,因为它是它的直接祖先。

关于unity-game-engine - 没有 NetworkServer.Spawn 的 SyncVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com