5.18M

Unity M1 L7

1.

Повтор

2.

Повтор
На прошлом уроке мы с вами
создали врага, который может
патрулировать заданную
территорию
Нежелательно

3.

Повтор
Кто помнит, для чего нам
нужны эти две точки?
Нежелательно

4.

Повтор
Кто помнит, для чего нам
нужны эти две точки?
Эти две точки являются
границами, за которые не
может выйти наш враг
Нежелательно

5.

Повтор
А как работает скрипт, для
патруля?
Нежелательно

6.

Повтор
А как работает скрипт, для
патруля?
Как только враг выйдет за
правую, или левую границу,
скрипт отравляет врага в
противоположную сторону
Нежелательно

7.

Сегодня мы…
Побольше поработаем со
скриптами
Научимся импортировать
уже написанные скрипты
Создадим скрипт для
здоровья игрока и врага
А так же научим врага и
игрока наносить друг другу
определённое кол-во урона
(а не убивать сразу)
Ух ты, а оно
мне
пригодится?

8.

Импорт скриптов
Для начала давайте
исправим один баг в нашей
игре.
Вы наверное замечали, что
если много раз нажимать
кнопку прыжка, наш игрок
будет подпрыгивать всё
выше и выше?
Я могу
летать!

9.

Импорт скриптов
Дело в том, что мы не
проверяем, находится ли
наш персонаж на земле, или
нет, перед прыжком.
Но по хорошему мы должны
проверять, стоит ли наш
персонаж на земле, или нет
Я могу
летать!

10.

Импорт скриптов
Мы могли бы
самостоятельно написать
скрипт, который бы
проверял, находимся ли мы
на земле, или нет, но такой
скрипт уже был написан
разработчиками игр, так что
давайте просто возьмём и
импортируем его в наш
проект
Я могу
летать!

11.

Импорт скриптов
Перед тем как начнём,
давайте вспомним, что такое
импорт
Проект
Проект

12.

Импорт скриптов
Перед тем как начнём,
давайте вспомним, что такое
импорт
Импорт, это когда мы
добавляем что-то извне
NewScript
Импорт
Проект
Проект

13.

Импорт скриптов
Перед тем как начнём,
давайте вспомним, что такое
импорт
NewScript
Импорт
Импорт, это когда мы
добавляем что-то извне
К слову, экспорт, это
наоборот, когда мы из
нашего проекта передаём
файлы в другое место
Проект
Проект
Экспорт
Scene1

14.

Импорт скриптов
Например, когда мы
скачивали картинки в
AssetStore, мы их
импортировали, или
экспортировали?
NewScript
Импорт
Проект
Проект
Экспорт
Scene1

15.

Импорт скриптов
Например, когда мы
скачивали картинки в
AssetStore, мы их
импортировали, или
экспортировали?
Конечно импортировали,
ведь мы их добавляли в наш
проект
NewScript
Импорт
Проект
Проект
Экспорт
Scene1

16.

Импорт скриптов
Иногда очень удобно
пользоваться
импортом/экспортом
файлов, особенно, если вы
работаете в команде
К счастью, в Unity очень
удобная система для
сохранения или загрузки
файлов
NewScript
Импорт
Проект
Проект
Экспорт
Scene1
Автор: Ли Владислав
+77018034090

17.

Перейдите по ссылке
(преподаватель отправит в чат)
Скачайте файл
GroundDetection.unitypackage
Щёлкните, для
перехода на сайт
https://drive.google.com/drive/f
olders/1gFY0sX46rJfV8WV6Tm
BRIVZhddEyqwSX?usp=sharing

18.

Откройте скаченный файл
(Убедитесь, что в Unity открыт
ваш проект)

19.

Если вы всё сделали
правильно, у вас
откроется вот такое
окно в Unity
Нажмите Import

20.

Скрипт GroundDetection
должен появиться в вашем
проекте, в папке Scripts
Не появился? Возможно,
папка со скриптами у вас
названа с ошибками.
Проверьте название всех
папок в вашем проекте

21.

Добавьте этот скрипт
нашему персонажу

22.

Ground Detection
Давайте внимательно
рассмотрим новый
компонент

23.

Ground Detection
Давайте внимательно
рассмотрим новый
компонент
Как вы думаете, что нужно
переместить в поле
«Collider2D»?

24.

Ground Detection
В это поле нужно
переместить Collider нашего
персонажа (BoxCollider2D,
CircleCollider2D…)
>Вы можете переместить
компонент напрямую в окне
Инспектора
>Вы можете переместить
целиком игрока из окна
Иерархии в компонент

25.

Ground Detection
Однако с понятием Platform
Layer мы с вами ещё не
знакомы.

26.

Ground Detection
Стоя на платформе игрок
сможет прыгнуть
Платформа
Стена
Layer – очень похож на тэги,
однако его используют с
множеством объектов,
имеющих одинаковые
характеристики.
Платформа
Стена
Однако с понятием Platform
Layer мы с вами ещё не
знакомы.
Платформа
Вода
В воде игрок будет
плавать, если он это умеет
Вода
Платформа
В будущем игрок сможет
отталкиваться от стен

27.

Ground Detection
Изначально в проекте уже
есть несколько стандартных
Layer’ов, однако нам стоит
добавить отдельный Layer
для платформ.

28.

Ground Detection
Также, как и с тегами, выберите любую платформу, и в верхней
части окна инспектора у вас будет возможность создать новый
layer и дать его объекту
1
2
3

29.

Ground Detection
В завершении
остаётся установить
новый layer в нашем
компоненте
GroundDetection, а
так же установить
layer Platform на все
платформы в игре

30.

Ground Detection
Если вы всё сделаете
правильно, то когда
игрок будет касаться
платформ, у него будет
автоматически
ставиться галочка в
переменной
IsGrounded
Всё, что нам остаётся,
это добавить пару строк
в скрипт движения

31.

Сейчас наш скрипт выглядит
следующим образом

32.

Первым делом создадим
переменную, в которой
сохраним GroundDetection

33.

Далее, спустимся чуть ниже, к
месту, где мы прописываем
условие для прыжка

34.

И немного изменим условие
Символ & называется
амперсанд
На клавиатуре это
Shift + 7
на английском языке

35.

С новой записью мы добавили
второе условие
Теперь оба условия должны
быть истинны, чтобы тело
условия заработало
Символы && в условии
обозначают И:
Если первое И второе
условии истины, то…
Не запутайтесь в скобках! У
условий и функций разные
скобки
If (условие1 && условие2)

36.

Ground Detection
Теперь, если вы ничего не
забыли, можете запустить и
проверить наше
нововведение
Игрок не сможет прыгать в
воздухе
Он сможет прыгать только
если находится на платформе

37.

Ground Detection
Что можно было забыть:
⮚ Проверьте, дали ли вы
значение нашей новой
переменной gr в скрипте
Move
⮚ Проверьте, дали ли вы
новое значение layer
Platform у платформ
⮚ Нет ли ошибок в вашем
коде

38.

Здоровье и урон
А сейчас самое время создать
в нашей игре такое понятие
как «здоровье»
Ведь без показателя HP (hit
points) наш игрок будет
умирать от одного касания с
врагами
Эта игра
слишком
сложная!

39.

Создаёте новый скрипт,
назовите его
«HP»

40.

Для начала можете
избавиться от функций
Start() & Update(), они
нам не понадобятся

41.

Далее, мы создадим
публичную переменную
hp, которая будет в себе
хранить кол-во здоровья
персонажей
Если этот скрипт будет у
игрока, то в этой
переменной сохранится
его здоровье, если
скрипт будет у врага, и
здоровье здесь будет
вражеское

42.

Затем, мы создадим
публичную функцию
Damage()
Она будет отвечать за
получение урона
Другими словами, если
наш объект кто-то захочет
ударить, то сработает эта
функция

43.

Однако, если нашего
персонажа ударят, как
программа поймёт,
сколько урона должен
получить наш персонаж?
Вряд-ли все персонажи
наносят одинаковое
кол-во урона

44.

Для решения этой
проблемы нам поможет
одна особенность
функций:
Функции могут
принимать параметры

45.

Создав числовую переменную dmg внутри
скобок функции, мы укажем программе,
что эта функция должна получить
определённое значение
В нашем случае это будет показатель
урона, который мы отнимем у здоровья

