こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Script Graphの処理をスクリプトから呼び出したい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unity2021からデフォルトでインストールされている「Visual Scripting(旧:Bolt)」。ノードをつなげてプログラミングできるツールです。

    本記事では 「C#スクリプトからVisual Scriptingで作ったScript Graph(スクリプトグラフ)の処理を呼び出す方法」 を解説します。Visual Scriptingを使い出すとどうしても機能同士をつなげる処理が必要になります。例えば「ボタンを押したらウィンドウを開く」といった内容です。

    今回紹介する内容は、各機能を連結させるために必要になるテクニックなのでぜひ最後まで読んでみてください。

    Visual Scriptingの始め方や基礎はこちらの記事にまとめていますので、ぜひ読んでみてください。

    CustomEventを定義してC#スクリプトから呼び出す

    はじめに結論を簡単にまとめます。

    CustomEventを定義してC#スクリプトから呼び出す

    ①Script Graph内にCustomEventユニットを作成

    ②Custom Eventユニット内にイベント名を定義

    ③スクリプトからイベント名をキーにして呼び出す

    Visual Scriptingには CustomEvent という形で 外部からの呼び出しに対応 しています。この機能を使えばグラフの外側から処理を呼び出すことが可能です。

    以降の章で詳しく解説していきます。

    逆にVisual ScriptingからC#スクリプトを呼び出す方法は次の記事で詳しく解説していますのであわせて読んでみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    Visual Scriptingの準備

    C#スクリプトからVisual Scriptingを呼び出す方法を解説する前に、今回使用するVisual Scriptingの準備をします。

    Script Graphの作成

    まずはVisual Scriptingするためのグラフを作成します。State Graph(ステートグラフ)、Script Graph(スクリプトグラフ)と2種類ありますが、今回はScript Graphを使います。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_0

    メニューAssets > Create > Visual Scripting > Script Graph をクリックしましょう。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_1

    Projectウィンドウ内にScript Graphアセットが作られるので「TestGraph」と名付けました。

    グラフは大量に増えてしまうため、あらかじめ「Graph」というフォルダに入れています。ちなみに本記事ではグラフは1つしか使用しません。

    Script GraphをGameObjectにセット

    作成したScript GraphをGameObjectに関連付けます。しかしScript Graphはコンポーネントではないため、GameObjectにそのままAddComponentできないのです。

    👉 【保存版】Unityのコンポーネント徹底解説【Unity基礎】

    そこで 「Script Machine(スクリプトマシン)コンポーネント」 を使用します。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_2

    ①Hierarchyウィンドウに1つ空のGameObject(TestMachineと命名)を作成して、②Script Machineコンポーネントをセットします。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_3

    ①のGraphに「Script Graphの作成」で作成したTestGraphアセットをセットしてください。これでGameObjectとグラフを関連付けることができました。

    では、ここからグラフの編集に入るため②の Edit Graphボタン をクリックしてください。

    Visual ScriptingをC#スクリプトから呼び出す3つの手順

    Visual ScriptingをC#スクリプトから呼び出す方法を3つの手順で紹介します。

    Visual Scriptingをスクリトから呼び出す3つの手順

    ①Script Graph内にCustom Eventユニットの作成

    ②Custom Eventユニットにイベント名を定義

    ③C#スクリプトからCustom Eventを呼び出す

    手順①Script Graph内にCustom Eventユニットの作成

    Script Graphの中にCustom Eventユニットを作成します。何も表示されていないScript Graphウィンドウ内で右クリックしましょう。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_4

    検索窓に「Custom Event」と入力していくとCustom Eventユニットがヒットしますので選択します。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_5

    するとこんな感じでCustom Eventユニットが作成されます。

    手順②Custom Eventユニットにイベント名を定義

    次にCustom EventをC#から呼び出せるようにイベント名を設定していきます。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_6

    作成したCustom Eventユニットに C#から呼び出すためのイベント名を設定します。 今回は「TestEvent」にしました。以上でイベント名の定義は終了です。

    このままではC#からグラフがいつ呼ばれたのかわからないので、 Custom Eventユニットが呼ばれたときにログを出力 してみましょう。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_7

    Custom Eventユニットの出力先からDebug Logユニットを接続します。

    しかし、このままでは出力する文字列がありません(設定されていないから)。
    そこで、C#スクリプトからCustom Eventを呼び出す際に文字列を渡してログ出力するように実装してみます。

    Custom Eventユニットに引数を追加(最大10個)

    Custom Eventユニットの「Arguments」は、最初「0」になっていますが「1」に修正します。 ArgumentsとはCustom Eventを実行する際の引数の個数 を表します。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_8

    このように「Arg. 0」という出力が追加されました。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_9

    「Arg. 0」にはログ出力する文字列が格納されるので、Debug LogユニットのMessageに接続します。

    ちなみにCustom Eventの引数は最大10個まで渡すことができます。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_10

    10個も使うことはないと思いますが、引数の数に最大値が存在することを一応覚えておきましょう。

    手順③C#スクリプトからCustom Eventを呼び出す

    最後にC#スクリプトからScript Graphを呼び出します。結論から話すと CustomEvent.Trigger メソッドを使います。引数には以下の3つを設定します。

    👉 【Unity基礎】GameObjectの使い方(生成や削除など)全て解説

    準備としてMonoBehaviourを継承したC#スクリプトを作成(CallScriptToGraph.csと命名)します。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_11

    Script Machineと同じGameObjectにAddComponentしましょう。

    👉 【Unityの基礎】MonoBehaviour徹底解説【初心者向け】

    CallScriptToGraph.csを以下のように修正してください。

    using Unity.VisualScripting;  
    using UnityEngine;  
    
    public class CallScriptToGraph : MonoBehaviour  
    {
        void Awake()  
        {
            CustomEvent.Trigger(gameObject, "TestEvent", "ScriptToGraph");  
        }
    }
    

    CustomEvent.Triggerメソッドを使うことでScript Graph内のCustom Eventを呼び出せます。

    Awakeメソッドに実装したため、Unity実行直後にCustomEvent.Triggerは呼び出されます。ログ出力させる文字列は「ScriptToGraph」と指定しました。Consoleウィンドウにこの文字列が表示されたら成功です。

    ではUnityを実行してみます。

    【Unity】C#スクリプトからVisual Scriptingを呼び出す方法_12

    すると「ScriptToGraph」という文字列がConsoleウィンドウに表示されました。成功です。

    このようにCustom Eventユニットを使うことでC#スクリプトからグラフの処理を呼び出すことができるのです。

    まとめ

    本記事ではC#スクリプトからVisual ScriptingのScript Graphを呼び出す方法を紹介しました。簡単に内容をまとめます。

    C#スクリプトからVisual Scriptingを呼び出す方法まとめ

    ①Custom Eventユニットを作成

    ②Custom Eventユニットにイベント名を設定

    ③CustomEvent.TriggerメソッドでCustom Eventユニットを呼び出す

    こんな感じです。C#からグラフへのアクセスは仕組みがわかればとても簡単です。1つのグラフ内にいくつもCustom Eventユニットは作成できるので、C#スクリプト内にpublicメソッドを定義する感覚と似ています。

    しかし、 イベント名が文字列指定のためタイプミスを防ぐ工夫が今後必要になりそう だなという印象です。

    本記事ではC#スクリプトからVisual Scriptingへのアクセス方法の解説でしたが、逆にVisual ScriptingからC#スクリプトを呼び出す方法は次の記事で詳しく解説していますのであわせて読んでみてください。

    この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいVisual Scriptingライフをお過ごしください。

    オススメ記事
    検証環境