輸入事件(Input events)

當字串透過使用者輸入到Text field時,便會觸發InputEvent,與觸碰螢幕的PointerCaptureOutEvent類似。對於預設的鍵盤輸入,每次按一下鍵(keystroke)都會觸發InputEvent。但是對於間接來源(indirect source)的輸入,將不會觸發InputEvent,例如自動化腳本(automated script)。

專屬於Input Event的屬性

  • previousData: 存放先前的資料
  • newData: 存放新的資料

當資料輸入到繼承了TextInputBaseField的control便會發送InputEventInputEvent不同於ChangeEvent的地方在於,即使輸入到control的資料沒改變,它也會發送InputEvent

例子:下面例子為一個TextField註冊一個InputEvent,每當觸發便會印出輸出的的值
  1. 在Assets > Scripts > Editor 下建立一個 C# Script InputEventExample.cs
  2. 將以下程式碼複製到剛剛建立的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
    using UnityEditor;
    using UnityEngine;
    using UnityEngine.UIElements;

    public class InputEventExample : EditorWindow
    {
    // 這個Attributes會在 Windows -> UI Tollkit 下加入一個 InputEventExample
    [MenuItem("Window/UI Toolkit/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);
    }
    }
  3. 在Unity編輯器中找到 Window > UI Toolkit > InputEventExample
  4. 顯示結果

Reference: https://docs.unity3d.com/Manual/UIE-Input-Events.html

評論