unityのnode baseでEffectの作成が行えるVisualEffectGraphの、スクリプトから制御する方法を書き留めておきます。
準備
VisualEffectGraphをスクリプトから呼び出すために、
①using UnityEngine.Experimental.VFX;
を追加、
②public VisualEffect effect;
で変数を設定します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.VFX;
//VFXを使えるよう定義
public class EffectFire : MonoBehaviour
{
public VisualEffect effect;
//VisualEffect変数を設定。
void Start()
{
}
void Update()
{
}
}
②Scene上の「Visual Effect」オブジェクトを、自身で作成したスクリプトにアタッチします。
Effectを発火させる
Effectの発火はParticleSystemと同じように、Play()を使います。
今回は、わかりやすく確認するためにWキーを押したときに発火するようにします。
void Update()
{
void OnTriggerEnter(Collider other)
{
effect.Play();
}
}
これでEffectを発火させることができます。
スクリプトから発火させる場合には、Play()だけでは事足りない場面が多いことがあります。
例えば、Effectは衝突判定がされた場合に呼び出すことが多いです。その際は、EventTrigger()を使います。
VisualEffectGraphでEventTriggerを使うためには、Node上でEvent Node/Nameを設定します(Event Nameを今回は初期のままの「OnPlay」としておきます。)そして、Event Nameスクリプト上でEvent Nameを任意のタイミングで呼び出してあげる必要があります。
まずは、VisualEffectGraphのNodeの設定をします。
Nodeを開いて
①EnterKeyでNode Boxを開き、Event Nodeを追加。
②任意のEvent Nameを設定。
③Event Nodeの「SpawnEvent」と Spawn Nodeの「Start」につなげます。
先ほどのスクリプトのUpdate関数に、SendEvent("OnPlay(Eventの名前は任意)")()を追加します。
void Update()
{
void OnTriggerEnter(Collider other)
{
effect.Play();
}
}
これで衝突判定を行った際にEffectが発火するようになりました。
(また、これらの発火をわかりやすくするために、Spawn Node の「Constant Spawn Rate」を取り除き、「Single Burst」を追加し、「Count(Min:0)」を「5」に設定します。これでEventが呼ばれた瞬間のみEffectが発火します。)
まとめ
これでVisualEffectGraphのスクリプトから簡単に発火させることができました。
ほかにもスクリプトからいじれるものは多いので便利なものを試し次第まとめていこうと思います。