- Home /
Question by
dreadthread · Sep 04, 2016 at 03:37 PM ·
loadingsavingloading file
SerializationException: serializationStream supports seeking, but its length is 0 when trying to load a save game
For whatever reason, my saving and loading code does not work as the save file always turns out to be blank for a reason that I cannon decipher. Here is my code:
public class SaveManager : MonoBehaviour {
public static SaveManager saveManager;
private HealthController healthController;
// Use this for initialization
void Awake () {
healthController = GameObject.FindObjectOfType<HealthController>();
if(saveManager == null)
{
DontDestroyOnLoad(gameObject);
saveManager = this;
}else if (saveManager != this)
{
Destroy(gameObject);
}
}
public void Save()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");
PlayerData data = new PlayerData();
data.damage = Player.damage;
data.shotspeed = Player.speedOfLaser;
data.speed = Player.speed;
data.fireRate = Player.firingRate;
data.currentHealth = healthController.currentHealth;
data.maxHealth = HealthController.maxHealth;
data.skillPoints = Player.skillPoints;
data.currentDamageUpgrades = UpgradeManager.currentDamageUpgrades;
data.currentMaxHealthUpgrades = UpgradeManager.currentMaxHealthUpgrades;
data.currentSpeedUpgrades = UpgradeManager.currentSpeedUpgrades;
data.currentShotSpeedUpgrades = UpgradeManager.currentShotSpeedUpgrades;
data.currentFiringRateUpgrades = UpgradeManager.currentFiringRateUpgrades;
data.currentWave = WaveSpawner.currentWave;
data.nextWave = WaveSpawner.nextWave;
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();
Player.damage = data.damage;
Player.speedOfLaser = data.shotspeed;
Player.speed = data.speed;
Player.firingRate = data.fireRate;
healthController.currentHealth = data.currentHealth;
HealthController.maxHealth = data.maxHealth;
Player.skillPoints = data.skillPoints;
UpgradeManager.currentDamageUpgrades = data.currentDamageUpgrades;
UpgradeManager.currentMaxHealthUpgrades = data.currentMaxHealthUpgrades;
UpgradeManager.currentSpeedUpgrades = data.currentSpeedUpgrades;
UpgradeManager.currentShotSpeedUpgrades = data.currentShotSpeedUpgrades;
UpgradeManager.currentFiringRateUpgrades = data.currentFiringRateUpgrades;
WaveSpawner.currentWave = data.currentWave;
WaveSpawner.nextWave = data.nextWave;
}
}
}
[Serializable]
class PlayerData
{
public float shotspeed, speed, fireRate;
public int damage, currentHealth, maxHealth, skillPoints, currentDamageUpgrades, currentMaxHealthUpgrades, currentSpeedUpgrades, currentShotSpeedUpgrades, currentFiringRateUpgrades;
public int currentWave, nextWave;
}
Comment
Answer by dreadthread · Sep 04, 2016 at 03:23 PM
I figured out the answer. The problem was with the DontDestroyOnLoad. I removed that and everything worked!
Your answer
Follow this Question
Related Questions
Load file on Android 1 Answer
Newbie questions! (Variables and Saving) 2 Answers
Saving Levels 2 Answers
Saving/Loading Problems 1 Answer
What is the best way to load an instance of a gameObject when loading a saved game? 0 Answers