UE-Connect
一、概述
UE-Connect 是一个专为QuickUIDesign 应用设计的 Unreal Engine 5 (UE5) 连接器模块。它提供了一套完整的 hooks 和上下文管理工具,使 UE-Connect 能够与 UE5 进行双向通信,特别适用于基于 QuickUIDesign 的 UE5 交互界面开发。
二、安装
- 拷贝 ue-connect 库文件到项目中
- 配置package.json,添加ue-connect库的引用
三、核心功能
1. 上下文管理
UEProvider 和 useUEContext
提供全局的 UE5 连接状态管理。
返回值说明:
isConnected: 表示是否已连接到 UE5 窗口isMobile: 表示是否为移动设备useMouse: 表示是否启用鼠标事件setUseMouse: 用于设置是否启用鼠标事件的函数lastKeyAction: 最近一次按键操作,来自 UE5 的输入事件
UEProvider 说明:
UEProvider 内部集成了鼠标事件管理 (useUEMouse) 和输入事件监听 (useInputKeyEventListener),子组件通过 useUEContext 可直接获取连接状态、设备类型、鼠标状态及最近按键操作。
2. QuickUI自定义事件系统
useQuickUIEventSender 和 useQuickUIEventListener
实现 Web 与 UE5 之间的自定义事件通信,用户可以设计自己的事件名称和Json格式。
useQuickUIEventSender用于发送事件,需要指定事件名称(对应UE5后端QuickUIListenEvent接收)useQuickUIEventListener用于监听事件,需要指定事件名称(对应UE5后端QuickUIEventCallBack发送)
useQuickUIEvent 参数说明:
fnName: 事件名称(对应 Blueprint / UMG 事件名)- 返回值:发送事件的函数,接受
payload?: QuickEventPayload参数
useQuickUIEventListener 参数说明:
fnName: 事件名称(对应 Blueprint / UMG 事件名)handler: 事件处理函数,接收QuickEvent对象event.type: 事件类型(固定为 "event")event.topic: 事件主题/名称event.payload: 事件载荷数据event.timestamp: 事件时间戳event.source: 事件源("web" 或 "ue")
3. 鼠标事件管理
useUEMouse
- 管理鼠标事件与 UE5 的交互,支持自动检测禁用区域。
data-nohit属性:用于标记不触发鼠标事件的元素区域
特性:
- 自动检测带有
data-nohit属性的元素 - 当鼠标悬停在禁用区域时自动禁用鼠标事件
- 支持移动设备像素比适配
4. 游戏控制
useUEGameControl
提供游戏控制功能,如退出游戏、执行控制台命令等。
可用方法:
quitGame(): 退出游戏executeCommand(command: string): 执行控制台命令clientTravel(address: string): 客户端旅行到指定地址getGraphics(): 获取图形设置applyAndSaveGraphics(...): 应用并保存图形设置
5. 设备适配
useDevicePixelRatio
自动适配设备像素比,确保在不同设备上显示一致。
6. 输入管理
useInputBlocker
管理输入事件阻止,防止意外交互。
useInputKeyEventListener(实验性)
监听 UE5 引擎发送的按键导航事件(上/下/左/右/确认/上一页/下一页),适用于 TV 端或手柄遥控器等非鼠标输入场景。
注意: 这是一个实验性的 Hook,可能在未来的版本中移除。
参数说明:
options.onKeyAction(可选): 按键事件回调函数,接收KeyAction类型参数
返回值说明:
lastKeyAction: 最近一次按键操作,值为"Up" | "Down" | "Left" | "Right" | "Next" | "Previous" | "Select" | null
注册的全局函数:
该 Hook 会在 window 对象上注册以下全局函数供 UE5 通过 ExecuteJs 调用:
组件卸载时自动清理所注册的全局函数。
7.底层API
useUEEventJSON
useUEEventJSON是更底层的API,用于直接发送JSON格式的事件数据到UE5。
注意: 这是早期使用的 API,推荐使用
useQuickUIEventSender封装后的 API。
向 UE5 发送 JSON 格式的事件数据。
参数说明:
functionName: UE5 蓝图中注册的事件名称- 支持复杂嵌套的 JSON 数据结构
useUECallback(Old)
UE5 回调函数,用于在 UE5 引擎发送新数据时,web端触发回调,处理数据。
注意: 这是早期使用的 API,推荐使用
useQuickUIEventListener封装后的 API。
参数说明:
functionName: 回调函数名称(在UE5中自定义约定的调用函数名)onData: 数据处理回调函数,UE5发送的数据
特性说明:
- 优化性能:只在后端真正发送新数据时触发回调
- 自动管理:组件挂载时注册全局函数,卸载时自动清理
- 稳定引用:使用ref保持回调引用稳定,避免频繁重新注册
8.辅助函数
filterUECallBackJSonData
这是已给与useUECallback配套的通用筛选函数,用于处理 UE 回调的 Json 序列,支持过滤和筛选属性。
方法签名:
参数说明:
data: UE 回调的待处理Json数据filters: 筛选条件对象,键为属性名,值为筛选值或筛选函数
返回值:
- 筛选后的数据对象,如无匹配则返回
undefined
使用示例(结合 useUECallback):
特性说明:
- 灵活筛选:支持使用函数或值进行筛选
- 类型安全:支持 TypeScript 泛型,保持类型一致性
- 自动清理:无匹配属性时返回
undefined,便于后续处理 - 与 useUECallback 完美结合:在回调处理中使用,简化数据处理逻辑
四、完整示例
五、类型定义
类型定义
使用 TypeScript 类型
六、最佳实践
- 性能优化
- 合理使用
data-nohit属性避免不必要的鼠标事件处理 - 在不需要时禁用鼠标事件以减少性能开销
- 错误处理
- 始终检查
isConnected状态再发送事件 - 对重要操作添加错误处理和用户反馈
- 事件命名
- 使用清晰的事件命名规范
- 保持 Web 端和 UE5 端事件名称一致
- 数据格式
- 使用一致的 JSON 数据格式
- 避免发送过大的数据包
- 类型安全
- 使用 TypeScript 类型定义自定义事件载荷
- 充分利用类型检查避免运行时错误