Menu
CoddyTech

Entrata e uscita

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 19 di 63.

Un trigger invia altri due messaggi. OnTriggerExit(Collider other) viene eseguito una volta, nel passo fisico in cui termina la sovrapposizione, indipendentemente da come termina. OnTriggerStay(Collider other) viene eseguito a ogni passo fisico per tutta la durata della sovrapposizione, 50 volte al secondo per impostazione predefinita, come FixedUpdate(). Tutti e tre ricevono lo stesso Collider.

Questa corrente ascensionale solleva tutto ciò che galleggia al suo interno e segnala quando esce:

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");
}

Una forza va applicata in un passo fisico, quindi OnTriggerStay è adatto: la spinta viene applicata una volta per passo finché la palla si trova all'interno e si interrompe nel momento in cui esce. La corrente ascensionale non ha un Rigidbody, quindi ogni oggetto che vi entra deve averne uno, e qui attachedRigidbody non è mai null. Per un valore per secondo all'interno di OnTriggerStay, moltiplica per Time.deltaTime, che durante un passo fisico corrisponde alla durata del passo, 0.02. Ogni ingresso genera un OnTriggerEnter e, in seguito, un OnTriggerExit per lo stesso collider.

challenge icon

Sfida

Facile

La Baia gialla dipinta sul pavimento del magazzino è un trigger e lamp è la spia sul palo accanto. Scrivi LoadingBay in modo che la spia indichi se c'è qualcosa nella baia:

  • Quando inizia il gioco la baia è vuota, quindi la spia è spenta (lamp.enabled = false).
  • Finché c'è almeno un oggetto nella baia, la spia è accesa.
  • Quando l'ultimo oggetto esce, la spia si spegne di nuovo.

Due casse e il giocatore possono trovarsi tutti nella baia contemporaneamente, quindi l'uscita di uno non significa che la baia sia vuota. Premi Play e spingi le casse dentro e fuori usando le frecce, poi Check.

Provalo tu

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // La lampada è accesa finché c'è qualcosa nella baia di carico e spenta quando la baia è vuota
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay