Wejście i wyjście
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 19 z 63.
Wyzwalacz wysyła jeszcze dwa komunikaty. OnTriggerExit(Collider other) uruchamia się raz, w kroku fizyki, w którym kończy się nakładanie — niezależnie od tego, jak do tego dojdzie. OnTriggerStay(Collider other) uruchamia się w każdym kroku fizyki, dopóki trwa nakładanie, domyślnie 50 razy na sekundę, tak jak FixedUpdate(). Wszystkie trzy przyjmują ten sam Collider.
Ten prąd wstępujący unosi wszystko, co w nim pływa, i informuje, kiedy obiekt go opuszcza:
public float lift = 15f;
void OnTriggerStay(Collider other)
{
other.attachedRigidbody.AddForce(Vector3.up * lift);
}
void OnTriggerExit(Collider other)
{
Debug.Log(other.name + " left the updraft");
}Siła powinna być stosowana w kroku fizyki, dlatego pasuje tu OnTriggerStay: pchnięcie jest stosowane raz na krok tak długo, jak piłka znajduje się wewnątrz, i ustaje w chwili, gdy ją opuszcza. Prąd wstępujący nie ma komponentu Rigidbody, więc każdy obiekt, który do niego wpadnie, musi go mieć, a attachedRigidbody nigdy nie ma tu wartości null. Aby uzyskać wartość na sekundę wewnątrz OnTriggerStay, pomnóż ją przez Time.deltaTime, które podczas kroku fizyki jest długością tego kroku, czyli 0.02. Każde wejście powoduje jedno wywołanie OnTriggerEnter, a później jedno wywołanie OnTriggerExit dla tego samego komponentu collidera.
Wyzwanie
ŁatwyŻółty stanowisko namalowany na podłodze magazynu jest wyzwalaczem, a lamp to lampka ostrzegawcza na słupku obok. Napisz LoadingBay, aby lampka pokazywała, czy cokolwiek znajduje się na stanowisku:
- Gdy gra się rozpoczyna, stanowisko jest puste, więc lampka jest wyłączona (
lamp.enabled = false). - Gdy na stanowisku znajduje się co najmniej jeden obiekt, lampka jest włączona.
- Gdy ostatni obiekt opuści stanowisko, lampka ponownie się wyłącza.
Dwie skrzynie i gracz mogą znajdować się na stanowisku jednocześnie, więc odejście jednego z nich nie oznacza, że stanowisko jest puste. Naciśnij Graj i przesuwaj skrzynie do środka i na zewnątrz za pomocą strzałek, a następnie naciśnij Sprawdź.
Spróbuj swoich sił
using UnityEngine;
public class LoadingBay : MonoBehaviour
{
public Light lamp;
// Lampa świeci, gdy w zatoce coś się znajduje, i gaśnie, gdy zatoka jest pusta
}
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