Вопрос знатокам: где лучше всего хранить игровую информацию в Юнити?

Создаю карточную игру, в которой каждая карта имеет свой набор уникальных полей, свойств, енумов. Само собой, эти значения необходимо где-то хранить. В начале разработки я задался этим вопросом и нашел гайд быстрого импорта данных из CSV-таблицы (Excel) в Юнити.
Решение оказалось действительно простым, но всё равно содержало в себе несколько минусов: в Excel таблице ты вводишь значения "по буквам", если ошибаешься со знаком, то при парсинге Юнити просто не прочитает нужное поле корректно и заменит нулем или дефолтным значением; также, при сохранении CSV файл превращет кириллицу в вопросики, приведенные на скриншоте; не минус, конечно, но бесит, каждый раз при закрытии CSV таблицы тебе приходиться нажимать 5 раз сохранить? -да!; не совсем удобная среда для геймдизайнера - менять какие-либо значения карт в этих ячейках (опять же промахнулся по клавише и NullReference).

Менял кодировки, сохранение в CSV формат с кодировкой кириллицы, он все равно превращал кириллицу в вопросики, которые, при парсинге, также были вопросиками в полях типа строка.
Менял кодировки, сохранение в CSV формат с кодировкой кириллицы, он все равно превращал кириллицу в вопросики, которые, при парсинге, также были вопросиками в полях типа строка.

Где-то слышал, что в UE есть свои кастомные таблицы внутри движка, которые гораздо удобнее и для создания и для дальнейшего баланса игры. В Unity что-то на подобии имеется в localization system, однако предназначено оно для локализации) Также слышал про Unity SystemGraph, может туда полезть?
Чуть-чуть о том, как я реализовал чтение карт: из CSV-таблицы данные парсятся в Scriptable Object карточной библиотеки, где конструктором собираются уже в класс карты для дальнейшего использования.
Сформулирую свой вопрос: где лучше всего хранить описанную мною информацию о картах? Важно помнить о геймдизе, которому в дальнейшем придется балансить игру, хотелось бы по удобнее) Спасибо!

66
17 комментариев

Странно что ты нашел гайд как сохранять данные в csv но не нашел ничего про формат json
Есть момент что парсинг огромных JSON'ов не отличается особой производительность, но мне кажется для твоего кейса было бы более чем достаточно

5
Ответить
Автор

Погуглю, спасибо

Ответить

Я раньше использовал JSON, но коллеги на работе считают его достаточно медленным по текущим реалиям, поэтому используют MemoryPack.
Тут все зависит от специфики данных, с которыми вам с ГД предстоит работать.
Если данных по балансу много, они строятся из различных последовательностей и связях, то для ГД явно удобно вести их в таблицах. Разработчику в таком случае необходимо все это парсить без использования SO, потому что в нем смысла нет, если баланс можно поменять в оригинальной таблице.
Можно парсить и читать сразу из CSV, а можно хранить файлом в удобном для тебя формате в какой-то директории, из которой игра умеет читать (типа Resources или StreamingAssets). Ну или читать по вебу...
Если же данных немного или все они изменяются ручками - то легче использовать SO и не парится.

Что касается кодировки - если после импорта в CSV кириллица читается нормально, значит проблема на стороне кода при парсинге\десериализации.

https://github.com/Cysharp/MemoryPack

5
Ответить
Автор

Спасибо большое!

Ответить

Привет. А что мешает хранить данные сразу в кодовом файле (скрипте)?
Сделай родительский класс, например "Card", наследуй от него дочерние классы, например "CardAceOfHearts" (туз червей) и в каждом дочернем классе объявляй поля с присвоением нужных данных.

Ковырять постоянно файл и выуживать из него информацию - более долгий и излишний процесс.

1
Ответить

Из всего говна что тут насоветовали это самый разумный коммент.

Но лучше не наследовать карты, а сделать префабы карт. Содержание карты держать в конструкторе. Т е выставлять свойства карты в инспекторе.

А вот сами свойства да, делаешь класс свойство и от него уже создаёшь различные свойства которые перетаскиваются на карту. Таким образом ты можешь комбинировать несколько свойств на одной карте, что сильно упрощает жизнь.

И конечно не могу оставить без внимания тот пиздец что творится в индустрии. Если про больше проекты, выносить данные в текстовый файл как то ещё оправдано, то для команды в два с половиной человека хочется спросить:

-чего вы городите? Вам же блять всё сделали кайфово, занимайтесь играми, а не хуйнёй.

Есть чел который вместо того что бы работать в редакторе Юнити, написал дешефратор ПНГ формата, а левелы рисовал в фотошопе. и говорил что так удобнее, до момента когда понадобилось крутить НПС на нужный угол.

Вам кажется этот чел смешным? Такая же хуйня с экселом , Джейсоном и всем остальным.

Ещё веселит позиция:
- так удобнее геймдизанером

Это вообще охуеть, Рисовать не умеют, кодить не умеют, Юнити блять открыть тоже не умеют.

3
Ответить

Комментарий недоступен

1
Ответить