Unity 6.3
0 онлайн 54 гостей 3 в системе
Вход

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(); } }

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