记一次 Game Jam
CiGA 2024 Game Jam
分享一次参加 Game Jam 开发 的体验
在刚刚过去的这个周末,我以游戏程序的身份参加了 CiGA Game Jam 成都站。Game Jam是一类极限开发游戏的比赛活动,要求参赛者在限定的时间内,根据指定的主题,开发完整的游戏。参与者往往需要和其他角色的人组成队伍参加 (也有大神一个人干完程序美术音效的),可以选择线上线下参加。
时间紧任务重,所以很多人会带着睡袋参与线下,进行一场集中式开发
我和我的室友两个人组成了小队,由于我们两个的笔记本电脑都久经沙场,卖掉了,所以这次我们选择了线上参与。
我那退役的败家之眼, fare well
这次也是我自从毕业参加工作以来,第一次参加 Game Jam。我们两个组成了一个小队伍,我主要负责游戏程序,我室友负责美术,关卡设计,策划等。
我们的队伍也特别应景
这次的Game Jam总共开发时间为48小时。在星期五下午4点开始,活动的主办方在B站直播宣布了活动细则,以及最为重要的,本次游戏开发的主题:Limited and Limitless
头脑风暴 在Game Jam这类活动中灵感的碰撞往往需要很激烈,因为 Time Box 是固定的。有很多后来的神作游戏一开始的起点很有可能就是某次 Game Jam 爆发出来的点子,比如 Daniel Mullins 基于某次 Game Jam 创作的卡牌游戏后来设计出了惊世骇俗的 邪恶铭刻。
一开始拿到这个主题我们两个进行了很长时间的构思,Limited and Limitless,有限和无限,限制和不受限制,范围和没有范围,极限和突破极限……。我们首先想从经典的游戏玩法看看有没有改造的可能,像什么推箱子,弹球,俄罗斯方块。baba is you 这个类似推箱子的游戏其实打破了很多传统玩法的限制;掘地求生也是玩家不断突破自己的记录和上限;土豆兄弟这类 Vampire like 可以让主角不断成长;甚至纪念碑谷,超阈限空间这类,打破物理和空间的限制……
从游戏的玩法到剧情叙事的设计,我们都在尽量套入有限和无限的这个主题。而游戏的 Scope 不能太大,毕竟 Game Jam 更着重于玩法上的创新,而不是多么 3A 的游戏工程,所以更强调做减法。在几次 Argue 后,最终我们将游戏的基础玩法确定在 2D 横版平台跳跃游戏,类似于超级马里奥。
进行开发 美术未到,程序先行。在确定游戏基本的玩法后,我作为程序就可以先着手搭个框架出来了。这里我们选了 Unity 作为游戏引擎,因为它比较快捷,素材也多。
我在 Unity 本身自带的 2D 平台跳跃游戏模版的基础上开始进行修修改改,恍惚间一想,我也有三四年没碰过 C# 的代码了。此时是星期五的晚上,正好赶上欧洲杯,于是我边看球边进行开发。在德国队输给西班牙后,周六凌晨 3 点,我上床休息。
早上我起来后,一夜没睡的室友为了游戏玩法跟我再一次进行了 Argue。对于 Limit and limitless 这个主题,我们打算限制玩家一部分的能力,同时使玩家另一部分的能力变得不受限制。
我们设计了一蓝一红两个领域,玩家在蓝色领域内的时候他的移动会被限制,同时跳跃不受限,可以无限连跳。而在红色领域内玩家没法跳跃,但是左右移动会变成冲刺,速度极大提升。
而在一个关卡里面玩家可以通过拾取对应的物品来获取这两个领域的道具,通过鼠标拖拽,可以把领域放到关卡里面。
于是程序方面的 Tasking 大概可以拆成这样: Player 操作 A D 键移动 进入蓝色领域不能移动 进入红色领域冲刺移动 Space 键跳跃 进入蓝色领域无限连跳 进入红色领域不能跳跃 死亡事件 碰到尖刺或者掉进深渊触发死亡事件 死亡后 Player life -= 1 如果 Player life == 0,游戏失败,弹出游戏失败的 UI 胜利事件 玩家通过关卡到达 Flag (胜利点) 触发胜利事件 如果有下一关,进入下一关卡 如果是最后一关,弹出游戏胜利的 UI 碰撞体积 用于触发各种事件,碰撞等等 领域物品 玩家可以拖拽放置物品栏中的领域 如果是关卡里已经存在的领域,玩家不能拖拽 玩家接触可拾取物品,物品栏对应的数量 + 1 蓝色领域 红色领域 UI 游戏主菜单 胜利画面 失败画面 玩家HUD 显示 Player life 物品栏 UI 鼠标拖拽在关卡里面放置领域
其他杂七杂八的还有事件系统,Game Controller 等比较底层的逻辑。到了周六下午,Happy path 的逻辑就已经写好了,Unity 可以很快速地做 Prototyping,Unity C# 的 Event 系统也确实挺容易上手的。
其实在这次开发过程中我摒弃了很多原则和规范,像是重复代码之类的 Code Smell 一抓一大把。唯独遵循了一点,把引起变化的要素尽量赶到一个地方去。Unity 可以将变量暴露给 Editor,将所有变量尽量聚在一起可以让我的美工室友在设计关卡的时候更好调参数。
此时我的室友迷迷糊糊刚醒,于是由他来接手关卡设计,美术创作等等。他作为 3D 建模,也会用 AI 来画一些素材,我们游戏中的像素风就有部分是 AI 生成的。经他一顿操作猛如虎以后,我们有了焕然一新的游戏画面。
完善和Debug 在核心玩法已经实现了的基础上,我们还需要进行各种调整和打磨,比如将玩法提炼得更纯粹,将游戏变得完整等等。
说到一个完整的游戏,最基础最基础的得具备以下几个要素: 开始菜单 - 作为一个游戏的入口 游戏胜利条件 游戏失败条件 退出游戏程序的方法 当然某些游戏(在游戏中的某些特定 case 下)可能不会支持某些条件,但一个合格的游戏必须得能够走完一个完整的 loop,并且要能让玩家重复玩。上述的条件只是一个完整游戏的基础,要让玩家有兴趣重复地玩,必须得把游戏的 flow theory 打磨好
找准平衡点,太难的游戏会让人觉得备受打击,望而却步,而太简单的游戏又会让人觉得无聊。我们后面将游戏改进成了 Super Meat Boy 式的平台跳跃游戏,将镜头拉远,使玩家能看完整个关卡,并更好决定放置领域的策略。这也是为什么我们在修 Bug,打磨游戏方面花了和开发核心玩法差不多的时间。
也就是从周六晚上到周日下午提交前,我们都扑在了打磨游戏方面,以及修补意想不到的问题。到了截止时间也是顺利地提交了打包好的游戏,美中不足的是游戏里没有加入什么故事情节了。大家可以在 这里 玩到我们的小游戏~。
写在后面 其实熟悉我的人知道我并不是一个卷王,两天两夜缺少睡眠的封闭式开发实在让我有点遭不住。我们的游戏也没指望得什么奖,这一点我和我室友都心知肚明。但我还是愿意为了参加这次 Game Jam,推掉我周末所有的应酬和事务,因为即便身体累但是心不会累。
可能就是为了找找以前和同学们并肩作战,废寝忘食解决问题的感觉吧。当然现在工作了,跟没有经济压力的以前是比不了。但我想说的是,不论国际形势,社会环境,历史大潮什么的怎么变,有的事,他不会变。
一位同参加 Game Jam 的大佬
我是个讨厌宏大叙事的人,salute