reckfellENGINE

XRHandTracker

Данные суставов руки и отдельные флаги валидности.

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

XRHandTracker хранит 26 суставов руки. Отдельно проверяйте наличие tracker, HasTrackingData всей руки и флаги конкретных суставов. VALID и TRACKED различаются; пригодная оценка не обязательно непосредственно отслеживается. Новая рука имеет Type=Hand и Hand=Left, но не подключает устройство.

Подтверждён дефект конструктора: начальные флаги суставов не инициализированы. Собственный поставщик должен заполнить их до включения HasTrackingData. Игровой код читает данные реального поставщика и не меняет флаги для обхода проверки. При потере данных сохранённые трансформы и скорости не очищаются.

В OpenXR трансформы суставов заданы в tracking space с поправкой ориентации Humanoid, а не относительно предыдущей кости. Радиус — метры при PositionValid. Getter не проверяет пригодность данных за вас. HandTrackingSource=Unknown не доказывает оптический источник; выбор источника не создаёт жесты или действия.

Проверены искусственные данные и пример pinch, не реальное tracking или анимация модели. Полный пример, настройки и диагностика: отслеживание рук.

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

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

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

Создаёт контейнер руки: Type=Hand, Hand=Left, HasTrackingData=false, источник Unknown. Дефект: массив флагов суставов не инициализирован. Новая рука не является валидным поставщиком: до включения данных собственный provider должен заполнить флаги и значения. Не регистрирует устройство автоматически.

Свойства2

HandTrackingSourceСвойство
# HandTrackingSource
C#
public XRHandTracker.HandTrackingSourceEnum HandTrackingSource { get; set; }

Источник данных, изначально Unknown. Unobstructed и Controller описывают сообщённый тип, NotTracked — отсутствие tracking; доступность зависит от поставщика. Unknown не доказывает оптическое tracking. Setter не меняет HasTrackingData или флаги суставов.

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

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

Методы14

GetHandJointAngularVelocityVector3
# GetHandJointAngularVelocity
C#
public Vector3 GetHandJointAngularVelocity(XRHandTracker.HandJoint joint);

Возвращает сохранённую угловую скорость. Для использования нужен AngularVelocityValid; сам getter не применяет reference frame или WorldScale.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

Возвращает Vector3

Сохранённая угловая скорость; проверяйте флаг.

GetHandJointFlagsXRHandTracker.HandJointFlags
# GetHandJointFlags
C#
public XRHandTracker.HandJointFlags GetHandJointFlags(XRHandTracker.HandJoint joint);

Читает битовую маску валидности и tracking сустава. До инициализации поставщиком возможны случайные значения из-за дефекта конструктора. VALID не равен TRACKED. Проверяйте HasTrackingData и нужные биты; для скоростей есть отдельные биты.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

Возвращает XRHandTracker.HandJointFlags

Маска сустава; до инициализации значения не гарантированы.

GetHandJointLinearVelocityVector3
# GetHandJointLinearVelocity
C#
public Vector3 GetHandJointLinearVelocity(XRHandTracker.HandJoint joint);

Возвращает сохранённую линейную скорость без проверки LinearVelocityValid и без преобразования в игровой мир. Не используйте оставшееся значение после потери tracking.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

Возвращает Vector3

Сохранённая линейная скорость; проверяйте флаг.

GetHandJointRadiusfloat
# GetHandJointRadius
C#
public float GetHandJointRadius(XRHandTracker.HandJoint joint);

Читает сохранённый радиус, изначально 0. Для OpenXR единицы — метры и радиус имеет смысл только при PositionValid. Getter не проверяет флаг и не переводит значение через WorldScale.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

Возвращает float

Сохранённый float радиуса; не проверка PositionValid.

GetHandJointTransformTransform3D
# GetHandJointTransform
C#
public Transform3D GetHandJointTransform(XRHandTracker.HandJoint joint);

