Проблема системы сериализации в Unity

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Проблема системы сериализации в Unity

Сообщение AgogTolslogorkin 18 ноя 2014, 05:54

Извините за неинформативный заголовок, но я не знаю чего именно хочу )))) - с одной стороны решить свою задачу (описано ниже) наиболее адекватным для unity способом, с другой стороны обсудить проблему (тоже описанно ниже) с которой наверняка многие сталкивались при создании чего-то более сложного чем просто монобехавор с публичными переменными.

Дело в том что Unity рекомендует пользоваться SerialiedProperty для сохранения всего и вся. Действительно хоть, эти объекты и имеют неудобный интерфейс, их использование позволяет автоматически корректно синхронизировать свойства префаба и его экземпляров - великое дело, так как для реализации того же самого вручную приходится вступать в кровавый бой с unity из которого лично я, не вышел победителем (хотя я в юнити новичок, так что буду рад если просвятите меня на этот счет). Поэтому я очень бы хотел использовать именно SerialiedProperty для решаемой сейчас задачи. Но пытаясь это сделать я наткнулся на какой-то чудовищный, фундаментальный недостаток системы сериализации в Unity который рубит на корню все мои попытки, а именно - отсутствие легкого и сериализуемого по значению типа производного от UnityEngine.Object.

пример, почему это так плохо:

Я хочу сделать инвентарь в котором одинаковые предметы группируются вместе, так чтобы игрок сразу видел что у него, например, 15 зелий лечения, 1 стальная кираса и 6785 дырявых ботинок.

Естественно все это представить как:

List<ItemGroup>;

где ItemGroup выглядит так:

[Serializable]
public class ItemGroup
{
public Item Item; // Класс Item - Monobehaviour прикрепленный к префабу
public int Count;
}


И вот проблема на лицо, ведь ItemGroup не может же быть ScriptableObject-ом так как он должен сохраняться в отдельный файл а у меня может быть, например, таких групп в одном инвентаре 50, и персонажей с инвентарями по 50 штук в каждой из 50 сцен и еще префабы ведь. Теоритически, наверное, можно сделать ItemGroup монобехавором, но тогда будет просто страшно смотреть на инспектор персонажа захламленный десятками лишних компонентов представляющих то что и так доступно через инспектор инвентаря.

Получается единственно разумная реализация самого обычного для многих rpg инвентаря абсолютно не реализуема если хочешь использовать хваленые SerialiedProperty, так как они имеют дело только с встроенными типами и UnityEngine.Object.

В общем что мне делать, и как другие люди с этим справляются? Может быть есть альтернативные способы синхронизации "как в Unity" без SerialiedProperty? И вообще, может быть где-нибудь есть запрос к Unity решить как-то эту проблему(например добавлением нового типа) под которым можно подписаться среди других страждущих?


Заранее благодарю и извиняюсь за сумбурное изложение :).
AgogTolslogorkin
UNец
 
Сообщения: 2
Зарегистрирован: 15 ноя 2014, 17:31

Re: Проблема системы сериализации в Unity

Сообщение YuliyF 20 ноя 2014, 23:35

а зачем тебе сохранять это чудо в файл: "Класс Item - Monobehaviour " - ? сохраняй только название объектов или их id и загружай по названию или id
YuliyF
UNIт
 
Сообщения: 59
Зарегистрирован: 03 окт 2011, 02:51

Re: Проблема системы сериализации в Unity

Сообщение bwolf88 30 дек 2014, 21:53

А зачем вам ScriptableObject хранить ?

Создайте простой класс, сериалиуйте его и храните все что Вам нужно. Когда предмет будет выпадать из инвентаря, копируйте данные в моноскрипт прдмета.

Пример

Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;
using System;
using System.Collecton.Generic;

[Serializable]
public class Node{

public int a;
public float b;
public List<myClass> class; //и т.п.
}

 


Такой класс прекрасно сериализуется.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Проблема системы сериализации в Unity

Сообщение DbIMok 30 дек 2014, 22:56

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05


Вернуться в Editor

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

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