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

arrow_back Aula 13 - Interface com o Usuário – HUD

1. Contando as Tentativas Restantes

1.2 Alterando a UI Através de um Script

O elemento que guarda a quantidade de vidas restantes e que está presente em cada uma das cenas é o elemento Game Controller. Portanto, esse será o elemento o qual alteraremos para passar a suportar as alterações de interface. Abram o script do GameController e façam as alterações iniciais.

A primeira coisa necessária para o nosso script funcionar é uma referência ao objeto que queremos alterar. Assim, criaremos uma variável do tipo Text em nosso script do Game Controller. Para isso, no entanto, precisamos realizar uma nova importação em nosso código, dessa vez, da UnityEngine.UI.

Em seguida, precisamos adicionar uma linha a mais aos métodos de fim de fase e de quebra – uma linha que altere o conteúdo do texto da variável Text criada para o novo valor da quantidade de vidas restantes, mesmo que esse valor tenha sido incrementado ou decrementado. Vejamos o código modificado na Listagem 1.

Listagem 1 - Adicionando uma alteração ao nosso elemento de UI.
Fonte: Elaborada pelo autor.

Pronto! Com essas alterações, já temos uma garantia de o valor do texto da UI ser alterado sempre que a variável for alterada. Para podermos testar, falta apenas irmos até a interface e arrastarmos o objeto de texto para o espaço da variável pública criada no script, a fim de definirmos quem é o objeto com o qual estamos lidando. Vejamos o funcionamento na Figura 5.

Elemento da UI sendo alterado quando o personagem altera a sua quantidade de chances restantes.

Isso só tem um problema. Tente perder outra tentativa, após a primeira, e observe o console.

MissingReferenceException: The object of type 'Text' has been destroyed but you are still trying to access it.

Your script should either check if it is null or you should not destroy the object.

Eita. Deu erro. E agora?

A cena foi recarregada, não é? Se ela foi reiniciada, aquele objeto Text não existe mais, concorda? Um novo foi criado em seu lugar. Mas o nosso script ainda está referenciando o primeiro. E, então, as coisas dão errado. Bem errado! Mas como podemos resolver esse problema?

Não é complicado! Para solucioná-lo, podemos criar, em nosso script do GameController, um método novo responsável por, toda vez que um novo nível surgir, seja ele reiniciado ou fruto de um avanço ao próximo, encontrar o campo de texto daquele nível e atualizar a variável, bem como o seu conteúdo.

Versão 5.3 - Todos os Direitos reservados