Найти тему

Платформер для Андроида "Чубрик и Сундук" 2 уровень Часть 2 "Игрок: стрельба и здоровье"

Создание 1-го уровня тут: https://dzen.ru/suite/0bdea864-aac0-4b2d-a8c5-b68c436fdb32

2 уровень Часть 1 "Концепция и архитектура" тут https://dzen.ru/a/ZZ1VK3T9hVQpBm5W

Все дальнейшие уровни в обязательном порядке будут связаны или со стрельбой, или со здоровьем, или и с тем и другим, вместе взятым.

Давайте научим игрока стрелять.
Для начала надо найти спрайт снаряда - пули, что будет визуально отображать стрельбу и поместить данный спрайт в папку Sprites. Спрайт нужен яркий, дабы был виден на разных фонах уровней. Я выбрал ярко-красный шарик.
Затем тащим спрайт на сцену, даем имя Bullet, ровняем габариты, поставив снаряд рядом с игроком, так сказать для наглядности

Ставим tag Ball, Order in Layer = 1, добавляем CircleCollider2D триггерный и Rigidbody2D, где в строке GravityScale ставим 0.

Теперь снаряду нужен скрипт, определяющий скорость его полета, длину полета и расстояние удаления снаряда. Так, как это вплотную касается игрока, пишем скрипт BulletControl в папке Player

-2

-3

Сохраняем скрипт и при выходе в Юнити имеем по-ходу две ошибки, что несколько печально... но вполне поправимо.
У нас пока просто нет еще этого скрипта, куда идет ссылка. Создадим его в папке Enemy с именем HealthControl (этот скрипт чисто для врагов, потому и в этой папке)

-4

и ошибки самоликвидировались...
Отлично!
Скрипт BulletControl вешаем на Bullet и настраиваем. Там только численные значения, которые надо ставить методом "научного тыка", то есть - все покажет игра. Я пока поставил так

-5

Это сделана только часть дела. Снаряд будет лететь и ликвидироваться сам по себе, а если попадет в цель - нанесет ей урон и тоже ликвидируется. Звук выстрела, равно, как и звук попадания в цель в скрипте не реализованы! Это опять-таки будет в сборке "Улучшение игры"

Снаряд готов, отправляем его в папку Prefabs и удаляем со сцены.

Беремся за игрока.
Игроку для стрельбы нужен пустой элемент с именем FireControl - там будут генерироваться снаряды и дальше сами снаряды решают, что им делать.
Создаем FireConrol и делаем его дочерним объектом игрока

-6

Как видно элемент образовался где ему инб нравится и это плохо! Двигаем его примерно сюда

-7

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

-8

выбираем что-нибудь небольшое и элемент будет виден в сцене без его выделения.

Далее скрипт, ну куда же без него? - FireControl

-9

Так, как это опять касается игрока, скрипт создаем в папке Player
Закидываем скрипт на Player и настраиваем: Bullet - префаб снаряда, FirePoint - только что созданный элемент FireControl и все...
Запускаем игру и смотрим, что получилось в итоге! Игрок должен стрелять, но пока никому ущерба не наносить.
По ходу рихтуем, если надо: габариты снаряда, скорость его полета, длину полета до уничтожения, проверяем стрельбу в прыжке и так далее.
У меня, в частности, снаряды летят явно выше шестеренок, котому и вреда они им не принесут. Придется увеличить шестеренки...
И еще, ударяясь о любое препятствие, будь то монетка, перегородка, шестеренка, фальшивая дверь - снаряд уничтожается. Он так заточен!

И самое главное - стрельба ровная, когда игрок смотрит вправо, а когда влево - то стрельбы как бы нет. На самом деле стрельба есть в точке появления снаряда. Затем снаряд пытается лететь вправо, как ему и заложено, наталкивается на игрока и пропадает. Но! Если в зоне точки появления снаряда есть объект поражения, снаряд вполне благополучно уничтожит данный объект!

Как сделать, чтобы снаряд мог лететь как в левую, так и в правую стороны одинаково, тут рассматриваться не будет!!! Для этого будет Часть "Улучшения игры". А, вот чтобы сейчас стрельба работала влево точку появления снаряда надо поставить, как было показано выше.

