public static async Task DoTweenAsync(int id, float duration, CancellationToken cancellationToken, Action <float> action, Easing easeType = Easing.Linear) { var instanceCancellationToken = StartTween(id); float t = 0; var ease = EaseFunctions.Get(easeType); action?.Invoke(ease.Invoke(0)); while (t < duration && Application.isPlaying) { await Task.Yield(); if (instanceCancellationToken.IsCancellationRequested || cancellationToken.IsCancellationRequested) { return; } t += Time.deltaTime; action?.Invoke(ease.Invoke(Mathf.InverseLerp(0, duration, t))); } //Just exit immediately if we've stopped playing in editor if (!Application.isPlaying) { return; } action?.Invoke(ease.Invoke(1)); CompleteTween(id); }
public static async Task DoColorAsync(this TextMeshProUGUI text, Color toColor, float duration, Easing easing = Easing.Linear) { var startColor = text.color; var easeFunc = EaseFunctions.Get(easing); await TweenExtensions.DoTweenAsync(text.gameObject.GetInstanceID(), duration, (t) => { text.color = Color.Lerp(startColor, toColor, t); }, easing); }