Unity 飞线效果贝赛尔曲线实现

 

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FeiXian : MonoBehaviour
{
    public Transform pos0;    //位置1
    public Transform pos1;      // 位置1和位置2中间的位置
    public Transform  pos2;   ////位置2

    public float time = 1f;
    public float startTime = 0;

    private int jisuqi = 0;
    //二次贝塞尔曲线
    Vector3 Bezier(Vector3 p0, Vector3 p1, Vector3 p2, float t)
    {
        //算法第一种写法
        //float u = 1 - t;
        //float tt = t * t;
        //float uu = u * u;
        //Vector3 p = uu * p0;
        //p += 2 * u * t * p1;
        //p += tt * p2;
        //return p;

        //算法第二种写法
        Vector3 p0p1 = (1 - t) * p0 + t * p1;
        Vector3 p1p2 = (1 - t) * p1 + t * p2;
        Vector3 result = (1 - t) * p0p1 + t * p1p2;
        return result;
    }

    void Start()
    {      
        //不想要固定位置可以随机位置
        //pos1.position = new Vector3(0, Random.Range(5, 11), 0);
    }

    void Update()
    {
        startTime += Time.deltaTime;
        if (startTime > time)
        {
            startTime = 0f;

            //坐标转换 实现往返运动  不需要就注释掉
            Transform vector = pos0;
            pos0 = pos2;
            pos2 = vector;

        }
        Vector3 pos = Bezier(pos0.position, pos1.position, pos2.position, startTime / time);
        transform.position = pos;
    }
}

 

demo链接:

链接:https://pan.baidu.com/s/1nrpAJEC0j4iqfvkJ3lkDyw
提取码:4pyp

 

如果喜欢请点个赞吧  ❤❤❤

 

posted @ 2021-09-29 10:44  剑起苍穹  阅读(376)  评论(0编辑  收藏  举报
/*鼠标点击特效*/