Kolizje wyzwalające
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 15 z 71.
Gdy włączona jest opcja Is Trigger, collider przestaje być bryłą stałą: ciała sztywne przechodzą przez niego, a Unity zamiast tego zgłasza nakładanie się obiektów, wywołując OnTriggerEnter w skryptach obu obiektów. Linie mety, przedmioty do zebrania i strefy zagrożenia są triggerami. W kodzie opcja ta odpowiada właściwości isTrigger collidera.
Strefa alarmowa w tym skarbcu zmienia collider na trigger, gdy gra się rozpoczyna — to tak, jakby zaznaczyć to pole — i uruchamia alarm, gdy strażnik do niej wchodzi:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}Triggery działają według tej samej zasady co kolizje: Unity sprawdza parę tylko wtedy, gdy co najmniej jeden z dwóch obiektów ma Rigidbody. Dwa obiekty bez Rigidbody nigdy nie wykrywają siebie nawzajem — niezależnie od tego, czy są triggerami. Strażnicy patrolują dzięki skryptowi, więc każdy z nich ma kinematyczne Rigidbody (Add Component, Rigidbody, zaznaczone Is Kinematic): grawitacja i uderzenia nie wpływają na niego, ale nadal liczy się jako Rigidbody. Bez Rigidbody strażników przechodzą oni przez strefę, a konsola pozostaje pusta. Bez isTrigger strefa jest bryłą stałą, a ciało kinematyczne nigdy nie dotyka collidera, który nie ma Rigidbody, więc znowu nic nie zostaje zapisane. Wystarczy jedno Rigidbody w parze, na dowolnym obiekcie. W następnej lekcji przyjrzymy się other — colliderowi, który wszedł do strefy.
Wyzwanie
ŁatwyPrzeleć dronem przez pierścienie i pozwól każdemu pierścieniowi to zgłosić.
- W metodzie
Start()w plikuDrone.csustawbody = gameObject.AddComponent<Rigidbody>();ibody.isKinematic = true;, aby dron leciał poziomo. - W metodzie
Start()w plikuRing.csustawGetComponent<Collider>().isTrigger = true;.
Naciśnij „Graj”: dron przeleci przez pierścienie, a konsola wyświetli Ring1 passed, Ring2 passed i Ring3 passed. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Ustaw collider tego pierścienia jako wyzwalacz
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
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