プレイデータを保存するクラス
ゲームのプレイデータを記録(セーブ)しておくためのクラスを作ります。セーブ機能はのちほど実装します。
先に3つのクラスを用意します。
- ダンジョンの進捗状況などを入れておくDungeonStatusクラス
- 主人公や敵キャラの状態を入れておくUnitStatusクラス
- 上記のクラスを入れておくPlayRecordクラス
どのクラスもMonoBehaviourは継承せずに、StartメソッドとUpdateメソッドも削除します。
また保存するときにシリアライズできるようにSystem.Serializable属性をつけておきます。
ダンジョンの進行状況を保存するDungeonStatusクラス
ダンジョンの進行状況として保存しておきたいパラメータは、
- ダンジョンの階層
- 残りの食料
です。
[System.Serializable] public class DungeonStatus { public int Floor; public int Food; }
ユニットの状態を保存するUnitStatusクラス
主人公と敵キャラなどユニットの状態を保存するクラスを作ります。
ユニットの状態として保存しておきたいパラメータは、
- ID(主人公なら"HERO"、敵キャラなら敵キャラのIDを入れる)
- レベル
- 経験値
- HP
です。
IDは主人公なら"HERO"、敵キャラなら敵キャラのIDを入れます。
最大HPを取得するGetMaxHPメソッドを作っておきましょう。ゲームバランスの調整のときに変更される可能性が大きいですが、とりあえず
主人公のHP = 45 + レベル x 5
その他のHP = 9 + レベル x 3
にしておきます。
主人公と敵キャラと共通で使うのでIDで分岐させるようにします。
UnitStatus.cs
[System.Serializable] public class UnitStatus { public string ID; public int Level; public int Exp; public int HP; public int GetMaxHP() { if (ID == "HERO") { int maxhp = 45 + level * 5; return maxhp; } else { int maxhp = 8 + level * 3; return maxhp; } } }
プレイデータを保存するPlayRecordクラス
ゲームのプレイデータを全体保存するクラスを作ります。
ゲームの状態を保存しておくplayStatusをメンバ変数を追加します。
(0でニューゲーム、1で続き(ダンジョン)、2続き(バトル))
ダンジョンの進行状況を保存するDungeonStatus型のdungeonStatus
主人公の状態を保存するUnityStatus型のHeroStatus
をメンバ変数に追加します。
初期化用のInitStatusメソッドを作り、その中でDungeonStatusとHeroStatusのインスタンス化と初期化を行います。
PlayRecord.cs
[System.Serializable] public class PlayRecord { public int PlayStatus; public DungeonStatus DungeonStatus; public UnitStatus HeroStatus; public void InitStatus() { DungeonStatus = new DungeonStatus(); DungeonStatus.Floor = 1; DungeonStatus.Food = 100 + BonusFood; HeroStatus = new UnitStatus(); HeroStatus.ID = "HERO"; HeroStatus.Level = 1 + BonusLevel; HeroStatus.Exp = 0; HeroStatus.HP = HeroStatus.GetMaxHP(); } }
GameManagerでインスタンス化する
PlayRecordクラスはGameManagerでインスタンス化させて参照しておきます。
これで主人公の状態などはGameManagerを経由して参照できるようになります。
GameManager.cs
GameManagerにpublicなPlayRecord型のメンバ変数PlayRecordを追加します。
GameManager.cs
... private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this); PlayRecord = new PlayRecord(); PlayRecord.InitStatus(); ...
のちほどこの処理は別ゲームデータを読み込むメソッドに移動させる予定です。