Я работаю над игрой. У меня есть класс ProgressControl, который отслеживает прогресс игроков, сохраняет и загружает его в двоичный файл. Сериализация золота и очков работает. Теперь я хочу добавить Hashtable, чтобы сохранить очки для каждого уровня, чтобы ограничить максимальное количество очков, которое игрок может получить на каждом уровне. Но Hashtable в Serializable Class никогда не назначается и остается нулевым. Таким образом, очки не сохраняются.
Как я могу получить сериализованный Hashtable? Чего мне не хватает?
using UnityEngine;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections;
public class ProgressControl : MonoBehaviour
{
public static ProgressControl progress;
public int gold;
public int points;
public int level;
public Hashtable h;
void Awake()
{
h = new Hashtable();
if (progress == null)
{
DontDestroyOnLoad(gameObject);
progress = this;
}
else if (progress != this)
{
Destroy(gameObject);
}
}
public void save()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");
PlayerData data = new PlayerData();
data.gold = gold;
data.points = points;
data.h = h;
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();
gold = data.gold;
points = data.points;
h = data.h;
}
}
public void saveLevel()
{
level = TargetScript.activeLevel;
Debug.Log("Level Saved");
}
public void savePointsToHashMap(int LevelKey, int points)
{
if (h.ContainsKey(LevelKey))
{
object value = h[LevelKey];
int compare = int.Parse(value.ToString());
if (compare < points)
{
h.Add(LevelKey, points);
Debug.Log("Overwrite and Save Points");
}
}
else{
Debug.Log("Save Points");
h.Add(LevelKey, points);
}
save();
}
}
[Serializable]
class PlayerData
{
public int gold;
public int points;
public Hashtable h;
}