编辑房间和入口
示例 SceneTree
综合所有内容,这就是一个示例场景树:
- RoomGroup 来表示外部区域。
- Room 内部的 MeshInstance 不是
STATIC就是DYNAMIC。 - Spatial(我决定称之为“Freeform”自由,你可以随便起名)用来放置需要自动放置到房间里的
STATIC和DYNAMIC对象。(Freeform 在roomlist里,但不在房间之中。) roomlist之外的分支上。ROAMING,因此可以进入任意房间。roomlist之外。在 Blender 中创建房间系统(或者其他建模工具)
你可以完全在编辑器中创建房间系统,也可以在建模工具中建立。有一个小问题—Blender等建模工具不了解Room、RoomGroup和Portal节点。为了解决这个问题,我们使用了一系列的命名规则。当Godot首次遇到这些命名特别的节点时,把它们转换成Room、RoomGroups和Portals。后缀约定
-room变成 Room。-roomgroup变成 RoomGroup。-portal变成 Portal。-bound变成手动边界。-room空物体的子网格就会被自动放进该房间。 例如:kitchen-room- 创建名为“kitchen”的 Room。outside-roomgroup- 创建名为“outside”的 RoomGroup。kitchen-portal- 创建通向“kitchen”房间的 Portal。入口
入口与房间不同。对于入口,除了名称之外,我们还需要在建模工具中指定入口的几何形状。对于这点,你的“待建入口”应该被创建为网格。 Portal 节点一旦转换完成,就会强制吸附到入口平面,顶点会以 2D 坐标而不是 3D 点的形式给出(编辑时亦然)。-portal让 Godot 尝试自动链接入口,也可以把想要链接的房间名作为入口的前缀。通配符
kitchen-portal这样的名字就可以了。然而还有一个问题。Blender 和 Godot 并不善于处理多个对象名称相同的情况,那么我们想让厨房(kitchen)的入口不止一个该怎么办呢? 通配符*。Godot 读到名称中的通配符时,就会忽略后续的内容。 也就是说,我们可以使用如下的门的名称:kitchen*1-portal- 创建通往 “kitchen” 的门。kitchen*2-portal- 同样创建通往 “kitchen” 的门。kitchen*anything_you_want_here-portal- 也行。 使用这些命名约定的节点都支持使用通配符。手动定界
手动边界是一种为房间显式设置凸体的方式,如果它们作为场景树中房间的子项出现,则会使用它们。除了后缀,命称并不重要。它们应该是网格,即 Godot 中的 MeshInstance。注意,它们是在转换的过程中,转换为凸体,所以不一定完美。 小技巧IGNORE入口模式,不会被显示。你也可以在编辑器中使用Generate Points,将这些点转换为存储在房间中的一组点,并删除原来的-bound网格实例。编辑入口点
入口由入口节点的变换和形成角的一组点的组合来定义。 默认入口有 4 个角,检查器中会显示: 您可以在 Gizmo 或检查器中编辑这些点,以在游戏关卡的开场中有更好地匹配。为了提高系统效率,通常,最好尽可能保持少的点。例如,与其花时间在 20 个不同的边上剔除对象,不如尝试更多渲染。编辑房间点
生成点按钮来创建它们。这将把自动或手动绑定的几何体转移到检查器中。一旦检查器中出现了点,它们就会被使用,并覆盖其他的方式。因此,如果你想恢复手动编辑,请删除所有房间的点。 完全获得您想要的正确结果的情况下。在生成点之前,在房间的检查器中使用大量Simplification通常是个好主意。注,默认情况下,Simplification值将从RoomManager继承。RoomManager
显示调试(Show Debug)
false。调试蔓延(Debug Sprawl)
Portal Margin 的目的。合并网格(Merge Meshes)
STATIC网格(也被称作静态批处理)。很多情况下都能提升性能。虽然降低了剔除的精度,但是因为房间通常是剔除的逻辑单元,这样的折衷方案通常能帮到你。平面简化(Plane Simplification)
0(不简化)和1(最简)之间选择简化的程度。也可以在单独的房间上覆盖这个值。入口
入口激活(Portal Active)
入口可以在运行时打开和关闭。如果你有可以打开和关闭的房门,就很有用。双向(Two Way)
入口可以是双向的也可以是单向的。在大多数情况下,默认的双向入口设置起来比较快,但单向入口在某些情况下也很有用。例如,你可以使用单向入口来创建可以看到外面,但看不到里面的窗口。这可以改善从室外查看建筑物的性能。粒子系统
STATIC粒子系统时,转换时的AABB尺寸可能是零。因此,粒子系统可能会被意外地提前剔除。为了防止这种情况,可以将粒子系统的portal mode入口模式设置为DYNAMIC,或者在 几何检查器中为粒子系统添加额外的剔除边界Extra Cull Margin。MultiMesh
请注意,多重网格被当作一组剔除,而不是单独剔除,因此,你应该尽可能地将其保持在同一区域内。
