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
的当前控制器。
对于Creator
与Owner
,另请参阅
所有权可以通过 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 的区别的主要内容,如果未能解决你的问题,请参考以下文章