// 运行时新增外部数据. public void AddExternalData(GKToyExternalData d) { if (externalDatas.Contains(d)) { return; } externalDatas.Add(d); _tmpNewData.Add(d.data); }
/// <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); } }