UniVRM/Assets/VRM/UniGLTF/Editor/Serialization/DeserializerGenerator.cs
2019-08-08 20:25:37 +09:00

62 lines
1.4 KiB
C#

using System.IO;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEngine;
namespace UniGLTF
{
public static class DeserializerGenerator
{
public const BindingFlags FIELD_FLAGS = BindingFlags.Instance | BindingFlags.Public;
static string OutPath
{
get
{
return Path.Combine(UnityEngine.Application.dataPath,
"VRM/UniGLTF/Scripts/IO/GltfDeserializer.g.cs");
}
}
/// <summary>
/// AOT向けにデシリアライザを生成する
/// </summary>
[MenuItem(VRM.VRMVersion.MENU + "/Generate Deserializer")]
static void GenerateSerializer()
{
var info = new ObjectSerialization(typeof(glTF), "gltf");
Debug.Log(info);
using (var s = File.Open(OutPath, FileMode.Create))
using (var w = new StreamWriter(s, Encoding.UTF8))
{
// header
w.Write(@"
using UniJSON;
using System;
using System.Collections.Generic;
using VRM;
using UnityEngine;
namespace UniGLTF {
public static class GltfDeserializer
{
");
info.GenerateDeserializer(w, "Deserialize");
// footer
w.Write(@"
} // GltfDeserializer
} // UniGLTF
");
Debug.LogFormat("write: {0}", OutPath);
}
}
}
}