UE5增强输入系统 Enhanced Input

关键字:
Enhanced Input 、 输入、映射、事件、鼠标、键盘、键鼠、动作、Trigger、触发器、

疑问:

  • 新输入系统怎么做一个基础的案例?
  • Trigger修改器中每个项都是什么功能?
  • 功能边界问题:如时刻、时段、单次事件、持续事件、可变频率事件,延迟事件、前置事件、后置事件?
  • InputAction和InputMappingContext中都有修改器,那么听谁的?
  • 如何获得鼠标平移? 如何将WSADQE的三维XYZ的事件进行输出?

看完希望你会找到答案。

增强输入系统 Enhanced Input

在这里插入图片描述

最主要的两个组件

  • Input Mapping Context 输入映射管理器 建立映射关系,是一套映射方案 简称 IMC
  • Input Action 输入动作 单个键盘鼠标动作事件 简称 IA

二者关系:

Input Mapping Context
|——Input Action
|——|——映射对应键鼠
|——|——映射对应键鼠
|——|——… …
|——Input Action
|——|——映射对应键鼠
|——|——映射对应键鼠
|——|——… …
|——Input Action
|——|——映射对应键鼠
|——|——映射对应键鼠
|——|——… …
|—— … …

简单的例子:制作一个鼠标左键事件,单击、抬起并print信息

一、制作Input Action

创建一个IA,在空白区域右键,弹出菜单Input / Input Action ,起名IA_LMB,用它表示单击左键
在这里插入图片描述

  • 这个IA起名字,根据项目而定。可以是键鼠对应的按钮名称,也可以是角色行走、开枪的动作名称。 命名方式很重要,它是蓝图中的事件的名称。
  • 类似载具类操作,如汽车,大多将水平和垂直轴分开处理,即WS一组、AD一组、有的还会有QE一组。这样分开输出比起合在一个事件里的三维坐标更容易控制,因为车辆前后是油门,在没有油门的时候,左右是不动的。
  • 我的项目以 键盘操作 为主,所以用 <键鼠按钮名字_事件名称> 命名。如下图,展示了正式项目中,围绕鼠标左键的双击、按住、按下、抬起事件。之所以分的这么细致的产品需求是:项目有大量键鼠组合操作。

在这里插入图片描述
注意: 时刻、时段,有区别。

名称 事件描述
IA_LMB_DubbleClick 鼠标左键双击事件
IA_LMB_Hold 鼠标左键持续按住,并持续输出事件
IA_LMB_Pressed 鼠标左键按下时刻事件
IA_LMB_Released 鼠标左键抬起时刻事件

这么做对于后续的键鼠事件配置,也将更为复杂 。

回到简单案例,当前的案例没有那么复杂的命名方式,双击打开IA

UE5 (Unreal Engine 5) 的 C++ 编程中创建一个增强输入系统 (Enhanced Input System, EIS) 的 Demo 需要遵循其提供的蓝图和C++ API。以下是基本步骤: 1. **设置项目**: - 在UE5中,首先确保你已经在合适的游戏模式(如GameMode或Blueprint Class)中打开了C++支持。 2. **引用库**: - 包含必要的头文件,如`FName`, `UInputComponent`, 和 `IInputAction` 等。例如: ```cpp #include "CoreMinimal.h" #include "GameFramework/InputActions.h" ``` 3. **创建输入动作**: - 创建一个继承自 `UInputAction` 的自定义类,这是EIS的核心组件。示例: ```cpp UCLASS() class YOURPROJECT_API UYourCustomAction : public UInputAction { GENERATED_BODY() // 添加动作描述,比如按键映射 static void RegisterInputActions(); // 实现回调函数处理用户的输入 virtual void OnExecute() override; virtual void OnCancel() override; }; ``` 4. **注册输入动作**: - 在`RegisterInputActions`静态函数中,注册你的定制动作到EIS系统: ```cpp void UYourCustomAction::RegisterInputActions() { Super::RegisterInputActions(); const FName YourActionName = FName("YourCustomAction"); InputComponent->BindAction(YourActionName, IEInputAction::EInputChannnel::Game, this, &UYourCustomAction::OnExecute); } ``` 5. **处理输入事件**: - 在`OnExecute`和`OnCancel`函数中,编写针对用户输入的操作代码。比如,你可以改变游戏状态或显示相应的UI反馈。 6. **测试Demo**: - 在C++测试场景中实例化你的输入组件,并在适当的地方绑定到自定义动作。在游戏运行时检查输入是否正常响应。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值