Читал
статью про сериализацию объектов в Unity.
На ее основе написал такой вот небольшой прототип:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
[System.Serializable]
public class LevelInfo
{
public int num;
}
public class Ser : MonoBehaviour
{
public int numLevelWrite;
public int numLevelRead;
private LevelInfo LevelWrite;
private LevelInfo LevelRead;
private void Start()
{
LevelWrite = new LevelInfo();
LevelRead = new LevelInfo();
LevelWrite.num = numLevelWrite;
LevelRead.num = numLevelRead;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
Debug.Log("Before Write:\n" + "LevelWrite.num = " + LevelWrite.num + "\n LevelRead.num = " + LevelRead.num);
Write(LevelWrite);
Debug.Log("After Write/Before Read:\n" + "LevelWrite.num = " + LevelWrite.num + "\n LevelRead.num = " + LevelRead.num);
}
if (Input.GetKeyDown(KeyCode.R))
{
Debug.Log("After Write/Before Read:\n" + "LevelWrite.num = " + LevelWrite.num + "\n LevelRead.num = " + LevelRead.num);
LevelRead = Read(LevelRead);
Debug.Log("After Read:\n" + "LevelWrite.num = " + LevelWrite.num + "\n LevelRead.num = " + LevelRead.num);
}
}
private void Write(LevelInfo lev)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream StreanIn = new FileStream(@"C:\Users\LionsGate\Desktop\t.dat", FileMode.Create);
formatter.Serialize(StreanIn, lev);
StreanIn.Close();
}
private LevelInfo Read(LevelInfo lev)
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream StreanOut = new FileStream(@"C:\Users\LionsGate\Desktop\t.dat", FileMode.Open);
lev = (LevelInfo)formatter.Deserialize(StreanOut);
StreanOut.Close();
return lev;
}
}
Но когда я запускаю PlayMode, я получаю вот такую ленту из сообщений в консоли.
Затем я закрываю, перезахожу в Unity, меняю значения открытых переменных и получаю уже другую ленту сообщений.
Смотрел в отладчике. значения меняются. Но непонятно почему Debug.Log() вызывается каждый раз дважды и что происходит вообще? Unity создает свой экземпляр класса? Но ведь напрямую приватные переменные класса с инспектором не контактируют... В общем, помогите разобраться.