輸入事件(Input events)
當字串透過使用者輸入到Text field時,便會觸發InputEvent
,與觸碰螢幕的PointerCaptureOutEvent
類似。對於預設的鍵盤輸入,每次按一下鍵(keystroke)都會觸發InputEvent。但是對於間接來源(indirect source)的輸入,將不會觸發InputEvent,例如自動化腳本(automated script)。
專屬於Input Event的屬性
previousData
: 存放先前的資料newData
: 存放新的資料
當資料輸入到繼承了TextInputBaseField的control便會發送InputEvent
,InputEvent
不同於ChangeEvent
的地方在於,即使輸入到control的資料沒改變,它也會發送InputEvent
。
例子:下面例子為一個TextField註冊一個InputEvent,每當觸發便會印出輸出的的值
- 在Assets > Scripts > Editor 下建立一個 C# Script
InputEventExample.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
30using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class InputEventExample : EditorWindow
{
// 這個Attributes會在 Windows -> UI Tollkit 下加入一個 InputEventExample
[ ]
public static void ShowExample()
{
var wnd = GetWindow<InputEventExample>();
wnd.titleContent = new GUIContent("Input Event Example");
}
public void CreateGUI()
{
// 建立 TextField
TextField textField = new TextField();
rootVisualElement.Add(textField);
// 註冊InputEvent
textField.RegisterCallback<InputEvent>(OnInput);
}
private void OnInput(InputEvent evt)
{
// 印出InputEvent中的newData與previousData
Debug.Log("newData=" + evt.newData + " previousData=" + evt.previousData);
}
} - 在Unity編輯器中找到 Window > UI Toolkit > InputEventExample
- 顯示結果
Reference: https://docs.unity3d.com/Manual/UIE-Input-Events.html