Movatterモバイル変換


[0]ホーム

URL:


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

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


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

配列についての画像

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

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

前回の記事:

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

【Line登録者限定のプレゼントもあるよ!】

配列(Array)とは

配列の書き方の画像

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

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

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

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

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

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

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

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

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

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

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

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

  • Length:配列のサイズを表している。
配列の使い方
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int[]a=newint[3];
//添字は0から始まる
a[0]=0;
a[1]=a[0]+1;
a[2]=a[1]+a[0];//<- 添字2が配列aの末尾のデータ
 
varsize=a.Length;//Lengthで配列のサイズを取得できる。
 
//初期化の時は要素数を省略することができる。
string[]b=newstring[]{// <- 要素数3になる
  "abc",
  "def",
  "ghi",
};

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

要素範囲外の添字を使うと例外が発生する
C#
1
2
3
4
5
6
7
inta=newint[2];
try{
  a[3]=0;// <- 例外発生
  a[-1]=0;// <- 例外発生
}catch(System.OutOfRangeExceptione){
  //
}

多次元配列について

配列には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は既に説明していますが、ここで紹介しているメンバも普通の配列で使うことができます。)

多次元配列の使い方
C#
1
2
3
4
5
6
7
8
9
10
11
12
int[,]a=newint[2,4]{
  {0,1,2,3},// <- a[0, <添字>]の要素
  {4,5,6,7},// <- a[1, <添字>]の要素
};
 
varA=a[0,2];//<- A == 2
varB=a[1,0];//<- A == 4
varC=a[0,0];//<- A == 0
 
//各次元のサイズを所得する時はGetLength(int)メソッドを使用する
varsize1=a.GetLength(0);// <- size1 == 2
varsize2=a.GetLength(1);// <- size2 == 2

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

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

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

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

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

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

Jagged配列の使い方
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int[][]a=newint[2][];//初めの次元のサイズのみ指定する必要がある。
 
//使い方は配列と同じ
a[0]=newint[]{0,1,2};
a[1]=newint[]{3,4};
 
//bの各次元は次のようになる
// b[0] => b[0][0] => int[]{0, 1}
//      => b[0][1] => int[]{2}
// b[1] => b[1][0] => int[]{3, 4, 5}
int[][][]b=newint[][][]{
  newint[][]{
    newint[]{0,1},
    newint[]{2},
  },
  newint[][]{
    newint[]{3,4,5},
  },
};

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

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

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

for文の場合

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

配列をfor文で使ってみよう!
C#
1
2
3
4
5
6
7
int[]a=newint[]{0,1,2,3,4,5};
 
//配列aの全ての要素を*2する繰り返し処理
//a.Lengthはaの要素数を表しているプロパティになる
for(inti=0;i<a.Length;++i){
  a[i]=a[i]*2;
}

while文の場合

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

while文の場合
C#
1
2
3
4
5
6
7
int[]a=newint[]{0,1,2,3,4,5};
 
inti=0;//ループカウンターはwhile文の外に書く
while(i<a.Length){
  a[i]=a[i]*2;
  ++i;
}

foreach文の場合

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

foreach文の場合
C#
1
2
3
4
5
6
7
int[]a=newint[]{0,1,2,3,4,5};
 
//繰り返し処理自体は上のサンプルコードと同じ
// refをつけると要素の値を変更することができる。
foreach(refinteina){
e*=2;
}

Unityで使ってみよう!

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

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

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

Unityで繰り返し処理を使ってみよう
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
usingUnityEngine;
 
publicclassUseArray:MonoBehaviour
{
  publicTransform[]Objects;
  publicfloatRange=1f;
 
  voidStart(){
    //Range分の距離をとるように整列させる繰り返し処理
    for(inti=0;i<Objects.Length;++i){
      varpos=Vector3.zero;
      pos.x=i*Range;
      Objects[i].position=pos;
    }
  }
}

コンパイルが成功しますと、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#のメソッド(関数)の使い方
今回の記事ではメソッド(関数)についてみていきます。以前の記事でもメソッド自体を既に使っています。今回の記事を読むことで色々な種類のメソッドを作ることができますので、是非呼んでみてください。前回の記事:メソッド(関数)とはメソッドとはスクリ...
feynman.co.jp
2025.06.13

 

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



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

関連記事

Unity C#入門講座

UnityC# デリゲートとイベントとUnityActionの使い方

今回の記事ではデリゲートとイベントについて解説していきます。前回は辞書の使い方について解説しましたね。デリゲートとイベントを使うことでメソッドを値として使用することができます。メソッドを値にして利点があるのかと思われますが、アプリでできるこ...
2023.04.22
Unity C#入門講座
Unity C#入門講座

Unity C#の条件分岐の使い方 if文・switch文

今回の記事では制御文について解説していきます。制御文にはいくつか分類があるのですが、ここでは条件分岐と呼ばれるif文とswitch文について見ていきます。前回の記事:制御文と条件分岐について制御文とはプログラムの処理を実行するかしないかを制...
2021.09.11
Unity C#入門講座
Unity C#入門講座

UnityC#のインターフェースの使い方・ポリモーフィズムの考え方

今回の記事ではオブジェクト指向の重要な機能であるインターフェースとポリモーフィズムについて解説していきます。インターフェイスを使いこなせるようになるとプログラム全体の管理がしやすくなります。また、Unityなどフレームワークやライブラリはイ...
2021.09.11
Unity C#入門講座
Unity C#入門講座

UnityC# Listの使い方

前回はインターフェースとポリモーフィズムについて学びましたが、今回の記事ではListについて解説していきます。前回の記事:Listは配列をより使いやすくしたコレクションの一つになります。配列より便利なListクラスとはListクラスは配列と...
2021.09.11
Unity C#入門講座
Unity C#入門講座

Unity C#言語とは

本連載では、Unity上においてのC#について解説していきます。初めての方でもわかりやすく解説していきますので、お気軽に読んだり、実際にUnity上で動かしてみてください。Unityにおけるプログラミング言語の役割プログラミング言語を使用す...
2023.02.02
Unity C#入門講座
Unity C#入門講座

Unity C#のIEnumerable・IEnumeratorとコルーチンの使い方・作り方

今回の記事ではコレクションに関係するIEnumearbleとIEnumeratorについて解説していきます。IEnumerableおよびIEnumeratorはコレクションの要素を取り出す操作を一般化したものになります。少し理解しづらいかも...
2023.04.22
Unity C#入門講座

コメント

コメントをどうぞコメントをキャンセル

メールアドレスが公開されることはありません。

CAPTCHA


↓知りたいことを検索してね

Unity入門の森 インディーゲームリリース!

魔女と召喚獣

 

Seeker of Darkness

 

呪術迷宮をリリース

unity入門の森 ゲームの作り方のyoutubeチャンネル

unity入門の森 ゲームの作り方
「unity入門の森 ゲームの作り方」のyoutubeチャンネル。unityを用いたゲームプログラミング、unityスクール、ゲームクリエイターになりたい方向けの情報を中心に発信。インディーゲームクリエイター・プロゲーマー・ゲーム実況者を目...
www.youtube.com

ブログランキング参加中(クリックして応援してくれると嬉しいな)

にほんブログ村 教育ブログ プログラミング教育へ
にほんブログ村

カテゴリー

最近の投稿

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

[8]ページ先頭

©2009-2025 Movatter.jp