61 lines
4.4 KiB
Markdown
61 lines
4.4 KiB
Markdown
# ACameraPawn
|
||
|
||
## 基本信息
|
||
- **类型**: UCLASS
|
||
- **父类**: APawn
|
||
- **源文件**: Source/lonese/CameraPawn.h
|
||
- **模块**: lonese
|
||
|
||
## 功能概述
|
||
ACameraPawn 是使用 SpringArmComponent + CameraComponent 构建的摄像机 Pawn,挂接到 FollowTarget 的 Actor 上。支持缩放(臂长范围 300-3000)、旋转(绕目标 Yaw 旋转)、平移(相对偏移,限制在 ±800 范围内)和重置(恢复初始状态)。BeginPlay 将玩家控制器的视图切换至自身并挂接到目标。
|
||
|
||
## 设计用意
|
||
将所有摄像机行为封装在独立 Pawn 中,与角色类完全解耦,实现独立创作、独立测试和灵活替换。FollowTarget + AttachToActor 机制使其可复用于任意 Actor。AMyCharacter 上的 TSubclassOf 属性允许在蓝图中注入自定义摄像机类型。
|
||
|
||
## 职责范围
|
||
摄像机变换管理,包括缩放、旋转、平移和重置操作,以及视口目标设置。不处理角色移动,也不直接绑定输入(输入由 AMyCharacter 转发)。
|
||
|
||
## 项目内依赖
|
||
| 依赖项 | 关系 | 源文件 |
|
||
|--------|------|--------|
|
||
| SpringArmComponent.h | #include(在 .cpp 中) | Engine |
|
||
| CameraComponent.h | #include(在 .cpp 中) | Engine |
|
||
|
||
## 对外接口
|
||
**C++ / Blueprint(UFUNCTION,全部 BlueprintCallable)**
|
||
- `CameraZoom(FInputActionValue)` — 缩放控制。通过调整 SpringArmComponent 的 TargetArmLength 在 MinArmLength(300) 到 MaxArmLength(3000) 之间缩放,速度由 ZoomSpeed(10.0) 控制。
|
||
- `CameraRotate(FInputActionValue)` — 旋转控制。通过修改 SpringArmComponent 绕 FollowTarget 的相对 Yaw 旋转实现绕目标旋转,速度由 RotateSpeed(2.0) 控制。
|
||
- `CameraMove(FInputActionValue)` — 平移控制。通过修改 SpringArmComponent 的 SocketOffset 实现摄像机偏移,限制在 ±CameraMoveClamp(800.0) 范围内,速度由 MoveSpeed(10.0) 控制。
|
||
- `CameraReset(FInputActionValue)` — 重置摄像机。将 SpringArmComponent 的 TargetArmLength 和 SocketOffset 恢复至初始值 (InitialArmLength, 零偏移),旋转恢复至 InitialRotation。
|
||
|
||
**C++ / Blueprint(UPROPERTY,全部 BlueprintReadOnly)**
|
||
- `SpringArmComponent` (USpringArmComponent*) — 弹簧臂组件,控制摄像机臂长和延迟。
|
||
- `CameraComponent` (UCameraComponent*) — 摄像机组件。
|
||
- `FollowTarget` (APawn*, VisibleInstanceOnly) — 跟随目标 Pawn,Tick 中更新 SpringArm 位置跟踪。
|
||
- `InitialRotation` (FRotator, EditDefaultsOnly) — 初始旋转,默认 (-60, 0, 0)。
|
||
- `InitialArmLength` (float, EditDefaultsOnly) — 初始臂长,默认 1200。
|
||
- `RotateSpeed` / `ZoomSpeed` / `MoveSpeed` (float, EditDefaultsOnly) — 旋转/缩放/平移速度。
|
||
- `MaxArmLength` / `MinArmLength` (float, EditDefaultsOnly) — 最大/最小臂长,默认 3000/300。
|
||
- `CameraMoveClamp` (double, EditDefaultsOnly) — 平移限制范围,默认 800。
|
||
|
||
## 使用方法
|
||
- 类声明:`Source/lonese/CameraPawn.h:10-62`
|
||
- 构造函数:`Source/lonese/CameraPawn.cpp:58-73` — 创建 SpringArmComponent 和 CameraComponent,配置臂长、延迟、旋转等默认值。
|
||
- BeginPlay:`Source/lonese/CameraPawn.cpp:76-96` — 将控制器视图切换至自身,若 FollowTarget 已设置则 AttachToActor。
|
||
- Tick:`Source/lonese/CameraPawn.cpp:99-103` — 调用 Super,无额外逻辑。
|
||
- CameraZoom 实现:`Source/lonese/CameraPawn.cpp:10-14`
|
||
- CameraRotate 实现:`Source/lonese/CameraPawn.cpp:17-28`
|
||
- CameraMove 实现:`Source/lonese/CameraPawn.cpp:31-40`
|
||
- CameraReset 实现:`Source/lonese/CameraPawn.cpp:43-49`
|
||
- 由 AMyCharacter 生成并配置 FollowTarget:`Source/lonese/MyCharacter.cpp:111-132`
|
||
|
||
## 用例
|
||
- **BP_CameraPawn** — 项目摄像机蓝图,继承自 ACameraPawn,在蓝图层配置摄像机默认参数。
|
||
- `Document/Content/Blueprints/BP_CameraPawn.md:5`(父类为 ACameraPawn)
|
||
- `Document/Content/Blueprints/_relationships.md:9`
|
||
- **BP_TestChar** — 通过 AMyCharacter 的 CameraActorClass 属性生成 ACameraPawn 实例。
|
||
- `Document/Content/Blueprints/BP_TestChar.md:22`(间接依赖 ACameraPawn)
|
||
- `Document/Content/Blueprints/_relationships.md:27`(CameraActorClass = BP_CameraPawn → ACameraPawn)
|
||
- **BP_ControllerComp** — 摄像机控制端点组件,通过指令系统调用 ACameraPawn 的 SpringArm 变换能力。
|
||
- `Document/Content/Blueprints/BP_ControllerComp.md:13,16`(依赖 ACameraPawn 的摄像机变换能力)
|