Unity 이벤트 캡처 설명서
이 문서는 Unity의 UI 툴킷을 사용하여 마우스 및 포인터 캡처 이벤트를 관리하는 방법을 안내합니다. 캡처 이벤트는 UI 요소가 마우스나 포인터의 입력을 받을 수 있도록 하며, 이를 통해 더욱 풍부한 사용자 경험을 제공할 수 있습니다.
캡처 이벤트 종류
UI 툴킷에서는 두 가지 유형의 캡처 이벤트가 있습니다:
- 마우스 캡처 이벤트
- 포인터 캡처 이벤트
이벤트를 통해 UI 요소가 마우스나 포인터를 어떻게 관리하는지 알 수 있습니다.
마우스 캡처
마우스 캡처가 활성화되면 해당 UI 요소는 포인터로부터 이벤트를 수신하며, 다른 요소들은 해당 이벤트를 받을 수 없습니다. 예를 들어, 사용자가 텍스트 상자를 클릭할 경우 텍스트 상자가 마우스를 캡처하게 됩니다.
포인터 캡처
포인터 캡처는 마우스 이벤트보다 우선적으로 처리됩니다. 포인터 타입이 마우스일 경우, 포인터 캡처는 마우스 캡처 이벤트도 발생시킵니다.
캡처 이벤트 목록
이벤트 이름 | 설명 | 타겟 |
---|---|---|
MouseCaptureEvent | 요소가 마우스 캡처를 받을 때 전송됩니다. | 캡처를 받는 요소 |
MouseCaptureOutEvent | 요소가 마우스 캡처를 릴리스할 때 전송됩니다. | 캡처를 잃는 요소 |
PointerCaptureEvent | 요소가 포인터를 캡처할 때 전송됩니다. | 캡처를 받는 요소 |
PointerCaptureOutEvent | 요소가 포인터를 릴리스할 때 전송됩니다. | 캡처를 잃는 요소 |
예제 코드
아래의 C# 코드는 이벤트 캡처의 동작을 시연하는 예제입니다.
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class CaptureEventsTestWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Capture Events Test Window")]
public static void ShowExample()
{
var wnd = GetWindow<CaptureEventsTestWindow>();
wnd.titleContent = new GUIContent("Capture Events Test Window");
}
private bool m_IsCapturing = false;
public void CreateGUI()
{
// 클릭할 수 있는 레이블 추가
for (int i = 0; i < 4; i++)
{
Label clickableLabel = new Label($"Label {i} - Click Me!");
clickableLabel.RegisterCallback<MouseDownEvent>((evt) => { Debug.Log($"Clicked on label '{(evt.target as Label).text}'"); });
rootVisualElement.Add(clickableLabel);
}
// 마우스를 캡처할 레이블 추가
Label capturingLabel = new Label("Click here to capture mouse");
capturingLabel.RegisterCallback<MouseDownEvent>((evt) =>
{
if (!m_IsCapturing)
{
capturingLabel.text = "Click here to release mouse";
MouseCaptureController.CaptureMouse(capturingLabel);
m_IsCapturing = true;
}
else
{
capturingLabel.text = "Click here to capture mouse";
MouseCaptureController.ReleaseMouse(capturingLabel);
m_IsCapturing = false;
}
});
rootVisualElement.Add(capturingLabel);
// 마우스 capture 및 release 시 메시지 출력
rootVisualElement.RegisterCallback<MouseCaptureEvent>((evt) =>
{
Debug.Log("Mouse captured");
});
rootVisualElement.RegisterCallback<MouseCaptureOutEvent>((evt) =>
{
Debug.Log("Mouse captured released");
});
}
}
활용 및 응용 예제
마우스 및 포인터 이벤트 캡처는 다양한 인터랙티브 UI 요소를 구현하는 데 유용합니다. 예를 들어:
- 드래그 앤 드롭 인터페이스: 사용자가 화면의 특정 요소를 클릭하여 드래그하고 다른 위치에 놓을 수 있습니다.
- 게임 UI: 게임 중 사용자 입력을 처리하기 위해 마우스 이벤트를 캡처하여 사용자와 상호작용하는 요소를 만듭니다.
- 폼 입력: 텍스트 필드를 클릭하면 포커스가 이동하고, 이벤트가 캡처되어 문자 입력을 가능하게 합니다.
이러한 방식으로 Unity UI 툴킷의 캡처 이벤트 시스템을 활용하면 더욱 풍부하고 반응성이 뛰어난 사용자 경험을 제공할 수 있습니다.