내일배움캠프

내일배움캠프 Unity - TIL : 25.03.27

달시_Dalsi 2025. 3. 27. 22:40
728x90

오늘 학습한 내용

1) Unity EditorWindow

Unity에서는 EditorWindow를 활용하여 커스텀 에디터 창을 만들 수 있습니다.
이번에 구글 스프레드시트에서 데이터를 다운로드하고 ScriptableObject(SO)를 생성 및 적용하는 툴을 제작하였습니다.

이 툴을 통해 유닛(Unit) 및 몬스터(Monster) 데이터를 가져와 게임 내에서 활용할 수 있습니다.


EditorWindow를 활용한 커스텀 툴 구현

 

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

public class DataDownloaderWindow : EditorWindow
{
    private List<GameObject> myObj = new List<GameObject>();

    [MenuItem("Tools/Data Downloader Tool")]
    public static void ShowWindow()
    {
        GetWindow<DataDownloaderWindow>("Data Downloader Tool");
    }

    private void OnGUI()
    {
        GUILayout.Label("Clear TmpObjects", EditorStyles.boldLabel);

        if (GUILayout.Button("Clear TmpObjects Button"))
        {
            DestroyTmpObj();
        }

        GUILayout.Space(20);

        GUILayout.Label("Download Unit/Monster Data", EditorStyles.boldLabel);

        if (GUILayout.Button("Download Unit Data"))
        {
            GameObject obj = new GameObject("tmpUnitDataDownloader");
            CharacterDataDownloader downloader = obj.AddComponent<CharacterDataDownloader>();
            downloader.StartDownload(true);
            myObj.Add(obj);
        }

        if (GUILayout.Button("Download Monster Data"))
        {
            GameObject obj = new GameObject("tmpMonsterDataDownloader");
            CharacterDataDownloader downloader = obj.AddComponent<CharacterDataDownloader>();
            downloader.StartDownload(false);
            myObj.Add(obj);
        }
    }

    private void DestroyTmpObj()
    {
        foreach (var obj in myObj)
        {
            DestroyImmediate(obj);
        }
        myObj.Clear();
    }
}

 


코드 분석

EditorWindow

  • EditorWindow를 상속받아 Unity의 새로운 커스텀 에디터 창을 생성합니다.
  • 기존 Inspector가 아닌, 별도의 창을 만들어 툴을 실행할 수 있도록 합니다.

MenuItem("Tools/Data Downloader Tool")

  • Unity 메뉴 바에 Tools → Data Downloader Tool 항목을 추가하여,
    해당 항목을 클릭하면 커스텀 에디터 창이 실행됩니다.

GetWindow<DataDownloaderWindow>("Data Downloader Tool");

  • 에디터 창을 생성하는 메서드입니다.
  • 창의 제목을 "Data Downloader Tool"로 설정합니다.

OnGUI()

  • 커스텀 에디터 창의 UI를 구성하는 메서드입니다.
  • GUILayout.Label()과 GUILayout.Button()을 이용해 텍스트와 버튼을 배치합니다.

GameObject obj = new GameObject("tmpUnitDataDownloader");

  • 데이터를 다운로드하는 임시 객체를 생성합니다.
  • CharacterDataDownloader 컴포넌트를 추가하여, 유닛 또는 몬스터 데이터를 다운로드합니다.

기능 요약

기능 1: 임시 객체 삭제

  • "Clear TmpObjects Button"을 클릭하면 다운로드 작업 후 남아 있는 임시 객체들을 삭제합니다.

기능 2: 유닛 데이터 다운로드

  • "Download Unit Data" 버튼을 클릭하면 CharacterDataDownloader가 유닛 데이터를 구글 스프레드시트에서 다운로드하여 SO에 적용합니다.

기능 3: 몬스터 데이터 다운로드

  • "Download Monster Data" 버튼을 클릭하면 몬스터 데이터를 동일한 방식으로 다운로드 및 적용합니다.

결과

  • 에디터 창이 생성되고, 버튼 클릭만으로 유닛/몬스터 데이터를 다운로드할 수 있습니다.
  • 임시 객체 정리 기능을 추가하여 불필요한 오브젝트가 남지 않도록 최적화하였습니다.
  • 구글 스프레드시트에서 데이터를 가져와 SO(ScriptableObject)에 생성 및 적용하는 자동화된 워크플로우를 구축했습니다.



728x90