Posts 유니티 - 에디터 GUI 이벤트 모음
Post
Cancel

유니티 - 에디터 GUI 이벤트 모음

Mouse Over Control


  • 특정 컨트롤에 마우스가 위치해 있는지 확인

[1] Layout 요소가 아닌 경우

1
2
3
4
5
Rect rect = /* Set Rect */;

EditorGUI.LabelField(rect, "Label"); // Draw Field Control

bool mouseOver = rect.Contains(Event.current.mousePosition);

[2] Layout 요소인 경우

1
2
3
4
EditorGUILayout.TextField("Text");

bool mouseOver = GUILayoutUtility.GetLastRect()
                .Contains(Event.current.mousePosition);


Mouse Down, Up, Drag


  • 컨트롤에 포커싱된 상태에서는 검사 불가
1
2
3
bool mouseDown = Event.current.type == EventType.MouseDown;
bool mouseUp   = Event.current.type == EventType.MouseUp;
bool mouseDrag = Event.current.type == EventType.MouseDrag;


Focused On Control


  • 특정 컨트롤에 포커싱되어 있는지 확인
1
2
3
4
5
GUI.SetNextControlName("Control"); // 이어지는 컨트롤에 이름 부여

// <- Draw Field (Layout 요소 상관 없음)

bool focused = (GUI.GetNameOfFocusedControl() == "Control");


KeyDown, KeyUp


[1] 컨트롤에 포커싱되지 않은 경우

1
2
3
4
5
6
7
bool keyDown = 
    Event.current.keyCode == KeyCode.A && 
    Event.current.type == EventType.KeyDown;

bool keyUp = 
    Event.current.keyCode == KeyCode.A && 
    Event.current.type == EventType.KeyUp;

[2] 컨트롤에 포커싱된 상태에서 검사

1
2
3
4
5
6
7
bool keyDown = 
    Event.current.keyCode == KeyCode.A && 
    Event.current.type == EventType.Used;  // KeyDown 대신 Used

bool keyUp = 
    Event.current.keyCode == KeyCode.A && 
    Event.current.type == EventType.KeyUp; // KeyUp은 동일


Force to Focus on Control


  • 특정 컨트롤에 포커싱하기
1
2
3
4
5
GUI.SetNextControlName("TextField"); // 컨트롤에 이름 부여
EditorGUILayout.TextField("Text");

// 이름 부여된 컨트롤에 포커싱
EditorGUI.FocusTextInControl("TextField");
  • 응용 : 현재 포커스 제거하기
1
2
3
4
// 컨트롤이 없는 부분에 마우스 클릭할 경우
// 강제로 포커스 제거
if(Event.current.type == EventType.MouseDown)
    EditorGUI.FocusTextInControl("");
This post is licensed under CC BY 4.0 by the author.