Unityに関連する記事です


 C#プログラミングにおいて、データの管理は非常に重要です。
配列は基本的なデータ構造ですが、要素の追加や削除が難しいことがあります。
そこで、動的配列である「List」を活用することで、柔軟で便利なデータ管理が可能となります。

 本記事では、Listの使い方から配列との違いについて比較して解説します。



配列と List の主な違い


 配列とListの主な違いは、サイズの可変性です。それは要素の追加と削除の違いにもつながります。

 配列は一度サイズを決めると変更が難しく、新しい要素を追加する際には新たな配列を作成して要素をコピーする必要があります。

 一方でListは、要素の追加や削除が容易で、自動的にサイズを調整します。

 配列とListは一般的に使用されるデータ構造ですが、要素の削除において大きな違いがあります。
本記事では、配列とListの要素削除の違いについて、具体的な使用例を交えて詳しく解説します。


1.配列における要素削除


 配列は要素数が固定されており、要素の削除が難しく、さらに削除後に空いた要素の管理が手間です。

 例を挙げてみましょう。

using UnityEngine;

public class ArrayDeletionExample : MonoBehaviour
{
    void Start()
    {
        string[] fruits = new string[] { "Apple", "Banana", "Orange" };

        // Bananaを削除したいが、要素の詰め直しが難しい
    }
}

 上記の例では、"Banana"を削除する際、要素の詰め直しを行うことが難しく、空いた要素の管理に手間がかかります。


2.Listにおける要素削除


 一方で、Listは要素の削除が非常に簡単で、削除後に要素が自動的に詰められます。

 以下の例を見てみましょう。

using System.Collections.Generic;
using UnityEngine;

public class ListDeletionExample : MonoBehaviour
{
    void Start()
    {
        List<string> fruits = new List<string> { "Apple", "Banana", "Orange" };

        fruits.Remove("Banana");

        foreach (string fruit in fruits)
        {
            Debug.Log("Fruit: " + fruit);
        }
    }
}

 上記の例では、List<string>を使用して"Banana"を削除しました。
このとき、要素が自動的に詰められ、空いた箇所の管理に心配する必要はありません。
List では要素の削除が簡単かつ安全に行えます。


使い分ける際の考え方


 配列は要素の数が固定である場合や、メモリ効率が重要な場合に使用します。
一方でListは、要素数が変動する可能性がある場合や、要素の追加・削除が頻繁に行われる場合に適しています。

// 配列の宣言と初期化
int[] scores = new int[3] { 100, 200, 300 };

// Listの宣言と初期化
List<int> scoreList = new (){ 100, 200, 300 };
scoreList.Add(400); // 要素の追加
scoreList.RemoveAt(0); // 要素の削除


1.要素の追加


 配列はサイズが固定されており、新しい要素を追加する際には要素数を変更する必要があります。
一方で、Listは要素の追加が容易で、サイズを気にせずに新しい要素を追加できます。

// 配列の場合
string[] array = new string[3];
// 新しい要素を追加するには要素数を変更する必要がある

// Listの場合
List<string> list = new List<string>();
// 新しい要素を追加する際、サイズの変更は不要


2.要素の削除


 配列は要素の削除が難しく、空いた要素の管理が手間です。一方で、Listは要素の削除が簡単で、削除後も要素が自動的に詰められます。

// 配列の場合
string[] array = new string[] { "Apple", "Banana", "Orange" };
// 要素を削除して空きを管理するのが難しい

// Listの場合
List<string> list = new List<string> { "Apple", "Banana", "Orange" };
list.Remove("Banana");
// 要素を削除しても自動的に詰められる



 配列とListはどちらもゲーム内で有用ですが、Listは要素の追加・削除が柔軟にできるため、
プレイヤーの進行や状態管理といったゲーム内の要素管理や操作に活用できます。
例えば、プレイヤーがアイテムを獲得するたびにListにアイテムを追加したり、敵キャラクターを動的に管理する際にListを使用することができます。

 配列とListの違いを理解し、適切に選択することで、効果的なプログラミングが可能となるでしょう。


ユースケースとサンプルコード


 

1.プレイヤーの所持アイテムリストの管理


using System.Collections.Generic;
using UnityEngine;

public class PlayerInventory : MonoBehaviour
{
    List<string> items = new List<string>();

    void Start()
    {
        // アイテムの追加
        items.Add("Sword");
        items.Add("Shield");
        items.Add("Potion");

        // アイテムの表示
        foreach (string item in items)
        {
            Debug.Log("Player has: " + item);
        }
    }
}


2.敵の出現管理


using System.Collections.Generic;
using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;
    List<Transform> spawnPoints = new List<Transform>();

    void Start()
    {
        // スポーンポイントの取得
        foreach (Transform spawnPoint in transform)
        {
            spawnPoints.Add(spawnPoint);
        }

        // 敵の出現
        foreach (Transform spawnPoint in spawnPoints)
        {
            Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity);
        }
    }
}


3.スコアの履歴


using System.Collections.Generic;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    List<int> scoreHistory = new List<int>();

    void AddScore(int score)
    {
        scoreHistory.Add(score);
    }

    void DisplayScoreHistory()
    {
        for (int i = 0; i < scoreHistory.Count; i++)
        {
            Debug.Log("Score #" + (i + 1) + ": " + scoreHistory[i]);
        }
    }
}



まとめ


 配列とListの使い分けは、データの変動性や操作の頻度に応じて選ぶべきです。
要素数が固定か可変か、要素の追加や削除が頻繁かどうかを考慮し、ゲーム内の処理に適したデータ構造を選択しましょう。

 ゲーム内でのデータ管理において、要素の追加や削除が頻繁に行われる場合は、Listが適しています。
Listは要素の追加や削除が容易であり、動的なデータの変化に柔軟に対応できます。

 一方、要素数が固定である場合や、要素の追加や削除がほとんどない場合には、配列が適しています。
配列は要素数が固定されているため、メモリの管理や要素へのアクセス速度などの面で効率的です。

 要素の可変性を基準にしてListと配列を選ぶことで、ゲーム内のデータ管理を効果的に行うことができます。
どちらのデータ構造も特有の利点があるため、状況に応じて適切なものを選ぶことが大切です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます