0. 实现背景:
- 玩家在游戏中获得金币或战力等, 需要明显地显示出数字的变化, 可以采用数字滚动效果
1. 最终实现效果图:
2. DOTween相关术语:
Tweener
- 一个
tween
控制value和animates
- 一个
Sequence
- 一个特殊的
tween
,并不是控制value,和其它的tween
一起成为一个动画组
- 一个特殊的
Tween
- 一个普通词,既可以表示
Tweener
也可以表示Sequence
- 一个普通词,既可以表示
Nested tween
- 一个
tween
,包含Sequence
- 一个
- 创建一个
Tweener
的通用方法
- static DOTween.To(getter, setter, to, float duration)
getter
: 处理Tweener返回的值, 可以是匿名方法或lambda表达式setter
: 设置Tweener的初始值, 可以是匿名方法或lambda表达式to
: Tweener的目标值duration
: Tweener的周期, 数值越小, 动画实现越快
3. 实现方法
3.1 创建一个Sequence
并设置它的SetAutoKill
属性为false
, 防止它实现一次滚动动画之后就自动销毁.
//声明
private Sequence mScoreSequence;
//函数内初始化
mScoreSequence = DOTween.Sequence();
//函数内设置属性
mScoreSequence.SetAutoKill(false);
3.2 当数据更新时, 调用该界面负责处理该数据的方法, 此时用新的数据创建一个Tweener
, 并加入动画序列中
mScoreSequence.Append(DOTween.To(delegate (float value) {
//向下取整
var temp = Math.Floor(value);
//向Text组件赋值
currentScoreText.text = temp + "";
}, mOldScore, newScore, 0.4f));
//将更新后的值记录下来, 用于下一次滚动动画
mOldScore = newScore;
4. 项目地址
5. 其它实现效果和方法:
- 看起来每个数字都在滚动
- 定制数字滚动时间和数字变化次数
- 计算新旧数据的差值,
- 根据滚动次数来计算每次变化的数据差值
- 根据滚动时间和滚动次数计算出单次数据滚动的时间间隔, 往
TimerManager
(需要另外实现)中添加更新UI数值的计时器