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.
Sfida
MedioAvvia 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, impostalinearDampingdel Rigidbody suaccel / topSpeed, così la velocità del giocatore si stabilizza intorno atopSpeed. - 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.Acceleratione un'accelerazione pari aaccel. - 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
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere