Posts 유니티 - Menu Item(메뉴 아이템)
Post
Cancel

유니티 - Menu Item(메뉴 아이템)

메뉴 아이템 기본

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private const string MenuItemTitle = "Window/Rito/Menu Item";
private const int MenuItemPriority = 123;

[MenuItem(MenuItemTitle)]
private static void MenuItem1()
{
    // ..
}

[MenuItem(MenuItemTitle, false, MenuItemPriority)]
private static void MenuItem2()
{
    // ..
}


활성화/비활성화 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
private const string MenuItemTitle = "Window/Rito/Menu Item";

[MenuItem(MenuItemTitle, false)]
private static void MenuItem()
{
    // ..
}

[MenuItem(MenuItemTitle, true)] // true : Validate 메소드, false : 일반 메뉴아이템 메소드
private static bool MenuItem_Validate()
{
    return true; // true, false 여부에 따라 활성화, 비활성화
}


체크박스 추가하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private const string MenuItemTitle = "Window/Rito/Menu Item";

// 필드로 사용하면 컴파일 시, 플레이모드 진입 시 초기화됨
//private static bool MenuItemChecked = true;

// 메뉴아이템 이름으로 Pref 깔끔하게 사용
private static bool MenuItemChecked
{
    get => EditorPrefs.GetBool(MenuItemTitle, true);
    set => EditorPrefs.SetBool(MenuItemTitle, value);
}

[MenuItem(MenuItemTitle, false)]
private static void MenuItem()
{
    // 체크 상태 변경은 메뉴아이템 메소드에서 수행
    MenuItemChecked = !MenuItemChecked;
}

[MenuItem(MenuItemTitle, true)]
private static bool MenuItem_Validate()
{
    // 체크 상태 갱신은 Validate 메소드에서 수행
    Menu.SetChecked(MenuItemTitle, MenuItemChecked);
    return true;
}


컨텍스트 메뉴 아이템 : 컴포넌트 우클릭 메뉴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[MenuItem ("CONTEXT/Transform/Menu Name")]
private static void RandomRotation (MenuCommand command)
{
    var transform = command.context as Transform;

    Undo.RecordObject (transform, SOME_ACTION);
    transform.rotation = Random.rotation;
}

// 활성화 / 비활성화 여부 결정
[MenuItem ("CONTEXT/Transform/Menu Name", true)]
private static bool RandomRotation_Validate (MenuCommand command)
{
    return true; // true, false 여부에 따라 활성화, 비활성화
}


References


This post is licensed under CC BY 4.0 by the author.