ループの入れ子
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 38/85。
1行には1つのループが必要です。行と列からなるフロア全体には、ループの中にループが必要です。
for (int column = 0; column < 3; column++)
{
for (int row = 0; row < 2; row++)
{
Debug.Log(column + ", " + row);
}
}外側のループが1回実行されるたびに、内側のループは最後まで実行されます。つまり、0, 0 と 0, 1、次に 1, 0 と 1, 1、そして 2, 0 と 2, 1 が出力されます。列3つ×行2つで、合計6行です。
2つのループには、それぞれ異なる名前のカウンターが必要です。ここでは、数える対象に合わせてcolumnとrowという名前が付けられており、iとjよりコードが読みやすくなっています。
チャレンジ
中級12枚のタイルで床を作ります。4列、3行です。
Start()内で、PlaceTile(0, 0);をfor (int column = 0; column < 4; column++)に置き換えます。- その中括弧の内側に
for (int row = 0; row < 3; row++)と書き、その内側のループ内でPlaceTile(column, row);を呼び出します。
「プレイ」を押すと、4列×3行のタイルの床が表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class TileFloor : MonoBehaviour
{
void Start()
{
// タイルを4列、3行に並べる。
PlaceTile(0, 0);
}
void PlaceTile(int column, int row)
{
GameObject tile = GameObject.CreatePrimitive(PrimitiveType.Cube);
tile.name = "Tile";
tile.transform.position = new Vector3(column * 1.1f - 1.65f, 0.1f, row * 1.1f);
tile.transform.localScale = new Vector3(1, 0.2f, 1);
tile.GetComponent<Renderer>().material.color = new Color(0.85f, 0.85f, 0.9f);
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド