/*[Button, DisableInEditorMode]*/ public void SaveGameState(string _saveGameFileName) { bodyDataToSave = new SaveFile_BodyData(); saveGameFileName = _saveGameFileName; // 1. Collect SaveableScriptableObjects ScriptableObjectsGuidMapSingleton.Instance.scriptableObjectsGuidMap.CollectAllRuntimeInstantiatedSOs(); //Set Guids for new SOs var saveableScriptableObjects = new List <ScriptableObject>(); foreach (var so in scriptableObjectsToSave) { if (so == null) { Debug.LogError($"There is a null entry in ScriptableObjectsToSave on the SaveLoadController {this.name}. Please fix.", this); continue; } saveableScriptableObjects.AddRange(SaveableScriptableObjectsCollector.Collect(so)); } // 2. Save ScriptableObjects List <SaveableScriptableObjectData> scriptableObjectsData = new List <SaveableScriptableObjectData>(); scriptableObjectsData.AddRange(SaveLoadScriptableObjects.SaveScriptableObjects(saveableScriptableObjects)); bodyDataToSave.scriptableObjectDatas.AddRange(scriptableObjectsData); // 3. Save Components if (saveComponentsOfActiveScenes) { saveableComponents = ComponentExtensions.FindAllComponentsOfType <SaveableComponent>(); foreach (var saveableComponent in saveableComponents) { bodyDataToSave.componentDatas.Add(saveableComponent.StoreData()); } } // 4. Write file string fileContent = string.Empty; // 4.1 Write version data var currentVersion = new Version(Application.version); fileContent += SaveFileSerializer.Serialize("Version", typeof(string), currentVersion.ToString(), encryptSaveFile); // 4.2 write head data HeadData = new SaveFile_HeadData(DateTime.Now, ScreenshotTaker.TakeScreenshot(UnityEngine.Camera.main, Screen.width / 4, Screen.height / 4)); fileContent += SaveFileSerializer.Serialize("Head", typeof(SaveFile_HeadData), HeadData, encryptSaveFile); // 4.3 write body data fileContent += SaveFileSerializer.Serialize("Body", typeof(SaveFile_BodyData), bodyDataToSave, encryptSaveFile); // 4.4 write to disk System.IO.Directory.CreateDirectory(saveGameDirectoryPath); // Create save game directory path if it doesn't already exists System.IO.File.WriteAllText(saveGameFilePath, fileContent); // Write file to disk // 5. Cleanup Resources.UnloadUnusedAssets(); // 6. Finished saving Debug.Log("Game saved!"); }
private void LoadScriptableObject(SaveableObjectData _loadedObjectData) { SaveLoadScriptableObjects.LoadScriptableObject(_loadedObjectData as SaveableScriptableObjectData); }