La palla rotolante
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 27 di 63.
In questo capitolo realizzerai un piccolo gioco, Coin Rush. Fai rotolare una palla in un’arena con pareti usando le frecce e raccogli le monete prima che scada il tempo. Due script si dividono il lavoro, come farebbero in un progetto Unity: Ball muove la palla e gestisce il punteggio e il tempo, mentre Coin si trova su ogni moneta. Coin.cs inizia come classe vuota e la lezione successiva la completerà.
Una palla rotola quando la spingi invece di spostarla direttamente. Spingi il suo Rigidbody con AddForce e lascia libera la sua rotazione: la forza muove la palla e l’attrito del pavimento fa presa sulla parte inferiore della palla e la fa girare. Questa palla da bowling rotola lungo la sua corsia mentre tieni premuto Spazio:
public float push = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(Vector3.forward * push);
}
}Una palla che rotola senza slittare gira a una velocità pari alla sua velocità lineare divisa per il suo raggio, quindi una palla con raggio 0.5 che si muove a 3 unità al secondo gira a 6 radianti al secondo (rb.angularVelocity). Modifica invece il suo transform.position oppure blocca la sua rotazione in Constraints del Rigidbody: scivolerà come un disco da hockey senza girare. Una semplice sfera di un solo colore sembra uguale in entrambi i casi: per vedere il rotolamento, osserva Velocità angolare nella sezione Info del Rigidbody mentre il gioco è in esecuzione.
Sfida
MedioAvvia Coin Rush con la palla. Nell’Inspector, assegna a Ball una force di 10.
- In
Start(), memorizza ilRigidbodydella palla inrb. - In
FixedUpdate(), spingi la palla con le frecce:Input.GetAxis("Horizontal")lungo x eInput.GetAxis("Vertical")lungo z, entrambe moltiplicate perforce. - Lascia libera la rotazione, così potrà rotolare.
Per ora, lascia Coin.cs così com’è. Premi Play, fai clic sul gioco e rotola per l’arena, poi premi Check.
Provalo tu
using UnityEngine;
public class Ball : MonoBehaviour
{
public float force = 10f;
private Rigidbody rb;
void Start()
{
}
void FixedUpdate()
{
// Spingi la palla con i tasti freccia: Horizontal lungo x, Vertical lungo z.
}
}
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