try again | учусь делать игры
125 subscribers
21 photos
96 videos
6 files
102 links
Itch: https://dvpk.itch.io/
DTF: https://dtf.ru/tryagain
X: https://x.com/tryAgain_dev

Telegram: @BasharovRuslan

Когда я вырасту, буду делать игры
Download Telegram
UnityInActon-RUS.pdf
13 MB
Привет!

В этом канале я буду делиться своим прогрессом в области разработки игр. По работе я программирую на 1С, а несколько лет назад немного трогал Unity, так что моя база в game-dev — почти нулевая.

Чтобы как-то структурировать процесс, буду фиксировать здесь свои цели, описывать процесс их достижения и делиться промежуточными результатами.

Моя первая цель — пройти руководство «Unity в действии», дальше будет видно.
👍21🔥1
Грибной шутер.gif
24.1 MB
Сходу поделюсь первичными результатами. Первую часть книги я закончил: вспомнил, что к чему, нарисовал сцену, написал несколько скриптов — передвижение персонажа, передвижение NPC, стрельба, реакция на попадание.

Ещё вот этот гриб я нарисовал в Blender и засунул в уровень вместо NPC.

Получился некий психологический хоррор-шутер.
👍2🥰2🔥1
Media is too big
VIEW IN TELEGRAM
Вчера начал вторую часть книги «Unity в действии».
Глава "Игра Memory на основе новой 2D-функциональности".

Был соблазн скипнуть — глава скучноватая.
Но ведь никто не говорил, что геймдев — это весело.
Так что потихоньку привыкаю к страданиям 😀
❤‍🔥2👏2🔥1
Media is too big
VIEW IN TELEGRAM
Сегодня грыз 6-ю главу — «Двухмерный GUI для трёхмерной игры».

🔧 По книжке:
• Сделал HUD с отображением количества поверженных врагов
• Добавил кнопку открытия меню

🛠 От себя:
• Переназначил открытие меню на Esc
• Добавил в игру паузу
• Сделал HP-бары для врага и игрока
• Научил мухомора преследовать игрока — стало повеселее

Главу до конца не добил — в меню пока нет настроек, доберусь потом.
👍3🔥21
Media is too big
VIEW IN TELEGRAM
«Двухмерный GUI для трёхмерной игры» — глава пройдена.

✔️ Поработал с классом PlayerPrefs — он используется для хранения простых настроек. С его помощью реализовал сохранение сложности игры.

✔️ В проекте применил класс Messenger — очень удобный инструмент. Ранее я на «костылях» реализовывал счётчик фрагов: контроллер здоровья в момент когда HP кончается напрямую вызывает UI-контроллер и сообщает, что нужно увеличить число в углу экрана. Это работало, но с точки зрения архитектуры реализация кривая. Теперь же UI-контроллер «подписывается» на событие ENEMY_DIED, а контроллер здоровья рассылает это событие.

✔️ После каждого убитого противника сделал увеличение скорости игрока — что-то вроде прокачки уровней. Для этого в контроллере персонажа использовал ту же подписку на событие ENEMY_DIED, как и в предыдущем случае.

✔️ Изучая реализацию класса Messenger, познакомился с делегатами в C# и узнал, как для них работает оператор сложения(для меня было неочевидно).
❤‍🔥2👍2🔥1
Начал главу 7. «Игра от третьего лица: перемещение и анимация игрока»

Столкнулся с таким понятием как "Кватернион". На самом деле о них говорилось ещё во второй главе, но особых подробностей там не было. Вот цитата из книги:

Кватернионы представляют собой математическую конструкцию для представления вращения объектов. Они отличаются от углов Эйлера, то есть используемого нами подхода с осями X, Y, Z. Помните обсуждение тангажа, рысканья и крена? В этом случае вращения были представлены с помощью углов Эйлера. Кватернионы… совсем другие. Объяснить их природу сложно, так как для этого нужно углубиться в запутанные дебри высшей математики, включающие в себя движение через четыре измерения. Если вам требуется детальное объяснение, попробуйте прочесть документ http://wat.gamedev.ru/articles/quaternions (Ссылка не работает).


В тот момент я решил особо не заморачиваться, так как операции мне показались интуитивно прозрачными. Но с пониманием кода седьмой главы уже возникли проблемы. Очень не хотелось оставлять за спиной белых пятен, поэтому три дня курил матчасть: углы Эйлера, Кватернионы и gimbal-lock.

📚 Вот материалы, которые мне помогли:
1. Отличная статья на хабре, в которой объясняются Кватернионы. Я немного приблизился к их пониманию читая этот материал.
2. Статья про Gimbal Lock - достаточно просто рассказано. Возможно, полностью не раскрывает проблему интерполяции, но в первом приближении понимание даёт.
3. Подробный материал про кватернионы на практических примерах. Тут, кстати есть про интерполяцию.

⸻⸻⸻⸻⸻

Итог: полного понимания кватернионов пока нет. Вернусь к ним позже(наверное).

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

Двигаюсь дальше.

#Заметки
👍4❤‍🔥3🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
«Игра от третьего лица: перемещение и анимация игрока» — глава пройдена.

✔️ Заставил камеру свободно летать вокруг персонажа. Было непросто — пришлось вникнуть в математику пока разбирался с кодом. Подробнее об этом писал в прошлом посте.

✔️ Реализовал управление игроком относительно камеры. Много работал с позициями и ориентацией объектов — как в глобальных так и в относительных координатах. От себя добавил вертикальное перемещение камеры, а ещё — эффект отдаления при движении (заметно на видео).

✔️ Изучил два способа распознавания поверхности под персонажем:
1. Коллайдер — капсула, регистрирующая соприкосновения.
2. Луч — пускаем вниз и смотрим, насколько близко точка столкновения.

✔️ Впервые поработал с анимацией: персонаж теперь бегает и прыгает. Анимации учебные — взяты вместе с моделью, но для меня это все равно в новинку. В будущем обязательно попробую сделать собственные.
🔥2👨‍💻2
Media is too big
VIEW IN TELEGRAM
Глава 8: «Добавление интерактивных устройств и элементов»

Игра про двери

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

✔️ Я немного модифицировал механику:
— Добавил кнопку, с которой взаимодействует игрок. Она уже отправляет команду дверям открываться или закрываться.
— По аналогии реализовал нажимную пластину — достаточно просто встать на неё или положить сверху предмет. Принцип тот же: она передаёт сигнал дверям.

✔️ Также познакомился с таким понятием, как триггер — это невидимый объект, который можно “проходить сквозь”, но при этом он реагирует на вход и выход. В моём случае — двери теперь открываются и закрываются при попадании игрока или объекта в зону триггера(На видео для наглядности сделал зону триггера полупрозрачной).

✔️ Немного поиграл с гравитацией. Для объектов в Unity физика включается довольно просто. Добавляем к игровому объекту компонент Rigidbody, и его минимально настраиваем.
Чтобы персонаж мог толкнуть коробку, требуется пара строк кода: в момент прикосновения к коробке мы передаём объекту, с которым возникла коллизия, силу по определённому вектору.

А вот небольшой анонс на будущее:

•Создание элементов, которые игрок сможет сохранять как инвентарь
•Применение кода для управления состоянием игры, например данными об инвентаре
•Подготовка и использование элементов инвентаря
🔥4👍1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
«Добавление интерактивных устройств и элементов» — глава пройдена!

✔️ Реализован инвентарь с возможностью подбирать предметы и использовать их. Например, аптечка теперь пополняет здоровье.

✔️ Инвентарь и здоровье сделаны в отдельных классах, а доступ к ним осуществляется через паттерн «Локатор служб» — специальный объект-реестр, который хранит ссылки на InventoryManager и PlayerManager. На примере этого класса я подробнее изучил механику Coroutine.

✔️ Из интересного: по книге аптечка, батарейка и ключ — просто разноцветные сферы. Чтобы было не так скучно, я нарисовал им модели в Blender и добавил анимацию вращения.

✔️Ещё теперь дверь не открывается просто так — чтобы она работала, нужно подобрать ключ и взять его в руки.

📚 Вот несколько статей, которые помогли мне с пониманием материалов главы:

Статья про yield
Статья про Coroutine
Статья про паттерн "Локатор служб"
👍2🆒2🔥1
Media is too big
VIEW IN TELEGRAM
Глава 9 «Подключение игры к Интернету»

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

Из реально интересного:

✔️ Подобрал текстуры для объектов в сцене. Довольно медитативное и творческое занятие. Технически ничего сложного, а вот эстетически — отдельная большая тема.

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

✔️ Поработал плотнее с корутинами и на примерах наконец-то проникся их пользой. Если коротко — они позволяют выполнять долгие операции в “псевдо-фоне”, не подвешивая игру.

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



Из душного:

Заголовок главы звучит громко, но по факту всё “взаимодействие с интернетом” свелось к отправке простеньких HTTP-запросов.

✔️ Небо в игре изначально задаётся сводкой погоды из HTTP-сервиса Яндекса — в частности, параметром облачности. В начале игры отправляем запрос к API, получаем данные и на их основе устанавливаем погоду.

✔️ Другой пример — загрузка картинок. В ролике видно, как два билборда на стене получают текстуры во время игры. Первый — скачивает картинку из интернета, второй — берёт её уже из кэша.

✔️ Отправка данных на сервер. Поднял простой PHP-сервер из нескольких строк, который принимает входящие запросы и пишет их в текстовые файлы. Простой, но рабочий пример отправки данных. В ролике я для этого использовал зеленый триггер

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

✔️ В книге для HTTP-запросов используется устаревший класс WWW. Я переделал примеры на UnityWebRequest. Так и правильнее, и с корутинами работает лучше — WWW у меня не получилось заставить работать без подвисаний.



📚 Материалы:

Статья про лямбда-выражения
Ещё статья про корутины
Видео про корутины и не только

P.S. Отдельная благодарность чату GPT, который помог разобраться с использованием UnityWebRequest

#Заметки
👏51🔥1
Media is too big
VIEW IN TELEGRAM
Глава 10. «Звуковые эффекты и музыка» 🎧

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

✔️ Поместил два фоновых источника музыки в сцену.
(Можете не верить, но громкоговоритель я рисовал сам.)

✔️ Персонажу добавил звук ходьбы и прыжка — пришлось увеличить скорость передвижения и настроить анимации, чтобы ноги попадали в дорожку.

✔️ Кнопки и двери теперь при активации тоже звучат.

✔️ Внутри помещений добавил эффект реверберации.

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

Я потратил около часа только на то, чтобы «спиратить» несколько звуков для учебного задания. Можно представить, насколько это затратная часть в реальном проекте. Профессия саунд-дизайнера явно появилась не просто так.

📽 P.S. Видео смотреть, разумеется, со звуком!
❤‍🔥3👍3
Media is too big
VIEW IN TELEGRAM
Закончил Главу 10: «Звуковые эффекты и музыка»

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

✔️ Добавил звуки нажатия кнопок в интерфейсе — мелочь, а приятно.

✔️ Перевёл музыку из объекта в 3D-сцене в фоновое 2D-звучание.

✔️ Реализовал плавное переключение треков фоновой музыки — что-то вроде примитивного кроссфейда.

✔️ Агитка группировки “Долг” теперь звучит не из громкоговорителя, а из приёмника, который я на коленке собрал в Blender.

Впереди последние две главы.
❤‍🔥2👏2🔥1
Media is too big
VIEW IN TELEGRAM
Глава 11. «Объединение фрагментов в готовую игру»

Прошёл половину главы. Технически — ничего нового: все инструменты уже встречались ранее. Но это совсем не проблема — повторение — мать учения.

Более предметно:

✔️ Переделана камера.
Игра внезапно сменила жанр на изометрическую RPG :)

✔️ Изменено управление.
Теперь перемещение персонажа реализовано через клик по локации, куда нужно бежать. Раньше использовались клавиши WASD.

✔️ Обновлён интерфейс.
Исправлено отображение инвентаря и HP. Теперь интерфейс вызывается по отдельной кнопке и реализован через Canvas (как и меню настроек звука).
Раньше иконки предметов отрисовывались с помощью OnGUI() — устаревший и примитивный способ.

✔️ Возвращение грибочка.
В игру добавлен наш старый знакомый. Его снаряды пока просто уменьшают HP — ни на что, кроме цифр, это не влияет.



P.S.
Начинаю потихоньку думать, чем заняться после завершения книги. Есть несколько разрозненных идей — пора оформлять их в конкретный план.
🔥4👌32
Media is too big
VIEW IN TELEGRAM
Завершена Глава 11: «Объединение фрагментов в готовую игру»

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

✔️ Также реализован механизм сохранения и загрузки игры. При сохранении игры сохраняются HP игрока, его инвентарь и текущий уровень. При загрузке игры запускается соответствующий уровень, восстанавливаются HP и инвентарь игрока.
❤‍🔥5👍1🔥1
POV.exe
652 KB
Закончил изучать руководство «Unity в действии».

Вся последняя глава посвящена процессу сборки игры, чтобы можно было полноценно играть за пределами редактора Unity. Собрал “POV.exe” — прикрепляю его к посту. Можно попробовать, если интересно. Запускайте под Windows.

Не скажу, что книга даёт глубокое понимание Unity, но для того, чтобы начать — вполне подойдёт. Лет 6-7 назад я уже пытался погрузиться в мир геймдева и начинал с этого руководства. Тогда меня хватило всего на пару недель, после чего я забросил эту авантюру. Сейчас для меня было важно не повторить тот опыт и пройти учебник до конца.

Теперь можно двигаться дальше.
🔥41👍1
А ещё вот такую книжечку приобрел

#Оффтоп
🔥42
Промежуточных итогов пост

Учебник по Unity я осилил — и это хорошо. Но это лишь немного приблизило меня к заветной мечте — называться инди-разработчиком. Работа над настоящей игрой куда эффективнее в плане получения опыта. Особенно если удаётся успешно её завершить.

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

Рабочее название: Sky Delivery.

#SkyDelivery | Подробнее о проекте
6❤‍🔥3🔥3
Media is too big
VIEW IN TELEGRAM
Оно летает!

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

За это время мой словарный запас немного пополнился: «тангаж, рысканье, угол атаки, срыв потока» — это всё я так или иначе постарался отразить в моём прототипе.

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

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

#SkyDelivery | Подробнее о проекте
🔥73👏3