La palla rotolante
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 28 di 71.
Questo capitolo consiste nel creare un piccolo gioco, Coin Rush. Fai rotolare una palla in un’arena delimitata da muri usando le frecce e raccogli monete prima che il tempo scada. Due script si dividono il lavoro, proprio come farebbero in un progetto Unity: Ball muove la palla e tiene il punteggio e il tempo, mentre Coin si trova su ogni moneta. Coin.cs inizia come classe vuota e la lezione successiva la completa.
Una palla rotola quando la spingi invece di spostarla direttamente. Spingi il suo Rigidbody con AddForce e lascia che ruoti liberamente: la forza muove la palla, mentre l’attrito del pavimento fa presa sulla parte inferiore e la mette in rotazione. Questa palla da bowling rotola lungo la pista mentre tieni premuto Space:
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à divisa per il 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 rotazione nei vincoli del Rigidbody: scivolerà come un disco da hockey senza girare. Una semplice sfera di un solo colore appare uguale in entrambi i casi: per vedere la rotazione, osserva Angular Velocity nella sezione Info del Rigidbody mentre il gioco è in esecuzione.
Sfida
MedioAvvia Coin Rush: fai rotolare la palla con le frecce.
- In
Ball.cs, inStart(), impostarb = GetComponent<Rigidbody>();. - In
FixedUpdate(), leggifloat x = Input.GetAxis("Horizontal");efloat z = Input.GetAxis("Vertical");, poi chiamarb.AddForce(new Vector3(x, 0f, z) * force);.
Premi «Gioca», fai clic sul gioco e fai rotolare la palla: gira mentre si muove. Poi premi «Verifica».
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.
}
}
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