Memo
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// 1. 하이라키 윈도우 타입
public static Type HierarchyWindowType
{
get
{
if (_hierarchyWindowType == null)
_hierarchyWindowType =
typeof(EditorWindow).Assembly.GetTypes()
.Where(t => t.Name == "SceneHierarchyWindow")
.First();
return _hierarchyWindowType;
}
}
private static Type _hierarchyWindowType;
// 2. 하이라키 윈도우 객체
public static SearchableEditorWindow HierarchyWindow
{
get
{
if (_hierarchyWindow == null)
_hierarchyWindow = EditorWindow.GetWindow(HierarchyWindowType) as SearchableEditorWindow;
return _hierarchyWindow;
}
}
private static SearchableEditorWindow _hierarchyWindow;
// 3. 하이라키 윈도우에 포커스 되어 있는지 여부
public static bool IsFocusedOnHierarchyWindow
{
get
{
var focused = EditorWindow.focusedWindow;
if (focused == null)
return false;
return focused.titleContent.text == "Hierarchy";
}
}
// 하이라키 윈도우가 2개 이상이면 첫 번째 하이라키 윈도우에만 제대로 인식되는 문제가 있음
public static bool IsFocusedOnHierarchyWindow2
=> EditorWindow.focusedWindow == HierarchyWindow;
// 4. 하이라키의 게임오브젝트가 선택된 상태에서 키 입력 이벤트 감지하기
[InitializeOnLoadMethod]
private static void StaticInitMethod()
{
EditorApplication.hierarchyWindowItemOnGUI -= OnHierarchyWindow;
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyWindow;
}
private static void OnHierarchyWindow(int instanceID, Rect selectionRect)
{
Event cur = Event.current;
if (cur == null) return;
if (Selection.activeGameObject == null) return;
if (cur.type == EventType.KeyDown)
{
Debug.Log(cur.keyCode);
}
}