2.9 KiB
2.9 KiB
FContinuousPayload
基本信息
- 类型: USTRUCT(BlueprintType)
- 父类: (none)
- 源文件: Plugins/CharacterControl/Source/CharacterControl/Public/CommandEndpoint.h
- 模块: CharacterControl
功能概述
连续(模拟)命令的载荷。包含 CommandTag(FGameplayTag,语义标识符)和 ContinuousValue(FVector3f,来自输入的模拟值)。
设计用意
将连续载荷与离散载荷分离。FVector3f 支持布尔型(0 或 1)、一维轴、二维轴、三维轴输入类型。基于标签的标识意味着端点按语义订阅,而非输入动作 ID。
职责范围
连续输入值的数据容器。当 FCommandMeta::bIsContinuous 为 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 才能收到命令