TranslationConverter.cs 1002 B

123456789101112131415161718192021222324252627282930
  1. using System;
  2. using Newtonsoft.Json;
  3. using UnityEngine;
  4. using UnityEngine.Scripting;
  5. namespace Siccity.GLTFUtility.Converters {
  6. /// <summary>
  7. /// Converts from float array to Vector3 during deserialization, and back.
  8. /// Compensates for differing coordinate systems as well.
  9. /// </summary>
  10. [Preserve] public class TranslationConverter : JsonConverter {
  11. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
  12. Vector3 pos = (Vector3) value;
  13. writer.WriteStartArray();
  14. writer.WriteValue(-pos.x);
  15. writer.WriteValue(pos.y);
  16. writer.WriteValue(pos.z);
  17. writer.WriteEndArray();
  18. }
  19. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
  20. float[] floatArray = serializer.Deserialize<float[]>(reader);
  21. return new Vector3(-floatArray[0], floatArray[1], floatArray[2]);
  22. }
  23. public override bool CanConvert(Type objectType) {
  24. return objectType == typeof(Vector3);
  25. }
  26. }
  27. }