
我正在用Unity制作网络游戏。我想使用PUN2配置我的网络。特别是,我注意到我可以通过OnPhotonSerializeView ()方法同步几个基本变量。但是,这不包括自定义类,如GameObject和Transform。那么我应该做些什么来同步那个检查器视图中的Target转换呢?
发布于 2019-03-20 21:53:58
有几种方法可以解决这个问题。这取决于您需要这个目标的目的,以及如果该对象没有被任何对象作为目标,它是否会使该对象存在于其他客户端上。
假设你有一个同步的球员,场景中有一个蓝色的球和一个红色的球。球员有一个他们“拿着”的球。你想要触发一个同步,所以在所有客户端上,如果玩家拿着一个红色的球,它将为所有的客户端持有它,如果他们持有蓝色的球,它将为所有的客户端这样做。
将一个客户端中的蓝球与其他所有客户端中的所有蓝球联系起来的问题。
选项a)给每个球一个名称,并让一些静态字典将它们的名称映射到场景中的对象(您可以让它们在球的唤醒或开始时添加自己)。现在,您可以同步球员持有的球的名称(与对象相对的字符串)。当客户端获得名称更改时,您可以通过在静态字典中查找它并将其设置为持有的球来处理名称更改。
选项b)使球员和球同步。任何与逻辑相关的事情都只会发生在当前玩家身上。因此,如果本地球员持球,球员位置将同步,球位置也将同步,但其他球员不会发生任何其他事情。当然,这是假设无论你想要实现什么,这都是可行的。
选项c)序列化球。发送描述球的数据(大小、颜色等),并在客户端创建一个新实例。这将不会绑定到客户端上的任何现有球。你可能需要检查并销毁任何已经持有的球。就性能而言,这可能是实现这一目标的最低效率的方法。
https://stackoverflow.com/questions/55261411
复制相似问题