コード例 #1
0
        public CanonicalRepresentation.HAnimBones[] GetAnimatedCanonicalBones(AnimationClip clip)
        {
            List <CanonicalRepresentation.HAnimBones> res = new List <CanonicalRepresentation.HAnimBones>();

#if UNITY_EDITOR
            foreach (UnityEditor.EditorCurveBinding binding in UnityEditor.AnimationUtility.GetCurveBindings(clip))
            {
                //AnimationCurve curve = AnimationUtility.GetEditorCurve (clip, binding);
                string[] pathElems = binding.path.Split('/');
                string   boneName  = pathElems[pathElems.Length - 1];
                CanonicalRepresentation.HAnimBones hAnimName = BoneNameMapped(boneName);
                if ((binding.propertyName.StartsWith("m_LocalRotation") || binding.propertyName.StartsWith("m_LocalPosition")) &&
                    hAnimName != CanonicalRepresentation.HAnimBones.NONE &&
                    !res.Contains(hAnimName))
                {
                    res.Add(hAnimName);
                }

                //if (binding.propertyName.StartsWith("m_LocalPosition")) {
                // Translation bones...
                //}
            }
#endif
            return(res.ToArray());
        }
コード例 #2
0
        public CanonicalRepresentation.HAnimBones[] GetExportBones(CanonicalRepresentation.MASK_MODE maskMode, AvatarMask exportMask, AnimationClip clip)
        {
            CanonicalRepresentation.HAnimBones[] skeletonBones = this.ExportPose().parts;
            CanonicalRepresentation.HAnimBones[] animatedBones;
            if (ikDrivingAnimator == null && clip != null)
            {
                animatedBones = GetAnimatedCanonicalBones(clip);
            }
            else
            {
                animatedBones = ExportPose().parts;
            }

            if (maskMode == CanonicalRepresentation.MASK_MODE.ALL)
            {
                return(skeletonBones);
            }
            else if (maskMode == CanonicalRepresentation.MASK_MODE.ALL_ANIMATED)
            {
                return(animatedBones);
                // TODO: if we are IK rig, this should return all bones on this rig.
            }
            else if ((maskMode == CanonicalRepresentation.MASK_MODE.MASK_MAPPED_ALL || maskMode == CanonicalRepresentation.MASK_MODE.MASK_MAPPED_ANIMATED) && exportMask != null)
            {
                List <CanonicalRepresentation.HAnimBones> _boneUnion = new List <CanonicalRepresentation.HAnimBones>();
                for (int i = 0; i < exportMask.transformCount; i++)
                {
                    if (!exportMask.GetTransformActive(i))
                    {
                        continue;
                    }
                    string boneName = exportMask.GetTransformPath(i).Split(new char[] { '/' }).Last();
                    if (CanonicalRepresentation.HAnimBoneNames.Contains(boneName))
                    {
                        CanonicalRepresentation.HAnimBones canonicalBone = (CanonicalRepresentation.HAnimBones)System.Enum.Parse(typeof(CanonicalRepresentation.HAnimBones), boneName, false);
                        if (maskMode == CanonicalRepresentation.MASK_MODE.MASK_MAPPED_ALL && skeletonBones.Contains(canonicalBone))
                        {
                            _boneUnion.Add(canonicalBone);
                        }

                        if (maskMode == CanonicalRepresentation.MASK_MODE.MASK_MAPPED_ANIMATED && animatedBones.Contains(canonicalBone))
                        {
                            _boneUnion.Add(canonicalBone);
                        }
                    }
                }
                return(_boneUnion.ToArray());
            }

            return(skeletonBones);
        }
コード例 #3
0
        public static CanonicalRepresentation.HAnimBones[] AvatarMaskToCanonicalBones(AvatarMask boneMask)
        {
            if (boneMask == null)
            {
                return(null);
            }

            List <CanonicalRepresentation.HAnimBones> _bones = new List <CanonicalRepresentation.HAnimBones>();

            for (int i = 0; i < boneMask.transformCount; i++)
            {
                if (!boneMask.GetTransformActive(i))
                {
                    continue;
                }
                string boneName = boneMask.GetTransformPath(i).Split(new char[] { '/' }).Last();
                if (CanonicalRepresentation.HAnimBoneNames.Contains(boneName))
                {
                    CanonicalRepresentation.HAnimBones canonicalBone = (CanonicalRepresentation.HAnimBones)System.Enum.Parse(typeof(CanonicalRepresentation.HAnimBones), boneName, false);
                    _bones.Add(canonicalBone);
                }
            }
            return(_bones.ToArray());
        }
コード例 #4
0
        public void UpdateRotation(CanonicalRepresentation.HAnimBones part, Quaternion q)
        {
            int idx = Array.IndexOf(parts, part);

            UpdateRotation(idx, q);
        }
コード例 #5
0
        public Quaternion GetRotation(CanonicalRepresentation.HAnimBones part)
        {
            int idx = Array.IndexOf(parts, part);

            return(GetRotation(idx));
        }
コード例 #6
0
 public MappedBone(Transform bone, CanonicalRepresentation.HAnimBones canonicalBoneName) : base(bone)
 {
     this.canonicalBoneName = canonicalBoneName;
 }