设置游戏区域
在第一部分中,我们将设置游戏区域。让我们从导入初始资产、设置游戏场景入手。
我们为这个教程准备了一个带有 3D 模型和音效的 Godot 项目,链接在索引页。如果你还没有下载,可以下载这个压缩包:Squash the Creeps 资产。
下载完成之后,请将 .zip 压缩包解压到你的电脑上。打开 Godot 项目管理器,然后点击导入按钮。
请在导入弹出框中输入刚才新建的目录 squash_the_creeps_start/
的完整路径。你也可以点击右侧的浏览按钮,打开文件浏览器并找到该文件夹所包含的 project.godot
文件。
点击导入并编辑在编辑器中打开该项目。
起始项目中包含一个图标和两个文件夹:art/
和 fonts/
。你可以在里面找到游戏中我们会用到的艺术资产和音乐。
里面有两个 3D 模型,player.glb
和 mob.glb
,一些模型使用的材质,以及一首音乐。
设置游玩区域
We’re going to create our main scene with a plain Node as its root. In the Scene dock, click the Add Child Node button represented by a “+” icon in the top-left and double-click on Node. Name the node Main
. An alternate method to rename the node is to right-click on Node and choose Rename (or F2). Alternatively, to add a node to the scene, you can press Ctrl + A (Cmd + A on macOS).
Save the scene as main.tscn
by pressing Ctrl + S (Cmd + S on macOS).
我们先添加一个地板,以防止角色掉落。要创建地板、墙壁或天花板等静态碰撞器,可以使用 StaticBody3D 节点。它们需要 CollisionShape3D 子节点来定义碰撞区域。选择 Main 节点后,添加 StaticBody3D 节点,然后添加 CollisionShape3D。将 StaticBody3D 重命名为 Ground
。
你的场景树应该看上去像这样
在 CollisionShape3D 旁边会出现一个警告标志,因为我们还没有定义它的形状。如果你点击这个图标,就会弹出一个窗口,为你提供更多信息。
要创建形状,请选中 CollisionShape3D,转到检查器,然后单击 Shape(形状)属性旁边的 <空> 字段。创建一个新的 BoxShape3D。
盒子形状非常适合平坦的地面和墙壁。它的厚度使它能够可靠地阻挡甚至快速移动的物体。
A box’s wireframe appears in the viewport with three orange dots. You can click and drag these to edit the shape’s extents interactively. We can also precisely set the size in the inspector. Click on the BoxShape3D to expand the resource. Set its Size to 60
on the X-axis, 2
for the Y-axis, and 60
for the Z-axis.
碰撞形状是不可见的。我们需要添加一个与之配套的视觉层。选择 Ground
节点并添加一个 MeshInstance3D 作为其子节点。
在检查器中,点击 Mesh 旁边的字段,创建一个 BoxMesh 资源,创建一个可见的立方体。
再次设置大小,对于默认值来说它有点太小了。点击立方体图标展开资源,并将其 Size 设置为 60
、2
、60
。由于立方体资源使用的是大小(size)而不是范围(extents),我们需要使用这些值,以便它与我们的碰撞形状相匹配。
你应该会在视口中看到一个覆盖网格以及蓝色和红色轴的宽灰色平板。
We’re going to move the ground down so we can see the floor grid. To do this, the grid snapping feature can be used. Grid snapping can be activated 2 ways in the 3D editor. The first is by pressing the Use Snap button (or pressing the Y key). The second is by selecting a node, dragging a handle on the gizmo then holding Ctrl while still clicking to enable snapping as long as Ctrl is held.
Start by setting snapping with your preferred method. Then move the Ground
node using the Y-axis (the green arrow on the gizmo).
备注
如果你没有看到如上图所示的 3D 对象操作器,请确保已激活视图上方工具栏中的选择模式。
为了有一个可见的编辑器栅格,可以将地面往下移动 1
米。视口左下角的标签会显示你将该节点平移了多远。
备注
子节点会跟随 Ground 节点一起往下移动。请确保你移动的是 Ground 节点,而不是 MeshInstance3D 和 CollisionShape3D。
最终,Ground
的 transform.position.y 应当是 -1
现在来添加一个平行光,从而让我们的整个场景不全都是灰色的。选择 Main
节点,然后添加一个子节点 DirectionalLight3D。
We need to move and rotate the DirectionalLight3D node. Move it up by clicking and dragging on the manipulator’s green arrow and click and drag on the red arc to rotate it around the X-axis, until the ground is lit.
在检查器中,勾选复选框打开Shadow -> Enabled。
项目此时看起来是这个样子。
这就是我们的起点了。在下一部分中,我们将处理玩家场景与基础移动。