Im trying to set up a save for the users data. I set it up so that if there is no save file(Which means its the first load), it will credit the player with some items. But it does not seem to save, as it comes up as 0 the next time it runs. Anyone see what im doing wrong?
The persistent script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class PersistentData : MonoBehaviour {
public static PersistentData dataObject;
//Persistent Data here
public int amps = 0;
//Capacitors
public int cap1v;
public int cap3v;
public int cap5v;
public int cap9v;
public int cap12v;
public int cap24v;
//Statistics
public int totalDistance;
public int lifetimeAmps;
public int totalCapsUsed;
public float lifetimeTimeInSeconds;
public int numberOfRuns;
public int distanceRecordNoCaps;
public int distanceRecordWithCaps;
public float highestAvgVoltage;
public float longestRunInSeconds;
public float highestAmpsEarned;
//check if this object already exists and make sure its not destroyed every level
private void Awake()
{
if (dataObject == null)
{
DontDestroyOnLoad(gameObject);
dataObject = this;
}
else if (dataObject != this)
{
Destroy(gameObject);
}
}
public void Save()
{
//setup for saving
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");
//Add the data here too
PlayerData data = new PlayerData();
data.amps = amps;
data.cap1v = cap1v;
data.cap3v = cap3v;
data.cap5v = cap5v;
data.cap9v = cap9v;
data.cap12v = cap12v;
data.cap24v = cap24v;
//Statistics
data.totalDistance = totalDistance;
data.lifetimeAmps = lifetimeAmps;
data.totalCapsUsed = totalCapsUsed;
data.lifetimeTimeInSeconds = lifetimeTimeInSeconds;
data.numberOfRuns = numberOfRuns;
data.distanceRecordNoCaps = distanceRecordNoCaps;
data.distanceRecordWithCaps = distanceRecordWithCaps;
data.highestAvgVoltage = highestAvgVoltage;
data.longestRunInSeconds = longestRunInSeconds;
data.highestAmpsEarned = highestAmpsEarned;
//actually writing the data
bf.Serialize(file, data);
file.Close();
}
public void Load()
{
if (File.Exists(Application.persistentDataPath + "/playerInfo.dat"))
{
print("Save File Found");
//setup for loading
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
PlayerData data = (PlayerData)bf.Deserialize(file);
//Data Here Too
amps = data.amps;
data.cap1v = cap1v;
data.cap3v = cap3v;
data.cap5v = cap5v;
data.cap9v = cap9v;
data.cap12v = cap12v;
data.cap24v = cap24v;
//Statistics
data.totalDistance = totalDistance;
data.lifetimeAmps = lifetimeAmps;
data.totalCapsUsed = totalCapsUsed;
data.lifetimeTimeInSeconds = lifetimeTimeInSeconds;
data.numberOfRuns = numberOfRuns;
data.distanceRecordNoCaps = distanceRecordNoCaps;
data.distanceRecordWithCaps = distanceRecordWithCaps;
data.highestAvgVoltage = highestAvgVoltage;
data.longestRunInSeconds = longestRunInSeconds;
data.highestAmpsEarned = highestAmpsEarned;
file.Close();
}
else if(!File.Exists(Application.persistentDataPath + "/playerInfo.dat")) //If no save file, default the settings
{
print("No Save File Found");
dataObject.cap1v = 3;
Save();
}
}
private void Update()
{
print(dataObject.cap1v);
}
}
[Serializable]
class PlayerData {
//Persistent Data goes here
public int amps = 0;
//Capacitors
public int cap1v = 0;
public int cap3v = 0;
public int cap5v = 0;
public int cap9v = 0;
public int cap12v = 0;
public int cap24v = 0;
//Statistics
public int totalDistance;
public int lifetimeAmps;
public int totalCapsUsed;
public float lifetimeTimeInSeconds;
public int numberOfRuns;
public int distanceRecordNoCaps;
public int distanceRecordWithCaps;
public float highestAvgVoltage;
public float longestRunInSeconds;
public float highestAmpsEarned;
}
And the script im trying to access it with:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MainMenuUI : MonoBehaviour {
public Text capText;
public Text ampText;
private int capCount;
private int ampCount;
private void Awake()
{
}
// Use this for initialization
void Start () {
PersistentData.dataObject.Load(); //Load data
ampCount = PersistentData.dataObject.amps; //Load Correct Amp Count
LoadCapCount(); //Load the total Cap count
ampText.text = ((int)ampCount).ToString(); //Set amp count on UI
capText.text = ((int)capCount).ToString(); //Set amp count on UI
}
// Update is called once per frame
void Update () {
}
void LoadCapCount()
{
capCount =
PersistentData.dataObject.cap1v +
PersistentData.dataObject.cap3v +
PersistentData.dataObject.cap5v +
PersistentData.dataObject.cap9v +
PersistentData.dataObject.cap12v +
PersistentData.dataObject.cap24v;
}
}