はじめに
この記事にはVFX Graphを扱うための基礎的な知識を書く。
私も最近、VFX Graphを身に着けたばかりなので、変な内容になっていたら申し訳ないです。
環境
- windows11
- Unity 6000.3.17f1
- Visual Effect Graph 17.3.0
Visual Effect Graphを作成する
Assets内を右クリックして、
Create->VisualEffects->Visual Effect Grafphを選択する。

すると、このような画面が出てくる。これはテンプレートなので自分が作りたいものに近いものを選択すると楽になる。

Contextのノードについて
作成したVisual Effect Graphを開くと下のような画面が出てくる。
この場所でエフェクトを編集する。
このテンプレートはBurstというGroupを作成して、その中でエフェクトを作成している。
Spawnノードでは生成する頻度やタイミング、周期などどうやって生成するかを決めることができる。
Initialize Particleノードでは生成する座標、初速度、角度やParticleの個数上限など生成された瞬間の設定をすることができる。
Update Particleノードでは生成されてから消えるまでにどのような動きをさせるか設定することができる。
Output Particle Unlitノードではテクスチャや色など描画方法を設定することができる。
簡単にまとめると、
- Spawn:いつ、何個生成するか
- Initialize Particle:生成された瞬間の初期設定(void Start()のような感じ)
- Update Particle:生成されて消えるまでの動きの設定(void Update()のような感じ)
- Output Particle Unlit:どのように描画するか
これらのContextノードの中でどのような動きを追加したいかに応じて、Spaceキーをノードの中で押して追加する。
そして、そのノードの値をどのように変化させたいかは、右クリックでCreate Nodeから追加したいノードを使う。
下の画像のようにノードで計算をして代入することができる。
Subtractノードで7-2をして、Addノードで7を足して、Divideノードで1/5している。
計算式にすると((7-2)+5)/5となる。
その結果をSpeedに代入することで値を自由自在に操ることができる。

Scriptの変数の値を持ってくる方法
変数の値を持ってくるには、BlackBoardを使う。
下の画像の右上にあるボタンを押すと、左にあるメニューのようなUIが出る。

+ボタンを押して、Property->floatとするとコードから受け取るためのfloatノードを作ることができるようになる。Attributeだとできないので注意。

作るとこのようになる。PlayerSpeedという名前で作成した。

このように、ノードの計算式に好きな変数を入れることができるのでとても便利!!
VFXで動的に変わるエフェクトを作成したいときは使おう。

以下のコードで変数をVFX側に送ることができる。
speedにRididbodyから取得した速度を代入して、その値をSerializeFieldから取得したVisualEffectに受け渡している。この時、「PlayerSpeed」と文字をVFX側で作成したものにしないと受け渡すことができないので注意。
using UnityEngine;
using UnityEngine.VFX;
public class PlayerController : MonoBehaviour
{
[SerializeField] VisualEffect effect;
[SerializeField] Rigidbody rb;
// Update is called once per frame
void Update()
{
float speed=rb.linearVelocity.magnitude;
effect.SetFloat("PlayerSpeed",speed);
}
}
終わり
私がVFXを勉強しているとき、VFXに関する記事が少ないと感じたため作成した。私はノードベースのプログラミングが苦手だったので、ノードで計算や値の設定をどうやってするのかが分からなかった。私のような人がつまずきそうな部分に重きを置いて、基礎的な内容を記事にした。どのようなノードがあるかなど細かい部分は自分で調べて身に着けよう。

