Files
loneseDocument/Plugins/CharacterControl/FContinuousPayload.md

2.9 KiB
Raw Blame History

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