unity拋物線,平均速度下的運動軌跡


之前分享了關於兩點之間拋物線的“金手指”的實現方案,然后有朋友問我,一般情況下會給出速度,如何模擬自然的軌跡。

我一聽這不是很容易實現么,根據之前的公式,得出兩點之間時間恆定時,軌跡是確定的,也就是說平均速度是恆定。

那么反過來,在給定平均速度,然后再通過距離/速度,就可得出時間,那么軌跡也就確定了。

OK,我不多廢話,直接上代碼:

using UnityEngine;
using System.Collections;

public class PaoWuLine : MonoBehaviour
{
    public float ShotSpeed = 10;
    private float time = 1;//代表從A點出發到B經過的時長
    public Transform pointA;//點A
    public Transform pointB;//點B
    public float g = -10;//重力加速度
    // Use this for initialization
    private Vector3 speed;//初速度向量
    private Vector3 Gravity;//重力向量

    private Vector3 currentAngle;
    void Start()
    {
        time = Vector3.Distance(pointA.position, pointB.position)/ShotSpeed;
        transform.position = pointA.position;//將物體置於A點
        //通過一個式子計算初速度
        speed = new Vector3((pointB.position.x - pointA.position.x) / time,
            (pointB.position.y - pointA.position.y) / time - 0.5f * g * time, (pointB.position.z - pointA.position.z) / time);
        Gravity = Vector3.zero;//重力初始速度為0
    }
    private float dTime = 0;
    // Update is called once per frame
    void FixedUpdate()
    {

        Gravity.y = g * (dTime += Time.fixedDeltaTime);//v=at
        //模擬位移
        transform.position += (speed + Gravity) * Time.fixedDeltaTime;
        currentAngle.x = -Mathf.Atan((speed.y + Gravity.y) / speed.z) * Mathf.Rad2Deg;
        transform.eulerAngles = currentAngle;
    }
}

這次直接把角度加上了,喜歡的朋友可以自己測試。

時間恆定的兩點軌跡:http://www.cnblogs.com/jqg-aliang/p/4806017.html

一般拋物線軌跡:http://www.cnblogs.com/jqg-aliang/p/4806002.html#3292517

好了,關於憤怒的小鳥,弓箭之類的簡單實現算法差不多夠用了。之前我研究了很久的導彈飛行算法有了新的方向,

使用拋物線模擬動態軌跡,將會有更加真實自然的效果。歡迎關注。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM