Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula

arrow_back Aula 11 - O Game Controller e a Transição Entre Cenas

3. O Game Controller

3.5 Adicionando uma Condição de Vitória

Mas chega de derrotas, não é? Falaremos agora de vitórias! Precisamos, ao chegar no fim do nível adequadamente, vencer! Avançar de fase! E celebrar! Faremos isso agora.

Por sorte, já temos um objeto responsável por representar o fim da fase. É o nosso BoundaryEnd. Adicionaremos, a esse objeto, um script capaz de avisar ao nosso GameController e ao nosso Player quando a condição de vitória for atingida. Nomeie esse script EndBoundaryTrigger. O código dele, similar ao já desenvolvido, pode ser visto na Listagem 8.

Listagem 8 - Código do script EndBoundaryTrigger.
Fonte: Elaborada pelo autor.

Perceba que o script tem duas diferenças em relação ao da fronteira inferior. Nesse caso, estamos usando o método OnCollisionStay2D. Esse método é chamado enquanto uma colisão estiver ocorrendo. O motivo disso é que queremos iniciar a animação de vitória apenas quando o personagem estiver no chão, então, detectamos a colisão e só disparamos o evento quando o personagem estiver lá. Isso é testado através do método já utilizado anteriormente, o isGrounded(), do próprio Player.

Mais uma vez, precisamos adicionar ao Player e ao nosso GameController os métodos relacionados ao fim do level. Esses métodos podem ser vistos nas Listagens 9 e 10, respectivamente.

Listagem 9 - Método LevelEnd adicionado ao script PlayerController.
Fonte: Elaborada pelo autor.
Listagem 10 - Métodos de LevelEnd adicionados ao script do GameController.
Fonte: Elaborada pelo autor.

Percebam que o método do PlayerController é bem similar ao já desenvolvido antes, mudando apenas a animação que será invocada do Animation Controller. Já o método do GameController varia um pouco.

No caso do GameController, estamos utilizando uma nova abordagem para avançar a fase. Buscamos a cena ativa, da mesma maneira como fazíamos no outro método, mas agora pegamos o índex dessa cena, e não o seu nome. Em seguida, carregamos a cena com a outra versão do LoadScene, o qual recebe um número como parâmetro, e então passamos o índex da cena ativa acrescido em uma unidade. Ou seja, carregamos a próxima cena de acordo com o Build Settings.

Como só temos em nosso Build Settings a cena principal do jogo, como a cena 0 e a cena de Game Over em seguida, como a cena 1, esse método também nos levará à cena de Game Over. Mas isso pode ser mudado, concorda?

Versão 5.3 - Todos os Direitos reservados