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; } }