Files
2026-03-04 10:03:45 +08:00

41 lines
809 B
C#

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