Custom Inspector

Unity 2017. 5. 3. 09:18


[Player.cs]
using UnityEngine;

public class Player : MonoBehaviour {

    public int id;
    
    public string playerName;
    public string backStory;    
    public float health;
    public float damage;
    
    public float weapon1Damage, weapon2Damage;

    public string shoesName;
    public int shoesSize;
    public string shoesType;   

    // Use this for initialization
    void Start () {
        health = 50;		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}


[PlayerInspector.cs] - Asset/Editor 에 존재해야 한다.
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Player))]
public class PlayerInspector : Editor {

    Player player;
    bool showWeapons;
    private void OnEnable()
    {
        player = (Player)target;
    }

    public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI();
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Player id " + player.id);
        player.playerName = EditorGUILayout.TextField("Player Name ", player.playerName);
        

        EditorGUILayout.LabelField("Back Story");
        player.backStory = EditorGUILayout.TextArea(player.backStory,GUILayout.MinHeight(70));

        if (player.health < 20)
            GUI.color = Color.red;
        if (player.health > 80)
            GUI.color = Color.green;

        Rect progressRect = GUILayoutUtility.GetRect(20,20);
        EditorGUI.ProgressBar(progressRect, player.health / 100.0f, "Health " + player.health + " / 100");

        GUI.color = Color.white;

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        player.damage = EditorGUILayout.Slider("Damage ", player.damage, 10, 20);

        if(player.damage < 12)
        {
            EditorGUILayout.HelpBox("The Damage is too low", MessageType.Warning);
        }
        if (player.damage > 18)
        {
            EditorGUILayout.HelpBox("Damage is too damn high", MessageType.Warning);
        }

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        showWeapons = EditorGUILayout.Foldout(showWeapons, "Weapons");
        if(showWeapons)
        {
            
            player.weapon1Damage = EditorGUILayout.FloatField("Weapon 1 Damage", player.weapon1Damage);
            EditorGUI.indentLevel += 2;
            player.weapon2Damage = EditorGUILayout.FloatField("Weapon 2 Damage", player.weapon2Damage);
            EditorGUI.indentLevel -= 2;
        }

        EditorGUILayout.LabelField("Shoes");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Name ", GUILayout.MaxWidth(50));
        player.shoesName = EditorGUILayout.TextField(player.shoesName);
        EditorGUILayout.LabelField("Size ", GUILayout.MaxWidth(50));
        player.shoesSize = EditorGUILayout.IntField(player.shoesSize);
        EditorGUILayout.LabelField("Type ", GUILayout.MaxWidth(50));
        player.shoesType = EditorGUILayout.TextField(player.shoesType);

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.EndVertical();

        
        player.health += 2;
        if (player.health > 100)
            player.health = 0;
        
    }

}





'Unity' 카테고리의 다른 글

FSM 엔진  (0) 2017.06.11
Custom Editor - SerializedProperty  (0) 2017.05.03
EditorWindow 사용예  (0) 2017.05.02
Custom Editor Window - GUI  (0) 2017.05.02
Editor Scripting Tip [Built-in Attribute]  (0) 2017.05.02
Posted by 빵원군
,