diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs index ed03b3ac2..4aa87e7f3 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -94,7 +94,7 @@ namespace UniVRM10 // // Import(create unity objects) // - var externalObjectMap = scriptedImporter.GetExternalObjectMap().Select(kv => (kv.Value.name, kv.Value)).ToArray(); + var externalObjectMap = scriptedImporter.GetExternalObjectMap().ToDictionary(kv => new SubAssetKey(kv.Key.type, kv.Key.name), kv => kv.Value); using (var loader = new RuntimeUnityBuilder(parser, externalObjectMap)) { diff --git a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs index e0d7b516a..0fc7406cf 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -18,8 +18,12 @@ namespace UniVRM10 UniGLTF.Extensions.VRMC_vrm.VRMC_vrm m_vrm; - public RuntimeUnityBuilder(UniGLTF.GltfParser parser, IEnumerable<(string, UnityEngine.Object)> externalObjectMap = null) : base(parser, externalObjectMap) + IDictionary m_externalMap; + + public RuntimeUnityBuilder(UniGLTF.GltfParser parser, IDictionary externalObjectMap = null) + : base(parser, externalObjectMap.Select(kv => (kv.Key.Name, kv.Value))) { + m_externalMap = externalObjectMap; m_model = VrmLoader.CreateVrmModel(parser); // for `VRMC_materials_mtoon` @@ -241,7 +245,11 @@ namespace UniVRM10 async Task LoadVrmAsync(IAwaitCaller awaitCaller, VRM10Controller controller, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm) { // meta - if (vrm.Meta != null) + if (m_externalMap.TryGetValue(VRM10MetaObject.SubAssetKey, out UnityEngine.Object meta)) + { + controller.Meta.Meta = meta as VRM10MetaObject; + } + else if (vrm.Meta != null) { var src = vrm.Meta; m_meta = ScriptableObject.CreateInstance(); @@ -281,7 +289,11 @@ namespace UniVRM10 } // expression - if (vrm.Expressions != null) + if (m_externalMap.TryGetValue(VRM10ExpressionAvatar.SubAssetKey, out UnityEngine.Object expressionAvatar)) + { + controller.Expression.ExpressionAvatar = expressionAvatar as VRM10ExpressionAvatar; + } + else if (vrm.Expressions != null) { controller.Expression.ExpressionAvatar = ScriptableObject.CreateInstance(); @@ -573,9 +585,12 @@ namespace UniVRM10 m_humanoid = null; } - if (take(m_meta)) + if (m_meta != null) { - m_meta = null; + if (take(m_meta)) + { + m_meta = null; + } } if (m_exressionAvatar != null && m_exressionAvatar.Clips != null)