BoneMap
Карта имён: кость профиля → кость исходного скелета.
Например, ключ Hips профиля может хранить Pelvis исходной модели. Сначала назначьте Profile, затем задайте соответствия. BoneMap хранит данные для ретаргетинга; сам не меняет имена, позы или иерархию Skeleton3D.
Одинаковые имена не устраняют различия Rest, осей и путей анимации. Дублирующиеся назначения возможны, поэтому проверяйте карту и конкретный персонаж. Порядок работы — в ретаргетинге.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
BoneMapКонструктор
public BoneMap();Создаёт карту без профиля. Сначала назначьте Profile, затем заполняйте существующие ключи профиля через SetSkeletonBoneName. Карта не содержит ссылки на конкретный Skeleton3D.
Свойства1
ProfileСвойство
public SkeletonProfile Profile { get; set; }Профиль определяет допустимые ключи карты. При синхронизации добавляются новые ключи с пустыми значениями, удаляются отсутствующие в профиле, сохраняются значения общих ключей. Назначение профиля не анализирует скелет и не переименовывает кости.
Методы5
FindProfileBoneNameStringName
public StringName FindProfileBoneName(StringName skeletonBoneName);Ищет ключ профиля по имени исходной кости. При дублирующихся значениях возвращает одно из совпадений; не используйте порядок обхода как правило выбора. Отсутствие совпадения возвращает пустое имя.
| Имя | Тип | По умолчанию |
|---|---|---|
skeletonBoneName | StringName | — |
skeletonBoneNameИмя кости исходного скелета, например Pelvis. Для проверки его существования используйте Skeleton3D.FindBone отдельно.
StringNameНайденный ключ профиля либо пустой StringName. Не индекс кости.
GetProfileSkeletonProfile
public SkeletonProfile GetProfile();Возвращает тот же объект профиля, что свойство Profile, без создания копии. У новой карты профиль отсутствует, несмотря на ненулевой тип в сигнатуре SDK.
SkeletonProfileТекущий профиль или null, если он не назначен.
GetSkeletonBoneNameStringName
public StringName GetSkeletonBoneName(StringName profileBoneName);Читает прямое соответствие: имя кости профиля → имя кости исходного скелета. Существующий ключ может иметь пустое значение. Не используйте произвольное имя, отсутствующее в профиле: это ошибка нативного API, а не гарантированное исключение C#.
| Имя | Тип | По умолчанию |
|---|---|---|
profileBoneName | StringName | — |
profileBoneNameСуществующее имя кости в Profile, например Hips; это ключ назначения, не имя исходной кости.
StringNameСохранённое имя исходной кости для ключа профиля; пустое имя означает отсутствие назначения.
SetProfilevoid
public void SetProfile(SkeletonProfile profile);Назначает Profile и синхронизирует ключи с его костями. Та же ссылка повторно не запускает синхронизацию через этот setter. Замена профиля не означает автоматическое заполнение имён исходного скелета.
| Имя | Тип | По умолчанию |
|---|---|---|
profile | SkeletonProfile | — |
profileОбъект профиля с целевыми именами костей. Карта удерживает ссылку на ресурс; это не копирование профиля.
SetSkeletonBoneNamevoid
public void SetSkeletonBoneName(StringName profileBoneName, StringName skeletonBoneName);Записывает имя исходной кости для существующего ключа профиля. Не проверяет наличие кости в Skeleton3D и допускает дублирующиеся значения у разных ключей. Не меняет живой скелет. Вызывает BoneMapUpdated даже при повторной записи того же значения.
| Имя | Тип | По умолчанию |
|---|---|---|
profileBoneName | StringName | — |
skeletonBoneName | StringName | — |
profileBoneNameСуществующее имя кости в Profile, например Hips; это ключ назначения, не имя исходной кости.
skeletonBoneNameИмя кости исходного скелета, например Pelvis. Для проверки его существования используйте Skeleton3D.FindBone отдельно.
Сигналы и события2
BoneMapUpdatedСобытие
public event Action BoneMapUpdated;Событие уведомления от SetSkeletonBoneName. Оно не доказывает, что значение изменилось: повторная запись того же имени тоже уведомляет. Повторно прочитайте нужное соответствие.
ProfileUpdatedСобытие
public event Action ProfileUpdated;Уведомляет о синхронизации карты после замены профиля или уведомления ProfileUpdated от самого профиля. Это отдельное событие от BoneMapUpdated; повторное назначение той же ссылки само по себе его не вызывает.