public void AddColorEndAnimation(Color endColor, string propertyName = "_Color", float duration = 2f, UIAnimationUtility.EaseType easeType = UIAnimationUtility.EaseType.easeInSine, int loopCount = 0, UIAnimation_Base.LoopType loopType = UIAnimation_Base.LoopType.PingPong, Action onCompleteAction = null)
        {
            MaterialAnimation.ColorData colorData = new MaterialAnimation.ColorData();
            colorData.endColor     = endColor;
            colorData.propertyName = propertyName;

            AddColorAnimation(UIAnimation_Base.TweenType.End, onCompleteAction, colorData, duration, UIAnimationUtility.GetCurve(easeType), loopType, loopCount);
        }
        ////////////////////////////////////////
        //
        // StartColor Functions

        protected void AddColorAnimation(UIAnimation_Base.TweenType tweenType, Action onCompleteAction, MaterialAnimation.ColorData colorData, float duration, AnimationCurve easeCurve, UIAnimation_Base.LoopType loopType, int loopCount)
        {
            MaterialAnimation_Color newMaterialAnimationColor = new MaterialAnimation_Color(this, onCompleteAction, tweenType, Shader.PropertyToID(colorData.propertyName), colorData.startColor, colorData.endColor, colorData.deltaColor, duration, easeCurve, loopType, loopCount);

            myMaterialAnimationsColor.Enqueue(newMaterialAnimationColor);
        }
        ///////////////////////////////////////////////////////////////////////////
        //
        // UIColorAnimator Functions
        //

        public void StartAnimation(MaterialAnimation.AnimationType animationType, UIAnimation_Base.TweenType tweenType, MaterialAnimation.ColorData colorData, MaterialAnimation.FloatData floatData, float duration, AnimationCurve easeCurve, UIAnimation_Base.LoopType loopType, int loopCount, Action onCompleteAction = null)
        {
            switch (animationType)
            {
            case MaterialAnimation.AnimationType.Color:
                AddColorAnimation(tweenType, onCompleteAction, colorData, duration, easeCurve, loopType, loopCount);
                break;

            case MaterialAnimation.AnimationType.Float:
                AddFloatAnimation(tweenType, onCompleteAction, floatData, duration, easeCurve, loopType, loopCount);
                break;
            }
        }