Menu
CoddyTech

Zone letali

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

Una zona letale è un trigger situato in un punto 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 in un campo Transform impostato 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, come richiesto da una rinascita. Tuttavia, un Rigidbody conserva la propria velocità durante il salto: un giocatore che è caduto a 10 unità al secondo arriva al punto di spawn continuando a cadere a 10, e chi è entrato di corsa nella lava continua a correre, finendoci subito di nuovo dentro. Impostare linearVelocity su Vector3.zero fa sì che arrivi fermo. Il controllo del tag lascia al suo posto qualsiasi altra cosa cada nella lava.

challenge icon

Sfida

Facile

Fai ricomparire il giocatore. Questo script è sul giocatore, quindi sposta transform e body, non other.

  1. In Start(), imposta il campo Vector3 respawn su transform.position.
  2. In OnTriggerEnter(Collider other), quando other.CompareTag("Checkpoint"), imposta respawn = transform.position;.
  3. Quando other.CompareTag("KillZone"), imposta transform.position = respawn; e body.linearVelocity = Vector3.zero;.

Premi «Gioca» e cammina giù dal ponte. Poi premi «Verifica».

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: ricorda dove si trova il giocatore. KillZone: torna in quel punto, restando fermo.
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity