说实话,我一开始是拒绝的。
作为一个在Firaxis Games混过的叙事设计师,我参与过《漫威暗夜之子》《文明7》这种大项目,见过真正的工业级管线长什么样——几百号人、几十层文件夹、开个引擎要等泡完一杯咖啡。所以当同事跟我说"你去试试Godot吧,30天能做个游戏"的时候,我的第一反应是:这开源小引擎,能行吗?
但2023年Unity那个按安装量收费的风波之后,Godot确实火了一把。《杀戮尖塔2》《黄金偶像案》《磁带妖怪》这些口碑作都选了它,连EA都用魔改版Godot给《战地6》做了传送门地图编辑器。100MB的体积,秒开,不要钱,没有大公司管着——听着像是独立开发者的梦中情引擎。
问题是,它对我这种只写过剧本、没正经敲过代码的叙事型选手友好吗?
我决定赌一把。30天,从零开始,做个能玩的游戏。哭还是笑,月底见分晓。
Day 1:游戏?什么游戏?
下载Godot花了不到两分钟。打开之后我愣了一下——界面干净得不像话,没有满屏的浮动窗口,没有八层嵌套的菜单。但干净也意味着:我得自己决定从哪开始。
我盯着空白项目看了十分钟。做叙事的人有个毛病,总想先写世界观、角色小传、三幕结构。但Godot不在乎我的三幕结构。它问我:你的第一个场景是什么?你的玩家能按哪个键动?
于是我做了个决定:这30天,我不写文档。想到什么做什么,烂就烂,先让东西跑起来。
第一个晚上,我搞出了一个能左右走的小方块。没有美术,没有动画,就是一个色块在灰背景上平移。但我按键盘它真的动了——这种反馈比写十页设定稿都爽。
Day 3:GDScript,我的新朋友/敌人
Godot用的是自家语言GDScript,语法跟Python很像。我学过一点Python,所以理论上应该无缝衔接。实际上?
第一个bug花了我四小时。我想让小方块碰到墙停下来,结果它穿墙了,然后飞出了屏幕边界,然后游戏崩溃了。查文档、翻论坛、看教程视频——Godot的社区确实活跃,但答案散落在Reddit帖子、Discord记录和某个2019年的YouTube视频里。
最后发现是我把碰撞体的位置放错了,偏移了一个像素。
一个像素。
这种时刻你会怀疑人生。但换个角度,如果我在Unity里遇到同样的问题,解决流程可能更长。Godot的节点系统很直观,每个对象是什么、父子关系如何,一眼能看懂。它不会帮你避免低级错误,但至少让你能快速定位到错在哪。
Day 7:终于有个像样的画面了
第一周结束,我决定认真做个美术风格。不是找外包,是自己画——像素风,16x16的精灵,配色直接抄我桌上的台灯。
Godot的2D工具集意外地顺手。动画系统不用写状态机代码,直接在编辑器里拖帧、设过渡、调速度。粒子效果?加节点,调几个参数,火星子就飘起来了。这些功能在大引擎里当然也有,但往往藏在第三层菜单后面,或者需要导入插件。
我做了个核心机制:玩家控制一盏提灯,在黑暗中探索,燃料会随时间消耗,找到火源才能续命。很简单,但循环成立——走太远会死,太保守又找不到出口。
那天晚上我玩到凌晨两点。自己的游戏。
Day 14:声音,被低估的魔鬼
第二周我开始加音频。Godot内置了简单的混音器,但找免费音效比写代码还折磨。我试了五个不同的"脚步声"素材,最后选了一个像踩爆浆蛋糕的——因为其他四个要么太脆像高跟鞋,要么太闷像潜水。
背景音乐更头疼。我不会作曲,于是用了开源的生成工具,输入几个参数,导出一段循环。结果听起来像微波炉故障。
最后妥协:环境音为主,风声、火噼啪、远处不明生物的咕噜声。没有旋律,但氛围对了。叙事设计师的本能救了我——有时候留白比填满更有张力。
Day 21:那个差点让我弃坑的晚上
第三周发生了两件事。一是我终于做出了第一个完整关卡,从起点到终点能打通,有谜题有紧张感。二是我尝试加存档功能,然后整个项目崩了。
Godot的存档系统理论上很简单:把游戏状态写成字典,存成文件,读取时还原。但我没搞懂资源路径的写法,存档文件写到了系统临时文件夹,下次启动找不到了。玩家进度全丢。
我花了六小时排查,最后在一篇俄语论坛帖子里找到答案。那一刻我真的想关电脑去睡觉,明天再说,后天再说,永远不说。
但30天的赌约在脑子里响。我喝了杯咖啡,重写了一遍存档逻辑,测试了十次,确认进度真的能被留住。
那个晚上我学会一件事:独立开发没有"明天再说"的选项。要么现在解决,要么项目死掉。
Day 28:打磨,或者假装在打磨
最后两天,我在做"抛光"——这个词听起来高级,其实就是调数值、修错别字、确保按钮不会点穿到地图外面。提灯的燃料消耗速度调了十七版,太快玩家焦虑,太慢又没压力。最终选了中间偏快的那个,让每次探索都有赌的成分。
我还加了一个隐藏结局。不是多复杂的分支,就是如果玩家全程不点燃任何额外火源,直接冲向终点,会看到不同的画面。叙事设计师的执念——哪怕是个小游戏,也要有"选择"的幻觉。
Day 30:它活了
最后一天下午,我把游戏打包上传到Itch.io。文件不到50MB,加载比大多数网页游戏还快。我发给三个朋友测试,两个通关了,一个卡在第二关找不到路——这正是我想要的效果,有点难,但不至于劝退。
游戏叫《The Last Lamplighter》。没有剧情动画,没有配音,没有成就系统。但你能走路,能点灯,能死,能赢。30天前这玩意儿不存在,现在它存在了。
这30天教会我什么
先说Godot本身。它确实能竞争——不是全方位吊打Unity/Unreal,而是在特定场景下更合理。2D游戏、小型团队、快速迭代、预算为零,这些条件下Godot的效率惊人。节点系统让非程序员也能理解项目结构,轻量体积意味着随时随地能打开改两笔。
但它也有边界。3D功能比不过Unreal,资产商店的生态比不过Unity,某些高级功能需要自己动手写插件。如果你是做次世代画面的团队,Godot不是答案。但如果你是 solo dev,或者三五个人想验证一个玩法原型,它可能是目前最友好的选择。
再说我自己。在大团队待久了,会忘记"从零到一"是什么感觉。文明7的某个文明特性可能要经过二十轮会议、三个月迭代、五十个人的签字,才能在玩家面前出现。而《The Last Lamplighter》里那个提灯火焰的闪烁频率,是我凌晨两点凭直觉调的,没问过任何人。
两种模式没有高下。但30天的 sprint 让我重新摸到创作的原始冲动——不是因为KPI,不是因为玩家调研数据,就是因为"我想看看这个能不能行"。
最后给想试试的人
如果你也是写故事的、画画的、做设计的,想自己做游戏但一直被"要学编程"吓退,我的建议是:下Godot,给自己设个死线,先做坨屎出来。
真的。第一版一定会很烂。我的第一版连屎都不如,是个穿墙的色块。但色块能动的那一刻,你会上瘾。之后每一周,你都会惊讶于上周的自己有多菜——这就是进步。
30天不够做3A,但够证明一件事:你能做完一个东西。从开头到结尾,闭环。这个经验比任何教程都值钱。
至于《The Last Lamplighter》?它现在躺在Itch.io上,免费,能玩,有bug但我懒得修了。毕竟新的30天已经开始,我在想下一个游戏该做什么。
也许是个关于时间循环的叙事解谜?或者多人合作的提灯探险?
先让我把GDScript的文档再翻一遍。
热门跟贴