メインコンテンツまでスキップ

ISaveSystem

セーブ/ロード操作のコントラクトです。イベント通知付きの複数セーブスロットに対応しています。

名前空間: OpenMon.MCE.SDK

定義

public interface ISaveSystem
{
void Save(int slot);
void Load(int slot);
bool HasSaveData(int slot);
void DeleteSave(int slot);
event Action<int> OnSaved;
event Action<int> OnLoaded;
}

メソッド

Save(int slot)

現在のゲーム状態をスロットにセーブします。

パラメータ説明
slotintセーブスロットインデックス(通常 0-2)

登録されたすべての SavableObject インスタンスをJSONファイルにシリアライズします。セーブは同期的で、メソッドが返る前に完了します。

Load(int slot)

スロットからゲーム状態をロードします。

パラメータ説明
slotintロードするセーブスロットインデックス

JSONファイルをデシリアライズし、登録されたすべての SavableObject インスタンスに状態を適用します。セーブされた位置が異なるシーンの場合、シーン遷移がトリガーされることがあります。

HasSaveData(int slot)

セーブスロットにデータがあるかチェックします。

パラメータ説明
slotintチェックするセーブスロットインデックス

戻り値: bool -- スロットにセーブデータが含まれている場合 true

DeleteSave(int slot)

スロットのセーブデータを削除します。

パラメータ説明
slotint削除するセーブスロットインデックス

イベント

OnSaved

セーブ操作が成功した後に発火します。

シグネチャ: event Action<int> OnSaved

パラメータ説明
slotintセーブされたスロット

OnLoaded

ロード操作が成功した後に発火します。

シグネチャ: event Action<int> OnLoaded

パラメータ説明
slotintロードされたスロット

使用例

using OpenMon.MCE.SDK;
using Zenject;

public class SaveLoadUI : MonoBehaviour
{
[Inject] private ISaveSystem saveSystem;

[SerializeField] private Button[] saveButtons;
[SerializeField] private Button[] loadButtons;
[SerializeField] private Button[] deleteButtons;
[SerializeField] private Text[] slotLabels;

private void Start()
{
for (int i = 0; i < 3; i++)
{
int slot = i;
slotLabels[i].text = saveSystem.HasSaveData(i)
? $"Slot {i + 1}: Saved"
: $"Slot {i + 1}: Empty";

saveButtons[i].onClick.AddListener(() => saveSystem.Save(slot));
loadButtons[i].onClick.AddListener(() =>
{
if (saveSystem.HasSaveData(slot))
saveSystem.Load(slot);
});
deleteButtons[i].onClick.AddListener(() =>
{
saveSystem.DeleteSave(slot);
slotLabels[slot].text = $"Slot {slot + 1}: Empty";
});
}

saveSystem.OnSaved += (slot) =>
{
slotLabels[slot].text = $"Slot {slot + 1}: Saved";
Debug.Log($"Game saved to slot {slot + 1}");
};
}
}