Menu
CoddyTech

在网格中生成

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 64 课,共 85 课。

嵌套循环会遍历网格中的每个单元格:外层循环选择一列,内层循环沿着这一列移动。在循环中加入 Instantiate,每个单元格就会生成一个对象。下面的代码用宽度为 2 个单位的瓦片铺出一个 3 乘 3 的地面,因此瓦片之间相隔 2 个单位:

public GameObject tilePrefab;

void Start()
{
    for (int x = 0; x < 3; x++)
    {
        for (int z = 0; z < 3; z++)
        {
            Vector3 spot = new Vector3(x * 2, 0, z * 2);
            Instantiate(tilePrefab, spot, Quaternion.identity, transform);
        }
    }
}

瓦片会放在 x = 0、2、4 和 z = 0、2、4 的位置:总共 9 块,从 (0, 0, 0) 到 (4, 0, 4)。循环在 Start() 中运行一次。如果放在 Update() 中,每一帧都会再添加 9 块瓦片。

第四个参数是父对象。如果有 9 个独立的 Tile(Clone) 对象,Hierarchy 中会显得杂乱;传入 transform 会将它们归到此脚本所在的对象 Floor 下,这样就可以折叠起来、一起移动或一起删除。传入的位置仍然是世界坐标。

challenge icon

挑战

中等

用 Brick 预制件建一堵 4 块宽、5 块高的墙。

  1. 在 Start() 中,让 c 从 0 循环到 3,并在循环内部让 r 从 0 循环到 4。
  2. 在内层循环中,调用 Instantiate(brickPrefab, new Vector3(-1.5f + c, 0.25f + r * 0.5f, 0), Quaternion.identity, transform)。最后一个参数会让每块砖成为 Wall 的子对象。

按“运行”:地面上会立起一堵由 20 块砖组成的墙。然后点击“检查”。

亲手试试

using UnityEngine;

public class WallBuilder : MonoBehaviour
{
    public GameObject brickPrefab;

    void Start()
    {
        // 砖块排成 4 列、5 行,每块砖都是这个 Wall 的子对象
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器