Перейти к содержимому

InputAction

InputActions находит действия ввода, а InputAction позволяет читать их состояние и реагировать на нажатия. API доступен только в клиентской Lua-части. В Reflex server.lua глобальный объект InputActions равен nil.

inputs.json регистрирует привязку, но не рисует кнопку или подсказку на HUD. OnPerformed() только запускает callback; всё видимое поведение — открытие панели, сообщение или смену состояния — реализует сам модуль через UI, ImGui или другой API.

При загрузке модуля клиент добавляет действия из inputs.json в общую карту ввода модулей. Игровая input system обновляет состояние InputAction, после чего IsPressed() читает текущее значение, а OnPerformed() вызывает подписчиков при выполнении действия.

Это локальный пользовательский ввод. Он не становится серверной командой автоматически: Reflex-модуль должен явно отправить нужное состояние через Network, а сервер — проверить его и решить, что делать.

Объявите кнопку в inputs.json в корне модуля:

{
"Actions": [
{
"Name": "TogglePanel",
"Type": "Button",
"Binding": {
"Path": "<Keyboard>/f8"
}
}
]
}

Найдите действие по тому же имени в main.lua:

local TogglePanel = InputActions:FindAction("TogglePanel")
local PanelVisible = false
if TogglePanel ~= nil then
TogglePanel:OnPerformed(function()
PanelVisible = not PanelVisible
end)
end

Проверенный формат кнопки:

Поле Тип Описание
Actions array Список действий модуля.
Name string Уникальное имя, используемое в FindAction().
Type string Для обычной кнопки используйте Button.
Binding.Path string Путь контрола Unity Input System, например <Keyboard>/f8.

После изменения inputs.json игра перестраивает action map модуля.

InputActions:FindAction(actionName: string): InputAction | nil

Возвращает действие модуля или стандартное игровое действие. Например, UI/Cancel возвращает игровой action Cancel. Если имя не найдено, возвращается nil.

Всегда проверяйте результат:

local action = InputActions:FindAction("TogglePanel")
if action == nil then
print("TogglePanel action is missing")
return
end
action:IsPressed(): bool

Возвращает true, пока привязанный контрол нажат. Внутри OnPerformed() для нажатой кнопки метод вернул true, а после физического отпускания — false.

Scheduler:OnFrame(function()
if action:IsPressed() then
-- Выполняется, пока кнопка удерживается
end
end)
action:OnPerformed(callback: function)

Регистрирует callback, который вызывается при срабатывании действия. Метод возвращает nil.

action:OnPerformed(function()
print("Action performed")
end)
action:Enable()
action:Disable()

Оба метода возвращают nil.

Для управляемого отключения используйте собственный флаг:

local InputEnabled = true
action:OnPerformed(function()
if not InputEnabled then
return
end
-- Обработка действия
end)
-- Позже
InputEnabled = false

FindAction() ищет точное имя. TogglePanel и togglePanel не следует считать одной привязкой.

Отсутствующее действие возвращает nil. Не вызывайте методы до проверки результата.

Серверная часть Reflex не получает клавиатурный ввод клиента. Обработайте кнопку в main.lua и при необходимости передайте состояние на сервер через Network.