Serializing name of the current level
Hi, everyone. I've figured out how to serialize most of the data I need to save and load by watching the tutorial on the Unity website but I need help serializing the name of the level and then opening that level with the data that the save game file has which is something that not many tutorials really talk about.
I've got my code set up to use the SceneManager.GetActiveScene and then serialize that but it's not working. Wondering if someone could help me figure out what's going wrong here.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;
public class playerScript : MonoBehaviour {
public string playerName;
public string species;
public int gold;
public string location;
public Scene activeScene;
// Use this for initialization
void Awake () {
gold = 0;
species = "";
location = "";
playerName = "";
activeScene = SceneManager.GetActiveScene();
}
public void Save()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/save.dat", FileMode.Create);
playerData data = new playerData();
data.playerNME = playerName;
data.playerSpecies = species;
data.playerGold = gold;
data.currentLevel = activeScene;
bf.Serialize(file, data);
file.Close();
}
public void Load()
{
if (File.Exists(Application.persistentDataPath + "/save.dat"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/save.dat", FileMode.Open);
playerData data = (playerData)bf.Deserialize(file);
file.Close();
playerName = data.playerNME;
species = data.playerSpecies;
gold = data.playerGold;
SceneManager.SetActiveScene(data.currentLevel);
}
}
}
[Serializable]
class playerData
{
public string playerNME;
public string playerSpecies;
public int playerGold;
public Scene currentLevel;
}
Answer by redTurkey · Jul 25, 2017 at 03:40 PM
Nevermind, I had a brainfart. All i did to fix this problem was give each level a unique ID and change the public Scene activeScene to a string. The load function then loads that string with SceneManager.LoadScene("activeScene");
I'm an idiot. Peace out.