用途
该技能面向 Godot 引擎中 2D/3D 摄像机控制的实现,提供经过验证的专家模式与配套脚本,用于玩家摄像机、电影化镜头序列以及多摄像机系统。
主要能力
- 平滑跟随:使用 lerp 或 position_smoothing 实现摄像机跟随,避免逐帧直接赋值位置导致的抖动。
- 摄像机抖动:基于 trauma 系统的屏幕震动,支持频率参数,并提供轻量变体。
- 平台游戏死区与拖拽:deadzone/drag 控制,配合前瞻预测(look-ahead)。
- 摄像机过渡:Follow / Static / Cinematic 状态切换。
- 多目标取景:计算目标 AABB 后居中并缩放适配。
- 3D 遮挡处理:SpringArm3D 或自定义射线遮挡。
- 其他:缩放阻尼、迷你地图 SubViewport 管理、分屏、第一人称摇摆、电影化构图等。
使用方式
技能提供一组脚本,要求在实现对应行为前先阅读。核心脚本包括:
- camera_shake_trauma_pro.gd — 任何屏幕震动/冲击表现必读。
- camera_shake_trauma.gd — 较轻量的 trauma 变体。
- remote_transform_decoupling.gd — 物理体跟随的默认必读方案。
- phantom_decoupling.gd — 另一种稳定跟随方案。
- spring_lerp_camera_3d.gd — 自定义 3D 跟随弹簧前必读。
- deadzone_drag_margins.gd — 平台游戏拖拽/死区。
- camera_follow_2d.gd — 平滑 2D 跟随辅助。
- zoom_damping_controller.gd — 非线性缩放。
- camera_state_machine.gd — Follow / Static / Cinematic 过渡。
- cinematic_framing_logic.gd — 三分法/引导空间。
- minimap_viewport_manager.gd — SubViewport 更新模式。
- split_screen_setup.gd — 本地多摄像机视口。
- first_person_sway.gd — FPS 在 offset 上的晃动/摇摆。
- juice_camera.gd — 组合式冲击辅助。
- framing_box_camera_2d.gd — 多目标 AABB 取景与缩放适配。
- occlusion_aware_camera_3d.gd — SpringArm 不足时的射线遮挡。
- trauma_debugger.gd — 调试构建中的屏幕 trauma 衰减曲线。
多目标取景、自定义遮挡、2D/3D 跟随配方和电影化过渡需参考 camera-expert-patterns.md;当黄金路径脚本已覆盖当前装置时不要加载。
适用场景
- 玩家摄像机(2D 平台、俯视、第三人称、第一人称)。
- 电影化镜头序列与镜头过渡。
- 多摄像机系统、分屏、迷你地图。
- 需要屏幕震动/冲击反馈的游戏表现。
限制与禁止事项
- 禁止逐帧使用 global_position = target.global_position,应使用 lerp 或 position_smoothing_enabled。
- 禁止用 offset 做永久摄像机定位,offset 仅用于抖动、摇摆或临时后坐。
- Camera2D 不要忘记 limit_smoothed = true。
- 同一视口不要同时启用多个 Camera2D,只有最后启用的生效。
- SpringArm3D 必须设置碰撞遮罩,否则会穿透地形和墙壁。
- 不要用随机化 position(或对整个系统用 randf 作用于 offset)实现屏幕震动,应使用专用 Trauma/Noise 系统。
- 不要默认把摄像机直接挂在高速物理体下,优先使用 RemoteTransform2D/3D 或 phantom 解耦并禁用旋转同步。
- 3D 中不要在没有 Up 向量兜底的情况下使用 look_at()。
- 迷你地图不要依赖 SubViewport 默认值,应设置 render_target_update_mode。
- 缩放不要使用线性插值,优先指数 lerp 或 Tween TRANS_CUBIC。
参考
官方文档涵盖 Camera2D、Camera3D、SpringArm3D、Viewports、SubViewport、RemoteTransform2D、插值、物理插值、FastNoiseLite、PathFollow2D、鼠标与输入坐标等。相关技能包括前置(godot-project-foundations、godot-gdscript-mastery、godot-input-handling)、互补(godot-tweening、godot-characterbody-2d、godot-physics-3d、godot-raycasting-queries、godot-state-machine-advanced、godot-signal-architecture)、下游(godot-performance-optimization、godot-monte-carlo-balancer、godot-adapt-single-to-multiplayer、godot-debugging-profiling)以及 godot-master。