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 @   剑起苍穹  阅读(439)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
/*鼠标点击特效*/
点击右上角即可分享
微信分享提示