网络视图 (Network View) 是有关于网络上共享数据的主要组件。网络视图允许两种网络通信方式:状态同步 (State Synchronization) 和远程过程调用 (Remote Procedure Calls)。

网络视图随时观察特定对象以检测变化。这些变化会在之后共享到在网络上的其他客户端,以确保所有网络视图都知道这个状态变化。这个概念称为状态同步,有关更多详细信息,请参阅状态同步页面。

某些情况下,例如当发出新对象或新建播放器的位置时,您不会想要客户端的同步状态的开销。因为诸如此类的事件是罕见的,所以同步参与对象的状态没有意义。这时,您可以使用一个远程过程调用来告诉客户端或服务器执行像这样的操作。关于“远程过程调用”(Remote Procedure Call) 的更多详细信息,请参阅RPC 手册页面。

技术细节

网络视图 (Network View) 是通过其 NetworkViewID 在网络上被识别的。NetworkViewID 本质上只是一个联网设备中协定的独一无二的标识符。其表示为一个 128 位的数字,但如有可能,当在网络上传输时将自动压缩到 16 位。

到达客户端的每个数据包都需要应用于由 NetworkViewID 指定的特定网络视图。这样 Unity 就可以找到合适的网络视图,解压数据并将输入的数据包应用到网络视图观察的对象。

有关在编辑器中使用网络视图的更多详细信息,请参阅网络视图组件参考页面。

如果使用 Network.Instantiate() 来创建联网对象,则不需要担心分配网络视图也不用操心自己是否可以恰当地指派。所有工作将在后台自动完成。

然而,您可以通过使用 Network.AllocateViewID 为每个网络视图手动设置 NetworkViewID 值。“脚本参考”文档展示了如何使用 RPC 功能在每个客户端上手动实例化对象,然后使用 AllocateViewID 手动设定 NetworkViewID 的一个示例。