프로그래밍 공부!!

Editor 시작하기 - Editor 본문

프로그래밍/Unity

Editor 시작하기 - Editor

StingW 2018. 2. 22. 11:28

Unity에서 Editor를 사용하기위해서는

Editor 폴더를 만들어준다. (갯수는 상관없이 어느 위치에있던지 Editor 폴더의 기능이 사용된다)

Editor 관련 스크립트는 Editor 폴더에 작성한다.

밑 스크립트 객체를 Editor를 사용해서 Inspector에 원하도록 그려지도록 해보자.

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

[System.Serializable] // => Editor에서 접근 가능하도록 허락해줌.
public class TestScript : MonoBehaviour
{
    public int life;
    public List<int> listAge = new List<int>();
}
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TestScript)), CanEditMultipleObjects]
public class TestScriptEditor : Editor
{
	public override void OnInspectorGUI()
    {
        serializedObject.Update();

        EditorGUILayout.PropertyField(serializedObject.FindProperty("life"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("listAge"));

        serializedObject.ApplyModifiedProperties();
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
}

CustomEditor(typeof(TestScript)) => 커스텀화 시킬 스크립트.

CanEditMultipleObjects => 다중 오브젝트를 편집 가능하게 만드는 기능 없을시 ( "Multi-object editing not supported"(다중 오브젝트 편집은 지원하지 않습니다) 라는 문구가 뜬다. 

자세한 설명은 유니티 API를 참조... ㅎㅎ

위와 같이 적용된다. 하지만 List를 보면 Count도 없고 객체도 없다. 이것을 어떻게 그리기 위해서는 밑의 코드로 변경하자.

using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TestScript)), CanEditMultipleObjects]
public class TestScriptEditor : Editor
{
	public override void OnInspectorGUI()
    {
        serializedObject.Update();

        EditorGUILayout.PropertyField(serializedObject.FindProperty("life"));
        DrawList(serializedObject.FindProperty("listAge"), "원소 이름");

        serializedObject.ApplyModifiedProperties();
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
    public void DrawList(SerializedProperty _listProperty, string _labalName)
    {
        if(_listProperty.isExpanded = EditorGUILayout.Foldout(_listProperty.isExpanded, _listProperty.name))
        {
            EditorGUILayout.PropertyField(_listProperty.FindPropertyRelative("Array.size"));
            int Count = _listProperty.arraySize;
            for (int i = 0; i < Count; ++i)
            {
                EditorGUILayout.PropertyField(_listProperty.GetArrayElementAtIndex(i), new GUIContent(_labalName + i));
            }
        }
    }
}
위와 같이 코드를 변경 하면

이와 같이 그려진다.

'프로그래밍 > Unity' 카테고리의 다른 글

Property Draw 사용하기 - Editor  (0) 2018.06.03
Raycash LayMask 용도  (0) 2018.06.02
Editor 사용 함수들(추가중)  (0) 2017.12.08
Unity 실행시점  (0) 2017.12.07
유니티를 facebook 연동 설정  (0) 2015.11.03
Comments