Похожие презентации:
Unity M1 L6
1.
Повтор2.
ПовторНа прошлом уроке мы с вами
создали первое препятствие,
уничтожающее нашего игрока
при касании
Нежелательно
3.
ПовторВы помните, как называется
функция, которая проверяет
коллизию (касание) между
двумя объектами?
При коллизии
Удаляем объект
Нежелательно
4.
ПовторВы помните, как называется
функция, которая проверяет
коллизию (касание) между
двумя объектами?
Ответ: функция называется
OnCollisionEnter2D
Удаляем объект
Нежелательно
5.
ПовторКакая функция удаляет
объекты со сцены в Unity?
Удаляем объект
Нежелательно
6.
ПовторКакая функция удаляет
объекты со сцены в Unity?
Ответ: Функция Destroy()
удалит объект, который мы
укажем в скобках
Нежелательно
7.
ПовторДля чего нам нужны теги?
Нежелательно
8.
ПовторОбъект
Для чего нам нужны теги?
Ответ: Для того, чтобы Unity
мог отличить один объект от
другого
Тег:
Игрок
Объект
Тег: Монетка
Объект
Тег: Враг
9.
Сегодня мы…Усовершенствуем наше
препятствие, превратив его
в полноценного врага!
Напишем простенький
Искусственный Интеллект
для врага, чтобы он
патрулировал
определённую местность
С каких
пор оно
движется?
10.
Для того, чтобы наш врагнаучился ходить, достаточно
создать новый скрипт, в котором
мы используем уже знакомую
команду для движения
Помните, что это за команда?
#Телепортировать объект влево/вправо
11.
Создаёмпеременную для
сохранения
скорости
Пишем код в функции
Update, чтобы он
выполнялся постоянно
Перемещаем объект
влево
transform.Translate()
телепортирует нашего
игрока по
направлению,
указанному в скобках
12.
Однако, с такой записьюнаш враг просто будет
бесконечно идти влево,
13.
Однако, с такой записьюнаш враг просто будет
бесконечно идти влево,
Нам нужно, чтобы он шёл
до определённой точки,
и поворачивался назад
14.
ПатрульДля реализации патруля нам
нужно:
1) Враг
15.
ПатрульЛевая граница
Для реализации патруля нам
нужно:
1) Враг
2) Левая и правая границы,
за которые враг не
сможет зайти
Правая
граница
16.
Идти влевоПатруль
Для реализации патруля нам
нужно:
1) Враг
2) Левая и правая границы,
за которые враг не
сможет зайти
3) Переменная, которая
будет определять, куда
должен двигаться враг
Идти вправо
17.
Идти влевоПатруль
Для реализации патруля нам
нужно:
Представьте, что наша
1) Враг
переменная как рычаг,
2) Левая и правая границы,
будет
определять, в какую
за которые враг не
сторону
двигаться врагу
сможет зайти
3) Переменная, которая
будет определять, куда
должен двигаться враг
Идти вправо
18.
Идти влевоПатруль
Для реализации патруля нам
нужно:
Представьте, что наша
1) Враг
переменная как рычаг,
2) Левая и правая границы,
будет
определять, в какую
за которые враг не
сторону
двигаться врагу
сможет зайти
3) Переменная, которая
будет определять, куда
должен двигаться враг
Идти вправо
19.
TrueИдти влево
False
Идти вправо
Патруль
ДляПредставьте,
реализации патруля
нам
что наша
нужно:
переменная как рычаг,
1)будет
Враг определять, в какую
2) Левая и правая границы,
сторону двигаться врагу
за которые враг не
сможет зайти
3) Переменная,
которая
Наш рычаг
будет
будет определять, куда
переменной bool
должен двигаться враг
Bool – это тип данных
(переменных) которая может
быть True, или False
20.
TrueИдти влево
False
Идти вправо
Патруль
ДляПредставьте,
реализации патруля
нам
что наша
нужно:
переменная как рычаг,
1)будет
Враг определять, в какую
2) Левая и правая границы,
сторону двигаться врагу
за которые враг не
сможет зайти
3) Переменная,
которая
Наш рычаг
будет
будет определять, куда
переменной bool
должен двигаться враг
Bool – это тип данных
(переменных) которая может
быть True, или False
21.
TrueПатруль
Для реализации патруля нам
нужно:
1) Враг
2) Левая и правая границы,
за которые враг не
сможет зайти
3) Переменная, которая
будет определять, куда
должен двигаться враг
4) Алгоритм, меняющий
движение по условию
False
22.
TrueПатруль
Для реализации патруля нам
нужно:
1) Враг
2) Левая и правая границы,
за которые враг не
сможет зайти
3) Переменная, которая
будет определять, куда
должен двигаться враг
4) Алгоритм, меняющий
движение по условию
False
C последним давайте
разберёмся чуть
позже, а пока начнём
с реализации врага и
границ
23.
В качестве врага мыможем взять любое
уже созданное нами
препятствие
И хорошо бы ему
изменить спрайт,
чтобы игрок мог
отличить его от
стоячих
препятствий
24.
Далее, мы создадим свами границы,
которые враг не
сможет покинуть
25.
Далее, мы создадим свами границы,
которые враг не
сможет покинуть
В качестве границ
мы будем
использовать пустые
игровые объекты
EmptyObject
26.
Переименуйте созданныеграницы, чтобы не
запутаться с ними в будущем
Для переименования либо
А) Выделите объект, а затем
ещё раз щёлкните по нему
ЛКМ, или
Б) Щёлкните ПКМ по
объекту, и выберите пункт
Rename - переименовать
27.
Переименуйте созданныеграницы, чтобы не
запутаться с ними в будущем
А лучше, старайтесь
переименовывать все
объекты, с которыми
работаете!
Так намного
понятнее, неправда
ли?
Для переименования либо
А) Выделите объект, а затем
ещё раз щёлкните по нему
ЛКМ, или
Б) Щёлкните ПКМ по
объекту, и выберите пункт
Rename - переименовать
28.
Но есть одна сложностьс работой с пустыми
объектами – их не видно
на сцене
29.
Но выход есть!Обратите внимание на
эту кнопку
30.
Но выход есть!Обратите внимание на
эту кнопку
31.
Она поможет намвыбрать иконку для
объекта.
В игре он также
останется невидимым,
но в редакторе мы
сможем увидеть его
32.
Выберите иконки дляваших границ и сразу
расставьте их на сцене
(вам поможет
инструмент Move)
33.
Сделали?Теперь приступим к
сложной части
Создайте скрипт для
врага, под названием
Enemy
34.
Мы будем работать сфункцией Update(),
постоянно проверяя
различные условия
35.
Мы будем работать сфункцией Update(),
постоянно проверяя
различные условия
А вот функцию Start()
вы можете убрать.
Только не
промахнитесь!
36.
Начнём мы с созданияпеременных
Не забывайте, что мы
создаём переменные в
теле класса
37.
Для начала создадимпеременную, где будем
хранить скорость врага
Очень удобно
контролировать
скорость врага, для
усложнения уровней
38.
Далее создаёмпеременную, в которой
будем хранить
направление движения
врага (наш рычаг)
Назовём переменную goLeft,
для простоты. Если goLeft будет
истиной, то наш враг должен
будет двигаться влево. В
противном случае, вправо.
39.
Сама проверка будетосуществляться в
функции Update()
Если goLeft истина, то
мы двигаемся влево
40.
Сама проверка будетосуществляться в
функции Update()
Помните как
реализовать
движение влево?
41.
Мы будемработать с
С помощью
функцией
Update(),
transform.Translate()
постоянно
проверяя
двигаем врага
влево,
различные
условия
если goLeft
равна
истине
А вот функцию Start()
вы можете убрать.
Только не
промахнитесь!
42.
Ниже приписываемтакую же запись, только
с условием
«если goLeft равна лжи»
Сможете найти
ошибку в нашей
записи?
43.
Если goLeft равно false,то мы должны двигаться
вправо, а не в лево
44.
ПатрульТеперь, если передать этот
скрипт нашему врагу и в ручную
переключать переменную
goLeft, враг будет перемещаться
согласно нашей настройке.
45.
ПатрульТеперь, если передать этот
скрипт нашему врагу и в ручную
переключать переменную goLeft
враг будет перемещаться
согласно нашей настройке.
Однако, наш враг должен
патрулировать территорию
автоматически.
46.
ПатрульВ этом нам помогут наши
границы Left и Right
47.
ПатрульВ этом нам помогут наши
границы Left и Right
Если мы получим их
месторасположение по оси
х, и так же х нашего врага, то
мы сможем создать простой
ИИ для патруля
Х=6
Х = 15
Х = 11
48.
ПатрульЛогика проста:
Х=6
Х = 15
1) Если х врага меньше, чем
х левой границы, то мы
направим врага вправо
Х=5
Право
руля!
49.
ПатрульЛогика проста:
1) Если х врага меньше, чем
х левой границы, то мы
направим врага вправо
2) Если х врага больше, чем
х правой границы, то мы
направим его влево
Х=6
Х = 15
Х = 16
А теперь
влево!
50.
Мы остановились наэтом моменте,
перепроверьте свои
записи
51.
Мы остановились наэтом моменте,
перепроверьте свои
записи
52.
Создаём переменную, вкоторой будем хранить
компонент transform
левой границы
53.
Затем, переменную, вкоторой будем хранить
компонент transform
правой границы
54.
Далее, для удобства,давайте прокрутим наш
код чуть ниже, чтобы
чётко видеть функцию
Update()
Начало
Конец
55.
В конце функцииUpdate() дописываем
следующую проверку:
Если наша позиция по Х
(позиция врага) меньше,
чем позиция по Х левой
границы
56.
В конце функцииUpdate() дописываем
следующую проверку:
Если наша позиция по Х
(позиция врага) меньше,
чем позиция по Х левой
границы
Как вы думаете, что мы должны
добавить внутрь условия?
57.
Если наша позиция по Х(позиция врага) меньше,
чем позиция по Х левой
границы,
То мы меняем
направление вправо
58.
Теперь попробуйтесамостоятельно сделать
проверку, перешёл ли
наш враг правую
границу
Будьте внимательны, не
запутайтесь в скобках { }
59.
Вот так должнавыглядеть проверка для
правой границы
Обратите внимание, что
если мы пересекли правую
границу, то значение
переменной goLeft нужно
переключить в True, чтобы
двинуться влево
60.
Всё что нам остаётся, этодать значение нашим
новым переменным и
запустить
61.
Если вы всё сделалиправильно, то ваш противник
должен без проблем
патрулировать заданную
территорию
А если нет, то обратитесь к
наставнику
62.
Теперь, когда у нас естьполноценный враг, по
хорошему нам нужно
сохранить его в префаб
63.
Теперь, когда у нас естьполноценный враг, по
хорошему нам нужно
сохранить его в префаб
Однако сделать это
проблематично, так как у нас
целых 3 объекта:
1) Враг
2) Левая граница
3) Правая граница
И по отдельности их
добавлять в разные
префабы нет смысла
64.
Для созданияполноценного префаба
врага нам понадобится
добавить все элементы
врага в отдельный объект
Их нужно
объеденить
65.
Разместите экран сценытак, чтобы враг был ровно в
центре окна сцены
66.
Создайте пустой объект67.
Переименуйте пустойобъект в «EnemyObject» и
переместите все элементы
нашего врага в этот объект
68.
Теперь этот объектEnemyObject можно
сохранить в качестве
префаба, и использовать
множество раз и на других
сценах
69.
Дополнительное заданиеСможете ли вы обладая
текущими знаниями
самостоятельно сделать врага,
который будет перемещаться
вертикально (вверх-вниз)?
Попробуйте, это не так сложно!
Интересно, а на
нём можно
прокатиться, как
на лифте?
70.
Дополнительное задание1) Добавьте в игру монетки
1) Cоздайте отдельный скрипт
для игрока (можете назвать
его Inventory), чтобы при
касании монеток, монетки
удалялись (будто игрок
подбирает их)