OnCollisionEnter
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 8 из 71.
Когда два коллайдера начинают соприкасаться, 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.
Задание
ЛегкоНажимная плита считает, сколько предметов на неё падает.
- Добавь поле
private int presses;вPressurePlate. - Добавь
void OnCollisionEnter(Collision collision): увеличьpressesна 1 и выведи в журнал"Pressed " + presses.
Нажми «Играть»: ящик упадёт, и в Console один раз появится Pressed 1. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Подсчитывайте каждое приземление и записывайте его в лог: Pressed 1, Pressed 2, ...
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity