아카이빙/Unity3D

[Unity3D] 커스텀 에디터(2) - EditorGUILayout

셩님 2017. 4. 9. 15:01

유니티 커스텀 에디터 공부 두번째 - EditorGUILayout

커스텀 에디터는 시작하기 전에 익혀야할 내용들이 너무 많다. 어떻게 구현할 지 설계하기전에 대략적으로 어떤 내용들이 있는 지 살펴보는 것이 유용하다.

이번에는 CustomEditor의 기능 중 인스펙터창을 커스터마이징 해보려고한다.

이에 앞서 EditorGUILayout을 익혀보자.


Editor/MyItemEditor.cs

Editor폴더에 MyItemEditor 스크립트를 만들어보자. 이 에디터 스크립트의 목적은 MyItem이라는 스크림의 인스펙터 에디터를 마음대로 꾸며보는 것이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//MyItem 스크립트의 에디터를 커스터마이징한다.
[CustomEditor(typeof(MyItem))]
//여러 오브젝트를 선택했을 때 수정가능
[CanEditMultipleObjects]
public class MyItemEditor : Editor {

    //오브젝트를 불러올 때 실행된다. 
    void OnEnable(){
    }

    //Inspector GUI를 오버라이딩
    public override void OnInspectorGUI ()
    {
        //기존 GUI를 유지한다.
        //base.OnInspectorGUI ();

        EditorGUILayout.ColorField ("Color Field", Color.white);
        EditorGUILayout.CurveField ("AnimationCurve Field", AnimationCurve.Linear (0, 3, 5, 5));
        EditorGUILayout.DelayedDoubleField ("DelayedDouble Field", 500);
        EditorGUILayout.HelpBox ("The helpbox", MessageType.Info);
        EditorGUILayout.IntField ("Int Field", 5);
        EditorGUILayout.Knob (new Vector2 (30f, 30f), 50f, 20f, 80f, "Knob", Color.black, Color.gray, true);
        EditorGUILayout.LabelField ("Label Field", "my label");
        EditorGUILayout.LayerField ("Layer Field", 0);
        EditorGUILayout.ObjectField ("Object Field", null, typeof(Sprite), true);
        EditorGUILayout.PasswordField ("Password Field", "mypassword");
        EditorGUILayout.Separator ();
        EditorGUILayout.Slider ("Slider", 20f, 10f, 90f);
        EditorGUILayout.Space ();
        EditorGUILayout.TagField ("Tag Field", "Player2");
        EditorGUILayout.TextArea ("this is a text area.");
        EditorGUILayout.TextField ("Text Field", "this is a text field.");
        EditorGUILayout.Toggle ("Toggle", true);
        EditorGUILayout.ToggleLeft ("ToggleLeft", false);
        EditorGUILayout.Vector2Field ("Vector2  field", new Vector2 (50f, 30f));
    }
}



결과화면, 위에서부터 스크립트의 순서대로 ColorField부터 Vector2Field까지 나온다.

GUILayoutOption을 설정하지는 않았지만 뭐가 있는지는 한번 알아보자.


GUILayoutOption