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(); }