TIL(24-12-23) - 커스텀 에디터

임재훈·2024년 12월 23일

Unity

목록 보기
20/20

커스텀 에디터 제작

제작 이유

먼저, 커스텀 에디터를 제작하게 된 이유는 게임을 테스트하는 과정에서 시간이 오래걸리는 작업의 속도를 올리기 위해서이다.
예를 들어, RPG 장르의 게임인 경우에 레벨을 올리는데 많은 시간이 필요하다. 이때, 커스텀 에디터를 제작하여 테스트를 위한 커스텀 창을 만들어 레벨 업 버튼 누르면 클릭 한 번에 레벨 업이 되는 것이다.
이렇게 나는 커스텀 에디터를 게임 테스트에 필요한 기능을 위해 제작해보았다.

제작 과정

  1. 에디터 창을 따로 만들기 위해 UnityEditor 네임스페이스에서 제공하는 EditorWindow 클래스를 상속 받는다.
using UnityEditor;
using UnityEngine;

public class EditorTool : EditorWindow
{

}
  1. Unity 에디터에서 커스텀 에디터 창을 킬 수 있도록 경로를 설정한다.
[MenuItem("Tools/EditorTool")]
public static void ShowWindow()
{
    GetWindow<EditorTool>("EditorTool");
}

메뉴에 있는 Tools -> EditorTool을 클릭하면 창이 열린다.

  1. OnGUI를 활용하여 UI를 그리고 원하는 기능을 실행한다.
private void OnGUI()
{

}

GUILayout을 활용하여 간단한 버튼을 만들어 사용하였다.

private void OnGUI()
{
    // 플레이어
    GUILayout.Label("Player", EditorStyles.boldLabel);

    if (GUILayout.Button("Level Up"))
    {
        if(Player != null)
        {
            Player.LevelUp();
        }
        else
        {
            Debug.LogWarning("Player를 찾을 수 없습니다!");
        }
    }

    if (GUILayout.Button("Full Heal"))
    {
        if (Player != null)
        {
            Player.FullHeal();
        }
        else
        {
            Debug.LogWarning("Player를 찾을 수 없습니다!");
        }
    }

    _invincibility = GUILayout.Toggle(_invincibility, "Invincibility");
    if (Player != null)
    {
        Player._isInvincible = _invincibility;
    }

    // 곡괭이
    GUILayout.Space(_space);
    GUILayout.Label("Pickaxe", EditorStyles.boldLabel);

    if (GUILayout.Button("Level Up"))
    {
        if(GM.NowPlayerData.PickaxeLV + 1 <= (int)PickaxeID.End - 1)
        {
            GM.NowPlayerData.PickaxeLV++;
            Inventory.UpdatePickaxeUI();
            PickAxeController.UpdateSpriteByLevel();
        }
    }
}

레벨 업, 완전 회복, 무적, 곡괭이 레벨 업 기능을 만들었다.

정리

GUILayout

기본적으로 GUILayout은 너비와 높이, 위치를 자동으로 정렬해준다.

  • Label: 텍스트를 표시한다. 주로 타이틀을 작성할 때 사용한다.
  • Button: 버튼을 만든다. bool 값을 반환하여 if문에서 활용할 수 있다.
  • Toggle: 토글 버튼을 만든다. bool 값을 반환한다.
  • Space: 여백을 넣는다.

OnGUI

  • OnGUI는 IMGUI 방식으로 매 프레임마다 실행된다.
    -> 간단한 에디터 툴을 제작할 때 적합하다.
    -> UI 동작과 논리를 한 곳에서 제어 가능하다.
    -> 복잡한 UI를 만들 경우 성능 문제가 발생할 수 있다. 복잡한 UI가 필요한 경우는 UGUI, UI Toolkit을 사용하자
profile
초심을 잃지 말자!

0개의 댓글