枚举类 ETriggerEvent,这是Unreal Engine Enhanced Input系统中的一个核心概念。让我详细解释它的功能:
功能概述
ETriggerEvent 定义了输入触发器事件的各种状态,用于描述输入动作在不同帧之间的状态转换。它本质上是一个状态机,用于跟踪输入动作的完整生命周期。
各个状态的含义
1. None (无事件)
- 值 :
0x0 - 描述: 没有显著的触发器状态变化,也没有活动的设备输入
- 状态转换: 初始状态或空闲状态
2. Triggered (已触发)
- 值 :
1 << 0 - 描述: 经过一个或多个处理tick后触发发生
- 状态转换 :
- None → Triggered
- Ongoing → Triggered
- Triggered → Triggered
3. Started (开始)
- 值 :
1 << 1 - 描述: 开始触发器评估的事件
- 重要: 如果Triggered也在同一帧发生,Started事件会先触发
- 状态转换 :
- None → Ongoing
- None → Triggered
4. Ongoing (进行中)
- 值 :
1 << 2 - 描述: 触发处理仍在进行中
- 示例: 用户按住按键但尚未达到"按住"时间阈值
- 状态转换: Ongoing → Ongoing
5. Canceled (已取消)
- 值 :
1 << 3 - 描述: 触发被取消
- 示例: 用户在"按住"时间阈值前释放按键
- 状态转换: Ongoing → None
6. Completed (已完成)
- 值 :
1 << 4 - 描述: 触发状态从Triggered转换到None,表示触发完成
- 注意: 如果同一帧有触发器报告Ongoing,Completed不会触发
- 状态转换: Triggered → None
实际应用场景
按键按下示例:
帧1: None → Started (按键按下)
帧2: Started → Ongoing (按住按键)
帧3: Ongoing → Triggered (达到阈值)
帧4: Triggered → Completed (释放按键)
按键取消示例:
帧1: None → Started (按键按下)
帧2: Started → Ongoing (按住按键)
帧3: Ongoing → Canceled (提前释放按键)
技术特性
- 位标志枚举 : 使用
ENUM_CLASS_FLAGS宏,允许组合使用多个状态 - 蓝图支持 :
BlueprintType元数据使其可在蓝图中使用 - 编辑器集成 :
UseEnumValuesAsMaskValuesInEditor在编辑器中显示为掩码值
在Enhanced Input中的作用
这个枚举是Enhanced Input系统的核心,用于:
- 定义输入动作的触发条件
- 处理复杂的输入序列(如连击、长按等)
- 提供精确的输入事件时序控制
- 支持多种输入设备的统一处理
这个设计使得输入处理更加精细和可控,能够满足复杂游戏输入需求。