设置游戏区域

在第一部分中,我们将设置游戏区域。让我们从导入初始资产、设置游戏场景入手。

我们为这个教程准备了一个带有 3D 模型和音效的 Godot 项目,链接在索引页。如果你还没有下载,可以下载这个压缩包:Squash the Creeps 资产

下载完成之后,请将 .zip 压缩包解压到你的电脑上。打开 Godot 项目管理器,然后点击导入按钮。

../../_images/01.import_button.webp

请在导入弹出框中输入刚才新建的目录 squash_the_creeps_start/ 的完整路径。你也可以点击右侧的浏览按钮,打开文件浏览器并找到该文件夹所包含的 project.godot 文件。

../../_images/02.browse_to_project_folder.webp

Click Import to open the project in the editor.

../../_images/03.import_and_edit.webp

A window notifying you that the project was generated by an older Godot version may appear. Click Convert Full Project to convert the project to your current Godot version.

../../_images/import_project_to_4.x_prompt.webp

If it doesn't open immediately open the project from your project list.

起始项目中包含一个图标和两个文件夹:art/fonts/。你可以在里面找到游戏中我们会用到的艺术资产和音乐。

../../_images/04.start_assets.webp

里面有两个 3D 模型,player.glbmob.glb,一些模型使用的材质,以及一首音乐。

设置游玩区域

我们将以普通的 Node 作为其根创建主场景。在场景面板中,单击左上角由“+”图标表示的添加子节点按钮,然后双击 Node。将节点命名为 Main。另一种重命名节点的方法是在节点上单击右键,然后选择重命名(或者按 F2)。另一种将节点添加到场景中的方法是按 Ctrl + a (macOS 上则是按 Cmd + a)。

../../_images/05.main_node.webp

Ctrl + S 将场景保存为 main.tscn(macOS 上则是按 Cmd + S)。

我们先添加一个地板,以防止角色掉落。要创建地板、墙壁或天花板等静态碰撞器,可以使用 StaticBody3D 节点。它们需要 CollisionShape3D 子节点来定义碰撞区域。选择 Main 节点后,添加 StaticBody3D 节点,然后添加 CollisionShape3D。将 StaticBody3D 重命名为 Ground

../../_images/adding_static_body3D.webp

你的场景树应该看上去像这样

../../_images/06.staticbody_node.webp

CollisionShape3D 旁边会出现一个警告标志,因为我们还没有定义它的形状。如果你点击这个图标,就会弹出一个窗口,为你提供更多信息。

../../_images/07.collision_shape_warning.webp

要创建形状,请选中 CollisionShape3D,转到检查器,然后单击 Shape(形状)属性旁边的 <空> 字段。创建一个新的 BoxShape3D

../../_images/08.create_box_shape3D.webp

盒子形状非常适合平坦的地面和墙壁。它的厚度使它能够可靠地阻挡甚至快速移动的物体。

视口中会显示盒子的线框和三个橙色的小点。你可以点击并拖动这些点来进行交互,编辑形状的范围。我们也可以在检查器中精确设置尺寸。点击 BoxShape3D 展开资源,将 Size 设置为 X 轴 60,Y 轴 2 和 Z 轴 60

../../_images/09.box_size.webp

碰撞形状是不可见的。我们需要添加一个与之配套的视觉层。选择 Ground 节点并添加一个 MeshInstance3D 作为其子节点。

../../_images/10.mesh_instance3d.webp

检查器中,点击 Mesh 旁边的字段,创建一个 BoxMesh 资源,创建一个可见的立方体。

../../_images/11.box_mesh.webp

再次设置大小,对于默认值来说它有点太小了。点击立方体图标展开资源,并将其 Size 设置为 60260。由于立方体资源使用的是大小(size)而不是范围(extents),我们需要使用这些值,以便它与我们的碰撞形状相匹配。

../../_images/12.cube_resized.webp

你应该会在视口中看到一个覆盖网格以及蓝色和红色轴的宽灰色平板。

我们将移动地面以便可以看到地板栅格。为此,可以使用栅格吸附功能。在3D编辑器中,栅格吸附功能可以通过两种方式激活。第一种是点击使用吸附按钮(或按 Y 键)。第二种是先选择一个节点,拖动小部件上的手柄,然后在点击的同时按住 Ctrl 键,只要按住 Ctrl 键,吸附功能就会保持启用状态。

../../_images/use_snap.webp

首先使用你喜欢的方法设置对齐。然后,使用 Y 轴(小工具上的绿色箭头)移动 Ground 节点。

../../_images/move_gizmo_y_axis.webp

备注

如果你没有看到如上图所示的 3D 对象操作器,请确保已激活视图上方工具栏中的选择模式

../../_images/14.select_mode_icon.webp

为了有一个可见的编辑器栅格,可以将地面往下移动 1 米。视口左下角的标签会显示你将该节点平移了多远。

../../_images/15.translation_amount.png

备注

子节点会跟随 Ground 节点一起往下移动。请确保你移动的是 Ground 节点,不要移动 MeshInstance3DCollisionShape3D

最终,Ground 的 transform.position.y 应当是 -1

../../_images/ground_down1meter.webp

现在来添加一个平行光,让我们的整个场景不全都是灰色的。选择 Main 节点,然后添加一个子节点 DirectionalLight3D

../../_images/create_directional_light3d.webp

我们需要移动并旋转 DirectionalLight3D 节点。通过单击并拖动操作器的绿色箭头将该节点往上移动,然后单击并拖动红色弧线以围绕 X 轴旋转它,直到地面被照亮。

检查器中,勾选复选框打开Shadow -> Enabled

../../_images/16.turn_on_shadows.webp

项目此时看起来是这个样子。

../../_images/17.project_with_light.webp

这就是我们的起点了。在下一部分中,我们将处理玩家场景与基础移动。