便利なLIST四天王の紹介です。Unity(というかC#)では、一言で配列といっても用途別に型が異なります。LIST型を覚えておくだけで何でもできるっちゃできるのですが、便利な型を知っておけばより効率的なコーディングができるのではないでしょうか。
基本の「配列」と呼ばれる型は、このような1つのインデックスに対して1つのデータを持っています。ぶっちゃけどの言語にもある「いつものやつ」です。存在しないインデックスにアクセスするとエラーになるので気をつけましょう。
GameObject[] PrefabArray = new GameObject[3];
では他にどんな型があるのか見ていきましょう。
using System.Collections.Generic;
まずこの名前空間を宣言する必要があります。
List
List<GameObject> list = new List<GameObject>();
list.Add(prefab1);
Debug.Log(list.count); // 1
配列に似ていますが、要素数に応じて変数を確保し直す必要がありません。Addで要素を追加できます。Countで要素数を取得できます。publicにするとInspectorで値を設定することができます。
Queue
Queue<GameObject> queue = new Queue<GameObject>();
queue.Enqueue(prefab1);
GameObject prefab = queue.Dequeue();
キューと読みます。先入れ先出し型のリストです。Enqueueで要素を追加できます。Dequeueで一番最初に追加した要素を返してキューから削除します。Peekで削除せずに取り出します。Clearで全削除します。Countで要素数を取得できます。Containsで指定した要素があるかチェックできます。
Stack
Stack<GameObject> stack = new Stack<GameObject>();
stack.Push(prefab1);
GameObject prefab = stack.Pop();
Queueとは逆に先入れ後出し型のリストです。Pushで要素を追加できます。Popで最後に追加した要素を返してスタックから削除します。Peek、Clear、Count、Containsが使えます。
Dictionary
Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>();
dictionary.Add("enemy", prefab1);
GameObject prefab = dictionary["enemy"];
Dictionary型は好きな方をインデックスとして扱うことができる特殊なLISTです。string型の他にTransform型などといったものもキーとして扱うことができます。値にList型を指定して入れ子にすることができます。全ての要素にアクセスするには、foreach文を使って .Key .Value というメンバーを参照することで取得できます。
foreach (Dictionary<string, GameObject> prefab in dictionary)
{
var key = prefab.Key; // string
var val = prefab.Value; // GameObject
}