以前分享了關於兩點之間拋物線的「金手指」的實現方案,而後有朋友問我,通常狀況下會給出速度,如何模擬天然的軌跡。html
我一聽這不是很容易實現麼,根據以前的公式,得出兩點之間時間恆定時,軌跡是肯定的,也就是說平均速度是恆定。算法
那麼反過來,在給定平均速度,而後再經過距離/速度,就可得出時間,那麼軌跡也就肯定了。測試
OK,我很少廢話,直接上代碼:this
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; } }
此次直接把角度加上了,喜歡的朋友能夠本身測試。spa
時間恆定的兩點軌跡:http://www.cnblogs.com/jqg-aliang/p/4806017.htmlcode
通常拋物線軌跡:http://www.cnblogs.com/jqg-aliang/p/4806002.html#3292517orm
好了,關於憤怒的小鳥,弓箭之類的簡單實現算法差很少夠用了。以前我研究了好久的導彈飛行算法有了新的方向,htm
使用拋物線模擬動態軌跡,將會有更加真實天然的效果。歡迎關注。blog