reckfellENGINE

XRPose

Трансформ, скорости и флаги одной pose tracking.

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

XRPose хранит состояние одной именованной pose. Name может быть grip или aim; это не имя tracker. Новая pose имеет Identity-трансформ, нулевые скорости, пустое имя, HasTrackingData=false и TrackingConfidence=None. Создание или изменение полей само по себе не подключает устройство.

Различайте три пространства: Transform — сырые данные поставщика; GetAdjustedTransform — позиция после WorldScale и трансформ после reference frame; мировой трансформ дополнительно включает GlobalTransform игрового XROrigin3D. GetAdjustedTransform не добавляет XRServer.WorldOrigin, не меняет скорости и не проверяет флаг tracking. Не применяйте масштаб или origin второй раз.

Этот выполненный helper получает копию мирового трансформа. Он не создаёт отслеживаемый Entity и не оценивает точность tracking:

C#
using Reckfell;

public static class PoseToWorld
{
    // Borrowed pose/origin. Result is a value copy, not a tracked Entity.
    public static bool TryRead(XRPose pose, XROrigin3D origin, out Transform3D world)
    {
        world = Transform3D.Identity;
        if (pose is null || origin is null || !origin.IsInsideTree()
            || !pose.HasTrackingData) return false;
        world = origin.GlobalTransform * pose.GetAdjustedTransform();
        return true;
    }
}

GetPose у tracker возвращает общее состояние, а не снимок. Не освобождайте и не изменяйте заимствованную pose; копируйте значения для хранения. Созданный через new XRPose отдельный экземпляр принадлежит вашему коду. Высокий confidence и HasTrackingData независимы: setter одного поля не обновляет другое. Координаты сохраняются даже при false.

Проверены начальные значения, setter/getter, копирование, масштаб позиции, отсутствие игрового origin в скорректированном трансформе и helper на установленном runtime. Reference frame в проверке был Identity; порядок его применения сверен с исходником, реальный recenter и гарнитура не проверены. Безопасное чтение общей pose: XRPositionalTracker.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

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

Создаёт отдельный объект: пустое Name, Transform=Identity, обе скорости нулевые, HasTrackingData=false, TrackingConfidence=None. Не создаёт запись в tracker и не начинает tracking. Созданный вами экземпляр принадлежит вам; заимствованные pose из tracker имеют другой жизненный цикл.

Свойства6

AngularVelocityСвойство
# AngularVelocity
C#
public Vector3 AngularVelocity { get; set; }

Сохранённая угловая скорость, изначально Vector3.Zero. Записывается отдельно от Transform и не вычисляется из вращения. GetAdjustedTransform не преобразует скорость в игровое пространство; не считайте её автоматически мировой скоростью.

HasTrackingDataСвойство
# HasTrackingData
C#
public bool HasTrackingData { get; set; }

Флаг наличия tracking, изначально false. Setter меняет только флаг: не очищает трансформ, скорости или confidence и не проверяет устройство. У pose поставщика не изменяйте его игровым кодом. При чтении проверяйте флаг до использования сохранённых координат.

LinearVelocityСвойство
# LinearVelocity
C#
public Vector3 LinearVelocity { get; set; }

Сохранённая линейная скорость, изначально Vector3.Zero. Setter не вычисляет её из трансформов и не применяет WorldScale/reference frame. GetAdjustedTransform также не преобразует это поле. Соглашения пространства и единиц задаёт поставщик tracking.

NameСвойство
# Name
C#
public StringName Name { get; set; }

Имя pose, изначально пустое; например grip или aim в данных tracker. Это не имя tracker и не действие кнопки. Setter меняет только поле: переименование объекта не переносит запись в карте XRPositionalTracker. Не переименовывайте pose, которой управляет поставщик.

TrackingConfidenceСвойство
# TrackingConfidence
C#
public XRPose.TrackingConfidenceEnum TrackingConfidence { get; set; }

Оценка confidence поставщика, изначально None. None, Low и High описывают заявленное качество, но setter не проверяет устройство и не меняет HasTrackingData. Высокий confidence не заменяет проверку актуальности pose.

TransformСвойство
# Transform
C#
public Transform3D Transform { get; set; }

Сырой трансформ pose в пространстве tracking поставщика, изначально Identity. Setter сохраняет значение без добавления WorldScale, reference frame или игрового origin. Getter возвращает Transform3D по значению: изменение копии не меняет pose. Сам трансформ не подтверждает актуальность tracking.

Методы13

GetAdjustedTransformTransform3D
# GetAdjustedTransform
C#
public Transform3D GetAdjustedTransform();

Возвращает копию Transform: сначала умножает только позицию на XRServer.WorldScale, затем слева умножает результат на XRServer.GetReferenceFrame(). Не включает XRServer.WorldOrigin или GlobalTransform игрового XROrigin3D. Не меняет исходную pose и скорости, не проверяет HasTrackingData. Для мирового трансформа примените origin.GlobalTransform к результату один раз.

Возвращает Transform3D

Копия после масштаба позиции и reference frame, без игрового origin и без проверки tracking.

