Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Drone 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.cs dodaj dronowi komponent Rigidbody po uruchomieniu gry i przechowuj go w body. Dron musi lecieć poziomo wzdłuż trasy. Jeden komponent Rigidbody na dronie wystarczy do obsługi wszystkich trzech pierścieni.
  • W pliku Ring.cs ustaw 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");
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka