Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula
O Unity tem um método para lidar com esses problemas gerados ao trabalharmos com objetos entre cenas, o DontDestroyOnLoad(). Esse método, como o nome sugere, indica que um objeto não deve ser destruído quando houver o carregamento de uma nova cena. Utilizando-o, podemos manter o nosso GameController vivo entre cenas, ou mesmo após o reinício da mesma cena.
Desse modo, mantendo vivo o nosso objeto controlador, podemos manter valores importantes para o andamento do jogo intactos, mesmo se houver um avanço ou reinício de cena. Podemos, por exemplo, manter a quantidade de chances restantes atualizada e, assim, chegar até o final, caso elas sejam esgotadas.
No entanto, há um outro problema sutil ocasionado ao utilizarmos essa função. Quando iniciamos uma cena, todos os objetos contidos nela são carregados, incluindo o objeto que nós mandamos não destruir. Se a recarregarmos em sequência, o objeto não é destruído, mas um novo é criado, em razão de ela ter sido recarregada. E se a cena for recarregada de novo, o que acontece? Vê o problema?
Há, porém, uma solução simples para isso! Podemos implementar, para o objeto a ser mantido entre as cenas, um padrão Singleton. Esse padrão nos diz que um objeto é único e garante não haver, a todo momento da existência desse objeto, outro objeto igual ativo em nosso programa. Queremos exatamente isso, não é?
A fim de implementar o padrão Singleton, podemos utilizar o método Start() do script do GameController, uma vez que esse método é chamado sempre na inicialização. E então, dentro dele, testamos se o objeto criado é o primeiro ou não. Caso seja, deixamos o objeto como Singleton e o mantemos através da função DontDestroyOnLoad(). Caso não seja o primeiro, simplesmente destruímos o novo criado, garantindo que só o primeiro passará adiante. Entendeu bem? Não é complicado! Basta reler algumas vezes e a informação será assimilada. Qualquer dúvida, é só passar no fórum! Vejamos esse código alterado para o GameController script na Listagem 7.
Listagem 7 - Código alterado do script do GameController, incluindo o padrão Singleton e o método DontDestroyOnLoad utilizado para manter o objeto vivo entre diferentes níveis do jogo.Vejam a utilização, na definição do objeto, de algumas palavras-chave que acompanham vocês desde as aulas de Programação Estruturada e Programação Orientada a Objetos – o static para manter o campo entre objetos, e o this para se referir ao próprio objeto.
Pronto! Com esse código, já podemos limitar a quantidade de tentativas que o jogador terá antes de ser apresentado à tela de Game Over. Para isso funcionar, falta apenas criarmos a cena de Game Over.
Versão 5.3 - Todos os Direitos reservados