Preface

靠现在不写 Tech Post, 一年可能才一篇文章……

写这篇文章前我顺便花了两周把网站总体升级了, 新的 Server Component 的应用对整体网站体验提升特别大, 虽然从 客户端渲染 逐渐转回到 服务端渲染 有一些回归十多年前 PHP 和 JSP 的感觉, 但是现在设备和网络环境已经完全不同, 因此为了体验新技术, 我把整个网站重构了一次.

是的网站什么变化都没有, 只是所有页面可以 1s 瞬间加载了

Game Starts Here

没错, 我花了一年, 一个人写了一个完整的独立游戏.

这是我这辈子代码量贡献最大的一个项目. 甚至比一些公司的项目还要大.

这是我第一个公开发布的独立游戏. 但并不是我制作的第一个游戏.

我曾在高二使用 RPG Maker 制作过一个游戏, 这个游戏还是还是用我初三时候写的一个小说的世界观, 当初我还发布到了起点中文.

但是小说也没写完, 游戏也烂尾了.

在大一使用 C 写了个很华丽的俄罗斯方块, 现在我还存着源码.

大二用 JAVA 写了个 Android 版 SheepFrenzy, 大概就是羊驼接住掉落的食物的游戏, 借鉴了 Doodle Jump, 速度会越来越快且有各种奇怪道具, 当年发布到了安卓市场, 广告收入都没超过 10 块钱.

工作后尝试使用 Game Maker Studio 制作游戏, 当初有很多的困难, 因此也是半路而废.

然后游戏开发的经历停滞了很多年.

一切的开始

  • 2022 年 11 月, 看到行业的一些发展方向, 开始学习 Rust
  • 2023 年 1 月, 尝试使用 rustlings 学习 Rust
  • 2 月, 研究了一下 2D 渲染库, 花了 30 分钟搓出了一个贪吃蛇并成功使用 wasm 打包到浏览器运行
  • 3 月, 写出游戏第一版 POC, 改版了两三次, 最终确定了基本框架
  • 4 月, 三次迭代后制作了一个 Stage 0
  • 6 月, 自行立项, 为此我特地吃了个自热火锅庆祝, 购买 Steam 坑位, 花了钱了这下会逼着自己做完了
  • 7 月, 开始开发, 准备音乐花了大概一个月, 最终选定了前 4 关一共 12 首音乐
  • 大约花了一个半月时间完成了 Stage 1
  • 10 月, 完成了 Stage 2 , 同期确定了后面的关卡设计以及音乐
  • 12 月, 完成了 Stage 3 , 真的是累人
  • 2024 年 2 月, 完成 Stage 4 , 4 月 完成 Stage 5 , 5 月 完成 Stage 6
  • 5 月, 测试, 修复 bug, 优化, 翻译
  • 2024 年 6 月, 正式发布

这些应该从一开始就计划好的

  • 大约制作到 Stage 4 的时候, 我发觉敌人精灵的战斗逻辑太过复杂, 于是从 Stage 1 开始重构
    • 花了半个月, 将移动和子弹逻辑分离
    • 然后将不同的子弹逻辑也解耦出来, 方便不同关卡复用
    • 同期我发觉音乐时间点的逻辑也有问题, 于是花了十几天重构
  • 大约做到 Stage 4 的时候, 我发觉需要添加一个难度选项
    • 于是我就想: "干脆多做几个难度", 加一个难度系统
    • 于是又从 Stage 1 开始重构
  • 最终 release 前, steam 审核员提醒我说我之前游戏介绍说支持英文, 于是我又花了一周时间翻译了所有的文本
  • 无数次推翻初步设计, 从第一关重构
    • 如果制作到了第 6 关, 突然发现第 1 关的设计有问题, 那么我就得把所有关卡所有场景代码都改一次
    • 虽然都是小修改, 但是次数多了也很麻烦
    • 最无奈的是, 这样的需求变更是我自己提出来的, 也没有实习生来帮我改啊

AI 是万能的?

  • 图片和音乐有很大一部分由 AI 生成
    • 无论我写多么详细的 Prompt, 最终生成的图片大多都不符合预期
  • 一千多张图片里面只有三到五张符合我期待的风格
    • 最终游戏中所有的图片都有我后期 PS 处理的痕迹, 以前画漫画的时候我就是用 PS 鼠绘, 因为有设计的爱好因此对很多 PS 工具都有所了解
    • 特别是对于游戏角色素材, 有一部分我依然需要自己用 PS 修饰出我期待的图
  • 音乐使用伪 AI 生成, 实际上是一些固定片段的叠加和排列, 因此有部分乐曲会感觉重复度很高
    • 我可以自由调整片段长短层次及顺序, 因此生成的乐曲多数我还满意
    • 当然, 同样的, 最终游戏中所有的音乐都有我后期 Au 处理的痕迹
    • 因为可以根据需求进行调整, 我按照一些固定的乐曲情绪排列, 比如 12-123 , 123-23-234 或者 12-123-1234-234 等多数大众乐曲的编排顺序, 组合出了我期待的音乐
    • 最终还是搓出了约 24 首音乐, 版权要求我不能二次出售只能用于媒体配乐, 花了我大概 400 元
  • 我不得不赞叹一下一些作曲人的才华, 例如它们设计一些 日常场景的音乐 是按照 12-345-345-345-345 无限循环 的流程设计的.
    • 我很好奇这是如何做到的, 如果是单纯一个音频文件如何做到无限循环
    • 如果是 12345 分割开似乎可以, 但是很神奇的是, 12-345-345-345-345 无限循环 可以在任何时候自然中断并无缝衔接一段新的 12-345-345-345-345 无限循环
    • 要做到这一点, 还需要考虑到 345 的结尾和 12 的自然过度
    • 对此我在游戏素材里面做了一些模仿, 不过是比较生硬的 345 循环, 听感上差不多但是其实是不同的方案
  • 关于文字翻译
    • 1K 多个句子和短语, 就算有 AI 翻译, 光审核也把我累的半死
    • AI 完全不懂语境和语气, 有些句子翻译的太生硬了, 我还得手动修改
    • 到底是谁在那里吹 AI 会直接代替人类翻译的呢?

