Статья удалена
Предыстория
О создании собственной игры не задумывался наверное только ленивый.
Собственная вселенная, имя в титрах, пассивный доход, возможность попасть в студию где сделают игру с корованами. В общем, мотивов много — цель одна.
И я тоже перед собой поставил такую цель. Год назад... Именно тогда я купил книгу, которая станет краеугольным каменем моего девлога. После чего я открыл её, прочитал вступление, и забросил. Ошибкой которую я совершил тогда была покупка нескольких книг сразу. Ведь я автоматически отбросил эту «до лучших времён». Лучшие времена не особо хотели наставать. Я упорно и усердно учился, работал, ещё больше учился и ещё больше работал.
И около месяца назад я почувствовал, что достаточно выучился и проработал на Х период. Я перевёлся на очное образование (я дизайнер нарратива в цифровых видеоиграх ес чо (просто кичусь красивым названием факультета)) , поменял работу на ту которая мне приносит овермного денюжек сейчас, встретил свою любовь и переехал в новую квартиру.
Здесь уютно и круто. Правда здесь два дивана, которые занимают слишком много места, но я с этим уживаюсь.
Моя девушка подарила мне красивую кружку в тематике Зельды, я заказал себе новый стол, и в конце концов осилил свой первый спринт.
На данный момент я не знаю, и не имею ни малейшего понятия, будет ли это игра, или же комплексный прототип. Я пытался к концу спринта подготовить диздок, но закончил всё слишком быстро. По этому на данном этапе он слишком примитивен и бесполезен. Всё-таки, я делаю всё по книге, по этому и игра в конце будет прямиком из книги)
Но, конечно же, я наперёд продумываю некоторые механики или идеи. Я планирую в определённый момент отойти от основной линии, и начать добавлять свой функционал и свои приколюхи. По этому, может быть в каком-то из девлогов появиться ссылка на миро.
Зачем здесь собственно этот девлог? Вряд ли вам всем интересно, но я хочу в первую очередь делать это для себя. Я считаю, что ведение девлога поможет мне научиться управлять своим временем и приоритетами. Так же, я планирую с каждого из вас изъять по 5к (прости, Тимур) . А ещё, это просто удобный способ структурировать свой мысли и следить за своим прогрессом.
Книга называеться Unity и C# «Практика Программирования Игр" от J.Ross»а.
В ней используется методология спринтов, а сама игра создаётся как 3д-симулятор-гербалист.
Начнём: )
Создание проекта
Такая простая, но такая трепетная часть. Словно дверь в новый необъятный мир.
Передомной стояла задача о создании проекта, следовательно, нужно было выбрать инструменты.
Скажу честно, я не из тех кто долго выбирал между Юнити и УЕ. Всё-таки, я считаю что при должном желании и умениях можно перекатиться практически без потерь. А поскольку Юнити, как и собственно Шарп проще в обучении, мой выбор сразу пал на него.
Я веб программист по профессии. Тружусь над развитием приложения для онлайн маркетинга. Ну вот эмейлики вот это высылать, дизайнер для лэндингов создавать, вебинарчики всякие, ну такое. И пишу я, к счастью (к сожалению) не на плюсах. Но тем не менее, некий опыт с Шарпом у меня есть, по этому я сразу не раздумывая выбрал Юнити как движок для своего проекта.
Дальше нужно было выбрать, что же всё-таки создавать. Я не противник курсов. Наоборот, всецело поддерживаю, если человек знает зачем идёт на курсы. Но я не знал, по этому начал шерстить интернет в поисках какой-то книги аля «дай ручку, и я проведу тебя по миру геймдева». И нашёл! Спустя несколько десятков скипов, я нашёл то что мне нужно.
Книга рассказывает как от момента клика в юнити дойти до релиза игры в стим. По началу меня отпугивало то, что там нет основной базы по Шарпу. Я переживал, всё ли я пойму, мол, хватит ли мне скилла. Мои опасения были напрасны. Наоборот, это круто, что не было душного вступления. Я сразу всё схватывал.
Пролистав пару страниц кода, и не заметив ничего, чего я не понимал (это я просто не дошёл к делегатам) я рванулся создавать проект в самом Юнити.
В принципе, это не очень да и сложно было. В целом я тыкал туда сюда, пытался понять что делают кнопочки, зачем они это делают, и как часто мне придётся их тыкать.
Быстренько накинул структуру проекта папками, скачал дефолтные ассеты и запустил Райдер.
Создание первой модели
Я пропустил этот шаг. Простите. Я слишком плох во всяких художественных делах, по этому я просто пропустил это, даже не попытавшись создать тестовый «домик». Но я обязательно вернусь!
Теория о Enum’ах
Дальше по списку шли стартовые структуры данных. Автор рассказывал об энамах. В принципе, ничего нового для меня. Даже атрибут [Flags]. Да, я до сих пор не до конца понимаю как он работает с | и ||, но я знаю что он существует, и примерно понимаю зачем.
Не думаю, что здесь есть ещё о чём рассказать.
Нужные структуры данных
Насколько я понял, автор книги жуткий любитель структур. Он делает структуры для всего. Не мне судить, плохой или хороший это подход.
В рамках нескольких заданий из этой серии, я буду создавать структуры данных которые должны повсеместно использоваться в игре, вроде — болезни, шансы на болезни, предметы, травки, и всё такое.
Впрочем, здесь обычный скучный код Шарпа, в котором нет ничего такого вау. Единственное, с чем я столкнулся, это то, что при обращении к делегату под ифом, Райдер на всё лицо мне светил ошибкой invalid embedded statement.
Я честно, говоря, так и не понял на 100 процентов что это такое, по этому если кто-то выкупает и хочет объяснить - буду премного благодарен.
XML конфиги
Здесь тоже не шибко много. Обычные функции для затягивая данных из xml файлов из папочки ресурсов. Выглядит просто, но интересно. Но почему-то мне кажеться что это ещё будет переделываться.
Менеджеры и синглтон
-Мне пожалуйста одну инстанцию, и мне моему сыну тоже
-throw new Exception("Can't create new ObjectName copy");
Я
Именно так бы мне хотелось начать этот абзац.
Поскольку я всё-таки работаю разработчиком, я знаю что такое паттерн синглтон. Или антипаттерн. Решать вам.
Я знаю как его использовать, и буду его использовать. А плохо ли это, не вам судить. Не судите - и не судимы будете.
А ещё некоторые классы называются GameManager и чтототамещёManager.
Насколько я знаю, это плохая практика, но я обязательно это перепишу.
Глобальный компонент для НПС
Здесь автор очень коротко объясняет про наследования. Так же здесь мы выносим логику конкретного НПС которая связана с юнити от общей логики остальных НПС которая не связана с юнити.
Как по мне, очень офигенная часть. Обязательно к ней вернусь, дабы перечитать и понять ещё раз.
Система дня и ночи
Самая интересная часть в этом спринте.
По первых, наконец то отходишь от кода, и начинаешь немножко тыкать в самом движке. Дабы потом снова вернуться к коду. Эту систему я написал сам, по этому она жутко плохая. По этому развлечения ради, прикладываю код внизу, и разрешаю бросать в себя помидоры:
Скорее всего выше много, что можно было бы сделать в разы лучше. И я обязательно сделаю.
Кстати, для создания этой системы мне пришлось узнать что такое кватернион! На самом деле, картинка сложная, а вещь вполне понятная.
Советую ознакомиться всем!
Префаб
Здесь я ещё немножко поигрался с префабами. Создал свой тестовый префаб для НПС, закинул его в ресурсы, и привязал к нему компонент который писал выше. Здесь я уже могу посмотреть на игру!
Имплементация логики НПС
Как я писал выше, игра это симулятор гербалиста. И основная задача которую он делает в своей деревушке - помогает работягам и лечит их от всяких болячек. По этому я тестово привязал логику заболеваний с системой дневного цикла, и теперь у меня мои болванки болеют регулярно.
В целом, здесь я баловался с конфигами и временем.
Какая работа проделана?
Первый спринт казался чем-то маленьким и простеньким, а занял у меня больше года!
Хихихи, на самом деле что-то около недели.
За это время я:
- писал код. Плохой и хороший
- читал и пытался понять что такое делегаты
- собственноручно написал менеджер цикла дня
- настрочил кучу ненужных конфигов
- создал спавнер болванок с болезнями
- импрувнул свои знания физики
- выпил очень много чая, потому что болел
- сделал диздок для игры, которую не собирался делать, и удалил его
Да, я знаю что это маленький результат. И знаю, что на фоне некоторых трудяг здесь я выгляжу просто жалкой букашкой.
Но я это не хвастаюсь своими навыками или своей гениальностью.
Я просто рассказываю о том, как я создаю игру, и получаю от этого удовольствие.
Всем добра и счастья :)