I'm creating a game which stores a few variables using PlayerPrefs. It saves and loads the PlayerPrefs perfectly fine while testing in the editor, however when I build it to WebGL or Unity Web Player, both of them fail to save or load (I don't know which fails) and WebGL throws an exception on loading. Heres the c# script. Loading and saving are in their own procedures: loadData() and saveData()
public decimal money = 0;
public Text moneyTxt;
public Modal modal;
public AudioSource clickSFX;
private bool hasLoaded = false;
public Prog lemonadeStand;
public Prog newspaperDelivery;
public GameObject newspaperDeliveryBuy;
public Prog carWash;
public GameObject carWashBuy;
void Start () {
askToLoad ();
}
// Update is called once per frame
void Update () {
moneyTxt.text = "$" + money.ToString ("F2");
if (Input.GetButtonDown ("Fire1")) {
clickSFX.Play();
}
}
void OnApplicationQuit() {
if (hasLoaded) {
saveData ();
}
}
void saveData () {
PlayerPrefs.SetString ("SaveMoney", money.ToString ());
PlayerPrefs.SetFloat ("LemonadeStandMultiplier", lemonadeStand.multiplier);
PlayerPrefs.SetFloat ("LemonadeStandUpgradeCost", lemonadeStand.upgradeCost);
PlayerPrefs.SetInt ("LemonadeStandHired", lemonadeStand.hired ? 1 : 0);
PlayerPrefs.SetFloat ("LemonadeStandPercentage", lemonadeStand.percentage);
PlayerPrefs.SetFloat ("LemonadeStandTimeMultiplier", lemonadeStand.timeMultiplier);
if (newspaperDelivery.transform.parent.gameObject.activeSelf) {
PlayerPrefs.SetFloat ("NewspaperDeliveryMultiplier", newspaperDelivery.multiplier);
PlayerPrefs.SetFloat ("NewspaperDeliveryUpgradeCost", newspaperDelivery.upgradeCost);
PlayerPrefs.SetInt ("NewspaperDeliveryHired", newspaperDelivery.hired ? 1 : 0);
PlayerPrefs.SetFloat ("NewspaperDeliveryPercentage", newspaperDelivery.percentage);
PlayerPrefs.SetInt ("NewspaperDeliveryBought", newspaperDelivery.bought ? 1 : 0);
PlayerPrefs.SetFloat ("NewspaperDeliveryTimeMultiplier", newspaperDelivery.timeMultiplier);
} else {
PlayerPrefs.SetInt ("NewspaperDeliveryBought", newspaperDelivery.bought ? 1 : 0);
}
if (carWash.transform.parent.gameObject.activeSelf) {
PlayerPrefs.SetFloat ("CarWashMultiplier", carWash.multiplier);
PlayerPrefs.SetFloat ("CarWashUpgradeCost", carWash.upgradeCost);
PlayerPrefs.SetInt ("CarWashHired", carWash.hired ? 1 : 0);
PlayerPrefs.SetFloat ("CarWashPercentage", carWash.percentage);
PlayerPrefs.SetInt ("CarWashBought", carWash.bought ? 1 : 0);
PlayerPrefs.SetFloat ("CarWashTimeMultiplier", carWash.timeMultiplier);
} else {
PlayerPrefs.SetInt ("CarWashBought", carWash.bought ? 1 : 0);
}
PlayerPrefs.Save ();
}
void loadData () {
money = decimal.Parse(PlayerPrefs.GetString("SaveMoney"));
lemonadeStand.multiplier = PlayerPrefs.GetFloat ("LemonadeStandMultiplier");
lemonadeStand.upgradeCost = PlayerPrefs.GetFloat ("LemonadeStandUpgradeCost");
lemonadeStand.hired = PlayerPrefs.GetInt ("LemonadeStandHired") == 1 ? true : false;
if (lemonadeStand.hired) { lemonadeStand.enable(); lemonadeStand.percentage = PlayerPrefs.GetFloat ("LemonadeStandPercentage");}
lemonadeStand.timeMultiplier = PlayerPrefs.GetFloat ("LemonadeStandTimeMultiplier");
if (PlayerPrefs.GetInt ("NewspaperDeliveryBought") == 1) {
newspaperDelivery.multiplier = PlayerPrefs.GetFloat ("NewspaperDeliveryMultiplier");
newspaperDelivery.upgradeCost = PlayerPrefs.GetFloat ("NewspaperDeliveryUpgradeCost");
newspaperDelivery.hired = PlayerPrefs.GetInt ("NewspaperDeliveryHired") == 1 ? true : false;
if (newspaperDelivery.hired) {
newspaperDelivery.enable ();
newspaperDelivery.percentage = PlayerPrefs.GetFloat ("NewspaperDeliveryPercentage");
}
newspaperDelivery.transform.parent.gameObject.SetActive (true);
newspaperDeliveryBuy.SetActive (false);
newspaperDelivery.timeMultiplier = PlayerPrefs.GetFloat ("NewspaperDeliveryTimeMultiplier");
}
if (PlayerPrefs.GetInt ("CarWashBought") == 1) {
carWash.multiplier = PlayerPrefs.GetFloat ("CarWashMultiplier");
carWash.upgradeCost = PlayerPrefs.GetFloat ("CarWashUpgradeCost");
carWash.hired = PlayerPrefs.GetInt ("CarWashHired") == 1 ? true : false;
if (carWash.hired) {
carWash.enable ();
carWash.percentage = PlayerPrefs.GetFloat ("CarWashPercentage");
}
carWash.transform.parent.gameObject.SetActive (true);
carWashBuy.SetActive (false);
carWash.timeMultiplier = PlayerPrefs.GetFloat ("CarWashTimeMultiplier");
}
hasLoaded = true;
}
void askToLoad () {
modal.choice ("Load previous save?", loadData, dontLoad, null, "Yes", "No", null);
}
void dontLoad () {
modal.choice ("Not loading will reset your progress, this cannot be undone!", loadData, reset, null, "Load the save", "Reset everything, I'm sure!", null);
}
void reset() {
PlayerPrefs.DeleteAll ();
hasLoaded = true;
}