场景

场景兴趣管理

场景兴趣管理 (Scene Interest Management)

场景兴趣管理用于将附加场景中的网络对象与具有物理隔离的子场景进行网络连接。这意味着即使在服务器上加载了同一子场景的多个实例,对象之间的碰撞等事件仅在该子场景内发生,而不会干扰其他场景。

服务器和连接的客户端始终加载相同的主场景。使用附加场景时,这通常是一个容器场景,而附加子场景包含实际的场景内容。

设置

Scene Interest Management组件添加到与您的Network Manager相同的对象上:

添加物理模拟器

在每个子场景中,添加一个空的游戏对象,并向其添加一个**Physics Simulator(物理模拟器)**组件。由于附加场景将在服务器上加载为"physics scenes(物理场景)",Unity不会为它们模拟物理效果,因此此组件会在每个子场景中为您执行物理模拟。

环境内容

同样在每个子场景中,创建一个名为Environment(环境)的空游戏对象,带有一个Network Identity(网络标识),并将所有静态的非网络内容设置为此对象的子对象。通常,这将包括风景、建筑物、道路网格和其他非交互式内容。

生成玩家

当您实例化玩家或其他网络对象时,Unity没有任何内置机制来指定对象实例化到哪个子场景...它始终是活动场景,即我们的容器场景。在实例化后并在生成对象之前,调用SceneManager.MoveGameObjectToScene将对象移动到正确的子场景中。一旦生成,客户端中具有相同子场景中的玩家对象的可见性将被更新。如果将其移动到另一个子场景,新旧子场景中的可见性将自动更新。

请注意,网络对象仅在服务器上移动到子场景中。客户端在容器场景中生成所有内容,因此无需将对象移动到客户端的子场景中,因为客户端一次只加载一个子场景。

射线投射和类似功能

物理场景有一组特殊的方法用于射线投射等操作,必须在服务器上使用,因为服务器将子场景作为物理场景。您可以在这里了解更多信息。在远程(非主机)客户端上,射线投射使用普通方法完成,因为客户端只是将附加场景与容器合并,而不将其视为物理场景。

最后更新于

这有帮助吗?