来回移动GameObject

时间:2017-03-24 21:33:57

标签: c# unity3d

我有一个物体,我想要移动到A点,当它到达A点时,它应该移动到B点。当它到达B点时,它应该移回A点。

我以为我可以将Vector3.Lerp用于此

void Update()
{
  transform.position = Vector3.Lerp(pointA, pointB, speed * Time.deltaTime);
}

但我怎么能回去呢?是否有一种优雅的方式来实现这一目标?显然我会像这样需要2个Lerps:

void Update()
{
  transform.position = Vector3.Lerp(pointA, pointB, speed * Time.deltaTime); // Move up
  transform.position = Vector3.Lerp(pointB, pointA, speed * Time.deltaTime); // Move down
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

有很多方法可以做到这一点,但Mathf.PingPong是最简单,最简单的方法。使用Mathf.PingPong获取 0 1 之间的数字,然后将该值传递给Vector3.Lerp。就是这样。

Mathf.PingPong将自动返回值,它将在 0 1 之间来回移动。阅读链接文档以获取更多信息。

public float speed = 1.19f;
Vector3 pointA;
Vector3 pointB;

void Start()
{
    pointA = new Vector3(0, 0, 0);
    pointB = new Vector3(5, 0, 0);
}

void Update()
{
    //PingPong between 0 and 1
    float time = Mathf.PingPong(Time.time * speed, 1);
    transform.position = Vector3.Lerp(pointA, pointB, time);
}