我生成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)
但是后来没有网格,我得到了平行四边形。
答案 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变量。