/// <summary> /// 从备份文件还原数据 /// </summary> public bool Restore() { string filePath = string.Format("{0}/OverlordBackup/overlord_{1}_back.dbak", Path.GetDirectoryName(AssetDatabase.GetAssetPath(internalData)), internalData.name); if (!File.Exists(filePath)) { filePath = EditorUtility.OpenFilePanel("Restore data", Application.dataPath, ""); } try { bool hasDataChanged = false; OverlordBackData backData = JsonConvert.DeserializeObject <OverlordBackData>(File.ReadAllText(filePath)); GKToyExternalData internData = AssetDatabase.LoadAssetAtPath <GKToyExternalData>(backData.internalData.resourcePath); internData.data = JsonConvert.DeserializeObject <GKToyData>(File.ReadAllText(backData.internalData.backupPath).Replace("\t\n", "\\n")); if (internData.data.RestoreData(this) && !hasDataChanged) { hasDataChanged = true; } List <GKToyExternalData> externDatas = new List <GKToyExternalData>(); foreach (var external in backData.externalDatas) { GKToyExternalData externData = AssetDatabase.LoadAssetAtPath <GKToyExternalData>(external.Value.resourcePath); externData.data = JsonConvert.DeserializeObject <GKToyData>(File.ReadAllText(external.Value.backupPath).Replace("\t\n", "\\n")); if (externData.data.RestoreData(this) && !hasDataChanged) { hasDataChanged = true; } externDatas.Add(externData); } isPlaying = backData.isPlaying; internalData = internData; externalDatas = externDatas; if (hasDataChanged) { Debug.Log("Unmatched backup data upgraded, please re-edit changed properties"); } return(true); } catch { return(false); } }
/// <summary> /// 备份数据到文件 /// 备份目录:内部数据源所在目录/OverlordBackup/ /// </summary> public void Backup() { string dataPath = string.Format("{0}/OverlordBackup/", Path.GetDirectoryName(AssetDatabase.GetAssetPath(internalData))); if (!Directory.Exists(dataPath)) { Directory.CreateDirectory(dataPath); } string overlordPath = string.Format("{0}overlord_{1}_back.dbak", dataPath, internalData.name); OverlordBackData backData = new OverlordBackData(dataPath, this); File.WriteAllText(overlordPath, JsonConvert.SerializeObject(backData, Formatting.Indented)); string data = JsonConvert.SerializeObject(internalData.data, Formatting.Indented); Regex r = new Regex(@"(?<=[^\\])\\n"); data = r.Replace(data, "\t\n"); File.WriteAllText(backData.internalData.backupPath, data); foreach (GKToyExternalData external in externalDatas) { data = JsonConvert.SerializeObject(external.data, Formatting.Indented); File.WriteAllText(backData.externalDatas[external.name].backupPath, r.Replace(data, "\t\n")); } }