Unity - 在循环中实例化对象,彼此之间有间距

时间:2017-06-11 21:02:09

标签: c# unity3d

我生成10x10的立方体网格。我的细胞不同,我从阵列中选择它们。

我需要的是每个细胞之间的间距很小。

这是我目前的代码

private void Start()
{
    for (int x = 0; x < data.MapSize.x; x++)
    {
        for (int y = 0; y < data.MapSize.y; y++)
        {
            Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x, 0, z), Quaternion.identity); // Create a specific cell on position (x,y)
        }
    }
}

所以我试过了:

new Vector3(x + 1, 0, z + 1)

new Vector3(x * 0.1f, 0, z * 0.1f)

但显然它不会改变任何东西。

所以我尝试了这个:

在启动方法之前,我创建了一个变量

int counter = 0;

并在循环中

counter += 0.1f;
new Vector3(x + counter, 0, z + counter)

但是后来没有网格,我得到了平行四边形。

2 个答案:

答案 0 :(得分:1)

首先定义您的间距长度,以便日后轻松更改。

float spacing = 0.1f;

然后使用它来获得所需的结果。

Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x + (x*spacing), 0, y + (y*spacing)), Quaternion.identity); // Create a specific cell on position (x,y)

注意我已将z更改为y

答案 1 :(得分:1)

答案取决于您是否希望您的网格在世界空间中保持10个单位。

如果网格的大小无关紧要,您只需将填充添加到x和y增量(并使用浮点而不是整数)。您还必须增加data.MapSize以考虑填充:

for (float x = 0; x < data.MapSize.x; x += 1.1f)
{
    for (float y = 0; y < data.MapSize.y; y += 1.1f)
    {

或者,您可能需要考虑缩小您在data.Cells中存储的对象,以便在不影响网格大小的情况下创建空间。您可以缩小预制件,也可以在实例化时执行此操作:

GameObject newCell = (GameObject)Instantiate(data.Cells[Random.Range(0, data.Cells.Length)]), new Vector3(x, 0, y), Quaternion.identity); // Create a specific cell on position (x,y)
newCell.transform.localScale = new Vector3(0.9, 0.9, 0.9);

编辑:Lestat的解决方案是第一个选项的更简洁的版本,所以如果网格的最终大小无关紧要,那么我会使用它而不是修改x和y变量。