こちらのページでは、Unityでスクリプトを書いていく際、非常に便利な動的配列(List)の使い方と作成ゲーム集での活用例をご紹介していきたいと思います。
動的配列とは?
通常の配列(静的配列と言います)は、以下のように定義します。その際、要素数をいくつにするかを最初に決めます。この要素数(箱の数)は途中で変更することは出来ず、最後までそのままですよね。イメージとしては下図左のように、最初に空き箱を設定しておき、そこに変数を入れていく感じです。
int[] testarray = new int[4];
それに対し、動的配列では、最初に定義した後でも要素を除外したり、新たな要素を追加したりすることが出来ます。イメージとしては上図右のように、箱ごと配列グループに参加したり脱退していく感じです。結果、配列の要素数(箱の数)が常に変動していく配列となっており、そのような様子を指して「動的」配列と名付けられています。
動的配列の使い方
次に、動的配列の定義の仕方や、要素の追加・除外方法等についてご紹介していきます。主に利用頻度の高い、代表的なスクリプトの書き方をご紹介していきますね!
動的配列の定義
まず、重要な点として、スクリプト文の最初に以下の一文を追加する必要があります。これが無いと動的配列を使えない(エラーが出る)ので注意して下さい!
using System.Collections.Generic;
そして、動的配列の定義は以下のようになります。下ではint変数の動的配列を定義しましたが、ここは勿論string でも、GameObject でも定義できます。
List<int> testlist = new List<int>();
List<int> testlist = new List<int> {1, 2, 3, 4, 5};
前者は中身が空っぽのまま定義した場合、後者は中に値を入れた状態で定義した場合になります。どちらの場合でも、後述のような要素の追加・除外は可能で、後で要素数を自由に変更することが出来ます!
なお、要素の参照は、通常の配列と同様、testlist[2]という具合に表現します。一番最初の要素は0番目なので、ご注意くださいね。よって、後者の定義の場合、testlist[2] = 3、となります。
要素の追加
次に、要素の追加方法をご紹介します!幾つかの追加方法がありますので状況に応じて使い分けましょう!
(現状、testlist = {1, 2}; と仮定します)
testlist.Add(1); //「1」という要素を末尾に追加→{1, 2, 1}になる
testlist.Insert(0, 3); //0番目に「3」という要素を追加→{3, 1, 2, 1}になる
要素の削除
次に、逆処理となる要素の削除方法をご紹介します!こちらも便利な方法ですので、しっかり使い分けて下さい!
(現状、testlist = {3, 1, 2, 1}; と仮定します)
testlist.Remove(1); //最初に登場する「1」という要素を除外→{3, 2, 1}になる
testlist.RemoveAt(1); //1番目の要素を除外→{3, 1}になる
testlist.Clear(); //要素を全て削除→{}になる
特に、最後のClear() ←このカッコを忘れないようにしましょう!(自戒)
要素の検索
要素の検索も以下のようなスクリプトで可能です。
(現状、testlist = {3, 1, 2, 1}; と仮定します)
testlist.Contains(4); //「4」という要素が含まれているか?→falseを返す
動的配列の活用例
最後に、動的配列がワガハイ式ゲームの作成において、どのように活用されているかの一例をご紹介していきます!動的配列は非常に利用頻度が高く、大半のゲーム作成で使用しています!特に、幾つかの数字から成るグループ内から、ある条件に該当する番号のみを抽出する、という作業にこの動的配列を使用していることが多く、本当に便利です。
是非皆様もどんどん動的配列を活用して頂き、もっと便利な使い方がありましたら私ワガハイにも教えて頂けると幸いです!m(_ _)m
例1:ワガハイ式7ならべ
7ならべ制作手順2-2で紹介していますが、各プレーヤー(自分とCPU×3)の手札を表す配列を動的配列にしました。ゲーム開始前に山札から各プレーヤーに手札を配布する際は、1枚カードが配布されると各プレーヤーの手札配列に1要素ずつ追加(Add で表現)され、手札から場にi番目のカードを出す際は手札配列のi番目が除外(RemoveAt で表現)されます。更に、手札枚数をCountで算出して画面中に表示する、という具合に活用しました。
例2:ワガハイ式ビリヤード
ビリヤード制作手順2-5で紹介していますが、台上に残っている数球の番号リストを動的配列で定義しました。ナインボールのゲーム開始時は、1~9の数球が台上にありますので、番号リスト remaininglist ={1,2,3,4,5,6,7,8,9} となり、ポケットに入った数球の番号はその都度、本番号リストから除外(Remove で表現)されます。また、次ターンで狙うべき数球の番号=台上の最小番号は、本リスト中0番目の要素、つまり remaininglist[0] と簡単に表現出来て、非常に便利でした!
例3:ワガハイ式ぷよぷよ
ぷよぷよ制作手順5-3において紹介していますが、隣接同色ぷよの個数を数えて、消えるか否かを判定する際に、この動的配列を使用しています。例えばフィールド中の0番ぷよと2番ぷよが同色で隣り合っている場合、動的配列samecolorset = {0,2}というグループを抽出出来れば(抽出方法が少し複雑なので、詳しい説明についてはリンク先のページを参照下さいm(_ _)m)、0番ぷよ関連の隣接同色ぷよ数 = samecolorset.Count=2 と算出出来ます。もしこの数字が4以上ならぷよは削除されますが、今回の場合は4以上ではありませんので、そのぷよは消滅しない、という判断が下せますね。