Создаю карточную игру, в которой каждая карта имеет свой набор уникальных полей, свойств, енумов. Само собой, эти значения необходимо где-то хранить. В начале разработки я задался этим вопросом и нашел гайд быстрого импорта данных из CSV-таблицы (Excel) в Юнити.
Решение оказалось действительно простым, но всё равно содержало в себе несколько минусов: в Excel таблице ты вводишь значения "по буквам", если ошибаешься со знаком, то при парсинге Юнити просто не прочитает нужное поле корректно и заменит нулем или дефолтным значением; также, при сохранении CSV файл превращет кириллицу в вопросики, приведенные на скриншоте; не минус, конечно, но бесит, каждый раз при закрытии CSV таблицы тебе приходиться нажимать 5 раз сохранить? -да!; не совсем удобная среда для геймдизайнера - менять какие-либо значения карт в этих ячейках (опять же промахнулся по клавише и NullReference).
Странно что ты нашел гайд как сохранять данные в csv но не нашел ничего про формат json
Есть момент что парсинг огромных JSON'ов не отличается особой производительность, но мне кажется для твоего кейса было бы более чем достаточно
Погуглю, спасибо
Я раньше использовал JSON, но коллеги на работе считают его достаточно медленным по текущим реалиям, поэтому используют MemoryPack.
Тут все зависит от специфики данных, с которыми вам с ГД предстоит работать.
Если данных по балансу много, они строятся из различных последовательностей и связях, то для ГД явно удобно вести их в таблицах. Разработчику в таком случае необходимо все это парсить без использования SO, потому что в нем смысла нет, если баланс можно поменять в оригинальной таблице.
Можно парсить и читать сразу из CSV, а можно хранить файлом в удобном для тебя формате в какой-то директории, из которой игра умеет читать (типа Resources или StreamingAssets). Ну или читать по вебу...
Если же данных немного или все они изменяются ручками - то легче использовать SO и не парится.
Что касается кодировки - если после импорта в CSV кириллица читается нормально, значит проблема на стороне кода при парсинге\десериализации.
https://github.com/Cysharp/MemoryPack
Спасибо большое!
Привет. А что мешает хранить данные сразу в кодовом файле (скрипте)?
Сделай родительский класс, например "Card", наследуй от него дочерние классы, например "CardAceOfHearts" (туз червей) и в каждом дочернем классе объявляй поля с присвоением нужных данных.
Ковырять постоянно файл и выуживать из него информацию - более долгий и излишний процесс.
Из всего говна что тут насоветовали это самый разумный коммент.
Но лучше не наследовать карты, а сделать префабы карт. Содержание карты держать в конструкторе. Т е выставлять свойства карты в инспекторе.
А вот сами свойства да, делаешь класс свойство и от него уже создаёшь различные свойства которые перетаскиваются на карту. Таким образом ты можешь комбинировать несколько свойств на одной карте, что сильно упрощает жизнь.
И конечно не могу оставить без внимания тот пиздец что творится в индустрии. Если про больше проекты, выносить данные в текстовый файл как то ещё оправдано, то для команды в два с половиной человека хочется спросить:
-чего вы городите? Вам же блять всё сделали кайфово, занимайтесь играми, а не хуйнёй.
Есть чел который вместо того что бы работать в редакторе Юнити, написал дешефратор ПНГ формата, а левелы рисовал в фотошопе. и говорил что так удобнее, до момента когда понадобилось крутить НПС на нужный угол.
Вам кажется этот чел смешным? Такая же хуйня с экселом , Джейсоном и всем остальным.
Ещё веселит позиция:
- так удобнее геймдизанером
Это вообще охуеть, Рисовать не умеют, кодить не умеют, Юнити блять открыть тоже не умеют.
Комментарий недоступен