- Home /
Question by
Misthra-Games · Nov 09, 2016 at 02:42 AM ·
serializationsaveloadscriptableobjectpersistence
Unity Not Loading
Hi! I am trying to iplement a save nad load system into my game, but when i port it to android there is a problem. The saving and loading for cash works fine, but if i save before i buy an object in the store, then buy it, then load back to before i bought it, it is already bought.
This is my save/load script in my game controller: using UnityEngine; using System.Collections; using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System.Collections.Generic;
public class GameControl : MonoBehaviour {
public static GameControl control;
private cashSystem cS;
public itemObjects[] fI;
public List<bool> fIBought;
public GameObject flippableInScene;
public Vector3 spawn;
private ElementNumber eN;
private int elNum;
// Use this for initialization
void Awake() {
/*control = this;
if (control == null) {
DontDestroyOnLoad (gameObject);
control = this;
}
else if (control != this) {
Destroy (gameObject);
}*/
}
void Start () {
fIBought = new List<bool>();
spawn = new Vector3(0, .5f, 0);
cS = gameObject.GetComponent<cashSystem> ();
if (File.Exists (Application.persistentDataPath + "/playerInfo.dat")) {
Load ();
}
}
// Update is called once per frame
void Update () {
}
public void Save() {
BinaryFormatter bf = new BinaryFormatter ();
if (File.Exists (Application.persistentDataPath + "/playerInfo.dat")) {
File.Delete (Application.persistentDataPath + "/playerInfo.dat");
}
FileStream file = File.Create (Application.persistentDataPath + "/playerInfo.dat");
PlayerData data = new PlayerData ();
data.cash = cS.getCashAmount ();
flippableInScene = GameObject.FindGameObjectWithTag ("flippable");
eN = flippableInScene.GetComponent<ElementNumber> ();
elNum = eN.getElement ();
foreach (itemObjects i in fI) {
if (i.bought == true) {
fIBought.Add (true);
}
if (i.bought == false) {
fIBought.Add (false);
}
}
bf.Serialize (file, data);
file.Close();
}
public void Load() {
if (File.Exists(Application.persistentDataPath + "/playerInfo.dat")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream file = File.Open (Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
PlayerData data = (PlayerData)bf.Deserialize (file);
file.Close();
Destroy (GameObject.FindGameObjectWithTag("flippable"));
cS.setCash (data.cash);
Instantiate (fI[elNum].gameObj, spawn, Quaternion.identity);
foreach (bool b in fIBought) {
int i = 0;
if(b == false) {
fI [i].bought = false;
i++;
}
if(b == true) {
fI [i].bought = true;
i++;
}
}
Debug.Log ("Loaded");
}
}
}
[Serializable]
class PlayerData {
public float cash;
}
This is my store script:
using UnityEngine;
using System.Collections;
public class flippableItemShopButton : MonoBehaviour {
private cashSystem cS;
private GameObject sM;
private GameObject currentFlippable;
private GameObject flippableHolder;
public int itemNumber;
private Vector3 spawnPoint;
private GameControl cont;
// Use this for initialization
void Awake() {
}
void Start () {
sM = GameObject.Find ("sceneMaster");
cont = sM.GetComponent<GameControl> ();
cS = sM.GetComponent<cashSystem>();
flippableHolder = GameObject.Find ("flippableHolder");
currentFlippable = GameObject.FindGameObjectWithTag ("flippable");
spawnPoint = new Vector3 (0, .5f, 0);
if (gameObject.CompareTag("FILock")) {
if (cont.fI[itemNumber].bought == true) {
Destroy (gameObject);
}
}
}
public void onClick() {
if (cS.getCashAmount () >= cont.fI [itemNumber].cost && cont.fI [itemNumber].bought == false) {
currentFlippable = GameObject.FindGameObjectWithTag ("flippable");
cS.spendCash (cont.fI[itemNumber].cost);
cont.fI [itemNumber].bought = true;
Destroy (currentFlippable);
Instantiate (cont.fI[itemNumber].gameObj, spawnPoint, Quaternion.identity);
} else if (cS.getCashAmount () <= cont.fI [itemNumber].cost && cont.fI [itemNumber].bought == false) {
Debug.Log ("idiot");
}
else if(cont.fI [itemNumber].bought == true) {
currentFlippable = GameObject.FindGameObjectWithTag ("flippable");
Destroy (currentFlippable);
Instantiate (cont.fI[itemNumber].gameObj, spawnPoint, Quaternion.identity);
}
}
public void onboughtClick() {
currentFlippable = GameObject.FindGameObjectWithTag ("flippable");
Destroy (currentFlippable);
Instantiate (cont.fI[itemNumber].gameObj, spawnPoint, Quaternion.identity);
}
public void destroyLockIfBought() {
if (gameObject.CompareTag("FILock")) {
if (cont.fI [itemNumber].bought == true) {
Destroy (gameObject);
}
}
}
// Update is called once per frame
void Update () {
}
}
Comment