前回の記事でボス戦を実装し、いよいよRPGゲームとして欠かせない要素の大部分が仕上がってきました。
前回の記事:
2DRPGの作り方23 ボス戦イベントを作成してシンボルエンカウントさせよう
前回の記事でダンジョンマップにアイテム取得用の宝箱イベントを置けるようになりました。 前回の記事: 今回の記事では、RPGのクライマックスを飾るボス戦を作ります。まずはボス戦イベントをダンジョンマップに追加していきます。 通常のランダムエン...
ですが、まだゲーム完成まではもう少しやることが残っています。ゲームの流れを制御する部分ですね。今回の記事ではゲームの終着地点であるゲームオーバーとゲームクリア処理を実装していきます。
ゲームオーバーの実装
この講座ではゲームオーバーになるタイミングは戦闘シーンでHPが0になった時にします。
ゲームオーバーになったら、フィールドマップの指定した場所に自動的に移動し、残金が0になるようにします。
それではゲームオーバー処理を作成していきましょう。
「RPGSceneManager」コンポーネントを次のように修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
//RPGSceneManager.cs ゲームオーバー処理を追加 //次のものを追加 [SerializeField, TextArea(3, 15)] string GameOverMessage = "体力が無くなった..."; [SerializeField] Map RespawnMapPrefab; [SerializeField] Vector3Int RespawnPos; IEnumerator GameOver() { MessageWindow.StartMessage(GameOverMessage); yield return new WaitUntil(() => MessageWindow.IsEndMessage); RespawnMap(true); } void RespawnMap(bool isGameOver) { Object.Destroy(ActiveMap.gameObject); ActiveMap = Object.Instantiate(RespawnMapPrefab); Player.SetPosNoCoroutine(RespawnPos); Player.CurrentDir = Direction.Down; if(isGameOver) { Player.BattleParameter.HP = 1; Player.BattleParameter.Money = 100; } if(_currentCoroutine != null) { StopCoroutine(_currentCoroutine); } _currentCoroutine = StartCoroutine(MovePlayer()); } //次のものを修正 IEnumerator MovePlayer() { var rnd = new System.Random(); while(true) { if (GetArrowInput(out var move)) { var movedPos = Player.Pos + move; var massData = ActiveMap.GetMassData(movedPos); Player.SetDir(move); if(massData.isMovable) { Player.Pos = movedPos; yield return new WaitWhile(() => Player.IsMoving); if(massData.massEvent != null) { MassEventPos = movedPos; massData.massEvent.Exec(this); } else if(ActiveMap.RandomEncount != null) { var encount = ActiveMap.RandomEncount.Encount(rnd); if(encount != null) { BattleWindow.SetUseEncounter(encount); BattleWindow.Open(); } } } else if(massData.character != null && massData.character.Event != null) { MassEventPos = movedPos; massData.character.Event.Exec(this); } } yield return new WaitWhile(() => IsPauseScene); if(Player.BattleParameter.HP <= 0) { StartCoroutine(GameOver()); yield break; } if(Input.GetKeyDown(KeyCode.Space)) { OpenMenu(); } } } |
コンパイルができましたら、シーンにある「RPGScene」の「RPGSceneManager」コンポーネントに次の設定を行ってください。
1 2 3 |
//RPGSceneManagerの設定内容 RespawnMapPrefab : 「FieldMap」プレハブ RespawnPos : RespawnMapPrefabに設定したマップ上の位置。.記事では(-12, 2, 0) |
それでは実際に再生して動作を確認してください。次の画像のようになったらOKです。
ゲームクリアーの作成
次はゲームクリアーの処理を作っていきましょう!
この講座ではボスに勝った時にゲームクリアーとします。
「BossEvent」クラスを次のように修正してください。
まとめ
今回の記事ではゲームオーバーとゲームクリアーを作成していきました。
今回の内容を簡単にまとめると以下のようになります。
- 「RPGSceneManager」コンポーネントにリスポーン時の情報を追加
- プレイヤーの体力が0になった時ゲームオーバーになるようにした
- ボスを倒した時にゲームクリアーになるようにした
それでは次の記事に行ってみましょう!
2DRPGの作り方25 PlayerPrefsとjsonを用いてセーブ機能を実装する
前回の記事でゲームオーバーとゲームクリア処理を作成しました。 前回の記事: 今回の記事ではUnityのPlayerPrefsとjsonデータ構造を用いてセーブシステムを作成していきます。 また、宝箱とボスの配置状況も記録し、前回のゲームオー...
コメント