Keyboard events occur when you press or release keys on the keyboard. Each event includes information about the modifier, text character, and related key code for the event.
Many standard controls use the KeyDownEvent to encode shortcuts or accessibility behaviors. The following examples all use keyboard events:
Toggle と Button クラスは、Enter と Spacebar のキー押下を、マウスクリックの代替としてリッスンします。keyCode プロパティと文字プロパティの両方を見て、特別なアクションを実行したり、テキストを受け入れたりします。すべてのキーボードイベントの基本クラスは KeyboardEventBase です。
| イベント | 説明 | トリクルダウン (下降) 伝播 | バブルアップ (上昇) 伝播 | キャンセル可能 |
|---|---|---|---|---|
| KeyDownEvent | ユーザーがキーボードのキーを押下するときに送信されます。 | あり | あり | あり |
| KeyUpEvent | ユーザーがキーボードのキーを離すときに送信されるイベント | あり | あり | あり |
keyCode: keyCode プロパティは、キーボードやジョイスティックなどの入力デバイスの物理的なキーに直接対応する文字キーを返します。character プロパティと keyCode プロパティの違いは、keyCode が物理的なキーを表しているのに対し、character は特定の文字の入力を表していることです。例えば、keyDownEvent の間に a と A の両方とも keyCode=KeyCode.A を 返します。
character: keyDownEvent の間に、character プロパティは文字コードを返します。
modifiers: modifiers プロパティは、どのモディファイアキーが押されているかを返します。修飾キーの例としては、Shift、Ctrl、Alt キーなどがあります。
詳細は、修飾キー のセクションを参照してください。
The following list provides the name, description, and target of each event in the event family.
By default, a visual element doesn’t receive keyboard events. Only elements that are focusable and currently in focus are targeted for keyboard events. This is because keyboard events trickle down and bubble up, allowing parent elements to receive them as well.
In summary, to begin receiving keyboard events, you must mark the element as focusable=true and explicitly give it focus using element.Focus(). This ensures that the element is eligible to receive keyboard events.
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 は、キーボードのキーを離すときに送られます。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: フォーカスがあるビジュアル要素。フォーカスがある要素がない場合は、パネルのルートのビジュアル要素。
The following code example prints a message to the console when you press a key in a TextField. This code sample highlights the event firing of both KeyUpEvent and KeyDownEvent.
Create a Unity project with any template.
In the SampleScene, select GameObject > UI Toolkit > UI Document.
Create a C# script named KeyboardEventTest.cs with the following contents:
using UnityEngine;
using UnityEngine.UIElements;
// 有効な UIDocument を使用して KeyboardEventTest をゲームオブジェクトに加えます。
// ユーザーがキーを押すと、キーボードイベントのプロパティがコンソールに出力されます。
[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);
}
}
Select the UIDocument GameObject in the Hierarchy window.
Drag KeyboardEventTest.cs to Add Component in the Inspector window.
Enter Play mode and type in the TextField.