Utility

Unity VFX Graphの使い方|導入・基本操作からShuriken比較・URP対応まで【Unity 6】

VFX Graph(Visual Effect Graph)は、パーティクルの計算をGPUに任せることで、数十万から数百万規模のパーティクルをリアルタイムに動かせるUnityのビジュアルエフェクトツールです。ノードをつないで見た目を組み立てるため、コードを書かずに複雑な炎・煙・魔法エフェクトを作れます。この記事では、導入からエフェクト作成、スクリプトでの動的制御、従来のShuriken(Particle System)との使い分け、URP対応や動作しない原因までを、Unity 6を基準に整理します。

まとめ:VFX Graphを選ぶ判断と最短の使い方

VFX GraphはGPU上でパーティクルを処理するため、大量・高負荷なリアルタイムVFXに向きます。逆に、少数のパーティクルやモバイル・WebGL中心のプロジェクトでは従来のShurikenのほうが確実です。使い始めの流れは次の3ステップに集約できます。

  • Package Managerで「Visual Effect Graph」を導入し、Assets > Create > Visual Effects からVFXアセットを作る
  • Spawn・Initialize・Update・Outputの4コンテキストにノードを足して、生成数・初期値・時間変化・描画を組む
  • Blackboardでプロパティを公開し、C#のVisualEffectコンポーネントから値を渡して動きを制御する

Unity 6以降はURPとHDRPの両方で使えるようになり、対応範囲が広がりました。以下で各手順と判断基準を具体的に見ていきます。

VFX Graphとは:GPUで動くリアルタイムVFXの仕組み

VFX Graphは、パーティクルの生成・更新・描画をGPUのコンピュートシェーダーで並列処理するノードベースのツールです。CPUで1粒ずつ計算する従来方式と違い、GPUがまとめて計算するため、CPU負荷をほとんど増やさずに数十万〜数百万のパーティクルを扱えます。煙・炎・水しぶき・大量の火花のように「粒が多いほど説得力が出る」表現ほど効果が大きくなります。

ノードを線でつなぐビジュアルプログラミングなので、プログラムを書かずに挙動を設計できるのも特徴です。パラメータを公開すればスクリプトやアニメーションから動かせるため、ゲームの状況に応じて変化するインタラクティブなエフェクトにも対応します。「real time vfx(リアルタイムVFX)」という言葉が指す、実行中に毎フレーム計算されるエフェクト表現を、Unity内で完結して作れる標準機能という位置づけです。

VFX Graphの導入とプロジェクト設定(URP・HDRP対応)

VFX Graphはパッケージ(com.unity.visualeffectgraph)として提供されます。導入と初期設定でつまずきやすいのがレンダーパイプラインとの対応関係なので、そこを中心に押さえます。

Visual Effect Graphパッケージのインストール

メニューの Window > Package Manager を開き、Unity Registryから「Visual Effect Graph」を検索してインストールします。HDRPテンプレートでプロジェクトを作った場合は最初から同梱されていることが多く、その際は追加インストール不要です。導入後、Assets > Create > Visual Effects > Visual Effect Graph でVFXアセット(.vfx)を作成できます。

URPとHDRPでの対応状況

かつてVFX GraphはHDRP前提で、URPでは機能が限定されていました。Unity 6(2024年)以降はURPでも実用的に使えるようになり、学習用のLearning TemplatesもURP・HDRP双方で動きます。ただしURP向けは公式ドキュメント上いまも一部がプレビュー扱いで、対応プラットフォームや使える機能(一部の出力・色空間など)はHDRPよりも狭い点に注意してください。Built-in Render Pipeline(旧標準)では動作しないため、URPかHDRPを選択したプロジェクトで使うのが前提です。使えるノードや出力(Output)はパイプラインによって差があるので、URPで作る場合はURP対応のOutputを選びます。Unity 6では煙をリアルに見せるsix-way lightingやプロファイリング機能も追加され、最新のUnity(本記事時点で2026年6月16日リリースの6.5、現行LTSは6.3系)ではBuilt-in Render Pipelineが正式に非推奨化されるなど、URP/HDRPへの一本化が進んでいます。

VFXアセットの作成とシーンへの配置

作成した.vfxアセットをダブルクリックするとVFX Graphエディターが開きます。シーンで使うには、空のGameObjectを作りVisual Effectコンポーネントを追加して、Asset Templateに作成した.vfxを割り当てます。これでシーン上にエフェクトが表示され、Playせずともエディター内でプレビューを確認できます。

基本操作:4つのコンテキストとノードのつなぎ方

VFX Graphの中心は、パーティクルの一生を4段階に分けて記述する「コンテキスト」です。ここが理解できれば、どのチュートリアルも同じ構造で読み解けます。

Spawn・Initialize・Update・Outputの役割

4つのコンテキストは、パーティクルの流れに沿って上から下へつながります。それぞれの担当は次のとおりです。

コンテキスト 担当 設定例
Spawn 生成タイミング・個数 毎秒100個、バースト生成
Initialize 生成時の初期値 初期位置・速度・色・寿命
Update 時間経過での変化 重力・乱流・色の減衰
Output 描画方法 Quad・Mesh・ライティング

Spawnが「いつ・いくつ出すか」、Initializeが「出た瞬間の状態」、Updateが「毎フレームどう変わるか」、Outputが「どう見せるか」を決めます。爆発のように一瞬で大量に出す表現はSpawnのBurstを、煙のように継続的に出す表現はConstant Spawn Rateを使い分けます。

ノードの追加・接続とBlackboard(プロパティ)

グラフ上でスペースキーまたは右クリックからノードを検索して追加し、出力ポートと入力ポートを線でつないでデータを流します。左側のBlackboardに変数(プロパティ)を作って各ノードから参照すれば、色や数量をひとつの場所でまとめて管理でき、後述するスクリプト制御の入口にもなります。処理が複雑になったらSubgraphに切り出して整理すると、グラフの見通しが保てます。

爆発エフェクトの作成手順(実践チュートリアル)

基本構造の確認として、一瞬で火花が飛び散る爆発を組みます。手順は次のとおりです。

  1. SpawnにSingle Burst(またはBurst)を置き、一度に数百個を生成する
  2. InitializeでSet Velocity from Direction & Speedを使い、全方向へ飛ぶよう初速をランダムに与える
  3. InitializeでSet Lifetimeを0.5〜1秒に設定し、短時間で消えるようにする
  4. UpdateにGravity(重力)とDrag(空気抵抗)を足して、放物線を描いて減速させる
  5. OutputでSet Color over Lifeを使い、白→オレンジ→黒へ色が変わるグラデーションを設定する

ここに煙用のパーティクル系統をもう1つ足し、寿命を長く・速度を遅くすれば、火花と煙が同時に立ち上がる爆発になります。完成したエフェクトはPrefab化しておくと、シーンのどこにでも同じ設定で配置できます。

スクリプトによるVFXの動的制御(プロパティバインディング)

ゲーム中に炎の勢いを変える、ヒット時に色を切り替えるといった演出には、C#からの制御が要ります。GSC上でも「vfx script」の検索でこの記事は上位に入っており、ここは実装の具体で差がつく部分です。手順はBlackboardでプロパティを公開し、Visual Effectコンポーネント経由で値を書き込むだけです。

using UnityEngine;
using UnityEngine.VFX;

public class VfxController : MonoBehaviour
{
    VisualEffect vfx;
    // 毎フレームの文字列ハッシュ計算を避けるためIDにして保持する
    static readonly int SpawnRateId = Shader.PropertyToID("SpawnRate");

    void Start()
    {
        vfx = GetComponent<VisualEffect>();
    }

    void Update()
    {
        // Blackboardで公開した "SpawnRate" を毎フレーム更新する
        vfx.SetFloat(SpawnRateId, Input.GetAxis("Vertical") * 500f);
    }
}

プロパティ名はBlackboardで付けた名前と完全に一致させます。毎フレーム呼ぶ場合は上のようにShader.PropertyToIDで整数IDに変換して保持すると、文字列のハッシュ計算を省けます。SetFloatのほかにSetVector3SetTextureSetBoolなどがあり、位置・色・切り替えを渡せます。単発のイベント通知にはSendEventを使うと、特定のタイミングでバースト生成をトリガーできます。コードを書かずに済ませたい場合は、VFX Property Binderコンポーネントでトランスフォームやオーディオの値を自動連携する方法もあります。

