Represents an object on a timeline.
Inheritance: SpriterTimelineObjectBase, ISpriterTimelineObject
        void ReadTimelineObject(XmlElement element, SpriterTimelineKey key, VariableType variableType)
        {
            SpriterTimelineObject obj = new SpriterTimelineObject();
            key.objects.Add(obj);

            Vector2 position = Vector2.zero, pivot = new Vector2(0,1), scale = Vector2.one;
            Color color = Color.white;

            foreach(XmlAttribute attribute in element.Attributes)
            {
                // atlas
                if (attribute.Name.Equals("atlas"))
                    obj.atlas = int.Parse(attribute.Value);

                // folder
                else if (attribute.Name.Equals("folder"))
                    obj.folder = int.Parse(attribute.Value);

                // file
                else if (attribute.Name.Equals("file"))
                    obj.file = int.Parse(attribute.Value);

                // name
                else if (attribute.Name.Equals("name"))
                    obj.name = attribute.Value;

                // x, y
                else if (attribute.Name.Equals("x"))
                    position.x = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("y"))
                    position.y = float.Parse(attribute.Value);

                // pivot_x, pivot_y
                else if (attribute.Name.Equals("pivot_x"))
                    pivot.x = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("pivot_y"))
                    pivot.y = float.Parse(attribute.Value);

                // angle
                else if (attribute.Name.Equals("angle"))
                    obj.angle = float.Parse(attribute.Value);

                // w, h
                else if (attribute.Name.Equals("w"))
                    obj.pixelWidth = int.Parse(attribute.Value);
                else if (attribute.Name.Equals("h"))
                    obj.pixelHeight = int.Parse(attribute.Value);

                // scale_x, scale_y
                else if (attribute.Name.Equals("scale_x"))
                    scale.x = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("scale_y"))
                    scale.y = float.Parse(attribute.Value);

                // color
                else if (attribute.Name.Equals("r"))
                    color.r = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("g"))
                    color.g = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("b"))
                    color.b = float.Parse(attribute.Value);
                else if (attribute.Name.Equals("a"))
                    color.a = float.Parse(attribute.Value);

                // blend_mode
                else if (attribute.Name.Equals("blend_mode"))
                {
                    obj.blendModeRaw = attribute.Value;
                    obj.blendMode = SpriterDataHelpers.ParseSpriterEnum<BlendMode>(obj.blendModeRaw);
                }

                // value
                else if (attribute.Name.Equals("value"))
                    obj.value = ReadVariable(variableType, attribute.Value);

                // min, max
                else if (attribute.Name.Equals("min"))
                    obj.min = ReadVariable(variableType, attribute.Value);
                else if (attribute.Name.Equals("max"))
                    obj.max = ReadVariable(variableType, attribute.Value);

                // animation
                else if (attribute.Name.Equals("animation"))
                    obj.entityAnimation = int.Parse(attribute.Value);

                // t
                else if (attribute.Name.Equals("t"))
                    obj.entityT = float.Parse(attribute.Value);

                // volume
                else if (attribute.Name.Equals("volume"))
                    obj.volume = float.Parse(attribute.Value);

                // panning
                else if (attribute.Name.Equals("panning"))
                    obj.panning = float.Parse(attribute.Value);
            }

            foreach(XmlElement child in element)
            {
                // meta_data
                if (child.Name.Equals("meta_data"))
                    ReadMetaData(child, obj.metaData);
            }

            // Assign vector values
            obj.position = position;
            obj.pivot = pivot;
            obj.scale = scale;
            obj.color = color;

            // Object references
            obj.targetAtlas = m_Data.FindAtlas(obj.atlas);
            obj.targetFile = m_Data.FindFile(obj.folder, obj.file);
        }