update
This commit is contained in:
@@ -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*) -- 跟随目标 Pawn(VisibleInstanceOnly)
|
||||
- **蓝图可调的配置参数**(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 时自动生成摄像机实例
|
||||
- 继承自 ACameraPawn,C++ 层提供了完整的 SpringArm+Camera 组件和变换逻辑
|
||||
- 蓝图层面可在 EventGraph 中响应事件(event_count=3,node_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,在角色生成时自动创建分离式摄像机 |
|
||||
|
||||
Reference in New Issue
Block a user