So I’ve been working on this game and there’s a big issue when I go to run it on the phone ( Galaxy Note5) is that it doesn’t keep any of the data if the game is force closed or reset for some reason. As well when I exit the game it doesn’t fully close unless you close it from the program menu but that seems to reset the info as well. here’s my script:
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class GameStatsSc : MonoBehaviour {
public static GameStatsSc GameStats;
public int soapChipsObtained;
public int soapBarsObtained;
public float metersTraveled;
public bool hasRevive;
public int numberOfRevives;
public bool usedRevive;
public bool hasTwoHundred;
public int numberOfTwoHundreds;
public bool hasOneThousand;
public int numberOfOneThousands;
public bool hasBlackBody;
public bool hasBlackBodyEquipped;
public bool hasRedBody;
public bool hasRedBodyEquipped;
public bool hasGoldBody;
public bool hasGoldBodyEquipped;
public bool hasArmoredBody;
public bool hasArmoredBodyEquipped;
public bool hasFireBody;
public bool hasFireBodyEquipped;
void Awake () {
Debug.Log (Application.persistentDataPath);
if (GameStats == null) {
DontDestroyOnLoad (gameObject);
GameStats = this;
} else if (GameStats != this) {
Destroy (gameObject);
}
Load ();
}
void OnEnable(){
Load ();
}
void OnDisable(){
Save ();
}
public void Save(){
BinaryFormatter bf = new BinaryFormatter ();
FileStream file = File.Create (Application.persistentDataPath + "/roundmanplayerInfo.dat");
PlayerData data = new PlayerData ();
data.soapChipsObtained = soapChipsObtained;
data.SoapBarsObtained = soapBarsObtained;
data.metersTraveled = metersTraveled;
data.hasRevive = hasRevive;
data.numberOfRevives = numberOfRevives;
data.hasTwoHundred = hasTwoHundred;
data.numberOfTwoHundreds = numberOfTwoHundreds;
data.hasOneThousand = hasOneThousand;
data.numberOfOneThousands = numberOfOneThousands;
data.hasBlackBody = hasBlackBody;
data.hasRedBody = hasRedBody;
data.hasGoldBody = hasGoldBody;
data.hasArmoredBody = hasArmoredBody;
data.hasFireBody = hasFireBody;
bf.Serialize (file, data);
file.Close ();
}
public void Load(){
if (File.Exists (Application.persistentDataPath + "/roundmanplayerInfo.dat")) {
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open (Application.persistentDataPath + "/roundmanplayerInfo.dat",FileMode.Open);
PlayerData data = (PlayerData)bf.Deserialize (file);
file.Close ();
soapChipsObtained = data.soapChipsObtained;
soapBarsObtained = data.SoapBarsObtained;
metersTraveled = data.metersTraveled;
hasRevive = data.hasRevive;
numberOfRevives = data.numberOfRevives;
hasTwoHundred = data.hasTwoHundred;
numberOfTwoHundreds = data.numberOfTwoHundreds;
hasOneThousand = data.hasOneThousand;
numberOfOneThousands = data.numberOfOneThousands;
hasBlackBody = data.hasBlackBody;
hasRedBody = data.hasRedBody;
hasGoldBody = data.hasGoldBody;
hasArmoredBody = data.hasArmoredBody;
hasFireBody = data.hasFireBody;
}
}
}
[Serializable]
class PlayerData
{
public int soapChipsObtained;
public int SoapBarsObtained;
public float metersTraveled;
public bool hasRevive;
public int numberOfRevives;
public bool hasTwoHundred;
public int numberOfTwoHundreds;
public bool hasOneThousand;
public int numberOfOneThousands;
public bool hasBlackBody;
public bool hasRedBody;
public bool hasGoldBody;
public bool hasArmoredBody;
public bool hasFireBody;
}
I’m not sure what to do otherwise as it works with the computer Unity engine but not the phone. Please assist.