В моей игре есть ассет со статистикой. В течение одной сессии всё работает прекрасно, данные спокойно перетекают по сценам. НО! Стоит выключить игру, как все данные сбрасываются к дефолтным.
Может кто-нибудь подсказать, как мне, блин, сохранить это по нормальному?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine.SceneManagement;
public class SaveLoad: MonoBehaviour
{
[SerializeField] public Profile profile;
public string Nickname;
public int numNoobGames;
public int noobScore;
public int noobCombo;
public int noobDeaths;
public int numMidGames;
public int midScore;
public int midCombo;
public int midDeaths;
public int numProGames;
public int proScore;
public int proCombo;
public int proDeaths;
[SerializeField] public Themes themes;
public int colorNumber;
private void Start() {
Nickname = profile.Nickname;
numNoobGames = profile.numNoobGames;
noobScore = profile.noobScore;
noobCombo = profile.noobCombo;
noobDeaths = profile.noobDeaths;
numMidGames = profile.numMidGames;
midScore = profile.midScore;
midCombo = profile.midCombo;
midDeaths = profile.midDeaths;
numProGames = profile.numProGames;
proScore = profile.proScore;
proCombo = profile.proCombo;
proDeaths = profile.proDeaths;
colorNumber = themes.colorNumber;
if(SceneManager.GetActiveScene().name == "Main"){
LoadGame();
}
}
public void SaveGame(){
SaveData sv = new SaveData();
sv.SaveGame();
}
public void LoadGame(){
SaveData sv = new SaveData();
sv.LoadGame();
}
public void LoadData(){
profile.Nickname = Nickname;
profile.numNoobGames = numNoobGames;
profile.noobScore = noobScore;
profile.noobCombo = noobCombo;
profile.noobDeaths = noobDeaths;
profile.numMidGames = numMidGames;
profile.midScore = midScore;
profile.midCombo = midCombo;
profile.midDeaths = midDeaths;
profile.numProGames = numProGames;
profile.proScore = proScore;
profile.proCombo = proCombo;
profile.proDeaths = proDeaths;
}
public void ResetData(){
SaveData sv = new SaveData();
sv.ResetData();
}
}
[Serializable]
class SaveData
{
public string Nickname;
public int numNoobGames;
public int noobScore;
public int noobCombo;
public int noobDeaths;
public int numMidGames;
public int midScore;
public int midCombo;
public int midDeaths;
public int numProGames;
public int proScore;
public int proCombo;
public int proDeaths;
public int colorNumber;
public void SaveGame(){
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create("D:/UDocuments/hc/Save/MySave.dat");
SaveLoad sl = new SaveLoad();
SaveData data = new SaveData();
data.Nickname = sl.Nickname;
data.numNoobGames = sl.numNoobGames;
data.noobScore = sl.noobScore;
data.noobCombo = sl.noobCombo;
data.noobDeaths = sl.noobDeaths;
data.numMidGames = sl.numMidGames;
data.midScore = sl.midScore;
data.midCombo = sl.midCombo;
data.midDeaths = sl.midDeaths;
data.numProGames = sl.numProGames;
data.proScore = sl.proScore;
data.proCombo = sl.proCombo;
data.proDeaths = sl.proDeaths;
data.colorNumber = sl.colorNumber;
bf.Serialize(file, data);
file.Close();
Debug.Log("Save complete");
}
public void LoadGame(){
if(File.Exists("D:/UDocuments/hc/Save/MySave.dat")){
Debug.Log("File find!");
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open("D:/UDocuments/hc/Save/MySave.dat",FileMode.Open);
SaveData data = (SaveData)bf.Deserialize(file);
SaveLoad sl = new SaveLoad();
sl.Nickname = data.Nickname;
sl.numNoobGames = data.numNoobGames;
sl.noobScore = data.noobScore;
sl.noobCombo = data.noobCombo;
sl.noobDeaths = data.noobDeaths;
sl.numMidGames = data.numMidGames;
sl.midScore = data.midScore;
sl.midCombo = data.midCombo;
sl.midDeaths = data.midDeaths;
sl.numProGames = data.numProGames;
sl.proScore = data.proScore;
sl.proCombo = data.proCombo;
sl.proDeaths = data.proDeaths;
sl.colorNumber = data.colorNumber;
file.Close();
sl.LoadData();
Debug.Log("File load!");
}
}
public void ResetData(){
if(File.Exists("D:/UDocuments/hc/Save/MySave.dat")){
File.Delete("D:/UDocuments/hc/Save/MySave.dat");
SaveLoad sl = new SaveLoad();
sl.numNoobGames = 0;
sl.noobScore = 0;
sl.noobCombo = 0;
sl.noobDeaths = 0;
sl.numMidGames = 0;
sl.midScore = 0;
sl.midCombo = 0;
sl.midDeaths = 0;
sl.numProGames = 0;
sl.proScore = 0;
sl.proCombo = 0;
sl.proDeaths = 0;
Debug.Log("File delet!");
}
}
}
ScriptableObject
это способ хранения, а не сохранения и загрузки. Сериализация не так работает.
Вам нужно представление SaveData
в виде Json и сохранить через PlayerPrefs.SetString().
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу понять, почему мой BackgroundService (NET Core 3
Пользователь создаёт запись в файлеДалее, если нужно, он может переписать нужную запись
В общем, имеются в программе события, одно из них-CollectionCountChanged, которое генерируется функцией OnCollectionCountChanged:
Формат содержимого файла: дата,фамилия сотрудника,кол-во часов роботы,проделанная работа