Unity Photon PUN 2-客户端之间的信息传输

时间:2020-06-24 08:05:19

标签: c# unity3d photon

我正在尝试在Unity游戏中使用Photon PUN 2实现多人联网。我只看了两天,所以我正在学习。很抱歉,这个长问题:

我已经管理好连接,大厅,创建/加入房间等,并在游戏过程中继续传输实时信息。由于对这些概念的理解不够,我无法自拔。

这是一个非常简单的测试游戏:一些立方体围绕一个正方形字段滚动-仅用于检查概念。

从概念上讲,有两种类型的播放器-“我的播放器”和“其他播放器”。我控制“我的玩家”的移动,我想要一些有关“其他玩家”所做的事情的信息-但是我并不一定希望仅在我的(本地)位置复制“其他玩家”的位置和状态等房间-我想要一些有关他们正在做什么的信息,然后我将决定如何处理这些信息。

在游戏开始时,我会阅读房间中的玩家列表,对于所有不是我的玩家(即未设置Player.IsLocal-因此未设置“我的玩家”),实例化“其他”玩家”。

“我的播放器”和“其他播放器”实际上是完全不同的对象-第一个移动,另一个仅存储有关远程“另一个播放器”所要执行的操作的信息。

首先,由于上述原因,尽管我想要的一部分是“其他玩家”的位置,但我不想使用PhotonTransformView-我只想获取位置(和其他)信息并知道哪个“其他玩家” '它来自。但是,当我将PhotonView附加到本地“其他播放器”副本上,然后将“其他播放器”设置为可观察对象时,编辑器立即卡在PhotonTransformView中,并说我需要该位置副本。好吧,我没有,但是一旦我删除了PhotonTransformView,它也删除了可观察的参考!如果对象进行了转换,无论它是否喜欢,它都会得到一个PhotonTransformView。

  • 问题1-我该如何阻止?

接下来,我不可避免地向我的玩家和其他玩家都放了一个PhotonView和PhotonTransformView,以查看发生了什么。好吧,我发现发生的事情是当我移动“我的播放器”时,远程场景中的“我的播放器”也移动了,“其他播放器”根本没有移动。由此我得出结论,信息似乎仅在相同类型的两个对象之间传递?即本地“其他玩家”信息仅发送给远程“其他玩家”,同上“我的玩家”。所以

  • 问题2-如何将信息从本地场景中的对象类型A传输到远程场景中的对象类型B?

我想我真正想做的是:在本地场景中,我要发送一包从我身上识别出的信息(大概是ActorNumber)。我还希望从远程场景中接收信息包,在每种情况下,信息包也都由Actor Number来标识,并获得它们后,我可以决定如何处理它们。我真的不希望自动传输任何特定信息。我收集到IPunObservable是要支持的相关接口,所以说真的,我想要的是 实现IPunObservable的独立脚本,其中我使用OnPhotonSerializeView()读取和写入信息。不确定如何使用-具有独立的脚本,我似乎需要将GameObject附加到其上,GameObjects具有您似乎无法删除的Transform组件,因此我将被迫使用PhotonTransformView。所以

  • 问题3-如果可以,我该怎么做?

我并不真正担心人们是否认为我想做的事是否明智-这实际上只是一种学习练习,以了解架构的工作原理和所允许的内容。一旦弄清楚了,就可以决定真正的实现了。但是-首先是知识。

因此,在此基础上,我们将不胜感激地获得任何解释性帮助!

1 个答案:

答案 0 :(得分:0)

这可能不是“正常”的答案,但我得出的结论是,这是迄今为止避免较高级别的“助手”(PhotonView等)的最简单解决方案,而仅使用RaiseEvent()发送所有消息/ OnEvent()。

通过这种方式,您可以将所需的内容,所需的时间,所需的时间以及所需的位置发送给您。然后,只需在顶部构建自己的逻辑即可。这样,可能性非常广泛。

在Photon文档中有一个明显的陈述,表明这是Photon使用的基本机制。