敵キャラのHPが0になったとき
敵キャラのHPが0になったら以下の処理するメソッドを作ります。
- 敵キャラのグラフィックを消す
- 敵キャラの経験値を主人公の経験値に加える
- 2秒後にダンジョンシーンに遷移する
BattleDirector.cs
private void WonBattle() { enemySprite.sprite = null; heroStatus.exp = heroStatus.exp + enemyStatus.exp; StartCoroutine(ReturnDungeon()); IEnumerator ReturnDungeon() { yield return new WaitForSeconds(2f); GameManager.LoadScene("Dungeon"); } }
敵キャラのターンの最初で呼び出す
WonBattleメソッドは敵キャラのターンの最初で呼び出します。
private void EnemyTurn() { if (enemyStatus.hp == 0) { WonBattle(); return; } ...
ゲームオーバーの表示を用意しておく
ゲームオーバーウィンドウを作ってプレハブ化します。
Imageオブジェクトを作成して、その下にテキストとタイトル画面のときと同じように透明の全体ボタンを配置しています。
見た目はこんな感じです。
階層はこんな感じです。背景を黒の半透明で覆いたいので、SafeAriaオブジェクトの外に配置しています。
GameOverWindowは非表示にしておきます。
BattleDirectorで表示できるように、GameObject型のGameoverObjectを作ってアウトレット接続しておきます。
さらにゲームオーバーウィンドウをタッチしたらタイトル画面に戻るメソッドも追加しておきます。
BattleDirector.cs
public GameObject GameoverObject;
public void TouchGameover() { SoundManager.instance.PlayTouchSE(); GameManager.LoadScene("TITLE"); }
GameOverWindowのボタンにこのメソッドを設定しておきます。
主人公のHPか食料が0になったとき
主人公のHPが0になったらBGMを止めたいのでSoundManagerにBGMを止めるメソッドを作っておきます。
またゲームオーバーのときのBGMを再生するPlayGameoverBGMメソッドもSoundManagerに用意しておきましょう。
SoundManager.cs
public void StopBGM() { audioSource.Stop(); }
BattleDirector.cs
主人公のHPが0になったときに呼び出すLostBattleメソッドを作成します。
いきなりゲームオーバーが表示されると味気ないので、HPが0になった瞬間にBGMを停止して2秒後にゲームオーバーを表示します。
private void LostBattle() { SoundManager.instance.StopBGM(); StartCoroutine(GameOver()); IEnumerator GameOver() { yield return new WaitForSeconds(2f); SoundManager.instance.PlayGameoverBGM(); gameoverObject.SetActive(true); } }
次のターンの最初で呼び出す
private void NextTurn() { if (heroStatus.hp == 0 || GameManager.instance.PlayRecord.DungeonStatus.Food == 0) { LostBattle(); return; } ...