Menu
CoddyTech

Próxima Fase

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 19 de 56.

Cada cena na lista de cenas da build tem um número, seu índice da build: 0 para a primeira, 1 para a seguinte e assim por diante. LoadScene recebe esse número, além de um nome, e SceneManager.sceneCountInBuildSettings indica quantas cenas a lista contém. Com os níveis em ordem na lista, o próximo nível é o índice da cena ativa mais 1. Essa saída o carrega e, após o último nível, para:

void OnTriggerEnter(Collider other)
{
    if (!other.CompareTag("Player")) return;
    int next = SceneManager.GetActiveScene().buildIndex + 1;
    if (next < SceneManager.sceneCountInBuildSettings)
    {
        SceneManager.LoadScene(next);
    }
    else
    {
        Debug.Log("You finished the game!");
    }
}

Com quatro cenas, os índices vão de 0 a 3 e sceneCountInBuildSettings é 4, então, no último nível, next é 4, um além do fim. É por isso que o teste é next < sceneCountInBuildSettings: LoadScene(4) não carregaria nada e registraria o erro do Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.

Um único script de saída agora atende a todos os níveis, e nenhum deles especifica o nome de uma cena. Para adicionar um nível, você adiciona a cena dele à lista; para alterar a ordem, arrasta as cenas pela lista.

challenge icon

Desafio

Fácil

A lista de build contém quatro cenas: Menu (índice 0), depois Level1, Level2 e Level3. O botão Jogar do Menu abre Level1, e as setas movimentam o Player (ambos já estão prontos). Cada nível tem um Goal dourado com o script Goal. Escreva o script sem nomear nenhuma cena:

  • Em Start, mostre o número deste nível e o número de níveis em levelText, no formato Level 2 of 3. O Menu não é um nível.
  • Quando o Player (com a tag Player) chegar ao objetivo, carregue o próximo nível da lista. Depois do último nível, volte ao Menu.

Pressione Jogar, jogue os três níveis e, em seguida, pressione Verificar.

Experimente você mesmo

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;

public class Goal : MonoBehaviour
{
    public TMP_Text levelText;

    void Start()
    {
        // mostre "Level 2 of 3": o número deste nível e quantos níveis existem
    }

    void OnTriggerEnter(Collider other)
    {
        // o jogador chegou ao objetivo: carregue o próximo nível ou o menu após o último
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade