Сериализация сложной структуры с перекрестными ссылками

Программирование на Юнити.

Сериализация сложной структуры с перекрестными ссылками

Сообщение romeo_ftv 06 мар 2010, 18:33

Ребят, столкнулся с проблемой, может кто-нибудь подскажет?
Код для примера:

файл EditorScript.cs:
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEditor;

class EditorScript
{
    [MenuItem("Test/test")]
    static void Execute()
    {
        List<MyClass> l = new List<MyClass>();
        l.Add(new MyClass());
        l.Add(new MyClass());
        MyScriptableObject mso = new MyScriptableObject();
        mso.list = l;
        AssetDatabase.CreateAsset(mso, "Assets/test.asset");
    }
}
 


файл MyScriptableObject.cs:
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using UnityEngine;

public class MyScriptableObject : ScriptableObject
{
    public List<MyClass> list;
}

[Serializable]
public class MyClass
{
    public int someInt;

    [SerializeField]
    int anotherInt;
}
 


Данный код работает как надо, - создается объект класса MyScriptableObject унаследованного от ScriptableObject, содержащего объекты класса MyClass, и потом все это дело сериализуется в asset - но если MyClass унаследовать от ScriptableObject, то объекты класса MyClass не сериализуются.

Вообще задача состоит в следующем: есть некая структура в виде графа, узлы которого представлены классом Node, этот класс содержит
ссылки на другие объекты класса Node в виде List<Node>, т.е. существуют перекрестные ссылки. В редакторе генерируется этот граф, сохраняется как ассет, но при следующем запуске проекта или после Start/Stop элементы List<Node> равны Null.

Может кто-нибудь сталкивался с подобным и нашел решение? Буду рад любым предложениям по данному вопросу.
romeo_ftv
UNIт
 
Сообщения: 88
Зарегистрирован: 12 апр 2009, 12:33

Re: Сериализация сложной структуры с перекрестными ссылками

Сообщение Neodrop 06 мар 2010, 18:41

Я что-то вообще не понял, как вы их сериализуете.
Если посредством SerializableObject, то покажите код. Вероятно там собака порылась. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Сериализация сложной структуры с перекрестными ссылками

Сообщение gnoblin 06 мар 2010, 18:42

Tutanhamon что-то такое делал недавно :-w
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Сериализация сложной структуры с перекрестными ссылками

Сообщение romeo_ftv 06 мар 2010, 19:04

Neodrop писал(а):Я что-то вообще не понял, как вы их сериализуете.
Если посредством SerializableObject, то покажите код. Вероятно там собака порылась. :-?


SerializableObject не причем. Под сериализацией имелось в виду сохранение объекта класса MyScriptableObject как ассета с помощью AssetDatabase.CreateAsset(). Затем этот ассет назначается на public member MonoBehaviour-класса и используется как объект MyScriptableObject.
romeo_ftv
UNIт
 
Сообщения: 88
Зарегистрирован: 12 апр 2009, 12:33

Re: Сериализация сложной структуры с перекрестными ссылками

Сообщение Neodrop 06 мар 2010, 19:13

Не, батенька. Как раз "при чем". Вы заполняете ваши ноды, но AssetDatabase об это ни сном ни духом. Попробуйте хотя бы сделать SetDirty объекту, перед тем, как в префаб его пихать.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


cron