This commit is contained in:
meishibiezb
2026-06-04 21:37:53 +08:00
parent b0d2a0e2e7
commit 29a3f77908
63 changed files with 4068 additions and 1 deletions

View File

@@ -0,0 +1,60 @@
# 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++ / BlueprintUFUNCTION全部 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++ / BlueprintUPROPERTY全部 BlueprintReadOnly**
- `SpringArmComponent` (USpringArmComponent*) — 弹簧臂组件,控制摄像机臂长和延迟。
- `CameraComponent` (UCameraComponent*) — 摄像机组件。
- `FollowTarget` (APawn*, VisibleInstanceOnly) — 跟随目标 PawnTick 中更新 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 的摄像机变换能力)