ClickEvent는 사용자가 VisualElement 위에 마우스 커서를 올리고 마우스 왼쪽 버튼(또는 포인팅 기기의 첫 번째 버튼)을 누르면 발생합니다.
클릭은 같은 VisualElement에서 포인터 다운 이벤트 발생 후 포인터 업 이벤트 발생으로 구성됩니다. 다운 이벤트와 업 이벤트가 같은 VisualElement에서 발생하는 한, 두 이벤트 사이에 포인터가 움직일 수 있습니다.
이 이벤트는 버튼이 아닌 시각적 요소에서 클릭을 감지하는 데 사용할 수 있습니다. 예를 들어, Toggle
컨트롤의 구현은 ClickEvent
를 사용하여 체크 표시를 나타내거나 숨기고 컨트롤의 값을 변경합니다.
ClickEvent
의 기본 클래스는 PointerEventBase입니다. 자세한 내용은 포인터 이벤트에 관한 문서를 참조하십시오.
이벤트 | 설명 | 트리클다운 | 버블업 | 취소 가능 |
---|---|---|---|---|
ClickEvent | 마우스 왼쪽 버튼을 클릭하면 발생합니다. | ✔ | ✔ | ✔ |
ClickEvent
는 고유한 프로퍼티가 없으나, 기본 클래스의 모든 프로퍼티를 상속합니다. 프로퍼티 리스트는 포인터 이벤트 페이지를 참조하십시오.
시각적 요소 위에 마우스 커서를 올리고 마우스 왼쪽 버튼을 클릭하면 Unity가 이 이벤트를 전송합니다.
target
: 클릭 발생 시 마우스나 포인팅 기기 아래에 있었던 요소입니다.
다음 예제는 시각적 요소에 대한 ClickEvent
를 등록하는 예제입니다.
btnClose.RegisterCallback<ClickEvent, VisualElement>(Clicked, asset); // asset is the root visual element that will be closed
private void Clicked(ClickEvent evt, VisualElement root)
{
root.ShowVisualElement(false);
}
다음 예제는 색칠된 시각적 요소에서 ClickEvent에 반응하는 방식을 나타냅니다. 요소를 클릭하면 요소의 컬러가 새로운 무작위 컬러로 변경됩니다.
예제의 동작을 확인하려면 다음을 수행하십시오.
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class ClickEventExampleWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/ClickEventExample")]
public static void ShowExample()
{
var wnd = GetWindow<ClickEventExampleWindow>();
wnd.titleContent = new GUIContent("Click Event Example");
}
public void CreateGUI()
{
// Create a few different colored boxes
for (int i = 0; i < 4; i++)
{
// Create VisualElement with random background color
var newBox = new VisualElement() { style = { flexGrow = 1, backgroundColor = GetRandomColor() } };
rootVisualElement.Add(newBox);
// Register a click event to the visual element to change the background color to a new color
newBox.RegisterCallback<ClickEvent>(OnBoxClicked);
}
}
private void OnBoxClicked(ClickEvent evt)
{
// Only perform this action at the target, not in a parent
if (evt.propagationPhase != PropagationPhase.AtTarget)
return;
// Assign a random new color
var targetBox = evt.target as VisualElement;
targetBox.style.backgroundColor = GetRandomColor();
}
private Color GetRandomColor()
{
return new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
}
}