diff --git a/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectFirstPerson.cs b/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectFirstPerson.cs index 8e80e8f84..b4ca14c59 100644 --- a/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectFirstPerson.cs +++ b/Assets/VRM10/Runtime/Components/VRM10Object/VRM10ObjectFirstPerson.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using UniGLTF.MeshUtility; using UnityEngine; +using VRMShaders; namespace UniVRM10 { @@ -59,9 +61,9 @@ namespace UniVRM10 // // renderer: 元になるSkinnedMeshRenderer // eraseBones: 削除対象になるボーンのindex - private static SkinnedMeshRenderer CreateHeadlessMesh(SkinnedMeshRenderer renderer, int[] eraseBones) + private async static Task CreateHeadlessMeshAsync(SkinnedMeshRenderer renderer, int[] eraseBones, IAwaitCaller awaitCaller) { - var mesh = BoneMeshEraser.CreateErasedMesh(renderer.sharedMesh, eraseBones); + var mesh = await BoneMeshEraser.CreateErasedMeshAsync(renderer.sharedMesh, eraseBones, awaitCaller); var go = new GameObject("_headless_" + renderer.name); var erased = go.AddComponent(); @@ -79,8 +81,13 @@ namespace UniVRM10 /// /// 配下のモデルのレイヤー設定など /// - public void Setup(GameObject go) + public async Task SetupAsync(GameObject go, IAwaitCaller awaitCaller = null) { + if (awaitCaller == null) + { + awaitCaller = new ImmediateCaller(); + } + SetupLayers(); if (m_done) { @@ -104,7 +111,7 @@ namespace UniVRM10 smr.gameObject.layer = THIRDPERSON_ONLY_LAYER; // 頭を取り除いた複製モデルを作成し、1人称用にする - var headless = CreateHeadlessMesh(smr, eraseBones); + var headless = await CreateHeadlessMeshAsync(smr, eraseBones, awaitCaller); headless.gameObject.layer = FIRSTPERSON_ONLY_LAYER; headless.transform.SetParent(smr.transform, false); }