Menu
CoddyTech

グリッド状に生成

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 64/85。

ループの中にループを入れると、グリッドのすべてのセルを順に処理できます。外側のループで列を選び、内側のループでその列に沿って進みます。その中にInstantiateを置くと、すべてのセルにオブジェクトが作られます。これは、幅が2単位のタイルを2単位ずつ離して配置し、3×3の床を作ります。

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()で1回実行されます。Update()に入れると、毎フレーム9枚ずつタイルが追加されます。

第4引数は親オブジェクトです。親を指定しないと、個別のTile(Clone)オブジェクトが9個できてHierarchyが散らかります。transformを渡すと、それらをこのスクリプトが付いているオブジェクトであるFloorの下にまとめられるので、折りたたんだり、まとめて移動したり、まとめて削除したりできます。渡す位置は、引き続きワールド座標です。

challenge icon

チャレンジ

中級

幅4、高さ5のBrickプレハブの壁を作成しましょう。

  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プレイグラウンド