프로젝트를 진행하다보니 특정 에셋을 자주 찾아보게 되었습니다. 북마크를 이용해서 즐겨찾기 하는 방식으로 할 수 있지만 이번 시간에는 에디터 기능을 이용해서 상단 버튼을 누르면 해당 에셋에 접근할 수 있는 방법에 대해 알아보고자 합니다.
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 버튼에 응용하면 됩니다.
응용 예시
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);
이 부분은 에셋을 찾을 때 반짝 거리는 효과를 추가하기 위함입니다.