VFX Grpahで作ったパーティクルをスクリプトから制御する方法
VFXGraphですごいエフェクトができた!!!
よし!じゃあ衝突と同時に再生してみるか・・・
あれ?どうやってスクリプトから制御するんだ?なんか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を押したときと同じことをスクリプトで制御できるようにします。
これを実行すれば次のようになると思います。(スクリプトは適当なオブジェクトにアタッチしてください)
これでVFXをスクリプトから制御(ON, OFFだけだけど)できるようになりました。あとは公式のマニュアルを頑張って読みましょう。
気が向いたらまた書きます。
あと、何か分からない点や間違っている点があればコメントに書くかTwitterに連絡ください。noteはたまにしか見ないので急ぎの場合はTwitterにリプライかDMください。
参考
最終的に行き着くサイトはフォーラム(英語)かUnity公式のどちらか
この記事が気に入ったらサポートをしてみませんか?