Unity抛物线动画

文本备忘记录抛物线运动动画,老忘老忘!!

动画效果:
image

以下是源代码

using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class TestMain : MonoBehaviour
{

    public RectTransform rect_move_0;

    //http://blog.csdn.net/sinat_24229853/article/details/43033051 连接地址

    // Use this for initialization
    void Start()
    {
        rect_move_0.gameObject.SetActive(false);

        DOTween.Init();
    }

    void OnGUI()
    {
        if (GUILayout.Button("播放飘字"))
        {
            RectTransform rect = GameObject.Instantiate(rect_move_0.gameObject).GetComponent<RectTransform>();
            rect.gameObject.SetActive(true);
            rect.SetParent(rect_move_0.parent, false);

            rect.DOKill();

            int testNum = UnityEngine.Random.Range(0, 3);
            switch (testNum)
            {
                case 0:
                    rect.GetComponent<Text>().text = "+" + UnityEngine.Random.Range(1, 200);
                    rect.GetComponent<Text>().color = new Color(0f,180f/255f, 1f, 1f);
                    break; 
                default:
                    rect.GetComponent<Text>().text = "-" + UnityEngine.Random.Range(1, 200);
                rect.GetComponent<Text>().color = new Color(200f/255f, 40/255f, 170/255f, 1);
                    break;
            }


            //坐标参数
            int moveRelativeDstMaxX = 200;//抛物线终点的水平max
            int moveRelativeDstMinX = 100;//抛物线终点的水平min
            int moveRelativeDstY = 10;// 抛物终点 顶点高度
            int relativeStartMaxX = 100;//起点 向右水平随机

            Vector2 StartPos = new Vector2(UnityEngine.Random.Range(+relativeStartMaxX, 0), 50);
            Vector2 endPos = StartPos + new Vector2(UnityEngine.Random.Range(moveRelativeDstMinX,moveRelativeDstMaxX), moveRelativeDstY);
            float moveDuration = 2f;

//            Debug.LogError("起点=" + StartPos + ",落点=" + endPos);

            float playTime = 0f;
            Vector2 center = Vector2.zero;

            Sequence s = DOTween.Sequence();
            s.Append(
                rect.DOScale(Vector3.one *0.1f, moveDuration).SetEase(Ease.Linear).OnUpdate(delegate
            {
                center = (StartPos + endPos) * 0.5F;
                center -= new Vector2(0, 1);//, 0);  
                Vector2 riseRelCenter = StartPos - center;
                Vector2 setRelCenter = endPos - center;
                rect.anchoredPosition = Vector3.Slerp(riseRelCenter, setRelCenter, playTime);// Time.time);
                rect.anchoredPosition += center;

                playTime += Time.deltaTime;
            })
            );
            s.OnComplete(delegate
            {
  //              Debug.Log("time=" + Time.unscaledTime + "播放完毕!");
                rect.gameObject.SetActive(false);
            });
        }
    }

    //void Update() 
    //{  
    //  Vector2 center = StartPos + endPos * 0.5F;  
    //  center -= new Vector2 (0, 1);//, 0);  
    //  Vector2 riseRelCenter = StartPos - center;  
    //  Vector2 setRelCenter = endPos - center;  
    //  rect_move_0.anchoredPosition = Vector3.Slerp(riseRelCenter, setRelCenter, Time.time);  
    //  rect_move_0.anchoredPosition += center;  
    //}  
}

最后,单独附上抛物线的刷新函数:

using UnityEngine;
using System.Collections;

public class ParabolaUpdate : MonoBehaviour {

    Vector2 StartPos;
    Vector2 endPos;
    float currentTime=0;

    // Use this for initialization
    void Start () {
        currentTime = 0;
        StartPos = new Vector2 (UnityEngine.Random.Range (-300, 0), 0);
        endPos = StartPos + new Vector2 (UnityEngine.Random.Range (-300, -100), 10);
    }

    // Update is called once per frame
    void Update () {
        Vector2 center = StartPos + endPos * 0.5F;
        center -= new Vector2(0, 1);//, 0);  
        Vector2 riseRelCenter = StartPos - center;
        Vector2 setRelCenter = endPos - center;
        Vector2 currentPos = Vector3.Slerp(riseRelCenter, setRelCenter, currentTime);
        currentPos += center;

        currentTime += Time.deltaTime;
        Debug.Log ("time=" + Time.time + ",currentPos=" + currentPos);
    }
}

猜你喜欢

转载自blog.csdn.net/stephanie_1/article/details/78384475