diff --git a/Packages/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs b/Packages/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs
index db3b5329d..77c68c458 100644
--- a/Packages/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs
+++ b/Packages/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
+using UniGLTF;
using UniGLTF.Utils;
using UnityEngine;
@@ -51,14 +53,19 @@ namespace UniHumanoid
x => x);
///
- /// Avatar を保持する既存の Animatorヒエラルキーの Transform を変更したのちに、
- /// HumanBone のマッピングを流用して、新たな Avatar を作り直す。
- /// 古い Avatar は破棄する。
+ /// Recreates an animiator's humanoid avatar.
+ /// The old Avatar is discarded.
///
- ///
- /// This method runs asynchronously only in play mode.
- ///
- public static async Awaitable RebuildHumanAvatar(Animator animator)
+ public static void RebuildHumanAvatar(Animator animator)
+ {
+ var task = RebuildHumanAvatarAsync(animator, new ImmediateCaller());
+ if (!task.IsCompleted)
+ {
+ throw new Exception("task not completed");
+ }
+ }
+
+ public static async Task RebuildHumanAvatarAsync(Animator animator, IAwaitCaller awaitCaller)
{
if (animator == null)
{
@@ -76,19 +83,22 @@ namespace UniHumanoid
newAvatar.name = "re-created";
// var newAvatar = LoadHumanoidAvatarFromAnimator(animator);
- // Animator.avatar を代入したときに副作用でTransformが変更されるのを回避するために削除します。
+ // 1. Delete this to avoid changing Transform as a side effect when assigning Animator.avatar.
if (Application.isPlaying)
{
GameObject.Destroy(animator);
+ // https://github.com/vrm-c/UniVRM/pull/2764
+ // Require IAwaitCaller that has NextFrame capability. RuntimeOnlyAwaitCaller etc. not ImmediateCaller.
// Else, the following AddComponent call will fail.
- await Awaitable.NextFrameAsync();
+ await awaitCaller.NextFrame();
}
else
{
GameObject.DestroyImmediate(animator);
}
- // 新たに AddComponent する
+
+ // 2. Attach a new one
target.AddComponent().avatar = newAvatar;
}
}
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/IAwaitCaller.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/IAwaitCaller.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/IAwaitCaller.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/IAwaitCaller.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/IAwaitCaller.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/IAwaitCaller.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/IAwaitCaller.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/IAwaitCaller.cs.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/ImmediateCaller.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/ImmediateCaller.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/ImmediateCaller.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/ImmediateCaller.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/ImmediateCaller.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/ImmediateCaller.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/ImmediateCaller.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/ImmediateCaller.cs.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/NextFrameTaskScheduler.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/NextFrameTaskScheduler.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/NextFrameTaskScheduler.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/NextFrameTaskScheduler.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/NextFrameTaskScheduler.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/NextFrameTaskScheduler.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/NextFrameTaskScheduler.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/NextFrameTaskScheduler.cs.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyAwaitCaller.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyAwaitCaller.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyAwaitCaller.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyAwaitCaller.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyAwaitCaller.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyAwaitCaller.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyAwaitCaller.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyAwaitCaller.cs.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/RuntimeOnlyNoThreadAwaitCaller.cs.meta
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/TinyManagedTaskScheduler.cs b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/TinyManagedTaskScheduler.cs
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/TinyManagedTaskScheduler.cs
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/TinyManagedTaskScheduler.cs
diff --git a/Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/TinyManagedTaskScheduler.cs.meta b/Packages/UniGLTF/Runtime/Utils/AwaitCaller/TinyManagedTaskScheduler.cs.meta
similarity index 100%
rename from Packages/UniGLTF/Runtime/UniGLTF/IO/AwaitCaller/TinyManagedTaskScheduler.cs.meta
rename to Packages/UniGLTF/Runtime/Utils/AwaitCaller/TinyManagedTaskScheduler.cs.meta
diff --git a/Packages/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs b/Packages/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs
index 5d0762c06..ec0b8bf09 100644
--- a/Packages/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs
+++ b/Packages/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using UniGLTF;
using UniGLTF.MeshUtility;
using UniGLTF.Utils;
@@ -53,10 +54,16 @@ namespace VRM
/// 対象モデルのルート
/// 強制的にT-Pose化するか
/// BlendShape の現状をbakeするか
- ///
- /// This method runs asynchronously only in play mode.
- ///
- public static async Awaitable Execute(GameObject go, bool forceTPose, bool useCurrentBlendShapeWeight)
+ public static void Execute(GameObject go, bool forceTPose, bool useCurrentBlendShapeWeight)
+ {
+ var task = ExecuteAsync(go, forceTPose, useCurrentBlendShapeWeight, new ImmediateCaller());
+ if (!task.IsCompleted)
+ {
+ throw new Exception("task not completed");
+ }
+ }
+
+ public static async Task ExecuteAsync(GameObject go, bool forceTPose, bool useCurrentBlendShapeWeight, IAwaitCaller awaitCaller)
{
if (forceTPose)
{
@@ -86,7 +93,7 @@ namespace VRM
// 回転とスケールが除去された新しいヒエラルキーからAvatarを作る
if (go.TryGetComponent(out var animator))
{
- await HumanoidLoader.RebuildHumanAvatar(animator);
+ await HumanoidLoader.RebuildHumanAvatarAsync(animator, awaitCaller);
}
}
diff --git a/Packages/VRM/Tests/VRM.Tests.asmdef b/Packages/VRM/Tests/VRM.Tests.asmdef
index 5d30901d9..4b755ecfd 100644
--- a/Packages/VRM/Tests/VRM.Tests.asmdef
+++ b/Packages/VRM/Tests/VRM.Tests.asmdef
@@ -7,9 +7,9 @@
"GUID:8d76e605759c3f64a957d63ef96ada7c",
"GUID:5f875fdc81c40184c8333b9d63c6ddd5",
"GUID:f9fe54bb3090be448aa10ac92648a614",
- "GUID:da3e51d19d51a544fa14d43fee843098",
"GUID:27619889b8ba8c24980f49ee34dbb44a",
- "GUID:0acc523941302664db1f4e527237feb3"
+ "GUID:0acc523941302664db1f4e527237feb3",
+ "GUID:1cd941934d098654fa21a13f28346412"
],
"includePlatforms": [
"Editor"
diff --git a/Packages/VRM10/Tests/VRM10.Tests.asmdef b/Packages/VRM10/Tests/VRM10.Tests.asmdef
index afe244664..2a71a7b8b 100644
--- a/Packages/VRM10/Tests/VRM10.Tests.asmdef
+++ b/Packages/VRM10/Tests/VRM10.Tests.asmdef
@@ -7,9 +7,9 @@
"GUID:8d76e605759c3f64a957d63ef96ada7c",
"GUID:5f875fdc81c40184c8333b9d63c6ddd5",
"GUID:f9fe54bb3090be448aa10ac92648a614",
- "GUID:da3e51d19d51a544fa14d43fee843098",
"GUID:27619889b8ba8c24980f49ee34dbb44a",
- "GUID:0acc523941302664db1f4e527237feb3"
+ "GUID:0acc523941302664db1f4e527237feb3",
+ "GUID:1cd941934d098654fa21a13f28346412"
],
"includePlatforms": [
"Editor"