Menu
CoddyTech

Próxima Fase

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 19 de 60.

Cada cena na lista de cenas da build tem um número, seu índice de build: 0 para a primeira, 1 para a seguinte e assim por diante. LoadScene recebe esse número, assim como um nome, e SceneManager.sceneCountInBuildSettings informa quantas cenas há na lista. Como os níveis estão em ordem na lista, o próximo nível é o índice da cena ativa mais 1. Esta saída carrega o próximo nível e, depois do ú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; portanto, no último nível, next é 4, um a mais que o último índice. É 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.

Agora, um único script de saída serve para 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 mudar a ordem, arrasta as cenas pela lista.

challenge icon

Desafio

Fácil

Faça cada objetivo abrir o próximo nível.

  1. Em Start(), exiba "Level " + level + " of " + levels em levelText: level é o buildIndex da cena ativa, levels é SceneManager.sceneCountInBuildSettings - 1.
  2. Em OnTriggerEnter, para o Player, carregue buildIndex + 1 ou 0 (o menu) quando esse valor não for menor que sceneCountInBuildSettings.

Pressione “Jogar” e conclua os três níveis: o menu aparecerá novamente. Depois, clique em “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 nível
    }
}

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity