Menu
CoddyTech

Linea di vista

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

Essere vicino a una guardia non è la stessa cosa che essere visto da essa: una parete in mezzo blocca la visuale. Per verificare la linea di vista, lancia un raggio dall'occhio verso il bersaglio e controlla che la prima cosa che colpisce sia il bersaglio stesso. La direzione è la posizione del bersaglio meno la tua, e un raggio di quella lunghezza raggiunge il bersaglio:

public Transform target;

bool CanSee()
{
    Vector3 toTarget = target.position - transform.position;
    if (Physics.Raycast(transform.position, toTarget, out RaycastHit hit, toTarget.magnitude))
    {
        return hit.transform == target;
    }
    return false;
}

Una telecamera di sicurezza su un pilastro registra I see you mentre CanSee() è true. Con il bersaglio allo scoperto, il primo oggetto colpito dal raggio è il bersaglio. Con il bersaglio dietro una cassa, il raggio colpisce prima la cassa, hit.transform è quello della cassa e il risultato è false. Physics.Raycast da solo restituisce true anche per la cassa, ed è per questo che l'oggetto colpito viene confrontato con il bersaglio.

Il bersaglio ha bisogno di un collider perché il raggio possa individuarlo. Il raggio non ha bisogno di una direzione normalizzata, poiché la sua lunghezza è determinata da maxDistance. Physics.Linecast(from, to) pone la domanda al contrario, chiedendo se ci sia un collider tra due punti: !Physics.Linecast(eye, target.position, wallMask) significa che non ci sono pareti di mezzo.

challenge icon

Sfida

Medio

La torre di guardia sorveglia il giocatore. Lo script Sentry si trova sulla torre e l’Inspector gli assegna il player e un range pari a 8. Il colore della torre mostra cosa vede:

  • Quando riesce a vedere il giocatore, colora la torre di rosso (Color.red) e, altrimenti, di verde (Color.green).
  • Vede il giocatore solo quando questo si trova a una distanza non superiore a range unità e non c’è nulla in mezzo.

Premi Play e fai muovere il giocatore intorno al muro con le frecce, poi premi Check.

Provalo tu

using UnityEngine;

public class Sentry : MonoBehaviour
{
    public Transform player;
    public float range = 8f;

    void Update()
    {
        // Rosso quando la sentinella può vedere player, verde altrimenti.
    }
}
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