From 9dfab64d0e6cc5d1544e06c8f7381d95d2098933 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 16:18:43 +0900 Subject: [PATCH 1/5] fix VrmScriptedImporterEditorGUI.m_vrm --- .../ScriptedImporter/VrmScriptedImporterEditorGUI.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs index cfae4e50a1..7ee835e145 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs @@ -26,13 +26,16 @@ public override void OnEnable() m_importer = target as VrmScriptedImporter; m_message = VrmScriptedImporterImpl.TryParseOrMigrate(m_importer.assetPath, m_importer.MigrateToVrm1, out m_parser); - if (string.IsNullOrEmpty(m_message)) + if (!string.IsNullOrEmpty(m_message)) { - // ok + // error return; } if (!UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(m_parser.GLTF.extensions, out m_vrm)) { + // error + m_message = "no vrm1"; + m_parser = null; return; } m_model = VrmLoader.CreateVrmModel(m_parser); From 5a3f7d7b1389946ce589cc6e325472491ef60828 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 16:24:41 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E7=A8=AE=E9=A1=9E=E6=AF=8E=E3=81=AB?= =?UTF-8?q?=E5=88=A5=E3=81=AE=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E3=81=AB?= =?UTF-8?q?Extract?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/ScriptedImporter/EditorVrm.cs | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs b/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs index 6d0ab9bfcb..16ba0819f8 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/EditorVrm.cs @@ -3,7 +3,6 @@ using System.Linq; using System.IO; using UnityEditor; -using VRMShaders; #if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; #else @@ -55,6 +54,22 @@ public static void OnGUI(ScriptedImporter importer, GltfParser parser, UniGLTF.E } } + /// + /// $"{assetPath without extension}.{folderName}" + /// + /// + /// + /// + static string GetAndCreateFolder(string assetPath, string suffix) + { + var path = $"{Path.GetDirectoryName(assetPath)}/{Path.GetFileNameWithoutExtension(assetPath)}{suffix}"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + return path; + } + /// /// SubAssetを外部ファイルに展開する /// @@ -65,14 +80,9 @@ public static void Extract(ScriptedImporter importer, GltfParser parser) return; } - var path = $"{Path.GetDirectoryName(importer.assetPath)}/{Path.GetFileNameWithoutExtension(importer.assetPath)}.Extracted"; - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - // meta { + var path = GetAndCreateFolder(importer.assetPath, ".Meta"); foreach (var (key, asset) in importer.GetSubAssets(importer.assetPath)) { asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); @@ -81,12 +91,15 @@ public static void Extract(ScriptedImporter importer, GltfParser parser) { // expressions + var path = GetAndCreateFolder(importer.assetPath, ".Expressions"); foreach (var (key, asset) in importer.GetSubAssets(importer.assetPath)) { asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); } - + } + { // expressions + var path = GetAndCreateFolder(importer.assetPath, ".ExpressionAvatar"); foreach (var (key, asset) in importer.GetSubAssets(importer.assetPath)) { asset.ExtractSubAsset($"{path}/{asset.name}.asset", false); From 8c7113bd5338315a3e1ab33bd319bab65971d073 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 16:41:30 +0900 Subject: [PATCH 3/5] =?UTF-8?q?Editor=E3=81=ABMetaObject=E3=81=AE=E5=8F=82?= =?UTF-8?q?=E7=85=A7=E3=82=92=E8=A1=A8=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/VRM10.Samples/Runtime/ViewerUI.cs | 2 +- .../Editor/Components/VRM10ControllerEditor.cs | 13 ++++++++----- Assets/VRM10/Editor/Vrm10ExportDialog.cs | 2 +- Assets/VRM10/Runtime/Components/VRM10Controller.cs | 2 +- .../VRM10/Runtime/Components/VRM10ControllerMeta.cs | 12 ++++++++++++ .../Runtime/Components/VRM10ControllerMeta.cs.meta | 11 +++++++++++ Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs | 2 +- Assets/VRM10/Runtime/IO/Vrm10Exporter.cs | 2 +- 8 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs create mode 100644 Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs.meta diff --git a/Assets/VRM10.Samples/Runtime/ViewerUI.cs b/Assets/VRM10.Samples/Runtime/ViewerUI.cs index 0055a33347..1eb40c56e6 100644 --- a/Assets/VRM10.Samples/Runtime/ViewerUI.cs +++ b/Assets/VRM10.Samples/Runtime/ViewerUI.cs @@ -382,7 +382,7 @@ void SetModel(GameObject go) if (m_controller != null) { - m_texts.UpdateMeta(m_controller.Meta); + m_texts.UpdateMeta(m_controller.Meta.Meta); m_controller.Controller.UpdateType = VRM10Controller.VRM10ControllerImpl.UpdateTypes.LateUpdate; // after HumanPoseTransfer's setPose { diff --git a/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs b/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs index 00484dcf68..0c3a952aa6 100644 --- a/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs +++ b/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs @@ -49,11 +49,12 @@ void OnEnable() ; } - if (m_target.Meta) + if (m_target?.Meta.Meta != null) { - m_metaEditor = Editor.CreateEditor(m_target.Meta); + m_metaEditor = Editor.CreateEditor(m_target.Meta.Meta); } m_controller = PropGui.FromObject(serializedObject, nameof(m_target.Controller)); + m_meta = PropGui.FromObject(serializedObject, nameof(m_target.Meta)); m_expression = PropGui.FromObject(serializedObject, nameof(m_target.Expression)); m_lookAt = PropGui.FromObject(serializedObject, nameof(m_target.LookAt)); m_firstPerson = PropGui.FromObject(serializedObject, nameof(m_target.FirstPerson)); @@ -70,13 +71,13 @@ void OnDisable() enum Tabs { - Meta, Controller, + Meta, Expression, LookAt, FirstPerson, } - Tabs _tab; + Tabs _tab = Tabs.Meta; Editor m_metaEditor; @@ -113,6 +114,7 @@ public void RecursiveProperty() } PropGui m_controller; + PropGui m_meta; PropGui m_expression; PropGui m_lookAt; PropGui m_firstPerson; @@ -139,6 +141,7 @@ public override void OnInspectorGUI() switch (_tab) { case Tabs.Meta: + m_meta.RecursiveProperty(); m_metaEditor?.OnInspectorGUI(); break; @@ -147,8 +150,8 @@ public override void OnInspectorGUI() break; case Tabs.Expression: - ExpressionGUI(); m_expression.RecursiveProperty(); + ExpressionGUI(); break; case Tabs.LookAt: diff --git a/Assets/VRM10/Editor/Vrm10ExportDialog.cs b/Assets/VRM10/Editor/Vrm10ExportDialog.cs index 556dd5b447..156b2bcfeb 100644 --- a/Assets/VRM10/Editor/Vrm10ExportDialog.cs +++ b/Assets/VRM10/Editor/Vrm10ExportDialog.cs @@ -83,7 +83,7 @@ protected override void Initialize() var controller = root.GetComponent(); if (controller != null) { - Meta = controller.Meta; + Meta = controller.Meta.Meta; } else { diff --git a/Assets/VRM10/Runtime/Components/VRM10Controller.cs b/Assets/VRM10/Runtime/Components/VRM10Controller.cs index bc4be32e03..ce03aeb235 100644 --- a/Assets/VRM10/Runtime/Components/VRM10Controller.cs +++ b/Assets/VRM10/Runtime/Components/VRM10Controller.cs @@ -36,7 +36,7 @@ public enum UpdateTypes public VRM10ControllerImpl Controller = new VRM10ControllerImpl(); [SerializeField] - public VRM10MetaObject Meta; + public VRM10ControllerMeta Meta = new VRM10ControllerMeta(); [SerializeField] public VRM10ControllerExpression Expression = new VRM10ControllerExpression(); diff --git a/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs b/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs new file mode 100644 index 0000000000..cab23291bc --- /dev/null +++ b/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs @@ -0,0 +1,12 @@ +using System; +using UnityEngine; + +namespace UniVRM10 +{ + [Serializable] + public sealed class VRM10ControllerMeta + { + [SerializeField] + public VRM10MetaObject Meta; + } +} diff --git a/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs.meta b/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs.meta new file mode 100644 index 0000000000..58cfbdc177 --- /dev/null +++ b/Assets/VRM10/Runtime/Components/VRM10ControllerMeta.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77efcd2e8b041404fafc8909d38daaef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs index 6cceca31ec..e0d7b516aa 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -246,7 +246,7 @@ async Task LoadVrmAsync(IAwaitCaller awaitCaller, VRM10Controller controller, Un var src = vrm.Meta; m_meta = ScriptableObject.CreateInstance(); m_meta.name = VRM10MetaObject.SubAssetKey.Name; - controller.Meta = m_meta; + controller.Meta.Meta = m_meta; m_meta.Name = src.Name; m_meta.Version = src.Version; m_meta.ContactInformation = src.ContactInformation; diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index f596605a4f..b4dc9903a4 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -208,7 +208,7 @@ public void Export(GameObject root, Model model, RuntimeVrmConverter converter, { throw new NullReferenceException("metaObject is null"); } - meta = vrmController.Meta; + meta = vrmController.Meta.Meta; } var vrm = new UniGLTF.Extensions.VRMC_vrm.VRMC_vrm From b636771d2475d8b9b9d87138b1e4e2402a3acb75 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 17:09:06 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=E6=A7=8B=E7=AF=89=E6=99=82=E3=81=AB=20meta?= =?UTF-8?q?=20=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 ed03b3ac26..4aa87e7f3b 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -94,7 +94,7 @@ public static void Import(ScriptedImporter scriptedImporter, AssetImportContext // // 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 e0d7b516aa..0fc7406cf7 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -18,8 +18,12 @@ public class RuntimeUnityBuilder : UniGLTF.ImporterContext 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 @@ static ExpressionKey Key(UniGLTF.Extensions.VRMC_vrm.Expression e) 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 @@ async Task LoadVrmAsync(IAwaitCaller awaitCaller, VRM10Controller controller, Un } // 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 @@ public override void TransferOwnership(Func take) 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) From ef1697ec54fe6f8ae8cfa8124597c17606302765 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 22 Apr 2021 17:14:25 +0900 Subject: [PATCH 5/5] =?UTF-8?q?SetExternalUnityObject=20=E3=81=8C=20SubAss?= =?UTF-8?q?etKey=20=E3=82=92=E4=BD=BF=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniGLTF/ScriptedImporter/ScriptedImporterExtension.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ScriptedImporterExtension.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ScriptedImporterExtension.cs index 267573ea11..be763313d9 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ScriptedImporterExtension.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ScriptedImporterExtension.cs @@ -51,7 +51,7 @@ public static void DrawRemapGUI(this ScriptedImporter importer, IEnumerable