そんなこと言われたら手を出すしかないじゃない+(・ω・0)*
Unityのエディタ拡張 -基礎
まずは拡張ウィンドウ作成から
1. 準備
ほとんどいらない. Assetsの下に「Editor」ディレクトリを作るくらい. ちなみに他のところでも, 「Editor」ディレクトリにあれば動くらしい. まぁわかりやすくまとめておくのが吉.
2. コーディング
他の普通のコードと同じようにC#で書ける.
using UnityEngine; using UnityEditor; using System.Collections; public class ExpansionPrac : EditorWindow { [MenuItem("Window/My Window %i")] static void Init(){ ExpansionPrac window = (ExpansionPrac)EditorWindow.GetWindow(typeof(ExpansionPrac)); } }こんな感じ. なにも表示されないウィンドウを出すだけ.
とりあえず EditorWindowクラスを継承. その際には UnityEditorクラスのインポートを忘れずに.
問題は 7行目. 他ではあまり見ない [ ] を使った宣言. MenuItem()により, メニューに追加する.
引数はその際の配置. この場合はメニューの Window → My Windowをクリックで表示されるようになる. 最後の %i はなんとショートカットキー. この場合は 「ctrl + i」. 他と被ってないか注意.
こうなります.
クリック後, Init()の中でウィンドウを用意する. EditorWindow.GetWindow()でウィンドウを呼び出してる(らしい). 型はこのクラスの型. このクラス名がウィンドウのタブに出てくるので注意.
にやってくれているらしい. 道理でスクリプト編集から戻ってくるなり「エラーあるぞゴルァ!щ(゚Д゚#щ)」とか怒ってくれるわけだ…
なのであと必要な手順は「Editor」ディレクトリの下に配置しているかということ. ちなみに自分は
Assets/Scripts/Editor/ExpansionPrac.cs
と配置して起動を確認. ただ他でEditorを作成→Scriptsディレクトリ以下に移動 した直後はコンパイルが通っていないのか起動しません(・ω・`) 一度 再生→停止 するなどしてコンパイルしてもらうといいかも.
さみしい(・ω・`)
なので中身を適当に入れてみる.
シーン中で使ったようにGUILayout()が使用可能. EditorStylesなんていうフォントなどの仕様のクラスも.
また 7, 8行目のように, カスタムウィンドウの幅/高さを取得することも可能.
9行目からがちょっと独特. EditorGUILayoutなるクラスを使える. 通常よく見る Inspectorなんかで使われている表示はここから取り出せるっぽい. Unityリファレンスマニュアルにある通り, とりあえず Toggleグループを追加してみる. グループの中身になるものを 10, 11行目に宣言し, 12行目の EndToggleGroup()でグループの宣言を閉じる. 閉じなくても今回は問題なく動くのだが, 当然閉じないといつまでもグループの中身を足し続けることに…
10行目は子にもトグルボタンをつけてみる. 特に何もなし.
11行目はスライダ. 3,4つ目の引数がスライダの下限/上限. ちなみに, ここの引数を 7行目で取得した swを使って, -sw/swと入れて, ウィンドウサイズを変えてみるとちょっと面白いことにヘ(゚∀゚ヘ)
ちなみにフィールドにあるのがトグルやスライダの初期値になります.
これを 2. で作ったコードに追加してコンパイルしてもらうと…
出てきた!+(゚∀゚0)*
ちなみにコード全景.
今回はここまで.
次はGUI操作でちゃんと編集できるようにしたいなー+(・ω・0)*
参考 : Unityリファレンスマニュアル
MK Games
EditorGUILayout
問題は 7行目. 他ではあまり見ない [ ] を使った宣言. MenuItem()により, メニューに追加する.
引数はその際の配置. この場合はメニューの Window → My Windowをクリックで表示されるようになる. 最後の %i はなんとショートカットキー. この場合は 「ctrl + i」. 他と被ってないか注意.
こうなります.
クリック後, Init()の中でウィンドウを用意する. EditorWindow.GetWindow()でウィンドウを呼び出してる(らしい). 型はこのクラスの型. このクラス名がウィンドウのタブに出てくるので注意.
3. 実際に呼び出せるようにする
しかしゲームに関係ないのにいつコンパイルするんだろう…とか思ってたらシーンを再生/停止したとき |
スクリプトを編集したとき |
なのであと必要な手順は「Editor」ディレクトリの下に配置しているかということ. ちなみに自分は
Assets/Scripts/Editor/ExpansionPrac.cs
と配置して起動を確認. ただ他でEditorを作成→Scriptsディレクトリ以下に移動 した直後はコンパイルが通っていないのか起動しません(・ω・`) 一度 再生→停止 するなどしてコンパイルしてもらうといいかも.
4. 中身を作ってみる
呼び出してはみたものの…さみしい(・ω・`)
なので中身を適当に入れてみる.
bool isEditable; bool childToggleBool = true; float childSliderFloat = 2.22f; void OnGUI(){ GUILayout.Label("DispTest", EditorStyles.boldLabel); int sw = Screen.width; int sh = Screen.height; isEditable = EditorGUILayout.BeginToggleGroup("ToggleGroupTest", isEditable); childToggleBool = EditorGUILayout.Toggle("childToggle", childToggleBool); childSliderFloat = EditorGUILayout.Slider("childSlider", childSliderFloat, -10, 10); EditorGUILayout.EndToggleGroup(); }まさかの OnGUI();
シーン中で使ったようにGUILayout()が使用可能. EditorStylesなんていうフォントなどの仕様のクラスも.
また 7, 8行目のように, カスタムウィンドウの幅/高さを取得することも可能.
9行目からがちょっと独特. EditorGUILayoutなるクラスを使える. 通常よく見る Inspectorなんかで使われている表示はここから取り出せるっぽい. Unityリファレンスマニュアルにある通り, とりあえず Toggleグループを追加してみる. グループの中身になるものを 10, 11行目に宣言し, 12行目の EndToggleGroup()でグループの宣言を閉じる. 閉じなくても今回は問題なく動くのだが, 当然閉じないといつまでもグループの中身を足し続けることに…
10行目は子にもトグルボタンをつけてみる. 特に何もなし.
11行目はスライダ. 3,4つ目の引数がスライダの下限/上限. ちなみに, ここの引数を 7行目で取得した swを使って, -sw/swと入れて, ウィンドウサイズを変えてみるとちょっと面白いことにヘ(゚∀゚ヘ)
ちなみにフィールドにあるのがトグルやスライダの初期値になります.
これを 2. で作ったコードに追加してコンパイルしてもらうと…
出てきた!+(゚∀゚0)*
ちなみにコード全景.
using UnityEngine; using UnityEditor; using System.Collections; public class ExpansionPrac : EditorWindow { [MenuItem("Window/My Window %i")] static void Init(){ ExpansionPrac window = (ExpansionPrac)EditorWindow.GetWindow(typeof(ExpansionPrac)); } bool isEditable; bool childToggleBool = true; float childSliderFloat = 2.22f; void OnGUI(){ GUILayout.Label("DispTest", EditorStyles.boldLabel); int sw = Screen.width; int sh = Screen.height; isEditable = EditorGUILayout.BeginToggleGroup("ToggleGroupTest", isEditable); childToggleBool = EditorGUILayout.Toggle("childToggle", childToggleBool); childSliderFloat = EditorGUILayout.Slider("childSlider", childSliderFloat, -10, 10); EditorGUILayout.EndToggleGroup(); } }
今回はここまで.
次はGUI操作でちゃんと編集できるようにしたいなー+(・ω・0)*
参考 : Unityリファレンスマニュアル
MK Games
EditorGUILayout
0 件のコメント:
コメントを投稿