Unity5.4では、ParticleSystemにTriggerモジュールが用意されました。これはTriggerオブジェクトを用意して、そこにパーティクルが入る(Enter)または出る(Exit)時などに、パーティクルを破棄(Destroy)するなどに使えます。またスクリプトでは、OnParticleTriggerが用意されていてここで処理ができます。
目次
Triggersモジュールの使い方
1.対象となるトリガーオブジェクトを作成
単純にEmpty Game ObjectにBox Colliderなどを用意して良いですし、以下のように、Cubeを作ってもよいです。トリガーにするため、Colliderの「Is Trigger」にはチェックを入れます。またプリミティブのキューブの場合などは、中が見やすいように、Materialのシェーダーの「Rendering Mode」(Albedoカラーのすぐ上の項目です。)をFadeかTransparentにして、Albedoカラーのアルファチャンネルを低くして透明にしてます。
2. Particleを作成
Triggersモジュールを有効にして、先ほど作成した青箱をCollidersとして設定します。パーティクルが青箱の外にいる時(Outside)、青箱の中にいる時(Inside)、青箱に入った時(Enter)、青箱から出た時(Exit)の4つの状態があります。今回は、青箱の中に入って、出ていくときにParticleをKill設定にしています。つまり破棄されます。
以下の画像のように、透過した青箱の中に、白いパーティクルが入っていきますが、出ていくタイミングで破棄されているのがわかると思います。
Collisionモジュールについて
パーティクルは、緑の地面に反射させるためCollisionモジュールを有効にして、Worldの設定をしています。特に難しいことはなく、これを有効にするとパーティクルが跳ね返るようになります。まずはDampen,Bounceで、跳ね返る力を調整してみるのが良いです。
スクリプトで操作するには
Unity5.4では、OnParticleTriggerが用意されたので、パーティクルを放出したときから補足でき、先ほどのOutside,Enter,Inside,Exitの状態を確認して、パーティクルを変化させることが可能です。以下の公式では、Triggerオブジェクトに入ったタイミングで、色を変化させています。
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnParticleTrigger.html
また、スクリプトを追加するオブジェクトはParticleSystemコンポーネントがあるオブジェクトになります。私の例の場合は、青箱ではなく、Particle System自身ですので注意しましょう。最初、青箱側にスクリプトを配置して動作せず戸惑いました。
今回配布するこのプロジェクトでは、OnParticleTriggerでDebug.Logのみを出力しています。
このプロジェクトの配布
Unity5.4
https://hajimete-program.com/games/ParticleSystemWithCollision01.zip