乒乓球运动的起点

时间:2018-07-19 17:50:01

标签: c# unity3d

注意:objectSpawns[]包含实例化的GameObject,它们全部设置为沿y轴堆叠的随机X位置(-2.8f,2.8f)Y位置

发生了什么:所有实例化的对象都在正确移动,但是它忽略了X位置上的初始偏移量。因此,当我试图让它们以其初始X偏移来回移动时,它们都在同一X位置上来回移动。

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

    for (int i = 0; i < objectSpawns.Length; i++)
    {
        pointA = new Vector3(-3.8f, objectSpawns[i].transform.localPosition.y, 0);
        pointB = new Vector3(3.8f, objectSpawns[i].transform.localPosition.y, 0);
        objectSpawns[i].transform.localPosition = Vector3.Lerp(pointA, pointB, time);
    }
}

1 个答案:

答案 0 :(得分:1)

您的问题是所有对象都以相同的位置移动,而不是从当前位置开始移动。 Mathf.PingPong函数实际上并不是要与起始位置一起使用。可以盲目地在两个值之间来回移动而没有起始位置。

要使GameObject来回移动,请使用Vector3 Lerp(Vector3 a, Vector3 b, float t) +协程。 doc解释了它是如何工作的,但简单来说,当a传递到0和{{1之间的中间点} t时,它返回a }} {{1}传递给b时,0.5传递给tb

这样,您可以使用协程函数来回移动GameObject,并能够提供移动开始的位置。

1