Menu
CoddyTech

Gerar objetos em uma grade

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 64 de 85.

Um loop dentro de outro loop percorre cada célula de uma grade: o loop externo escolhe uma coluna, e o loop interno percorre essa coluna. Coloque um Instantiate dentro dele, e cada célula receberá um objeto. Isso cria um piso de 3 por 3 a partir de peças com 2 unidades de largura, então elas ficam a 2 unidades de distância:

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);
        }
    }
}

As peças ficam nas posições x = 0, 2, 4 e z = 0, 2, 4: são nove peças, de (0, 0, 0) a (4, 0, 4). Os loops são executados em Start(), uma vez. Em Update(), eles adicionariam mais nove peças a cada quadro.

O quarto argumento é um objeto pai. Nove objetos Tile(Clone) soltos deixariam a Hierarchy bagunçada; passar transform os organiza como filhos do objeto ao qual este script está anexado, o Floor, para que possam ser recolhidos, movidos juntos ou excluídos juntos. A posição passada ainda é uma posição no mundo.

challenge icon

Desafio

Médio

Construa uma parede de prefabs de tijolos, com 4 de largura e 5 de altura.

  1. Em Start(), faça um loop de c de 0 a 3 e, dentro dele, de r de 0 a 4.
  2. No loop interno, chame Instantiate(brickPrefab, new Vector3(-1.5f + c, 0.25f + r * 0.5f, 0), Quaternion.identity, transform). O último argumento transforma cada tijolo em filho da parede.

Pressione “Jogar”: uma parede de 20 tijolos fica de pé no chão. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class WallBuilder : MonoBehaviour
{
    public GameObject brickPrefab;

    void Start()
    {
        // 4 colunas por 5 fileiras de tijolos, cada um filho deste Wall
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity