初めてのUnityエディタ拡張(ラベル表示)

UnityのInspectorであるクラスにpublicで定義したintとかfloatとかはInspectorに表示されるけど、 独自に定義したクラスの中のパラメタがみれない。。。

やりたかったことはUserCardクラスに定義したCardMasterクラスのインスタンスが保持しているatk, def, hpとかが見たかったので、初めてUnityエディタ拡張してみることにした。

f:id:hiro_akuta:20140424152148p:plain

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ファイルをつくる。

f:id:hiro_akuta:20140424152828p:plain

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が表示された!

f:id:hiro_akuta:20140424152202p:plain

簡単!