VFX GraphとShuriken(Particle System)の違いと使い分け

Unityにはもう1つ、従来からのパーティクルシステム「Shuriken(Built-in Particle System)」があります。両者は置き換え関係ではなく、向き不向きで選ぶものです。

性能と機能の比較

項目 VFX Graph Shuriken
処理 GPU(コンピュートシェーダー) CPU
扱えるパーティクル数 数十万〜数百万 数千〜数万が目安
編集方法 ノードベース Inspectorのモジュール
対応パイプライン URP・HDRP Built-in・URP・HDRP
物理・衝突連携 制限あり(GPU側で完結) 柔軟(Collider等と連携)

VFX Graphは物量とGPU効率で圧倒的ですが、Shurikenは全パイプラインで追加設定なしに動き、CPU側のコライダーやスクリプトとの連携が容易です。

VFX GraphとShurikenの選定基準

判断はシンプルで、次の条件に当てはまるならVFX Graphを選びます。大量パーティクル(雨・雪・大規模な炎や煙)を使う、PC・据え置き機など十分なGPUがあるプラットフォームが対象、URPまたはHDRPを採用している——このいずれかに該当する場合です。逆に、少数のヒットエフェクトやUIの装飾、モバイル(特にOpenGL ES環境)やWebGLが主対象なら、Shurikenのほうが安全で確実です。1つのプロジェクト内で両方を併用し、背景の大規模VFXはVFX Graph、当たり判定に絡む少数エフェクトはShuriken、と役割分担する構成も現実的です。

VFX Graphが動作しない・表示されないときの確認ポイント

「エフェクトが真っ黒/何も出ない/ビルドで消える」の多くは、コンピュートシェーダーの対応状況が原因です。VFX GraphはGPUのコンピュートシェーダーを必須とするため、それが使えない環境では動きません。次を上から確認してください。

  • レンダーパイプラインがURPまたはHDRPになっているか(Built-inでは動作しない)
  • WebGLビルドではないか(WebGLはコンピュートシェーダー非対応のため使用不可)
  • モバイル向けのグラフィックスAPIがVulkanになっているか(OpenGL ESはVFX Graphに不向き。Androidはデバイスによりコンピュートシェーダー対応が不安定)
  • Outputのマテリアルやレンダーパイプラインがシーンのパイプラインと一致しているか
  • プレビューは出るのにビルドで消える場合、対象プラットフォームのGPU要件を満たしていない可能性が高い

つまり、モバイルやWebブラウザ配信が主目的のプロジェクトでは、VFX Graphは選択肢から外し、Shurikenで設計するのが安全策になります。

よくある質問(FAQ)

VFX Graphとは何ですか?

Unityのビジュアルエフェクト作成ツールで、パーティクルの計算をGPUで並列処理することで大量のパーティクルをリアルタイムに扱えます。ノードをつないで見た目を組み立てるノードベースの仕組みです。

VFX GraphとShurikenの違いは何ですか?

VFX GraphはGPU処理で数十万以上のパーティクルを扱え、URP・HDRP専用です。ShurikenはCPU処理でパーティクル数は控えめですが、全パイプラインで追加設定なく動き、物理連携も柔軟です。物量重視ならVFX Graph、確実性・モバイル重視ならShurikenが目安です。

VFX GraphはURPで使えますか?

使えます。以前はHDRP中心でしたが、Unity 6でURPとHDRPの両方が正式サポートになりました。URPではURP対応のOutputを選ぶ必要があります。Built-in Render Pipelineでは動作しません。

VFX Graphは無料で使えますか?

無料です。Unity本体に無料で追加できる公式パッケージで、VFX Graph自体に追加費用はかかりません(Unity本体のライセンス条件には従います)。

VFX Graphがモバイルやブラウザで動かないのはなぜですか?

コンピュートシェーダーが必須だからです。WebGLはコンピュートシェーダーに非対応で動作せず、モバイルはVulkanなら動く場合がありますがOpenGL ESでは不向きです。これらが主対象ならShurikenを検討してください。

関連記事

資料請求

RELATED POSTS 関連記事