下载 App

《宇宙异星工场》开发者日志 04 ——让五百只蜂在手机上活下来

10/1513 浏览综合
大家好。前几篇聊的都是设计和玩法,今天聊点硬的:性能。
《宇宙异星工场》的画面里永远有一大群东西在动——几百只蜂群单位只是基本盘,还没算矿脉粒子、管线流体、特效和星空背景。这款游戏的所有乐趣都建立在"蜂群是活的"上,所以性能优化的目标从一开始就不是"能跑",而是"群体的生命感不能打折"。
──────────────────────── 一、先讲最笨也最有效的一招:别制造垃圾 ────────────────────────
蜂群的尾迹、引擎喷焰、货舱灯,这些每帧都在生成和消失的小视觉元素,最初的实现方式是标准的"要一个新建一个,用完就扔"。在桌面开发环境里毫无问题;在手机上,这意味着每秒几千次内存分配,垃圾回收一旦介入,画面就是肉眼可见的卡顿。
后来我们把所有高频小物件改成了"复用":系统里常驻一池子现成的对象,要显示就捞一个出来改改参数,用完洗洗干净放回去,从头到尾不新建。做完全量改造之后最直观的变化是:挂机半小时,帧率曲线从锯齿变成了一条直线。
顺带一提,连"收集特效目标"这个动作本身都做了瘦身——只有特效开关打开时才去遍历。省下来的就是省下来的。
──────────────────────── 二、第二招:拥挤的时候,自动"降画质" ────────────────────────
《宇宙异星工场》最吃性能的场景不是后期,是"蜂潮":单位数量上去了,群体行为又要求它们聚在一起活动,同屏密集度会冲到很高。
我们做了一套按拥挤程度自动降级的机制,分了三档:轻度拥挤时先收起光晕,中高度拥挤时收起尾迹和喷焰,极端拥挤时把蜂群从"独立贴图"切换成"批量三角形"。每档都经过反复对比——原则是降掉的必须是玩家最不容易注意到的,蜂群本体的运动永远最后动。
有趣的是测试反馈:绝大多数玩家从来没发现自己被"降级"过,只有把单位数量故意拉到极限的人,才会察觉"咦,光晕怎么没了"。这正是我们想要的效果。
──────────────────────── 三、第三招:把选择权交给玩家,但默认帮玩家选 ────────────────────────
设置面板里有画质档位(低/中/高/自动)和帧率上限(60/30)。其中"自动"是默认项,它背后是一个迟滞逻辑:帧率连续低于阈值才降档,连续高于阈值并保持一段时间才升档——不这么做的话,画质会在临界帧率附近反复横跳,比稳定的低画质更难受。
实现时还撞上过一堵墙:引擎没有提供"读取真实渲染帧率"的接口。最后的办法是主循环自己掐表——每秒上报一次实测帧率,设置系统拿着这串读数做迟滞判断。不优雅,但可靠。
还有一个更隐蔽的坑值得一提:有一次云端预览后台每帧报两条渲染错误,画面却看起来完全正常。追下去发现是裁剪矩形的坐标在"除以缩放再乘回来"的往返里产生了小数误差,把边缘推到了画布外一像素——校验器直接判整帧作废。修复只需要把取整方向改对。这种"看起来没事、其实在烧性能"的问题,是最难发现的一类。
──────────────────────── 四、藏在参数里的克制 ────────────────────────
最后分享一个观点:性能预算大半是设计期花掉的。群体的空间查询每帧都做,我们把"群体平均朝向"这类变化很慢的统计量改成每八帧刷新一次——八帧约一百三十毫秒的响应延迟,肉眼完全无差别,查询开销直接省一半;远处不相关的个体按半数抽帧更新。这些参数每一个都写着注释,说明它为什么是这个数。
性能优化做到最后,其实是在回答一个问题:玩家愿意用什么换什么。我们的答案是:用光晕和特效换蜂群的运动质量。蜂群不能卡,别的都可以谈。
下一篇是本系列的最后一篇,聊这款游戏的灵魂:叙事,以及那些藏在代码里的浪漫。
—— 一支很小的独立团队
《宇宙异星工场》开发者日志 01
——我们想做一款"失控但不失焦"的工场游戏 大家好,我们是一支很小的独立团队(就是我)。 《宇宙异星工场》要上聚光灯了,趁这个机会写几篇开发日志,聊聊这款游戏背后真实的想法、踩过的坑和做过的取舍。第一篇,从最根上的问题说起:我们到底想做一个什么样的游戏。 ──────────────────────── 一、为什么是蜂群,而不是工厂 ──────────────────────── 市面上大多数工
官方
《宇宙异星工场》开发者日志 03 ——"所以我到底在操作什么?"
大家好。第一篇日志里提过一句:我们选了"蜂群保持失控"的方向之后,内部试玩时不止一个人问"所以我到底在操作什么"。今天展开聊聊这个问题,以及我们和新手引导的漫长拉锯。 ──────────────────────── 一、过载的开局 ──────────────────────── 《宇宙异星工场》的界面内容很多:顶栏有星币、速率、材料格、暗能量;左边有队列卡和任务卡;底部是六七个功能页签;场景里
官方
《宇宙异星工场》开发者日志 02 ——一个排队系统是怎么形同虚设
大家好。上篇结尾预告过,今天聊一个我们自己的翻车案例:生产队列。 ──────────────────────── 一、翻车现场:排队?不存在的 ──────────────────────── 《宇宙异星工场》里的蜂群是造出来的。玩家排队下单:一只勘探蜂、两只采矿蜂、再来一台守护舰——和所有工场游戏一样,我们给了它一个看起来很完整的队列系统:多个并行槽位,槽位之外还能排队等待,左上角有一张队列卡
官方
《宇宙异星工场》开发者日志 05 —机魂、铸星者,藏代码里的浪漫
大家好。这是本系列最后一篇,聊聊《宇宙异星工场》的叙事——以及一些没写在任何宣传图里、但我们自己很喜欢的小东西。 ──────────────────────── 一、三个机魂,陪你唠完整个周目 ──────────────────────── 《宇宙异星工场》是一款放置工场游戏,玩家大部分时间在看蜂群干活。我们很早就决定:这段"看"的时间需要一个声音陪着你。 于是有了机魂——寄宿在工场系统里的角
官方
3 回复