在你导入或创建了人物、载具或宇宙飞船等资源后,你需要定义其如何对玩家输入做出反应。输入的定义主要是通过用户定义的动作映射绑定(用于按键的按下和释放)和坐标轴映射(用于连续性的输入)来实现。
在你定义完映射之后,便可以将它们与蓝图或 C++ 中的行为相绑定。
实现指南
在本指南中,你将创建一个简单人物并对其进行设置以便接收输入,之后将该人物分配到一个 GameMode,使之作为游戏过程中的默认 Pawn。如果你熟悉人物设置或拥有一个要接受输入的人物(同时设置了一个使用该人物的 GameMode),你可以跳过人物创建部分,直接去新建输入并实施它们。
创建一个简单人物
在该部分中,我们将创建一个可对其分配输入的人物(如果你已经有一个 Character Blueprint,可以跳过这一步)。
在此示例中,我们将使用 Blank 项目模板并启用 Starter Content。
-
在项目的 Shapes 中,Right-click Shape_NarrowCapsule 图形并选择 Asset Actions - Create Blueprint Using。
这就是我们将要控制的简单人物。
-
在 Blueprints 文件夹中,打开新创建的蓝图,然后单击 File 和 Reparent Blueprint 选项。
我们需要将蓝图类型从 Actor 更改为 Character。
-
在弹出的窗口内选择 Character 选项。
-
在蓝图窗口的右上角单击 Components 选项卡。
-
在 Components 窗口下的 Components 选项卡中,单击 Add Component 并添加一个 Spring Arm。
Spring Arm 组件会尝试让其子对象与父对象之间保持一个固定距离,但如果发生碰撞,就会将子对象撤回,如果没有碰撞,则使之发生回弹。这里的子对象将是一个 Camera,所以我们将拥有第三人称视角。
-
选择 Spring Arm 后,在 Details 中搜索 rotation。
-
在 Camera Settings 中选中 Use Pawn Controller Rotation 选框。
-
再次单击 Add Component 按钮并添加一个 Camera,然后将其拖放到 Spring Arm 组件上。
这样就可以将它指定为 Spring Arm 的子对象。
-
选择 Camera 后,将 Location 和 Rotation 值(位于 Transform)设置为 0。
-
选择 StaticMesh1 组件,然后在 Details 中将 Location 的 Z 值设置为 -90.0。
-
Compile 并 Save,然后关闭蓝图。
创建一个可使用简单人物的游戏模式
我们已经创建了一个简单人物,现在需要创建一个 GameMode 并让它使用我们的新人物。
-
在 Content Browser 中,单击 New 按钮,然后单击 Blueprint 选项。
-
在弹出的窗口内单击 Game Mode 按钮。
-
命名后打开 GameMode 蓝图并单击 Defaults 选项卡。
-
在 Defaults 选项卡的 Classes 部分,单击 Default Pawn Class 下拉菜单并选择新人物。
-
Compile 并 Save,然后关闭蓝图。
-
在主编辑器窗口中,单击菜单栏上的 Edit 按钮并选择 Project Settings。
现在,我们要让我们的项目使用新建的 GameMode。
-
在 Project Settings 中,单击 Maps & Modes 选项。
-
在 Maps & Modes 的 Default Modes 部分,单击 Default GameMode 下拉菜单并选择你的 GameMode。
新建输入(Action/Axis Mappings)
(#actionaxismappings)
以下步骤将指引你为项目添加新的 Action 和 Axis Mappings,然后你可以将其分配给你的人物。
-
在 Project Settings 菜单的 Engine 中,单击 Input 选项。
-
在 Bindings 中,单击 + 符号(位于 Action Mappings 和 Axis Mappings 旁边)以重建下面的设置。
-
为空映射填入内容(如下所示)。
你需要在这里为每一个映射命名,然后为其分配一个输入。请务必将高亮显示的 Scale 值设置为 -1.0,因为在累加坐标值的时候,Scale 充当了按键值的乘数(这可以让我们得到相反方向)。
在蓝图中实施动作/坐标轴映射
通过 Project Settings 创建输入后,你便可以从 Blueprint 内调用这些输入了。在这一部分中,我们将针对简单人物(或是你已有的人物)实施这些输入设置。
-
在你的项目中,打开要分配输入的 Character Blueprint(Shape_NarrowCapsule)。
-
在蓝图中,Right-click 图表上的任意位置,搜索 Turn,然后添加 Turn 坐标轴事件。
-
拖开 Axis Value 并搜索 Yaw,然后添加 Add Controller Yaw Input 节点。
-
在图表中 Right-click,然后添加 LookUp 坐标轴事件。
-
拖开 Axis Value 并搜索 Pitch,然后添加 Add Controller Pitch Input 节点。
-
在图表中 Right-click,然后添加 Jump 坐标轴事件。
-
拖开 Pressed 针并搜索 Jump 函数。
-
在图表中 Right-click,然后添加 MoveForward 坐标轴事件。
-
拖开 Axis Value 并添加 Add Movement Input 节点。
-
在图表中 Right-click,然后添加 MoveRight 坐标轴事件。
-
拖开 Axis Value 并添加 Add Movement Input 节点。
事件添加完成,但我们还需要为每个事件指定方向。
-
在图表中 Right-click 并搜索 Get Control Rotation。
-
拖开 Return Value 并添加一个 Break Rot 节点(用于将旋转分解为俯仰(Pitch)、偏航(Yaw)和横滚(Roll))。
-
拖开 Yaw 针并添加一个 Make Rot 节点(根据Pitch、Yaw和Roll做出旋转)。
-
Right-click Make Rot 节点并选择 Break link to Break Rot (Yaw)。
我们要将 Pitch 和 Roll 归零,仅仅保留 Yaw。
-
将 Break Rot 的 Yaw 连接至 Make Rot 的 Yaw。
-
拖开 Make Rot 的 Return Value 并添加一个 Get Forward Vector 和 Get Right Vector 节点。
-
将 Get Forward Vector 连接至与 MoveForward 事件绑定的 World Direction。
-
将 Get Right Vector 连接至与 MoveRight 事件绑定的 World Direction。
具体顺序应当与上面类似。
-
Compile 并 Save,然后关闭蓝图。
-
在编辑器中运行。
现在,你应当可以用我们创建的胶囊人物(或是你选用的人物)在场景中四处移动或跳跃。