В этой статье я расскажу о компоненте Rigidbody и то как он влияет на объекты в Unity.
О компоненте Rigidbody
Rigidbody предоставляет основанный на физике способ управления движением и положением игрового объекта. Вместо свойств преобразования вы можете использовать смоделированные физические силы и крутящий момент для перемещения игрового объекта и позволить физическому движку рассчитать результаты.
Для начала создадим на сцене пару кубов, а затем в инспекторе добавим одному из них компонент Rigidbody.
У Rigidbody есть несколько настроек о которых я сейчас расскажу.
- Mass - масса объекта, измеряется в килограммах. Чтобы имитировать силы сопротивления, замедляющие движение, используйте Drag.
- Drag - определяет скорость затухания линейной скорости тела, чтобы имитировать лобовое сопротивление, сопротивление воздуха или трение. Низкие значения приводят к более низкой скорости затухания, так что игровой объект движется быстрее и дольше (тяжелые объекты). Высокие значения приводят к более высокой скорости затухания, так что игровой объект замедляется в течение короткого промежутка времени (легкие объекты).
- Angular Drag - определяет скорость затухания скорости вращения твердого тела, чтобы имитировать лобовое сопротивление, сопротивление воздуха или трение.
- Automatic Center of Mass - включите Automatic Center of Mass, чтобы использовать предсказанный физической системой центр масс для твердого тела на основе его формы и масштаба. Отключите, чтобы задать свои собственные координаты X, Y и Z для центра масс.
- Automatic Tensor - включите Automatic Tensor, чтобы использовать предсказанный физической системой тензор и вращение тензора для тела на основе всех подключенных коллайдеров. В то время как масса влияет на линейное перемещение, тензор инерции влияет на вращательное движение. Отключите, чтобы вместо этого задать свои собственные координаты X, Y и Z для тензора.
- Use Gravity - будет ли на тело влиять гравитация, если отключить, то тело будет летать в невесомости.
- Is Kinematic - когда включена функция Is Kinematic, физическая система не может прикладывать усилия для перемещения или поворота игрового объекта, вместо этого Unity может перемещать и вращать его только с помощью своего преобразования (активация гравитации через скрипт).
- Interpolate - параметрами являются интерполяция и экстраполяция. Интерполяция - использует положение и скорость твердого тела из предыдущих двух обновлений физики, чтобы рассчитать и применить положение твердого тела в текущем кадре. Экстраполяция - использует позу и скорость неподвижного тела из предыдущего обновления физики и спрогнозируйте позу неподвижного тела в следующем обновлении физики, чтобы рассчитать и спрогнозировать позу в текущем кадре.
- Collision Detection - определяет, как физическая система обнаруживает столкновения между коллайдером этого твердого тела и другими коллайдерами в сцене. Параметры идут от простого обнаружения до сложного и соответственно более дорогого по ресурсам компьютера.
Запустим наш проект и посмотрим на результат.
Как мы видим куб упал и все работает. Теперь поднимем кубы выше, добавим Rigidbody второму кубу, а первому изменим массу на 35. Как только мы запустим проект мы увидим что кубы упали одинаково хотя масса у них разная. На это влияет параметр Drag. Сейчас кубы находятся в вакууме, но если добавить правому Drag = 1, то на него начнет влиять сопротивление воздуха и падать он будет медленнее.
Теперь уберем один куб и разберем Collision Detection.
У Collision Detection есть 4 параметра. Первый из них - это Discrete, он проверяет если в следующем кадре коллайдер объекта соприкоснулся с поверхностью то сработает коллизия. Это можно проверить подняв куб и отпустив его поставим проект на паузу (кнопка справа то Play). Далее начнем перематывать кадры (кнопка справа от Pause). Перед столкновением переключим кадр и увидим это:
В этом кадре куб начал проходить сквозь поверхность, в этот момент срабатывает обнаружение коллизии и куб вытолкнет назад. Однако если скорость куба будет выше, то куб может просто пролететь насквозь.
С этим поможет параметр Continuous. Этот параметр выстраивает лучи по направлению движения куба, и если лучи пересекут место соприкосновения с поверхностью то куб вернется на это место, а не пролетит насквозь.
Continuous работает с не динамическими объектами, два летящих быстрых объекта такой параметр не отследит, в таком случае поможет параметр Continuous Dynamic.
Continuous Speculative лучше всего отслеживает коллизию, но и тратит ресурсы больше всех, имеет сложный принцип работы про который подробнее можно прочитать тут.
Последнее о чем я хочу рассказать это о вкладка Constraints. В этой вкладке можно заморозить поворот или движение объекта.
Создадим платформу и два длинных бруска, у одного из них заморозим вращение по оси Z, и посмотрим на результат.
На этом все. Я рассказал о базовых вещах компонента Rigidbody. На этом он не ограничивается, можно сделать целое управление персонажем через Rigidbody и много другое.