Menu
CoddyTech

La paleta

Lección 1 de 16 del curso Juego en Unity: Rompebloques de Coddy.

En este curso construirás Brick Breaker en 3D: una paleta en la parte inferior, una pelota que rebota entre las paredes y una pared de ladrillos que romper. Cada lección añade una característica: los ladrillos, las vidas, los niveles, una pantalla de fin de partida y potenciadores que ensanchan la paleta o dividen la pelota. La escena está lista: la cámara mira el campo de juego desde delante y todo se mueve en el plano x e y en z = 0. Por ahora, los scripts Paddle, Ball, Brick, GameManager y PowerUp son esqueletos breves.

La paleta tiene un Rigidbody cinemático, que se mueve con MovePosition en FixedUpdate, para que la física detecte su movimiento y, más adelante, la pelota pueda rebotar en ella. Un cuerpo cinemático nunca es detenido por colliders que no tienen Rigidbody, así que las paredes laterales no lo frenarán: el script lo mantiene dentro. Limitar el centro a la altura de la pared dejaría la mitad del objeto dentro de ella, por lo que el límite es la pared menos la mitad del tamaño del objeto. Este ascensor en un hueco de y = 0 a y = 12 lo hace en 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);

Aquí, input es 1 al subir, -1 al bajar y 0 en cualquier otro caso. Un ascensor de 2 unidades de alto mantiene su centro entre 1 y 11, así que sus extremos se detienen justo en 0 y 12. Un primitivo Cube mide 1 unidad por lado, así que localScale.y es la altura del ascensor, y leerlo en cada paso mantiene el límite correcto si el tamaño cambia mientras se ejecuta el juego.

challenge icon

Desafío

Fácil

Escribe el movimiento de la paleta en FixedUpdate() de Paddle:

  1. Crea un float input: -1 mientras se mantenga pulsada la flecha izquierda o A, 1 mientras se mantenga pulsada la flecha derecha o D, 0 en caso contrario.
  2. Calcula el objetivo: la posición del Rigidbody desplazada hacia la derecha por input * speed * Time.fixedDeltaTime.
  3. Limita la x del objetivo para que los extremos de la paleta se detengan en las caras interiores de las paredes, -wallX y wallX. El ancho de la paleta es transform.localScale.x.
  4. Muévela hasta allí con rb.MovePosition.

Pulsa Play, desliza la paleta hasta ambas paredes y después pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // las caras interiores de las paredes laterales están en -wallX y wallX

    Rigidbody rb;

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

    void FixedUpdate()
    {
        // Muévete con las flechas o con A y D, y mantente entre las paredes.
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego en Unity: Rompebloques