🐥

【初心者も安心】Unity×C# 配列&リスト完全攻略:ゲーム進行をスムーズにするTips

2024/12/30に公開

Unity×C#でわかる!配列・リストの基礎講座:柔軟な“箱”を使いこなそう

Unityでゲームを作るなら、C#の「配列」や「リスト」には必ず触れることになります。敵を大量に出現させたり、ステージごとのスコアをまとめて管理したり――こうした場面でどうやってデータを持つかが鍵。配列・リストを上手に使えば、より楽にデータ整理ができ、コードがシンプルにまとまります。

1. まずは“箱”を並べるイメージ:配列

1-1. 配列って何?

配列は、同じ型の変数を連続で持つ仕組み。複数の同種類データを一気に扱うときに便利です。

int[] scores = new int[5];
scores[0] = 80;
scores[1] = 75;
scores[2] = 90;
  • int[] scores : 整数データを要素数ぶんまとめた“箱”
  • [5] : 要素数を5個に固定する
  • scores[0] = 80; : 0番目の要素に80を代入

日常の例え:ロッカーの連番

高校のロッカーには1〜30番などと番号が振られてますよね。これが配列のインデックスと同じ考え方。
「配列は、同じものを一定数しまうための“ロッカー”」みたいなイメージです。

1-2. 要素数は変えられない

配列は一度作ると要素数を後から増やしたり減らしたりできません。

  • 5個で作ったら要素が6個にはならない
  • もし増やしたいなら、新しい配列を作り直すか、リストを使うのがおすすめ

1-3. foreach文で一気に処理

foreach (int score in scores)
{
    Debug.Log(score);
}
  • scores配列の全要素を順に取り出す
  • スコアがたくさんあっても、一括で同じ処理をさせられて便利

2. 配列より柔軟!リストを使うと快適

2-1. リストの基本

リストは、動的に要素数を増減できるのが特長。

List<string> names = new List<string>();
names.Add("勇者");
names.Add("戦士");
Debug.Log(names[1]); // "戦士"
  • List<string>: 文字列のリスト
  • Add()で自由に要素追加
  • [1]で2番目の要素にアクセス

学校の部員名簿をイメージ

配列だと「部員は5人限定」のように固定。しかし実際の部活では「突然の新入部員」もあり得る。リストなら、Addで新メンバーをどんどん追加OK。
使ってみると、拡張性が高くて大変重宝します。

2-2. 削除や並び替えもラクラク

names.Remove("戦士"); // 特定要素を削除
names.Insert(0, "僧侶"); // 先頭に挿入

リストなら、不要な要素をRemove()ですぐ消せるし、Insert()を使えば任意の位置に要素を挟めます。データの管理が柔軟で、後々手間が減ります。

2-3. sortや検索も簡単

List<int> scores = new List<int>(){80, 50, 90};
scores.Sort(); 
// [50, 80, 90] に並び替え

int idx = scores.IndexOf(80); 
// 要素80が何番目にあるかを返す
  • **Sort()**で昇順ソート
  • **IndexOf()**で要素の位置を検索
  • 他にも**RemoveAt(), Contains()**など、リストならではの便利メソッドが豊富

3. Unityで配列・リストを使いこなすコツ

3-1. Inspectorで要素数を編集

C#の変数をpublicにすると、UnityエディタのInspector上から配列やリストの中身を編集できます。

public class StageScores : MonoBehaviour
{
    public int[] stageScores;      // 配列
    public List<GameObject> items; // リスト
}
  • HierarchyでStageScoresを持つオブジェクトを選び、Inspector上から要素を追加・削除しながら確認
  • リストの場合、要素数を自由に増減可能

注意:リストはエディタ上での並び替えがやや面倒

配列ならドラッグ&ドロップで並び替えやすいですが、リストでは要素の順序変更が若干煩雑なことも。大量の要素を扱うならScriptableObjectなど別の方法で管理するのも視野に入れましょう。

3-2. 敵やアイテムを一括管理してスポーン

public List<GameObject> enemies;

void Start()
{
    foreach (var enemyPrefab in enemies)
    {
        Instantiate(enemyPrefab, transform.position, Quaternion.identity);
    }
}
  • 複数の敵プレハブをenemiesリストに登録し、一気にInstantiate
  • ステージクリア時にリストの要素を減らして再スポーン数を制御、などの使い方もできる

3-3. スコアやログを時系列で蓄積

  • ユーザーが獲得したスコアをリストに追加していき、リプレイで一括表示
  • コンソール出力を自作のリストに溜め、後からまとめてUIに反映する
    配列で要素を作り直すより、リストにAppendしていく形がずっと簡単です。

4. 配列とリスト、どちらを使うべき?

  • 要素数が固定で変わらない
    → 配列がシンプルで高速
  • 要素の増減が頻繁に起こる
    → リストが向いている
  • ソートや検索
    → リストのメソッド群で楽々処理
  • Inspectorで順番を固定したい
    → 配列のほうが使いやすい場面が多い

コーディング時に意識すること

  • 将来の変更や拡張が予想されるならリスト
  • パフォーマンスやメモリを厳密にコントロールしたいなら配列
    こうした基準で選ぶと、大規模プロジェクトでも混乱が少なくなります。

まとめ:柔軟な“箱”を使いこなそう

  • 配列 : 要素数が決まっている“箱の束”
  • リスト : 要素数が自在に増減できる“箱の束”
  • Unityでのデータ管理やオブジェクト管理に欠かせない
  • Inspectorとの連携でエディタ上から要素操作が可能

ゲーム内で扱うデータ(スコア、アイテム、プレイヤー情報、敵リストなど)は多種多様ですが、**“同じ型のデータを集める”**なら配列かリストを使うのが基本。高校の名簿感覚で考えるとイメージしやすく、コードも整理しやすくなるはずです。あなたのゲームアイデアを実現するために、ぜひ配列とリストを活用してみてください!

この記事を読んでもっと実践したいと感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

たった5日でFPSゲームが作れる自分に変わる教材はこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

柔軟な“箱”である配列とリストを味方につければ、Unity開発もぐっと快適に。思いついたアイデアを素早く形にして、ゲーム制作をもっと楽しみましょう。

Discussion