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.
Desafío
IntermedioConstruye la pared en GameManager:
- Añade
public Brick brickPrefabypublic Transform wall(la escena vincula el prefab Brick y el objeto Wall), ypublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75fypublic float topY = 6f. - Escribe
void BuildWall(): un ladrillo por cada fila y columna, como hijo dewall. La fila 0 está en y =topYy cada fila estáspacingYmás abajo. Las columnas están separadas porspacingXy centradas en x = 0. Los ladrillos se sitúan en z = 0. - Llama a
BuildWall()desdeStart().
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.
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.