9

Опыт разработки первой игры на Unity, часть 5⁠⁠

Или о том, как потерять мотивацию и вернуть ее обратно

Опыт разработки первой игры на Unity, часть 5

Ссылка на часть 1

Ссылка на часть 2

Ссылка на часть 3

Ссылка на часть 4

Предисловие

Появляются иногда комменты, мол, если хочешь показать, что можно сделать игру с нуля, то гораздо лучше сначала сделать — и потом рассказать. Возможно. Но мне кажется, что, увидев именно трудности и то, что с ними можно справиться, эффект будет сильно выше, чем от простого “Я, который не умеет программировать и прочее, представляю вам готовую игру!”. Тут видно, что технические навыки низки, видно, что рисовать я не умею — ну и так далее, — и видно, как справляюсь с этими трудностями. Мне кажется, от такого эффект будет сильнее — наверняка многие сталкивались и будут сталкиваться с такими же проблемами, которые кажутся непреодолимыми)


Так что впереди вас ждет еще больше фейлов, еще больше кривости и еще больше подробностей — ведь теперь проект начинает хотя бы напоминать игру, а это значит, что впереди будет только сложнее и интереснее!


Итак, поехали!

Введение

Хотел сделать классическую покадровую анимацию. Но иногда нужно трезво оценивать свои силы — а рисовать хоть и было бы прикольно, но довольно сложно. У меня есть сроки, хочу в них уложиться. Что же мне делать тогда? Вот был бы способ сделать анимацию, не рисуя по 12 кадров одного и того же персонажа… Ой, что же это? Это птица? Это самолет? Нет — это spain animation! Та-даннн!


Наткнулся на такое видео — начал изучать, что да как

Поизучав еще немного, решил стать павер-металлистом сквозь огонь и пламя… Ой — использовать Dragonbones. Вроде подходит + важный аспект — она бесплатна. В ней есть некоторые проблемы — например, искажение объектов, — но с моим скиллом рисования это не сильно решающий фактор. Так что такой размен посчитал разумным.


Вообще, в Dragonbones нет некоторых вещей, которые позволяют сделать анимацию более красивой. Но тут важный момент — а оно мне надо? Для минимальной приемлемой версии имеющегося функционала достаточно. К тому же, что-то, а графика точно будет добавляться / меняться.


Еще рассматривал стандартный Unity 2D Animation, но, насколько понял, пока что он несколько недоработан.


С анимацией разобрались — но нужен исходное изображение, которое будем анимировать. Сначала хотел использовать Gimp, но внезапно узнал, что он не для рисования, а для обработки фоток. А для рисования используется некая Krita.


Вообще, есть три варианта:

1) Рисовать самому

2) Найти того, кто нарисует

3) Взять готовые ассеты


Раз определился, что рисую сам — поехали!

И получается плохо! Вообще не понимаю, что тут я делаю. После первой неудачи всерьез задумался над поиском того, кто поможет. И это правильный подход, так и нужно делать. Но потом вспомнил, зачем я вообще все это затеял — развлечься и повеселиться! А что будет интереснее? Нарисовать 5 героев — это сложная и, главное, интересная задачка! Достаточно интересная, чтобы продолжить пытаться сделать самому


Для начала попробовал продолжить решать ее с наскока — результат немного предсказуем:

И я понятия не иммею, что делать дальше! Тут началась чуть-ли не паника: “У меня не получится”, “Слишком сложно” — все вот такое. Помог, как ни странно, сон. С новыми силами вернулся к задаче. Теперь подготовился получше — нашел вот такую серию видео:

https://youtube.com/playlis? list=PL1ypg9-tKyc28he9qTdlsEjjG1KPmd1hs

И, когда смотрю, все вроде как понятно. Но стоит начать делать самому — как полная пустота в голове! В итоге цикл получился таким: Просмотр видео — возвращение к работе — просмотри видео — возвращение — ну и так далее.


Результат за 4 часа выглядит ну очень плохо — такое сильно расстраивает. Но я просто напомнил себе, что невозможно получить хотя бы немного хорошие результаты за 4 часа работы с "нулевого уровня навыка".


Поставил для себя срок — 10 дней на одного героя. Если за 10 дней не увижу прогресса — точно начну искать другие способы. Звучит как крепкая такая задача с измеримыми критериями выполнения.

Но тут случилось нечто непредвиденное.


Помните, однажды говорил, как важно видеть прогресс для сохранения рабочего настроения? Так вот, за 20 или 30 часов работы, 4+ из которых записывал на видео, прогресса я не увидел. Учитывая вкладываемые усилия… Ну, это привело к закономерному результату — я потерял интерес. Причем не только к рисованию этого персонажа, но и к проекту вообще.


Штош, арт я не вытяну — это очевидно. Значит, нужно найти либо спецов, которые помогут, либо использовать готовые решения (asset store, например). Узнал, что нарисовать одного героя (только нарисовать — не анимировать!) стоит ориентировочно 10к. Зато купить готовый набор героев можно примерно за 5к.


Проблема “нарисовать героя” трансформировалась в “найти героев” — и отодвинулась на будущее.


Чтобы закончить на позитивной ноте, перешел к следующему пункту плана — призыв героев.

Оно живое! Живое!

Что вообще нужно для призыва? Валюта, экран призыва, ну и место, где герои будут призваны. Начнем с экрана призыва. Почему? Да просто захотелось.

При нажатии валюта тратится на нужную стоимость (что я вообще сказал?) и призывает нужное количество героев. Если валюты не хватает на призыв… Не повезло, что тут сказать. Иди фарми ее.


Но как-то некрасиво выглядит — просто тыкаю по кнопке и циферки меняются. Давайте исправим. Вжух! Немного магии, и…

Тут есть два варианта отображения полученных героев:

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

2) Как сделано в AFK Arena (каждый призванный герой отображается в виде отдельной карточки)


Мне больше нравится второй вариант, но из-за некоторых особенностей первый больше подходит к этой игре. И нет — это не из-за того, что у меня не получилось так сделать))


Герои получены — но вот незадача! Я же не сделал место, откуда открывается интерфейс с призывом. Давайте это поправим


Помните мою секретную кнопку в выборе уровней? Нет? Не страшно — сейчас напомню. Именно там пока будет открытие окна призыва. Вжух!

Хм, я все еще старательно сохраняю интригу на счет меты, так что давайте сделаем вид, что вы ничего не заметили!

Почему-то мне кажется, что свободный доступ к любому уровню сделает игру совсем неинтересной — давайте это исправим

Вы это видели? Для доступа к следующему уровню игроку теперь нужно пройти текущий — это все больше похоже на настоящую игру! Щитаю, это шедевр, не иначе.


Вау, внезапно оказалось, что крупных фичей осталось всего две. Первая — сервер — возможно, окажется приятным сюрпризом (люблю нагнетать интригу), а вот вторая — новый ранее не запланированный функционал — оказалась сюрпризом уже неприятным.

Это птица? Это самолет? Нет — это же код!

О да, я знаю, многие ждали этого!


Начнем с экрана призыва. В новом скрипте все разделено на 2 блока:

1) Показать героев, участвующих в битве

2) Создание самих кнопок


С показом героев ничего сложного:

https://pastebin.com/Bkqvizvn

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


Со спавном кнопок тоже не возникло проблем

https://pastebin.com/5bBDwWb5

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

https://pastebin.com/JVs8zi9h

Видимо, книжек прочитал недостаточно — раз тут какая-то 5 затесалась. На самой же кнопке висит... Барабанная дробь...

https://pastebin.com/drSMNXxp

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


Ну а с покупкой все не так радужно. Я понятия не имею, как избавиться от кучи GetComponent

https://pastebin.com/iCsBDTRC

Итак, призыв готов. Но что с изменением уровней? Как работает «Level complete» и «Пройди предыдущую битву»?


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


У меня есть переменная maxLevel, от которой зависит количество уровней (неожиданно, да?). Используя ее, могу определить, на каком "слое" находится нужная кнопка-уровень — причем не важно, где в массиве она находится. Так что добавляю в кнопку смену цвета (вот это логическая связь, просто нет слов)

https://pastebin.com/nDjZq1Fh

Меняю функцию по включению нужного уровня

https://pastebin.com/wM2BPeXK

И добавляю функцию для «открытия» следующего уровня

https://pastebin.com/kNnG88hC

В итоге все это работает. Пока под вопросом, как резво — но работает!

Маленький шажок навстречу неизвестности

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


Следование ранее намеченному плану работ и декомпозиция задач на самые минимальные помогло влиться обратно (это когда задачу разбиваешь на более маленькие — у меня все свелось к “а теперь задача — добавить на кнопку текст с количеством призываемых героев”).

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


А в следующей части будет то, чего всеми силами старался избежать — добавление функционала сверх того, что запланировал изначально. К сожалению, без него получается не игра, а технодемка игры. Что это? Узнаете в следующей части!

P.S Как это тут принято - бот ругается на Stonks

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

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

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

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

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

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


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

2
Автор поста оценил этот комментарий

"Я понятия не имею, как избавиться от кучи GetComponent" (а я понятия не имею как на пикабу делать красивое цитирование)
В массивах/листах можно вместо gameObject хранить объекты любых классов. В случае если часто повторяется запрос на один компонент, можно хранить в листе героев именно его, а если нужно несколько компонентов, то можно создать условный объект HeroData, в котором будут хранится ссылки на все необходимые объекты, относящиеся к одному персонажу, и хранить в листах уже их. Тогда вместо GetComponent можно будет получать Property.

На самом деле, крайне странно наблюдать разговоры о коммерции, особенно на данном этапе разработки игры. Учитывая что на данный момент игра просто выглядит как очередная попытка влезть на хайптрейн автобаттлеров. Да-да, знаю, "я не могу раскрыть свою ГЕНИАЛЬНЕЙШУЮ ИДЕЮ, потому что вы её сразу же своруете". Так вот, идея не стоит ничего, особенно если она плоха, а её качество на данный момент можешь оценить только ты, что ни капли не объективная оценка

Теперь главный вопрос, почему люди будут играть в криво релизованного, лагающего, плохо выглядящего клона какой-то другой дрочильни? И дополнительный вопрос, как люди вообще о ней узнают? На рекламу нужны довольно солидные деньги, которые сомневаюсь что есть у разработчика-одиночки, зажопившего 20-40 баксов на +- красивые ассеты.

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



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

раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества