使用 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”场景以查看如何设置网格库的示例。

../../_images/gridmap_meshlibrary1.png

如你所见,该场景有一个 Node3D 节点作为其根节点,以及许多 MeshInstance3D 节点子节点。

如果你的场景中不需要任何物理, 那么到这里就完成了. 但是, 在大多数情况下, 你还需要给网格指定碰撞体.

碰撞

你可以手动为每个 Mesh 指定 StaticBody3DCollisionShape3D。或者,你可以使用“网格”菜单根据 Mesh 数据自动创建碰撞体。

../../_images/gridmap_create_body.png

请注意,“凸”(Convex)碰撞体对于简单 Mesh 效果更好。对于更复杂的形状,请选择“创建三角网格静态体”。一旦每个网格都分配了物理主体和碰撞形状,就可以使用网格库了。

../../_images/gridmap_mesh_scene.png

材质

在生成网格库时, 只使用网格内的材质. 节点上设置的材质将被忽略.

NavigationMesh

和所有网格实例一样,MeshLibrary 的项目可以用 NavigationMesh 赋值,既可以手动创建,也即可按下面的说明进行烘焙。

要从 MeshLibrary 场景导出创建 NavigationMesh,请在 GridMap 项的主 MeshInstance3D 下方放置一个 NavigationRegion3D 子节点。为该 NavigationRegion3D 添加有效的 NavigationMesh 资源,然后在下面的一些源几何体节点,再烘焙 NavigationMesh。

备注

如果单元格比较小,一般需要把 NavigationMesh 属性里的代理半径和最小地区大小降低。

../../_images/meshlibrary_scene.png

NavigationRegion3D 下的节点在导出 MeshLibrary 场景时会被忽略,所以可以专门为烘焙导航网格添加额外的节点,作为来源几何体。

警告

烘焙 NavigationMesh 的单元格大小必须与 NavigationServer 地图的单元格大小一致,才能把不同 Grid 单元格的导航网格合并起来。

导出 MeshLibrary

要导出库,点击 场景 > 导出为.. > MeshLibrary… ,并将其保存为资源。

../../_images/gridmap_export.png

可以在项目中找到已导出的名为“MeshLibrary.tres”的 MeshLibrary。

使用 GridMap

创建一个新场景并添加一个 GridMap 节点。通过从文件系统面板拖动资源文件并将其放入检查器中的“Theme”(主题)属性中来添加网格库。

../../_images/gridmap_main.png

“Cell/Size”属性应设置为网格的大小。在本示例中你可以使用默认值。将“Center Y”属性设置为“未启用”。

现在,你可以开始设计关卡了,从调色板中选择一个图块,然后在编辑器窗口中用左键单击它。要删除一个图块,使用右键单击。

使用“GridMap”菜单旁边的箭头更改你正在处理的层。

单击“GridMap”菜单可以查看选项和快捷键。例如,按下 S 绕 Y 轴旋转图块。

../../_images/gridmap_menu.png

按住 Shift 并使用鼠标左键拖动将绘制一个选择框. 你可以使用相应的菜单选项复制或清除所选区域.

../../_images/gridmap_select.png

在菜单中, 你还可以更改正在绘制的轴, 并将绘图平面在其轴上移动得更高或更低.

../../_images/gridmap_shift_axis.png

在代码中使用 GridMap

有关节点方法和成员变量的详细信息, 请参阅 GridMap.

Previous Next


© 版权所有 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.