namespace Guru { using UnityEngine; public abstract class GuruModelBase { #region DataIO private double _lastSavedTime = 0; protected double _saveInterval = 3; protected string DefaultSaveKey => GetType().Name; /// /// 加载数据 IO 接口 /// /// /// /// internal static T LoadIO(string saveKey = "") where T : GuruModelBase, new() { if (string.IsNullOrEmpty(saveKey)) saveKey = typeof(T).Name; if (PlayerPrefs.HasKey(saveKey)) { var json = PlayerPrefs.GetString(saveKey, ""); if (!string.IsNullOrEmpty(json)) { // return JsonUtility.FromJson(json); return JsonParser.ToObject(json); } } return new T(); } /// /// 保存数据 IO 接口 /// /// protected void SaveIO(string saveKey = "") { if (string.IsNullOrEmpty(saveKey)) saveKey = DefaultSaveKey; var json = JsonParser.ToJson(this); PlayerPrefs.SetString(saveKey, json); PlayerPrefs.Save(); } /// /// 保存数据 /// /// public virtual void Save(bool force = false) { bool save = force || (Time.realtimeSinceStartup - _lastSavedTime>= _saveInterval); if (save) { _lastSavedTime = Time.realtimeSinceStartup; SaveIO(); } } #endregion } }