# 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 才能收到命令