Menu
CoddyTech

L'arena

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

Questo capitolo realizza Arena Escape. Schivi i cacciatori in un’arena circondata da mura mentre ondate di cacciatori si riversano nell’arena; tre colpi mettono fine alla partita e, una volta terminata l’ultima ondata, si apre un’uscita. Il gioco è composto da cinque script, già presenti nel progetto 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 usando forze invece di impostare la velocità, così il contraccolpo di un cacciatore si aggiunge al suo movimento invece di annullarlo. Una spinta da sola lo farebbe accelerare per sempre, quindi linearDamping riduce una parte della sua velocità a ogni passo: una spinta costante raggiunge un equilibrio a una velocità massima pari a circa l’accelerazione divisa per lo smorzamento. Questa slitta a cuscino d’aria 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, la slitta raggiunge una velocità massima vicina a 6 unità al secondo e, quando rilasci Spazio, lo smorzamento la ferma invece di lasciarla scivolare per sempre. ForceMode.Acceleration ignora la massa, quindi una slitta pesante accelera esattamente come una leggera. Il collider della slitta usa un PhysicsMaterial privo di attrito: se si aggiungesse l’attrito del pavimento allo smorzamento, la sua velocità massima sarebbe inferiore.

challenge icon

Sfida

Medio

Inizia Arena Escape: il giocatore scivola grazie alle forze.

  1. In Start(), dopo la riga GetComponent, imposta rb.linearDamping = accel / topSpeed;, così la velocità si stabilizza vicino a topSpeed.
  2. In FixedUpdate(), crea new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. Passa il suo normalized moltiplicato per accel a rb.AddForce con ForceMode.Acceleration.

Premi «Gioca» e scivola per l'arena. Poi premi «Verifica».

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 muovi il giocatore con i tasti freccia
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity