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

4.0 KiB
Raw Blame History

UInputCommandData

基本信息

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

功能概述

UDataAsset container for input configuration. Holds InputMappingContext (Enhanced Input mapping context to load) and InputCommands (TArray, the action-to-command mappings). Pure data container with no runtime logic.

设计用意

Standard UE data asset pattern for designer-friendly configuration. Designer creates asset, fills in mappings, assigns to UCommandInputComponent::CommandData. Decouples configuration from code.

职责范围

Configuration data container. Holds mapping context reference and command array. No runtime logic (empty .cpp file).

项目内依赖

依赖项 关系 源文件
FInputCommand 包含 (TArray成员) Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h
CommandEndpoint.h #include (for FDiscreteMeta) Plugins/CharacterControl/Source/CharacterControl/Public/CommandEndpoint.h

对外接口

UInputCommandData 是 UDataAsset 子类,纯数据容器,无运行时逻辑。在 Content Browser 中创建资产,通过资产编辑器配置输入映射。所有属性为 EditAnywhere BlueprintReadOnly设计师可在编辑器中填写。

  • InputMappingContext (TObjectPtr, EditAnywhere, BlueprintReadOnly): 指向 Enhanced Input 的 InputMappingContext 资产。UCommandInputComponent::BeginPlay 将此上下文加载到 EnhancedInputLocalPlayerSubsystem
  • InputCommands (TArray, EditAnywhere, BlueprintReadOnly): FInputCommand 数组,每个条目定义一条 InputAction 到命令的映射。包含InputAction 引用、bIsContinuous 开关、ContinousCommandTag连续标签、DiscreteCommandMeta离散元数据

创建资产后将其赋值给 UCommandInputComponent::CommandData 属性即可激活。多个 UCommandInputComponent 可共享同一个 UInputCommandData 资产。

使用方法

UInputCommandData 是设计时配置资产,运行时由 UCommandInputComponent 消费:

  • 定义: Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h:31-40 -- UCLASS(BlueprintType) UDataAsset 子类,两个 UPROPERTY
  • 读取 InputMappingContext: Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:26-29 -- CommandData->InputMappingContext 传给 Subsystem->AddMappingContext
  • 读取 InputCommands: Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:96 -- 遍历 CommandData->InputCommands 数组
  • 消费 FInputCommand 字段: Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:41-80 -- BuildPacket 读取每个 FInputCommand 的各字段构建 FCommandPacket
  • 空实现: Plugins/CharacterControl/Source/CharacterControl/Private/InputCommandData.cpp -- .cpp 文件只包含 include无任何实现确认为纯数据资产

用例

  • 设计师配置流程: 在 Content Browser 中右键创建 UInputCommandData 资产,配置 InputMappingContext 指向已有的 Enhanced Input 映射上下文。在 InputCommands 数组中添加条目:选择 InputAction设置 bIsContinuous填入 GameplayTag配置 DiscreteCommandMeta 的匹配规则。最后将资产赋值给 PlayerController 上的 UCommandInputComponent::CommandData
  • InputMappingContext 加载: Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:26-29 -- BeginPlay 从 CommandData 读取 InputMappingContext 并通过 Subsystem->AddMappingContext 加载
  • InputCommands 数组遍历: Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:96-114 -- BindAllCommands 遍历 CommandData->InputCommands对每条 FInputCommand 执行输入绑定
  • 多组件共享资产: 同一 UInputCommandData 资产可被多个 UCommandInputComponent 引用,实现配置复用