[Unity3D][UnityEditor]ScriptableWizardが思ったよりも使えなかった話

[wp_ad_camp_1]

ScriptableWizardとは

ScriptableWizardは、一つのスクリプトをベースにオブジェクトを生成したい時等に利用するエディタ。EditorWindowを継承しているのでEditorWindowで出来る事は全部できるけども、独自に予めUIが用意されているのでOnGUIを仕込んではいけない。

主な用途は何か?

正直、何に使えるのか良くわからない。パラメータ違いのプレファブを大量生産するのに向いてるかと言えば、createボタンでウィンドウがきえてしまうしイマイチ不明。

もしあるとしたら、メインのEditorWindowのサブウィンドウとして出現させる等の用法。
EditorWindow内の特定のボタンをクリックしたら出現し、Wizard内の特定パラメータを変動させた上でCreateをしたら値を取得させる関数をEditorWindow側に命令するとか。
だとしてもOnGUIが使えないのでどうせならサブウィンドウもEditorWindowで生成し、各種ボタンを用意した方が用途が広い。

ただ、エラーを出したり、ヘルプを出したりできるので、特定の値を厳密に入力させたり、文字列による曖昧な入力が必要な場合等は効果的なのかもしれない。
Unityで作るスマートフォン3Dゲーム開発講座 Unity4対応

サンプル

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;

public class TestWizard : ScriptableWizard {

 public string gstring;
 public int gint;
 private string pstring;
 private int pint;


 [UnityEditor.MenuItem("Custom/OHGAKI/TestWizard")]
 static void WillAppear()
 {
  ScriptableWizard.DisplayWizard("Test Wizard Title in DisplayWizard method.",typeof(TestWizard),"createButtonName","otherButtonName");
 }

 void OnWizardCreate()
 {
  GameObject newGameObj = new GameObject("new GameObj");
  newGameObj.AddComponent("SphereCollider");
  newGameObj.AddComponent("MeshFilter");
        newGameObj.AddComponent("MeshRenderer");
 }

 void OnWizardOtherButton()
 {
  Debug.Log("otherButtonName clicked");
 }

 void OnWizardUpdate()
 {
  helpString = "type "abc" in gstring.";
  if(gstring == "abc"){
   isValid = true;
   errorString = "";
  }else{
   isValid = false;
   errorString = "gstring is not "abc".";
  }
  
  position = new Rect(200f,200f,300f,300f);
 }
}

サンプルの解説

 [UnityEditor.MenuItem("Custom/OHGAKI/TestWizard")]

でメニュー項目を作成し、その際の起動ハンドラを次の行に記述してるのはメニュー起動系の通例通り。

起動時のスクリプトも通例通りStaticの関数として宣言。

関数内で実行しているのは

ScriptableWizard.DisplayWizard()

で、引数が3つある場合は一つ目がタイトル、二つ目がメインのボタン、三つ目がその他のボタンの文字列としてウィンドウが生成される。

この関数は引数の数や種類に応じて色々とやってることが変化するので、リファレンスを参照。

http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/ScriptReference/ScriptableWizard.html

  • OnWizardCreate()はボタン押された時に駆動するイベント。
  • OnWizardOtherButton()はotherButtonを出現させていた場合の生成されるボタンが押された際に呼び出されるイベント。
  • helpStringは常時表示用の文字列を格納する。
  • errorStringはエラーっぽい表示させたい文字列を格納する。中身が空だとエラーマークは出て来ない。
  • OnWizardUpdate()は項目の内容が変更すると駆動する。

ScriptableWizard

また、サンプルでは特定の文字が入った場合にerrorString等をアップデートしたり、ボタンをisValidをtrueにすることで有効にしてる。
isValidはfalseにしておくとボタンが押せないグレーアウト状態にさせることができる。

今日はここまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です