static IEnumerator TweenSpriteAlphaRoutine(Sprite s, float from, float to, int duration, Easing.Equation easing,
                                                   int delay = 0, OnFinished onFinished = null)
        {
            if (delay > 0)
            {
                yield return(new WaitForMilliSeconds(delay));
            }

            float durationF = duration * 0.001f;
            float time      = 0;

            s.alpha = from;
            var childs = s.GetChildrenRecursive();

            for (int i = 0; i < childs.Count; i++)
            {
                if (childs[i] is Sprite)
                {
                    ((Sprite)childs[i]).alpha = from;
                }
            }

            while (time < durationF)
            {
                float easeVal    = Easing.Ease(easing, time, 0, 1, durationF);
                float easeValMap = Mathf.Map(easeVal, 0, 1, from, to);
                s.alpha = easeValMap;

                for (int i = 0; i < childs.Count; i++)
                {
                    if (childs[i] is Sprite)
                    {
                        ((Sprite)childs[i]).alpha = easeValMap;
                    }
                }

                time += Time.delta;

                yield return(null);
            }

            onFinished?.Invoke();
        }