Похожие презентации:
3. Перемещение игрока и турели
1.
ПовторНа прошлом уроке мы
⮚ Создали скрипт, который
создаёт врагов
⮚ Создали скрипт, который
перемещает врагов
⮚ Создали скрипт, который
позволяет врагу стрелять
2.
Сегодня на уроке…⮚ Мы немного поговорим об
оптимизации игры
⮚ Добавим бэкграунд
⮚ Добавим эффект
движения нашего игрока
⮚ Добавим турели
3.
ОптимизацияА начнём мы с вами с конца
предыдущего урока, а именно с
проблемы: наши враги бесконечно
появляются, постоянно создают
пули, и не исчезают из игры
Такое большое количество
объектов будет сильно нагружать
компьютер/смартфон игрока, из-за
чего больше пяти минут ему не
поиграть
4.
ОптимизацияМы можем поступить двумя
методами:
⮚ Удалять пули и врагов через
какое-то время с помощью
таймера
Время жизни:
10 секунд
Время жизни:
5 секунд
5.
ОптимизацияМы можем поступить двумя
методами:
Время жизни:
10 секунд
Время жизни:
5 секунд
⮚ Удалять пули и врагов через
какое-то время с помощью
таймера
⮚ Поставить за пределы камеры
объект, который их будет удалять
Как вы думаете, какой из них
меньше будет нагружать игру?
Удаляет
врагов и пули
6.
ОптимизацияЕсли мы будем создавать
отдельный таймер для каждого
врага и пули, мы будем нагружать
систему больше, нежели если
создадим всего лишь один объект,
который будет удалять все
самостоятельно
Конечно, от таймеров наша игра не
стала бы зависать, но всё же мы
выберем более лучший вариант
Время жизни:
10 секунд
Время жизни:
5 секунд
Удаляет
врагов и пули
7.
ОптимизацияДобавьте обычный
прямоугольник на сцену
8.
ОптимизацияДобавьте обычный
прямоугольник на сцену
Наша стенка должна удалять
все объекты, которые её
коснуться. Будь то
триггер/коллайдер и не
важно какой тег, мы должны
удалять все объекты
9.
ОптимизацияДля определения касания двух
объектов у нас есть две функции,
помните их?
10.
ОптимизацияДля того, чтобы наша стенка
удаляла все объекты, мы будем
использовать функцию
OnTriggerEnter2D
Но для начала давайте настроим
саму стенку
11.
Оптимизация⮚ Стена должна быть триггером
⮚ Стена должна иметь Rigidbody2D
чтобы проверять касания
⮚ На стене должна быть убрана
гравитация, чтобы она не падала
⮚ На стене должны быть заблокированы
перемещения и вращения, чтобы
корабли не сбивали наш объект
Выполните все эти условия, для
продолжения
12.
Далее создаёмскрипт для стены
DestroyWall
13.
Просто удаляемлюбые объекты
при касании
14.
ОптимизацияДобавьте нашей стене скрипт и
проверьте, всё ли работает
Распространённые ошибки:
⮚ Если пули и враги проходят сквозь
стенку, значит вы неправильно её
настроили, или не передали ей скрипт
DestroyWall
⮚ Если стенка в начале игры исчезает, то
возможно вы создали несколько
стенок, которые касаются друг друга и
удаляют себя
15.
ПеремещениеСамое время создать скрипт для
перемещения игрока
Взгляните на картинку справа:
корабль игрока перемещается по
космосу.
16.
ПеремещениеСамое время создать скрипт для
перемещения игрока
Взгляните на картинку справа:
корабль игрока перемещается по
космосу.
По крайней мере нам так
кажется, а на самом деле, игрок
стоит на месте в то время, как
картинка позади перемещается
17.
ПеремещениеПорой, нам проще заставить двигаться
окружение игрока, вместо его самого
В некоторых гонках, платформерах на
перемещение и подобных аркадах
камера стоит на месте, в то время, как
окружение постоянно движется
Иногда это делается для удобства, а
иногда для оптимизации игры
Мы воспользуемся этой механикой, так
как нам удобнее с ней будет работать
далее
18.
ПеремещениеДля начала давайте скачаем
фоновую картинку для нашей
игры
Мы советуем попробовать
скачать ассет, указанный
справа. В нём качественные
фоны, которые можно будет
растянуть без потери качества
19.
ПеремещениеЕсли вы скачали картинку,
добавьте её на сцену,
установите отрицательный
Order In Layer, чтобы он был
позади всех элементов и
растяните, как показано правее
Фон на картинке называется
«бесшовным». Края такого
фона образуют бесшовную
картинку и его можно
бесконечно растягивать без
потери качества
20.
Создайте скрипт и назовитеего GameSession
Этот скрипт будет отвечать
за перемещение фона, а
также за всё, что касается
игрового процесса
21.
Скрипт GameSession будет оченьпохож на движение пули, однако
мы также добавим переменную
isMoving, при выключении
которой наш фон остановится
В последующих уроках мы воспользуемся
возможностью останавливать фон, но пока
просто добавим такую возможность на
будущее
22.
ПеремещениеПередайте скрипт вашей
фоновой картинке и
проверьте, перемещается ли
он
23.
Самостоятельная работаПередайте скрипт вашей
фоновой картинке и проверьте,
перемещается ли он
Самостоятельно добавьте на
этот фон сторонние объекты
(например стены, или
метеориты) тем самым
разнообразив и усложнив ваш
игровой уровень
Не забудьте создать скрипт, для
уничтожения игрока, если тот
врежется в стену!
24.
ТурелиСтены, которые мы создали
отлично подходят для
размещения турелей
Турели в нашем случае будут
статичны, находится на стенах и
стрелять в нашего игрока
Как вы думаете, сможем ли мы с
текущими скриптами реализовать
такого противника?
25.
ТурелиЕсли вы ответили «да», то у нас
плохие новости. Если привязать
турель к фону и наложить скрипт
стрельбы на турель, она будет
стрелять с самого начала игры по
игроку, который даже не долетел
до этих турелей
Так, очень вскоре на игрока будет
надвигаться огромное количество
снарядов
26.
ТурелиДля решения этой проблемы,
нам нужно научить турель
стрелять по игроку только в
том случае, если он находится
в доступной зоне
27.
Для начала давайтесоздадим турель, а
также добавим ей
Collider и Rigidbody2D
Не забудьте убрать
гравитацию врагу, а если
стены будут его выталкивать,
то заморозьте его позицию по
всем осям
(Freeze position и rotation)
28.
Далее, добавьтепрямоугольник,
который будет нашей
зоной,
отслеживающей
игрока
Сделайте эту зону триггером, а
также поставьте
полупрозрачный цвет, чтобы
нам было удобно с ней
работать (Как закончим с
уровнем, нужно будет сделать
полностью прозрачным)
Этот ползунок отвечает
за прозрачность
29.
ТурелиПринцип турели будет следующий:
На нашем триггере-зоне будет
скрипт TriggerZone, который будет
отслеживать, рядом ли игрок
На турели будет скрипт Tower
который будет постоянно проверять
работу TriggerZone и активировать
стрельбу только тогда, когда игрок
рядом
Создайте оба скрипта
30.
По умолчанию false –игрока рядом нет
При входе в триггер
При выходе из триггера
Скрипт TriggerZone
предельно прост
У нас есть
переменная
isPlayerNear, которая
true становится при
входе игрока в
триггер, и меняется
на false когда игрок
из неё выходит
Для правильной работы не
забываем проверять объекты
на тег, иначе турель будет
срабатывать при касании с
другими объектами
31.
Скрипт Tower похож наEnemyShoot, но логика
стрельбы отличается
32.
Вместо бесконечной стрельбы (как у вражескихкораблей) мы стреляем только тогда, когда
выполнены 2 условия: турель готова стрелять и
игрок рядом (узнаём из скрипта TriggerZone)
Во время выстрела мы сразу же ставим орудие
(переменной isReadyShoot) на перезарядку,
создаём пулю, ждём время перезарядки и вновь
передаём, что орудие перезарядилось
33.
Следуйте инструкцииВложите зону в турель (для
удобства), а затем их вместе в
бэкграунд (чтобы они
перемещались с фоном)
В триггер-зону (триггер, который
должен определять игрока)
добавьте скрипт TriggerZone
Настраивать его не нужно
В турель добавьте скрипт Tower
Перетащите в его настройки
префаб пули, а также триггер-зону
в соответствующие поля (зону
перетащите прямо из окна
иерархии (Hierarchy))
34.
ТурельЗапустите игру и проверьте,
правильно ли функционирует турель
> Стреляет ли противник, когда мы
заходим в зону атаки?
> Перестаёт ли он стрелять, когда мы
её покидаем?
> Можно ли уничтожить турель?
Если ответы на все эти вопросы «да»,
то вы отлично справились на
сегодня!
35.
ТурельК сожалению, сделать так, чтобы
турель стреляла прямо в игрока
будет проблематично
Команда, которая будет
поворачивать пули в игрока очень
сложная, ведь там присутствуют
термины и формулы из курса
геометрии за 11 класс и старше
Мы советуем набраться терпения и
оставить всё как есть
36.
Дополнительное заданиеС технической частью мы с
вами разобрались
Самое время поработать над
визуалом и над уровнем в
целом
Украсьте свою игру, добавьте
спрайты стен, создайте
метеориты, которые будут
мешать игроку и конечно же
проработайте полностью ваш
уровень, чтобы он не
проходился за 10 секунд!
Можете добавить пост-обработку, если
не забыли как это делается