前几天,我参加了为期9天的 Bevy Game Jam 4,要求使用 Bevy 游戏引擎开发,最后完成提交了一个鸭子滑冰吃面包的解谜游戏。在这次 Game Jam 的过程中,我从零开始上手这个以 Rust 作为编程语言的数据驱动游戏引擎,单人开发负责了游戏所有的游戏设计、编程、美术,对我来说是一个非常有趣的体验,因此想记录一下,并且也能给希望尝试 Bevy 引擎作为开发工具的游戏开发者一些参考。
在做完我的第一个正式上架的独立游戏《小石头人踏上旅程》之后,我在做游戏这件事上处于一个停滞的状态。一方面是感觉长时间没有足够有趣的新点子想出来,另一方面是对一直使用同一样工具进行游戏开发有点厌倦(说的就是你, Unity)。在经过一段时间的停滞期之后,我决定要做点什么东西,不论想法好坏先试试再说。那天正好通过某个游戏开发直播得知 Bevy Jam 4 要开始了,自己也一直想尝试一下看上去很特殊的开源游戏引擎以及想体验下用 Rust 语言写游戏代码的感受。既能强迫自己想新点子还能上手新工具,这不是双赢的事情,于是我就很愉快地决定参加 Bevy Jam 玩一下了。
开发流程
头脑风暴阶段
既然已经决定要参加 Game Jam 了,剩下的事就是说干就干了。这次 Bevy Jam 4 的主题是 “That's a LOT of entities”,我要的第一件事就是根据这个主题来想一个游戏玩法出来。“Entities”是一个比较模糊宽泛的概念,可以指代:玩家操纵角色,敌人,阻挡物(地形)等等,至于如何表现“多”,可以是某个东西静态数量上的多,也可以让某样东西的数量动态增加。这个时候突然想到可以做一个同时喂饱很多鸭子的游戏。
在官网上,对 Bevy 是这么介绍的:“A refreshingly simple data-driven game engine built in Rust. Free and Open Source Forever!”,翻译过来就是:“Bevy游戏引擎是一款令人耳目一新的简单的数据驱动游戏引擎,用Rust语言构建而成。永久免费且开源!”。幸运的是,我之前一段时间正好在出于兴趣地学习 Rust,虽然不够熟练,但至少不用花大量时间入门学习该游戏引擎使用的编程语言。接下来的关键就是理解 Bevy 里的 ECS(实体组件系统),这也是这整个游戏引擎所围绕的思想。官网上提供了一个入门指南“The Bevy Book”,我很快就看完了(不是我看得快,是真的写得很短)。
把官网的入门指南看完以后,我也只是对整个游戏引擎有最基础的认知,可是对做一个游戏出来还是无从入手。我觉得是时候试试例子驱动的学习方式了。除了官方提供了很多实现基础功能的例子以外,我找到了 Bevy Jam 3 的第一名的开源代码来参考。在实现某个功能没有思路的时候我就搜索例子看看别人是怎么实现的。
开发的每个阶段都有肉眼可见的里程碑会比较有开发动力,因此我做的第一件事就是在屏幕上显示一个鸭子并且能用方向键移动,并且以格子为移动最小单位。这时是 Game Jam 的第二天。
实现基本功能
接下来要做的事是能够进行关卡/场景的读取,这件事我本来想用如 LDTK 之类的插件来做,后来发现由于我用的 Bevy 版本太新了但是插件没有及时更新,所以我用不了那些插件了。于是想着干脆仿照 PuzzleScript 里面用字符表示关卡的方式,从 .txt 里读取关卡,编辑关卡也是编辑 .txt 文件。虽然这个方法看上去很原始人也不方便,但是就一个 Game Jam 来说应该可以一试,实在不行之后再改进呗。于是我写了一个从 .txt 里读取关卡再存到数组里去的功能,游戏中的关卡实际上在加载进去之前是被这样表示的,不同的字符表示不同的物体:
这里就不按照时间顺序,顺便提一句在开发后期加入“破冰”机制的事。在 Game Jam 的第七天左右,走在回宿舍的路上突然想到可以做一个破冰的机制,第二天醒来想到如果只有吃饱的鸭子在碎裂冰面上才会破冰会格外有趣,不仅符合逻辑也在游戏玩法上更有深度(这样就对鸭子两种状态从特性上做出区分)。所以我就紧急加了这个破冰的机制,确实带给了我关卡设计方面的新点子,让游戏变得更加有趣了。
选完颜色后,我按照选出来的主题颜色用 Aseprite 重新画了一些美术素材,不过因为严谨的像素美术画起来比较麻烦而我实际上也不是很会像素画,所以我对自己的要求就是类似 Baba Is You 里面的简单的画法就行。改进前后的效果还是很可观的,算是用最少的时间成本大大改善了游戏观感。这些工作是在 Game Jam 的第7天左右完成的。
评论区
共 8 条评论热门最新