权限

网络权限

权限是决定谁拥有对象并对其进行控制的一种方式。

服务器权限

服务器权限意味着服务器控制一个对象。服务器默认拥有对象的权限。这意味着服务器将管理和控制可收集物品、移动平台、NPC 和任何不是玩家的其他网络对象。

客户端权限

客户端权限意味着客户端控制一个对象。

当客户端对一个对象拥有权限时,这意味着他们可以调用Commands并且当客户端断开连接时,对象将自动销毁。

即使客户端对一个对象拥有权限,服务器仍然控制 SyncVar 和其他序列化功能。组件需要使用Commands来更新服务器上的状态,以便同步到其他客户端。

如何授予权限

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

如果使用 NetworkServer.AddPlayerForConnection 来生成玩家对象,则该对象将自动获得权限。

使用 NetworkServer.Spawn

当对象生成时,您可以通过传递连接给生成消息来授予客户端权限。

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

使用 identity.AssignClientAuthority

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

如何移除权限 (How to remove authority)

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

无法从玩家对象中移除权限。相反,您需要使用 NetworkServer.ReplacePlayerForConnection 来替换玩家对象。

关于权限

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

检查权限

客户端端

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

服务器端

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

最后更新于

这有帮助吗?