房间和入口示例
Simple Portals Example 。
前言
本教程将向你介绍如何建立有两个房间的 “Hello World” 房间系统,以及中间的入口。
第一步
- 创建新项目。
- Spatial 作为场景根节点(截图里称作“Root”)。
- RoomManager 节点。我们后面处理房间系统时会用到。
- 然后我们就要开始定义我们的房间了。我们在另一个叫做“RoomList”(房间列表)的 Spatial 节点下创建房间。
- Room 节点作为房间列表的子节点。
Kitchen(厨房)。- 我们现在来创建这个房间的几何体。几何体的名字你可以随便起。
- MeshInstance 作为地板。先给 MeshInstance 添加一个 CubeMesh 资源形成盒子,然后缩放平移成地板的样子。
- 为墙壁添加几个 MeshInstance。创建的应该也是盒子网格,然后缩放平移即可。记得留一个开口,开口那一面墙需要分两段。
第二步
- 现在我们需要创建另一个房间。
Kitchen节点,右键,然后选择制作副本)。- 通过旋转平移第二个房间,把两个房间的开口对齐。
Lounge(起居室)。第三步
- 接下来,我们要在两个房间之间添加一个入口。
- Portal。
Transform来调整入口的缩放和坐标,使其适合两个房间之间的开口。- 外侧 ,也就是朝向休息室。这个方向由编辑器中的箭头和入口的颜色表示。
第四步
- 为了更有趣,我们在房间里多加几个盒子。
- 将这些盒子作为房间节点的子节点或孙节点,明确告知系统这些对象应该在哪个房间。然而,我们也可以在房间之外创建这些对象。只要它们在房间列表分支当中,系统就会尝试在运行时自动将它们放在正确的房间中。
Freeform空间的子项,以保持整洁。- 给盒子分配绿色的空间材质,以使其在房间中突显。
- OmniLight,它将被自动放置在其中一个房间中。
第五步
- 接下来是关键阶段。我们必须让RoomManager房间管理器知道房间在哪里!
- Paths部分。
- Room List指向我们之前创建的RoomList节点,RoomList是所有房间的父节点。
第六步
- 确保在进行下一步之前,你已经保存了项目。在转换之前,最好总是保存并做备份。
- Convert Rooms,按下这个按钮。
- 房间图),以便在运行时进行遮挡剔除。
- 您可以在输出窗口中看到转换过程的日志。这有助于发现问题。
- 如果你现在在房间内移动编辑器相机,应该可以看到对面房间的网格被剔除,是取决于你通过入口所能看到的东西。
总结
这个简单的教程到此结束。你可以尝试创建的新房间系统。试一试
- 创建不同类型的几何体。入口系统支持 CSG 节点、粒子系统和多重网格。
room graph。在实际游戏中,您无需在编辑器中使用按钮,而是通过 RoomManager 调用函数来转换关卡,rooms_convert()。使用脚本试用此内容,也许是在_ready()函数中运行。STATIC(非移动的)。如果在检查器中查看几何体节点,你会看到它们源自CullInstance。你可以为入口系统中的对象设置入口模式,其决定了节点的处理方式。STATIC对象被认为不会在系统中移动。如果你把这个对象改为DYNAMIC后,应该能正确地更新剔除。portal_modes,在主文档中有描述。set_portal_active()来打开和关闭入口。- 如果你选择了入口,应该可能看到出现4个手柄。试着用鼠标拖动入口的点,看看它对被剔除的对象有什么影响。
- Generate Points按钮,它将把房间外体的点储存在房间的检查器中。你现在可以用辅助工具手柄来编辑这些点。
