Rozbijanie przy zderzeniu
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 10 z 71.
Jak silne było uderzenie? collision.relativeVelocity określa, jak szybko dwa obiekty zbliżały się do siebie w chwili zderzenia, a jego magnitude to prędkość uderzenia w m/s. Jest to różnica prędkości: samochód jadący z prędkością 10 m/s, który uderza w samochód jadący w tym samym kierunku z prędkością 8 m/s, uderza z prędkością zaledwie 2 m/s i oba samochody odnotowują tę samą prędkość uderzenia.
To jajko pęka, gdy uderza o podłoże z prędkością większą niż crackSpeed. Upuszczone z wysokości 1 m uderza z prędkością około 4.4 m/s (pierwiastek kwadratowy z 2 x 9.81 x 1), a z wysokości 2 m — około 6.3 m/s:
public float crackSpeed = 5f;
void OnCollisionEnter(Collision collision)
{
if (collision.relativeVelocity.magnitude > crackSpeed)
{
Debug.Log("Splat!");
Destroy(gameObject);
}
}Dlaczego nie użyć własnego rb.linearVelocity jajka? Do czasu wywołania OnCollisionEnter fizyka zdążyła już obsłużyć uderzenie, więc prędkość jajka to prędkość pozostała po uderzeniu, bliska zeru. relativeVelocity zachowuje prędkość samego uderzenia. To prędkość, więc masa nie ma znaczenia: ciężkie i lekkie jajko lądujące z prędkością 6 m/s odnotują tę samą wartość 6.
Wyzwanie
ŁatwyNapisz Window.cs: każde uderzenie osłabia okno, a przy wartości 0 okno się rozbija.
- W metodzie
OnCollisionEnterokna odejmijcollision.relativeVelocity.magnitudeodstrength. - Gdy
strength <= 0f, wywołajDestroy(gameObject);.
Naciśnij „Graj”, tocz miękkie kule strzałką w górę, a potem mocną kulę klawiszem spacji: okno się rozbije. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Window : MonoBehaviour
{
public float strength = 10f;
// Każde uderzenie zmniejsza strength o prędkość uderzenia; gdy strength spadnie do 0, szyba się rozbije
}
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