下载 App

开发日志②|用代码画机器:子弹工厂的美术、风格与物料

修改于10/13333 浏览综合
第一篇聊了《多米诺的子弹工厂》如何回应「涌现」。这一篇想换个角度,聊聊这些设施、机器人和界面,是怎么被一点一点画出来的。
一座子弹工厂里,有轨道、加工设备、炮台,也有不断来袭的机械敌人。它们不仅要各自有辨识度,还要放在同一张画面里,看起来属于同一个世界。
TapTap
目前,游戏采用的是贴图与程序化绘制结合的方式:一部分使用图片素材,一部分由代码绘制形状,再根据运行状态加入动作和效果。
不过,用代码画出来,并不意味着视觉设计可以交给代码或 AI 自行决定。

一、程序化设施:先建立一套共同的机械语言

这里所说的「程序化」,不是随机生成机器,也不是直接生成一张完整图片,而是把设施拆成可以绘制和控制的部分。
底座、外壳、面板、图标,以及运行时的动作,都可以分别组织,再组合成一台设备。
如果每个设施都独立设计一套画法,数量增加之后,画面很容易变得杂乱。因此,程序化设施首先需要一套共同的视觉基础。
所以最初的一批设施,是我们的美术自己画出来的。
TapTap
然后以美术画的这一批为参考,让 AI 去生成相同样式、风格的新建筑,再补上动画。这个方案把原本需要 3~4 天的美术工作量,压缩到了 1 天。
目前的设施绘制里,复用了圆角底座、蓝灰色底板、浅色边框和深蓝黑轮廓。四角的结构与边缘刻线,让它们保留一些机械装配的感觉;外壳和内部面板则采用分层平涂,避免细节过多,影响小尺寸下的识别。
在这套基础上,再用不同形状和功能色表现设备差异。
统一的不是每台机器的长相,而是它们的“造型语法”:即使功能不同,也能看出是同一座工厂里的设备。
游戏也并非所有设施都完全由代码绘制。一些炮台采用底座贴图与程序化上层结构结合的方式。固定部分可以保留图片里的设计,转动、状态变化等部分则交给程序控制。

二、让设施真正“工作起来”

静态外形解决了“这是什么”,动作则需要告诉玩家“它正在做什么”。
以机械铁锤为例,它的工作过程不只是突然落下一次伤害效果。
蓄力时,锤体逐渐抬升,图标从下向上填色;接近满蓄力时,通过抖动与发光加强预告;砸下时,再加入光圈和火花,强调加工发生的瞬间。
TapTap
这些表现既是美术效果,也是状态反馈。
我们希望玩家不必一直盯着数值面板,也能从设备的动作里判断:它正在等待、正在蓄力,还是刚刚完成了一次加工。
程序化绘制适合承担这类变化,因为各个部件可以独立运动。但动作幅度、节奏、亮度和效果范围,仍然需要受到视觉设计的约束。并不是机器越晃、火花越多,就越有表现力。
工厂里会同时有很多东西运转,单台设备的表现,还需要考虑它在整张画面里的分量。

三、程序化怪物:属于同一家族,但不能只有换色

怪物同样采用了贴图与程序化绘制混用的方式。
程序绘制的机器人共享深色粗轮廓、钢灰色机体和红色独眼。这些元素建立起机械敌人的家族感,但不同类型仍需要有不同的轮廓和动作。
小型机器人使用圆头和短腿,通过轮流抬腿、身体起伏表现移动。
TapTap
远程机器人则增加履带、炮口和雷达。蓄力时眼睛变亮,射击后产生后坐,让它的攻击过程有可见的预告和反馈。
TapTap
装甲球的接缝与铆钉会随着移动转动,而眼窗保持相对稳定。熔炉机器人则通过摇摆、烟雾和炉火闪烁,突出它的结构特征。
相比单纯调整颜色,这些差异更能帮助玩家区分敌人。
TapTap
Boss的表现也进一步拆到了部位:头部、躯干、铁拳、炮臂和腿分别绘制,部位受损后出现裂纹与黑烟。
这让损伤不只存在于血条里,也能留在怪物身上。

四、团队中的美术:把控的不是某张图,而是整套标准

在这样的制作方式里,美术的作用并不会因为程序化而减少,反而需要从单个素材延伸到整套视觉规则。
需要把控的内容包括:
  • 造型语言:哪些地方使用圆角,机械结构保留多少细节。
  • 描边与层次:轮廓的粗细、深浅,以及前后部件如何区分。
  • 配色关系:哪些颜色作为基础,哪些颜色用来强调功能和危险。
  • 动作表现:机器怎样蓄力、机器人怎样移动,什么程度的夸张合适。
  • 整体密度:设施、敌人、子弹和特效同时出现时,画面是否仍然清楚。
程序负责把这些规则转化为可绘制、可运动、可随状态变化的实现,但不能只检查“形状有没有画对”。
一个设施单独看起来不错,放到整座工厂里,可能会显得过亮、过细,或者抢走其他信息的注意力。因此,视觉统一最终需要在实际游戏画面里判断,而不是只看单个素材。
程序化提供的是调整与复用的能力,美术则决定这些能力应该朝什么方向使用。

