初めてのUnityエディタ拡張(ラベル表示)
UnityのInspectorであるクラスにpublicで定義したintとかfloatとかはInspectorに表示されるけど、 独自に定義したクラスの中のパラメタがみれない。。。
やりたかったことはUserCardクラスに定義したCardMasterクラスのインスタンスが保持しているatk, def, hpとかが見たかったので、初めてUnityエディタ拡張してみることにした。
using UnityEngine; using System.Collections; public class UserCard : MonoBehaviour { public CardMaster cardMaster; void Start () { cardMaster = CardMaster.CreateRandomCard(); } }
using System; public class CardMaster { public int hp; public int atk; public int def; public static CardMaster CreateRandomCard() { System.Random r = new System.Random(); CardMaster cardMaster = new CardMaster(); cardMaster.hp = r.Next(10); cardMaster.atk = r.Next(10); cardMaster.def = r.Next(10); return cardMaster; } }
Assetsフォルダ以下にEditorフォルダをつくり、その中にUserCardEditor.csファイルをつくる。
targetという変数名に対象のインスタンスが入ってくるらしいので、それをUserCard型に変換。 あとはEditorGUILayout.LabelFieldでラベルを追加。
using UnityEngine; using UnityEditor; [CustomEditor(typeof(UserCard))] public class UserCardEditor : Editor { public override void OnInspectorGUI () { DrawDefaultInspector (); UserCard userCard = target as UserCard; EditorGUILayout.LabelField("atk", userCard.cardMaster.atk.ToString()); EditorGUILayout.LabelField("def", userCard.cardMaster.def.ToString()); EditorGUILayout.LabelField("hp", userCard.cardMaster.hp.ToString()); } }
これでUserCardのInspectorを見てみると、atk, def, hpが表示された!
簡単!