問題
期望在人物移動時生成粒子,停止移動時不再生成

查到Unity的粒子系統(tǒng)(Particle System)中有屬性RateOverDistance:根據(jù)移動距離發(fā)射粒子,不移動時不發(fā)射。恰好可滿足當前需求
實際使用時發(fā)現(xiàn),不管怎么移動都不發(fā)射粒子,但RateOverTime(隨時間推移發(fā)射粒子)的功能是正常的
解決方案
粒子系統(tǒng)有一屬性:EmitterVelocity,它有2種模式
- Transform:通過Transform中Position的變化計算粒子系統(tǒng)的移動速度
- Rigidbody:將剛體(若有)的速度作為粒子系統(tǒng)的移動速度
看了上述解釋即可想到,若EmitterVelocity設置為Rigidbody模式,當該粒子系統(tǒng)沒有剛體時,系統(tǒng)會認為該發(fā)射器是不動的,因此移動速度為0,因此移動距離為0:因此RateOverDistance不會發(fā)射粒子
所以將EmitterVelocity設置為Transform即可
解決過程
實踐時,當發(fā)現(xiàn)RateOverDistance不起效時,沒有深究,而是考慮通過自行控制粒子對象的顯隱來實現(xiàn)期望效果
但發(fā)現(xiàn),若在人物停止移動的時候隱藏粒子對象,所有粒子會立刻全部消失,非常突然,表現(xiàn)不好

最終還是老老實實地搜索RateOverDistance不起效的原因,簡單地(修改了一個已有的屬性項)解決了這個問題
反思
問題確定后,若解決不了,不要輕易嘗試更換問題(這是逃避真正問題的一種表現(xiàn))
不解決真正的問題,它會一直折磨著你,通過各種方式來干擾你以凸顯它的存在,逼迫你必須面對它
仔細研究問題會發(fā)現(xiàn),其實它可能并沒有那么難
與其通過各種旁門左道去避開真正的問題,不如迎難而上
確認無能為力(該問題真的無解)后,再思考如何拉近現(xiàn)實與期望的差距
盡可能逼近那個并不存在(或憑借當前力量和現(xiàn)狀無法得到)的最優(yōu)解決方案