Так как я постоянно нахожусь на разрыве, совмещая две учебы, работу, тренировки и еще миллион дел, то на сайт порой времени совсем не остается.
Однако, я не сдаюсь и пытаюсь выкроить данное время. Получается это с переменным успехом.
Поэтому я в одной статье опишу все свои приключения, за последние несколько месяцев.
Арканоид
Сперва я сделал свой вариант игры Арканоид, используя библиотеку SFML (да, это еще не Unity).
Здесь я подошел к вопросу уже с более грамотной стороны и попытался реализовать проект уже с нормальным разбитием на классы, на их области действия и зоны ответственности.
Далее, я попытался реализовать MVC-модель. В принципе, что-то из этого получилось, но все равно у классов остались связи между друг другом, хоть и слабые.
Также, здесь я подошел к вопросу через интерфейсы и их реализацию конечными классами.
Немного украсил проект музыкой и красивыми картинками (честно стыренными из интернета). Получился, в принципе, играбельный арканоид, который можно в дальнейшем развивать, как собственный проект. Но мне это уже показалось не совсем интересным, да и пилить весь движок с нуля — довольно утомительное занятие. В той же Unity — очень многое на себя берет сам движок, а разрабатывая на чистом SFML необходимо продумывать и программировать всё. Абсолютно всё.
Проект получился визуально вот таким:
Я реализовал такую фишечку, чтобы выбирать между Play и Exit — путем подбрасывания мячика с платформы. Если целимся в Play, то начнется игра, а если в Exit — то будет выход.
Ну а дальше просто бросаем мячик, он летает, мы его ловим и т.д.
Видео процесса игры находится вот тут:
А сам проект здесь
Старт разработки в Unity
Ооо это было ужасно.
После того, как я закончил с SFML и перешел к модулям по Unity, я думал, что вот сейчас-то я начну творить красоту по щелчку пальца.
Однако, это оказалось, мягко говоря, не так.
Я столкнулся с несколькими проблемами:
- В Unity немного другая логика работы, на которую поначалу было тяжело перестроиться
- В Unity надо понимать хотя бы чуть чуть (для начала) векторы и манипуляции с ними
- Соответственно, надо понимать, что такое координаты — мировую систему координат и локальную
- Каждый компонент имеет 100500 настроек и поначалу ты просто теряешься между ними и ничего не понимаешь.
Но я парень не из пугливых и начал разбираться со всем этим делом.
Сперва был модуль, где на готовом движке нужно было дописать кое-какие скрипты и расширить функциональность данного движка. Я это, конечно, сделал, но абы-как. Т.к., повторюсь, в Unity другая логика работы и на нее непросто перестроиться.
Ладно, подумал я, дальше в модулях я уже разберусь и будет проще. Однако, следующий модуль показал мне, что я еще хуже стал что-либо понимать и вообще стал падать в прострацию с крутящимися в голове вопросами — что я вообще делаю, как реализовать то и это, как понять, где объект находится на сцене, что такое кватернионы, зачем мне вообще это и т.д.
Когда я понял, что я мало чего понял, то я заморозил обучение на курсе на пару месяцев и посвятил это время закрыванию пробелов.
Сперва я выписал в Obsidian все пробелы в своих знаниях (список получился внушительным, на картинке примерно половина списка):
Затем я просто пошел по данному списку и начал изучать всё подряд, попутно записывая свои выводы в Obsidian.
За пару месяцев я закрыл очень мало пробелов, т.к. много времени заняло понять, что такое система координат, как объекты на ней располагаются и что такое кватернионы (не физический и математический смысл, а как с ними работать в Unity).
Но какая-никакая база в голове у меня появилась, курс к тому моменту разморозился, и я отправился в свое путешествие дальше.
Ball Blast Clone
Следующий проект — это реализация клона игры Ball Blast. Это та игра, где повозка стреляет в летающие объекты на уровне, которые разбиваются и дают очки.
В данном проекте я уже более-менее начал понимать, что я делаю и что я хочу сделать. А полностью развернуться мне удалось уже на самостоятельной работе.
Т.е. дело было как — вместе с преподавателем, по видео, я создал костяк проекта, а дальше надо было добавить некоторые фишечки и систему улучшения повозки — самостоятельно.
Что я сделал:
- Систему улучшения, когда за монетки покупаются характеристики у повозки.
- Систему бонусов — порой из камней вылетают не монетки, а шары разных цветов, которые позволяют получить бонус — либо заморозить на некоторое время движение камней, либо сделать повозку бессмертной. При этом время до окончания бонуса высвечивается на экране
- Систему сохранения и загрузки результатов через бинарный .dat — файл
- Систему баланса — характеристики камней растут по мере прокачки повозки.
Правда, для этого всего пришлось несколько дней потратить на продумывание архитектуры. Однако, в дальнейшем мне было довольно просто добавлять что-либо в проект, т.к. архитектура позволяла (правда я всё реализовал на менеджерах, что является моветоном в разработке, но по другому я пока не умею)
Впервые у меня получился более-менее играбельный проект, в который даже можно позалипать некоторое время.
Гемплей проекта можно посмотреть на следующем видео:
Мне настолько понравился данный проект, что я даже решил его доработать и добавить еще фишечек, однако я итак уже не успевал по дедлайнам, поэтому проект пришлось заморозить на будущее (правда я не уверен что наступит это будущее и я буду дальше делать этот проект).
Я благодарен данному проекту, т.к. он мне позволил существенно расширить стек и впервые я начал понимать, что я делаю, как я это делаю и что за что отвечает. То есть — уже не методом тыка.
Ссылка на проект здесь
Space Shooter
Следующий проект — это реализация космического шутера. Это довольно длинный и существенный модуль, который дает очень много понятий, расширяющих стек.
Как обычно — сперва нам дали теорию и необходимый остов проекта, далее я реализовывал уже самостоятельно домашнее задание.
По своей давней привычке — я увлекся и начал реализацию домашки «со звездочкой». В принципе задание было простым — сделать коридорный уровень, где корабль должен пролететь и не удариться о стенки, иначе он взрывается.
Мне это показалось слишком «изи», поэтому я сделал целую сюжетную историю — куда идти, зачем идти, какая цель и т.д. По моему сюжету: игрок является капитаном космического корабля, ему приходит задание «неподалеку обнаружен неопознанный космический корабль, нужно пришвартоваться к нему, зайти внутрь и понять, что за формы жизни на нем обитают». Ну а далее, игрок летит к данному кораблю, попадает внутрь, летит до точки стыковки, стыкуется и на этом уровень заканчивается.
Затем я добавил некоторые механики:
- Систему респавна в разных точках — когда погибаешь в середине уровня, не начинаешь сначала, а спавнишься близко к этому месту
- Анимации — входа в корабль, стыковки
- Плавное перемещение камеры, следующей за игроком
- Стрелка — указатель на цель, чтобы понимать куда лететь
Также я добавил текстуры, освещение и прочие украшательства, чтобы проект выглядел симпатичным и радовал глаз.
При реализации я уже не чувствовал себя, что я ничего не знаю, не понимаю и не умею. Какой-никакой фундамент в голове уже образовался и я просто генерил идеи и (даже абсолютно не зная, как их реализовывать) пытался их реализовать. Гуглил тонны информации, искал ролики в ютубе, выписывал себе какие-то пункты, которые следует подтянуть.
То есть, чем больше практики — тем лучше. В голове образовывается уже фундамент знаний, на который уже ложатся новые знания гораздо легче, чем в самом начале. Например, в проекте я столкнулся с новым для меня понятием «Параллакс-эффект». Это когда задний фон двигается с разной скоростью, в зависимости от удаления объектов на заднем плане от игрока, что дает пространственный эффект в 2D-игре.
Оказалось, что это понятие совершенно не новое и на ютубе куча роликов, как реализовать данный эффект в игре сотней разных способов. И данная информация уже не повергла меня в шок, как это бывало в начальных модулях. Наоборот — я выписал себе новые свежие идеи, к которым смогу вернуться, если потребуется реализовать данный эффект самостоятельно.
В итоге получился проект, который мне даже понравился самому, хотя я очень критично к себе отношусь. Посмотреть гемплей можно в следующем видео:
Выводы
Проделав всю эту работу, я пришел к определенным выводам, которые помогают учиться и работать над своим развитием дальше:
- Практика, практика и еще больше практики!
- Даже если всё кажется непонятным и неизвестным — практикуйся, пытайся понять, иначе так и останешься на прежнем уровне;
- В любой учебе всегда тяжело, но всегда будет переломный момент, когда ты уже начинаешь что-то понимать и дальнейшая учеба даётся легче;
- Не понимаешь архитектуру, которую тебе дали в модуле — перепиши ее под себя, пока не начнешь понимать;
- Старайся сделать хорошо;
- Не знаешь как что-либо сделать? Интернет знает всё.
- Всегда изучай вглубь. Может ты потратишь гораздо больше времени, но и понимать ты будешь гораздо лучше.