Товер дефенс что это
8 затягивающих игр жанра Tower Defense или «Оборона башни»
Tower Defense (дословно «Оборона башни», сокращенно TD) – это популярная разновидность стратегий в реальном времени. Задача игрока сводится к защите локации от волн атакующих врагов. Для этого на пути вражеских орд он возводит те самые башни, апгрейдит их, ремонтирует и т.д.
Первый представитель жанра – Rampart, вышел в 1990-ом году. Его популярность привела к появлению нескольких карт в StarCraft, которые назвали Turret Defense. Позже похожие карты запилили для Warcraft III и понеслась. Сегодня это отдельный полноценный жанр.
Plants vs. Zombies
Разработчик: PopCap Games
Год выхода: 2009
Изначально проект разрабатывался как продолжение игры Insaniquarium, но идея оказалась настолько сногсшибательной, что гейм-дизайнер Джордж Фэн принял решение выпустить ее отдельно. Решение оказалось верным, потому что до сих пор это одна из самых популярных игр в жанре.
По сюжету у игрока замечательный дом, в котором лишь одна проблема – он стоит напротив кладбища, с которого по ночам прут орды восставших мертвецов. Естественно, игроку нужно защищать свою жизнь и имущество! Для этого на пути зомби он может сажать боевые растения, которые будут с улыбками на лицах (буквально) упокаивать шибко бодрую нежить. Для высадки растений требуются единицы солнца, которые накапливаются автоматически и выдаются некоторыми видами местной флоры.
Зомби движутся к дому по нескольким линиям, их векторы строго определены. Линии разделены на сегменты, в которые можно высаживать растения. Если хотя бы один зомби проходит свою линию до конца, его убивает автоматическая газонокосилка. Но газонокосилка «одноразовая», поэтому второй зомби, который пройдет эту линию, проникнет в дом и вы потерпите поражение.
Revenge of the Titans
Разработчик: Puppygames
Год выхода: 2011
Этот проект явно создавался фанатами Starship Troopers. Иначе откуда здесь мухоподобные инопланетяне, эпизод допроса гигантского монстра посредством введения в мозг бедолаги здоровенной трубки, да и общая концепция «сначала они нас, теперь мы их». Не хватает только Дениз Ричардс, что с лихвой компенсируется местными персонажами.
С сюжетом все ясно – инопланетные вторженцы «нагнули» землян в первой волне, но теперь пришел наш черед. И в таком режиме 50 миссий, перемежающихся забавными сценками с отличным юмором.
Суть каждой миссии сводится к уничтожению наступающих волн инопланетян. Штаб игрока находится в центре карты. Толку от него нет, но если его уничтожат – миссия провалена. Игрок может строить перерабатывающие заводы, которые конвертируют кристаллы в валюту, и множество средств обороны – турели, мины и т.д.
Игра радует периодическими катаклизмами – от взрывов, сносящих все на карте, до внезапной заморозки всех движущихся объектов. Само собой, определенные оборонительные решения наиболее эффективны против определенных инопланетян. Но фишка игры в исследованиях. Между миссиями можно открыть одну новую технологию.
Технологий больше, чем миссий, поэтому придется выбирать. Плюс все они взаимосвязаны, а финальный эффект не всегда очевиден. Экономическая модель в игре неплоха, так что вполне можно застопориться, «наисследовав не то». Помимо сюжетки есть выживание с предустановками и бесконечный режим. Мотивирует онлайновая таблица рекордов.
Anomaly: Warzone Earth
Разработчик: 11 bit studios
Год выхода: 2011
Это тоже Tower Defense, хотя и нетипичный. Стратегии этого жанра называют «обратными», потому что в них игроку нужно не выстраивать защиту от врагов, а прорываться через такую защиту, выстроенную компьютером. В остальном все, как в обычных TD. Хотя конкретно Anomaly приносит с собой несколько интересных новшеств.
По сюжету все типичней некуда – есть покоренная Земля, есть группа крутых вояк, которые готовы отбить свою колыбель у вторженцев. С азами нас знакомит режим «Кампания», где даже есть неплохая коллизия, в финале которой – неизменная победа над злобными пришельцами. Задача каждой миссии – прорыв через оборону противника из точки А в точку Б.
Для прорыва есть отряд с командиром, который комплектуется колесными боевыми единицами по вашему желанию. Единицы движутся в определенном порядке, у каждой машины свои сильные и слабые стороны. Машины могут и будут гибнуть, но важно сохранить машину командира. Который, кстати, умеет вызывать артиллерийские удары и вообще красавчик. Есть несколько подходов к заветной точке, все они представляют собой простенькие лабиринты с вражескими турелями разных видов.
Тут действительно придется много думать, выбирая оптимальные пути и грамотно комбинируя возможности своей команды. Единственная тактика, которая здесь не работает, это тупой раш. Есть починка, камуфляж и несколько дополнительных фишек. По механикам все. По картинке – хороша на свое время, сейчас средненькая. Увлекает игра нетривиальным подходом к жанру и ураганной динамикой.
Orcs Must Die! 2
Разработчик: Robot Entertainment
Год выхода: 2012
Первая часть тоже хороша, но вторая чуть свежее и с новыми плюшками. Это снова нетипичный Tower Defense, потому что к стратегии у нас добавляется экшен. В сумме получается зубодробительный антидепрессант, где все, что нужно для победы, это валить орков, да побольше!
Под управлением игрока – маг, который защищает крепость или гномьи шахты (определяется миссией) от наступающих орков. Во второй части персонажа два – маг и магичка. Сражаться с орчатиной можно как одиночку, так и в кооперативе (не обязательно выбирать разных персонажей).
Задача – не допустить орков в центр локации. Враг движется по нескольким извилистым коридорам. Для защиты коридоров у нас есть мы и средства обороны – ловушки, амулеты, стражники, заклинания. Идея в том, чтобы оперативно устанавливать новые оборонительные объекты на атакуемых направлениях, а самому врываться в толпу врагов там, где горячее всего.
Кстати, персонажи тут весьма колоритные. Перед каждой миссией нас ждет кат-сцена, а герои будут забавно переругиваться. Все это добавляет атмосферности и фана. Помимо сюжетки с разными уровнями сложности есть бесконечный режим и рейтинговая таблица.
Prime World: Defenders 2
Разработчик: Nival
Год выхода: 2018
Есть мнение, что первая часть была бодрее, но с этим можно поспорить. Вторая помимо классических механик обзавелась куда более красивой графикой и масштабными спецэффектами. Кроме того, разработчик активно поддерживает именно вторую часть, постоянно допиливая ее и проводя ивенты.
Кратко по сюжету – в фэнтезийном мире идет война за энергию прайм между поборниками технологий и любителями метать фаерболы. Суть каждой миссии сводится к защите объекта, артефакта, либо залежей прайма. Защищаемся от крипов, которых тут зовут чудью. Важное отличие от большинства DT – крипам нужно не только дойти до объекта, но и донести его до собственного респа, возвращаясь тем же путем. Это несколько облегчает нам задачу и дает больше времени для адаптации под меняющиеся условия.
Крошить чудь можно двумя путями – заклинаниями и башнями. Заклинания кастуются персонажами (их на карте нет), не требуют ресурсов, но есть откат. Башни воюют перманентно, но нужны ресурсы для постройки. В нашем распоряжении 41 герой, 21 заклинание и 54 башни. Мало? Тогда используйте систему рун, чтобы составлять для башен уникальные билды! Помимо прайма, который нужен для постройки башен, из крипов сыплется серебро, его же дают за прохождение миссий и убийство боссов (особо крутые крипы). За серебро между миссиями покупаем рандомные наборы карт.
Ах, да, это частично ККИ. В том смысле, что все герои, заклинания и башни представлены картами. Из карт перед миссией мы собираем колоду, которой и играем. Естественно, определенные типы башен и заклинаний хороши против определенных врагов. На высоких уровнях можно собрать что-то более-менее универсальное. И это лишь начало, потому что героев, башни и заклинания можно апгрейдить, на поле боя возникают аномалии, в корне меняющие стратегию. А еще есть PvP режим. И все это бесплатно!
Kingdom Rush
Разработчик: Ironhide Game Studio
Год выхода: 2011-20
Речь о целой франшизе. Оригинальная игра называлась Kingdom Rush, во второй части к названию добавили Tower Defense, в третьей дописали Frontiers, четвертая называется Vengeance. Общие механики во всех частях одинаковые, так что рассмотреть их логично вместе, но сосредоточимся на последней, как на свежаке.
Сюжет во всех частях взаимосвязан и довольно прост. Есть империя с людьми, эльфами и гномами, а есть темный колдун с орками, гоблинами и нежитью. Что дальше – понятно. Основная механика тоже типичная – есть несколько линий, по которым движутся враги. Все они сходятся в точке, куда врага пускать нельзя. По ходу движения крипов противника игрок строит башни для обороны. Всё.
Башен, естественно, ни одна и не две, причем их можно прокачивать до четырех грейдов. Потом еще можно добавить башне особую специализацию. Фишка в том, как именно это реализовано. У вас не просто башни, выпускающие стрелы и фаерболы. Например, башня с гоблинами действует так – гоблины-камикадзе надевают реактивные ранцы, взлетают и взрываются в толпе врагов. Башня культистов силами темных адептов накачивает магический кристалл, и тот как лазером срезает наступающих. Есть еще герои с авто-абилками и расовые способности.
Все это люто апгрейдится между миссиями, докупаются расходники, дающие разные бонусы объектам и героям. Реиграбельность обеспечивается режимами повышенной сложности. На данный момент фанаты серии отмечают у финальной части только одну проблему – она короткая, при плотном подходе хватает всего на несколько дней, максимум на неделю. Но! Это лишь одна из четырех частей, и другие, поверьте, не хуже.
Deathtrap
Разработчик: NeocoreGames
Год выхода: 2015
В The Incredible Adventures of Van Helsing 2, которую тоже издали Neocore, в некоторых миссиях игроку нужно было расставлять турели и ловушки, защищая важный объект от врагов. Эти миссии комьюнити зашли, и компания решила выпустить полноценную игру на базе данной механики. Вот, что получилось!
По сюжету, издревле существовали два мира – мир демонов и мир смертных. Их связывали тайные проходы, которые древний орден стражей перекрыл крепостями. В этих крепостях защитники мира людей тысячи лет сражаются с демонами, чтобы не пустить их в земли смертных. Дальше у нас на выбор три колоритных персонажа со своим стилем боя и умениями.
Перед каждой миссией игрок расставляет на карте защитные башни и ловушки, затем «дает отмашку» и крепость атакуют демоны. При этом игрок тоже носится по карте, чтобы принять личное участие в боях на самых тяжелых направлениях. За убийства демонов даются кристаллы, за них прямо в процессе боя покупаются новые защитные сооружения. Изначально враги прут по одной линии, но с каждой следующей волной линий становится больше. Враги тоже матереют. Если в ворота все же прошмыгнула пара демонов – не проблема, но если два десятка – начинаем миссию сначала.
За победы дается опыт, а за опыт между миссиями можно прокачивать что угодно – башни, ловушки, героя, всякие бонусные фишки покупать. В игре есть кооп, когда игроки вместе защищают крепость. Есть PvP режим, где один обороняется, а другой атакует. Плюс режимы с повышенной сложностью. В общем, увлечься реально.
They Are Billions
Разработчик: Numantian Games
Год выхода: 2019
Завершим наш топ еще одной нетипичной TD с элементами классической RTS. Название говорящее – врагов здесь действительно миллиарды, это не преувеличение. Выступают врагами зомби. В далеком будущем с около-стимпанковым сеттингом и рядом уникальных механик.
Итак, зомби-апокалипсис наступил. И уже давно. Осталась всего пара тысяч выживших, которые под предводительством Квинтуса Крейна строят Новую Империю. По сюжету все. По механикам интереснее. В зависимости от режима и миссии игрок начинает с главным героем и парой разведчиков.
Такими силами можно завалить лишь небольшую группу зомби, которых в окрестностях – пруд пруди. Нужно сходу разведать местность и начать строить поселение. Поселение добывает ресурсы, производит некоторых юнитов, но главное – собирает выживших с локации. Задачей игрока становится защита выживших и поселения. Тут начинается собственно Tower Defense. Зомби прут с разных направлений, которые нужно оборонять башнями. Башни разные, их можно модернизировать. Плюс игрок возводит стены и нанимает новых боевых юнитов.
Поселение прогрессирует технологически (если выживает), что открывает доступ к новым средствам обороны и более крутым защитникам. Из других особенностей – зависимость от локации. Например, в пустыне меньше древесины, и это большая проблема. В целом, игра довольно хардкорная, так как даже один зомби, прорвавшийся через вашу оборону, может заразить все население города и уничтожить его. Так что расслабиться не получится!
Yet Another Zombie Defense, Legion TD 2, Eden Rising: Supremacy, Protolife, Last Hope – игр в жанре Tower Defense очень много. И еще больше планируется к релизу, например, Orcs Must Die! 3, на который хочется возложить надежды. А вы какие проекты в этом жанре считаете топовыми?
Создание игры Tower Defense в Unity — Часть 1
Игры жанра tower defense приобретают всё большую популярность, и это неудивительно — немногое может сравниться с удовольствием от наблюдения за собственными линиями защиты, уничтожающими злых врагов! В этом туториале из двух частей мы создадим игру tower defense на движке Unity!
Вы узнаете, как сделать следующее:
Примечание: вам необходимы начальные знания Unity (например, вы должны знать, как добавляются ассеты и компоненты, что такое префабы) и основы языка C#. Для изучения всего этого я рекомендую вам пройти туториалы по Unity Шона Даффи или серию Beginning C# with Unity Брайана Мокли.
Я буду работать в версии Unity для OS X, но этот туториал подойдёт и для Windows.
Сквозь окна башни из слоновой кости
В этом туториале мы создадим игру tower defense, в которой враги (маленькие жучки) ползут к печеньке, принадлежащей вам и вашим миньонам (разумеется, это монстры!). Игрок может размещать монстров в стратегических точках и улучшать их за золото.
Вот скриншот готовой игры:
Монстры, объединяйтесь! Защищайте печеньку!
Приступаем к работе
Скачайте эту заготовку проекта, распакуйте её и откройте проект TowerDefense-Part1-Starter в Unity.
В заготовке проекта есть ассеты графики и звуков, готовые анимации и несколько полезных скриптов. Скрипты не связаны напрямую с играми жанра tower defense, поэтому я не буду здесь о них рассказывать. Однако если вы хотите больше узнать о создании 2D-анимаций в Unity, то изучите этот туториал по Unity 2D.
В проекте также содержатся префабы, которые мы позже дополним, чтобы создать персонажей. Наконец, в проекте есть сцена с фоном и настроенным интерфейсом пользователя.
Откройте GameScene, находящуюся в папке Scenes и задайте для режима Game соотношение сторон 4:3, чтобы все метки правильно совпадали с фоном. В режиме Game вы увидите следующее:
Место помечено крестом: расположение монстров
Монстров можно ставить только на точки, помеченные знаком x.
Чтобы добавить их в сцену, перетащите Images\Objects\Openspot из Project Browser в окно Scene. Пока позиция для нас не важна.
Выбрав в иерархии Openspot, нажмите на Add Component в Inspector и выберите Box Collider 2D. В окне Scene Unity покажет прямоугольный коллайдер с зелёной линией. Мы будем использовать этот коллайдер для распознавания нажатий мыши на этом месте.
Аналогичным образом добавьте к Openspot компонент Audio\Audio Source. Выберите для параметра AudioClip компонента Audio Source файл tower_place, который находится в папке Audio, и отключите Play On Awake.
Нам нужно создать ещё 11 точек. Хотя существует искушение повторить все эти действия, в Unity есть решение получше: Prefab!
Перетащите Openspot из Hierarchy в папку Prefabs внутри Project Browser. Его название станет в Hierarchy синим, это означает, что он присоединён к префабу. Примерно так:
Теперь, когда у нас есть заготовка-префаб, мы можем создать сколько угодно копий. Просто перетащите Openspot из папки Prefabs внутри Project Browser в окно Scene. Повторите это 11 раз, и у нас появится в сцене 12 объектов Openspot.
Теперь воспользуемся Inspector, чтобы задать этим 12 объектам Openspot следующие координаты:
Размещаем монстров
Чтобы упростить размещение, в папке Prefab проекта есть префаб Monster.
Префаб Monster готов к использованию
На данный момент он состоит из пустого игрового объекта с тремя разными спрайтами и анимациями стрельбы в качестве дочерних элементов.
Каждый спрайт представляет собой монстра с разными уровнями силы. Также в префабе содержится компонент Audio Source, который будет запускаться для воспроизведения звука, когда монстр стреляет лазером.
Теперь мы создадим скрипт, который будет располагать Monster на Openspot.
В Project Browser выберите в папке Prefabs объект Openspot. В Inspector нажмите на Add Component, а затем выберите New Script и назовите скрипт PlaceMonster. Выберите в качестве языка C Sharp и нажмите на Create and Add. Так как мы добавили скрипт к префабу Openspot, то у всех объектов Openspot в сцене теперь будет этот скрипт. Отлично!
Дважды нажмите на скрипт, чтобы открыть его в IDE. Затем добавьте две переменные:
По одному монстру на точку
Чтобы на одну точку можно было поставить только одного монстра, добавьте следующие метод:
Теперь добавим следующий код, чтобы размещать монстра, когда игрок нажимает на этот GameObject:
Этот код располагает монстра при нажатии мыши или касании экрана. Как он работает?
Использование подходящего префаба
Сохраните файл и вернитесь в Unity.
Чтобы задать переменную monsterPrefab, сначала выберите в браузере проекта объект Openspot из папки Prefabs.
В Inspector нажмите на кружок справа от поля Monster Prefab компонента PlaceMonster (Script) и выберите в появившемся диалоговом окне Monster.
Вот и всё. Запустите сцену и создавайте монстров на разных местах нажатием мыши или касанием экрана.
Отлично! Теперь мы можем создавать монстров. Однако они выглядят как странная каша, потому что отрисовываются все дочерние спрайты монстра. Сейчас мы это исправим.
Повышаем уровень монстров
На рисунке ниже показано, что с повышением уровня монстры выглядят всё более устрашающе.
Какой милаха! Но если вы попробуете украсть его печенье, этот монстр превратится в убийцу.
Скрипт используется в качестве основы для реализации системы уровней монстров. Он отслеживает силу монстра на каждом уровне и, разумеется, текущий уровень монстра.
Добавим этот скрипт.
Задание уровней монстров
Изобретать велосипед заново — обычно плохая идея.
В верхней части MonsterData.cs добавим следующую конструкцию using :
Примечание: обобщения — это мощная концепция C#. Они позволяют задавать типобезопасные структуры данных, не придерживаясь типа. Это удобно для таких классов-контейнеров, как списки и множества. Чтобы подробнее узнать про обобщённые структуры, прочитайте книгу Introduction to C# Generics.
Теперь добавим следующую переменную в MonsterData для хранения списка MonsterLevel :
Сохраните файл и переключитесь в Unity, чтобы настроить каждый уровень.
Выберите Prefabs/Monster в Project Browser. В Inspector теперь отображается поле Levels компонента MonsterData (Script). Задайте для параметра size значение 3.
Далее зададим стоимость для каждого уровня:
Развернём Prefabs/Monster в Project browser, чтобы видеть его дочерние элементы. Перетащите дочерний Monster0 в поле visualization Element 0.
Далее назначим Element 1 значение Monster1, а Element 2 значение Monster2. В GIF показан этот процесс:
Когда вы выбираете Prefabs/Monster, префаб должен выглядеть так:
Задание текущего уровня
Вернитесь к MonsterData.cs в IDE и добавьте к MonsterData ещё одну переменную.
В частной переменной currentLevel мы будем хранить текущий уровень монстра.
Теперь зададим currentLevel и сделаем его видимым для других скриптов. Добавьте следующие строки в MonsterData вместе с объявлением переменных экземпляра:
Довольно большой кусок кода на C#, правда? Давайте разберём его по порядку:
OnEnable будет вызван сразу же при создании префаба (если префаб был сохранён в состоянии enabled), но OnStart не вызывается, пока объект не начинает выполняться как часть сцены.
Сохраните файл и вернитесь в Unity. Запустите проект и расположите монстров; теперь у них отображаются правильные спрайты самого нижнего уровня.
Апгрейд монстров
Вернитесь в IDE и добавьте в MonsterData следующий метод:
Можно использовать этот метод, чтобы узнать, возможен ли апгрейд монстра.
Для повышения уровня монстра добавьте следующий метод:
Проверяем функционал апгрейдов
Сохраните файл и вернитесь к PlaceMonster.cs в IDE. Добавьте новый метод:
Реализуем улучшения за золото
Чтобы включить опцию апгрейда, добавим к OnMouseUp ветвь else if :
Сохраните файл и вернитесь в Unity. Запустите игру разместите и улучшите любое количество монстров (но это пока).
Платим золотом — Game Manager
Пока мы можем сразу же построить и улучшить любых монстров, но разве это будет интересно в игре?
Давайте рассмотрим вопрос золота. Проблема с его отслеживанием заключается в том, что нам придётся передавать информацию между разными игровыми объектами.
На рисунке ниже показаны все объекты, которые должны принимать в этом участие.
Все выделенные игровые объекты должны знать, сколько золота есть у игрока.
Для хранения этих данных мы воспользуемся общим объектом, к которому смогут получать доступ другие объекты.
Нажмите правой клавишей на Hierarchy и выберите Create Empty. Назовите новый объект GameManager.
Добавьте к GameManager новый скрипт C# с названием GameManagerBehavior, а затем откройте его в IDE. Мы будем отображать общее количество золота игрока в метке, поэтому в верхней части файла добавьте следующую строку:
Теперь, когда GameManager знает о метке, как нам синхронизировать количество хранящегося в переменной золота и отображаемой в метке величины? Мы создадим свойство.
Добавьте в GameManagerBehavior следующий код:
Насколько щедрыми мы будем? Добавьте в Start() следующую строку, чтобы дать игроку 1000 золота, или меньше, если вам жалко денег:
Назначение объекта метки скрипту
Сохраните файл и вернитесь в Unity. В Hierarchy выберите GameManager. В Inspector нажмите на круг справа от Gold Label. В диалоговом окне Select Text выберите вкладку Scene и выберите GoldLabel.
Запустите сцену и в метке отобразится Gold: 1000.
Проверяем «кошелёк» игрока
Откройте в IDE скрипт PlaceMonster.cs и добавьте следующую переменную экземпляра:
Мы воспользуемся gameManager для получения доступа к компоненту GameManagerBehavior объекта GameManager сцены. Чтобы задать её, добавьте в Start() следующее:
Возьми мои деньги!
Мы пока не вычитаем золото, поэтому дважды добавим внутрь OnMouseUp() эту строку, заменив каждый из комментариев // TODO: вычитать золото :
Сохраните файл и вернитесь в Unity, улучшите несколько монстров и посмотрите на обновление значения Gold. Теперь мы вычитаем золото, но игроки могут строить монстров, пока им хватает места; они просто берут деньги в долг.
Бесконечный кредит? Отлично! Но мы не можем этого позволить. Игрок должен иметь возможность ставить монстров, пока у него достаточно золота.
Проверка золота для монстров
Переключитесь в IDE на PlaceMonster.cs и замените содержимое CanPlaceMonster() следующим:
Задание для вас: самостоятельно добавьте в CanUpgradeMonster() проверку, достаточно ли у игрока золота.
Она будет проверять, больше ли у игрока Gold, чем цена апгрейда.
Сохраните и запустите сцену в Unity. Теперь попробуйте-те как неограниченно добавлять монстров!
Теперь мы можем строить только ограниченное количество монстров.
Башенная политика: враги, волны и точки маршрута
Настало время «проложить дорогу» нашим врагам. Враги появляются на первой точке маршрута, движутся к следующей и повторяют процесс, пока не дойдут до печенья.
Заставить врагов двигаться можно так:
Создание дороги из точек маршрута
Нажмите правой клавишей на Hierarchy и выберите Create Empty, чтобы создать новый пустой игровой объект. Назовите его Road и расположите в точке (0, 0, 0).
Теперь нажмите правой клавишей на Road в Hierarchy и создайте ещё один пустой игровой объект как дочерний элемент Road. Назовите его Waypoint0 и разместите в точке (-12, 2, 0) — отсюда враги будут начинать своё движение.
Аналогичным образом создайте ещё пять точек маршрута со следующими названиями и позициями:
Создание врагов
Теперь создадим несколько врагов, чтобы они могли двигаться по дороге. В папке Prefabs есть префаб Enemy. Его позиция равна (-20, 0, 0), поэтому новые экземпляры будут создаваться за пределами экрана.
Двигаем врагов по дороге
Добавьте новый скрипт C# с названием MoveEnemy к префабу Prefabs\Enemy. Откройте скрипт в IDE и добавьте следующие переменные:
В waypoints в массиве хранится копия точек маршрута, а строка [HideIninspector] над waypoints гарантирует, что мы не сможем случайно изменить это поле в Inspector, но по-прежнему будем иметь доступ к нему из других скриптов.
currentWaypoint отслеживает, из какой точки маршрута идёт враг в текущий момент времени, а в lastWaypointSwitchTime хранится время, когда враг прошёл по ней. Кроме того, мы храним скорость speed врага.
Добавим эту строку в Start() :
Так мы инициализируем lastWaypointSwitchTime со значением текущего времени.
Чтобы враг двигался вдоль маршрута, добавим в Update() следующий код:
Разберём код пошагово:
Сообщаем врагам направление движения
В своём текущем состоянии враги не знают порядка точек маршрута.
Выберите Road в Hierarchy и добавьте новый скрипт C# под названием SpawnEnemy. Откройте его в IDE и добавьте следующую переменную:
Мы будем использовать waypoints для хранения ссылок на точку маршрута в сцене в нужном порядке.
Сохраните файл и вернитесь в Unity. Выберите Road в Hierarchy и задайте Size массива Waypoints равным 6.
Перетащите каждый из дочерних элементов Road в поля, вставив Waypoint0 в Element 0, Waypoint1 в Element 1 и так далее.
Теперь у нас есть массив, содержащий точки маршрута в правильном порядке — заметьте, враги никогда не отступают, они упорно стремятся к сладкой награде.
Проверяем, как всё это работает
Откройте в IDE SpawnEnemy и добавьте следующую переменную:
Чтобы создать врага при запуске скрипта, добавим в Start() следующий код:
Сохраните файл и вернитесь в Unity. Выберите в Hierarchy объект Road и выберите для параметра Test Enemy префаб Enemy.
Запустите проект и посмотрите, как враг движется по дороге (в GIF для большей наглядности скорость увеличена в 20 раз).
Заметили, что он не всегда смотрит туда, куда идёт? Это забавно, но мы ведь пытаемся сделать профессиональную игру. Поэтому во второй части туториала мы научим врагов смотреть вперёд.
Куда двигаться дальше?
Мы уже сделали многое и быстро движемся к созданию собственной игры в жанре tower defense.
Игроки могут создавать ограниченное число монстров, а по дороге бежит враг, направляясь к нашей печеньке. У игроков есть золото и они могут апгрейдить монстров.
Скачайте готовый результат отсюда.
Во второй части мы рассмотрим создание огромных волн врагов и их уничтожение. До встречи!