Дальнейший путь юного падавана

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

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

Однако, я не сдаюсь и пытаюсь выкроить данное время. Получается это с переменным успехом.

Поэтому я в одной статье опишу все свои приключения, за последние несколько месяцев.

Арканоид

Сперва я сделал свой вариант игры Арканоид, используя библиотеку SFML (да, это еще не Unity).
Здесь я подошел к вопросу уже с более грамотной стороны и попытался реализовать проект уже с нормальным разбитием на классы, на их области действия и зоны ответственности.
Далее, я попытался реализовать MVC-модель. В принципе, что-то из этого получилось, но все равно у классов остались связи между друг другом, хоть и слабые.
Также, здесь я подошел к вопросу через интерфейсы и их реализацию конечными классами.

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

Проект получился визуально вот таким:

Я реализовал такую фишечку, чтобы выбирать между Play и Exit — путем подбрасывания мячика с платформы. Если целимся в Play, то начнется игра, а если в Exit — то будет выход.

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

Видео процесса игры находится вот тут:

А сам проект здесь

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

Ооо это было ужасно.

После того, как я закончил с SFML и перешел к модулям по Unity, я думал, что вот сейчас-то я начну творить красоту по щелчку пальца.
Однако, это оказалось, мягко говоря, не так.

Я столкнулся с несколькими проблемами:

  1. В Unity немного другая логика работы, на которую поначалу было тяжело перестроиться
  2. В Unity надо понимать хотя бы чуть чуть (для начала) векторы и манипуляции с ними
  3. Соответственно, надо понимать, что такое координаты — мировую систему координат и локальную
  4. Каждый компонент имеет 100500 настроек и поначалу ты просто теряешься между ними и ничего не понимаешь.

Но я парень не из пугливых и начал разбираться со всем этим делом.

Сперва был модуль, где на готовом движке нужно было дописать кое-какие скрипты и расширить функциональность данного движка. Я это, конечно, сделал, но абы-как. Т.к., повторюсь, в Unity другая логика работы и на нее непросто перестроиться.

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

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

Затем я просто пошел по данному списку и начал изучать всё подряд, попутно записывая свои выводы в Obsidian.

За пару месяцев я закрыл очень мало пробелов, т.к. много времени заняло понять, что такое система координат, как объекты на ней располагаются и что такое кватернионы (не физический и математический смысл, а как с ними работать в Unity).

Но какая-никакая база в голове у меня появилась, курс к тому моменту разморозился, и я отправился в свое путешествие дальше.

Ball Blast Clone

Следующий проект — это реализация клона игры Ball Blast. Это та игра, где повозка стреляет в летающие объекты на уровне, которые разбиваются и дают очки.

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

Т.е. дело было как — вместе с преподавателем, по видео, я создал костяк проекта, а дальше надо было добавить некоторые фишечки и систему улучшения повозки — самостоятельно.

Что я сделал:

  1. Систему улучшения, когда за монетки покупаются характеристики у повозки.
  2. Систему бонусов — порой из камней вылетают не монетки, а шары разных цветов, которые позволяют получить бонус — либо заморозить на некоторое время движение камней, либо сделать повозку бессмертной. При этом время до окончания бонуса высвечивается на экране
  3. Систему сохранения и загрузки результатов через бинарный .dat — файл
  4. Систему баланса — характеристики камней растут по мере прокачки повозки.

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

вот так на листочке я описывал изначальную архитектуру, кто за что отвечает и кто с кем связан

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

Гемплей проекта можно посмотреть на следующем видео:

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

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

Ссылка на проект здесь

Space Shooter

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

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

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

Мне это показалось слишком «изи», поэтому я сделал целую сюжетную историю — куда идти, зачем идти, какая цель и т.д. По моему сюжету: игрок является капитаном космического корабля, ему приходит задание «неподалеку обнаружен неопознанный космический корабль, нужно пришвартоваться к нему, зайти внутрь и понять, что за формы жизни на нем обитают». Ну а далее, игрок летит к данному кораблю, попадает внутрь, летит до точки стыковки, стыкуется и на этом уровень заканчивается.

Затем я добавил некоторые механики:

  1. Систему респавна в разных точках — когда погибаешь в середине уровня, не начинаешь сначала, а спавнишься близко к этому месту
  2. Анимации — входа в корабль, стыковки
  3. Плавное перемещение камеры, следующей за игроком
  4. Стрелка — указатель на цель, чтобы понимать куда лететь

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

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

То есть, чем больше практики — тем лучше. В голове образовывается уже фундамент знаний, на который уже ложатся новые знания гораздо легче, чем в самом начале. Например, в проекте я столкнулся с новым для меня понятием «Параллакс-эффект». Это когда задний фон двигается с разной скоростью, в зависимости от удаления объектов на заднем плане от игрока, что дает пространственный эффект в 2D-игре.

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

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

Выводы

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

  1. Практика, практика и еще больше практики!
  2. Даже если всё кажется непонятным и неизвестным — практикуйся, пытайся понять, иначе так и останешься на прежнем уровне;
  3. В любой учебе всегда тяжело, но всегда будет переломный момент, когда ты уже начинаешь что-то понимать и дальнейшая учеба даётся легче;
  4. Не понимаешь архитектуру, которую тебе дали в модуле — перепиши ее под себя, пока не начнешь понимать;
  5. Старайся сделать хорошо;
  6. Не знаешь как что-либо сделать? Интернет знает всё.
  7. Всегда изучай вглубь. Может ты потратишь гораздо больше времени, но и понимать ты будешь гораздо лучше.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: