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

4.4 KiB
Raw Permalink Blame History

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配置臂长、延迟、旋转等默认值。
  • BeginPlaySource/lonese/CameraPawn.cpp:76-96 — 将控制器视图切换至自身,若 FollowTarget 已设置则 AttachToActor。
  • TickSource/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 生成并配置 FollowTargetSource/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:27CameraActorClass = BP_CameraPawn → ACameraPawn
  • BP_ControllerComp — 摄像机控制端点组件,通过指令系统调用 ACameraPawn 的 SpringArm 变换能力。
    • Document/Content/Blueprints/BP_ControllerComp.md:13,16(依赖 ACameraPawn 的摄像机变换能力)