XRController3D
Контроллер в XR-риге: pose и именованный ввод.
XRController3D связывает Entity с tracker контроллера. Добавьте его непосредственно под XROrigin3D; сначала задайте Tracker=left_hand или right_hand, затем Pose=grip для модели удерживаемого предмета. Числовые ID 1/2 здесь не используются. Модель размещайте дочерним Entity и корректируйте её локальный трансформ, поскольку tracking заменяет трансформ контроллера.
IsButtonPressed, GetFloat и GetVector2 читают действия по внутренним именам карты, не по подписям или путям кнопок. Без tracker значения нейтральны; это не доказательство подключения. Методы не проверяют фокус, tracking и допустимость взаимодействия за вас. GetInput возвращает Variant исходного типа, который нужно освобождать через using.
События ввода передаются от привязанного tracker и отключаются при отвязке. InputFloatChanged передаёт double, хотя GetFloat возвращает float. ProfileChanged передаёт строку профиля, несмотря на имя аргумента role. Удаление устройства не гарантирует событие ButtonReleased для всех удерживаемых действий: очищайте состояние взаимодействий при потере устройства или фокуса.
Проверены искусственный tracker, ввод и преобразования, события, дочерние трансформы и отвязка на установленном runtime. Реальная гарнитура, физическая вибрация и изображение не проверены. Практическая настройка: компоненты XR.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
XRController3DКонструктор
public XRController3D();Создаёт отслеживаемый Entity без выбранного tracker. Добавьте непосредственно под XROrigin3D, задайте Tracker, затем Pose. Модель размещайте дочерним Entity.
Методы5
GetFloatfloat
public float GetFloat(StringName name);Читает действие: Float возвращается как float, Bool преобразуется в 1 или 0. Для Vector2, отсутствующего значения или tracker возвращает 0. Не нормализует и не ограничивает диапазон.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
nameТочное внутреннее имя действия из карты; не подпись, не путь кнопки и не обычный InputMap.
floatfloat значения; Bool даёт 0/1, несовместимый тип или отсутствие — 0.
GetInputVariant
public Variant GetInput(StringName name);Возвращает исходный Variant значения действия. Без tracker или неизвестного имени — Variant.Type.Nil. Проверяйте тип перед преобразованием; полученную C# обёртку Variant освобождайте через using. Это не событие и не подтверждение tracking.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
nameТочное внутреннее имя действия из карты; не подпись, не путь кнопки и не обычный InputMap.
VariantVariant исходного типа либо Nil. Освободите C# обёртку через using.
GetTrackerHandXRPositionalTracker.TrackerHand
public XRPositionalTracker.TrackerHand GetTrackerHand();Читает Hand привязанного tracker; без tracker возвращает Unknown. Значение не выводится из строки Tracker. Принадлежность руке не означает наличие актуальной pose или ввода.
XRPositionalTracker.TrackerHandHand tracker либо Unknown; не вычисляется из его имени.
GetVector2Vector2
public Vector2 GetVector2(StringName name);Читает Vector2 действия без изменения. Float преобразуется в (value, 0), Bool — в (1, 0) или (0, 0); неизвестное значение или отсутствующий tracker дают Vector2.Zero. Не применяет dead zone и не нормализует.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
nameТочное внутреннее имя действия из карты; не подпись, не путь кнопки и не обычный InputMap.
Vector2Vector2; скаляр помещается в X, отсутствие даёт Vector2.Zero.
IsButtonPressedbool
public bool IsButtonPressed(StringName name);Читает текущее булево значение действия по внутреннему имени, не событие одного кадра. Без tracker или значения возвращает false. Метод не проверяет фокус или свежесть pose; выполняйте эти проверки отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
nameТочное внутреннее имя действия из карты; не подпись, не путь кнопки и не обычный InputMap.
boolТекущее bool; false также при отсутствии ввода или tracker.
Сигналы и события5
ButtonPressedСобытие
public event XRController3D.ButtonPressedEventHandler ButtonPressed;Передаёт событие tracker при изменении булевого действия на true с его внутренним именем. Не испускается каждый кадр удержания. Не проверяет фокус и tracking; отсутствие tracker не создаёт синтетическое нажатие.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
actionNameВнутреннее имя действия. Для запроса вибрации нужно настроенное выходное действие.
ButtonReleasedСобытие
public event XRController3D.ButtonReleasedEventHandler ButtonReleased;Передаёт событие tracker при изменении булевого действия на false. Удаление tracker само по себе не генерирует отпускание всех кнопок: сбрасывайте состояние взаимодействия при потере устройства или фокуса.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
actionNameВнутреннее имя действия. Для запроса вибрации нужно настроенное выходное действие.
InputFloatChangedСобытие
public event XRController3D.InputFloatChangedEventHandler InputFloatChanged;Передаёт изменившееся числовое действие и его имя. Параметр value в C# событии имеет тип double; GetFloat возвращает float. Повтор того же значения не создаёт событие в проверенном tracker. Автоматической проверки фокуса нет.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
value | double | — |
actionNameВнутреннее имя действия. Для запроса вибрации нужно настроенное выходное действие.
valueНовое значение double события; не float возвращаемого GetFloat.
InputVector2ChangedСобытие
public event XRController3D.InputVector2ChangedEventHandler InputVector2Changed;Передаёт изменившееся действие Vector2 и внутреннее имя. Не нормализует оси и не добавляет dead zone. После отвязки старого tracker его события больше не пересылаются.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
value | Vector2 | — |
actionNameВнутреннее имя действия. Для запроса вибрации нужно настроенное выходное действие.
valueНовый Vector2 без dead zone и нормализации.
ProfileChangedСобытие
public event XRController3D.ProfileChangedEventHandler ProfileChanged;Передаёт изменение профиля привязанного tracker. Несмотря на имя параметра role, его значение — строка профиля, например путь interaction profile, а не left/right. Это не подтверждение поддержки всех привязок runtime.
| Имя | Тип | По умолчанию |
|---|---|---|
role | string | — |
roleСтрока профиля tracker; имя параметра историческое, это не принадлежность руке.