NetworkIdentity

NetworkIdentity组件是一个Unity组件,它是新网络系统的核心。它可以从AddComponents-> Network-> NetworkIdentity菜单项添加到对象中。该组件控制对象的网络身份,并使网络系统知道它。这显示了NetworkIdentity组件在对象上的外观:

 6.76 NetworkIdentity  - 图1

使用Unity网络系统的服务器授权系统时,使用NetworkServer.Spawn()必须由服务器“生成”具有NetworkIdentities的网络对象。这会导致它们被分配一个NetworkInstanceId并在连接到服务器的客户端上创建。

场景对象与动态实例化对象有所不同。这些对象都出现在客户端和服务器的场景中。但是,在构建游戏时,所有具有网络身份的场景对象都将被禁用。当客户端连接到服务器时,服务器通过生成消息告诉客户端应该启用哪些场景对象以及他们最新的状态信息是什么。这可以确保客户端在开始播放时不会包含放置在当前不正确位置的对象,甚至不会在连接时立即删除对象,因为某些事件在客户端连接之前将其删除。Server Only复选框将确保此特定对象不会在客户端生成或启用。

Local Player Authority设置允许该对象由拥有它的客户端进行控制-该客户端上的本地玩家对象有权限的。这由其他组件如NetworkTransform使用。

该组件包含跟踪信息,如已分配对象的场景ID,网络ID和资产ID。场景ID在具有NetworkIdentity组件的所有场景对象中都有效。网络ID是此特定对象实例的ID,可能有多个实例化特定对象类型的对象,并且网络ID用于标识哪个对象,例如应用网络更新。资产ID是指实例化对象的源资产。当在网络上产生特定对象预制时,这在内部使用。该信息显示在检视面板底部的预览面板中:

 6.76 NetworkIdentity  - 图2

运行时在此处显示更多信息(禁用的NetworkBehaviour以非粗体显示):

 6.76 NetworkIdentity  - 图3

属性

属性功能
assetId这标识与此对象关联的预制(用于生成)。
clientAuthorityOwner拥有此对象权限的客户端。如果没有客户有权限,这将是空的。
connectionToClient与此NetworkIdentity关联的连接。这仅适用于服务器上的玩家对象。
connectionToServer与此NetworkIdentity关联的连接。这仅适用于本地客户端上的玩家对象。
hasAuthority如果此对象是对象的授权版本,则为true。所以无论是在服务器上,还是在使用localPlayerAuthority的客户端上。
isClient如果此对象在客户端上运行,则为true。
isLocalPlayer如果这个对象是代表本地机器上玩家的那个,则返回true。
isServer如果此对象正在服务器上运行并且已生成,则为true。
localPlayerAuthority如果此对象由拥有它的客户端控制,则为true - 该客户端上的本地玩家对象拥有该权限。这由其他组件如NetworkTransform使用。
netId此网络会话的唯一标识符,在产生时分配。
observers能够看到此对象的客户端NetworkConnection的列表。这是只读的。
playerControllerId与此对象关联的控制器的标识符。仅对玩家对象有效。
sceneId场景中联网对象的唯一标识符。这只在播放模式中填充。
serverOnly一个标志使得这个对象不会在客户端产生。

提示

NetworkIdentity组件放置在将生成的预制组件上。每个网络对象都需要NetworkIdentity

?