如何重置Vector3位置?
问题描述:
我正在尝试编写一个脚本来实例化一行预制件。这是第一次,但每次都在0x,0y,0z实例化,其余的大约在30x-40x之外。我尝试在执行for循环之前设置初始位置,然后使用initalPos变量重置位置,但似乎不起作用。在我的代码如何重置Vector3位置?
public class generator : MonoBehaviour {
public int height = 0;
public int width = 0;
private Vector3 temp;
public GameObject sprite;
private Vector3 initialPos;
void Start()
{
initialPos = new Vector3(0,0,0);
for(int i = 0; i < width; i++)
{
Instantiate (sprite, temp, Quaternion.identity);
temp = sprite.transform.position;
temp.x += 0.089f;
sprite.transform.position = temp;
}
temp = initialPos;
}
}
临时变量是什么,我在设置当前位置,这样我就可以添加0.089它,因此我的精灵会排队。我试图重置该值,以便每次从0x开始排队。
答
您可以通过指定想要连续产生的预制件的数量来简化代码,而不是确切的宽度。
此外,不是用硬编码数字递增您的产卵位置x值,而是使用gameObject.transform.localScale.x
。
例如:
public GameObject Cube;
void Start()
{
SpawnRow(Vector3.zero, 10);
}
void SpawnRow(Vector3 startPosition, int RowLength)
{
Vector3 currentPos = startPosition;
for (int i = 0; i < RowLength; i++)
{
Instantiate(Cube, currentPos, Quaternion.identity);
currentPos.x += Cube.transform.localScale.x;
}
}
此外,如果你想这样做菌种其他行旁边的对方,你可以调用SpawnRow()这样的:
void Start()
{
Vector3 currentPos = Vector3.zero;
for (int i = 0; i < 3; i++)
{
SpawnRow(currentPos, 10);
currentPos.z += Cube.transform.localScale.z;
}
}
这给你三行10个gameObjects直接相邻。
非常感谢!我不知道localScale或Vector3.zero。解决了我的问题,并教会了我几件事。对此,我真的非常感激。 – tsustyle