【AI前沿】AI 工作流实践:100% Vibe Coding 完成 Game Jam 游戏开发

2026-06-24

AI 工作流实践:100% Vibe Coding 完成 Game Jam 游戏开发主作者关注Blasin新手上路Blasin关注Blasin新手上路联合作者关注Blasin新手上路Blasin关注Blasin新手上路06/12 09:51Matrix 首页推荐Matrix是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。文章代表作者个人观点,少数派仅对标题和排版略作修改。最近参加了 BOOOM jam,这是机核举办的游戏创作马拉松,开发者们需要在三周内根据主题开发一款游戏小品。这次我和艺术家弗兰克做了一个俯视角射击游戏《茫室》。游戏的核心机制是敌人在光照下无敌,玩家只能在阴影中击杀它们,主打一个预判杀敌战斗爽。欢迎在itch.io或机核网在线试玩。这是我们首次完全依靠 vibe coding 制作 Unity 游戏,由我指挥 Cursor 和 Codex 生成代码,音乐音效靠 ElevenLabs AI 生成,美术和关卡都是 Frank 手工制作。这篇文章会介绍我在这次 jam 里使用 AI Agent 的具体案例:不仅包括如何在游戏开发中驾驭 Agent,也包括 Agent 如何改善团队协作。正式进入这些工作流之前,我想先用一些数据展示 Agent 带来的效率变化。十倍工程效率,人也变得更忙我参加过三次 BOOOM Jam,因为制作周期都接近 21 天,所以很适合通过代码量来对比工程效率。这次统计时,我只计算 Assets/Scripts 下的代码量,也就是排除插件后的项目代码,并用 Cursor 自带的 Canvas skill 生成了下面的统计数据和图片。三次 BOOOM JAM 的代码量统计在完全 vibe coding 的情况下,代码量增长确实十分可观,去年的项目是 4 千行,今年来到了 3.1 万行,相比 2022 年的 CATO 项目是十倍提升。我让 Agent 分析了这次代码库为什么那么大,大概是我这次抛弃了不少第三方插件,如 Top Down Engine,所以游戏最主要的逻辑——人物控制器还有敌人行为,都是靠 Agent 堆出来的,代码量自然就上去了。这次项目后期的代码量增长甚至没有放缓,因为我全程在「边造车边开车边修车」。一年前我不可能有信心在倒数第二天边修 bug 边加新细节、然后让 Codex 跑 profiling 分析性能,毕竟对 game jam 来说,花时间解决优化问题简直太奢侈了。从 Git commit 提交数量的角度看,22 年和 25 年都在 400 次提交左右,今年有了 Agent 帮我写 commit 我养成了更勤快的提交习惯,结果是约 1000 次。毫无疑问,更加原子化的 commit 对 Agent 理解与维护项目更有帮助。从番茄时钟数据来看,今年 gamejam 的实际投入时间在 100 小时左右,是去年时间投入的两倍。除了因为去年还在忙 CATO 的工作,今年这次 Agent 给予的正反馈实在太强,最后几天我亢奋到睡不着,一路干到凌晨五点,也算是 AI 让我更忙的证明。虽然本文的大部分案例都来自这次 21 天的 game jam,但也都依赖于我这半年来 vibe coding 积累的直觉与手感。我会尽量避开那些难以复现的震惊案例,更多分享一些真正能进入日常开发流程的方法。市面上关于 Agent 写代码的技巧已经不少,所以接下来我想先从团队协作讲起,介绍在工程交接时,Agent 到底能帮我们省掉哪些体力活。让 Agent 接手模糊转译这几个月我们实践出了一套反直觉、但非常顺手的工作流:美术 Frank 在生产资产时,先用最自然、最啰嗦的方式命名文件,例如Reload GUI 指示物开启.png、收集探测器成功的声音.wav。在合并 Frank 的资产时,我直接让 Agent 把它们重新规范命名,并移动到合适的文件夹目录下,甚至直接找到对应配置替换 reference。英文命名头疼、文件容易打错字、目录整理混乱、改配置时容易眼花……过去这些事都不难,但会持续打断开发节奏,现在它们可以被 Agent 串成一个完整流程处理掉。我觉得这是一种模糊转译,而 Agent 相当擅长这类工作。如下图的换 UI 任务,我直接把 Frank 的 UI 资产发给 Codex,它完成了导入工程、重命名、替换场景中的 UI、修复错误,最后打包上传到我的手机,整个流程半小时不到,一站式完成。Codex 一站式完成从换 UI 到上传 Testflight 包体游戏开发里,很多填写配置的工作本质上也是一种转译:把人类自然语言写成机器能读取的结构化数据。比如这次项目里有一些简单对白。一开始 Frank 只是把剧情对白写在 Notion 文档里,我让 Agent 直接读取 Notion,把对白转成游戏内配置,同时把文档里的立绘附图扒进工程,再根据对白中的人物注释决定显示哪张立绘。整个流程没有打开 Unity,也没有手动填写配置。Frank 在 Notion 写的对白直接变成 Agent 的数据源这种转译并不只适用于文档到配置,也可以是不同工具和数据格式之间。到了游戏文本翻译阶段,我让 Agent 收集所有游戏内对白,包括分散的教学提示语,Agent 翻译后生成一个 Notion 对照表格,方便朋友 YangMann 直接校对。等校对完成后,再让 Agent 把修改后的内容从 Notion 倒回游戏配置。因为 game jam 的需求足够简单,通常这种场景会选择手动复制内容而不是使用专业本地化工具。而有了 Agent 转译,整个项目无需引入任何新插件,也不需要修改原本的数据格式。我觉得游戏开发的大部份体力活其实都是在做数据搬运和转译,善用 Agent 可以减少这部份工作提高开发效率。相比于创造新内容,Agent 在这些体力活上的协助经常被忽视,但它恰恰很适合处理这些琐碎、重复,又需要一点注意力的工作。让 Agent 串起工具如果希望 Agent 参与到工作流,文档、素材、甚至聊天记录最好放在它能读取的开放工具里。否则 AI 再强也只能停留在你手动复制给它的上下文里。所以这里推荐对 AI Agent 十分友好的 Notion 和 Dropbox。合作了这么多年,如无必要我们基本没有看板和设计文档的习惯。但我们都会在开会后维护自己的 todo 或 checklist。Frank 作为美术,checklist 肯定会更偏视觉化。这次我尝试用 GPT Image 2 给 Frank 传递美术需求,先让 Codex 粗略整理游戏内的资产需求,等我校对完成后,再直接在 Codex 内调用 GPT Image 2,生成一张美术清单,用更清晰的方式传达需求。GPT Image 2 生成的美术资源对接清单在项目后期 BUG 和打磨细节激增,我只能靠不断修改 todo list 和纸上涂画来标记问题,我让 Agent 毫不费力地接通我的小票打印机并写好 skill,把我的 todo 打印出来,对我来说,不看电子屏幕的 todo 也是一种降低脑负荷的效率提升方式1。到了项目后期,BUG 和打磨细节激增,只靠 todo 小票已经有点不够用了。大部分口头需求都没有被结构化,很容易在聊天里溜走,根本来不及整理进 todo。最后冲刺几天,我用上了 Discrawl 这个 skill,让 Agent 可以读取我的 Discord 聊天记录,靠它帮我从聊天记录里扒出 Frank 提过的优化建议,避免漏掉任何工作细节。Memobird 打印的 todo listAgent 提供看待数据的新视角Agent 特别擅长找文件、找数据,也提供了一种看待数据的新视角。比如我要调整多个敌人的走路速度时,往往需要在多个 prefab 之间来回切换。重复劳动和数据过载叠在一起,眼花、配错数据都是常有的事。现在我会让 Agent 收集这些数据用表格呈现,全局宏观地对比调教这些数据。在我看来这极大提升了有效信息的信噪比。比如 gamejam 在做音效时,最头疼的就是上网找的音效音量不一致,这回直接让 Agent 做音频归一化就特别高效,根据我们的初步听感,我用 Cursor 去分析一番并生成 Canvas 图表,直接批量筛出不合格的音频,再根据筛选结果去继续打磨音频。Cursor 生成的 Canvas 图表在项目协作时候,最头疼的则是 Unity Scene 冲突,用再贵的 git 客户端也读不懂 diff,因为 yaml diff 本身缺少语义化信息。Agent 完美解决这个问题,我最近习惯让 Agent 分析冲突原因,它便会用自然语言叙述,然后我再告诉它你要留下什么、丢掉什么,现在解决 scene 冲突的过程,有种做手术的快感。解决场景冲突往往有个土办法,就是把场景复制一份,分开编辑,但真正头疼的是后续合并功能时,很容易错搬、漏搬。现在这类苦力活交给 Agent 就很合适,而且它还能顺手修复合并过程中导致的 reference 丢失。让 Agent 接管 Git 里的脏活除了上文所提的 Agent 解决 scene 合并冲突,开发全程我也让 Agent 帮忙不少 Git 操作。这次有了 Agent 帮我写 commit 我养成了更勤快的提交习惯,而且正如我上面所说,更加详细和原子化的 commit 对 Agent 理解与维护项目更有帮助。Agent 像是一种可以用自然语言交互的 Git 客户端。合并 Frank 的美术内容时,我也懒得再手动操作,直接让 Agent 先叙述 Frank 新增了哪些资产、修改了哪些内容,再帮我完成合并和冲突处理。这招用来回忆自己上周做过什么也很好用,与其翻一堆 commit 和文件变动,不如直接让 Agent 总结最近的工作内容。这次 jam 还遇到过一个渲染 bug。通常这种问题要用二分法,一步步夹逼出突然导致错误的 commit。有了 Agent 接管 git 操作,我只需要模糊描述大概出错的时间段,Agent 就能帮我跑 git bisect 逐步排查。我只负责在 Unity 里验证当前版本的渲染是否正常。三五轮下来 Agent 就能定位到出错的提交,并进一步修复问题。我以前一直觉得 git worktree 在游戏开发里的作用不大,但这次 jam 做 WebGL build 时,它反而大大派上了用场。我直接让 Agent 在新的 worktree 里解决 WebGL shader 问题,并通过 Unity Batch Mode 编译 WebGL 版本自行验证。这样不会打断我当前的 Unity 编辑器进程,Agent 也能在另一个工作区里把问题闭环解决。WebGL build 直接在 Cursor 中运行与 debugDeeplink:马看到什么是人决定的半年前和 Agent 协作,还需在上下文提供修改文件的相对路径,而现在第一梯队的 Agent 已经能快速定位我的需求,比如「那个拿手枪敌人的脚本」。这可能归功于 continual learning,这次 gamejam 我做了个实验不再自己维护 AGENTS.md,而是靠 Cursor 官方的 memory 插件 continual learning,让它自行理解我的游戏项目、保存我的设计偏好,效果似乎不错,它总能定位到我模糊描述的对象。但 Agent 也有看不到的时候,通常因为相似实体过多不容易定位,比如场景有几十个敌人,每个敌人都有六七级深度的骨骼结构,当你要指定其中一个敌人的武器时就很难描述。所以我让 Agent 写了个 deeplink 功能,它可以选中若干 gameobject 复制其 GlobalObjectId,给 Agent 作为上下文,达到精确定位的目的。自定义工具栏中的 copy 按钮即是 deeplink这在 Agent 生成 prefab 时候尤为实用,对于层级复杂的 prefab 我会在场景搭出一个框架,使用 deeplink 给