游戏中的数学之各种插值

目录

1.线性插值 之在规定时间内位移到指定位置

2.球形插值 实现 声音pitch 由低变高 模拟汽车声浪

3.附球形插值详解


1.线性插值 之在规定时间内位移到指定位置

  void Update()
  {
       //需求: 在2s内移动到指定位置
        if (transform.position == Vector3.right * 10)
        {
            Debug.Log(Time.time);
        }
        else
        {
            //p [0-1]
            var p = Time.time / sumTime;

            // 具体公式:  position =v1+(v2-v1)*p
            transform.position = Vector3.Lerp(Vector3.zero, Vector3.right * 10,p );
        }
   }

 

2.球形插值 实现 声音pitch 由低变高 模拟汽车声浪

    
    float sumTime = 10;
    float lerpTime = 0f;

    public AudioSource audioA;

    private void Init()
    {
        audioA.pitch = 0.5f;
        audioA.volume = 0.2f;
        s_v3 = new Vector3(audioA.pitch, audioA.volume);
        e_v3 = new Vector3(1.5f, 1f);
    }
    void Update()
    {
        lerpTime += Time.deltaTime;
        var t_update = lerpTime / sumTime;

        if (t_update >= 1)
        {
            lerpTime = 0;
            is_up = !is_up;
        }

        if (is_up)
        {
            //球形插值 实现 声音pitch 由低变高 
            var newV = Vector3.Slerp(s_v3, e_v3, t_update);
            audioA.pitch = newV.x;
            audioA.volume = newV.y;

            Debug.Log(newV.z);
        }
        else
        {
            //球形插值 实现 声音pitch 由低变高 
            var newV = Vector3.Slerp(e_v3, s_v3, t_update);
            audioA.pitch = newV.x;
            audioA.volume = newV.y;
        }
    }

3.附球形插值详解

原文地址:http://www.manew.com/thread-43314-1-1.html

你可能感兴趣的:(游戏研发备忘录)