XREntity3D
Привязка Entity к именованной pose tracker.
XREntity3D получает трансформ выбранной pose. Размещайте непосредственно под XROrigin3D. Новый экземпляр имеет пустой Tracker, Pose=default и ShowWhenTracked=false. Задавайте Tracker до Pose: смена tracker обычно сбрасывает имя pose.
GetIsActive проверяет наличие pose, а не актуальность её данных. После потери tracking остаётся последний трансформ. GetHasTrackingData хранит кэшированный флаг. Подтверждён дефект: SetPoseName не обновляет его, поэтому переключение на отсутствующую pose может оставить true. При динамической смене берите GetPose(), проверяйте null и HasTrackingData самой pose, а также фокус приложения. Не изменяйте pose, которой управляет XR-интерфейс.
TrackingChanged сообщает только смену кэшированного флага. ShowWhenTracked требует основного XR-интерфейса. Исходник обновляет видимость до записи нового флага tracking; корректность переходов видимости на устройстве не подтверждена. Для запрета взаимодействий используйте явную проверку состояния.
TriggerHapticPulse — запрос, а не подтверждение вибрации. Длительность задаётся в секундах; текущий OpenXR-путь не применяет delaySec. Проверены трансформы, доступность pose, потеря tracking и дефект её выбора с искусственным tracker; исправлений движка нет. Схема и диагностика: компоненты XR.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
XREntity3DКонструктор
public XREntity3D();Создаёт Entity привязки к tracker: Tracker пуст, Pose=default, ShowWhenTracked=false, текущих данных нет. Должен быть дочерним XROrigin3D. Сам не запускает XR-сеанс.
Свойства3
PoseСвойство
public StringName Pose { get; set; }Имя выбранной позы, изначально default; например grip или aim при их наличии. Setter копирует трансформ существующей pose, но не обновляет флаг GetHasTrackingData. Подтверждён дефект: при смене на отсутствующую pose старый true сохраняется. Для динамического выбора проверяйте GetPose() и HasTrackingData самой pose; настройте имя до начала обработки взаимодействий.
ShowWhenTrackedСвойство
public bool ShowWhenTracked { get; set; }Политика видимости по tracking, изначально false. Работает только при наличии основного XR-интерфейса; без него Visible не меняется. В исходнике обновление видимости при смене tracking вызывается до записи нового флага, поэтому своевременное скрытие на устройстве здесь не подтверждено. Для разрешения взаимодействий отдельно проверяйте pose и tracking; видимость не является проверкой безопасности.
TrackerСвойство
public StringName Tracker { get; set; }Имя tracker, изначально пустое; например left_hand или right_hand. Это не числовой ID и не путь ресурса. Смена снимает старые связи, выбирает новый tracker и сбрасывает Pose в default. Если уже привязан тот же tracker, setter ничего не делает. Задавайте Tracker до Pose. Наличие имени не подтверждает подключение устройства.
Методы10
GetHasTrackingDatabool
public bool GetHasTrackingData();Возвращает кэшированный флаг, обновляемый событиями выбранной pose и привязкой tracker. При потере данных становится false; старый трансформ сохраняется. Дефект смены Pose: setter не пересчитывает флаг, поэтому он может быть устаревшим. При динамическом выборе дополнительно проверяйте GetPose() и HasTrackingData полученной pose.
boolКэшированный bool, который может устареть после смены Pose до следующего обновления.
GetIsActivebool
public bool GetIsActive();Проверяет наличие tracker и именованной pose. После InvalidatePose может оставаться true, хотя tracking потерян. Это не фокус сеанса, не свежесть данных и не разрешение взаимодействия.
booltrue при наличии tracker и pose, даже если tracking этой pose потерян.
GetPoseXRPose
public XRPose GetPose();Возвращает объект выбранной pose или null, если tracker/имя отсутствуют. Это состояние tracker, не снимок: потеря tracking сохраняет прежний трансформ. Проверяйте HasTrackingData самой pose; не изменяйте поля состояния, которыми управляет XR-интерфейс.
XRPoseСостояние выбранной pose или null. Данные могут быть сохранены после потери tracking.
GetPoseNameStringName
public StringName GetPoseName();Возвращает настроенное имя pose, изначально default. Не подтверждает наличие pose или актуальных данных.
StringNameНастроенное имя pose; изначально default.
GetShowWhenTrackedbool
public bool GetShowWhenTracked();Возвращает настройку ShowWhenTracked, изначально false. Это не текущая Visible и не наличие tracking.
boolНастройка политики, изначально false; не текущая видимость.
GetTrackerStringName
public StringName GetTracker();Возвращает настроенное имя tracker, даже если устройства нет. После создания строка пустая; это не числовой ID.
StringNameНастроенное имя tracker; изначально пустое.
SetPoseNamevoid
public void SetPoseName(StringName pose);Имя выбранной позы, изначально default; например grip или aim при их наличии. Setter копирует трансформ существующей pose, но не обновляет флаг GetHasTrackingData. Подтверждён дефект: при смене на отсутствующую pose старый true сохраняется. Для динамического выбора проверяйте GetPose() и HasTrackingData самой pose; настройте имя до начала обработки взаимодействий.
| Имя | Тип | По умолчанию |
|---|---|---|
pose | StringName | — |
poseИмя pose tracker, например grip; наличие проверяйте отдельно. Setter не обновляет кэш tracking.
SetShowWhenTrackedvoid
public void SetShowWhenTracked(bool show);Политика видимости по tracking, изначально false. Работает только при наличии основного XR-интерфейса; без него Visible не меняется. В исходнике обновление видимости при смене tracking вызывается до записи нового флага, поэтому своевременное скрытие на устройстве здесь не подтверждено. Для разрешения взаимодействий отдельно проверяйте pose и tracking; видимость не является проверкой безопасности.
| Имя | Тип | По умолчанию |
|---|---|---|
show | bool | — |
showВключить политику видимости; без основного XR-интерфейса она не меняет Visible.
SetTrackervoid
public void SetTracker(StringName trackerName);Имя tracker, изначально пустое; например left_hand или right_hand. Это не числовой ID и не путь ресурса. Смена снимает старые связи, выбирает новый tracker и сбрасывает Pose в default. Если уже привязан тот же tracker, setter ничего не делает. Задавайте Tracker до Pose. Наличие имени не подтверждает подключение устройства.
| Имя | Тип | По умолчанию |
|---|---|---|
trackerName | StringName | — |
trackerNameИмя tracker, например left_hand; задавайте до выбора Pose.
TriggerHapticPulsevoid
public void TriggerHapticPulse(string actionName, double frequency, double amplitude, double durationSec, double delaySec);Передаёт запрос основному XR-интерфейсу для настроенного Tracker. Нужны действующий сеанс и настроенное выходное действие. Частота в Гц, амплитуда 0…1, длительность и задержка в секундах. Текущий OpenXR-путь преобразует длительность в наносекунды, но delaySec игнорирует. Метод не возвращает подтверждение устройства; физическая вибрация здесь не проверена.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
frequency | double | — |
amplitude | double | — |
durationSec | double | — |
delaySec | double | — |
actionNameВнутреннее имя действия. Для запроса вибрации нужно настроенное выходное действие.
frequencyЧастота в Гц; 0 запрашивает выбор частоты runtime. Проверяйте конечность и неотрицательность до вызова.
amplitudeКонечная амплитуда от 0 до 1 включительно; этот прокси не гарантирует проверку диапазона.
durationSecПоложительная конечная длительность в секундах; не миллисекунды и не наносекунды.
delaySecЗадержка в секундах. В текущем OpenXR-пути игнорируется; используйте 0 и планируйте отложенный вызов своей логикой.
Сигналы и события1
TrackingChangedСобытие
public event XREntity3D.TrackingChangedEventHandler TrackingChanged;Событие изменения кэшированного флага tracking; повтор того же состояния не испускается. Это не событие каждого кадра pose, не фокус и не уведомление о каждой смене Pose. Учитывайте дефект пересчёта флага при выборе pose.
| Имя | Тип | По умолчанию |
|---|---|---|
tracking | bool | — |
trackingНовое значение кэшированного флага; не наличие устройства и не состояние фокуса.