This commit is contained in:
meishibiezb
2026-06-05 03:01:15 +08:00
parent 29a3f77908
commit a8bdf281ff
41 changed files with 1935 additions and 779 deletions

View File

@@ -4,7 +4,7 @@
- **类型**: Blueprint (Pawn)
- **父类**: ACameraPawn
- **源文件**: /Game/Blueprints/BP_CameraPawn.BP_CameraPawn
- **模块**: Content
- **模块**: Content/Blueprints
## 功能概述
BP_CameraPawn 是分离式第三人称摄像机的蓝图实现,继承 C++ 的 ACameraPawn。在蓝图层面配置摄像机参数初始旋转、臂长范围、速度等并提供编辑器内可视化调整能力。
@@ -20,33 +20,51 @@ BP_CameraPawn 负责摄像机参数的蓝图级配置和编辑器内可视化调
|--------|------|--------|
| ACameraPawn | 父类 | C++ 源码 |
## 对外接口
- **继承自 ACameraPawn 的 BlueprintCallable 函数**
- `CameraZoom(const FInputActionValue& Value)` -- 摄像机缩放,调整 SpringArm 臂长
- `CameraRotate(const FInputActionValue& Value)` -- 摄像机旋转,调整 SpringArm 的旋转偏移
- `CameraMove(const FInputActionValue& Value)` -- 摄像机平移,调整 SpringArm 的 SocketOffset
- `CameraReset(const FInputActionValue& Value)` -- 重置摄像机到默认位置和旋转
- **继承自 ACameraPawn 的 BlueprintReadOnly 属性**
- `SpringArmComponent` (USpringArmComponent*) -- SpringArm 组件引用
- `CameraComponent` (UCameraComponent*) -- Camera 组件引用
- `FollowTarget` (APawn*) -- 跟随目标 PawnVisibleInstanceOnly
- **蓝图可调的配置参数**EditDefaultsOnly, BlueprintReadOnly
- `InitialRotation` = FRotator(-60, 0, 0) -- 初始俯仰角
- `InitialArmLength` = 1200.0f -- 初始臂长
- `RotateSpeed` = 2.0f -- 旋转速度
- `ZoomSpeed` = 10.0f -- 缩放速度
- `MoveSpeed` = 10.0f -- 平移速度
- `MaxArmLength` = 3000.0f / `MinArmLength` = 300.0f -- 臂长范围
- `CameraMoveClamp` = 800.0 -- 平移限制范围
## 外部视角
BP_CameraPawn 是 ACameraPawn 的蓝图子类(自身不添加新变量或函数),从外部调用者视角,其接口全部继承自 C++ 父类:
**组件BlueprintReadOnly**
- `SpringArmComponent`USpringArmComponent*)— 弹簧臂组件,外部只读
- `CameraComponent`UCameraComponent*)— 摄像机组件,外部只读
- `FollowTarget`APawn*)— 当前跟随的目标 Pawn外部只读
**配置参数BlueprintReadOnly可在蓝图默认值面板调整**
- `InitialRotation`FRotator默认 -60°, 0°, 0°— 初始摄像机旋转
- `InitialArmLength`float默认 1200— 初始臂长
- `MinArmLength`float默认 300 / `MaxArmLength`float默认 3000— 臂长范围
- `RotateSpeed`float默认 2.0)— 旋转速度
- `ZoomSpeed`float默认 10.0)— 缩放速度
- `MoveSpeed`float默认 10.0)— 移动速度
- `CameraMoveClamp`double默认 800.0)— 摄像机移动范围限制
**操作函数(蓝图可调用)**
- `CameraZoom(FInputActionValue)` — 根据输入值缩放臂长
- `CameraRotate(FInputActionValue)` — 根据输入值旋转摄像机
- `CameraMove(FInputActionValue)` — 根据输入值移动摄像机位置
- `CameraReset(FInputActionValue)` — 重置摄像机到初始状态
**EventGraph 事件**
| 事件 | 类型 | 触发时机 | 行为 |
|------|------|----------|------|
| `事件开始运行` | 原生覆盖 (BeginPlay) | Pawn 生成时由引擎自动触发 | 预留(当前无连线逻辑) |
| `事件Actor开始重叠` | 原生覆盖 (OnActorBeginOverlap) | 与其他 Actor 碰撞时 | 预留(当前无连线逻辑) |
| `事件Tick` | 原生覆盖 | 每帧 | 预留(当前无连线逻辑) |
**外部交互方式**
- 通常通过 BP_TestChar 的 CameraActorClass 设置自动创建
- C++ 层通过 `Cast<ACameraPawn>` 获取引用并调用其操作函数
## 使用方法
- 通过 BP_TestChar (AMyCharacter) 的 `CameraActorClass` 属性配置,角色 Possess 时自动生成摄像机实例
- 继承自 ACameraPawnC++ 层提供了完整的 SpringArm+Camera 组件和变换逻辑
- 蓝图层面可在 EventGraph 中响应事件event_count=3node_count=3
- 配置参数均为 `EditDefaultsOnly`,在蓝图类默认值中调整摄像机行为,无需修改 C++ 代码
- ACameraPawn 的 Tick() 处理每帧的臂长插值、旋转跟随和移动偏移,蓝图不参与底层变换
- `FollowTarget` 在运行时由 SetFollowTarget 逻辑自动设置为当前控制的角色
BP_CameraPawn 在项目中的典型调用流程:
- **摄像机初始化流程** — BP_TestChar 的 CameraActorClass 设为 BP_CameraPawn → BP_TestChar Possess 后自动生成 BP_CameraPawn 实例 → ACameraPawn 的 C++ 逻辑绑定 SpringArm + Camera 组件 → 读取蓝图配置的 InitialRotation/InitialArmLength 初始化
- **摄像机控制流程** — 玩家输入 → Enhanced Input 系统 → ACameraPawn 的 CameraZoom/Rotate/Move/Reset 函数 → C++ 层处理 SpringArm 变换和臂长插值
## 用例
- BP_TestChar (AMyCharacter) 中 `CameraActorClass` 属性引用,作为角色的分离式摄像机
- 被 Possess 角色时自动生成,跟随 `FollowTarget` Pawn
| 引用方 | 路径 | 用途 |
|--------|------|------|
| BP_TestChar | `/Game/Blueprints/BP_TestChar` | 设为 CameraActorClass在角色生成时自动创建分离式摄像机 |