前回の記事では本講座の最難関であるマップ自動生成処理の作成を行いました。
前回の記事:
ローグライクゲームの作り方12 乱数でダンジョン自動生成システムを構築しよう
前回の記事ではローグライクゲームの罠システムを実装しました。 プレイヤー、敵、パラメータとUI、宝箱、罠と順に作成してきました。かなりシステム面が仕上がってきました。 前回の記事: 今回の記事ではいよいよローグライクゲームの大きな特徴である...
入る度に形を変える不思議のダンジョンのようなシステムを無事に実装できましたが、今のままだと次の階へ進んでいくことができません。
そこで、今回の記事では階段にゴールした時に次の階へ進み、再びダンジョンを自動生成する処理を作成します。
ゴールイベントを作りダンジョン奥深くへ進めるようにする
それでは、プレイヤーがゴールして次のマップに移動できるようにしていきましょう!
ゴール用のプレハブやマップデータは既に作成しているので、スクリプトを修正してプレイヤーがゴールに到着したらゴールになるようにするだけです。
ゴールした後はマップを生成し直し、繰り返しプレイできるようにします。
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 |
//次のものを修正 IEnumerator RunEvents() { //敵の移動処理 foreach(var enemy in Object.FindObjectsOfType<Enemy>()) { enemy.MoveStart(); } //全ての敵が移動完了するまで待つ yield return new WaitWhile(() => Object.FindObjectsOfType<Enemy>().All(_e => !_e.IsNowMoving)); //ゴール判定 var mass = Map[Pos.x, Pos.y]; //追加 if(mass.Type == MassType.Goal) { StartCoroutine(Goal()); } else { //終了処理 DoWaitEvent = false; } } //次のものを追加 IEnumerator Goal() { yield return new WaitForSeconds(0.0f); //ゴール時にウェイト入れたければ使う var mapSceneManager = Object.FindObjectOfType<MapSceneManager>(); mapSceneManager.GenerateMap(); } |
ここまでできたら、コンパイルして再生してみてください。
ゴールのマスに到着したらマップが再生成され、繰り返しプレイできるようになっていたらOKです。
ゴール時にプレイヤーのパラメータを維持するようにする
ゴールできるようになりましたが、現状のままだとプレイヤーのパラメータがリセットされてしまいます。
これはマップ生成時にプレイヤーも再生成しているためです。
これを避けるため、ゴール時にプレイヤーのパラメータを持ち越せるように修正していきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//次のものを修正 IEnumerator Goal() { yield return new WaitForSeconds(0.0f); //ゴール時にウェイト入れたければ使う var mapSceneManager = Object.FindObjectOfType<MapSceneManager>(); mapSceneManager.GenerateMap(); //追加 var player = Object.FindObjectOfType<Player>(); player.Life = Life; player.Food = Food; player.Exp = Exp; player.Level = Level; player.CurrentWeapon = CurrentWeapon; player.Attack = Attack; //CurrentWeapon呼び出し時にAttackが上昇してしまうのでAttack代入はCurrentPosion代入の後 |
修正が終わったら再生してみてください。マップ再生成時にプレイヤーのパラメータが維持されていたらOKです。
まとめ
今回の記事ではプレイヤーがダンジョンマップでゴールできるようにし、次の階へ進む処理を作りました。この実装により何度でも繰り返しプレイできるゲームシステムになりました。
またマップの再生成時にプレイヤーのパラメータを維持するようにしました。
記事では次のことを行いました。
- ゴールのマスに到着するとマップを再生成し、繰り返しプレイできるようにした。
- ゴール時にプレイヤーのパラメータを維持するようにした。
それでは次の記事に行ってみましょう!次回はオートマッピング機能を実装します!
ローグライクゲームの作り方14 オートマッピングシステムと視認範囲を実装しよう
前回までで自動生成するダンジョンを移動しながらどんどん深い階層へ進んでいく不思議のダンジョン系ローグライクゲームができあがりました。 前回の記事: 今回の記事では、オートマッピングシステムと視認範囲の処理を実装していきます。 まだ移動したこ...
コメント
//敵の移動処理
foreach(var enemy in Object.FindObjectsOfType())
{
enemy.Move();
}
enemy.MoveStart()?
一か所Move()になってましたね汗
誤植報告ありがとうございます!
MoveStart()に訂正しておきました。