Управление
Controls создают для компонента собственные именованные действия вместо чтения
жёстко заданной игровой кнопки. Компилятор записывает объявления в
inputs.json, игра создаёт InputAction и позволяет игроку переназначать их в
настройках модуля.
Управление доступно только на клиенте.
Объявление действий
Заголовок раздела «Объявление действий»import { Gamepad, Keyboard, defineControls,} from "@killscript/sdk/client";
export const controls = defineControls("camera", { toggle: Keyboard.F6, boost: Keyboard.LeftShift, controllerToggle: Gamepad.North,});Пространство имён создаёт действия вроде camera.toggle. Обычное имя не
столкнётся с другим объявлением в том же модуле.
defineControls() должен инициализировать const на верхнем уровне, но может
находиться в любом импортированном клиентском файле.
Обработка одного действия
Заголовок раздела «Обработка одного действия»Используйте событие для однократной реакции и опрос состояния для поведения во время удержания:
controls.toggle.onPressed(() => { cameraEnabled = !cameraEnabled;});
const boostLoop = controls.boost.whilePressed(() => { moveCamera(fastSpeed);});
if (controls.boost.isPressed()) { drawBoostIndicator();}| Метод | Поведение |
|---|---|
onPressed(callback) | Нативное событие performed; подходит для обработчика на всё время жизни модуля |
onChanged(callback) | Сообщает и о нажатии, и об отпускании |
onReleased(callback) | Сообщает только о переходе из нажатого состояния в отпущенное |
whilePressed(callback) | Выполняется каждый клиентский кадр во время удержания |
isPressed() | Безопасно читает текущее состояние |
native() | Возвращает исходный InputAction, если он доступен |
Наблюдатели через опрос возвращают EventSubscription. Отмените его напрямую
или добавьте в scope компонента, если
наблюдатель должен исчезнуть при её выключении.
Удержание, короткое нажатие и отпускание
Заголовок раздела «Удержание, короткое нажатие и отпускание»import { Keyboard, Mouse, control, defineControls } from "@killscript/sdk/client";
const actions = defineControls("movement", { charge: control.hold(Keyboard.F, 0.4), quickTap: control.tap(Keyboard.G, 0.2), doubleTap: control.multiTap(Keyboard.W, 2, 0.3), onRelease: control.onRelease(Keyboard.Space),});Эти helpers генерируют строки interactions для Unity Input System. Длительность
задаётся в секундах. Передайте объект в control(...), если нужны processors,
groups или собственная interaction. control.raw(...) дополнительно позволяет
указать тип действия:
const look = defineControls("camera", { delta: control.raw({ type: "PassThrough", binding: { path: Mouse.Delta }, }),});Объединение действий
Заголовок раздела «Объединение действий»Методы input принимают как созданные действия, так и нативные
InputAction:
import { input } from "@killscript/sdk/client";
if (input.anyPressed([controls.toggle, controls.boost])) { showInputIndicator();}
const chord = input.onChord( [controls.toggle, controls.boost], resetCamera,);
const enabledState = input.toggle(controls.toggle, false, (value) => { value ? enableFeature() : disableFeature();});
print(`Enabled: ${enabledState.value}`);anyPressed()иallPressed()читают общее текущее состояние;onAnyPressed()срабатывает при переходе группы от покоя к любому нажатию;onChord()срабатывает, когда нажаты все переданные действия;toggle()хранит boolean и меняет его при каждом событии нажатия.
toggle() создаёт временное состояние. Настройка в config.json от него не
появляется.
Поле или метод ToggleState | Поведение |
|---|---|
value | Текущее boolean-состояние |
set(value) | Заменяет состояние и вызывает обработчик |
flip() | Меняет состояние, вызывает обработчик и возвращает новое значение |