public class TextNumberScrol : MonoBehaviour
{
private Sequence mScoreSequence;
private Action _callBack;
/// <summary>
/// 数值a变化到数值b
/// </summary>
/// <param name="gText">文本对象</param>
/// <param name="delayTime">设置延时</param>
/// <param name="mOldScore">初始数值</param>
/// <param name="newScore">最终值</param>
/// <param name="time">所需时间</param>
/// <param name="callBack">完成回调</param>
public TextNumberScrol(Text gText, float delayTime, int mOldScore, int newScore, float time, Action callBack)
{
_callBack = callBack;
mScoreSequence = DOTween.Sequence();
mScoreSequence.SetAutoKill(false);
mScoreSequence.Append(DOTween.To(delegate (float value)
{
//向下取整
var temp = Math.Floor(value);
//向Text组件赋值
gText.text = temp.ToString();
}, mOldScore, newScore, 0.4f)).OnComplete(Finish).SetDelay(delayTime);
//将更新后的值记录下来, 用于下一次滚动动画
mOldScore = newScore;
}
public TextNumberScrol(Text gText, float delayTime, float mOldScore, float newScore, float time, Action callBack)
{
_callBack = callBack;
mScoreSequence = DOTween.Sequence();
mScoreSequence.SetAutoKill(false);
mScoreSequence.Append(DOTween.To(delegate (float value)
{
//向Text组件赋值,保留小数点后两位
var temp = ToFixed(value, 2);
gText.text = string.Format("+{0}%", temp);
}, mOldScore, newScore, 0.4f)).OnComplete(()=>
{
//结束时修正最终显示值
gText.text = string.Format("+{0}%", newScore);
Finish();
}).SetDelay(delayTime);
//将更新后的值记录下来, 用于下一次滚动动画
mOldScore = newScore;
}
/// <summary>
/// 完成回调
/// </summary>
private void Finish()
{
_callBack?.Invoke();
}
/// <summary>
/// 将小数值按指定的小数位数截断
/// </summary>
/// <param name="d">要截断的小数</param>
/// <param name="s">小数位数,s大于等于0,小于等于28</param>
/// <returns></returns>
public double ToFixed(double d, int s)
{
double sp = Convert.ToDouble(Math.Pow(10, s));
if (d < 0)
{
return Math.Truncate(d) + Math.Ceiling((d - Math.Truncate(d)) * sp) / sp;
}
else
{
return Math.Truncate(d) + Math.Floor((d - Math.Truncate(d)) * sp) / sp;
}
}
}
数字滚动变化,数值a变化到数值b
最新推荐文章于 2024-08-31 15:47:13 发布