【Unity】インスペクター上にメソッドを呼ぶボタンを実装する
2019-06-27 2019-09-17
Overview
VTuberを動かしたりするシステムの他,動画などを書き出したりするために作成したUnityのプロジェクトでは
インスペクター上の値をリアルタイムに動かす他,メソッドをこのタイミングに呼びたい!テストをするためにボタンが欲しい!
ってことが多々あります.この記事ではそれを超簡単にやる秘伝のソースを置いておきます.

こんな感じのボタンをインスペクター上に表示させ,Play中に押せるようにする!
Environment
Unity2018.3.14f1
Method
呼び出したいメソッドをパブリックメソッドにしておく
1 2 3 4 5 6 7 8 9 |
using UnityEngine; public class TestDebugLog : MonoBehaviour { public void OutputLog() //<===publicに設定 { Debug.Log("Hello World"); //<==実行する内容 } } |
以下のソースをコピーし,適宜変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using UnityEditor; using UnityEngine; [CustomEditor(typeof(TestDebugLog))] //<===ボタンを表示させるコンポーネント(Class) public class TestDebugLogCustomInsp : Editor //<===クラス名は適宜変えたほうが... { public override void OnInspectorGUI() { base.OnInspectorGUI(); var t = target as TestDebugLog; //<===ボタンを表示させるコンポーネント(Class GUILayout.Space(20); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.Space(); EditorGUI.BeginDisabledGroup(!EditorApplication.isPlaying); if (GUILayout.Button("Test DebugLog", //<===ボタンの上に表示する文字 GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true), GUILayout.Height(30))) { t.OutputLog(); // <===さっき作ったパブリックメソッドを実行 } EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); } EditorGUILayout.EndHorizontal(); GUILayout.Space(20); } } |
完了!

Playt中にボタンを押すとpublicに設定したメソッドが実行されます.
Ref.
確かカンさんのこのページを参考にした記憶が…いつもありがとうございます!
http://kan-kikuchi.hatenablog.com/entry/CustomEditor_Button