2019年6月24日
UE4中动态修改绑定按键事件(自定义按键)
前言
打游戏的时候,我们经常遇到这样的需求,官方给我们提供的默认输入按键,总是不顺手!我们希望进行下调整!一般我们会在设置中完成。那么虚幻引擎是否支持这样的操作呢?不不不,而应该说,我们使用虚幻引擎输出游戏时,是否可以让用户在运行时或是说产品发布后,自己调整预设按键呢?
这是一个很普通的需求!当然在虚幻中也可以非常简单的完成操作!
虚幻引擎在设置用户交互时,提供了一套完整的硬件输入处理事件。所有的输入(请尽量遵守基本交互逻辑)都需要基于事件进行传递!这样做的优势:游戏的交互逻辑不需要关心硬件传入,只需要一门心思去处理对应的输入事件即可。例如我注册了跳跃事件,在编写产品逻辑是,我不会关心到底跳跃是用空格键,还是手柄的B键,还是触摸的某个虚拟输入按键,只需要好好处理跳跃的逻辑即可。通过简单的代理模式,完成了稳定的硬件输入响应逻辑。
步骤
需要使用到UInputSettings类中的函数。在执行逻辑中嵌入代码即可。
关键API
[code lang='c']
//添加轴向绑定事件
void AddAxisMapping(const FInputAxisKeyMapping& KeyMapping, bool bForceRebuildKeymaps = true);
//移除轴向绑定事件
void RemoveActionMapping(const FInputActionKeyMapping& KeyMapping, bool bForceRebuildKeymaps = true);
//添加普通按键绑定事件
void AddActionMapping(const FInputActionKeyMapping& KeyMapping, bool bForceRebuildKeymaps = true);
//移除普通按键绑定事件
void RemoveActionMapping(const FInputActionKeyMapping& KeyMapping, bool bForceRebuildKeymaps = true);
[/code]
以上是常用到的API,我们在操作时对应了输入中的轴事件和按键事件
逻辑代码
[code lang='c']
//构建轴向按键事件
FInputAxisKeyMapping AxisMap;
//注册事件名称
AxisMap.AxisName = TEXT("MoveRight");
//绑定映射按键
AxisMap.Key = EKeys::E;
//构建普通按键事件
FInputActionKeyMapping ActionMap;
ActionMap.ActionName = TEXT("DoJump");
//是否需要按下alt键
ActionMap.bAlt = true;
ActionMap.Key = EKeys::G;
//添加轴向事件绑定 注意此函数有默认参数bool,如果为false则下次启动程序应用新的按键映射,默认为true立即生效
UInputSettings::GetInputSettings()->AddAxisMapping(AxisMap);
//移除一个已经添加的按键事件
UInputSettings::GetInputSettings()->RemoveActionMapping(ActionMap);
//保存按键事件表
UInputSettings::GetInputSettings()->SaveKeyMappings();
[/code]
注意引入头文件
#include "GameFramework/PlayerInput.h"
#include "GameFramework/InputSettings.h"
注意,运行代码后,原输入事件将被修改。
虚幻版本4.21.2