如何在光子网络中同步GameObject变量?

问题描述 投票:0回答:1

enter image description here

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

unity3d networking photon
1个回答
0
投票

有几种方法可以解决这个问题。这取决于您需要此目标的内容,以及是否因为对象存在于其他客户端上,如果它不是任何对象的目标。

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

将一个客户端中的蓝色球与其他所有客户端中的所有蓝色球相关联的问题。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.