@SkyCrusher

Почему при сериализации объектов консоль Unity выдает сразу несколько сообщений о состоянии объекта?

Читал статью про сериализацию объектов в 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, я получаю вот такую ленту из сообщений в консоли.
5e4fda4964f64945631899.png
Затем я закрываю, перезахожу в Unity, меняю значения открытых переменных и получаю уже другую ленту сообщений.
5e4fda5350fd7409584076.png
Смотрел в отладчике. значения меняются. Но непонятно почему Debug.Log() вызывается каждый раз дважды и что происходит вообще? Unity создает свой экземпляр класса? Но ведь напрямую приватные переменные класса с инспектором не контактируют... В общем, помогите разобраться.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@SkyCrusher Автор вопроса
Официально объявляю, что я тупой. Скрипт к двум объектам прикреплен был. Вот и выводило сообщение дважды...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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