Lancio
Lezione 2 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.
La palla aspetta sulla racchetta finché il giocatore non la lancia. Fino a quel momento, Update() la posiziona sopra la racchetta a ogni fotogramma, così va ovunque vada la racchetta, e un bool tiene traccia del fatto che abbia preso il volo:
void Update()
{
if (launched) return;
transform.position = paddle.position + Vector3.up * 0.5f;
}Il Rigidbody della palla non è soggetto alla gravità, quindi una velocità impostata una sola volta la mantiene in volo in linea retta. wasPressedThisFrame è true solo nel fotogramma in cui si preme un tasto, quindi leggilo in Update(). Per farla volare a una velocità esatta in qualsiasi direzione, rendi la direzione lunga 1 unità con .normalized, poi moltiplicala: new Vector3(3f, 4f, 0f).normalized * 10f la fa volare a 10 unità al secondo.
Sfida
FacileLa palla resta sulla racchetta finché la barra spaziatrice non la lancia.
- In
Ball, aggiungibool launched;epublic void Launch(Vector3 direction):launched = true;erb.linearVelocity = direction.normalized * speed; - In
Update(), esci se la palla è stata lanciata; altrimenti posizionala inpaddle.position + Vector3.up * 0.5f. - Quando la barra spaziatrice
wasPressedThisFrame, chiamaLaunch(new Vector3(0.3f, 1f, 0f)).
Premi «Gioca», muovi la racchetta, poi premi la barra spaziatrice: la palla vola verso l’alto e si ferma alla prima parete (il rimbalzo arriverà dopo). Poi premi «Verifica».
Provalo tu
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
// Prossimo passo: la pallina resta sulla racchetta finché Space non la lancia.
}
Tutte le lezioni di Gioco in Unity: Rompi i mattoni
Esercitati da solo: Playground Unity