見出し画像

VFX Grpahで作ったパーティクルをスクリプトから制御する方法

VFXGraphですごいエフェクトができた!!!

画像1

よし!じゃあ衝突と同時に再生してみるか・・・

あれ?どうやってスクリプトから制御するんだ?なんかPlay()じゃうまくできない・・・しかも分かりやすい情報がない・・・

となったので色々と調べて実験した結果を載せておきます。


バージョン

Unity2020.2.2f1, Universal RP 10.2.2, Visual Effect Graph 10.2.2


スクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VFX;    //ここ忘れないように

public class CollideWith : MonoBehaviour
{
   [SerializeField] VisualEffect effect;
   //HierarchyにあるVisual Effectのオブジェクトを参照する(VFXGraphそのものではない)

   void Update()
   {
       //方向キー上で停止、方向キー下で再生
       if (Input.GetKeyDown(KeyCode.DownArrow))
       {
           effect.SendEvent("StopPlay");
           //StopPlayはEvent Nameで指定した任意の名称
       }
       if (Input.GetKeyDown(KeyCode.UpArrow))
       {
           effect.SendEvent("OnPlay");
           //OnPlayはEvent Nameで指定した任意の名称
       }
   }
}


解説

まず、準備から。using UnityEngine.VFXは忘れずに書いておきましょう。忘れて「あれ?うまくいない」ということがないように。

また、using UnityEngine.Experimental.VFXと記述している場合もありますが、これだと参照がうまくいかない(正式版だから?)のでExperimentalの部分は消しておきましょう。

次に、VisualEffect(ヒエラルキーで作ったオブジェクトの方)を参照します。VFXGraphを直接参照するわけでないないので注意しましょう。ちなみに、VisualEffectはヒエラルキーを右クリックして新規作成できます。


さて、ここからが本題です。

VFXGraphを開いてください。すると、一番上にStartとかStopとかがあると思います。ここにEventを繋げることでスクリプトから制御できるようになります。Eventは何もないところでスペースを押して"Event"と入力してクリックすれば追加できます。

Eventを追加した後はStartやStopにノードを繋いでください。その後EventNameに任意の名前を入力しましょう。私の場合はStartにつないだEventNameをOnPlay、Stopの方はStopPlayとしました。

無題

この設定がうまくいけば、Eventの右側にあるSendを押すことでパーティクルを再生したり、停止したりできるはずです。


ここまでできればゴールは目前です。SendEventを使って、先ほど手動でSendを押したときと同じことをスクリプトで制御できるようにします。

これを実行すれば次のようになると思います。(スクリプトは適当なオブジェクトにアタッチしてください)

画像3


これでVFXをスクリプトから制御(ON, OFFだけだけど)できるようになりました。あとは公式のマニュアルを頑張って読みましょう。

気が向いたらまた書きます。

あと、何か分からない点や間違っている点があればコメントに書くかTwitterに連絡ください。noteはたまにしか見ないので急ぎの場合はTwitterにリプライかDMください。


参考

最終的に行き着くサイトはフォーラム(英語)かUnity公式のどちらか


この記事が気に入ったらサポートをしてみませんか?