2.9 KiB
FContinuousPayload
基本信息
- 类型: USTRUCT(BlueprintType)
- 父类: (none)
- 源文件: Plugins/CharacterControl/Source/CharacterControl/Public/CommandEndpoint.h
- 模块: CharacterControl
功能概述
Payload for continuous (analog) commands. Contains CommandTag (FGameplayTag, semantic ID) and ContinuousValue (FVector3f, analog value from input).
设计用意
Separates continuous payload from discrete. FVector3f supports Boolean (0 or 1), Axis1D, Axis2D, Axis3D input types. Tag-based identification means endpoints subscribe by semantics, not input action IDs.
职责范围
Data container for continuous input values. Used when FCommandMeta::bIsContinuous is true.
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| (none) |
对外接口
FContinuousPayload 是连续(模拟量)命令的数据载荷,作为 FCommandPacket::ContinuousPayload 成员存在。所有字段为 BlueprintReadWrite,可在蓝图/C++ 中读写。
- CommandTag (FGameplayTag, BlueprintReadWrite): 命令的语义标签,端点通过匹配此标签来订阅连续命令
- ContinuousValue (FVector3f, BlueprintReadWrite): 从 Enhanced Input 转换来的模拟量值。Boolean 输入转为 OneVector/ZeroVector,Axis1D 存入 X 分量,Axis2D 存入 XY,Axis3D 存入 XYZ
调用者不直接创建 FContinuousPayload,而是通过 UCommandInputComponent::BuildPacket 在连续输入事件触发时自动构建。路由匹配时 UCommandRouter::IsEndpointMatched 读取 CommandTag 与端点 InterestedTags 进行比对。
使用方法
FContinuousPayload 由 BuildPacket 根据输入值类型自动构造:
- 构建:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:73-75-- 使用聚合初始化构造,FContinuousPayload{ Command.ContinousCommandTag, ContinuousValue };非连续命令则构造为空FContinuousPayload{} - 值转换:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:46-67-- 根据 EInputActionValueType 将 Boolean/Axis1D/Axis2D/Axis3D 统一转换为 FVector3f - 匹配使用:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandRouter.cpp:277-- IsEndpointMatched 检查端点 InterestedTags 是否包含 CommandTag
用例
- 连续输入构建:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:73-74-- bIsContinuous 为 true 时,BuildPacket 将 FInputCommand::ContinousCommandTag 和转换后的 ContinuousValue 打包进 FContinuousPayload - 空载荷构建:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandInputComponent.cpp:75-- 离散命令时 ContinuousPayload 为空 - 连续命令匹配:
Plugins/CharacterControl/Source/CharacterControl/Private/CommandRouter.cpp:277-- 连续命令路由时,端点必须声明 bIsContinuousFriendly 且 InterestedTags 包含 CommandTag 才能收到命令