Ранее рассмотрено создание 1 уровня https://dzen.ru/suite/0bdea864-aac0-4b2d-a8c5-b68c436fdb32
Будем придерживаться оригинала уровня, разве что фон и цвет элементов можно
поменять.
Что нового в этом уровне?
* умение игрока стрелять
* полоса здоровья игрока
* противники в виде шестеренок, вредящих здоровью игрока
* блокирующие двери
* опасные платформы
Для начала пойдет, допилим в процессе...
Дабы не изобретать велосипед из иерархии 1 уровня копируем во 2-й все, кроме фоновой музыки - тут потом поставим другую
Теперь уберем лишнее и добавим нужное.
Канвас не трогаем совсем. Игрока и дверь - тоже.
Открываем BackGround и
* убираем фон
* из папки Wells убираем все, а папку оставим
* папку Platforms ликвидируем, как класс
Теперь папка Coins - в ней надо оставить по одной монетке каждого достонства, дабы из
заново не настраивать.
В итоге после зачистки в сцене все выглядит как-то так
Начнем созидать.
Первое - фон. Выбираем, что нравится и суем его в Sprites / BackGround
Я применил черный мрамор, по мне так прикольно смотрится. Главное, чтобы остальные
элементы хорошо читались на фоне
Фон нижний панели я решил оставить одинаковой для всех уровней. И стильно, и лишнего геморроя нет...
Займемся архитектурой.
В Оригинале в качестве земли и площадок использован инсрумент Юнити Square с приданием ему цвета. Можно так, а можно использовать готовый спрайт, как я и поступлю.
Использую спрайт доски из "Ну, Погоди", так наряднее. Спрайт кидаем в папку Sprites / Wells, тащим на сцену, форматируем, добавляем BoxCollider2D, Order In Layer = 1 и в обязательном порядке Tag и Layer ставим Ground
Надо проверить работоспособность - игрок должен свободно прыгать с доски!
Все ровно - прыгает... Переносим доску в папку BackGround / Wells
Используя этот готовый элемент (его даже в префаб превращать не нужно!) создаем архитектуру уровня
Затем тестируем ее на предмет проходимости игроком. Игрок должен перепрыгивать проемы. Если не может - меняем габариты...
В целом готово, отрихтуем в процессе.
Сейчас займемся шестеренками.
В Оригинале шестеренки черные, что в моем случае плохо - их будет не видно на черном мраморе. Однако у меня в запасе есть много чего и я возьму серебристую. В папке Sprites создаем папку Enemy и в нее тащим спрайт.
В иерархии тоже делаем пустой объект Enemy, куда и переносим шестеренку с именем Sur, форматируем по габаритам, Order In Layer = 1, добавляем компонент CyrcleCollider2D с триггером, присваиваем ей tag Shur и ставим на первую позицию
Теперь, чтобы этот агрегат вращался, нужен скриптик небольшой, назовем его SurControl, и в дополнении скрипт сразу будет реагировать на касание с игроком и снарядом от игрока. Скрипт действительно небольшой и делить его на три по функциям смысла нет, там и так все понятно...
И разместить этот скрипт надо в папке Scripts / Enemy (эту папку надо еще создать)...
Следует отметить, что в скрипте сразу должны быть закомментированы строки, связанные с игроком. Это будет в следующей части. Сейчас задача - проверить вращение шестеренки и не более того...
Скрипт вешаем на объект Sur и настраиваем его. Для этого нужны два звука: крик игрока при касании шестеренки и звук уничтожения самой шестеренки - ищем подходящее, создаем в Audio папку Enemy и туда отправляем. Уже оттуда тащим в скрипт
Скорость вращения у меня 5, а повреждения игроку можно оставить как есть.
Запускаем игру и смотрим на вращение шестерни.
Работает...
Расставляем эти вредные объекты согласно штатного расписания - смотрим оригинал и ставим на места. В процессе выясняется, что шестеренки крупноваты будут, уменьшаем размер до разумного... и будет как-то так
В целом нормально. Запускаем, проверяем все-ли крутяться...
Крутяться, ОК!
Ставим двери-препятствия. В оригинале они тоже сделаны из Square, я же опять использую спрайт. Разницы в этих элементах нет никакой, просто спрайт красивее выглядит, и все...
Вот посмотрите, что Юнити может вытворять из спрайта: в сцене рядом с игровым полем нормальный спрайт, а уже в самом игровом поле стоит спрайт обработанный в Юнити
Это я к тому, что использовать можно что попало - главное, чтобы смотрелось...
Итак, выбранный спрайт именуем doorStop и настраиваем. Во первых добавляем целых два BoxCollider2D - первый будет реагировать на стрельбу, второй на игрока... Игрок должен упереться в дверь и не пройти дальше, а пуля игрока должна уничтожить эту дверь - вот поэтотму и два коллайдера.
Чтобы это все работало делаем так: добавляем первый коллайдер и сразу в инспекторе заходим в него, клик на Is Trigger и жмем EditCollider - будут видны границы коллайдера по умолчанию, которые надо чуть раздвинуть влево и вправо
Затем добавляем второй коллайдер и ничего в нем не трогаем. Вот так должно смотреться со стороны
Остается придумать Tag этому элементу, присвоить его ему и все будет ровно.
Мне пришло в голову таг назвать Fantom - пусть так и будет, присваиваем...
По концепции игры эти фантомные двери не должны гаснуть от одного чиха -, ну хоть два чиха, как минимум!!
Поэтому для выполнения этого условия нужен скрипт, назовем его HpEnemy
В последствии мы сможем использовать этот скрипт для любых противников.
Скрипт вешаем на DoorStop и настраиваем: HP - повреждение в результате попадания, HpMax - максимальный размер повреждений, ну и последнее - звук удаления объекта.
Со звуком все понятно, а вот с двумя первыми я поясню...
Если максимальный размер повреждений будет 10, а повреждение при попадании 1, то, чтобы уничтожить данный объект, в него потребуется попасть 10 раз!!! Тут уже разработчику карты в руки - сколько раз надо, столько пусть и будет... от настройка скрипта у меня
Элемент готов к эксплуатации и теперь в по порядку ставим эти фантомные двери по игровому полю
И для порядка в BackGround / Enemy создаем папку DoorsStop и все фальшивые двери переносим туда. Заодно надо создать папку Surs и все шестеренки в нее задвинуть...
По архитектуре уровня собственно все!
Ё-ё-ё-ё-ё... Совсем не все еще пока...
Тут тоже есть платформы и зря мы огульно удалили их при переносе с первого уровня..
Каюсь, был не прав.
Переносим папку Platforms из 1-го уровня снова и помещаем ее в папку Enemy
И снова непорядок - платформы черные и фон тоже! Придется поискать что-то желтое, я спрайт имею ввиду и закинуть в папку Sprites / Platform, соответственно делаем нужный размер, добавляем BoxCollider2D, tag Ground и скрипт GoPlatform.
Как и тех платформ надо сделать им дочерний пустой объект с BoxCollider2D в нижней части платформы. Это надо для того, чтобы игрок не лез под платформу - иначе получит ущерб здоровью. А вот стоять на платформе и прыгать с нее безопасно.
Удаляем все платформы первого уровня и меняем их на вновь созданный экземпляр
Да, и скрипт надо настроить...
Запускаем и проверяем движение платформы. Проверить урон пока не можем.
Платформ будет всего три. Первую уже сделали, дублируем ее и переносим дубликат в первую шахту, корректируем размер и позиции в скрипте - пусть она катается снизу вверх.
Третья будет исключительно мешать! Но, зато двигаться медленно, что позволит игроку от нее убежать. Дублируем любой готовый вариант, выставляем на позицию и рихтуем скрипт.
В Итоге все платформы выглядят так
Остается разбросать щедрой рукой монетки по игровому полю так, чтобы сумма номиналов монеток была не меньше 500, иначе привется вносить изменения в скрипт.
Для упрощения арифметических действий можно просто скопировать монетки из 1-го уровня - там все по количеству ровно, и здесь их просто расставить...
Я так и сделаю.
В целом архитектурно уровень готов.
Далее Часть 2 "Игрок: стрельба и здоровье"