Unity中物體拋物線的實現

定點拋物線的實現
讓我們回憶一下初中學得最基本的物理知識
1: S=Vt 距離等於速度x時間(用於拋物線中水平運動)
2: V=at 速度等於加速度x時間(用於拋物線垂直運動)

好啦,就這個2個公式就能搞定啦!

水平運動上的代碼:

    transform.Translate(transform.forward* horizontalSpeed * Time.fixedDeltaTime, Space.World);

垂直上的運動代碼:

 transform.Translate(Vector3.up * verticalSpeed * Time.fixedDeltaTime, Space.World);

horizontalSpeed水平上的速度是自己定義的,那麼 verticalSpeed 按照物理上的法則,應該是上升速度減小,下降速度增大,由於是定點的拋物線(意思就是已經選好了物體拋物線後的落點),那麼根據公式來計算:
t=S/V;也就是物體與落點間的距離除以水平速度,得到物體拋物線經歷的時間,由於是勻加速運動,那麼上升和下降的時間相同,表示上升的時間爲t2= t/2;
那麼根據公式:
v=at;時間知道了,加速度是重力加速度(可以自己調整)也就可以求得垂直上的初速度了.

public class Parabolic : MonoBehaviour {
    public float horizontalSpeed = 30f;//水平上的速度,自己定義
    public Transform target; //目標點
    public float verticalSpeed; //垂直上的初速度
    public float g = 9.81; //重力加速度
    public Vector3 need_direction; //當前物體指向目標物體的方向
    void Start () {
        dis = Vector3.Distance(transform.position,target.position);//計算2個物體間距離
        need_direction = (target.position - transform.position).normalized;//獲得當前物體指向目標物體的方向
        float need_time = dis / speed/2f;//公式
        verticalSpeed = g * need_time;//計算出垂直上的初速度

    }



    void FixedUpdate () {
            verticalSpeed = verticalSpeed - g * Time.fixedDeltaTime;//垂直上的初速度隨時間的改變
            transform.Translate(need_direction* speed * Time.fixedDeltaTime, Space.World);//水平上的運動
            transform.Translate(Vector3.up * verticalSpeed * Time.fixedDeltaTime, Space.World);//垂直上的運動


    }

}

腳本掛在想實現拋物線的物體上.
簡單實用.

歡迎更正.
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章