c# - PhotonView CreatorActorNr、OwnerActorNr 和 ControllerActorNr 的区别
问题描述
在光子中有什么区别
- CreatorActorNr
- OwnerActorNr
- ControllerActorNr
我只在 API 中找到了它们,PhotonView
但它没有解释相关实体/目的之间的区别。
解决方案
这在Photon - Ownership & Control -> Definitions中有更好的解释
PhotonView Creator
aPhotonView
或“instantiator”(或“spawner”)的创建者是调用PhotonNetwork.Instantiate
. 此演员编号是 的一部分,PhotonView.ViewID
并使用 确定ViewID / PhotonNetwork.MAXVIEWIDS
。的ViewID
aPhotonView
没有改变,所以创建者 ID 也没有改变。在“网络房间对象”的情况下,没有创建者(null/0),因此网络对象不是由参与者创建的,而是与房间相关联。PhotonView Owner
的所有者PhotonView
表示默认PhotonView
的Controller 。在“联网房间对象”的情况下,没有所有者(空),因为该对象由房间拥有,而不是由演员拥有。如果有所有者,如果后者是活动的,它也是控制器。否则,主客户端拥有控制权。
PhotonView Controller 控制
的actorPhotonView
(具有状态权限)。所有者始终是控制者,除非:
- 所有者为空;那么主客户端就是控制器。
- 业主与房间断开连接;如果
PlayerTTL
大于 0,则演员有可能暂时离开房间并稍后重新加入。当所有者软断开时,主客户端成为控制器,当所有者重新加入时,所有者恢复控制。
photonView.IsMine
指示 是否PhotonNetwork.LocalPlayer
是 this 的当前控制器photonView
。
对于Creator
vsOwner
另请参阅
所有权可以通过 PhotonView.TransferOwnership 转移给另一个玩家,或者任何玩家都可以通过调用 PhotonView 的 RequestOwnership 方法来请求所有权。当前所有者必须实现 IPunCallbacks.OnOwnershipRequest 以响应所有权请求。
所以用我自己的话来说,我会这样理解:
Creator
是创建对象的人(并默认拥有它)。这个 ID 永远不会改变。Owner
是当前拥有该对象的人,或者与创建者相同,或者所有权以某种方式转移。对于场景对象,这根本没有设置。
然后Controller
变得有点棘手:
这要么简单地等于
Owner
,如果这个对象- 有一个
Owner
(=> 不是场景对象) - 所有者已连接并处于活动状态
- 有一个
特定于场景对象(因此尚未由任何人生成但从一开始就存在于场景中的 photonview 的对象)
do not have an owner
。这意味着除了当前没有人
isMine
会是真实的,即使他不是这个对象的真实,但是根据文档/定义,他是对象的当前。所以在不改变的情况下仍然可以随着时间的推移而改变。MasterClient
Owner
Controller
Owner
Controller
MasterClient
最后一种情况是不是场景对象的对象(因此有人产生并最初拥有它们),但电流
Owner
(在那一刻)不再连接和激活,因此MasterClient
自动声称控制它直到所有者返回..或者如果这不会发生。
长话短说:在大多数情况下,这ControllerID
是最有意义的价值。
我希望这有点道理,至少这是我解释文档的方式。
推荐阅读
- angular - 有没有办法在图像路径中使用 angular base href 作为变量?
- python - 使用 selenium python 和 Firefox 重新打开相同的浏览器窗口
- module - 字符设备读取命令无限打印(通过cat命令)
- selenium - 如何基于 Chrome 开发工具中的元素编写 XPath?
- javascript - 无法从 JS 中的嵌套函数调用访问迭代项
- winapi - 动态数据交换 (DDE) 链路终止
- c++ - PostgreSQL:如何为我的单元测试创建一个临时用户和数据库?
- python - 从管道中读取没有结束
- python - Ceph radosgw - 存储桶策略 - 默认使所有对象公开读取
- haskell - 用 let 和 show 在 haskell 中列出理解,它有什么用?