From b636771d2475d8b9b9d87138b1e4e2402a3acb75 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 17:09:06 +0900 Subject: [PATCH] =?UTF-8?q?=E6=A7=8B=E7=AF=89=E6=99=82=E3=81=AB=20meta=20?= =?UTF-8?q?=E3=81=A8=20expression=20=E3=81=8C=20ExternalObjectMap=20?= =?UTF-8?q?=E3=82=92=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VrmScriptedImporterImpl.cs | 2 +- .../VRM10/Runtime/IO/RuntimeUnityBuilder.cs | 25 +++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) 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)