它应该平稳地缓慢地将速度从0增加到1,然后缓慢地平稳地从1减少到0,然后再次从0减少到1,以此类推。
但它现在所做的只是一直在增加速度值。也许有一种简单的方法,更短的代码可以做到这一点?
public Animator playerAnimator;
public float speed;
private float t = 0.0f;
private float min = 0;
private float max = 1;
private bool maxed = false;
void Update()
{
if (t == 0)
{
maxed = true;
}
if(t == 1)
{
maxed = false;
}
if(maxed)
{
t += speed * Time.deltaTime;
playerAnimator.SetFloat("Forward", Mathf.Lerp(min, max, t));
}
else
{
t -= speed * Time.deltaTime;
playerAnimator.SetFloat("Forward", Mathf.Lerp(min, max, t));
}
}
您可以使用Mathf.PingPong
在两个值之间来回切换。
public Animator playerAnimator;
public float speed;
private float t = 0.0f;
private float min = 0;
private float max = 1;
void Update()
{
t += speed * Time.deltaTime;
playerAnimator.SetFloat("Forward", Mathf.PingPong(t, max-min) + min);
}
由于Mathf.PingPong
只能在0和你给它的长度之间Ping Pong,而不能在最小值和最大值之间,所以你需要给它max-min
的长度(本质上是最大值和最小值之间的长度(,然后把min
加回结果,这样它就从min
开始,而不是从0开始。