首页 > 解决方案 > PhotonView CreatorActorNr、OwnerActorNr 和 ControllerActorNr 的区别

问题描述

在光子中有什么区别

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

标签: c#unity3dphoton

解决方案


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

  • PhotonView Creator
    aPhotonView或“instantiator”(或“spawner”)的创建者是调用PhotonNetwork.Instantiate. 此演员编号是 的一部分,PhotonView.ViewID并使用 确定ViewID / PhotonNetwork.MAXVIEWIDS。的ViewIDaPhotonView 没有改变,所以创建者 ID 也没有改变。在“网络房间对象”的情况下,没有创建者(null/0),因此网络对象不是由参与者创建的,而是与房间相关联。

  • PhotonView Owner
    的所有者PhotonView表示默认PhotonView的Controller 。

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

  • PhotonView Controller 控制
    的actor PhotonView(具有状态权限)。

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

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

    photonView.IsMine指示 是否PhotonNetwork.LocalPlayer是 this 的当前控制器photonView

对于CreatorvsOwner另请参阅

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

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

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

然后Controller变得有点棘手:

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

    • 有一个Owner(=> 不是场景对象)
    • 所有者已连接并处于活动状态
  • 特定于场景对象(因此尚未由任何人生成但从一开始就存在于场景中的 photonview 的对象)do not have an owner

    这意味着除了当前没有人isMine会是真实的,即使他不是这个对象的真实,但是根据文档/定义,他是对象的当前。所以在不改变的情况下仍然可以随着时间的推移而改变。MasterClientOwnerControllerOwnerControllerMasterClient

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

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

我希望这有点道理,至少这是我解释文档的方式。


推荐阅读