OnCollisionEnter
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 8 z 71.
Gdy dwa obiekty kolizyjne zaczynają się stykać, Unity wywołuje OnCollisionEnter(Collision collision) w skryptach obu obiektów. Jest wywoływana raz, w kroku fizyki, w którym zaczyna się kontakt, i nie jest wywoływana ponownie, gdy obiekty pozostają w kontakcie. Aby w ogóle doszło do zderzenia, co najmniej jeden z tych obiektów musi mieć Rigidbody, którym porusza fizyka: ściana i podłoga bez Rigidbody nigdy nie przekazują sobie żadnych informacji.
Ta skrzynia zapisuje w logu informację o lądowaniu. Ma Rigidbody, więc spada, a komunikat pojawia się w kroku, w którym zetknie się z podłogą:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}Skrzynia zapisuje informację w logu raz i ponownie dopiero wtedy, gdy oderwie się od podłogi i wyląduje po raz drugi. Podłoga również otrzymuje komunikat: skrypt na niej wykryłby lądowanie skrzyni, mimo że podłoga nie ma Rigidbody. Nazwa i parametr muszą być dokładne. Metoda o nazwie onCollisionEnter nigdy nie jest wywoływana i nie pojawia się żaden błąd. Jeśli metoda przyjmuje Collider, Unity zapisuje w logu Script error: OnCollisionEnter z komunikatem This message parameter has to be of type: Collision i ignoruje ją. Gdy obiekty pozostają w kontakcie, Unity wywołuje OnCollisionStay w każdym kroku fizyki, a gdy się rozdzielą, wywołuje OnCollisionExit jeden raz.
Wyzwanie
ŁatwyPłyta naciskowa zlicza to, co na niej ląduje.
- Dodaj pole
private int presses;doPressurePlate. - Dodaj
void OnCollisionEnter(Collision collision): zwiększpresseso 1 i zaloguj"Pressed " + presses.
Naciśnij „Graj”: skrzynia ląduje, a w konsoli pojawia się raz komunikat Pressed 1. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Zliczaj każde lądowanie i zapisuj je w logu: Pressed 1, Pressed 2, ...
}
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity