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

Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 13:11
extravert
Есть большая и срочная проблема со скриптами, которые я пытаюсь сохранить в ассет.
В общем
Есть у меня класс Storage : ScriptableObject
Экземпляр этого класса хранит в себе экземпляры Item : ScriptableObject
Хранит в виде списка
То есть
Синтаксис:
Используется csharp
public class Storage : ScriptableObject {
       public List<Item> items;
}
 


Все это чудо я сохраняю в asset (на диск, через AssetDatabase.CreateAsset(obj, path);)

Но вот тут и есть проблема.
После закрытия юнити и повторного открытия содержимое списка - нули!
При том когда в списке появляется новый пункт он в инспекторе выглядит вот так
http://prntscr.com/49qexp

То есть пишет какой то TypeMismatch (с чего бы там несоответствие типов только?)

Помогите кто может

Re: Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 13:20
extravert
Предполагаю что ScriptableObject описанные в сборке редактора не сохраняются

Re: Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 13:47
Nicloay
Я вот этот пдоход использую
http://wiki.unity3d.com/index.php?title ... bjectAsset

Я тоже иногда сталкивался с проблемой не сохранения ассетов.
Попробуй вот такой подход.
Если свой редактор - то в редакторе не попробуй SetDirty, MarkAsChanged и т.п.
Если нет, то перед выходом, открой ассет стандартный инспектор и попробуй чтонибудь поменять туда обратно, после этого должно сохраниться

Re: Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 13:51
BenjaminMoore
Item : ScriptableObject

их тоже нужно сохранять как ассеты, для удобства их можно вешать на тот же главный ассет Storage
нужны ссылки на объект, а у вас айтемы получаются висят в воздухе и вы сохраняете только объект Storage, вот пока они висят, ссылки есть, после перезапуска они конечно же выгружаются из памяти и восстановить их не откуда
если item были бы обычными сериализуемыми классами, они бы сериализовались как часть Storage

Re: Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 19:31
Nicloay
BenjaminMoore писал(а):
Item : ScriptableObject

их тоже нужно сохранять как ассеты, для удобства их можно вешать на тот же главный ассет Storage
нужны ссылки на объект, а у вас айтемы получаются висят в воздухе и вы сохраняете только объект Storage, вот пока они висят, ссылки есть, после перезапуска они конечно же выгружаются из памяти и восстановить их не откуда
если item были бы обычными сериализуемыми классами, они бы сериализовались как часть Storage

ну дак вот их и надо пометить как [Serializable] нафига scriptable object-ы то хранить?

Re: Save scriptableobject in assets

СообщениеДобавлено: 05 авг 2014, 21:01
Neyl
Nicloay писал(а):нафига scriptable object-ы то хранить?

Это может потребоваться, если используется полиморфизм, например в списке List<Item> будут хранится производные классы Weapon : Item : ScriptableObject, Armor : Item : ScriptableObject, Potion : Item : ScriptableObject и т.д.
Если же такого не планируется, то действительно проще наследоваться от объекта и помечать его [Serializable].