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.