生き残れ
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 47/50。
チャレンジ
中級最後のステップです。プレイが終了したら、最高記録を保存します。これまでのレッスンの内容はすべて残しておきます。Canvas には非表示の GameOverPanel があり、その中に ResultText、BestText、そして「もう一度戦う」と表示された RestartButton があります。また、GameManager オブジェクトには GameManager スクリプトがあり、Inspector で hero、spawner、gameOverPanel、resultText、bestText、restartButton を設定します。
Heroにpublic event Action Diedを追加します。体力が 0 になったとき、自身を無効にした後にこのイベントを発生させます。GameManager.csに、public int waveとpublic int killsを持つ[System.Serializable]クラスBestRunを追加します。GameManagerは、ヒーローのDiedと、このプレイでのキル数を数えるEnemy.Diedを監視します。OnEnableでイベントを登録し、OnDisableで登録を解除します。Startでは、ファイルが存在する場合、Application.persistentDataPathにあるbest.jsonからJsonUtilityを使って最高記録を読み込み、パネルを非表示にして、restartButtonでゲームを再開できるようにします。- ヒーローが倒れたら、ゲームを停止します(
Time.timeScaleを 0 にします)。プレイの記録はスポナーのWaveとキル数です。より高いウェーブに到達した場合、または同じウェーブでキル数が増えた場合、新記録となります。その場合、最高記録を更新し、JsonUtility.ToJsonを使ってbest.jsonに保存します。プレイの記録をresultTextにWave 2, 7 killsのように表示し、最高記録をbestTextにBest: wave 3, 12 killsのように表示してから、パネルを表示します。 - 再開時には時間スケールを 1 に戻し、シーンを再読み込みします。
Play を押して倒れるまで戦い、最高記録の更新を目指してみましょう。その後、Check を押します。
自分で試してみよう
using UnityEngine;
public class GameManager : MonoBehaviour
{
// 後のレッスンでここを実装します:プレイの終了処理とベスト記録の管理。
}