前回の記事ではダンジョンマップを部分的に表示し、プレイヤーが歩いたところの周りだけが表示される処理を作りました。
また、この処理の追加によりオートマッピング機能を実現しました。
前回の記事:
今回の記事ではローグライクゲームの仕上げとして階段となるゴールを下りるたびにゲーム状態が保存されるセーブシステムを実装していきます。
また、ゲームオーバーになったときに問答無用でレベル1からやり直す処理を作成します。
ローグライクゲームにおけるセーブデータについて
この講座では簡単にマップをゴールした時にセーブするようにします。
その際にセーブするデータは次のものにします。
- プレイヤーのパラメータ
- プレイヤーの武器
- 次のマップのデータ
それでは「SavaData.cs」と新しくスクリプトを作成し、その内容を次のものにしてください。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] class SaveData { public int Level; public int Life; public int Attack; public int Exp; public string WeaponName; public int WeaponAttack; public List<string> MapData; public void Save() { var json = JsonUtility.ToJson(this); PlayerPrefs.SetString("save", json); } public static SaveData Recover() { if (PlayerPrefs.HasKey("save")) { var json = PlayerPrefs.GetString("save"); return JsonUtility.FromJson<SaveData>(json); } else { return null; } } public static void Destroy() { PlayerPrefs.DeleteAll(); } } |
セーブするタイミングはゴールした時なので「Player」コンポーネントの「Goal」メソッドを修正します。
また、マップデータの文字列を取得するために「Map」コンポーネントの方も修正します。
ゲームオーバー時にセーブデータを破棄する
最後にゲームオーバーになった時はセーブデータを削除するようにします。
ゲームオーバーになった時の処理は「Player」コンポーネントの「Dead」メソッドで行っているのでそちらを修正します。
1 2 3 4 5 6 7 8 9 10 |
//次のものを修正 public override void Dead() { base.Dead(); var mapManager = Object.FindObjectOfType<MapSceneManager>(); mapManager.GameOver.SetActive(true); SaveData.Destroy();//追加 } |
コンパイルできましたら再生しゲームオーバーになってみましょう。
もう一度再生した時にはじめの状態に戻っていたら成功です。
ゲームオーバーの後に演出を出したりタイトルを作ったりの部分は過去の無料・有料講座両方で大抵は実装済みなので今回は省略します。
まとめ
今回の記事でローグライクゲームにおけるセーブシステムとゲームオーバー時の初期化処理を作成しました。
- マップをゴールした時にデータを保存する
- 再開時にセーブしたデータがあるか確認して、そのデータを復元する
- ゲームオーバー時にはセーブデータを削除する
といった機能を実装しました。
お疲れ様でした!
ローグライクゲームの作り方講座は以上になります。
0からフルスクラッチで進んできましたが、かなりそれっぽくなっているかと思います。
この講座で作成したところまででもローグライクゲームの形になってはいますが、もっと拡張したい部分も出てくるかと思います。
- マップの生成方法のバリエーションを増やす
- 敵の移動AIを増やす
- より多彩なパラメータによる戦闘システムの開発
- 攻撃時のエフェクトやキャラクター量産などビジュアル面を派手にする演出
などなど。
あなたオリジナルのローグライクゲームを開発・拡張する際に今回講座で実践してきた内容がお役に立てれば幸いです。
ぜひぜひ、もっと自由で奥深いローグライクゲームを目指してオリジナルの開発を行ってみてください。
以上でこの講座を終わります。最後まで読んでいただきありがとうございました!
追記:もう少しだけ見栄えを良くする記事を追加&スクリプト全文掲載しておきます
講座完成後に思いましたが、今のままだと少し見栄えが味気ないですよね汗
次回記事で移動時の方向変化についての修正とアセットを用いた見た目の改善を行います。
とは言っても細かくアニメーションを調整したりはしません。
3Dモデルを用いたアニメーション機能の細かい実装に関しては3Dアクションゲーム講座で解説しているのでそちらを参考にしてみてください。
今回の講座で作成したスクリプト全文も改めて次回記事でまとめておきます。
コメント
ローグライクはやっぱり難しいですね。
なんとなくできた感じです。
色々、応用できそうなこともあったので参考にしていきたいと思います
今回はローグライク講座取り組んでいただきありがとうございました!
初心者向け講座よりは飛ばし気味で作っちゃったのでそのせいもあるかもしれないですね^^;
あと少し実装を攻めすぎた気がします笑
いつかよりあるあるな仕様をメインにして2Dローグライク講座作って再リベンジしてみようと思います^^