learn-unity

learn-unity 

Наша жизнь игра, и мы её программисты

2subscribers

20posts

goals1
0 of 10 paid subscribers
Если наберем 10 подписчиков, значит мы нужны, значит мы важны...

Триггеры и коллизии

О чем ты узнаешь из видео:
✅ какие фишки можно реализовать с помощью триггеров и коллизий
✅ общая концепция
✅ детальнее о коллизии
✅ подробнее о триггере
Ремарка
Друзья перед тем, как мы перейдем к самому уроку, сделаем небольшую ремарку. Начинающие прогеры часто испытывают проблемы с терминологией Unity и программирования в целом. Для ее решения, мы сделали рубрику "словарь" в нашем telegram-канале. Каждый день в течении года (!!) на канал будут публиковаться термины связанные с game dev'ом. Самое главное: если термин будет состоять из других, более фундаментальных, то он выйдет позже и будет ссылаться на те термины, что уже были. Если говорить прямо и без намеков: мы приглашаем вас всех в наш телеграм канал.
какие фишки можно реализовать с помощью триггеров и коллизий:
Все видели в играх такие фишки: игрок упал на платформу и потом, из-за этого она обрушается. Или же игрок входит в радиоактивную зону и, постепенно, теряет очки здоровья. Таких ситуаций и действий связанных с ними ну очень много. Вот именно эти фишки в движке Unity и можно сделать благодаря триггерам и коллизиям.
общая концепция
В Unity есть много "событий", то есть моментов времени в игре.
Первые события с которыми мы познакомимся, связаны с входом игрового объекта в некую область. В Unity эту область принято называть Trigger'ам. Сам Trigger представляет из себя игровой объект с коллайдером, у которого в опции IsTrigger стоит галочка, которая делает из границы - область.
С триггером может быть всего 3 события:
1. когда мы входим в триггер. Данное событие вызывается один раз, в момент самого входа.
2. когда некоторый объект находится в этой области. Такое событие вызывается много раз, пока объект находится в ней.
3. когда игровой объект выходит из триггера. Как и первое событие, оно вызывается только один раз, но уже вовремя выхода.
Также в Unity есть события, которые вызываются при столкновении объектов друг с другом. Любое столкновение в Unity следует называть коллизией.
Как и у триггера, колизия имеет три события:
1. когда мы только входим в столкновение. Это событие вызывается один раз.
2. когда мы находимся в моменте столкновения. Оно вызывается много раз, пока мы не отойдем от другого объекта.
2. когда мы выходим из коллизии. Оно вызывается один раз.
Заметили что события триггера и коллизии очень похожи друг на друга? Они только вызываются в разные моменты времени.
Лайфхак.
Самое главное, что нужно знать при работе с этими событиями: один из объектов, который принимает участие в событии, обязан иметь Rigidbody c динамическим телом, а также оба объекта обязаны иметь коллайдер любого типа.
Если эти условия не соблюдены, то каким бы не был хорошим ваш код, он просто не будет вызываться.
Давайте писать код!
детальнее о коллизии
Откроем проект с прошлого урока. И сотрем его. Шутка)
Предположим, мы хотим вызывать некоторое действие при столкновении игрока с препятствием. Для этого, как мы уже знаем, нужно обработать события связанные с коллизией. Поскольку в столкновении участвуют два объекта, обработка может быть на любом объекте участнике.
Предположим, что действие которое мы будем делать, будет касаться только препятствия. Сделаем отдельный компонент. Для этого перейдем в папку Scripts и в ней сделаем новый скрипт "Obstacle" (препятствие), и откроем его.
В нем следует стереть мусор, который Unity делает автоматом.
Во-первых стоит отметить, что события которые мы рассматривали до этого, являются обычными методами, которые вызываются самим движком (метод Start или Update). Именно поэтому для обработки событий, сперва нам следует объявить приватный метод, а затем, поскольку мы хотим работать со столкновениями, следует написать "OnCollision". После этого VisualStudio (или любой другой IDE) покажет 7 методов. Все они отвечают за обработку коллизии. Нам потребуется использовать только 3 из них, которые имеют приставку 2D, а именно:
OnCollisionEnter2D
OnCollsionStay2D
И OnCollisionExit2D
Интуитивно, по названию легко понять когда вызывается событие.
Так как мы делаем действие, которое должно вызываться при начале столкновения - выбираем метод OnCollisionEnter2D.
После, IDE автоматом дописывает параметр типа данных Collision. В этом параметре будет находится все информация о СТОЛКНОВЕНИИ. А нам будут нужны только данные об объекте, который столкнулся с нашим объектом. Давайте выведем его имя. Для этого внутри вызовем метод Log из класса Debug. В него, в качестве аргумента, передадим имя объекта, который врежется в наш объект. То есть, мы обращаемся к параметру и у него получаем gameObject. Это и есть игровой объект который в врезался в наш объект. Затем получаем у него свойство name, которое хранит в себе имя объекта в иерархии.
Ставим ";"т -> Ctr + Shift + S -> Открываем Unity ->даем препятствию компонент Obstacle -> запускаем проект в игровом режиме. Ну как, у всех при столкновении двух объектов консоль выводит имя игрока, которое указано в иерархии? Браво (если ответ - да).
подробнее о триггере
Теперь сделаем триггер. Для этого сделаем обычный пустой объект, который разместим снизу экрана. Повесим на него компонент BoxCollider2D, у которого в инспекторе поставим галочку в пунтке IsTrigger, чтобы игрок мог без проблем входить в него.
Триггер, работает иначе чем коллизия, а потому может вызываться только на одном объекте, который и является триггером. Для его обработки нам потребуется сделать компонент для него. Поэтому в папке Scripts сделаем скрипт "BottomArea" (нижняя зона).
После открытия скрипта, как и в прошлый раз, сперва сотрем весь мусор, а затем сделаем приватный метод и дадим ему название OnCollision. Как и в прошлый раз Visual Studio покажет список всех событий. Пока, нам будут нужны только методы с приставкой 2D. Из списка выбираем метод OnTriggerEnter2D.
После выбора дописался параметр, и сейчас в нем будет содержаться все информация о коллайдере, который в нас вошел. Надо вывести имя его объекта, поэтому напишем Debug.Log() и в качестве аргумента передадим имя объекта.
Ctr + Shift + S -> открываем Unity -> даем зоне компонент BottomArea -> запускаем проект в игровом режиме. Все видят, что при входе игрока в зону выводится его имя в консоли? Бинго!
Домашнее задание
Сделать механику игры, в которой объекту нужно дойти до конца дороги, а при достижении зеленой линии, он перемещается снова в начало.
Если вдруг вы не знаете как сделать упражнение или у вас возникнет проблема - го в проект с готовым решением.
А на этом, урок подошел к концу, пожалуйста не забудьте оценить этот урок лайком и подписаться.
Subscription levels2

На еду и коммуналку

$0.65 per month
Просто для тех, кто не безразличен к благодарности за контент. Мы делаем мы стараемся,Ю и, если это кому-то нужно, то welcome.

Для любителей по-глубже

$1.29 per month
Тут будет эксклюзив для тех, кто хочет углубится в изучение UNITY. А вдруг есть им такие тут?))
Go up