이번 포스트에서는 MenuItem 속성을 사용하여 Unity Editor에서 새로운 메뉴 항목을 추가하는 방법과 이를 활용한 예제를 소개하겠습니다.😊
MenuItem은 UnityEditor 네임스페이스에서 제공하는 속성으로 오직 static 함수에만 사용할 수 있습니다.
이를 통해 Unity 에디터에서 새로운 메뉴 항목을 쉽게 만들 수 있으며, 사용자에게 특정 기능을 빠르게 실행할 수 있는 버튼을 제공할 수 있습니다.
아래의 코드는 Unity 에디터의 Test 메뉴에 Do CustomFunction이라는 항목을 추가하고, 이를 클릭하면 간단한 콘솔 메시지를 출력하는 예제입니다.
1
2
3
4
5
[MenuItem("Test/Do CustomFunction")]
public static void CustomFunction() {
// 실행할 코드
Debug.Log("CustomFunction is running!");
}
위 코드처럼 MenuItem 속성은 함수에 붙여서 사용하며, 메뉴 경로와 항목 이름을 지정해 주면 해당 메뉴 항목이 에디터에 나타납니다.
메뉴 항목은 때때로 활성화 또는 비활성화 상태가 필요할 수 있습니다. 예를 들어, 특정 상황에서만 메뉴 항목을 클릭할 수 있게 하려면 validate 함수와 MenuItem 속성의 validate 인자를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[MenuItem("Test/Add RigidBody", true)]
static bool CanAddRigidbody()
{
// 선택된 오브젝트가 있고, 그 오브젝트에 Rigidbody가 없을 때만 활성화
return Selection.activeGameObject != null && Selection.activeGameObject.GetComponent<Rigidbody>() == null;
}
[MenuItem("Test/Add RigidBody")]
static void AddRigidbodyToGameObject()
{
if (Selection.activeGameObject != null)
{
Selection.activeGameObject.AddComponent<Rigidbody>();
Debug.Log("Rigidbody added to " + Selection.activeGameObject.name);
}
}
Unity 메뉴 항목에 키보드 단축키를 추가하여 더욱 편리하게 사용할 수 있습니다. 단축키는 메뉴 이름 뒤에 #, %, &와 같은 기호를 붙여서 지정합니다.
예를 들어, Shift와 Alt를 누른 상태에서 G 키를 눌러 메뉴 항목을 실행하려면 다음과 같이 설정할 수 있습니다:
1
2
3
4
5
[MenuItem("Test/Do Something1 #&g")]
static void DoSomething1()
{
Debug.Log("Shift + Alt + G is pressed!");
}
특수 키 조합 없이 사용할 때는 _를 사용합니다. 이때 반드시 space character
가 있어야 합니다.
1
2
3
4
5
[MenuItem("Test/Do Something2 _g")]
static void DoSomething2()
{
Debug.Log("G is pressed!");
}
Unity에서 사용자 정의 GameObject를 생성하는 기능을 GameObject/ 메뉴에 추가할 때는 몇 가지 중요한 사항을 지켜야 합니다.
먼저엔 먼저 코드를 살펴보겠습니다.
1
2
3
4
5
6
7
8
[MenuItem("GameObject/Create Custom GameObject", false, 10)]
static void CreateCustomGameObject(MenuCommand menuCommand)
{
GameObject go = new GameObject("Custom GameObject");
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
Selection.activeObject = go;
}
GameObject를 생성할 때, 특히 컨텍스트 메뉴에서 새 객체를 생성할 경우, 해당 객체를 올바른 부모로 설정하는 것이 중요합니다.
이를 위해 GameObjectUtility.SetParentAndAlign
을 호출하여, 새로 생성된 객체가 적절한 부모로 설정되도록 해야 합니다.
선택한 부모 객체가 있는 경우 그 아래에 새로 생성된 객체를 배치하고, 없는 경우 기본 위치에 객체를 생성합니다.
Unity의 편리한 기능 중 하나인 Undo 시스템을 사용하면, 사용자가 실수로 만든 객체를 쉽게 제거할 수 있습니다. GameObject를 생성할 때 Undo.RegisterCreatedObjectUndo
를 사용해 해당 작업을 등록하면, 사용자는 Ctrl+Z를 눌러 생성 작업을 취소할 수 있습니다.
객체가 생성된 후 바로 해당 객체가 선택되도록 하려면, Selection.activeObject
를 사용해 새로 생성된 객체를 선택 상태로 설정할 수 있습니다.
Unity - Scripting API:MenuItem