Files
loneseDocument/Plugins/CharacterControl/FContinuousPayload.md

42 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FContinuousPayload
## 基本信息
- **类型**: USTRUCT(BlueprintType)
- **父类**: (none)
- **源文件**: Plugins/CharacterControl/Source/CharacterControl/Public/CommandEndpoint.h
- **模块**: CharacterControl
## 功能概述
连续(模拟)命令的载荷。包含 CommandTagFGameplayTag语义标识符和 ContinuousValueFVector3f来自输入的模拟值
## 设计用意
将连续载荷与离散载荷分离。FVector3f 支持布尔型0 或 1、一维轴、二维轴、三维轴输入类型。基于标签的标识意味着端点按语义订阅而非输入动作 ID。
## 职责范围
连续输入值的数据容器。当 FCommandMeta::bIsContinuous 为 true 时使用。
## 项目内依赖
| 依赖项 | 关系 | 源文件 |
|--------|------|--------|
| (none) | | |
## 对外接口
FContinuousPayload 是连续(模拟量)命令的数据载荷,作为 FCommandPacket::ContinuousPayload 成员存在。所有字段为 BlueprintReadWrite可在蓝图/C++ 中读写。
- **CommandTag** (FGameplayTag, BlueprintReadWrite): 命令的语义标签,端点通过匹配此标签来订阅连续命令
- **ContinuousValue** (FVector3f, BlueprintReadWrite): 从 Enhanced Input 转换来的模拟量值。Boolean 输入转为 OneVector/ZeroVectorAxis1D 存入 X 分量Axis2D 存入 XYAxis3D 存入 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 才能收到命令