Menu
CoddyTech

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.

challenge icon

Задание

Легко

Нажимная плита считает, сколько предметов на неё падает.

  1. Добавь поле private int presses; в PressurePlate.
  2. Добавь void OnCollisionEnter(Collision collision): увеличь presses на 1 и выведи в журнал "Pressed " + presses.

Нажми «Играть»: ящик упадёт, и в Console один раз появится Pressed 1. Затем нажми «Проверить».

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

using UnityEngine;

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

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

Потренируйтесь самостоятельно: Песочница Unity