Tower Defence на движке Unity — Часть 1

Привет всем! Это моя первая статья для хабра и она предназначена для новичков. В ней я хотел бы рассказать о том, как создать маленькую 3D игру жанра Tower Defence на движке Unity.

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

image

Часть 1 Часть 2

Начало


Запустим Unity. У меня стоит Unity Personal. Создадим новый проект под названием «MyTowerDefence». Игра будет трёхмерной, аналитику Unity мы использовать не будем.

image

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

Создадим 3 новые папки:

  • Папку «Materials», она будет хранить материалы объектов.
  • Папку «Prefabs», она будет хранить наши заготовки объектов с настроенными компонентами, скриптами и иерархией дочерних объектов.
  • Папку «Scripts», она будет хранить скрипты.

image

Сторожевая башня


Создадим новый игровой объект куб, выбрав в главном меню «GameObject -> Cube». Дадим ему новое имя «Body» в переводе с английского «Тело». Это будет тело сторожевой башни.

Теперь создадим пустой объект. Его не видно на сцене. Назовём его «Tower» — «Башня». В данном случае он будет главным объектом дерева сторожевой башни. Позицию созданных объектов поставим по нулям.

image

Закинем объект «Body» в объект «Tower».

image

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

Изменим масштаб тела башни.

image

Создадим новый объект куб. Позицию выставим в ноль и немного сплющим куб по координате Y.

image

Назовём куб «Head» — «Голова». Поставим голову на место и приклеим её к объекту «Tower».

image

Теперь нам нужна пушка. Создаём новый куб с именем «Gun» — «Пушка». Делаем так, что бы куб хотя бы отдалённо напоминал её.

image

Нужен ещё один вспомогательный объект, который будет центром вращения пушки. Создадим пустой объект и привяжем к нему объект «Gun». А его привяжем к объекту «Tower».

image

Настраиваем позицию пушки.

image

image

Сохраним сцену с любым именем. Создадим папку для хранения сцен и поместим созданную сцену туда. Теперь наведём красоту. В папке материалов создаём новый материал с именем «TowerBody».

image

Зададим цвет и применим материал к телу башни, перетащив его из окна «Project» на объект.

image

Дублируем материал с новым именем «TowerHead». Выполняем аналогичные действия для головы. Также поступим и для пушки.
Всё, красоту навели.

image

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

image

Заставим её вращаться вместе с головой, переместив вспомогательный объект пушки в объект «Head».

image

Повращаем пушку. И тут мы видим, что то необъяснимое… (Мелодия «Секретные материалы»)

image

Ну да ладно, к этому мы вернёмся дальше, когда будем вращать пушку при помощи скрипта. Создадим из объекта «Tower» новый префаб, перетащив его в папку «Prefabs».

image

Оригинал башни удаляем со сцены.

Поле битвы


Создадим объект плоскость. На плоскости будет происходить вся тусовка. Применим к ней любой материал.

image

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

image

Переименуем плоскость в «Ground».

Нам нужна платформа для возможности установки на ней сторожевой башни. Для этого создадим куб, позицию проставим по нулям и сплющим его по оси Y. Также, отключим отбрасывание тени. Назовём куб «TowerPlace».

image

Закинем его в папку префабов. Теперь дублируем объект на сцене, нажав сочетание клавиш CTRL+D. После, зажав CTRL перетащим объект в сторону. Этим действием мы перетащили новую копию объекта через привязку к сетке, которая позволяет перемещать объект на одинаковую длину шагов. Сейчас шаг сетки равен единице.

image

Вот кстати интересная особенность префабов. Если мы изменим, как сейчас, размер объекта, и нажмём кнопку «Apply» — «Применить», то новые параметры этого префаба распространятся на все его копии.

image

Теперь нужно заполнить копиями объекта всю плоскость. Ах да, забыл выставить позицию плоскости по нулям, как раз из-за этого всё отображается криво.

image

Камера по той же причине расположена неправильно. Создадим новый пустой объект «TowerPlaces» хранящий объекты мест для установки башен.

image

Теперь сформируем дорожку для движения ботов, простым удалением объектов «TowerPlace».

image

Waypoints


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

image

Приподнимем объект по оси Y что бы он не сливался с плоскостью. Неважно на сколько, главное не трогаем координаты X и Z, они должны быть по нулям.

image

Закинем его в папку префабов и переместим оригинал к началу пути с зажатой клавишей CTRL. Заметьте координаты объекта, сохраняют своё целочисленное значение по оси X и Z.

image

Дублируем вэйпоинты и размещаем на краях поворота, держа при этом зажатой клавишу CTRL. Делаем это всё до конца пути.

image

