public void DoTransition(Action onOut, float duration, Color color, float durationOutPercent = 0.6f) { if (duration < 1e-2f) { onOut.Invoke(); return; } if (canvas == null) { SetupCanvas(); } var c0 = color; c0.a = 0f; canvas.enabled = true; image.material = null; image.color = color; float outDuration = duration * durationOutPercent; float inDuration = duration * (1f - durationOutPercent); var fadeIn = new Animation <Color>(val => image.color = val) .From(color).To(c0) .For(inDuration) .With(Interpolator.Smooth()) .OnCompleted(() => { canvas.enabled = false; }); var fadeOut = new Animation <Color>(val => image.color = val) .From(c0).To(color) .For(outDuration) .With(Interpolator.Accelerate()) .OnCompleted(() => { onOut?.Invoke(); Conditional.WaitFrames(3).Do(() => { fadeIn.Start(); }); }) .Start(); }