Страница 1 из 1

Unity не хочет сериализовать List<Item>

СообщениеДобавлено: 19 апр 2018, 21:17
BlackMamba
привет.
в наследнике ScriptableObject определяю лист объектов с типом базового класса.
Сам лист:
Синтаксис:
Используется csharp
[SerializeField, HideInInspector] private List<ItemBehaviourGeneratorBase> _generators =
    new List<ItemBehaviourGeneratorBase>();

базовый класс, тоже наследован от ScriptableObject:
Синтаксис:
Используется csharp
public abstract class ItemBehaviourGeneratorBase : ScriptableObject
{
  protected const string createRootPath = "Item/Generator/Behaviour/";
  protected const string createRootFileName = "ItemBehaviourGenerator";

  public abstract Type ImageType { get; }

  public abstract ItemBehaviourBase Generate(ItemBehaviourImageBase image);
}
public abstract class ItemBehaviourGeneratorBase<T> : ItemBehaviourGeneratorBase
  where T : ItemBehaviourImageBase
{
  public override sealed Type ImageType { get { return typeof(T); } }

  public override sealed ItemBehaviourBase Generate(ItemBehaviourImageBase image)
  {
    T castedImage = image as T;
    if (castedImage == null)
      throw new ArgumentException("image " + image.GetType().Name);

    return Generate(castedImage);
  }
  public virtual ItemBehaviourBase Generate(T image)
  {
    if (!image)
      throw new ArgumentNullException("image");

    return null;
  }
}


И оно не сериализуется ни под каким соусом. Вернее, я могу добавить в лист объекты, но после сохранения и переоткрытия unity вся инфа пропадает.
вроде все по докам, пробовал делать классы не адстрактными, пробовал вместо листа использовать массив - не помогает, что я делаю не так?

Re: Unity не хочет сериализовать List<Item>

СообщениеДобавлено: 20 апр 2018, 00:09
seaman
Что в ItemBehaviourGeneratorBase по Вашему может сериализоваться?
Полей нет - сериализоваться нечему.

Re: Unity не хочет сериализовать List<Item>

СообщениеДобавлено: 20 апр 2018, 09:05
IDoNotExist
Наследник от ScriptableObject не будет сериализоваться, если не создан его ассет.
https://unity3d.com/ru/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects
Синтаксис:
Используется csharp
public class MakeScriptableObject {
    [MenuItem("Assets/Create/My Scriptable Object")]
    public static void CreateMyAsset()
    {
        MyScriptableObjectClass asset = ScriptableObject.CreateInstance<MyScriptableObjectClass>();

        AssetDatabase.CreateAsset(asset, "Assets/NewScripableObject.asset");
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
    }
}
 

Re: Unity не хочет сериализовать List<Item>

СообщениеДобавлено: 20 апр 2018, 21:12
BlackMamba
seaman писал(а):Что в ItemBehaviourGeneratorBase по Вашему может сериализоваться?
Полей нет - сериализоваться нечему.

А можно по подробнее, так как я себе это вижу совсем иначе:
1. поля есть в ScriptableObject
2. сериализуется ссылка на объект, а не сам объект
3. если твои слова верны, то при добавлении в данный лист будут сериализоваться только поля в ItemBehaviourBase, а все поля наследников идут лесом

IDoNotExist писал(а):Наследник от ScriptableObject не будет сериализоваться, если не создан его ассет.

Ну конечно, я проверял сериализацию, создавая тестовые экземпляры наследников ItemBehaviourGeneratorBase - по-другому никак

Re: Unity не хочет сериализовать List<Item>

СообщениеДобавлено: 20 апр 2018, 21:15
BlackMamba
seaman писал(а):Что в ItemBehaviourGeneratorBase по Вашему может сериализоваться?
Полей нет - сериализоваться нечему.

попробовал добавить public int testInt - не помогло