Inicializar tablero 2D con bucles anidados
Clase 9 de 31 • Curso de Desarrollo de Videojuegos para Móviles con Unity
Contenido del curso
Sprite Atlas y Generación de Caramelos
- 5

Sprite Editor y cámaras en Unity para móviles
11:53 min - 6

Sprites múltiples en Unity con slice automático
12:06 min - 7

Script base de Candy en Unity C#
10:57 min - 8

Configuración y Gestión del Tablero en Unity con C#
10:08 min - 9

Inicializar tablero 2D con bucles anidados
Viendo ahora - 10

Configuración de slice por tamaño en Unity
05:22 min - 11

Creación y Configuración de Tablero en Unity para Videojuegos
08:22 min - 12

Sprites aleatorios de prefabs en Unity
07:18 min
Diseño de Game Play
- 13

Arreglar bug de tripletes en tablero Candy Crush
12:33 min - 14

OnMouseDown para seleccionar caramelos
12:14 min - 15

Swap de caramelos sin mover GameObject
10:17 min - 16

Configuración de Física en Unity para Movimiento de Caramelos
13:30 min - 17

Detección y Eliminación de Coincidencias en Candy Crush
12:06 min - 18

Anular sprites en lugar de destruir objetos
15:26 min - 19

Caída en cascada para match-3 con corrutinas
13:23 min - 20

Generar caramelos sin crear matches accidentales
09:09 min - 21

Último bug visual: rebotes y recálculos
10:55 min
Retos finales
- 22

Diseño de Interfaz Gráfica en Unity para Videojuegos
11:20 min - 23

Variables autocomputadas en Unity GUI Manager
07:31 min - 24

Implementación de Singleton en Gestor de Interfaz de Usuario
08:13 min - 25

Corrutinas para pantalla Game Over sin interrupciones
06:55 min - 26

Multiplica puntuación con combos inteligentes
04:46 min - 27

Integra tres audios en tu videojuego de caramelos
01:47 min - 28

Animación y Destrucción de Caramelos en Videojuegos
02:00 min - 29

Menú principal para tu videojuego móvil
03:28 min
Cierre del curso
Aprende a inicializar una matriz 2D de GameObject en Unity paso a paso: crear el array, calcular posiciones con offset, instanciar con Instantiate y nombrar cada pieza para depurar rápido. Todo con un enfoque claro y práctico, ideal para tableros tipo match-3.
¿Cómo se organiza el tablero 2D con arrays y bucles?
Empezamos creando la matriz 2D que guardará cada caramelo. La estructura es GameObject[,] y sus dimensiones dependen de x size (columnas) e y size (filas). Luego, dos bucles for anidados recorren columnas y filas para poblar el tablero.
- Crear
candiescomonew GameObject[xSize, ySize]. - Usar
for (int x = 0; x < xSize; x++)y, dentro,for (int y = 0; y < ySize; y++). - Instanciar un
newCandyy guardarlo encandies[x, y].
¿Qué significan x size e y size en columnas y filas?
- x size controla columnas: cuántos elementos caben de izquierda a derecha.
- y size controla filas: cuántos elementos caben de abajo a arriba.
- Pensar en columnas para x e hileras para y evita confusiones al indexar.
¿Por qué usar dos bucles for anidados?
- Cada iteración en x coloca una columna completa.
- Cada iteración en y coloca una fila dentro de esa columna.
- Dos índices (
x,y) permiten mapear posición lógica a posición en pantalla y al array.
¿Cómo calcular la posición con start x, start y y offset?
Primero se toman las coordenadas base del tablero con this.transform.position.x y this.transform.position.y, guardadas en start x y start y. A partir de ahí, cada casilla se desplaza con un offset en x e y multiplicado por los índices del bucle.
start xystart y: punto de inicio de la rejilla.offset.x: ancho del caramelo o separación horizontal.offset.y: alto del caramelo o separación vertical.- Fórmula de posición:
start + (offset * índice).
Ejemplo directo en C#:
float startX = this.transform.position.x;
float startY = this.transform.position.y;
Vector3 position = new Vector3(
startX + offset.x * x,
startY + offset.y * y,
0f // z sin profundidad
);
¿Qué es un new Vector3 en un juego 2D?
- Aunque sea 2D, Unity trabaja en 3D sin profundidad.
- La z se fija en 0 para evitar desplazamientos no deseados.
- Se usan las tres coordenadas: x, y y z = 0.
¿Cómo instanciar, rotar y nombrar cada GameObject con instantiate?
Se parte de un prefab base, aquí llamado currentCandy (el placeholder cuadrado). Se instancia en la posición calculada y con la rotación original del prefab. Luego se nombra con su columna y fila, y se guarda en el array.
- Usar Instantiate con tres parámetros: objeto, posición y rotación.
- Mantener
currentCandy.transform.rotationpara alinear bien el sprite. - Nombrar cada instancia con
string.Format("candy[{0}][{1}]", x, y). - Guardar la referencia en
candies[x, y].
Fragmento clave en C#:
for (int x = 0; x < xSize; x++)
{
for (int y = 0; y < ySize; y++)
{
Vector3 pos = new Vector3(
startX + offset.x * x,
startY + offset.y * y,
0f
);
GameObject newCandy = Instantiate(currentCandy, pos, currentCandy.transform.rotation);
newCandy.name = string.Format("candy[{0}][{1}]", x, y);
candies[x, y] = newCandy;
}
}
¿Para qué sirve nombrar con columna y fila?
- Facilita la depuración visual: verás en el Hierarchy cada caramelo como
candy[x][y]. - Permite identificar rápidamente qué instancia corresponde a cada posición.
- Ayuda cuando hay muchas piezas en pantalla y es difícil distinguirlas.
¿Quieres profundizar en variantes de posicionamiento o en cómo ajustar el origen del tablero desde el editor? Comparte tus dudas y casos de uso en los comentarios.