DevDino

[Unity] 계층 뷰에서 바로 프리팹 만드는 메뉴 만들기 본문

Unity

[Unity] 계층 뷰에서 바로 프리팹 만드는 메뉴 만들기

데브다이노 2024. 5. 13. 18:51

개발 비용을 조금이라도 줄이기 위해 고안한 방법입니다. 

 

게임 내 텍스트를 배치할 때 기존 UI 생성 메뉴에서 TextMeshPro를 생성하고, 폰트 에셋과 색, 정렬 방식 지정 등 반복작업을 해야합니다. 

 

생성할 때마다 똑같은 작업을 반복함

 

이런 반복 작업을 없애 조금이라도 개발 비용을 줄이기 위해 프리팹으로 자주 쓰는 설정을 저장하고 계층뷰에서 바로 생성하는 메뉴를 만들어보도록 하겠습니다. 

우선 자주 사용하는 폰트, 설정을 적용한 프리팹을 생성하고 코드로 로드가 가능하게 Resources 폴더 아래에 배치했습니다. 

폰트, 색, 정렬 등을 저장한 텍스트 프리팹

 

프리팹을 만드는 코드를 작성합니다. 

using System;
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;

public static class CreateUtility
{
    // 프리팹 생성 
    public static void CreatePrefab(string path)
    {
        GameObject obj = PrefabUtility.InstantiatePrefab(Resources.Load(path)) as GameObject;
        Place(obj);
    }
    public static void Place(GameObject obj)
    {
        // 경로 탐색
        SceneView lastView = SceneView.lastActiveSceneView;
        // 위치 세팅
        obj.transform.position = lastView ? lastView.pivot : Vector3.zero;

        // 오브젝트 배치 
        StageUtility.PlaceGameObjectInCurrentStage(obj);
        // 중복 이름 피하기 
        GameObjectUtility.EnsureUniqueNameForSibling(obj);

		// 생성 취소 작업 등록 
        Undo.RegisterCreatedObjectUndo(obj, "Create Object : " + obj.name);
        // 활성 오브젝트 등록 
        Selection.activeGameObject = obj;
        // 씬이 수정됨을 표시 
        EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
    }
}

 

텍스트 프리팹을 생성할 코드를 작성합니다. 

using UnityEditor;


public static class CreateTextPrefab
{
    [MenuItem("GameObject/Custom/BlackText")]
    public static void Create(MenuCommand menuCommand)
    {
        CreateUtility.CreatePrefab("Prefabs/BlackText");
    }
}

 

계층뷰에서 바로 프리팹을 불러올 수 있음을 확인하였습니다. 

 

 

자주 쓰는 프리팹이 있다면 커스텀 메뉴로 만들어보는 것도 나쁘지 않을 것 같습니다. 

 

참고한 영상입니다. 

https://youtu.be/1uqrSONpXkM?si=9p4c6Aja1EQjCv9R