问题:Unity粒子系统(Particle System)移动时发射粒子(RateOverDistance)不起效

问题

期望在人物移动时生成粒子,停止移动时不再生成


期望的效果.gif

查到Unity的粒子系统(Particle System)中有属性RateOverDistance:根据移动距离发射粒子,不移动时不发射。恰好可满足当前需求

实际使用时发现,不管怎么移动都不发射粒子,但RateOverTime(随时间推移发射粒子)的功能是正常的

解决方案

粒子系统有一属性:EmitterVelocity,它有2种模式

  • Transform:通过Transform中Position的变化计算粒子系统的移动速度
  • Rigidbody:将刚体(若有)的速度作为粒子系统的移动速度

看了上述解释即可想到,若EmitterVelocity设置为Rigidbody模式,当该粒子系统没有刚体时,系统会认为该发射器是不动的,因此移动速度为0,因此移动距离为0:因此RateOverDistance不会发射粒子

所以将EmitterVelocity设置为Transform即可

解决过程

实践时,当发现RateOverDistance不起效时,没有深究,而是考虑通过自行控制粒子对象的显隐来实现期望效果

但发现,若在人物停止移动的时候隐藏粒子对象,所有粒子会立刻全部消失,非常突然,表现不好


表现不好的效果.gif

最终还是老老实实地搜索RateOverDistance不起效的原因,简单地(修改了一个已有的属性项)解决了这个问题

反思

问题确定后,若解决不了,不要轻易尝试更换问题(这是逃避真正问题的一种表现)

不解决真正的问题,它会一直折磨着你,通过各种方式来干扰你以凸显它的存在,逼迫你必须面对它

仔细研究问题会发现,其实它可能并没有那么难

与其通过各种旁门左道去避开真正的问题,不如迎难而上
确认无能为力(该问题真的无解)后,再思考如何拉近现实与期望的差距
尽可能逼近那个并不存在(或凭借当前力量和现状无法得到)的最优解决方案

你可能感兴趣的:(问题:Unity粒子系统(Particle System)移动时发射粒子(RateOverDistance)不起效)