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.
Задание
ЛегкоНажимная пластина считает, что на неё падает. У пластины нет Rigidbody; он есть у ящика над ней, и тот падает на пластину.
- Каждый раз, когда что-то начинает касаться пластины, увеличивай счётчик на 1 и выводи запись:
Pressed 1, затемPressed 2и так далее. - Предмет, лежащий на пластине, учитывается один раз, как бы долго он там ни оставался.
Нажми Play и следи за Console, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Подсчитывайте каждое приземление и записывайте его в лог: Pressed 1, Pressed 2, ...
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора