如何重置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直接相邻。

+0

非常感谢!我不知道localScale或Vector3.zero。解决了我的问题,并教会了我几件事。对此,我真的非常感激。 – tsustyle