问题
期望在人物移动时生成粒子,停止移动时不再生成
查到Unity的粒子系统(Particle System)中有属性RateOverDistance:根据移动距离发射粒子,不移动时不发射。恰好可满足当前需求
实际使用时发现,不管怎么移动都不发射粒子,但RateOverTime(随时间推移发射粒子)的功能是正常的
解决方案
粒子系统有一属性:EmitterVelocity,它有2种模式
- Transform:通过Transform中Position的变化计算粒子系统的移动速度
- Rigidbody:将刚体(若有)的速度作为粒子系统的移动速度
看了上述解释即可想到,若EmitterVelocity设置为Rigidbody模式,当该粒子系统没有刚体时,系统会认为该发射器是不动的,因此移动速度为0,因此移动距离为0:因此RateOverDistance不会发射粒子
所以将EmitterVelocity设置为Transform即可
解决过程
实践时,当发现RateOverDistance不起效时,没有深究,而是考虑通过自行控制粒子对象的显隐来实现期望效果
但发现,若在人物停止移动的时候隐藏粒子对象,所有粒子会立刻全部消失,非常突然,表现不好
最终还是老老实实地搜索RateOverDistance不起效的原因,简单地(修改了一个已有的属性项)解决了这个问题
反思
问题确定后,若解决不了,不要轻易尝试更换问题(这是逃避真正问题的一种表现)
不解决真正的问题,它会一直折磨着你,通过各种方式来干扰你以凸显它的存在,逼迫你必须面对它
仔细研究问题会发现,其实它可能并没有那么难
与其通过各种旁门左道去避开真正的问题,不如迎难而上
确认无能为力(该问题真的无解)后,再思考如何拉近现实与期望的差距
尽可能逼近那个并不存在(或凭借当前力量和现状无法得到)的最优解决方案