このプロジェクトではアルゴリズム・データ構造を活用したゲームプログラミングの例を、Unity を使ったサンプルで説明している。
- リポジトリをクローンするか、zip をダウンロードして展開する
- プロジェクトを Unity で開く
- Asset Store から Space Robot Kyle をプロジェクトにインポートする
- Asset Store から DOTween をプロジェクトにインポートし、指示に従って Setup する
サンプルは /Assets/Examples 以下にあります。
ウインドウシステムをスタックを使って作っている。新しいウインドウを開く時、それをスタックに Push する。ウインドウを消す時にはスタックから Pop してウインドウを破棄している。この時、スタックの一番上にいるウインドウが次にアクティブウインドウになる。
格闘ゲームでよくある「コマンド入力で技を出す」機能をキューを使って作っている。方向キーの入力があると、それを入力キューに保存しておき、攻撃ボタンを押した時にコマンドが入力できているか判定する。技を出すコマンドが入力できていると判定されたら、技が出る。
このようなやり方を「リングバッファ (circular buffer) を入力バッファとして使い、バッファの入力がコマンド定義と一致していたらコマンドを実行する」ということがある。
深さ優先探索/幅優先探索はグラフ(※)の探索に使われる。これを利用して拠点をクリックして移動可能ならばそこに移動する機能を作っている。グラフのデータは Resources フォルダにテキストとして定義している。
深さ優先探索の場合は、探索して(最初に)得られた経路は必ずしも最短経路ではない。
幅優先探索に成功してから経路を復元する方法は「意外と解説がない!動的計画法で得た最適解を「復元」する一般的な方法」の「動的計画法の最適解を復元する 2 つの方法」> 「方法 2: 汎用的に使える良い方法」のやり方を参考にした。
(※)拠点(ノード)を辺で連結したもの