Files
loneseDocument/Content/Blueprints/BP_MoveInput.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

46 lines
3.0 KiB
Markdown
Raw 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.
# BP_MoveInput
## 基本信息
- **类型**: Blueprint (ActorComponent)
- **父类**: UEndpointComponent
- **源文件**: /Game/Blueprints/Component/BP_MoveInput.BP_MoveInput
- **模块**: Content
## 功能概述
BP_MoveInput 是移动输入端点组件,持有对 CharacterMovementComponent 的引用(通过 CharMove 变量),将指令系统中的移动指令转化为实际的角色移动。
## 设计用意
BP_MoveInput 是指令系统和 UE 移动系统之间的桥梁。它持有 `CharMove` (CharacterMovementComponent*) 引用,在 OnCommandReceived 中接收移动指令(连续指令,如 "Command.Move"),从 FCommandPacket.ContinuousPayload.ContinuousValue 提取移动向量,然后调用 CharacterMovementComponent 的移动接口。这种设计将输入系统和移动系统解耦——指令的生成、路由和执行分别由不同的组件负责。
## 职责范围
BP_MoveInput 负责接收移动指令并将其转换为 CharacterMovementComponent 的移动调用。移动向量通过连续指令的 ContinuousValue 传入,由 BP_MoveInput 提取并应用。指令的生成由 UCommandInputComponent 负责,指令的路由匹配由 UCommandRouter 负责。
## 项目内依赖
| 依赖项 | 关系 | 源文件 |
|--------|------|--------|
| UEndpointComponent | 父类 | CharacterControl 插件 |
| UCharacterMovementComponent | 引用 (CharMove) | 引擎内置 |
## 对外接口
- **蓝图变量**
- `CharMove` (CharacterMovementComponent*) -- 持有对所属角色的 CharacterMovementComponent 引用is_instance_editable可在组件实例上配置
- **继承自 UEndpointComponent 的接口**
- `EndpointState` (FEndpointState) -- 端点状态,含 `InterestedTags` 配置关注的移动指令标签(如 "Command.Move"
- `OnCommandReceived(const FCommandPacket& Command)` (BlueprintImplementableEvent) -- 收到移动指令时调用,在 EventGraph 中实现node_count=22
- `OnEndpointStateChanged` / `OnCommandOutput` -- 状态和输出委托
- **通过 EventGraph 的行为**
-`Command.ContinuousPayload.ContinuousValue` 提取移动向量 (FVector3f)
- 调用 `CharMove` 的移动接口将向量转化为实际角色移动
## 使用方法
- 作为 ActorComponent 添加到 BP_TestChar
- 设置 `CharMove` 变量指向所属角色的 `CharacterMovementComponent`
- 配置 `EndpointState.InterestedTags` 添加移动相关 GameplayTag如 "Command.Move"
- 设置 `EndpointState.bIsContinuousFriendly = true`(移动是连续指令)
- `UCommandRouterComponent` 自动发现并注册本组件为端点
- 当 EnhancedInput 产生移动输入 -> UCommandInputComponent 生成 FCommandPacket -> UCommandRouterComponent 按标签匹配 -> 本组件的 OnCommandReceived 收到指令 -> 从 ContinuousPayload.ContinuousValue 提取 FVector3f -> 调用 CharacterMovementComponent 执行移动
## 用例
- BP_TestChar 的组件,处理移动指令
- 通过 `CharMove` 变量连接 CharacterMovementComponent实现指令到移动的桥接