Version: 6000.3
语言: 中文
输入事件
鼠标事件

键盘事件

当您按下或释放键盘上的键时,会发生键盘事件。每个事件都包含有关事件的修饰符文本字符和相关键代码的信息。

许多标准控件使用KeyDownEvent对快捷方式或辅助功能行为进行编码。以下示例都使用键盘事件:

  • ToggleButton类监听EnterSpacebar按键作为鼠标单击的替换作。
  • ScrollView一种 UI 控件,用于在可视区域中显示大量控件,您可以使用滚动条查看这些控件。更多信息
    请参阅术语表
    和“滑块”控制使用方向箭头键按下来调制其值。
  • TextField 控件TextField 控件向用户显示一段非交互式文本,例如标题、其他 GUI 控件的标签或说明。更多信息
    请参阅术语表
    查看keyCode属性和字符属性来执行特殊作或接受文本。

所有键盘事件的基类都是 KeyboardEventBase

事件 描述 涓涓细流 气泡升起 可取消
KeyDown事件 当用户按下键盘上的某个键时发送。 是的 是的 是的
KeyUp事件 当用户释放键盘上的按键时发送。 是的 是的 是的

独特的属性

keyCode:这keyCode属性返回一个字符键,该键直接对应于输入设备(如键盘或纵杆)上的物理键。之间的区别character属性和keyCode属性是keyCode表示物理键,而character表示特定字符的条目。例如,两个aA返回keyCode=KeyCode.AkeyDownEvent.

character:这character属性在keyDownEvent.

modifiers:这modifiers属性返回按住的修饰键。修饰键的一些示例是Shift,CtrlAlt钥匙。

有关更多信息,请参阅 MDN 文档的修饰键部分

活动列表

以下列表提供了事件系列中每个事件的名称、描述和目标。

默认情况下,一个视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表
不接收键盘事件。只有可聚焦且当前处于焦点中的元素才会针对键盘事件。这是因为键盘事件会涓涓细流并冒泡,允许父元素也接收它们。

总之,要开始接收键盘事件,您必须将元素标记为focusable=true并使用element.Focus().这可确保元素有资格接收键盘事件。

KeyDown事件

每次按下键盘上的某个键时,都会发送一个 KeyDownEvent。按下的键包含keyCode属性。如果该按键具有与之关联的文本输入,则会为文本输入的每个字符发送其他事件。这character属性包含这些事件的字符。

当您按下并松开时a,UI Toolkit 发送以下事件:


KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

当您按下并松开时Ctrl+a,UI Toolkit 发送以下事件:


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target:具有焦点的视觉元素。如果没有元素具有焦点,则面板的根视觉元素。

KeyUp事件

当您松开键盘上的按键时,将发送 KeyUpEvent。该事件的 keyCode 属性包含正在释放的密钥。KeyDownEvent当击键具有关联的文本输入时,会发送其他事件。

当您按下并松开时a,UI Toolkit 发送以下事件:

KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

当您按下并松开时Ctrl+a,UI Toolkit 发送以下事件:


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target:具有焦点的视觉元素。如果没有元素具有焦点,则面板的根视觉元素。

例子

以下代码示例在按 TextField 中的键时向控制台打印一条消息。此代码示例突出显示了两者的事件触发KeyUpEventKeyDownEvent.

  1. 使用任何模板创建 Unity 项目。

  2. 在 SampleScene 中,选择 游戏对象 > UI 工具包 > UI 文档

  3. 创建名为KeyboardEventTest.cs包含以下内容:

    using UnityEngine;
    using UnityEngine.UIElements;
    
    // Add KeyboardEventTest to a GameObject with a valid UIDocument.
    // When the user presses a key, it will print the keyboard event properties to the console.
    [RequireComponent(typeof(UIDocument))]
    public class KeyboardEventTest : MonoBehaviour
    {
        void OnEnable()
        {
            var root = GetComponent<UIDocument>().rootVisualElement;
            root.Add(new Label("Press any key to see the keyDown properties"));
            root.Add(new TextField());
            root.Q<TextField>().Focus();
            root.RegisterCallback<KeyDownEvent>(OnKeyDown, TrickleDown.TrickleDown);
            root.RegisterCallback<KeyUpEvent>(OnKeyUp, TrickleDown.TrickleDown);
        }
        void OnKeyDown(KeyDownEvent ev)
        {
            Debug.Log("KeyDown:" + ev.keyCode);
            Debug.Log("KeyDown:" + ev.character);
            Debug.Log("KeyDown:" + ev.modifiers);
        }
    
        void OnKeyUp(KeyUpEvent ev)
        {
            Debug.Log("KeyUp:" + ev.keyCode);
            Debug.Log("KeyUp:" + ev.character);
            Debug.Log("KeyUp:" + ev.modifiers);
        }
    }
    
  4. 选择 UIDocument游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
    请参阅术语表
    在“层次结构”窗口中。

  5. KeyboardEventTest.cs检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    窗。

  6. 进入播放模式并在文本字段中输入。

其他资源

输入事件
鼠标事件