Player 场景与输入事件
在接下来的两节课程中,我们将会设计玩家场景、注册自定义输入动作、编写玩家移动代码。在最后,你将会得到一个可以八方向移动的可游玩角色。
在左上角的场景菜单中单击新建场景来创建一个新场景。
创建一个 CharacterBody3D 节点来当根节点
将 CharacterBody3D 命名为``Player``。角色身体(Character body)对应的是 2D 游戏教程中的区域(Area)和刚体(Rigid Body)。与刚体类似,它可以移动并与环境发生碰撞,但它的运动并不是由物理引擎控制的,而是由*你*支配。当我们编写跳跃和踩踏机制时,你就会看到我们是如何使用这一该节点独有的特性的。
参见
要学习更多关于不同物理节点类型的内容,请参阅 物理介绍。
现在,我们将为角色的 3D 模型创建一个基本的装备。稍后我们将在播放动画时通过代码旋转模型。
新建一个 Node3D 节点作为 Player
的子节点,并将其命名为 Pivot
然后在文件系统面板中,双击展开 art/
文件夹,将 player.glb
拖放到 Pivot
节点上。
这样应该就会把这个模型实例化为 Pivot
的子项。你可以将其重命名为 Character
。
备注
.glb
文件包含基于开源的 GLTF 2.0 规范的 3D 场景数据。它是一种现代的、强大的并替代 FBX 等专有格式的文件,Godot 也支持这种格式。为了制作这些文件,我们在 Blender 3D 中设计了模型,并将其导出为 GLTF。
与所有类型的物理节点一样,我们的角色需要一个碰撞形状才能与环境相碰撞。再次选中 Player
节点并添加 CollisionShape3D 子节点。在检查器中,为 Shape 属性新建一个 SphereShape3D。
球体的线框出现在角色的下面。
它将是物理引擎用来与环境碰撞的形状,因此我们希望它更适合 3D 模型。拖动视口中的橙色点,将其缩小一点。我的球体半径约为 0.8
米。
然后,向上移动碰撞体,使其底部与网格平面大致对齐。
为了使形状移动更容易,你可以通过点击“Character”或“Pivot”节点旁边的眼睛图标来切换模型的可见性。
将场景保存为 player.tscn
节点准备就绪后,我们开始编写程序。但首先,我们需要定义一些输入动作。
创建输入动作
要移动角色,我们就要监听玩家的输入,比如按下方向键。在 Godot 中,我们能够使用代码来绑定按键,但还有一个非常强大的系统,可以让你为一系列按键和按钮设置标签。这样可以简化我们的脚本,让它们更易读。
这个系统是“按键映射”。可以在项目菜单中选择项目设置来打开编辑器。
顶部有许多标签。点击按键映射。你可以在这个窗口顶部添加新的动作;即标签。下半部分可以为这些动作绑定按键。
Godot 项目针对用户界面设计提供了一些预定义的动作(见上面的截图),我们这里可以直接使用。不过为了支持手柄,我们还是自己来定义。
我们要把这些动作命名为 move_left
、move_right
、move_forward
、move_back
、jump
(向左移动、向右移动、向前移动、向后移动、跳跃)。
要添加动作,可以在顶部的框中输入名称然后按回车键。
创建以下五个动作:
要为动作绑定按键或按钮,请点击右侧的“+”按钮。对 move_left
执行此操作,按下左方向键,然后单击确定。
将 A 键也绑定在动作 move_left
上面。
现在让我们为手柄左摇杆添加支持。再次点击“+”按钮,但是这一次选择手动选择 -> 摇杆轴。
选择左边遥感的负 X 轴。
将其它值保持为默认,然后点击 确定
备注
如果你想让多个手柄有不同的输入动作,你需要在额外选项中使用设备选项。设备 0 对应的是第一个插入的手柄,设备 1 对应的是第二个插入的手柄,以此类推。
为其他输入动作也执行同样的操作。比如将右方向键、D、左摇杆的正轴绑定给 move_right
。全部绑定完后,你的界面应该类似这样。
最后一个动作是设置 jump
动作。绑定空格键和手柄的 A 键。
你的跳跃输入动作应该看上去类似这样。
这些就是这个游戏所需的所有动作了。你可以使用这个菜单来对项目中的任意按键和按钮组进行标记。
在下一部分,我们将为玩家的移动进行编程和测试。