我游戏(FEED THE AI)的反馈很多,很多人认为游戏感觉很精致且令人满意,所以我想分析一下在游戏中一个非常简单的动作:击中敌人,杀死它,收集数据。

tl;dr
让所有元素都响应玩家的动作。
让它感觉弹性、响亮和反应性。
通常不是一个大事件,而是许多小事件共同工作。
另外,和DOTween成为朋友吧,它是最好的插件之一。

深入分析:

一开始看起来很简单:一个圆形的球体击中一个方形的敌人,敌人死亡,一个数据粒子飞回球体。

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

1. 攻击

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

2. 当敌人被击中

  • 敌人的生命值减少通过一个着色器参数
  • 敌人做一个微小的DOTween缩放震荡:gfx.DOShakeScale(0.2f, 1);
  • 敌人被稍微推开rb.AddForce()
  • 在敌人上方出现漂浮的伤害文本

3. 当敌人死亡

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

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

4. 当数据到达球体

  • 数据粒子被销毁
  • 收集音效播放,音调随机化
  • 在球体周围出现一个微小的光环粒子
  • 另一个小粒子在球体周围飞转一会儿
  • 球体被推开一会儿,然后重新中心像弹簧一样
  • 钱和进度更新

随机化音调对于重复的音效非常重要。 没有它,收集资源会变得很快很烦人。

5. 当进度更新

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

所以球体开始感觉更和更“充电”。

6. 当AI升级

  • 球体粒子清除
  • 大白色爆炸触发
  • 微小的冲击波在整个关卡中传播
  • 屏幕上的光线暂时出现
  • 球体重置并开始重新构建

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

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

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