こんにちは、Unityエンジニアのオオバです。
Unity公式が提供するノードベースプログラミングツール「Visual Scripting」はVisual Scripting側からC#スクリプトを呼ぶことができます。
以前、C#スクリプト側からVisual Scriptingの処理を呼び出す方法を紹介しました。本記事はその逆ということです。
C#スクリプトからVisual Scriptingを呼び出す方法はこちらの記事参考にしてみてください。
👉 【Unity】C#スクリプトからVisual Scriptingを呼び出す方法
では、本題の Visual ScriptingからC#スクリプトを呼び出す方法 を解説していきます。
Visual Scriptingの始め方や基礎はこちらの記事にまとめていますので、ぜひ読んでみてください。
C#を作成しただけではVisual Scriptingで使用できない
はじめに結論を簡単にまとめます。
①コンポーネント、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
を選択します。
Project Settingsウィンドウ内の 「Regenerate Nodes」 ボタンをクリックしてください。するとVisual Scriptingに追加したコンポーネントが反映されます。
実際にVisual Scriptingでユニットを検索してみましょう。
すると「GraphToScript」ユニットが登場しました。
コンポーネントは全てのメソッドにアクセスできるわけではありません。 アクセスできるメソッドは以下のとおりです。
- 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
を選択します。
「Type Options」 をクリックしてトグルを展開します。
右側の「+」ボタンをクリックして「TestStaticClass」を追加します。
staticクラスを追加したら「Regenerate Nodes」ボタンを必ずクリックしましょう。するとVisual Scriptingに反映されます。
するとstaticクラスが使えるようになります。
ちなみにVisual Scriptingからアクセスできるのは publicメソッド限定 です。static privateメソッドはグラフから呼び出すことはできません。
割愛してしまいましたが、ピュアC#クラスも Type Options から登録して使います。アクセスできる範囲は publicメソッド、public staticメソッドの2種類 です。
まとめ
この記事では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