Go Rin Showdown, день 28: цунь длиною в ли

Рассказываем, куда мы пропали на две недели, чего добились за это время и показываем получившийся билд.

Что нового

После переноса прототипа на ассеты, мы занялись разработкой логики врагов и настройкой анимации. И вот тут я, как программист, крепко встрял.

Во-первых, до этого мне вообще не приходилось работать с анимацией.

Во-вторых, ИИ я тоже никогда не прописывал.

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

Разумеется, я узнал много нового про работу с анимацией в Unity, в том числе про привязку кода к состояниям анимации.

ИИ обычно реализуется либо через конечные автоматы (finite state machines), либо через behavior tree.

Для первого варианта был большой соблазн взять по распродаже популярный Playmaker, но мы решили пока от этого отказаться: нужно было вложить деньги, резко перейти на playmaker всей командой, да и место в репозитории он занимает (на фестивале мы использовали Unity Collab для контроля версий, но теперь переедем на git, об этом ниже).

Пожалуй, не в этот раз<br />
Пожалуй, не в этот раз

Конечно, можно было по быстрому написать свою реализацию паттерна State, но на самом деле такая реализация уже есть в Unity, прямо у нас под носом!

Аниматор позволяет прикреплять к состояниям графа анимаций скрипты, наследованные от класса StateMachineBehaviour, где можно добавить свою логику для нахождения в этом состоянии и при переходе между ними. Пример использования этих классов, а также надстройку для привязки этой логики к внешним скриптам можно найти в 3D Game Kit от Unity, а послушать объяснение и посмотреть демонстрацию использования в проекте можно здесь.

Конечно, этот подход тоже не панацея и использовать его тоже нужно аккуратно, но так бывает с любыми инструментами)

До behavior trees мы не добрались, но если будет такая потребность то попробуем задействовать бесплатный плагин PandaBehavior.

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

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

Collab против git

Для контроля версий на проекте мы решили опробовать Unity Collab, но теперь переедем на git.

Collab в целом оказался достаточно удобен. Ограниченние на размер репозитория немного стесняло, но в то же время дисциплинировало и не давало посто закидывать туда всё подряд. Да и небольшие цены на дополнительное место в хранилище позволяли, в перспективе, обойти это ограничение. А вот отсутствие поддержки разных веток разработки может вызвать проблемы в будущем, хоть эта возможность и не потребовалась нам на фестивале.

Окончательно мы решили оставить Collab из-за странного ограничения на коммиты: при изменении структуры папок и переименовании, эти файли нельзя закоммитить отдельно от остальных изменений, можно только закоммитить всё сразу. Это вызывает большие проблемы, если есть изменения, которые не должны попасть в репозиторий. Приходилось сначала по частям коммитить изменения в других частях проекта, потом откатывать нежелательные изменения и только потом коммитить переименованные/передвинутые файлы. Да и в целом выбирать файлы для коммита в Collab не удобно и его интерфейсу самое место у наших коллег по фестивалю: игре Hella World)

Go Rin Showdown, день 28: цунь длиною в ли

Почему долго не было постов

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

В голове ещё крутились мысли: "в разработке игры всегда найдётся о чём рассказать" и "регулярные посты будут мотивировать на постоянное развитие"

Но к концу второй недели чувствовалось, что это всё больше "дневник" и всё меньше "разработки". Посты стали даваться через силу. Наверное, так получилось как раз из-за недостатка у меня навыка/опыта в геймдизайне и программировании (игр). Возможно, если бы я не завязал на каждом шагу в освоении новых фичей, я мог бы выдавать достаточно производственной мощности для поддержания достаточного количества материала для дневника. Но сами посты этой мощности мне дать не могли.

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

Огромное спасибо организаторам за стримы с разбором лучших дневников каждой недели! Они в понятной форме задают вектор развития и стимулируют гораздо лучше текста)

Я всё ещё придерживаюсь тех же тезисов, что и в начале, но к ним добавилось одно но: "всегда будет о чём написать, но только если это сначала сделать", "регулярные посты мотивируют процесс разработки, но не могут его тащить за собой". То же относится и к разделению ролей: можно успешно совмещать 2 роли в команде, но только если хотя бы в одной ты уже хорош.

Что в итоге

Несмотря на все трудности, наш первый шаг в разработке игр (маленький для игростроя, но большой для нас)) мы сделали, и даже достигли примерно половины целей.

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

Скачать и оценить игру лично можно на нашей страничке на "итче":

Go Rin Showdown, день 28: цунь длиною в ли

Что дальше

Денёк на отоспаться, и снова за работу! Прекращать разработку мы пока не намерены, а работы впереди ещё много)

Мы ещё собираемся написать пост с впечатлениями команды от фестиваля, но пока что я выражаю огромную благодарность организаторам фестиваля, а также моим товарищам по команде, которые поддержали и поверили в мою идею. Без них этой игры не было бы.

Команда "Mad not Crazy"

  • Максименко Денис: программист, гейм-дизайнер
  • Рома: дизайнер по звуку
  • r1gm4r013: музыкант
  • MuteYourBrains: концепт-художник
  • Сергей Струлев: левел-дизайнер

Свитки разработки

33 показа
6262 открытия
Начать дискуссию