[Unity Mirror] 权威

81 篇文章 31 订阅

英文原文:

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 属性以查看哪个客户端对对象具有权限。如果为空,则服务器具有权限。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值