2_Физика движка
Урок 2 : Физика движка
Работа с физическим движком Unity: коллайдеры как физические формы, триггеры как зоны обнаружения, Rigidbody как физическое тело. Практика строит физическую основу сцены, которую Input-контроллер из следующего урока наполнит управлением.
Теория
- Что такое коллайдер? Какие основные виды коллайдеров есть в Unity?
- Зачем нужен флаг Is Trigger? Что происходит с физическим взаимодействием при его включении?
- Какие три условия нужны для срабатывания триггерных событий?
- Как отключить взаимодействие между определёнными слоями объектов? Как сделать это из кода?
- Назовите этапы физического цикла MonoBehaviour, связанные с столкновениями (порядок важен).
- Что такое Rigidbody? Какие варианты расчёта столкновений (Collision Detection Mode) есть и когда использовать Continuous?
- Как заморозить вращение Rigidbody по осям? Зачем это нужно для персонажа?
- Какие методы Rigidbody можно использовать для перемещения? В каком методе жизненного цикла их нужно вызывать?
- В чём отличие движения через Rigidbody от движения через Transform? Что происходит с коллайдерами при transform.Translate?
- Что такое Physics.Raycast? Что содержит структура RaycastHit?
- Чем отличается Physics.CheckSphere от Physics.OverlapSphere? Когда использовать каждый?
- Как ограничить Raycast только определёнными слоями? Какой параметр за это отвечает?
Практика
Создайте новую сцену для урока физики. Персонаж из этой сцены перейдёт в следующий урок - создайте его аккуратно и упакуйте в префаб.
Задания
Создайте новую сцену. Ограничьте её невидимыми стенами (прозрачные коллайдеры). Расставьте по сцене препятствия разной высоты. Проверьте, что стены и препятствия непроходимы - отдельным временным объектом.
Добавьте на сцену капсулу как заготовку персонажа. Добавьте Rigidbody: заморозьте вращение по осям X и Z. Проверьте, что капсула падает вниз под действием гравитации, но не заваливается на бок. Создайте префаб персонажа.
Создайте зону сбора предмета: небольшой сфере добавьте коллайдер с флагом Is Trigger. Напишите скрипт, который уничтожает предмет при входе капсулы в зону (через OnTriggerEnter). Используйте тег для идентификации игрока. Упакуйте в префаб.
Реализуйте луч (Raycast) от позиции персонажа вперёд. При попадании луча в объект - выводите в Console имя объекта и расстояние до него. Визуализируйте луч в Scene view через Debug.DrawRay. Фильтруйте луч через LayerMask - реагируйте только на слой Interactable.
* Реализуйте взрыв через Physics.OverlapSphere: при нажатии кнопки (например, G) создаётся сфера радиуса 5 единиц вокруг персонажа. Все Rigidbody в радиусе получают AddForce(direction * force, ForceMode.Explosion). Создайте несколько физических объектов на сцене для тестирования.
* Добавьте проверку земли через Physics.CheckSphere: небольшая сфера под ногами персонажа проверяет наличие коллайдера слоя Ground. Выводите в Console состояние isGrounded. Убедитесь что флаг корректно меняется при прыжке (в следующем уроке он понадобится для контроллера).