Relleno de Tablero 2D con GameObjects en Unity

Clase 9 de 31Curso de Desarrollo de Videojuegos para Móviles con Unity

Resumen

¿Cómo inicializamos un tablero en un juego 2D utilizando C#?

En el desarrollo de videojuegos, la creación e inicialización de un tablero es una tarea fundamental. Aquí te guiaré paso a paso para entender cómo lograrlo de manera eficiente y lógica, usando el lenguaje de programación C# como base.

¿Qué hay que hacer primero?

Todo comienza con la declaración del método createInitialBoard, encargado de inicializar la matriz 2D que representará nuestro tablero, con la ayuda de un GameObject. Para ello, necesitaremos determinar el número de filas y columnas que tendrá nuestro tablero. Estos valores vienen dados por las variables xSize y ySize respectivamente.

El primer paso es crear una matriz de GameObjects de tamaño xSize por ySize:

candies = new GameObject[xSize, ySize];

Este arreglo bidimensional almacenará nuestros caramelos en el tablero.

¿Cómo determinamos las coordenadas de inicio?

Para determinar dónde comenzará nuestro tablero en el espacio, se utilizan las coordenadas del BoardManager, de tal manera que podremos posicionarlo donde queramos en la escena. Utilizamos dos variables para almacenar estas coordenadas iniciales:

float startX = this.transform.position.x;
float startY = this.transform.position.y;

¿Cómo rellenamos el tablero?

Para llenar el tablero, anidamos dos bucles for, uno recorriendo las columnas y otro las filas:

for (int x = 0; x < xSize; x++) {
    for (int y = 0; y < ySize; y++) {
        ...
    }
}

Dentro del segundo bucle realizamos la instancia de cada caramelo. Usamos la función instantiate para crear nuevos GameObjects en las posiciones calculadas:

GameObject newCandy = Instantiate(currentCandy, new Vector3(startX + offset.x * x, startY + offset.y * y, 0), currentCandy.transform.rotation);

Aquí, offset es crucial ya que determina la separación entre cada caramelo. Multiplicar offset.x por x y offset.y por y permite ajustar cada caramelo en su posición correcta.

¿Cómo nombramos y almacenamos cada caramelo?

Nombrar claramente los objetos instanciados y almacenarlos en el arreglo facilita identificar y depurar el código en el futuro:

newCandy.name = string.Format("Candy[{0},{1}]", x, y);
candies[x, y] = newCandy;

Esto nos da un control visual y estructural del tablero, asegurando que cada caramelo esté exactamente donde debería estar.

¿Por qué usar Vector3 en un juego 2D?

Aunque trabajamos en un entorno visual 2D, el motor Unity opera en un espacio 3D, lo que requiere usar Vector3 al instanciar objetos. Simplemente establecemos la coordenada z como 0 para mantener la apariencia 2D:

new Vector3(x, y, 0)

Este método bien estructurado proporciona una base sólida para desarrollar juegos que requieren un tablero, como puzzles o juegos de estrategias, facilitando una inicialización precisa y organizada del mismo. Con este fundamento, el siguiente paso será ver cómo la teoría se transforma en una visualización clara y efectiva en pantalla.