繁体   English   中英

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

[英]Unity Photon PUN 2 - transfer of information between clients

我正在尝试在 Unity 游戏中使用 Photon PUN 2 实现多人网络。 我只看了两天,所以我正在学习 go。 对不起,很长的问题:

我已经管理了连接、大厅、创建/加入房间等,并且正在继续在游戏过程中传输实时信息。 由于对概念的理解不够好,我陷入了困境。

这是一个非常简单的测试游戏:一些立方体在方形场地周围翻滚——只是为了检查概念。

从概念上讲,有两种类型的玩家——“我的玩家”和“其他玩家”。 我控制“我的玩家”的移动,我想要一些关于任何“其他玩家”在做什么的信息 - 但是我不一定想要“其他玩家”的位置和 state 等只是在我的(本地)中复制房间 - 我想要一些关于他们在做什么的信息,然后我将决定如何处理这些信息。

在游戏场景的启动时间,我阅读了房间中的玩家列表,并且对于所有不是我的玩家(即 Player.IsLocal 未设置 - 所以不是“我的玩家”),实例化一个“其他玩家”一个预制件。

“我的玩家”和“其他玩家”实际上是完全不同的 object 类型 - 第一个移动,另一个只是存储有关远程“其他玩家”在做什么的一些信息。

首先,由于上述原因,虽然我想要的部分是“其他玩家”position,但我不想使用 PhotonTransformView - 我只想获取位置(和其他)信息并知道它来自哪个“其他玩家”从。 但是,当我将 PhotonView 附加到本地“其他播放器”副本,然后将“其他播放器”设置为可观察的 object 时,编辑器立即卡在 PhotonTransformView 中,并说我需要它来复制 position。 好吧,我没有,但是一旦我删除了 PhotonTransformView,它也删除了可观察的引用,如果 object 有一个变换,它就会出现。 不管喜欢与否,它都会得到一个 PhotonTransformView。

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

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

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

我想我真正想做的是:在本地场景中,我想发送一个 package 标识为来自我的信息(大概是 ActorNumber)。 我还想接收来自远程场景的信息包,在每种情况下也由演员编号标识,得到它们后,我可以决定如何处理它们。 我真的不想自动传输任何特定的信息。 我收集 IPunObservable 是要支持的相关接口,所以实际上,我想要的是一个实现 IPunObservable 的独立脚本,我可以在其中使用 OnPhotonSerializeView() 来读取和写入信息。 不知道如何 - 有一个独立的脚本,我似乎需要一个 GameObject 来附加它,GameObjects 有看起来你无法删除的变换组件,所以我将被迫使用 PhotonTransformView。 所以

  • 问题 3 - 我可以这样做吗,如果可以,怎么做?

我并不真正关心人们是否认为我正在尝试做的事情是否明智——这实际上只是一个学习练习,以了解架构如何工作以及它允许什么。 一旦我弄清楚了,我就可以决定真正的实施。 但是 - 首先是知识。

因此,在此基础上,任何解释性帮助都非常感激!

这可能不是“正常”的答案,但我得出的结论是,这是迄今为止避免更高级别的“助手”(PhotonView 等)的最简单的解决方案,并且只需使用 RaiseEvent() / OnEvent( )。

这样,您就可以发送您想要的、您想要的方式、您想要的时间以及您想要的地方。 然后在上面构建你自己的逻辑。 有了这个,可能性非常广泛。

Photon 文档中有一个明确的声明,大意是这是 Photon 使用的底层机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM