UE5 增强输入-第三人称角色移动、跳跃和视角转向功能实践
摘要:增强输入是在UE5 早期引入的一个实验性功能。区别于早期的 UE4 之前得传统输入,增强输入现在已经作为虚幻 5 中一个完整的插件系统,在最新的虚幻引擎中,官方也明确表示传统的输入系统已经废弃,建议使用增强输入。
分类:游戏开发
标签:UE5, 虚幻引擎, 开发工具, 教程笔记
发布时间:2025-08-15T12:57:20
UE5 增强输入-第三人称角色移动、跳跃和视角转向功能实践
增强输入是在UE5 早期引入的一个实验性功能。区别于早期的 UE4 之前得传统输入,增强输入现在已经作为虚幻 5 中一个完整的插件系统,在最新的虚幻引擎中,官方也明确表示传统的输入系统已经废弃,建议使用增强输入。

因此,不管是刚刚入手虚幻还是老虚幻开发者,都要学会新的增强输入系统的基本操作,基于此,本文将以初学者视角,使用增强输入系统从头开始,以实践为主,理论为辅的方式,逐步完成一个第三人称角色的移动、跳跃、步行等基本操作功能,看完本文不能说立马就能开发出一款 3A 大作,但是对于理解增强输入的基础是够用的了。
两个关键概念
在开始实践之前,有必要先简单理解一些关键的概念和术语,这有助于后面的学习。
- 输入操作
- 输入情景
输入情景包含了与它们相关联的 输入操作,以及将执行这些操作的各种键。 输入操作包含了如何执行它们的规范。为了更好的理解二者的关系,理解它们是如何协同工作的,下面以游戏《使命召唤》的部分游戏操作为例。
在使命召唤游戏中,玩家拥有不同得游戏映射情景,可以用不同的按键控制不同的人或对象。
例如,当我们控制玩家角色在地图中奔跑、行走时,可以使用对应的几个移动键来控制角色的移动,也可以使用其他按键控制角色的跳跃,匍匐等。然后,当角色进入游戏载具内部时,玩家所能看到的控制方式也会发生改变,比如,之前控制角色移动的按键将变为控制载具的移动,之前控制角色视角的操作也变为控制载具的视角,换弹操作变为修理载具等等。
在这个例子中,存在两个不同的 输入情景:
- 控制角色
- 控制载具(车辆)
对于每一个输入情景,都有一组 输入操作。这些输入操作是由相同的按键触发的,这样设置并没有问题,因为它们是在不同得输入情景中完成的。
关键理解
输入操作 = 游戏功能
- 定义“做什么”比如,移动、攻击、交互等。
- 是抽象的游戏行为。
输入情景(输入映射情景) = 游戏状态
- 定义“什么时候用什么键”。
- 根据游戏情况切换不同的按键映射。
协同关系

启用增强输入系统
由于增强输入是以插件的方式整合到 UE5 中,因此,我们在使用增强输入之前,可能需要手动启用 增强输入系统,为什么是可能呢?这个取决于你当前用的虚幻引擎版本,在最新的版本中,我的是虚幻 5.4。默认是开启这个功能的,因此,保险起见,建议按照下面的方式检查一下是否正常启用了该增强功能。
- 在虚幻编辑器的顶部菜单中,选中 编辑,然后点击 插件,打开插件页面之后在 内置列表中找到输入相关的 2 插件,看看增强输入是否处于勾选状态。如果没有勾选,需要手动勾选并根据提示进行重启。

- 告诉虚幻引擎,使用增强输入相关的类来进行玩家输入的处理。在项目设置中检查是否启用了增强输入相关的类作为默认类:

关键术语
注意,从此刻开始,我们的实践项目就已经开始了。
在 内容浏览器空白区域右击,在菜单中选择 输入并在其子列表中选择 输入操作命令,新建一个输入操作,命名为 IA_Move

双击打开 细节面板,你会看到很多名称术语。下面挑一些关键的部分进行介绍:

暂停时触发:指定游戏暂停时是否可以触发这个操作。
保留所有映射:如果指定由同一个键触发,是否会触发更高优先级的输入操作。
值类型:指定输入操作的值类型,该类型的值可以是下面这些:
- 数字(布尔):用于具有二进制状态的输入操作,比如,跳跃的输入操作,玩家要么按下它,要么不按,这种情况下就可以使用该类型的值。
- Axis2D(浮点):用于在一维中具有标量状态的输入操作,例如,在塞车游戏中的加速,我们可以使用手柄的触发器来控制油门。
- Axis2D(Vector2D):用于在二维中具有标量状态的输入操作。例如,使用两个轴(向前轴和横向轴)完成用于角色移动的操作,此时,这个是最好的选择。
- Axis3D(向量):用于在三维中具有标量状态的输入操作。例如,VR或AR应用中,追踪控制器的三维位置或方向,比如控制无人机、飞行器等。
触发器:指定将执行此输入操作的关键事件。该值可以是一下值的组合。
- 弦操作:只要另一个指定的输入操作也被触发,输入操作就会被触发。
- 下移:当按键超过驱动阈值,每一帧都会触发输入操作。
- 长按:当按键超过驱动阈值的时间达到指定的量时,输入操作被触发。我们可以指定它是触发一次还是每帧都触发。
- 已按下:当按键超过驱动阈值时,输入操作只触发一次,直到按键被释放才再次触发。
- 脉冲:只要按键超过驱动阈值,输入操作就会以指定的间隔触发。我们可以指定第一个脉冲是否触发输入操作,以及是否有被调用的次数限制。
- 点按:只要在指定的时间内完成,输入操作将在键启动时触发,然后在超过驱动阈值时停止。
修改器:指定修改此输入操作的输入方式:
- 盲区:如果低于下阈值,键的输入将读取为 0;如果高于上阈值,则读取为 1.
- 视野缩放:键的输入将与视野一起缩放(如果视野增加,则键的输出增加,如果视野减小,键的输出减小)
- 否定:反转键的输入。
- 响应曲线-指数:指数曲线将用于键的输入,用户定义的曲线同理。
- 标量:键的输入将根据指定的标量在每个轴上缩放。
- 平滑:键的输入将在多个帧之间平滑。
- 拌合输入轴值:拌合输入轴值的轴组件
- 到世界空间:输入空间将转换到世界空间。
上面这些术语解释起来还是晦涩,但是这些东西都会在后续的学习中慢慢领悟,光靠这些文字解释是很难融会贯通的。
自定义角色的第三人称创建
在这之前,请确保你能正确设置角色模型、设置自定义的游戏模式以及默认的 pawn 类。确保游戏开始后,采用得是我们自己的游戏模式和pawn。


- 创建 C++类,通过代码处理相机相关得内容,同时也为后续的移动操作做准备。

- 创建相机吊臂和相机组件,在头文件的 **GENERATED_BODY()**下面声明相机臂和相机组件.

- 在源文件中创建相机臂和相机,以及角色相关配置;

上述代码过程中,可能会提示缺少相关头文件的导入,按需导入即可。我用的是Rider,自身提供了辅助导入的功能,下面是一些需要导入的头文件。
#include "Components/CapsuleComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
构建编译代码,然后最好是在UE编辑器中再次点击编译代码,然后运行游戏看看效果。

ok ,到此为止,我们已经完成了自定义角色的第三人称视角的创建。接下来就是处理角色的移动操作了,包括四个方向的跑动,以及向上跳跃和步行的功能,当然,也包括通过鼠标调整角色视角的操作。
增强输入-四个方向的跑动功能
- 打开
IA_Move输入操作 - 在打开的设置面板中,将 值类型选择为 Axis2D,因为角色的移动是在两个轴上完成的,分别是向前轴(该输入操作的Y轴)和横向轴(该输入操作的X轴)。
- 添加触发器,类型为 下移,驱动阈值设置为0.1。确保其中一个键的触发驱动阈值至少为0.1时调用这个输入操作。

- 创建并打开输入情景映射 IC_Character
- 将前面创建的输入操作添加到映射中,点击映射右侧的加号进行添加。在下拉操作中设置第一个操作按键,这里添加游戏手柄左摇杆的Y轴。

因为我们希望这个键控制输入操作的Y轴而不是X轴,因此我们还需要添加带有 YXZ值的 拌合输入轴值的修改器。

- 新增一个 游戏手柄左摇杆X轴的映射,不需要其他操作。
- 上述两个键的操作主要是针对游戏手柄的控制,下面开始新增常规的键盘控制,使用 WASD的经典方式控制角色移动。
- 添加 W 键,因为这个键用来控制向前移动,所以使用 Y 轴,再添加一个修改器,设置为 拌合输入轴值,其值排序为 YXZ
- 同理添加一个 S 键,用于向后移动,同样使用 Y 轴,同样添加一个 拌合输入轴值的修改器,排序与 W 键相同,另外,由于这个键的操作和 W 是反向操作,我们还需要添加另一个 修改器为 否定,因为我们希望该键按下时,移动输入操作在 Y 轴上的值为 -1,与 W 按下是的 1相反。
- 添加 D 键,用于向右移动,所以使用 X 轴的正向端,不需要任何修改器。
- 添加 A 键,用于控制左移,使用 X 轴的负向端,添加一个否定修改器即可。

