unity 贝赛尔曲线

当我们需要一些轨迹或者弹道之类的效果时,肯定会先考虑贝赛尔曲线。


什么是贝塞尔曲线:


贝赛尔曲线是一条光滑曲线,很适合做导弹发射运行轨迹。


C#代码:

第一步,我们首先要将这条曲线的点全部计算出来:

void Analysis()
    {
        for (int i = 0; i < 200; i++)
        {
            //第一阶段
            Vector3 pos1 = Vector3.Lerp(a.position, b.position, i / 100f);
            Vector3 pos2 = Vector3.Lerp(b.position, c.position, i / 100f);
            Vector3 pos3 = Vector3.Lerp(c.position, d.position, i / 100f);
            //第二阶段
            var pos1_0 = Vector3.Lerp(pos1, pos2, i / 100f);
            var pos1_1 = Vector3.Lerp(pos2, pos3, i / 100f);
            //第三阶段
            var pos2_0 = Vector3.Lerp(pos1_0, pos1_1, i / 100f);

            point.Add(pos2_0);
        }
    }
第二步,按照固定的时间间隔去修改导弹的位置

void FixedUpdate () {
        timer += Time.deltaTime*100;
        if (timer > time1)
        {
            timer = 0;
            missile.transform.localPosition = Vector3.Lerp(point[i - 1], point[i], 1f);
            i++;
            if (i >= point.Count) i = 1;
        }
    }

注意顺序,Analysis()要在Start ()中运行:

    public GameObject missile;//导弹
    public Transform a;
    public Transform b;
    public Transform c;
    public Transform d;

    private List<Vector3> point = new List<Vector3>();
    private float time1 = 2f;
    private float timer = 0;
    int i = 1;
    // 初始化时执行
    void Start () {
        Analysis();
    }





猜你喜欢

转载自blog.csdn.net/testiness_wind/article/details/79494831