Поместим все вэйпоинты в пустой объект.

image

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

Spawner


Создадим куб, который будет работать спаунером, т.е. заниматься созданием ботов на сцене. Занулим позицию и поставим объект перед на началом пути. Можно изменить его масштаб на своё усмотрение.

image

В папке материалов создадим новый материал. Присвоим его спаунеру. Становится красиво.

image

В папке скриптов создаём новый скрипт с именем «Spawner». Перейдём в редактор кода двойным щелчком по скрипту. Редактором кода может быть Visual Studio, MonoDevelop или вовсе обычный блокнот. На работу скрипта это никак не повлияет, если только на удобство. А на ошибки укажет редактор Unity.

Завершение первой части


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

image

Для большей наглядности можно посмотреть видеоурок:



P. S.: Если у вас есть вопросы или пожелания, оставляйте свои комментарии на YouTube под видео.
На хабре я комментарии не читаю.

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

Спасибо за внимание! Конец первой части.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 19

  • UFO just landed and posted this here
      –3
      Я пока не думал об этом, но для решения этого вопроса можно написать скрипт динамического построения уровня и присвоить его пустому объекту на сцене. Вскоре я рассмотрю этот вопрос. Спасибо за идею!
        0
        Главное меню — начальная сцена, каждый уровень — отдельная сцена. Контент для всех сцен может быть одинаковым.
          0
          На самом деле решать можно по разному. Зависит от задач. Работать через разные сцены не всегда бывает удобным. Очень часто удобнее делать одну сцену с геймплеем, и одну сцену для интерфейсов (главное меню, стор, что-то ещё). А уровни сериализовать каким-нибудь JSON, XML, YAML, а после строить их на старте сцены. Если вариант для начинающих, то думаю да. По сцене на уровень удобнее всего.
        0
        Отличная статья, все просто и понятно.
          +1
          Коллайдер на движущемся объекте без RigidBody — убивать надо за такие статьи. Так и формируется мнение, что «юнити — тормозное уг».
            0

            Было бы очень интересно почитать про разные Unity Best Practices, чтобы узнать, какие подходы могут привести к "тормознутому говну" и как не надо делать.

              0
              Да на том же хабре говорилось ни раз про всякие best practices, про то, что колайдеры считаются physx-ом статичным миром если не помечены rigidbody и их перемещение приводит к полному перестроению статичного мира физики (в unity5 это немного пофиксили с обновлением physx, но сама проблема осталась). Так же были статьи про tower defense на юнити — эта статья хуже по всем параметрам: учит плохому, информации практически не несет по сравнению с аналогами.
                0
                Вот тут есть неплохая подборка: https://unity3d.com/ru/learn/tutorials/topics/best-practices
              –1
              Отличная статья!
              Можно пожелания? Хотелось-бы в будущем увидеть статью про кастомный редактор созданный через EditorWindow. Например для создания уровня.
              Спасибо.
                –2
                Спасибо за идею! Обязательно рассмотрю данную тему, так как самому очень интересно создать что-нибудь подобное.
                  0
                  Кастомный редактор написать можно, но это будет скорее уровень «Intermediate», т.к. придется решать вопросы удобной сериализации (ScriptableObject Vs Json/XML/Yaml etc.) и расширяемости как «сохраненок», так и самого редактора. Предполагаю, что цикл статей задумывался с прицелом на абсолютных новичков в Unity. Но, вообще, идея хорошая и, как для первой статьи, все достойно:)
                    0
                    Да, не обязательно так серьезно с Json/xml/etc, можно и по проще, на примере этой игры. Например выбирать диапазон x,y, spawn point, ну и хотя-бы пробелы для пути.
                  0
                  Вперед пилить вторую часть! А за эту большое спасибо!
                  Ps. Только решил начать изучать, потому ваша статья весьма кстати
                    0
                    Рад, что понравилось! Думаю, завтра выйдет продолжение.
                    0
                    Статья очень подробная, для новичков будет полезна. Но расставлять вручную вейпойнты — совершенно лишнее, алгоритм поиска пути на 60-70 строчек кода, можно им и расставлять при загрузке уровня.
                      –1
                      Спасибо за замечание! В следующих статьях, я обязательно расскажу об этом.
                      0
                      Очень похоже на How to make a Tower Defense Game от Brackeys. Если эти видео являются одним из источников для написания статьи, то не плохо было бы упомянуть об этом. А так вообще похвально, начинающим юнитиводам будет полезно. Успехов в создании следующих частей :)
                        0
                        Вейпоинты конечно хорошо, но было бы интересно посмотреть вариант, при котором игрок сам формирует стены из пушек и других элементов.

                        Only users with full accounts can post comments. Log in, please.