赞
踩
之前在手机上玩游戏,觉得加钱的时候,货币动态上涨的动画挺炫酷的,就手痒痒随手写了一个。
先上图看下效果
然后我又添加了两种增长方式
1.先快后慢的增长方式
这个增长曲线是正弦函数,所以看起来不是那么明显
2.先慢后快的增长方式
这个增长曲线是二次函数的曲线,所以会明显一点
写完之后发现dotween好像就能实现。。。。
原理什么的就不讲了,代码看一看就都能看懂
下面上代码,为了图方便,我把脚本都写在一个文件里了,按理说分开会好一点儿。
- using UnityEngine;
- using UnityEngine.UI;
- using System.Text.RegularExpressions;
- using System;
-
- public class CountingNumber : MonoBehaviour
- {
- public ChangeType changeType = ChangeType.Linear;
- Text mText;
- int startNum = 100;
- int currTime;
- int targetNum = 0;
- float duration = 0;
- bool isStartChange = false;
- float time = 0;
- ChangeTypeBase changeText;
-
-
- private void Start()
- {
- mText = transform.GetComponent<Text>();
- if (IsInt(mText.text))
- startNum = int.Parse(mText.text);
-
- }
-
- public void ChangeTo(int targetNum, float duration)
- {
- this.targetNum = targetNum;
- currTime = startNum;
- this.duration = duration;
- time = 0;
- isStartChange = true;
-
-
- switch (changeType)
- {
- case ChangeType.Linear:
- changeText = new LinearType(startNum,targetNum,duration);
- break;
- case ChangeType.Easein:
- changeText = new EaseinType(startNum, targetNum, duration);
- break;
- case ChangeType.Easeout:
- changeText = new EaseoutType(startNum, targetNum, duration);
- break;
- default:
- break;
- }
- }
-
- private void Update()
- {
- UpdateText();
- UpdateBehaviour();
- }
-
- void UpdateBehaviour()
- {
- if (Input.GetMouseButtonDown(1))
- ChangeTo(500, 3);
- }
-
- void UpdateText()
- {
- if (!isStartChange)
- return;
- time += Time.deltaTime;
- if (time>=duration)
- {
- mText.text = targetNum.ToString();
- startNum = targetNum;
- changeText = null;
- time = 0;
- isStartChange = false;
- return;
- }
- int cacheNum = startNum + changeText.ChangeText(time);
- if (cacheNum == currTime)
- return;
- currTime = cacheNum;
- mText.text = currTime.ToString();
- }
-
- public bool IsInt(string value)
- {
- return Regex.IsMatch(value, @"^[+-]?\d*$");
- }
- }
-
-
- public abstract class ChangeTypeBase
- {
- protected int startNum;
- protected int targetNum;
- protected float duration;
- public ChangeTypeBase(int startNum, int targetNum, float duration)
- {
- this.startNum = startNum;
- this.targetNum = targetNum;
- this.duration = duration;
- }
-
- public abstract int ChangeText(float time);
- }
-
-
- public class LinearType : ChangeTypeBase
- {
- public LinearType(int startNum, int targetNum, float duration) : base(startNum, targetNum, duration)
- {
- }
- public override int ChangeText(float time)
- {
- return (int)((targetNum -startNum) * (time / duration));
- }
- }
-
-
- public class EaseinType : ChangeTypeBase
- {
- public EaseinType(int startNum, int targetNum, float duration) : base(startNum, targetNum, duration)
- {
- }
- public override int ChangeText(float time)
- {
- return (int)((targetNum - startNum) * (time / duration)* (time / duration));
- }
- }
-
- public class EaseoutType : ChangeTypeBase
- {
- public EaseoutType(int startNum, int targetNum, float duration) : base(startNum, targetNum, duration)
- {
- }
- public override int ChangeText(float time)
- {
- return (int)((targetNum - startNum) * Math.Sin(Math.PI/2 * (time / duration)));
- }
- }
-
-
-
-
-
- public enum ChangeType
- {
- Linear,
- Easein,
- Easeout,
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。