五、UI也要属于这座工厂

视觉统一不能停在场景里。
如果设施是一套风格,按钮和面板又像来自另一个游戏,玩家打开商店或存档界面时,整体感就会被打断。
TapTap
目前,界面延续了圆润的灰蓝底框、浅色内边和深色轮廓。文字使用高对比的白色字芯与深色描边,让它在复杂背景上仍有明确的边界。
资源栏、按钮和弹窗尽量共享这套语言,同时用蓝色高亮表达选中,用红色提示危险操作。
交互上,悬停和按压时的小幅晃动,也让界面保留一些轻快的机械玩具感。
提示栏与文本框,我们用了纯色圆角的大色块:简单、直接、可读性强。这类 UI 不属于场景的一部分,必须与场景做出明显区分,让玩家一眼就能读到信息。
TapTap
TapTap
不过,UI并不需要照搬设施的所有细节。它首先要让信息容易找到、操作容易理解。装饰应该帮助建立风格,而不是让按钮看起来更复杂。

六、寻找美术风格的过程

前面讲的是现在的样子,这一节往回倒一倒,讲讲这套风格是怎么找出来的。
TapTap
这是我们第一天让 AI 制作的原型。
方向讨论清楚之后,美术就开始对着这个原型推风格了。
TapTap
图:清新蓝白风格。干净,但放进工厂场景之后偏冷、偏弱。
TapTap
图:高饱和蓝色。足够醒目,但长时间游玩容易疲劳。
寻找风格的过程中,我们其实撞上了一个更要命的问题:子弹做出来之后,要怎么发射出去?
我们停下手头的工作,两个人对着这个问题讨论了一下午,最后定下方向——做成塔防。
方向一定,美术也跟着有了方向。我们以前开发过一款独立游戏《元素与构筑》,美术对这种风格有把握,当天晚上就画出效果图,确定了最终版。
TapTap
图:最终版风格。灰蓝打底、高饱和的功能色点缀,兼顾辨识度和长时间游玩的耐看性。

七、物料生成:AI 出图快,但风格得拉回来

是的,为了加快开发速度,我们的大部分物料都由 AI 生成。但生成只是起点:AI 出图快,风格却统一不了——不同批次的图,饱和度、描边粗细、光感都不一样。所以每张图进游戏之前还要过一遍手:统一描边、压掉过亮的高光、把色相拉回灰蓝,让它们看起来仍然属于同一座工厂。
TapTap
TapTap
TapTap
写在最后
从第一天的原型,到现在的画面,我们做的事其实只有一件:让所有东西看起来都来自同一座工厂。程序化提供快速调整与复用的能力,美术决定这些能力该朝什么方向使用——这两件事缺一不可。感谢各位开发者的观看游戏已上线,感兴趣的老师们可以去玩玩提点建议
很好玩的游戏,但是。。截图
很好玩的游戏,但是。。
好玩是好玩,但是我是不是太笨了哈哈哈这个是我目前打的最多子弹的一次了,,难度一也过不去哇,是思路上的错误吗?
3 赞
21 回复
挂机量子难度8第326层截图
挂机量子难度8第326层
抄大佬作业难度8量子也是到了300多层了,阵型100多层成型的,然后就挂机睡觉了,醒了死在326层[表情_斜眼笑]
3 赞
1 回复
大毒瓶呢截图
大毒瓶呢
大毒瓶是不是要什么成就才能解锁?刷半天了。
毒瓶之外的配置是打到60+层的配置,然后出了毒瓶才瞬秒小怪到71层,然后发现开始出现负数毒伤了。。截图
毒瓶之外的配置是打到60+层的配置,然后出了毒瓶才瞬秒小怪到71层,然后发现开始出现负数毒伤了。。
1 回复
00:12
有bug啊截图
有bug啊
刚玩到第二关发现了个bug,轨道左右两边都有子弹进入的话就会显示方向错误吞子弹,但是再往后面延伸一条轨道的话就好了
2 赞
1 回复
图一难度四截图
图一难度四
阵型基本不变
快过了 这石头是啥阴? 搞我那截图
快过了 这石头是啥阴? 搞我那
1 赞
难度8无尽313关截图
难度8无尽313关
最终阵容火伤0.24京一跳 无尽越来越难了,全图齿轮cd加了,生化弹改成毒伤了,狙击炮台加攻速导致吃不满伤害翻倍。
1 赞
3 回复
搞明白套路以后很容易过关截图
搞明白套路以后很容易过关
难度3最重要的只有2点: 1、前期一定要拿到18块钱的机械子弹,拿到后立刻把初始子弹扔掉,后面只拿机械子弹,电力子弹,空放子弹这些高伤害的。 2、走增伤+火焰流派打的很快,小怪最多两枪就秒,大部分时间都在等小怪走上来 增伤高的: 1、下右两个方向加3攻=6攻 前期强 2、激光一条线,每穿一次加4攻 后期多弯道才强 3、每间隔子弹加5攻且杀死单位+3,这是神器放U型弯可以加25攻(不算杀人加的) 4
9 赞
6 回复
烈焰翻倍始终是最舒服的截图
烈焰翻倍始终是最舒服的
1 赞