public List<GameObject> objs;
[Range(0,1)]
public float t;
public GameObject move;
private void OnDrawGizmos()
{
List<Vector3> poslist = objs.Select(x => x.transform.position).ToList();
lines.Clear();
move.transform.position = Bezier(poslist,t);
foreach(var ml in lines)
{
Gizmos.DrawLine(ml.p1, ml.p2);
}
}
public struct MyLine
{
public Vector3 p1;
public Vector3 p2;
public MyLine(Vector3 p1,Vector3 p2)
{
this.p1 = p1;
this.p2 = p2;
}
}
public List<MyLine> lines = new List<MyLine>();
public Vector3 Bezier(List<Vector3> posList, float t)
{
if (posList.Count < 2) return Vector3.zero;
if (posList.Count == 2)
{
lines.Add(new MyLine(posList[0], posList[1]));
return Vector3.Lerp(posList[0], posList[1], t);
}
List<Vector3> newPosList = new List<Vector3>();
for (int i = 1; i < posList.Count; i++)
{
newPosList.Add(Vector3.Lerp(posList[i - 1], posList[i], t));
lines.Add(new MyLine(posList[i - 1], posList[i]));
}
return Bezier(newPosList, t);
}
Unity3d 用遞歸方式求Bezier貝賽爾曲線
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.