Kolizje wyzwalające
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 15 z 63.
Kolider z zaznaczoną opcją Is Trigger przestaje być bryłą: ciała sztywne przechodzą przez niego, a Unity zamiast tego zgłasza nałożenie, wywołując OnTriggerEnter w skryptach obu obiektów. Linie mety, przedmioty do zebrania i strefy niebezpieczeństwa są triggerami. W kodzie to pole wyboru odpowiada właściwości isTrigger kolidera.
Strefa alarmowa w tym skarbcu zmienia kolider w trigger po uruchomieniu gry — to tak, jakby zaznaczyć pole wyboru — i uruchamia alarm, gdy strażnik do niej wejdzie:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}Triggery podlegają tej samej zasadzie co kolizje: Unity sprawdza parę obiektów tylko wtedy, gdy co najmniej jeden z nich ma Rigidbody. Dwa obiekty bez Rigidbody nigdy nie zgłaszają siebie nawzajem, niezależnie od tego, czy są triggerami. Strażnicy patrolują za pomocą skryptu, więc każdy z nich ma kinematyczne Rigidbody (Add Component, Rigidbody, zaznaczone Is Kinematic): grawitacja i uderzenia nie wpływają na nie, ale nadal liczą się jako Rigidbody. Bez Rigidbody strażników strażnik przechodzi przez strefę, a konsola pozostaje pusta. Bez isTrigger strefa jest bryłą, a ciało kinematyczne nigdy nie dotyka kolidera, który nie ma Rigidbody, więc znów nic nie zostaje zarejestrowane. Wystarczy jedno Rigidbody w parze, na dowolnym z obiektów. W następnej lekcji przyjrzymy się other — koliderowi, który wszedł do strefy.
Wyzwanie
ŁatwyDrone powinien przelecieć trasę przez trzy pierścienie, a każdy Ring powinien zapisać swoją nazwę i passed, gdy dron przez niego przelatuje, na przykład Ring1 passed. Nic jeszcze nie działa: skrypt drona porusza nim za pomocą MovePosition, ale żaden obiekt w scenie nie ma komponentu Rigidbody, a pierścienie są pełnymi bryłami.
- W pliku
Drone.csdodaj dronowi komponent Rigidbody po uruchomieniu gry i przechowuj go wbody. Dron musi lecieć poziomo wzdłuż trasy. Jeden komponent Rigidbody na dronie wystarczy do obsługi wszystkich trzech pierścieni. - W pliku
Ring.csustaw collider każdego pierścienia jako wyzwalacz po uruchomieniu gry.
Naciśnij Play i obserwuj konsolę, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Ustaw collider tego pierścienia jako trigger
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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 startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur