Nesse vídeo vamos adicionar alguns elementos de interface de usuário ao nosso jogo incluindo títulos para quando começamos o jogo e mudamos de fase e text para mostrar o placar do jogador. Para fazer isso vamos usar o sistema de UI da Unity. Vamos clicar em Game Object - UI - Canvas. O canvas vai conter todos os elementos de interface. O primeiro elemento que iremos criar será uma imagem que utilizaremos como fundo para nossos títulos. Vamos clicar em Game Object - UI - Image. Perceba que esse objeto é criado como filho de Canvas e a primeira coisa que faremos e mudar para a nossa scene view e afastar o zoom. E vamos usar os anchors pre-configurados para esticar essa imagem fazendo ctrl+click (option-click no MacOS). Vamos configurar a cor para preto. E chamar de Level Image. Em seguida vamos criar um objeto de texto que irá mostrar qual a fase em que o jogador está quando começamos o jogo ou mudamos de fase. Vamos selecionar a imagem Clicar em Game Object - UI - Text. Vamos chamar de Level Text. A primeira coisa que vamos fazer é ancorar a imagem ao centro da tela, vamos clicar nos anchor presets e fazer alt-click (option click no MacOS) no preset do centro. Agora vamos configurar a cor do texto para branco clicando em Colour e arrastando até branco. Vamos configurar o tamanho da fonte para 32. Perceba que quando fazemos isso o texto desaparece. Isso acontece porque o texto ficou muito grande para encaixar na largura e altura especificadas no rect transform. Como vamos ter um texto que vai variar de tamanho mostrando tanto o número da fase e nossa mensagem de fim de jogo vamos usar a configuração de overflow horizontal e vertical para permitir que o texto "vaze". Vamos configurar o overflow horizontal para overflow e o overflow vertical para overflow também. Agora nosso texto aparece de novo, vamos também centralizá-lo na horizontal e na vertical. Vamos configurar a fonte clicando no asset picker. E selecionar Press Start. Essa fonte vem com o projeto. Finalmente vamos configurar o texto padrão, que vai ser "Day 1". E isso é suficiente para o texto da fase. Agora vamos transformar o Level Text num filho de Level Image dessa maneira quando desativamos Level Image Level Text também será desativado. Agora vamos criar o texto para a pontuação. Selecione o Canvas, clique em Game Object - UI - text. Este text nós vamos alinhar com o fundo da tela no centro. Vamos clicar no anchor presets e clicar no preset bottom center pressionando o botão alt (ou option no MacOS). Mais uma vez vamos configurar a cor para branco. Clique em Colour, arraste para white. Vamos configurar o tamanho da fonte para 24. Alinha no centro na horizontal e vertical e configurar o texto default para Food 100. Vamos configurar a fonte para PressStart2P-Regular Perceba que novamente o texto foi cortado. Vamos configurar os overflows horizontal e vertical para Overflow. Vamos chamar o texto de FoodText e o que nós podemos ver aqui é que o objeto FoodText está sendo exibido na frente da imagem de título da fase. Não queremos que isto ocorra então o que vamos fazer é mover FoodText para mais alto na hierarquia para que ele fique diretamente embaixo de Canvas. Isso significa que ele será renderizado atrás de LevelImage e seu filho LevelText. A última coisa que vamos fazer é desativar temporariamente LevelImage e mover FoodText para cima só um pouco do fundo da tela. Vamos fazer isso configurando os anchors. Vamos configurar Y anchor para 0.05. Podemos ver que o texto se move na interface e vamos configurar Max para 0.05 também. Perca que o texto não se moveu quando fizemos isso. mas ocorreu um offset de -13 pixels no rect transform. Vamos configurar a posição Y para 0 e veremos o texto se mover para cima. Vamos reativar LevelImage e agora podemos criar o script para controlar os elementos de interface. Vamos para o folder Scripts e abrir o script Game Manager no Monodevelop. Em seguida vamos adicionar o código que precisamos no Game Manager para gerenciar a interface e também para gerenciar a transição entre níveis. Vamos reiniciar o variável level para 1 para que agora o jogo inicie na fase 1. A primeira coisa que vamos fazer é adicionar ao script Game Manager é a declaração de namespace using UnityEngine.UI. Em seguida vamos adicionar uma variável public float chamada levelStartDelay. Esse é o tempo que vamos esperar antes de mudar de fase, em segundos. Agora vamos adicionar uma variável private do tipo Text chamada levelText. Este será o texto que será exibirá o número da fase atual que acabamos de configurar para "Day 1" no editor. Vamos também declarar uma variável private do tipo GameObject chamada levelImage. Vamos usar essa variável para armazenar a imagem LevelImage para que possamos ativar e desativar a imagem conforme necessário. Vamos também adicionar uma variável private boolean chamada doingSetup que vamos usar para verificar se estamos criando a fase e evitar que o jogador se mova durante a criação. Depois da função Awake vamos adicionar uma nova função private que retorna void chamada OnLevelWasLoaded que recebe um parâmetro integer chamado index. OnLevelWasLoaded é parte da API da Unity e é chamada toda vez que uma cena é carregada. Vamos utilizar essa função para incrementar o número da fase e chamar a função InitGame depois que uma fase é carregada. Vamos usar InitGame para gerenciar os elementos de UI e configurar cada fase. Vamos começar configurando a variável doingSetup para true. Isso significa que o jogador não poderá se mover enquanto o título da fase é exibido. Agora vamos obter uma referência para o objeto LevelImage usando GameObject.Find. Aqui vamos procurar por nome, portanto certifique-se que o nome do seu game object no editor é exatamente igual ao nome que é passado a função GameObject.Find. Vamos fazer o mesmo para LevelText mas vamos também obter uma referência ao componente Text. Em seguida vamos configurar o texto do objeto LevelText para o número da fase atual. O texto que estamos configurando será uma string portanto temos que fornecer a variável "Day " com um espaço no final e vamos adicionar o número da fase no final da string, nesse caso o texto será "Day 1". Vamos ativar o objeto LevelImage usando SetActive. Em seguida vamos declarar uma função private que retorna void chamada HideLevelImage. Vamos usar essa função para desativar LevelImage quando estivermos prontos para iniciar a fase, e vamos chamar essa função de dentro de InitGame. Dentro de HideLevelImage vamos desativar o objeto LevelImage. E vamos também configurar DoingSetup para false para que o jogador possa agora se mover. De volta a InitGame vamos chamar HideLevelImage passando LevelStartDelay como o tempo de espera. Isso significa que enquanto exibimos o título da fase vamos esperar 2 segundos antes de desligá-lo. Em Update vamos adicionar uma verificação de DoingSetup ao if. É isso que irá evitar que o jogador se mova caso DoingSetup seja verdade. Em GameOver vamos mostrar a mensagem para o jogador dizendo quantos dias ele sobreviveu. A mensagem vai ser "After level number of days you starved". Vamos também ativar nosso fundo preto. Vamos salvar o script e retornar ao editor. Em seguida vamos adicionar algumas linhas de código ao script Player para que a classe Player possa atualizar o objeto FoodText conforme o valor muda. Vamos abrir o script Player no Monodevelop Em Player vamos também adicionar a declaração de namespace using UnityEngine.UI. Em seguida vamos adicionar a variável public do tipo Text chamada foodText. Na função Start vamos configurar o valor de foodText para o valor atual de Food. Em AttemptMove vamos fazer o mesmo depois de subtrairmos do placar do jogador. Vamos também mostrar uma mensagem quando o jogador pega uma comida ou soda. Quando o jogador pega um objeto de comida vamos mostrar "+ pointsPerFood" junto com o valor atual do placar. Vamos fazer o mesmo para soda. Em loseFood vamos exibir uma mensagem similar mostrando quantos pontos o jogador perdeu quando foi atacado. Vamos salvar o script e retornar ao editor. No editor vamos configurar uma referência para o objeto FoodText ao nosso jogador. Vamos escolher Player e em seguida vamos arrastar FoodText para a variável FoodText. Vamos executar nossa cena e testar. Podemos ver o título da fase, isso está funcionando. Quando movemos o jogador o texto com o placar do jogador é atualizado. Há a espera quando mudamos para uma nova fase. O título é exibido com o número da nova fase. Quando o inimigo nos ataca Nós vemos a mensagem "-10". Então parece que está tudo funcionando. Agora que os elementos de UI estão funcionando no próximo vídeo vamos adicionar efeitos sonoros e música e os scripts necessários para o controle dos mesmos.