Menu
CoddyTech

L'arena

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

In questo capitolo realizzi Arena Escape. Schivi i cacciatori in un’arena cinta da mura, mentre arrivano ondate di nemici; tre colpi mettono fine alla partita e, quando è terminata l’ultima ondata, si apre un’uscita. Il gioco è composto da cinque script, presenti nel progetto fin dall’inizio: Player, Hunter, Spawner, Health ed Exit. Gli ultimi quattro sono vuoti per ora, e ogni lezione ne completa uno.

Il giocatore si muove con le forze invece che con una velocità impostata direttamente, così il contraccolpo di un cacciatore si aggiunge al suo movimento invece di essere annullato. Una spinta da sola lo farebbe accelerare per sempre, perciò linearDamping riduce una parte della sua velocità a ogni passaggio: una spinta costante si stabilizza a una velocità massima pari a circa l’accelerazione divisa per lo smorzamento. Questo slittino a levitazione spinge in avanti mentre tieni premuto Spazio:

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

Con un’accelerazione di 12 e uno smorzamento di 2, lo slittino raggiunge una velocità massima di circa 6 unità al secondo; quando rilasci Spazio, lo smorzamento lo ferma invece di lasciarlo scivolare per sempre. ForceMode.Acceleration ignora la massa, quindi uno slittino pesante accelera esattamente come uno leggero. Il collider dello slittino usa un PhysicsMaterial senza attrito: con l’attrito del pavimento oltre allo smorzamento, raggiungerebbe una velocità massima inferiore.

challenge icon

Sfida

Medio

Avvia Arena Escape con il giocatore. Nell'Inspector, allo script Player vengono assegnati accel (18) e topSpeed (6). Il giocatore ha massa 2 e un materiale senza attrito; per ora gli altri quattro script restano vuoti.

  • In Start, imposta linearDamping del Rigidbody su accel / topSpeed, così la velocità del giocatore si stabilizza intorno a topSpeed.
  • A ogni passaggio della fisica, spingi il giocatore con i tasti freccia: a sinistra e a destra lungo x, in alto e in basso lungo z, usando ForceMode.Acceleration e un'accelerazione pari a accel.
  • Normalizza la direzione dei tasti freccia, così la diagonale non è più veloce di una linea retta.

Premi Play e muoviti nell'arena, poi Check.

Provalo tu

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // imposta lo smorzamento, poi spingi il giocatore con i tasti freccia
    }
}
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