События клавиатуры происходят, когда вы нажимаете или отпускаете клавиши на клавиатуре. Каждое событие включает информацию о модификаторе, текстовом символе и соответствующий код клавиши для события.
Многие стандартные элементы управления используют KeyDownEvent
для кодирования поведения ярлыков или специальных возможностей. Во всех следующих примерах используются события клавиатуры:
- Классы
Toggle
иButton
прослушиваютEnter
иПробел
нажимает вместо щелчка мыши. - ScrollViewЭлемент управления пользовательского интерфейса, который отображает большой набор элементов управления в видимой области, которую можно увидеть с помощью полосы прокрутки. . Подробнее
См. в Словарь, а элементы управления Slider используют нажатия клавиш со стрелками для модуляции своих значений. - Элемент управления TextFieldЭлемент управления TextField отображает неинтерактивный фрагмент текста для пользователя, например заголовок, метку для других элементов управления графическим интерфейсом или инструкций. Подробнее
См. в Словарь смотрит на обаkeyCode
и свойство символа для выполнения специальных действий или приема текста.
Базовым классом для всех событий клавиатуры является KeyboardEventBase.
Событие | Описание | Стекает вниз | Пузыри вверх | Отменяемый |
---|---|---|---|---|
KeyDownEvent | Отправляется, когда пользователь нажимает клавишу на клавиатуре. | ✔ | ✔ | ✔ |
KeyUpEvent | Отправляется, когда пользователь отпускает клавишу на клавиатуре. | ✔ | ✔ | ✔ |
Уникальные свойства
keyCode
: свойство keyCode
возвращает ключ символа, который непосредственно соответствует физическому ключу. на устройстве ввода, таком как клавиатура или джойстик. Разница между свойством character
и свойством keyCode
заключается в том, что keyCode
представляет физический ключ, а character
представляет ввод определенного символа. Например, и a
, и A
возвращают keyCode=KeyCode.A
во время keyDownEvent
.
character
: свойство character
возвращает код символа во время keyDownEvent
.
модификаторы
. Свойство модификаторы
возвращает, какая клавиша-модификатор нажата. Некоторыми примерами клавиш-модификаторов являются клавиши Shift
, Ctrl
или Alt
. .
Для получения дополнительной информации см. ключи-модификаторы. раздел документации MDN.
Список событий
В следующем списке указаны имя, описание и цель каждого события в семействе событий. Дополнительную информацию о мероприятии см. в API инструментария пользовательского интерфейса.
Событие 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
: визуальный элемент, находящийся в фокусе. Если ни один элемент не имеет фокуса, корневой визуальный элемент панели.
Примеры
В следующем примере кода сообщение выводится на консоль, когда пользователь нажимает клавишу в текстовом поле. В этом примере кода показано срабатывание событий KeyUpEvent
и KeyDownEvent
.
Чтобы увидеть пример в действии, сделайте следующее:
- Создайте GameObjectосновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь с допустимым UIDocument. - В разделе Ресурсы > Сценарии создайте сценарий C# под названием KeyboardEventTest.
- Скопируйте пример в сценарий C#.
- Прикрепите сценарий KeyboardEventTest к GameObject с помощью UIDocument
- Войдите в режим воспроизведения и введите текстовое поле.
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().rootVisualElement;
root.Add(new Label("Press any key to see the keyDown properties"));
root.Add(new TextField());
root.Q().Focus();
root.RegisterCallback(OnKeyDown, TrickleDown.TrickleDown);
root.RegisterCallback(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);
}
}