Menu
CoddyTech

OnCollisionEnter

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 8 из 63.

Когда два коллайдера начинают соприкасаться, Unity вызывает OnCollisionEnter(Collision collision) в скриптах обоих объектов. Этот метод вызывается один раз — на шаге физики, когда начинается соприкосновение, и больше не вызывается, пока объекты остаются в контакте. Чтобы столкновение вообще произошло, хотя бы у одного из двух объектов должен быть Rigidbody, движение которого рассчитывает физика: стена и пол без Rigidbody ничего друг другу не сообщат.

Этот ящик записывает сообщение в журнал при приземлении. У него есть Rigidbody, поэтому он падает, и сообщение появляется на шаге, когда он касается пола:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Thud!");
}

Ящик записывает сообщение один раз, а затем снова — только после того, как оторвётся от пола и приземлится во второй раз. Пол тоже получает это сообщение: скрипт на нём получит уведомление о приземлении ящика, даже если у пола нет Rigidbody. Имя метода и параметр должны быть указаны точно. Метод с именем onCollisionEnter никогда не вызывается, и при этом ошибки не возникает. Если метод принимает Collider, Unity записывает в журнал Script error: OnCollisionEnter с сообщением This message parameter has to be of type: Collision и игнорирует его. Пока объекты остаются в контакте, Unity вызывает OnCollisionStay на каждом шаге физики, а когда они разъединяются, один раз вызывает OnCollisionExit.

challenge icon

Задание

Легко

Нажимная пластина считает, что на неё падает. У пластины нет Rigidbody; он есть у ящика над ней, и тот падает на пластину.

  • Каждый раз, когда что-то начинает касаться пластины, увеличивай счётчик на 1 и выводи запись: Pressed 1, затем Pressed 2 и так далее.
  • Предмет, лежащий на пластине, учитывается один раз, как бы долго он там ни оставался.

Нажми Play и следи за Console, затем нажми Check.

Попробуйте сами

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // Подсчитывайте каждое приземление и записывайте его в лог: Pressed 1, Pressed 2, ...
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Физика и игровой процесс