| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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);
- }
- /// <summary>
- /// 绘制抛物线
- /// </summary>
- /// <param name="startPoint">初始点</param>
- /// <param name="endPoint">结束点</param>
- /// <param name="resolution">路径点数量</param>
- 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);
- }
- /// <param name="t">0到1的值,0获取曲线的起点,1获得曲线的终点</param>
- /// <param name="start">曲线的起始位置</param>
- /// <param name="center">决定曲线形状的控制点</param>
- /// <param name="end">曲线的终点</param>
- 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;
- }
- }
|