UnityC#の配列の使い方 一次元配列・多次元配列・ジャグ配列

配列についての画像 Unity C#入門講座


Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

配列についての画像

今回の記事では配列について解説していきます。

配列を使用することでたくさんのデータを一つの変数にまとめられます。

前回の記事:

Unity C#の繰り返し処理の使い方 for文・while文・foreach文
今回の記事では繰り返し処理についてみていきます。 アプリ開発ではたくさんのデータに対して同じ処理を行いたい時があるのですが、その時に繰り返し処理を利用することになります。 前回の条件分岐の制御文と併せてプログラミングの超重要ポイントの一...

【Unity入門の森の最新ゲーム開発講座もお届け】

配列(Array)とは

配列の書き方の画像

配列には色々なバリエーションがあるが、基本はどれも同じ。

配列とは同じ型を持つ値を一つの変数にまとめた参照型の値になります。

C#では配列のようにたくさんのデータを表すものをコレクションと読んでいます。

配列型の変数の宣言、初期化の仕方は次のものになります。要素数は配列のサイズになります。

  • 宣言:<型名> [] <変数名> = new <型名>[<要素数>];
  • 初期化:<型名> [] <変数名> = new <型名>[<要素数>] { <要素>, ... };

初期化の際は後に書く値の数から判断できるため要素数を省略することができます。

また、一度作成した配列のサイズは変更できないので注意してください。

配列の要素にアクセスする時は次のように書きます。

  • 要素からデータを取り出す時:var a = <配列名>[<添字>];
  • 要素にデータを設定する時:<配列名>[<添字>] = <値>;

添字(Index)とは配列の中のデータに割り振られた番号になり、プログラミング言語では広く使われている用語になります。。

添字は「0から配列のサイズ-1」の範囲をとる番号になります。

また、次のメンバを使用することで配列のサイズを取得することができます。

  • Length:配列のサイズを表している。

なお、配列の要素外の添字を指定するとSystem.OutOfRangeExceptionという例外が発生します。

多次元配列について

配列には2つ以上の添字を指定できる多次元配列というものも存在しています。

基本的な使い方は配列と同じですが、多次元配列を使用する時は角括弧([])の中を使用したい次元の数だけカンマ(,)で区切ってください。

  • 2次元配列:<型名>[ , ] <変数名> = new <型名>[<1次元目のサイズ>,<2次元目のサイズ>];
  • 3次元配列:<型名>[ , , ] <変数名> = new <型名>[<1次元目のサイズ>,<2次元目のサイズ>,<3次元目のサイズ>];
  • などなど

多次元配列のサイズは宣言時に指定した各次元のサイズを全て掛けた数になります。

例えば次の多次元配列のサイズはこうなります。

  • int[,] a = new int[2, 4] なら 総サイズは2 * 4 = 8になる。
  • int[,,] a = new int[3, 2, 5] なら 総サイズは3 * 2 * 5 = 30になる。

多次元配列の情報は次のメンバを利用すると取得することができます。

  • Length総サイズ数
  • Rank持っている次元数
  • GetLength(int <次元番号>)指定した次元のサイズ。番号は0から始まります。

(Lengthは既に説明していますが、ここで紹介しているメンバも普通の配列で使うことができます。)

ジャグ(Jagged)配列について

多次元配列に似たものとしてジャグ(Jagged)配列というものもあります。ジャグ配列は配列の配列になります。

多次元配列との違いは各次元に異なるサイズの配列を設定することができる点になります。

書き方としては次のようになります。角括弧([])を次元の数だけ書く以外は配列と同じになります。

宣言:<型名>[][]... <変数名> = new int[<要素数>][<要素数>]...;

ジャグ配列も配列や多次元配列と同じメンバを持っていますので、情報を取得したい時はそれらを使ってください。

繰り返し処理と一緒に配列を使ってみよう

配列は一般的に繰り返し処理と一緒に使われることが多いです。特にfor文は配列を扱うのに便利な繰り返し処理になります。

ここであげるサンプルコードは全て同じ意味のコードになりますので、書き方の違いに注目してください。

for文の場合

for文の場合はループカウンター関係の処理をfor文の中に書くことができます。

while文の場合

while文の場合はループカウンターをwhile文の外に書く必要があり、必ず繰り返し処理の末尾でカウンター変数を+1してください。

foreach文の場合

配列はforeach文でも使うことができます。その際は値をそのまま使用することになるため、現在どの添字のデータなのか判断できませんこれはforeach文自体がそのような性質の繰り返し処理なため、添字も一緒に使いたい時はfor文を使うといいでしょう。

Unityで使ってみよう!

それでは実際にUnity上で配列を使用してみましょう!

今回のサンプルコードではObjectsというUnityEngine.Transform型の配列を用意し、その中に設定したGameObjectを横一列に整列させるものになります。

まず、以下の内容のコンポーネントを作成していください。

コンパイルが成功しますと、UseArrayコンポーネントが使用することができますので、適当なGameObjectにアタッチしてください。

Unityで試してみようその1 作ったコンポーネントをアタッチしよう!の画像

適当なGameObjectに作成したコンポーネントをアタッチする。

その後、Objectsにシーン中に存在するGameObejctを好きな個数分設定してください。(設定方法はInspectorからでも、ドラッグ&ドロップでも好きな方で大丈夫です。)

Unityで試してみようその2 UseArrayにアタッチの画像

Objectsに好きなGameObjectを設定する。(画面に映るものがいいです。)

設定し終えましたら再生ボタンを押し実際にアプリを実行してみましょう!問題がなければ、画像のように横一列にGameObjectが整列されるはずです。

Unityで試してみようその3 実行してみようの画像

実行するとObjectsに設定したGameObjectが横に整列する。

もし、隣とめり込んでいた場合はRangeの値を大きくして調節してください。

Unityで試してみようその4 間隔の調節の画像

もし、隣のGameObjectとめり込んでいたら、Rangeの値を調節してください。

 

まとめ

今回の記事では配列についてみてきました。今回の記事をまとめると次のようになります。

  • 配列は指定した数の同じ型の変数を集めたもの
  • C#では配列のようにたくさんのデータを表すものをコレクションと呼んでおり、配列は全てのコレクション型の基礎になっている。
  • 配列の中のデータにアクセスする時は添字という番号で指定する。
  • 添字の範囲は0から要素数-1になり、その範囲外の番号を使うと例外が発生する。
  • 一度、作成した配列のサイズは変更できない。
  • 添字を複数持つ多次元配列というものがある。
  • Jagged配列は各次元に異なる要素数を持つことができる多次元配列。

今回は以上になります。それでは次の記事に進みましょう!

次回の記事:

Unity C#のメソッドの使い方
今回の記事ではメソッド(Method)についてみていきます。 以前の記事でもメソッド自体を既に使っています。今回の記事を読むことで色々な種類のメソッドを作ることができますので、是非呼んでみてください。 前回の記事: メソッドとは ...

 

初心者向けUnityC#入門講座に戻る>>


【Unity入門の森の最新ゲーム開発講座もお届け】

コメント

タイトルとURLをコピーしました