W co uderzyłem?
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 9 z 71.
Obiekt Collision, który Unity przekazuje do OnCollisionEnter, opisuje drugą stronę kontaktu. collision.gameObject to obiekt, w który uderzyłeś, więc collision.gameObject.name to jego nazwa, a collision.gameObject.CompareTag("Hazard") sprawdza jego tag. (collision.collider to dokładnie ten collider, którego dotknąłeś, gdy obiekt ma ich kilka.)
Ten samochodzik zderzakowy zapisuje w logu wszystko, w co uderzy, i narzeka na zagrożenia:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Bumped into " + collision.gameObject.name);
if (collision.gameObject.CompareTag("Hazard"))
{
Debug.Log("Ouch!");
}
}Pierwszy wiersz zapisany w logu to Bumped into Floor, w chwili rozpoczęcia gry: podłoga, na której stoi, również powoduje kolizję. Dlatego skrypt reagujący na uderzenia zawsze najpierw sprawdza, w co uderzył. Zwróć uwagę, który obiekt nazywasz: samo CompareTag("Hazard") sprawdza tag twojego obiektu, a Destroy(gameObject) niszczy twój obiekt, natomiast Destroy(collision.gameObject) usuwa obiekt, w który uderzyłeś.
Wyzwanie
ŁatwyPrzypisz pługowi zadanie: usuwaj bloki oznaczone tagiem Snow.
- Dodaj do
Plowmetodęvoid OnCollisionEnter(Collision collision), która działa tylko wtedy, gdycollision.gameObject.CompareTag("Snow"). - Wewnątrz wywołaj
Destroy(collision.gameObject);, zwiększ poleclearedo 1 i wyświetl w logu"Cleared " + cleared.
Naciśnij „Graj” i wjedź w śnieg: każdy blok zniknie, a konsola zliczy usunięte bloki. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Plow : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
private int cleared;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
}
// Śnieg, na który najeżdża pług: usuń go, policz i zapisz liczbę usuniętych obiektów w dzienniku
}
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