我如何重置Vector3的位置

本文关键字:位置 Vector3 何重置 | 更新日期: 2023-09-27 18:16:41

我试图编写一个脚本,实例化一行预制件。这第一次是有效的,但之后每次它都在0x,0y,0z处实例化一个,其余的在30x-40x处实例化。我尝试在for循环执行之前设置初始位置,然后使用initalPos变量重置位置,但这似乎不起作用。在我的代码

    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;
    }
}

temp变量是我设置的当前位置,所以我可以添加0.089,这样我的精灵就会对齐。我正在尝试重置这个值,以便它们每次都从0x开始排列

我如何重置Vector3的位置

您可以通过指定希望在一行中生成的预制件的数量而不是精确的宽度来简化代码。

另外,不要用硬编码的数字增加刷出位置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;
    }
}

这将给你3行10个gameobject,它们彼此相邻。