首页 > 解决方案 > 如何在光子网络中同步 GameObject 变量?

问题描述

在此处输入图像描述

我正在使用 Unity 制作网络游戏。我想使用 PUN2 配置我的网络。特别是,我注意到我可以通过 OnPhotonSerializeView() 方法同步几个基本变量。但是,这不包括自定义类,例如 GameObject 和 Transform。那么我应该怎么做才能在该检查器视图中同步目标转换?

标签: unity3dnetworkingphoton

解决方案


有几种方法可以解决这个问题。这取决于您需要此目标的用途,以及如果它没有被任何对象作为目标,它是否会使该对象存在于其他客户端上。

假设您有同步的 Player,场景中有一个蓝球和一个红球。球员有一个他们“拿着”的球。您想在所有客户端上触发同步,如果玩家拿着一个红球,它将为所有客户端持有它,如果他们持有蓝球,它将为所有客户端这样做。

将一个客户端中的蓝球链接到其他所有人客户端中的所有蓝球的问题。

选项 a) 给每个球一个名称,并有一些静态字典将它们的名称映射到场景中的对象(您可以让它们将自己添加到球的 Awake 或 Start 上)。现在您可以同步球员所持球的名称(与对象相对的字符串)。当客户获得名称更改时,您可以将名称更改处理为在静态字典中查找它,并将其设置为被持有的球。

选项 b) 同步球员和球。任何与逻辑相关的事情都只会发生在当前玩家身上。因此,如果本地球员持球,球员位置将同步,球位置将同步,但其他球员不会发生任何其他事情。这当然假设这适用于你想要完成的任何事情。

选项 c) 序列化球。发送描述球的数据(大小、颜色等)并在客户端创建一个新实例。这不会与客户端的任何现有球相关联。您可能需要检查并销毁已经持有的任何球。就性能而言,这可能是实现这一目标的最不有效的方法。


推荐阅读