Files
loneseDocument/Plugins/CharacterControl/FInputCommand.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

3.9 KiB
Raw Blame History

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.InputActionCommandID、Command.bIsContinuousMeta+载荷选择、Command.ContinousCommandTag连续载荷、Command.DiscreteCommandMeta离散载荷组装完整的 FCommandPacket