XRBodyTracker
Суставы тела, возможности и отдельная валидность данных.
XRBodyTracker хранит скелетные данные поставщика, не решает IK по отдельным трекерам. Наличие объекта не подтверждает аппаратное tracking. Новый экземпляр имеет Type=Body, Hand=Unknown, HasTrackingData=false и BodyFlags=0.
Подтверждён дефект: начальные JointFlags не инициализированы. Собственный поставщик должен заполнить флаги и трансформы нужных суставов до включения данных; игровой код не должен обходить проверку ручным true. В текущем SDK 87 суставов, а Joint.Max — граница.
Проверяйте HasTrackingData и валидность каждого используемого сустава. BodyFlags описывает поддерживаемые области и не заменяет JointFlags. GetJointTransform возвращает копию в пространстве поставщика; для локальных костей нужна отдельная работа с Root/родительскими суставами. Потеря данных сохраняет старые значения.
Проверены искусственные данные и законченный reader относительно Root, а не реальный поставщик или полный аватар. Пример, роли трекеров и диагностика: отслеживание тела.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
XRBodyTrackerКонструктор
public XRBodyTracker();Создаёт контейнер тела: Type=Body, Hand=Unknown, HasTrackingData=false, BodyFlags=0. Дефект: начальные JointFlags не инициализированы. Собственный provider должен заполнить их до включения данных. Не обнаруживает тело и не регистрирует устройство автоматически.
Свойства2
BodyFlagsСвойство
public XRBodyTracker.BodyFlagsEnum BodyFlags { get; set; }Побитовая маска поддерживаемых областей: UpperBodySupported, LowerBodySupported, HandsSupported; изначально 0. Метаданные возможностей, не флаги валидности суставов. Setter не вычисляет HasTrackingData или наличие суставов.
HasTrackingDataСвойство
public bool HasTrackingData { get; set; }Флаг данных тела, изначально false. Setter не заполняет суставы, не меняет BodyFlags и не создаёт positional pose default. При false значения суставов сохраняются, но не являются текущими. Игровой код читает состояние поставщика, не включает пустой контейнер.
Методы8
GetBodyFlagsXRBodyTracker.BodyFlagsEnum
public XRBodyTracker.BodyFlagsEnum GetBodyFlags();Читает сохранённую маску возможностей. Ненулевое значение не подтверждает текущие данные суставов.
XRBodyTracker.BodyFlagsEnumМаска возможностей, изначально 0.
GetHasTrackingDatabool
public bool GetHasTrackingData();Возвращает флаг тела в целом; дополнительно проверяйте каждый нужный сустав и его родителя.
boolСохранённый bool тела.
GetJointFlagsXRBodyTracker.JointFlags
public XRBodyTracker.JointFlags GetJointFlags(XRBodyTracker.Joint joint);Читает маску Position/Orientation VALID и TRACKED. До заполнения поставщиком значения не гарантированы из-за дефекта конструктора. TRACKED не заменяет VALID; выберите политику для оценённых pose.
| Имя | Тип | По умолчанию |
|---|---|---|
joint | XRBodyTracker.Joint | — |
jointСустав XRBodyTracker.Joint; Max — граница, не допустимый сустав. Проверьте диапазон до вызова.
XRBodyTracker.JointFlagsМаска сустава; до инициализации не гарантирована.
GetJointTransformTransform3D
public Transform3D GetJointTransform(XRBodyTracker.Joint joint);Возвращает копию трансформа сустава в пространстве поставщика без проверки флагов. Не считайте его автоматически мировым или локальным относительно кости-родителя. Для сопоставления нужны согласованные трансформы Root и родителей.
| Имя | Тип | По умолчанию |
|---|---|---|
joint | XRBodyTracker.Joint | — |
jointСустав XRBodyTracker.Joint; Max — граница, не допустимый сустав. Проверьте диапазон до вызова.
Transform3DTransform3D по значению в пространстве поставщика.
SetBodyFlagsvoid
public void SetBodyFlags(XRBodyTracker.BodyFlagsEnum flags);Побитовая маска поддерживаемых областей: UpperBodySupported, LowerBodySupported, HandsSupported; изначально 0. Метаданные возможностей, не флаги валидности суставов. Setter не вычисляет HasTrackingData или наличие суставов.
| Имя | Тип | По умолчанию |
|---|---|---|
flags | XRBodyTracker.BodyFlagsEnum | — |
flagsМаска поддерживаемых областей тела, не валидность суставов.
SetHasTrackingDatavoid
public void SetHasTrackingData(bool hasData);Флаг данных тела, изначально false. Setter не заполняет суставы, не меняет BodyFlags и не создаёт positional pose default. При false значения суставов сохраняются, но не являются текущими. Игровой код читает состояние поставщика, не включает пустой контейнер.
| Имя | Тип | По умолчанию |
|---|---|---|
hasData | bool | — |
hasDataФлаг данных тела в целом; не делает все суставы валидными.
SetJointFlagsvoid
public void SetJointFlags(XRBodyTracker.Joint joint, XRBodyTracker.JointFlags flags);Сохраняет маску одного сустава, не меняя трансформ, BodyFlags или HasTrackingData. API поставщика, не команда включения аппаратного tracking.
| Имя | Тип | По умолчанию |
|---|---|---|
joint | XRBodyTracker.Joint | — |
flags | XRBodyTracker.JointFlags | — |
jointСустав XRBodyTracker.Joint; Max — граница, не допустимый сустав. Проверьте диапазон до вызова.
flagsМаска валидности/tracking выбранного сустава; не BodyFlags.
SetJointTransformvoid
public void SetJointTransform(XRBodyTracker.Joint joint, Transform3D transform);Сохраняет трансформ без пересчёта флагов или остальных суставов. Не выполняет IK, не создаёт pose default и не перемещает модель аватара.
| Имя | Тип | По умолчанию |
|---|---|---|
joint | XRBodyTracker.Joint | — |
transform | Transform3D | — |
jointСустав XRBodyTracker.Joint; Max — граница, не допустимый сустав. Проверьте диапазон до вызова.
transformТрансформ в согласованном пространстве поставщика. Не локальная pose кости, если provider явно не определил такое соглашение.
XRBodyTracker.BodyFlagsEnum
| Значение | Описание |
|---|---|
HandsSupported = 4 | Поддерживается отслеживание рук. СОВМЕСТНАЯ РОТА |
LowerBodySupported = 2 | Поддерживается отслеживание нижней части тела. |
UpperBodySupported = 1 | Поддерживается отслеживание верхней части тела. |
XRBodyTracker.Joint
| Значение | Описание |
|---|---|
Chest = 3 | Грудной сустав. |
Head = 6 | Головной сустав. |
HeadTip = 7 | Сустав кончика головы. СОВМЕСТНЫЙ СЛУЧАЙ |
Hips = 1 | Тазобедренный сустав. |
LeftFoot = 16 | Сустав левой стопы. |
LeftFootTwist = 81 | Поворотный сустав левой стопы. СОВМЕСТНЫЙ ТЕЛЕФОН |
LeftHand = 22 | Сустав левой руки. |
LeftHeel = 82 | Левый пяточный сустав. |
LeftIndexFingerMetacarpal = 29 | Пястно-запястный сустав указательного пальца левой руки. |
LeftIndexFingerPhalanxDistal = 32 | Дистальный сустав фаланги указательного пальца левой руки. |
LeftIndexFingerPhalanxIntermediate = 31 | Промежуточный сустав фаланги указательного пальца левой руки. |
LeftIndexFingerPhalanxProximal = 30 | Проксимальный сустав фаланги указательного пальца левой руки. |
LeftIndexFingerTip = 33 | Кончик сустава указательного пальца левой руки. |
LeftLowerArm = 10 | Левый нижний сустав руки. СОВМЕСТНАЯ ЧАСТЬ |
LeftLowerLeg = 15 | Сустав левой голени. СОВМЕСТНЫЕ ПРАКТИЧЕСКИЕ СВЯЗИ |
LeftMiddleFingerMetacarpal = 34 | Пястный сустав среднего пальца левой руки. |
LeftMiddleFingerPhalanxDistal = 37 | Дистальный сустав фаланги среднего пальца левой руки. |
LeftMiddleFingerPhalanxIntermediate = 36 | Промежуточный сустав фаланги среднего пальца левой руки. |
LeftMiddleFingerPhalanxProximal = 35 | Проксимальный сустав фаланги среднего пальца левой руки. |
LeftMiddleFingerTip = 38 | Кончик сустава среднего пальца левой руки. |
LeftMiddleFoot = 83 | Левый средний сустав стопы. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ |
LeftPalm = 23 | Левый ладонный сустав. |
LeftPinkyFingerMetacarpal = 44 | Пястно-запястный сустав мизинца левой руки. |
LeftPinkyFingerPhalanxDistal = 47 | Дистальный сустав фаланги мизинца левой руки. |
LeftPinkyFingerPhalanxIntermediate = 46 | Промежуточный сустав фаланги мизинца левой руки. |
LeftPinkyFingerPhalanxProximal = 45 | Проксимальный сустав фаланги мизинца левой руки. |
LeftPinkyFingerTip = 48 | Сустав кончика мизинца левой руки. СОВМЕСТНАЯ ЧАСТЬ |
LeftRingFingerMetacarpal = 39 | Пястный сустав безымянного пальца левой руки. |
LeftRingFingerPhalanxDistal = 42 | Дистальный сустав фаланги безымянного пальца левой руки. |
LeftRingFingerPhalanxIntermediate = 41 | Промежуточный сустав фаланги безымянного пальца левой руки. |
LeftRingFingerPhalanxProximal = 40 | Проксимальный сустав фаланги безымянного пальца левой руки. |
LeftRingFingerTip = 43 | Кончик безымянного пальца левой руки. |
LeftScapula = 77 | Левый лопаточный сустав. |
LeftShoulder = 8 | Левый плечевой сустав. СОВМЕСТНАЯ ПРАКТИЧЕСКАЯ РАБОТА |
LeftThumbMetacarpal = 25 | Пястно-запястный сустав большого пальца левой руки. |
LeftThumbPhalanxDistal = 27 | Дистальный сустав фаланги большого пальца левой руки. |
LeftThumbPhalanxProximal = 26 | Проксимальный сустав фаланги большого пальца левой руки. |
LeftThumbTip = 28 | Сустав большого пальца левой руки. |
LeftToes = 17 | Сустав большого пальца левой ноги. |
LeftUpperArm = 9 | Левый верхний сустав руки. |
LeftUpperLeg = 14 | Левый верхний сустав ноги. |
LeftWrist = 24 | Левый лучезапястный сустав. |
LeftWristTwist = 78 | Поворотный сустав левого запястья. |
LowerChest = 76 | Нижний грудной сустав. |
Max = 87 | Представляет размер перечисления |
Neck = 5 | Шейный сустав. СОВМЕСТНО |
RightFoot = 20 | Сустав правой стопы. СОВМЕСТНЫЕ ПРЕКРАЩЕНИЯ |
RightFootTwist = 84 | Поворотный сустав правой стопы. |
RightHand = 49 | Сустав правой руки. |
RightHeel = 85 | Правый пяточный сустав. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ |
RightIndexFingerMetacarpal = 56 | Пястно-запястный сустав указательного пальца правой руки. |
RightIndexFingerPhalanxDistal = 59 | Дистальный сустав фаланги указательного пальца правой руки. |
RightIndexFingerPhalanxIntermediate = 58 | Промежуточный сустав фаланги указательного пальца правой руки. |
RightIndexFingerPhalanxProximal = 57 | Проксимальный сустав фаланги указательного пальца правой руки. |
RightIndexFingerTip = 60 | Кончик сустава указательного пальца правой руки. |
RightLowerArm = 13 | Правый нижний сустав руки. |
RightLowerLeg = 19 | Правый голеностопный сустав. СОВМЕСТНАЯ ПРАКТИКА |
RightMiddleFingerMetacarpal = 61 | Пястный сустав среднего пальца правой руки. |
RightMiddleFingerPhalanxDistal = 64 | Дистальный сустав фаланги среднего пальца правой руки. |
RightMiddleFingerPhalanxIntermediate = 63 | Промежуточный сустав фаланги среднего пальца правой руки. |
RightMiddleFingerPhalanxProximal = 62 | Проксимальный сустав фаланги среднего пальца правой руки. |
RightMiddleFingerTip = 65 | Кончик сустава среднего пальца правой руки. |
RightMiddleFoot = 86 | Правый средний сустав стопы. |
RightPalm = 50 | Правый ладонный сустав. СОВМЕСТНАЯ СВЯЗЬ |
RightPinkyFingerMetacarpal = 71 | Пястно-запястный сустав мизинца правой руки. |
RightPinkyFingerPhalanxDistal = 74 | Дистальный сустав фаланги мизинца правой руки. |
RightPinkyFingerPhalanxIntermediate = 73 | Промежуточный сустав фаланги мизинца правой руки. |
RightPinkyFingerPhalanxProximal = 72 | Проксимальный сустав фаланги мизинца правой руки. |
RightPinkyFingerTip = 75 | Сустав кончика мизинца правой руки. |
RightRingFingerMetacarpal = 66 | Пястно-запястный сустав безымянного пальца правой руки. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ_ФИНАЖЕР_ФАЛАНКС_ПРОКСМАЛЬ |
RightRingFingerPhalanxDistal = 69 | Дистальный сустав фаланги безымянного пальца правой руки. |
RightRingFingerPhalanxIntermediate = 68 | Промежуточный сустав фаланги безымянного пальца правой руки. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ_ФИНАЖЕР_ФАЛАНКС_ПИСАНИЕ |
RightRingFingerPhalanxProximal = 67 | Проксимальный сустав фаланги безымянного пальца правой руки. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ_ФИНГЕР_ФАЛАНКС_ИНТЕРМОДЕНТ |
RightRingFingerTip = 70 | Кончик безымянного пальца правой руки. |
RightScapula = 79 | Правый лопаточный сустав. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ |
RightShoulder = 11 | Правый плечевой сустав. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ |
RightThumbMetacarpal = 52 | Пястно-запястный сустав большого пальца правой руки. |
RightThumbPhalanxDistal = 54 | Дистальный сустав фаланги большого пальца правой руки. СОВМЕСТНАЯ ПРЕКРАЩЕНИЕ |
RightThumbPhalanxProximal = 53 | Проксимальный сустав фаланги большого пальца правой руки. |
RightThumbTip = 55 | Кончик большого пальца правой руки. |
RightToes = 21 | Сустав большого пальца правой ноги. |
RightUpperArm = 12 | Правый верхний сустав руки. |
RightUpperLeg = 18 | Правый верхний сустав ноги. |
RightWrist = 51 | Правый лучезапястный сустав. |
RightWristTwist = 80 | Поворотный сустав правого запястья. |
Root = 0 | Корневой сустав. СОВМЕСТНЫЕ СВЯЗИ |
Spine = 2 | Позвоночник. СОВМЕСТНАЯ СВЯЗЬ |
UpperChest = 4 | Верхний грудной сустав. |
XRBodyTracker.JointFlags
| Значение | Описание |
|---|---|
OrientationTracked = 2 | Ориентация сустава активно отслеживается. Не может быть установлена, если отслеживание временно потеряно. |
OrientationValid = 1 | Данные об ориентации соединения верны. |
PositionTracked = 8 | Положение сустава активно отслеживается. Не может быть установлено, если отслеживание временно потеряно. |
PositionValid = 4 | Данные о положении сустава верны. |