Unity C#入門:Listクラスの基本と実践的な使い方

1. はじめに

Listクラスは、C#で最もよく使用されるコレクション型の1つです。配列と異なり、要素数を動的に変更できる特徴があります。この記事では、Unity開発でのListクラスの基本的な使い方から、実践的な操作方法までを解説します。

2. Listの基本構造

2.1. Listの宣言と初期化

[code language="csharp"]
// 宣言
List<int> scoreList;

// 初期化
scoreList = new List<int>() { 10, 20, 30, 40, 50 };

// 宣言と初期化を1行で
List<int> scores = new List<int>() { 10, 20, 30, 40, 50 };
[/code]

2.2. インデックスによる要素アクセス

[code language=”csharp”]
// インデックスを使用した要素へのアクセス
int firstScore = scoreList[0]; // 10を取得
int lastScore = scoreList[4]; // 50を取得

3. 基本的な操作方法

3.1. 要素の挿入(Insert)

[code language="csharp"]
// 指定位置に要素を挿入
scoreList.Insert(1, 100);  // インデックス1の位置に100を挿入
// 結果:[10, 100, 20, 30, 40, 50]
[/code]

3.2. 要素の削除

[code language="csharp"]
// インデックスを指定して削除
scoreList.RemoveAt(2);  // インデックス2の要素を削除

// 特定の値を削除(最初に見つかった要素)
scoreList.Remove(30);   // 値が30の要素を削除

// すべての要素を削除
scoreList.Clear();      // リストを空にする
[/code]

3.3. 要素の追加(Add)

[code language="csharp"]
// リストの末尾に要素を追加
scoreList.Add(60);      // 末尾に60を追加
[/code]

4. よく使用される操作

4.1. 要素の検索

[code language="csharp"]
// 値の存在確認
bool exists = scoreList.Contains(30);  // 30が含まれているか確認

// インデックスの取得
int index = scoreList.IndexOf(30);     // 30が格納されているインデックスを取得
[/code]

4.2. リストの情報取得

[code language="csharp"]
// 要素数の取得
int count = scoreList.Count;

// リストが空かどうかの確認
bool isEmpty = scoreList.Count == 0;
[/code]

5. 実践的な使用例

5.1. ゲームスコアの管理

[code language="csharp"]
public class ScoreManager : MonoBehaviour
{
    private List<int> highScores = new List<int>();
    
    public void AddScore(int score)
    {
        highScores.Add(score);
        highScores.Sort();  // スコアを昇順に並び替え
        highScores.Reverse();  // 降順に変更
        
        // 上位10件のみ保持
        while (highScores.Count > 10)
        {
            highScores.RemoveAt(highScores.Count - 1);
        }
    }
}
[/code]

5.2. 敵キャラクターの管理

[code language="csharp"]
public class EnemyManager : MonoBehaviour
{
    private List<GameObject> enemies = new List<GameObject>();
    
    public void SpawnEnemy(GameObject enemyPrefab)
    {
        GameObject enemy = Instantiate(enemyPrefab);
        enemies.Add(enemy);
    }
    
    public void RemoveDefeatedEnemy(GameObject enemy)
    {
        if (enemies.Contains(enemy))
        {
            enemies.Remove(enemy);
            Destroy(enemy);
        }
    }
}
[/code]

6. List使用時の注意点

6.1. パフォーマンスに関する考慮事項

  • 配列と比べて処理負荷が高い
  • 要素数が固定の場合は配列を使用することを推奨
  • 大量の要素の追加/削除が頻繁な場合は、他のデータ構造を検討

6.2. 推奨される使用シーン

  1. 動的なデータ管理
  • レベル中の敵キャラクター
  • プレイヤーのインベントリ
  • スコアランキング
  1. 要素数が変動するデータ
  • ゲームの進行状況によって増減する項目
  • ユーザー入力に応じて変化するリスト

7. まとめ

Listクラスの主な特徴:

  • 動的な要素数の変更が可能
  • 豊富な操作メソッドを提供
  • 型安全性を確保
  • Unityでの一般的なデータ構造

使い分けのポイント:

  1. 要素数が固定 → 配列を使用
  2. 要素数が可変 → Listを使用

コメント

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