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);//垂直上的运动


    }

}

脚本挂在想实现抛物线的物体上.
简单实用.

欢迎更正.
Unity中物体抛物线的实现_第1张图片

Unity中物体抛物线的实现_第2张图片

Unity中物体抛物线的实现_第3张图片

你可能感兴趣的:(unity)