Бьюсь над нижеобозначенной проблемой уже больше месяца. Нигде ничего по ней найти не смог.
В общем, есть приблизительно следующий код:
Синтаксис:
Используется csharp
[System.Serializable]
public class SerializableDataHolder
{
//...
}
public class Foo : MonoBehaviour, ISerializationCallbackReceiver
{
//...
void Start ()
{
//...
}
public void OnBeforeSerialize()
{
// Prepare mSerializableData for serialization
}
public void OnAfterDeserialize()
{
// Finalize serialization
}
[SerializeField]
private SerializableDataHolder mSerializableData;
}
public class SerializableDataHolder
{
//...
}
public class Foo : MonoBehaviour, ISerializationCallbackReceiver
{
//...
void Start ()
{
//...
}
public void OnBeforeSerialize()
{
// Prepare mSerializableData for serialization
}
public void OnAfterDeserialize()
{
// Finalize serialization
}
[SerializeField]
private SerializableDataHolder mSerializableData;
}
Foo вешается на (это важно) единственный объект в сцене. Ради чистоты эксперимента я даже пробовал создавать новую чистую сцену и тестировался на ней.
Код прекрасно работал в более старых версиях юнити. Сейчас стало происходить что-то странное. Итак, запуск всего этого дела под дебаггером показал:
1) При запуске игры программа трижды попадает в брэйкпоинт в OnAfterDeserialize.
2) В первый из этих трёх раз всё везде правильно, mSerializableData загружена правильно, Foo правильный. А вот во второй и третий разы уже даже mSerializableData грузится неверно.
3) Программа попадает в брэйкпоинт в функции Start только на третий раз.
Что там творится, я решительно не понимаю. Помогите, пожалуйста. Может, есть какие-то идеи касательно того, как в целом работает десериализация объектов сцены в Юнити и где там может что-то не так пойти.