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

原文地址:https://www.pome.cc/ue5/keyevent/

添加评论

您的邮箱地址不会被公开。 必填项已用 * 标注