From fcf63b69709528d023c4f684758b45b443747d41 Mon Sep 17 00:00:00 2001 From: hirose Date: Fri, 13 Dec 2019 20:50:23 +0900 Subject: [PATCH 1/4] add generated serializer, fix tests --- .../Editor/Tests/VRMImportExportTests.cs | 6 +++--- Assets/VRM/UniGLTF/Editor/Tests/UniGLTFTests.cs | 2 +- Assets/VRM/UniGLTF/Scripts/Format/glTF.cs | 16 +++++++++++++--- Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs | 11 ++++++++--- .../UniVRM/Scripts/Format/VRMExportSettings.cs | 2 +- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/Assets/VRM.Samples/Editor/Tests/VRMImportExportTests.cs b/Assets/VRM.Samples/Editor/Tests/VRMImportExportTests.cs index c9c721cfef..cf25c4252f 100644 --- a/Assets/VRM.Samples/Editor/Tests/VRMImportExportTests.cs +++ b/Assets/VRM.Samples/Editor/Tests/VRMImportExportTests.cs @@ -25,7 +25,7 @@ static string AliciaPath { get { - return Path.GetFullPath(Application.dataPath + "/../Tests/Models/Alicia_vrm-0.40/AliciaSolid_vrm-0.40.vrm") + return Path.GetFullPath(Application.dataPath + "/../Tests/Models/Alicia_vrm-0.51/AliciaSolid_vrm-0.51.vrm") .Replace("\\", "/"); } } @@ -139,7 +139,7 @@ public void SerializerCompare() File.WriteAllText("new.json", newJson); // 比較 - Assert.AreEqual(oldJson, newJson); + Assert.AreEqual(oldJson.ParseAsJson().ToString(), newJson.ParseAsJson().ToString()); // 生成デシリアライザでロードする var ff = new JsonFormatter(); @@ -147,7 +147,7 @@ public void SerializerCompare() ff.Clear(); ff.GenSerialize(des); var desJson = ff.ToString().ParseAsJson().ToString(" "); - Assert.AreEqual(oldJson, desJson); + Assert.AreEqual(oldJson.ParseAsJson().ToString(), desJson.ParseAsJson().ToString()); } } } diff --git a/Assets/VRM/UniGLTF/Editor/Tests/UniGLTFTests.cs b/Assets/VRM/UniGLTF/Editor/Tests/UniGLTFTests.cs index b202b072d5..a453d01761 100644 --- a/Assets/VRM/UniGLTF/Editor/Tests/UniGLTFTests.cs +++ b/Assets/VRM/UniGLTF/Editor/Tests/UniGLTFTests.cs @@ -668,7 +668,7 @@ public void SameMeshButDifferentMaterialExport() { var context = new ImporterContext { - UseUniJSONParser = true + SerializerType = SerializerTypes.UniJSON }; context.ParseJson(json, new SimpleStorage(new ArraySegment(new byte[1024 * 1024]))); //Debug.LogFormat("{0}", context.Json); diff --git a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs index b1c68f9782..fade35412f 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs @@ -468,10 +468,10 @@ string RemoveUnusedExtensions(string json) return f.ToString(); } - public byte[] ToGlbBytes(bool UseUniJSONSerializer = false) + public byte[] ToGlbBytes(SerializerTypes serializer = SerializerTypes.JsonSerializable) { string json; - if (UseUniJSONSerializer) + if (serializer == SerializerTypes.UniJSON) { var c = new JsonSchemaValidationContext(this) { @@ -479,10 +479,20 @@ public byte[] ToGlbBytes(bool UseUniJSONSerializer = false) }; json = JsonSchema.FromType(GetType()).Serialize(this, c); } - else + else if (serializer == SerializerTypes.Generated) + { + var f = new JsonFormatter(); + f.GenSerialize(this); + json = f.ToString().ParseAsJson().ToString(" "); + } + else if(serializer == SerializerTypes.JsonSerializable) { json = ToJson(); } + else + { + throw new Exception("[UniVRM Export Error] unknown serializer type"); + } RemoveUnusedExtensions(json); diff --git a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs index 61168c3462..8757639873 100644 --- a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs +++ b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs @@ -260,17 +260,22 @@ public void ParseGlb(Byte[] bytes) new SimpleStorage(chunks[1].Bytes)); } - public bool UseUniJSONParser; + public SerializerTypes SerializerType { get; set; } + public virtual void ParseJson(string json, IStorage storage) { Json = json; Storage = storage; - if (UseUniJSONParser) + if (SerializerType == SerializerTypes.UniJSON) { Json.ParseAsJson().Deserialize(ref GLTF); } - else + else if (SerializerType == SerializerTypes.Generated) + { + GLTF = GltfDeserializer.Deserialize(json.ParseAsJson()); + } + else if (SerializerType == SerializerTypes.JsonSerializable) { GLTF = JsonUtility.FromJson(Json); } diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs b/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs index 64a040a058..b04040adf7 100644 --- a/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs @@ -275,7 +275,7 @@ void Export(string path, List destroy) vrm.extensions.VRM.meta.title = Title; vrm.extensions.VRM.meta.author = Author; - var bytes = vrm.ToGlbBytes(UseExperimentalExporter); + var bytes = vrm.ToGlbBytes(UseExperimentalExporter?SerializerTypes.UniJSON:SerializerTypes.JsonSerializable); File.WriteAllBytes(path, bytes); Debug.LogFormat("Export elapsed {0}", sw.Elapsed); } From 583f5c273a1933fd3df9a2bc924cd18d2759c2b3 Mon Sep 17 00:00:00 2001 From: hirose Date: Fri, 13 Dec 2019 21:51:33 +0900 Subject: [PATCH 2/4] add SerializerTypes.cs --- Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs | 9 +++++++++ .../UniGLTF/Scripts/Format/SerializerTypes.cs.meta | 11 +++++++++++ 2 files changed, 20 insertions(+) create mode 100644 Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs create mode 100644 Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs.meta diff --git a/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs new file mode 100644 index 0000000000..1a977ccaec --- /dev/null +++ b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs @@ -0,0 +1,9 @@ +namespace UniGLTF +{ + public enum SerializerTypes + { + JsonSerializable, // manual + UniJSON, // reflection + Generated, // generated, experimental for mobile + } +} diff --git a/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs.meta b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs.meta new file mode 100644 index 0000000000..6ff72b7562 --- /dev/null +++ b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b17414c7f3ba564083dbcebda778633 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 2f042520bca35d046838ea260ae365a66f309561 Mon Sep 17 00:00:00 2001 From: hirose Date: Fri, 13 Dec 2019 22:06:02 +0900 Subject: [PATCH 3/4] default unijson --- Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs | 2 +- Assets/VRM/UniGLTF/Scripts/Format/glTF.cs | 3 ++- Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs index 1a977ccaec..9dc459c366 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/SerializerTypes.cs @@ -2,7 +2,7 @@ { public enum SerializerTypes { - JsonSerializable, // manual + JsonSerializable, // manual, Obsolete UniJSON, // reflection Generated, // generated, experimental for mobile } diff --git a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs index fade35412f..95e3ce2be0 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs @@ -468,7 +468,7 @@ string RemoveUnusedExtensions(string json) return f.ToString(); } - public byte[] ToGlbBytes(SerializerTypes serializer = SerializerTypes.JsonSerializable) + public byte[] ToGlbBytes(SerializerTypes serializer = SerializerTypes.UniJSON) { string json; if (serializer == SerializerTypes.UniJSON) @@ -487,6 +487,7 @@ public byte[] ToGlbBytes(SerializerTypes serializer = SerializerTypes.JsonSerial } else if(serializer == SerializerTypes.JsonSerializable) { + // Obsolete json = ToJson(); } else diff --git a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs index 8757639873..69630142f9 100644 --- a/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs +++ b/Assets/VRM/UniGLTF/Scripts/IO/ImporterContext.cs @@ -260,23 +260,25 @@ public void ParseGlb(Byte[] bytes) new SimpleStorage(chunks[1].Bytes)); } - public SerializerTypes SerializerType { get; set; } + private SerializerTypes _serializerType = SerializerTypes.UniJSON; + public SerializerTypes SerializerType { get { return _serializerType; } set { _serializerType = value; } } public virtual void ParseJson(string json, IStorage storage) { Json = json; Storage = storage; - if (SerializerType == SerializerTypes.UniJSON) + if (_serializerType == SerializerTypes.UniJSON) { Json.ParseAsJson().Deserialize(ref GLTF); } - else if (SerializerType == SerializerTypes.Generated) + else if (_serializerType == SerializerTypes.Generated) { GLTF = GltfDeserializer.Deserialize(json.ParseAsJson()); } - else if (SerializerType == SerializerTypes.JsonSerializable) + else if (_serializerType == SerializerTypes.JsonSerializable) { + // Obsolete GLTF = JsonUtility.FromJson(Json); } From 70e3d60dc9f9dd22ab845ec47d41878abe9bd381 Mon Sep 17 00:00:00 2001 From: hirose Date: Fri, 13 Dec 2019 22:08:46 +0900 Subject: [PATCH 4/4] Experimental export for Generated --- Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs b/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs index b04040adf7..9fdd86391e 100644 --- a/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMExportSettings.cs @@ -275,7 +275,7 @@ void Export(string path, List destroy) vrm.extensions.VRM.meta.title = Title; vrm.extensions.VRM.meta.author = Author; - var bytes = vrm.ToGlbBytes(UseExperimentalExporter?SerializerTypes.UniJSON:SerializerTypes.JsonSerializable); + var bytes = vrm.ToGlbBytes(UseExperimentalExporter?SerializerTypes.Generated:SerializerTypes.UniJSON); File.WriteAllBytes(path, bytes); Debug.LogFormat("Export elapsed {0}", sw.Elapsed); }