Menu
CoddyTech

Siguiente nivel

Lección 12 de 19 del curso Juego en Unity: Rompe ladrillos de Coddy.

Un nivel se completa cuando se rompe su último ladrillo. Cuenta: suma uno por cada ladrillo construido, resta uno por cada ladrillo roto y, cuando llega a 0, el nivel ha terminado.

Contar los ladrillos que siguen en la escena no funciona en ese momento: Destroy espera hasta el final del fotograma, así que el ladrillo que se está rompiendo todavía está ahí.

Después del último nivel, vuelve a empezar el primero. El resto de una división hace que un número vuelva al principio:

int next = (2 + 1) % 3;   // 0: después del índice 2 de 3 niveles, vuelve a 0

Primero, la pelota vuelve a la paleta, para que la nueva pared no aparezca mientras hay una pelota en movimiento.

challenge icon

Desafío

Intermedio

Al eliminar los ladrillos, se construye el siguiente nivel.

  1. En GameManager, añade public Ball ball; (la escena lo vincula) y int bricksLeft;; BuildLevel suma uno por cada ladrillo que construye.
  2. BrickBroken resta uno a bricksLeft. Cuando llegue a 0, llama a ball.ResetToPaddle(); y a BuildLevel((level + 1) % levels.Length);

Pulsa «Jugar» y completa un nivel: la bola espera sobre la pala y aparece una nueva pared. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public string[] levels;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int lives = 3;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;
    int level;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildLevel(0);
        ShowHud();
    }

    void BuildLevel(int index)
    {
        level = index;
        string[] rows = levels[index].Split('/');
        for (int row = 0; row < rows.Length; row++)
        {
            string line = rows[row];
            float left = -(line.Length - 1) * spacingX / 2f;
            for (int col = 0; col < line.Length; col++)
            {
                char c = line[col];
                if (c == '.') continue;
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(c - '0');
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
        ShowHud();
    }

    public void BallLost(Ball lost)
    {
        lives--;
        ShowHud();
        lost.ResetToPaddle();
    }

    void ShowHud()
    {
        scoreText.text = "Score: " + score;
        livesText.text = "Lives: " + lives;
    }
}

Todas las lecciones de Juego en Unity: Rompe ladrillos

Practica por tu cuenta: Playground de Unity