Menu
CoddyTech

La racchetta

Lezione 1 di 16 del corso Gioco Unity: Rompi-mattoni di Coddy.

In questo corso costruirai Brick Breaker in 3D: una racchetta in basso, una palla che rimbalza tra le pareti e un muro di mattoni da rompere. Ogni lezione aggiunge una funzionalità: i mattoni, le vite, i livelli, una schermata di fine partita e i potenziamenti che allargano la racchetta o dividono la palla. La scena è pronta: la telecamera inquadra il campo di gioco frontalmente e tutto si muove sul piano x e y a z = 0. Per ora gli script Paddle, Ball, Brick, GameManager e PowerUp sono brevi stub.

La racchetta ha un Rigidbody cinematico, spostato con MovePosition in FixedUpdate, così la fisica ne rileva il movimento e i rimbalzi della palla potranno sfruttarlo in seguito. Un corpo cinematico non viene mai fermato dai collider privi di Rigidbody, quindi le pareti laterali non lo bloccheranno: ci pensa lo script a mantenerlo al suo posto. Limitare il centro in corrispondenza della parete lascerebbe metà dell'oggetto dentro la parete, quindi il limite è la posizione della parete meno metà delle dimensioni dell'oggetto. Questo ascensore in un pozzo che va da y = 0 a y = 12 lo fa sull'asse y:

float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);

Qui input è 1 per salire, -1 per scendere e 0 negli altri casi. Un ascensore alto 2 unità mantiene il centro tra 1 e 11, così le sue estremità si fermano esattamente a 0 e 12. Un primitivo Cube misura 1 unità per lato, quindi localScale.y è l'altezza dell'ascensore; leggerlo a ogni passaggio mantiene corretto il limite anche se le dimensioni cambiano durante il gioco.

challenge icon

Sfida

Facile

Scrivi il movimento della racchetta in FixedUpdate() di Paddle:

  1. Crea un float input: -1 mentre tieni premuta la freccia sinistra o A, 1 mentre tieni premuta la freccia destra o D, 0 altrimenti.
  2. Calcola il bersaglio: la posizione del Rigidbody spostata verso destra di input * speed * Time.fixedDeltaTime.
  3. Limita la x del bersaglio in modo che le estremità della racchetta si fermino sulle facce interne delle pareti, -wallX e wallX. La larghezza della racchetta è transform.localScale.x.
  4. Spostala lì con rb.MovePosition.

Premi Play, sposta la racchetta contro entrambe le pareti, poi premi Check.

Provalo tu

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // le facce interne delle pareti laterali si trovano a -wallX e wallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Muoviti con i tasti freccia oppure con A e D, e rimani tra le pareti.
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: Rompi-mattoni