【Unity】完美绘制贝塞尔曲线

三阶贝塞尔曲线:B(t) = P0(1 - t)^3 + 3P1t(1 - t)^2 + 3P2t^2(1 - t) + p3t^3,t∈[0, 1];
在这里插入图片描述
1.在场景中创建空物体,添加LineRender组件
2.在物体上挂在自己写的脚本 BezierCurve.cs
3.大功告成
PS:如果发现创建的线段丢失材质,可以新建一个默认材质球,拖拽给Linerender组件

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

public class BezierCurve : MonoBehaviour
{
	private LineRenderer lineRenderer;
	private Vector3 p0;
	private Vector3 p1;
	private Vector3 p2;
	private Vector3 result;
	private List<Vector3> resultList = new List<Vector3>();
	private float time = 0;
	private float timeLerp;
	private float maxTime = 1f;
	void Start()
	{
		lineRenderer = gameObject.GetComponent<LineRenderer>();
		lineRenderer.startColor = new Color(1f, 1f, 0f, 0.5f);
		lineRenderer.endColor = new Color(0f, 1f, 1f, 0.5f);
		lineRenderer.startWidth = 0.02f;
		lineRenderer.endWidth = 0.02f;


		//如果想在Editor中手动打点,可以使用这个代码块。否则注释这三行,使用下面被注释的代码块。
		p0 = lineRenderer.GetPosition(0);
		p1 = lineRenderer.GetPosition(1);
		p2 = lineRenderer.GetPosition(2);
		//p0 = new Vector3(-5, 0, 0);
		//p1 = new Vector3(0, 5, 0);
		//p2 = new Vector3(5, 0, 0);
	}
	void FixedUpdate()
	{
		if (time > maxTime)
		{
			return;
		}

		CalculatePosition();

		lineRenderer.positionCount = resultList.ToArray().Length;
		if (lineRenderer.positionCount >= 2)
		{
			lineRenderer.SetPositions(resultList.ToArray());
		}
	}
	void CalculatePosition()
	{
		result = new Vector3();
		timeLerp = Mathf.Lerp(0, 1, time / 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;
		resultList.Add(result);
		time = time + Time.deltaTime;
	}
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity贝塞尔曲线是通过贝塞尔曲线的数学原理在Unity游戏引擎中实现的一种曲线效果。在Unity中,贝塞尔曲线可以用来创建平滑的曲线路径,并用于生成动画效果、粒子效果等。在Unity中,常用的贝塞尔曲线有一阶贝塞尔曲线、二阶贝塞尔曲线和三阶贝塞尔曲线。 一阶贝塞尔曲线是一条线性函数,通过两个控制点来定义一条直线段。二阶贝塞尔曲线是由两个一阶贝塞尔曲线的线性插值得到的,它通过三个控制点来定义一条平滑的曲线。而三阶贝塞尔曲线则是由两个二阶贝塞尔曲线的线性插值得到的,它通过四个控制点来定义一条更加复杂的曲线。 在Unity中,我们可以通过编写C#代码来实现贝塞尔曲线的计算和绘制。使用LineRenderer组件可以绘制贝塞尔曲线的路径,可以通过调整控制点的位置来改变曲线的形状。同时,我们还可以使用鼠标交互来控制曲线的控制点,实现动态的曲线效果。 总之,Unity贝塞尔曲线是一种通过数学计算和绘制技术实现的曲线效果,它可以用于游戏开发中的动画、粒子效果等场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【游戏开发进阶】玩转贝塞尔曲线,教你在Unity中画Bezier贝塞尔曲线(二阶、三阶),手把手教你推导公式](https://blog.csdn.net/linxinfa/article/details/116808549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Unity 工具类 之 贝塞尔 Bezier 曲线](https://blog.csdn.net/u014361280/article/details/103871840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值