HumanPoseHandler Constructor
Declaration
public HumanPoseHandler(Avatar avatar, Transform root);public HumanPoseHandler(Avatar avatar, string[] jointPaths);Параметры
| Параметр | Описание |
|---|---|
| аватар | Аватар, с которого будут читаться или записываться HumanPose. Аватар должен быть гуманоидом. |
| корень | Самый верхний родитель иерархии скелета, определенный в гуманоиде 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<string> 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<string> 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<string> jointPaths = new List<string>(); List<Transform> avatarTransforms = new List<Transform>(); ParseAvatarRootTransform(avatarRoot, jointPaths, avatarTransforms);
HumanPoseHandler humanPoseHandler = new HumanPoseHandler(avatar, jointPaths.ToArray()); NativeArray<float> avatarPose = new NativeArray<float>(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(); } }
Вышеприведенный пример создает обработчик человеческой позы из аватара и списка соединений аватара. Пример читает позу из корневого преобразования аватара и записывает позу в обработчик человеческой позы.