Menu
CoddyTech

Generar objetos en una cuadrícula

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 64 de 85.

Un bucle dentro de otro recorre cada celda de una cuadrícula: el bucle externo elige una columna y el interno la recorre. Coloca un Instantiate dentro y cada celda tendrá un objeto. Esto construye un suelo de 3 por 3 con baldosas de 2 unidades de ancho, así que quedan separadas por 2 unidades:

public GameObject tilePrefab;

void Start()
{
    for (int x = 0; x < 3; x++)
    {
        for (int z = 0; z < 3; z++)
        {
            Vector3 spot = new Vector3(x * 2, 0, z * 2);
            Instantiate(tilePrefab, spot, Quaternion.identity, transform);
        }
    }
}

Las baldosas quedan en x = 0, 2, 4 y z = 0, 2, 4: nueve en total, desde (0, 0, 0) hasta (4, 0, 4). Los bucles se ejecutan en Start(), una sola vez. En Update(), añadirían nueve baldosas más en cada fotograma.

El cuarto argumento es un objeto padre. Nueve objetos Tile(Clone) sueltos abarrotarían la Jerarquía; pasar transform los agrupa bajo el objeto al que está asociado este script, el suelo, para que puedas contraerlos, moverlos juntos o eliminarlos juntos. La posición que pasas sigue siendo una posición en el mundo.

challenge icon

Desafío

Intermedio

Construye una pared con prefabricados Brick, de 4 de ancho y 5 de alto.

  1. En Start(), recorre c desde 0 hasta 3 y, dentro de ese bucle, r desde 0 hasta 4.
  2. En el bucle interno, llama a Instantiate(brickPrefab, new Vector3(-1.5f + c, 0.25f + r * 0.5f, 0), Quaternion.identity, transform). El último argumento hace que cada ladrillo sea hijo de Wall.

Pulsa «Jugar»: una pared de 20 ladrillos se alza sobre el suelo. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

public class WallBuilder : MonoBehaviour
{
    public GameObject brickPrefab;

    void Start()
    {
        // 4 columnas por 5 filas de ladrillos, cada uno hijo de este Wall
    }
}

Todas las lecciones de Fundamentos de scripting en Unity

Practica por tu cuenta: Playground de Unity