XRPose
Трансформ, скорости и флаги одной pose tracking.
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:
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Конструктор
public XRPose();Создаёт отдельный объект: пустое Name, Transform=Identity, обе скорости нулевые, HasTrackingData=false, TrackingConfidence=None. Не создаёт запись в tracker и не начинает tracking. Созданный вами экземпляр принадлежит вам; заимствованные pose из tracker имеют другой жизненный цикл.
Свойства6
AngularVelocityСвойство
public Vector3 AngularVelocity { get; set; }Сохранённая угловая скорость, изначально Vector3.Zero. Записывается отдельно от Transform и не вычисляется из вращения. GetAdjustedTransform не преобразует скорость в игровое пространство; не считайте её автоматически мировой скоростью.
HasTrackingDataСвойство
public bool HasTrackingData { get; set; }Флаг наличия tracking, изначально false. Setter меняет только флаг: не очищает трансформ, скорости или confidence и не проверяет устройство. У pose поставщика не изменяйте его игровым кодом. При чтении проверяйте флаг до использования сохранённых координат.
LinearVelocityСвойство
public Vector3 LinearVelocity { get; set; }Сохранённая линейная скорость, изначально Vector3.Zero. Setter не вычисляет её из трансформов и не применяет WorldScale/reference frame. GetAdjustedTransform также не преобразует это поле. Соглашения пространства и единиц задаёт поставщик tracking.
NameСвойство
public StringName Name { get; set; }Имя pose, изначально пустое; например grip или aim в данных tracker. Это не имя tracker и не действие кнопки. Setter меняет только поле: переименование объекта не переносит запись в карте XRPositionalTracker. Не переименовывайте pose, которой управляет поставщик.
TrackingConfidenceСвойство
public XRPose.TrackingConfidenceEnum TrackingConfidence { get; set; }Оценка confidence поставщика, изначально None. None, Low и High описывают заявленное качество, но setter не проверяет устройство и не меняет HasTrackingData. Высокий confidence не заменяет проверку актуальности pose.
TransformСвойство
public Transform3D Transform { get; set; }Сырой трансформ pose в пространстве tracking поставщика, изначально Identity. Setter сохраняет значение без добавления WorldScale, reference frame или игрового origin. Getter возвращает Transform3D по значению: изменение копии не меняет pose. Сам трансформ не подтверждает актуальность tracking.
Методы13
GetAdjustedTransformTransform3D
public Transform3D GetAdjustedTransform();Возвращает копию Transform: сначала умножает только позицию на XRServer.WorldScale, затем слева умножает результат на XRServer.GetReferenceFrame(). Не включает XRServer.WorldOrigin или GlobalTransform игрового XROrigin3D. Не меняет исходную pose и скорости, не проверяет HasTrackingData. Для мирового трансформа примените origin.GlobalTransform к результату один раз.
Transform3DКопия после масштаба позиции и reference frame, без игрового origin и без проверки tracking.
GetAngularVelocityVector3
public Vector3 GetAngularVelocity();Возвращает сохранённый Vector3 угловой скорости, изначально нулевой. Не вычисляет скорость из Transform и не применяет reference frame.
Vector3Сохранённый Vector3 угловой скорости без преобразования.
GetHasTrackingDatabool
public bool GetHasTrackingData();Возвращает сохранённый bool, изначально false. Сам getter не запрашивает обновление устройства и не проверяет confidence.
boolСохранённый флаг; изначально false.
GetLinearVelocityVector3
public Vector3 GetLinearVelocity();Возвращает сохранённый Vector3 линейной скорости без преобразования в игровое пространство. Изначально нулевой; флаг tracking не проверяется.
Vector3Сохранённый Vector3 линейной скорости без преобразования.
GetNameStringName
public StringName GetName();Возвращает сохранённое имя pose, изначально пустое. Это не имя tracker left_hand/right_hand.
StringNameИмя pose, изначально пустое.
GetTrackingConfidenceXRPose.TrackingConfidenceEnum
public XRPose.TrackingConfidenceEnum GetTrackingConfidence();Возвращает сохранённую оценку, изначально None. Не заменяет HasTrackingData и не измеряет качество самостоятельно.
XRPose.TrackingConfidenceEnumСохранённая оценка confidence, изначально None.
GetTransformTransform3D
public Transform3D GetTransform();Возвращает сырую копию Transform в пространстве tracking, без масштаба и игрового origin. Сохранённые координаты доступны и при HasTrackingData=false.
Transform3DСырой Transform3D по значению; не мировой трансформ Entity.
SetAngularVelocityvoid
public void SetAngularVelocity(Vector3 velocity);Сохранённая угловая скорость, изначально Vector3.Zero. Записывается отдельно от Transform и не вычисляется из вращения. GetAdjustedTransform не преобразует скорость в игровое пространство; не считайте её автоматически мировой скоростью.
| Имя | Тип | По умолчанию |
|---|---|---|
velocity | Vector3 | — |
velocityСохраняемый Vector3 угловой скорости в соглашениях поставщика, без автоматического преобразования.
SetHasTrackingDatavoid
public void SetHasTrackingData(bool hasTrackingData);Флаг наличия tracking, изначально false. Setter меняет только флаг: не очищает трансформ, скорости или confidence и не проверяет устройство. У pose поставщика не изменяйте его игровым кодом. При чтении проверяйте флаг до использования сохранённых координат.
| Имя | Тип | По умолчанию |
|---|---|---|
hasTrackingData | bool | — |
hasTrackingDataНовый флаг наличия данных; не очищает остальные поля и не проверяет устройство.
SetLinearVelocityvoid
public void SetLinearVelocity(Vector3 velocity);Сохранённая линейная скорость, изначально Vector3.Zero. Setter не вычисляет её из трансформов и не применяет WorldScale/reference frame. GetAdjustedTransform также не преобразует это поле. Соглашения пространства и единиц задаёт поставщик tracking.
| Имя | Тип | По умолчанию |
|---|---|---|
velocity | Vector3 | — |
velocityСохраняемый Vector3 линейной скорости в соглашениях поставщика, без автоматического преобразования.
SetNamevoid
public void SetName(StringName name);Имя pose, изначально пустое; например grip или aim в данных tracker. Это не имя tracker и не действие кнопки. Setter меняет только поле: переименование объекта не переносит запись в карте XRPositionalTracker. Не переименовывайте pose, которой управляет поставщик.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
nameИмя pose в данных поставщика; не переносит запись tracker при изменении.
SetTrackingConfidencevoid
public void SetTrackingConfidence(XRPose.TrackingConfidenceEnum trackingConfidence);Оценка confidence поставщика, изначально None. None, Low и High описывают заявленное качество, но setter не проверяет устройство и не меняет HasTrackingData. Высокий confidence не заменяет проверку актуальности pose.
| Имя | Тип | По умолчанию |
|---|---|---|
trackingConfidence | XRPose.TrackingConfidenceEnum | — |
trackingConfidenceNone, Low или High; изменение оценки не включает tracking.
SetTransformvoid
public void SetTransform(Transform3D transform);Сырой трансформ pose в пространстве tracking поставщика, изначально Identity. Setter сохраняет значение без добавления WorldScale, reference frame или игрового origin. Getter возвращает Transform3D по значению: изменение копии не меняет pose. Сам трансформ не подтверждает актуальность tracking.
| Имя | Тип | По умолчанию |
|---|---|---|
transform | Transform3D | — |
transformСырой трансформ в пространстве tracking; игровой origin добавляется отдельно.
XRPose.TrackingConfidenceEnum
| Значение | Описание |
|---|---|
High = 2 | Информация об отслеживании считается точной и актуальной. |
Low = 1 | Информация об отслеживании может быть неточной или оценочной. Например, при отслеживании изнутри наружу это будет означать, что контроллер может быть (частично) скрыт. |
None = 0 | Для этой позы информация об отслеживании отсутствует. |