Задать вопрос
Zefirot
@Zefirot

Как сохранить словарь с префабами в текстовом документе?

У меня есть словарь типа DictionaryPrefabs = new Dictionary(); , ClassPrefab это префаб с классом, в нём самые разные переменные (int, string, bool, Dictionary, Array....), мне нужно сохранить состояние словаря DictionaryPrefabs со всеми префабами и данными в них, как это сделать?

А может и можно просто саму сцену сохранить?
У меня есть игровая сцена и функция "Сохранить и выйти", игрок может либо загрузить сохранение либо начать сцену с чистого листа, то есть нескольких сохранений нет...
  • Вопрос задан
  • 35 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@NoNameDeveloper
Unity Developer
Ты можешь сохранять в ручную через BinaryWriter, BinaryReader или же Json. Сами префабы нельзя сохранять, а вот их данные можно.

Вот тебе простая реализация как можно данные сохранить. (код я не проверил на работоспособность, но тем не менее)

public interface IData
{
	void Read(BinaryReader reader);
	void Write(BinaryWriter writer);
}

public class CustomClass : IData
{
	private int _customVar;

	public void Write(BinaryWriter writer)
	{
		writer.Write(_customVar);
	}

	public void Read(BinaryReader reader)
	{
		_customVar = reader.ReadInt32();
	}
}

public class PrefabClass: MonoBehaviour, IData
{
	private int _intValue;
	private float _floatValue;
	private string _stringValue;

	private CustomClass _customClass;

	public void Write(BinaryWriter writer)
	{
		writer.Write(_intValue);
		writer.Write(_floatValue);
		writer.Write(_stringValue);
		((IData)_customClass).Write(writer);
	}

	public void Read(BinaryReader reader)
	{
		// Читать нужно в том же порядке что и пишется
		_intValue = reader.ReadInt32();
		_floatValue = reader.ReadSingle();
		_stringValue = reader.ReadString();

		// Свои данные
		// ...
		((IData)_customClass).Read(reader);
	}
}

public class DictionaryClass
{
	private Dictionary<string, IData> _dict = new Dictionary<string, IData>();

	public void Save()
	{
		using (BinaryWriter writer = new BinaryWriter(File.Open("Path", FileMode.Create)))
        {
            foreach(var item in _dict)
            {
            	item.Write(writer);
            }
        }
	}

	public void Load()
	{
		if (File.Exists("Path"))
        {
            using (BinaryReader reader = new BinaryReader(File.Open("Path", FileMode.Open)))
            {
                foreach(var item in _dict)
                {
                	item.Read(reader);
                }
            }
        }
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы