Day 2 · 共 10 节
今天不追求开放世界。目标只有一个:用 TileMap 铺出一小块能站、有路、有墙的古风村庄地面。你是导演,AI 是铺砖帮工。
承接 Day1:项目已通电、角色图已就位。今天只加「地」。每节都有可验收成品;卡住就复制 Prompt,别死磕菜单英文。
游戏里的地图,很少是一张超大背景图硬贴上去。大图好看,但很难改、也难精确做碰撞:你想挪一条路,往往得重画整张。更常见、也更适合 AI 协作的做法是:把地面切成很多小方砖,像铺地板一样拼起来。草地一块、石板一块、墙一块——拼多了,村子就出现了。
为什么导演必须关心这个?因为你对 AI 下指令时,不能只说「给我一张美丽村庄」。那常会得到一张不可玩的插画:没法切片、没法铺、也没法当碰撞用。你要说:「给我能重复拼接的地砖,尺寸统一,风格一致,包含草/路/墙。」——可拼接,才可铺;可铺,才可走;可走,才叫游戏地图。
今天的成品定义请写清楚,并贴在备忘录置顶:屏幕上有一块用方砖铺成的区域,有路、有边界,角色以后走在上面不会掉出宇宙。先别管精美建筑群、动态天气、日夜循环、河流桥梁。那些是后面剧集,不是今天这一场戏的杀青标准。
网格地图的好处:好改、好扩、好做碰撞。改一路石板,不用重画整张插画。指挥 AI 时,优先要「可复用地砖」,不要只要「一张完成图」。完成图可以当概念设定,但不能替代施工材料。
生活比喻:装修时你买的是「瓷砖型号」,不是让厂家直接浇筑整间永久混凝土房。Godot 的 Tile 系统,就是游戏世界的瓷砖系统。导演负责选型号与验收;帮工(AI)负责出砖与协助切片。
再提醒一次工作流:先写完成定义,再让 AI 出砖,再进 Godot 铺。顺序反了,就容易在「找感觉」里耗掉整天。零基础最贵的不是软件,是注意力。把注意力花在可验收的小成品上,你才会越做越稳,而不是越学越虚。
在纸上画 3 个小格子,分别写:草地、石板路、墙。这就是你今天的采购清单——三种砖,够搭一个院子。写完再开工,别边做边临时加「雪山」「码头」。
先把两个词分清,后面菜单才不吓人。很多人卡在 Godot,不是因为手笨,而是因为「样品」和「施工现场」混着叫。
Tile(图块/地砖):一小块可重复使用的地面或墙面单元,通常是固定边长的方块,比如 16×16、32×32。你的草地砖、石板砖、墙砖,都是 Tile。它像单片瓷砖,可以在地图上出现很多次。
TileSet(图块集):把很多 Tile 收进一本「样品册」。常见流程是:先有一张「砖册贴图」(tileset 图集 PNG),Godot 再按格子切开,登记成一本可点选的 TileSet 资源(例如 .tres)。你在编辑器底部点选的那一排小图,就是样品册打开的样子。
导演为什么要懂?因为你对 AI 说「生成 tileset」时,必须加约束:尺寸统一、缝尽量对齐、风格一致、尽量无文字、内容分类清楚。否则帮工给你一张氛围插画,你根本切不开、铺不齐,一天都会耗在修图上。
新手建议全项目统一用 32×32 或 16×16,不要混用。混用会让地图「牙齿不齐」,角色站位也别扭。今天选定一个尺寸,写进项目现状备忘录,之后所有出图 Prompt 都带上它。
比喻再钉一次:Tile 是单片瓷砖;TileSet 是你从建材市场买回来的「同系列色卡」。没有色卡,工人(TileMap)就没东西可铺。色卡不统一,铺出来就像三家装修队同时施工。
你可以把 TileSet 想成剧组的「道具册」:每一页都是可反复使用的标准件。道具册越乱,现场越慢。所以今天宁可砖少而齐,也不要砖多而杂。三种主砖够用;第四种砖若不能服务完成定义,就先不进册。
决定你的砖尺寸:写下「我选 32×32」或「我选 16×16」。从现在起所有地砖 Prompt 都带上这个数字——统一尺寸是地图不翻车的第一保险。
TileMap 是施工现场:它拿着 TileSet 这本样品册,在网格上「涂砖」。你点一下草地,那一格就变成草地;按住拖,一路石板就铺出去了。
Godot 4 里更常见的结构是:场景中放 TileMap 节点,下面再挂一个或多个 TileMapLayer(图层)。你也可以把 Layer 想成「透明片」:地面一层、装饰一层、墙一层。版本细节若和菜单略有出入,以你编辑器显示为准——让 AI 按你的 Godot 小版本号逐步指点即可。
工作流可以记成三拍:选 TileSet → 选某一层 → 在视口网格里绘制。画错了用橡皮/右键清除(具体快捷键可问 AI)。别怕画丑:地砖地图天生就适合迭代,丑版本也是可玩版本。
TileMap 负责「把砖放到世界坐标网格里」。没有 TileSet,TileMap 是空包工头;有 TileSet 不绘制,世界仍是虚空。验收标准:视口里能看见你铺出的格子图案。
导演口令模板:「在 village 场景根下添加 TileMap,创建 Ground 图层,TileSet 使用 res://assets/tiles/village_tileset.tres,先铺 20×15 的草地。」——看见没有?成品、路径、尺寸都写清了。
Village (Node2D)
TileMap
Ground (TileMapLayer)
Decor (TileMapLayer)
Walls (TileMapLayer)
HeroSprite (Sprite2D) # Day1 的角色,先摆着
打开村庄场景,尝试添加 TileMap(即使还没有漂亮砖)。能在场景树里看见它,本节就过——施工队先入场,砖可以后到。
现在去「进货」。你要的不是一张风景海报,而是一张可切片的砖册:多块同尺寸小图排在一张 PNG 上;或者至少是若干张同尺寸单砖,稍后由你导入。海报只能看,砖册才能施工。
对 AI 出图,请把下面约束写进 Prompt:古风村庄;2D 游戏素材;顶视或清晰可切片的方块风格;指定像素尺寸(如 32×32 网格);无文字无水印;内容至少包含草地、石板路、墙;背景干净或透明。若一次出不齐,就分三次生成:先草地,再路,再墙——分批进货比一次求全更稳。
审美标准今天要刻意放低:能辨认「这是草、这是路、这是墙」就够。统一比精美重要;可拼接比单张惊艳重要。导演验收的是「能不能铺进 Godot」,不是「能不能进美术馆」。太好看但切不动的图,反而是进度杀手。
平铺(tileable)意识:草地砖四边颜色最好能相接,否则大地会有缝。若 AI 做不到完美无缝,先用「能认出」的版本推进;Day6 换装也不迟。完成定义大于皮肤。
导出时用 PNG,命名别玩梗:建议 village_tiles.png。文件名稳定,Prompt 和路径说明才好写。把图放到一个你找得到的文件夹,准备拖进 Godot。
如果 AI 连续两次都给你海报风大图,请换策略:明确要求「seamless tile」「32x32 grid」「top-down game asset」,并要求「separate tiles in a sheet」。仍不行就让它一次只生成一种砖。导演的职责包括:发现帮工理解偏了,就改口令,而不是硬用错材料。
导出至少一张 PNG 到电脑并命名。文件落地,本节完成——货到了,才谈上架。若出图很惨,也先收下,下节用「能用」标准继续。
货到了,开始上架。把 village_tiles.png 拖进 Godot 的 res://assets/tiles/(没有文件夹就新建)。看到文件系统出现缩略图,说明素材已进入片场仓库。
接着创建 TileSet:常见路径是选中 TileMap 或 TileMapLayer → 在 TileSet 属性里新建 → 在底部 TileSet 编辑面板 Add Atlas → 选中 PNG → 把纹理区域/切片大小设为 32×32(或你选定的尺寸)→ 让 Godot 按网格切出多块砖。最后把 TileSet 另存为 village_tileset.tres,路径写进你的现状备忘录。
若菜单名称和你的小版本不一致,不要空耗。把 Godot 版本号和面板截图发给 AI:「请按我的界面逐步指点创建 Atlas TileSet。」导演不靠背按钮名称,靠描述现状 + 要逐步清单。
成功长什么样:你能看见一排可点击的小砖;点选后能在视口绘制。点不到砖,优先检查切片尺寸是否和素材一致,其次检查是否选错层、是否忘记指定 TileSet 资源。
TileSet 保存成独立资源,才能在多个场景复用,也方便备份与给 AI 指路。这是「管项目」:资源有固定地址,口令才准确。
res://assets/tiles/
village_tiles.png
village_tileset.tres # 样品册资源
让样品册里至少能点到 2 种不同砖(草与路,或草与墙)。点得动,就过关——上架成功比铺完美更优先。
施工开始。选中 Ground 图层,选中草地砖,在视口里拖出一大片区域——比如大约 20×12 格。这是村子的「院子底板」。别先抠细节,先让世界「有地」:大面积底色能立刻降低空虚感,也会让你更敢继续。
再换石板路砖,从一侧通向中心画一条路,或画一个简单「十」字路口。路的职责是可读:让玩家(和明天的你)一眼看出该往哪走。路不必弯成真实古道,也不必铺满装饰纹样。先让结构成立。
绘制时记住:你在铺「逻辑网格」,不是自由绘画。砖会对齐。若整体错位,多半是 Tile Size 与素材不一致,回到 TileSet 检查。若只是不好看,先继续——功能地图可以丑,但不能没有底板与路径。
把 Day1 的角色 Sprite 挪到草地或路中央,保存场景,按 F5 看一眼。即使角色还不会走,你也应感到:「世界有地了。」这种可见进展,是零基础项目里最值钱的燃料。
地面层一般不需要碰撞(角色走在上面)。碰撞留给墙和障碍。过早给草地加碰撞,角色会像踩在隐形弹簧上,排查非常耗时。今天 Ground 只负责「能看见的地」。
铺地时还有一个导演习惯:每铺完一步就保存。Godot 很稳,但人会误触。保存是廉价保险。铺完草地保存一次,铺完路再保存一次。未来你让 AI 帮忙改场景文件时,也更有回退点。管项目,往往就是这些不起眼的小动作。
若你发现角色比地砖大很多或小很多,先不要慌。今天允许「比例奇怪」。比例可以 Day3/Day6 再调 Scale。先保证地存在、路可读、人站得上,就已经打赢结构仗。
截一张「有草有路」的视口图。有路可读,本节完成。若路歪了,允许重铺——地砖地图的美德就是可重来。
只有贴图的墙,是「绘景墙」:好看,但角色会穿过去,像穿过布景板。游戏要的是「真墙」——引擎知道这里走不通。所以墙砖通常要配置 Collision(碰撞):给砖加上矩形(或多边形)碰撞形状。
在 TileSet 编辑里选中墙类砖,进入 Physics/Collision 相关面板,为该砖添加覆盖砖面的碰撞。然后在 Walls 图层用这些墙砖围出边界,记得留一个缺口当「村口」。封死四合院却不留门,明天角色一能走就会把自己关进监狱。
生活比喻:贴了壁纸不等于砌了承重墙;碰撞才是钢筋水泥。导演验收时不要只看截图好不好看,还要追问:如果角色会走,他会不会穿墙?今天即使还不能实测走路(Day3 才做移动),也要先在 TileSet 里确认墙砖有碰撞形状,把真墙准备好。
碰撞层/掩码(layer/mask)以后会细讲。今天只要保证:墙砖有碰撞形状;Walls 层确实用了这些砖。若配置迷糊,把 TileSet 碰撞面板截图给 AI,比干问「为什么穿墙」更高效。
# 今天先用清单验收(Day3 角色会走后再实测)
1) 墙砖在 TileSet 里看得到碰撞形状吗?
2) Walls 层是否用了「带碰撞」的那几块砖?
3) 村口是否故意留了缺口(不要封死自己)?
关于「现在还不能走路,做碰撞有没有用」:有用。碰撞是地图的规则层,移动是角色的能力层。规则先就位,能力一接上就能测。反过来,角色会走了才发现满地图穿墙,你会被返工淹没。预埋真墙,是给明天的自己减少灾难。
若你实在找不到碰撞面板,不要空耗超过 15 分钟。截图 + 版本号问 AI,或先用静态 StaticBody2D 墙体顶替(进阶做法,可让 AI 说明)。目标是「有挡住」的可能性,不是背诵官方文档目录。
围出矩形院子并留一个口,保存场景。同时确认墙砖具备碰撞形状——真墙先上岗,明天移动测试才有意义。
把所有东西画在一层,就像把台词、布景、灯光全写在一张草稿纸上——你想改路边小草,可能误擦掉墙的碰撞。地图一复杂,返工成本会指数上升。所以我们分层,像叠透明片。
建议至少三层,名字用英文,方便写进 Prompt:
Ground:草地、土路、石板(可走,通常无碰撞)。
Decor:花草、石灯、水缸等装饰(默认无碰撞,或极少数障碍)。
Walls:围墙、挡住去路的障碍(有碰撞)。
分层的导演收益非常具体:你可以对 AI 说「只调整 Decor 的密度,禁止改 Walls 的碰撞形状」。边界清晰,AI 就不容易「顺手帮你重构全世界」。这是管项目,不是洁癖。
以后做角色走进屋檐、被物体遮挡,会遇到 Y 排序等问题。今天不必深挖。先保证层存在、名字清楚、职责不混。名字是给未来的你和 AI 用的路标。
装饰点到为止:村口两盏灯、路边三丛草就很豪华。装饰过多会让你明天找「为什么卡住」时眼花。克制是审美,也是进度管理——导演会说「够了」。
分层也会影响你怎么写 Prompt。坏口令:「把地图弄好看点。」好口令:「仅在 Decor 层增加 3 个石灯,沿石板路两侧放置;不要改 Ground 与 Walls;不要改任何碰撞。」看见差别了吗?好口令自带边界,AI 才像可控帮工,而不是乱改现场的实习生。
建议你在场景树里把三层排好顺序,并检查绘制时选中的是正确层。画错层是最常见的「我明明删了怎么还在」——其实删错层了。选层,是地图导演的基本功。
确认场景树里至少有 Ground 与 Walls 两层(Decor 可选),命名完成并保存——名字清楚,明天的你会跪谢今天的你。
把今天收成一个「可交差的院子」。请按杀青清单施工,不要临时加戏。加戏是进度的天敌:你以为只是多一座桥,结果碰撞、分层、素材尺寸全被带跑。
杀青清单:
1)Ground:铺满院子草地。
2)Ground:画一条从村口通向中心的石板路。
3)Walls:四面围墙,一侧留口。
4)Decor(可选):路口放不超过 2 个装饰。
5)Day1 角色放在路中央。
6)保存 village.tscn,F5 看一眼,备份整个项目文件夹。
这就是最小村庄 Demo 地图。它不宏大,但完整:有范围、有路径、有边界、有演员站位。Day3 角色一能走,这场戏就能开拍。完整小东西,胜过残缺大世界。
把完成定义写进备忘录:「Day2 Done = 最小村庄地图已保存」。以后每次想加河、加夜市、加悬崖,先问是否影响这条定义。不影响就记到「以后」,影响就忍痛砍掉。
最小村庄还有一个隐藏收益:它会逼你做取舍。你不能同时拥有雪山、码头、夜市和完美美术。取舍本身就是游戏设计。今天你选了「院子」,就等于选了故事从院子开始。很多伟大 Demo 都是从一个可走的小空间长出来的,而不是从宏大设定长出来的。
杀青后请立刻备份。备份不是偏执,是允许自己明天大胆试验移动与碰撞的前提。没有备份的大胆,叫赌博;有备份的大胆,叫迭代。
勾完清单后,用一句话写给自己:「我的村子从 ___ 村口进入,沿着 ___ 路走到角色站位。」写得出来,说明地图可读。写不出来,就回去加路或加口,直到能写出来为止。
按杀青清单逐项打勾,全部勾完再点页面底部「标记为已完成」。缺一项就补一项——完成是检查出来的,不是感觉出来的。
第二天收工。别急着加新大陆,先把今天的词收进导演词典,并确认你真的带走了可运行的结果,而不是只带走「好像懂了」。
你应该已经具备:
地图阶段最容易贪心。导演的克制就是生产力:先小院,后天下。AI 很擅长提议「再加点山、再加条河」,但每加一项都在稀释今天的完成定义。你会说「不做」,才会按期杀青。说不,是导演技能。
明天 Day3,我们让角色真正走起来:CharacterBody2D、输入移动、朝向。那时你会感谢今天铺好的路与墙——有地可走,有墙可撞,移动才测得出来。若今天碰撞没做完,明天第一节就先补真墙,再写移动脚本。
最后用三句话给 Day2 定性:材料要对(可切片砖),结构要小(最小村庄),规则要真(墙有碰撞)。做到这三句,你就已经超过很多「看了十小时教程却仍停在空场景」的人。差别不在天赋,在完成定义是否写死,以及你是否真的点了保存。
把今天的截图、路径、砖尺寸放进同一条备忘录。明天 Day3 开头,先把这条备忘录贴给 AI,再开始做移动。开工速度会快到让你自己吃惊——因为导演终于带着档案进场,而不是两手空空地喊「帮我做游戏」。
若今天只完成 80%,也请备份再休息。缺的若是装饰,可忽略;缺的若是墙碰撞,明天优先补。进度可以不完美,但风险项要标红。导演看的是风险,不是面子。
更新口令本:贴上 Day2 最有用的 2 条 Prompt、你的砖尺寸、村庄场景路径、TileSet 路径。五分钟写完——文档化,是导演的隐形外挂。
一次性过完清单:
1)截图:TileSet 面板 + 铺好的村庄俯视图。
2)用一句话写:「我的三种主砖是 ___ / ___ / ___。」
3)把今日 Prompt 收藏进口令本,标注 Day2。
地图不是一张画,是可铺的砖。TileSet 是样品册,TileMap 是施工现场,碰撞是「真墙」。今天胜利条件:院子成形,路通,墙在,项目可回档。