我收到了很多反馈,其游戏([FEED THE AI](https://store.steampowered.com/app/4486870/FEED_THE_AI/))感觉非常精致,让人非常舒适的玩。

我觉得自己在这个方面有很丰富的经验。所以我决定分享一下我是如何实现这一点的。具体来说,我将分解在击杀敌人和收集数据时发生了什么。

初看之下似乎非常简单。只需一直击打正方形直到它死掉。当它死掉时,一种粒子从敌人到中间的球体会产生。这就完了。

然而,在现实中有很多细腻的因素围绕着它,使整个过程感到异常令人愉快。前提是使用粒子系统和DoTween,尤其是后者在这里占了很大作用,因为仅仅是一行代码就能让事物更加生动。对于粒子,我使用(Toon FX)作为基本资产包,并且非常了解如何调节它以满足我的需求。

另外值得一提的是,我使用粒子系统主要是因为我实在无法画出来。

  1. 击打正方形

我们有一个球体,击打敌人在某个范围内,标记在简单的圆形精灵上。
我在球体上增加了一个粒子系统,完美适配圆形,每次击打都会填充。
当攻击时,当什么也击中不了时,有一个声音效果,当击中了东西时另一个声音效果很重要,这样可以避免每个敌人的声音重叠,才能听起来很不舒服。
还有一个画布,有一个正在加载的图像,显示攻击冷却。

  1. 当击中敌人时,会发生4件事

敌人的HP值下降,这样就可以在通过更改参数显示在shader上。
使用DoTween函数,让敌人轻微抖动,代码如下: gfx.DOShakeScale(0.2f, 1);
敌人会被轻微推远,这样是通过取球体和敌人之间的向量,添加 rb.AddForce()
弹出浮动的伤害文本(如果要展示大量浮动文本,建议放置在一个画布上,否则会增加非常多的绘制请求)

  1. 当敌人消亡时,会发生3件事

敌人会被摧毁
产生死亡粒子,会产生小方块,仅仅是0.2-0.4秒的时间内
数据粒子会产生并游动到中间的球体。 particle系统在球体上的路径上移动,但采用了抖动数值,而不是简单的移动,它的持续时间也是随机的。这意味着当你同时消灭几个敌人时,数据粒子将在最终的球体上抵达的时间不同。

  1. 当数据粒子到达球体时会发生6件事

数据粒子被摧毁
会播放数据收集的声音效果,其音调是随机的。这对于重复的声音效果是一个巨大的优势。
还有一个几乎不可见的火花粒子发出了球体周围。
另一个粒子系统向球体释放了一个小方块,这个方块仅在球体周围移动一会。
球体的位置轻微改变了。球体会朝球体接近的粒子的反方向移动,然后重中心。这是通过代码实现的。
敌人获得的奖励和进度都会被更新,并会通过多种方式显示。

  1. 当进度被更新时会发生几件事

球体周围的条条形条状被填充了,感受更为缓慢。
球体会轻微扩大。
球体周围的白色小方块数量会增加。
这些小方块的移动速度会增加。

  1. 当AI升级时会发生

所有的球体粒子都会被破坏
正上方的球体上会触发一个白色大爆炸粒子效果。
整个地图上会有一个细微的冲击波粒子系统产生。
整个地图都开始发光了。
最后,进度都会重头开始,从原有的值开始

这段文字是这么长,我没有想到它会那样 xD

希望这样做能够帮助到那些想在自己的游戏里提升整体感觉的人。

TL;DR

所有事物都应该对行动作出反应;所有反应应该都是脆弱的或弹性的。

即使感人的效果非常微小,它也可能对整体感觉产生非常大的影响。所有的效果都是众多小细节的结合,而不是少量的宏观功能。

与DoTween做朋友,真的很重要。这是一个最不被人理解的插件。