OK,OK,大家好,欢迎大家来到大鹏 AI 教育,我是张大鹏。
第一次做 2D 关卡,最容易走的弯路是把每一块地砖都当作独立图片摆进场景。十几块还能忍,几百块以后,场景树、碰撞和修改成本都会迅速失控。
这篇文章只完成一个目标:把一张地砖图集变成可绘制、可碰撞、可运行验证的 TileMapLayer 关卡。

TileMapLayer 到底解决什么
一张图集里通常包含草地、墙面、拐角、装饰等小图块。TileSet 负责描述"有哪些地块以及它们具有什么属性",TileMapLayer 负责回答"这些地块画在场景的哪些格子里"。
可以把工作流记成:
- 🖼️ 导入地砖图集
- ✂️ 按统一尺寸切分图块
- 🧱 为需要阻挡角色的图块配置碰撞
- 🖌️ 在
TileMapLayer网格上绘制关卡 - 🎮 运行并用角色验证结果
第一步:创建 TileMapLayer 和 TileSet
在场景中添加 TileMapLayer,然后在检查器中新建 TileSet 资源。

这里有两个尺寸必须分清:
- 📐 图块尺寸:图集中每个小格的像素宽高
- 🗺️ 场景网格:地块在地图中的排列单位
如果原图每块是 16×16,而 TileSet 配成 32×32,自动切分一定会错位。先确认素材尺寸,再填写 TileSet 的 Tile Size。
第二步:把图集切成可选地块
把地砖图片拖进 TileSet 面板,创建 Atlas Source。Godot 会按照 Tile Size 在原图上显示切分网格。

检查切分是否正确时,不要只看第一行。尤其要观察边缘地块、拐角地块和带透明区域的装饰物,确认网格线没有穿过有效像素。
如果切分错位,优先检查:
- 🔍 原图是否真的使用统一网格
- 🔍 Tile Size 是否与素材一致
- 🔍 图集是否存在边距或地块间隔
- 🔍 导入设置是否改变了素材尺寸
第三步:碰撞属于地块,不属于整张图
关卡"看起来有墙"并不代表角色会被挡住。我们还要在 TileSet 中创建物理层,然后为需要阻挡角色的地块绘制碰撞多边形。

推荐从最简单的矩形地块开始。碰撞轮廓只覆盖实体部分,草尖、阴影、透明留白通常不应算作阻挡区域。
斜坡和不规则石块可以使用多边形,但顶点越多并不一定越准确。过度复杂的碰撞形状会增加维护成本,也可能让角色移动产生细碎卡顿。
第四步:像画画一样搭建地图
完成 TileSet 后,回到 TileMapLayer 的绘制模式,从调色板选择地块,在视口网格上绘制。
我通常按下面的顺序搭建:
- 🧱 先画决定路线的墙体和地面
- 🚪 再留出出生点、出口和关键通道
- 🌳 然后补充树木、石头等大型装饰
- ✨ 最后添加小型装饰,打破重复感
一开始不要急着把地图画满。先做一条可以从起点走到终点的短路线,运行验证后再扩展。

用多个 TileMapLayer 管理层次
一个完整关卡通常不只有一层。可以按职责拆分:
- 🌱
Ground:地面,通常不阻挡角色 - 🧱
Walls:墙体和主要碰撞 - 🌿
DecorationBelow:角色下方装饰 - 🌳
DecorationAbove:遮挡角色的前景
拆层的价值不只是视觉排序。你可以单独隐藏、锁定、调整或替换某一类内容,不必在同一层里小心挑选。
一个更实用的验收方式
不要只在编辑器里看地图。把上一篇的 CharacterBody2D 角色放进场景,实际走一圈:
- 🎮 能否从出生点到达目标点
- 🧱 墙角会不会卡住
- 🚧 看似封闭的位置是否漏了碰撞
- 🕳️ 看似可走的位置是否被透明碰撞挡住
- 👀 前景层是否正确遮挡角色
关卡编辑的"完成"不是画面好看,而是画面、碰撞和玩法一致。
最容易踩的五个坑
-
❌ 使用旧教程里的
TileMap操作照搬到新版✅ 新项目优先使用
TileMapLayer,每一层职责更明确。 -
❌ Tile Size 与原图单格尺寸不同
✅ 先确认素材规格,再创建 Atlas。
-
❌ 所有地块都画碰撞
✅ 只为真正阻挡角色的实体地块配置。
-
❌ 装饰和墙体混在同一层
✅ 按地面、墙体、前景和背景拆层。
-
❌ 画完整张地图后才运行
✅ 每完成一小段可玩路线就测试一次。
验收清单
- ✅ 图集切分没有错位
- ✅ 地块尺寸与地图网格一致
- ✅ 墙体地块具有正确碰撞
- ✅ 地面和非实体装饰不会误挡角色
- ✅ 地图至少存在一条完整可玩路线
- ✅ 多层绘制的遮挡关系正确
- ✅ 角色实际跑图时没有穿墙和卡角
小结
TileMapLayer 的重点不在"把图块画出来",而在建立一条稳定的关卡生产链:TileSet 管理地块定义,Atlas 管理图集切分,物理层管理碰撞,多个 TileMapLayer 管理地图职责。
你做 TileMapLayer 时最容易卡在哪一步:图集切分、碰撞配置,还是多层遮挡?欢迎把具体问题发到评论区。
参考资料
- 《大鹏 Godot 4 游戏开发入门》第 5 章 5.4 节"使用 TileMapLayer 设计游戏世界"
- 《大鹏 Godot 4 游戏开发入门》第 5 章 5.4.1 至 5.4.3 节
- Godot 官方文档:TileMapLayer
- Godot 官方文档:使用 TileMap