Quantcast
Channel: Questions in topic: "ios"
Viewing all articles
Browse latest Browse all 4709

Serialization of Dictionary> in Unity 4,6

$
0
0
I have this Dictionary that I want to serialize with a BinaryFormatter. I have already used this line in the Awake method of my Singleton : `System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");` This allowed me to serialzie every other object that I have in my code. But when I added a Dictionary yesterday the code stopped working and I get a ExecitonEngineException: Attempting to JIT compile method 'System.Collections.Generic.Dictionary'. This is my entire code: using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System.Security; using System.Security.Cryptography; using System.Text; using System.Runtime.InteropServices; using UnityEngine.UI; public class DataHolder : MonoBehaviour { public static DataHolder holder; public string selectedChar; public RectTransform mapTransform; public int coinAmount, upgradeLevel ; public int levelIndex; private Vector2 tempVect; public float spawnTime; public Level_Data[] level_data; // public UpgradeData[] upgrade_data; public CharacterUpgradeList charUpgradeList; private GameObject[] level_plates; private GameObject[] upgrade_plates; void OnLevelWasLoaded(int level) { if (level == 0) mapTransform = GameObject.FindGameObjectWithTag("MapHolder").GetComponent(); } void Update() { if (Application.platform == RuntimePlatform.Android) { int i = 0; if (Input.GetKeyDown(KeyCode.Escape)) i++;// maybe display a msg here for android users that they need to press back again to exit. if (i == 2) Application.Quit(); } if(Application.loadedLevel == 0 && mapTransform !=null) { tempVect = mapTransform.anchoredPosition; } } void OnEnable() { System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes"); if (mapTransform == null && Application.loadedLevel == 0) { mapTransform = GameObject.FindGameObjectWithTag("MapHolder").GetComponent(); } if (File.Exists(Application.persistentDataPath + "/savedgame.dat")) { GameData data = new GameData(); BinaryFormatter binFormatter = new BinaryFormatter(); string filename = Application.persistentDataPath + "/savedgame.dat"; FileStream file = File.Open(filename, FileMode.Open,FileAccess.Read,FileShare.ReadWrite); data = (GameData)binFormatter.Deserialize(file) ; file.Close(); for (int i=0; i < data._level_Data.Length; i++) { level_data[i] = data._level_Data[i]; } //for (int i = 0; i < data._upgrade_Data.Length; i++) //{ // upgrade_data[i] = data._upgrade_Data[i]; //} foreach (KeyValuePair> entry in data._charUpgradeList.upgradeList) { for (int i = 0; i < data._charUpgradeList.upgradeList[entry.Key].Count; i++) { charUpgradeList.upgradeList[entry.Key][i] = entry.Value[i]; } } mapTransform.anchoredPosition =data.serialVector.returnVector2(); coinAmount = data._coinAmount; upgradeLevel = data._upgradeLevel; } } void Awake() { selectedChar = "Man"; InitiliazeLevelDataArray(); //InitiliazeUpgradeDataArray(); upgradeLevel = -1; Application.runInBackground = false; if (Application.platform == RuntimePlatform.IPhonePlayer) { System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes"); } if (holder == null) { DontDestroyOnLoad(gameObject); holder = this; } else if (holder != this) { Destroy(gameObject); } } void OnDisable() { BinaryFormatter binFormatter = new BinaryFormatter(); string filename = Application.persistentDataPath + "/savedgame.dat"; FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); GameData data = new GameData(); data._level_Data = new Level_Data[level_data.Length]; // data._upgrade_Data = new UpgradeData[upgrade_data.Length]; for (int i = 0; i < level_data.Length; i++) { data._level_Data[i] = level_data[i]; } //for (int i = 0; i < upgrade_data.Length; i++) //{ // data._upgrade_Data[i] = upgrade_data[i]; // if (upgrade_data[i].purchased == true) // upgradeLevel = i; //} foreach(KeyValuePair> entry in charUpgradeList.upgradeList) { for (int i = 0; i < charUpgradeList.upgradeList[entry.Key].Count; i++ ) { data._charUpgradeList.upgradeList[entry.Key][i] = entry.Value[i]; } } data._coinAmount = coinAmount; data.serialVector = new SerialVector2(tempVect); data._upgradeLevel = upgradeLevel; binFormatter.Serialize(file, data); file.Close(); } void OnApplicationPause(bool pauseStatus) { BinaryFormatter binFormatter = new BinaryFormatter(); string filename = Application.persistentDataPath + "/savedgame.dat"; FileStream file = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); GameData data = new GameData(); data._level_Data = new Level_Data[level_data.Length]; // data._upgrade_Data = new UpgradeData[upgrade_data.Length]; for (int i = 0; i < level_data.Length; i++) { data._level_Data[i] = level_data[i]; } //for (int i = 0; i < upgrade_data.Length; i++) //{ // data._upgrade_Data[i] = upgrade_data[i]; // if (upgrade_data[i].purchased == true) // upgradeLevel = i ; //} foreach (KeyValuePair> entry in charUpgradeList.upgradeList) { for (int i = 0; i < charUpgradeList.upgradeList[entry.Key].Count; i++) { data._charUpgradeList.upgradeList[entry.Key][i] = entry.Value[i]; } } data._coinAmount = coinAmount; data._upgradeLevel = upgradeLevel; data.serialVector = new SerialVector2(tempVect); binFormatter.Serialize(file, data); file.Close(); } private void InitiliazeLevelDataArray() { bool flag = false; if (flag == false) { level_plates = GameObject.FindGameObjectsWithTag("Level_Tag"); level_data = new Level_Data[level_plates.Length]; for (int i = 0; i < level_plates.Length; i++) { level_data[i] = new Level_Data(); } flag = true; try { if (level_data[0].completion_status == 0) level_data[0].completion_status = 2; } catch (IndexOutOfRangeException ) { } } } //private void InitiliazeUpgradeDataArray() //{ // bool flag = false; // if (flag == false) // { // flag = true; // upgrade_plates = GameObject.FindGameObjectsWithTag("Upgrade_Tag"); // upgrade_data = new UpgradeData[upgrade_plates.Length]; // for (int i = 0; i < upgrade_plates.Length; i++) // { // upgrade_data[i] = new UpgradeData(); // } // } //} } [Serializable] class GameData { public int _coinAmount, _upgradeLevel; public Level_Data[] _level_Data; public CharacterUpgradeList _charUpgradeList; public SerialVector2 serialVector; public GameData() { _charUpgradeList = new CharacterUpgradeList(); } } [Serializable] public class CharacterUpgradeList { private UpgradeData[] _upgrade_Data; private List[] upgData; public Dictionary> upgradeList; public CharacterUpgradeList() { upgData = new List[4]; for (int i = 0; i < upgData.Length; i++) { upgData[i] = new List { new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData() }; } upgradeList = new Dictionary> { {"Man",upgData[0]}, {"Woman",upgData[1]}, {"Boy",upgData[2]}, {"Girl",upgData[3]} }; } } [Serializable] public class Level_Data { public int completion_status; public int star_Rating; } [Serializable] public class UpgradeData { public bool lockStatus; public bool purchased; } [Serializable] public struct SerialVector2 { public float x; public float y; public SerialVector2(Vector2 vect) { x = vect.x; y = vect.y; } public Vector2 returnVector2() { return new Vector2(x,y); } }

Viewing all articles
Browse latest Browse all 4709

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>