今回はUnityで開発する上で、必須となる配列について見ていきましょう。
配列は基本どんな言語にも存在する仕組みなので、今回マスターしておけば他の言語を触った際にも、入っていきやすいでしょう。
ぜひ今回で学び切ってください。
では今回ほアジェンダです。
[基本]使ってみよう!
[基本]ループさせてみよう!
[基本]【実践編】GameObjectを保持してみよう!
[応用]要素数も取得できる!
[応用]動的な配列と連想配列!
基本的な部分から入り、初心者が最初によく使うGameObjectの管理を実例に見ていきましょう。
そこから先はより配列を深く学べる内容を応用項目として用意してあります。
それではよろしくお願いいたします。
配列とは?
まず配列とはなんなのか?
一言で言ってしまえば「データの塊を保持できるデータ型」のことです。
作品を作る上では変数が非常い多くなってしまうものです。
それらをまとめられるなら、非常に便利ですね!
早速使ってみましょう!
使ってみよう!
では実際に作成から使用するところまで、流れにそって見てみましょうか。
変数を宣言!
まずは変数を宣言する必要があります。
例えば、実際にint型(整数)を保持する配列を作る場合以下のように記載します。
int[] array; // 変数arrayを生成
非常に簡単ですね!
「arrayという名前の、int型配列だよ!」と宣言しています。
では早速使ってみましょう…と言いたいところですが、これだけでは使えません。
使おうとしてエラーとなってしまうでしょう。
なぜなら、変数を作っただけでは、まだ中身が空っぽだからです。
newを使って生成
先ほど作った変数を使うには、以下のようにnewして配列を生成し代入する必要があります。
array = new int[3]; // さっき作ったarrayへ、生成した配列を代入
この例では、3つまでint型を保持できる配列を作成しています。
[3]の部分ですね。
この部分が「3つの要素まで確保できる変数」と指定を行っています。
つまりここをもっと大きくすればもっと大きな配列も作成可能です。
宣言と生成は同時に行える!
また、お気付きの方も多いと思いますが、変数の宣言と生成は同時に行えます。
int[] array = new int[3]; // arrayの宣言と、生成した配列と代入を同時に!
こんな感じですね!
分ける必要がないときは一行で済ませてしまいましょう!
初期値を代入した初期化
先ほどはnewと使って生成しましたが、newを使わずとも生成する方法もあります。
以下のように、初期化時に要素を指定してしまう方法です。
int[] array={10,20,30};
この方法でもarray配列の中には、3つの要素を保持することができる配列が生成されます。
こちらを使うメリットは、生成と同時に配列の各要素の初期値を決めることができることです。
うまく使い分けましょう!
要素を代入しよう!
では先ほど作った、配列の各要素へ代入を行っていましょう。
int[] array = new int[3]; // arrayを生成 array[0] = 100; // 1つ目の要素へ、整数100を代入 array[1] = 101; // 2つ目の要素へ、整数101を代入 array[2] = 102; // 3つ目の要素へ、整数102を代入
ただ単に[]と、その中に要素の順番の番号を入れることによって、要素を指定できます。
あとはその指定した要素へ「=」で代入を行っているだけですね!
ここで少し注意が必要なのは、要素の番号は0から開始されるということです。
「new int[3]」と生成を行ったら、「array[0]」「array[1]」「array[2]」の3つの要素が存在することになるわけです。
「array[1]」「array[2]」「array[3]」ではないので注意しましょう!
要素を取得してみよう!
代入を行った時に、取得は予測できている人も多いでしょう。
非常に簡単で以下の方法となります。
int i_0 = array[0]; // 1つ目の要素を取得 int i_1 = array[1]; // 2つ目の要素を取得 int i_2 = array[2]; // 3つ目の要素を取得
先ほどの代入を行ったあとならば、それぞれ「100」「101」「102」といった整数が取れるでしょう。
ループさせてみよう!
配列を作った後にやりたくなることの一つが、その配列の要素をループして、すべてにアクセスすることですよね。
その主な方法も見てみましょう。
for文を使用したループ!
まずはfor文を使用したループです。
例えば全部の要素をログに表示したい場合は以下のプログラムを組みましょう。
for (int i = 0; i < array.Length; i++) { Debug.Log(i); }
for文がわかる人ならば簡単ですね。
array.Lengthで要素数を取得し、その数だけループを行っているだけです。
※array.Lengthについては後ほど説明しますね!今は要素数を取得できることだけ覚えておいてください。
またDebug.Logについて知りたい場合は、以下の記事をお読みください。
foreach文を使用したループ!
次にはforeach文を使用したループです。
foreach (int i in array) { Debug.Log(i); }
こちらも非常にシンプルですね!
みれば意味はなんとなくわかると思います。
配列であるarray変数から、一個ずつi変数へ取り出してログへ出力しているだけですね。
【実践編】GameObjectを保持してみよう!
初心者の方がよく最初にやりたくなることの一つが、GameObjectを配列で保持することでしょう。
ちょっと試しにやってみましょう。
以下のプログラムは「Cube1」「Cube2」「Cube3」オブジェクトを検索取得し、配列に代入しています。
そのあとその名前をログに吐き出しているだけのシンプルなサンプルです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyObject : MonoBehaviour { // 初期化 void Start () { // GameObjectを保持する配列の生成 GameObject[] array = new GameObject[3]; // 各要素へ検索し取得してきたGameObjectを代入 array[0] = GameObject.Find("Cube1"); array[1] = GameObject.Find("Cube2"); array[2] = GameObject.Find("Cube3"); // ループして、オブジェクト名をログに出力 foreach (GameObject i in array) { Debug.Log(i.name); } } }
結果は以下の通りです。
配列ないのオブジェクトの名前がちゃんと表示できていますね!
また今回使用した、Find関数について詳しく知りたい人は以下の記事をご覧ください。
要素数も取得できる!
配列変数名.Length
先ほどfor文の例の中で使用しましたね。
たったこれだけで、配列の要素数を取得できます!
int[] array = new int[3];
を「array.Length」した場合は、3が帰ってきて…
int[] array = new int[100];
を「array.Length」した場合は、100が帰ってきます。
うまく活用しましょう。
動的な配列と連想配列!
では最後に、動的な配列と連想配列について少しだけ見ていきたいと思います。
とても便利な機能なので、ぜひ貼っておいた各記事を読んでおくことをお勧めします。
Listで動的な配列!
Listは動的に要素を拡張できる配列です。
配列の場合、最初に配列の要素を決めておく必要がありました。
しかしListは必要ならば勝手に配列を延長してくれます。
例えば以下はList型の、item_list変数を準備し、アイテムを追加していく例です。
List<string> item_list = new List<string>(); item_list.Add("アイテム1"); item_list.Add("アイテム2"); item_list.Add("アイテム3");
事前に要素数を指定し生成しておく必要がありませんね。
Add関数で要素を追加していけば勝手に延長してくれるわけです。
とても便利な機能なので、ぜひ以下の記事から学んでおいてください。
Dictionaryで連想配列!
Dictionaryは連想配列を扱える仕組みです。
「key(検索キー)」と「value(値)」をセットで配列を保持することができます。
しかもキーは整数以外を指定することができるんです!
つまり例えば「アイテム名(文字列)をキー」として「アイテムID(整数)を要素」として、以下のように使うこともできるわけです。
int item_id_1 = item_id_array["yakusou"]; // キーが"yakusou"の要素を取り出す int item_id_2 = item_id_array["dokukesisou"]; // キーが"dokukesisou"の要素を取り出す
なかなか有用なのでこちらもぜひ覚えていってください!
以下のリンクから説明を行っています。
まとめ
いかがでしたでしょうか?
今回は配列について見てきました。
宣言・生成から始まり、ループ文の使い方…
そしてListやDictionaryといったより便利な道具まで、すべて作品を作る上では必須の機能です。
ぜひマスターし変数を上手に管理しましょう!