Matrix4x4Converter.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. using System;
  2. using Newtonsoft.Json;
  3. using UnityEngine;
  4. using UnityEngine.Scripting;
  5. namespace Siccity.GLTFUtility.Converters {
  6. /// <summary> Converts from float array to Matrix4x4 during deserialization, and back </summary>
  7. [Preserve] public class Matrix4x4Converter : JsonConverter {
  8. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
  9. Matrix4x4 m = (Matrix4x4) value;
  10. writer.WriteStartArray();
  11. for (int i = 0; i < 16; i++) {
  12. writer.WriteValue(m[i]);
  13. }
  14. writer.WriteEndArray();
  15. }
  16. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
  17. float[] floatArray = serializer.Deserialize<float[]>(reader);
  18. return new Matrix4x4(
  19. new Vector4(floatArray[0], floatArray[1], floatArray[2], floatArray[3]),
  20. new Vector4(floatArray[4], floatArray[5], floatArray[6], floatArray[7]),
  21. new Vector4(floatArray[8], floatArray[9], floatArray[10], floatArray[11]),
  22. new Vector4(floatArray[12], floatArray[13], floatArray[14], floatArray[15])
  23. );;
  24. }
  25. public override bool CanConvert(Type objectType) {
  26. return objectType == typeof(Matrix4x4);
  27. }
  28. }
  29. }