Files
BlueRoseNote/03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/UEI事件系统.md

96 lines
2.5 KiB
Markdown
Raw Normal View History

2026-05-03 20:37:58 +08:00
---
title: UEI事件系统
date: 2026-05-03 00:00:00
excerpt: 引擎回调接口,提供帧生命周期和输入处理钩子
tags:
- ARC
- Gameplay
- Framework
rating: ⭐
---
# UEI 事件系统
返回 [[Gameplay]]
## 概述
UEIUnreal Engine Interface事件系统提供了游戏逻辑与引擎生命周期之间的回调接口。它在引擎的关键时间点触发回调让游戏层能精确控制帧内的执行时序。
## FUEIEventHandler
```cpp
// UEIEventHandler.h
class FUEIEventHandler
{
// 帧生命周期回调
void BeginFrame();
void EndFrame();
void Update();
// 输入处理钩子
// 格斗游戏需要在精确的时间点采样输入
};
```
## FUEISlateApplication
继承 `FSlateApplication`,扩展输入管理:
```cpp
class FUEISlateApplication : public FSlateApplication
{
// User/Controller ID 映射
TMap<int32, int32> UserIndexMap;
// 格斗游戏多手柄输入分配
};
```
格斗游戏中两个玩家可能使用不同的控制器,`UserIndexMap` 负责将物理控制器 ID 映射到游戏内的玩家 ID。
## 使用场景
- 格斗游戏帧同步:在精确的帧时间点采样输入
- 回放系统:按帧记录和回放输入
- 控制器热插拔处理
2026-05-03 21:38:46 +08:00
## 完整代码解析
2026-05-03 20:37:58 +08:00
2026-05-03 21:38:46 +08:00
```cpp
// UEIEventHandler.h — 引擎回调接口
class FUEIEventHandler
{
public:
// 帧生命周期回调
virtual void BeginFrame(); // 帧开始(输入采样时机)
virtual void EndFrame(); // 帧结束
virtual void Update(); // 逻辑更新
// 格斗游戏需要在精确的时间点采样输入
// 确保回放系统的帧同步正确性
};
// UEISlateApplication.h — Slate 输入管理扩展
class FUEISlateApplication : public FSlateApplication
{
// User/Controller ID 映射表
// Key: 物理控制器 Index
// Value: 游戏内玩家 ID
TMap<int32, int32> UserIndexMap;
// 格斗游戏场景:
// 手柄1 (Index=0) → Player 1 (ID=0)
// 手柄3 (Index=2) → Player 2 (ID=1)
// 允许任意手柄对应任意玩家槽位
};
```
## 代码修改情况
| 文件路径 | 修改类型 | 修改内容 |
|---------|---------|---------|
| `Source/Runtime/Engine/Public/UEIEventHandler.h` | **新增文件** | `FUEIEventHandler` 帧生命周期回调接口 |
| `Source/Runtime/Slate/Public/Framework/Application/UEISlateApplication.h` | **新增文件** | `FUEISlateApplication` 控制器映射 |
| `Source/Runtime/Slate/Private/Framework/Application/UEISlateApplication.cpp` | **新增文件** | 实现 |