41 lines
809 B
C#
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;
|
|
}
|
|
}
|