渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

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

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

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

お悩みさん
お悩みさん
  • Visual ScriptingからC#スクリプトを呼ぶ方法を知りたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unity公式が提供するノードベースプログラミングツール「Visual Scripting」はVisual Scripting側からC#スクリプトを呼ぶことができます。

    以前、C#スクリプト側からVisual Scriptingの処理を呼び出す方法を紹介しました。本記事はその逆ということです。
    C#スクリプトからVisual Scriptingを呼び出す方法はこちらの記事参考にしてみてください。

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

    では、本題の Visual ScriptingからC#スクリプトを呼び出す方法 を解説していきます。

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

    C#を作成しただけではVisual Scriptingで使用できない

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

    Visual ScriptingからC#を実行する方法

    ①コンポーネント、staticクラス共に宣言するだけではアクセスできない

    ②コンポーネント追加後「Regenerate Nodes」を実行

    ③ピュアC#クラス、staticクラスはType Optionsに追加後「Regenerate Nodes」を実行

    ④アクセスできるレベルはコンポーネント、ピュアC#クラス、staticクラスで異なる

    結論から話すと、C#スクリプトを追加しただけではVisual Scriptingから使うことはできません。 「Regenerate Nodes」 という処理を実行することでグラフ上に表示されるようになるのです。

    以降の章で詳しく解説しますのでぜひ最後まで読んでみてください。

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

    コンポーネントのメソッドを呼び出す方法

    C#で作ったコンポーネントをVisual Scriptingから呼び出す方法を解説します。コンポーネントとはMonoBehaviourクラスを継承したクラスのことです。

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

    次のコンポーネント(GraphToScript)をVisual Scriptingから呼び出してみます。今回は検証目的も兼ねているため、様々なアクセス範囲のメソッドを用意しました。

    using UnityEngine;  
    
    public class GraphToScript : MonoBehaviour  
    {
        public void PublicMethod()  
            => Debug.Log(nameof(PublicMethod));  
    
        private void PrivateMethod()  
            => Debug.Log(nameof(PrivateMethod));  
    
        protected void ProtectedMethod()  
            => Debug.Log(nameof(ProtectedMethod));  
    
        public static void PublicStaticMethod()  
            => Debug.Log(nameof(PublicStaticMethod));  
    
        public static void PrivateStaticMethod()  
            => Debug.Log(nameof(PrivateStaticMethod));  
    }
    

    C#スクリプト「GraphToScript.cs」を作成し、上記のコードを貼り付けます。このままではVisual Scriptingからアクセスできません。

    そこで コンポーネントをVisual Scriptingに反映させる作業 をします。

    コンポーネントをVisual Scriptingへ反映させる方法

    メニューEdit > Project Settings > Visual Scripting を選択します。

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

    Project Settingsウィンドウ内の 「Regenerate Nodes」 ボタンをクリックしてください。するとVisual Scriptingに追加したコンポーネントが反映されます。

    実際にVisual Scriptingでユニットを検索してみましょう。

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

    すると「GraphToScript」ユニットが登場しました。

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

    コンポーネントは全てのメソッドにアクセスできるわけではありません。 アクセスできるメソッドは以下のとおりです。

    • publiフィールドメソッド
    • public staticメソッド
    • private staticメソッド

    privateフィールドメソッドprotectedフィールドメソッド にはVisual Scriptingからはアクセスできないようです。

    ピュアC#クラス、staticクラスのメソッドを呼び出す方法

    次にVisual ScriptingからピュアC#クラス、staticクラスのメソッドにアクセスする方法を解説します。

    ピュアC#クラスとstaticクラスは宣言したままではVisual Scriptingで利用することはできません。 使用する前に特別な作業が必要です。

    今回はサンプルとして以下のstaticクラス TestStaticClass をVisual Scriptingのユニットとして使えるようにします。

    using UnityEngine;  
    
    public static class TestStaticClass  
    {
        public static void PublicStaticMethod() => Debug.Log(nameof(PublicStaticMethod));  
    
        private static void PrivateStaticMethod() => Debug.Log(nameof(PrivateStaticMethod));  
    }
    

    TestStaticClassにはpublicメソッド、privateメソッドそれぞれ用意しました。Visual Scriptingではどの範囲までアクセスできるのかも含めて確認します。

    メニューEdit > Project Settings > Visual Scripting を選択します。

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

    「Type Options」 をクリックしてトグルを展開します。

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

    右側の「+」ボタンをクリックして「TestStaticClass」を追加します。

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

    staticクラスを追加したら「Regenerate Nodes」ボタンを必ずクリックしましょう。するとVisual Scriptingに反映されます。

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

    するとstaticクラスが使えるようになります。

    ちなみにVisual Scriptingからアクセスできるのは publicメソッド限定 です。static privateメソッドはグラフから呼び出すことはできません。

    割愛してしまいましたが、ピュアC#クラスも Type Options から登録して使います。アクセスできる範囲は publicメソッド、public staticメソッドの2種類 です。

    まとめ

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

    Visual ScriptingからC#を実行する方法

    ①コンポーネント、staticクラス共に宣言するだけではアクセスできない

    ②コンポーネント追加後「Regenerate Nodes」を実行

    ③ピュアC#クラス、staticクラスはType Optionsに追加後「Regenerate Nodes」を実行

    ④アクセスできるレベルはコンポーネント、ピュアC#クラス、staticクラスで異なる

    こんな感じです。Visual ScriptingとC#スクリプトはハイブリッドに使っていくことが多くなりそうな予感がしています。お互いの良さを引き出すために、相互に呼び出すスキルを手に入れておくほうが良いと思います。

    こちらの記事でC#スクリプトからVisual Scriptingを呼び出す方法を紹介しているので、ぜひあわせて読んでみてください。

    最後にコンポーネントとstaticクラスがアクセスできる範囲を表にしました。ぜひ参考にしてみてください。

    メソッドの種類コンポーネントピュアC#staticクラス
    publicフィールドメソッド-
    privateフィールドメソッド××-
    protectedフィールドメソッド××-
    public staticメソッド
    private staticメソッド××

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

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

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

    オススメ記事
    検証環境
    • Unity2021.3.5f1
    • Visual Scripting v1.7.8