# 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 的摄像机变换能力)