使用 GridMap
前言
Gridmaps 是一种用于创建3D游戏关卡的工具, 方式类似于2D中使用 TileMap . 使用一个定义好的可以放在一个网格中的 3D mesh (a MeshLibrary) (译注,grid和mesh都译作网格, 这里为了清晰,mesh直接使用英文,grid则译作网格)对象集合搭建关卡, 就像你使用无限多数量的乐高积木搭建世界一样.
就像使用tilemap的tile一样, 碰撞和导航也可以添加到网格中.
示例项目
要学习 GridMaps 是怎么样工作的,请先下载示例项目:gridmap_starter.zip。
解压缩此项目并使用“导入”按钮将其添加到项目管理器。
创建 MeshLibrary
首先,你需要一个 MeshLibrary,它是可以在网格地图中使用的 Mesh 的集合。打开“mesh_library_source.tscn”场景以查看如何设置网格库的示例。
如你所见,该场景有一个 Node3D 节点作为其根节点,以及许多 MeshInstance3D 节点子节点。
如果你的场景中不需要任何物理, 那么到这里就完成了. 但是, 在大多数情况下, 你还需要给网格指定碰撞体.
碰撞
你可以手动为每个 Mesh 指定 StaticBody3D 和 CollisionShape3D。或者,你可以使用“网格”菜单根据 Mesh 数据自动创建碰撞体。
请注意,“凸”(Convex)碰撞体对于简单 Mesh 效果更好。对于更复杂的形状,请选择“创建三角网格静态体”。一旦每个网格都分配了物理主体和碰撞形状,就可以使用网格库了。
材质
在生成网格库时, 只使用网格内的材质. 节点上设置的材质将被忽略.
NavigationMesh
和所有网格实例一样,MeshLibrary 的项目可以用 NavigationMesh 赋值,既可以手动创建,也即可按下面的说明进行烘焙。
要从 MeshLibrary 场景导出创建 NavigationMesh,请在 GridMap 项的主 MeshInstance3D 下方放置一个 NavigationRegion3D 子节点。为该 NavigationRegion3D 添加有效的 NavigationMesh 资源,然后在下面的一些源几何体节点,再烘焙 NavigationMesh。
备注
如果单元格比较小,一般需要把 NavigationMesh 属性里的代理半径和最小地区大小降低。
NavigationRegion3D 下的节点在导出 MeshLibrary 场景时会被忽略,所以可以专门为烘焙导航网格添加额外的节点,作为来源几何体。
警告
烘焙 NavigationMesh 的单元格大小必须与 NavigationServer 地图的单元格大小一致,才能把不同 Grid 单元格的导航网格合并起来。
导出 MeshLibrary
要导出库,点击 场景 > 导出为.. > MeshLibrary… ,并将其保存为资源。
可以在项目中找到已导出的名为“MeshLibrary.tres”的 MeshLibrary。
使用 GridMap
创建一个新场景并添加一个 GridMap 节点。通过从文件系统面板拖动资源文件并将其放入检查器中的“Theme”(主题)属性中来添加网格库。
“Cell/Size”属性应设置为网格的大小。在本示例中你可以使用默认值。将“Center Y”属性设置为“未启用”。
现在,你可以开始设计关卡了,从调色板中选择一个图块,然后在编辑器窗口中用左键单击它。要删除一个图块,使用右键单击。
使用“GridMap”菜单旁边的箭头更改你正在处理的层。
单击“GridMap”菜单可以查看选项和快捷键。例如,按下 S 绕 Y 轴旋转图块。
按住 Shift 并使用鼠标左键拖动将绘制一个选择框. 你可以使用相应的菜单选项复制或清除所选区域.
在菜单中, 你还可以更改正在绘制的轴, 并将绘图平面在其轴上移动得更高或更低.
在代码中使用 GridMap
有关节点方法和成员变量的详细信息, 请参阅 GridMap.
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.