Godot 系列导航
想按顺序学习,可以先看合集,再根据当前任务跳到对应主题:
- 使用 AI Codex 开发 Godot 游戏入门:从环境搭建到瓦片地图的文章合集
- DeepSeek V4 Flash 做 Godot 游戏 Demo:几毛钱能跑通到什么程度?
- Godot 游戏开发入门:从节点、场景到第一个 2D 小游戏
- GodotPrompter:给 AI 编码助手补上 Godot 项目经验
- gd-agentic-skills:把 Godot 开发经验拆成 AI 可调用的技能
- Godot 新手起步:用 VS Code 和 Codex 扩展开发 2D 游戏
- Godot Agent Skill 对比:haxqer/godot-skill、agent-skill-godot 与 GD-Agentic-Skills 该装哪个
- Godot 标准版和 .NET 版怎么选:GDScript、C# 与导出平台对比
- Godot 渲染器怎么选:Forward+、Mobile 和 Compatibility 对比
- Godot 信号是什么:signal、connect 和 emit 用法详解
- Godot 瓦片地图入门:TileMapLayer、TileSet、碰撞和 Codex 辅助开发
- Godot Tileset AI 生成提示词:可直接复制的瓦片素材图集 Prompt
- 如何让 AI 用 tileset 拼出完整场景:结构合理、道路连通、可导入 Godot 的提示词 Godot 的瓦片地图,可以理解成把一张包含草地、道路、墙壁、水面等小图片的素材表,切成规则格子,再像画画一样拼出关卡。
在 Godot 4.x,尤其是 4.3 之后的新项目中,建议使用 TileMapLayer。旧的 TileMap 节点已经被标记为弃用;现在更推荐一个地图层对应一个 TileMapLayer 节点。这样层级更清楚,也更符合 Godot 的节点组织方式。
官方文档也明确说明:TileMapLayer 是用于 2D tile-based maps 的节点,它使用 TileSet 创建网格地图;如果需要多层效果,可以使用多个 TileMapLayer。
官方文档:
https://docs.godotengine.org/en/stable/classes/class_tilemaplayer.html
https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html
先理解两个核心概念
瓦片地图最重要的是两个东西:
TileSetTileMapLayer
TileSet 相当于瓦片素材库,里面保存:
- 草地、土地、墙壁、水面、道路等瓦片。
- 每个瓦片的碰撞形状。
- Terrain 自动连接规则。
- 导航、遮挡和自定义数据。
TileMapLayer 相当于画布。它使用 TileSet 里的瓦片来绘制地图。
推荐从这种节点结构开始:
|
|
分层的好处很明显:
- 地面不会和墙壁混在一起。
- 可以单独设置显示顺序。
- 可以单独隐藏某一层。
- 只给墙壁层添加碰撞,地面层保持简单。
- 后续让 Codex 写脚本时,节点职责更清楚。
创建第一张瓦片地图
先准备一张瓦片图片,例如:
|
|
图片内部每个格子大小要一致,常见尺寸有:
|
|
假设素材每个瓦片是 32 × 32,那么 TileSet 的 Tile Size 也应该设置成 32 × 32。
添加 TileMapLayer
在场景里添加:
|
|
把 TileMapLayer 改名为:
|
|
选中 Ground,在 Inspector 中找到:
|
|
点击:
|
|
然后点击刚创建的 TileSet 资源,把 Tile Size 设置为素材格子大小,例如:
|
|
加入瓦片素材
选中 Ground 后,底部会出现 TileMap / TileSet 编辑面板。
把 tileset.png 拖到 TileSet 面板中,选择自动创建瓦片。Godot 会按照 Tile Size 把图片切成一块块小瓦片。
这一步完成后,TileSet 就拥有了可绘制的瓦片,Ground 这个 TileMapLayer 就可以使用它来画地图。
绘制地图
切换到底部的 TileMap 面板:
- 选择一个草地瓦片。
- 使用铅笔工具绘制。
- 用橡皮擦删除。
- 用矩形工具快速铺一片区域。
- 用填充工具快速铺满连续区域。
刚开始不要急着做大地图。先画一个 20 × 15 的小地图,只要有草地、墙壁和玩家出生点就够了。
给墙壁添加碰撞
不要给所有地面瓦片都加碰撞。通常只给这些不可通行内容添加碰撞:
- 墙壁。
- 石头。
- 栅栏。
- 水域边界。
- 悬崖。
选中 TileSet 资源,在 Inspector 中找到:
|
|
点击:
|
|
常见配置是:
|
|
然后在底部 TileSet 面板中:
- 切换到碰撞或物理绘制相关工具。
- 选择墙壁瓦片。
- 给墙壁区域绘制矩形或多边形碰撞。
这样,同一个 TileSet 中的不同瓦片就可以拥有不同碰撞形状。
玩家如何被瓦片墙挡住
玩家场景可以这样搭:
|
|
玩家移动脚本可以从最小版本开始:
|
|
只要 Player 的碰撞层、遮罩与 TileSet 的物理层匹配,玩家移动时就会被墙壁瓦片挡住。
运行游戏时可以打开:
|
|
这样能直接看到墙壁和玩家的碰撞形状,排错会轻松很多。
地图建议分成三层
初学阶段,推荐使用三层:
|
|
每个节点都是独立的 TileMapLayer。
Ground 放:
- 草地。
- 泥土。
- 道路。
- 地板。
通常没有碰撞。
Walls 放:
- 墙壁。
- 悬崖。
- 水域边界。
- 不可穿越的石头。
通常有碰撞。
Decoration 放:
- 小花。
- 草叶。
- 地面裂纹。
- 阴影。
通常没有碰撞。
可以使用 z_index 控制基本显示顺序:
|
|
如果有树木、屋顶、桥洞这类需要遮挡玩家的对象,后面再考虑 Y Sort,或者把对象拆成上下两部分。第一张地图不必一开始就把遮挡系统做复杂。
使用 Terrain 自动连接道路和墙壁
如果你希望画地图时自动生成边缘和转角,例如:
- 草地自动连接泥土边缘。
- 道路自动生成转角。
- 墙壁自动判断上下左右。
- 水面自动生成岸边。
就需要使用 Godot 的 Terrain Set。
基本流程是:
- 在
TileSet中添加Terrain Set。 - 设置匹配模式,例如按边和角匹配。
- 创建 Terrain,例如
Grass、Dirt、Water。 - 给各个瓦片标注对应的地形连接位置。
- 在
TileMapLayer中切换到Terrains绘制模式。 - 使用
Connect或Path工具画地图。
Godot 会根据周围格子自动选择直线、转角、边缘瓦片。官方文档中也提到,Terrain 连接模式包括 Connect 和 Path:Connect 更容易上手,Path 更适合需要更多人工控制的道路或路径。
刚开始不必立刻学习 Terrain。先手动画一张小地图,理解 TileSet、TileMapLayer 和碰撞之后,再做自动连接。
在代码中操作瓦片
假设场景结构是:
|
|
可以在 World 脚本中引用 Ground:
|
|
这里的 cell 是地图格子坐标。例如:
|
|
表示在第 5 列、第 3 行放置一个草地瓦片。
注意:SOURCE_ID 和 GRASS_TILE 的 atlas 坐标必须以你实际的 TileSet 为准,不能直接照搬示例。
世界坐标和格子坐标互转
鼠标点击的位置是世界坐标,而瓦片地图使用格子坐标。通常需要先转成本层的局部坐标,再转成地图格子。
世界坐标转格子坐标:
|
|
格子坐标转回地图位置:
|
|
如果要做鼠标点击放置瓦片,可以这样写:
|
|
如果还想支持右键删除瓦片,可以使用:
|
|
set_cell()、erase_cell()、local_to_map() 和 map_to_local() 都是 TileMapLayer 常用 API。
宝箱、门、金币不要都画成普通瓦片
这些对象通常不适合只画成普通瓦片:
- 金币。
- 宝箱。
- 可以打开的门。
- NPC。
- 敌人。
- 传送点。
- 机关。
- 可以破坏的箱子。
它们有脚本、动画、碰撞和信号,更适合做成独立场景。
例如金币:
|
|
然后放进:
|
|
普通瓦片适合静态地图;有行为的对象适合独立 Scene。Godot 也支持 Scene Collection 类型的瓦片,但初学阶段手动放置独立场景更容易理解,也更容易排错。
Codex 最适合帮你做什么
Codex 很适合辅助这些工作:
- 写玩家移动脚本。
- 读取地图格子。
- 程序化生成地图。
- 随机铺地面。
- 鼠标放置和删除瓦片。
- 寻找出生点。
- 读取自定义瓦片数据。
- 检查
TileMapLayerAPI 用法。 - 实现金币、门、宝箱逻辑。
可以这样给 Codex 提示:
|
|
Codex 不太适合这些工作:
- 判断素材应该切成多少像素。
- 视觉化绘制整张地图。
- 精细配置 Terrain 位掩码。
- 凭空猜
source_id。 - 凭空猜 atlas 坐标。
- 大规模手写
.tscn地图数据。
更合理的分工是:你在 Godot 编辑器中创建 TileSet、配置碰撞并绘制地图;Codex 负责编写地图交互、生成逻辑和 gameplay 脚本。
第一个练习怎么做
建议第一个练习只做一张 20 × 15 的小地图:
Ground铺草地。Walls画一圈墙。- 给墙壁瓦片配置碰撞。
- 放一个
Player。 - 让玩家移动时被墙挡住。
- 再加入一个
Coin场景。
这个练习做完,你就会真正理解 Godot 瓦片地图的基本工作流:
|
|
先把这个最小地图跑通,再去研究 Terrain、Y Sort、程序化生成和大地图加载,会稳很多。