點擊事件(Click events)
當一個Visual Element被滑鼠左鍵(或點擊裝置(pointing device)的第一個按鈕)點擊,將觸發一個Click Event
。進行點擊操作的Visual Element會觸發Pointer Down Event
與Pointer up Event
。此外Click Event
也可以檢測到非按鈕Visual Element的點擊,例如Toggle control便是使用了Click Event
來處理顯示,隱藏勾號(check mask)並改變control的值。
Event | 描述 | Trickles down | Bubbles up | Cancellable |
---|---|---|---|---|
ClickEvent | 當滑鼠左鍵點擊時,就會觸發一個Click Event |
✔ | ✔ | ✔ |
註冊Click Event
1 | // 使用RegisterCallback註冊ClickEvent,同時還傳入一個VisualElement參數 |
例子:以下例子示範如何使用Click Event讓一個visual element在被點擊之後將原有顏色,替換為另一個新的顏色。
- 在Assets > Scripts > Editor 下建立一個 C# Script
ClickEventExampleWindow.cs
- 將以下程式碼複製到剛剛建立的C# Script中
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
45using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class ClickEventExampleWindow : EditorWindow
{
// 這個Attributes會在 Windows -> UI Tollkit 下加入一個 ClickEventExample
[ ]
public static void ShowExample()
{
var wnd = GetWindow<ClickEventExampleWindow>();
wnd.titleContent = new GUIContent("Click Event Example");
}
public void CreateGUI()
{
// 建立四個不同顏色的box
for (int i = 0; i < 4; i++)
{
// 為這些Visual Element設定隨機的background顏色
var newBox = new VisualElement() { style = { flexGrow = 1, backgroundColor = GetRandomColor() } };
rootVisualElement.Add(newBox);
// 為這個Element註冊一個ClickEvent callback
newBox.RegisterCallback<ClickEvent>(OnBoxClicked);
}
}
// 這個callback會改變target的Background color。
private void OnBoxClicked(ClickEvent evt)
{
// 只在taget階段執行這個callback
if (evt.propagationPhase != PropagationPhase.AtTarget)
return;
// 設定新的Background 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));
}
} - 在Unity編輯器中找到 Window > UI Toolkit > ClickEventExample
- 觀看結果
Reference: https://docs.unity3d.com/Manual/UIE-Click-Events.html