using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
public Transform[] controlPoints; //保存3个点的位置信息
public LineRenderer lineRenderer;
private int layerOrder = 0;
private int _segamentNum = 50;
private void Start()
{
if (!lineRenderer)
{
lineRenderer = GetComponent<LineRenderer>();
}
lineRenderer.sortingLayerID = layerOrder;
}
private void Update()
{
int nodeIndex = 0;
DrawCurve( controlPoints[nodeIndex].position,controlPoints[nodeIndex+1].position,controlPoints[nodeIndex+2].position);
}
void DrawCurve(Vector3 Stare, Vector3 Cound,Vector3 End )
{
for (int i = 1; i <= _segamentNum; i++)
{
float t = i / (float)_segamentNum;
Vector3 pixel = CalculatteCubucBezierPoint(t, Stare, Cound,End);
lineRenderer.positionCount = i;
lineRenderer.SetPosition(i - 1, pixel);
}
}
Vector3 CalculatteCubucBezierPoint(float t,Vector3 p0, Vector3 p1,Vector3 p2) //二次贝塞尔曲线公式 B(t) = (1-t)*(1-t)*P0 + 2*t*(1-t)*P1 + t*t*P2
{ //其中需要获取p0,p1,p2三个点 p0为起点,p1为高度,p2为终点
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;
}
}