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.1 Alterando o Script do GameController para Adicionar Transição Entre Cenas

Oba! Métodos novos! Que maravilha! O que são?

Bom, vamos aos principais destaques! Para começar, temos um novo import! Acredito ser a primeira vez que precisamos trazer um novo pacote ao nosso script para fazê-lo funcionar. Com a palavra-chave using, trazemos ao nosso script o pacote UnityEngine.SceneManagement, responsável por realizar o controle de cenas no Unity. É nesse pacote que encontramos os dois outros métodos novos a serem trazidos ao nosso código – o GetActiveScene() e o LoadScene().

O método GetActiveScene, do SceneManager, é responsável por buscar e fornecer informações sobre a cena atual na qual o jogo se encontra. Uma dessas informações é o parâmetro name, que salvamos na variável sceneName a fim de utilizar como referência para o método seguinte, chamado LoadScene.

O método LoadScene, por sua vez, é responsável por carregar uma nova cena, a qual possua o nome igual a string que lhe é passada na chamada. Também é possível chamar esse método utilizando um número, o qual faz referência ao código da cena na ordem de cenas. Veremos mais sobre isso adiante.

Esse carregamento de cena, no entanto, é imediato! Quando chamamos esse método, ocorre a mudança para a nova cena. Nesse caso, a animação de quebra do robozinho não seria sequer executada! Então, para não termos esse problema, o nosso método Break, na verdade, apenas invoca, com um delay de três segundos, o método RestartLevel, que faz, de fato, a troca de cenas. Já havíamos conhecido o método Invoke anteriormente, então ele não deve ser uma novidade.

Excelente! Já temos o nosso GameController e ele já faz a troca de cenas. Só precisamos de mais uma coisa para ele funcionar adequadamente: precisamos que a troca de cenas seja solicitada! E, para isso, podemos alterar a nossa função de quebra do personagem, a fim de ela também chamar a quebra do GameController! Para tanto, utilizaremos um método novo chamado FindObjectOfType<GameController>(). Vejamos, na Listagem 5, o código alterado do método Break do script PlayerController.

Listagem 5 - Método Break do PlayerController chamando o método Break do GameController.
Fonte: Elaborada pelo autor.

O método FindObjectOfType recebe um tipo de objeto e retorna o primeiro objeto daquele tipo que for encontrado. Como só temos um GameController, o FindObjectOfType retornará o nosso GameController. A partir daí, podemos chamar normalmente qualquer um de seus métodos públicos, e é exatamente isto que faremos: chamaremos o método Break. Agora, quando o nosso personagem tocar a animação de quebrar, ele também chamará o método de reiniciar o nível, resultando em algo como visto na Figura 8.

Nível reiniciando após o personagem quebrar.

Viram? Ele está bem! Obrigado, colega de mecatrônica, por ter consertado o nosso robô!

Somente com essa modificação, adicionando o GameController ao nosso jogo, o personagem já é capaz de retornar ao início da fase. Bacana, não? Mas ainda há outras coisas que o GameController pode fazer. Vamos aprender um pouco mais?

Versão 5.3 - Todos os Direitos reservados