Menu
CoddyTech

La racchetta

Lezione 1 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.

In questo corso costruisci Brick Breaker in 3D, una funzionalità con una lezione: una racchetta, una palla rimbalzante, un muro di mattoni, vite, livelli e potenziamenti. Tutto si muove sul piano x e y a z 0. Per ora gli script Paddle, Ball, Brick, GameManager e PowerUp sono degli stub. «Gioca» avvia il gioco; «Verifica» valuta il codice.

La racchetta ha un Rigidbody cinematico, spostato con rb.MovePosition in FixedUpdate(), così la fisica ne rileva il movimento. Un corpo cinematico attraversa i muri, quindi lo script lo mantiene al loro interno. Limitare il centro in corrispondenza del muro lascerebbe metà della racchetta al suo interno: il limite è la posizione del muro meno metà della larghezza. Con i muri a -6 e 6 e una racchetta larga 2:

float half = 2f / 2f;
target.x = Mathf.Clamp(target.x, -6f + half, 6f - half);
rb.MovePosition(target);

Il centro rimane tra -5 e 5, così le estremità si fermano esattamente in corrispondenza dei muri. Leggere la larghezza da transform.localScale.x a ogni passaggio mantiene corretto il limite se la racchetta si ingrandisce.

challenge icon

Sfida

Facile

Sposta la racchetta tra le pareti.

  1. In Paddle, in FixedUpdate(), imposta float input su -1 quando è premuta la freccia sinistra o A, su 1 quando è premuta la freccia destra o D, altrimenti su 0.
  2. Calcola Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
  3. Con float half = transform.localScale.x / 2f;, limita target.x tra -wallX + half e wallX - half, quindi esegui rb.MovePosition(target);

Premi «Gioca» e fai scorrere la racchetta fino a entrambe le pareti: si ferma a ciascuna. Poi premi «Verifica».

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 le frecce o con A e D e resta tra le pareti.
    }
}

Tutte le lezioni di Gioco in Unity: Rompi i mattoni

Esercitati da solo: Playground Unity