Mantieni la velocità
Lezione 3 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.
La pallina di Brick Breaker non rallenta mai. Il suo PhysicsMaterial fa gran parte del lavoro: un rimbalzo pari a 1 mantiene tutta la velocità del rimbalzo e un attrito pari a 0 impedisce alle pareti di frenarla. Le pareti non hanno un materiale e Unity calcola per impostazione predefinita la media dei valori dei due collider: il valore 1 della pallina e il valore 0 di una parete fanno sì che la pallina rimbalzi a metà velocità. bounceCombine = Maximum e frictionCombine = Minimum fanno sì che prevalgano i valori della pallina.
La fisica non è ancora perfetta: una racchetta in movimento aggiunge la propria velocità e piccoli errori si accumulano nel corso di centinaia di rimbalzi. Quindi, a ogni passaggio della fisica, la pallina mantiene la propria direzione e la sua velocità viene reimpostata:
rb.linearVelocity = rb.linearVelocity.normalized * 7f;Una pallina rallentata a 2 unità al secondo torna a viaggiare a 7 al passaggio successivo.
Sfida
FacileFai rimbalzare la palla all'infinito a una velocità costante.
- In
Ball, nel metodoAwake(), creanew PhysicsMaterial("Bouncy")con rimbalzo pari a 1 ed entrambi gli attriti pari a 0; impostabounceCombine = PhysicsMaterialCombine.MaximumefrictionCombine = PhysicsMaterialCombine.Minimum; assegnalo aGetComponent<Collider>().material. - Aggiungi
FixedUpdate(): se la palla è stata lanciata,rb.linearVelocity = rb.linearVelocity.normalized * speed;
Premi «Gioca» e lancia la palla: rimbalzerà contro ogni parete senza rallentare. Poi premi «Verifica».
Provalo tu
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
bool launched;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (launched) return;
transform.position = paddle.position + Vector3.up * 0.5f;
if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
}
public void Launch(Vector3 direction)
{
launched = true;
rb.linearVelocity = direction.normalized * speed;
}
}
Tutte le lezioni di Gioco in Unity: Rompi i mattoni
Esercitati da solo: Playground Unity