avatar 代入の workaround

This commit is contained in:
ousttrue 2024-01-04 16:15:20 +09:00
parent e3d4ea53e8
commit 30f893fa1b
4 changed files with 21 additions and 24 deletions

View File

@ -199,12 +199,10 @@ namespace VRM
}
}
// 正規化
if (settings.PoseFreeze)
{
// BoneNormalizer.Execute は Copy を作って正規化する。UNDO無用
target = VRMBoneNormalizer.Execute(target, settings.ForceTPose);
destroy.Add(target);
// 正規化
VRMBoneNormalizer.Execute(target, settings.ForceTPose);
}
var fp = target.GetComponent<VRMFirstPerson>();

View File

@ -46,8 +46,7 @@ namespace VRM
{
var go = Selection.activeObject as GameObject;
// BoneNormalizer.Execute はコピーを正規化する。UNDO無用
Selection.activeGameObject = VRMBoneNormalizer.Execute(go, true);
VRMBoneNormalizer.Execute(go, true);
}
}
}

View File

@ -45,7 +45,7 @@ namespace VRM
/// <param name="go">対象モデルのルート</param>
/// <param name="forceTPose">強制的にT-Pose化するか</param>
/// <returns>正規化済みのモデル</returns>
public static GameObject Execute(GameObject go, bool forceTPose)
public static void Execute(GameObject go, bool forceTPose)
{
//
// T-Poseにする
@ -67,18 +67,26 @@ namespace VRM
}
// Meshの焼きこみ
var newMesh = BoneNormalizer.NormalizeHierarchyFreezeMesh(go, true);
var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(go, true);
// 焼いたMeshで置き換える
BoneNormalizer.Replace(go, newMesh, true, true);
BoneNormalizer.Replace(go, newMeshMap, true, true);
// 新しいヒエラルキーからAvatarを作る
var newAnimator = go.GetComponent<Animator>();
var newAvatar = UniHumanoid.AvatarDescription.RecreateAvatar(newAnimator);
newAnimator.avatar = newAvatar;
var animator = go.GetComponent<Animator>();
var newAvatar = UniHumanoid.AvatarDescription.RecreateAvatar(animator);
// CopyVRMComponents(go, normalized, bMap);
// workaround: animator を作り直す
if (Application.isPlaying)
{
GameObject.Destroy(animator);
}
else
{
GameObject.DestroyImmediate(animator);
}
animator = go.AddComponent<Animator>();
return go;
animator.avatar = newAvatar;
}
/// <summary>

View File

@ -141,17 +141,9 @@ namespace VRM.RuntimeExporterSample
static byte[] ExportCustom(GameObject exportRoot, bool forceTPose = false)
{
// normalize
var target = VRMBoneNormalizer.Execute(exportRoot, forceTPose);
VRMBoneNormalizer.Execute(exportRoot, forceTPose);
try
{
return ExportSimple(target);
}
finally
{
// cleanup
GameObject.Destroy(target);
}
return ExportSimple(exportRoot);
}
void OnExported(UniGLTF.glTF vrm)