インスペクタで設定できる値を動的に変更する
タイトルだと自分でも分かり難いと思ったので、まず画像で説明。
例としてモンスターの能力を設定する場合をあげます。
モンスターの種類に合わせて、体力などのインスペクターに表示される設定項目が変わる。
というのが今回の目的です.
SetMonsterStatus.cs
まずはモンスターの能力を設定するスクリプトから記載。
上記のスクリプトでも、モンスターの能力を設定出来ますが、動的にインスペクターの表示を変える事はまだできません。
なお、設定されたタイプ毎のスクリプトをAwake内でアタッチしてます。(あくまで能力を設定するだけのスクリプト)
enum MonsterType
enumでタイプを宣言しておくと、インスペクター上ではポップアップで設定する事が出来ます.。
今回はこのポップアップで設定したタイプ毎に他の入力欄を変えていきます。
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にあげてみました!
上げてみたかっただけ! (゚д゚)/