VirtualJoystick
Сенсорный экранный джойстик, управляющий действиями Input.
VirtualJoystick принимает ScreenTouch/ScreenDrag в области Control, удерживая один индекс касания. Настройте четыре действия Input Map до использования и читайте их в логике движения. Это не драйвер физического геймпада; обычная мышь требует преобразования в сенсорные события.
Размер области Control задаёт зону приёма касания, JoystickSize — размер основания. Задавайте положительный JoystickSize и ClampzoneRatio, а DeadzoneRatio держите от 0 включительно до 1 исключительно. Released/Flicked передают последний обработанный вектор перед сбросом.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
VirtualJoystickКонструктор
public VirtualJoystick();Создаёт сенсорный джойстик. Добавьте в UI, задайте область Control и действия до обработки касаний. Создание не создаёт новые действия Input Map.
Свойства11
ActionDownСвойство
public StringName ActionDown { get; set; }Имя действия Input Map для положительной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
ActionLeftСвойство
public StringName ActionLeft { get; set; }Имя действия Input Map для отрицательной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
ActionRightСвойство
public StringName ActionRight { get; set; }Имя действия Input Map для положительной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
ActionUpСвойство
public StringName ActionUp { get; set; }Имя действия Input Map для отрицательной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
ClampzoneRatioСвойство
public float ClampzoneRatio { get; set; }Множитель радиуса JoystickSize / 2, на котором выход достигает полной амплитуды. Требуется значение > 0: ноль приводит к делению на ноль при обработке ввода. Setter не ограничивает диапазон программного значения; настройте до удержания.
DeadzoneRatioСвойство
public float DeadzoneRatio { get; set; }Доля clamp-радиуса без выходного движения. Используйте 0 <= ratio < 1. За мёртвой зоной амплитуда плавно перенормируется от 0 до 1; это не доля ширины экрана. Setter не ограничивает программное значение.
InitialOffsetRatioСвойство
public Vector2 InitialOffsetRatio { get; set; }Исходный центр как Size элемента × ratio по каждой оси; (0.5, 0.5) — середина. Не смещение в пикселях. Изменение сбрасывает касание/действия; изменение размера Control тоже сбрасывает джойстик.
JoystickModeСвойство
public VirtualJoystick.JoystickModeEnum JoystickMode { get; set; }Fixed использует исходный центр и принимает начало касания в прямоугольнике основания. Dynamic ставит центр в начало касания внутри Control. Following дополнительно сдвигает центр вслед за выходящим за clamp-радиус пальцем, пока тот в области Control. Не задаёт видимость элемента.
JoystickSizeСвойство
public float JoystickSize { get; set; }Размер основания в пикселях, используемый для радиуса управления как Size / 2. Задавайте положительное значение. Изменение сбрасывает текущее касание и действия; не равно полной зоне активации Control.
TipSizeСвойство
public float TipSize { get; set; }Размер рукоятки в пикселях; не задаёт амплитуду вектора управления. Изменение сбрасывает текущее касание и действия. Используйте положительное значение.
VisibilityModeСвойство
public VirtualJoystick.VisibilityModeEnum VisibilityMode { get; set; }Always рисует джойстик постоянно; WhenTouched пропускает рисование без активного касания в игре. Это режим отрисовки, не Visible = false: зона ввода остаётся. В редакторе элемент виден для настройки.
Методы22
GetActionDownStringName
public StringName GetActionDown();Имя действия Input Map для положительной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
StringNameИмя действия Input Map для положительной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
GetActionLeftStringName
public StringName GetActionLeft();Имя действия Input Map для отрицательной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
StringNameИмя действия Input Map для отрицательной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
GetActionRightStringName
public StringName GetActionRight();Имя действия Input Map для положительной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
StringNameИмя действия Input Map для положительной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
GetActionUpStringName
public StringName GetActionUp();Имя действия Input Map для отрицательной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
StringNameИмя действия Input Map для отрицательной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
GetClampzoneRatiofloat
public float GetClampzoneRatio();Множитель радиуса JoystickSize / 2, на котором выход достигает полной амплитуды. Требуется значение > 0: ноль приводит к делению на ноль при обработке ввода. Setter не ограничивает диапазон программного значения; настройте до удержания.
floatМножитель радиуса JoystickSize / 2, на котором выход достигает полной амплитуды. Требуется значение > 0: ноль приводит к делению на ноль при обработке ввода. Setter не ограничивает диапазон программного значения; настройте до удержания.
GetDeadzoneRatiofloat
public float GetDeadzoneRatio();Доля clamp-радиуса без выходного движения. Используйте 0 <= ratio < 1. За мёртвой зоной амплитуда плавно перенормируется от 0 до 1; это не доля ширины экрана. Setter не ограничивает программное значение.
floatДоля clamp-радиуса без выходного движения. Используйте 0 <= ratio < 1. За мёртвой зоной амплитуда плавно перенормируется от 0 до 1; это не доля ширины экрана. Setter не ограничивает программное значение.
GetInitialOffsetRatioVector2
public Vector2 GetInitialOffsetRatio();Исходный центр как Size элемента × ratio по каждой оси; (0.5, 0.5) — середина. Не смещение в пикселях. Изменение сбрасывает касание/действия; изменение размера Control тоже сбрасывает джойстик.
Vector2Исходный центр как Size элемента × ratio по каждой оси; (0.5, 0.5) — середина. Не смещение в пикселях. Изменение сбрасывает касание/действия; изменение размера Control тоже сбрасывает джойстик.
GetJoystickModeVirtualJoystick.JoystickModeEnum
public VirtualJoystick.JoystickModeEnum GetJoystickMode();Fixed использует исходный центр и принимает начало касания в прямоугольнике основания. Dynamic ставит центр в начало касания внутри Control. Following дополнительно сдвигает центр вслед за выходящим за clamp-радиус пальцем, пока тот в области Control. Не задаёт видимость элемента.
VirtualJoystick.JoystickModeEnumFixed использует исходный центр и принимает начало касания в прямоугольнике основания. Dynamic ставит центр в начало касания внутри Control. Following дополнительно сдвигает центр вслед за выходящим за clamp-радиус пальцем, пока тот в области Control. Не задаёт видимость элемента.
GetJoystickSizefloat
public float GetJoystickSize();Размер основания в пикселях, используемый для радиуса управления как Size / 2. Задавайте положительное значение. Изменение сбрасывает текущее касание и действия; не равно полной зоне активации Control.
floatРазмер основания в пикселях, используемый для радиуса управления как Size / 2. Задавайте положительное значение. Изменение сбрасывает текущее касание и действия; не равно полной зоне активации Control.
GetTipSizefloat
public float GetTipSize();Размер рукоятки в пикселях; не задаёт амплитуду вектора управления. Изменение сбрасывает текущее касание и действия. Используйте положительное значение.
floatРазмер рукоятки в пикселях; не задаёт амплитуду вектора управления. Изменение сбрасывает текущее касание и действия. Используйте положительное значение.
GetVisibilityModeVirtualJoystick.VisibilityModeEnum
public VirtualJoystick.VisibilityModeEnum GetVisibilityMode();Always рисует джойстик постоянно; WhenTouched пропускает рисование без активного касания в игре. Это режим отрисовки, не Visible = false: зона ввода остаётся. В редакторе элемент виден для настройки.
VirtualJoystick.VisibilityModeEnumAlways рисует джойстик постоянно; WhenTouched пропускает рисование без активного касания в игре. Это режим отрисовки, не Visible = false: зона ввода остаётся. В редакторе элемент виден для настройки.
SetActionDownvoid
public void SetActionDown(StringName action);Имя действия Input Map для положительной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
actionИмя заранее созданного действия Input Map.
SetActionLeftvoid
public void SetActionLeft(StringName action);Имя действия Input Map для отрицательной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
actionИмя заранее созданного действия Input Map.
SetActionRightvoid
public void SetActionRight(StringName action);Имя действия Input Map для положительной X компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
actionИмя заранее созданного действия Input Map.
SetActionUpvoid
public void SetActionUp(StringName action);Имя действия Input Map для отрицательной Y компоненты. Сила берётся из обработанного вектора. Действие должно существовать до ввода. Настраивайте до удержания: смена имени не освобождает старое действие автоматически. Несколько виртуальных источников одних действий требуют координации, так как джойстик вызывает action_press/action_release.
| Имя | Тип | По умолчанию |
|---|---|---|
action | StringName | — |
actionИмя заранее созданного действия Input Map.
SetClampzoneRatiovoid
public void SetClampzoneRatio(float ratio);Множитель радиуса JoystickSize / 2, на котором выход достигает полной амплитуды. Требуется значение > 0: ноль приводит к делению на ноль при обработке ввода. Setter не ограничивает диапазон программного значения; настройте до удержания.
| Имя | Тип | По умолчанию |
|---|---|---|
ratio | float | — |
ratioКоэффициент соответствующей области; допустимые условия см. в описании настройки.
SetDeadzoneRatiovoid
public void SetDeadzoneRatio(float ratio);Доля clamp-радиуса без выходного движения. Используйте 0 <= ratio < 1. За мёртвой зоной амплитуда плавно перенормируется от 0 до 1; это не доля ширины экрана. Setter не ограничивает программное значение.
| Имя | Тип | По умолчанию |
|---|---|---|
ratio | float | — |
ratioКоэффициент соответствующей области; допустимые условия см. в описании настройки.
SetInitialOffsetRatiovoid
public void SetInitialOffsetRatio(Vector2 ratio);Исходный центр как Size элемента × ratio по каждой оси; (0.5, 0.5) — середина. Не смещение в пикселях. Изменение сбрасывает касание/действия; изменение размера Control тоже сбрасывает джойстик.
| Имя | Тип | По умолчанию |
|---|---|---|
ratio | Vector2 | — |
ratioКоэффициент соответствующей области; допустимые условия см. в описании настройки.
SetJoystickModevoid
public void SetJoystickMode(VirtualJoystick.JoystickModeEnum mode);Fixed использует исходный центр и принимает начало касания в прямоугольнике основания. Dynamic ставит центр в начало касания внутри Control. Following дополнительно сдвигает центр вслед за выходящим за clamp-радиус пальцем, пока тот в области Control. Не задаёт видимость элемента.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | VirtualJoystick.JoystickModeEnum | — |
modeРежим расположения или видимости джойстика согласно типу аргумента.
SetJoystickSizevoid
public void SetJoystickSize(float size);Размер основания в пикселях, используемый для радиуса управления как Size / 2. Задавайте положительное значение. Изменение сбрасывает текущее касание и действия; не равно полной зоне активации Control.
| Имя | Тип | По умолчанию |
|---|---|---|
size | float | — |
sizeПоложительный размер основания или рукоятки в пикселях.
SetTipSizevoid
public void SetTipSize(float size);Размер рукоятки в пикселях; не задаёт амплитуду вектора управления. Изменение сбрасывает текущее касание и действия. Используйте положительное значение.
| Имя | Тип | По умолчанию |
|---|---|---|
size | float | — |
sizeПоложительный размер основания или рукоятки в пикселях.
SetVisibilityModevoid
public void SetVisibilityMode(VirtualJoystick.VisibilityModeEnum mode);Always рисует джойстик постоянно; WhenTouched пропускает рисование без активного касания в игре. Это режим отрисовки, не Visible = false: зона ввода остаётся. В редакторе элемент виден для настройки.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | VirtualJoystick.VisibilityModeEnum | — |
modeРежим расположения или видимости джойстика согласно типу аргумента.
Сигналы и события5
FlickCanceledСобытие
public event Action FlickCanceled;Переход из ненулевого ввода обратно в мёртвую зону помечает flick как отменённый. Это не системное событие отмены касания. Повторный выход из мёртвой зоны может снова разрешить flick.
FlickedСобытие
public event VirtualJoystick.FlickedEventHandler Flicked;При отпускании после перетаскивания с ненулевым выходом передаёт последний обработанный вектор. Не вычисляет скорость жеста или импульс броска; при необходимости вычисляйте их отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
inputVector | Vector2 | — |
inputVectorПоследний обработанный вектор: X вправо, Y вниз; длина до 1 при корректных настройках.
PressedСобытие
public event Action Pressed;Начало принятого касания. Джойстик обрабатывает один индекс касания; дополнительные касания не становятся вторым независимым стиком этого элемента.
ReleasedСобытие
public event VirtualJoystick.ReleasedEventHandler Released;Передаёт последний вектор после мёртвой зоны при отпускании, до сброса в ноль. Это итог текущего касания, не непрерывное событие движения. Сразу после него могут прийти Tapped или Flicked.
| Имя | Тип | По умолчанию |
|---|---|---|
inputVector | Vector2 | — |
inputVectorПоследний обработанный вектор: X вправо, Y вниз; длина до 1 при корректных настройках.
TappedСобытие
public event Action Tapped;Испускается при отпускании без ScreenDrag и без отмены flick-состояния. Длительность удержания не ограничивается: это не распознавание только короткого тапа.
VirtualJoystick.JoystickModeEnum
| Значение | Описание |
|---|---|
Dynamic = 1 | Джойстик перемещается в исходное положение касания, пока находится в пределах его зоны действия. При отпускании он возвращается в исходное положение. |
Fixed = 0 | Джойстик не двигается. |
Following = 2 | Джойстик перемещается в исходное положение касания, пока находится в пределах его зоны действия. Он будет следовать за касанием, если оно выйдет за пределы зоны действия джойстика. При отпускании он возвращается в исходное положение. |
VirtualJoystick.VisibilityModeEnum
| Значение | Описание |
|---|---|
Always = 0 | Джойстик всегда на виду. |
WhenTouched = 1 | Джойстик виден только при прикосновении. |
Свойства темы
Это ключи ресурсов Theme, а не свойства C# класса. Используйте методы GetTheme…() и AddTheme…Override() у Control с соответствующим типом значения.
| Ключ и тип | Описание |
|---|---|
normal_joystickStyleBox | Базовый джойстик |
normal_tipStyleBox | Подсказка для джойстика |
pressed_joystickStyleBox | Базовый джойстик |
pressed_tipStyleBox | Стиль |