AI 素材的反思

  • 打死我也不相信画师和作曲会失业, 但是根据现在的情况看, 初级的素材生成确实可以用 AI 代替
  • 我相信未来的 AI 会越来越强大, 应该可以生成出更多更好的素材
  • 但是如果是下一部作品, 我希望和画师和作曲人合作, 我觉得还是需要专业的人来制作风格统一的素材, 或者说, 我希望可以对更细节的部分进行定制

一个美食家并不是定是个好厨师

  • 硬核玩家并不一定是一个好的游戏设计师
    • 游戏确实是我生命重要的一部分, 但是当我来设计的时候, 逐渐就陷入了自己特定的思维定式
  • 我很惊奇地发现, 我对 Stage 4 Boss Battle 里面血条动画的设计和 塞尔达传说王国之泪 最终 Boss 战斗有一样的地方
    • Boss 战斗到了某个阶段都突然加血并让血条穿出屏幕
    • 但是很无奈, 王国之泪发布在 5 月, 我的游戏发布在 6 月, 玩家会认为我抄袭了, 但是这真的是灵感碰撞到了同一个地方
  • 难度设计的问题
    • 只狼 的二周目一定比一周目更简单
    • 我每一个关卡会调试上千次, 因此我可以记下每一个关卡的每一个敌人的位置
    • 退款的 Comments 基本都是说难度太高
    • 但是这还是我降低了两个 Level 的难度后的结果
    • 简单难度我都准备加上 隔壁奶奶都能玩 的提示了

市场的反思

游戏有很多类型, 而我一开始选择的是 STG, 但是逐渐设计成了 轻 STG + 重 MUG 的结合

混合类型的作品面向的市场和直接面向 STG 或者 MUG 的市场不同, 但是我并没有意识到这一点

而且我不应该和 Steam 官方夏促放到同一天启动, 也许当初推迟半个月或者一个月再发布会更好

推广和预热都很重要, 我深知这部分的重要性, 如果有个帮手可能会好很多

ROI 的反思

  • 我花了大概 2000 元的成本 + 无数的业余时间
  • 但是我对于这样的 ROI 并不满意, 我觉得应该修改一下投入资源的方式.
  • 其他还有很多支出
    • 立项开始我使用的是 Windows 电脑, 但是在开发到 Stage 3 的时候, 我发现四年前的电脑已经跑不动了, 我又不能用公司的 MBP 2019 来 Push 个人项目, 于是我购买了一台顶配的 Mac Mini M2
      • 额外 16G 内存花了我 3000, 总价可以买两台 Windows 笔记本了, 我的钱包在滴血……
  • Copilot 每月 10 刀
    • 一开始我还在用公共账户, 就那种教育认证的便宜的账户, 期间因为各种认证中断等问题, 我折腾了很久
    • 后来公司也开始推行 Copilot, 很无奈 Enterprise 账户需要证书才能登录, 所以不能在个人设备上使用
    • 后来我真的觉得麻烦了, TMD 60 块钱都不够我一天的饭钱, 于是我开始按年订阅
    • Copilot 大概总计 900 左右的支出
  • 我也不知道是否应该把这段支出算到成本里面, 但是这一套软硬件更新给了我四到五倍的效率提升

有些时候我在想, 如果没有这些让我提升效率的加成, 这个游戏真的可以按时完成吗?

项目推进的反思

上半年在亚马逊乱翻行业书籍, 找到一本 《How to make things faster》

我一看 23 美元, 立马 下单购买 下载了盗版

这书并不是一本很好的书, 基本都在说一堆开发的大道理, 也许适合初学者入门阅读? 例子都是十几年二十几年前的.

但是 Chapter 104 里面一句话让我印象深刻:

"You'll do yourself a favor by killing a bad idea before it kills you. If you solve your worst problem, then find the next one. Iterate. Shorter iterations are better."

我应该缩短开发时间到 6 个月以验证这个 Experimental Game 的可行性, 而不是花费一年的时间.

我应该提供试玩收集反馈, 而不是推行个人主义的设计风格.

我应该和更多更专业的人合作, 而不是自己一个人做.

我想, 游戏开发之路可能暂停一段时间吧

我花费了一年的时间, 实现了一个毫无意义的梦想.

我唯一觉得满意的是, 这款游戏的开发流程即使到了结尾, 我一直保持着对它的热情.

以前我就有一些项目, 到了结尾阶段开始希望其快速结束, 但是这一部作品从头到尾保持了一致的质量.

即使有人觉得太难, 有人觉得太粗糙.

但是我觉得这是我这一年来最好的作品.

……

但是, 我想……

独立游戏开发之路可能暂停一段时间吧……

……

……

……

……

……

……

……

……

……

……

……

……

呸!!!

我才不会停下来呢!

这年头, 我已经失败惯了, 无所谓

我开始设计下一个游戏了!

拜拜!