有时需要这样的效果:UI的数字从一个值变化到另一个值,是一个不断增大的过程,而且是一种由慢变快的过程。就实现这种效果来说,可以DoTween这类组件实现,也可以用unity的曲线AnimationCurve实现。这里说的是另外一种方式,就是自己实现指数增长变快的过程。
指数曲线和函数,中学就学过。它一条很陡峭的曲线,大白话就是越来愈大,而且变的越来越快。
我们可以先把变化区间从指数公式计算出来,当时y的开始和结束,x轴看成时间。然后用累计时间在y的开始和结束之间做插值,这里给出两段代码,分别用到初始化和Update中
//变化范围
int change = target - orgNum;
//指数, 指数范围即是时间范围
beginExp = 0; //e^beginExp =1
endExp = Mathf.Log(change); // e^endExp = change
currExp = Mathf.Lerp(beginExp, endExp, currveVale);
currNum = orgNum + (int)Mathf.Exp(currExp);
这里第二段代码用在update里,没有直接使用插值结果,而是让用户有更多的选择,用一条曲线让用户选择,再去控制这个变化趋势。