Menu
CoddyTech

Zone letali

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

Una zona letale è un trigger posto in un'area che il giocatore non deve raggiungere: lava, spuntoni o il vuoto sotto il livello. Entrandoci, il giocatore viene riportato a un punto di spawn. In questo caso, se ne occupa lo script della lava, con il punto di spawn impostato nel campo Transform nell'Inspector:

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbody è il Rigidbody a cui appartiene il collider che entra. Impostare transform.position teletrasporta il giocatore, proprio ciò che serve per farlo ricomparire. Tuttavia, un Rigidbody mantiene la sua velocità durante il salto: un giocatore che è caduto a 10 unità al secondo arriva al punto di spawn continuando a cadere a 10 unità al secondo, e chi è corso nella lava continua a correre, dritto verso di essa. Impostare linearVelocity su Vector3.zero fa sì che arrivi fermo. Il controllo del tag lascia dov'è qualsiasi altra cosa cada nella lava.

challenge icon

Sfida

Facile

Il giocatore attraversa uno stretto ponte sopra il vuoto, spinto da forze applicate con i tasti freccia; quella parte è già scritta. Un trigger con il tag KillZone riempie lo spazio sottostante, e una bandiera con il tag Checkpoint, anch'essa un trigger, si trova a metà del ponte. Aggiungi al script del giocatore la funzione di ripristino:

  • Quando inizia il gioco, il punto di ripristino è dove si trova il giocatore.
  • Toccando un Checkpoint, la posizione del giocatore in quel momento diventa il nuovo punto di ripristino.
  • Entrando nella KillZone, il giocatore torna al punto di ripristino, restando fermo.

Premi Play e scendi dal ponte, poi Check.

Provalo tu

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: il punto in cui il giocatore ricompare

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint: memorizza la posizione del giocatore. KillZone: lo riporta in quel punto, fermo.
}
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