我正在使用Unity进行网络游戏。我想使用PUN2配置网络。特别是,我注意到我可以通过OnPhotonSerializeView()方法同步几个基本变量。但是,这不包括自定义类,例如GameObject和Transform。那么我应该怎么做才能在该检查器视图中同步目标变换?
答案 0 :(得分:0)
有几种方法可以解决此问题。这取决于您需要该目标的目的,以及是否使该对象在其他客户端上存在(如果没有任何对象作为目标)。
假设您已同步了播放器,并且场景中有一个蓝球和一个红球。 球员有一个他们“持球”的球。您希望触发所有客户端上的同步,如果玩家拿着一个红球,它将为所有客户端握住,如果他们拿着蓝色的球,则将对所有客户端握住。
将一个客户中的蓝球与其他所有人中的所有蓝球联系起来的问题。
选项a)给每个球起一个名字,并有一些静态字典将其名称映射到场景中的对象(您可以使它们添加到“觉醒”或“起球”中)。现在,您可以同步球员持有的球的名称(与对象相对的字符串)。当客户获得名称更改时,您可以通过在静态字典中查找名称更改并将其设置为要持有的名称来处理名称更改。
选项b)同步球员和球。任何与逻辑相关的事情都只会在当前玩家身上发生。因此,如果本地玩家握住一个球,则该玩家的位置将被同步,该球的位置将被同步,但其他玩家将不会发生任何其他事情。当然,这假定此方法适用于您要完成的所有任务。
选项c)序列化球。发送描述球(大小,颜色等)的数据,并在客户端上创建一个新实例。这不会与客户端上任何现有的球绑定。您可能需要检查并销毁已经持有的任何一个球。从性能角度来看,这可能是实现此目的的最无效的方法。