グリッド状に生成
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 50/67。
ループをループの中に入れると、グリッドのすべてのセルを訪れます。外側のループが列を選び、内側のループがその列に沿って進みます。その中に 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個追加されます。
4番目の引数は親です。親のない Tile(Clone) オブジェクトが9個あるとHierarchyが散らかりますが、transform を渡すと、これらはこのスクリプトが付いているオブジェクトであるFloorの下にまとめられます。そのため、折りたたんだり、まとめて移動したり、まとめて削除したりできます。渡す位置は、引き続きワールド座標です。
チャレンジ
中級地面に設置する、Brick プレハブを使った幅4個・高さ5段のレンガの壁を作りましょう。レンガの幅は1単位、高さは0.5単位です。
- 4列の位置は x = -1.5、-0.5、0.5、1.5 です。
- 一番下の段は地面に接するため、レンガの y 座標は 0.25 です。各段は、1つ下の段から0.5上に配置します。
- すべてのレンガは z = 0 に配置し、回転させず、このスクリプトが付いているオブジェクトである Wall の子オブジェクトにします。
Play を押して壁を確認し、その後 Check を押してください。
自分で試してみよう
using UnityEngine;
public class WallBuilder : MonoBehaviour
{
public GameObject brickPrefab;
void Start()
{
// レンガを4列×5行に配置し、それぞれをこのWallの子にする
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。