using System; using UnityEngine; [Serializable] public class BezierCurve { public Vector3[] Points; public Vector3 StartPosition => Points[0]; public Vector3 EndPosition => Points[3]; public BezierCurve() { Points = new Vector3[4]; } public BezierCurve(Vector3[] Points) { this.Points = Points; } public Vector3 GetSegment(float Time) { Time = Mathf.Clamp01(Time); float num = 1f - Time; return num * num * num * Points[0] + 3f * num * num * Time * Points[1] + 3f * num * Time * Time * Points[2] + Time * Time * Time * Points[3]; } public Vector3[] GetSegments(int Subdivisions) { Vector3[] array = new Vector3[Subdivisions]; for (int i = 0; i < Subdivisions; i++) { float time = (float)i / (float)Subdivisions; array[i] = GetSegment(time); } return array; } }