diff --git a/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs b/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs index 343ecafa5..1c10a6eab 100644 --- a/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs +++ b/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs @@ -205,9 +205,9 @@ namespace UniGLTF.MeshUtility var (results, created) = MeshUtility.Process(context.Instance, groupCopy); - WriteAssets(context.Instance, context.AssetFolder, results, _exportTarget); - - MeshUtility.clear(results); + // TODO: this should be replaced export and reimport ? + WriteAssets(context.AssetFolder, context.Instance, results); + WritePrefab(context.AssetFolder, context.Instance); } catch (Exception ex) { @@ -223,7 +223,7 @@ namespace UniGLTF.MeshUtility using (var context = new UndoContext("MeshUtility", _exportTarget)) { var (results, created) = MeshUtility.Process(_exportTarget, MeshUtility.MeshIntegrationGroups); - MeshUtility.clear(results); + MeshUtility.Clear(results); foreach (var go in created) { @@ -239,11 +239,10 @@ namespace UniGLTF.MeshUtility } /// - /// Write Mesh & Prefab + /// Write Mesh /// - protected virtual string WriteAssets(GameObject copy, string assetFolder, List results, GameObject prefab) + protected virtual void WriteAssets(string assetFolder, GameObject instance, List results) { - // write mesh asset foreach (var result in results) { if (result.Integrated != null) @@ -260,15 +259,21 @@ namespace UniGLTF.MeshUtility } } - // prefab + MeshUtility.Clear(results); + } + + /// + /// Write Prefab + /// + protected virtual string WritePrefab(string assetFolder, GameObject instance) + { var prefabPath = $"{assetFolder}/Integrated.prefab"; Debug.Log(prefabPath); - PrefabUtility.SaveAsPrefabAsset(copy, prefabPath, out bool success); + PrefabUtility.SaveAsPrefabAsset(instance, prefabPath, out bool success); if (!success) { - throw new System.Exception($"PrefabUtility.SaveAsPrefabAsset: {prefabPath}"); + throw new Exception($"PrefabUtility.SaveAsPrefabAsset: {prefabPath}"); } - return prefabPath; } diff --git a/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs b/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs index 6366450b3..0ce1cad6e 100644 --- a/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs +++ b/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs @@ -166,7 +166,7 @@ namespace UniGLTF.MeshUtility return (results, newList); } - public void clear(List results) + public void Clear(List results) { // 用が済んだ 統合前 の renderer を削除する foreach (var result in results) diff --git a/Assets/VRM/Editor/SkinnedMeshUtility/VrmMeshIntegratorWizard.cs b/Assets/VRM/Editor/SkinnedMeshUtility/VrmMeshIntegratorWizard.cs index 7da4743f9..a059ac207 100644 --- a/Assets/VRM/Editor/SkinnedMeshUtility/VrmMeshIntegratorWizard.cs +++ b/Assets/VRM/Editor/SkinnedMeshUtility/VrmMeshIntegratorWizard.cs @@ -50,22 +50,27 @@ namespace VRM return firstPerson || mod; } - protected override string WriteAssets(GameObject target, string assetFolder, List results, GameObject prefab) + List _clips; + protected override void WriteAssets(string assetFolder, GameObject target, List results) { // 統合した結果を反映した BlendShapeClip を作成して置き換える - var clips = VRMMeshIntegratorUtility.FollowBlendshapeRendererChange(results, target, assetFolder); - - // reset firstperson - if (target.GetComponent() is VRMFirstPerson firstperson) - { - firstperson.Reset(); - } + _clips = VRMMeshIntegratorUtility.FollowBlendshapeRendererChange(results, target, assetFolder); // write mesh & prefab - var prefabPath = base.WriteAssets(target, assetFolder, results, prefab); + base.WriteAssets(assetFolder, target, results); + // reset firstPerson + if (target.GetComponent() is VRMFirstPerson firstPerson) + { + firstPerson.Reset(); + } + } + + protected override string WritePrefab(string assetFolder, GameObject instance) + { + var prefabPath = base.WritePrefab(assetFolder, instance); var prefabReference = AssetDatabase.LoadAssetAtPath(prefabPath); - foreach (var clip in clips) + foreach (var clip in _clips) { var so = new SerializedObject(clip); so.Update(); @@ -74,7 +79,6 @@ namespace VRM prop.objectReferenceValue = prefabReference; so.ApplyModifiedProperties(); } - return prefabPath; }