定點拋物線的實現
讓我們回憶一下初中學得最基本的物理知識
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);//垂直上的運動
}
}
腳本掛在想實現拋物線的物體上.
簡單實用.
歡迎更正.