42 lines
2.9 KiB
Markdown
42 lines
2.9 KiB
Markdown
# 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 才能收到命令
|