reckfellENGINE

OpenXRPlaneTracker

Плоскость с локальной геометрией и кешированными формами.

На этой странице
class OpenXRPlaneTrackerReckfellSharpНаследует OpenXRSpatialEntityTracker

Данные плоскости: BoundsSize, semantic label/alignment и, при наличии, polygon mesh. GetMesh/GetShape создают кеши, но сами не добавляют визуальные Entity или collision. Геометрия в XY; применяйте GetMeshOffset к общему дочернему Entity3D и не добавляйте безусловный поворот пола.

MeshChanged подходит для обновления mesh/shape, но origin-only SetMeshData не испускает его: читайте offset каждый кадр при валидном tracking. GetShape повторно с иной толщиной возвращает старую кешированную форму. Пустые indices означают fan, а не универсальную триангуляцию вогнутого контура.

Рабочий пример и настройка. Проверены 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

OpenXRPlaneTrackerКонструктор
# OpenXRPlaneTracker
C#
public OpenXRPlaneTracker();

Создаёт принадлежащий вызывающему RefCounted tracker без запуска OpenXR, регистрации в XRServer или обнаружения. Базовое состояние Paused, категория Anchor; Entity/context RID пусты. Для реального приложения обычно используйте заимствованный tracker, зарегистрированный provider, а не synthetic ресурс. Собственный экземпляр освобождайте после удаления своих ссылок/регистрации.

Свойства3

BoundsSizeСвойство
# BoundsSize
C#
public Vector2 BoundsSize { get; set; }

Размер прямоугольной границы в локальной XY-плоскости, изначально Vector2.Zero. Setter применяет изменение, только если разница хотя бы одной компоненты >0.001. Без polygon data сбрасывает кеши и испускает MeshChanged; при polygon data граница не заменяет mesh. Положительные обе компоненты нужны для прямоугольного fallback.

PlaneAlignmentСвойство
# PlaneAlignment
C#
public OpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment PlaneAlignment { get; set; }

Metadata ориентации плоскости, по умолчанию HorizontalUpward даже без данных детектора. Setter сохраняет значение без геометрического поворота и без MeshChanged. Не выводите из этого значения наличие пола, tracking или реальную классификацию runtime.

PlaneLabelСвойство
# PlaneLabel
C#
public string PlaneLabel { get; set; }

Семантическая метка плоскости либо пустая строка при отсутствии данных. Setter также копирует строку в Description трекера; не перестраивает mesh/shape и не испускает MeshChanged. Не считайте пустую/незнакомую метку полом; поддержка меток зависит от runtime.

Методы14

ClearMeshDatavoid
# ClearMeshData
C#
public void ClearMeshData();

Сбрасывает polygon vertices/indices, origin и кеши mesh/shape, сохраняя BoundsSize. Поэтому следующий GetMesh/GetShape может вернуть прямоугольный fallback, а не null. MeshChanged испускается только если polygon data действительно были; после явного сброса обновите свои mesh/collider независимо от события.

GetBoundsSizeVector2
# GetBoundsSize
C#
public Vector2 GetBoundsSize();

Размер прямоугольной границы в локальной XY-плоскости, изначально Vector2.Zero. Setter применяет изменение, только если разница хотя бы одной компоненты >0.001. Без polygon data сбрасывает кеши и испускает MeshChanged; при polygon data граница не заменяет mesh. Положительные обе компоненты нужны для прямоугольного fallback.

Возвращает Vector2

Размер прямоугольной границы в локальной XY-плоскости, изначально Vector2.Zero. Setter применяет изменение, только если разница хотя бы одной компоненты >0.001. Без polygon data сбрасывает кеши и испускает MeshChanged; при polygon data граница не заменяет mesh. Положительные обе компоненты нужны для прямоугольного fallback.

GetIndicesint[]
# GetIndices
C#
public int[] GetIndices();

Сохранённые triangle indices либо пустой массив. После SetMeshData без indices содержит сгенерированный fan, не исходный контур; прямоугольный fallback список не заполняет. C# int[] — данные для чтения/копирования, не редактирование tracker на месте.

Возвращает int[]

Сохранённые triangle indices либо пустой массив. После SetMeshData без indices содержит сгенерированный fan, не исходный контур; прямоугольный fallback список не заполняет. C# int[] — данные для чтения/копирования, не редактирование tracker на месте.

GetMeshMesh
# GetMesh
C#
public Mesh GetMesh();

Лениво создаёт и кеширует mesh из polygon data или положительных BoundsSize; при отсутствии обоих null. Геометрия в локальной XY, не world space; отдельно примените GetMeshOffset. Возвращённая обёртка заимствованная: не Dispose. MeshChanged требует обновить собственный MeshInstance3D.Mesh; setter tracker не обновит вашу Entity автоматически.

