Неделя 10 (декабрь 1): Опять инвентарь и Odin Inspector.

Оглавление

Пришло время одеть персонажей. Я честно говоря вообще не ожидал, что сделать это будет настолько сложно. Проблема притворяется очень простой, прячущейся за спиной одного единственного но очень, скажем так, ширококостного вопроса: чем является слот оружия в инвентаре персонажа?

Можно было бы просто насоздавать переменных в классе персонажа для хранения айдишников предметов. Но как тогда отличить предмет находящийся в инвентаре персонажа, от предмета. находящегося в инвентаре игрока? Не говоря уже о том, что у меня может быть много разных складиков под еду, экипировку, ингредиенты. А если у меня будет несколько разных видов персонажей с разным количеством рук? Или вообще без рук? Тупо наследовать их от базового класса, а потом… что потом?

В общем я основательно так повис над получением ответа на этот обманчиво простой вопрос. Я три раза начинал писать документацию, упирался в какой-то вопрос, [возникающий в результате ответа на вопрос]n. И интернеты мне не помогли совершенно.

В общем, если у вас нет четкого представления о том, чего вы хотите от того или иного элемента игры, то будьте готовы к тому, что его разработка будет занимать не день, а месяц. Откуда у людей берется это самое четкое представление, я честно говоря понятия не имею. По моему опыту все как-то само складывается просто из природы описываемых в игре вещей. Но вот игры с элементами РПГ позволяют разработчику слишком много свободы, с которой справиться необычайно сложно.

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

***

Пока я страдал муками выбора ответов на автогенерирующиеся вопросы, решил немного побаловаться. Благо хранение проекта на гите теперь позволяет баловаться.

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

Во-вторых, что-то меня приперло, что я хочу этот список делать не листом, а словарем. А словари юнитей не сериализуются, что в том числе значит что юнитя не умеет их отображать в инспекторе и соответственно не позволяет их ручками наполнять и сохранять.

И в-третьих, я очень люблю красоту и удобство. А то, как юнити отображает листы — это нифига не красиво и совсем даже не удобно. При том что понимаю что в целом для проекта это совершенно не важно. Да может еще и вредно, потому что время тратится на всякую лабуду. И вот удачное стечение обстоятельств в виде повисшей документации на фичу и баловство во все щели.

***

Есть такой плагин: Odin — Inspector and Serializer. Если вам нехрена делать, вы хотите красивое отображение листов, и возможность сериализовывать словари — рекомендую.

В общем, я уже описал для чего я этот плагин использовал. Еще он позволяет немного казуализировать работу над кастомными интерфейсами классов в инспекторе, без создания сложных и не очень, на мой вкус, логичных CustomEditor. Я на шестой неделе пытался создать свой кастомный интерфейс, так что, пожалуй, знаю о чем говорю.

Самым сложным в Одине было привыкнуть к тому, что чем может и должно сериализоваться, чтобы Один это нормально отобразил. Например список внутри словаря. У меня на это ушел один вечер борьбы с дислексией. И весь следующий день я развлекался тем, что переводил свои классы на отображение Одином.

На самом деле Один настолько облегчает работу, что… даже не знаю.

  • С ним я мог бы не мучиться с не очень оправданной загрузкой конфигов из гуглодокв. Ведь игра у меня должна быть серверной в итоге, а значит конфиги могут быть, грубо говоря, в каком угодно виде (JSON, конечно), но точно не в виде гуглодоков.
  • Я так и не осилил создание кастомных окон, но просто потому что так и не появилось нормальной причины в этом разбираться. Но если бы я все-таки разобрался бы…
  • Я мог бы сделать всю игру не на сложных игровых интерфейсах и трехмерной сцене, а на более простых интерфейсах редактора. Ведь по идее мне нужно было бы сделать простой прототип, в котором объекты перекладывались из одного места в другое и оказывали там какое-то влияние. Но мне пришлось обратиться к более сложным решениям, которые фактически приводят к реализации игры в финальном ее виде и качестве, пропустив этап прототипирования. А так делать не хорошо. У меня уже есть опыт создания «финального качества» прототипов — это бесполезная трата времени.

На видео словарь листов, отображающихся в табличном виде, в которых еще отображение типа инвентаря зависит от значения типа состояния.

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

Это наверное была первая неделя в которой я большую часть времени потратил на решение философских вопросов и опять почти ничего полезного не сделал. Вторую неделю подряд. Начались тяжелые времена

Оглавление