HOME / 第 3 部分 · 2D 游戏开发实战 / 第 23 课
MODULE 3 · 2D 游戏开发实战
第 23 课 · 摄像机 Camera2D:跟随与边界
🎯 本课学习目标
- 添加 Camera2D 并让镜头跟随玩家
- 设置平滑跟随与镜头缩放
- 用 Limit 限制镜头不越出地图
地图比屏幕大?你需要摄像机。本课让 Camera2D 平滑跟随玩家并锁定边界。
📖 详细教学步骤
添加 Camera2D搭建
- 在玩家 Player 场景添加子节点
Camera2D,命名 PlayerCamera - 把玩家实例放进比窗口大的地图场景
- F5 运行:镜头默认跟着玩家(因为它是玩家的子节点)
💡 摄像机作为角色子节点 = 自动跟随,最常用。
平滑跟随属性
选中 Camera2D,检查器里:
- Position Smoothing Enabled 勾选
- Position Smoothing Speed:越小越拖尾,建议 5-10
效果:镜头像橡皮筋一样缓缓追着玩家。
限制镜头边界(Limit)属性
- 选中 Camera2D → 检查器 Limit 分组
- 设置 Left/Top/Right/Bottom(世界坐标)
- 例:地图 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 提供自由控制。