Возвращает Mesh

Лениво создаёт и кеширует mesh из polygon data или положительных BoundsSize; при отсутствии обоих null. Геометрия в локальной XY, не world space; отдельно примените GetMeshOffset. Возвращённая обёртка заимствованная: не Dispose. MeshChanged требует обновить собственный MeshInstance3D.Mesh; setter tracker не обновит вашу Entity автоматически.

GetMeshOffsetTransform3D
# GetMeshOffset
C#
public Transform3D GetMeshOffset();

Transform геометрии относительно default pose: для polygon data inverse(raw pose) × mesh origin, затем translation умножается на WorldScale. Без polygon data — Identity. Применяйте к общему дочернему Entity3D для mesh/collider. Origin-only обновление может не дать MeshChanged: читайте offset каждый кадр при валидном tracking. Проверка ограничена WorldScale=1.

Возвращает Transform3D

Transform геометрии относительно default pose: для polygon data inverse(raw pose) × mesh origin, затем translation умножается на WorldScale. Без polygon data — Identity. Применяйте к общему дочернему Entity3D для mesh/collider. Origin-only обновление может не дать MeshChanged: читайте offset каждый кадр при валидном tracking. Проверка ограничена WorldScale=1.

GetPlaneAlignmentOpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment
# GetPlaneAlignment
C#
public OpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment GetPlaneAlignment();

Metadata ориентации плоскости, по умолчанию HorizontalUpward даже без данных детектора. Setter сохраняет значение без геометрического поворота и без MeshChanged. Не выводите из этого значения наличие пола, tracking или реальную классификацию runtime.

Возвращает OpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment

Metadata ориентации плоскости, по умолчанию HorizontalUpward даже без данных детектора. Setter сохраняет значение без геометрического поворота и без MeshChanged. Не выводите из этого значения наличие пола, tracking или реальную классификацию runtime.

GetPlaneLabelstring
# GetPlaneLabel
C#
public string GetPlaneLabel();

Семантическая метка плоскости либо пустая строка при отсутствии данных. Setter также копирует строку в Description трекера; не перестраивает mesh/shape и не испускает MeshChanged. Не считайте пустую/незнакомую метку полом; поддержка меток зависит от runtime.

Возвращает string

Семантическая метка плоскости либо пустая строка при отсутствии данных. Setter также копирует строку в Description трекера; не перестраивает mesh/shape и не испускает MeshChanged. Не считайте пустую/незнакомую метку полом; поддержка меток зависит от runtime.

GetShapeShape3D
# GetShape
C#
public Shape3D GetShape(float thickness = 0.01f);

Лениво создаёт и кеширует Shape3D: polygon data дают ConcavePolygonShape3D, положительные BoundsSize — BoxShape3D; иначе null. Заимствованная обёртка, не Dispose. thickness по умолчанию 0.01, задавайте положительное конечное значение. Если shape уже кеширована, другая thickness не перестраивает её; очистите/обновите данные или создайте собственную форму. Сам getter не включает collision.

Параметры
ИмяТипПо умолчанию
thicknessfloat0.01f
thickness

Положительная конечная толщина; default 0.01. Уже кешированная shape игнорирует новое значение.

Возвращает Shape3D

Лениво создаёт и кеширует Shape3D: polygon data дают ConcavePolygonShape3D, положительные BoundsSize — BoxShape3D; иначе null. Заимствованная обёртка, не Dispose. thickness по умолчанию 0.01, задавайте положительное конечное значение. Если shape уже кеширована, другая thickness не перестраивает её; очистите/обновите данные или создайте собственную форму. Сам getter не включает collision.

GetVerticesVector2[]
# GetVertices
C#
public Vector2[] GetVertices();

Сохранённые polygon vertices в локальной XY, либо пустой массив; прямоугольный fallback не заполняет этот список. C# getter возвращает Vector2[]-копию: её изменение не редактирует tracker. Для обновления используйте SetMeshData.

Возвращает Vector2[]

Сохранённые polygon vertices в локальной XY, либо пустой массив; прямоугольный fallback не заполняет этот список. C# getter возвращает Vector2[]-копию: её изменение не редактирует tracker. Для обновления используйте SetMeshData.

SetBoundsSizevoid
# SetBoundsSize
C#
public void SetBoundsSize(Vector2 boundsSize);

Размер прямоугольной границы в локальной XY-плоскости, изначально Vector2.Zero. Setter применяет изменение, только если разница хотя бы одной компоненты >0.001. Без polygon data сбрасывает кеши и испускает MeshChanged; при polygon data граница не заменяет mesh. Положительные обе компоненты нужны для прямоугольного fallback.

