Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

HumanPoseHandler Constructor

Объявление

public HumanPoseHandler(Avatar avatar, Transform root);

public HumanPoseHandler(Avatar avatar, string[] jointPaths);

Параметры

avatar Аватар, с которого HumanPose будет читаться или записываться. Аватар должен быть гуманоидом.
root Самый верхний родитель иерархии скелетов, определенный в человекоподобном avatar. Это должно соответствовать определению avatar.
jointPaths Список, определяющий пути соединения avatar. Каждый объединенный путь начинается с узла после корневого преобразования и продолжается вниз по иерархии скелета аватара. Путь соединения корневого преобразования представляет собой пустую строку.

Описание

Создает обработчик позы человека из avatar и преобразования root, а также либо из списка путей соединения.

Укажите avatar и преобразование root, чтобы создать позу человека из иерархии скелетов (аватар). Укажите avatar и список путей соединения, чтобы создать обработчик позы человека, который не привязан к иерархии преобразования скелета. Вы можете использовать обработчик позы человека, созданный из путей суставов, для преобразования позы человека в или из массива локальных преобразований суставов (jointPaths).

using UnityEngine; using System.Collections; using System.Collections.Generic; using Unity.Collections; public class ExampleClass : MonoBehaviour { public Avatar avatar; public Transform avatarRoot; void ParseAvatarTransformRecursive(Transform t, string parentPath, List jointPaths, List<Transform> transforms) { string jointPath = parentPath.Length == 0 ? t.gameObject.name : parentPath + "/" + t.gameObject.name; jointPaths.Add(jointPath); transforms.Add(t); foreach (Transform child in t) { ParseAvatarTransformRecursive(t, jointPath, jointPaths, transforms); } } void ParseAvatarRootTransform(Transform rootTransform, List jointPaths, List<Transform> transforms) { jointPaths.Add(""); // root tranform path is the empty string transforms.Add(rootTransform); foreach (Transform t in rootTransform) { ParseAvatarTransformRecursive(t, "", jointPaths, transforms); } } void Start() { List jointPaths = new List(); List<Transform> avatarTransforms = new List<Transform>(); ParseAvatarRootTransform(avatarRoot, jointPaths, avatarTransforms); HumanPoseHandler humanPoseHandler = new HumanPoseHandler(avatar, jointPaths.ToArray()); NativeArray avatarPose = new NativeArray(jointPaths.Count * 7, Allocator.Persistent); for (int i = 0; i < jointPaths.Count; ++i) { Vector3 position = avatarTransforms[i].localPosition; Quaternion rotation = avatarTransforms[i].localRotation; avatarPose[7 * i] = position.x; avatarPose[7 * i + 1] = position.y; avatarPose[7 * i + 2] = position.z; avatarPose[7 * i + 3] = rotation.x; avatarPose[7 * i + 4] = rotation.y; avatarPose[7 * i + 5] = rotation.z; avatarPose[7 * i + 6] = rotation.w; } humanPoseHandler.SetInternalAvatarPose(avatarPose); avatarPose.Dispose(); humanPoseHandler.Dispose(); } }

В приведенном выше примере создается обработчик позы человека из аватара и списка суставов аватара. В примере поза считывается из корневого преобразования аватара и записывается в обработчик позы человека.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3