実行ボタンがついたシンプルなウィンドウをScriptableWizardを使って実装する方法です。
簡単なウィンドウを作ってみる
まずは基本的な機能で簡単なウィンドウを作ります。
#if UNITY_EDITOR using UnityEngine; using UnityEditor; public class ScriptableWizardExample : ScriptableWizard { // ScriptableWizardを継承する [SerializeField] private float _testField = 1.0f; [MenuItem("Window/Scriptable Wizard Example")] private static void Open() { DisplayWizard<ScriptableWizardExample>(ObjectNames.NicifyVariableName(typeof(ScriptableWizardExample).Name)); } /// <summary> /// Createボタンが押された時の処理 /// </summary> private void OnWizardCreate () { Debug.Log("Create was pressed."); } } #endif
Windowメニューから次のようなウィンドウを開けます。
いろんな機能
ScriptableWizardの他の機能として、もう一つボタンを追加したり、
バリデーションしたり、GUIをカスタムできたりします。
#if UNITY_EDITOR using UnityEngine; using UnityEditor; public class ScriptableWizardExample : ScriptableWizard { [SerializeField] private float _testField = 1.0f; [MenuItem("Window/Scriptable Wizard Example")] private static void Open() { // 引数に二つの文字列を入力するとボタンが二つ表示される DisplayWizard<ScriptableWizardExample>(ObjectNames.NicifyVariableName(typeof(ScriptableWizardExample).Name), "Create", "Other"); } private void Awake() { // 説明があればhelpStringに入れる helpString = "このウィンドウの説明"; } /// <summary> /// 値が変更されるたびに呼ばれる /// </summary> private void OnWizardUpdate() { // 値のバリデーション結果はisValidに入れる // 不正だった場合はCreateボタンが非アクティブになる isValid = _testField >= 0; // 不正だった場合のエラーメッセージはerrorStringに入れる errorString = isValid ? null : "Error Description"; } /// <summary> /// Createボタンが押された時の処理 /// </summary> private void OnWizardCreate () { // Createボタンを押したときの処理 Debug.Log("Create was pressed."); } /// <summary> /// Otherボタンが押された時の処理 /// </summary> private void OnWizardOtherButton() { Debug.Log("Other was pressed."); } /// <summary> /// GUI描画 /// </summary> protected override bool DrawWizardGUI () { var so = new SerializedObject(this); so.Update(); using (var ccs = new EditorGUI.ChangeCheckScope()) { EditorGUILayout.PropertyField(so.FindProperty("_testField")); if (ccs.changed) { so.ApplyModifiedProperties(); // 変更があった場合はtrueを返す return true; } } // 変更が無い場合はfalseを返す return false; } } #endif
ウィンドウはこんな感じになります。