利用插值lerp搞出加速再减速的效果

方法lerp是一个根据t来计算插值的,如果已知起始到目标都为固定,如果t每次都几乎一样,那么效果就是一下子快然后慢下来。

所以,就要控制t的大小是由小到大的,提供一个speed速度的概念,从0往上加到最高速度,因为刚开始的差值大,很小的t也会造成计算出来的插值很大,所以前面要控制t的成长变慢,后面再快。

using UnityEngine;

public class ZhuanPanMono : MonoBehaviour {

    public static bool ShowResult = false;
    public static uint Result = 0;
    private float speed = 0f;
    public static float z = 0;

    private float heightSpeed = 3f;
    private float scaleSpeed = 0.18f;

    private Transform go;

	// Use this for initialization
	void Start () {
        go = transform.GetChild(3);
	}
	
	// Update is called once per frame
	void Update () {
        if (!ShowResult) return;

        uint TargetRotation = Result * 45 + 10 * 360;
        z = Mathf.Lerp(z, TargetRotation, Time.deltaTime * speed);
        
        go.rotation = Quaternion.Euler(go.rotation.x,go.rotation.y,z);

        if (speed < heightSpeed) {
            //通过缩放来控制前期速度的增长过快
            speed += Time.deltaTime * scaleSpeed;
        }

        if (scaleSpeed < 1 && speed > 1f) {
            //后期释放加速度的限制缩放
            scaleSpeed += Time.deltaTime;
        }

        if (Mathf.Abs(z - TargetRotation) < 0.1f) {
            //转动结束
            ShowResult = false;
        }
	}
}

首页 我的博客
粤ICP备17103704号