OpenXRRenderModelManager
Менеджер визуальных моделей XR-устройств и фильтров рук.
Создаёт и удаляет OpenXRRenderModel по данным активного OpenXR extension. Это визуальные Entity, не игровая логика, коллизии или подтверждение удержания контроллера. Требуется OpenXR/glTF build и xr/openxr/extensions/render_model, включённый до старта. Наличие класса не доказывает доступность runtime-моделей.
Перед созданием проверьте зарегистрированный singleton и IsActive. События подключайте до AddChild: существующие модели могут появиться при EnterTree. Added не гарантирует геометрию; Removed идёт перед удалением Entity, но при фильтрации backend RID уже может быть отозван. Manager-owned модели не освобождайте.
Any/NoneSet требуют прямого родителя XROrigin3D. Фильтры рук допускают промежуточного родителя XRController3D. MakeLocalToPose компенсирует уже применённую родительскую pose; не меняет action map. Late-start повтор того же Tracker не перепривязывает tracker.
Пример и диагностика. На текущем SDK выполнены negative gate, параметры и inactive lifecycle; реальные provider events, фильтры, геометрия, шлем и визуальная готовность не проверены.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
OpenXRRenderModelManagerКонструктор
public OpenXRRenderModelManager();Создаёт менеджер с Tracker=Any и пустым MakeLocalToPose. До new проверьте зарегистрированный OpenXRRenderModelExtension singleton и IsActive: native notifications обращаются к wrapper ещё при создании. Конструктор не включает OpenXR, не создаёт модели и не подтверждает устройство.
Свойства2
MakeLocalToPoseСвойство
public string MakeLocalToPose { get; set; }Имя pose для обратного преобразования внутреннего контейнера, изначально пустая строка. Например grip при родителе XRController3D с Pose=grip. Требуется фильтр конкретной руки. Не меняет Pose родителя или action map; существование pose проверяется без HasTrackingData. При изменении контейнер сначала сбрасывается в identity.
TrackerСвойство
public OpenXRRenderModelManager.RenderModelTracker Tracker { get; set; }Фильтр моделей: Any (0) — все, NoneSet (1) — без top-level path, LeftHand (2) и RightHand (3) — соответствующая рука. Изначально Any. Any/NoneSet требуют прямого родителя XROrigin3D; для рук origin должен быть предком. При изменении значения setter один раз разрешает tracker/path; повтор того же значения не переподключает поздно появившийся tracker.
Методы4
GetMakeLocalToPosestring
public string GetMakeLocalToPose();Возвращает сохранённое имя компенсационной pose. Имя pose для обратного преобразования внутреннего контейнера, изначально пустая строка. Например grip при родителе XRController3D с Pose=grip. Требуется фильтр конкретной руки. Не меняет Pose родителя или action map; существование pose проверяется без HasTrackingData. При изменении контейнер сначала сбрасывается в identity.
stringСохранённое имя pose или пустая строка, не состояние трекинга.
GetTrackerOpenXRRenderModelManager.RenderModelTracker
public OpenXRRenderModelManager.RenderModelTracker GetTracker();Возвращает сохранённый фильтр; не проверяет успешное разрешение tracker/path. Фильтр моделей: Any (0) — все, NoneSet (1) — без top-level path, LeftHand (2) и RightHand (3) — соответствующая рука. Изначально Any. Any/NoneSet требуют прямого родителя XROrigin3D; для рук origin должен быть предком. При изменении значения setter один раз разрешает tracker/path; повтор того же значения не переподключает поздно появившийся tracker.
OpenXRRenderModelManager.RenderModelTrackerТекущий фильтр перечисления; не подтверждение подключённой руки.
SetMakeLocalToPosevoid
public void SetMakeLocalToPose(string makeLocalToPose);Сохраняет имя компенсационной pose при изменении. Имя pose для обратного преобразования внутреннего контейнера, изначально пустая строка. Например grip при родителе XRController3D с Pose=grip. Требуется фильтр конкретной руки. Не меняет Pose родителя или action map; существование pose проверяется без HasTrackingData. При изменении контейнер сначала сбрасывается в identity.
| Имя | Тип | По умолчанию |
|---|---|---|
makeLocalToPose | string | — |
makeLocalToPoseИмя pose для обратного преобразования внутреннего контейнера, изначально пустая строка. Например grip при родителе XRController3D с Pose=grip. Требуется фильтр конкретной руки. Не меняет Pose родителя или action map; существование pose проверяется без HasTrackingData. При изменении контейнер сначала сбрасывается в identity.
SetTrackervoid
public void SetTracker(OpenXRRenderModelManager.RenderModelTracker tracker);Меняет фильтр и отмечает список моделей для обновления; не запускает XR. Фильтр моделей: Any (0) — все, NoneSet (1) — без top-level path, LeftHand (2) и RightHand (3) — соответствующая рука. Изначально Any. Any/NoneSet требуют прямого родителя XROrigin3D; для рук origin должен быть предком. При изменении значения setter один раз разрешает tracker/path; повтор того же значения не переподключает поздно появившийся tracker.
| Имя | Тип | По умолчанию |
|---|---|---|
tracker | OpenXRRenderModelManager.RenderModelTracker | — |
trackerФильтр моделей: Any (0) — все, NoneSet (1) — без top-level path, LeftHand (2) и RightHand (3) — соответствующая рука. Изначально Any. Any/NoneSet требуют прямого родителя XROrigin3D; для рук origin должен быть предком. При изменении значения setter один раз разрешает tracker/path; повтор того же значения не переподключает поздно появившийся tracker.
Сигналы и события2
RenderModelAddedСобытие
public event OpenXRRenderModelManager.RenderModelAddedEventHandler RenderModelAdded;Событие создания и прикрепления OpenXRRenderModel менеджером. Может сработать при EnterTree: подпишитесь до AddChild(manager). Не гарантирует загрузку геометрии или текущую tracking confidence; не скрывайте fallback только по этому событию.
| Имя | Тип | По умолчанию |
|---|---|---|
renderModel | OpenXRRenderModel | — |
renderModelЗаимствованная manager-owned Entity новой модели. Геометрия может отсутствовать; не освобождайте её и не считайте готовым визуалом.
RenderModelRemovedСобытие
public event OpenXRRenderModelManager.RenderModelRemovedEventHandler RenderModelRemoved;Событие перед remove_child/queue_free модели менеджером. Entity доступна в обработчике, но backend RID при отложенной фильтрации уже может быть отозван: не запрашивайте extension по нему. Не вызывайте Free/QueueFree для manager-owned модели и не используйте её на следующем кадре; уберите собственные ссылки и восстановите fallback.
| Имя | Тип | По умолчанию |
|---|---|---|
renderModel | OpenXRRenderModel | — |
renderModelУдаляемая manager-owned Entity, доступная только в текущем обработчике. Backend RID уже может быть недействителен; не опрашивайте по нему extension и не освобождайте Entity самостоятельно.
OpenXRRenderModelManager.RenderModelTracker
| Значение | Описание |
|---|---|
Any = 0 | Все активные модели рендеринга отображаются независимо от того, к какому трекеру они относятся. |
LeftHand = 2 | Показаны только активные модели рендеринга, относящиеся к левому трекеру. |
NoneSet = 1 | Показаны только активные модели рендеринга, не связанные ни с одним трекером, которым мы управляем. |
RightHand = 3 | Показаны только активные модели рендеринга, относящиеся к правому трекеру. |