Возвращает Transform3D по значению без проверки флагов. В OpenXR это пространство tracking с поправкой ориентации для Humanoid, не локальный трансформ кости и не мир. Для позиции проверяйте PositionValid, для вращения OrientationValid. Сохранённые данные могут быть неактуальны.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

Возвращает Transform3D

Копия трансформа сустава, не локальная pose кости модели.

GetHandTrackingSourceXRHandTracker.HandTrackingSourceEnum
# GetHandTrackingSource
C#
public XRHandTracker.HandTrackingSourceEnum GetHandTrackingSource();

Возвращает сохранённый источник. Не определяйте его по имени runtime; Unknown оставляйте неизвестным.

Возвращает XRHandTracker.HandTrackingSourceEnum

Сохранённый источник, изначально Unknown.

GetHasTrackingDatabool
# GetHasTrackingData
C#
public bool GetHasTrackingData();

Читает флаг всей руки. Дополнительно нужны флаги конкретного сустава; одно true не подтверждает валидность всех 26 суставов.

Возвращает bool

Флаг всей руки; не подтверждает каждый сустав.

SetHandJointAngularVelocityvoid
# SetHandJointAngularVelocity
C#
public void SetHandJointAngularVelocity(XRHandTracker.HandJoint joint, Vector3 angularVelocity);

Сохраняет угловую скорость без вычисления из вращения и без изменения AngularVelocityValid. Соглашения пространства задаёт поставщик.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
angularVelocityVector3—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

angularVelocity

Угловая скорость в соглашениях поставщика; флаг задаётся отдельно.

SetHandJointFlagsvoid
# SetHandJointFlags
C#
public void SetHandJointFlags(XRHandTracker.HandJoint joint, XRHandTracker.HandJointFlags flags);

Записывает маску одного сустава; не меняет трансформ, скорости или HasTrackingData. Для собственного поставщика явно инициализируйте все нужные суставы до публикации данных. Не исправляйте этим состояние настоящей руки из игрового кода.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
flagsXRHandTracker.HandJointFlags—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

flags

Маска HandJointFlags для одного сустава; передавайте точные биты пригодности данных.

SetHandJointLinearVelocityvoid
# SetHandJointLinearVelocity
C#
public void SetHandJointLinearVelocity(XRHandTracker.HandJoint joint, Vector3 linearVelocity);

Сохраняет линейную скорость отдельно от трансформа и флагов. Не вычисляет её по предыдущему кадру и не включает LinearVelocityValid.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
linearVelocityVector3—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

linearVelocity

Линейная скорость в соглашениях поставщика; флаг задаётся отдельно.

SetHandJointRadiusvoid
# SetHandJointRadius
C#
public void SetHandJointRadius(XRHandTracker.HandJoint joint, float radius);

Сохраняет float радиуса без проверки диапазона или изменения флагов. Поставщик должен передать конечное физически корректное значение; getter не подтверждает его пригодность.

Параметры
ИмяТипПо умолчанию
jointXRHandTracker.HandJoint—
radiusfloat—
joint

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

radius

Конечный физический радиус; в OpenXR метры. Setter сам не проверяет диапазон.

SetHandJointTransformvoid
# SetHandJointTransform
C#
public void SetHandJointTransform(XRHandTracker.HandJoint joint, Transform3D transform);

Сохраняет трансформ сустава без пересчёта флагов или скоростей. Это API поставщика, не команда перемещения кости модели.

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

Один из 26 HandJoint: Palm…PinkyFingerTip. Max — граница, не допустимый сустав.

transform

Трансформ в пространстве поставщика; не применяйте игровой origin заранее.

SetHandTrackingSourcevoid
# SetHandTrackingSource
C#
public void SetHandTrackingSource(XRHandTracker.HandTrackingSourceEnum source);

Источник данных, изначально Unknown. Unobstructed и Controller описывают сообщённый тип, NotTracked — отсутствие tracking; доступность зависит от поставщика. Unknown не доказывает оптическое tracking. Setter не меняет HasTrackingData или флаги суставов.

Параметры
ИмяТипПо умолчанию
sourceXRHandTracker.HandTrackingSourceEnum—
source

