レッスン 5.3 - ゲームオーバー

Tutorial

·

Beginner

·

+0XP

·

70 mins

·

(127)

Unity Technologies

レッスン 5.3 - ゲームオーバー

概要:

前のレッスンで素晴らしいスコアのカウンターを追加しましたが、ゲームの出来栄えを左右する UI 要素は他にもたくさんあります。このレッスンでは、クリックするべき標的オブジェクトがセンサーより下に落ちたときに表示されるゲームオーバー時のテキストを作成します。ゲームオーバーになっている間は、標的が出現しなくなります。また、ゲームオーバーになるとスコアはリセットされます。加えて、ゲームオーバーになった後にゲームをやり直すためのボタンを追加します。

プロジェクトの成果物:

画面下部のセンサーの下にクリックするべき標的が落ちた場合、標的の出現を停止し、画面全体に「Game Over」のメッセージが表示されます。「Game Over」メッセージのすぐ下には「Reset Game」ボタンがあり、このボタンをクリックするとスコアをリセットしてゲームが再起動します。これで、もう一度ゲームを楽しむことができます。

Languages available:

1. 導入


2. ゲームオーバーのテキストオブジェクトを作る

ゲーム終了時に「Game Over」というテキストを表示させたい場合、まずは「Game Over」という新しい UI テキスト要素を作成してカスタマイズするところから始めるのがよいでしょう。



  1. キャンバス上で右クリックし、UI > TextMeshPro - Text と選択して新しくオブジェクトを作成し、名前を「Game Over Text」に変更します。

  1. インスペクターで、Text(テキストの内容)、Pos XPos YFont Asset(フォントアセット)、Size(文字サイズ)、Style(スタイル)、Color(色)、および Alignment(文字揃え)の設定を編集します。

  1. 「Wrapping」の設定を「Disabled」にします。

3. ゲームオーバーの文字を表示する

ゲームオーバー時のテキストが画面に表示されるようになりましたが、今はただそこにあるだけで、視界が遮ってしまっています。一旦非表示にして、ゲーム終了時に再び表示されるようにしましょう。



  1. GameManager.cs で、新しく public TextMeshProUGUI gameOverText; を作成し、インスペクターで Game Over オブジェクトを割り当てます。

  1. Active チェックボックスのチェックを外すと、Game Over オブジェクトのテキストがデフォルトで無効(非表示)になります。

  1. Start() で、Game Over オブジェクトのテキストを有効(表示)にします。


4. GameOver 関数を作る

とりあえずゲーム開始時に「Game Over」という文字が表示されるようにしましたが、本当はクリックするべきオブジェクトを 1 つでも逃して、画面外に落ちた時にこの文字を表示させたいものです。



  1. 新しく public void GameOver() 関数を作成し、ゲームオーバー時のテキストを有効にするコードをその中に移動します。

  1. Target.cs で、標的がセンサーに衝突した場合に gameManager.GameOver() を呼び出します。

  1. クリックしてはいけないオブジェクトに新しく「Bad」タグを追加し、センサーに衝突したのがこの Bad タグの付いたオブジェクトではない場合にのみゲームオーバーをトリガーする条件を追加します。


5. ゲームオーバーになったらオブジェクトの生成と得点の計算を止める

「Game Over」の文字が画面に表示したい時に表示されるようになりましたが、今の状態では文字が表示されてもゲーム自体は続いています。本当の意味でゲームを停止させ、これを「ゲームオーバー」と呼ぶためには、標的の生成を止めて、プレイヤーのスコアの計算も行わないようにする必要があります。



  1. 新しく public bool isGameActive; を作成します。

  1. Start() の最初の行で isGameActive = true; と設定し、GameOver() では isGameActive = false; と設定します。

  1. ゲームオーバー時にオブジェクトが出現しないようにするには、SpawnTarget() のコルーチンで、while (true) while (isGameActive) に変更します。

  1. スコアの計算を停止するには、Target.cs の OnMouseDown() 関数に「if (gameManager.isGameActive) {」で始まるブロックを追加します。


6. 再スタートボタンを追加する

ゲームオーバーにする仕組みは見事に機能するようになりましたが、ゲームをやり直す方法がありません。プレイヤーがゲームを再度遊べるようにするために、ここではじめて UI ボタンを作成します。



  1. キャンバスを右クリックして、Create > UI > Button を選択します。

  1. ボタンの名前を「Restart Button」に変更します。

  1. Restart ボタンをちょうどよい場所に配置するため、Game Over テキストを一時的に有効にし、位置を合わせたら再度無効にします。

  1. 子オブジェクトの Text を選択して、テキストを「Restart」に変更して、フォントスタイル、およびサイズも適切に設定します。

7. 再スタートボタンを機能させる

再スタートボタンをシーンに追加していい感じになってきました。あとは実際に動作させてゲームを再スタートさせてみましょう。



  1. GameManager.cs に、using UnityEngine.SceneManagement; を追加します。

  1. 現在のシーンを再ロードする public void RestartGame() 関数を新しく作成します。

  1. ボタンのインスペクターで、「+」をクリックして新しく On Click イベントを追加し、Game Manager オブジェクトをドラッグして GameManager.RestartGame() 関数を選択します。

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

8. ゲームオーバー時に再スタートボタンを表示する

再スタートボタンは上手く動くようになりましたが、ゲーム中ずっと表示されていると邪魔です。「Game Over」のメッセージと同じように、ゲーム進行中は再スタートボタンを非表示にしましょう。



  1. GameManager.cs の先頭に、「using UnityEngine.UI;」を追加します。

  1. 新しく public Button restartButton; を宣言し、インスペクターで Restart Button を割り当てます。

  1. インスペクターで、Restart Button の「Active」チェックボックスのチェックを外します

  1. GameOver 関数で、Restart Button を有効にする処理を書きます。


9. レッスンのまとめ


新しい機能:


  • 再スタートボタン付きできちんと動作するゲームオーバー画面

  • 再スタートボタンをクリックするとゲームがリセットされる

新しい概念とスキル:


  • ゲームの状態

  • ボタン

  • On Click イベント

  • シーン管理ライブラリ

  • UI ライブラリ

  • ゲーム状態を制御するためのブーリアン

次のレッスン:


  • 次のレッスンでは、ボタンを使ってゲームの難易度を選べるようにしてみましょう。

Complete this tutorial