unity 贝塞尔曲线实例化应用

2024-04-01 19:58

本文主要是介绍unity 贝塞尔曲线实例化应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中常常会用到画曲线的功能,不管是Gizmos.DarwLine还是Debug.DarwLine都满足不了打包之后在exe中显示。

虽然Linerenderer可以画,但是自己一点点的填写坐标非常麻烦。所以这里将用到贝塞尔曲线公式计算生成一条曲线以及生成一条曲线在Linerenderer中所需要多少个点位。

这里有篇博客将贝塞尔曲线的原理和推导公式都讲解的非常清楚,有兴趣可以了解下:https://blog.csdn.net/cfan927/article/details/104649623/

我这里将用二次贝塞尔曲线公式在LineRenderer中画一条曲线,下面是原理图:

定义:二次贝塞尔曲线的路径由给定点P0 、P1​、P2​的函数B(t)给出:
B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 ,   t ∈ [ 0 , 1 ] 

我们在将该公式带入到unity中,将B理解为一个求导结果即Vector3向量,t为时间(即当前点移动到下一个点时间)t 取值0 - 1;

上代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LineRender : MonoBehaviour
{private LineRenderer lineRenderer;public Vector3 p0;public Vector3 p1;public Vector3 p2;private Vector3 result;private List<Vector3> vectorList= new List<Vector3>();private float Nowtime = 0;private float timeLerp;private float maxTime = 1f;void Start(){lineRenderer = gameObject.GetComponent<LineRenderer>();p0 = new Vector3(0,0,0);p1 = new Vector3(5,5,5);p2 = new Vector3(10,0,10);}void FixedUpdate(){if (Nowtime > maxTime){return;}CalculateVectorPoint();lineRenderer.positionCount = vectorList.ToArray().Length;if (lineRenderer.positionCount >= 2){lineRenderer.SetPositions(vectorList.ToArray());}}void CalculateVectorPoint(){result = new Vector3();timeLerp = Mathf.Lerp(0, 1, Nowtime / maxTime);result.x = Mathf.Pow(1 - timeLerp, 2) * p0.x + 2 * timeLerp * Mathf.Pow(1 - timeLerp, 1) * p1.x + Mathf.Pow(timeLerp, 2) * p2.x;result.y = Mathf.Pow(1 - timeLerp, 2) * p0.y + 2 * timeLerp * Mathf.Pow(1 - timeLerp, 1) * p1.y + Mathf.Pow(timeLerp, 2) * p2.y;result.z = Mathf.Pow(1 - timeLerp, 2) * p0.z + 2 * timeLerp * Mathf.Pow(1 - timeLerp, 1) * p1.z + Mathf.Pow(timeLerp, 2) * p2.z;vectorList.Add(result);Nowtime = Nowtime + Time.deltaTime;}
}

 效果图如下:

 最后附上二次贝塞尔曲线求导公式和正切方向计算公式:

//二次贝塞尔曲线求导公式:(1 - t)^2 * P0 + 2t(1 - t)P1 + t^2 * P2,t=[0,1]transform.position = Mathf.Pow((1 - dt), 2) * StartPos + 2 * dt * (1 - dt) * HeightPos + Mathf.Pow(dt, 2) * TargetPos;//二次贝塞尔曲线正切方向求导公式: 2t(P2 + P0 - 2*P1) + 2(P1 - P0),t=[0,1]transform.up = 2 * dt * (TargetPos + StartPos - 2 * HeightPos) + 2 * (HeightPos - StartPos);

 

这篇关于unity 贝塞尔曲线实例化应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868021

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点