diff options
author | chai <chaifix@163.com> | 2020-10-15 19:05:22 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-15 19:05:22 +0800 |
commit | f049177e20a276049c61edbad631c1b2bbdd5706 (patch) | |
tree | 7d1a1cd9b690a5d9a8b9a65554a191d6ec769601 /Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs | |
parent | 6990a0d1fbdcbbf404f40713363ac1a148c8840a (diff) |
-advanced inspector
+odin
Diffstat (limited to 'Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs')
-rw-r--r-- | Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs b/Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs new file mode 100644 index 00000000..2a5d5252 --- /dev/null +++ b/Assets/ThirdParty/VRM/MeshUtility/Runtime/HumanoidLoader.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace MeshUtility +{ + public static class HumanoidLoader + { + public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap) + { + var description = new HumanDescription + { + skeleton = root.GetComponentsInChildren<Transform>() + .Select(x => x.ToSkeletonBone()).ToArray(), + human = boneMap + .Select(x => new HumanBone + { + boneName = x.Item1.name, + humanName = s_humanTranitBoneNameMap[x.Item2], + limit = new HumanLimit + { + useDefaultValues = true, + } + }).ToArray(), + + armStretch = 0.05f, + legStretch = 0.05f, + upperArmTwist = 0.5f, + lowerArmTwist = 0.5f, + upperLegTwist = 0.5f, + lowerLegTwist = 0.5f, + feetSpacing = 0, + hasTranslationDoF = false, + }; + + return AvatarBuilder.BuildHumanAvatar(root.gameObject, description); + } + + static SkeletonBone ToSkeletonBone(this Transform t) + { + var sb = new SkeletonBone(); + sb.name = t.name; + sb.position = t.localPosition; + sb.rotation = t.localRotation; + sb.scale = t.localScale; + return sb; + } + + static HumanBodyBones TraitToHumanBone(string x) + { + return (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), x.Replace(" ", ""), true); + } + + static readonly Dictionary<HumanBodyBones, string> s_humanTranitBoneNameMap = + HumanTrait.BoneName.ToDictionary( + x => TraitToHumanBone(x), + x => x); + } +} |