using DG.Tweening; using UnityEngine; using UnityEngine.UI; namespace GuruClient { public enum FlyAnimType { Coin, Star } public class FlyAnimComp : MonoBehaviour { public Transform endPos; public Text txtChange; public Text txtCurrent; public GameObject animObj; public Transform animNode; public void Play(int changeVal, int animNum, FlyAnimType type) { gameObject.SetActive(true); txtChange.gameObject.SetActive(true); txtChange.text = "+" + changeVal; txtChange.transform.DOLocalMoveY(200f, 1.5f).SetDelay(0.2f); txtChange.DOFade(0f, 1.5f).SetDelay(0.2f); int oldVal = 0; int endVal = 0; if (type == FlyAnimType.Coin) { oldVal = 0; endVal = 20; } txtCurrent.text = CoinHelper.ConvertValue(oldVal); // 使用DOTween实现数字滚动 DOTween.To(value => { txtCurrent.text = CoinHelper.ConvertValue((int) value).ToString(); }, startValue: oldVal, endValue: endVal, duration: 0.05f * (animNum - 1)).SetDelay(1f) .SetAutoKill(); animNode.gameObject.SetActive(true); int childCount = animNode.childCount; for (int i = 0; i < childCount; i++) { animNode.GetChild(i).gameObject.SetActive(false); } GameObject prefab = animNode.GetChild(0).gameObject; float delayTime = 0; for (int i = 0; i < animNum; i++) { Sequence sq = DOTween.Sequence(); sq.SetDelay(delayTime); GameObject obj; if (i >= childCount) { obj = Instantiate(prefab, animNode); } else { obj = animNode.GetChild(i).gameObject; } obj.SetActive(false); obj.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f); obj.transform.localPosition = new Vector3(UnityEngine.Random.Range(-100f, 100f), UnityEngine.Random.Range(-100f, 100f), 0); sq.AppendCallback(delegate { obj.SetActive(true); }); sq.Append(obj.transform.DOScale(1f, 0.3f)); sq.Join(obj.GetComponent().DOFade(1, 0.3f)); sq.Join(obj.transform.DOLocalMoveY(obj.transform.position.y - UnityEngine.Random.Range(0, 150), 0.3f)); sq.SetDelay(0.1f); sq.Append(obj.transform.DOMove(endPos.transform.position, 0.6f).OnComplete(delegate { Debug.Log("金币播放震动"); })); sq.SetAutoKill(); sq.OnComplete(delegate { obj.SetActive(false); }); delayTime += 0.05f; } } } }