HOME / 第 3 部分 · 2D 游戏开发实战 / 第 23 课
MODULE 3 · 2D 游戏开发实战

第 23 课 · 摄像机 Camera2D:跟随与边界

⏱ 预计时长 30 分钟📊 难度 入门📚 模块 第 3 部分 · 2D 游戏开发实战

🎯 本课学习目标

地图比屏幕大?你需要摄像机。本课让 Camera2D 平滑跟随玩家并锁定边界。

📖 详细教学步骤

添加 Camera2D搭建

  1. 在玩家 Player 场景添加子节点 Camera2D,命名 PlayerCamera
  2. 把玩家实例放进比窗口大的地图场景
  3. F5 运行:镜头默认跟着玩家(因为它是玩家的子节点)

💡 摄像机作为角色子节点 = 自动跟随,最常用。

平滑跟随属性

选中 Camera2D,检查器里:

  • Position Smoothing Enabled 勾选
  • Position Smoothing Speed:越小越拖尾,建议 5-10

效果:镜头像橡皮筋一样缓缓追着玩家。

限制镜头边界(Limit)属性

  1. 选中 Camera2D → 检查器 Limit 分组
  2. 设置 Left/Top/Right/Bottom(世界坐标)
  3. 例:地图 2000×1200 → Left=0、Top=0、Right=2000、Bottom=1200

防止看到地图外的黑边。

代码插值跟随与缩放进阶

想更自由地控制跟随,用 lerp 插值:

GDSCRIPTextends Camera2D

@onready var player = get_parent()
@export var follow_speed: float = 5.0

func _ready():
    zoom = Vector2(0.8, 0.8)   # 拉远镜头

func _physics_process(delta):
    global_position = global_position.lerp(
        player.global_position, follow_speed * delta)

镜头抖动特效进阶

受击/爆炸时抖动很带感:

GDSCRIPTfunc shake(intensity: float = 0.3):
    var tween = create_tween()
    tween.tween_property(self, "offset", Vector2(intensity, 0), 0.05)
    tween.tween_property(self, "offset", Vector2(-intensity, 0), 0.05)
    tween.tween_property(self, "offset", Vector2.ZERO, 0.05)
⚠️
镜头没跟随玩家?

确认 Camera2D 是玩家子节点;若独立放在主场景则需脚本控制。

⚠️
镜头看到黑边?

设置 Limit 四个边界并匹配地图尺寸。

🧪 动手试一试

🏋️ 课后练习

做 2000×1200 大地图,玩家移动时镜头平滑跟随且不越界。

Camera2D 子节点 + Smoothing + Limit。

💡

把 shake() 存成通用函数,受击/爆炸时调用。

💡

Zoom 小于 1 拉远、大于 1 拉近。

🎓 本课小结

Camera2D 作为角色子节点自动跟随;Smoothing 平滑、Limit 边界、zoom 缩放;脚本 lerp 与 shake 提供自由控制。