Files
loneseDocument/Plugins/CharacterControl/FInputCommand.md

3.9 KiB
Raw Blame History

FInputCommand

基本信息

  • 类型: USTRUCT(BlueprintType)
  • 父类: (none)
  • 源文件: Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h
  • 模块: CharacterControl

功能概述

将 UInputAction 映射到命令路由参数的数据行。包含 InputAction 引用、bIsContinuous 标志位、ContinousCommandTag连续命令的 FGameplayTag、DiscreteCommandMeta离散命令的 TInstancedStruct

设计用意

设计者配置单元。回答"当此输入触发时,应生成什么命令数据包?"将连续和离散元数据分离到不同字段中,以反映不同的路由语义。

职责范围

单个输入到命令映射的配置数据。由 UCommandInputComponent::BuildPacket 使用。存储在 UInputCommandData::InputCommands 数组中。

项目内依赖

依赖项 关系 源文件
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