Знакомство с физикой
О чем ты узнаешь из видео:
✅ Что такое коллайдеры
✅ Какие есть опции у коллайдера
✅Все о компоненте Rigidbody
На прошлом уроке, вы узнали как реализовать движение объекта через оси. Сегодня вы поймете как сделать столкновение между объектами. Поймете что такое коллайдер, физический материал и узнаете о компоненте Rigidbody2D.
Ремарка
Тема физики является невероятно обширной и вмещает в себя столько уроков, что можно сделать отдельный курс. Поэтому мы затронем ее очень поверхностно, только для того, чтобы вы знали как решать максимальный стек задач.
Начнем ваш путь в изучении физики со столкновения одного объекта с другим.
Однако, если на текущей сцене мы банально добавим какое-нибудь препятствие игроку, сделав обычный Sprite, то запустив сцену мы увидим, что никакого столкновения не произойдет! Не верите - попробуйте сами.
Почему? Ну, нарисованный Sprite это просто картинка, и теперь на сцене их две.
Для столкновения потребуется сделать физическую форму этим объектам. А это делается при помощи коллайдеров. Давайте разбираться что это и как с этим работать.
Коллайдеры
Компоненты-коллайдеры определяют форму объекта для физических столкновений игровых объектов.
Лайфхак: сам коллайдер невидим и поэтому он может иметь совершено не такую форму, как sprite игрового объекта, на котором он расположен.
Самые простые коллайдеры а так же те, которые требуют мало ресурсов, это коллайдеры примитивов (BoxCollider2D, CircleCollider2D и CapsuleCollider2D).
Если же объект имеет нестандартную форму, можно воспользоваться PolygonCollider2D. С его помощью можно сделать коллайдер абсолютно любой формы, путем добавления нужного количества полигонов.
Коллайдеры разделяются на два типа:
- Статический (не двигается и соответственно не имеет физику)
- Динамический (имеет физику и может двигаться).
Работа с коллайдерами
Для того чтобы добавить коллайдер на объект, нужно кликнуть по кнопке Add component в окне Instpector и выбрать интересующий нас коллайдер.
Для примера разберем BoxCollider2D.
Edit Collider
Первая кнопка под названием "Edit Collider", позволяет редактировать размер коллайдера через окно сцены.
Physic Collider
Вторая настройка позволяет задать физический материал конкретному коллайдеру (для настройки силы трения или силы отскока). Чтобы сделать материал потребуется в окне проекта, нажать правую кнопку мыши и выбрать опцию Create -> 2D -> пункт "PhysicsMaterial2D" -> даем название материалу. Главное чтобы по названию вы потом могли понять где какой материал, и какой за что отвечает.
К примеру, сделаем "материал мячика".
У материала есть всего два параметра - "Friction" и "Bounincess". Первый отвечает за трение, а второй - за отскок. Сделаем так, чтобы мячик был прыгучим: увеличим значение Bounciness на единицу.
Если сделать сцену на которой будет:
платформа с коллайдером;
круглый объект с коллайдером, но уже с материалам с увеличенным значением Bounciness на единицу;
компонент физики.
В таком случае мы получим прыгающий по платформе мячик.
Компонент физики мы затронем чуть позже
IsTrigger
Следующая настройка коллайдера это опция IsTrigger, которая позволяет превратить коллайдер в не твердую поверхность, а в пространство, которое может обрабатывать события взаимодействия объектов с ним. Более подробно, Trigger'ы мы рассмотрим в следующих уроках.
UsedByEffector
Следующая опция нужна если есть потребность в использование коллайдера эффектором.
Тема эффекторов относится к физике и в этом курсе рассматриваться не будет, но тем неменее ссылка на документацию эффекторов будет в описании.
UsedByComposite
Эта опция нужна если данный коллайдер является частью составного коллайдера, то есть объекта который имеет компонент CompositeCollider. Обычно составной коллайдер используется в случаях когда на сцене находится большое количество разных объектов которые является частью одного большого объекта.
Auto Tiling
Опция AutoTiling в данном курсе рассматриваться не будет.
Offset
Опция offset позволяет задать смещение формы относительно центра игрового объекта.
Size
Опция size позволяет регулировать размер формы через Instpector.
Edge radios
Последняя опция позволяет округлить углы формы.
У многих коллайдеров есть уникальные настройки но со всеми ими можно познакомиться уже на практике, там все интуитивно понятно.
Теперь давайте добавим коллайдеры к обоим объектам в нашем проекте.
Rigidbody
Компонент, который отвечает за физику в 2D мире, называется Rigidbody2D. После добавления этого компонента на объект он будет обладать физикой.
У компонента Rigidbody2D, на этом этапе изучения, потребуется изменять только несколько параметров
1. BodyType (тип физического тела). Всего есть три типа:
1. Dinamyc (динамичное тело), подвержено влиянию гравитации и внешних сил. Динамичное тело должны иметь те объекты, которые могут двигаться не контролируя свое движение через скрипт. К примеру мячик, который мы сделали сегодня.
2. Kinematic (кинематическое тело), способно двигаться только под контролем пользователя. Другие силы на это тело не действуют, что делает его быстрым и менее требовательным в плане системных ресурсов.
3. Static (статическое тело), которое абсолютно не подвижно.
2. Масса игрового объекта. Масса влияет только на столкновения объектов друг с другом и никак не влияет на гравитацию.
3. GravityScale - позволяет изменять масштаб гравитации. То есть если gravityScale будет равен 0, то следовательно и сама гравитация тоже будет равняться нулю. Если она будет равняться единице, то гравитация по умолчанию будет равняться -9.81 по Y.
Приравняем масштаб гравитации объекта к 0, чтобы он не мог падать. Теперь запустим проект и увидим, что объект сталкивается с препятствием! Но так же вы заметили, что при столкновении происходят небольшие подергивания игрока? А если мы увеличим скорость, сила подергиваний только возрастет.
Данную проблемы мы решим в следующем видео, когда будем писать управление объекта через физику.
Домашнее задание
Сделать движение платформы и мячик который будет от нее отскакивать. Также нужно сделать границы, чтобы мячик не вылетал за пределы игрового пространства. Пример готового задания можно глянуть в видосе.
Если вдруг вы не знаете как сделать упражнение или у вас возникнет проблема - можно найти проект с готовым решением по ссылке.
А на этом, урок подошел к концу, пожалуйста не забудьте оценить этот урок лайком и подписаться.