Bootstrap

[Unity Mirror] 权威

英文原文:

https://mirror-networking.gitbook.io/docs/guides/authority

网络权威

权威是决定谁拥有一个对象并控制它的一种方式。

服务端权威

  服务端权威意味着服务器可以控制一个对象。默认情况下,服务器对对象具有权限。这意味着服务器将管理和控制收藏品、移动平台、NPC 和任何其他不是玩家的联网对象。

客户端权威

  客户端权威意味着客户可以控制一个对象。

  当客户端对某个对象具有权威时,这意味着他们可以调用命令,并且当客户端断开连接时该对象将自动销毁。

  即使客户端对对象具有权威,服务器仍然控制 SyncVar 并控制其他序列化功能。组件将需要使用命令来更新服务器上的状态,以便与其他客户端同步。

如何给予权威

  默认情况下,服务器对所有对象具有权限。服务器可以授予客户端需要控制的对象的权限,例如玩家对象。

  如果您使用 NetworkServer.AddPlayerForConnection 生成一个播放器对象,那么它将自动获得权限。

使用 NetworkServer.Spawn

  您可以在生成对象时授予客户端权限。这是通过将连接传递给生成消息来完成的

GameObject go = Instantiate(prefab);
NetworkServer.Spawn(go, connectionToClient);

使用 identity.AssignClientAuthority

  您可以随时使用 AssignClientAuthority 向客户端授予权限。这可以通过在要授予权限的对象上调用 AssignClientAuthority 来完成。

identity.AssignClientAuthority(conn);

  当玩家拿起物品时,您可能想要这样做

// Command on player object
void CmdPickupItem(NetworkIdentity item)
{
    item.AssignClientAuthority(connectionToClient); 
}

如何移除权威

  您可以使用 identity.RemoveClientAuthority 从对象中移除客户端权威。

identity.RemoveClientAuthority();

  无法从玩家对象中移除权威。相反,您必须使用 NetworkServer.ReplacePlayerForConnection 替换player对象。

当给予或从对象中移除权威时

  当给予或从对象中移除权威时,将向该客户端发送一条消息以通知他们。这将导致调用 OnStartAuthority 或 OnStopAuthority 函数。

检查权威

客户端

  identity.hasAuthority 属性可用于检查本地玩家是否对对象具有权限。

服务端

  可以检查 identity.connectionToClient 属性以查看哪个客户端对对象具有权限。如果为空,则服务器具有权限。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;