Posted at

【Unity】発射後のパーティクルの大きさをスクリプトから動的に制御する【ParticleSystem】

More than 1 year has passed since last update.


結論

Inspectorから「Simulation Space」を「World」に設定して、スクリプトではParticleSystemを持つgameObjectのtransform.localScaleを変更する


ParticleSystemが子オブジェクトの場合

Simulation Spaceを「Custom」にして、「Custom Simulation Space」に親オブジェクトを指定する

※パーティクル全体が親と一緒に移動して欲しい場合など


注意点

localScaleを変更したあとは、パーティクルが生成される領域(Shape)も変更されます。

発射済みのパーティクルには影響は出ませんが、変更後新たに発射されるパーティクルは影響を受けます。

Shapeのスケールはスクリプトから読み取りは出来るのですが、どうも書き換えは受け付けていないようです(Set関数は実行できるが、変化しない)。

著者の場合は「シーン開始と同時にパーティクルを全て出し切って、それがゆっくり動く過程でスケーリングを行う」という事例だったので有効でしたが、こういうケースは少数派かもしれません......


留意事項

パーティクルのサイズを変更したいとき、発射前に変更したり、発射後に決まったパターンで変更させることは比較的容易です。

しかし、発射後のパーティクルをスクリプトから動的に制御するのは一筋縄ではいきませんでした。

そもそもParticleSystemは、粒子をできるだけ高速に描画できるよう設計されています。

そのため、発射後のパーティクルのパラメータを弄られるのはパフォーマンス低下の原因になるのかもしれませんね。

当記事で解説するのは、パフォーマンスを犠牲にしてでもそういった操作を行いたい場合に使うものであることをご承知おきください。