Параметры
ИмяТипПо умолчанию
boundsSizeVector2—
boundsSize

Размер прямоугольной границы в локальной XY-плоскости, изначально Vector2.Zero. Setter применяет изменение, только если разница хотя бы одной компоненты >0.001. Без polygon data сбрасывает кеши и испускает MeshChanged; при polygon data граница не заменяет mesh. Положительные обе компоненты нужны для прямоугольного fallback.

SetMeshData2 перегрузки
# SetMeshData · 1/2
C#
public void SetMeshData(Transform3D origin, Vector2[] vertices, int[] indices = null);

Назначает локальные XY vertices, transform их origin и triangle indices. Нужны >=3 vertices; меньшее число очищает имеющиеся polygon data. Пустые indices дают fan от вершины 0, поэтому для вогнутого контура передавайте собственную корректную триангуляцию. Проверяйте индексы и кратность трём самостоятельно. Изменение геометрии сбрасывает mesh/shape и испускает MeshChanged; только новый origin при прежних массивах события не даёт.

Параметры
ИмяТипПо умолчанию
originTransform3D—
verticesVector2[]—
indicesint[]null
origin

Transform polygon data в пространстве tracking; не подставляйте global transform без преобразования. Изменение только origin может не испустить MeshChanged.

vertices

Минимум три локальные XY вершины. Для concave polygon передайте готовые triangle indices.

indices

Индексы треугольников: число кратно трём, все в пределах vertices. Пустой массив включает fan от вершины 0.

# SetMeshData · 2/2
C#
public void SetMeshData(Transform3D origin, ReadOnlySpan<Vector2> vertices, ReadOnlySpan<int> indices);

Назначает локальные XY vertices, transform их origin и triangle indices. Нужны >=3 vertices; меньшее число очищает имеющиеся polygon data. Пустые indices дают fan от вершины 0, поэтому для вогнутого контура передавайте собственную корректную триангуляцию. Проверяйте индексы и кратность трём самостоятельно. Изменение геометрии сбрасывает mesh/shape и испускает MeshChanged; только новый origin при прежних массивах события не даёт.

Параметры
ИмяТипПо умолчанию
originTransform3D—
verticesReadOnlySpan<Vector2>—
indicesReadOnlySpan<int>—
origin

Transform polygon data в пространстве tracking; не подставляйте global transform без преобразования. Изменение только origin может не испустить MeshChanged.

vertices

Минимум три локальные XY вершины. Для concave polygon передайте готовые triangle indices.

indices

Индексы треугольников: число кратно трём, все в пределах vertices. Пустой массив включает fan от вершины 0.

SetPlaneAlignmentvoid
# SetPlaneAlignment
C#
public void SetPlaneAlignment(OpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment planeAlignment);

Metadata ориентации плоскости, по умолчанию HorizontalUpward даже без данных детектора. Setter сохраняет значение без геометрического поворота и без MeshChanged. Не выводите из этого значения наличие пола, tracking или реальную классификацию runtime.

Параметры
ИмяТипПо умолчанию
planeAlignmentOpenXRSpatialComponentPlaneAlignmentList.PlaneAlignment—
planeAlignment

Metadata ориентации плоскости, по умолчанию HorizontalUpward даже без данных детектора. Setter сохраняет значение без геометрического поворота и без MeshChanged. Не выводите из этого значения наличие пола, tracking или реальную классификацию runtime.

SetPlaneLabelvoid
# SetPlaneLabel
C#
public void SetPlaneLabel(string planeLabel);

Семантическая метка плоскости либо пустая строка при отсутствии данных. Setter также копирует строку в Description трекера; не перестраивает mesh/shape и не испускает MeshChanged. Не считайте пустую/незнакомую метку полом; поддержка меток зависит от runtime.

Параметры
ИмяТипПо умолчанию
planeLabelstring—
planeLabel

Семантическая метка плоскости либо пустая строка при отсутствии данных. Setter также копирует строку в Description трекера; не перестраивает mesh/shape и не испускает MeshChanged. Не считайте пустую/незнакомую метку полом; поддержка меток зависит от runtime.

Сигналы и события1

MeshChangedСобытие
# MeshChanged
C#
public event Action MeshChanged;

Сигнал изменения геометрии/части кешей; заново назначьте mesh/shape своим визуальным и физическим Entity. Не сообщает обо всех metadata и origin-only изменениях. GetMeshOffset обновляйте отдельно при валидном tracking; не предполагайте один сигнал на каждую операцию.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.