mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-30 14:53:09 -05:00
すべての経路で ForceTransformUniqueName.Process するようにした
This commit is contained in:
@@ -91,54 +91,19 @@ namespace UniHumanoid
|
||||
public bool hasTranslationDoF;
|
||||
public BoneLimit[] human;
|
||||
|
||||
public HumanDescription ToHumanDescription(Transform root, bool forceRename)
|
||||
public IEnumerable<(Transform, HumanBodyBones)> ToHumanoidMap(Transform root)
|
||||
{
|
||||
if (forceRename)
|
||||
var map = new Dictionary<string, Transform>();
|
||||
foreach (var t in root.GetComponentsInChildren<Transform>())
|
||||
{
|
||||
ForceTransformUniqueName.Process(root);
|
||||
map[t.name] = t;
|
||||
}
|
||||
|
||||
var transforms = root.GetComponentsInChildren<Transform>();
|
||||
var skeletonBones = new SkeletonBone[transforms.Length];
|
||||
var index = 0;
|
||||
foreach (var t in transforms)
|
||||
{
|
||||
skeletonBones[index] = t.ToSkeletonBone();
|
||||
index++;
|
||||
}
|
||||
|
||||
var humanBones = new HumanBone[human.Length];
|
||||
index = 0;
|
||||
foreach (var bonelimit in human)
|
||||
{
|
||||
humanBones[index] = bonelimit.ToHumanBone();
|
||||
index++;
|
||||
}
|
||||
|
||||
|
||||
return new HumanDescription
|
||||
{
|
||||
skeleton = skeletonBones,
|
||||
human = humanBones,
|
||||
armStretch = armStretch,
|
||||
legStretch = legStretch,
|
||||
upperArmTwist = upperArmTwist,
|
||||
lowerArmTwist = lowerArmTwist,
|
||||
upperLegTwist = upperLegTwist,
|
||||
lowerLegTwist = lowerLegTwist,
|
||||
feetSpacing = feetSpacing,
|
||||
hasTranslationDoF = hasTranslationDoF,
|
||||
};
|
||||
}
|
||||
|
||||
public Avatar CreateAvatar(Transform root)
|
||||
{
|
||||
return AvatarBuilder.BuildHumanAvatar(root.gameObject, ToHumanDescription(root, true));
|
||||
return human.Select(x => (map[x.boneName], x.humanBone));
|
||||
}
|
||||
|
||||
public Avatar CreateAvatarAndSetup(Transform root)
|
||||
{
|
||||
var avatar = CreateAvatar(root);
|
||||
var avatar = HumanoidLoader.LoadHumanoidAvatar(root, ToHumanoidMap(root));
|
||||
avatar.name = name;
|
||||
|
||||
if (root.TryGetComponent<Animator>(out var animator))
|
||||
@@ -304,7 +269,7 @@ namespace UniHumanoid
|
||||
modAvatarDesc(avatarDescription);
|
||||
}
|
||||
avatarDescription.SetHumanBones(map);
|
||||
var avatar = avatarDescription.CreateAvatar(dst.transform);
|
||||
var avatar = HumanoidLoader.LoadHumanoidAvatar(dst.transform, avatarDescription.ToHumanoidMap(dst.transform));
|
||||
avatar.name = "created";
|
||||
return avatar;
|
||||
}
|
||||
@@ -330,7 +295,7 @@ namespace UniHumanoid
|
||||
var avatarDescription = UniHumanoid.AvatarDescription.Create();
|
||||
avatarDescription.SetHumanBones(map);
|
||||
|
||||
var avatar = avatarDescription.CreateAvatar(src.transform);
|
||||
var avatar = HumanoidLoader.LoadHumanoidAvatar(src.transform, avatarDescription.ToHumanoidMap(src.transform));
|
||||
avatar.name = "created";
|
||||
return avatar;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UniGLTF.Utils;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UniHumanoid
|
||||
@@ -9,7 +10,7 @@ namespace UniHumanoid
|
||||
{
|
||||
public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap)
|
||||
{
|
||||
UniGLTF.Utils.ForceTransformUniqueName.Process(root);
|
||||
ForceTransformUniqueName.Process(root);
|
||||
|
||||
var description = new HumanDescription
|
||||
{
|
||||
|
||||
@@ -111,7 +111,7 @@ namespace UniHumanoid
|
||||
//
|
||||
// avatar
|
||||
//
|
||||
Avatar = description.CreateAvatar(Root.transform);
|
||||
Avatar = HumanoidLoader.LoadHumanoidAvatar(Root.transform, description.ToHumanoidMap(Root.transform));
|
||||
Avatar.name = "Avatar";
|
||||
AvatarDescription = description;
|
||||
var animator = Root.AddComponent<Animator>();
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace UniHumanoid
|
||||
{
|
||||
throw new System.ArgumentException("no animator");
|
||||
}
|
||||
animator.avatar = description.CreateAvatar(root);
|
||||
animator.avatar = HumanoidLoader.LoadHumanoidAvatar(root, description.ToHumanoidMap(root));
|
||||
|
||||
// create SkinnedMesh for bone visualize
|
||||
var renderer = SkeletonMeshUtility.CreateRenderer(animator);
|
||||
|
||||
@@ -259,7 +259,7 @@ namespace VRM
|
||||
{
|
||||
AvatarDescription = VRM.humanoid.ToDescription(Nodes);
|
||||
AvatarDescription.name = "AvatarDescription";
|
||||
HumanoidAvatar = AvatarDescription.CreateAvatar(Root.transform);
|
||||
HumanoidAvatar = UniHumanoid.HumanoidLoader.LoadHumanoidAvatar(Root.transform, AvatarDescription.ToHumanoidMap(Root.transform));
|
||||
if (!HumanoidAvatar.isValid || !HumanoidAvatar.isHuman)
|
||||
{
|
||||
throw new Exception("fail to create avatar");
|
||||
|
||||
@@ -104,9 +104,9 @@ namespace UniVRM10
|
||||
return default;
|
||||
}
|
||||
|
||||
public Dictionary<HumanBodyBones, Transform> GetHumanMap()
|
||||
public List<(Transform, HumanBodyBones)> GetHumanMap()
|
||||
{
|
||||
var humanMap = new Dictionary<HumanBodyBones, Transform>();
|
||||
var humanMap = new List<(Transform, HumanBodyBones)>();
|
||||
if (m_vrma is UniGLTF.Extensions.VRMC_vrm_animation.VRMC_vrm_animation animation && animation.Humanoid != null)
|
||||
{
|
||||
foreach (HumanBodyBones bone in UniGLTF.Utils.CachedEnum.GetValues<HumanBodyBones>())
|
||||
@@ -114,7 +114,7 @@ namespace UniVRM10
|
||||
var node = GetNodeIndex(animation.Humanoid, bone);
|
||||
if (node.HasValue)
|
||||
{
|
||||
humanMap.Add(bone, Nodes[node.Value]);
|
||||
humanMap.Add((Nodes[node.Value], bone));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -259,11 +259,10 @@ namespace UniVRM10
|
||||
var humanMap = GetHumanMap();
|
||||
if (humanMap.Count > 0)
|
||||
{
|
||||
var description = AvatarDescription.Create(humanMap);
|
||||
//
|
||||
// avatar
|
||||
//
|
||||
var avatar = description.CreateAvatar(Root.transform);
|
||||
var avatar = HumanoidLoader.LoadHumanoidAvatar(Root.transform, humanMap);
|
||||
avatar.name = "Avatar";
|
||||
// AvatarDescription = description;
|
||||
var animator = Root.AddComponent<Animator>();
|
||||
|
||||
Reference in New Issue
Block a user