如何让 AI 用 tileset 拼出完整场景:结构合理、道路连通、可导入 Godot 的提示词

整理一套让 AI 使用现有 tileset 拼完整场景的提示词,覆盖图片生成、字符网格布局和 Codex 生成 Godot TileMapLayer 地图三种方式。

Godot 系列导航

想按顺序学习,可以先看合集,再根据当前任务跳到对应主题:

更稳的写法是同时规定:

  1. 场景用途:村庄、森林、关卡还是展示图。
  2. 可通行规则:道路必须连通,出生点不能被封死。
  3. 瓦片使用规则:只能使用参考图中的地形和装饰。
  4. 空间结构:入口、主路、支路、水池、墙体、兴趣点。
  5. 装饰密度:道路少装饰,边缘多装饰。
  6. 输出方式:效果图、字符网格、JSON,还是 Godot TileMapLayer 代码。

最重要的一点是:普通图片生成 AI 往往会“参考 tileset 重新绘制”,不一定真正逐格复用原始瓦片。

如果你只是想要概念图,可以让图片模型参考 tileset 生成场景预览。如果你想严格保持每个瓦片像素不变,最好让 AI 先生成布局数据,再由 Godot、脚本或 Codex 按真实 tile 坐标拼接。

适合图片生成 AI 的场景提示词

这种方式适合生成场景概念图或视觉预览。使用时,先上传你的 tileset 图片作为参考图,再使用下面这段提示词。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
请严格参考我提供的 tileset 图集,使用图集中已有的地面、道路、水面、石墙和装饰元素,拼成一张完整、合理、可用于俯视角 RPG 的森林村庄场景。

场景规格:

严格顶视角
不使用透视或等距视角
地图逻辑尺寸为 24×18 个瓦片
每个瓦片逻辑尺寸为 32×32
保持参考 tileset 的原始画风、颜色、纹理、光照方向和比例
不改变瓦片的设计
不新增参考图中不存在的建筑、角色或大型物体
不生成 UI、文字、边框或网格线
输出完整场景,不输出 tileset 图集

地图结构:

地图底层主要使用普通草地,少量混合深色草地和稀疏草地,避免大面积完全重复。
地图下方中央设置一个清晰的入口。
从入口开始铺设一条纵向主路,延伸到地图中央。
主路在地图中央分成左右两条支路,所有道路必须连通,不能出现断路或无意义的道路碎片。
地图右上区域设置一个自然形状的小水池。
水池必须由水面中心、上下左右边缘和转角正确拼接,不能出现水面直接截断或岸边方向错误。
地图左上区域设置一段石墙围合区域,墙体边缘和转角必须正确连接。
水池、石墙和地图边缘之间必须保留至少一个瓦片宽的可通行区域。
地图中央保留一个较开阔的活动区域,方便角色移动。
不要让水池或石墙完全堵住主路。

装饰规则:

小花主要分布在草地区域,不能铺在道路和水面上。
小石头可以少量放在泥土、道路边缘或稀疏草地上。
草丛集中放在地图边缘、水池附近和墙角。
树桩只能少量出现,作为视觉兴趣点,不要堵塞主路。
地面裂纹只放在泥土或干燥区域。
落叶集中在地图角落和墙边。
道路中央保持干净,装饰主要放在道路两侧。
地图中心装饰较少,地图四周装饰密度较高。
不要在每个格子都放装饰,保留自然留白。

合理性要求:

所有道路必须有明确用途并互相连通。
所有可通行区域必须从入口到达。
水面、墙体和道路连接方向必须正确。
不出现孤立的单块水面、单块墙体或错误转角。
不出现无法进入的狭小封闭空间。
地图应像真实设计过的游戏关卡,而不是随机堆放瓦片。
画面需要有主次关系:入口引导玩家进入,主路引向中心,水池和石墙作为次要视觉焦点。

只生成一张完整的俯视角地图场景。

这段提示词的目标是让图片模型先考虑结构,而不是只做装饰。但要注意:即使写了“严格参考 tileset”,图片生成模型仍可能重绘瓦片细节,不能保证像素完全一致。

如果你需要可导入游戏的精确地图,不要只依赖图片生成结果。

让 AI 先输出地图布局

这种方式更适合保持地图合理性。先让 AI 不画图,只输出一张 24×18 的字符地图。得到布局后,再让 Codex 或脚本把字符转换成 Godot 的 TileMapLayer.set_cell()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
请根据以下规则设计一张 24×18 的俯视角 RPG 森林地图布局。

地图符号:
G = 普通草地
D = 深色草地
S = 稀疏草地
R = 道路
W = 水面
A = 石墙
F = 小花
K = 小石头
B = 草丛
U = 树桩
C = 地面裂纹
L = 落叶
P = 玩家入口

设计要求:

P 位于地图下方中央。
从 P 开始必须有一条道路通向地图中央。
道路在中央分成左右支路,所有道路必须连通。
右上区域设置一个面积约为 4×5 的自然形状水池。
左上区域设置一段合理连接的石墙。
地图中央保留至少 7×5 的开阔活动区。
水池、墙体和地图边缘之间至少保留一格可通行空间。
玩家必须能从 P 到达所有主要道路和开阔区域。
不允许出现封闭的单格草地区域。
不允许道路、水面或墙体出现无意义的单格碎片。
装饰不能阻挡主要道路。
地图边缘装饰较多,中央区域装饰较少。
小花只放在草地上。
地面裂纹只放在泥土或稀疏草地区域。
落叶主要放在角落和墙体附近。
保持整体自然、不完全对称,但结构清晰。

输出要求:

第一部分只输出完整的 24×18 字符网格。
每行必须正好包含 24 个字符。
总共必须正好输出 18 行。
第二部分列出入口坐标、道路节点、水池范围和墙体范围。
第三部分检查地图是否存在断路、封闭区域或无法到达区域。
不生成图片。

这种方式的好处是可检查、可修正、可程序化转换。你可以让 AI 先给出布局,再继续要求它自检:

1
2
3
4
5
6
7
8
9
请检查上面的字符地图:
1. P 是否能到达所有 R 道路;
2. 是否存在孤立的 W 水面;
3. 是否存在孤立的 A 石墙;
4. 是否存在被水面或墙体封死的可通行区域;
5. 每一行是否正好 24 个字符;
6. 总行数是否正好 18 行。

如果发现问题,请输出修正后的完整 24×18 地图。

比起直接出图,这种流程更像在做关卡设计。先验证地图结构,再考虑视觉细节。

让 Codex 严格使用 tileset 拼 Godot 地图

这是最可靠的方式,因为它真的会使用图集里的瓦片坐标,而不是重新绘制。

下面这段提示词适合在 VS Code 的 Codex 面板里使用。前提是你的 Godot 项目已经有 TileMapLayer 节点,并且 TileSet 已经导入。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
这是一个 Godot 4.x 项目,需要使用现有 TileSet 创建一张完整地图。

场景结构:

World:Node2D
├─ Ground:TileMapLayer
├─ Roads:TileMapLayer
├─ Water:TileMapLayer
├─ Walls:TileMapLayer
├─ Decorations:TileMapLayer
└─ PlayerSpawn:Marker2D

tileset 图集为 6 列 × 5 行,坐标定义如下:

第一行:
(0,0) 普通草地
(1,0) 深色草地
(2,0) 稀疏草地
(3,0) 泥土地面
(4,0) 石板地面
(5,0) 沙土地面

第二行:
(0,1) 横向道路
(1,1) 纵向道路
(2,1) 左上转角道路
(3,1) 右上转角道路
(4,1) 左下转角道路
(5,1) 右下转角道路

第三行:
(0,2) 水面中心
(1,2) 水面上边缘
(2,2) 水面下边缘
(3,2) 水面左边缘
(4,2) 水面右边缘
(5,2) 水面外角

第四行:
(0,3) 石墙中心
(1,3) 石墙顶部
(2,3) 石墙底部
(3,3) 石墙左侧
(4,3) 石墙右侧
(5,3) 石墙转角

第五行:
(0,4) 小花
(1,4) 小石头
(2,4) 草丛
(3,4) 树桩
(4,4) 地面裂纹
(5,4) 落叶

任务:

创建一张 24×18 的森林村庄地图。
地图下方中央设置玩家入口。
主路从入口通向中央,并在中央分成左右支路。
右上角创建一个合理连接的小水池。
左上角创建一段合理连接的石墙。
中央保留开阔区域。
所有道路必须连通。
水面和墙体不能堵死通路。
装饰主要放在地图边缘、水池附近和墙角。
道路中央不要放装饰。
不出现孤立水块、孤立墙块或错误方向的转角。
source_id 使用 @export 配置。
使用 Godot 4 TileMapLayer.set_cell()。
使用静态类型。
地图数据和绘制逻辑分开。
在代码中加入地图尺寸检查和可达性检查。
如果现有 tileset 缺少完成某种连接所需的瓦片,不要猜测或用错误瓦片替代,应明确指出缺失项。

先读取当前项目、场景和 TileSet 资源,确认真实 source_id 和 atlas 坐标,再修改代码。不要直接假设 source_id 等于 0。

这段提示词里最重要的是最后一句:

1
先读取当前项目、场景和 TileSet 资源,确认真实 source_id 和 atlas 坐标,再修改代码。不要直接假设 source_id 等于 0。

因为 Godot 的 source_id、atlas 坐标、TileSet Source 顺序都可能与你想象的不一样。AI 如果直接猜,很容易写出能运行但铺错瓦片的代码。

更适合 Codex 的二阶段提示词

如果项目已经比较复杂,不建议让 Codex 一次完成所有内容。可以先让它只做设计和检查,不改文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
这是一个 Godot 4.x 项目。

请先不要修改任何文件。

请完成以下检查:

1. 读取当前场景结构;
2. 找到所有 TileMapLayer 节点;
3. 找到它们使用的 TileSet;
4. 确认真实 source_id;
5. 列出 tileset 中每个 atlas 坐标对应的瓦片;
6. 判断是否足够拼出 24×18 森林村庄地图;
7. 如果缺少道路、水面或墙体连接瓦片,请明确列出缺失项;
8. 给出地图数据结构设计;
9. 给出可达性检查方案;
10. 暂时不要写代码。

确认分析没有问题后,再让它实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
现在开始实现地图生成脚本。

要求:

1. 只修改 World 的脚本;
2. 不修改 TileSet;
3. 不修改场景节点名称;
4. 地图尺寸为 24×18;
5. 使用数组或字典保存地图数据;
6. 使用 TileMapLayer.set_cell() 绘制;
7. 使用 @export 配置 source_id 和关键 atlas 坐标;
8. 添加地图尺寸检查;
9. 添加道路连通性检查;
10. 添加从 PlayerSpawn 到主要区域的可达性检查;
11. 如果检查失败,push_error() 输出原因;
12. 修改完成后说明如何在 Godot 中测试。

这种两阶段方式更稳。先让 AI 理解项目,再让它动手。

提示词中最重要的几句

以后无论生成什么场景,最好都加入下面这些规则:

1
2
3
4
5
6
所有道路必须互相连通,并具有明确用途。
不要出现孤立的单块水面、墙体或道路。
地图中心保持可读,地图边缘增加装饰密度。
每个主要区域必须能够从玩家入口到达。
装饰物不能阻挡主要通行路线。
先设计地图结构,再添加装饰。

最后一句特别重要:

1
先结构,后装饰。

如果不写这句,AI 很容易先追求“看起来丰富”,最后得到道路杂乱、装饰堵路、区域无法到达的场景。

推荐工作流

最稳的流程是:

  1. 先用 AI 生成或整理 tileset。
  2. 在 Godot 中创建 TileSet,确认每个瓦片的 atlas 坐标。
  3. 让 AI 先输出字符地图或 JSON 布局。
  4. 检查道路连通、入口可达、水面和墙体是否合理。
  5. 再让 Codex 把布局转换成 TileMapLayer.set_cell()
  6. 在 Godot 里运行,打开碰撞和调试显示。
  7. 最后再微调装饰密度。

一句话总结:

不要让 AI 一上来就“画漂亮场景”。先让它设计结构,再让脚本按真实 tileset 坐标拼图。这样得到的地图才更容易进入 Godot 项目,而不是停留在一张好看的概念图。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计