Чтобы было яснее, вешаем скрипт HealthControl на первую шестеренку, немного увеличив ее в размерах, и настраиваем его: Hp - ущерб от одного попадания, HpMax - максимальный ущерб и звук поражения объекта. У меня Hp = 20, HpMax = 40, что говорит о двойном попадании до уничтожения цели. Звук на вкус Автора...

-10

Запускаем и проверяем.

Шестеренка сдохла ровно при втором попадании, работает значит. И габариты
шестеренки вполне пока подходит. Удаляем все остальные шестеренки, запомнив их места и путем дублирования ставим новые

-11

Запускаем и проверяем шестеренки на свойство умирать. Лучше, если все и без
исключений...
Первый сектор все дохнут исправно, а во второй пройти не выйдет, потому, что пока двери фальшивые мешают....

Закидываем этот же скрипт HealthControl на первую дверь, оставляем все настройки как у шестеренки и проверяем реакцию двери. Реакция нормальная - при двойном попадании пропадает.
Меняем все двери путем дублирования для краткости процесса.
Включаем канвас, снова запускаем и проверяем...
Смею отметить, что если в Scenes вдруг отсутствует Level_3 и его настройки в панели статистики для перехода на него, то и перехода не будет от слова "совсем"... Как это сделать - уже озвучено в 1-м уровне игры.
В целом все работает.

Остается добавить перца игроку в виде его здоровья.
Первым делом создаем в канвасе папку HpPlayerIndicator, смещаем ее вниз и ставим якорь низ / центр. Уже в ней делаем элемент Text с именем HpText, тянем к левой части родительской папки и якорь слева / центр, присваиваем текст "HP", форматируем и располагаем его сразу после Score

-12

Затем создаем UI / Panel, имя можно не менять, форматируем и ставим так, якоря не трогаем, прозрачность убираем

-13

Хотя, конечно немного толстая панелька, потому изящнее будет, если убавить ее немного...
Теперь там же создаем элемент UI / Image, имя можно не менять, якорь тоже,
форматируем в размер чуть меньше панели и из спрайтов тянем в нее что-то красное.
Будет где-то так

-14

Немного настроим закладку Image...
По умолчанию в строках RaycastTarget и Maskable должны быть галочки, если вдруг нет - надо поставить. Затем строка ImageType выбираем Filled, строка FillBethod должна иметь параметр Hоrizontal, FillOrigin - параметр Left
Готово.

Нужен скрипт - в папке Player пишем HealthPlayer

-15

-16

вешаем на игрока и настраиваем: HealthBar это элемент Image из HpPlayerIndicator, Hp как начальное здоровье ставим 100, MaxHp как финишное оставляем 0. Тут готово

-17

Задаемся вопросом - кто может нанести ущерб игроку в этом уровне?
Шестеренки и платформы, пока больше некому.
Идем в скрипт шестеренки SurControl и в строке Damage ставим 10 - на всех шестеренках, пожалуйста!!! И заодно проверьте, что CircleCollider2D у них у всех триггерный...
Затем открываем этот скрипт и снимаем закомментированность в строках 28, 30 и 31. Запускаем и проверяем.
Все ровно.

Идем к платформам.
Открываем в инспекторе первую платформу, точнее ее дочерний элемент Conflict и наблюдаем, что на нем нет скрипта. Правильно! Его еще надо создать.
Пишем скрипт в папке Scripts / Enemy с именем PlatformDamage

-18

И вешаем на элемент Conflict средней платформы. Настраиваем: проверяем триггерность BoxCollider2D? ставим пока Damage 10, Scream - звук krikPlayer, запускаем игру, идем к средней платформе, подставляемся под нее и смотрим на реакцию игрока.
Хорошая реакция! Если он на платформе - ничего не болит, а вот если под платформу, то все, как в известном мультике: "Не стойте и не прыгайте, не пойте не пляшите там, где идет строительство или подвешен груз......"!!!
Повторяем процесс с двумя другими платформами, настраиваем, запускаем игру и проверяем.

Остается добавить фоновую музыку из папки SoundsFons, в инспекторе проверить галочку в строке Play on Awake, Loop - тоже галочку и громкость убавить до 0,1
Снова проверяем теперь уже на соотношение звуков - все-ли слышно хорошо?
Все в порядке.

2 уровень игры готов! Мои поздравления Вам!!!

Далее делаем уровень 3 игры...
https://dzen.ru/a/Zaqjt19FE0q6IfWH