Created
February 17, 2020 03:34
-
-
Save arakaki-asdf/19dc796dd161359479a3a96410f182f0 to your computer and use it in GitHub Desktop.
unity playable text countup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using UnityEngine; | |
using UnityEngine.Events; | |
using UnityEngine.Timeline; | |
using UnityEngine.UI; | |
using DG.Tweening; | |
class BaseTimeControl : MonoBehaviour, ITimeControl | |
{ | |
Sequence sequence = default; | |
public void OnControlTimeStart() { } | |
public void OnControlTimeStop() { } | |
public void SetTime(double time) | |
{ | |
sequence?.Goto((float)time); | |
} | |
protected void InitSequence(Tween tween) | |
{ | |
if (sequence != null) | |
{ | |
sequence.Goto(0); | |
sequence.Kill(); | |
} | |
sequence = DOTween.Sequence(); | |
sequence.Append(tween); | |
} | |
} | |
class CountUpTextTimeControl : BaseTimeControl | |
{ | |
class CountUp | |
{ | |
public Func<int, string> formatFunc = default; | |
Text text = default; | |
int current = default; | |
int end = default; | |
public CountUp(Text text, int count) | |
{ | |
this.text = text; | |
this.current = 0; | |
this.end = count; | |
} | |
public Tween Tween(float duration, Ease ease) | |
{ | |
return DOTween.To( | |
() => current, | |
(n) => | |
{ | |
current = n; | |
text.text = formatFunc?.Invoke(current) ?? current.ToString(); | |
}, | |
end, | |
duration | |
).SetEase(ease).SetAutoKill(true); | |
} | |
} | |
[SerializeField] Text text = default; | |
[SerializeField] int count = 10000; | |
[SerializeField] float duration = 0.7f; | |
[SerializeField] Ease ease = Ease.OutQuad; | |
public int Count | |
{ | |
get; | |
private set; | |
} | |
public Func<int, string> FormatFunc | |
{ | |
set | |
{ | |
if (countUp == null) return; | |
countUp.formatFunc = value; | |
} | |
} | |
CountUp countUp = default; | |
public void Initialize(int count) | |
{ | |
countUp = countUp ?? new CountUp(text, count); | |
InitSequence(countUp.Tween(duration, ease)); | |
} | |
void OnValidate() | |
{ | |
if (Application.isEditor) Initialize(count); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment