Unity で テトリス風ゲームを作ってみる#10
前回の続き
今回はゲームオーバーとリスタートについて考える。
ゲームオーバーとリスタート
ゲームオーバーになる条件は、Next テトリミノがフィールド上に移動したときに、フィールド内のブロックと重なった場合である。
ゲームオーバーになった場合は、ゲームを停止し、ゲームオーバー画面を表示する。ゲームオーバー画面の上にはリスタートボタンがあり、リスタートボタンが押された場合は、フィールド内をクリアして最初からゲームを再開する。
よって
-
- テトリミノがフィールドへ移動した際に、ブロックと重なっているかどうかを検出する。
- ゲームを停止する。
- ゲームオーバー画面を表示する。
- リスタートボタンが押されたことを検知する。
- ゲーム内のブロックとNext テトリミノをクリアする。
- スコアとレベルを初期値に戻す。
- ゲームを再開する。
が実現できればよい。
ブロックの重なり判定は、今までと同様にRaycast を使って検出できる。ゲームを停止するのは、Next テトリミノをフィールド上に移動しないようにすればよさそう。
ゲーム内のブロックとNext テトリミノのクリアは、各GameObject をもれなく削除すればよい。ゲームを再開するのは、クリア後にNext テトリミノをフィールドに移動すれば開始できる。
と考えると、追加で確認が必要なことは、ゲームオーバー画面の表示とスタートボタンが押されたことの検知でだけである。
ゲームオーバー画面は、UI オブジェクトだけで構成される画面と考えて、下図のようにPanel UI オブジェクトで親の背景を作り、その上に子のText UI オブジェクトのタイトル(ここでは"Game Over"の文字)と子のリスタート用のButton UI オブジェクトを配置して実現する。
表示、非表示の実現方法は、親であるPanel UI GameObject のSetActive で制御を行う。ゲームプレイ中は、SetActive (false) でゲームオーバー時はSetActive (true) という感じ。
リスタートボタンの検知は、Button UI オブジェクトに付加されているButton コンポーネントのコールバックの仕組みを使えば実現可能。
"On Click ()" という項目に、自前スクリプトのコールバック関数をセットすれば、ボタンが押された時にそのコールバックが呼ばれる。
以上の内容をプロト実装した結果がこちら。
次の記事