示例#1
0
        void LateUpdate()
        {
            Core.Pose pose = null;
            if (MotionProvider)
            {
                var component = MotionProvider.GetComponent <CMUMotionPlayer>();
                if (component)
                {
                    pose = component.GetCurrentPose();
                }
            }

            if (pose != null)
            {
                if (UseFK)
                {
                    moveSkeleton(pose.FK());
                }
                else
                {
                    moveSkeleton(pose.Positions);
                }
                // drawSkeletonLines(pose.Positions, new Vector3(1.5f, 0, 0));
            }
        }
示例#2
0
        void LateUpdate()
        {
            // Get pose
            Core.Pose pose = null;
            if (MotionProvider)
            {
                var component = MotionProvider.GetComponent <CMUMotionPlayer>();
                if (component)
                {
                    pose = component.GetCurrentPose();
                }
            }

            // Retarget
            if (pose != null)
            {
                // Retarget positions
                if (RetargetTranslation)
                {
                    bones_[0].transform.position = (pose.Positions[2] + pose.Positions[3]) * 0.5f + gameObject.transform.position;
                }

                if (EnableRetargetting)
                {
                    // Retarget rotations
                    for (int i = 0; i < 13; i++)
                    {
                        int boneIndex = i;
                        if (i == (int)Core.BoneType.Trans)
                        {
                            // Use spine as root of avatar
                            boneIndex = (int)Core.BoneType.Spine;
                        }
                        if (i == (int)Core.BoneType.Spine)
                        {
                            // Skip spine
                            continue;
                        }
                        if (i == (int)Core.BoneType.RightShoulder || i == (int)Core.BoneType.LeftShoulder)
                        {
                            // Skip shoulders because bone hierarchy is not same as Core.Pose
                            continue;
                        }
                        bones_[i].transform.rotation = pose.Rotations[boneIndex] * Quaternion.Euler(correctionRightEulers[i]);
                    }
                }
            }
        }
示例#3
0
        void LateUpdate()
        {
            Core.Pose pose = null;
            if (MotionProvider)
            {
                var component = MotionProvider.GetComponent <CMUMotionPlayer>();
                if (component)
                {
                    pose = component.GetCurrentPose();
                }
            }

            if (pose != null)
            {
                if (RetargetRootLocation)
                {
                    bones_[0].transform.position = (pose.Positions[2] + pose.Positions[3]) * 0.5f + gameObject.transform.position;
                }

                if (RetargetPose)
                {
                    for (int i = 0; i < 13; i++)
                    {
                        int boneIndex = i;
                        if (i == (int)Core.BoneType.Trans)
                        {
                            // Use spine of Core.Pose as root of avatar
                            boneIndex = (int)Core.BoneType.Spine;
                        }
                        if (i == (int)Core.BoneType.Spine)
                        {
                            // Skip spine
                            continue;
                        }
                        bones_[i].transform.rotation = pose.Rotations[boneIndex];
                    }
                }
            }
        }