Menu
CoddyTech

Entrare e uscire

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 20 di 71.

Un trigger invia altri due messaggi. OnTriggerExit(Collider other) viene eseguito una volta, durante il passaggio di fisica in cui termina la sovrapposizione, in qualunque modo termini. OnTriggerStay(Collider other) viene eseguito a ogni passaggio di fisica finché dura la 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 durante un passaggio di fisica, quindi OnTriggerStay è adatto: la spinta viene applicata una volta per passaggio 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 la attraversa deve averne uno e qui attachedRigidbody non è mai null. Per applicare una quantità al secondo all'interno di OnTriggerStay, moltiplica per Time.deltaTime, che durante un passaggio di fisica corrisponde alla durata del passaggio, 0.02. Ogni attraversamento genera un OnTriggerEnter e, in seguito, un OnTriggerExit per lo stesso collider.

challenge icon

Sfida

Facile

Accendi la lampada quando c'è qualcosa nell'area di carico.

  1. Aggiungi un campo int inBay;. In Start(), imposta lamp.enabled = false;.
  2. In OnTriggerEnter, aggiungi 1 a inBay e imposta lamp.enabled = true;.
  3. In OnTriggerExit, sottrai 1 da inBay e spegni la lampada solo quando il valore è 0.

Premi «Gioca» e spingi le casse dentro e fuori: la lampada rimane accesa finché l'area non è vuota. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // La lampada è accesa finché c'è qualcosa nella baia di carico e si spegne quando la baia è vuota
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity