配列
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 41/85。
配列は、同じ型の値を複数、順番に保持します。型名の後に角括弧を付け、値は波括弧の中に並べます。
int[] scores = { 10, 25, 7 };各値にはインデックスがあり、配列内の位置を示します。数え始めるのは0です。scores[0]は10、scores[1]は25、scores[2]は7です。scores.Lengthは値の個数で、ここでは3です。scores[3]を指定すると、4番目の値がないため、スクリプトはIndexOutOfRangeExceptionで停止します。
Lengthまで繰り返すforループを使うと、配列の要素数にかかわらず、すべての値を順に確認できます。
for (int i = 0; i < scores.Length; i++)
{
Debug.Log("Score " + i + ": " + scores[i]);
}インデックスが必要ない場合は、foreachのほうが簡潔です。foreach (int s in scores) { Debug.Log(s); }は、各値に対して順番に1回ずつ実行されます。
チャレンジ
中級配列とループを使って、7本の塔が並ぶスカイラインを作りましょう。
heightsの末尾に6fと2fを追加します:{ 2f, 5f, 3f, 1f, 4f, 6f, 2f }。PlaceTowerの行をfor (int i = 0; i < heights.Length; i++)に置き換えます。- その中で、
PlaceTower(i * 1.5f - 4.5f, heights[i]);を呼び出します。
「プレイ」を押すと、高さの異なる7本の塔が一列に並びます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Skyline : MonoBehaviour
{
void Start()
{
float[] heights = { 2f, 5f, 3f, 1f, 4f };
// 各高さに対してタワーを1つずつ配置する。
PlaceTower(-4.5f, heights[0]);
}
void PlaceTower(float x, float height)
{
GameObject tower = GameObject.CreatePrimitive(PrimitiveType.Cube);
tower.name = "Tower";
tower.transform.position = new Vector3(x, height / 2, 0);
tower.transform.localScale = new Vector3(1, height, 1);
tower.GetComponent<Renderer>().material.color = new Color(0.35f, 0.45f, 0.7f);
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド