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