Menu
CoddyTech

生き残れ

CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 47/50。

challenge icon

チャレンジ

中級

最後のステップです。プレイが終了したら、最高記録を保存します。これまでのレッスンの内容はすべて残しておきます。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
{
    // 後のレッスンでここを実装します:プレイの終了処理とベスト記録の管理。
}

Unityにおけるゲームアーキテクチャのすべてのレッスン