各種データをまとまりで保存しておく場合、まっさきに思いつくのが配列ですが、Unityでは(というか.NETでは)用途別に便利な型を使うことができます。
配列
整数のインデックスに対し一つデータを持っておく、オーソドックスなデータ形式。多くのプログラミング言語にある機能です。
変数を確保するときに要素数を決めておく必要があり、存在しないインデックスにアクセスすると実行時エラーが出ます。
Transform[] simpleArray = new Transform[3]; Transform[] array = new Transform[] { transform1, transform2, transform3 };
List
配列と同じような感覚で使えるオブジェクト型です。
何より、要素数に応じて変数を確保しなおす必要がありません!
List<Transform> list = new List<Transform>(); list.Add(transform1); list.Add(transform2); list.Add(transform3); Transform target = list[1]; // = transform2 list.Count; // = 3
Addメソッドで要素を追加し、配列と同様 [ ] で要素にアクセスします。
要素数はCountプロパティで取得可能。
配列とList型は、publicにするか[SerializeField]属性をつけることで、インスペクタで値を設定することができます。
public class ListTest : MonoBehaviour { public int[] testArray; [SerializeField] List<Transform> testList; …
インスペクタで値を設定することができます。
Dictionary
配列やListはインデックスが整数値のみですが、Dictionary型は好きな型をインデックスとして使うことができます。
Dictionary<string, Transform> dictionary = new Dictionary<string, Transform>(); dictionary.Add("item1", transform1); dictionary.Add("target2", transform2); dictionary.Add("enemy3", transform3); Transform target = dictionary["item1"]; // = transform1
例ではstringですが、floatやenumやTransform型さえもKeyとして指定可能。
ValueにもList型などを指定できるので、
Dictionary<int, List<Transform>> dic = new Dictionary<int, List<Transform>>();
のように変則的なリストを作れます。
また、以下のような foreach文 ですべての要素のKey, Valueを列挙することができます。
foreach (KeyValuePair<string, Transform> pair in dictionary) { var key = pair.Key; // string var val = pair.Value; // Transform }
Queue
キューという単語はよく聞くと思います。いわゆる先入れ先出し型のリストです。
Queue<Transform> queue = new Queue<Transform>(); queue.Enqueue(transform1); queue.Enqueue(transform2); queue.Enqueue(transform3); Transform target = queue.Dequeue(); // = transform1
Enqueueで要素を追加し、Dequeueすると一番最初に追加した要素から取得します。
Dequeueすると取得した要素はリストから取り除かれるので注意。
Stack
Queueとは逆の先入れ後出しリストです。後に入れた要素から取得します。
Stack<Transform> stack = new Stack<Transform>(); stack.Push(transform1); stack.Push(transform2); stack.Push(transform3); Transform target = stack.Pop(); // = transform3
Pushで追加し、Popで取得。
Queueと同様に、取得した要素はリストから取り除かれます。
今回紹介した型はジェネリック型と呼ばれ、使用する場合はソースの先頭に一行追加しておく必要があります。
using System.Collections.Generic;
※参考 https://msdn.microsoft.com/ja-jp/library/system.collections.generic.aspx