diff --git a/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegrationResult.cs b/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegrationResult.cs index 56ffa4456..9d8968337 100644 --- a/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegrationResult.cs +++ b/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegrationResult.cs @@ -4,10 +4,36 @@ using UnityEngine; namespace UniGLTF.MeshUtility { [System.Serializable] + public class MeshMap + { + public List Sources = new List(); + public Mesh Integrated; + } + public class MeshIntegrationResult { public List SourceSkinnedMeshRenderers = new List(); public List SourceMeshRenderers = new List(); public SkinnedMeshRenderer IntegratedRenderer; + + public MeshMap MeshMap; + + public void CreateMeshMap() + { + MeshMap = new MeshMap + { + Integrated = IntegratedRenderer.sharedMesh + }; + + foreach (var x in SourceSkinnedMeshRenderers) + { + MeshMap.Sources.Add(x.sharedMesh); + } + foreach (var x in SourceMeshRenderers) + { + var filter = x.GetComponent(); + MeshMap.Sources.Add(filter.sharedMesh); + } + } } } diff --git a/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegratorUtility.cs b/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegratorUtility.cs index b91ec7d5a..0f35644b6 100644 --- a/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegratorUtility.cs +++ b/Assets/UniGLTF/Runtime/MeshUtility/MeshIntegratorUtility.cs @@ -42,6 +42,8 @@ namespace UniGLTF.MeshUtility integrator.Intgrate(onlyBlendShapeRenderers); integrator.Result.IntegratedRenderer.transform.SetParent(go.transform, false); + + integrator.Result.CreateMeshMap(); return integrator.Result; } diff --git a/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorEditor.cs b/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorEditor.cs index 5cc142875..c999d68ad 100644 --- a/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorEditor.cs +++ b/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorEditor.cs @@ -48,6 +48,22 @@ namespace VRM // Execute var results = VRMMeshIntegratorUtility.Integrate(instance, clips); + // disable source renderer + foreach (var res in results) + { + foreach (var renderer in res.SourceSkinnedMeshRenderers) + { + Undo.RecordObject(renderer.gameObject, "Deactivate old renderer"); + renderer.gameObject.SetActive(false); + } + + foreach (var renderer in res.SourceMeshRenderers) + { + Undo.RecordObject(renderer.gameObject, "Deactivate old renderer"); + renderer.gameObject.SetActive(false); + } + } + foreach (var result in results) { if (result.IntegratedRenderer == null) continue; @@ -74,20 +90,6 @@ namespace VRM } // destroy source renderers - foreach (var res in results) - { - foreach (var renderer in res.SourceSkinnedMeshRenderers) - { - Undo.RecordObject(renderer.gameObject, "Deactivate old renderer"); - renderer.gameObject.SetActive(false); - } - - foreach (var renderer in res.SourceMeshRenderers) - { - Undo.RecordObject(renderer.gameObject, "Deactivate old renderer"); - renderer.gameObject.SetActive(false); - } - } Object.DestroyImmediate(instance); return results; diff --git a/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorWizard.cs b/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorWizard.cs index 70b0b4816..54659be65 100644 --- a/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorWizard.cs +++ b/Assets/VRM/Editor/SkinnedMeshUtility/MeshIntegratorWizard.cs @@ -14,6 +14,7 @@ namespace VRM [SerializeField] GameObject m_root; + [Header("Validation")] [SerializeField] Material[] m_uniqueMaterials; @@ -57,11 +58,11 @@ namespace VRM MaterialList[] m_duplicateMaterials; [Header("Result")] - public MeshIntegrationResult[] integrationResults; + public MeshMap[] integrationResults; public static void CreateWizard() { - ScriptableWizard.DisplayWizard("MeshIntegrator", "Integrate and close window", "Integrate"); + ScriptableWizard.DisplayWizard("MeshIntegratorWizard", "Integrate and close window", "Integrate"); } private void OnEnable() @@ -162,7 +163,7 @@ namespace VRM return; } - integrationResults = MeshIntegratorEditor.Integrate(m_root, assetPath).ToArray(); + integrationResults = MeshIntegratorEditor.Integrate(m_root, assetPath).Select(x => x.MeshMap).ToArray(); } void OnWizardCreate()