Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

设置游戏区域

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

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

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

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

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

../../_images/02.browse_to_project_folder.png

点击导入并编辑在编辑器中打开该项目。

../../_images/03.import_and_edit.png

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

../../_images/04.start_assets.png

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

设置游玩区域

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

../../_images/05.main_node.png

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

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

../../_images/adding_static_body3D.webp

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

../../_images/06.staticbody_node.png

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

../../_images/07.collision_shape_warning.png

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

../../_images/08.create_box_shape3D.jpg

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

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

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

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

../../_images/10.mesh_instance3d.png

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

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

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

../../_images/12.cube_resized.png

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

我们要把地面往下移一点,这样才能看到地板网格。选中 Ground 节点,按住 Ctrl键启用网格吸附(macOS 上则是 Cmd),然后单击并在 Y 轴上向下拖动。也就是移动小工具里的绿色箭头。

../../_images/move_gizmo_y_axis.webp

备注

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

../../_images/14.select_mode_icon.png

为了有一个可见的编辑器栅格,可以将地面往下移动 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

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