UnityのScriptableWizardを使って独自のエディターウィザードを開く

記事内に広告が含まれています。

今回はScriptableWizardを使ってメニューアイテムからエディターウィザードを開きゲームオブジェクトに設定されているスクリプトのパラメータを操作してみたいと思います。

エディターウィザードとはなんぞや?

と言う人も多いと思いますがパソコンへのソフトインストール時に表示される『次へ』、『OK』、『キャンセル』ボタンが表示されているようなウインドウの事みたいです。

それのUnityエディター版ですね。

Unityではアニメーションイベントを設定する時のウインドウがそうなのかもしれません(ボタンは表示されていませんが)。

今回はメニューアイテムにウィザードを表示するメニューを追加していきます。

スポンサーリンク

エディターウィザード

エディターウィザードの作成

ウィザードを作成するにはScriptableWizardクラスを拡張して新しいクラスを作成する必要があります。

ウィザードクラスをScriptableWizardTestという名前にした場合は

↑のようにScriptableWizardクラスを継承してクラスを作成します。

UnityEditorのクラスであるScriptableWizardを継承してクラスを作成しているのでEditorという名前のフォルダを作成しその中にファイルを移動させます。

ウィザードの表示

ウィザードはUnityのエディターのメニュー項目から表示させるので、Attributeを使いメニュー項目を追加します。

アトリビュートでMenuItemとメニューとアイテム名を設定し、実行するメソッドをstatic(静的)で作成します。

MyWizardというメニューアイテムを選択したらCreateWizardメソッドが実行され、ScriptableWizard.DisplayWizardでこのクラスのウィザードを開きます。

第1引数がウィザードの名前で、第2引数がCreateボタンの名前、第3引数がそれ以外のボタンの名前となっています。

Createボタンはウィザードの右下、それ以外のボタンはCreateボタンの左に表示されます。

Createボタンを押した時に実行する処理

Createボタンを押した時はOnWizardCreateメソッドが呼ばれるのでその中に処理を記述します。

Createボタンを押すとウィザードが消えます。

それ以外のボタンを押した時に実行する処理

それ以外のボタンを押した時はOnWizardOtherButtonメソッドが呼ばれるのでその中に処理を記述します。

それ以外のボタンを押した時はウィザードはそのまま表示されています。

ウィザードで変更があった時に実行する処理

ウィザードで変更があった時はOnWizardUpdateメソッドが呼ばれるのでその中に処理を記述します。

ウィザードを使ったサンプルの作成

ウィザードの表示の仕方等がわかったので実際にウィザードのサンプルを作成してみます。

Main Cameraに新しくScriptableWizardDataスクリプトを設定します。

このScriptableWizardDataスクリプトのインスペクタの値をウィザードで操作出来るようにします。

ScriptableWizardDataスクリプトはUnityEditorのクラスを使っていないので通常のフォルダ内に置いておきます。

新しくScriptableWizardTestスクリプトを作成しScriptableWizardクラスを拡張してScriptableWizardTestクラスを作成します。

ScriptableWizardTestスクリプトはUnityEditorのクラスを使うのでEditorフォルダ内に移動させます。

int、float、Color、Transform[]型のフィールドを定義します。

Awakeメソッドでそれぞれの初期値を記憶しておき、ヒエラルキー上にあるTransform情報を全て取得しフィールドに設定しています。

これによってウィザードのtransformsフィールドに取得したTransform情報が表示されます。

このTransform情報を取得したのは試しにしてみただけど特別使用するわけではありません・・・・(^_^;)

CreateWizardメソッドでScriptableWizard.DisplayWizardを使ってScriptableWizardTestのウィザードを作成します。

OnWizardCreateメソッドではヒエラルキー上で選択しているゲームオブジェクトがあればScriptableWizardDataスクリプトを取得しています。

取得出来た場合はウィザードの値でScriptableWizardDataの値を書き換えています。

OnWizardOtherButtonメソッドではウィザード内の書き換えたデータを初期値に戻しています。

OnWizardUpdateではウィザードの更新があった時にキーボードフォーカスがあるウインドウの表示とマウスカーソル下にあるウインドウを表示しています。

処理を見てわかるとおり実用的なスクリプトではありませんね・・・・(^_^;)

とりあえず出来上がったので確認してみましょう。

↑のようになりました。

『実行』ボタンを押すとウィザードで設定した値がScriptableWizardDataに反映されていますね。

終わりに

今回は実用的なサンプルは作れませんでしたが、

UnityのTerrainにゲームオブジェクトを自動配置するツールを作成する
UnityのTerrainの地面に合わせて建物や木等のゲームオブジェクトを回転やサイズを変更して指定した数だけ配置するツールの作成。

でTerrainに指定した数のゲームオブジェクトを地形に沿って設置するツールを作成してみました。

いやぁ実用的ですねぇ・・・(^_^)v

参考サイト

Creating Basic Editor Tools

タイトルとURLをコピーしました