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()); }
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); }
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()); }
public void UpdateRotation(CanonicalRepresentation.HAnimBones part, Quaternion q) { int idx = Array.IndexOf(parts, part); UpdateRotation(idx, q); }
public Quaternion GetRotation(CanonicalRepresentation.HAnimBones part) { int idx = Array.IndexOf(parts, part); return(GetRotation(idx)); }
public MappedBone(Transform bone, CanonicalRepresentation.HAnimBones canonicalBoneName) : base(bone) { this.canonicalBoneName = canonicalBoneName; }