3.9 KiB
3.9 KiB
UInputCommandData
基本信息
- 类型: UCLASS(BlueprintType)
- 父类: UDataAsset
- 源文件: Plugins/CharacterControl/Source/CharacterControl/Public/InputCommandData.h
- 模块: CharacterControl
功能概述
输入配置的 UDataAsset 容器。持有 InputMappingContext(要加载的增强输入映射上下文)和 InputCommands(TArray
设计用意
标准 UE 数据资产模式,便于设计者配置。设计者创建资产、填充映射、分配给 UCommandInputComponent::CommandData。将配置与代码解耦。
职责范围
配置数据容器。持有映射上下文引用和命令数组。无运行时逻辑(.cpp 文件为空)。
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| 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 引用,实现配置复用