update
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
- **类型**: Blueprint (ActorComponent)
|
||||
- **父类**: BP_EndpointComp_C (即 UEndpointComponent)
|
||||
- **源文件**: /Game/Blueprints/Component/BP_ControllerComp.BP_ControllerComp
|
||||
- **模块**: Content
|
||||
- **模块**: Content/Blueprints/Component
|
||||
|
||||
## 功能概述
|
||||
BP_ControllerComp 是自定义控制器端点组件,管理摄像机的缩放和跟随模式。持有多个摄像机相关配置参数:移动速度(MoveSpeed)、臂长范围(MinArmLength / MaxArmLength)、缩放速度(ZoomSpeed)、跟随模式开关(IsFollowMode)以及跟随目标角色引用(FollowedChar)。
|
||||
@@ -22,34 +22,51 @@ BP_ControllerComp 负责摄像机控制参数的管理、跟随模式的切换
|
||||
| UEndpointComponent | 祖父类 | CharacterControl 插件 |
|
||||
| ACharacter | 引用 (FollowedChar) | 引擎内置 |
|
||||
|
||||
## 对外接口
|
||||
- **蓝图函数**:
|
||||
- `MoveController(A: GameplayTag, InVec: Vector)` -- 摄像机移动指令处理,接收 GameplayTag 和移动向量
|
||||
- `RotateController(A: GameplayTag, InVec: Vector)` -- 摄像机旋转指令处理
|
||||
- `ZoomCamera(A: GameplayTag, InVec: Vector)` -- 摄像机缩放指令处理,通过 InVec 中的值调整臂长
|
||||
- `ResetControllerLocation(DiscreteMeta: DiscreteMeta)` -- 摄像机位置重置,接收离散命令元数据
|
||||
- `TickFollowChar()` -- 跟随模式每帧更新,将摄像机位置锁定到 FollowedChar
|
||||
- **蓝图变量**(均为 is_instance_editable):
|
||||
- `MoveSpeed` (double) -- 摄像机移动速度
|
||||
- `MinArmLength` (double) -- 最小臂长
|
||||
- `MaxArmLength` (double) -- 最大臂长
|
||||
- `ZoomSpeed` (double) -- 缩放速度
|
||||
- `IsFollowMode` (bool) -- 是否启用跟随模式
|
||||
- `FollowedChar` (Character*) -- 跟随目标角色引用
|
||||
- **继承自 (BP_EndpointComp_C / UEndpointComponent) 的接口**:
|
||||
- `EndpointState` -- 端点状态,含 `InterestedTags` 配置摄像机控制相关标签
|
||||
- `OnCommandReceived` -- 收到指令时的处理入口
|
||||
- **EventGraph**:含 6 个事件和 27 个节点,处理摄像机控制的核心逻辑
|
||||
## 外部视角
|
||||
|
||||
BP_ControllerComp 是 BP_EndpointComp_C(即 UEndpointComponent)的蓝图子类,从外部调用者视角:
|
||||
|
||||
**公开配置属性(蓝图可读写)**
|
||||
- `MoveSpeed`(double)— 摄像机移动速度
|
||||
- `MinArmLength` / `MaxArmLength`(double)— 臂长最小/最大值
|
||||
- `ZoomSpeed`(double)— 缩放速度
|
||||
- `IsFollowMode`(bool)— 是否启用跟随模式
|
||||
- `FollowedChar`(Character*)— 跟随模式的目标角色
|
||||
|
||||
**自定义函数**
|
||||
- `MoveController(GameplayTag, Vector)` — 处理摄像机移动指令
|
||||
- `RotateController(GameplayTag, Vector)` — 处理摄像机旋转指令
|
||||
- `ZoomCamera(GameplayTag, Vector)` — 处理摄像机缩放指令
|
||||
- `ResetControllerLocation(DiscreteMeta)` — 重置摄像机位置
|
||||
- `TickFollowChar()` — 每帧更新跟随目标位置
|
||||
|
||||
**外部交互方式**
|
||||
- 作为 BP_TestChar 的组件自动创建
|
||||
- 指令系统通过 UCommandRouter 将摄像机控制指令路由到该组件
|
||||
- 外部系统可通过组件引用读取/修改其配置参数
|
||||
|
||||
**EventGraph 事件**
|
||||
|
||||
| 事件 | 类型 | 触发时机 | 行为 |
|
||||
|------|------|----------|------|
|
||||
| `事件开始运行` | 原生覆盖 (BeginPlay) | 组件创建时由引擎自动触发 | 调用父类 BeginPlay |
|
||||
| `事件Tick` | 原生覆盖 | 每帧 | 调用父类 Tick,然后调用 TickFollowChar 更新跟随目标位置 |
|
||||
| `事件OnCommandReceived` | 委托事件 (EndpointComponent) | 收到指令路由系统派发的 CommandPacket | 解析 CommandPacket → 根据 GameplayTag 分发到 MoveController/RotateController/ZoomCamera(连续指令)或 ResetControllerLocation(离散指令) |
|
||||
| `EnterFollowMode` | 自定义事件 | 外部系统通过指令或直接调用触发 | 设置 IsFollowMode=true → 获取 Owner → Cast 到 PlayerController → Cast 到 Character → 设为 FollowedChar |
|
||||
| `EnterFreeMode` | 自定义事件 | 外部系统通过指令或直接调用触发 | 设置 IsFollowMode=false,解除跟随 |
|
||||
| `DealWithCommand` | 自定义事件 | 收到指令时由组件内部逻辑调用 | 调用 DealWithCommand(CommandPacket) 函数进行指令处理分发 |
|
||||
|
||||
## 使用方法
|
||||
- 作为 ActorComponent 添加到 BP_TestChar
|
||||
- 在组件实例上配置 `MoveSpeed`、`MinArmLength`、`MaxArmLength`、`ZoomSpeed` 等摄像机参数
|
||||
- 通过 `EndpointState.InterestedTags` 配置关注的摄像机控制 GameplayTag(如 "Camera.Move"、"Camera.Zoom"、"Camera.Rotate"、"Camera.Reset")
|
||||
- 开启 `IsFollowMode` 并设置 `FollowedChar` 可启用角色跟随模式
|
||||
- `MoveController`、`RotateController`、`ZoomCamera` 函数由 OnCommandReceived 事件根据指令标签分发调用
|
||||
- `TickFollowChar()` 在 EventGraph 的 Tick 事件中调用,实现每帧跟随
|
||||
- `UCommandRouterComponent` 自动发现并注册本组件
|
||||
|
||||
BP_ControllerComp 在项目中的典型调用流程:
|
||||
|
||||
- **摄像机移动控制流程** — 外部输入 → UCommandRouter 派发 → `OnCommandReceived` 触发 → 解析 CommandPacket → 根据 GameplayTag 路由到 MoveController/RotateController/ZoomCamera → 更新摄像机位置/旋转/臂长
|
||||
- **跟随模式切换流程** — 外部系统调用 `EnterFollowMode` → 设置 IsFollowMode=true → 获取 Owner → Cast 到 PlayerController → Cast 到 Character 设为 FollowedChar → Tick 中 TickFollowChar 每帧更新摄像机位置跟随角色
|
||||
- **自由模式切换流程** — 外部系统调用 `EnterFreeMode` → 设置 IsFollowMode=false → TickFollowChar 不再更新摄像机位置
|
||||
|
||||
## 用例
|
||||
- BP_TestChar 的组件,处理摄像机控制指令
|
||||
- 通过配置参数在运行时动态调整 ACameraPawn 的行为(臂长、速度、跟随目标)
|
||||
|
||||
| 引用方 | 路径 | 用途 |
|
||||
|--------|------|------|
|
||||
| BP_TestChar | `/Game/Blueprints/BP_TestChar` | 作为端点组件添加到角色,处理摄像机控制指令 |
|
||||
| BP_TestCtl | `/Game/Blueprints/BP_TestCtl` | 引用 BP_ControllerComp 用于摄像机控制 |
|
||||
|
||||
Reference in New Issue
Block a user