3.9 KiB
FInputCommand
基本信息
- 类型: USTRUCT(BlueprintType)
- 父类: (none)
- 源文件: Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h
- 模块: CharacterControl
功能概述
Data row mapping a UInputAction to command routing parameters. Contains InputAction reference, bIsContinuous flag, ContinousCommandTag (FGameplayTag for continuous), DiscreteCommandMeta (TInstancedStruct for discrete).
设计用意
Designer configuration unit. Answers "When this input fires, what command packet should be generated?" Separates continuous and discrete metadata into distinct fields reflecting different routing semantics.
职责范围
Configuration data for one input-to-command mapping. Used by UCommandInputComponent::BuildPacket. Stored in UInputCommandData::InputCommands array.
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| CommandEndpoint.h | #include (for FDiscreteMeta, etc.) | Plugins/CharacterControl/Source/CharacterControl/Public/CommandEndpoint.h |
对外接口
FInputCommand 是一个纯数据配置结构体,定义"某个 Enhanced Input 动作触发时生成什么命令"的映射规则。在 UInputCommandData 资产编辑器中通过详情面板配置。所有字段为 BlueprintReadWrite。
- InputAction (TObjectPtr, BlueprintReadWrite): 引用的 Enhanced Input Action 资产,用于绑定输入事件
- bIsContinuous (bool, BlueprintReadWrite): 命令类型开关。true = 连续命令(使用 Triggered 事件,每帧触发),false = 离散命令(使用 Started 事件,一次性)
- ContinousCommandTag (FGameplayTag, BlueprintReadWrite): 连续命令的语义标签,BuildPacket 时写入 FContinuousPayload::CommandTag
- DiscreteCommandMeta (TInstancedStruct, BlueprintReadWrite): 离散命令的路由元数据,包含 CommandTags 和 bIsAll 匹配模式。BuildPacket 时直接拷贝到 FCommandPacket::DiscretePayload
调用者通过 UInputCommandData 资产配置 FInputCommand 数组,运行时由 UCommandInputComponent::BuildPacket 逐字段读取构建命令包。
使用方法
FInputCommand 在 UInputCommandData::InputCommands 数组中配置,运行时由 UCommandInputComponent 读取:
- 配置定义:
Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h:39-- UInputCommandData::InputCommands 类型为TArray<FInputCommand> - BuildPacket 消费:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:41-80-- BuildPacket 从 FInputCommand 读取 InputAction(获取 CommandID)、bIsContinuous(决定处理路径)、ContinousCommandTag(连续载荷标签)、DiscreteCommandMeta(离散载荷) - 绑定循环:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:96-- BindAllCommands 遍历CommandData->InputCommands数组 - 事件类型选择:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:99-101-- 根据 bIsContinuous 选择 ETriggerEvent::Triggered 或 Started
用例
- 连续命令配置: 策划在 UInputCommandData 资产中将某个 FInputCommand 的 bIsContinuous 设为 true,设置 ContinousCommandTag(如 "Input.Move"),BuildPacket 将摇杆移动量转为 FVector3f,生成每帧触发的连续命令包
- 离散命令配置: 策划将 bIsContinuous 设为 false,配置 DiscreteCommandMeta.CommandTags(如 "Action.Jump")和 bIsAll 匹配模式,BuildPacket 在按键按下时生成一次性命令包
- BuidPacket 字段读取:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:70-78-- BuildPacket 逐一读取 Command.InputAction(CommandID)、Command.bIsContinuous(Meta+载荷选择)、Command.ContinousCommandTag(连续载荷)、Command.DiscreteCommandMeta(离散载荷),组装完整的 FCommandPacket