Menu
CoddyTech

Laços dentro de laços

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

Uma linha precisa de um loop. Um andar inteiro, com linhas e colunas, precisa de um loop dentro de outro:

for (int column = 0; column < 3; column++)
{
    for (int row = 0; row < 2; row++)
    {
        Debug.Log(column + ", " + row);
    }
}

A cada rodada do loop externo, o loop interno é executado até o fim. Então, isso escreve 0, 0 e 0, 1, depois 1, 0 e 1, 1, depois 2, 0 e 2, 1: 3 colunas vezes 2 linhas, 6 linhas ao todo.

Os dois loops precisam de contadores com nomes diferentes. Aqui, eles recebem nomes de acordo com o que contam, column e row, o que torna o código mais fácil de ler do que i e j.

challenge icon

Desafio

Médio

Monte um piso com 12 peças: 4 colunas, 3 linhas.

  1. Em Start(), substitua PlaceTile(0, 0); por for (int column = 0; column < 4; column++).
  2. Dentro das chaves, escreva for (int row = 0; row < 3; row++) e chame PlaceTile(column, row); dentro desse loop interno.

Pressione “Jogar”: aparece um piso com 4 por 3 peças. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class TileFloor : MonoBehaviour
{
    void Start()
    {
        // Disponha 4 colunas e 3 linhas de ladrilhos.
        PlaceTile(0, 0);
    }

    void PlaceTile(int column, int row)
    {
        GameObject tile = GameObject.CreatePrimitive(PrimitiveType.Cube);
        tile.name = "Tile";
        tile.transform.position = new Vector3(column * 1.1f - 1.65f, 0.1f, row * 1.1f);
        tile.transform.localScale = new Vector3(1, 0.2f, 1);
        tile.GetComponent<Renderer>().material.color = new Color(0.85f, 0.85f, 0.9f);
    }
}

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

Pratique por conta própria: Playground de Unity