From cac6d2d295e8b5ac27fa4f7932f596c0935b3855 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 15 Jun 2021 20:13:25 +0900 Subject: [PATCH] fix extract VRM10Object --- .../Editor/ScriptedImporter/EditorVrm.cs | 20 ++++++++++++++----- Assets/VRM10/Runtime/IO/Vrm10Importer.cs | 4 ++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs b/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs index 534690039..a0707de05 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs @@ -4,6 +4,7 @@ using System.Linq; using System.IO; using UnityEditor; using VRMShaders; +using System.Collections.Generic; #if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; #else @@ -73,13 +74,22 @@ namespace UniVRM10 var path = GetAndCreateFolder(importer.assetPath, ".Vrm1Object"); { - foreach (var (key, asset) in importer.GetSubAssets(importer.assetPath)) - { - asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); - } + var map = new Dictionary(); foreach (var (key, asset) in importer.GetSubAssets(importer.assetPath)) { - asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); + var clone = asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); + map.Add(asset, clone as VRM10Expression); + } + + var (_, vrmObject) = importer.GetSubAssets(importer.assetPath).First(); + + // replace clone + for (int i = 0; i < vrmObject.Expression.Clips.Count; ++i) + { + vrmObject.Expression.Clips[i] = map[vrmObject.Expression.Clips[i]]; + } + { + vrmObject.ExtractSubAsset($"{path}/{vrmObject.name}.asset", false); } } diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index dae9ae24b..373108a8a 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -233,7 +233,7 @@ namespace UniVRM10 var controller = Root.AddComponent(); // vrm - m_vrmObject = controller.Vrm = await LoadVrmAsync(awaitCaller, m_vrm); + controller.Vrm = await LoadVrmAsync(awaitCaller, m_vrm); // springBone if (UniGLTF.Extensions.VRMC_springBone.GltfDeserializer.TryGet(Parser.GLTF.extensions, out UniGLTF.Extensions.VRMC_springBone.VRMC_springBone springBone)) @@ -265,7 +265,7 @@ namespace UniVRM10 } // create new object - vrm = ScriptableObject.CreateInstance(); + m_vrmObject = vrm = ScriptableObject.CreateInstance(); vrm.name = VRM10Object.SubAssetKey.Name; // meta