2024年11月16日
UE5中实现发射按键事件,模拟按键输入(虚拟键盘)
前言
软件开发中,有时需要在 UI 页面中增加按钮,点击按钮执行业务逻辑。如果是常规事件,则可以通过绑定事件实现。但是在一些设计中,事件响应是通过按键按下后执行的,但也同时希望在 UI 上增加按钮响应相同的事件。我们该如何设计呢?
当然我们可以通过 UI 中响应事件,然后调用业务逻辑实现。这种做法的问题在于:UI与业务逻辑过于耦合。
其实我们可以将 UI 事件转化为按键事件,不仅可以利用虚幻引擎强大的输入系统,还能显著降低逻辑耦合,提升代码的可维护性与扩展性。
一些产品可能是优先在PC端完成开发,然后所有的输入事件是通过键盘输入响应的,但是产品需要适配移动端,移动端无法通过键盘输入,只能通过触摸屏输入。我们就可以通过程序模拟按键输入,从而实现虚拟键盘的业务设计。
实现
我们可以通过以下编码来实现向引擎发送按键事件:Copy
FKeyEvent KeyEvent(
EKeys::A, // 按键
FModifierKeysState(), // 修饰键状态(Shift、Ctrl等)
0, // 用户索引
false, // 是否重复按键
0, // 字符码(ASCII/Unicode)
0 // 键盘扫描码
);
FSlateApplication::Get().ProcessKeyDownEvent(KeyEvent);
当然,以下方案也可以实现:
FInputKeyEventArgs Args(GEngine->GameViewport->Viewport, 0, EKeys::A, EInputEvent::IE_Pressed);
GEngine->GameViewport->Viewport->InputKey(Args);
在模拟按键输入时,切记不要在
Tick
Pressed
Released
总结
通过程序模拟按键输入,可以显著降低逻辑耦合,提升代码的可维护性与扩展性。这种设计思路适合中大型项目开发,能有效地减少维护成本,增强输入逻辑的适配性和可拓展性。
通过这种方式,开发者可以专注于核心逻辑实现,而不必在 UI 和输入之间的接口处理中耗费过多精力。这种事件与业务逻辑的剥离,是现代游戏开发中追求模块化和高可用性的重要体现。
引擎版本:5.3.2