private object GetComponentPropertyValue(FieldInfo field, BabylonScriptComponent component) { object result = null; object fvalue = field.GetValue(component); if (fvalue != null) { Type ftype = fvalue.GetType(); if (typeof(System.Enum).IsAssignableFrom(ftype)) { result = Convert.ToInt32((System.Enum)fvalue); } else if (typeof(Boolean).IsAssignableFrom(ftype) || typeof(Byte).IsAssignableFrom(ftype) || typeof(SByte).IsAssignableFrom(ftype) || typeof(Int16).IsAssignableFrom(ftype) || typeof(UInt16).IsAssignableFrom(ftype) || typeof(Int32).IsAssignableFrom(ftype) || typeof(UInt32).IsAssignableFrom(ftype) || typeof(Int64).IsAssignableFrom(ftype) || typeof(UInt64).IsAssignableFrom(ftype) || typeof(IntPtr).IsAssignableFrom(ftype) || typeof(UIntPtr).IsAssignableFrom(ftype) || typeof(Char).IsAssignableFrom(ftype) || typeof(Double).IsAssignableFrom(ftype) || typeof(Single).IsAssignableFrom(ftype)) { result = fvalue; } else if (typeof(System.String).IsAssignableFrom(ftype)) { result = fvalue; } else if (typeof(Color).IsAssignableFrom(ftype)) { var color = (Color)fvalue; result = new UnityBabylonColor { r = color.r, g = color.g, b = color.b, a = color.a }; } else if (typeof(Vector2).IsAssignableFrom(ftype)) { var vec2 = (Vector2)fvalue; result = new UnityBablylonVector2 { x = vec2.x, y = vec2.y }; } else if (typeof(Vector3).IsAssignableFrom(ftype)) { var vec3 = (Vector3)fvalue; result = new UnityBablylonVector3 { x = vec3.x, y = vec3.y, z = vec3.z }; } else if (typeof(Vector4).IsAssignableFrom(ftype)) { var vec4 = (Vector4)fvalue; result = new UnityBablylonVector4 { x = vec4.x, y = vec4.y, z = vec4.z, w = vec4.w }; } else if (typeof(Transform).IsAssignableFrom(ftype)) { var transform = (Transform)fvalue; result = GetTransformPropertyValue(transform); } else if (typeof(Texture2D).IsAssignableFrom(ftype)) { var texture = (Texture2D)fvalue; result = GetTexturePropertyValue(texture); } else if (typeof(Cubemap).IsAssignableFrom(ftype)) { var cubemap = (Cubemap)fvalue; result = GetCubemapPropertyValue(cubemap); } else if (typeof(Material).IsAssignableFrom(ftype)) { var material = (Material)fvalue; result = GetMaterialPropertyValue(material); } else if (typeof(Shader).IsAssignableFrom(ftype)) { var shader = (Shader)fvalue; result = GetShaderPropertyValue(shader); } else if (typeof(GameObject).IsAssignableFrom(ftype)) { var gobject = (GameObject)fvalue; result = GetGamePropertyValue(gobject); } else if (typeof(AudioClip).IsAssignableFrom(ftype)) { var aclip = (AudioClip)fvalue; result = GetAudioClipPropertyValue(aclip); } else if (typeof(EmbeddedAsset).IsAssignableFrom(ftype)) { var easset = (EmbeddedAsset)fvalue; result = GetEmbeddedAssetPropertyValue(easset); } else if (typeof(TextAsset).IsAssignableFrom(ftype)) { var tasset = (TextAsset)fvalue; result = GetTextAssetPropertyValue(tasset); } else if (typeof(DefaultAsset).IsAssignableFrom(ftype)) { var dasset = (DefaultAsset)fvalue; result = GetDefaultAssetPropertyValue(dasset); } else if (ftype.IsArray) { if (typeof(Boolean[]).IsAssignableFrom(ftype) || typeof(Byte[]).IsAssignableFrom(ftype) || typeof(SByte[]).IsAssignableFrom(ftype) || typeof(Int16[]).IsAssignableFrom(ftype) || typeof(UInt16[]).IsAssignableFrom(ftype) || typeof(Int32[]).IsAssignableFrom(ftype) || typeof(UInt32[]).IsAssignableFrom(ftype) || typeof(Int64[]).IsAssignableFrom(ftype) || typeof(UInt64[]).IsAssignableFrom(ftype) || typeof(IntPtr[]).IsAssignableFrom(ftype) || typeof(UIntPtr[]).IsAssignableFrom(ftype) || typeof(Char[]).IsAssignableFrom(ftype) || typeof(Double[]).IsAssignableFrom(ftype) || typeof(Single[]).IsAssignableFrom(ftype)) { result = fvalue; } else if (typeof(System.String[]).IsAssignableFrom(ftype)) { result = fvalue; } else if (typeof(Color[]).IsAssignableFrom(ftype)) { var colors = (Color[])fvalue; var colors_list = new List<UnityBabylonColor>(); foreach (var color in colors) { colors_list.Add(new UnityBabylonColor { r = color.r, g = color.g, b = color.b, a = color.a }); } result = colors_list.ToArray(); } else if (typeof(Vector2[]).IsAssignableFrom(ftype)) { var vecs2 = (Vector2[])fvalue; var vecs2_list = new List<UnityBablylonVector2>(); foreach (var vec2 in vecs2) { vecs2_list.Add(new UnityBablylonVector2 { x = vec2.x, y = vec2.y }); } result = vecs2_list.ToArray(); } else if (typeof(Vector3[]).IsAssignableFrom(ftype)) { var vecs3 = (Vector3[])fvalue; var vecs3_list = new List<UnityBablylonVector3>(); foreach (var vec3 in vecs3) { vecs3_list.Add(new UnityBablylonVector3 { x = vec3.x, y = vec3.y, z = vec3.z }); } result = vecs3_list.ToArray(); } else if (typeof(Vector4[]).IsAssignableFrom(ftype)) { var vecs4 = (Vector4[])fvalue; var vecs4_list = new List<UnityBablylonVector4>(); foreach (var vec4 in vecs4) { vecs4_list.Add(new UnityBablylonVector4 { x = vec4.x, y = vec4.y, z = vec4.z, w = vec4.w }); } result = vecs4_list.ToArray(); } else if (typeof(Transform[]).IsAssignableFrom(ftype)) { var transforms = (Transform[])fvalue; var transform_list = new List<object>(); foreach (var transform in transforms) { transform_list.Add(GetTransformPropertyValue(transform)); } result = transform_list.ToArray(); } else if (typeof(Texture2D[]).IsAssignableFrom(ftype)) { var textures = (Texture2D[])fvalue; var texture_list = new List<object>(); foreach (var texture in textures) { texture_list.Add(GetTexturePropertyValue(texture)); } result = texture_list.ToArray(); } else if (typeof(Cubemap[]).IsAssignableFrom(ftype)) { var cubemaps = (Cubemap[])fvalue; var cubemap_list = new List<object>(); foreach (var cubemap in cubemaps) { cubemap_list.Add(GetCubemapPropertyValue(cubemap)); } result = cubemap_list.ToArray(); } else if (typeof(Material[]).IsAssignableFrom(ftype)) { var materials = (Material[])fvalue; var material_list = new List<object>(); foreach (var material in materials) { material_list.Add(GetMaterialPropertyValue(material)); } result = material_list.ToArray(); } else if (typeof(Shader[]).IsAssignableFrom(ftype)) { var shaders = (Shader[])fvalue; var shader_list = new List<object>(); foreach (var shader in shaders) { shader_list.Add(GetShaderPropertyValue(shader)); } result = shader_list.ToArray(); } else if (typeof(GameObject[]).IsAssignableFrom(ftype)) { var gobjects = (GameObject[])fvalue; var gobject_list = new List<object>(); foreach (var gobject in gobjects) { gobject_list.Add(GetGamePropertyValue(gobject)); } result = gobject_list.ToArray(); } else if (typeof(AudioClip[]).IsAssignableFrom(ftype)) { var aclips = (AudioClip[])fvalue; var aclip_list = new List<object>(); foreach (var aclip in aclips) { aclip_list.Add(GetAudioClipPropertyValue(aclip)); } result = aclip_list.ToArray(); } else if (typeof(EmbeddedAsset[]).IsAssignableFrom(ftype)) { var eassets = (EmbeddedAsset[])fvalue; var easset_list = new List<object>(); foreach (var easset in eassets) { easset_list.Add(GetEmbeddedAssetPropertyValue(easset)); } result = easset_list.ToArray(); } else if (typeof(TextAsset[]).IsAssignableFrom(ftype)) { var tassets = (TextAsset[])fvalue; var tasset_list = new List<object>(); foreach (var tasset in tassets) { tasset_list.Add(GetTextAssetPropertyValue(tasset)); } result = tasset_list.ToArray(); } else if (typeof(DefaultAsset[]).IsAssignableFrom(ftype)) { var dassets = (DefaultAsset[])fvalue; var dasset_list = new List<object>(); foreach (var dasset in dassets) { dasset_list.Add(GetDefaultAssetPropertyValue(dasset)); } result = dasset_list.ToArray(); } } } return result; }