124

Моя разработка игры Tower Defense. Часть первая

ДЛЯ ЛЛ: Разработка игры от человека далекого от разработки игр. Захотел написать игру в стиле Tower Defense. Написал диздок. Разработал часть механик.

Всем привет!

С самого детства я мечтал разрабатывать игры, но возможность и уверенность появилась только сейчас. Этим постом я хочу открыть серию постов о разработке своей собственной игры (а может и не одной). А также это будет для меня маленьким дневником и порфтолио, с которым в будущем я планирую искать себе работу в игровой индустрии. С чего начинается разработка игры (по моему мнению)? Ну естественно с выбора движка. Мой выбор пал на Unity, потому что я имею какие-то базовые знания C#. В качестве жанра первой игры я выбрал Tower Defense, так как считаю что такой проект будет не сложным для начинающего разработчика. А в качестве платформы выбрал Android.

Примерный план разработки:

  1. Разработать идею и предварительный стиль игры.

    1. Рассмотреть игры конкурентов.

    2. Определиться с графикой.

    3. Определиться с музыкой и звуковыми эффектами.

  2. Разработка дизайн документа с описанием основных механик игры.

  3. Написание кода.

  4. Получение удовлетворения от разработки.

  5. Создание рабочего билда и тесты.

Если прочитали до этого момента - пожелайте мне удачи.

Итак... приступаем.

Поиграв в небольшое количество, скачанных с Play Market'а, игр, а также посмотрев обзоры на ютубе я пришел к выводу что правильным вектором в разработке такой игры будет грамотная экономическая система. Графика и саундтрек не так сильно важны, как действительно сложный, но честный геймплей. Карты не должны быть "читерскими" со стороны разработчика, но и не должны проходиться легко. Также должна быть изюминка, которая, выделит твою игру среди остальных.

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

Дизайн документ.

Базовый геймплей:

  • Покупка и продажа башен:

    • Быстрый выстрел по одной цели.

    • Медленный выстрел по одной цели с откидыванием.

    • Выстрел по области.

    • Выстрел по нескольким противникам одновременно.

  • Улучшение башен и ловушек:

    • Ледяная ветка (Уменьшение скорости противника).

    • Огненная ветка (Периодический урон).

    • Электрическая ветка (Урон по цепочке).

  • Постоянное улучшение:

    • Скорость атаки башни.

    • Урон башни.

    • Урон ловушек.

  • Покупка мин:

    • Мина.

    • Мина для отбрасывания (Не улучшается).

  • Противники:

    • Маленький противник:

      • Высокая скорость.

      • Маленькое количество HP.

      • Слабый урон.

    • Средний противник:

      • Средняя скорость.

      • Среднее количество HP.

      • Средний урон.

    • Большой противник:

      • Малая скорость.

      • Большое количество HP.

      • Большой урон.

  • Особенности противников:

    • Огненные противники:

      • Резист к огненной атаке.

      • Увеличен получаемый урон от ледяной атаки.

    • Ледяные противники:

      • Резист к ледяной атаке.

      • Увеличен получаемый урон от огненной атаки.

    • Каменные противники:

      • Резист ко всем видам атак (в том числе и обычных).

      • Увеличен получаемый урон от электрической атаки.

Приступаем к разработке.

Проект решил делать в 3D, а в качестве рендера решил использовать URP. Для себя первым шагом я решил сделать ИИ (искусственный интелект) противников. Переместив ассеты в проект я создал примерный макет карты:

Для начала создадим и настроим навигационную сетку для наших противников. При импорте не забудьте моделей включить Read/Write для создания навигации во время игры. Для объектов по которым можно ходить я добавил NavMeshModifier с модификатором Walkable, а также переместил их на слой Ground. Для тех моделей по которым ходить нельзя ставим соответственно Not Walkable. С помощью скрипта будем делать динамическую сетку. Создадим пустой объект, добавим на него NavMeshSurface (Предварительно установив пакет в Window -> Package Manager -> Packages: Unity Registry -> AI Navigation). Создадим скрипт с названием Navigation Baker и добавим на только что созданный объект. Пропишем чтобы сетка строилась когда запускается игра.

Для создания противника в первую очередь нам потребуется класс. Если у вас возникают вопросы по скриптам или просто рекомендации - пишите в комментарии, отвечу по возможности.

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

Теперь стоит приступить к нашим башням. Для этого соберем из моделек подходящую башню и поставим на свободную клетку. Теперь создадим новый скрипт. Скрипт выглядит вот так:

На данном этапе мы имеем двигающихся противников, стреляющую (пусть и не видно) башню, автоматическую постройку навигационной сетки.

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

Всем спасибо! Увидимся в следующих постах!