我有一个问题。我有一个在两点之间无限移动的对象。 为此,我们使用了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的对象之间发生碰撞时,将执行二阶代码。 没关系,速度会改变,但是对象会再次重置,因此它不会在轴上继续前进,但会再次启动,因此会更改其位置。 哪里有问题,要怎么改变,如果有人知道,当改变速度时,物体不会改变其位置,而是继续前进。
答案 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