Сообщённый источник; не способ включить устройство или tracking.

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

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

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

Флаг данных всей руки. Не включает валидность отдельных суставов.

XRHandTracker.HandJoint

ЗначениеОписание
IndexFingerMetacarpal = 6

Пястно-запястный сустав указательного пальца.

IndexFingerPhalanxDistal = 9

Дистальный сустав фаланги указательного пальца.

IndexFingerPhalanxIntermediate = 8

Промежуточный сустав фаланги указательного пальца.

IndexFingerPhalanxProximal = 7

Проксимальный сустав фаланги указательного пальца.

IndexFingerTip = 10

Кончик указательного пальца.

Max = 26

Представляет размер перечисления XRHandTracker.HandJoint.

MiddleFingerMetacarpal = 11

Пястно-запястный сустав среднего пальца.

MiddleFingerPhalanxDistal = 14

Дистальный сустав фаланги среднего пальца.

MiddleFingerPhalanxIntermediate = 13

Промежуточный сустав фаланги среднего пальца.

MiddleFingerPhalanxProximal = 12

Проксимальный сустав фаланги среднего пальца.

MiddleFingerTip = 15

Кончик среднего пальца.

Palm = 0

Ладонный сустав.

PinkyFingerMetacarpal = 21

Пястно-запястный сустав мизинца.

PinkyFingerPhalanxDistal = 24

Дистальный сустав фаланги мизинца.

PinkyFingerPhalanxIntermediate = 23

Промежуточный сустав фаланги мизинца.

PinkyFingerPhalanxProximal = 22

Проксимальный сустав фаланги мизинца.

PinkyFingerTip = 25

Сустав кончика мизинца.

RingFingerMetacarpal = 16

Пястно-запястный сустав безымянного пальца.

RingFingerPhalanxDistal = 19

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

RingFingerPhalanxIntermediate = 18

Промежуточный сустав фаланги безымянного пальца.

RingFingerPhalanxProximal = 17

Проксимальный сустав фаланги безымянного пальца.

RingFingerTip = 20

Сустав кончика безымянного пальца.

ThumbMetacarpal = 2

Пястно-запястный сустав большого пальца.

*РОД РОД_СОВМЕСТНЫЙ_ТОМБ_ФАЛАНЕКС_ПРОКСМАЛЬ

ThumbPhalanxDistal = 4

Дистальный сустав фаланги большого пальца.

ThumbPhalanxProximal = 3

Проксимальный сустав фаланги большого пальца.

ThumbTip = 5

Сустав кончика большого пальца.

Wrist = 1

Лучезапястный сустав.

XRHandTracker.HandJointFlags

ЗначениеОписание
AngularVelocityValid = 32

Данные об угловой скорости сустава кисти достоверны.

LinearVelocityValid = 16

Данные о линейной скорости сустава кисти достоверны.

OrientationTracked = 2

Ориентация сустава руки активно отслеживается. Не может быть установлена, если отслеживание временно потеряно.

OrientationValid = 1

Данные об ориентации сустава кисти достоверны.

PositionTracked = 8

Положение сустава руки активно отслеживается. Не может быть установлено, если отслеживание временно потеряно.

PositionValid = 4

Данные о положении сустава кисти достоверны.

XRHandTracker.HandTrackingSourceEnum

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

Источником данных отслеживания рук является контроллер, то есть положения суставов определяются на основе входных данных контроллера.

Max = 4

Представляет размер перечисления XRHandTracker.HandTrackingSourceEnum.

NotTracked = 3

Данные отслеживания руки не отслеживаются. Это означает, что рука закрыта, контроллер выключен или отслеживание не поддерживается для текущего типа ввода.

Unknown = 0

Источник данных отслеживания рук неизвестен.

Unobstructed = 1

Источник данных отслеживания рук не имеет препятствий, что означает, что используется точный метод отслеживания рук. К ним относятся оптическое отслеживание рук, перчатки с данными и т. д.

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

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

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

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