问题可能出在你没按照预期去定义AnimationCurve。例如,以下代码中的AnimationCurve进行了错误的定义,导致lerp持续时间无法正常调整。
public AnimationCurve curve;
void Update() {
float duration = 1f;
float time = Time.timeSinceLevelLoad % duration;
float value = curve.Evaluate(time / duration);
transform.position = Vector3.Lerp(startPos, targetPos, value);
}
正确的AnimationCurve应该按照如下方式进行定义,其中第一个关键帧的时间是始终为0,而曲线的长度由最大时间间隔来决定:
public AnimationCurve curve = AnimationCurve.Linear(0f, 0f, 1f, 1f);
void Update() {
float duration = 1f;
float time = Time.timeSinceLevelLoad % duration;
float value = curve.Evaluate(time / duration);
transform.position = Vector3.Lerp(startPos, targetPos, value);
}
也可以将曲线修改为更具体的过渡,例如使用EaseInOut方式:
public AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
void Update() {
float duration = 1f;
float time = Time.timeSinceLevelLoad % duration;
float value = curve.Evaluate(time / duration);
transform.position = Vector3.Lerp(startPos, targetPos, value);
}