< Return to Video

2D Roguelike 12 of 14 : UI & Levels

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

more » « less
Duration:
11:26

Portuguese, Brazilian subtitles

Revisions