Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
使用 GridMap
介绍
GridMap 是一种用于创建 3D 游戏关卡的工具,方式类似于 2D 中使用 TileMap。从定义好的 3D 网格集合(MeshLibrary)出发,像使用无限数量的乐高积木一样搭建关卡。
就像 TileMap 的图块一样,网格中也可以添加碰撞和导航。
示例项目
要学习 GridMaps 是怎么样工作的,请先下载示例项目:gridmap_starter.zip。
解压项目后点击“导入”按钮添加至项目管理器。若弹出需转换至新版 Godot 的提示,点击 转换 project.godot。
创建 MeshLibrary
首先,你需要一个 MeshLibrary,它是可以在网格地图中使用的 Mesh 的集合。打开“mesh_library_source.tscn”场景以查看如何设置网格库的示例。
如你所见,该场景有一个 Node3D 节点作为其根节点,以及许多 MeshInstance3D 节点子节点。
如果你的场景中不需要任何物理,那么到这里就完成了。但是,在大多数情况下,你还需要给网格指定碰撞体。
碰撞
你可以手动为每个 Mesh 指定 StaticBody3D 和 CollisionShape3D。你也可以使用“网格”菜单根据 Mesh 数据自动创建碰撞体。
请注意,“凸”(Convex)碰撞体对于简单 Mesh 效果更好。对于更复杂的形状,请选择“创建三角网格静态体”。一旦每个网格都分配了物理主体和碰撞形状,就可以使用网格库了。
材质
在生成网格库时,只使用网格内的材质。节点上设置的材质将被忽略。
光照贴图
可以将光照贴图烘焙到 GridMap 上。如果网格中已存在光照贴图 UV2 数据,则会直接复用。如果不存在 UV2 数据,则在烘焙时会自动生成,其默认的光照贴图纹素大小为 0.1 单位。若要生成具有不同光照贴图纹素大小的 UV2 数据,你可以在导入面板中将全局光照模式设置为 Static Lightmaps 并在那里指定纹素大小。此选项必须在场景被转换为 MeshLibrary 之前更改,因为事后更改不会影响已存在的 MeshLibrary 数据。
除了这个特性之外,光照贴图烘焙过程与其他 3D 场景相同。有关光照贴图烘焙的更多信息,请参阅使用光照贴图全局照明。
MeshLibrary 格式
总的来说, MeshLibrary 格式的具体约束条件是:MeshLibrary 场景的根节点是 Node3D,并且有多个将成为 MeshLibrary 项的子节点。根节点的每个子节点应该:
是 MeshInstance3D 类型,它将成为 MeshLibrary 的项。只有这个可视网格会被导出。
在网格的材质栏位中使用材质,而不是在 MeshInstance3D 的材质栏位中。
有最多一个 StaticBody3D 子节点用于碰撞。该 StaticBody3D 应该有一个或多个 CollisionShape3D 子节点。
有最多一个 NavigationRegion3D 子节点用于导航。该 NavigationRegion3D 可以有一个或多个额外的 MeshInstance3D 子节点,这些子节点可以用于烘焙导航数据,但不会作为可视网格导出。
只有这种特定格式会被识别为网格库的项。其他类型的子节点将不会被识别和导出。GridMap 并不是一个用于在网格上放置节点的通用系统,而是一个特定的、经过优化的系统,专门用于放置带有碰撞和导航的网格。
导出 MeshLibrary
要导出库,点击 场景 > 导出为... > 网格库... ,并将其保存为资源。
可以在项目中找到已导出的名为 MeshLibrary.tres 的 MeshLibrary。
使用 GridMap
创建一个新场景并添加一个 GridMap 节点。通过从文件系统面板拖动资源文件并将其拖入检查器中的 Mesh Library 属性来添加网格库。
检查器属性
Physics Material 设置允许为 NavigationMesh 中的每个网格覆盖物理材质。
在 Cells 下,Size 属性应设置为网格的大小。在本示例中你可以使用默认值。取消勾选 Center Y 属性。
Collision 选项允许为整个网格设置碰撞层、碰撞遮罩和优先级。具体功能说明详见物理章节。
在 Navigation 下有 “Bake Navigation” 选项。启用后,将为每个使用含导航网格的网格库项目的单元格创建导航区域。
在检查器中点击 MeshLibrary 可调整单个网格的设置,包括其导航网格、导航层以及是否投射阴影。
GridMap 面板
编辑器底部的 GridMap 面板会在添加 GridMap 节点时自动打开。
在工具栏中从左到右:
变换:在场景中添加一个控制柄,用于调整网格地图的相对位置和旋转。
选择:激活时可在视口中选择区域,点击并拖动以选择网格上的多个空间。
擦除:激活时点击视口可删除网格。
绘制:激活时点击视口可将当前在 GridMap 面板中选定的网格添加到场景。
选取:激活时点击视口中的网格地图网格,将在 GridMap 面板中选中该网格。
填充:使用 GridMap 底部面板中选定的网格填充视口中已选择的区域。
移动:移动当前在视口中选定的网格。
创建副本:创建 GridMap 中选定网格的副本。
删除:类似于擦除,但用于整个选定区域。
光标沿 X 轴旋转:选定绘制工具时,此操作将绕 X 轴旋转待绘制的网格。移动选定区域时也会应用此旋转。
光标沿 Y 轴旋转:选定绘制工具时,此操作将绕 Y 轴旋转待绘制的网格。移动选定区域时也会应用此旋转。
光标沿 Z 轴旋转:选定绘制工具时,此操作将绕 Z 轴旋转待绘制的网格。移动选定区域时也会应用此旋转。
修改网格所在层 :调整当前正在编辑的楼层。可通过箭头按钮、在字段中输入数值,或使用 Ctrl + Mouse wheel 进行修改。
筛选网格:用于在底部面板中搜索特定网格。
缩放:控制底部面板中网格的缩放级别。
布局切换:这两个按钮切换底部面板中网格的不同布局。
工具下拉按钮:此按钮打开包含更多选项的下拉菜单。
点击下拉菜单中的设置会打开一个窗口,可调整拾取距离,即相对于摄像机位置,可在 GridMap 上放置图块的最大距离,单位为米。
在代码中使用 GridMap
有关节点方法和成员变量的详细信息,请参阅 GridMap。