私はベクトルポイントのリストを持っています。ベクトルポイントのリストは、オブジェクトが従う直線セグメントのパスを定義します。現在、私はこのようなパスに沿って運動をアニメーション化するために、線形補間を行います。一定速度で直線セグメントのパスに沿って移動する
public class Demo
{
public float speed = 1;
private List<Vector3> points;
private float t; // [0..1]
private Vector3 Evaluate(float t)
{
// Find out in between which points we currently are
int lastPointIndex = GetLast(t);
int nextPointIndex = GetNext(t);
// Obviously, I need to somehow transform parameter t
// to adjust for the individual length of each segment.
float segmentLength = GetLength(lastPointIndex, nextPointIndex);
// But how would I do this?
return Vector3.Lerp(points[lastPointIndex], points[nextPointIndex], t);
}
public void Update()
{
// Curve parameter t moves between 0 and 1 at constant speed.
t = Mathf.PingPong(Time.time * speed, 1);
// Then just get the evaluated position for the curve time, but
// this gives variant speed if points are not evenly spaced.
Vector3 position = Evaluate(t);
SetObjectPosition(position);
}
}
私は一定の速度を達成することを実現、私は、各セグメントの長さを考慮してパラメータtを再スケールする必要がありますが、私は思えますどのように正確に見つけることができないようにする。
私も知っている、私は私の希望のスピードで次のポイントに向かって移動し、方向を変えるだけで、近くにいたり、次のセグメントですが、これは実際に各セグメントの正確な長さを知っており、正確にこれを補間できるはずです。