Menu
CoddyTech

El muro

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

Los ladrillos forman una cuadrícula: filas de arriba abajo, columnas de izquierda a derecha, cada una una copia de un prefab de ladrillo creado en dos bucles anidados. La posición de un ladrillo se obtiene multiplicando sus números de fila y columna por el espaciado entre los centros de los ladrillos, que es el tamaño de un ladrillo más un pequeño espacio.

Para centrar una cuadrícula en x = 0, calcula dónde va la primera columna. Entre n columnas hay n menos 1 espacios, así que, con un espaciado de s, los centros de los extremos están separados por (n - 1) * s, y el primero queda a la mitad de esa distancia hacia la izquierda. Cinco postes de una cerca, separados por 2 unidades:

int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
    Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}

Quedan en -4, -2, 0, 2 y 4: el primer poste está en -4, no en -5, porque cuatro espacios separan cinco postes. El cuarto argumento de Instantiate, un Transform padre, coloca cada copia bajo un mismo objeto para mantener ordenada la Jerarquía. Cuando el tipo del campo del prefab es un script, como Brick, Instantiate devuelve el script de la nueva copia, listo para usar.

challenge icon

Desafío

Intermedio

Construye la pared en GameManager:

  1. Añade public Brick brickPrefab y public Transform wall (la escena vincula el prefab Brick y el objeto Wall), y public int rows = 5, public int columns = 9, public float spacingX = 1.75f, public float spacingY = 0.75f y public float topY = 6f.
  2. Escribe void BuildWall(): un ladrillo por cada fila y columna, como hijo de wall. La fila 0 está en y = topY y cada fila está spacingY más abajo. Las columnas están separadas por spacingX y centradas en x = 0. Los ladrillos se sitúan en z = 0.
  3. Llama a BuildWall() desde Start().

Pulsa Play y haz rebotar la pelota contra la pared (los ladrillos aún no se rompen), luego pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    void Awake()
    {
        Instance = this;
    }

    // Más adelante: el muro de ladrillos, la puntuación, las vidas y los niveles.
}
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