diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ArraySerialization.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ArraySerialization.cs index 548351987..d4c80718a 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ArraySerialization.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ArraySerialization.cs @@ -3,7 +3,7 @@ using System.IO; namespace UniGLTF { - public class ArraySerialization : SerializationBase + public class ArraySerialization : CollectionSerializationBase { IValueSerialization m_inner; @@ -12,6 +12,7 @@ namespace UniGLTF ValueType = t; m_inner = inner; } + public override void GenerateDeserializer(StreamWriter writer, string callName) { var itemCallName = callName + "_ITEM"; diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs new file mode 100644 index 000000000..1a9bb39a1 --- /dev/null +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; + +namespace UniGLTF +{ + public abstract class CollectionSerializationBase : IValueSerialization + { + public Type ValueType + { + get; + protected set; + } + + public bool IsInline + { + get { return false; } + } + + public abstract void GenerateDeserializer(StreamWriter writer, string callName); + + public string GenerateDeserializerCall(string callName, string argName) + { + return $"{callName}({argName})"; + } + + public abstract void GenerateSerializer(StreamWriter writer, string callName); + + public string GenerateSerializerCall(string callName, string argName) + { + return $"{callName}(f, {argName})"; + } + } +} diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs.meta b/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs.meta new file mode 100644 index 000000000..95c784b1d --- /dev/null +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/CollectionSerializationBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52a81be56b0149144aa0836e59d9bc3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/EnumSerialization.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/EnumSerialization.cs index 8ac3c6c82..4378689c1 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/EnumSerialization.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/EnumSerialization.cs @@ -3,7 +3,7 @@ using System.IO; namespace UniGLTF { - public class EnumIntSerialization : IValueSerialization + public class EnumSerialization : IValueSerialization { Type m_type; EnumSerializationType m_serializationType; @@ -24,7 +24,7 @@ namespace UniGLTF } - public EnumIntSerialization(Type t, EnumSerializationType serializationType) + public EnumSerialization(Type t, EnumSerializationType serializationType) { m_type = t; m_serializationType = serializationType; diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/FieldSerializationInfo.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/FieldSerializationInfo.cs index 107620924..7e5665d49 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/FieldSerializationInfo.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/FieldSerializationInfo.cs @@ -127,7 +127,7 @@ namespace UniGLTF } else if (t.IsEnum) { - return new EnumIntSerialization(t, attr.EnumSerializationType); + return new EnumSerialization(t, attr.EnumSerializationType); } else if (t == typeof(glTFExtension)) { @@ -164,5 +164,20 @@ namespace UniGLTF return sb.ToString(); } + + /// + /// Runtimeのシリアライズ判定関数を作る + /// + /// + /// + public string CreateSerializationCondition(Type t, string arg) + { + if (t.IsClass) + { + return $"{arg}!=null"; + } + + return "true"; + } } } diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ListSerialization.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ListSerialization.cs index 703cb90c5..a929349dd 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ListSerialization.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ListSerialization.cs @@ -3,7 +3,7 @@ using System.IO; namespace UniGLTF { - public class ListSerialization : SerializationBase + public class ListSerialization : CollectionSerializationBase { IValueSerialization m_inner; diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ObjectSerialization.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ObjectSerialization.cs index ec4b49333..fc2c99b37 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/ObjectSerialization.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/ObjectSerialization.cs @@ -5,35 +5,7 @@ using System.Text; namespace UniGLTF { - public abstract class SerializationBase : IValueSerialization - { - public Type ValueType - { - get; - protected set; - } - - public bool IsInline - { - get { return false; } - } - - public abstract void GenerateDeserializer(StreamWriter writer, string callName); - - public string GenerateDeserializerCall(string callName, string argName) - { - return $"{callName}({argName})"; - } - - public abstract void GenerateSerializer(StreamWriter writer, string callName); - - public string GenerateSerializerCall(string callName, string argName) - { - return $"{callName}(f, {argName})"; - } - } - - public class ObjectSerialization : SerializationBase + public class ObjectSerialization : CollectionSerializationBase { string m_path; FieldSerializationInfo[] m_fsi; @@ -111,6 +83,16 @@ public static $0 $2(ListTreeNode parsed) } } + /// + /// シリアライザーのコード生成 + /// + /// ObjectのFieldのみ値によって、出力するか否かの判定が必用。 + /// + /// 例: 空文字列は出力しない + /// + /// + /// + /// public override void GenerateSerializer(StreamWriter writer, string callName) { writer.Write($@" @@ -123,9 +105,13 @@ public static void {callName}(JsonFormatter f, {ValueType.Name} value) foreach (var f in m_fsi) { - writer.Write($" f.Key(\"{f.Name}\");\n"); - writer.Write($" {f.Serialization.GenerateSerializerCall(f.FunctionName, $"value.{f.Name}")};\n"); - writer.Write("\n"); + var valueName = $"value.{f.Name}"; + writer.Write($@" + if({f.CreateSerializationCondition(f.Serialization.ValueType, valueName)}){{ + f.Key(""{f.Name}""); + {f.Serialization.GenerateSerializerCall(f.FunctionName, valueName)}; + }} +"); } writer.Write(@" diff --git a/Assets/UniGLTF/UniGLTF/Editor/Serialization/StringKeyDictionarySerialization.cs b/Assets/UniGLTF/UniGLTF/Editor/Serialization/StringKeyDictionarySerialization.cs index 62b997167..5c1787d3e 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Serialization/StringKeyDictionarySerialization.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Serialization/StringKeyDictionarySerialization.cs @@ -3,7 +3,7 @@ using System.IO; namespace UniGLTF { - public class StringKeyDictionarySerialization : SerializationBase + public class StringKeyDictionarySerialization : CollectionSerializationBase { IValueSerialization m_inner; @@ -12,6 +12,7 @@ namespace UniGLTF ValueType = t; m_inner = inner; } + public override void GenerateDeserializer(StreamWriter writer, string callName) { var itemCallName = callName + "_ITEM"; diff --git a/Assets/UniGLTF/UniGLTF/Editor/Tests/UniGLTFTests.cs b/Assets/UniGLTF/UniGLTF/Editor/Tests/UniGLTFTests.cs index 8170d62af..12b8fef8c 100644 --- a/Assets/UniGLTF/UniGLTF/Editor/Tests/UniGLTFTests.cs +++ b/Assets/UniGLTF/UniGLTF/Editor/Tests/UniGLTFTests.cs @@ -19,13 +19,13 @@ namespace UniGLTF public static string ToJson(this glTFMesh self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_meshes_LIST(f, self); + GltfSerializer.Serialize_gltf_meshes_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFPrimitives self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_meshes__primitives_LIST(f, self); + GltfSerializer.Serialize_gltf_meshes__primitives_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFAttributes self) @@ -43,19 +43,19 @@ namespace UniGLTF public static string ToJson(this glTFMaterial self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_materials_LIST(f, self); + GltfSerializer.Serialize_gltf_materials_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFNode self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_nodes_LIST(f, self); + GltfSerializer.Serialize_gltf_nodes_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFSkin self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_skins_LIST(f, self); + GltfSerializer.Serialize_gltf_skins_ITEM(f, self); return f.ToString(); } } diff --git a/Assets/UniGLTF/UniGLTF/Scripts/IO/GltfSerializer.g.cs b/Assets/UniGLTF/UniGLTF/Scripts/IO/GltfSerializer.g.cs index 99f59bc6d..1cb06a43a 100644 --- a/Assets/UniGLTF/UniGLTF/Scripts/IO/GltfSerializer.g.cs +++ b/Assets/UniGLTF/UniGLTF/Scripts/IO/GltfSerializer.g.cs @@ -12,63 +12,101 @@ public static void Serialize(JsonFormatter f, glTF value) { f.BeginMap(); - f.Key("asset"); - Serialize_gltf_asset(f, value.asset); - f.Key("buffers"); - Serialize_gltf_buffers(f, value.buffers); + if(value.asset!=null){ + f.Key("asset"); + Serialize_gltf_asset(f, value.asset); + } - f.Key("bufferViews"); - Serialize_gltf_bufferViews(f, value.bufferViews); + if(value.buffers!=null){ + f.Key("buffers"); + Serialize_gltf_buffers(f, value.buffers); + } - f.Key("accessors"); - Serialize_gltf_accessors(f, value.accessors); + if(value.bufferViews!=null){ + f.Key("bufferViews"); + Serialize_gltf_bufferViews(f, value.bufferViews); + } - f.Key("textures"); - Serialize_gltf_textures(f, value.textures); + if(value.accessors!=null){ + f.Key("accessors"); + Serialize_gltf_accessors(f, value.accessors); + } - f.Key("samplers"); - Serialize_gltf_samplers(f, value.samplers); + if(value.textures!=null){ + f.Key("textures"); + Serialize_gltf_textures(f, value.textures); + } - f.Key("images"); - Serialize_gltf_images(f, value.images); + if(value.samplers!=null){ + f.Key("samplers"); + Serialize_gltf_samplers(f, value.samplers); + } - f.Key("materials"); - Serialize_gltf_materials(f, value.materials); + if(value.images!=null){ + f.Key("images"); + Serialize_gltf_images(f, value.images); + } - f.Key("meshes"); - Serialize_gltf_meshes(f, value.meshes); + if(value.materials!=null){ + f.Key("materials"); + Serialize_gltf_materials(f, value.materials); + } - f.Key("nodes"); - Serialize_gltf_nodes(f, value.nodes); + if(value.meshes!=null){ + f.Key("meshes"); + Serialize_gltf_meshes(f, value.meshes); + } - f.Key("skins"); - Serialize_gltf_skins(f, value.skins); + if(value.nodes!=null){ + f.Key("nodes"); + Serialize_gltf_nodes(f, value.nodes); + } - f.Key("scene"); - f.Value(value.scene); + if(value.skins!=null){ + f.Key("skins"); + Serialize_gltf_skins(f, value.skins); + } - f.Key("scenes"); - Serialize_gltf_scenes(f, value.scenes); + if(true){ + f.Key("scene"); + f.Value(value.scene); + } - f.Key("animations"); - Serialize_gltf_animations(f, value.animations); + if(value.scenes!=null){ + f.Key("scenes"); + Serialize_gltf_scenes(f, value.scenes); + } - f.Key("cameras"); - Serialize_gltf_cameras(f, value.cameras); + if(value.animations!=null){ + f.Key("animations"); + Serialize_gltf_animations(f, value.animations); + } - f.Key("extensionsUsed"); - Serialize_gltf_extensionsUsed(f, value.extensionsUsed); + if(value.cameras!=null){ + f.Key("cameras"); + Serialize_gltf_cameras(f, value.cameras); + } - f.Key("extensionsRequired"); - Serialize_gltf_extensionsRequired(f, value.extensionsRequired); + if(value.extensionsUsed!=null){ + f.Key("extensionsUsed"); + Serialize_gltf_extensionsUsed(f, value.extensionsUsed); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.extensionsRequired!=null){ + f.Key("extensionsRequired"); + Serialize_gltf_extensionsRequired(f, value.extensionsRequired); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -77,24 +115,36 @@ public static void Serialize_gltf_asset(JsonFormatter f, glTFAssets value) { f.BeginMap(); - f.Key("generator"); - f.Value(value.generator); - f.Key("version"); - f.Value(value.version); + if(value.generator!=null){ + f.Key("generator"); + f.Value(value.generator); + } - f.Key("copyright"); - f.Value(value.copyright); + if(value.version!=null){ + f.Key("version"); + f.Value(value.version); + } - f.Key("minVersion"); - f.Value(value.minVersion); + if(value.copyright!=null){ + f.Key("copyright"); + f.Value(value.copyright); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.minVersion!=null){ + f.Key("minVersion"); + f.Value(value.minVersion); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -105,31 +155,41 @@ public static void Serialize_gltf_buffers(JsonFormatter f, List valu foreach(var item in value) { - Serialize_gltf_buffers_LIST(f, item); + Serialize_gltf_buffers_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_buffers_LIST(JsonFormatter f, glTFBuffer value) +public static void Serialize_gltf_buffers_ITEM(JsonFormatter f, glTFBuffer value) { f.BeginMap(); - f.Key("uri"); - f.Value(value.uri); - f.Key("byteLength"); - f.Value(value.byteLength); + if(value.uri!=null){ + f.Key("uri"); + f.Value(value.uri); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("byteLength"); + f.Value(value.byteLength); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } - f.Key("name"); - f.Value(value.name); + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } f.EndMap(); } @@ -140,40 +200,56 @@ public static void Serialize_gltf_bufferViews(JsonFormatter f, List foreach(var item in value) { - Serialize_gltf_accessors_LIST(f, item); + Serialize_gltf_accessors_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_accessors_LIST(JsonFormatter f, glTFAccessor value) +public static void Serialize_gltf_accessors_ITEM(JsonFormatter f, glTFAccessor value) { f.BeginMap(); - f.Key("bufferView"); - f.Value(value.bufferView); - f.Key("byteOffset"); - f.Value(value.byteOffset); + if(true){ + f.Key("bufferView"); + f.Value(value.bufferView); + } - f.Key("type"); - f.Value(value.type); + if(true){ + f.Key("byteOffset"); + f.Value(value.byteOffset); + } - f.Key("componentType"); - f.Value((int)value.componentType); + if(value.type!=null){ + f.Key("type"); + f.Value(value.type); + } - f.Key("count"); - f.Value(value.count); + if(true){ + f.Key("componentType"); + f.Value((int)value.componentType); + } - f.Key("max"); - Serialize_gltf_accessors__max(f, value.max); + if(true){ + f.Key("count"); + f.Value(value.count); + } - f.Key("min"); - Serialize_gltf_accessors__min(f, value.min); + if(value.max!=null){ + f.Key("max"); + Serialize_gltf_accessors__max(f, value.max); + } - f.Key("normalized"); - f.Value(value.normalized); + if(value.min!=null){ + f.Key("min"); + Serialize_gltf_accessors__min(f, value.min); + } - f.Key("sparse"); - Serialize_gltf_accessors__sparse(f, value.sparse); + if(true){ + f.Key("normalized"); + f.Value(value.normalized); + } - f.Key("name"); - f.Value(value.name); + if(value.sparse!=null){ + f.Key("sparse"); + Serialize_gltf_accessors__sparse(f, value.sparse); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -262,21 +362,31 @@ public static void Serialize_gltf_accessors__sparse(JsonFormatter f, glTFSparse { f.BeginMap(); - f.Key("count"); - f.Value(value.count); - f.Key("indices"); - Serialize_gltf_accessors__sparse_indices(f, value.indices); + if(true){ + f.Key("count"); + f.Value(value.count); + } - f.Key("values"); - Serialize_gltf_accessors__sparse_values(f, value.values); + if(value.indices!=null){ + f.Key("indices"); + Serialize_gltf_accessors__sparse_indices(f, value.indices); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.values!=null){ + f.Key("values"); + Serialize_gltf_accessors__sparse_values(f, value.values); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -285,21 +395,31 @@ public static void Serialize_gltf_accessors__sparse_indices(JsonFormatter f, glT { f.BeginMap(); - f.Key("bufferView"); - f.Value(value.bufferView); - f.Key("byteOffset"); - f.Value(value.byteOffset); + if(true){ + f.Key("bufferView"); + f.Value(value.bufferView); + } - f.Key("componentType"); - f.Value((int)value.componentType); + if(true){ + f.Key("byteOffset"); + f.Value(value.byteOffset); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("componentType"); + f.Value((int)value.componentType); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -308,18 +428,26 @@ public static void Serialize_gltf_accessors__sparse_values(JsonFormatter f, glTF { f.BeginMap(); - f.Key("bufferView"); - f.Value(value.bufferView); - f.Key("byteOffset"); - f.Value(value.byteOffset); + if(true){ + f.Key("bufferView"); + f.Value(value.bufferView); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("byteOffset"); + f.Value(value.byteOffset); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -330,31 +458,41 @@ public static void Serialize_gltf_textures(JsonFormatter f, List va foreach(var item in value) { - Serialize_gltf_textures_LIST(f, item); + Serialize_gltf_textures_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_textures_LIST(JsonFormatter f, glTFTexture value) +public static void Serialize_gltf_textures_ITEM(JsonFormatter f, glTFTexture value) { f.BeginMap(); - f.Key("sampler"); - f.Value(value.sampler); - f.Key("source"); - f.Value(value.source); + if(true){ + f.Key("sampler"); + f.Value(value.sampler); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("source"); + f.Value(value.source); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } - f.Key("name"); - f.Value(value.name); + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } f.EndMap(); } @@ -365,37 +503,51 @@ public static void Serialize_gltf_samplers(JsonFormatter f, List value) foreach(var item in value) { - Serialize_gltf_images_LIST(f, item); + Serialize_gltf_images_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_images_LIST(JsonFormatter f, glTFImage value) +public static void Serialize_gltf_images_ITEM(JsonFormatter f, glTFImage value) { f.BeginMap(); - f.Key("name"); - f.Value(value.name); - f.Key("uri"); - f.Value(value.uri); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("bufferView"); - f.Value(value.bufferView); + if(value.uri!=null){ + f.Key("uri"); + f.Value(value.uri); + } - f.Key("mimeType"); - f.Value(value.mimeType); + if(true){ + f.Key("bufferView"); + f.Value(value.bufferView); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.mimeType!=null){ + f.Key("mimeType"); + f.Value(value.mimeType); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -444,49 +608,71 @@ public static void Serialize_gltf_materials(JsonFormatter f, List foreach(var item in value) { - Serialize_gltf_materials_LIST(f, item); + Serialize_gltf_materials_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_materials_LIST(JsonFormatter f, glTFMaterial value) +public static void Serialize_gltf_materials_ITEM(JsonFormatter f, glTFMaterial value) { f.BeginMap(); - f.Key("name"); - f.Value(value.name); - f.Key("pbrMetallicRoughness"); - Serialize_gltf_materials__pbrMetallicRoughness(f, value.pbrMetallicRoughness); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("normalTexture"); - Serialize_gltf_materials__normalTexture(f, value.normalTexture); + if(value.pbrMetallicRoughness!=null){ + f.Key("pbrMetallicRoughness"); + Serialize_gltf_materials__pbrMetallicRoughness(f, value.pbrMetallicRoughness); + } - f.Key("occlusionTexture"); - Serialize_gltf_materials__occlusionTexture(f, value.occlusionTexture); + if(value.normalTexture!=null){ + f.Key("normalTexture"); + Serialize_gltf_materials__normalTexture(f, value.normalTexture); + } - f.Key("emissiveTexture"); - Serialize_gltf_materials__emissiveTexture(f, value.emissiveTexture); + if(value.occlusionTexture!=null){ + f.Key("occlusionTexture"); + Serialize_gltf_materials__occlusionTexture(f, value.occlusionTexture); + } - f.Key("emissiveFactor"); - Serialize_gltf_materials__emissiveFactor(f, value.emissiveFactor); + if(value.emissiveTexture!=null){ + f.Key("emissiveTexture"); + Serialize_gltf_materials__emissiveTexture(f, value.emissiveTexture); + } - f.Key("alphaMode"); - f.Value(value.alphaMode); + if(value.emissiveFactor!=null){ + f.Key("emissiveFactor"); + Serialize_gltf_materials__emissiveFactor(f, value.emissiveFactor); + } - f.Key("alphaCutoff"); - f.Value(value.alphaCutoff); + if(value.alphaMode!=null){ + f.Key("alphaMode"); + f.Value(value.alphaMode); + } - f.Key("doubleSided"); - f.Value(value.doubleSided); + if(true){ + f.Key("alphaCutoff"); + f.Value(value.alphaCutoff); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("doubleSided"); + f.Value(value.doubleSided); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -495,27 +681,41 @@ public static void Serialize_gltf_materials__pbrMetallicRoughness(JsonFormatter { f.BeginMap(); - f.Key("baseColorTexture"); - Serialize_gltf_materials__pbrMetallicRoughness_baseColorTexture(f, value.baseColorTexture); - f.Key("baseColorFactor"); - Serialize_gltf_materials__pbrMetallicRoughness_baseColorFactor(f, value.baseColorFactor); + if(value.baseColorTexture!=null){ + f.Key("baseColorTexture"); + Serialize_gltf_materials__pbrMetallicRoughness_baseColorTexture(f, value.baseColorTexture); + } - f.Key("metallicRoughnessTexture"); - Serialize_gltf_materials__pbrMetallicRoughness_metallicRoughnessTexture(f, value.metallicRoughnessTexture); + if(value.baseColorFactor!=null){ + f.Key("baseColorFactor"); + Serialize_gltf_materials__pbrMetallicRoughness_baseColorFactor(f, value.baseColorFactor); + } - f.Key("metallicFactor"); - f.Value(value.metallicFactor); + if(value.metallicRoughnessTexture!=null){ + f.Key("metallicRoughnessTexture"); + Serialize_gltf_materials__pbrMetallicRoughness_metallicRoughnessTexture(f, value.metallicRoughnessTexture); + } - f.Key("roughnessFactor"); - f.Value(value.roughnessFactor); + if(true){ + f.Key("metallicFactor"); + f.Value(value.metallicFactor); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("roughnessFactor"); + f.Value(value.roughnessFactor); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -524,18 +724,26 @@ public static void Serialize_gltf_materials__pbrMetallicRoughness_baseColorTextu { f.BeginMap(); - f.Key("index"); - f.Value(value.index); - f.Key("texCoord"); - f.Value(value.texCoord); + if(true){ + f.Key("index"); + f.Value(value.index); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("texCoord"); + f.Value(value.texCoord); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -556,18 +764,26 @@ public static void Serialize_gltf_materials__pbrMetallicRoughness_metallicRoughn { f.BeginMap(); - f.Key("index"); - f.Value(value.index); - f.Key("texCoord"); - f.Value(value.texCoord); + if(true){ + f.Key("index"); + f.Value(value.index); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("texCoord"); + f.Value(value.texCoord); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -576,21 +792,31 @@ public static void Serialize_gltf_materials__normalTexture(JsonFormatter f, glTF { f.BeginMap(); - f.Key("scale"); - f.Value(value.scale); - f.Key("index"); - f.Value(value.index); + if(true){ + f.Key("scale"); + f.Value(value.scale); + } - f.Key("texCoord"); - f.Value(value.texCoord); + if(true){ + f.Key("index"); + f.Value(value.index); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("texCoord"); + f.Value(value.texCoord); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -599,21 +825,31 @@ public static void Serialize_gltf_materials__occlusionTexture(JsonFormatter f, g { f.BeginMap(); - f.Key("strength"); - f.Value(value.strength); - f.Key("index"); - f.Value(value.index); + if(true){ + f.Key("strength"); + f.Value(value.strength); + } - f.Key("texCoord"); - f.Value(value.texCoord); + if(true){ + f.Key("index"); + f.Value(value.index); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("texCoord"); + f.Value(value.texCoord); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -622,18 +858,26 @@ public static void Serialize_gltf_materials__emissiveTexture(JsonFormatter f, gl { f.BeginMap(); - f.Key("index"); - f.Value(value.index); - f.Key("texCoord"); - f.Value(value.texCoord); + if(true){ + f.Key("index"); + f.Value(value.index); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("texCoord"); + f.Value(value.texCoord); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -656,31 +900,41 @@ public static void Serialize_gltf_meshes(JsonFormatter f, List value) foreach(var item in value) { - Serialize_gltf_meshes_LIST(f, item); + Serialize_gltf_meshes_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_meshes_LIST(JsonFormatter f, glTFMesh value) +public static void Serialize_gltf_meshes_ITEM(JsonFormatter f, glTFMesh value) { f.BeginMap(); - f.Key("name"); - f.Value(value.name); - f.Key("primitives"); - Serialize_gltf_meshes__primitives(f, value.primitives); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("weights"); - Serialize_gltf_meshes__weights(f, value.weights); + if(value.primitives!=null){ + f.Key("primitives"); + Serialize_gltf_meshes__primitives(f, value.primitives); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.weights!=null){ + f.Key("weights"); + Serialize_gltf_meshes__weights(f, value.weights); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -691,37 +945,51 @@ public static void Serialize_gltf_meshes__primitives(JsonFormatter f, List value) foreach(var item in value) { - Serialize_gltf_nodes_LIST(f, item); + Serialize_gltf_nodes_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_nodes_LIST(JsonFormatter f, glTFNode value) +public static void Serialize_gltf_nodes_ITEM(JsonFormatter f, glTFNode value) { f.BeginMap(); - f.Key("name"); - f.Value(value.name); - f.Key("children"); - Serialize_gltf_nodes__children(f, value.children); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("matrix"); - Serialize_gltf_nodes__matrix(f, value.matrix); + if(value.children!=null){ + f.Key("children"); + Serialize_gltf_nodes__children(f, value.children); + } - f.Key("translation"); - Serialize_gltf_nodes__translation(f, value.translation); + if(value.matrix!=null){ + f.Key("matrix"); + Serialize_gltf_nodes__matrix(f, value.matrix); + } - f.Key("rotation"); - Serialize_gltf_nodes__rotation(f, value.rotation); + if(value.translation!=null){ + f.Key("translation"); + Serialize_gltf_nodes__translation(f, value.translation); + } - f.Key("scale"); - Serialize_gltf_nodes__scale(f, value.scale); + if(value.rotation!=null){ + f.Key("rotation"); + Serialize_gltf_nodes__rotation(f, value.rotation); + } - f.Key("mesh"); - f.Value(value.mesh); + if(value.scale!=null){ + f.Key("scale"); + Serialize_gltf_nodes__scale(f, value.scale); + } - f.Key("skin"); - f.Value(value.skin); + if(true){ + f.Key("mesh"); + f.Value(value.mesh); + } - f.Key("weights"); - Serialize_gltf_nodes__weights(f, value.weights); + if(true){ + f.Key("skin"); + f.Value(value.skin); + } - f.Key("camera"); - f.Value(value.camera); + if(value.weights!=null){ + f.Key("weights"); + Serialize_gltf_nodes__weights(f, value.weights); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("camera"); + f.Value(value.camera); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -933,34 +1247,46 @@ public static void Serialize_gltf_skins(JsonFormatter f, List value) foreach(var item in value) { - Serialize_gltf_skins_LIST(f, item); + Serialize_gltf_skins_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_skins_LIST(JsonFormatter f, glTFSkin value) +public static void Serialize_gltf_skins_ITEM(JsonFormatter f, glTFSkin value) { f.BeginMap(); - f.Key("inverseBindMatrices"); - f.Value(value.inverseBindMatrices); - f.Key("joints"); - Serialize_gltf_skins__joints(f, value.joints); + if(true){ + f.Key("inverseBindMatrices"); + f.Value(value.inverseBindMatrices); + } - f.Key("skeleton"); - f.Value(value.skeleton); + if(value.joints!=null){ + f.Key("joints"); + Serialize_gltf_skins__joints(f, value.joints); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("skeleton"); + f.Value(value.skeleton); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } - f.Key("name"); - f.Value(value.name); + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } f.EndMap(); } @@ -983,28 +1309,36 @@ public static void Serialize_gltf_scenes(JsonFormatter f, List value) foreach(var item in value) { - Serialize_gltf_scenes_LIST(f, item); + Serialize_gltf_scenes_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_scenes_LIST(JsonFormatter f, gltfScene value) +public static void Serialize_gltf_scenes_ITEM(JsonFormatter f, gltfScene value) { f.BeginMap(); - f.Key("nodes"); - Serialize_gltf_scenes__nodes(f, value.nodes); - f.Key("extensions"); - value.extras.Serialize(f); + if(value.nodes!=null){ + f.Key("nodes"); + Serialize_gltf_scenes__nodes(f, value.nodes); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } - f.Key("name"); - f.Value(value.name); + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } f.EndMap(); } @@ -1027,31 +1361,41 @@ public static void Serialize_gltf_animations(JsonFormatter f, List valu foreach(var item in value) { - Serialize_gltf_cameras_LIST(f, item); + Serialize_gltf_cameras_ITEM(f, item); } f.EndList(); } -public static void Serialize_gltf_cameras_LIST(JsonFormatter f, glTFCamera value) +public static void Serialize_gltf_cameras_ITEM(JsonFormatter f, glTFCamera value) { f.BeginMap(); - f.Key("orthographic"); - Serialize_gltf_cameras__orthographic(f, value.orthographic); - f.Key("perspective"); - Serialize_gltf_cameras__perspective(f, value.perspective); + if(value.orthographic!=null){ + f.Key("orthographic"); + Serialize_gltf_cameras__orthographic(f, value.orthographic); + } - f.Key("type"); - f.Value(value.type.ToString().ToLower()); + if(value.perspective!=null){ + f.Key("perspective"); + Serialize_gltf_cameras__perspective(f, value.perspective); + } - f.Key("name"); - f.Value(value.name); + if(true){ + f.Key("type"); + f.Value(value.type.ToString().ToLower()); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(value.name!=null){ + f.Key("name"); + f.Value(value.name); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -1185,24 +1567,36 @@ public static void Serialize_gltf_cameras__orthographic(JsonFormatter f, glTFOrt { f.BeginMap(); - f.Key("xmag"); - f.Value(value.xmag); - f.Key("ymag"); - f.Value(value.ymag); + if(true){ + f.Key("xmag"); + f.Value(value.xmag); + } - f.Key("zfar"); - f.Value(value.zfar); + if(true){ + f.Key("ymag"); + f.Value(value.ymag); + } - f.Key("znear"); - f.Value(value.znear); + if(true){ + f.Key("zfar"); + f.Value(value.zfar); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("znear"); + f.Value(value.znear); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } @@ -1211,24 +1605,36 @@ public static void Serialize_gltf_cameras__perspective(JsonFormatter f, glTFPers { f.BeginMap(); - f.Key("aspectRatio"); - f.Value(value.aspectRatio); - f.Key("yfov"); - f.Value(value.yfov); + if(true){ + f.Key("aspectRatio"); + f.Value(value.aspectRatio); + } - f.Key("zfar"); - f.Value(value.zfar); + if(true){ + f.Key("yfov"); + f.Value(value.yfov); + } - f.Key("znear"); - f.Value(value.znear); + if(true){ + f.Key("zfar"); + f.Value(value.zfar); + } - f.Key("extensions"); - value.extras.Serialize(f); + if(true){ + f.Key("znear"); + f.Value(value.znear); + } - f.Key("extras"); - value.extras.Serialize(f); + if(value.extensions!=null){ + f.Key("extensions"); + value.extras.Serialize(f); + } + if(value.extras!=null){ + f.Key("extras"); + value.extras.Serialize(f); + } f.EndMap(); } diff --git a/Assets/VRM/UniVRM/Editor/Tests/UniVRMSerializeTests.cs b/Assets/VRM/UniVRM/Editor/Tests/UniVRMSerializeTests.cs index 9b5a2dc45..dbb0770d4 100644 --- a/Assets/VRM/UniVRM/Editor/Tests/UniVRMSerializeTests.cs +++ b/Assets/VRM/UniVRM/Editor/Tests/UniVRMSerializeTests.cs @@ -18,13 +18,13 @@ namespace VRM public static string ToJson(this glTFMesh self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_meshes_LIST(f, self); + GltfSerializer.Serialize_gltf_meshes_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFPrimitives self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_meshes__primitives_LIST(f, self); + GltfSerializer.Serialize_gltf_meshes__primitives_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFAttributes self) @@ -42,19 +42,19 @@ namespace VRM public static string ToJson(this glTFMaterial self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_materials_LIST(f, self); + GltfSerializer.Serialize_gltf_materials_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFNode self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_nodes_LIST(f, self); + GltfSerializer.Serialize_gltf_nodes_ITEM(f, self); return f.ToString(); } public static string ToJson(this glTFSkin self) { var f = new JsonFormatter(); - GltfSerializer.Serialize_gltf_skins_LIST(f, self); + GltfSerializer.Serialize_gltf_skins_ITEM(f, self); return f.ToString(); }