ぬるーむ

Unity初心者が誰もが知っているゲームの模倣をしています。個人的な備忘録ですが、入門書を読み終えたばかりの初心者の方は「こんなへなちょこでもいいのか!」「俺の方がうまく作れる」と作成意欲がわいたりするかもしれません。

Unityによるパックマンの作り方 ~完成~


スポンサードリンク

GameManagerクラスの作成

GameManagerクラスでゲーム全体の管理をします。

ゲーム開始

CoroutineStart関数で迷路、パックマン、ゴースト、アイテムを初期化後、一定時間"Ready"を表示しパックマンとゴーストを動作させます。

パックマンが食べられる

パックンが食べられたときの処理はPlaceGhost関数内で各ゴーストにイベントを登録します。死亡後、アニメーションが終わるのを待ってからパックマン、ゴーストを初期化します(エサ、パワーエサはそのまま)。アニメーションが終了後の処理はAnimation Eventを使って実装します。

f:id:Nullsuke:20210523213913p:plain
Animation Event

Animation Eventの詳細は下記のサイトを参照してください。

qiita.com

ゴーストが食べられる

ゴーストが食べられたときの処理もPlaceGhost関数内で各ゴーストにイベントを登録します。

エサ、パワーエサを食べる

パックマンがエサ、パワーエサを食べたときの処理はPlaceDot、PlacePowerCokie関数内でイベントを登録します。

恐慌状態の解除

FixedUpdate関数で一定時間経過したらすべてのゴーストの恐慌状態を解除するようにします。

スコアの表示

ゴーストやフルーツを食べたとき、食べた座標にスコアを表示するScorerTextを作成します。TextオブジェクトにScorerクラスをアタッチします。

完成

完成したものがこちら nullsuke.github.io

ソースコードはこちら github.com

まとめ

  • ゴーストの状態管理をStateパターンを用いて実装したが、if文やSwtich文を使った方が簡単だったかもしれない。今後拡張するするつもりもないし。
  • 今回、お絵描きソフトで矩形を描いてそこからBoxColliderやWaypointの座標を取得するという方法を使った。かかる時間自体は手作業とたいして変わらないけれど、マップを重ねて見ながら位置を指定できるのでそれなりに便利かなと思った。
  • 今回使ったマップは巣の近辺のWaypointが小数になってしまい、移動の処理がちょっと複雑になってしまった。マップを調整するか、移動方法を根本的に見直した方がよいかもしれない。
  • 追跡時に対象までの最短距離を直線距離でなくA*などで求めた方がいいような気もする(処理が重くなる?)。