注意::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);
}
}
答案 0 :(得分:1)
您的问题是所有对象都以相同的位置移动,而不是从当前位置开始移动。 Mathf.PingPong
函数实际上并不是要与起始位置一起使用。可以盲目地在两个值之间来回移动而没有起始位置。
要使GameObject来回移动,请使用Vector3 Lerp(Vector3 a, Vector3 b, float t)
+协程。 doc解释了它是如何工作的,但简单来说,当a
传递到0
和{{1之间的中间点} t
时,它返回a
}} {{1}传递给b
时,0.5
传递给t
时b
。
这样,您可以使用协程函数来回移动GameObject,并能够提供移动开始的位置。
1