添加跳跃输入操作
- 创建一个名为 IA_Jump的输入操作资产并打开。
- 添加一个 下移触发器,并保持 驱动阈值为 0.5,其中的 值类型保持默认的数字类型即可。

- 打开刚刚的输入情景映射操作面板,新增一组映射 IA_Jump 并添加两个操作键,分别是 空格键和游戏手柄正面按钮下。

按照一般顺序,接下来应该继续添加鼠标控制视角的输入相关操作,但是这里选择先跳过,接下来使用代码对增强输入操作进行监听和逻辑响应。
监听移动和跳跃的输入操作
在之前创建的类中,已经存在了输入操作相关的方法,玩家控制器或角色监听输入操作的主要方式是使用 SetupPlayerInputcomponent函数进行注册输入操作委托。因此,现在可以按照下面的步骤,使用我们之前创建好的角色类来完成输入操作的监听。
- 在类头文件中新增两个带有 UPROPERTY相关属性的组件声明,主要是声明两个组件,分别是输入映射上下文和输入操作相关的组件,避免包含完整头文件,提高编译速度。

- 打开该类对应的源文件,确保自动生成的代码模板中包含了下面的方法

由于虚幻引擎存在两种输入方式,我们这里需要先将默认的输入方式转为增强输入,首先将PlayerInputComponent参数强转为UEnhancedInputComponent增强输入组件类。

接下来将 Controller属性转为玩家控制器类 APlayerController,注意判空。

待办你也看到了,下一步就是完成 增强输入子系统的获取,用来管理输入映射上下文相关的内容。由于获取的是本地当前玩家的输入子系统,我们可以使用ULocalPlayer::GetSubsystem方法来获取。

- 目前为止,我们已经完成了输入映射情景的逻辑,接下来需要添加监听输入操作的逻辑。调用
BindAction函数进行输入操作绑定,该函数接受以下参数:
IA_Move- 输入动作对象
- 类型:
UInputAction*- 这是一个输入动作资产,定义了逻辑上的输入行为(如”移动”)
ETriggerEvent::Triggered- 触发事件类型
- 类型:
ETriggerEvent- 指定何时调用绑定的函数
- 常用值:
Started- 输入开始时Ongoing- 输入持续期间Triggered- 输入被触发时(最常用)Completed- 输入完成时Canceled- 输入被取消时this- 对象实例
- 指向当前角色实例,表示在哪个对象上调用处理函数
&AMyCharacter::Move- 成员函数指针
- 类型:函数指针
- 指向要调用的处理函数
- 函数签名通常为:
void Move(const FInputActionValue& Value)这种绑定方式让输入系统知道:当
IA_Move动作被触发时,调用当前角色的Move函数来处理移动逻辑。

注意,我们调用的 move 函数还是红色的,因为我们现在还没有实现这个方法,这将在添加完跳跃绑定之后一起实现。
- 同理添加跳跃输入绑定,参考添加移动输入绑定的代码,这里有一些变动,主要是触发事件类型上有所不同。

-
实现移动函数,首先在头文件中声明函数信息,然后在源文件中进行实现。


可能你会注意到,整个过程中我们并没有手动定义和实现跳跃相关的方法,这是因为这是因为 Jump 和 StopJumping 是 UE 中 ACharacter 类已经提供的内置函数。跳跃是角色的基础行为,UE 的 ACharacter 类已经提供了标准的跳跃实现,包括重力、落地检测等物理逻辑,大多数情况下直接使用即可。
- 将增强输入插件添加到项目中,打开项目的构建文件.cs 文件,在 PublicDependencyModuleNames 数组中追加增强输入插件:

- 进入虚幻编辑器,在 项目设置中配置输入操作。打开 BP_Character,在 细节面板中进行设置。

- 运行游戏,查看效果。
围绕角色的视角转向与行走功能
摄像机在游戏中是一个很重要的功能,决定了玩家的视角,决定玩家在游戏世界中能看到什么以及看到方式。在第三人称中,玩家不仅能看到周围世界,还可以看到自己控制的角色本身的状态。
为了实现玩家视角转向功能,我们需要新增一个输入操作,命名为 IA_Look,复制之前的 IA_Move该一下名称。
- 打开输入情景映射,新增刚才的输入操作映射。

-
同理,我们还需要新增一个输入操作 IA_Walk.

-
回到代码编辑器,完成视角转向和行走功能的逻辑。由于很多内容都是相似的,就不再一一解释了,结合注释即可理解。




- 在角色蓝图的 细节面板中新增刚才创建的视角转换和行走这两个输入操作。

- 启动游戏,查看效果