Это базовый урок о том, как использовать Rigid Body и Physics Materials, чтобы объекты в проектах Unity падали и отскакивали.


Видеоверсия этого руководства в настоящее время недоступна на этом языке. Ниже вы можете посмотреть английскую версию с субтитрами; под видео вы найдете перевод расшифровки на русский язык.


Текстовая расшифровка видео

Здравствуйте!

Это базовый урок о том, как использовать Rigid Body и Physics Materials, чтобы объекты в проектах Unity падали и отскакивали.

Unity предоставляет движок физической симуляции, однако для доступа к этим возможностям необходимо использовать несколько компонентов, таких как Rigid Body и Colliders, а также другие элементы.

Это связано с тем, что физическая симуляция требует значительных вычислительных ресурсов, поэтому по умолчанию объекты НЕ участвуют в ней. Нам необходимо явно указать, должен ли объект участвовать в физике и каким образом он должен себя вести.

Итак, приступим.

Я создаю простую сцену в Unity с объектом Cube в качестве пола и моделью баскетбольного мяча.

Сразу можно заметить, что объект Cube, являющийся стандартным объектом Unity, уже содержит компонент Box Collider, тогда как моя 3D модель, импортированная из внешнего файла, не имеет никакого компонента Collider. К этому мы еще вернемся.

Я размещаю модель баскетбольного мяча прямо над Cube на некотором расстоянии, но при нажатии кнопки Play сразу замечаю, что мяч не падает.

Чтобы мяч участвовал в физической симуляции сцены, нужно добавить ему компонент Rigid Body. Это легко сделать через Inspector объекта.

В параметрах компонента можно увидеть несколько интересных свойств, среди которых масса, которую в данном примере можно оставить без изменений, и флажок Use Gravity, который по умолчанию активирован. Поэтому запускаем игру и видим, что мяч действительно падает.

Однако он проходит сквозь Cube и падает вниз.

Можно предположить, что стоит добавить компонент Rigid Body и объекту Cube, возможно без гравитации, чтобы оба объекта участвовали в физической симуляции. Однако быстро становится ясно, что это не решает проблему, поэтому удаляем Rigid Body с Cube, чтобы избежать путаницы.

Мяч проходит сквозь Cube, несмотря на то что у Cube есть Box Collider и он должен обнаруживать столкновения.

Проблема в том, что у модели мяча нет собственного Collider, поэтому нужно добавить его через Inspector. Поскольку мяч имеет сферическую форму, выбираем для него Sphere Collider.

Теперь при запуске симуляции мяч падает на Cube и остается лежать на нем.

Важно помнить, что и Cube, и любой другой объект сцены, который будет взаимодействовать с мячом, должен иметь собственный Collider.

Итак, подведем итог. Чтобы два объекта сцены взаимодействовали друг с другом, оба должны иметь Colliders, иначе они будут проходить друг сквозь друга. Кроме того, чтобы объект участвовал в физической симуляции и на него действовали гравитация и другие силы, он должен иметь компонент Rigid Body.

Однако полученный результат пока не удовлетворяет: мяч падает и сталкивается с Cube, но не отскакивает.

Свойства материала объекта назначаются не компоненту Rigid Body, а Collider. Эти свойства относятся к любому объекту сцены, а не только к тем, которые участвуют в физической симуляции. Поэтому настраивать их нужно во вкладке Collider.

В этой вкладке есть поле Material, которое по умолчанию установлено в None. Это означает, что нужно назначить объект типа Physic Material.

Добавим в Project новый объект Physic Material. Обратите внимание, именно Physic Material, а не просто Material, который отвечает за визуальный вид объекта.

Затем назначим созданный Physic Material компоненту Sphere Collider мяча, нажмем Play и увидим, что мяч по-прежнему не отскакивает.

Это происходит потому, что по умолчанию параметр Bounciness у нового Physic Material равен 0. Это можно увидеть, выбрав данный объект и посмотрев его свойства в Inspector.

У Physic Material есть два основных свойства: Bounciness и Friction. Их можно настраивать для получения более или менее реалистичного поведения при отскоке. Например, увеличение Bounciness усиливает отскок, а увеличение Friction уменьшает расстояние, которое объект проходит после каждого отскока.

Попробуем установить значение Bounciness равным 1, что является максимальным значением для этого параметра, и запустим игру. Теперь мяч отскакивает пару раз, прежде чем остановиться.

Поведение выглядит реалистично, но как сделать так, чтобы мяч отскакивал сильнее?

Можно изменить параметры Friction и, прежде всего, два параметра Combine. Эти параметры определяют, каким образом физические свойства двух объектов объединяются при их контакте.

По умолчанию значение Bounce Combine установлено как Average. Это означает, что будет вычисляться среднее значение между мячом, для которого мы установили Bounciness равным 1, и Cube, у которого нет Physic Material, поэтому Unity воспринимает его значение как 0. В итоге фактическое значение Bounce будет равно 0.5.

Если изменить Bounce Combine на Maximum, фактическое значение Bounciness станет равным 1, и мяч будет отскакивать значительно сильнее.

Однако теперь возникает другая проблема: мяч продолжает отскакивать снова и снова.

Это довольно странное поведение. Судя по всему, чтобы отскоки постепенно затухали, значение Bounciness должно быть примерно 0.965.

Очевидно, что при симуляции отскоков важна и поверхность. Поэтому необходимо назначить Physic Material и объекту Cube. То же самое относится к полу, стенам и другим объектам, выполненным из разных материалов и имеющим разные физические свойства. После этого можно настроить их параметр Bounciness соответствующим образом.

Но с этим я оставляю вас поэкспериментировать самостоятельно. Попробуйте разные комбинации значений Bounciness, Friction и Combine.

На этом все. До скорой встречи!

Этот сайт предназначен исключительно для демонстрации некоторых моих работ и не имеет рекламных целей. Обратите внимание, что в настоящее время я не ищу и не рассматриваю запросы на индивидуальные заказы, консультации или любые другие формы профессионального сотрудничества.


РАСШИРЕННАЯ ИНФОРМАЦИЯ О ПОЛИТИКЕ КОНФИДЕНЦИАЛЬНОСТИ И ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE