本日は Unity の小ネタ枠です。
UnityのInspectorビューにエディター再生中のみ関数を実行するボタンを追加する手順を記事にします。
前提条件
前回記事の続きです。
bluebirdofoz.hatenablog.com
UnityEditor.EditorApplication
エディターが再生中か否かは UnityEditor.EditorApplication クラスの isPlaying 変数で取得できます。
UnityEditor.EditorApplication クラスではその他、様々な UnityEditor の情報が取得できます。
docs.unity3d.com
サンプルスクリプト
以下のサンプルスクリプトと、そのエディター拡張を行うスクリプトを作成しました。
・TestMessageScript.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// サンプルスクリプト /// </summary> public class TestMessageScript : MonoBehaviour { /// <summary> /// デバッグメッセージを表示するPublic関数 /// </summary> public void PublicMessageMethod(string message) { Debug.Log("PublicMessageMethod : " + message); } /// <summary> /// デバッグメッセージを表示するPrivate関数 /// </summary> private void PrivateMessageMethod(string message) { Debug.Log("PrivateMessageMethod : " + message); } }
・TestMessageScriptEditor.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; // クラス名を別名でまとめて管理する using CUSTOMTYPE = TestMessageScript; // 拡張するクラスを指定する [CustomEditor(typeof(CUSTOMTYPE))] public class TestMessageScriptEditor : Editor { /// <summary> /// テスト入力メッセージ /// </summary> private string TestMessage; // GUIの表示関数をオーバーライドする public override void OnInspectorGUI() { // 元のインスペクター部分を表示 base.OnInspectorGUI(); // targetを変換して対象スクリプトの参照を取得する CUSTOMTYPE targetScript = target as CUSTOMTYPE; // Editor実行中のみ有効化なUIを設定する if (EditorApplication.isPlaying) { // public関数を実行するボタンの作成 if (GUILayout.Button("PublicMessageMethodの実行")) { targetScript.PublicMessageMethod(TestMessage); } // private関数を実行するボタンの作成 if (GUILayout.Button("PrivateMessageMethodの実行")) { targetScript.SendMessage("PrivateMessageMethod", TestMessage, SendMessageOptions.DontRequireReceiver); } // メッセージの入力テキストフィールド TestMessage = EditorGUILayout.TextField("Message", TestMessage); } } } #endif
シーンの適当なオブジェクトにサンプルスクリプトを設定します。
動作確認
シーンを再生するため、Unity エディターの[再生]ボタンをクリックします。
シーンが再生されると、Inspectro ビューに関数を実行する拡張UIが表示されました。
これによりシーンを再生中にのみ、関数実行を試すことができます。