読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

インスペクタで設定できる値を動的に変更する【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加

インスペクタで設定できる値を動的に変更する

タイトルだと自分でも分かり難いと思ったので、まず画像で説明。
例としてモンスターの能力を設定する場合をあげます。

f:id:kan_kikuchi:20141221152840p:plain

モンスターの種類に合わせて、体力などのインスペクターに表示される設定項目が変わる
というのが今回の目的です.


SetMonsterStatus.cs

まずはモンスターの能力を設定するスクリプトから記載。

上記のスクリプトでも、モンスターの能力を設定出来ますが、動的にインスペクターの表示を変える事はまだできません。
なお、設定されたタイプ毎のスクリプトをAwake内でアタッチしてます。(あくまで能力を設定するだけのスクリプト)

enum MonsterType

enumでタイプを宣言しておくと、インスペクター上ではポップアップで設定する事が出来ます.。

f:id:kan_kikuchi:20141221160821p:plain

今回はこのポップアップで設定したタイプ毎に他の入力欄を変えていきます。

OnValidate

入力された値に制限を与える事が出来ます。例えば、

HP  = Mathf.Max (1, HP);

とする事で、1未満のHPが設定出来ない用にしています。
ただし、下記のSetMonsterStatusEditor.csを適応するとこれでは制限できないので注意


SetMonsterStatusEditor.cs

次に動的にインスペクターの表示を変えるスクリプトを記載。

いわゆるエディタ拡張というもので、このスクリプトを[Editor]フォルダ以下におくとインスペクターが動的に変わるようになります。

CustomEditor

エディタを拡張するクラスを指定します。

[CustomEditor (typeof(SetMonsterStatus))]

typeofの後にあるクラスが拡張対象です。

EditorGUILayout

これで、インスペクターに表示するGUIを設定出来ます。
例えばEditorGUILayout.HelpBoxで注記を表示したり、EditorGUILayout.FloatFieldでFloat型を入力させたり、他にも色々…

詳しくは以下で!丸投げ!!
参考 : その1 Isnpectorが変わる!

元のクラスでインスペクター上で表示するようにしていても、このEditorGUILayoutで指定しなければ、表示されなくなります。なので、設定されたタイプ毎に表示するものを変える事で動的にインスペクターの表示を変更しています。


おわりに

今回は特に追加したアセットとかがなかったので、GitHubにあげてみました!
上げてみたかっただけ! (゚д゚)/