如何重置Vector3位置?

时间:2015-10-06 20:04:25

标签: c# unity3d

我试图编写一个实例化一行预制件的脚本。这是第一次工作,但每次在那之后它实例化一个在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开始排队。

1 个答案:

答案 0 :(得分:2)

您可以通过指定要连续生成的预制件数而不是确切的宽度来简化代码。

此外,请使用gameObject.transform.localScale.x代替按硬编码数字增加生成位置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个游戏对象,它们彼此相邻。