본문 바로가기
Unity 유니티 기초강의

유니티 에디터 Editor Unity

by 만사오케이프로 2022. 6. 4.
반응형

     

유니티 에디터터를 사용할경우 최상단에 네임스페이스

using UnityEditor;

추가 해주어야지 사용 가능합니다.

 

그리고 빌드할려고 일반 폴더에 있을경우 컴파일이 안될경우가 있습니다.

그 이유는 Editor 관련 코드는 전부 #if UNITY_EDITOR안에 들어 있거나 해당 코드가 Editor폴더에 있어야합니다.

안전하게 Editor폴더에 있으면 좋을것 같습니다.

 

예시)

씬안에 Text를 모두 검색후 Text가 있는 오브젝트에 Outline 스크립트를 넣어줍니다.

상단에 표시해주기 위해서는 함수 위에

[MenuItem("유니티에니터 상단에 보여질 경로")]  추가해줍니다.

예)

[MenuItem("/UI/Text스크립트 검색후 Outline넣기")]

 

메뉴 클릭시 함수가 실행됩니다.

 

씬에 있는 모든 Text와 리소스 폴더 Prefab도 찾아서 바꾸어 줍니다.

using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

public class UIAddScript : Editor
{
    [MenuItem("/UI/Text스크립트 검색후 Outline넣기")]
    public static void AddedTextComponent()
    {
        var txts = Resources.FindObjectsOfTypeAll(typeof(Text)) as Text[];
        if (txts != null && txts.Length > 0)
        {
            foreach (var t in txts)
            {
                if (t != null && !t.GetComponent<Outline>())
                    t.gameObject.AddComponent<Outline>();
            }
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
    }
}

 

마지막에 AssetDatabase 함수를 실행해주는게 좋습니다. 에셋은 추가만 하고 저장을 안할시 리셋 될경우가 있습니다.

AssetDatabase.SaveAssets();

이 함수는 저장되지 않는 모든 에셋들을 저장하는 함수입니다.

AssetDatabase.Refresh();

에셋들을 갱신해 주는 함수입니다.

 

2. 유니티 에디터 창 만들기

에디터를 창을 만들경우 EditorWindow을 상속받아야 합니다.

using UnityEditor;
using UnityEngine;

public class TestEditorWindow : EditorWindow
{
    string TestWindow = "Hello World";
    bool testGroupEnabled;
    bool testBool = true;
    float testFloat = 10.1f;
    
    [MenuItem("UI/TestEditorWindow")]
    static void Init()
    {
        TestEditorWindow window = (TestEditorWindow)EditorWindow.GetWindow(typeof(TestEditorWindow));
        window.Show();
    }

    void OnGUI()
    {
        GUILayout.Label("Base Settings", EditorStyles.boldLabel);
        TestWindow = EditorGUILayout.TextField("Text Field", TestWindow);

        testGroupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", testGroupEnabled);
        testBool = EditorGUILayout.Toggle("Test Toggle", testBool);
        testFloat = EditorGUILayout.Slider("Test Slider", testFloat, -5, 5);
        EditorGUILayout.EndToggleGroup();
    }
}

 

반응형

댓글