Files
loneseDocument/Source/lonese/ACameraPawn.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

61 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 的摄像机变换能力)