设置游戏区域
在第一部分中,我们将设置游戏区域。让我们从导入初始素材、设置游戏场景入手。
我们为这个教程准备了一个带有 3D 模型和音效的 Godot 项目,链接在索引页。如果你还没有下载,可以下载这个压缩包:Squash the Creeps 素材。
下载完成之后,将 .zip 压缩包解压到你的电脑上。打开 Godot 项目管理器,然后点击导入按钮。
请在导入弹出框中输入刚才新建的目录 squash_the_creeps_start/
的完整路径。你也可以点击右侧的浏览按钮,打开文件浏览器并找到该文件夹所包含的 project.godot
文件。
点击导入并编辑在编辑器中打开该项目。
起始项目中包含一个图标和两个文件夹:art/
和 fonts/
。你可以在里面找到游戏中我们会用到的艺术素材和音乐。
里面有两个 3D 模型,player.glb
和 mob.glb
,一些模型使用的材质,以及一首音乐。
设置游玩区域
我们将以普通的 Node 作为其根创建主场景。在场景面板中,单击左上角由“+”图标表示的添加节点按钮,然后双击 Node。将节点命名为“Main”。或者,要将节点添加到场景中,可以按 Ctrl + a (或在 macOS 上按 Cmd + a)。
按 Ctrl + s 将场景保存为 Main.tscn
(在 macOS 上则是按 Cmd + s)。
我们先添加一个地板,以防止角色掉落。要创建静态碰撞体(如地板、墙壁或天花板),可以使用 StaticBody 节点。它们需要 CollisionShape 子节点来定义碰撞区域。选择 Main 节点后,添加 StaticBody 节点,然后添加 CollisionShape。将 StaticBody 重命名为 Ground。
在 CollisionShape 旁边会出现一个警告标志,因为我们还没有定义它的形状。如果你点击这个图标,就会出现一个弹出窗口,为你提供更多信息。
要创建形状,请在选中 CollisionShape 后,转到检查器,然后单击 Shape 属性旁边的 [空] 字段。创建新的 Box Shape。
盒子形状非常适合平坦的地面和墙壁。它的厚度使它能够可靠地阻挡甚至快速移动的物体。
一个盒子的线框会在视区中出现三个橙色的小点。你可以点击并拖动这些点来交互地编辑形状的范围。我们也可以在检查器中精确设置尺寸。点击 BoxShape 来展开资源。将它的 Extents 设置为 X 轴上的 30
,Y 轴的 1
和 Z 轴上的 30
。
备注
在 3D 模式下,平移和大小单位以米为单位。盒子的总尺寸是其范围的两倍:60
×60
米在地平面上,高 2
单位。接地平面由 X 轴和 Z 轴定义,而 Y 轴表示高度。
碰撞形状是不可见的。我们需要添加一个与之配套的视觉地板。选择 Ground 节点并添加一个 MeshInstance 作为其子节点。
在检查器中,点击 Mesh 旁边的字段,创建一个 CubeMesh 资源,创建一个可见的立方体。
再次设置大小,点击立方体图标展开资源,并将其 Size 设置为 60
、2
、60
。由于立方体资源使用的是大小(size)而不是范围(extents),我们需要使用这些值,以便它与我们的碰撞形状相匹配。
您应该会在视区中看到一个覆盖网格以及蓝色和红色轴的宽灰色平板。
我们要把地面往下移一点,这样才能看到地板网格。选中 Ground 节点,按住 Ctrl 键启用网格吸附(macOS 上则是 Cmd),然后单击并拖拽 Y 轴,也就是移动控制器里的绿色箭头。
备注
如果你没有看到如上图所示的 3D 对象操作器,请确保已激活视图上方工具栏中的选择模式。
将地面往下移动 1
米。视区左下角的标签会显示你将该节点平移了多远。
备注
子节点会跟随 Ground 节点一起往下移动。请确保你移动的是 Ground 节点,而不是 MeshInstance 和 CollisionShape。
让我们添加一个平行光,这样我们的场景就不会全是灰色的。选择 Main 节点,并添加 DirectionalLight 作为其子节点。我们需要移动它并旋转它。通过单击并拖动操纵器的绿色箭头将其向上移动,然后单击并拖动红色弧线以围绕 X 轴旋转它,直到地面被照亮。
在检查器中,勾选复选框打开Shadow -> Enabled。
项目此时看起来是这个样子。
这就是我们的起点了。在下一部分中,我们将处理玩家场景与基础移动。