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.
Sfida
MedioInizia Arena Escape: il giocatore scivola grazie alle forze.
- In
Start(), dopo la rigaGetComponent, impostarb.linearDamping = accel / topSpeed;, così la velocità si stabilizza vicino atopSpeed. - In
FixedUpdate(), creanew Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")). - Passa il suo
normalizedmoltiplicato peraccelarb.AddForceconForceMode.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
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 rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity