using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class draw_parabola : MonoBehaviour
{
public Transform startTrans;
public Transform endTrans;
public LineRenderer lineRender;
Vector3[] path;
void Start()
{
draw_parabola_true(startTrans.position, endTrans.position, 10, 5);
}
///
/// 绘制抛物线
///
/// 初始点
/// 结束点
/// 路径点数量
void draw_parabola_true(Vector3 startPoint, Vector3 endPoint, int resolution, float height)
{
var bezierControlPoint = (startPoint + endPoint) * 0.5f + (Vector3.up * height);
path = new Vector3[resolution];//resolution为int类型,表示要取得路径点数量,值越大,取得的路径点越多,曲线最后越平滑
for (int i = 0; i < resolution; i++)
{
var t = (i + 1) / (float)resolution;//归化到0~1范围
path[i] = GetBezierPoint(t, startPoint, bezierControlPoint, endPoint);//使用贝塞尔曲线的公式取得t时的路径点
}
lineRender.positionCount = path.Length;
lineRender.SetPositions(path);
}
/// 0到1的值,0获取曲线的起点,1获得曲线的终点
/// 曲线的起始位置
/// 决定曲线形状的控制点
/// 曲线的终点
public static Vector3 GetBezierPoint(float t, Vector3 start, Vector3 center, Vector3 end)
{
return (1 - t) * (1 - t) * start + 2 * t * (1 - t) * center + t * t * end;
}
}