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.
Desafio
FácilA 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 formatoLevel 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
}
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco