仕事でちょこちょこと調べては拡張してということを繰り返していたので、一度腰を据えてやらねばとまとめてみた。
主に自分用のまとめとして、だいぶ口語訳的にやっています。
目次
環境について
OS | Windows7 (64bit) |
Unity | 5.1.3f1 |
基礎知識のようなもの
まず基本的に知っておいた方がいいこと。
・エディター拡張とは
エディター拡張とは、Unityのインスペクタ、要はオブジェクトの設定をする部分のウィンドウをカスタマイズできる機能のこと。
・Editorディレクトリ
Unityでは、「Editor」というディレクトリを作成すると、その下にあるスクリプトはエディタ用のものとみなされるようになり、ゲーム本体には格納されなくなります。
MonoDevelopのプロジェクトも別のものになっており、ゲーム側では使えないエディタ用の機能も使えたりします。
エディター拡張やビルドで使うスクリプトなどはここに置かれます。
・特別なメソッド
エディター拡張時に使用するメソッド。これをオブジェクトに定義して呼び出します。
・OnGUI
通常の描画時に呼ばれるメソッド。エディター拡張ではエディターウィンドウの拡張で使われます。
・OnInspectorGUI
インスペクタ拡張のときに呼ばれるメソッド。この中にインスペクタの記述を書きます。
・OnSceneGUI
シーン拡張のときに呼ばれるメソッド。この中にシーンで使う記述を書きます。
・OnValidate
インスペクタの値が変更されたときに、そのオブジェクト側で呼ばれます。
値が変更されたときに連動して変更したい項目がある場合などに使います。
・特殊なメンバ変数
エディター拡張用に定義されたメンバ変数について。
・target
OnInspectorGUI、OnSceneGUIなどで出てきます。
このインスペクタが対象としているオブジェクトが格納されています。
Objectで定義されているので、参照するときは該当オブジェクトのクラスにキャストして使います。
例えばインスペクタで、SampleClassのメンバ変数nameを更新するフィールドを作成するとしたら、
SampleClass obj = target as SampleClass; obj.name = EditorGUILayout.TextField ("name", obj.name);
というようにします。
関連するリファレンスなど
(ドキュメント)エディター拡張
参考にしたサイトなど