VRMSerializerGenerator

This commit is contained in:
ousttrue 2020-11-20 19:06:17 +09:00
parent fe2df8b11e
commit 07729d8f9c
12 changed files with 1540 additions and 81 deletions

View File

@ -81,7 +81,6 @@ namespace UniGLTF
{"gltf/meshes[]/primitives[]/attributes/JOINTS_0", "if(value.JOINTS_0!=-1)"},
{"gltf/meshes[]/primitives[]/attributes/WEIGHTS_0", "if(value.WEIGHTS_0!=-1)"},
{"gltf/meshes[]/primitives[]/extras", "if(value.extras!=null && value.extras.targetNames!=null && value.extras.targetNames.Count>0)"},
{"gltf/meshes[]/weights", "if(value.weights!=null && value.weights.Length>0)" },
{"gltf/materials", "if(value.materials!=null && value.materials.Count>0)" },
{"gltf/materials[]/alphaCutoff", "if(value.alphaMode == \"MASK\")" },
@ -154,14 +153,16 @@ namespace UniGLTF {
}
m_used.Add(t);
//
// primitive
//
try
{
var mi = typeof(IFormatter).GetMethod("Value", new Type[] { t });
var mi = typeof(JsonFormatter).GetMethod("Value", new Type[] { t });
if (mi != null)
{
m_w.Write(@"
public static void GenSerialize(this IFormatter f, $0 value)
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.Value(value);
}
@ -177,8 +178,11 @@ namespace UniGLTF {
if (t.IsEnum)
{
//
// enum
//
m_w.Write(@"
public static void GenSerialize(this IFormatter f, $0 value)
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.Value((int)value);
}
@ -189,7 +193,7 @@ namespace UniGLTF {
var et = t.GetElementType();
m_w.Write(@"
/// $1
public static void GenSerialize(this IFormatter f, $0[] value)
public static void GenSerialize(this JsonFormatter f, $0[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
@ -208,10 +212,13 @@ namespace UniGLTF {
{
if (t.GetGenericTypeDefinition() == typeof(List<>))
{
//
// array
//
var et = t.GetGenericArguments()[0];
m_w.Write(@"
/// $1
public static void GenSerialize(this IFormatter f, List<$0> value)
public static void GenSerialize(this JsonFormatter f, List<$0> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -228,10 +235,13 @@ namespace UniGLTF {
else if (t.GetGenericTypeDefinition() == typeof(Dictionary<,>)
&& t.GetGenericArguments()[0] == typeof(string))
{
//
// object
//
var et = t.GetGenericArguments()[1];
m_w.Write(@"
/// $1
public static void GenSerialize(this IFormatter f, Dictionary<string, $0> value)
public static void GenSerialize(this JsonFormatter f, Dictionary<string, $0> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
@ -252,13 +262,20 @@ namespace UniGLTF {
Debug.LogWarningFormat("unknown type: {0}", t);
}
}
else if (t == typeof(glTFExtension))
{
// skip
}
else
{
//
// reflection
//
Debug.LogFormat("{0}({1})", path, t.Name);
m_w.Write(@"
/// $1
public static void GenSerialize(this IFormatter f, $0 value)
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.BeginMap(0); // dummy
"

View File

@ -111,7 +111,7 @@ namespace UniGLTF
f.EndMap();
info.extensions.Serialized.Add(ExtensionName, f.GetStore().ToString());
info.extensions.Serialized.Add(ExtensionName, f.GetStore().Bytes);
}
}
}

View File

@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using UniJSON;
namespace UniGLTF
@ -8,16 +10,19 @@ namespace UniGLTF
/// </summary>
public class glTFExtension
{
// NO BOM
static Encoding Utf8 = new UTF8Encoding(false);
#region for Export
public readonly Dictionary<string, string> Serialized;
public readonly Dictionary<string, ArraySegment<byte>> Serialized;
public glTFExtension()
{
Serialized = new Dictionary<string, string>();
Serialized = new Dictionary<string, ArraySegment<byte>>();
}
public static glTFExtension Create(string key, string serialized)
{
var e = new glTFExtension();
e.Serialized.Add(key, serialized);
e.Serialized.Add(key, new ArraySegment<byte>(Utf8.GetBytes(serialized)));
return e;
}
#endregion
@ -41,4 +46,19 @@ namespace UniGLTF
}
#endregion
}
public static class GltfExtensionFormatterExtensions
{
public static void GenSerialize(this JsonFormatter f, glTFExtension v)
{
//CommaCheck();
f.BeginMap();
foreach (var kv in v.Serialized)
{
f.Key(kv.Key);
f.Raw(kv.Value);
}
f.EndMap();
}
}
}

View File

@ -83,7 +83,7 @@ namespace UniGLTF
f.Value(n);
}
f.EndList();
var targetNamesJson = f.GetStore().ToString();
var targetNamesJson = f.GetStore().Bytes;
if (gltfMesh.extras == null)
{

View File

@ -381,6 +381,7 @@ namespace UniGLTF
{
var f = new JsonFormatter();
f.GenSerialize(this);
var json = f.ToString().ParseAsJson().ToString(" ");
RemoveUnusedExtensions(json);

View File

@ -10,13 +10,9 @@ namespace UniGLTF {
static public class IFormatterExtensionsGltf
{
public static void GenSerialize(this IFormatter f, glTF_VRM_extensions value)
{
}
/// gltf
public static void GenSerialize(this IFormatter f, glTF value)
public static void GenSerialize(this JsonFormatter f, glTF value)
{
f.BeginMap(0); // dummy
@ -105,11 +101,21 @@ namespace UniGLTF {
f.Key("extensionsRequired"); f.GenSerialize(value.extensionsRequired);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/asset
public static void GenSerialize(this IFormatter f, glTFAssets value)
public static void GenSerialize(this JsonFormatter f, glTFAssets value)
{
f.BeginMap(0); // dummy
@ -133,16 +139,26 @@ namespace UniGLTF {
f.Key("minVersion"); f.GenSerialize(value.minVersion);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
public static void GenSerialize(this IFormatter f, String value)
public static void GenSerialize(this JsonFormatter f, String value)
{
f.Value(value);
}
/// gltf/buffers
public static void GenSerialize(this IFormatter f, List<glTFBuffer> value)
public static void GenSerialize(this JsonFormatter f, List<glTFBuffer> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -153,7 +169,7 @@ namespace UniGLTF {
}
/// gltf/buffers[]
public static void GenSerialize(this IFormatter f, glTFBuffer value)
public static void GenSerialize(this JsonFormatter f, glTFBuffer value)
{
f.BeginMap(0); // dummy
@ -167,6 +183,16 @@ namespace UniGLTF {
f.Key("byteLength"); f.GenSerialize(value.byteLength);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -175,13 +201,13 @@ namespace UniGLTF {
f.EndMap();
}
public static void GenSerialize(this IFormatter f, Int32 value)
public static void GenSerialize(this JsonFormatter f, Int32 value)
{
f.Value(value);
}
/// gltf/bufferViews
public static void GenSerialize(this IFormatter f, List<glTFBufferView> value)
public static void GenSerialize(this JsonFormatter f, List<glTFBufferView> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -192,7 +218,7 @@ namespace UniGLTF {
}
/// gltf/bufferViews[]
public static void GenSerialize(this IFormatter f, glTFBufferView value)
public static void GenSerialize(this JsonFormatter f, glTFBufferView value)
{
f.BeginMap(0); // dummy
@ -216,6 +242,16 @@ namespace UniGLTF {
f.Key("target"); f.GenSerialize(value.target);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -224,13 +260,13 @@ namespace UniGLTF {
f.EndMap();
}
public static void GenSerialize(this IFormatter f, glBufferTarget value)
public static void GenSerialize(this JsonFormatter f, glBufferTarget value)
{
f.Value((int)value);
}
/// gltf/accessors
public static void GenSerialize(this IFormatter f, List<glTFAccessor> value)
public static void GenSerialize(this JsonFormatter f, List<glTFAccessor> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -241,7 +277,7 @@ namespace UniGLTF {
}
/// gltf/accessors[]
public static void GenSerialize(this IFormatter f, glTFAccessor value)
public static void GenSerialize(this JsonFormatter f, glTFAccessor value)
{
f.BeginMap(0); // dummy
@ -295,16 +331,26 @@ namespace UniGLTF {
f.Key("name"); f.GenSerialize(value.name);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
public static void GenSerialize(this IFormatter f, glComponentType value)
public static void GenSerialize(this JsonFormatter f, glComponentType value)
{
f.Value((int)value);
}
/// gltf/accessors[]/max
public static void GenSerialize(this IFormatter f, Single[] value)
public static void GenSerialize(this JsonFormatter f, Single[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
@ -314,18 +360,18 @@ namespace UniGLTF {
f.EndList();
}
public static void GenSerialize(this IFormatter f, Single value)
public static void GenSerialize(this JsonFormatter f, Single value)
{
f.Value(value);
}
public static void GenSerialize(this IFormatter f, Boolean value)
public static void GenSerialize(this JsonFormatter f, Boolean value)
{
f.Value(value);
}
/// gltf/accessors[]/sparse
public static void GenSerialize(this IFormatter f, glTFSparse value)
public static void GenSerialize(this JsonFormatter f, glTFSparse value)
{
f.BeginMap(0); // dummy
@ -344,11 +390,21 @@ namespace UniGLTF {
f.Key("values"); f.GenSerialize(value.values);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/accessors[]/sparse/indices
public static void GenSerialize(this IFormatter f, glTFSparseIndices value)
public static void GenSerialize(this JsonFormatter f, glTFSparseIndices value)
{
f.BeginMap(0); // dummy
@ -367,11 +423,21 @@ namespace UniGLTF {
f.Key("componentType"); f.GenSerialize(value.componentType);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/accessors[]/sparse/values
public static void GenSerialize(this IFormatter f, glTFSparseValues value)
public static void GenSerialize(this JsonFormatter f, glTFSparseValues value)
{
f.BeginMap(0); // dummy
@ -385,11 +451,21 @@ namespace UniGLTF {
f.Key("byteOffset"); f.GenSerialize(value.byteOffset);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/textures
public static void GenSerialize(this IFormatter f, List<glTFTexture> value)
public static void GenSerialize(this JsonFormatter f, List<glTFTexture> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -400,7 +476,7 @@ namespace UniGLTF {
}
/// gltf/textures[]
public static void GenSerialize(this IFormatter f, glTFTexture value)
public static void GenSerialize(this JsonFormatter f, glTFTexture value)
{
f.BeginMap(0); // dummy
@ -414,6 +490,16 @@ namespace UniGLTF {
f.Key("source"); f.GenSerialize(value.source);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -423,7 +509,7 @@ namespace UniGLTF {
}
/// gltf/samplers
public static void GenSerialize(this IFormatter f, List<glTFTextureSampler> value)
public static void GenSerialize(this JsonFormatter f, List<glTFTextureSampler> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -434,7 +520,7 @@ namespace UniGLTF {
}
/// gltf/samplers[]
public static void GenSerialize(this IFormatter f, glTFTextureSampler value)
public static void GenSerialize(this JsonFormatter f, glTFTextureSampler value)
{
f.BeginMap(0); // dummy
@ -458,6 +544,16 @@ namespace UniGLTF {
f.Key("wrapT"); f.GenSerialize(value.wrapT);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -466,18 +562,18 @@ namespace UniGLTF {
f.EndMap();
}
public static void GenSerialize(this IFormatter f, glFilter value)
public static void GenSerialize(this JsonFormatter f, glFilter value)
{
f.Value((int)value);
}
public static void GenSerialize(this IFormatter f, glWrap value)
public static void GenSerialize(this JsonFormatter f, glWrap value)
{
f.Value((int)value);
}
/// gltf/images
public static void GenSerialize(this IFormatter f, List<glTFImage> value)
public static void GenSerialize(this JsonFormatter f, List<glTFImage> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -488,7 +584,7 @@ namespace UniGLTF {
}
/// gltf/images[]
public static void GenSerialize(this IFormatter f, glTFImage value)
public static void GenSerialize(this JsonFormatter f, glTFImage value)
{
f.BeginMap(0); // dummy
@ -512,11 +608,21 @@ namespace UniGLTF {
f.Key("mimeType"); f.GenSerialize(value.mimeType);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials
public static void GenSerialize(this IFormatter f, List<glTFMaterial> value)
public static void GenSerialize(this JsonFormatter f, List<glTFMaterial> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -527,7 +633,7 @@ namespace UniGLTF {
}
/// gltf/materials[]
public static void GenSerialize(this IFormatter f, glTFMaterial value)
public static void GenSerialize(this JsonFormatter f, glTFMaterial value)
{
f.BeginMap(0); // dummy
@ -576,11 +682,21 @@ namespace UniGLTF {
f.Key("doubleSided"); f.GenSerialize(value.doubleSided);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/pbrMetallicRoughness
public static void GenSerialize(this IFormatter f, glTFPbrMetallicRoughness value)
public static void GenSerialize(this JsonFormatter f, glTFPbrMetallicRoughness value)
{
f.BeginMap(0); // dummy
@ -609,11 +725,21 @@ namespace UniGLTF {
f.Key("roughnessFactor"); f.GenSerialize(value.roughnessFactor);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/pbrMetallicRoughness/baseColorTexture
public static void GenSerialize(this IFormatter f, glTFMaterialBaseColorTextureInfo value)
public static void GenSerialize(this JsonFormatter f, glTFMaterialBaseColorTextureInfo value)
{
f.BeginMap(0); // dummy
@ -627,11 +753,21 @@ namespace UniGLTF {
f.Key("texCoord"); f.GenSerialize(value.texCoord);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/pbrMetallicRoughness/metallicRoughnessTexture
public static void GenSerialize(this IFormatter f, glTFMaterialMetallicRoughnessTextureInfo value)
public static void GenSerialize(this JsonFormatter f, glTFMaterialMetallicRoughnessTextureInfo value)
{
f.BeginMap(0); // dummy
@ -645,11 +781,21 @@ namespace UniGLTF {
f.Key("texCoord"); f.GenSerialize(value.texCoord);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/normalTexture
public static void GenSerialize(this IFormatter f, glTFMaterialNormalTextureInfo value)
public static void GenSerialize(this JsonFormatter f, glTFMaterialNormalTextureInfo value)
{
f.BeginMap(0); // dummy
@ -668,11 +814,21 @@ namespace UniGLTF {
f.Key("texCoord"); f.GenSerialize(value.texCoord);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/occlusionTexture
public static void GenSerialize(this IFormatter f, glTFMaterialOcclusionTextureInfo value)
public static void GenSerialize(this JsonFormatter f, glTFMaterialOcclusionTextureInfo value)
{
f.BeginMap(0); // dummy
@ -691,11 +847,21 @@ namespace UniGLTF {
f.Key("texCoord"); f.GenSerialize(value.texCoord);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/materials[]/emissiveTexture
public static void GenSerialize(this IFormatter f, glTFMaterialEmissiveTextureInfo value)
public static void GenSerialize(this JsonFormatter f, glTFMaterialEmissiveTextureInfo value)
{
f.BeginMap(0); // dummy
@ -709,11 +875,21 @@ namespace UniGLTF {
f.Key("texCoord"); f.GenSerialize(value.texCoord);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/meshes
public static void GenSerialize(this IFormatter f, List<glTFMesh> value)
public static void GenSerialize(this JsonFormatter f, List<glTFMesh> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -724,7 +900,7 @@ namespace UniGLTF {
}
/// gltf/meshes[]
public static void GenSerialize(this IFormatter f, glTFMesh value)
public static void GenSerialize(this JsonFormatter f, glTFMesh value)
{
f.BeginMap(0); // dummy
@ -743,11 +919,21 @@ namespace UniGLTF {
f.Key("weights"); f.GenSerialize(value.weights);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
f.EndMap();
}
/// gltf/meshes[]/primitives
public static void GenSerialize(this IFormatter f, List<glTFPrimitives> value)
public static void GenSerialize(this JsonFormatter f, List<glTFPrimitives> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -758,7 +944,7 @@ namespace UniGLTF {
}
/// gltf/meshes[]/primitives[]
public static void GenSerialize(this IFormatter f, glTFPrimitives value)
public static void GenSerialize(this JsonFormatter f, glTFPrimitives value)
{
f.BeginMap(0); // dummy
@ -787,11 +973,21 @@ namespace UniGLTF {
f.Key("targets"); f.GenSerialize(value.targets);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
f.EndMap();
}
/// gltf/meshes[]/primitives[]/attributes
public static void GenSerialize(this IFormatter f, glTFAttributes value)
public static void GenSerialize(this JsonFormatter f, glTFAttributes value)
{
f.BeginMap(0); // dummy
@ -839,7 +1035,7 @@ namespace UniGLTF {
}
/// gltf/meshes[]/primitives[]/targets
public static void GenSerialize(this IFormatter f, List<gltfMorphTarget> value)
public static void GenSerialize(this JsonFormatter f, List<gltfMorphTarget> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -850,7 +1046,7 @@ namespace UniGLTF {
}
/// gltf/meshes[]/primitives[]/targets[]
public static void GenSerialize(this IFormatter f, gltfMorphTarget value)
public static void GenSerialize(this JsonFormatter f, gltfMorphTarget value)
{
f.BeginMap(0); // dummy
@ -873,7 +1069,7 @@ namespace UniGLTF {
}
/// gltf/nodes
public static void GenSerialize(this IFormatter f, List<glTFNode> value)
public static void GenSerialize(this JsonFormatter f, List<glTFNode> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -884,7 +1080,7 @@ namespace UniGLTF {
}
/// gltf/nodes[]
public static void GenSerialize(this IFormatter f, glTFNode value)
public static void GenSerialize(this JsonFormatter f, glTFNode value)
{
f.BeginMap(0); // dummy
@ -938,11 +1134,21 @@ namespace UniGLTF {
f.Key("camera"); f.GenSerialize(value.camera);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/nodes[]/children
public static void GenSerialize(this IFormatter f, Int32[] value)
public static void GenSerialize(this JsonFormatter f, Int32[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
@ -953,7 +1159,7 @@ namespace UniGLTF {
}
/// gltf/skins
public static void GenSerialize(this IFormatter f, List<glTFSkin> value)
public static void GenSerialize(this JsonFormatter f, List<glTFSkin> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -964,7 +1170,7 @@ namespace UniGLTF {
}
/// gltf/skins[]
public static void GenSerialize(this IFormatter f, glTFSkin value)
public static void GenSerialize(this JsonFormatter f, glTFSkin value)
{
f.BeginMap(0); // dummy
@ -983,6 +1189,16 @@ namespace UniGLTF {
f.Key("skeleton"); f.GenSerialize(value.skeleton);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -992,7 +1208,7 @@ namespace UniGLTF {
}
/// gltf/scenes
public static void GenSerialize(this IFormatter f, List<gltfScene> value)
public static void GenSerialize(this JsonFormatter f, List<gltfScene> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -1003,7 +1219,7 @@ namespace UniGLTF {
}
/// gltf/scenes[]
public static void GenSerialize(this IFormatter f, gltfScene value)
public static void GenSerialize(this JsonFormatter f, gltfScene value)
{
f.BeginMap(0); // dummy
@ -1012,6 +1228,16 @@ namespace UniGLTF {
f.Key("nodes"); f.GenSerialize(value.nodes);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
@ -1021,7 +1247,7 @@ namespace UniGLTF {
}
/// gltf/animations
public static void GenSerialize(this IFormatter f, List<glTFAnimation> value)
public static void GenSerialize(this JsonFormatter f, List<glTFAnimation> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -1032,7 +1258,7 @@ namespace UniGLTF {
}
/// gltf/animations[]
public static void GenSerialize(this IFormatter f, glTFAnimation value)
public static void GenSerialize(this JsonFormatter f, glTFAnimation value)
{
f.BeginMap(0); // dummy
@ -1051,11 +1277,21 @@ namespace UniGLTF {
f.Key("samplers"); f.GenSerialize(value.samplers);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/animations[]/channels
public static void GenSerialize(this IFormatter f, List<glTFAnimationChannel> value)
public static void GenSerialize(this JsonFormatter f, List<glTFAnimationChannel> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -1066,7 +1302,7 @@ namespace UniGLTF {
}
/// gltf/animations[]/channels[]
public static void GenSerialize(this IFormatter f, glTFAnimationChannel value)
public static void GenSerialize(this JsonFormatter f, glTFAnimationChannel value)
{
f.BeginMap(0); // dummy
@ -1080,11 +1316,21 @@ namespace UniGLTF {
f.Key("target"); f.GenSerialize(value.target);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/animations[]/channels[]/target
public static void GenSerialize(this IFormatter f, glTFAnimationTarget value)
public static void GenSerialize(this JsonFormatter f, glTFAnimationTarget value)
{
f.BeginMap(0); // dummy
@ -1098,11 +1344,21 @@ namespace UniGLTF {
f.Key("path"); f.GenSerialize(value.path);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/animations[]/samplers
public static void GenSerialize(this IFormatter f, List<glTFAnimationSampler> value)
public static void GenSerialize(this JsonFormatter f, List<glTFAnimationSampler> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -1113,7 +1369,7 @@ namespace UniGLTF {
}
/// gltf/animations[]/samplers[]
public static void GenSerialize(this IFormatter f, glTFAnimationSampler value)
public static void GenSerialize(this JsonFormatter f, glTFAnimationSampler value)
{
f.BeginMap(0); // dummy
@ -1132,11 +1388,21 @@ namespace UniGLTF {
f.Key("output"); f.GenSerialize(value.output);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/cameras
public static void GenSerialize(this IFormatter f, List<glTFCamera> value)
public static void GenSerialize(this JsonFormatter f, List<glTFCamera> value)
{
f.BeginList(value.Count);
foreach (var x in value)
@ -1147,7 +1413,7 @@ namespace UniGLTF {
}
/// gltf/cameras[]
public static void GenSerialize(this IFormatter f, glTFCamera value)
public static void GenSerialize(this JsonFormatter f, glTFCamera value)
{
f.BeginMap(0); // dummy
@ -1171,11 +1437,21 @@ namespace UniGLTF {
f.Key("name"); f.GenSerialize(value.name);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/cameras[]/orthographic
public static void GenSerialize(this IFormatter f, glTFOrthographic value)
public static void GenSerialize(this JsonFormatter f, glTFOrthographic value)
{
f.BeginMap(0); // dummy
@ -1199,11 +1475,21 @@ namespace UniGLTF {
f.Key("znear"); f.GenSerialize(value.znear);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
/// gltf/cameras[]/perspective
public static void GenSerialize(this IFormatter f, glTFPerspective value)
public static void GenSerialize(this JsonFormatter f, glTFPerspective value)
{
f.BeginMap(0); // dummy
@ -1227,16 +1513,26 @@ namespace UniGLTF {
f.Key("znear"); f.GenSerialize(value.znear);
}
if(value.extensions!=null)
{
f.Key("extensions"); f.GenSerialize(value.extensions);
}
if(value.extras!=null)
{
f.Key("extras"); f.GenSerialize(value.extras);
}
f.EndMap();
}
public static void GenSerialize(this IFormatter f, ProjectionType value)
public static void GenSerialize(this JsonFormatter f, ProjectionType value)
{
f.Value((int)value);
}
/// gltf/extensionsUsed
public static void GenSerialize(this IFormatter f, List<String> value)
public static void GenSerialize(this JsonFormatter f, List<String> value)
{
f.BeginList(value.Count);
foreach (var x in value)

View File

@ -266,6 +266,12 @@ namespace UniJSON
m_w.Write('"');
}
public void Raw(ArraySegment<Byte> x)
{
CommaCheck();
m_w.Write(x);
}
// ISO-8601: YYYY-MM-DD“T”hh:mm:ss“Z”
public void Value(DateTimeOffset x)
{

View File

@ -0,0 +1,296 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using UniGLTF;
using UniJSON;
using UnityEditor;
using UnityEngine;
namespace VRM
{
public static class VRMSerializerGenerator
{
const BindingFlags FIELD_FLAGS = BindingFlags.Instance | BindingFlags.Public;
static string OutPath
{
get
{
return Path.Combine(UnityEngine.Application.dataPath,
"VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs");
}
}
/// <summary>
/// AOT向けにシリアライザを生成する
/// </summary>
[MenuItem(VRM.VRMVersion.MENU + "/VRM: Generate Serializer")]
static void GenerateSerializer()
{
var path = OutPath;
using (var g = new Generator(path))
{
var rootType = typeof(glTF_VRM_extensions);
g.Generate(rootType, "vrm");
}
}
class Generator : IDisposable
{
String m_path;
Stream m_s;
StreamWriter m_w;
static Dictionary<string, string> s_snippets = new Dictionary<string, string>
{
{"vrm/humanoid/humanBones[]/axisLength", "if(value.axisLength>0)"},
{"vrm/humanoid/humanBones[]/center", "if(value.center!=Vector3.zero)"},
{"vrm/humanoid/humanBones[]/max", "if(value.max!=Vector3.zero)"},
{"vrm/humanoid/humanBones[]/min", "if(value.min!=Vector3.zero)"},
};
public Generator(string path)
{
m_path = path;
m_s = File.Open(path, FileMode.Create);
m_w = new StreamWriter(m_s, Encoding.UTF8);
// begin
m_w.Write(@"
using System;
using System.Collections.Generic;
using UniJSON;
using UnityEngine;
using VRM;
namespace VRM {
static public class IFormatterExtensionsGltf
{
");
}
public void Dispose()
{
// end
m_w.Write(@"
} // class
} // namespace
");
m_w.Dispose();
m_s.Dispose();
UnityPath.FromFullpath(m_path).ImportAsset();
}
HashSet<Type> m_used = new HashSet<Type>
{
typeof(object),
};
public void Generate(Type t, string path, int level = 0)
{
if (m_used.Contains(t))
{
// 処理済み
return;
}
m_used.Add(t);
//
// primitive
//
try
{
var mi = typeof(JsonFormatter).GetMethod("Value", new Type[] { t });
if (mi != null)
{
m_w.Write(@"
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.Value(value);
}
".Replace("$0", t.Name));
return;
}
}
catch (AmbiguousMatchException)
{
// skip
}
if (t.IsEnum)
{
//
// enum
//
m_w.Write(@"
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.Value((int)value);
}
".Replace("$0", t.Name));
}
else if (t.IsArray)
{
var et = t.GetElementType();
m_w.Write(@"
/// $1
public static void GenSerialize(this JsonFormatter f, $0[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
"
.Replace("$0", et.Name)
.Replace("$1", path)
);
Generate(et, path + "[]", level + 1);
}
else if (t.IsGenericType)
{
if (t.GetGenericTypeDefinition() == typeof(List<>))
{
//
// array
//
var et = t.GetGenericArguments()[0];
m_w.Write(@"
/// $1
public static void GenSerialize(this JsonFormatter f, List<$0> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
"
.Replace("$0", et.Name)
.Replace("$1", path));
Generate(et, path + "[]", level + 1);
}
else if (t.GetGenericTypeDefinition() == typeof(Dictionary<,>)
&& t.GetGenericArguments()[0] == typeof(string))
{
//
// object
//
var et = t.GetGenericArguments()[1];
m_w.Write(@"
/// $1
public static void GenSerialize(this JsonFormatter f, Dictionary<string, $0> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
"
.Replace("$0", et.Name)
.Replace("$1", path));
Generate(et, path + "{}", level + 1);
}
else
{
Debug.LogWarningFormat("unknown type: {0}", t);
}
}
else if (t == typeof(glTFExtension))
{
// skip
}
else
{
//
// reflection
//
Debug.LogFormat("{0}({1})", path, t.Name);
m_w.Write(@"
/// $1
public static void GenSerialize(this JsonFormatter f, $0 value)
{
f.BeginMap(0); // dummy
"
.Replace("$0", t.Name)
.Replace("$1", path)
);
foreach (var fi in t.GetFields(FIELD_FLAGS))
{
if (fi.FieldType == typeof(object))
{
continue;
}
if (fi.IsLiteral && !fi.IsInitOnly)
{
continue;
}
if (fi.FieldType == typeof(string) || fi.FieldType.IsEnum || fi.FieldType.IsArray || fi.FieldType.IsGenericType)
{
}
else if (fi.FieldType == typeof(glTF_KHR_materials_unlit))
{
}
else if (fi.FieldType.IsClass && fi.FieldType.GetFields(FIELD_FLAGS).Length == 0)
{
continue;
}
var snipet = fi.FieldType.IsClass ? "if(value." + fi.Name + "!=null)" : "";
var value = default(string);
if (s_snippets.TryGetValue(path + "/" + fi.Name, out value))
{
snipet = value;
}
if (value == "")
{
// found, but empty
}
else
{
m_w.Write(@"
$1
{
f.Key(""$0""); f.GenSerialize(value.$0);
}
"
.Replace("$0", fi.Name)
.Replace("$1", snipet)
);
}
}
m_w.Write(@"
f.EndMap();
}
");
foreach (var fi in t.GetFields(FIELD_FLAGS))
{
Generate(fi.FieldType, path + "/" + fi.Name, level + 1);
}
}
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ea35ccbf1dc9c654d9b27a2fc54b3f5a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -207,8 +207,12 @@ namespace VRM
// Serialize VRM
var f = new JsonFormatter();
f.GenSerialize(VRM);
var json = f.ToString();
glTF.extensions = glTFExtension.Create("VRM", json);
if (glTF.extensions == null)
{
glTF.extensions = new glTFExtension();
}
var bytes = f.GetStoreBytes();
glTF.extensions.Serialized.Add("VRM", bytes);
}
}
}

View File

@ -0,0 +1,797 @@

using System;
using System.Collections.Generic;
using UniJSON;
using UnityEngine;
using VRM;
namespace VRM {
static public class IFormatterExtensionsGltf
{
/// vrm
public static void GenSerialize(this JsonFormatter f, glTF_VRM_extensions value)
{
f.BeginMap(0); // dummy
if(value.exporterVersion!=null)
{
f.Key("exporterVersion"); f.GenSerialize(value.exporterVersion);
}
if(value.specVersion!=null)
{
f.Key("specVersion"); f.GenSerialize(value.specVersion);
}
if(value.meta!=null)
{
f.Key("meta"); f.GenSerialize(value.meta);
}
if(value.humanoid!=null)
{
f.Key("humanoid"); f.GenSerialize(value.humanoid);
}
if(value.firstPerson!=null)
{
f.Key("firstPerson"); f.GenSerialize(value.firstPerson);
}
if(value.blendShapeMaster!=null)
{
f.Key("blendShapeMaster"); f.GenSerialize(value.blendShapeMaster);
}
if(value.secondaryAnimation!=null)
{
f.Key("secondaryAnimation"); f.GenSerialize(value.secondaryAnimation);
}
if(value.materialProperties!=null)
{
f.Key("materialProperties"); f.GenSerialize(value.materialProperties);
}
f.EndMap();
}
public static void GenSerialize(this JsonFormatter f, String value)
{
f.Value(value);
}
/// vrm/meta
public static void GenSerialize(this JsonFormatter f, glTF_VRM_Meta value)
{
f.BeginMap(0); // dummy
if(value.title!=null)
{
f.Key("title"); f.GenSerialize(value.title);
}
if(value.version!=null)
{
f.Key("version"); f.GenSerialize(value.version);
}
if(value.author!=null)
{
f.Key("author"); f.GenSerialize(value.author);
}
if(value.contactInformation!=null)
{
f.Key("contactInformation"); f.GenSerialize(value.contactInformation);
}
if(value.reference!=null)
{
f.Key("reference"); f.GenSerialize(value.reference);
}
{
f.Key("texture"); f.GenSerialize(value.texture);
}
if(value.allowedUserName!=null)
{
f.Key("allowedUserName"); f.GenSerialize(value.allowedUserName);
}
if(value.violentUssageName!=null)
{
f.Key("violentUssageName"); f.GenSerialize(value.violentUssageName);
}
if(value.sexualUssageName!=null)
{
f.Key("sexualUssageName"); f.GenSerialize(value.sexualUssageName);
}
if(value.commercialUssageName!=null)
{
f.Key("commercialUssageName"); f.GenSerialize(value.commercialUssageName);
}
if(value.otherPermissionUrl!=null)
{
f.Key("otherPermissionUrl"); f.GenSerialize(value.otherPermissionUrl);
}
if(value.licenseName!=null)
{
f.Key("licenseName"); f.GenSerialize(value.licenseName);
}
if(value.otherLicenseUrl!=null)
{
f.Key("otherLicenseUrl"); f.GenSerialize(value.otherLicenseUrl);
}
f.EndMap();
}
public static void GenSerialize(this JsonFormatter f, Int32 value)
{
f.Value(value);
}
/// vrm/humanoid
public static void GenSerialize(this JsonFormatter f, glTF_VRM_Humanoid value)
{
f.BeginMap(0); // dummy
if(value.humanBones!=null)
{
f.Key("humanBones"); f.GenSerialize(value.humanBones);
}
{
f.Key("armStretch"); f.GenSerialize(value.armStretch);
}
{
f.Key("legStretch"); f.GenSerialize(value.legStretch);
}
{
f.Key("upperArmTwist"); f.GenSerialize(value.upperArmTwist);
}
{
f.Key("lowerArmTwist"); f.GenSerialize(value.lowerArmTwist);
}
{
f.Key("upperLegTwist"); f.GenSerialize(value.upperLegTwist);
}
{
f.Key("lowerLegTwist"); f.GenSerialize(value.lowerLegTwist);
}
{
f.Key("feetSpacing"); f.GenSerialize(value.feetSpacing);
}
{
f.Key("hasTranslationDoF"); f.GenSerialize(value.hasTranslationDoF);
}
f.EndMap();
}
/// vrm/humanoid/humanBones
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_HumanoidBone> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/humanoid/humanBones[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_HumanoidBone value)
{
f.BeginMap(0); // dummy
if(value.bone!=null)
{
f.Key("bone"); f.GenSerialize(value.bone);
}
{
f.Key("node"); f.GenSerialize(value.node);
}
{
f.Key("useDefaultValues"); f.GenSerialize(value.useDefaultValues);
}
if(value.min!=Vector3.zero)
{
f.Key("min"); f.GenSerialize(value.min);
}
if(value.max!=Vector3.zero)
{
f.Key("max"); f.GenSerialize(value.max);
}
if(value.center!=Vector3.zero)
{
f.Key("center"); f.GenSerialize(value.center);
}
if(value.axisLength>0)
{
f.Key("axisLength"); f.GenSerialize(value.axisLength);
}
f.EndMap();
}
public static void GenSerialize(this JsonFormatter f, Boolean value)
{
f.Value(value);
}
/// vrm/humanoid/humanBones[]/min
public static void GenSerialize(this JsonFormatter f, Vector3 value)
{
f.BeginMap(0); // dummy
{
f.Key("x"); f.GenSerialize(value.x);
}
{
f.Key("y"); f.GenSerialize(value.y);
}
{
f.Key("z"); f.GenSerialize(value.z);
}
f.EndMap();
}
public static void GenSerialize(this JsonFormatter f, Single value)
{
f.Value(value);
}
/// vrm/firstPerson
public static void GenSerialize(this JsonFormatter f, glTF_VRM_Firstperson value)
{
f.BeginMap(0); // dummy
{
f.Key("firstPersonBone"); f.GenSerialize(value.firstPersonBone);
}
{
f.Key("firstPersonBoneOffset"); f.GenSerialize(value.firstPersonBoneOffset);
}
if(value.meshAnnotations!=null)
{
f.Key("meshAnnotations"); f.GenSerialize(value.meshAnnotations);
}
if(value.lookAtTypeName!=null)
{
f.Key("lookAtTypeName"); f.GenSerialize(value.lookAtTypeName);
}
if(value.lookAtHorizontalInner!=null)
{
f.Key("lookAtHorizontalInner"); f.GenSerialize(value.lookAtHorizontalInner);
}
if(value.lookAtHorizontalOuter!=null)
{
f.Key("lookAtHorizontalOuter"); f.GenSerialize(value.lookAtHorizontalOuter);
}
if(value.lookAtVerticalDown!=null)
{
f.Key("lookAtVerticalDown"); f.GenSerialize(value.lookAtVerticalDown);
}
if(value.lookAtVerticalUp!=null)
{
f.Key("lookAtVerticalUp"); f.GenSerialize(value.lookAtVerticalUp);
}
f.EndMap();
}
/// vrm/firstPerson/meshAnnotations
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_MeshAnnotation> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/firstPerson/meshAnnotations[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_MeshAnnotation value)
{
f.BeginMap(0); // dummy
{
f.Key("mesh"); f.GenSerialize(value.mesh);
}
if(value.firstPersonFlag!=null)
{
f.Key("firstPersonFlag"); f.GenSerialize(value.firstPersonFlag);
}
f.EndMap();
}
/// vrm/firstPerson/lookAtHorizontalInner
public static void GenSerialize(this JsonFormatter f, glTF_VRM_DegreeMap value)
{
f.BeginMap(0); // dummy
if(value.curve!=null)
{
f.Key("curve"); f.GenSerialize(value.curve);
}
{
f.Key("xRange"); f.GenSerialize(value.xRange);
}
{
f.Key("yRange"); f.GenSerialize(value.yRange);
}
f.EndMap();
}
/// vrm/firstPerson/lookAtHorizontalInner/curve
public static void GenSerialize(this JsonFormatter f, Single[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/blendShapeMaster
public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeMaster value)
{
f.BeginMap(0); // dummy
if(value.blendShapeGroups!=null)
{
f.Key("blendShapeGroups"); f.GenSerialize(value.blendShapeGroups);
}
f.EndMap();
}
/// vrm/blendShapeMaster/blendShapeGroups
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_BlendShapeGroup> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/blendShapeMaster/blendShapeGroups[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeGroup value)
{
f.BeginMap(0); // dummy
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
}
if(value.presetName!=null)
{
f.Key("presetName"); f.GenSerialize(value.presetName);
}
if(value.binds!=null)
{
f.Key("binds"); f.GenSerialize(value.binds);
}
if(value.materialValues!=null)
{
f.Key("materialValues"); f.GenSerialize(value.materialValues);
}
{
f.Key("isBinary"); f.GenSerialize(value.isBinary);
}
f.EndMap();
}
/// vrm/blendShapeMaster/blendShapeGroups[]/binds
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_BlendShapeBind> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/blendShapeMaster/blendShapeGroups[]/binds[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeBind value)
{
f.BeginMap(0); // dummy
{
f.Key("mesh"); f.GenSerialize(value.mesh);
}
{
f.Key("index"); f.GenSerialize(value.index);
}
{
f.Key("weight"); f.GenSerialize(value.weight);
}
f.EndMap();
}
/// vrm/blendShapeMaster/blendShapeGroups[]/materialValues
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_MaterialValueBind> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/blendShapeMaster/blendShapeGroups[]/materialValues[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_MaterialValueBind value)
{
f.BeginMap(0); // dummy
if(value.materialName!=null)
{
f.Key("materialName"); f.GenSerialize(value.materialName);
}
if(value.propertyName!=null)
{
f.Key("propertyName"); f.GenSerialize(value.propertyName);
}
if(value.targetValue!=null)
{
f.Key("targetValue"); f.GenSerialize(value.targetValue);
}
f.EndMap();
}
/// vrm/secondaryAnimation
public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimation value)
{
f.BeginMap(0); // dummy
if(value.boneGroups!=null)
{
f.Key("boneGroups"); f.GenSerialize(value.boneGroups);
}
if(value.colliderGroups!=null)
{
f.Key("colliderGroups"); f.GenSerialize(value.colliderGroups);
}
f.EndMap();
}
/// vrm/secondaryAnimation/boneGroups
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_SecondaryAnimationGroup> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/secondaryAnimation/boneGroups[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationGroup value)
{
f.BeginMap(0); // dummy
if(value.comment!=null)
{
f.Key("comment"); f.GenSerialize(value.comment);
}
{
f.Key("stiffiness"); f.GenSerialize(value.stiffiness);
}
{
f.Key("gravityPower"); f.GenSerialize(value.gravityPower);
}
{
f.Key("gravityDir"); f.GenSerialize(value.gravityDir);
}
{
f.Key("dragForce"); f.GenSerialize(value.dragForce);
}
{
f.Key("center"); f.GenSerialize(value.center);
}
{
f.Key("hitRadius"); f.GenSerialize(value.hitRadius);
}
if(value.bones!=null)
{
f.Key("bones"); f.GenSerialize(value.bones);
}
if(value.colliderGroups!=null)
{
f.Key("colliderGroups"); f.GenSerialize(value.colliderGroups);
}
f.EndMap();
}
/// vrm/secondaryAnimation/boneGroups[]/bones
public static void GenSerialize(this JsonFormatter f, Int32[] value)
{
f.BeginList(value.Length);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/secondaryAnimation/colliderGroups
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_SecondaryAnimationColliderGroup> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/secondaryAnimation/colliderGroups[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationColliderGroup value)
{
f.BeginMap(0); // dummy
{
f.Key("node"); f.GenSerialize(value.node);
}
if(value.colliders!=null)
{
f.Key("colliders"); f.GenSerialize(value.colliders);
}
f.EndMap();
}
/// vrm/secondaryAnimation/colliderGroups[]/colliders
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_SecondaryAnimationCollider> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/secondaryAnimation/colliderGroups[]/colliders[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationCollider value)
{
f.BeginMap(0); // dummy
{
f.Key("offset"); f.GenSerialize(value.offset);
}
{
f.Key("radius"); f.GenSerialize(value.radius);
}
f.EndMap();
}
/// vrm/materialProperties
public static void GenSerialize(this JsonFormatter f, List<glTF_VRM_Material> value)
{
f.BeginList(value.Count);
foreach (var x in value)
{
f.GenSerialize(x);
}
f.EndList();
}
/// vrm/materialProperties[]
public static void GenSerialize(this JsonFormatter f, glTF_VRM_Material value)
{
f.BeginMap(0); // dummy
if(value.name!=null)
{
f.Key("name"); f.GenSerialize(value.name);
}
if(value.shader!=null)
{
f.Key("shader"); f.GenSerialize(value.shader);
}
{
f.Key("renderQueue"); f.GenSerialize(value.renderQueue);
}
if(value.floatProperties!=null)
{
f.Key("floatProperties"); f.GenSerialize(value.floatProperties);
}
if(value.vectorProperties!=null)
{
f.Key("vectorProperties"); f.GenSerialize(value.vectorProperties);
}
if(value.textureProperties!=null)
{
f.Key("textureProperties"); f.GenSerialize(value.textureProperties);
}
if(value.keywordMap!=null)
{
f.Key("keywordMap"); f.GenSerialize(value.keywordMap);
}
if(value.tagMap!=null)
{
f.Key("tagMap"); f.GenSerialize(value.tagMap);
}
f.EndMap();
}
/// vrm/materialProperties[]/floatProperties
public static void GenSerialize(this JsonFormatter f, Dictionary<string, Single> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
/// vrm/materialProperties[]/vectorProperties
public static void GenSerialize(this JsonFormatter f, Dictionary<string, Single[]> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
/// vrm/materialProperties[]/textureProperties
public static void GenSerialize(this JsonFormatter f, Dictionary<string, Int32> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
/// vrm/materialProperties[]/keywordMap
public static void GenSerialize(this JsonFormatter f, Dictionary<string, Boolean> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
/// vrm/materialProperties[]/tagMap
public static void GenSerialize(this JsonFormatter f, Dictionary<string, String> value)
{
f.BeginMap(value.Count);
foreach (var kv in value)
{
f.Key(kv.Key);
f.GenSerialize(kv.Value);
}
f.EndMap();
}
} // class
} // namespace

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 280f4d5430b0b04449ef06d6f1b4db36
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: