OpenXRSpatialEntityTracker
Данные tracking пространственного объекта OpenXR.
RefCounted данные provider, а не игровая Entity или ECS. Tracker относится к XRServer категории Anchor; XRAnchor3D под XROrigin3D связывается по Name и pose default. Для использования одновременно требуются SpatialTrackingState=Tracking и HasTrackingData у pose. Ручной setter состояния не создаёт tracking.
Entity — backend RID, за который отвечает tracker; не освобождайте его отдельно. SpatialContext после первого назначения нельзя переключить. Name/RID не сохраняются как UUID. Дополнительные Next структуры образуют связанный список, повторное добавление может создать цикл.
Рабочий пример и настройка. Проверены synthetic metadata и клиентская логика в Windows headless XR-off: 23 API случая и ранее 20 проверок helper. Реальное обнаружение, entity/context RID, persistence, шлем и изображение не проверены. Provider-owned tracker/pose/кешированные обёртки не освобождайте; собственный новый tracker допускает Dispose после завершения использования.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
OpenXRSpatialEntityTrackerКонструктор
public OpenXRSpatialEntityTracker();Создаёт принадлежащий вызывающему RefCounted tracker без запуска OpenXR, регистрации в XRServer или обнаружения. Базовое состояние Paused, категория Anchor; Entity/context RID пусты. Для реального приложения обычно используйте заимствованный tracker, зарегистрированный provider, а не synthetic ресурс. Собственный экземпляр освобождайте после удаления своих ссылок/регистрации.
Свойства2
EntityСвойство
public Rid Entity { get; set; }RID пространственного объекта runtime, не игровая Entity и не UUID. Изначально пустой. Назначение передаёт трекеру управление этим RID: замена/уничтожение трекера освобождает прежний объект через spatial extension. Не освобождайте RID встроенного трекера самостоятельно и не назначайте произвольный Rid; IsValid не проверяет живого владельца.
SpatialTrackingStateСвойство
public OpenXRSpatialEntityTracker.EntityTrackingState SpatialTrackingState { get; set; }Состояние пространственного tracking, изначально Paused: Tracking, Paused или Stopped. Setter меняет metadata и при отличии испускает SpatialTrackingStateChanged; не создаёт pose, не включает обнаружение и не валидирует позицию. Перед использованием также проверяйте GetPose("default").HasTrackingData.
Методы9
AddNextvoid
public void AddNext(OpenXRStructureBase next);Добавляет структуру в начало цепочки: новый Next указывает на прежнюю голову. Null игнорируется, успешное добавление испускает NextChanged. Метод меняет ссылки самой структуры; используйте отдельный экземпляр и не добавляйте уже включённую структуру повторно — возможен цикл. Не запрашивает capability у runtime.
| Имя | Тип | По умолчанию |
|---|---|---|
next | OpenXRStructureBase | — |
nextДобавляет структуру в начало цепочки: новый Next указывает на прежнюю голову. Null игнорируется, успешное добавление испускает NextChanged. Метод меняет ссылки самой структуры; используйте отдельный экземпляр и не добавляйте уже включённую структуру повторно — возможен цикл. Не запрашивает capability у runtime.
GetEntityRid
public Rid GetEntity();RID пространственного объекта runtime, не игровая Entity и не UUID. Изначально пустой. Назначение передаёт трекеру управление этим RID: замена/уничтожение трекера освобождает прежний объект через spatial extension. Не освобождайте RID встроенного трекера самостоятельно и не назначайте произвольный Rid; IsValid не проверяет живого владельца.
RidRID пространственного объекта runtime, не игровая Entity и не UUID. Изначально пустой. Назначение передаёт трекеру управление этим RID: замена/уничтожение трекера освобождает прежний объект через spatial extension. Не освобождайте RID встроенного трекера самостоятельно и не назначайте произвольный Rid; IsValid не проверяет живого владельца.
GetNextOpenXRStructureBase
public OpenXRStructureBase GetNext();Заимствованный первый OpenXRStructureBase в цепочке дополнительных структур либо null. Это связанный список параметров расширений, не дочерние Entity. Не изменяйте/не освобождайте provider-owned структуры; новые собственные структуры отсоединяйте перед освобождением.
OpenXRStructureBaseЗаимствованный первый OpenXRStructureBase в цепочке дополнительных структур либо null. Это связанный список параметров расширений, не дочерние Entity. Не изменяйте/не освобождайте provider-owned структуры; новые собственные структуры отсоединяйте перед освобождением.
GetSpatialContextRid
public Rid GetSpatialContext();Пространственный context RID, изначально пустой. После назначения валидного RID setter отвергает переключение на другой context, включая пустой: создавайте новый tracker. Получение не передаёт владение context; встроенный context движка не освобождайте. Сам setter не проверяет готовность OpenXR context.
RidПространственный context RID, изначально пустой. После назначения валидного RID setter отвергает переключение на другой context, включая пустой: создавайте новый tracker. Получение не передаёт владение context; встроенный context движка не освобождайте. Сам setter не проверяет готовность OpenXR context.
GetSpatialTrackingStateOpenXRSpatialEntityTracker.EntityTrackingState
public OpenXRSpatialEntityTracker.EntityTrackingState GetSpatialTrackingState();Состояние пространственного tracking, изначально Paused: Tracking, Paused или Stopped. Setter меняет metadata и при отличии испускает SpatialTrackingStateChanged; не создаёт pose, не включает обнаружение и не валидирует позицию. Перед использованием также проверяйте GetPose("default").HasTrackingData.
OpenXRSpatialEntityTracker.EntityTrackingStateСостояние пространственного tracking, изначально Paused: Tracking, Paused или Stopped. Setter меняет metadata и при отличии испускает SpatialTrackingStateChanged; не создаёт pose, не включает обнаружение и не валидирует позицию. Перед использованием также проверяйте GetPose("default").HasTrackingData.
RemoveNextvoid
public void RemoveNext(OpenXRStructureBase next);Удаляет первое совпадение ссылки из цепочки, очищает Next удалённой структуры и испускает NextChanged. Null и отсутствующий элемент ничего не меняют. Не уничтожает ресурс и не отменяет уже отправленный асинхронный запрос; provider-owned цепочку не редактируйте.
| Имя | Тип | По умолчанию |
|---|---|---|
next | OpenXRStructureBase | — |
nextУдаляет первое совпадение ссылки из цепочки, очищает Next удалённой структуры и испускает NextChanged. Null и отсутствующий элемент ничего не меняют. Не уничтожает ресурс и не отменяет уже отправленный асинхронный запрос; provider-owned цепочку не редактируйте.
SetEntityvoid
public void SetEntity(Rid entity);RID пространственного объекта runtime, не игровая Entity и не UUID. Изначально пустой. Назначение передаёт трекеру управление этим RID: замена/уничтожение трекера освобождает прежний объект через spatial extension. Не освобождайте RID встроенного трекера самостоятельно и не назначайте произвольный Rid; IsValid не проверяет живого владельца.
| Имя | Тип | По умолчанию |
|---|---|---|
entity | Rid | — |
entityRID пространственного объекта runtime, не игровая Entity и не UUID. Изначально пустой. Назначение передаёт трекеру управление этим RID: замена/уничтожение трекера освобождает прежний объект через spatial extension. Не освобождайте RID встроенного трекера самостоятельно и не назначайте произвольный Rid; IsValid не проверяет живого владельца.
SetSpatialContextvoid
public void SetSpatialContext(Rid spatialContext);Пространственный context RID, изначально пустой. После назначения валидного RID setter отвергает переключение на другой context, включая пустой: создавайте новый tracker. Получение не передаёт владение context; встроенный context движка не освобождайте. Сам setter не проверяет готовность OpenXR context.
| Имя | Тип | По умолчанию |
|---|---|---|
spatialContext | Rid | — |
spatialContextПространственный context RID, изначально пустой. После назначения валидного RID setter отвергает переключение на другой context, включая пустой: создавайте новый tracker. Получение не передаёт владение context; встроенный context движка не освобождайте. Сам setter не проверяет готовность OpenXR context.
SetSpatialTrackingStatevoid
public void SetSpatialTrackingState(OpenXRSpatialEntityTracker.EntityTrackingState spatialTrackingState);Состояние пространственного tracking, изначально Paused: Tracking, Paused или Stopped. Setter меняет metadata и при отличии испускает SpatialTrackingStateChanged; не создаёт pose, не включает обнаружение и не валидирует позицию. Перед использованием также проверяйте GetPose("default").HasTrackingData.
| Имя | Тип | По умолчанию |
|---|---|---|
spatialTrackingState | OpenXRSpatialEntityTracker.EntityTrackingState | — |
spatialTrackingStateСостояние пространственного tracking, изначально Paused: Tracking, Paused или Stopped. Setter меняет metadata и при отличии испускает SpatialTrackingStateChanged; не создаёт pose, не включает обнаружение и не валидирует позицию. Перед использованием также проверяйте GetPose("default").HasTrackingData.
Сигналы и события2
NextChangedСобытие
public event Action NextChanged;Сигнал изменения списка дополнительных структур через AddNext/RemoveNext. Не означает, что изменилась pose, обнаружен объект или runtime применил параметры. Прямое изменение поля Next самих структур не обязано проходить через этот сигнал.
SpatialTrackingStateChangedСобытие
public event OpenXRSpatialEntityTracker.SpatialTrackingStateChangedEventHandler SpatialTrackingStateChanged;Сигнал смены spatial state; аргумент C# имеет тип long. Приводите к EntityTrackingState после проверки ожидаемого значения. Повторное присваивание того же состояния не испускает сигнал. Это не гарантия валидной pose или готовой геометрии; управляйте видимостью и collision отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
spatialTrackingState | long | — |
spatialTrackingStateНовое состояние как long, соответствующее EntityTrackingState; не подтверждает валидную pose.
OpenXRSpatialEntityTracker.EntityTrackingState
| Значение | Описание |
|---|---|
Paused = 2 | Отслеживание на данный момент приостановлено. |
Stopped = 1 | Эта привязка перестала отслеживать. |
Tracking = 3 | Эта привязка сейчас отслеживается. |