我在我的游戏(FEED THE AI)中收到很多反馈,称游戏的感觉非常完善和令人愉快,因此我想分解一下发生在一项非常简单的动作中的所有事情:攻击敌人,杀死它并收集数据。

tl;dr
让所有东西响应玩家的动作。
使其跳跃、响亮和反应。
通常不是一个大事,而是许多小事一起工作。
另外,与DOTween成为朋友,它是最好的插件之一。

深入解析:

初步看起来,交互方式很简单:球体击中一个方形的敌人,敌人死亡,一个数据粒子飞回球体。

但在背后,发生了更多的事情。

1. 攻击

  • 球体有一个攻击范围,显示为一个简单的圆形精灵。
  • 在那之上,我使用一个粒子系统来匹配圆形并在球体攻击时暂时填充它。
  • 有两个SFX:一个用于攻击空气,一个用于击中东西。
  • 击中声音每次攻击触发一次,而不是每次击中敌人,否则会变成重叠的混乱。

2. 当敌人被击中时

  • 敌人HP通过着色器参数下降
  • 敌人进行一个小的DOTween缩放抖动:gfx.DOShakeScale(0.2f, 1);
  • 它被稍微推开rb.AddForce()
  • 浮动的伤害文本出现在它上面

3. 当敌人死亡时

  • 敌人被销毁
  • 一段死亡粒子播放
  • 一个数据粒子飞回球体

数据粒子不移动在一个完美的直线上。我使用Perlin Noise将其移动向球体,感觉更加有机。 我还随机化了其生命周期,以便多个粒子不会同时到达。

4. 当数据到达球体时

  • 数据粒子被销毁
  • 收集SFX播放,音调随机化
  • 一段微小的爆炸粒子在球体周围发射
  • 另一个小粒子在它周围旋转一会
  • 球体被推开,然后重新中心像弹簧一样
  • 金钱和进度更新

随机音调对于重复的声音非常重要。没有它,收集资源会很快变得令人恼火。

5. 当进度更新时

  • 球体周围的进度条填充一个弹簧效果而不是线性动画
  • 球体稍微膨胀
  • 更多白色方形粒子出现在它周围
  • 这些粒子随着你接近升级而加速

所以球体开始感觉越来越“充电”。

6. 当AI升级时

  • 球体粒子被清除
  • 一段大白色爆炸触发
  • 一段微小的冲击波在整个关卡中发射
  • 照明暂时充满屏幕
  • 球体重置并开始重建

所以,玩家实际上只是击中方块并收集数据。

但感觉来自于堆叠许多小反应:粒子,声音,音调变化,震动,弹簧运动,着色器变化和时间。

希望这能帮助一些人在自己的项目中改进游戏感觉。