GetAngularVelocityVector3
# GetAngularVelocity
C#
public Vector3 GetAngularVelocity();

Возвращает сохранённый Vector3 угловой скорости, изначально нулевой. Не вычисляет скорость из Transform и не применяет reference frame.

Возвращает Vector3

Сохранённый Vector3 угловой скорости без преобразования.

GetHasTrackingDatabool
# GetHasTrackingData
C#
public bool GetHasTrackingData();

Возвращает сохранённый bool, изначально false. Сам getter не запрашивает обновление устройства и не проверяет confidence.

Возвращает bool

Сохранённый флаг; изначально false.

GetLinearVelocityVector3
# GetLinearVelocity
C#
public Vector3 GetLinearVelocity();

Возвращает сохранённый Vector3 линейной скорости без преобразования в игровое пространство. Изначально нулевой; флаг tracking не проверяется.

Возвращает Vector3

Сохранённый Vector3 линейной скорости без преобразования.

GetNameStringName
# GetName
C#
public StringName GetName();

Возвращает сохранённое имя pose, изначально пустое. Это не имя tracker left_hand/right_hand.

Возвращает StringName

Имя pose, изначально пустое.

GetTrackingConfidenceXRPose.TrackingConfidenceEnum
# GetTrackingConfidence
C#
public XRPose.TrackingConfidenceEnum GetTrackingConfidence();

Возвращает сохранённую оценку, изначально None. Не заменяет HasTrackingData и не измеряет качество самостоятельно.

Возвращает XRPose.TrackingConfidenceEnum

Сохранённая оценка confidence, изначально None.

GetTransformTransform3D
# GetTransform
C#
public Transform3D GetTransform();

Возвращает сырую копию Transform в пространстве tracking, без масштаба и игрового origin. Сохранённые координаты доступны и при HasTrackingData=false.

Возвращает Transform3D

Сырой Transform3D по значению; не мировой трансформ Entity.

SetAngularVelocityvoid
# SetAngularVelocity
C#
public void SetAngularVelocity(Vector3 velocity);

Сохранённая угловая скорость, изначально Vector3.Zero. Записывается отдельно от Transform и не вычисляется из вращения. GetAdjustedTransform не преобразует скорость в игровое пространство; не считайте её автоматически мировой скоростью.

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

Сохраняемый Vector3 угловой скорости в соглашениях поставщика, без автоматического преобразования.

SetHasTrackingDatavoid
# SetHasTrackingData
C#
public void SetHasTrackingData(bool hasTrackingData);

Флаг наличия tracking, изначально false. Setter меняет только флаг: не очищает трансформ, скорости или confidence и не проверяет устройство. У pose поставщика не изменяйте его игровым кодом. При чтении проверяйте флаг до использования сохранённых координат.

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

Новый флаг наличия данных; не очищает остальные поля и не проверяет устройство.

SetLinearVelocityvoid
# SetLinearVelocity
C#
public void SetLinearVelocity(Vector3 velocity);

Сохранённая линейная скорость, изначально Vector3.Zero. Setter не вычисляет её из трансформов и не применяет WorldScale/reference frame. GetAdjustedTransform также не преобразует это поле. Соглашения пространства и единиц задаёт поставщик tracking.

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

Сохраняемый Vector3 линейной скорости в соглашениях поставщика, без автоматического преобразования.

SetNamevoid
# SetName
C#
public void SetName(StringName name);

Имя pose, изначально пустое; например grip или aim в данных tracker. Это не имя tracker и не действие кнопки. Setter меняет только поле: переименование объекта не переносит запись в карте XRPositionalTracker. Не переименовывайте pose, которой управляет поставщик.

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

Имя pose в данных поставщика; не переносит запись tracker при изменении.

SetTrackingConfidencevoid
# SetTrackingConfidence
C#
public void SetTrackingConfidence(XRPose.TrackingConfidenceEnum trackingConfidence);

Оценка confidence поставщика, изначально None. None, Low и High описывают заявленное качество, но setter не проверяет устройство и не меняет HasTrackingData. Высокий confidence не заменяет проверку актуальности pose.

Параметры
ИмяТипПо умолчанию
trackingConfidenceXRPose.TrackingConfidenceEnum—
trackingConfidence

None, Low или High; изменение оценки не включает tracking.

SetTransformvoid
# SetTransform
C#
public void SetTransform(Transform3D transform);

Сырой трансформ pose в пространстве tracking поставщика, изначально Identity. Setter сохраняет значение без добавления WorldScale, reference frame или игрового origin. Getter возвращает Transform3D по значению: изменение копии не меняет pose. Сам трансформ не подтверждает актуальность tracking.

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

Сырой трансформ в пространстве tracking; игровой origin добавляется отдельно.

XRPose.TrackingConfidenceEnum

ЗначениеОписание
High = 2

Информация об отслеживании считается точной и актуальной.

Low = 1

Информация об отслеживании может быть неточной или оценочной. Например, при отслеживании изнутри наружу это будет означать, что контроллер может быть (частично) скрыт.

None = 0

Для этой позы информация об отслеживании отсутствует.

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

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

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

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