グリッド状に生成
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の下にまとめられるので、折りたたんだり、まとめて移動したり、まとめて削除したりできます。渡す位置は、引き続きワールド座標です。
チャレンジ
中級幅4、高さ5のBrickプレハブの壁を作成しましょう。
Start()で、cを0から3までループし、その中でrを0から4までループします。- 内側のループで、
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プレイグラウンド