包含此页的版本:
不含此页的版本:
当您按下或释放键盘上的键时,会发生键盘事件。每个事件都包含有关事件的修饰符、文本字符和相关键代码的信息。
许多标准控件使用KeyDownEvent对快捷方式或辅助功能行为进行编码。以下示例都使用键盘事件:
Toggle和Button类监听Enter和Spacebar按键作为鼠标单击的替换作。keyCode属性和字符属性来执行特殊作或接受文本。所有键盘事件的基类都是 KeyboardEventBase。
| 事件 | 描述 | 涓涓细流 | 气泡升起 | 可取消 |
|---|---|---|---|---|
| KeyDown事件 | 当用户按下键盘上的某个键时发送。 | 是的 | 是的 | 是的 |
| KeyUp事件 | 当用户释放键盘上的按键时发送。 | 是的 | 是的 | 是的 |
keyCode:这keyCode属性返回一个字符键,该键直接对应于输入设备(如键盘或纵杆)上的物理键。之间的区别character属性和keyCode属性是keyCode表示物理键,而character表示特定字符的条目。例如,两个a和A返回keyCode=KeyCode.A在keyDownEvent.
character:这character属性在keyDownEvent.
modifiers:这modifiers属性返回按住的修饰键。修饰键的一些示例是Shift,Ctrl或Alt钥匙。
有关更多信息,请参阅 MDN 文档的修饰键部分。
以下列表提供了事件系列中每个事件的名称、描述和目标。
默认情况下,一个视觉元素实例化或派生自 C# 的可视化树的节点VisualElement类。您可以设置外观样式、定义行为并将其作为 UI 的一部分显示在屏幕上。更多信息
请参阅术语表不接收键盘事件。只有可聚焦且当前处于焦点中的元素才会针对键盘事件。这是因为键盘事件会涓涓细流并冒泡,允许父元素也接收它们。
总之,要开始接收键盘事件,您必须将元素标记为focusable=true并使用element.Focus().这可确保元素有资格接收键盘事件。
每次按下键盘上的某个键时,都会发送一个 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:具有焦点的视觉元素。如果没有元素具有焦点,则面板的根视觉元素。
当您松开键盘上的按键时,将发送 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 中的键时向控制台打印一条消息。此代码示例突出显示了两者的事件触发KeyUpEvent和KeyDownEvent.
使用任何模板创建 Unity 项目。
在 SampleScene 中,选择 游戏对象 > UI 工具包 > UI 文档。
创建名为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);
}
}
选择 UIDocument游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表在“层次结构”窗口中。
拉KeyboardEventTest.cs在检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表窗。
进入播放模式并在文本字段中输入。