init
This commit is contained in:
44
Plugins/CharacterControl/FInputCommand.md
Normal file
44
Plugins/CharacterControl/FInputCommand.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 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<FDiscreteMeta> 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<UInputAction>, BlueprintReadWrite): 引用的 Enhanced Input Action 资产,用于绑定输入事件
|
||||
- **bIsContinuous** (bool, BlueprintReadWrite): 命令类型开关。true = 连续命令(使用 Triggered 事件,每帧触发),false = 离散命令(使用 Started 事件,一次性)
|
||||
- **ContinousCommandTag** (FGameplayTag, BlueprintReadWrite): 连续命令的语义标签,BuildPacket 时写入 FContinuousPayload::CommandTag
|
||||
- **DiscreteCommandMeta** (TInstancedStruct<FDiscreteMeta>, 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
|
||||
Reference in New Issue
Block a user