Unity中物体抛物线的实现

来源:互联网 发布:爱普生l351清零软件 编辑:程序博客网 时间:2024/05/17 01:39

定点抛物线的实现
让我们回忆一下初中学得最基本的物理知识
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);//垂直上的运动    }}

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

欢迎更正.
这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击