46.

Как только кто-то захочет
нанести урон нашему
персонажу, мы вызовем эту
функцию, передадим в неё
урон, и отнимем его из
здоровья
hp -= dmg
Мы из переменной hp
отнимаем значение
переменной dmg

47.

Всё, что нам остаётся, это
после получения урона
проверить, не опустилось ли
оно ниже нуля, если
опустилось, то удалить
нашего персонажа из игры
Сможете ли вы
самостоятельно
дописать скрипт?

48.

Если здоровье меньше или
равно 0, то мы удаляем
gameObject (владельца
скрипта)

49.

Здоровье и урон
Теперь и игроку и врагу
нужно добавить наш новый
скрипт HP
HP
HP

50.

Здоровье и урон
Attack
Теперь и игроку и врагу
нужно добавить наш новый
скрипт HP
Для нанесения урона мы тоже
создадим отдельный скрипт
HP
HP

51.

Здоровье и урон
Attack
Теперь и игроку и врагу нужно
добавить наш новый скрипт
HP
Для нанесения урона мы тоже
создадим отдельный скрипт
Скрипт для нанесения урона
обязательно должен быть у
врага, а вот на счёт игрока,
решайте сами
HP
?
HP

52.

Создайте новый скрипт под
названием CollisionDamage
Он будет наносить урон
всем, у кого есть здоровье,
при коллизии (касании)

53.

Функции Start() & Update() нам не
понадобятся

54.

Урон
персонажа
Следующая запись будет очень
похожа на скрипт Kill
Тег врага
(кому наносим урон)
Проверка на коллизию с объектом,
имеющим определённый тег

55.

Следующая запись будет очень
похожа на скрипт Kill
Получаем доступ к компоненту HP
нашего противника, сохраняя его в
переменной hp
Наносим урон, с помощью
созданной нами функции Damage()

56.

Всё, что остаётся, передать наш
скрипт CollisionDamage врагу, и
заполнить необходимые поля в
компоненте
Dmg – Сколько урона наносит персонаж
Tag – тег противника
(противник врага это наш персонаж)

57.

Проверка
Давайте пройдёмся по списку,
всё ли мы сделали, чтобы
скрипты CollisionDamage и HP
заработали
1) В обоих скриптах нет ошибок

58.

Проверка
Давайте пройдёмся по списку,
всё ли мы сделали, чтобы
скрипты CollisionDamage и HP
заработали
1) В обоих скриптах нет ошибок
1)
Player и враг имеют
компонент HP

59.

Проверка
Давайте пройдёмся по списку,
всё ли мы сделали, чтобы
скрипты CollisionDamage и HP
заработали
1) В обоих скриптах нет ошибок
1)
Player и враг имеют
компонент HP
1) Как минимум враг имеет
компонент CollisionDamage

60.

Проверка
Давайте пройдёмся по списку,
всё ли мы сделали, чтобы
скрипты CollisionDamage и HP
заработали
1) В обоих скриптах нет ошибок
1)
Player и враг имеют
компонент HP
1) Как минимум враг имеет
компонент CollisionDamage
1) У врага в компоненте мы
указали кол-во урона и тег
противника

61.

Проверка
Давайте пройдёмся по списку,
всё ли мы сделали, чтобы
скрипты CollisionDamage и HP
заработали
1) В обоих скриптах нет ошибок
Всё верно? Тогда запускайте и
проверьте работу скриптов!
1) Как минимум враг имеет
компонент CollisionDamage
1)
Player и враг имеют
компонент HP
1) У врага в компоненте мы
указали кол-во урона и тег
противника
1) Игрок имеет тег Player

62.

Проверка
Обратите внимание,
при касании с врагом,
игрок теряет здоровье,
а как только здоровье
станет равным нулю,
игрок погибает

63.

Дополнительное задание
Сможете ли вы самостоятельно
сделать аптечку?
Для этого понадобится добавить
в скрипт HP ещё одну функцию,
которая будет восстанавливать
здоровье
А так же добавить скрипт,
который будет похож на скрипт
CollisionDamage, но только
будет исцелять игрока
English     Русский Правила