大家好,我是Agoo,一个业余时间做独立游戏的开发者,尤其喜欢解谜游戏。
最开始参加聚光灯GameJam完全是因为比赛有奖金,而且只要完赛就有奖金,这太吸引人了。刚开始时只是想着做个小游戏参与一下,结果出题后,灵感爆发,想到一个天才般的叙事设定,想做一个实时像素风光照,重叙事、轻解谜的游戏。当时想到我都佩服我自己。当然,最后项目的走向完全背道而驰,变成了一个重解谜、零叙事的游戏,哈哈。
不过最终游戏我还是很满意的,因为它的解谜太有趣了,我太喜欢了。我还有好多想做的关卡没时间做,还有几个机制没能做出来(比如黑光机制有个严重的bug,会导致崩溃,最后只能当成装饰使用了)。可惜了当初的叙事设定,我觉得非常符合这次的比赛主题。后面如果继续开发《光注》,可能会再加上这些设定和叙事,虽说这块不是我的强项。
第一周(10月8日-10月14日)
这周所有时间基本都用在做像素光照上了,真是程序员思维,上来就想直接写代码了。由于这周都是技术相关,所以非常顺利,毕竟是自己的专业。其实有做像素光照这个想法,是因为我很早就看过一些相关的文章,不过不是光照的,而是2D视野计算的,当时就觉得效果很酷,只是平时开发基本用不上。结果这次主题是Light,这不撞枪口上了嘛,马上就把文章翻出来学(chao)习(xi)了。
1. 计算光照区域
由于需要用光照来解谜,那不如自己实现光照吧,毕竟通过传统光照算法不好去控制和获取光照实际照射的区域。
你知道吗?其实计算光照区域和计算视野是一个意思,那按照程序员的传统美德,我找到一个巨人的肩膀了(俗称复制代码,肩膀在这),我在unity实现了如下效果了。
感谢巨人,这个肩膀还挺结实的
2. 制作场景
做2d独立游戏的场景我推荐LDtk,著名独游《死亡细胞》的开发者做的(可以算是进击的巨人了)。
第一步:先把LDtk的示例场景导入Unity
这是LDtk的示例场景,不是我做的哦
第二步:把场景的阻挡格子转为阻挡光照的线段
这个线段还可以优化下
最后把光源丢进去看看
感觉还不错
3. 实现遮罩
第一步:用光照结果生成一个Mesh,然后将这个光照Mesh渲染到一张RenderTexture中。然后用这张贴图作为遮罩去渲染场景。
效果出来了
第二步:给光源加点参数:灯光颜色,光源半径,光的强度,再加个圆形的平滑遮罩,完美!
有点恐怖是怎么回事?
再加个光源看看
光源叠加的部分会更亮
4. 加上像素风后处理
首先给摄像机加上PixelPerfect,然后再地加上像素Dither效果,像素感直接拉满了。Dither技术看这里,需要科学上网。
光源过渡的地方加上抖动渐变效果,建议放大看看
5. 光照残留
考虑到如果场景全黑,玩家探索起来会很困难,所以我设计了光照照过的区域会“残留”下来,类似战争迷雾的效果。当光源不再照射时,这些区域不会完全变黑。
实现方法基本参考了战争迷雾的实现,就是把光照区域渲染到一张贴图里,但渲染时不清理贴图,这样就能保留光照的残留效果。
这样玩起来就简单多了
6. 聚光灯
聚光灯Gamejam怎么能缺少聚光灯呢,这不就来了嘛。
聚光灯的特性是角度越小,照射距离越远,光的强度也越高;相反,角度越大,照射范围越广,但距离较短。
7. 光照检测
终于到了这一步,整个光照系统的实现是为了方便检测不同地方的光照强度和颜色等信息。
要做到这一点,需要从光照贴图里获取信息,也就是说在生成光照贴图时就需要把必要的信息写入贴图中。
看下图,角色头顶的光注条会实时显示光的强度和颜色。
当被多个光源照射时,强度会增加,颜色也会叠加。这与解谜玩法紧密结合。
谁不喜欢成为聚光灯下的主角呢
第二周
这周是最痛苦的一周。我先实现剧情系统,一些简单的谜题机关,然后想着要赶紧做关卡了。结果不出意外,玩法一点都不好玩。我发现自己做不好强叙事,由于个人没有制作美术和音乐素材的能力,叙事时经常找不到合适的素材,单靠文本来叙事太单薄了,而且轻解谜也太没意思了,没有玩下去的冲动。
这周的后半基本都在思考玩法,想了好多,都有这样那样的问题。加上时间紧,我知道如果这周还不能把玩法定下来,最后一周基本不可能把游戏做完。
当时每天都很焦虑,我甚至开始和AI聊天,把我的现状告诉它,问它玩法有什么建议。不出意外,AI的回答非常敷衍,来来去去都是那些最简单、最笼统的玩法。不过在第二周的最后一天,AI的其中一个回答里提到了光线接力,我沿着这个思路往下走,答案就是现在的《光注》了!
1. 寻路系统
由于最初的想法是强叙事,设定上会有一名同伴跟随着你的,所以做了寻路和跟随系统。结果《光注》的实际玩法和寻路可以说是天然冲突,所以这个系统最后完全没用上。
他叫塔普,设定上会一直喋喋不休的
2. 剧情对话系统
要做强叙事当然要有对话系统,我之前做mota24时用过Yarn Spinner,这次也沿用了之前的系统。可惜最后成品是零叙事的,这里主要是玩法的原因,《光注》的机制需要不断切换角色,这导致几乎没法关卡过程中几乎无法叙事。
可怜的塔普,最后成了一个普通NPC
3. 和AI聊天
下面是和AI聊了挺久之后,AI给出的一份策划案,有需要的拿去,哈哈。
第三周
这周是最耗体力的一周。在想到接力玩法后,我快速做了一个关卡出来,结果非常好玩!它的解谜要点很独特,有点推箱子的感觉,就是你必须时刻关注角色的位置,一些看起来非常简单的操作,在《光注》里就可以做成很有意思的谜题。
例如下面的关卡演示视频中的1:47左右,玩家的目标是操作一个角色踩在机关上把门打开,另一个角色走进去。但由于玩家一次只能控制一个角色,切换角色时双方之间不能有阻挡,这就导致开门的角色必须借助其他角色或者机关把光传递给门外的角色来完成谜题。
这关最后几乎原封不动放在游戏里了
这一周真是灵感爆发,想到了很多有意思的谜题和机制。可惜时间关系,最后只实现了其中的一部分。而且由于玩法是第二周最后一天才确定的,所以还需要花很多时间去开发玩法相关的系统,基本是一半时间开发,一半时间做关卡,时间太紧了,最后只能压缩睡眠时间了,我才理解为什么要叫极限游戏开发了。
这周没时间做开发日志了,但考虑到完赛奖,咬咬牙还是录了2个关卡实况,哈哈。
一些关卡截图
其中一个教程关
N多柱子关
灯塔关
最后一天
结束前一天还天真的想着这最后一天可以再做2关的,结果当然是没时间做了,因为要做完赛清单啊。整理用到的素材花了不少时间,因为我都是东拼西凑的用,而且自己也做了一些修改,要把素材翻出来对比下。最后一天还要做个宣传片,这真的有点难为程序员了(为了完赛奖),最后看了《10分钟学会达芬奇》,硬把宣传片剪出来了,只用到3个技巧:剪、过渡、加字。
速成宣传片
在写这篇文章时其实离比赛结束还有几个小时,还要再做一关吗?还是放过自己吧,就接受这是游戏的最终模样了,因为我觉得游戏已经很不错了,就静待最后的结果吧。
最后现在可以试玩了,Taptap地址:https://www.taptap.cn/app/725377
暂无关于此日志的评论。