PhotonView CreatorActorNr、OwnerActorNr 和 ControllerActorNr 的区别

Posted

技术标签:

【中文标题】PhotonView CreatorActorNr、OwnerActorNr 和 ControllerActorNr 的区别【英文标题】:PhotonView difference between CreatorActorNr, OwnerActorNr & ControllerActorNr 【发布时间】:2021-11-13 05:20:09 【问题描述】:

在Photon中有什么区别

CreatorActorNr OwnerActorNr ControllerActorNr

我只在 PhotonView 的 API 中找到了它们,但它并没有解释相关实体/目的之间的区别。

【问题讨论】:

【参考方案1】:

这在Photon - Ownership & Control -> Definitions中有更好的解释

PhotonView 创作者 PhotonView 或“实例化者”(或“生成器”)的创建者是调用PhotonNetwork.Instantiate 的演员。该演员编号是PhotonView.ViewID 的一部分,由ViewID / PhotonNetwork.MAXVIEWIDS 确定。 PhotonView ViewID 不会改变,因此创建者 ID 也不会改变。如果是“网络房间对象”,则没有创建者 (null/0),因此网络对象不是由参与者创建的,而是与房间相关联。

PhotonView 所有者 PhotonView 的所有者表示PhotonView默认控制器

在“联网房间对象”的情况下,没有所有者(null),因为对象归房间所有,而不是演员。如果有所有者,如果后者是活动的,它也是控制器。否则,主客户端拥有控制权。

PhotonView 控制器 控制PhotonView 的参与者(拥有国家权力)。

所有者始终是控制者,除非:

所有者为空;那么主客户端就是控制器。 所有者与房间断开连接;如果PlayerTTL 大于0,则演员有可能暂时离开房间并稍后重新加入。当所有者软断开时,主客户端成为控制器,当所有者重新加入时,所有者恢复控制。

photonView.IsMine 表示PhotonNetwork.LocalPlayer 是否是此photonView 的当前控制器。

对于CreatorOwner,另请参阅

所有权可以通过 PhotonView.TransferOwnership 转让给另一个玩家,或者任何玩家都可以通过调用 PhotonView 的 RequestOwnership 方法来请求所有权。当前所有者必须实现 IPunCallbacks.OnOwnershipRequest 以响应所有权请求。

所以用我自己的话来说,我会这样理解:

Creator 是创建对象的人(默认拥有它)。此 ID 永远不会改变。 Owner 是当前拥有该对象的人,或者与创建者相同,或者所有权以某种方式转移。对于场景对象,根本没有设置。

然后Controller 变得有点棘手:

这要么简单地等于Owner 如果这个对象

有一个Owner(=> 不是场景对象) 所有者已连接并处于活动状态

特定于场景对象(因此对象尚未由任何人生成,但从一开始就存在于场景中的光子视图中)do not have an owner

这意味着对于任何人来说isMine 将是真实的对象的当前Controller。因此,在不更改 Owner 的情况下,如果 MasterClient 更改,Controller 仍会随时间而更改。

最后一种情况是不是场景对象的对象(因此有人生成并最初拥有它们),但当前的Owner(在那一刻)不再连接和活动,因此MasterClient 自动声称控制它直到所有者返回.. 或者如果这没有发生,则永远。

长话短说:在大多数情况下,ControllerID 是最有意义的值。

我希望这有点道理,至少我会这样解释文档。

【讨论】:

以上是关于PhotonView CreatorActorNr、OwnerActorNr 和 ControllerActorNr 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Unity PhotonView 是我的检查

一个简单的吃鸡背包编写——1

PUN使用

如何通过Photon PUN同步变量

多人 Unity 游戏单独运行

使用 PUN 同步运行时导入的对象