Unityでのゲーム開発において、複数のデータをまとめて扱うことは日常茶飯事です。例えば、ステージ上の敵キャラクター全員、インベントリ内のアイテムリスト、あるいはプレイヤーのスコア履歴など、同じ種類のデータを大量に扱う必要があります。
この記事では、C#の「配列(Array)」という、そのデータ管理の基本中の基本となる機能について、Unity開発者が知っておくべき使い方と、ゲーム開発での具体的な活用法を、わかりやすいコード例とともに徹底解説します。
この記事を読めば、あなたのゲームオブジェクト管理が劇的に効率化します!
C#の配列とは?
配列の基本:同じ種類のデータを一列に並べる「箱」
C#における配列とは、「同じデータ型」の変数を、決まった個数だけ連続して格納できるデータ構造です。想像してみてください。同じサイズの箱を横一列に並べ、それぞれの箱に番号(インデックス)を振って、まとめて管理しているようなものです。
配列を使う最大のメリットは、大量のデータを一つの名前で扱えるようになることです。
配列の宣言と初期化の方法
配列を使うには、まず「どの型のデータを」「いくつ」格納するのかを決めて宣言する必要があります。
型を決めるのは変数と同じです。
配列の宣言(型と個数を指定)
配列は、型の後ろに角括弧 [] をつけることで表現します。
// int型のデータを5個格納できる配列を宣言 int[] enemyScores = new int[5]; // GameObject型のデータを3個格納できる配列を宣言 // Unityでゲームオブジェクトを管理する際によく使います GameObject[] playerWeapons = new GameObject[3];
配列の初期化(宣言と同時に値を設定)
宣言と同時に、格納する初期値を設定することもできます。この場合、new 型[個数] の部分は省略可能です。
// string型の配列を宣言し、同時に初期値を設定
string[] itemNames = { "Sword", "Shield", "Potion" };
// itemNamesの個数は自動的に3になります。
Unityで役立つ配列の使い方
配列の要素へのアクセス方法(インデックスの重要性)
配列の各要素にアクセスしたり、値を設定したりするには、インデックス(添字)を使います。
インデックスは、0から始まる整数です。
例えば、5個の要素を持つ配列の場合、インデックスは0、1、2、3、4となります。
using UnityEngine;
public class ArrayExample : MonoBehaviour
{
// 公開変数として配列を宣言すると、UnityエディタのInspectorから値を設定できます
public GameObject[] spawnPoints = new GameObject[4];
void Start()
{
// 1. 要素への値の設定
// 最初の要素(インデックス0)にアクセス
spawnPoints[0].SetActive(true);
// 3番目の要素(インデックス2)にアクセス
Debug.Log("3番目のスポーンポイントの名前: " + spawnPoints[2].name);
// 配列の個数(要素数)を取得する
int numberOfPoints = spawnPoints.Length;
Debug.Log("スポーンポイントの総数: " + numberOfPoints);
// 最後の要素(インデックス:個数-1)にアクセス
spawnPoints[numberOfPoints - 1].transform.position = Vector3.zero;
// 【⚠️注意!】存在しないインデックスにアクセスするとエラーになります!
// spawnPoints[4] にアクセスしようとすると、IndexOutOfRangeExceptionが発生します
//(4は存在しないため)
}
}
繰り返し処理(for/foreach)と配列
配列の全要素に対して、同じ処理を行いたい場合がほとんどです。
そのためにfor文やforeach文を使います。
1. for文を使ったアクセス(インデックスが必要な時)
インデックスを使ってアクセスするため、「何番目の要素か」を知りたい場合や、配列の途中で処理を止めたい場合などに便利です。
// spawnPoints配列の全ての要素を順番に処理する
for (int i = 0; i < spawnPoints.Length; i++)
{
// i は 0, 1, 2, ... と変化します
// iを使って、全てのスポーンポイントを1つずつ有効化
spawnPoints[i].SetActive(true);
Debug.Log((i + 1) + "番目のスポーンポイントが有効化されました。");
}
2. foreach文を使ったアクセス(要素そのものが必要な時)
インデックスを使わず、配列の中の「要素そのもの」を順番に取り出したい場合に非常に便利で、コードがシンプルになります。
// itemNames配列の全ての要素(文字列)を順番に処理する
string[] itemNames = { "Sword", "Shield", "Potion" };
foreach (string itemName in itemNames)
{
// itemName には "Sword"、次に "Shield"、次に "Potion" が入ります
Debug.Log("アイテム名: " + itemName);
}
C#配列でUnity開発を加速!
C#の配列(Array)は、int[] や GameObject[] のように、同じ型のデータを一括で管理するための基本的なデータ構造です。
ゲーム開発において、複数の敵やアイテム、UI要素などを効率的に扱うためには、配列の宣言、インデックスを使ったアクセス、そしてfor文やforeach文による繰り返し処理は欠かせません。
Unity開発では、配列の他に「リスト(List)」という便利な機能もありますが、まずはこの配列の仕組みをしっかり理解することが、より複雑なデータ構造を学ぶための強固な土台となります。

