유니티 상단 버튼을 이용해 특정 오브젝트를 선택하기 #에디터 버튼

자주 사용하는 에셋을 버튼을 통해 접근할 수 있도록

 

프로젝트를 진행하다보니 특정 에셋을 자주 찾아보게 되었습니다. 북마크를 이용해서 즐겨찾기 하는 방식으로 할 수 있지만 이번 시간에는 에디터 기능을 이용해서 상단 버튼을 누르면 해당 에셋에 접근할 수 있는 방법에 대해 알아보고자 합니다.

 


Selection.activeObject 활용하기

Selection.activeObject는 에디터 내에서(현재 찾고자 하는) 선택된 오브젝트를 나타냅니다. 

 

Selection.activeObject를 사용하는 방법은 매우 간단합니다. 먼저 UnityEditor 네임스페이스를 사용해야 하며, 그 다음 특정 오브젝트를 선택하려면 Selection.activeObject에 해당 오브젝트를 할당하면 됩니다.

using UnityEditor;
using UnityEngine;

public class SelectionExample : MonoBehaviour
{
    [MenuItem("Examples/Select GameObject")]
    static void SelectGameObject()
    {
        // 특정 게임 오브젝트를 선택
        GameObject myObject = GameObject.Find("MyGameObject");
        Selection.activeObject = myObject;
        
        // 선택된 오브젝트를 콘솔에 출력
        Debug.Log("Selected Object: " + Selection.activeObject.name);
    }
}

 

위 예시 코드와 같이 말이죠!

 

해당 방식을 예전에 소개해드린 적이 있는 Switch Scene 버튼에 응용하면 됩니다.

 

유니티 툴바를 이용하여 씬 전환을 편하게 하자!

개발을 하다 보면 Project 폴더 안에 존재하는 Scenes을 찾아서 일일이 클릭하여 해당 씬으로 가야 하는 번거로움 및 불편함이 존재합니다. 불편함을 줄이고자 Rainbow Folders 에셋을 구매해봤으나 해

wlsdn629.tistory.com

 


응용 예시

using UnityEditor;
using UnityEngine;

namespace UnityToolbarExtender.Examples
{
    
    [InitializeOnLoad]
    public class SceneDataContainerButton
    {
        static SceneDataContainerButton()
        {
            ToolbarExtender.RightToolbarGUI.Add(OnToolbarGUI);
        }

        static void OnToolbarGUI()
        {
            GUILayout.FlexibleSpace();

            if (GUILayout.Button(new GUIContent("DB", "DB"), ToolbarStyles.commandButtonStyle))
            {
                OpenSceneDataContainer();
            }
        }

        static void OpenSceneDataContainer()
        {
            string path = "Assets/98. ScriptableObjects/Scenes/DB/LJH_SceneDataContainer.asset";
            ScriptableObject sceneDataContainer = AssetDatabase.LoadAssetAtPath<ScriptableObject>(path);

            if (sceneDataContainer != null)
            {
                Selection.activeObject = sceneDataContainer;
                EditorGUIUtility.PingObject(sceneDataContainer);
            }
            else
            {
                Debug.LogError("LJH_SceneDataContainer not found at path: " + path);
            }
        }
    }
}

 

이런식으로 코드를 작성하면 DB 에셋에 쉽게 접근할 수 있습니다.

EditorGUIUtility.PingObject(sceneDataContainer);

 

이 부분은 에셋을 찾을 때 반짝 거리는 효과를 추가하기 위함입니다.