reckfellENGINE

XRBodyModifier3D

Применение данных тела к сопоставленным костям скелета.

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

XRBodyModifier3D работает под Skeleton3D с данными XRBodyTracker. По умолчанию BodyTracker=/user/body_tracker, BodyUpdate включает UpperBody/LowerBody/Hands, BoneUpdate=Full. Наличие модификатора не подключает устройство и не восстанавливает скелет по нескольким трекерам.

Имена и иерархия костей должны соответствовать данным. Full применяет относительные позиции и вращения; RotationOnly оставляет большинство базовых позиций, но Hips всё равно обновляется. MotionScale умножает позиции до относительного преобразования. BodyUpdate=0 не выключает все дополнительные суставы; Active=false отключает обработку полностью.

Смена BodyTracker выбирает новый источник на следующей обработке без пересопоставления, если Skeleton и BodyUpdate не менялись. При отсутствии tracker, HasTrackingData=false или невалидном Root обновление пропускается; сохранённая pose руки здесь не воспроизводится.

Skeleton3D временно применяет модификаторы и восстанавливает базовую pose. Читайте результат внутри ModificationProcessed. Этот выполненный пример сохраняет копию для диагностики; LastModified может устареть, если обработка не выполняется:

C#
using Reckfell;

public partial class BonePoseProbe : Entity
{
    [Export] public Skeleton3D Skeleton { get; set; } = null!;
    [Export] public SkeletonModifier3D Modifier { get; set; } = null!;
    [Export] public int Bone { get; set; }
    public Transform3D LastModified { get; private set; } = Transform3D.Identity;

    public override void _Ready()
    {
        if (Skeleton is null || Modifier is null || Modifier.GetSkeleton() != Skeleton
            || Bone < 0 || Bone >= Skeleton.GetBoneCount())
        {
            ReckfellApi.PushError("BonePoseProbe: assign a matching skeleton, modifier and bone index.");
            return;
        }
        Modifier.ModificationProcessed += Capture;
    }
    private void Capture() => LastModified = Skeleton.GetBonePose(Bone);
    public override void _ExitTree()
    {
        if (Modifier is not null && ReckfellObject.IsInstanceValid(Modifier))
            Modifier.ModificationProcessed -= Capture;
    }
}

Проверены 14 сценариев с настоящим Skeleton3D и искусственными данными всех 87 суставов. Диагностическая иерархия содержит Spine под Hips и остальные не-корневые кости под Root; это не оценка настоящего Humanoid-рига. Корректность частично невалидных родителей, skin weights, деформация, смешивание анимации, устройство и изображение не проверены. Согласованные валидные родительские суставы обязательны.

Reader и требования к поставщику: отслеживание тела.

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

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

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

Создаёт модификатор с BodyTracker=/user/body_tracker, всеми областями BodyUpdate и BoneUpdate=Full. Для работы нужен Skeleton3D-родитель, согласованные имена костей и поставщик XRBodyTracker. Один конструктор tracking не включает.

Свойства3

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

Имя XRBodyTracker, изначально /user/body_tracker. Setter сохраняет только строку, не подключает поставщика и не перестраивает карту костей. Смена имени выбирает другой источник для следующей обработки; карта костей определяется Skeleton и BodyUpdate, а не именем tracker.

BodyUpdateСвойство
# BodyUpdate
C#
public XRBodyModifier3D.BodyUpdateEnum BodyUpdate { get; set; }

Маска областей сопоставления: UpperBody, LowerBody, Hands; по умолчанию все три. Setter перестраивает карту костей, если модификатор в дереве. Это фильтр диапазонов основных суставов; Root и дополнительные суставы не исключаются универсально. Для полного выключения используйте унаследованное Active=false.

BoneUpdateСвойство
# BoneUpdate
C#
public XRBodyModifier3D.BoneUpdateEnum BoneUpdate { get; set; }

Режим костей, изначально Full. Full обновляет позиции и вращения; RotationOnly обновляет вращения, но Hips всё равно получает позицию. Проверяется диапазон enum. Не создаёт skin weights и не решает калибровку, масштаб или размещение аватара.

Методы6

GetBodyTrackerStringName
# GetBodyTracker
C#
public StringName GetBodyTracker();

Настроенное имя tracker, не подтверждение его наличия или данных.

Возвращает StringName

Имя поставщика, изначально /user/body_tracker.

GetBodyUpdateXRBodyModifier3D.BodyUpdateEnum
# GetBodyUpdate
C#
public XRBodyModifier3D.BodyUpdateEnum GetBodyUpdate();

Настроенная маска фильтра сопоставления, не возможности реального тела.

Возвращает XRBodyModifier3D.BodyUpdateEnum

Настроенная маска регионов модификатора.

GetBoneUpdateXRBodyModifier3D.BoneUpdateEnum
# GetBoneUpdate
C#
public XRBodyModifier3D.BoneUpdateEnum GetBoneUpdate();

Настроенный режим Full/RotationOnly; у RotationOnly сохраняется исключение позиции Hips.

Возвращает XRBodyModifier3D.BoneUpdateEnum

Настроенный режим костей, изначально Full.

SetBodyTrackervoid
# SetBodyTracker
C#
public void SetBodyTracker(StringName trackerName);

Имя XRBodyTracker, изначально /user/body_tracker. Setter сохраняет только строку, не подключает поставщика и не перестраивает карту костей. Смена имени выбирает другой источник для следующей обработки; карта костей определяется Skeleton и BodyUpdate, а не именем tracker.

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

Точное имя зарегистрированного XRBodyTracker. Смена имени не требует пересопоставления, если Skeleton и BodyUpdate не менялись.

SetBodyUpdatevoid
# SetBodyUpdate
C#
public void SetBodyUpdate(XRBodyModifier3D.BodyUpdateEnum bodyUpdate);

Маска областей сопоставления: UpperBody, LowerBody, Hands; по умолчанию все три. Setter перестраивает карту костей, если модификатор в дереве. Это фильтр диапазонов основных суставов; Root и дополнительные суставы не исключаются универсально. Для полного выключения используйте унаследованное Active=false.

Параметры
ИмяТипПо умолчанию
bodyUpdateXRBodyModifier3D.BodyUpdateEnum—
bodyUpdate

Маска UpperBody/LowerBody/Hands; 0 не является универсальным выключателем обработки.

SetBoneUpdatevoid
# SetBoneUpdate
C#
public void SetBoneUpdate(XRBodyModifier3D.BoneUpdateEnum boneUpdate);

Режим костей, изначально Full. Full обновляет позиции и вращения; RotationOnly обновляет вращения, но Hips всё равно получает позицию. Проверяется диапазон enum. Не создаёт skin weights и не решает калибровку, масштаб или размещение аватара.

Параметры
ИмяТипПо умолчанию
boneUpdateXRBodyModifier3D.BoneUpdateEnum—
boneUpdate

Full или RotationOnly; Max — граница enum. У Hips позиция обновляется в обоих режимах.

XRBodyModifier3D.BodyUpdateEnum

ЗначениеОписание
Hands = 4

Обновить суставы рук скелета.

LowerBody = 2

Обновить суставы нижней части тела скелета.

UpperBody = 1

Обновить суставы верхней части тела скелета.

XRBodyModifier3D.BoneUpdateEnum

ЗначениеОписание
Full = 0

Кости скелета полностью обновлены (как положение, так и поворот) для соответствия отслеживаемым костям.

Max = 2

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

RotationOnly = 1

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

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

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

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

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