Моя разработка игры 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. Для себя первым шагом я решил сделать ИИ (искусственный интелект) противников. Переместив ассеты в проект я создал примерный макет карты:

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

Моя разработка игры Tower Defense. Часть первая Unity, Разработка, Gamedev, Стратегия, Tower Defense, Indiedev, Инди игра, Инди, Гифка, Длиннопост

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

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