两点之间自动移动

时间:2018-07-06 09:10:24

标签: c# unity3d

我有一个问题。我有一个在两点之间无限移动的对象。 为此,我们使用了PingPong方法。

public Vector3 a;
public Vector3 b;
public float speed;
  void Update()
{
    transform.position = Vector3.Lerp(a, b, Mathf.PingPong(Time.time * speed, 1.0f));
}

这一切都很好,但是当我尝试直接从代码中更改速度时,这是一个问题。所以我还有另外一堂课,我可以改变速度。

 if (index == numIndex + 1 || index == numIndex - 1)
        {
            Debug.Log("Good!");
            other.transform.parent.GetComponent<BadWormsController>().speed -= 0.2f;
        }
        else
            Debug.Log("Bad");

当播放器与从点a移到点b的对象之间发生碰撞时,将执行二阶代码。  没关系,速度会改变,但是对象会再次重置,因此它不会在轴上继续前进,但会再次启动,因此会更改其位置。 哪里有问题,要怎么改变,如果有人知道,当改变速度时,物体不会改变其位置,而是继续前进。

1 个答案:

答案 0 :(得分:0)

而不是使用Time.time,而是创建一个新变量来存储其进度。然后,您可以调整此值以抵消位置差异。

public Vector3 a;
public Vector3 b;
public float speed;
public float distance;
void Update(){
    distance += Time.deltaTime;
    transform.position = Vector3.Lerp(a, b, Mathf.PingPong(distance * speed, 1.0f));
}

然后,当您更改速度时,便会添加/删除距离的差异

// get BadWormsController as var since we use it multiple times
BadWormsController bwc = other.transform.parent.GetComponent<BadWormsController>();
float multiplyer = 0.2f/bwc.speed; // get % of distance to remove
bwc.speed -= 0.2f;  //change speed
bwc.distance -= bwc.distance*miltiplyer; // remove difference