Unità: corpi rigidi e fisica
Il problema principale con le collisioni nell'ultimo capitolo era con il codice. We will now modify the values of the GameObject’s position directly. Stiamo semplicemente aggiungendo un valore alla posizione, se il giocatore sta premendo un tasto. Abbiamo bisogno di un modo per far muovere il giocatore in modo tale che reagisca adeguatamente ai confini e ad altri GameObject.
Per fare ciò, dobbiamo capire cosa rigidbodiessiamo. I corpi rigidi sono componenti che consentono a un GameObject di reagirereal-time physics. Ciò include reazioni a forze e gravità, massa, resistenza e quantità di moto.
Puoi collegare un Rigidbody al tuo GameObject semplicemente facendo clic su Add Component e digitando Rigidbody2D nel campo di ricerca.
Fare clic su Rigidbody2D collegherà il componente al tuo GameObject. Ora che è allegato, noterai che molti nuovi campi si sono aperti.
Con le impostazioni predefinite, GameObject cadrà verticalmente downa causa della gravità. Per evitare ciò, impostare ilGravity Scale a 0.
Ora, il gioco non mostrerà alcuna differenza visibile, perché GameObject non ha ancora nulla a che fare con la sua componente fisica.
Per risolvere il nostro problema, apriamo di nuovo il codice e riscrivilo.
public class Movement : MonoBehaviour {
public float speed;
public Rigidbody2D body;
// Update is called once per frame
void Update() {
float h = Input.GetAxisRaw(“Horizontal”);
float v = Input.GetAxisRaw(“Vertical”);
body.velocity = new Vector2(h * speed, v * speed);
}
}
Possiamo vedere che creiamo un file referencea un Rigidbody2D nelle dichiarazioni, e il nostro codice di aggiornamento funziona su quel riferimento invece che sulla trasformazione dell'Oggetto. Ciò significa che il Rigidbody ha ora la responsabilità di muoversi.
Potresti aspettarti il file bodyriferimento per generare NullReferenceException, poiché non gli abbiamo assegnato nulla. Se compili ed esegui il gioco così com'è, riceverai il seguente errore in basso a sinistra nell'editor
Per risolvere questo problema, consideriamo il componente creato dallo script. Ricorda che le proprietà pubbliche creano i propri campi in Unity, come abbiamo fatto con la variabile speed.
Regola la velocità su un valore più alto, intorno a 5, e gioca.
Le tue collisioni ora funzioneranno correttamente!