この記事でのバージョン
Unity 2019.4.2f1
はじめに
今回はパーティクル(Particle System)の再生速度をInspectorやプログラムから変更する方法です。
イメージとしては以下のような感じ。
なお、記事中では以下のアセットを使っています。
Magic Arsenal | Spells | Unity Asset Store |
パーティクルの再生速度をInspectorから変更
パーティクルの再生速度はSimulation Speedという項目で設定出来ます。
実際に操作してみると以下のような感じ。
パーティクルの再生速度をプログラムから変更
次にプログラムから変更する方法ですが、
ParticleSystemではなくそのmainのsimulationSpeedという値で設定します。
また、直接変更が出来ない点にも注意が必要です。
/*particleがParticleSystem、speedはfloat*/ //ParticleSystemのmainを取得し、そのmainのsimulationSpeedを変更する事で再生速度を変更 var main = particle.main; main.simulationSpeed = speed;
/*ParticleSystemにsimulationSpeedはないのでエラー*/ particle.simulationSpeed = speed; /*mainのsimulationSpeedを直接変更出来ないのでエラー*/ particle.main.simulationSpeed = speed;
参考に、子にある全てのParticleSystemを取得し
再生速度を変更するようなスクリプトを作ってみると以下のような感じ。
using System; using System.Collections.Generic; using System.Linq; using UnityEngine; /// <summary> /// パーティクルのスピードを変えるクラス /// </summary> public class ParticleSpeedChanger : MonoBehaviour { //速度を変える対象のパーティクル private List<ParticleSystem> _particleSystems; //パーティクルの速度 [SerializeField] private float _spped = 1; //================================================================================= //初期化 //================================================================================= private void Start() { //子にある全てのパーティクルを取得 _particleSystems = gameObject.GetComponentsInChildren<ParticleSystem>().ToList(); } //================================================================================= //イベント //================================================================================= //Inspectorで値(_speed)を変更した時に呼ばれる private void OnValidate() { //実行中以外はスルー if (!Application.isPlaying) { return; } //全パーティクルの速度を変更 foreach (var particle in _particleSystems) { ChangeSpeed(particle, _spped); } } //================================================================================= //変更 //================================================================================= //指定したパーティクルの速度を変更 private void ChangeSpeed(ParticleSystem particle, float speed) { var main = particle.main; main.simulationSpeed = speed; } }