InputEvent
Разбор отдельного события ввода, сопоставление actions и координат.
InputEvent — базовый Resource события; конкретный тип определяет поля и поведение. Проверка event.IsActionPressed() относится к этому событию, а Input.IsActionPressed() — к текущему агрегированному состоянию. Создание/опрос события не отправляет ввод в игру или OS.
IsAction проверяет совпадение, не факт удержания. IsActionReleased означает совпадающий неактивный pressed-state: canceled mouse и ось внутри deadzone тоже могут дать true. Для причины проверяйте IsCanceled и конкретный тип. Echo по умолчанию исключён из IsActionPressed.
У IsMatch default exactMatch=true, у action-запросов=false. Это не универсальное equality: сравнение разных подтипов бывает несимметричным. XformedBy тоже зависит от типа: MouseMotion даёт копию, Key может вернуть ту же ссылку.
Обработка ввода. Проверены синтетические объекты и временные InputMap actions на Windows; реальная клавиатура, контроллер, GUI-маршрутизация и потеря фокуса окна здесь не проверялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства1
DeviceСвойство
public int Device { get; set; }Метаданные ID устройства события. Изменение не выбирает физическое устройство и не отправляет нажатие; setter вызывает Changed. Допустимы специальные отрицательные значения. InputMap может фильтровать binding по Device, но прямой IsMatch/Accumulate не обязан проверять его одинаково во всех подтипах.
Методы15
Accumulatebool
public bool Accumulate(InputEvent withEvent);Пытается объединить withEvent с этим объектом и при успехе изменяет получатель. Не отправляет ввод и не управляет глобальным Input.UseAccumulatedInput. Базовый тип возвращает false; проверен InputEventMouseMotion: суммы Relative/ScreenRelative, последние Position/GlobalPosition/Velocity/ScreenVelocity. Требуются совместимые window/state/modifiers. Прямой вызов MouseMotion.Accumulate не проверяет Device; при разделении устройств отфильтруйте их сами. Это не универсальное сложение всех полей и не гарантия слияния любого типа.
| Имя | Тип | По умолчанию |
|---|---|---|
withEvent | InputEvent | — |
withEventВторое событие для слияния в получатель; проверьте тип/Device, если это нужно вашему протоколу.
boolTrue после успешного изменения получателя либо false без поддержанного слияния.
AsTextstring
public string AsText();Человекочитаемая метка конкретного события; формат и локализация зависят от подтипа. Не используйте для сериализации, сравнения или стабильного action ID. InputEventAction может показать первую привязку из InputMap, а не своё имя Action; без привязок результат может быть пустым.
stringЧеловекочитаемая, возможно пустая метка без стабильного формата.
GetActionStrengthfloat
public float GetActionStrength(StringName action, bool exactMatch = false);Сила указанного action именно в этом событии, не текущее агрегированное Input-состояние. Цифровое нажатие обычно 1, отпускание 0; ось учитывает deadzone привязки, а InputEventAction использует сохранённую Strength только при Pressed. Несовпадающее событие возвращает 0. Action должен существовать в InputMap; неизвестное имя диагностируется, а не является безопасным TryGet.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
exactMatch | bool | false |
actionИмя существующего action в InputMap, не код клавиши; при динамическом имени сначала HasAction.
exactMatchTrue требует точного сопоставления modifiers/направления по подтипу. Default у IsMatch=true, у action-запросов=false.
floatСила action в этом событии, обычно 0…1; 0 также при несовпадении.
GetDeviceint
public int GetDevice();Возвращает Device этого события. Это метаданные объекта, не запрос подключённых устройств или состояния клавиатуры.
intТекущее целое Device metadata.
IsActionbool
public bool IsAction(StringName action, bool exactMatch = false);Проверяет совпадение данного события с существующим action в InputMap независимо от Pressed/released и силы. Поэтому true возможно для отпускания и оси внутри deadzone. exactMatch=false по умолчанию допускает дополнительные modifiers по правилам подтипа. Не изменяет Input и не означает, что action сейчас удерживается.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
exactMatch | bool | false |
actionИмя существующего action в InputMap, не код клавиши; при динамическом имени сначала HasAction.
exactMatchTrue требует точного сопоставления modifiers/направления по подтипу. Default у IsMatch=true, у action-запросов=false.
boolФакт совпадения, независимо от pressed-state.
IsActionPressedbool
public bool IsActionPressed(StringName action, bool allowEcho = false, bool exactMatch = false);True, если событие соответствует action и его action pressed-state активен. Echo клавиатуры исключён, пока allowEcho=false. Это проверка данного события, не IsActionJustPressed глобального Input и не автоматическое потребление события. exactMatch управляет совпадением modifiers/направления по типу события. Для оси результат зависит от deadzone, а не только факта движения.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
allowEcho | bool | false |
exactMatch | bool | false |
actionИмя существующего action в InputMap, не код клавиши; при динамическом имени сначала HasAction.
allowEchoTrue допускает keyboard echo; false отфильтровывает его в IsActionPressed.
exactMatchTrue требует точного сопоставления modifiers/направления по подтипу. Default у IsMatch=true, у action-запросов=false.
boolСовпадающее активное нажатие с учётом echo/deadzone.
IsActionReleasedbool
public bool IsActionReleased(StringName action, bool exactMatch = false);True для совпадающего action с неактивным pressed-state. Не является универсальным доказательством физического отпускания: проверены canceled mouse и ось внутри deadzone, для которых метод тоже true. Проверяйте IsCanceled и конкретный тип, если важна причина. Nonexact key release может совпасть с привязкой, modifiers которой уже отпущены. Не равно глобальному Input.IsActionJustReleased.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
exactMatch | bool | false |
actionИмя существующего action в InputMap, не код клавиши; при динамическом имени сначала HasAction.
exactMatchTrue требует точного сопоставления modifiers/направления по подтипу. Default у IsMatch=true, у action-запросов=false.
boolСовпадение с неактивным pressed-state; не доказательство физического release.
IsActionTypebool
public bool IsActionType();Классифицирует подтип как пригодный для action-событий, не проверяя конкретную настройку InputMap. Клавиша возвращает true, MouseMotion — false в проверке. Это не IsAction, не проверка Pressed и не разрешение изменять InputMap.
boolПризнак подтипа, не совпадение с настроенным action.
IsCanceledbool
public bool IsCanceled();Возвращает флаг отмены события. При canceled базовые IsPressed и IsReleased оба false; однако IsActionReleased может вернуть true через action matching. Отмена не равна обычному отпусканию. Переходы canceled при потере реального фокуса окна здесь не проверялись.
boolСохранённый флаг отмены события.
IsEchobool
public bool IsEcho();Показывает repeat/echo конкретного события там, где подтип его поддерживает, например InputEventKey. База возвращает false. Не означает двойной клик или автоматически повторяемое игровое действие. IsActionPressed по умолчанию отбрасывает echo.
boolRepeat/echo по подтипу, false у базы.
IsMatchbool
public bool IsMatch(InputEvent @event, bool exactMatch = true);Сравнивает события по правилам конкретного подтипа, а не все сериализуемые поля. По умолчанию exactMatch=true, в отличие от IsAction. Pressed/strength/Device не обязаны определять результат. Сравнение разных подтипов может быть несимметричным: InputEventAction способен проверить key через свой InputMap action, а key не обязан совпасть с Action обратно. Не используйте как универсальный equality/hash.
| Имя | Тип | По умолчанию |
|---|---|---|
event | InputEvent | — |
exactMatch | bool | true |
eventДругое InputEvent; сравнение идёт по правилам получателя и может быть несимметричным.
exactMatchTrue требует точного сопоставления modifiers/направления по подтипу. Default у IsMatch=true, у action-запросов=false.
boolСовпадение по правилам подтипа получателя.
IsPressedbool
public bool IsPressed();Возвращает сохранённый pressed && !canceled для этого объекта. Само событие может быть создано вручную и не отражать OS-состояние. Для action с axis/deadzone используйте соответствующий action-запрос, а для текущего удержания — Input. Не проверяет тип события.
boolpressed && !canceled этого объекта.
IsReleasedbool
public bool IsReleased();Возвращает !pressed && !canceled. Для событий нажатия это локальный признак отпущенного состояния; сам по себе не подтверждает реальный переход клавиши/кнопки, особенно у синтетических или других подтипов. Не равен IsActionReleased и не читает глобальное Input-состояние.
bool!pressed && !canceled этого объекта.
SetDevicevoid
public void SetDevice(int device);Изменяет Device и испускает Resource.Changed. Не переназначает action binding, не подключает устройство и не подаёт OS-событие. Не изменяйте разделяемое входное событие во время рассылки, если другой код ещё использует исходные метаданные.
| Имя | Тип | По умолчанию |
|---|---|---|
device | int | — |
deviceМетаданные Device, включая специальные значения; не OS handle.
XformedByInputEvent
public InputEvent XformedBy(Transform2D xform, Vector2? localOfs = default);Преобразует координатные события по правилам подтипа. Для MouseMotion проверены новая копия, position = xform*(position+localOfs), basis-only преобразование Relative/Velocity и сохранение ScreenRelative/ScreenVelocity/GlobalPosition. Для Key базовая реализация возвращает тот же объект и тот же C# wrapper: независимая копия не гарантирована. Не Dispose такой alias пока исходное событие используется. Это не перенос события между OS-окнами и не отправка ввода.
| Имя | Тип | По умолчанию |
|---|---|---|
xform | Transform2D | — |
localOfs | Vector2? | default |
xform2D-преобразование локальных координат; экранные поля могут оставаться неизменными.
localOfsСмещение, прибавляемое до xform для позиционных событий; null/default означает Vector2.Zero.
InputEventInputEvent: новая копия или тот же общий объект в зависимости от подтипа.
Поля и константы3
DeviceIdEmulationПоле
public const long DeviceIdEmulation = -1;Специальное значение −1 для эмулированных событий, например mouse из touch. Не означает, что любой созданный вручную InputEventAction автоматически получает этот ID. Не является OS handle или номером игрока.
DeviceIdKeyboardПоле
public const long DeviceIdKeyboard = 16;Значение 16, используемое конструктором InputEventKey как категория клавиатуры. Не индекс клавиши, scan code или гарантированное различение нескольких физических клавиатур.
DeviceIdMouseПоле
public const long DeviceIdMouse = 32;Значение 32, используемое конструктором событий мыши. Не индекс кнопки и не OS window ID. Физическая поддержка нескольких мышей этим значением не подтверждается.