diff options
Diffstat (limited to 'Assets/ThirdParty/VRM/VRM/UniHumanoid/Scripts/AnimationClipUtility.cs')
-rw-r--r-- | Assets/ThirdParty/VRM/VRM/UniHumanoid/Scripts/AnimationClipUtility.cs | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Assets/ThirdParty/VRM/VRM/UniHumanoid/Scripts/AnimationClipUtility.cs b/Assets/ThirdParty/VRM/VRM/UniHumanoid/Scripts/AnimationClipUtility.cs new file mode 100644 index 00000000..5d06e5f6 --- /dev/null +++ b/Assets/ThirdParty/VRM/VRM/UniHumanoid/Scripts/AnimationClipUtility.cs @@ -0,0 +1,134 @@ +using System.Collections.Generic; +using UnityEngine; + + +namespace UniHumanoid +{ + public static class AnimationClipUtility + { + static Dictionary<string, string> TraitPropMap = new Dictionary<string, string> +{ +{"Left Thumb 1 Stretched", "LeftHand.Thumb.1 Stretched"}, +{"Left Thumb Spread", "LeftHand.Thumb Spread"}, +{"Left Thumb 2 Stretched", "LeftHand.Thumb.2 Stretched"}, +{"Left Thumb 3 Stretched", "LeftHand.Thumb.3 Stretched"}, +{"Left Index 1 Stretched", "LeftHand.Index.1 Stretched"}, +{"Left Index Spread", "LeftHand.Index Spread"}, +{"Left Index 2 Stretched", "LeftHand.Index.2 Stretched"}, +{"Left Index 3 Stretched", "LeftHand.Index.3 Stretched"}, +{"Left Middle 1 Stretched", "LeftHand.Middle.1 Stretched"}, +{"Left Middle Spread", "LeftHand.Middle Spread"}, +{"Left Middle 2 Stretched", "LeftHand.Middle.2 Stretched"}, +{"Left Middle 3 Stretched", "LeftHand.Middle.3 Stretched"}, +{"Left Ring 1 Stretched", "LeftHand.Ring.1 Stretched"}, +{"Left Ring Spread", "LeftHand.Ring Spread"}, +{"Left Ring 2 Stretched", "LeftHand.Ring.2 Stretched"}, +{"Left Ring 3 Stretched", "LeftHand.Ring.3 Stretched"}, +{"Left Little 1 Stretched", "LeftHand.Little.1 Stretched"}, +{"Left Little Spread", "LeftHand.Little Spread"}, +{"Left Little 2 Stretched", "LeftHand.Little.2 Stretched"}, +{"Left Little 3 Stretched", "LeftHand.Little.3 Stretched"}, +{"Right Thumb 1 Stretched", "RightHand.Thumb.1 Stretched"}, +{"Right Thumb Spread", "RightHand.Thumb Spread"}, +{"Right Thumb 2 Stretched", "RightHand.Thumb.2 Stretched"}, +{"Right Thumb 3 Stretched", "RightHand.Thumb.3 Stretched"}, +{"Right Index 1 Stretched", "RightHand.Index.1 Stretched"}, +{"Right Index Spread", "RightHand.Index Spread"}, +{"Right Index 2 Stretched", "RightHand.Index.2 Stretched"}, +{"Right Index 3 Stretched", "RightHand.Index.3 Stretched"}, +{"Right Middle 1 Stretched", "RightHand.Middle.1 Stretched"}, +{"Right Middle Spread", "RightHand.Middle Spread"}, +{"Right Middle 2 Stretched", "RightHand.Middle.2 Stretched"}, +{"Right Middle 3 Stretched", "RightHand.Middle.3 Stretched"}, +{"Right Ring 1 Stretched", "RightHand.Ring.1 Stretched"}, +{"Right Ring Spread", "RightHand.Ring Spread"}, +{"Right Ring 2 Stretched", "RightHand.Ring.2 Stretched"}, +{"Right Ring 3 Stretched", "RightHand.Ring.3 Stretched"}, +{"Right Little 1 Stretched", "RightHand.Little.1 Stretched"}, +{"Right Little Spread", "RightHand.Little Spread"}, +{"Right Little 2 Stretched", "RightHand.Little.2 Stretched"}, +{"Right Little 3 Stretched", "RightHand.Little.3 Stretched"}, +}; + + public static AnimationClip CreateAnimationClipFromHumanPose(HumanPose pose) + { + var clip = new AnimationClip(); + + // pos + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyPosition.x), + }); + var muscle = "RootT.x"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyPosition.y), + }); + var muscle = "RootT.y"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyPosition.z), + }); + var muscle = "RootT.z"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + + // rot + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyRotation.x), + }); + var muscle = "RootQ.x"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyRotation.y), + }); + var muscle = "RootQ.y"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyRotation.z), + }); + var muscle = "RootQ.z"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.bodyRotation.w), + }); + var muscle = "RootQ.w"; + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + + // muscles + for (int i = 0; i < HumanTrait.MuscleCount; ++i) + { + var curve = new AnimationCurve(new Keyframe[] + { + new Keyframe(0, pose.muscles[i]), + }); + var muscle = HumanTrait.MuscleName[i]; + if (TraitPropMap.ContainsKey(muscle)) + { + muscle = TraitPropMap[muscle]; + } + clip.SetCurve(null, typeof(Animator), muscle, curve); + } + return clip; + } + } +} |