ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 11주차 3일 ( 유니티 커스텀툴 만드는 방법 )
    개발일지/스파르타 코딩클럽 부트캠프 2024. 6. 26. 20:41

    유니티 에디터 커스텀

     

    오늘은 유니티 커스텀 툴을 만드는 법에 대해서 조금 알아보려고 한다.

     

    유니티 커스텀툴을 만들 때 필요한 것

    • 에디터는 만들때는 MonoBehavior를 상속받지 않고 EditorWindow를 상속받아야 한다.
    • using UnityEditor

    옵션 창에 툴을 뜨게하는 법

    [MenuItem("MyTool/MenuTest")]
    static void MyMenu()
    {
        GetWindow<CustomTest>();
    }

     

    툴에 글씨, 버튼을 새기는 방법

    private void OnGUI()
    {
        EditorGUILayout.LabelField("메뉴 라벨");
        EditorGUILayout.TextField("입력");
    
        if(GUILayout.Button("버튼"))
        {
            Debug.Log("클릭했다.");
            var obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
            obj.name = "큐브";
        }
    
    }

     

    색상과 그라디언트까지 표현할 수 있다.

     

    씬 이동 버튼을 만드는 방법

     private void OnGUI()
     {
         ChangeScene();
     }
    
    void ChangeScene()
    {
        EditorGUILayout.LabelField("씬 이동 버튼");
    
        if(GUILayout.Button("마을 씬"))
        {
            SceneManager.LoadScene(0);
        }
        if (GUILayout.Button("던전 씬"))
        {
            SceneManager.LoadScene(1);
        }
        if (GUILayout.Button("상점 씬"))
        {
            SceneManager.LoadScene(2);
        }
    }

    참고로 로드씬을 하면 런타임 중에만 작동하고 실행중이지 않을 때는 오류가 뜬다

    그럼 실행중이지 않을 때도 씬 전환을 버튼 딸깍으로 하고싶다면?

     

     

    단축키 지정해주는 방법

    // # -> 쉬프트, % -> 컨트롤, & -> 알트
    [MenuItem("MyTool/MenuTest #1")]

    주석에 나온 것 처럼

    현재 #1이라고 적어놨으니 이 툴의 단축키는 Shift+1이 된다.

     

    Editor 함수의 4가지 종류

     

    Editor함수는 4가지의 종류가 있는데

    GUI, GUILayout, EditorGUI, EditorGUILayout 이렇게 4 종류가 있다

     

    모두가 다른 역할을 하는 것은 아니고

    Editor + GUI + Layout이런 형태로 이해하면 좋을 거 같다.

     

    GUI가 가장 원초적이라 먼저 살펴보자면

    GUI는 모든 위치를 직접 설정해줘야한다.

    private void OnGUI()
    {
    	GUI.Label(new Rect(10, 10, 50, 50), "라벨");
    	GUI.Label(new Rect(13, 13, 50, 50), "라벨");
    	GUI.Box(new Rect(20, 20, 100, 100), new GUIContent());
    }

     

    Layout은 유니티가 자동으로 규격을 잡아준다.

    private void OnGUI()
    {
        GUILayout.Label("라벨");
        GUILayout.Label("라벨");
        GUILayout.TextField("입력");
        GUILayout.Button("버튼");
        GUILayout.Box("박스");
    }

    여기서 옆으로 규격을 잡고싶다면?

    private void OnGUI()
    {
        GUILayout.BeginHorizontal();
        {
            GUILayout.Label("라벨");
            GUILayout.Label("라벨");
            GUILayout.TextField("입력");
            GUILayout.Button("버튼");
            GUILayout.Box("박스");
        }
        GUILayout.EndHorizontal();
    }

    GUILayout.BeginHoriaontal() 안에 넣어주면 된다.

     

    옆으로 정렬된 모습

     

    다음은 GUI를 꾸미는 방법인데

     

    GUIContent와 GUIStyle이 있는데

    GUIContent : 그려지는 컨텐츠에 대한 정보

    GUIStyle : 어떤 식으로 그릴지

     

    예시코드

    private void OnGUI()
    {
        GUIContent content = new GUIContent();
        content.text = "버튼임";
        content.tooltip = "설명임";
    
        GUIStyle style = new GUIStyle(EditorStyles.miniButton);
        style.normal.textColor = Color.white;
        style.hover.textColor = Color.red;
        style.active.textColor = Color.green;
        style.fontSize = 30;
    
        GUILayout.Button(content, style);
        GUILayout.BeginArea(new Rect(10, 10, 100, 100), GUI.skin.window);
        GUILayout.EndArea();
    }

    버튼의 텍스트가 빨간색이고 누르면 초록색으로 변한다.

Designed by Tistory.