using System.Collections.Generic; using Models; using UnityEngine; public class ModelBehaviour : MonoBehaviour { private Animator _animator; private readonly UdpListener _listener = new UdpListener(); private static readonly List PoseTransforms = new List(); private void Start() { _animator = GetComponent(); // 获取动画控件 InitPoseTransformList(); _listener.AddHandler(LogLandmarks); _listener.AddHandler(RigPoint); _listener.Connect(5000); } // Update is called once per frame private void Update() { foreach (var landmark in PoseTransforms) { if (landmark.UnityName != HumanBodyBones.LastBone) { _animator.GetBoneTransform(landmark.UnityName).rotation = landmark.CurrentQuaternion; } } } private void OnDisable() { _listener.DisConnect(); } private static void LogLandmarks(List landmarks) { Debug.Log("Here"); foreach (var landmark in landmarks) { Debug.Log(landmark.ToString()); } } //获取传上来的数据点坐标转换成四元数的回调函数 private static void RigPoint(List landmarks) { foreach (var landmark in landmarks) { } } /// /// 初始化骨骼变化结构体列表 /// private void InitPoseTransformList() { for (var type = 0; type <= (int)PoseLandmarkType.RightFootIndex; type++) { var item = new PoseTransform((PoseLandmarkType)type); if (item.UnityName != HumanBodyBones.LastBone) { item.PreviousQuaternion = _animator.GetBoneTransform(item.UnityName).rotation; item.CurrentQuaternion = item.PreviousQuaternion; } PoseTransforms.Add(item); } // 在这里添加父节点 AddParentTransform(PoseLandmarkType.LeftShoulder, PoseLandmarkType.LeftHip); AddParentTransform(PoseLandmarkType.LeftShoulder, PoseLandmarkType.RightHip); AddParentTransform(PoseLandmarkType.RightShoulder, PoseLandmarkType.LeftHip); AddParentTransform(PoseLandmarkType.RightShoulder, PoseLandmarkType.RightHip); AddParentTransform(PoseLandmarkType.Nose, PoseLandmarkType.LeftShoulder); AddParentTransform(PoseLandmarkType.Nose, PoseLandmarkType.RightShoulder); AddParentTransform(PoseLandmarkType.LeftElbow, PoseLandmarkType.LeftShoulder); AddParentTransform(PoseLandmarkType.RightElbow, PoseLandmarkType.RightShoulder); AddParentTransform(PoseLandmarkType.LeftWrist, PoseLandmarkType.LeftElbow); AddParentTransform(PoseLandmarkType.RightWrist, PoseLandmarkType.RightElbow); AddParentTransform(PoseLandmarkType.LeftKnee, PoseLandmarkType.LeftHip); AddParentTransform(PoseLandmarkType.RightKnee, PoseLandmarkType.RightHip); AddParentTransform(PoseLandmarkType.LeftAnkle, PoseLandmarkType.LeftKnee); AddParentTransform(PoseLandmarkType.RightAnkle, PoseLandmarkType.RightKnee); AddParentTransform(PoseLandmarkType.LeftFootIndex, PoseLandmarkType.LeftAnkle); AddParentTransform(PoseLandmarkType.RightFootIndex, PoseLandmarkType.RightAnkle); } /// /// 给指定的骨骼变化结构体添加父节点 /// /// 需要添加的节点 /// 添加的父节点 private void AddParentTransform(PoseLandmarkType target, PoseLandmarkType parent) { var parents = PoseTransforms[(int)target].Parent; parents.Add(PoseTransforms[(int)parent]); } }