Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Przeleć dronem przez pierścienie i pozwól każdemu pierścieniowi to zgłosić.

  1. W metodzie Start() w pliku Drone.cs ustaw body = gameObject.AddComponent<Rigidbody>(); i body.isKinematic = true;, aby dron leciał poziomo.
  2. W metodzie Start() w pliku Ring.cs ustaw GetComponent<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

Poćwicz samodzielnie: Edytor online Unity