プログラミング言語 C# において、Queue
と Stack
はデータを効率的に扱うための重要なコレクションです。特に、Unity を使ってゲーム開発を行う際にも、これらの構造は役立つことが多いです。
ジェネリックコレクションを使うために、下記のusingディレクティブが必要です。
using System.Collection.Generic;
この記事では、Queue
と Stack
の基本や使い方を解説します。
目次
Queue(キュー)と Stack(スタック)の違い
Queue とは
Queue
は「先入れ先出し」(FIFO: First In, First Out)の原則に基づくコレクションです。
これは、最初に追加された要素が最初に取り出されることを意味します。
Stack とは
Stack
は「後入れ先出し」(LIFO: Last In, First Out)の原則に基づくコレクションです。
これは、最後に追加された要素が最初に取り出されることを意味します。
Queue の基本的な操作
生成
Queue
インスタンスを生成します。
Queue<int> queue = new Queue<int>();
追加(Enqueue)
Enqueue
メソッドを使って要素を追加します。
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
取り出し(Dequeue)
Dequeue
メソッドで要素を取り出します。この操作は、キューから要素を削除します。
int first = queue.Dequeue(); // 1 を取り出す
覗き見(Peek)
Peek
メソッドで次に取り出される要素を確認できますが、キューからは削除されません。
int next = queue.Peek(); // 2 を確認する
Queue の活用方法
イベント処理
ゲーム内で発生するイベント(例えばプレイヤーのアクションやゲーム内の特定のトリガー)をキューに格納し、順序良く処理します。これにより、イベントが発生した順に適切に対応することができます。
AI タスク管理
AI キャラクターが行うべきタスクをキューに追加し、一つずつ実行します。例えば、敵キャラクターがプレイヤーを追跡し、攻撃し、撤退するといった一連のアクションを管理するのに適しています。
リソースのロード管理
ゲームのリソース(画像、音声、データ等)を必要な順番でロードする際にキューを使用します。これにより、必要なリソースが最適なれ、ゲームのパフォーマンスを向上させることができます。
Stack の基本的な操作
生成
Stack
インスタンスを生成します。
Stack<int> stack = new Stack<int>();
追加(Push)
Push
メソッドを使って要素を追加します。
stack.Push(1);
stack.Push(2);
stack.Push(3);
取り出し(Pop)
Pop
メソッドで要素を取り出します。この操作は、スタックから要素を削除します。
int last = stack.Pop(); // 3 を取り出す
覗き見(Peek)
Peek
メソッドで次に取り出される要素を確認できますが、スタックからは削除されません。
int next = stack.Peek(); // 2 を確認する
Stack の活用方法
アンドゥ/リドゥ機能
ゲーム内でのプレイヤーのアクションをスタックに保存し、後から「元に戻す(Undo)」や「やり直し(Redo)」の機能を実装できます。これは特にパズルゲームやエディタツールで役立ちます。
ゲームの状態管理
ゲームの進行状態やシーンの変更をスタックで管理します。プレイヤーが新しいシーンに進むたびにスタックに追加し、戻る際にはスタックからポップして以前の状態に戻ります。
コマンドパターンの実装
プレイヤーのアクションやゲーム内のイベントをコマンドとしてスタックに保存し、それらを逆順に実行することで、複雑なゲームのロジックを管理できます。
ダイアログシステム
ゲーム内のダイアログや選択肢をスタックに積み、プレイヤーが選択を進めるごとにスタックから取り出して表示します。これにより、非線形なストーリーテリングや複数の選択肢に基づく分岐を実現できます。
おわりに
この記事では、C# における Queue
と Stack
の基本的な使い方と、ゲーム開発におけるそれらの活用方法を解説しました。これらのデータ構造は、シンプルながらも非常に強力で、ゲームのロジックやデータの管理を効率的かつ直感的に行うための鍵となります。
これらのデータ構造を活用することで、皆さんのゲーム開発の一助となれば幸いです。
参考リンク
関連記事
【C#】配列, List, Dictionary の初期化方法まとめ【C#】 LINQ の各メソッドの紹介と使い方まとめ(Select, Where など)