セーブ・ロード対象について
Game Creatorはアクション「Save Game」を実行すると、各種変数とキャラクターの位置・向きを保存し、「Load Game」を実行した時に保存した値を読み込みます。
変数はGlobal、Local、Listの全てに対応しており、各種変数の右のチェックボックスにチェックを入れることによりセーブ・ロードの対象になります。
Character、及びPlayerはCharacterコンポーネントのAdvanced Parameters、Saveにチェックを入れることによりセーブ・ロードの対象になります。
セーブ対象を追加する方法
セーブ・ロードに開発者独自の項目を追加することができます。次のコードはキャラクターのステータスを格納することを想定したクラスです。
このクラスをゲームオブジェクトに追加してアクション「Save Game」を実行すると値を保存し、「Load Game」で実際にそのゲームオブジェクトの各値はセーブ時の値に切り替わります。
using UnityEngine;
using GameCreator.Core;
public class SaveStatus : MonoBehaviour, IGameSave
{
[System.Serializable]
public class StatusData
{
public int charaId = 0;
public string charaName = "";
public int Lv = 1;
public int HP = 0;
public int MP = 0;
}
public StatusData status = new StatusData();
public void Start()
{
SaveLoadManager.Instance.Initialize(this);
}
public string GetUniqueName()
{
return "SaveStatus" + status.charaId;
}
public System.Type GetSaveDataType()
{
return typeof(StatusData);
}
public System.Object GetSaveData()
{
return this.status;
}
public void ResetData()
{
this.status = new StatusData();
}
public void OnLoad(System.Object generic)
{
StatusData loadedStatus = (StatusData)generic;
this.status = loadedStatus;
}
}
StatusData
保存したい値を設定したクラス。System.Serializable属性を付与する必要があります。
Start
Game Creatorのセーブ・ロードを担当しているSaveLoadManagerに自身を含めるように設定します。
GetUniqueGame
一意となる文字を設定します。セーブする時に、この文字列をキーに保存し、ロードする時にこの文字列をキーに読み込みます。
今回、ステータスは複数のキャラクターを想定しているため、このクラス専用の文字列+キャラクターIDとの形にしています。するとキャラクターIDごとに値を別々に格納してくれるようになります。
Game Creator公式は、複数を想定する場合GUIDを利用することを推奨しています。
GetSaveDataType
保存する値の型を指定します。
GetSaveData
アクション「Save Game」等でセーブした時に実際に保存する値をセットします。
ResetData
値をクリアする時の処理
OnLoad
アクション「Load Game」等でロードした時に値を受け取る処理。値はObject型で取得するので、適宜型変換をして取得します。