Como fazer um jogo de clique 2D - Unreal Engine 5 Blueprints | Pixel Helmet | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Como fazer um jogo de clique 2D - Unreal Engine 5 Blueprints

teacher avatar Pixel Helmet, Game Developer & Publisher

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      1.01 Introdução

      1:31

    • 2.

      1.02 Baixando o Unreal Engine 5

      1:27

    • 3.

      1.03 Criando um novo projeto

      3:19

    • 4.

      1.04 Visão geral do Unreal Engine 5

      21:34

    • 5.

      2.01 Introdução ao jogo

      3:56

    • 6.

      2.02 Criando um novo nível

      2:02

    • 7.

      2.03 Como importar os atributos do ambiente

      3:30

    • 8.

      2.04 Criando um conjunto de azulejos

      4:01

    • 9.

      2.05 Criando um mapa de azulejos

      5:08

    • 10.

      2.06 Como criar um mapa de azulejos temporário

      6:07

    • 11.

      2.07 Como colocar o mapa de azulejos na fase

      1:36

    • 12.

      2.08 Volume de processo de pós-publicação

      11:13

    • 13.

      2.09 Ajustar as configurações do projeto

      4:32

    • 14.

      3.01 Modo de jogo e controlador de jogador

      8:11

    • 15.

      3.02 Como adicionar a câmera do jogador

      8:24

    • 16.

      3.03 Como extrair os sprites inimigos

      7:35

    • 17.

      3.04 Criando flipbooks

      6:30

    • 18.

      3.05 Class de Blueprint de pai contra filho

      7:05

    • 19.

      3.06 Finalizando a configuração de curso do inimigo

      9:09

    • 20.

      3.07 Como aplicar a câmera do jogador como padrão

      3:04

    • 21.

      4.01 Criando o ponto de spawn do inimigo

      2:52

    • 22.

      4.02 Spawn ator de curso

      9:21

    • 23.

      4.03 Comunicação de blueprint - fundição

      3:25

    • 24.

      4.04 Comunicação de blueprint - interfaces

      9:47

    • 25.

      4.05 Como obter os valores de ponto de spawn

      8:49

    • 26.

      4.06 Introdução às estruturas

      2:59

    • 27.

      4.07 Informações de nível e informações sobre inimigos

      5:28

    • 28.

      4.08 Criando o tipo de inimigo Enum

      3:21

    • 29.

      4.09 Introdução às tabelas de dados

      2:46

    • 30.

      4.10 Tabelas de dados de informações de nível e informações sobre inimigos

      10:43

    • 31.

      4.11 Introdução às bibliotecas

      3:02

    • 32.

      4.12 Criando as funções da biblioteca

      7:38

    • 33.

      4.13 Como adicionar os nomes dos inimigos

      3:16

    • 34.

      4.14 Como gerar o inimigo

      4:35

    • 35.

      5.01 Como criar a interface do nome do inimigo

      7:05

    • 36.

      5.02 Como adicionar uma fonte personalizada

      5:04

    • 37.

      5.03 Como adicionar a interface do usuário do nome do inimigo

      2:21

    • 38.

      5.04 Programando a IU de informações do inimigo

      9:43

    • 39.

      5.05 Como aplicar dano ao inimigo

      7:39

    • 40.

      5.06 Como avaliar a saúde

      3:45

    • 41.

      5.07 Como criar a barra de saúde

      5:46

    • 42.

      5.08 Como adicionar a barra de saúde

      1:41

    • 43.

      5.09 Como atualizar a barra de saúde

      8:11

    • 44.

      5.10 Flipbook de sucesso do inimigo

      4:17

    • 45.

      5.11 Morte do inimigo

      4:56

    • 46.

      5.12 Incrementando o nível

      4:38

    • 47.

      5.13 Como corrigir as animações de morte do inimigo

      7:43

    • 48.

      5.14 VFX de sucesso com cliques

      8:46

    • 49.

      5.15 Como criar a interface de usuário de texto flutuante

      2:46

    • 50.

      5.16 Animação de texto flutuante

      3:48

    • 51.

      5.17 Como gerar o texto flutuante

      6:35

    • 52.

      5.18 Como atualizar a exibição de texto flutuante

      6:08

    • 53.

      5.19 Como reproduzir a animação de texto flutuante

      4:56

    • 54.

      6.01 Como criar a interface do usuário do temporizador

      4:37

    • 55.

      6.02 Exibindo a interface do usuário principal

      8:27

    • 56.

      6.03 Como definir o temporizador redondo

      8:01

    • 57.

      6.04 Como atualizar o temporizador da interface do usuário principal

      3:43

    • 58.

      6.05 Restaurar a saúde no final do temporizador

      6:16

    • 59.

      6.06 Redefinir o temporizador por causa da morte do inimigo

      2:16

    • 60.

      7.01 Como criar a interface de usuário da moeda

      7:27

    • 61.

      7.02 Animação de interface de moeda

      1:24

    • 62.

      7,03 quantidade de moeda variável

      4:10

    • 63.

      7.04 Adicionar moedas a inimigos

      1:57

    • 64.

      7.05 Atualizar a exibição de moedas

      4:32

    • 65.

      8.01 Adicionando a caixa de rolagem da loja

      2:05

    • 66.

      8.02 Como criar o cartão de item de loja

      18:35

    • 67.

      8.03 Informação do item Tabela de estrutura e dados

      13:13

    • 68.

      8.04 Criando os cartões de item de loja

      5:32

    • 69.

      8.05 Exibindo os cartões de item de loja

      4:31

    • 70.

      8.06 Como dar a cada item a informação correta

      2:32

    • 71.

      8.07 Exibindo a informação do cartão de item correta

      6:04

    • 72.

      8.08 Como alterar a cor do texto de compra

      8:21

    • 73.

      8.09 Como verificar se o jogador tem moedas suficientes

      4:43

    • 74.

      8.10 Como comprar o item

      3:58

    • 75.

      8.11 Como atualizar a quantidade de itens comprados

      8:15

    • 76.

      8.12 Criando pontos de spawn de item

      3:03

    • 77.

      8.13 Como gerar o item comprado

      6:06

    • 78.

      8.14 Lógica de spawning

      12:31

    • 79.

      8.15 Lógica de spawning - intermediário

      9:07

    • 80.

      8.16 Lógica de spawning - Avançado

      17:35

    • 81.

      8.17 Estrutura de preço de item e tabela de dados

      7:37

    • 82.

      8.18 Obter a função de cost do item

      6:57

    • 83.

      8.19 Aumento do preço do item

      6:25

    • 84.

      8.20 Como criar o widget de dica de ferramenta de item

      6:16

    • 85.

      8.21 Como atualizar as informações da dica de ferramenta

      6:25

    • 86.

      8.22 Como exibir o widget de dica de ferramenta

      8:21

    • 87.

      9.01 Aplicando automaticamente o dano

      8:19

    • 88.

      9.02 Como determinar o DPS total

      5:06

    • 89.

      9.03 Aplicando a quantidade correta de dano

      4:55

    • 90.

      9.04 Como corrigir o efeito de acerto

      5:55

    • 91.

      10.01 Como criar a exibição de nível

      3:25

    • 92.

      10.02 Como criar a carta de nível

      3:19

    • 93.

      10.03 Como definir o nível

      1:36

    • 94.

      10.04 Como desbloquear o novo nível

      4:28

    • 95.

      10.05 Como definir o nível atual

      3:51

    • 96.

      10.06 Como impedir o spawn automático de inimigo

      7:31

    • 97.

      10.07 Como adicionar ícones de caveira aos chefes

      8:07

    • 98.

      10.08 Como adicionar ícones a cartões de compra

      5:11

    • 99.

      11.01 Como adicionar o coelho de mouse à loja

      7:27

    • 100.

      11.02 Como adicionar o ponto de spawn do mouse

      2:56

    • 101.

      11.03 Como exibir o texto de dano corretamente

      5:50

    • 102.

      11.04 Como atualizar o dano do medidor do mouse

      4:42

    • 103.

      11.05 Como criar o widget de mouse

      7:27

    • 104.

      11.06 Como adicionar a entrada de clique no mouse

      7:09

    • 105.

      12.01 Como criar o mapa final

      6:02

    • 106.

      12.02 Preparando as sugestões de som

      7:25

    • 107.

      12.03 Como adicionar SFX à interface do usuário

      7:31

    • 108.

      12.04 Como adicionar SFX ao inimigo

      5:01

    • 109.

      12.05 Como adicionar música

      0:49

    • 110.

      13.01 Como criar a interface de usuário da ascensão

      4:10

    • 111.

      13.02 Como criar o pop-up da Ascensão

      2:42

    • 112.

      13.03 Abrindo o pop-up da Ascensão

      4:07

    • 113.

      13.04 Como definir o evento de reinício do jogo

      7:47

    • 114.

      13.05 Como exibir a ascensão no final do jogo

      14:26

    • 115.

      13.06 Criando a estrutura de ascensão

      4:19

    • 116.

      13.07 Como adicionar o multiplicador de ascensão

      10:00

    • 117.

      13.08 Como exibir o multiplicador de ascensão

      6:46

    • 118.

      14.01 Como limpar o projeto

      7:25

    • 119.

      14.02 Empacotando o jogo

      13:12

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

90

Estudantes

--

Projetos

Sobre este curso

Como fazer um jogo de clicker: comece sua jornada 2D.

Este curso do Unreal Engine vai ensinar você a fazer um jogo de Clicker no Unreal Engine 5 (UE5) do zero, semelhante aos jogos icônicos Clicker Heroes e Cookie Clicker. Você vai aprender o básico do desenvolvimento de jogos 2D no UE5, bem como tópicos mais avançados, como mecânica de jogo e design de UI.

Você não precisa de nenhuma experiência anterior em desenvolvimento de jogos para fazer este curso; vamos passar por isso passo a passo. Se você é um iniciante ou um desenvolvedor experiente do Unreal Engine, este curso tem algo para todos que querem aprender a fazer um jogo clicker no UE5.

O principal objetivo deste curso é deixar você confiante em fazer jogos Unreal 2D. Isso permitirá que você ganhe dinheiro e trabalhe como desenvolvedor de jogos independente em casa. Na verdade, sou desenvolvedor de jogos UE5 em tempo integral há alguns anos, criando jogos, criando designs de campos e vendendo ativos de jogos por meio do mercado Unreal Engine.

Comece sua jornada de desenvolvimento de jogos 2D hoje aprendendo a fazer um jogo Clicker!

Criar jogos sem programar.

O blueprint do Unreal Engine é a poderosa linguagem de script do Unreal Engine usada no UE5. Ele permite que você crie seu jogo do início ao fim sem escrever uma única linha de código. Isso significa que você pode facilmente criar seu jogo mesmo se for um iniciante, artista ou designer sem experiência em programação.

Este curso não requer nenhuma programação ou experiência no Unreal Engine. Vamos percorrer os fundamentos do blueprint do Unreal Engine e avançar lentamente para o desenvolvimento de mecânica de jogo mais complexa. Você vai aprender a desenvolver jogos do início ao fim.

Você pode entrar neste curso como iniciante, pois vai aprender passo a passo como fazer um jogo de clicker do zero.

O Unreal Engine pode fazer jogos 2D?

UE5 é altamente conhecida por seus impressionantes gráficos 3D. No entanto, pode surpreender alguns que a criação de jogos 2D no Unreal Engine também seja possível. Como pessoa que fez vários jogos em 2D usando o Unreal Engine, eu gosto muito dele e recomendo vivamente.

Aqui estão os benefícios de fazer jogos 2D no Unreal Engine 5:

  1. Você pode usar a planta do Unreal Engine para codificar jogos 2D, que também é usada para jogos 3D. Isso significa que você não vai precisar aprender uma nova língua se mudar de desenvolvimento de jogos 3D para 2D.
  2. Você pode dar ao seu jogo 2D uma aparência 3D única integrando iluminação 3D e raios de deus.
  3. Você pode fazer um jogo 2D em um ambiente 3D.
  4. Fazer um nível 2D e adicionar ativos e personagens é simples e pode ser feito em minutos.
  5. Você não precisa aprender nada novo ao alternar entre jogos 2D e 3D porque usa as mesmas ferramentas de motor.

Enquanto aprende a fazer um jogo de clicker, você vai ver como é divertido e fácil fazer jogos 2D do Unreal. Suponha que você esteja mais interessado no multiplayer do Unreal Engine 5. Nesse caso, você pode ver meu curso multiplayer sobre como fazer um jogo de plataforma.

Aprenda todos os aspectos do 2D no UE5, não apenas os jogos com clicker.

Este curso ensina você a usar o Unreal Engine para jogos 2D em geral, embora o foco principal seja criar um jogo de cliques. Ao longo do curso, você vai aprender a trabalhar com vários ativos em 2D, como sprites, flipbooks (efeitos animados em 2D), personagens e ambientes 2D, muitas outras coisas.

Ao trabalhar com UE5, é mais crucial se concentrar nas ferramentas usadas durante o desenvolvimento de jogos do que se concentrar especificamente em como fazer um jogo com clicker. Ao dominar as ferramentas ensinadas neste curso, você pode criar qualquer jogo 2D usando o UE5.

Aprenda tudo o que você precisa saber sobre jogos 2D e clicker.

Enquanto aprende a fazer um jogo com clicker, o curso aborda de forma abrangente vários aspectos de fazer jogos 2D no Unreal Engine 5. Neste curso, você vai aprender:

  • Como fazer um videogame do zero usando as funcionalidades do Unreal 2D.
  • Como criar conjuntos de mosaico e mapas de mosaico para criar seu nível 2D.
  • Como criar sprites e flipbooks para assets 2D estáticos e animados.
  • Aprender a gerar, danificar e matar inimigos usando o Mouse
  • Você vai criar uma mecânica de clique automático para causar dano automaticamente
  • Você vai aprender a criar um texto de combate flutuante ao causar dano
  • Aprender a criar uma loja de itens com itens geráveis.
  • Aprender a adicionar rejogabilidade (ascensão) ao jogo
  • Você vai aprender a adicionar vários níveis ao jogo que você pode alternar entre.

Você também vai aprender outros aspectos do desenvolvimento de jogos 2D, como adicionar interfaces de usuário 2D, efeitos visuais e efeitos sonoros. Ao completar este curso, você pode criar seu próprio jogo com confiança.

Faça este curso e obtenha a certificação.

Completar o curso sobre como fazer um jogo clicker lhe dá uma certificação Unreal Engine. Você pode usá-lo para fortalecer seu portfólio como desenvolvedor de jogos independente ou usá-lo ao se candidatar a empregos de desenvolvimento de jogos. A certificação do Unreal Engine pode ser baixada e salva localmente e é válida indefinidamente.

O que me torna qualificada para ensinar você?

Sou um desenvolvedor de jogos experiente, com nove anos de experiência. Para resumir meu trabalho sem te aborrecer:

  • Eu lancei um jogo no Steam que dirigi do início ao fim com uma equipe de 8 pessoas.
  • Criei 11 aulas de desenvolvimento de jogos com 40.000 + estudantes e uma classificação média de 4.8+ de 5 estrelas.
  • Estou atualmente desenvolvendo sozinho o Farmtale 2 do início ao fim.
  • Eu também trabalho como freelancer em vários projetos de jogos, especializada em programação, iluminação, otimização de jogos e muito mais.

Sou profundamente pessimista sobre o desenvolvimento de jogos e fiz dele meu trabalho em tempo integral. Eu adoraria ensinar tudo sobre o Unreal Engine 5 com boas práticas de desenvolvimento de jogos e mantê-lo atualizado com as informações mais recentes.

Se você quer aprender a publicar um jogo no Steam, confira o campo que eu lancei sobre o tema.

Junte-se à nossa comunidade de apoio.

O desenvolvimento de jogos no Unreal Engine pode ser uma experiência frustrante às vezes. Por exemplo, você pode precisar olhar para uma caixa não marcada em algum lugar, deixando você se sentindo perdido por horas. Como alternativa, você pode precisar de apoio moral e ideias de outros desenvolvedores de jogos como você. É por isso que oferecemos suporte ao vivo 24/7 por escrito na seção de perguntas e respostas de qualquer um dos courses. Estamos sempre aqui para ajudá-lo sempre que você precisar.

Vamos começar com "Como fazer um jogo de clicker" sem qualquer atraso. Estou ansiosa para ver você na primeira aula. Então, vamos começar e torcer por uma jornada de aprendizagem emocionante!

Conheça seu professor

Teacher Profile Image

Pixel Helmet

Game Developer & Publisher

Professor

Pixel Helmet is a video game developer and publisher based in Denmark. We have recently released our first game Farmtale on the Steam platform.

We decided to get on Skillshare to create high-quality courses and share our knowledge with the game development community. Learning can be tedious at times and we aim to create a fun learning experience.

We offer to create courses within Modeling, Texturing, Unreal Engine, Blueprints, C++, Game Design, and much more. If you need any help during a course, please let us know through Skillshare or connect with us on Discord, Twitter, or LinkedIn.

Visualizar o perfil completo

Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. 1.01 Introdução: Neste curso, aprenderemos como chegar ao Idle Clicker usando plantas no Honorable Engine five, recriando um jogo semelhante aos heróis do Clicker e ao Cookie Clicker A. Este curso contém tudo o que você precisa saber para começar a desenvolver dois jogos D idle clicker Este curso contém tudo você precisa saber para começar desenvolver dois jogos D idle clicker no Honorable jogo Idle Clicker usando plantas no Honorable Engine five, recriando um jogo semelhante aos heróis do Clicker e ao Cookie Clicker A. Este curso contém tudo o que você precisa saber para começar a desenvolver dois jogos D idle clicker no Honorable Engine five, incluindo como criar conjuntos de peças e mapas de peças. Como adicionar dois ativos D estáticos e animados. Como gerar danos e matar inimigos usando o cursor do mouse Como criar uma loja de itens com itens que podem ser gerados. Como criar uma mecânica de clique automático para causar dano automaticamente ao comprar itens na loja de itens Como adicionar vários níveis ao jogo, entre os quais você pode alternar. Como exibir texto de combate flutuante, como criar dois DUI e uma interface de geração de mundos. Dicas de como criar ferramentas de interface de usuário. E, finalmente, como adicionar a mecânica de ascensão para rejogabilidade e causar mais danos à medida que você sobe Também fornecerei o projeto finalizado para que você possa inspecioná-lo como desejar enquanto segue o curso No final deste curso, você poderá criar com confiança seu próprio jogo de dois cliques em D do zero usando o Real Espero que você se junte a mim neste curso hoje. E lembre-se de que estou sempre aqui para apoiá-lo durante todo o curso e espero vê-lo em breve. 2. 1.02 Baixando o Unreal Engine 5: Para instalar o Unreal Engine five, primeiro você precisa acessar epic games.com Então vá até lá e você encontrará um botão azul de download no canto superior direito. Vá em frente e pressione o botão de download. E aqui você obterá o instalador do lançador da Epic Games Então vá em frente e execute o instalador. E depois de instalar o slauncher da Epic Games, vá em frente e faça o login Então, vou digitar meu e-mail e minha senha e fazer login no lançador Depois de fazer login no inicializador, é assim que ele ficará Então vá em frente e pressione a guia Unreal Engine. E dentro dessa guia, você provavelmente estará na nova seção. Vá em frente e clique em Biblioteca. E dentro da biblioteca, você pode ver todas as versões reais do motor que você tem atualmente. Mas se você é novo aqui, provavelmente não tem nada aqui e pode ver uma caixa cinza onde você pode baixar o motor real. E se você não vê, você sempre pode clicar no sinal positivo aqui em cima, e ele exibirá essa caixa cinza e você poderá clicar no número para selecionar qual versão do motor Unreal deseja instalar Agora, vou usar o mais recente Unreal Engine 5.3. Mas se você estiver assistindo a este curso no futuro, se tiver 5,4 ou 5,35 ou qualquer outra coisa, ainda poderá seguir este Não há uma grande mudança. Então, vamos seguir em frente e entrar no Unreal Engine 5.3. Vou prosseguir e atualizar, e vou lançar o motor. 3. 1.03 Criando um novo projeto: Quando você inicia o Unreal Engine, essa janela é exibida para que você possa ver seus projetos recentes e também ver algumas outras guias Esta guia ficará vazia se você não tiver nenhum projeto anteriormente, mas você pode abri-los aqui se estiver trabalhando em um projeto. No momento, queremos criar um jogo. Então, vou até a guia Jogos. Mas, como você pode ver no Unreal Engine, não se trata apenas de jogos Você também pode, por exemplo, arquitetura automotiva e assim por diante. Vamos até a guia Jogos por enquanto. E dentro da guia do jogo, você vê muitos modelos com os quais você pode começar. Por exemplo, se quiser criar um jogo de tiro em primeira pessoa, você pode escolher o modelo em primeira pessoa Se você quiser criar um jogo de cima para baixo como Diablo, por exemplo, você pode começar com este modelo No entanto, gostaria de começar com um projeto em branco. Como você sabe, se você já fez meus cursos anteriores, porque eu quero te ensinar tudo do zero. Agora, todos esses modelos podem ser criados a partir de um projeto em branco. E eles não são difíceis de criar se você sabe o que está fazendo. Gostamos de começar com um projeto em branco e construir tudo sozinhos Eu realmente não gosto de começar com o modelo. com um projeto em branco, ensinar tudo aqui à direita, selecione o Blueprint como a linguagem de programação para a plataforma de destino. É desktop. Por enquanto, sempre podemos nos concentrar no celular em outro momento. Mas esse curso é sobre desktop. Provavelmente farei um curso sobre celular no futuro. Mas mesmo se você selecionar desktop, você ainda pode fazer isso para celular; mais tarde, você pode fazer isso para PC e celular. Vamos selecionar a predefinição de qualidade como máxima para o conteúdo dos dados Se você tiver isso marcado, vá em frente e marque para que não tenhamos nada Novamente, eu gostaria de começar com um projeto em branco sem nada aqui embaixo. Você pode selecionar onde deseja salvar o projeto e, em seguida, dar o nome ao projeto. Agora vou chamar isso de Gin Clicker. E você sempre pode chamá-lo que quiser, isso realmente não importa. E vá em frente e clique em Criar. Depois de iniciar o motor cinco real, é assim que ficará. Agora estou gravando em resolução de quatro K e tenho um monitor de quatro K. A interface do usuário pode parecer um pouco pequena para você quando estou gravando este vídeo para todo o curso. Na verdade, vou aprimorar minha interface para que você possa ver o que estou fazendo Se você quiser saber como eu posso fazer isso também, você pode clicar em Ferramentas e ir para Depurar Vá para o Widget Reflector aqui. Vou apenas aumentar a escala da minha interface de usuário. Talvez não 21,3, talvez este seja um. Acho que vou mantê-lo em 1.3 e sempre posso alterá-lo nas aulas posteriores se achar que é muito grande ou muito pequeno. Na verdade, vamos mantê-lo em 1,25 e eu vou fechá-lo. Ok, então, na próxima lição, daremos uma visão geral rápida do Unreal Engine Five, para que possamos ter certeza disso antes de criarmos nosso jogo Agora, se você já fez meus cursos anteriores e já conhece o Unreal Engine five, pode pular a próxima lição Mas vamos para a próxima lição e começar. 4. 1.04 Visão geral do Unreal Engine 5: Tudo bem, então antes de começarmos nosso jogo, vamos dar uma rápida visão geral do Unreal Engine Five Agora, se você já usou o motor antes e fez meus cursos anteriores, vá em frente e pule esta lição para a próxima Agora, aqui no meio do motor está a janela de visualização. Dentro da janela de exibição está o mundo. Este é o seu jogo que você pode ver visualmente. Como você pode ver aqui, temos paisagens e assim por diante. Mas se você clicar com o botão direito do mouse na janela de exibição, verá que pode controlar sua visualização pressionando o botão direito do mouse Agora, se você segurar o botão direito do mouse e clicar em também, verá que pode se mover segurando o botão direito do mouse e clicando em W, você pode se mover. Agora você pode ver que estou me movendo muito lentamente porque este é um mundo grande. Se você quiser se mover mais rápido, basta clicar aqui na velocidade da câmera, vou aumentar a velocidade para algo como 16. Em vez disso, se eu segurar o botão direito do mouse e clicar em W. Agora você pode ver que eu posso me mover muito mais rápido no meu mundo, como você pode ver aqui. Ok, você também pode clicar em D para mover para a direita, clicar em A para mover para a esquerda e clicar em para voltar. Mas lembre-se de que você precisa segurar o botão direito do mouse e clicar em W, D e A. Na verdade, é assim que eu navego , geralmente no motor honual, basta segurar o botão direito do mouse e sei viajar pelo mundo e ver o que estou fazendo desenvolvendo o jogo E, claro, se você quiser aumentar e diminuir o zoom, você pode ampliar com a roda do mouse, assim. E você também pode diminuir o zoom com a roda do mouse. E você pode simplesmente voar pelo mundo, tentar ficar confiante com o movimento. Agora, se você está acostumado a jogar jogos de tiro em primeira pessoa e assim por diante, isso é natural para Se você ainda não jogou isso, tente correr e ver se consegue entender Tudo bem, então temos alguns botões aqui na janela de exibição, podemos clicar neste E aqui você pode, por exemplo, mostrar seus quadros de FPS por segundo E quando você clica nele, você pode ver que ele aparece aqui à direita. Agora, isso realmente não importa, por enquanto, você pode alterar o campo de visão e assim por diante. Mas o bom do Unreal Engine é que você não precisa saber o que cada botão faz Não sei, talvez metade dos botões, porque eu não faço cinema. Normalmente, eu não faço filmes cinematográficos. Por exemplo, automotivo, eu não desenho carros. existem alguns botões que você Na verdade, existem alguns botões que você não precisa quando está desenvolvendo seu jogo. Tente não se lembrar de tudo, mas tente apenas lembrar o que é realmente necessário no momento. O que é realmente necessário agora é a visão do jogo. Com a visão do jogo, você esconde os ícones dentro do nível. Por exemplo, se eu clicar em con G, essa é a visualização do jogo. Veja, eu escondo essa seleção laranja. Agora, se eu clicar novamente no meu teclado, eu desativo a visualização do jogo. Como você pode ver aqui, o atalho é quando eu clico na visualização do jogo, você remove todos os ícones Agora, se eu adicionar uma luz, por exemplo, uma luz pontual, e aqui eu tenho o ícone de uma luz pontual. Agora você realmente não precisa adicionar uma luz pontual no momento. Estou apenas mostrando que, se você clicar em agora, ele oculta o ícone da luz pontual. E eu não consigo ver isso. Se eu clicar novamente, ele mostra o ícone da luz pontual. A linha de pontos está um pouco pequena no momento. Se eu clicar aqui, você pode ver que na verdade está aqui embaixo. É um mundo grande. Geralmente desaparece, mas aqui está E se eu clicar em G e G novamente, parece que a visualização do jogo é muito, muito boa para visualizar seu jogo sem nenhum desses ícones Se eu construo um mundo, e você pode imaginar que tem muitos ícones, se você tem muita iluminação, você tem muitos objetos dentro do seu nível. Você pode clicar em G para remover todos esses ícones e ver seu mundo sem nenhum desses ícones. Agora, o próximo passo é o modo imersivo. Se você clicar em 11, maximizará a janela de visualização e poderá visualizar seu mundo com a máxima Isso é muito, muito bom se você quiser ver a aparência do seu jogo. Agora, novamente, você pode clicar em G para mostrar ícones, G para ocultar ícones. Clique em 11 para minimizá-lo. Novamente, dois botões importantes, o modo imersivo e a visualização do jogo Agora, aqui temos a visão em perspectiva e também temos outras visões, as visões ortográficas Agora, o mais importante é a visão correta. Isso é o que vamos usar porque vamos trabalhar com dois D. Na verdade, não vamos entrar em um mundo de três D. Não precisamos muito da perspectiva. Mas, por enquanto, vamos para a visão correta, e isso é chamado de visão ortográfica Se você diminuir o zoom com a roda do mouse, poderá ver que esse é realmente o mundo, o mundo aberto na visão certa. Olhando para uma vista em dois D, você pode vê-la de cima. O que parece, obviamente, não consigo ver muita coisa porque você não consegue ver as colinas do topo. Se você vê de baixo, é assim que parece, não consigo ver muita coisa. Se você olhar da esquerda, isso é o que parece. E assim por diante. Você pode ver as diferentes visões do mundo. Obviamente, essa é a visão em perspectiva novamente. Aqui temos diferentes modos de iluminação. Nós realmente não precisamos deles porque não vamos trabalhar em três D. Realmente não se concentre nisso agora no programa. Você pode mostrar e ocultar coisas diferentes. Nós o usaremos mais tarde. Por exemplo, você pode mostrar a colisão, esconder a névoa e assim por diante Não é realmente necessário agora, não vamos entrar nisso agora. Essas ferramentas são muito importantes. Aqui temos a ferramenta de seleção e isso basicamente seleciona itens em seu mundo Agora, para usá-los, vamos realmente adicionar algo ao mundo. Vamos até isso, toque rapidamente no botão Adicionar ao projeto. Muito importante aqui. Você pode adicionar, por exemplo, uma forma básica. Vamos adicionar um cubo. Aqui está o cubo que adicionamos. Vou diminuir a velocidade da câmera. Estamos nos movendo muito rapidamente no mundo, colocando-o de volta em um. Se você clicar neste, verá que esta é a ferramenta Selecionar. E lembre-se de que você tem atalhos para essas ferramentas, você pode. Esta é, a próxima é a ferramenta de movimentação, você clica nela, você pode ver esses pontos de pivô aparecerem. Agora, se você clicar no vermelho, poderá se mover para esse eixo. Você clica no azul, você pode se mover para cima e para baixo. Se você clicar no eixo verde, poderá se mover dessa maneira. Agora, as cores delas são na verdade X, Y e Z. E você pode ver isso aqui no painel de detalhes Você pode ver a localização dele, o X. Se você segurar o mouse sobre ele, também poderá ver o valor na verdade antes que ele normalmente informe que esse é o eixo X. Mas eu posso ver agora que não está mais fazendo isso. Mas, basicamente, o vermelho é o eixo x, o verde é o eixo y, azul é o eixo z, o eixo x, o eixo y e o eixo z. Está bem? Você pode movê-lo assim. Você também pode segurá-lo aqui no quadrado no meio. Você pode movê-lo em duas direções ao mesmo tempo. Ou você pode segurá-la sobre essa pequena esfera branca no meio e movê-la nas três direções ao mesmo tempo. Você também pode aqui no painel de detalhes, talvez tenha notado que esses são os detalhes ou o que você selecionou aqui. Se eu selecionar isso aqui, aqueles planos terrestres deste mundo aberto, ou se eu selecionar meu cubo, veja detalhes diferentes sobre o item que você selecionou em seu mundo Por exemplo, posso ver a localização do meu item, posso ver a rotação dele. Eu posso ver a malha estática que é basicamente o modelo de três D. Eu posso ver o material fornecido. Eu também posso ver coisas sobre a física. E eu posso ver, por exemplo, física simulada não é aplicada Eu posso ver a gravidade aplicada, eu posso ver as opções de colisão, opções iluminação e assim por diante e assim por diante E você pode ver que tem muitas coisas que você pode ver. Não se preocupe com isso por enquanto. Vamos trabalhar muito no painel de detalhes. Vai ficar cada vez mais fácil para você. Muitas dessas coisas não vamos usar porque estamos , novamente, trabalhando em dois D, então não se preocupe com isso, mas basicamente aqui para o local, você pode movê-lo assim e também pode fazer isso em tod, ou pode movê-lo assim clicando aqui e arrastando com o mouse, clicando e arrastando com o mouse nos números E você pode movê-lo assim. Ou, se você tiver locais específicos, poderá digitá-los. Se você clicar aqui , eu posso escrever 1.450, por exemplo E eu posso clicar em Inter. Você pode ver meu cubo se mover para o local preciso. Você pode fazer isso assim. Você pode movê-lo manualmente, mova-o aqui. Ou você pode digitar o número novamente. Agora, a rotação, que é a próxima, se você clicar em, no teclado. Então, o primeiro foi, o próximo foi para a ferramenta de movimentação. A ferramenta de rotação é E no teclado com a ferramenta de rotação, autoexplicativa, você pode girar o item em eixos diferentes. Novamente, em dois D, temos apenas dois Não se preocupe com o terceiro, mas ainda é o mesmo processo. Então, vou ensinar isso a você dessa maneira. Novamente, para a rotação. Você também pode alterá-lo aqui. Se você quiser redefinir a rotação, talvez não esteja satisfeito com isso. Você pode clicar nessa pequena seta e ela redefinirá tudo para o padrão. Então essa é a ferramenta de rotação. A última coisa é a ferramenta de escala. Se você clicar em R no teclado, clique em Q para a ferramenta de seleção, para a ferramenta de movimentação, para a ferramenta de rotação e R para a ferramenta de escala. Agora, novamente, para a ferramenta de escala, você pode escalá-la em direções diferentes. Ou se eu clicar no controle Z para voltar, você também pode escalá-lo uniformemente nas três direções Se você clicar aqui no meio, assim novamente, se não estiver satisfeito, sempre poderá clicar nessa seta. Você também pode escalá-lo novamente se clicar com o mouse e arrastar. Ou se você quiser escalá-lo uniformemente, você pode clicar nesse cadeado Sempre que você escalar, um deles, todos eles também serão escalados. Essa é a coisa boa da fechadura. Se você quiser escalar apenas um deles, você pode abrir a fechadura e escalar em um lado de cada vez, ok? Muito importante. Lembre-se desses. usá-los durante todo o curso, nos próximos cursos e, provavelmente, em todos os cursos que fizermos. Basta lembrar o Q para a ferramenta de movimentação, para a ferramenta de rotação e R para a ferramenta de escala. Também temos algumas opções de captura de fotos aqui. Como você pode ver, quando eu movo alguma coisa, ela se encaixa em uma grade Não está se movendo suavemente por causa disso. Você pode clicar aqui e aumentar o número. Isso vai estourar ainda mais do que antes. Isso é bom se você está tentando construir algo com uma estrutura. Agora você pode copiar e colar isso. Se você segurar a tecla Alt no teclado e clicar e arrastar, esse item será copiado. Vou tentar copiá-lo novamente. Segure, clique e arraste. Você está segurando Alt e pode ver que eu copiei novamente. Agora, o encaixe é muito, muito bom se você está tentando construir algo assim com uma estrutura Agora, se você não quiser tirar fotos, você sempre pode clicar nesse botão e isso o desativará Você pode, você pode movê-lo suavemente. Você pode fazer a mesma coisa com o dimensionamento, a rotação e o dimensionamento Você pode aumentar a rotação, encaixe e também a escala pode desativar o ajuste de escala ou aumentar o encaixe ou aumentar o Vou colocá-lo novamente e voltar para dez, que é o padrão de antes. Você pode diminuir e aumentar a velocidade da câmera. Agora, o bom disso é se você estiver focando em objetos pequenos, talvez queira que a velocidade da câmera seja menor, para você possa se mover mais devagar e se concentrar no que está fazendo Se você estiver se movendo em um mundo muito grande, você pode ver que eu posso me mover muito mais rápido aumentando a velocidade da minha câmera. É assim que costumamos usá-lo. Acabei de voltar para um aqui. Ok. A última coisa muito importante aqui também são as configurações. Você pode acessar a escalabilidade do motor. E agora você pode ver que estou operando o motor com uma qualidade épica. Você também pode configurá-lo em baixa qualidade. Por exemplo, se você está atrasado, se você tem um computador de baixo custo, você pode ver que agora meu motor não está realmente usando muita memória Se você tem um bom computador, por exemplo, você sempre pode aumentar a escalabilidade Normalmente, faço filmes quando faço algo como arquitetura ou se faço uma cena em um jogo É muito bom rodar filmes e vai demorar. Então, agora eu não vou fazer isso porque também estou gravando o curso. Estou apenas administrando isso na Epic por enquanto. Tudo bem Então, vamos dar uma olhada aqui em cima, você tem os botões básicos do arquivo. Como você sabe de todos os softwares, você pode salvar o jogo ou salvar o nível. Você também pode criar um novo nível, o que faremos mais tarde. Você pode exportar tudo e assim por diante. Você também tem as preferências do editor e dentro das referências do editor, pode editar coisas sobre esse editor. Por exemplo, essa seleção é laranja. Talvez eu queira que seja algo como vermelho em vez disso. Eu posso fazer isso O, você pode editar coisas sobre isso. Agora vou clicar no controle Z porque estou satisfeito com a cor. Mas, basicamente, você pode mudar coisas sobre esse editor nas configurações do projeto, você pode editar coisas sobre esse projeto. Por exemplo, você pode dar um nome ao projeto , o nome da sua empresa. Mais tarde, talvez você lance o jogo. As pessoas podem ver seu e-mail de contato de suporte e podem entrar em contato com você se houver bugs. Você também pode adicionar filmes. Por exemplo, quando você abre um jogo, há um pequeno filme sobre o logotipo por 5 segundos e, em seguida, o jogo começa. Você pode adicionar filmes aqui, iniciar filmes, empacotar o jogo em diferentes consoles. Você tem muitas coisas que você pode fazer dentro daqui. Agora vamos entrar aqui porque você tem algumas coisas com as quais você pode trabalhar aqui e nós também faremos isso. Assim, podemos ver que você tem muito que fazer nas configurações do projeto. Novamente, como eu disse antes, não se concentre em todos eles. Você vai usar até 20% ou vai usar 20% deles, talvez 15% 10%. Realmente, não se concentre nisso, será muito confuso se você começar a fazer coisas que realmente não usará mais tarde Por enquanto, não vamos nos concentrar nas configurações do projeto, vamos apenas encerrá-lo. Vamos passar por isso sempre que precisarmos, mas basicamente você não precisará da maioria dessas coisas. Vamos nos concentrar em tudo isso. Vamos fazer este curso e eu vou te ensinar tudo o que você precisa saber. Aqui à direita, você pode ver o Outliner Se você clicar nos objetos do mundo, poderá ver que eles também estão no World Outliner O World Outliner basicamente mostra quais itens você tem dentro do Você tem os três cubos que acabamos de adicionar. Temos alguma iluminação que você pode ver aqui. Temos um céu e temos a luz, e assim por diante. Na verdade, eles estão aqui e você pode realmente vê-los aqui. Você pode clicar na luz direcional, por exemplo, essa é a luz do sol Se você clicar em, no teclado, isso o levará aonde você selecionou. Se eu clicar em, você será levado até aqui. Agora, se eu clicar em, porque escondi meus ícones, pressione G. Então você pode ver os ícones e aqui você pode realmente ver todas as luzes Eles estão escondendo isso aqui. Novamente, clique em se quiser ir até lá rapidamente. Então, por exemplo, eu posso clicar no cubo. Se eu posso realmente encontrar o cubo, não consigo encontrar o cubo O bom do delineador é que você pode encontrar o cubo aqui e clicar no Você pode realmente ver os cubos aqui. Você também pode selecionar itens aqui. Clique no teclado para levá-lo até lá, se quiser ir até lá rapidamente. Basicamente, o World Outliner está mostrando o que você tem dentro deste mundo, dentro do seu jogo agora Todas essas são apenas as partes da paisagem aqui. Como você pode ver, não há muita coisa no delineador Você pode criar pastas se quiser se manter organizado. Clicar no ícone dessa pasta criará uma nova pasta. Você pode simplesmente renomear a pasta aqui que criamos. Você pode renomeá-lo e adicionar coisas a ele. Se você clicar e arrastar o item até ele, poderá se manter organizado dessa forma. Você pode ocultar itens clicando aqui e clicar nele novamente para mostrá-los novamente. Sim, esse é basicamente o esboço sobre o qual já falamos, o painel de detalhes e, aqui, não há muito o que fazer O mais importante por enquanto é que você pode adicionar coisas ao mundo clicando aqui, por exemplo. Você pode adicionar luzes. Nós realmente não precisamos disso. Vamos trabalhar com dois D. Você pode adicionar formas novamente, não precisamos disso. Vamos trabalhar com dois D. Na verdade, não vamos nos concentrar muito nisso, mas basicamente podemos adicionar coisas como volumes. Vamos adicioná-lo mais tarde. Então, precisamos de algo dentro deste botão muito, muito importante. Você também pode jogar o jogo e ver como é o jogo. Agora, nós realmente não temos muita coisa no jogo, não está acontecendo muita coisa. Vou clicar em Escape no meu teclado e vamos sair daqui. Tudo bem, antes de terminarmos com isso, a última coisa dentro desse motor é a gaveta de conteúdo Se você clicar nela, essa janela será exibida. O que é a gaveta de conteúdo é basicamente onde você pode adicionar todos os arquivos do jogo Se você tiver as duas artes em D que criou em seu software, por exemplo, os personagens, o ambiente, conjuntos de blocos, todos esses arquivos estarão aqui. A música, os efeitos sonoros, o que você tiver. Se você está fazendo um jogo em três D, você tem os três modelos em D, texturas e assim por diante Então, todos os arquivos estarão dentro daqui. E você pode clicar e arrastar coisas para o mundo, e podemos usá-las dentro da gaveta de conteúdo Eu realmente não gosto de ter uma gaveta de conteúdo assim, porque se eu clicar em algo no meu mundo, ela a minimizará Novamente, acho que também será confuso para você. Enquanto você segue o curso, o que você pode fazer é clicar na gaveta de conteúdo E eu vou clicar em Duck in Layout. E isso fará com que a gaveta de conteúdo agora seja chamada de navegador de conteúdo Ele ficará aqui na janela de exibição ou na minha opinião, e eu posso redimensioná-lo se você quiser Você pode redimensionar todos os painéis, se quiser. É muito melhor, ao seguir este curso, poder ver isso o tempo todo. E eu geralmente também faço isso assim. Era assim no furo do motor quatro. Sim. Então, basicamente, você pode ver seus arquivos, criar novas pastas. Se você escrever, clique nessa pasta de conteúdo, por exemplo, você pode clicar em uma nova pasta. Você pode chamá-lo de, digamos ativos ou o que você quiser adicionar. Mais tarde, você pode até clicar com o botão direito nessa pasta e ir para Definir cor. Você pode dar uma cor a essa pasta se quiser. Assim, você pode se manter organizado. quer que você queira fazer, você sempre pode clicar com o botão direito do mouse novamente e limpar a cor se não quiser. Agora, todos os arquivos estarão aqui novamente. Você também pode clicar no botão Adicionar e adicionar uma nova pasta, se quiser. Você também pode ver que você pode adicionar outras coisas, como a classe Blueprint, essa é a programação que faremos Você pode adicionar um novo nível, você pode adicionar um material. Você pode adicionar muitas coisas sobre folhagem de animação se estiver fazendo grama, árvores e assim por diante. Você pode adicionar algo sobre o papel em T, que é a imagem com a qual trabalharemos Nós estaremos adicionando todos eles. Aprenderemos tudo aqui. Você pode adicionar física e assim por diante. Você também pode fazer isso, em vez de fazer isso daqui, que eu nunca uso, você pode clicar na pasta e escrever clicando aqui. E você pode adicionar as mesmas coisas que eu costumo escrever. Clique aqui e adicione coisas. Mas você também pode fazer isso aqui em cima, ok? Isso era tudo. Agora, se você quiser minimizar ou tornar esses ícones cada vez maiores, mantenha o controle do teclado e diminua o zoom. Isso aumentará ou diminuirá o tamanho do ícone. Você também pode manter o controle e ampliar para aumentar o tamanho dos ícones. Agora você também pode clicar em Configurações, Eu acertei em Tamanho. E isso é basicamente a mesma coisa que aconteceu o Nal Engine five e a visão geral. Espero que você esteja um pouco mais confiante no que está dentro daqui. Novamente, vamos fazer um curso inteiro aqui dentro, então você vai ficar confiante com ele por enquanto. Vamos passar para a próxima lição. 5. 2.01 Introdução ao jogo: Olá e bem-vindo. E muito obrigado por se juntar a mim neste curso aqui. Esta é apenas uma introdução ao jogo que estamos criando. Gostaria de mostrar o que estamos criando antes de começarmos, para que você tenha uma ideia do que estamos fazendo neste curso. Então, basicamente, estamos criando um jogo de dois cliques. E aqui está, dentro do Unreal Engine Five. E estamos usando apenas plantas para criar esse projeto, então não temos C plus Agora eu só quero te mostrar o que é o projeto. Se eu clicar em reproduzir aqui, você verá que a música já está tocando. Este é basicamente um jogo de clicker como Cookie Clicker ou Clicker Heroes, se Então eu posso falar livremente se eu clicar aqui. Então, aperte o volume 20 e clique em reproduzir novamente. Basicamente, é como Clicker Heroes, onde você tem um inimigo no meio Você tem itens da loja aqui ao lado, você tem moedas aqui em cima. Acabei de me dar muitas moedas para poder comprar tudo isso e mostrar o jogo para vocês. Eu também tenho alguns níveis aqui ao lado. E eu tenho um cronômetro em que preciso matar o inimigo antes. Porque se eu não matar o inimigo, o cronômetro será reiniciado e o inimigo se curará completamente Mais uma vez, tenho que matar esse inimigo antes que o tempo acabe Se eu matar o inimigo, você pode ver que um novo nível foi desbloqueado e eu posso ir para o próximo nível para gerar o próximo inimigo, e eu posso matar esse Agora, toda vez que eu mato um inimigo, ganho moedas e posso ir mais longe nos níveis, e os níveis continuam assim que eu tenho dinheiro, agora posso desbloquear itens que posso comprar aqui. Por exemplo, você pode ver que meu mouse está causando 15 de dano por clique. Também posso ver aqui, se eu segurar o mouse sobre ele, ele diz que está causando 15 de dano por clique. E eu posso clicar nele e comprar um. E agora eu faço 40 de dano por clique e posso clicar no inimigo. E agora eu posso ver que eu faço mais danos. Esses itens aqui embaixo são mecânicos de clique automático. Basicamente, se eu comprar este, ele diz que me causa cinco de dano por segundo. Cinco por um. Agora você pode ver que ele causa dano automaticamente ao inimigo e causa cinco de dano por segundo. Obviamente, isso não vai matar o inimigo, e o inimigo continua reiniciando a saúde Mas se eu comprar algo mais forte, você pode ver que ele pode chegar à morte aqui e ser desbloqueado. Agora eu tornei isso muito fácil por enquanto, porque eu só quero mostrar a vocês como é o jogo. Mas, obviamente, a saúde precisa ser muito maior e o custo também. Agora, nas plantas, se eu simplesmente remover minhas moedas, se eu for até o jogador, clico na quantidade de moedas e a coloco em zero E se eu clicar em Jogar, você pode ver aqui os itens que ainda não consigo comprar. Os botões foram desativados e o botão muda de cor assim que eu tenho dinheiro. Você pode ver agora que eu posso comprar este item. E assim que eu compro uma, agora tenho 15 moedas, posso comprar uma e gasto as moedas aqui ao lado. Você pode ver quantos eu comprei assim que compro. Tudo o que você pode ver, aliás, toda vez que compra um item, está aqui para o mundo Então, se você comprar um item, ele aparece aqui. E se eu comprar mais, você pode ver que continua surgindo aqui. Assim, todos os itens que você comprar também aparecerão no mundo Assim que eu comprar todos os itens e uma quantidade específica , aparecerá um botão de subida Quando clico nele, posso subir para o próximo estágio. Este é basicamente o jogo que estamos criando e também há mecânicas de ônibus aqui, então inimigos de ônibus aparecerão mais tarde nas etapas Este é basicamente o jogo clicker que estamos criando. Espero que você se junte a mim nas próximas aulas. Será muito divertido criar tudo isso com você, e prometo que será fácil e facilitarei as coisas para você também. Vamos continuar. 6. 2.02 Criando um novo nível: Tudo bem, vamos começar com o projeto. Vamos continuar e criar um novo mapa dentro das pastas no navegador de conteúdo. Eu vou escrever. Clique primeiro e crie uma nova pasta e chame-a de mapas. Basta se manter organizado com o projeto. Agora, dentro daqui, vou clicar agora. Você pode criar um nível com dois métodos. Você pode clicar com o botão direito aqui e criar um novo nível. Ou você pode ir até Arquivo e clicar em Novo nível. Agora, a diferença é que se você clicar aqui a partir daqui e clicar em Novo Nível aqui, você pode ver que você pode criar um nível de mundo aberto. Você pode criar um nível vazio de mundo aberto e assim por diante. Então você tem alguns modelos aqui embaixo. Se você clicar com o botão direito do mouse e clicar no nível, você não terá essas opções, apenas obterá automaticamente um nível vazio. Eu só quero criar um nível vazio porque, novamente, vamos criar tudo sozinhos. Clique com o botão direito aqui, crie um novo nível. Vamos chamar isso de um mapa. Eu costumo chamá-lo de mapa, vamos chamar isso de masmorra Não acho que teremos vários mapas, este é o único que teremos. Vamos clicar duas vezes neste. Eu ia te dizer, você quer salvar este mapa? Na verdade, isso é o que significa quando você tem estrelas em seus ícones. Se você tem estrelas pequenas, significa que ainda não as salvou. Vamos seguir em frente e clicar em Salvar selecionado. E agora estamos dentro desse mapa. Agora você pode ver que está muito escuro, não podemos ver nada. E também aqui no Outliner, você pode ver que não consegue ver nenhum item Isso ocorre porque seu nível está vazio. Você não tem nada, você não tem iluminação, nada. Vamos adicionar muitas coisas aqui, mas por enquanto só queríamos criar um novo mapa. Vamos continuar e clicar em Arquivo Salvar tudo. Tecla muito boa para pressionar com frequência, porque às vezes o motor trava Mas vamos salvar tudo e passar para a próxima lição. 7. 2.03 Importando os ativos do ambiente: Agora vamos prosseguir e importar os ativos do ambiente. Agora eu incluí isso para você no curso. Temos alguns materiais do curso que você pode baixar. Agora, dentro desses materiais, novamente, vou adicionar mais itens à medida que desenvolvo este curso. Às vezes, se eu for ver os efeitos sonoros, você poderá ver muito mais efeitos sonoros quando eu estiver aqui. Então você pode ver que eu os tenho, mas na sua pasta você pode ter muito mais efeitos sonoros. Novamente, vou adicionar mais e mais materiais ao meu curso à medida que desenvolvo este curso. Não se confunda se eu não tiver tantos, tantos itens dentro daqui. Tudo bem, para o meio ambiente, vamos até o meio ambiente aqui, e vamos pegar esses dois. Então, eu tenho os ambientes da prisão de masmorras. Agora, se eu puder clicar duas vezes nele e ampliar, isso é o que parece. A mesma coisa aqui para os adereços. Eu tenho alguns adereços que posso usar. Agora vamos fechá-lo e importá-los. Para importá-lo, vamos criar uma nova pasta. Vou clicar com o botão direito aqui, criar uma nova pasta. Vou chamá-lo de ativos aqui dentro, vou clicar com o botão direito do mouse e criar uma nova pasta novamente. E vamos chamar isso de ambiente. Ok, vou tornar meus ícones um pouco menores porque eles estão ocupando muito espaço. Então, vou clicar em Controlar e diminuir o zoom com a roda do mouse. Ok, agora vou entrar na pasta do ambiente. E está fora daqui. Agora podemos clicar e arrastar. Deixe-me abrir a pasta novamente. Eu posso clicar e arrastá-los até aqui. Lá vamos nós. Agora lembre-se, se você não consegue clicar e arrastá-los, você tem esse ícone aqui e ele diz que você não pode realmente arrastá-los até aqui. Isso ocorre porque talvez sua pasta seja uma pasta Ip ou uma pasta bruta. Lembre-se de clicar com o botão direito na pasta e extrair o conteúdo. Se for uma pasta Ip , precisa ser uma pasta normal. Extraia o conteúdo. Depois de extrair, você pode importar coisas daqui. Agora, ao importar coisas daqui, você pode clicar nela e realmente ver que está embaçada Na verdade, não pega muito e, veja, está muito embaçado. E nós não queremos isso. Isso ocorre porque o motor real é um motor de três D. Ele desfoca coisas que ficam bem em três D, mas não ficam bem em dois D. Uma coisa simples de fazer é selecionar os dois e você pode simplesmente clicar em Control e clicar no próximo. Com o botão direito do mouse, acesse as ações do Sprite e clique em Aplicar as configurações do Paper two D Texture Isso garantirá que os itens aqui dentro não fiquem desfocados Na verdade, escolha muito, como você pode ver aqui, agora é escolher muito, tudo está bem Vamos clicar em Arquivo e salvar tudo, as texturas Agora, na verdade, vou criar uma nova pasta chamada Texturas e vamos importá-la Dentro daqui, temos a pasta Assets. Dentro dele, temos o ambiente e, dentro dele, temos a pasta Texturas Isso ocorre porque, quando criarmos um mapa de blocos e um conjunto de blocos posteriormente, vou colocá-los aqui. Realmente não precisamos mais desses. Mais tarde, vou colocá-los dentro da pasta Texturas Mas, por enquanto, foi isso. Vamos passar para a próxima lição. 8. 2.04 Criando um conjunto de azulejos: Agora que importamos os ativos, agora podemos criar um mapa de blocos e um conjunto de blocos. Agora, para saber a diferença, você pode escrever clique aqui e entrar no papel para ver que existe algo chamado mapa de blocos. Há algo chamado conjunto de ladrilhos. Agora, a diferença entre eles é que, no conjunto de peças, existem as peças com as quais precisamos pintar nosso mapa. O mapa de blocos é o mapa em si. Você pode imaginar isso se for pintor. Você tem o pellet, que é o conjunto de ladrilhos, que são nossos ladrilhos, e a tela, que é o mapa de ladrilhos, onde pintamos nosso próprio mapa Vamos criar um conjunto de peças. Não vou criá-lo a partir daqui, mas podemos criá-lo clicando com o botão direito do mouse no prisma da masmorra Você pode ver que esse é o ambiente que importamos ou basicamente os blocos. Vamos clicar com o botão direito do mouse neste e acessar as ações do sprite e criar um conjunto de blocos A partir dessa textura, você pode ver que ela foi criada. Vou apenas clicar duas vezes aqui. E você também pode, a propósito, clicar nele e clicar em dois no teclado. Às vezes, isso é mais fácil. Vou apenas dizer S como um prefixo para o conjunto de blocos. Vou clicar duas vezes nele e abri-lo aqui. Você pode segurar o botão direito do mouse e pode escrever ao redor, aumentar e diminuir o zoom e ver os blocos. Clique neles para selecioná-los. Isso é o que estamos fazendo. Posteriormente, vamos selecionar os ladrilhos e depois pintá-los dentro do mapa de ladrilhos. Agora podemos ver aqui, se eu selecionar um ladrilho, ele não é realmente adequado Está selecionando demais. E isso porque aqui no tamanho dos ladrilhos, temos que definir o tamanho dos ladrilhos. Agora, esses blocos, especificamente, eu os encontrei em dois, acho que se chamam blocos Dungeon Pixel ou algo parecido, mas basicamente sobre como você pode encontrar três blocos, duas artes 3D aqui, eram 16 por 16, foi o que o artista escreveu Além disso, se você escrever 16 por 16 pixels, então esses são pixels, você pode ver agora que os está selecionando corretamente. Agora, se eu clicar nos blocos, eles estão sendo selecionados corretamente Agora eles estão preparados. Mais tarde, precisamos adicionar a colisão aqui, dentro daqui. Talvez precisemos, talvez não. Porque é um jogo de clicker e ninguém está se movendo. Na verdade, acho que não precisamos adicionar nenhuma colisão ao jogo Foi isso por enquanto. Agora podemos ir em frente salvar tudo e fechá-lo. Agora, se precisarmos dos adereços mais tarde, vamos realmente fazer isso agora. Talvez os usemos. Vamos clicar com o botão direito aqui. Vá para Sprite Actions, crie também um conjunto de blocos a partir deste Vá em frente e renomeie para S no conjunto de blocos inicial. Vamos abri-lo aqui dentro. Novamente, você pode ver que quando eu seleciono algo, ele está selecionando demais. Isso ocorre porque o tamanho do bloco é de 16 pixels por 16 pixels. Agora, quando eu seleciono os itens, está mais correto e também não está selecionando o item ao lado. Foi isso por enquanto. Vá em frente e salve este também. Agora, se você decidir ir para Cho no futuro, basta acessar aqui os jogos e ativos de sobrancelhas, e aqui você pode encontrar ativos gratuitos e baixá-los. Mas você também pode fazer isso aqui. Este é basicamente o que eu baixei, esta especificação aqui. Mas, basicamente se você quiser mais peças posteriormente para o seu jogo ou precisar de mais adereços para o seu jogo, você sempre pode entrar aqui, baixá-las e importá-las novamente Lembre-se de clicar com o botão direito do mouse e aplicar papel nas configurações de textura para que não fiquem embaçadas Em seguida, clique com o botão direito do mouse, vá em frente e crie um conjunto de blocos novamente. E aí estão seus novos azulejos. Ok, agora podemos usá-los para criar nosso mapa de blocos. Então, vamos prosseguir na próxima lição e criar um mapa de blocos. 9. 2.05 Criando um mapa de azulejos: Agora que criamos o conjunto de blocos, vou pegá-los aqui e movê-los para a pasta Ambiente, fora da pasta Texturas Porque basicamente aqueles que não precisamos mais, mas você não precisa excluí-los porque esses conjuntos de blocos ainda precisam dessas texturas Mas não vamos realmente usá-los no jogo, vamos usar isso aqui. Agora vamos criar um mapa de blocos. Se você clicar com o botão direito no conjunto de blocos que criamos aqui, o prisma da masmorra, você pode criar um mapa de blocos Vá em frente e crie um mapa de blocos, e eu vou chamá-lo novamente de Dungeon Prison Vamos parar, clicar, abrir e ver o que é. Como eu disse antes, um mapa de blocos é a tela. Você pinta os ladrilhos no conjunto de ladrilhos, que você pode ver aqui à esquerda sua tela. Você pode selecionar blocos aqui, aumentar e diminuir o zoom, segurar o botão direito do mouse e escrever ao redor, por exemplo. Você pode tomar a palavra aqui clicando aqui. Se você mover o mouse para a tela no mapa de blocos e clicar aqui, agora poderá ver que pintou um ladrilho. Você pode simplesmente clicar com o botão esquerdo e pintar. Agora você pode ver que preencheu tudo. Agora, se você quiser apagar, você pode clicar no Erasor aqui em cima, ou você pode clicar em E no teclado Ao clicar em, selecionaremos a navalha novamente, clicaremos em tudo Ou você pode continuar, e isso preencherá tudo. Ou você pode clicar nele aqui em cima, no balde de tinta. E você pode clicar aqui e ele preencherá toda a tela com o ladrilho que você selecionou. Você também pode selecionar outro ladrilho e clicar em B para a ferramenta pintar aqui também. Agora eu posso ver que podemos pintar aqui dentro. À direita, temos camadas. Se você já trabalhou com um software como o Photoshop, sabe o que são camadas Por exemplo, digamos que eu pintei esse chão aqui. Clicando nesse azulejo, eu pintei aqui. Se eu clicar aqui, você pode basicamente alternar os conjuntos de blocos. Posso trocar meu conjunto de peças da prisão de masmorra para os adereços que criei Digamos que eu queira pintar isso aqui. Você vê aqui. Se eu clicar aqui, não é suficiente porque a caixa é composta por essa e essa Na verdade, posso simplesmente clicar e arrastar e selecionar os dois. Agora, se eu os pegar aqui e pintar, você pode ver que meu chão está sendo deletado. Isso é porque você está pintando aqui também. Vou clicar no controle Z. Então, em vez de aqui, vamos adicionar uma nova camada Agora eu posso pintar meu balde nessa nova camada. Agora você pode ver que nada acontece. Isso ocorre porque essa camada não está afetando a camada abaixo dela Se eu clicar no olho para diminuir a visibilidade, agora você pode ver que eu bati na minha caixa E se eu clicar novamente, eu mostro. E eu posso fazer a mesma coisa com outros itens. Basicamente, posso clicar na segunda camada e adicioná-la, e tudo ficará bem. Agora você pode ver que se eu clicar na primeira camada e pintá-la, ela excluirá o ladrilho abaixo dela Muito, muito bom ter essas camadas. Se você precisar de algo em cima da camada abaixo, eu preciso de algo em cima do solo e tenho que fazer uma nova camada Digamos que tivéssemos um jogo em que tínhamos céu e nuvens. Digamos que fosse uma plataforma ou jogo e tivéssemos a nuvem. Deixe-me deletar todos aqueles aqui. Digamos que tivéssemos nuvens aqui. E por trás desses ladrilhos também, poderíamos ter criado uma camada. E, na verdade, poderíamos clicar nessa seta para colocar a camada atrás desses ladrilhos aqui. E poderíamos pintar por trás dela sem que ela fosse afetada. E você pode ver que se eu os escondo aqui, eles estão na verdade atrás dos ladrilhos do chão. Ok, então é assim que as camadas funcionam, assim como no Photoshop, se você já trabalhou com o Photoshop antes, vamos excluir essa camada aqui. E essa camada também, basta manter essa. Agora, aqui embaixo, temos que definir a largura e a altura do ladrilho. Agora, isso está correto porque lembre-se de que, dentro do conjunto de blocos, tínhamos 16 pixels por 16 pixels. E aqui também está 16 pixels por 16 pixels. Então, este está correto. Ok, vamos em frente e exclua isso. Vou clicar em E para usar a navalha. Basta ir e apagar tudo. Agora, o que podemos fazer é que tudo esteja bem. A largura e a altura do mapa. Vamos apenas tornar o mapa um pouco maior. Vou fazer com que seja de 15 por 15 peças, tamanho 15 peças por 15 peças. Isso é apenas temporário. Você criará um mapa temporário que alteraremos posteriormente. Não se preocupe com isso por enquanto. Só queremos que o jogo tenha algo para que possamos codificá-lo. Por enquanto, está tudo bem. Vamos clicar em Arquivo e salvar tudo. E vamos para a próxima lição. 10. 2.06 Como criar um mapa de azulejos temporário: Tudo bem, vamos desenhar um mapa temporário. Antes de podermos codificar nosso jogo, precisamos ter algo aqui. Basicamente, vamos clicar no bloco configurado aqui e selecionar o prisma da masmorra Você pode selecionar o que quiser. Você pode até mesmo pegar este e clicar na ferramenta de preenchimento. E você pode clicar aqui e pronto. Mas, basicamente, criar aqui não precisa ser algo bom, porque vamos mudar isso de qualquer maneira. Vou clicar e preenchê-lo aqui com esses blocos. Nesta primeira camada, você pode até clicar nela. Clique em duas no teclado e chame-as de camada base. Talvez seja o chão. Agora também precisamos talvez de algumas paredes. Essas são as paredes. Vou selecionar esse canto aqui novamente. Você pode clicar e arrastar, selecionar os três. Você pode clicar neste plus aqui, criar uma nova camada. E eu vou chamá-la de camada frontal. Talvez clique na ferramenta de alfinetes para pintar, pinte aqui. Vou selecionar paredes agora, basta clicar e arrastar o mouse para pintar todas elas aqui. Novamente, selecione este e pinte-o aqui. Ok. Agora, às vezes, quando você tem novos blocos, precisa descobrir quais vão para onde, porque eles são muito específicos. Por exemplo, aqui embaixo está, eu acho que esse. Você pode selecionar isso aqui embaixo, pintar aqui. Então você tem que selecionar, vamos ver, acho que é esse. Essa. Pinte aqui embaixo também. Você precisa selecionar um deles aqui. Temos que ver, deixe-me ver aqui. Se conseguirmos encontrar um que se encaixe, talvez esse. Sim, esse serve. Você pode pintá-lo aqui. Você pode selecionar isso clicando aqui, pinte para cima. Agora basta conectá-lo e conectá-lo com este aqui. Agora temos uma pequena sala com a qual podemos trabalhar. Você pode até tentar praticar essas peças. É bom praticar. Agora, antes de fazer o mapa final, talvez adicione algo assim aqui. Mas, como você pode ver, na verdade estamos nas laterais aqui. Deixe-me ver se podemos resolver isso. Talvez você possa pintar com este. Para o outro lado, preciso selecionar as que estão neste lado, deixe-me ver deixe-me ver melhor as que estão nelas. E agora está parecendo correto. Ok. Também para os azulejos. Vamos ver se precisamos pintá-los agora. Acho que não precisamos realmente deles. Tudo bem, então o que podemos adicionar também, você pode tentar adicionar este se quiser. Basicamente, podemos clicar e secar e selecionar todos eles assim, e agora podemos adicioná-los novamente aqui. Você pode tentar adicioná-los à camada base, mas, como você pode ver, você pintará em cima daqui. Clique em Controle, você também pode ver que está atrás da parede. Clique na camada frontal, você pode tentar pintá-la aqui. Como você pode ver, novamente, está pintando em cima das paredes, porque estamos pintando em cima dessas camadas ou azulejos clicando aqui e adicionando uma nova camada e talvez chamando-a de decoração frontal ou qualquer outra coisa. Não é muito importante, não importa o que você chame. Vamos, vamos adicioná-lo aqui, por exemplo. Agora você pode ver que adicionamos isso. Como posso ver, os blocos que acabei de selecionar. Os ladrilhos aqui em cima não são adequados, então precisamos ir para a camada base E eu vou até os azulejos aqui. E eu preciso pintar com esses azulejos. Pintando com esses azulejos. E o ladrilho do canto está aqui, o outro canto está aqui. Vamos tentar pintá-lo corretamente. Acho que esse está aqui. Vamos pintar esse aqui. Novamente, esse canto é assim. E eu vou pintar assim. Está bem? Eu posso fazer isso muito rapidamente. No momento, isso não é muito importante. Este é apenas um mapa de teste que alteraremos mais tarde. Agora, o lado ruim do Honoral Engine for Picks até agora é que, se você pintar coisas erradas, se clicar no controle Z, ele removerá apenas um ladrilho por vez Se você fizer isso demais, pode ser uma dor. Tudo bem, esse azulejo aqui, talvez precisemos pintar este em vez disso. E está ficando muito melhor aqui também. Agora está parecendo bom. Acredito que também temos algum destaque para os pilares Podemos ver que o pilar também tem algum destaque. Na verdade, posso selecionar este, voltar para a camada frontal e pintar este como pilar Temos alguma luz desta sala aqui, a luz vermelha, e parece mais realista. Agora, se você também quiser adicionar alguns adereços, novamente, isso realmente não importa agora Mas você pode adicionar alguns adereços aqui. Por exemplo, crie. Você pode ir até a frente da decoração. Vamos colocar um aqui. Talvez coloque isso de um lado, é assim. E talvez no canto, vamos ver aqui. Podemos colocar esse baú talvez aqui no canto assim. Novamente, isso realmente não importa por enquanto. Vamos deixar que seja assim. Se você quiser adicionar um pouco de grama, eu pude ver que havia um pouco de grama. Talvez você possa selecionar algumas delas aqui. Adicione a grama aqui embaixo. Então você pode acabar com isso, acredito que insinuando com este Você também pode pintá-lo aqui. Vou clicar em Controles. Não é muito importante agora. Vamos salvar tudo. E esse é o mapa que temos. Vamos fechá-lo e passar para a próxima lição. 11. 2.07 Colocando o mapa de azulejos no nível: Agora que criamos o mapa de blocos, vamos clicar e arrastá-lo para o nível. Muito fácil. É assim que você coloca o mapa de blocos no nível. Novamente, como eu disse antes, você pode segurar o botão direito do mouse e clicar em W D S e A para se movimentar. Basicamente, isso é realmente o que parece. São dois D dentro de um motor manual. Como é um software tridimensional ou motor tridimensional, é assim que se parece. Estamos trabalhando com três D, mas se você for para a vista ortográfica e visualizá-la da vista direita em vez do modo wireframe, basta selecionar o modo basta selecionar o Você pode ampliar aqui e ver que é assim que parece. E agora estamos vendo isso em dois D. Vou voltar ao modo de perspectiva por enquanto. O que eu costumo fazer para o local, eu disse aos 20, vamos escrever 000. Está aqui no zero do mundo. Vou remover todas essas linhas aqui porque eu realmente não preciso delas. Se você clicar no mapa de blocos, desça até aqui, poderá remover este, Mostrar por grade de ladrilhos quando selecionado. Agora ele foi removido. Agora é assim que você o coloca. Muito fácil. Podemos clicar em Arquivo e salvar tudo. Mas, como você pode ver, está muito ruim porque as cores não estão corretas, e isso ocorre porque a iluminação no Unreal Engine está afetando esse mapa de blocos Então, vamos corrigir isso na próxima lição. 12. 2.08 Volume de processo de pós-venda: Agora, para ajustar a iluminação, precisamos usar algo chamado volume de pós-processamento. Se você clicar aqui e acessar os volumes, poderá encontrar algo chamado volume de pós-processamento aqui embaixo. Você também pode encontrá-lo dentro dos efeitos visuais. Esse volume de pós-processamento é o mesmo. Você pode clicar nele e criar um. O que é um volume de pós-processamento, se você já trabalhou com o Photoshop antes, ele basicamente muda as cores, assim como no Photoshop Você altera a saturação da imagem, altera a iluminação e o brilho, e assim por diante É a mesma coisa com o volume de pós-processamento. Você clica nele. Dentro de um volume pós-processamento, você pode alterar a quantidade de exposição do Bloom se quiser um reflexo da lente O efeito de imagem, que é a vinheta ao redor da imagem em que você cria a imagem, também conhecida como nos cantos, também conhecida como nos cantos, e funciona como um efeito cinematográfico E você pode mudar a temperatura da luz. Você pode mudar muitas coisas ao mudar a aparência do jogo. O volume pós-processamento é usado para mudar a aparência do jogo. Ok, dentro daqui, se você apenas aumentar e diminuir o valor. Por exemplo, se eu for até Bloom e clicar na intensidade e aumentar, diminuir, você verá que nada acontece. Isso ocorre porque você precisa entrar em um volume de pós-processamento. E, como você pode ver, se eu estiver dentro dela, agora posso aumentar e diminuir e isso muda os valores. Agora, em vez de estar aqui dentro , você pode descer e encontrar esse chamado Infinite Extension Unbound Se você clicar nele, isso significa que isso afetará todo o nível. E não importa se você está dentro ou fora dela, isso afetará todo o nível. Agora você pode ver que se eu aumentar e diminuir, a intensidade vai mudar. Agora, o bom de estar dentro disso é que, digamos que você tenha um jogo de três D ou até mesmo um jogo de dois D, como se você quisesse criar um estilo especial. Se você entrar em uma caverna em um jogo de três D, por exemplo, um jogo de RPG, isso muda a aparência do jogo porque agora você está dentro da caverna A caverna tem uma aparência específica. Se você sair da caverna, isso muda a aparência. Mas aqui não precisamos realmente alterar os efeitos dependendo de onde estamos. Queremos que tudo seja o mesmo. Normalmente, na maioria dos jogos , basta clicar em infinite extension unbound e afetamos o jogo inteiro Ok, agora para o Bloom, eu preciso configurá-lo para zero porque realmente não temos Bloom ou em dois D novamente com dois D dentro de um motor de três D é muito legal porque você pode usar a iluminação D e adicioná-la a dois D, o que dá efeitos realmente especiais que você não obtém de dois motores. Você pode obter três luzes D, você pode obter três efeitos D dentro daqui, o que você não pode obter em dois motores D. É muito legal experimentar isso também. Provavelmente criarei um curso mais tarde, se ainda não tiver criado um, sobre como adicionar três efeitos D especiais a dois D. Mas, por enquanto, vamos definir o Bloom para zero. Vamos à exposição e, basicamente, a exposição mínima e máxima, geralmente eu a defino para 1,1 A exposição é simplesmente se eu a desabilitar. Você pode ver que a iluminação aumenta com o tempo. Isso é bom para ambientes cinematográficos em três D, mas na verdade não precisamos mudar a iluminação dependendo se estamos perto ou longe. Então, vamos defini-lo como uma constante, mesmo estando perto ou longe, isso realmente não importa. Mas, por enquanto, vou configurá-lo para dois, porque vou apenas fornecer minhas configurações de volume de pós-processamento que criei para dois D aqui. A iluminação é muito, muito boa porque, como você pode ver aqui, temos que ajustar a iluminação e queremos que pareça apagada Se você for para o apagado, é assim que fica sem iluminação Na verdade, esse é o conjunto de pixels ou blocos que eu tenho. Isso é o que parece de verdade. Você também pode vê-lo dentro da vista direita, na visualização autográfica Se você aumentar o zoom, é assim que ficará quando tivermos a iluminação correta. Se voltarmos para o modo de perspectiva e eu voltar para o modo iluminado, o problema é que quando você clica em reproduzir aqui, você só o vê no modo iluminado. Na verdade, precisamos alterar a iluminação no modo iluminado para ser a mesma do modo apagado Isso é o que estamos tentando fazer com o volume de pós-processamento. Estamos tentando fazer com que o modo iluminado tenha a mesma aparência do modo apagado. Assim. Ok, vamos para o modo iluminado aqui. Eu tentei por três a 4 horas. Eu estava apenas jogando com várias configurações aqui para fazer com que parecesse o modo apagado Descobri que a exposição mínima e máxima deveriam ser definidas para duas. O efeito de imagem, que é basicamente a vinheta, você pode ver, adiciona um efeito cinematográfico nas bordas Acabamos de colocar isso de um a zero, realmente não precisamos disso. Na verdade, temos aqui os destaques e a diversidade dentro da gradação de cores. Para obter o mínimo de destaques, precisamos definir Vamos ver aqui a quantidade da curva de tons, precisamos defini-la como zero. Você pode ver muita diferença quando definimos esse como zero. Quase parece com o original. Agora, se você for para o modo Lit. Quando você vai para o modo Iluminado, você pode ver que ele parece muito melhor do que antes. No entanto, ainda precisamos ajustar algumas coisas porque você pode ver que não é a mesma coisa. Você também pode clicar nos atalhos, os quatro antigos e os três antigos Se eu clicar nos três antigos, vou para o modo Iluminado. Quatro antigos, eu vou para o modo Lit, aí, posso clicar no antigo 3.4 muito rapidamente, e você pode ver a diferença entre eles. Ainda há alguma diferença se eu voltar para o modo Lit. E vamos alterar algumas configurações aqui também. Agora, aqui em cima, na verdade aqui embaixo, vamos continuar. Antes de mudar as cores aqui embaixo, vamos mudar a intensidade de oclusão do ambiente Além disso, vamos alterar a quantidade de desfoque de movimento para zero Realmente preciso disso. Vamos clicar em Arquivo e salvar tudo. Agora, se eu for até aqui, temos algo chamado temperatura, sombras globais e tons médios sob a gradação de cores Agora estamos prontos para mudar as cores, talvez reduzir a saturação. Porque, como você pode ver aqui, se eu for para o modo apagado, ele parecerá um pouco mais insaturado do que o modo iluminado Agora, eu lhe dei as configurações corretas para este. Este tem que ser 1.0. Tudo isso foi definido como zero porque realmente não precisamos deles. E a exposição está definida para duas. Mas agora você precisa ir sozinho, porque precisa configurá-los de acordo com a aparência dos ladrilhos. Lembre-se do global aqui, se eu apenas abrisse o global, na verdade não tudo isso. Se eu abrir o global e você abrir a saturação, o contraste, a gama e também abrir o ganho aqui Vamos trabalhar com eles e corrigir sua aparência aqui. Vamos começar com a saturação. Isso ocorre porque eu olho para esse vermelho aqui no modo Iluminado e clico em Apagado Eu posso ver que é mais fácil no gelo, o que significa que está menos saturado. Se eu for para o modo Lit e for para a saturação e pegar aqui, agora você pode aumentar e diminuir a saturação E você pode ver que pode mudar a aparência. No entanto, realmente não precisamos diminuí-lo tanto. Eu vou voltar para um, como antes. E o que você precisa fazer é segurar novamente a tecla Alt e clicar em 3.4. Você pode alternar entre o aceso e o aceso, e você pode ver como fica se eu clicar em Aqui No modo Iluminado, eu o diminuo um pouco assim e clico nos três antigos. Agora você pode ver como é. Só estou vendo esse vermelho aqui. Talvez, em vez de ficar assim, eu vá fazer com que seja 95. Ok. Clique no antigo interruptor 3.4 entre eles muito rapidamente Você pode ver isso, o que parece. Acho que a saturação está boa agora, mas posso ver que está mais, está mais branca aqui Acho que é a gama e o ganho. Vamos tentar ir até a gama aqui e aumentá-la um pouco, porque você pode ver a gama Se você aumentar demais, eu volto ao modo iluminado e aumento a gama Você pode ver que esse é o efeito. O que você pode fazer é um truque que eu uso às vezes. Quando clico no antigo 3.4, continuo clicando nele enquanto eu realmente ajusto aqui. Você pode ver se você o ajusta de forma errada, demais. Você pode ver isso longe um do outro. Se você aumentar demais, também estará longe um do outro. O que eu geralmente faço é segurar e pressionar 3.4 muito rapidamente Eu apenas tento mantê-los o mais próximo possível um do outro. Agora você pode ver se eu clicar em todos os 3.4 para alternar entre Lit e Let, eles são quase iguais 1,05 é o valor correto aqui. Agora, para o contraste, posso tentar clicar aqui e tentar aumentar um pouco o contraste. Vou aumentá-lo novamente. Todos os três gostam disso. 1.02 Eu acho que é o correto. Agora, para ganhar, acho que podemos dar um pouco para ganhar. Vamos tentar isso também. Algo assim aqui para as sombras. Agora, se você quiser dar às sombras um pouco mais de contraste ou remover o contraste, você pode realmente fazer isso clicando nas sombras Se eu for contrastar, porque se eu olhar minhas sombras, estou apenas olhando minhas sombras Eu acho que é também. Contraste no modo iluminado, você pode ver que é mais claro no modo iluminado. Mas se você for para o modo iluminado, podemos diminuir um pouco o contraste das sombras Se eu clicar novamente no antigo 3.4 continuo clicando neles para ver como é Isso é demais, talvez algo assim. Apenas 0,97 Novamente, como você pode ver pelos meus valores, não os estou mudando muito. Talvez 0,020 0,05 e assim por diante. Então, não mude muito, só um pouco, para que eu possa ter essa aparência. Agora, se eu passar do modo apagado para o modo iluminado, você pode ver que está muito próximo Agora, você pode passar mais tempo do que o que eu tenho aqui. Talvez você possa passar 15 ou 30 minutos tentando se ajustar aqui e obter valores melhores. Mas, por enquanto, tudo está indo bem. No entanto, ainda precisamos ajustar algumas configurações dentro das configurações do projeto. E vamos fazer isso na próxima lição. 13. 2.09 Ajuste as configurações do projeto: A última coisa que precisamos fazer com o meio ambiente agora é desativar a atribuição de tarefas. Agora, como você pode ver aqui, talvez não seja muito visível, mas há um anti-eliasing que desfoca um pouco as coisas e não parece Isso é feito novamente porque em três D T eliminação é muito boa e faz com que seu jogo pareça melhor, mas no Pixelot nós realmente não precisamos dela mas no Pixelot nós realmente não precisamos Vamos para Editar e ir para Configurações do projeto. Dentro daqui, precisamos descer e encontrar a guia Renderização Clicando em Renderização, vamos tentar alterar algumas configurações aqui para o anti-eliacing móvel realmente não importa Não estamos criando um jogo para celular, mas é bom saber que ele está lá. E você sempre pode clicar aqui e definir como nenhum, porque realmente não precisamos de antielicantes Se eu for até aqui e der uma olhada nas configurações, está tudo bem aqui. Realmente não preciso dele agora para a iluminação. Vamos apenas configurá-lo para nenhum em vez de lúmen. Vamos configurá-lo como nenhum. Nós realmente não precisamos de uma ou duas reflexões . Vamos dar uma olhada aqui embaixo. Tudo está indo bem. Você pode desativar o Nanite se quiser, que são os três modelos D, o novo sistema sem religião cinco, vamos reiniciar mais tarde Por enquanto, vamos dar uma olhada aqui. Tudo está ótimo. Agora, o mais importante está aqui nas configurações padrão, agora já desativamos nossa oclusão de ambiente Nós realmente não precisamos nos preocupar com eles. Fizemos isso dentro do volume pós-processamento, no desfoque de movimento, mas você também pode desativá-lo aqui se desejar florescer e na oclusão do ambiente, se Mas isso realmente não importa aqui no anti-eliasing, esse é o mais importante Este que você deseja definir como não, você pode ver a diferença. Se eu der uma olhada aqui, agora posso configurá-lo como não, você pode ver a diferença. Você pode ver que apresenta linhas irregulares. Se eu configurá-lo para este, por exemplo, ou este super for o padrão, você pode ver que é assim que parece. Você pode configurá-lo como nenhum ou pode configurá-lo para um desses, mas nenhum é o melhor. Para pixel, parece muito melhor com pixel. Ok, incrível. Agora parece bom. E esse também. Você pode configurá-lo para nada aqui. Sem AA, tudo está bem. Vamos um. E eu vou clicar em Reiniciar agora. Depois de reiniciado, você pode ver que estamos aqui dentro Agora, ele abre esse nível de mundo aberto por padrão e você pode alterar isso acessando Editar e Configurações do projeto. E você acessa os mapas e modos aqui. E você pode alterar o mapa de inicialização do editor para ser seu mapa, Dungeon the Editor, jogo, mapa padrão Você também pode mudar para mapear Dungeon. Agora você pode fechá-lo e salvar tudo. Da próxima vez que você abrir o motor, ele abrirá automaticamente o mapa da masmorra Agora vamos clicar nele. Clique duas vezes no mapa para inseri-lo novamente. Agora tudo está bem novamente. Você pode clicar em, você pode clicar em Vamos aqui neste. E você pode clicar na visualização correta. Você pode voltar à perspectiva. Clique no modo Iluminado. Modo iluminado. Há uma pequena diferença aqui nas bordas, mas acho que está tudo bem por enquanto. Você não vê quase nenhuma diferença. Está parecendo bom. Agora podemos clicar em Jogar e podemos jogar este jogo aqui e ter a iluminação correta. Ok, está tudo bem. Como você pode ver, novamente no Picsalot, você tem camadas em motor real porque é um motor de três D. Se eu reduzir a velocidade da câmera, fica assim. Parece estranho porque a camada frontal está na frente desta Basicamente. É quando você cria as camadas dentro do mapa de mosaico, essas camadas. Isso é o que você vê aqui. Esta é a camada frontal da decoração. Essa é a camada de decoração, ou a camada frontal, e essa é a camada base. Você pode vê-los assim. Parece estranho. Mas quando você clica em reproduzir e não assim, mas quando você clica em reproduzir, criamos uma câmera real. Vai ficar assim. Parecem todos os dois D porque estamos olhando de frente, tudo está bem. Vamos clicar em Arquivo e salvar tudo. Vamos começar na próxima lição. 14. Modo de jogo 3.01 e controlador de jogador: Tudo bem, agora que terminamos de projetar o ambiente, vamos programar o jogo. Agora, a primeira coisa aqui é que vejo uma mensagem dizendo que nanite está habilitado, mas não pode ser renderizado E isso porque desativamos nant aqui nas configurações do projeto Se você pesquisar por nanite, lembre-se de que a desativamos aqui, diz que ainda está ativada Aqui embaixo no ícone, você vê aqui embaixo que você escreve nitro e eu vou entrar e ele vai desativar a nanite E essa mensagem também desapareceu. Vamos até aqui na pasta de conteúdo. Vamos clicar com o botão direito do mouse e criar uma nova pasta. Vamos chamar isso de plantas dentro dessa pasta. Agora, clique com o botão direito do e agora estamos prontos para programar o jogo. A programação é um projeto em motores reais. Vá em frente e clique na classe blueprint. Vamos fazer um. Agora você tem essas opções que você pode fazer. Agora, pode ser um pouco confuso no início se você nunca usou plantas antes, mas só para examiná-las rapidamente, a classe de ator que podemos criar aqui é um objeto que pode ser colocado ou gerado no mundo É basicamente apenas um item estático. Por exemplo, uma mesa, um frasco, qualquer coisa que não esteja se movendo no jogo, por exemplo, essa caixa aqui não é um objeto em movimento Esse é um ator. Um peão e um personagem são duas classes nas quais você pode criá-los. Se você precisar de movimento, verá que uma pata é um ator que pode ser possuído e receber informações de um controlador Digamos, por exemplo, que em seu jogo, esse seja o jogador. E o jogador pode se mover com esta caixa aqui, você pode rolar com esta caixa. Então você realmente precisa criar um peão e um ator. Porque se você criar um ator, não poderá controlá-lo com o teclado. Se você precisar controlá-lo com o teclado, se for um jogador, precisará criar um peão No entanto, se você tem um personagem, algo com dois braços e duas pernas e precisa andar por aí, você precisa criar um personagem e não um peão, por exemplo, se o seu jogo for, se você for como uma caixa rolando Ou se você é como uma bola rolando, então você não tem dois braços, duas pernas. Como personagem, você pode criar um peão. No entanto, se você tem esse personagem humanóide típico, é um personagem que você precisa criar Agora vamos criar um controle de jogador e um modo de jogo nesta lição. E um controlador de jogador é um Acta responsável por controlar o uso pelo jogador Agora, pode ser um pouco confuso Este não é o seu controle, controle Xbox ou controle Playstation Você pode pensar nisso como o cérebro do personagem quando você entra no jogo Cada personagem que você cria como controlador de jogador não é apenas o personagem quando você entra no jogo Se o jogador entrar no jogo, o controle do jogador será criado automaticamente para você antes que o personagem seja criado. É muito, muito importante saber. Normalmente, o que fazemos nos controladores de jogadores é codificar as interfaces do usuário, a interface do Também fazemos a desova. Por exemplo, se eu gerar uma arma no jogo, se eu gerar uma moeda, eu gero qualquer coisa no Eu costumo fazer isso no Player Controller. Agora, algumas pessoas também fazem movimentos no controle do jogador. No entanto, sugiro que o movimento seja feito no personagem, porque no modo multijogador agora não estamos codificando o modo multijogador Mas, no futuro, se você quiser programar o modo multijogador, é sempre bom se acostumar com uma coisa. No modo multijogador, o movimento deve estar na classe blueprint Se você fizer o código de movimento dentro do controle preto, no modo multijogador, ele não funcionará. Eu sempre faço movimentos em personagens porque isso também funciona como um multiplicador no futuro Se você quiser fazer alguma coisa com o modo multijogador, este é o controle preto e o modo de jogo define o jogo que está sendo jogado, suas regras, pontuação e outras facetas do Por exemplo, digamos que no Counterstrike você tenha um cronômetro redondo E quantos pontos você ganha quando mata um jogador e coisas assim. As regras do jogo geralmente são definidas no modo de jogo. Agora vamos clicar no modo de jogo e criar um. Normalmente, eu lhes dou BP como prefixo para plantas. No entanto, para o modo de jogo, geralmente escrevo o modo de jogo GM. E eu chamo isso de nome do jogo, que é Dungeon Clicker Vamos chamá-lo de Dungeon Liquor. Vamos escrever, clique novamente, crie uma nova classe de blueprint e crie um Player Controller, vamos chamá-lo de PC para Player Controller Vamos chamá-lo novamente de nome do jogo, Liquor. Agora você pode ter vários modos de jogo. Não é porque você pode ter um modo de jogo, por exemplo, novamente no Counter Strike. Em outros jogos como Halo, você tem um modo de jogo em que você tem três para todos, todos podem se matar Você tem um modo de jogo em que captura a bandeira, cada equipe captura a bandeira até sua base Diferentes modos de jogo. Você pode ter vários modos de jogo. No entanto, estamos fazendo um jogo simples. Mas só precisamos de um. Eu normalmente chamo isso de nome do jogo aqui. Vamos em frente e salve tudo. Agora que terminamos isso, na verdade não precisamos fazer nada dentro deles. No entanto, precisamos atribuir o modo de jogo a ser usado dentro do Unreal Engine, porque agora ele está usando o modo de jogo padrão que ele cria quando eu abro o motor Vamos clicar em Editar e abrir as configurações do projeto. Dentro daqui, vamos para Mapas e Modos. Em Mapas e modos, você pode ver o modo de jogo padrão sendo usado. É o modo de jogo padrão no Unreal Engine. Eu vou dizer que não, eu quero usar o meu. Eu quero usar esse único clicker GM. Vamos minimizar isso por enquanto. Em vez de aqui, deixe-me abrir meu modo de jogo. Ele abriu aqui no meu segundo monitor no modo de jogo nos padrões da classe, precisamos alterar o Player Controller que também criamos porque agora ele está usando o controlador Player padrão no Unreal No entanto, quero usar o meu personalizado que criei, que é o PC Dung clicker Vamos continuar e compilar. A propósito, significa apenas que você está verificando se seu código tem alguma caixa ou não. Se você clicar nele, ele dirá que está pronto, está tudo bem. Clique em Arquivo e Salvar tudo. Vamos encerrar isso. Agora. Deixe-me abrir as configurações do meu projeto novamente e garantir que clicar no modo de jogo selecionado aqui embaixo, controle do meu jogador também esteja atribuído nas configurações do meu projeto. E geralmente é quando você faz isso no controle do jogador. Ok, vamos fechá-lo aqui. A última coisa que precisamos fazer está aqui nas Configurações Mundiais. A propósito, se você não tiver uma guia Configurações mundiais, vá em frente e clique em, vamos ver aqui, a janela aqui em cima. E abra as Configurações do Mundo A partir daqui, vamos clicar nas Configurações do Mundo e também nas Configurações do Mundo no modo de jogo Override, clique aqui e atribua seu clicker de masmorra GM, que é E você também pode garantir que, ao clicar aqui , o controle do player também esteja atribuído. Tudo bem, então vamos em frente e economizemos. E agora nosso modo de jogo personalizado está atribuído ao mapa ou ao jogo. Na verdade, não podemos fazer muita coisa porque realmente não fizemos nenhuma codificação. Portanto, não podemos ver se realmente funciona ou não, mas faremos isso em breve. Agora terminamos de adicionar o modo de jogo e o controle do jogador e estamos prontos para adicionar a câmera do jogador. 15. 3.02 Adicionando a câmera do player: Para adicionar a câmera do player. Vamos clicar com o botão direito do mouse novamente dentro das plantas e criar uma planta em vidro novamente Agora, para a câmera do jogador, você pode criá-la como um peão Como na verdade não temos um personagem com dois braços duas pernas para andar, você pode tecnicamente criá-lo como um peão No entanto, gosto de criar as câmeras dos jogadores também para meus outros jogos como personagem de jogador, porque elas vêm com um componente de movimento do personagem. Dessa forma, você pode controlar a gravidade da câmera, a velocidade de movimento da câmera e assim por diante. Você vai ver o que quero dizer, mas este me dá mais opções. Normalmente eu só crio um personagem. Vamos chamar isso de jogador P. Eu chamo isso de câmera, mas vou chamá-lo apenas de player. Vamos abrir isso. E aqui geralmente estamos em plantas. Ao abri-lo, você tem o ponto de vista aqui onde você pode ver o personagem Se você importar, poderá ver aqui à direita no painel de detalhes. Quase parece o painel de detalhes aqui. É a mesma coisa quando você clica nas coisas e depois pode ver opções diferentes aqui para a malha. Você importa um personagem, você pode ver o personagem aqui na janela de exibição, assim como você tem um ponto de vista Ok, dentro desse player BP, precisamos criar uma câmera A propósito, o componente de movimento do personagem está aqui. Se você clicar nele, verá que pode controlar coisas como a aceleração do player, que neste caso é a câmera. Você pode controlar o atrito do solo, a velocidade máxima de movimento da câmera e muitas coisas, o controle aéreo e assim por diante Gosto de criar um personagem em vez de uma pata ou a câmera porque tenho esse componente de movimento do personagem e posso controlar minha câmera muito mais Precisamos criar uma câmera. Vamos clicar em Adicionar aqui e nos componentes primeiro antes da câmera. Vamos criar algo chamado mola. Se você criar uma mola aqui, esse é o suporte para a câmera. Agora, clicando no braço da mola, vou clicar em D procurar a câmera e criar uma câmera. Temos o braço de mola, que é o suporte, e depois temos a câmera aqui. Vamos clicar em Compilar e clicar em Salvar tudo. Deixe-me minimizar isso. Deixe-me arrastar esse jogador para mundo assim. Aqui está a câmera. Se você pode ver ao fundo, mas está escuro, então não podemos ver muita coisa. Vou escrever a localização para ele como 000. Também gire minha câmera, você pode ver que está desse jeito Vou voltar para o meu jogador. Vou clicar na minha mola, não na minha câmera, mas na minha mola. Vou girá-lo quando clicar na ferramenta de rotação. Lembre-se de que as ferramentas aqui em cima são para a ferramenta de movimento, para a ferramenta de rotação e R no teclado para a ferramenta de escala. Ao clicar na ferramenta de rotação, vou girá-la dessa maneira Agora vou compilar novamente se você minimizá-lo. Agora sua câmera está com a aparência correta. Você também pode vê-lo no visualizador. Quando você clica na câmera, agora ela está escondida aqui porque está tudo escuro. Eu clico em Lit, você pode ver que está aqui. Se eu clicar nele, você também verá o visualizador. Para a câmera aqui embaixo, você pode simplesmente mover a câmera que desejar Você pode vê-la no visualizador aqui. Agora, antes de alinharmos, você pode ver na câmera, se eu clicar com o botão direito na câmera e clicar em Pilot, o que significa entrar na câmera e ver o que ela vê Você pode ver que os ladrilhos estão cortados aqui. Não parece dois D, na verdade parece três D. Eu clico neste botão aqui em cima para sair da minha câmera. Eu abri o player novamente. Isso ocorre porque, ao clicar na câmera, você realmente precisa alterar o modo de projeção de perspectiva para autoral Perspectiva é o modo de três D, ortográfico é a visão de dois D. Precisamos da visão em dois D aqui. Vamos compilar e dar uma olhada. Mais uma vez, você pode ver agora que parece correto. Se eu clicar com o botão direito na minha câmera e clicar em empilhá-la, acho que você pode fazer isso aqui também Você também pode clicar com o botão direito aqui no Outliner e clicar em pilhar Agora você pode ver que parece mais correto. Seus dois D também parecem bons. Vamos sair daqui. Vamos abrir o player. A última coisa que quero dizer aqui é que não temos mais muito o que fazer. Mas aqui na câmera, você pode alterar a largura ortográfica E você pode ver o que isso faz se você clicar na sua câmera aqui no player BP aumentar e diminuir a largura ortográfica Se eu aumentar, aumentar, você pode ver que você aumenta e diminui o zoom. Pixel Ot, parece mais ou mais pixelizado. Quanto mais baixa a madeira autográfica, talvez seja assim que você quer que seu jogo seja Você pode torná-la mais alta ao diminuir o zoom desta forma. Agora, para o meu jogo, tentei apenas jogar com ele quando estava testando e acho que vou ficar com algo como 640 Se eu clicar com o botão direito na minha câmera e pilotá-la, é assim que ela ficará. Posso levar meu player aqui e ajustar a localização. Lembre-se de que podemos ajustar a localização clicando nos números aqui na localização do jogador. E podemos clicar e arrastar com o mouse para ver como fica. Eu posso fazer algo assim. Na verdade, para o Y, é apenas zero. Para este, é assim. Incrível. Agora está censurado Na verdade, não é muito importante no momento. Vamos corrigir o posicionamento mais tarde. Mas para o jogador, novamente, apenas para ter certeza de que tudo está funcionando corretamente na mola, vou desativar o teste de colisão O teste de precisão é simplesmente quando um jogador está atrás da parede Ele vai empurrar a câmera, para que a câmera não entre na parede. Nós realmente não precisamos disso porque isso pode estragar o jogo. Agora, vou desativá-lo. A segunda coisa é a cápsula. Quero remover todas as colisões, porque não quero que essa cápsula colida com meus inimigos ou personagens dentro deste mundo Nós realmente não precisamos desse. Vou até aqui e me certificar de que na seção de colisão da cápsula gere eventos de sobreposição desativados ou as predefinições de colisão Em vez de peão, vou dizer que nenhuma colisão foi corrigida Agora, na própria malha aqui. Só estou me certificando de que, na colisão, seja para que o personagem também possa enfrentar nenhuma nenhuma colisão. Vá em frente e compile Agora, para o braço de mola, removemos o teste de colisão A última coisa aqui no componente de movimento do personagem do jogador é zerar a gravidade, porque não precisamos que essa câmera caia ou se mova. A aceleração máxima é zero. Vamos ver se precisamos fazer mais aqui. Acho que não precisamos fazer mais. Tudo está indo bem. A velocidade máxima realmente não importa. Você não vai andar por aí. Mas você pode simplesmente defini-lo como zero para não se movimentar tão bem, se desejar. Vamos apenas compilar, salvar tudo. E foi isso para o jogador. Agora está configurado. Você pode controlar a distância de sua câmera de sua preferência Então, se você quiser que a câmera fique muito mais próxima, você pode fazer isso. Por exemplo, você pode clicar na câmera e definir a visualização autográfica para 512 E você pode ver que está muito mais perto aqui. Não é muito importante agora. Sempre podemos testar o jogo sempre que tivermos um personagem se movendo. 16. 3.03 Extraindo os sprites do inimigo: Vamos agora importar esses preços para os inimigos. Novamente, vamos voltar para a pasta de materiais de custo que eu dei a você. Dentro daqui, vá para os personagens. Aqui estão todos os inimigos que temos no jogo. Agora, no futuro, podemos adicionar mais inimigos, porque nos jogos de clicker você tem toneladas e toneladas de Mas esses são muito bons para começar. Vamos continuar e clicar no primeiro. Segure a tecla Shift e clique na última para selecionar todas elas. Vamos até os Ativos. E aqui eu vou escrever Clique e crie uma nova pasta chamada Personagens. aqui, vou clicar com o botão direito do mouse em criar uma nova pasta mais uma vez e vamos chamá-la de Texturas Vamos entrar nessa pasta. E agora vamos clicar e arrastar isso para a pasta Texturas E aqui importamos todos eles. Tudo bem, clicando no primeiro novamente, segure Shift, clique no último, clique com o botão direito, vá para as ações do Sprite E lembre-se de aplicar o papel nas configurações, caso contrário, será uma textura embaçada para aplicar nas Quando você faz isso, a arte é muito fixa, fica ótima. Ok, vamos fechar tudo aqui embaixo. Vamos clicar em Arquivo e salvar tudo. Agora que importamos tudo, o que você precisa fazer, você pode ver aqui que eles estão todos em uma textura. Se eu abrisse o primeiro, o Night Death, você pode ver que eles estão em uma textura. Precisamos tê-los como sprites separados. Vamos encerrar isso. Posso clicar com o botão direito nesta Morte Noturna. Aqui eu posso ir. Ações de Sprite, você tem algo chamado criar sprite ou pode extrair os Criar um sprite é simplesmente, por exemplo, digamos que você tivesse um personagem aqui e não os tivesse todos juntos dessa forma Você pode clicar com o botão direito do mouse nas ações do sprite e criar um sprite. Quando você faz isso, ele cria esse sprite aqui. Quando você cria um sprite, você pode realmente usá-lo no jogo Você pode clicar e arrastá-lo para o mundo. Se eu apenas movê-lo aqui para a frente, eu posso vê-lo assim. Agora veja, eu posso usá-lo no meu jogo, por exemplo, se você tivesse uma caixa ou coisas assim. Se você tiver um objeto singular, você pode clicar com o botão direito do mouse e criá-lo como um sprite E então é basicamente como criar um objeto de três D, que você pode usar no mundo porque essa textura aqui, você não pode usá-la aqui. Você pode ver que ele substitui isso e cria algum material para nós e coisas assim, tudo está confuso Vou clicar no controle Z para revertê-lo. Eu só vou atrasar este que ele criou. Você não pode usar texturas no jogo dessa forma. Você precisa clicar, transformá-los em um sprite, por exemplo, se você tiver uma caixa ou algo estático que queira no jogo E você pode arrastá-lo até aqui e usá-lo como um sprite No entanto, deixe-me excluir este, e deixe-me também excluir este. Agora eles estão todos juntos. Em vez de criar um sprite, precisamos extraí-lo. Clique com o botão direito, vá para as ações dos sprites e extraia os sprites E você pode vê-los aqui assim. O que precisamos fazer é aqui nas configurações, precisamos transformá-lo em uma grade. Agora temos que descobrir no solo, largura e altura, qual é o tamanho. Normalmente, o artista que faz isso escreve para você o que é. Mas vamos tentar fazer com que 32 se sobressaiam, como é para a altura 32 aqui Agora você pode ver que não é adequado porque cada caixa precisa estar ao redor desse personagem Em vez de 32, digamos mais 16 pixels. O bom do Unreal Engine que você pode escrever mais 16 e pressionar Enter, e ele fará isso automaticamente para você Ok, 16 pixels funcionaram porque agora você pode ver que tudo está correto. Cada sprite está em sua própria caixa. Essa é a largura e a altura corretas da célula. E vamos continuar e clicar em Extrair. Agora você pode ver que as extraiu aqui, e agora elas estão em imagens singulares Agora, se eu clicar e arrastar isso para o mundo, é um único personagem que está aqui em vez da coisa toda. Na verdade, precisamos fazer isso para cada um deles. Por exemplo, na hora da noite, você pode clicar com o botão direito do mouse e ir para as ações dos sprites, extrair os sprites novamente e clicar na grade em vez disso clicar na grade em Então você pode clicar aqui. Acho que é o mesmo, talvez 48 de antes. Mas se você escrever 48, verá que na verdade não está correto. Se eu voltar para 32, como a altura, você pode ver que 32 é a correta aqui. E você precisa clicar em extrair aqui. Ok, vamos tentar com o último. Vamos clicar com o botão direito do mouse no modo inativo noturno para extrair a destruição dos sprites Vá para a grade. Acho que é 32 novamente, assim como antes. Agora vá em frente e clique em Extrair. Eu vou te mostrar este também. Depois disso, vou fazer cada um deles rapidamente. Você pode ver que isso leva tempo. Eu tenho que fazer isso para cada um. Mas vamos clicar com o botão direito neste. Vá para Spart, as ações extraem sprites. Agora, para este, vamos clicar na grade. Vamos escrever 64, assim como a altura lá. É um bom ponto de partida simplesmente escrever o número da altura e você pode ver que ele já está funcionando corretamente. E extraia tudo certo. Clique em Extrair sprites, vá para a grade. Você pode ver que vai ficar muito bom nisso porque faz isso 100 vezes. Às vezes, mesmo com sono, você pode fazer isso sem nem pensar no que está fazendo Fazer isso muitas vezes é uma boa prática. Agora nós os extraímos. Acredito que se eu simplesmente voltar para a pasta, essa, clicar nessa, ociosa, base inativa, extrair os sprites para a grade 32, isso funciona, ok Isso é o que você precisa fazer para cada um deles. Tente encaixá-los na caixa e extrair todos eles. Ok, eu vou fazer isso no meu próprio tempo e eu estarei de volta com você agora. Eu extraí todos eles. Agora você pode ver que todos eles foram extraídos. Às vezes, é um pouco complicado saber o tamanho deles ao extraí-los. Mas basicamente, novamente, se você abrir um deles, por exemplo, este, esse foi o mais complicado. Se você escrever, clicar e extrair esse preço para este, você pode vê-lo aqui Se você for para a grade 64 novamente, certo, 64 é um bom ponto de partida. Você pode ver que não está correto porque isso aqui está vazio. Não precisamos de vazios. Se você escrever mais 16, geralmente são 16 pixels toda vez que você aumenta ou diminui. E este também não é adequado. Mais 16. Novamente, agora podemos ver que combina com todos eles. Ok, vá em frente e faça isso por todos eles. Eu fiz isso por todos eles. Agora vamos para a próxima lição e criar flip-books. 17. 3.04 Criando flipbooks: Tudo bem, agora que temos os sprites prontos, vamos criar flip-books. E os flip books são simplesmente a versão animada deles. Estamos reunindo todos esses sprites em uma peça animada O personagem está se movendo. Este é um flip book Um flip book é simplesmente quando você precisa de uma animação em dois D. Vamos experimentá-lo com esta noite de Death Primeiro clique no primeiro sprite e você pode ver, aliás, as texturas, elas têm uma linha vermelha E se eu aumentar o zoom, você pode ver. Eles têm uma linha vermelha aqui nas texturas, enquanto os sprites têm uma linha azul clara aqui ou Esse é o sprite. Você também pode ver a diferença entre eles assim. Clicando no primeiro, vou para Old Shift e clico no último sprite desta seção, vou clicar com o botão direito do mouse, vou para Criar flip book. Deixe-me chamar isso de B para flip book. Vamos chamar isso, vamos chamar isso de morte. Temos esse flip-book, a morte. E você pode ver que já está animado. Eu clico duas vezes nele. Esta é a animação da morte da noite. Um flip book é simplesmente os sprites reunidos em uma animação Você pode ver, eu posso simplesmente parar com isso aqui. Esta é a animação e esses são todos os sprites para os quais selecionamos e criamos um flip book. Tudo bem. Você também pode ver se eu reproduzo novamente, você pode controlar a velocidade da animação aqui nos quadros por segundo, eu posso, por exemplo, configurá-la para 50 muito rápido. Se eu dissesse que os quadros por segundo voltam para 15, esse é o padrão, é o que parece. Agora, há realmente uma regra para o que isso deveria ser. Às vezes, o pixilatista escreve para você o que deveria estar aqui Mas às vezes eu estou apenas brincando, vendo o quão rápido a animação é reproduzida, e então eu transformo isso em meu jogo para mim. Eu tentei dez em quadros por segundo e acho que é isso que eu quero que a velocidade seja. Agora, não há uma regra. Você pode ir com 12, você pode ir com 15, o que você achar que é bom para o seu jogo. Eu vou com dez para mim. Eu vou fechá-lo aqui. E agora temos esse flipbook. Agora podemos clicar e arrastar isso para o personagem e selecionar Mover aqui, e agora temos o flip book aqui A razão pela qual, novamente, criamos essa pasta de texturas é porque realmente não precisamos ver tudo isso mais tarde, quando criarmos todos os flip-books aqui para os personagens Não precisamos de tudo isso dentro da pasta Texturas. Novamente, você não pode excluí-lo porque isso está usando dados das texturas Portanto, você realmente não pode excluí-los. Estou apenas colocando-os em uma pasta de texturas para não precisar vê-los novamente. Mas vamos entrar aqui. Vamos fazer isso por todos eles. Para o hit, clique no primeiro, segure a tecla Shift, clique no último, clique com o botão direito, vire o livro Ligue de novo. Abra, mas você pode fazer isso mais tarde. Como se você pudesse alterar os quadros por segundo depois. Eu não vou fazer isso por enquanto. Vá em frente na próxima, clique com o botão direito, flip book. Chame isso de ocioso. Vá para a próxima aqui, clique com o botão direito. Ligue ou eu vou ligar ou, em vez de base, ou vá para a próxima aqui, clique com o botão direito, flip book Chame isso de B. Vou fazer algumas delas você possa ver o fluxo de trabalho. E então eu vou fazer isso de novo no meu próprio tempo. Clique com o botão direito neste. Flip book, ligue para ele. Ou ocioso. Vamos descer novamente o próximo aqui. Eu só vou fazer isso como o último. Clique com o botão direito, flip book. Chame isso de B ou ladino. Esse é um trapaceiro, como esse. Você pode ver que eles estão todos animados aqui. OK. Eu vou fazer isso no meu próprio tempo. Vou criar flip-books e estarei com você mais uma vez. Agora, eu criei flip-books para todos eles, como você pode ver aqui E vou clicar em Arquivo e salvar todos eles. Agora vamos clicar no primeiro, Hold Shift, e clicar no último flip-book dentro daqui E eu vou transferi-los para os personagens. Aqui temos todos os flip-books. Agora deixe-me ajustar os quadros por segundo. Agora, em vez de fazer isso um por um, o que leva muito tempo, você pode clicar no primeiro e segurar a tecla Shift. Clique no último para selecionar todos eles. Clique com o botão direito do mouse e acesse Ações de ativos e selecione esta. Edite a seleção na matriz de propriedades, selecione isso. Geralmente, isso ocorre sempre que você deseja editar uma configuração para cada um deles. É sempre bom escrever, clicar e usar a matriz de propriedades para alterar as mesmas configurações para todas elas. Aqui no sprite, eu posso mudar os quadros por segundo e fazer com que sejam dez Ele entra e faz isso por todos eles. Vá em frente e clique em Salvar tudo, feche-o. E você pode ver agora que eles são, na verdade todos dez em quadros por segundo. Isso se aplica não apenas aos flip-books, mas a tudo. Por exemplo, textura normal em que digamos que eu queira alterar o brilho de todas as texturas Você pode selecionar todas as texturas, por exemplo, esta Se eu mantiver o controle, seleciono a próxima textura, essa textura e essa textura que eu possa escrever. Clique em Ir para ações do ativo, Editar seleção por meio da matriz de propriedades aqui nas configurações, por exemplo, nos ajustes. Eu poderia editar o brilho de todos eles de uma vez. É sempre bom saber que essa opção existe. Ok, aqui estão todos os flip-books que criamos. Todos eles estão ótimos. Se você esqueceu um deles, não tem problema. Sempre podemos voltar e criá-lo como um flip book mais tarde, mas acho que tenho todos eles agora. Tudo está ótimo. Vá em frente e salve tudo, e vamos para a próxima lição. 18. 3.05 Aula de projeto de pais e filhos: Agora que criamos os flip-books, vamos criar as classes de blueprint Vamos para a pasta de plantas. Vamos clicar com o botão direito aqui. E vamos criar uma nova pasta chamada inimigos. Primeiro, vamos entrar nessa pasta. Clique com o botão direito do mouse e agora podemos criar uma nova classe de blueprint. Vamos continuar e criá-lo aqui. Agora, em vez de criar esse personagem para o inimigo, esse é um personagem de três D. O que precisamos fazer é criar dois caracteres D e clicar nesta pequena seta com todas as classes. Aqui você pode realmente ver mais classes que você pode criar com o blueprint up Aqui estão as classes normais que você quase sempre cria. E você quase nunca vem aqui , a menos que haja algumas coisas específicas. Por exemplo, quando você salva e carrega um jogo para o seu jogo, ele também está aqui embaixo. Aqui embaixo, podemos pesquisar papel, que são os dois D no motor Unreal Podemos ver esse chamado personagem papai. Este é um caractere de três D, e este, o caractere de papel, é um caractere de dois D. Você também pode ver que temos outras coisas que podemos criar, como flip books que acabamos de criar Você pode criar mapas de blocos, sprites e assim por diante, mas queremos criar um personagem Agora vamos clicar nele e clicar em Selecionar. Agora, para esta, vou chamá-la de base inimiga da BP. A razão pela qual eu a chamo de base inimiga é porque agora é uma classe principal. Vou explicar a você aqui nesta lição o que uma classe para pais e o que é uma classe para crianças. Vamos, por enquanto, clicar com o botão direito do mouse aqui e você pode ver aqui em cima, que se chama Create child print class. Vamos continuar e criar isso. Por enquanto, vamos chamá-lo de BP Knight. Basicamente, estou chamando isso de personagens que tenho. Se eu for à minha pasta de personagens, teremos a noite. Vamos criar o próximo também. Ou vou explicar o que é uma criança modelo. Clique com o botão direito na base inimiga, Crie uma criança, classe de planta Vamos chamar isso de P Orc. Ok, vamos em frente e salve tudo. Agora eu tenho esse aqui. A base inimiga, se você segurar o mouse durante a noite, poderá ver que a classe principal é base inimiga da BP. A mesma coisa com o Or. A classe principal é a base inimiga da BP ou a base inimiga aqui Agora podemos abrir a base inimiga. Digamos que dentro dessa classe de blueprint, eu queira clicar no componente de movimento do meu personagem Então, temos esse componente porque é um personagem aqui. Digamos que eu quisesse mudar o quão alto meu personagem pode pular. Você pode ver no painel de detalhes que há coisas que você pode mudar sobre o movimento, a gravidade, a velocidade máxima e assim por diante. Digamos que a altura do salto, digamos que meu personagem, eu queria pular muito mais alto. Se eu, por exemplo, clicar aqui e escrever 800 em vez disso. Agora eu posso pular mais alto se eu clicar em Compilar. Agora, se eu minimizar isso e frequentar as aulas de plantas para meus filhos, esses dois são filhos da base inimiga, porque clicamos com o botão direito do mouse e os criamos quando O que isso significa? Agora, se eu passar a noite der uma olhada aqui e clicar no componente de movimento do personagem. Se eu descer até a velocidade de salto que acabei de mudar na base inimiga, você pode ver que também é 800 aqui Agora, por padrão, se eu for até o Or e clicar no componente de movimentação do personagem e descer, posso ver que ele também está definido como 800 no Awesome. Interessante. Toda vez que eu altero uma configuração na base inimiga, que é a classe principal do projeto, essa configuração que eu altero aqui é aplicada a todas as crianças que eu crio para ela E esse é um método muito rápido trabalhar e também o melhor para trabalhar, porque eu o uso muito. Imagine que você tem quinzena e muitas skins Digamos que também aqui neste clicker você tenha 100 inimigos Você cria 100 dessas crianças aqui. Em vez de inserir cada uma dessas crianças e mudar, digamos que você queira alterar a escala de gravidade, 1.2 Em vez de entrar em cada criança e alterar o valor para 1,2, você pode simplesmente alterar o valor dentro da classe principal e ele será aplicado automaticamente a todos os filhos que você criar. Essa é uma maneira rápida de trabalhar se eu clicar na minha base inimiga e clicar nessa seta para redefini-la para 420, compilar e salvar Agora, se eu for à minha noite, você pode ver que ela também está configurada para 420, o mesmo com o Orc Essa é uma ótima maneira de trabalhar porque você pode imaginar que, se tiver 100 inimigos, é muito trabalhoso clicar em cada uma dessas cem e mudanças de valor. Você pode simplesmente trocá-la uma vez dentro da base inimiga. Isso é para as aulas de pais e filhos. Vamos criar o resto deles. Nós temos o e temos a noite. Vamos criar o Shaman. Clique com o botão direito do mouse no inimigo Criar classe de planta infantil. Vamos chamar isso de BP, Roku. Vamos clicar com o botão direito na base inimiga novamente. Crie uma turma infantil de blueprint. Chame isso de BP ou Shaman. Vamos voltar novamente. Temos que criar todos eles. Temos o Warrior e temos o Roque P Warrior. Agora estou apenas criando-os muito mais rápido do que antes , porque é a mesma coisa. Estamos fazendo isso de novo e de novo. A revista Skeleton e a base do esqueleto, apenas chamando-a Assim. Skeleton e a revista Skeleton. Revista Skeleton. Vamos ver o que estamos perdendo. Temos o Skeleton Rogue e o Skeleton Warrior. P Skeleton Rogue, BP Skeleton Warrior. Apenas certifique-se de clicar com o botão direito do mouse na base inimiga e criá-la. Para ter certeza de que você sempre pode segurar o mouse sobre ela , sua classe é a base inimiga correta. Clique com o botão direito aqui, faça o último chamado BP wizard. Só para verificar se perdi alguma coisa. O mago é o último e pronto. Eu sei que tenho 11 personagens. Basta clicar aqui, segurar a tecla Shift, clicar na última. Você pode ver que tem 11 selecionados e isso está correto. Eu tenho 11 personagens aqui. Ok, vamos clicar em Arquivo e Salvar tudo. Agora criamos todos eles. E isso parece bom, então estamos prontos para continuar na próxima lição. 19. 3.06 Finalizando a configuração do curso do inimigo: Vamos acabar com o inimigo. Agora vamos passar a noite. Temos que abri-los um por um. Vamos abrir a noite primeiro, aqui dentro. Se você é novato em cláusulas de blueprint, basicamente o que você tem são componentes Você tem componentes diferentes. Por exemplo, o sprite. Vamos até o ponto de vista por enquanto. Aqui na janela de exibição, assim como a janela de exibição aqui no jogo Na janela de exibição da cláusula do blueprint, você pode ver Por exemplo, o sprite, não aplicamos nada E é isso que faremos. Agora, vamos realmente fazer isso. Então você pode ver que ao clicar neste sprite, você pode ver que ele precisa de um flip book. É uma animação porque é um personagem que criamos aqui. Ele precisa de um personagem animado clicando no flip book. Deixa, esta é a noite. Temos que selecionar o modo noturno ocioso. Vamos selecioná-lo. Você pode selecioná-lo assim ou clicar no sprite Você pode clicar e arrastar aqui nos personagens, você pode clicar e arrastar isso e soltá-lo em cima daqui. Isso também funciona. Agora você pode ver visualmente, pode se movimentar, exatamente como na janela de exibição normalmente Você pode ver agora que temos esse personagem. Se você clicar duas vezes nele, o quadro por segundo. Eu não o troquei por este. Acho que esqueci de mudar isso. Deixe-me selecionar todos eles. Acho que mudei isso antes. De qualquer forma, selecione todos eles. Se você tiver a mesma coisa, clique com o botão direito do mouse e vá para Ações do ativo. Sua seleção na Property Matrix. Vou até o Sprite e alterarei a taxa de quadros por segundo para dez quadros por segundo Vamos sair e vamos fechá-lo. Em vez de entrar em cada um deles e alterar os quadros por segundo para dez, vou fazer isso selecionando todos eles. Clique com o botão direito na matriz de propriedades e faça desta forma aqui. Você pode alterar os quadros brilhantes por segundo. Um rápido, não sei. Acho que já fiz isso antes. Talvez a crista do meu motor, não tenho certeza. Mas agora temos isso. Vamos voltar ao vidro da planta Vamos abri-lo novamente. Eu vou ver plantas Os inimigos se abrem na noite em que estávamos trabalhando. Vamos até as janelas de exibição. Aqui, você pode ver minha noite. Tudo parece muito melhor. Está bem? Na janela de exibição, você pode ver as coisas visualmente E dentro do gráfico de eventos é onde você adiciona o código, por exemplo, em movimento e assim por diante. Por enquanto, não vamos nos concentrar aqui, vamos para a janela de exibição dentro daqui Temos que fazer isso para cada um deles. Temos que atribuir o flip book. Vamos clicar aqui. Abra o editor de diagramas completo. Essa exibição aparece porque você ainda não trabalhou nesse blueprint. Vamos abri-lo, clicar no sprite, atribuir o Or. Se você apenas pesquisar por Orc, por exemplo, e puder selecionar este ou inativo Se você acessar a janela de exibição, verá que ela está correta Aqui está, ok, incrível. Você tem que fazer isso para cada um deles. Eu só vou te mostrar este e depois vou fazer isso sozinho. O Orc Rogue, clique em Sprite ou vá até o Rogue e selecione o Apenas certifique-se de selecionar o ídolo para cada um deles. Eu só vou fazer isso para o resto deles. OK. Esse foi o último. Em cada um deles, eu atribuí o personagem exatamente assim e ele já parece um jogo. Incrível. Mesmo que ainda não tenhamos feito muita coisa, vou clicar e compilar em cada um deles. É uma boa prática. Não mudaria muito agora clicar e compilar Mas é sempre bom lembrar desse jeito. E, a propósito, é bom saber também você pode clicar nesses três pontos e salvar e compilar, e você pode clicar neste, Sem sucesso O único que isso faz é que toda vez que eu clico em Compilar, ele é salvo automaticamente aqui, em vez de, digamos que eu alterei um valor aqui assim Em vez de compilar e depois salvar, você pode simplesmente compilar Você pode ver a estrela, isso significa que ela não está salva. Se você clicar em compilar, ele também será salvo automaticamente Isso é muito bom. Eu costumo fazer essa configuração apenas para não ter sucesso. Você também pode salvar tudo, se desejar. Não é realmente necessário no momento. Ok, aqui estamos. Vamos fazer outra coisa agora. Esta cápsula aqui é a colisão desse personagem. Nós realmente não precisamos de uma colisão porque os personagens estão apenas parados no ambiente O que podemos fazer é fechar tudo. Vamos abrir a base inimiga para esta cápsula. Só para não ser tão grande. Na verdade, é saber que é tão grande e que o personagem é tão pequeno. Normalmente, ele se encaixa no personagem. Em vez de clicar nesse componente da cápsula e alterar o valor aqui na altura da cápsula e no raio da cápsula para ajustá-la ao caractere desta forma Em vez de fazer isso para cada personagem, lembre-se de que vou clicar nessa seta para reiniciá-la. Por padrão, lembre-se de que temos a base inimiga, que é a classe principal. Vá para a janela de exibição. Vou clicar aqui e tentar configurá-lo para 12 por 12 assim e compilar E agora você pode ver como fica à noite , porque agora o muda automaticamente para cada um deles. Eles têm toda essa configuração aplicada. Deixe-me dar uma olhada e isso é o que parece. Este é o que usamos para quando você clica com o mouse e danifica o inimigo. Vou torná-lo um pouco maior para que possamos atingir o inimigo com muito mais facilidade. Talvez em vez de 12 por 12, vamos fazer com que seja 16 por 16. Vamos tentar isso. Sempre podemos aumentá-la se a caixa de acerto for muito pequena, 16 por 16. Parece bom para o componente da cápsula. Vou clicar nele. Na verdade, vou até aqui nas configurações de colisão e vou dizer gerar eventos de sobreposição Não, não aqui para a colisão, precisamos adicionar alguma colisão Mas, por enquanto, vamos clicar aqui e dizer que não há colisão, e podemos personalizá-la mais tarde Vá, compile e salve tudo. Agora, cada uma dessas classes de blueprint também tem a colisão definida como não Para o sprite, apenas certifique-se de que não haja nenhuma colisão na base inimiga Novamente, lembre-se dos sprites da base inimiga na colisão. Vou me sentar aqui, sem colisão e tudo está ótimo Também no componente de movimento do personagem, certifique-se de que a gravidade seja zero para que não caiamos. Essa aceleração máxima é zero. Podemos fazer com que a velocidade máxima de caminhada seja zero. Tudo está indo bem. Eu acredito que realmente não precisamos mudar muita coisa. Vamos compilar aqui. Vamos salvar tudo. E isso foi tudo para os inimigos. Você sempre pode arrastar um deles. Por exemplo, o esqueleto. Você pode escrever no Y como zero. Nós o trazemos para a frente e aqui está. Isso é o que parece se você clicar em, lembre-se de que é a visualização do jogo. Assim, você pode clicar para ocultar os ícones e ver sua aparência. Você pode clicar no botão direito do jogador e pilotar a câmera. Você pode clicar em F 11 aqui para maximizar a janela de visualização. Lembre-se de que 11 é que se eu clicar aqui, é o modo imersivo 11, maximizaremos a janela de visualização Se desejar alterar a posição da câmera, você sempre pode clicar aqui e alterar a localização da câmera para ser centralizada Eu posso ver o ponto de articulação aqui para a câmera. Você pode alterá-lo para que esteja no personagem. Por exemplo, você pode clicar em 11 para maximizar. Eu posso até ir mais abaixo assim. 11 aqui está meu personagem animado e tudo está ótimo. No entanto, quero clicar na câmera do meu personagem ou do meu jogador. Na câmera, vou escrever 640 aqui. Em vez disso, vou diminuir um pouco o zoom. Acho que está um pouco ampliado demais. Acho que estava muito ampliado. Deixe-me, na verdade, tentar clicar com o botão direito do mouse e empilhá-lo. E clique em 11. E isso é o que parece, parece muito melhor do que antes. E estou feliz com os resultados. Deixe-me clicar nesse botão para sair da câmera novamente. Vou clicar aqui. Exclua isso por enquanto. Sim, tudo está indo bem. Agora temos os inimigos configurados em classes de plantas. Agora vamos salvar tudo. Vamos passar para a próxima. 20. 3.07 Aplicando a câmera do player como padrão: O que precisamos fazer agora, antes de continuarmos , é garantir que a câmera do jogador esteja olhando para o jogo enquanto jogamos. Como você pode ver quando eu clico em jogar, ele vê o jogo de onde estou agora na janela de exibição E não é realmente usando nossa câmera que configuramos aqui. Vamos seguir em frente e fazer isso. Clique neste player BP e vá em frente e exclua-o, porque o que você precisa fazer agora é clicar aqui Em vez disso, vá para Basic e selecione este chamado Player Start Component. Agora, se eu arrastá-lo até a frente, você pode ver que tem uma seta. Eu tenho que girá-lo aqui. Clicar na ferramenta de rotação e girá-la para que a seta aponte para o mapa O início do jogador permitirá que o jogador apareça aqui onde eu o coloquei Agora, o que você precisa fazer é garantir que, dentro do modo de jogo, se você entrar no modo de jogo e salvar tudo dentro do modo de jogo nos padrões da classe, certifique-se de que, na classe P padrão, você a altere do ponto padrão, porque queremos usar o jogador BP para desovar como nosso jogador A classe de pontos padrão é o BP player e compile e salve tudo se quiser Você também pode garantir que, clicando aqui nas Configurações do Projeto, Editar Configurações do Projeto e acessando os mapas e modos aqui, verifique se a cláusula de pontos padrão também é o BP player Deve ser automaticamente quando você se inscreve no modo de jogo, bem como nas configurações do mundo. Novamente, se você não tiver as configurações mundiais abertas, você pode clicar em Janela aqui em cima, abrir as configurações mundiais, mas dentro daqui no modo de jogo, você pode clicar aqui nesta seta e ver que o jogador BP é a cláusula padrão Novamente, tudo isso deve ser aplicado automaticamente quando você o altera aqui Não se preocupe muito com isso. Mas é sempre bom saber que isso precisa estar correto aqui e também nas configurações do projeto. Agora, se eu clicar em Jogar, ele usará o player BP como padrão na classe para aparecer no mundo Se eu clicar em 11, isso é o que parece. O que você pode fazer é sempre clicar nas largadas dos jogadores e alterar o X, Y e Z. Posso dizer que não está realmente mudando aqui porque acho que é porque estou jogando lá Se eu apenas movê-lo para baixo e clicar em Play, você pode ver que ele muda de posição. Você sempre pode tentar centralizá-lo aqui, seja o que for. Porque o inimigo vai aparecer talvez deste lado. E vou movê-lo um pouco mais para o lado. Vamos clicar em Jogar. Na verdade, não é muito importante. Acho que está tudo bem por enquanto. Também vamos consertá-lo mais tarde, mas isso é bom para mim. Vamos clicar em Arquivo e salvar tudo. E agora, toda vez que clicamos em Play, estamos usando esse gerador para gerar a câmera E jogamos a partir dessa visão. Vá em frente e salve tudo, e vamos para a próxima. 21. 4.01 Criando o ponto de surgimento do inimigo: O que podemos fazer agora é começar a adicionar o ponto de desova do inimigo, porque agora é hora de fazer com que o inimigo apareça no mundo Para fazer isso, vamos criar um ponto de desova. A forma como podemos criar um ponto de desova. Agora você pode pensar que poderia adicionar outro jogador inicial e tentar fazer com que esse jogador inicie o local para gerar o inimigo Mas isso é só para o jogador e ele ficará confuso quando eu clicar em jogar. Agora ele está realmente usando este, e quando eu clico em jogar novamente, ele está usando este. Ele continua alternando entre eles e fica confuso. Vamos excluir este segundo agora para os pontos de desova. Em vez disso, vamos clicar nas plantas E deixe-me clicar com o botão direito do mouse e criar uma nova pasta. Vamos chamar isso de pontos de desova. Vamos abri-lo. Vamos clicar com o botão direito do mouse e criar uma nova classe de blueprint como ponto de geração. Vamos fazer uma pergunta muito simples chamada base de atores ou apenas ator e clicar nela. Vamos chamar isso de uma base de pontos de spa da BP. Novamente, eu costumo fazer aulas de blueprint porque gosto de criar classes de blueprint para crianças que podemos usar mais tarde Se precisarmos alterar um valor específico para todos eles, podemos fazer isso dentro do principal, aqui dos pais. Mas talvez não precisemos criar mais de um ponto na Espanha, não tenho certeza. Mas é sempre bom criar uma base, clique com o botão direito aqui. Esse também é o caso quando você desenvolve um jogo maior. Você não tem certeza se precisa de mais de um ponto na Espanha. Mas é sempre bom criar um para pais, porque você pode se arrepender mais tarde se não criar um e precisar criá-lo novamente. Vamos clicar com o botão direito do mouse aqui e criar uma aula de plantas para crianças. Vamos chamá-lo de EP Enemy spa Point. Agora eu posso clicar e arrastar isso para o mundo. Vamos definir o Y como zero. Está aqui na frente. Você pode gerar o inimigo onde quiser. Por exemplo, você pode gerar o inimigo aqui. não for muito importante agora, se eu clicar em Jogar, o inimigo aparecerá aqui Ok, agora criamos o ponto de desova. Vamos guardar tudo por enquanto. Vamos clicar nesse ponto de desova do inimigo. Certifique-se de que não precisamos alterar nenhuma configuração. Nós realmente não temos muito. Você pode ver aqui nos componentes só temos o ícone que não temos e que podemos fazer dentro daqui porque não adicionamos nada. Nós não precisamos. Eu só estou usando esse ator. Encontre a localização e a rotação no mundo para que possamos gerar o inimigo Ok, acabou para o ponto de desova. E vamos continuar com a próxima. 22. 4.02 Spawn ator de class: O objetivo de tudo isso agora é que precisamos gerar o inimigo E como geramos coisas no mundo? No Unreal Engine, vamos fazer isso dentro do Player Controller Então, o que eu geralmente faço no Player Controller é gerar coisas no mundo Se for personagem, preciso desovar se for uma arma, preciso desovar se for uma moeda de ouro, preciso Tudo é feito dentro do controle do jogador. Vamos abri-lo e ver o gráfico de eventos. Porque eu quero programar agora. A propósito, você pode clicar com o botão direito do mouse e navegar por aqui. Deixe-me selecionar os dois. Clique em Excluir no meu teclado. E vamos começar aqui. Quando você começa a programar, você basicamente precisa pensar: o que eu preciso fazer? Ok, eu preciso detalhá-lo. Ok, eu preciso gerar um inimigo aqui. Isso é o que eu quero. O que eu preciso fazer? Preciso usar a função principal usada para gerar coisas Eu clico com o botão direito. Se você não sabe como se chama, você sempre pode, por exemplo, desovar Você pode tentar dar uma olhada e ver qual combina melhor com o seu. Não são todas essas transmissões, as funções pararam aqui, você pode ver que são chamadas, essas são as funções que você pode usar. Se você não sabe como se chama, basta pesquisar a palavra. Por exemplo, eu preciso gerar alguma coisa. Só estou procurando por spawn. Na verdade, esse ator de spawn da turma, vou clicar nele aqui Essa é a função que vai gerar coisas para nós. Agora, para executar o código dentro de mecanismo vulnerável, você precisa de um evento. Sem um evento, você não pode executar código se escrever clicar e ir até aqui e pesquisar eventos. Se eu puder encontrá-lo aqui. Despachantes de eventos, não está aqui. Se eu subir, posso, na verdade, este, é um evento no evento publicitário. Você pode ver que esses são os ícones dos eventos. E você tem muitos eventos que você pode usar para iniciar seu código. Por exemplo, começar a jogar é o mais simples. Se você clicar nele, poderá ver que os eventos estão marcados em vermelho, as funções estão marcadas em azul. O vermelho aqui, Beginplay está simplesmente dizendo que este é um evento simples O que deve acontecer quando eu começar a jogar? Se você clicar aqui e conectá-lo. Agora, se você clicar em Play , essa função será executada aqui. Sem um evento, você não pode executar a codificação no motor real. Precisamos usar esse único ator de spawn em vez de usar um evento normal Vamos clicar com o botão direito do mouse e criar um evento personalizado. Vamos criar um evento personalizado. A diferença é que, com o evento personalizado, você pode simplesmente dar a ele um nome personalizado. Vou chamá-lo de spawn M. Isso é o que queremos fazer Vou conectá-lo aqui, e vamos lá. Para essa função de geração, precisamos definir o que precisamos para gerar Por exemplo, precisamos gerar o ladino, precisamos gerar o guerreiro Agora, realmente depende do nível em que você está, porque nos heróis do Clicker, por exemplo, depende muito do meu nível em que você está No nível um, talvez você queira gerar o guerreiro e no nível dois, talvez você queira gerar o Ok Shaman Portanto, não podemos realmente especificar qual deles queremos gerar em vez de apenas especificar aqui o que queremos gerar depende do nível Vou clicar e arrastar esse pino para a função aqui e podemos decidir mais tarde. Em vez de chamá-lo de classe, vou chamá-lo de inimigo que queremos criar aqui Essa é a variável que adicionamos. Coisa muito legal, essa transformação de spawn também. Podemos arrastá-lo até aqui. Mas em vez de criar uma variável, você pode clicar no evento aqui, clicar no sinal de adição e criar a variável. Por exemplo, posso clicar aqui no tipo de variável e selecionar transformar, assim como esta. E eu posso conectá-los. Eu posso fazer isso assim, ou se eu simplesmente excluir este novamente, posso simplesmente clicar e arrastar como fizemos antes, soltá-lo no evento e ele o cria automaticamente para mim. Método muito legal de fazer isso , pois vou gerar o inimigo Agora, para a transformação de desova, isso realmente depende de onde está esse ponto de desova. Vou apenas colocar os dois no evento. Quando usarmos esse evento posteriormente, podemos especificar onde está o ponto de desova e também podemos especificar qual inimigo queremos gerar Mas, por enquanto, não podemos realmente decidir aqui. Para a desova, vou clicar aqui e dizer tente ajustar a localização, mas sempre apareça para garantir que meu inimigo apareça aqui aqui É sempre bom ter uma variável de qual inimigo Vou clicar com o botão direito do mouse nessa e promovê-la para uma variável. Vou chamar esse de spawn. Inimigo. Ok, o que estamos simplesmente fazendo é gerar um inimigo e armazenar essas informações em uma variável, que podemos usar Como esse é muito bom de usar se precisarmos fazer algo com esse inimigo gerado, temos esses dados dentro de uma variável Ok. Essa é a função simples, o ator de geração da classe Você pode ver aqui se eu chamo esse evento mais tarde, porque você não pode executar esse código. Então, se eu clicar em play, não espere que o código seja executado, porque no Unreal Engine, você precisa especificar no mecanismo quando deseja executar esse evento Por exemplo, posso clicar com o botão direito do mouse aqui e pesquisar meu inimigo de desova Evento, gera inimigo. E você pode ver isso aqui e diz função de chamada. Então, eu posso clicar nele e chamar meu código de spawn enemy. Eu posso chamá-lo aqui sempre que eu ligar, eu posso então executar esse código. Se eu apenas escrever o início, Jogue apenas para mostrar que você começa, jogar é o evento mais simples. Eu posso conectá-lo aqui. Sempre que eu começar a jogar o jogo, ele chamará esse evento, que então executará esse código aqui. É assim que acontece. Digamos, por exemplo, que eu queira gerar o mago Por enquanto, deixe-me pegar este, em vez de escrever um valor, deixe-me pegar e dizer que vou fazer uma transformação sozinho, apenas manualmente. Não vamos fazer isso assim, mas vou mostrar, por exemplo, que vamos copiar a localização desse ponto de desova Eu vou dizer 170 por zero por -120 Aqui no local 1700 -120 eu vou compilar Agora, quando eu clico em jogar, você pode ver que meu inimigo apareceu neste determinado local É o assistente que gerou todas essas funções ou a forma como chamamos os eventos Você tem que ter um evento. Você executa esse código, avisa o motor, executa meus eventos de spawn enemy E ele executará seus eventos com as coisas especificadas que você especificou aqui Quero gerar o assistente, por exemplo, neste local Ele vai conectar essas informações aqui, aqui. E vai gerar o inimigo e armazená-lo em uma variável Agora vamos deletar isso. Nós não precisamos disso. Eu só ia te mostrar. Vamos compilar e salvar tudo. Agora vamos para o modo de jogo. Sempre podemos gerá-lo daqui, desde o início do jogo. Mas só para criar um código um pouco mais limpo, vamos criar o inimigo dentro do modo de jogo Agora que temos esse código em que geramos o inimigo, vamos executar o código dentro do modo de jogo Como o modo de jogo está decidindo as regras do jogo, é mais fácil fazer isso aqui Mas, na verdade, isso não importa no modo single player. Se você gerar o inimigo daqui ou daqui , isso realmente não importa Mas só para criar um código mais limpo, vamos fazer isso no modo de jogo. Eu vou fazer isso no início do Play. Vou apenas selecionar este e excluí-lo aqui. Vamos arrastar e procurar o inimigo gerado. Você pode ver aqui quando você faz isso, você não consegue ver nada. Isso ocorre porque agora esse modo de jogo não percebe o que você criou dentro dessa outra classe de blueprint Lembre-se de que essas são duas classes de blueprint diferentes. Agora você realmente precisa entrar em algo chamado comunicação de plano Precisa se comunicar com outra classe de blueprint, porque esse modo de jogo precisa usar isso no controlador de jogo Precisamos usar algo chamado casting para nos comunicarmos com esse outro plano E vamos fazer isso na próxima lição. 23. 4.03 Comunicação de blueprint - fundição: Agora entramos na comunicação do plano. E agora precisamos nos comunicar com o controle do jogador dentro do modo de jogo para dizer ao controlador do jogador, ou aqui no modo de jogo, use e chame esse spawn de inimigo Para fazer isso, vamos aqui embaixo, clique com o botão direito do mouse e diga agora que o que você precisa pensar é com o que você precisa se comunicar? Preciso me comunicar com o controlador do player. Vamos procurar o controlador do player. Precisamos obter essa função chamada get player controller. Estamos recebendo esse controlador de camada padrão do Unreal Engine Agora precisamos dizer aqui que precisamos usar esse controlador específico que criamos. Não precisamos usar esse controlador de player padrão. O que precisamos fazer é partir daqui e dizer o segundo elenco. Isso é o que é o casting. Você está dizendo ao motor que deseja usar esse controlador personalizado especificamente Você deve escrever o nome dele como PC Dungeon Clicker Vá em frente e conecte-o. Agora, o que estamos fazendo aqui é pegar o controle de jogador padrão transmitir para este clicker de masmorra para PC Então, basicamente, estamos dizendo que queremos usar coisas dentro do nosso próprio controle de jogador personalizado em vez deste aqui. Agora podemos chamar tudo o que criamos aqui de inimigo gerado Então, por exemplo, agora posso arrastar daqui e dizer gerar inimigo Agora eu posso usá-lo, lembre-se de que você não pode simplesmente escrever, clicar e dizer gerar inimigo porque ele não vai aparecer Só vai aparecer se você se arrastar daqui e disser que gera inimigo porque ele está dentro daqui E agora você pode realmente usá-lo. Agora você está se comunicando com esse plano. Mas o problema com isso com o casting é que você cria referências concretas no Unreal Engine Ao criar um jogo e criar um jogo grande, você pode imaginar o quanto está usando o casting porque está se comunicando com vários projetos ao mesmo tempo Você tem muitos desses. Agora, isso é um problema porque cria referências rígidas. E o que são referências difíceis é que você precisa carregar essas referências sempre que iniciar o jogo. Às vezes, você vê se abre um jogo antigo e ele carrega por 15 segundos antes de mostrar o menu principal. Isso ocorre porque ele está carregando todas as referências físicas antes mesmo de começar. Isso é muito ruim. Não estou dizendo que você não deva usar o casting em qualquer lugar, mas use-o com facilidade, não em todos os lugares. Use-o onde quer que você o encontre. É bom usá-lo para chegar lá. Com a experiência, você saberá quando deseja usar o casting. E por que não tentar evitar o elenco o máximo possível. Então, deixe-me deletar esse elenco agora, ou, na verdade, deixe-o ficar aqui. Deixe-me apenas Alt e desconecte isso Aqui. Deixe-me movê-lo para baixo por enquanto. Agora, em vez de usar o casting, vamos usar algo chamado interfaces de blueprint Vamos passar para a próxima lição e ver o que são interfaces de blueprint 24. 4.04 Comunicação de blueprint - interfaces: Tudo bem, vamos entrar nas interfaces do blueprint. Agora, esse assunto é difícil para muitos iniciantes, mas vou tentar explicar, como sempre, o melhor que posso para explicar isso para você. Para evitar referências altas com o casting, vamos usar interfaces de blueprint Primeiro, clique com o botão direito aqui, crie uma nova pasta chamada interfaces. Vamos nos manter organizados aqui dentro. Vamos clicar com o botão direito agora. Dentro do blueprint, você vê algo chamado interface de blueprint Vamos continuar e criá-lo. Normalmente eu o chamo de iniciante as pessoas o chamam de BPI para interface projeto. Vamos realmente fazer isso. Vamos chamá-la de BPI, interface de projeto. Vamos chamar esse. O nome deste é o que você está tentando se referir, o que quer que você esteja tentando se comunicar. Nesse caso, estou tentando usar uma função do controle do meu player. Vou chamar isso de controlador PI . É a isso que eu quero me referir. Vamos abri-lo. Dentro de uma interface de blueprint, você pode ver que tem uma janela de visualização Você realmente não pode fazer nada. Diz somente leitura, você não pode arrastar nem nada aqui. A única coisa que você pode fazer é criar funções aqui ao lado. Vamos clicar na primeira função aqui. Deixe-me clicar em dois para renomeá-lo. Deixe-me chamar isso Obter referência de controle de jogo”. Obtenha a referência de controle do jogador. Isso é o que estou tentando fazer. Estou tentando obter a referência do controlador do player para controlador do player poder usar o que está nele. Assim como fizemos com o casting, posso usar essa função dentro dela aqui. Vamos voltar para a interface. Obtenha a referência do controlador do player aqui. Eu quero criar uma variável de saída aqui. Agora, o tipo de variável é o que você está tentando referenciar. Estou tentando fazer referência ao meu controlador de player. Preciso procurá-lo aqui embaixo, pesquisar o controlador de PC, na verdade o chamamos de PC, controlador net Player. Chamamos PC Dung Clicker. Vamos clicar nele. Vamos renomear isso para Play Controller assim Vamos compilar e tudo terminará aqui. A única coisa que criamos foi essa função de referência do controlador get player. E adicionamos uma variável à saída aqui chamada controlador do player. Vamos usar isso para definir esse controlador de jogador aqui. Agora que criamos a interface do blueprint, vamos entrar no controlador do Player e, dentro das configurações da classe, precisamos adicionar essa interface aqui Vamos clicar nas configurações da classe, pesquisar o BPI e adicionar o controlador Player Agora, observe que quando você adiciona o controlador do Player aqui na interface, na verdade você obtém uma barra aqui chamada interfaces. E você pode ver esta função de referência do controlador do player que você acabou de criar, a lista, clique duas vezes nela. E aqui está aqui, você pode editá-lo. O que você precisa fazer aqui dentro é simplesmente arrastar e dizer “faça você mesmo” aqui. Agora temos uma autorreferência. O que uma autorreferência significa, basicamente, é que estamos definindo essa variável de controle do jogador. Porque eu clico em Alt e clico aqui para desconectá-lo. Se não fizemos isso, saiba o que é essa variável, está vazia, não tem nenhuma informação, mas realmente não sabe que é esse controlador de jogador em que estamos agora. Isso é o que significa autorreferência. Se conectarmos isso, atribuímos um valor a essa variável. Basicamente, estamos dizendo a essa variável que o controlador do player de que estamos falando tem um significado próprio. Seja qual for o plano em que estamos agora, isso é uma referência pessoal Agora vamos continuar para que não fique confuso. E explicarei todo o processo quando terminarmos. Agora que fizemos isso, vamos fechá-lo. Vamos abrir o modo de jogo. Agora, assim como antes, digamos que pegue o controle do player e obtenha o controle do player padrão. Agora, em vez de lançar, agora podemos arrastar e dizer a referência do controlador. Agora você pode ver que isso vem da interface do blueprint. Também é uma função de interface de projeto. Quando você vir essa mensagem no final, vamos clicar nela. Isso também é o que esse ícone significa. Isso significa que vem de uma interface de blueprint. Vamos em frente e conecte-o. Agora, a partir daqui, vamos arrastar e dizer que gera um inimigo, como antes E agora podemos chamar o que está dentro dela. Agora você vê quando eu vou para o controle do player agora. E se eu adicionar uma nova variável chamada, por exemplo, inimigo, salvamos. Pilha. Então, agora dentro do modo de jogo, eu posso dirigir daqui e dizer mate o inimigo. E agora você pode ver, eu posso ver essa variável que acabei de criar. O que quer que eu crie aqui, posso me comunicar agora com o controle do player e usar tudo o que está nele. Ok, deixe-me explicar todo o processo antes de terminar este vídeo. Se você já entendeu, pode ir para a próxima lição. Eu só vou deletar este. Então, vou explicar todo o processo. Portanto, é fácil de entender. Para começar, o que fizemos foi criar essa interface de blueprint clicando com o botão direito E no blueprint, criamos a interface do blueprint. Agora, dentro dessa interface, acabamos de criar uma função chamada get player controller reference. Porque queremos obter a referência dos controladores do player. Tudo o que você precisa fazer referência, você precisa criar uma variável e definir o tipo de variável. Aqui está tudo o que você está tentando se referir. Estamos tentando fazer referência a esse controlador de jogador chamado PC dungeon Clicker É por isso que aqui no tipo de variável, eu a configurei para PC dungeon clicker Basicamente, basta procurá-lo aqui, PC dungeon Clicker, e você o encontrará assim Ok, dê um nome a ele. Acabei de chamá-lo de Player Controller. E lembre-se de compilar. Se você não compilar, ele não aparecerá aqui. Portanto, lembre-se de compilar, salvar tudo. Agora você precisa adicionar essa interface de diagrama ao controlador do player, porque é a isso que você está tentando se referir aqui Entramos nas configurações da nuvem, adicionamos a interface do blueprint Quando você fizer isso, a função aparecerá aqui à esquerda. Você abre essa função aqui dentro. Basicamente, fizemos uma autorreferência porque se você desconectar isso e compilar e tentar fazer isso aqui no modo de jogo, se clicar em jogar, não tenho certeza se isso vai me dar um erro agora Será porque estamos fazendo isso no início do jogo e isso me dará uma era. Ele dirá acesso não. Tentando ler a propriedade, obtenha a referência do controlador do jogador dentro do inimigo gerado Se eu clicar aqui, clique neste. Deixe-me minimizá-lo para mostrar se eu rolar até aqui e clicar nesse inimigo de geração A era chegou. Diz Access. Tentando ler a propriedade, obtenha a referência do controlador do player. Diz Acesso não, o que significa que não tenho nenhuma informação do que você está tentando me dar. Estou tentando dar a ele esse controlador do Player como referência. Mas não diz nada. Isso significa que não há nenhuma informação aqui. E eu não posso fazer nada com isso porque no controle do player, nas interfaces do blueprint, não conectamos esse eu Porque se estiver vazio, o motor não sabe realmente o que é esse controlador de jogo. Temos que contar isso. O controlador do player de que estou falando sou eu aqui. O controle do player. Essa aula de planta em que eu já estou agora Agora que a definimos no modo de jogo, agora podemos chamar essa interface de blueprint Mas primeiro temos que obter o controlador de player padrão a partir disso, esta referência do controlador get play. Mas, a partir da interface do blueprint , agora podemos acessar tudo a partir dela Porque lembre-se de que , no controle de jogo fizemos essa autorreferência aqui. Ele sabe do que estamos falando o controle de jogo . Ok, eu sei que é um pouco confuso para iniciantes, mas confie em mim, um conceito muito, muito simples Se você apenas praticar com ele 23 vezes, tente novamente assistir ao final do vídeo. Talvez apenas tente entender isso. Vamos fazer isso pelo menos cinco vezes neste curso, então você também verá outros exemplos, não apenas o controle de jogo, mas também veremos outros exemplos. Também vou deixar você fazer isso antes de mim, para que você também possa praticar aqui. Mas, por enquanto, terminamos. Nós conectamos isso. No entanto, você pode ver aqui que precisamos do local do spawn Precisamos gerar o inimigo neste local aqui. Em vez de criar um valor estático, como arrastar e dizer transformar e criar um valor estático, por exemplo, podemos simplesmente escrever um valor aqui Queremos saber onde está esse ponto de desova. Precisamos gerar esse inimigo. Dependendo de onde está o ponto de desova, isso é o que faremos na próxima lição 25. 4.05 Obtendo os valores de ponto de spawn: Aqui eu abri o projeto mais uma vez e agora ele está novamente me dizendo que o Nenite está ativado, mas não pode renderizar porque o projeto tem o Nani desativado em um I. E eu lembro que desativamos Nanite nas configurações do projeto agora, em vez de escrever anite aqui no console 2047 Toda vez que você fechar o projeto e abri-lo novamente, ele exibirá essa mensagem. Em vez disso, o que eu quero que você faça é entrar na pasta do seu projeto e encontrá-la nos documentos. E entrando nos Projetos Unreal, é aqui que seus projetos do Unreal Engine são salvos Então, entrando no Dungeon Clicker, eu quero que você abra a configuração e abra esta chamada Default Engine I. Dentro daqui, o que eu quero que você encontre é que eu quero que você encontre uma Projeto ativado é igual a falso aqui embaixo. Vou escrever meu código personalizado aqui em vez do comando do console. Vamos escrever isso aqui. Não é igual a zero. Isso é o que eu quero que você escreva, R é igual a zero. Vamos salvá-lo. A propósito, estou usando o Notepad plus plus Você pode usar seu editor de texto normal. Realmente importa o que você usa, basta escrever R n é igual a zero. Vamos fechá-lo. Vamos fechar esse projeto também. Deixe-me tentar novamente executar meu projeto e ver se a mensagem desapareceu. E deveria ter sumido. Não deveria estar lá. Lá vamos nós. A mensagem não vai mais aparecer. Ok, incrível. Em vez de aqui, o que queremos fazer agora é obter o valor do ponto de desova Porque lembre-se de onde paramos no modo, criamos a interface do blueprint Chamamos isso de função ou evento de geração de inimigos , em vez de chamarmos esse evento de estar dentro do controle do jogador Essa. A propósito, deixe-me aumentar novamente minha escala de interface de usuário, porque toda vez que eu fecho o motor, eu realmente tenho que aumentá-la aqui para 1,25 para que você possa ver melhor Espero não esquecer. Vamos abrir novamente. Aqui, e aqui você vê o inimigo gerado Este é o evento que chamamos do modo de jogo. Agora, o que precisamos fazer é dizer a ele onde queremos gerar esse inimigo Essa é a transformação do spawn. Como fazemos isso? Precisamos chegar onde isso está no mundo. Agora, há uma função que você precisa usar e ela é chamada de ator da classe. Ator de classe é uma função que obtém algo que já foi gerado no mundo Por exemplo, existe esse ponto de desova inimigo que podemos obter. Se você abrir esta opção, obtenha o ator da classe, se clicar aqui e pesquisar por spawn, verá que pode obter o ponto de spawpoint inimigo da BP Ou você pode obter a base de spawpoint da BP e assim por diante. Então você pode obter essas plantas. Se você obtiver uma planta que não é gerada, por exemplo, digamos que eu chame BP de noite, esta é a noite que criamos Digamos que eu escolha o ator da noite de aula e eu jogue o jogo. Isso vai te dar um erro. Isso ocorre porque a noite é uma lagoa no nível. Essas são todas as coisas que temos em nosso nível. Os jogadores iniciam o volume pós-processamento, o mapa de blocos e o ponto de spawpoint do inimigo O que podemos fazer é procurar um ponto de spa inimigo. Este é um ponto de spa inimigo. Estamos contratando esse ator. O que podemos fazer com esse? Na verdade, vamos colocá-lo dentro do início do jogo. Antes de fazermos tudo isso aqui, deixe-me arrastar até aqui e vou colocar esse aqui embaixo assim e vou conectá-lo. O que queremos fazer aqui é clicar com o botão direito do mouse e promover isso para uma variável. Vamos chamá-lo de ponto de desova do inimigo. Agora nós o armazenamos em uma variável e vamos conectá-lo. Agora podemos usar essa variável aqui. Vamos pegar essa variável, arrastá-la até aqui e clicar em Obter. Ou você pode segurar o controle e arrastá-lo e soltá-lo. Ele o receberá automaticamente. Você também pode segurar Alt, segurar Alt e arrastar. E ele definirá essa variável em vez de apenas arrastar e clicar em obter. E defina ou segure o controle e arraste ou mantenha pressionada a tecla alt e arraste. Agora temos esse ponto de rotação do inimigo. E digamos novamente, se você não sabe como a função é chamada, basta pesquisar a palavra que eu quero para obter a transformação. Ou você obtém a localização dessa variável, desse ator, obtém a localização do ator. Você pode usar isso, você pode direcionar a partir daqui, você pode ver que não consegue realmente conectá-los. Mas ele vai converter isso para você no motor real vai converter isso para você. Agora, não está totalmente correto assim. Você pode direcionar a partir daqui e dizer transformar. E quando você faz uma transformação, você decompõe essa transformação. Porque se você não sabe o que é uma transformação, isso é o que é uma transformação. Na verdade, você pode ver isso aqui no painel de detalhes. Quando você clica em algo, você vê a localização, rotação e a escala de um item. Essa é a transformação. A transformação pode ser dividida em localização, rotação e escala. Essa cor laranja é a transformação. Você pode dividi-lo assim. E você pode conectar a localização do Acta aqui. E funcionará muito bem. No entanto, apenas para torná-lo mais curto, você pode realmente excluí-lo. E você pode arrastar aqui e pesquisar por transformação, e você também pode obter a transformação Acta Agora, às vezes você precisa ter cuidado porque ele está obtendo a localização, a rotação e a escala, e está afetando o inimigo com esses valores. Se você clicar nesse objeto, ele obterá a localização, o que é bom. Eu quero desovar aqui. Também está obtendo a rotação que é 000, o que é bom. Imagine se esse ato tivesse essa rotação, digamos que tivesse essa rotação aleatória. Isso será aplicado ao seu personagem. Tenha cuidado ao usar get actor transform. Às vezes, você tem um conjunto de rotação como esse para esse ativo que não deseja que seja aplicado ao seu personagem. Nesse caso, você deve obter um local sozinho. Você pode usar a rotação sozinha se não quiser a rotação a partir daqui e, digamos make transform, e você pode usar a localização em vez disso. E então você pode simplesmente deixar a rotação em 000. Mas, no nosso caso, a escala é boa. A escala de caracteres também é uma. A rotação é 000, o que é bom. E este é o local que queremos que usar o get act para transformar esteja perfeitamente correto, neste caso aqui. Agora nós entendemos. Vamos compilar e dar a ele um inimigo, por exemplo, o Vamos ver se o Orc realmente aparece, isso é aqui, no jogo Fc Você pode ver que o Orc está realmente desovando. Incrível. Está funcionando. Agora podemos desovar aqui. Vamos, por exemplo, escolher a revista Skeleton. Se eu clicar em jogar, acho que, na verdade, em vez de clicar em Jogar e sempre minimizar assim para ver se funciona, eu gosto de jogar aqui Vamos ver o jogo como uma nova janela do editor, ela aparece para mim e aparece no meu segundo monitor Mas basicamente isso está aqui, esse é o esqueleto, e está funcionando muito bem Ok, a desova está funcionando. Agora, o que precisamos definir, qual inimigo queremos gerar. Agora, esse é um pouco mais complexo porque, como eu disse antes, cada nível do jogo clicker tem seu próprio nível um tem, por exemplo, esse cara aqui, o nível dois tem esse cara. Temos que definir qual nível tem qual inimigo. Na verdade, não podemos simplesmente especificar um inimigo específico aqui. Para fazer isso, precisamos aprender algumas coisas. Estruturas, dados, tabelas, bibliotecas. Mas será muito divertido e também poderá ser aplicado aos seus jogos futuros. Mantenha-se focado nas próximas aulas. Coisas muito, muito importantes estão chegando. Vamos passar para a próxima. 26. 4.06 Introdução às estruturas: Tudo bem, bem-vindo. E agora vamos ter uma introdução às estruturas. Agora, se você já sabe o que é uma estrutura, pode pular para a próxima lição E se você não sabe o que é uma estrutura, vamos começar aqui. Vamos até os inimigos. Agora, para os inimigos, vamos para a base inimiga. Lembre-se, na base inimiga, se eu criar algo, se eu criar uma variável e dizer saúde do inimigo, por exemplo, o tipo de variável que definimos é um flutuador Como um float é um valor numérico com uma casa decimal se eu compilar, você pode vê-lo aqui Quando eu clico na variável saúde do inimigo. E eu posso configurá-lo para, por exemplo, 25,6 seja o que for, a saúde do inimigo Agora eu também posso fazer um novo. Vamos, por exemplo, chamá-lo de tipo inimigo. O tipo de inimigo que temos que lidar com esse. Podemos simplesmente defini-lo com um nome, qualquer que seja. Podemos ter muitas variáveis. Podemos ter a saúde do inimigo, o tipo de inimigo, o nome do inimigo, a animação de inatividade do inimigo, a animação da morte do inimigo Você pode ver que podemos ter muitas variáveis aqui embaixo para o inimigo que define esse inimigo. No entanto, para mantê-lo mais limpo, usamos estruturas. Em vez de preencher tudo isso com variáveis, vamos tentar usar estruturas. Deixe-me deletar esse. E exclua este também. Compile, deixe-me minimizar isso. Vamos até a pasta de plantas. Clique com o botão direito do mouse e crie uma nova pasta. Vamos chamar isso de Estruturas. Vamos até aqui, clique com o botão direito, vá para a planta e você verá essa chamada estrutura Vá em frente e crie, vou chamá-lo de ST ou estrutura. Vamos chamá-la de informação do inimigo. Essa estrutura contém dados sobre esse inimigo. Vamos abri-lo. Ok, aqui estamos dentro de uma estrutura. A única coisa que fazemos é criar variáveis dentro daqui. Aqui nas informações do inimigo, podemos especificar o nome do inimigo, podemos especificar a saúde do inimigo, podemos especificar em que nível ele aparece e assim por diante Podemos criar muitas variáveis que definem esse inimigo aqui. Em vez de ter todas as variáveis aqui embaixo, podemos realmente tê-las aqui. E é muito melhor usar assim, está mais organizado agora. Na verdade, isso é exatamente o que é uma variável ou estrutura e você pode ver os valores padrão ou as variáveis que você criou. Você pode vê-los aqui. Muito simples. Tudo isso é estrutura de dados , contém algumas variáveis que você pode usar. Nesse caso, estamos definindo os dados do inimigo, as informações do inimigo. Vamos passar para a próxima lição e preencher as informações do inimigo. 27. 4.07 Informações de nível e estruturas de informação de inimigos: Tudo bem, então, para obter informações sobre o inimigo, vamos definir algumas variáveis que usaremos para os inimigos. O primeiro é o nome do inimigo. Para este, vou configurá-lo como uma string. Agora, se você não sabe a diferença entre uma string e um texto, se você selecionar uma string e clicar em Salvar e acessar os valores padrão, verá que uma string é basicamente uma linha de texto. Assim, podemos escrever o nome do inimigo. Mas um texto também é uma linha de texto em que você pode escrever o nome do inimigo. Então, qual é a diferença? A diferença é que um texto é localizável e você também pode ver que, ao passar o mouse sobre ele, ele diz uma sequência de texto localizável A localização significa que você pode traduzir isso para diferentes idiomas se quiser que seu jogo seja em alemão ou em chinês, japonês, russo, qualquer coisa Você pode traduzir seu jogo se tiver seu diálogo ou nome de personagem feito com uma variável de texto. Agora, se o nome do personagem for feito com uma variável de string, ele não poderá ser traduzido. Talvez você diga: por que não usamos texto como para tudo, já que podemos traduzi-lo e tudo ficará bem. Isso ocorre porque usa mais memória do que uma string. Usamos string se você realmente não precisa localizar o que está fazendo Não preciso traduzir o nome do personagem. Vou apenas mantê-lo como uma corda. Também não quero traduzir meu jogo. Se você quiser traduzi-lo, por exemplo, se o nome do seu personagem for Skeleton O Skeleton pode ser traduzido para vários idiomas. Se você quiser traduzir isso, você deve selecionar o texto em vez disso. Apenas tenha isso em mente. O que quer que você esteja fazendo como texto, você quer traduzi-lo para outro idioma ou quer mantê-lo no mesmo idioma em que você está codificando este jogo Eu só vou escolher uma corda. Eu não quero traduzir nada. O que também queremos adicionar é a classe. A classe inimiga é a base P M. Então vá em frente e pesquise a base PPN M e selecione a referência da classe Agora, se você realmente não sabe o que é uma referência de classe, se você abrir o modo de jogo, mais uma vez, isso é o que geramos é uma referência de classe de ator Você pode ver isso se passar o mouse sobre ele. Então essa é a referência da classe, precisamos dela para que possamos definir a referência da classe dos inimigos e inserir essas informações aqui. A próxima coisa que precisamos é do tipo de inimigo. Com que tipo de inimigo estamos lidando? É um inimigo normal? É um chefe? Podemos adicionar um mecânico de ônibus ao jogo. Em vez de ter todos como inimigos normais, também podemos ter um inimigo de ônibus. Vamos criar um tipo de inimigo. Agora, para o tipo de inimigo, preciso usar algo chamado enumerador, que não sabemos o que é Vamos deixar isso assim por enquanto, e eu posso te ensinar na próxima lição. Vamos continuar. Por enquanto, vamos melhorar a saúde do inimigo. E este é simplesmente um carro alegórico. E um flutuador novamente é um número com uma casa decimal. Vamos clicar no sinal de mais novamente. E queremos a animação ociosa. Animação inativa para esse personagem. Isso é simplesmente um flip book. Lembre-se de que um flip book é uma versão animada desse personagem aqui, escolhendo o flip book de papel Vamos fazer um novo. Novamente, queremos a animação de sucesso. É novamente um flip book. Vamos adicionar um novo. Também queremos a animação da morte. Este é um flip book. Ok, esses são todos os dados que precisamos para o inimigo. E, na verdade, terminamos aqui. Agora, antes de terminarmos, vamos também fazer a outra estrutura chamada informação de nível. Se eu for até a estrutura, clicar com o botão direito do mouse e criar uma nova estrutura no blueprint em uma nova estrutura Vamos chamar isso de Informações de Nível. Ok, vamos abrir as informações desse nível. Agora, o que eu precisava fazer nas informações do nível definir basicamente qual inimigo aparece em qual nível Básico, aqui precisamos do nível , que é apenas um número. É um número inteiro, agora não é um número flutuante, não é um número com casa decimal Como o nível é o nível um, o nível dois, nível três, não precisamos realmente de uma casa decimal aqui Em vez disso, você pode usar um número inteiro que é um número sem casa decimal, como você pode ver aqui Usando um número inteiro como nível e, em seguida, crie um novo. E precisamos do nome do inimigo. O nome do inimigo é novamente uma string. Em que nível ou qual inimigo aparece em qual nível, temos que escrever o nível Por exemplo, o nível um é o nível dois é o orcam, nível três é o guerreiro e assim por diante Temos que definir isso mais tarde. Agora temos a estrutura para isso. Temos a estrutura para as informações do nível. Temos a estrutura para as informações do inimigo. Agora, na próxima lição, vamos aprender algo sobre enumeração para que possamos acabar com esse tipo de inimigo aqui 28. 4.08 Criando o tipo de inimigo Enum: Tudo bem, então vamos dar uma olhada nas enumerações. Porque aqui na estrutura. Então, se eu voltar às estruturas e abrir as informações do inimigo, criamos uma chamada tipo de inimigo. Precisamos definir o que é e criar uma enumeração Agora podemos clicar aqui para o tipo de inimigo e fazer uma sequência de caracteres. Agora, aqui dentro, podemos definir se esse inimigo é um inimigo normal ou se esse inimigo é um inimigo no jogo. Eu quero ter inimigos que sejam normais e inimigos que sejam chefes. Está bem? Em vez de fazer uma string e escrevê-la aqui, melhor criar uma enumeração. Vamos ver o que é. Vamos para Blueprints. Clique com o botão direito, crie uma nova pasta, chame-a de Oms. Vamos abri-lo aqui. Vamos clicar com o botão direito do mouse para acessar Blueprints. E você tem essa chamada enumeração. Vá em frente e clique nele. Vamos chamá-lo de tipo inimigo. Vamos abri-lo. O Enumeration, muito simples, é apenas uma lista de qualquer coisa que você queira fazer Pode ser uma lista de mantimentos, por exemplo, tomates, por exemplo, tomates , cola, ketch up, qualquer coisa Pode ser uma lista de qualquer coisa adicionando um item da lista e você pode escrever qualquer coisa dentro daqui. Também pode ser uma lista de armas que você está fazendo em um jogo de tiro em primeira pessoa Pode ser AK 47, 41, pode ser Deagle e tudo o que você quiser fazer em uma enumeração é simplesmente uma Nesse caso, quero fazer uma lista do inimigo ou do tipo de inimigo para nossos inimigos. Temos inimigos normais. Se eu clicar aqui novamente e tivermos inimigos chefes, você também poderá criar outros tipos se tiver um jogo maior, se já tiver uma ideia para o jogo. Por exemplo, você pode ter inimigos lendários, loops, lendários Você também pode ter inimigos épicos e assim por diante. Então você pode ter mais inimigos, mas para mim, estou apenas tendo inimigos normais e inimigos chefes que podemos salvar. Agora vamos fechar essa lista. Agora, aqui eu posso procurá-lo no tipo. Se eu clicar no tipo de inimigo, pesquisar pelo tipo de inimigo, esta é minha enumeração e posso clicar nela e pesquisar pelo tipo de inimigo, esta é minha enumeração e posso clicar nela e salvar. Agora temos esse tipo de inimigo e, se você clicar nos valores padrão, pode ver aqui que é melhor do que uma string, porque agora você tem uma lista da qual pode selecionar, o que é muito legal. É muito melhor do que digitar a coisa o tempo todo Agora podemos selecioná-lo na lista se for um chefe ou se for um chefe normal. Ok, nós realmente não precisamos definir nada aqui, porque para cada inimigo, todos eles terão seu próprio conjunto de informações. Para tudo isso, não precisamos nos concentrar nos valores padrão por enquanto. Vá em frente e salve tudo. E isso foi tudo para as enumerações. Vamos passar para a próxima lição. 29. 4.09 Introdução às tabelas de dados: Tudo bem, então antes de continuarmos, quero apresentar a vocês as tabelas de dados. Agora que criamos nossas estruturas, também precisamos criar tabelas de dados. Se eu for para a pasta de plantas, botão direito do mouse em criar uma nova pasta e chamo essa pasta de dados de tabelas Eu clico aqui, clique com o botão direito. Agora, as tabelas de dados não estão nas plantas. Na verdade, está aqui embaixo nos diversos e você pode encontrá-lo aqui, tabela de dados Você clica nele e seleciona de qual estrutura está falando. Eu só quero criar um para as informações do meu inimigo, também precisamos criar um para as informações do nível. Mas vamos criar um para as informações do inimigo. Por enquanto, clique em. Ok, vamos chamá-lo, por exemplo, de DT, minha tabela de dados de informações. Minhas informações. E vamos abri-lo. Ok, então o que é uma tabela de dados? Uma tabela de dados é aquela que realmente define cada inimigo. Por exemplo, a animação inativa, a animação de sucesso e assim por diante Então, criamos uma estrutura, mas cada inimigo tem seus próprios valores dessas variáveis na tabela de dados. Eu posso clicar em D aqui na linha. Você pode ver que esta é a nova linha aqui. E você pode até mesmo alterar o nome da linha, por exemplo, o nome da linha, você pode simplesmente chamá-la uma ou do que quiser. Por exemplo, para o primeiro personagem, se eu for para personagens ativos, o primeiro será a noite. O que eu posso fazer, por exemplo, é escrever selecionar a turma da noite aqui. E eu posso selecionar qual tipo de inimigo é a noite. É um inimigo normal. Quanto ele tem? Digamos que tenha 100% de saúde. Agora eu tenho que selecionar o Edlin Imation para isso. Eu tenho que selecionar a animação Hid para ela, e também tenho que selecionar a animação da morte para ela Agora eu tenho todas essas informações e posso clicar no sinal de mais novamente. Para o próximo, quero, por exemplo, definir meu Or. Eu posso escrever que esse cara se chama Orc. É a classe BP Or. Por exemplo, um chefe tem 500 pontos de vida e essas são todas as animações para ele e assim por diante Portanto, cada inimigo tem seus próprios valores e você pode usá-los agora para torná-lo muito mais rápido. Em vez de fazer isso no motor, podemos fazer isso dentro do Google Sheets. Dentro de uma planilha do Google, podemos fazer isso muito mais rápido. E também pessoas que não são desenvolvedoras de jogos também podem trabalhar lá, por exemplo, designers de jogos. Vamos passar para a próxima lição e dar uma olhada em como podemos fazer isso no Google Sheets. 30. 4.10 Tabelas de dados de informações de nível e de inimigos: Tudo bem, vamos abrir o Google dentro do Google, logo dentro do seu drive. E você pode encontrá-lo aqui no drive. Basta entrar no seu drive, clicar com o botão direito do mouse em qualquer lugar, fazer novas dobras ou qualquer outra coisa Mas crie um Google Sheets aqui e crie um. Vou chamar isso de uma mesa iluminada ou qualquer outra coisa. Você pode chamá-lo do que quiser. Ok, aqui eu gosto de clicar em Controle para selecionar tudo. Basta arrastar as colunas até aqui que eu tenha mais espaço para trabalhar e controlar uma. Selecione tudo e faça com que seja outra fonte na qual Selecione tudo e faça eu possa clicar aqui, linha horizontal, meio, esta e esta. Eu só gostaria de começar com isso selecionar a parte superior e clicar em Negrito. Agora estou pronto para usar meu documento. Agora, tudo isso é opcional. Você realmente não precisa fazer tudo isso. O que eu preciso fazer aqui primeiro é escrever um documento de identidade. Precisamos de um ID porque no Unreal Engine, você precisa ter um ID Você realmente não pode, este é o ID, o nome de Ron, você realmente não pode usar esta planilha do Google. Se você não tiver um documento de identidade. Isso é necessário. Precisamos escrever todas as variáveis da nossa estrutura. Se eu voltar e abrir as informações do meu inimigo, é isso que preciso escrever. Preciso escrever o nome, tipo de inimigo. Vamos voltar aqui. Tipo de inimigo, você tem que escrevê-lo especificamente assim. Você não pode escrever isso de forma diferente. Você tem que escrevê-lo especificamente como você o escreveu. Dentro daqui. Ocioso, bata nela. Isso é errado, saúde ociosa e a última é a morte. OK. Agora temos isso. Agora podemos definir as informações aqui embaixo. O primeiro que eu tenho, eu só pensei isso em minha mente. O primeiro que eu quero escrever aqui é o Or. O segundo é o ladino. Agora, você pode ter esses inimigos em qualquer sequência que desejar. Você não precisa ter a sequência como eu, mas eu quero tê-los assim ou Sam, nós temos o Mago. Então temos o Skeleton. Então temos o Skeleton, Roe, Skeleton Warrior como este e Skeleton Mag Então temos o Roe and the Night. Temos 11 personagens que estão todos aqui. Você não precisa tê-lo na mesma sequência. Mas pensei que seria uma sequência, talvez para o ID. Eu apenas copio e colo isso aqui assim porque não é muito importante. O ID é simplesmente que ele precisa estar lá para funcionar. Precisamos apenas copiar e colar qualquer que seja o nome da classe. Temos que definir o que é a classe. Agora, como obtemos essa classe base inimiga? Porque precisamos, você clica nisso. Novamente, temos que definir essa classe aqui. O que você pode fazer é usar essa tabela de dados de informações do inimigo aqui. Basta criar uma nova linha aqui. E o que você pode fazer é clicar, o primeiro é o Orc Para mim, posso selecionar o Orc, posso escrever, clicar aqui e escrever uma cópia. Ou clique em Copiar. Agora posso abrir minha tabela de dados e clicar no controle V no meu teclado para colar. E aqui está. Vou apenas torná-lo um pouco maior para que você possa ver assim. Então, agora nós o temos aqui dentro. Agora, o que você pode fazer é o próximo é o Or Roe. Posso selecionar a Roe novamente, clicar com o botão direito do mouse em copiar ou o que você pode fazer é pressionar a tecla Shift e clicar com o botão direito do mouse para copiá-la. Então eu posso colar aqui, sem mais nem menos. Ou o que você pode fazer é simplesmente copiar este. Cole aqui e mude isso. Ou para Shaman, para este também lembre-se de mudar aqui ou Shaman, você pode fazer as duas coisas Agora, é muito mais rápido selecionar Aria, por exemplo, segurar a selecionar Aria, por exemplo, tecla Shift e clicar com o botão direito do mouse para copiar o controle V e colar aqui. E faça isso para o mago também, assim e assim por diante. Eu só vou fazer isso por eles. Você pode fazer tudo isso sozinho enquanto pratica. Agora, para o tipo de inimigo, temos inimigos normais ou de ônibus. Isso é normal e vou copiar e colar isso aqui. E acho que o feiticeiro, podemos fazer um chefe assim. Eles podem selecionar quais são inimigos normais e os inimigos chefes lhes dão saúde. Para a saúde, eu gostaria de fazer com que uma fórmula escrita, por exemplo, fosse igual. Vamos começar com 100 para este. Na verdade, basta escrever 100 para este. Não precisamos de uma fórmula para a primeira, mas se a segunda for igual essa, você pode clicar aqui Multiplicado por 1,2, ele calculará isso automaticamente E eu posso clicar nele e arrastá-lo até o final. Posso selecioná-lo aqui e clicar neste botão para remover as casas decimais Assim, você também pode aumentar a saúde. Você pode multiplicar por 1,5, por exemplo, você pode arrastar para baixo aqui, temos muito mais saúde, assim Por exemplo, para a animação, como antes, para a máquina Adline, você pode selecionar a máquina de contorno Ou vamos realmente fazer isso aqui em vez disso, para o Adline Vamos ver, o primeiro foi o, se eu fechar isso e encontrar aquele, você pode clicar com o botão direito do mouse e copiar a referência. Nesta referência de cópia, eu volto e clico no controle V e colo aqui. Para esses, talvez você possa torná-los um pouco maiores assim. Aqui está. Agora, para ver a animação de sucesso novamente, posso clicar com o botão direito do mouse na minha referência de sucesso e copiar. Posso colá-lo aqui para a morte, posso clicar com o botão direito do mouse em copiar referência. Então eu posso colá-lo aqui. Agora eu vou mostrar para você também aqui. E eu vou fazer tudo isso sozinho. Aqui, Rogue, posso clicar em copiar referências. Clique com o botão direito do mouse em, clique em um, cole aqui. E clique com o botão direito no Rogue. Copie a referência e cole-a na última. É assim que você adiciona tudo isso e novamente, ou a classe vai até a tabela de dados e copia a classe. Ou você pode basicamente mudar essa parte aqui para o nome do personagem e definir se ele é um inimigo normal ou chefe. Tudo bem, então aqui eu terminei minha tabela de dados. Todas as informações estão aqui, aqui embaixo. Eu só gostaria de dar um nome a ele. Vamos chamá-lo de DT me info. Vamos também criar uma nova tabela de dados. Eu clico no sinal positivo aqui embaixo nas planilhas e faço uma nova tabela de dados. Na verdade, vamos deletar esse. Deixe-me duplicá-lo para que eu não precise formatá-lo novamente com a fonte e assim por diante Clique com o botão direito, este é duplicado e vamos dar uma informação de nível de DT Para isso, vou deletar tudo, controlar um clique em deletar. Para este, precisamos do ID, também precisamos do nível. Lembre-se de que você sempre pode voltar à sua estrutura e abrir as informações do nível. Precisamos do nível e do nome do inimigo. Se abrirmos aqui, precisamos do nível e do nome do inimigo. Eu só vou torná-lo menor aqui, não preciso de todo esse espaço. E tornando-o menor dessa forma também para o ID. Agora vou copiar e colar os níveis aqui. Nível 1234, temos 11 inimigos. Vou clicar e arrastar isso para baixo até 11. Vou apenas copiar e colar isso aqui para o nome do inimigo. Basicamente, podemos acessar as informações do inimigo, copiar tudo isso e colar aqui também. Temos que encontrar no nível um a extensão no nível dois, a geração do rolo. Quando o E aparece, temos que encontrar a saúde do bandido, o tipo de inimigo destruído, a animação de Adle e todas essas Aqui, estamos usando isso para escolher qual inimigo gerar em um nível Quando o inimigo aparece, temos as informações sobre esse inimigo que podemos usar Vá em frente e simplesmente o salvamento automático não pode realmente salvar aqui. Vamos continuar e clicar em Download. E faça o download como um arquivo CSV, baixe as informações do inimigo e acesse também as informações do nível Clique no arquivo e baixe-o como um arquivo CSV. Agora, quando você abre sua pasta de downloads, aqui estão elas. Vou renomeá-los, chama-se apenas T Level Info e também renomear este para T Enemy Info Antes de fazermos isso, certifique-se de que dentro do motor, se eu voltar e fechar tudo isso, certifique-se de que nas tabelas de dados você tenha as informações do inimigo e que elas estejam vazias. Vou deletar esse. Clique em salvar. Também preciso criar um para as informações do nível. Clique com o botão direito. Vá para a tabela de dados diversos, selecione as informações do nível, clique em OK e chame-as de Informações clique em OK e chame-as Eu os tenho, e o que você precisa fazer é clicar e arrastar os dois até aqui e soltá-los, e ele deve importá-los com sucesso. Agora, se você criou uma era um dos nomes, por exemplo, se você fez uma era o nome do inimigo aqui, por exemplo, digamos que você escreveu o nome do inimigo sem um E. Isso lhe dirá que há uma era na sua tabela de dados. E não se preocupe, você pode basicamente corrigi-lo aqui, baixá-lo novamente e simplesmente clicar e arrastá-lo até aqui. Agora, ao abrir a tabela de dados de informações do inimigo, você tem todas as informações sobre cada personagem, quanta saúde eles têm, o tipo de inimigo e todas as suas animações aqui também 31. 4.11 Introdução às bibliotecas: Tudo bem, agora terminamos as tabelas de dados. E vamos dar uma olhada nas bibliotecas. Esta é a etapa final antes de terminarmos tudo e gerarmos o inimigo Então, vamos dar uma olhada agora e criar uma nova pasta. Vamos chamar isso de bibliotecas. Se eu conseguir soletrar bibliotecas novamente assim, vamos entrar nessa pasta agora Vamos clicar com o botão direito do mouse e acessar o Blueprint. E você vê essa chamada funções de blueprint e biblioteca de macros de blueprint Agora estamos trabalhando com funções. Vamos apenas criar uma biblioteca de funções de blueprint. E vou chamá-la de biblioteca de funções BP, porque geralmente tenho apenas uma no meu jogo Então, vou chamá-la de biblioteca de funções. Agora, abra-o dentro desta biblioteca. Você pode ver que basicamente, como o nome diz, é uma biblioteca de funções. Assim, você pode criar muitas funções aqui. A vantagem de uma biblioteca de funções são as funções que você cria aqui. Você pode usá-lo globalmente em todos os projetos. Vamos criar um para nos divertir. Por exemplo, vamos chamar, por exemplo, função get health test. Não vamos usá-lo, mas se eu clicar em Compilar Agora, se eu minimizar isso e abrir outro plano, por exemplo, vamos abrir o modo de jogo Dentro daqui, eu posso escrever, clicar e dizer Get Health. Aqui você pode ver que é da minha biblioteca de funções. Não precisamos criar interfaces de blueprint e qualquer outra coisa. Podemos simplesmente escrever, clicar em Obter saúde, podemos usar essa função. Agora, você pode ficar tentado a criar todas as suas funções aqui Porque talvez você esteja pensando: por que estou criando interfaces de blueprint e as chamando Por que eu não os crio dentro de uma biblioteca de funções? Isso ocorre porque o jogo ficará mais lento. Conforme pesquisei, seu jogo ficará mais lento se sua biblioteca de funções for muito grande. Use-o sempre que fizer sentido. Não basta adicionar funções aqui, porque se for muito grande, seu jogo também ficará um pouco mais lento Basta usá-lo sempre que fizer sentido. O que eu costumo fazer é usá-lo sempre que faço tabelas de dados, porque preciso usá-lo em muitos projetos Talvez você possa pensar nisso assim. Quando você tem uma função que precisa ser usada em quase todos os esquemas. Por exemplo, obter as informações dos inimigos aqui. Então, é melhor criá-lo dentro de uma biblioteca de funções para que você possa acessá-lo facilmente em cada blueprint Eu geralmente o uso sempre que crio estruturas e tabelas de dados, e preciso obter essas informações, eu as crio dentro das bibliotecas de funções. Vamos continuar e excluir isso. Vamos compilar e salvar tudo. E agora estamos prontos para passar para a próxima lição. 32. 4.12 Criando as funções de biblioteca: Vamos continuar e criar as bibliotecas de funções. Vamos clicar em Anúncio e criar uma função aqui. O primeiro que vamos criar é para as informações do inimigo. Para esta, vou dizer na verdade, antes que eu esqueça novamente, deixe-me clicar aqui na ferramenta depuração que é refletora, torne-a Podemos ver melhor assim aqui dentro. Como vou chamá-lo, vou chamá-lo de obter informações sobre o inimigo. E eu vou criar uma nova também, uma nova função chamada get level info. Precisamos desses dois. Vamos começar com o primeiro. O que precisamos fazer é clicar com o botão direito do mouse e dizer pegue uma mesa. Você vê esse aqui embaixo. Obtenha a linha da tabela de dados. Essa é a função que estamos tentando usar. Estamos tentando obter uma linha da tabela de dados a partir de um nome aqui para que possamos usar as informações. Vamos criá-lo e será muito melhor entendê-lo quando terminarmos. Agora vamos ver a tabela de dados, estamos falando sobre essa, neste caso, são as informações do inimigo. Vamos selecionar as informações de NM para o nome dessa linha. Agora, antes de conectá-lo aqui, geralmente gosto de clicar com o botão direito do mouse e dizer: na verdade, vamos adicionar uma string primeiro aqui. Adicionando uma entrada e uma string. Vá em frente e faça isso. Aqui, precisamos inserir o nome do inimigo. Porque se você voltar para sua tabela de dados, esta, esses são os nomes dos inimigos. Precisamos inserir o nome de um inimigo. A partir desse nome, ele vai extrair essa informação, essa linha aqui. Vamos voltar daqui. O que eu gosto de fazer antes de conectá-lo é usar a função de substituição . Com uma função de substituição, o que isso faz está aqui no formulário, você escreverá um espaço como este. Você tem um pequeno espaço aqui, como você pode ver nos dois. Você não faz nada. Você tem um espaço aqui em cima e não tem nada aqui. O que isso faz é levar esse nome aqui se você tiver um espaço, porque, como você pode ver no nome da linha, você não pode ter um espaço. Nal Engine não aceitará que você tenha um espaço no nome da linha. E isso é o que é. Esse é o nome da linha. Você precisa extrair informações se der um nome de inimigo e o nome do inimigo tiver um espaço posteriormente. Vou mostrar como fazer isso mais tarde. Se tiver um espaço , não vai ler, vai ceder O que eu gosto de fazer é o nome do inimigo, gostaria de remover o espaço antes de fazer qualquer coisa. Então eu posso simplesmente arrastar isso para aqui e ele converterá essa string em uma variável de nome. Podemos conectar isso, então podemos arrastar aqui e dizer return porque precisamos um nó de retorno para essa função. Para o nó de retorno, ele produzirá esses dados de informações do inimigo. Vamos chamar isso de informação do inimigo e compilar. E agora terminamos com este. Isso é o que parece. Pegamos o nome do inimigo e extraímos essa informação. Por exemplo, digamos que o nome do inimigo seja Skeleton Rogue, que removerá o espaço para que ele realmente possa ser lido a partir Em seguida, ele obterá todas essas informações para você e as conectará aqui para que você possa usá-las. Vamos fazer isso também para obter informações sobre o nível. Agora, para obter as informações do nível, você pode fazer isso sozinho se quiser praticar mais. Vamos fazer isso juntos se você precisar de mais prática. Ok, aqui, vamos clicar com o botão direito do mouse, obter uma linha da tabela apenas para as informações do nível. Se você voltar às informações do nível, as informações do nível serão números. Precisamos de um número em vez de uma string. Por aqui eu vou dizer mais. E vamos pegar um número inteiro aqui. Para o número inteiro, digamos que um nível. Vamos conectá-lo. Agora, para este, não precisamos realmente substituir tudo isso porque é apenas um número. E podemos simplesmente arrastar isso para o nome. Agora, ele não o converte automaticamente para nós, porque ele converte apenas a string Vamos fazer duas cordas e selecionar isso. E então vá em frente e arraste-o para dentro e ele o converterá para você. Novamente, crie um nó de retorno. Antes de fazermos qualquer coisa, você pode ver que é cinza. Isso ocorre porque não selecionamos nada aqui. Vamos selecionar as informações do nível e inseri-las aqui. E vamos chamar isso de informação de nível. Vamos compilar e salvar tudo. Agora, se tentarmos usá-los no modo de jogo, por exemplo, vamos excluir get health. Este era antigo para as informações do inimigo que podemos escrever para obter informações sobre o inimigo. E aqui você pode ver isso. Agora temos essa função que podemos usar e temos as informações do inimigo. Basicamente, você pode arrastar a partir daqui e dizer pausa. Você está dividindo essa estrutura em vários pinos, que você pode ver aqui Essas são todas as variáveis que você criou dentro da sua estrutura aqui. Essas são todas as variáveis que você criou agora, agora elas podem ser usadas por você. Você pode ter o nome do inimigo, a classe, o tipo de inimigo, a saúde do inimigo e assim por diante. Aqui, basicamente, você está obtendo informações, não precisa desses pinos de execução Como você pode ver, algumas das funções são verdes. Eles não são azuis. Eles são verdes. Isso ocorre porque eles estão basicamente obtendo informações. Este está fazendo com que os atores se transformem. Se você clicar aqui, você pode ver a Acta mais próxima Na verdade, não está definindo nenhuma informação , está apenas obtendo informações para você. Quando você obtém informações, não precisa desses pinos de execução Vamos voltar para a biblioteca de funções. Vamos clicar nas informações do inimigo e definir essa como pura. Vamos clicar também nas informações do nível e configurá-las como puras. Agora vamos voltar, e aqui você pode ver como transformamos em uma função verde. Basicamente, estamos apenas obtendo informações. Estamos recebendo as informações do inimigo e elas precisam do nome do inimigo. Então, quando inserimos o nome do inimigo, por exemplo, mago esqueleto, como você pode ver, eu escrevo um espaço aqui Eu posso escrevê-lo normalmente, Skeleton Mage aqui dentro Isso removerá o espaço automaticamente, pois adicionamos um substituto. Se você simplesmente escrever assim sem um espaço, isso realmente não importa. Ele não encontra nenhum espaço. Isso simplesmente vai continuar. É uma preferência, mas eu gostaria de escrever os nomes totalmente assim normalmente. Então você pode escrever a partir daqui, escrever um intervalo e agora você tem as informações sobre esses inimigos. É assim que você o usa. A mesma coisa com as informações do nível. Se você disser obter informações de nível, é você que insere um nível, por exemplo, nível três, e quebra essas informações. E agora você sabe que, a partir do nível três, você sabe qual inimigo vai aparecer Porque em sua tabela de dados no nível três, você disse que o autômano deveria aparecer Agora você sabe que o auctoman deve aparecer. E você pode basicamente conectá-lo aqui, agora você pode ver como conectá-los. Mas, por enquanto, vamos deletar isso. Vamos compilar e continuar com a próxima lição. 33. 4.13 Adicionando os nomes dos inimigos: Tudo bem, agora precisamos adicionar os nomes dos inimigos, porque precisamos desses nomes para extrair informações da tabela de dados de informações do inimigo dentro das bibliotecas que acabamos de criar aqui. Mas precisamos inserir os nomes dos inimigos, precisamos adicionar os nomes de cada inimigo. A maneira de fazer isso é voltando para os inimigos e aqui na base inimiga. Vamos abrir isso. Abra o editor de plantas completo aqui. Vamos criar uma variável chamada nome, por exemplo, ou você pode chamá-la de nome do inimigo. Isso é bom. Eu vou fazer disso uma corda. Vá em frente e compile E lembre-se, quando você cria uma variável dentro da base inimiga, todos eles são filhos da base inimiga. Quando você cria uma variável dentro daqui, elas também serão criadas para todas elas. Vamos abrir o primeiro. Abra o editor de blueprint completo e, dentro dos padrões da classe Vamos ver aqui os padrões das classes. Se rolarmos até aqui, você poderá ver a variável de nome que criamos. Agora você pode dar um nome a esse personagem. Por exemplo, vamos ligar para isso uma noite. Agora vamos abrir o próximo. É o Orc. Em vez de abrir o editor de plantas completo, você também pode fazer isso aqui embaixo, mostrando o painel de detalhes Este é o Orc, o próximo é o Ladino, o próximo é o Xamã, e então temos Então temos o feitiço de ladino. Correto. Agora, se você soletrar de forma errada, não será possível extrair as informações da tabela de dados Às vezes, quando algo não está funcionando , não está extraindo informações Apenas certifique-se de ter escrito esse nome corretamente. Como esse nome tem que coincidir com o que você escreveu aqui, ele extrairá essas informações daqui. Agora, novamente, como eu disse antes, podemos criar um espaço porque substituímos isso, não importa se você criar um espaço, ele removerá o espaço para você. É por isso que adicionei o substituto aqui. Este é um mago esqueleto. Eu volto para os inimigos e abro o próximo, Skeleton Rogue Então temos o esqueleto assim. Então temos o feiticeiro. Agora temos todos eles e clicamos em Compilar em cada um deles. Então você terminou aqui. Agora todos eles têm nomes. forma como funciona agora é que vai levar o nome do inimigo. Por exemplo, esse cara aqui é chamado de guerreiro. Isso é um guerreiro, vai levar o nome aqui, um guerreiro E ele pegará essa informação e então saberá quais informações o guerreiro tem É por isso que adicionamos o nome. Nós vamos usá-lo. Vamos encerrar tudo e passar para a próxima lição. 34. 4.14 Gerando o inimigo: Agora vamos em frente e criemos o inimigo. Vamos voltar ao modo de jogo. Foi aqui que paramos da última vez. Lembre-se de que obtivemos a transformação do ator para o ponto de desova Basicamente, sabemos onde gerar o inimigo. Agora vamos dizer qual inimigo criar em qual nível Agora temos essas informações porque criamos as bibliotecas de funções agora dentro daqui, vamos clicar com o botão direito do mouse e digamos que, na verdade , precisamos do nível atual e não o temos como variável. Vou criá-lo no modo de jogo porque faz mais sentido. Lembre-se de que o modo de jogo controla as regras do jogo. Ele sabe qual é o nível atual. Vamos criar uma nova variável. É um número inteiro porque é apenas um número. Vamos chamá-lo de nível atual. Vamos compilar porque precisamos ver o valor padrão. Vamos compilar para o valor padrão. Começamos no nível um. Vou mudar isso para o nível um. Vamos abordar isso aqui. OK. Queremos trabalhar com isso para obter informações sobre o inimigo, porque precisamos da classe inimiga aqui. E conecte T e diga break. Agora, para a aula, podemos conectá-la aqui. Se você não quiser ver todos esses outros pinos, clique neles e diga ocultar pinos desconectados Agora, para o nome do inimigo, lembre-se de que temos a outra função chamada get level info. A partir daqui, você pode ver qual inimigo deve aparecer em qual nível A partir daqui, novamente, você pode dizer pausa. Agora você pode usar esse nome de inimigo. Temos que dar a ele o nível atual. Agora está tudo bem. Podemos clicar aqui, ocultar pinos não conectados e arrastar isso Você pode selecionar todos eles e pressionar Q no teclado para endireitá-los assim. Ok, vamos colocar isso aqui. E coloque isso aqui. Agora vai funcionar. Como você pode ver, temos o nível atual, estamos obtendo as informações para o nível um. Ele entrará na tabela de dados, nas informações do nível, examinará o nível um e depois saberá que é o Orc que ele produzirá e o nome do inimigo E isso será conectado às informações do inimigo que então extrai informações das informações do inimigo Ou agora temos todas as informações sobre o Orc, incluindo o último a ser gerado Porque lembre-se de que, na planilha do Google, dissemos que a classe que ela precisa gerar com ela é BP Isso vai gerar o projeto do BP Orc. E aqui estamos gerando o inimigo. Agora, se eu clicar duas vezes aqui, ele me levará ao Player Controller onde fizemos esse evento. Isso gerará o Orc e também gerará o Or no ponto de desova que criamos. Vamos compilar e salvar tudo. Vamos clicar em Jogar. E agora você pode ver que é o Or, podemos testar isso. Se eu clicar no nível atual, alterei o nível atual para, por exemplo, o nível três. No nível três, ele deve gerar o xamã. Se eu compilar, clicar e jogar, você verá que é o Xamã que ele está Isso está funcionando corretamente. Agora, para torná-lo um pouco mais limpo, o que podemos fazer é pegar tudo isso e eu clicar com o botão direito do mouse e voltar para uma função. Vou criar uma função isso apenas para torná-la mais limpa. Vamos chamar isso de inimigo para desovar ou nível atual. Vamos transformá-la em uma função pura porque lembre-se de que estamos apenas obtendo informações para uma função pura. Vamos renomear, vamos clicar duas vezes aqui. Eu vou mover isso para baixo assim. Agora, para o primeiro, é o inimigo. Então, estamos descobrindo qual inimigo gerar. A segunda aqui é a transformação de spawn, assim como esta Vamos compilar e salvar tudo. Agora, aqui fora, é muito mais limpo e não temos essa linha aqui. Tudo está indo bem. Ok, é assim que você gera inimigos. Vamos clicar no nível atual e redefini-lo para um padrão. Então, agora está funcionando. E vamos para a próxima lição. 35. 5.01 Criando a interface do nome do inimigo: Agora que os inimigos estão aparecendo corretamente no mapa, vamos continuar trabalhando com a interface do usuário Ainda não temos uma pasta. Se eu for para a pasta de conteúdo e clicar com o botão direito do mouse e criar uma nova pasta, vamos chamar essa interface de usuário dentro dessa pasta. Vamos clicar com o botão direito do mouse e acessar a Interface do usuário e criar um modelo de widget Agora aqui, basta ir em frente e selecionar o widget do usuário aqui. Vamos chamar esse nome de inimigo. Nesta lição, vamos transformar o nome do inimigo uma interface de usuário muito simples. Aqui está. Dentro de uma planta ampla, você tem a janela de visualização na qual pode clicar, clicar com o botão direito do mouse, pressionar o botão direito do mouse e clicar com a caneta, quase como E aqui você pode ver o que você adicionou aos seus elementos de interface do usuário. Aqui estão todos os elementos que você pode adicionar. Além disso, você tem um painel de detalhes como aqui, onde você clica em coisas, por exemplo, o texto, e ele mostra detalhes sobre a coisa dentro de um esquema de widget Você tem o designer onde você cria a interface do usuário. E você tem o gráfico onde você programa coisas na interface do usuário. Por exemplo, o que acontece quando você pressiona o botão? Se eu voltar para o designer agora, vamos apenas criar o texto. É só o nome do inimigo, então é só um texto. Mas antes de projetarmos, precisamos adicionar uma tela. Antes de fazer qualquer coisa na interface do usuário, no Unreal Engine, você precisa adicionar um painel de tela Clique aqui, arraste-o e solte-o aqui em cima Agora você tem essa tela. Agora podemos adicionar coisas a ele. Por exemplo, nesse caso, só precisaremos de um texto se você apenas pesquisar por texto. Ou você também pode simplesmente ir até aqui, você pode encontrá-lo aqui. Esses são os elementos mais comuns aqui. Você também pode simplesmente clicar e ver o que há. Se quiser, apenas para praticar, você sempre pode clicar e arrastar até aqui. Você pode ver o que ele faz. Você pode tentar jogar com algumas configurações, não faz mal. Quando terminar o treinamento, basta clicar aqui e clicar em Excluir no teclado e ele será excluído. Temos o painel de tela, vamos adicionar um pouco de texto em cima dele. Você pode adicioná-lo em cima dele aqui ou pode adicioná-lo aqui. Isso é a mesma coisa. Normalmente, prefiro apenas arrastá-lo e soltá-lo aqui, mas isso realmente não importa por enquanto. Para este texto, realmente não precisamos de todo esse espaço. O que vou fazer é clicar em Tela cheia. E então desejou que só preenchesse esse texto. Agora você pode ver que está descentralizado. Você pode ver que isso ocorre porque temos algo chamado ponto de ancoragem ancorado E o que isso significa, o Anchor Point, o que é, é digamos que esta é a sua janela de jogo, você está jogando o jogo Agora, quando você redimensiona a janela do jogo, o texto não ficará aqui embaixo. Era sua intenção que o texto ficasse aqui embaixo. Quando você redimensiona a janela, o texto se move em direção a esse ponto de ancoragem Se sua intenção é que o texto fique aqui embaixo na tela , você está fazendo isso errado, pois ele se moverá lentamente nessa direção quando você redimensionar a tela É muito importante definir os pontos de ancoragem corretamente. Agora, para esse ponto de ancoragem, eu só queria centralizá-lo no texto Vou clicar no centro da minha tela. Essa é a sua tela. Vou centralizá-lo na minha tela e vou escrever 00 na posição de x e y. Agora, quando você escreve 00, o ponto de ancoragem se encaixa no canto superior esquerdo Para corrigir isso, você pode brincar com o alinhamento. Aqui você pode ver 0,5 no meio e um no outro lado. Geralmente é 0-1 no alinhamento. A mesma coisa para o Y. 0,5 está no meio e um está do outro lado, 0,5 e 0,5 Isso o adicionará ao sensor Agora você pode ver meu texto, e é assim que eu gosto de tê-lo. Ok, clique em Compilar e salve tudo. Agora vamos seguir em frente e estilizar isso. Mas antes de fazermos isso, ao projetar a interface do usuário dentro do Neural Engine, você precisa garantir que ela fique bem em laptops. Ela fica bem em monitores Noble, monitores 24 polegadas e monitores de 27 polegadas. Também precisa, por exemplo, ficar bem no meu monitor de quatro K. Se você não o projetar bem no meu monitor de quatro K, pode ser assim. E vou me divertir jogando seu jogo. Como podemos garantir que a interface permaneça boa em todas as telas? A maneira de fazer isso é clicando aqui no tamanho da tela. Eu costumo criar meus jogos para um notebook genérico de 14 polegadas. Vá em frente e clique aqui, e é assim que ficará. Agora, preste atenção no zoom aqui em cima para que você não tenha ampliado, mais oito Se eu diminuir o zoom, agora você pode ver que também é menos dez. Se você apenas ampliar até 11, isso é o que realmente parece em um laptop. Qual é a aparência dos meus quatro monitores? Bem, se você clicar aqui neste botão de configurações, poderá ver o quanto ele escala. No momento, estamos projetando-o para um laptop de 14 polegadas, mas na minha tela, em um monitor de quatro K, ele escalará a interface do usuário em 3,8 vezes Será escalado 3,8 vezes. Agora é demais. Vamos reduzir isso. E eu posso te mostrar que se eu clicar aqui na escala oito, você pode clicar nela e então você pode reduzi-la aqui. Normalmente acho que é bom no meu monitor de quatro K. Se eu configurá-lo para 2,5, ele escalará bem em todas as telas. Não ficará ruim na minha tela, porque para um laptop ou meu monitor de quatro K, ele escalará 1,6 vezes e ficará bem na minha tela. Isso é o que eu achei que vai ficar bem. Normalmente, três é muito grande. Do meu monitor de quatro K, os EUA são muito grandes. 2.5 é muito bom. Ok, agora está dimensionado corretamente em todas as telas. Vamos compilar e salvar. Agora vamos clicar no texto aqui. E vamos estilizá-lo um pouco, certo? A forma como o estilizamos é que temos que selecionar um fundo. Você pode ver que agora não temos fundos, temos o fundo normal e precisamos baixar um fundo personalizado para estilizar Então, vamos continuar na próxima lição e estilizar esse texto Podemos baixar um fundo personalizado e adicioná-lo ao motor real. 36. 5.02 Adicionando uma fonte personalizada: Tudo bem. Então, se você for ao Google e pesquisar fundos do Google, verá este site chamado Funds.google.com. E aqui, você pode baixar o fundo que quiser Agora, você também pode simplesmente pesquisar fundos e até mesmo baixar fundos gratuitos. Há também um site chamado The Fund, The Fund. Esse também é bom. Tem muitos fundos dos quais você pode fazer o download. Também existem os pagos. Agora eu amo os fundos do Google, eles têm muitos estilos legais. A partir daqui, encontrei um chamado Playpen. Pesquise por Playpen, e este é o que eu quero usar. Agora você pode escolher o fundo que quiser, não precisa ser o mesmo que eu. E você sempre pode testar o fundo. Se você escrever algo aqui, por exemplo, podemos dizer, Skeleton Mage para o nosso jogo E você pode reduzi-lo para ver como ficaria se fosse assim e estivesse em negrito e assim por diante. Então, eu gosto desse fundo. Vou clicar em Baixar e vou abri-lo aqui, aqui está. Agora, para esse fundo, eu tenho que extraí-lo. Vou pegar essa pasta estática e extraí-la para minha pasta de downloads. E vou entrar na minha pasta Downloads clicar duas vezes nela. Esse, esse que eu extraí aqui, eu tenho todos os fundos Agora eu não vou precisar do fino. Normalmente, eles são muito finos dentro de motor vulnerável para jogos que eu gosto, talvez também tenham o normal. Meio ousado, extra ousado, ousado . É isso mesmo. Se eu voltar para o meu motor, eu minimizo isso aqui, e eu minimizo isso também. Agora, aqui, vamos minimizar isso. Vamos abrir minha pasta. Agora, posso importar tudo isso na pasta UI. Quero que você crie uma nova pasta e vou chamá-la de fundos. Se eu conseguir soletrar dentro dessa pasta de fundos, vou clicar e arrastar tudo isso até aqui Lembre-se de que você precisa primeiro extrair os fundos. Antes de fazer isso como fizemos, você gostaria de criar um novo ativo de fundo? Eu só vou dizer que se aplica a todos os DS. E aqui está. Muito fácil de importar fundos. Vá em frente e salve tudo. Agora, se você voltar ao nome do inimigo, clicamos nele. Agora podemos escolher esse fundo personalizado para ele. Agora, para este, acho que vou usar esse chamado Extra Bolt Like this aqui Isso parece bom para mim. Aqui. Como justificativa, vou centralizá-la. Eu também vou clicar neste texto aqui. Eu vou dizer tamanho do conteúdo. Só vai dimensionar o tamanho do texto. Não preciso me preocupar com o tamanho do X e do Y. S. Você precisa testá-lo em seu jogo Mas acho que, para mim, vou usar 28. E no tamanho da frente, também podemos dar uma cor. Se você clicar aqui na cor e na opacidade é uma cor. Vou apenas dar uma cor levemente vermelha, algo assim. E clicando em OK, vou dar um esboço. Se eu clicar aqui no esboço, posso escrever um. Por exemplo, você pode ver que há um esboço no texto. Acho que vou escolher dois porque você quase não consegue ver quando está com o zoom de Também vou mudar a cor para que ela simplesmente copie a cor da primeira. Na verdade, o que você pode fazer segurar a tecla Shift e clicar com o botão direito do mouse para copiar a tecla Shift e clicar com o botão esquerdo para colá-la aqui. Eu vou fazer disso Daca e acho que isso é bom para mim. Agora, um efeito muito legal que você pode fazer no Oral Engine está aqui no deslocamento de sombras Se você copiar a mesma cor, então eu copio isso, clique na cor da sombra e eu também posso colá-la aqui na cor da sombra, aqui no offset Vou escrever zero no X. Vamos escrever algo como três no Y. Você pode ver um efeito muito legal, você tem o texto e depois tem um fundo marrom frio por trás dele Sempre podemos testá-lo no jogo para ver como é. Às vezes, eu realmente espero projetá-lo até tê-lo no jogo para que você possa ver como fica no jogo. Mas, por enquanto, acho que isso é muito bom. Só para ter certeza de que o texto não está bloqueando nada no jogo. Você precisa descer e, na visibilidade que precisa definir, não clicar em testável O que isso significa é que se você tentar clicar com mouse em algo o mouse em algo atrás do texto, vai funcionar. Se você o tiver definido como visível , o texto bloqueará os cliques do mouse e, se houver algo por trás do texto, você não poderá clicar nele Agora, evitamos o bloqueio aqui. Vá em frente e clique em Arquivo e salve tudo. E aqui está o nome do inimigo. Agora estamos prontos para adicioná-lo na próxima lição. 37. 5.03 Adicionando a interface do nome do inimigo: Agora, vamos adicionar o nome do inimigo. Vamos ver as plantas. E vamos abrir os inimigos. E temos que adicioná-lo na base inimiga. Lembre-se de que a base inimiga é a mãe de todas essas plantas infantis Vamos para uma base inimiga. E se o adicionarmos aqui, ele será adicionado a todos eles. Vou clicar em Adicionar nos componentes. E se você pesquisar por widget, aqui está. Vá em frente e adicione o widget a esse inimigo. Podemos simplesmente chamá-lo de nome do inimigo. Talvez eu realmente chame isso de widgets com nomes de inimigos. Então, nós sabemos. E vamos em frente e salve tudo. Agora, para esse widget inimigo, vá para a janela de exibição E agora também precisamos empurrá-lo um pouco para baixo para que fique abaixo do inimigo O nome está abaixo do inimigo. Agora, para o widget inimigo no painel de detalhes, vou configurá-lo na tela O texto pode ser mundo ou tela. Na verdade, vou te mostrar um exemplo aqui, Sophie, basta clicar na classe do widget e selecionar nosso widget que acabamos de criar, que será o nome do inimigo. Aqui está. Vá em frente e compile. Na verdade, vou te mostrar como é. Só para você ver, se eu puxar o Roe, escrevo zero no Y. Aqui está o nome do inimigo Você pode ver se estou olhando para o inimigo assim Não podemos ver o texto porque ele é exibido assim. O que acontece quando você clica na tela é que você apenas exibe esse texto em direção à tela, exatamente assim. Se eu clicar em jogar agora, você poderá ver que ele é exibido na tela. Agora está parecendo bom. Vamos abri-lo. Vamos clicar nele novamente. Vou clicar em Desenhar um tamanho desejado. E agora estamos prontos com este. Vamos clicar em Compilar. E você pode empurrá-lo ainda mais para baixo assim. Você sempre pode clicar em Jogar e ver o que é. Agora acho que, para o nome do inimigo, vou aumentá-lo para talvez -22. Só um pouco mais. Aqui está. Parecendo bem. Deixe-me deletar este para que não tenhamos dois inimigos surgindo Agora, esse é o nome do inimigo que mostramos, e tudo está ótimo. 38. 5.04 Programando a IU de informações do inimigo: Tudo bem, em vez de ter apenas o nome do inimigo, decidi adicionar o nível do inimigo também. Vai parecer um pouco mais legal. Vamos abrir o inimigo novamente, aqui dentro. Na verdade, vamos até a interface do usuário, abrir o nome do inimigo. Em vez disso, vou renomeá-lo para informações do inimigo. Agora, dentro daqui, se você clicar nele, na verdade não precisamos fazer nada aqui porque vamos programar o texto. Não precisamos mudar nada aqui. Mas agora vamos para a base inimiga. Em vez de um nome amplo do inimigo. Vou apenas renomeá-lo como Info Widget. E isso ocorre porque temos o nome e o nível exibidos. Decidido. Ok, nós realmente não precisamos fazer muita coisa aqui. Mas o que precisamos fazer agora para programá-lo é acessar o gráfico. Agora, vamos excluir todos esses eventos. Vamos clicar com o botão direito do mouse em criar um evento personalizado. Vamos chamar isso de atualização de informações do inimigo I para este. Agora, quando você faz algo em código, precisa pensar que está tentando fazer. Estou tentando atualizar esse texto. Esse texto aqui. Ao clicar nela, tenho que configurá-la como sua variável, caso contrário não consigo vê-la como uma variável aqui e não posso fazer nada com ela. Então, vou chamar esse texto de informação do inimigo e defini-lo como variável. E depois vou para o gráfico. Agora eu posso ver e arrastar para dentro. O que estamos tentando fazer é definir o texto, definir o texto. E você pode selecionar essa função chamada definir texto. É assim que você define um texto aqui. Agora, isso é o que você está tentando fazer. Estamos tentando definir esse texto para ser o nome do inimigo. Agora, obviamente, não temos o nome do inimigo aqui. Lembre-se de que temos o nome do inimigo. Dentro da função de biblioteca que criamos, também precisamos do nível do inimigo. Agora, quanto ao nível, temos isso dentro do modo de jogo. Se você for ao Blueprint para abrir o modo de jogo, lembre-se de que aqui também temos o nível atual A melhor prática para fazer isso é atualizar o nome do inimigo sempre que ele for gerado Acho que aqui na base inimiga, sempre que o inimigo aparecer, o início do jogo vai começar É bom adicionar esse código aqui dentro. Precisamos fazer isso, em vez de escrever o texto aqui. Agora precisamos de duas entradas. Nessa função, precisamos do nome do inimigo, e isso é uma string. Vamos aumentá-lo um pouco para que possamos ver que esse é o nome do inimigo. Vamos chamar esse nome de inimigo. Então, precisamos que o nível do inimigo olhe aqui, selecionando o número inteiro E esse é o nível do inimigo, assim como o nome e o nível desse inimigo. Agora, para inserir isso aqui, como você pode ver, temos apenas um bloco de texto. Para adicionar dois valores dinâmicos em um bloco de texto, você precisa usar algo chamado formato de texto. Isso permitirá que você adicione várias entradas ou várias entradas ao texto se você arrastar aqui e disser formatar texto como este Agora, como você usa isso, você começa com um colchete. A primeira coisa é que precisamos do nome do inimigo. Digamos o nome do inimigo. Isso não precisa ser preciso. Você pode escrever o que quiser aqui. Vamos fechar os colchetes. Quando você faz isso e pressiona Enter, você pode ver que há um ponto de entrada aqui ao qual você pode conectá-lo assim. Agora também precisamos do nível do inimigo, como queremos exibi-lo. Por exemplo, só para visualizá-lo, digamos, por exemplo, Orc, temos uma vírgula e ela diz nível um ou nível 12, algo assim Aqui também temos que formatá-lo. Assim, aqui temos o nome do inimigo. Então temos A. Aqui eu vou para a direita e para o nível. Então temos o nível. Vou abrir o suporte encaracolado novamente e dizer o nível do inimigo E feche-o novamente assim. Agora eu posso adicionar essa entrada , agora ela será exibida diretamente para mim. Tudo bem, este podemos adicionar agora à base inimiga. Se eu compilar e voltar para a base inimiga, vamos deletar tudo isso por enquanto E como fazemos isso é usar o widget de informações do inimigo. Primeiro você precisa escrever um widget, selecione este chamado get user widget object Agora, aqui eu costumo custar, digamos, dois. Normalmente, não uso um plano de widget para a interface do usuário porque acho demais criar um plano de widget para cada interface Você só precisa custar a interface que está dentro Por exemplo, na interface do usuário do menu principal, você não vai custar dois. O menu que está recuado aqui como um componente você custará para fazer com que o usuário supere as duas E nós o chamamos de informações do inimigo. Vá em frente e selecione-o aqui, e vamos conectá-lo. Ok, então aqui está. Agora podemos chamar a atualização das informações do inimigo, atualizar as informações do inimigo Ui. Agora temos que inserir o nome do inimigo. E lembre-se de que já temos isso aqui. Lembre-se de que clicamos em cada inimigo e definimos o nome do inimigo, todos eles aqui. E é aí que o usamos. Agora vamos atacar isso, conectá-lo, esse é o nome do inimigo. Agora, para o nível de inimigos, temos esse como o nível atual dentro do modo de jogo. Não me lembro que nas interfaces criamos uma interface para o modo de jogo, não fizemos isso. Então, vamos continuar e criar a interface do blueprint. Vamos dar uma olhada aqui, vá para Blueprint e selecione a interface Blueprint Vamos chamar isso de BPI. Agora, vou chamá-lo de modo de jogo porque só temos um no jogo. Vamos abri-lo. Agora, dentro daqui, vamos chamá-lo de referência do modo de jogo get porque é isso que estamos tentando fazer. Para as saídas, você precisa selecionar no tipo de variável o que você está tentando referenciar Agora estou tentando fazer referência ao meu modo de jogo. Vou procurar o GM Dungeon Clicker. É assim que eu o chamei, esse é o meu modo de jogo. E vou selecionar Referência de objeto aqui. Vou chamá-lo de modo de jogo. Vá em frente e compile, salve tudo. E agora terminamos aqui dentro. Vamos encerrar isso. Agora temos que adicionar essa interface de projeto ao modo de jogo. Se eu voltar às plantas, abra meu modo de jogo aqui Vamos ver as configurações da cláusula nas interfaces implementadas Vamos adicionar a interface do plano, o modo de jogo. Quando você faz isso, essa função aparece. Vamos clicar duas vezes nele, sair daqui e dizer self. Agora estamos definindo essa variável. Estamos dizendo que essa variável do modo de jogo é própria. O que significa que, seja qual for o plano em que estamos agora, dizendo ao motor que essa variável do modo de jogo é GM, Dung Ok, agora terminamos. Vamos fechá-lo. Vamos abrir o inimigo mais uma vez. E vamos continuar o trabalho. Em vez de fazer isso primeiro, deixe-me mover tudo isso aqui. Vamos desconectá-lo segurando Alt e clicando, vamos clicar com o botão direito do mouse e dizer Obter modo de jogo Agora, para este modo de jogo, obtemos o modo de jogo geral, o modo de jogo padrão e o Unreal Engine Em vez de dizer custo para a GM, em vez de fazer isso, agora podemos dizer isso, referência ao modo de jogo E podemos usar a função de interface blueprint. E você sabe disso porque diz mensagem no final. Você sabe que vem de uma interface de projeto. Vamos fechar o som. Vamos sair e conectá-lo agora. Agora, com isso, podemos clicar com o botão direito do mouse e promover isso para nossa variável e chamá-la de modo de jogo. Não precisamos fazer tudo isso de novo. É muito mais limpo. Agora, podemos apenas usar a variável do modo de jogo. Vamos conectá-lo, vamos fazer tudo juntos. Vamos em frente e usá-la. Então, agora podemos usar o nível atual. Se você voltar ao modo de jogo, caso não se lembre, temos essa variável chamada nível atual. É isso que estamos tentando usar no modo break game aqui. Pesquise o nível atual e vá em frente e obtenha o nível atual. E agora você pode conectá-lo e tudo deve funcionar perfeitamente. O que está acontecendo agora é que estamos recebendo a interface de atualização das informações do inimigo. Estamos inserindo essas informações, o nome e o nível do inimigo Ele vai levar isso para a interface do usuário aqui. Eu vou até o gráfico. Vou conectar isso aqui, deve exibi-lo corretamente. Se eu clicar em Jogar, agora aparece Orc nível um. Isso está correto. Agora, se eu voltar ao modo de jogo e mudar o nível atual para algo como cinco, por exemplo, e clicar em Jogar, aparece nível cinco do Mago. Tudo está funcionando perfeitamente, ok. Tudo está funcionando. Vamos em frente e economizemos. E vamos seguir em frente. 39. 5.05 Aplicando dano ao inimigo: Agora vamos prosseguir e aplicar dano ao inimigo. Agora, se clicarmos em Jogar, o que eu quero fazer é sempre que eu clicar neste Orc, eu quero aplicar dano E, a propósito, lembre-se de entrar no modo de jogo e definir o nível atual de volta para um por padrão, porque nós o configuramos para cinco na última vez que o ajustamos de volta para um. Agora, o que eu quero fazer primeiro é que você possa ver nosso mouse desaparecer Sempre que clico no jogo, meu mouse desaparece. Então, vamos ao controlador do player. E dentro daqui nos padrões da classe, vamos clicar em mostrar o mouse Ursa Vamos compilar isso. Vamos abrir a base inimiga. Antes de fazer qualquer coisa, vamos realmente acessar o refletor do widget Fuel Debug, torná-lo 1,25. Então você pode ver aqui, o que eu quero que você faça é usar o componente da cápsula, o qual vamos com o qual vamos interagir sempre que clicarmos O que queremos fazer é entrar no componente da cápsula. E aqui você vê alguns eventos que você pode usar. O que eu quero que você use é esse chamado clique, porque vamos clicar no inimigo sem clicar Vá em frente e selecione isso. E aqui o que eu quero que você faça, também arraste e diga print string. A sequência de caracteres de impressão é muito poderosa. Isso simplesmente imprime uma string na tela, imprime uma mensagem na tela. Por exemplo, pode dizer que funcionou. E eu uso isso para depurar meu código, quero ver se meu evento está realmente funcionando Novamente, isso é super poderoso. É assim que eu depuro meu código. Se eu tiver um erro, por exemplo, digamos que algo não estava funcionando aqui em algum lugar, eu pegaria isso e colaria aqui, por exemplo. Eu o colocaria aqui ao lado disso, ou entre esses dois. Se imprimir, isso significa que esta peça está funcionando, então eu imprimiria aqui e veria se essa peça está funcionando e assim por diante. Continue imprimindo mensagens na tela e é assim que você depura com eficiência Aqui embaixo, no clique, vamos ver se isso funciona. Se eu clicar em play e clicar no Orc, nada está realmente sendo impresso na tela Isso significa que esse evento não está realmente funcionando. Algo está errado. Isso ocorre porque no componente da cápsula, vamos verificar as configurações de colisão aqui embaixo Nós o configuramos para que não houvesse colisão. Claro, não vai funcionar sempre que eu clicar nele porque esse cara não tem colisão Quando a colisão é predefinida em vez de nenhuma colisão, vamos clicar nela e, digamos, personalizada para a personalizada para a Vou configurá-lo para consultar somente agora a física. Sempre que um personagem está andando no chão e há física, ele não cai no chão e assim por diante. Nós realmente não precisamos de consultas físicas. Por exemplo, seu mouse está interagindo com a consulta do inimigo ativada Não precisamos de física. Quanto aos canais de resposta, ignore tudo. Não queremos interagir com outros objetos estáticos do mundo, peões e veículos e assim por diante A única coisa com a qual queremos ficar intactos é a visibilidade. A visibilidade é o mouse, o qual queremos interagir. Agora, se você clicar em jogar, clicamos aqui. Você vê que nada está acontecendo. Ainda assim, algo está errado. Agora vamos abrir o controle de reprodução novamente. E aqui você vê habilitar eventos de clique. Você tem que aceitar isso também. Compile, clique em reproduzir e agora você pode clicar nele Agora você vê que nossa mensagem está sendo impressa no. Agora está funcionando novamente. Você pode testar a caixa de impacto, dependendo do tamanho sua esfera de colisão, nossa cápsula Você pode ver quando eu clico aqui, que está funcionando também. Acho que é uma caixa de acerto justa, mas se você quiser consertar sua caixa de acerto, você sempre pode ir até a base inimiga, clicar no componente da cápsula e aumentar e diminuir a meia altura e o raio dela, dependendo do tamanho que você deseja que o círculo tenha O que queremos fazer é aplicar danos. Vamos aqui e diga Aplicar danos. Existe uma função para isso: vá em frente e selecione Dano aplicado para o ato danificado. Para nos machucar, queremos danificar essa base inimiga, seja qual for o inimigo que estamos atacando. O que queremos que seja o dano? Podemos simplesmente adicionar um dano estático que podemos melhorar posteriormente na loja. Pelo dano, eu realmente quero adicioná-lo ao jogador. Isso faz mais sentido. Se eu for ver as plantas, vou para o jogador aqui Vamos adicionar uma nova variável chamada dano. Vamos transformar isso em uma compilação flutuante. Vamos defini-lo como 15 por padrão, podemos alterá-lo mais tarde. Compilar. Se eu voltar para a base inimiga, agora precisamos de uma referência ao jogador. Veja aqui, se temos uma interface, não temos uma interface de blueprint Se você quiser se desafiar novamente com as interfaces do blueprint, vá em frente e crie uma para o jogador Mas agora vamos fazer isso juntos. Vamos clicar com o botão direito do mouse, ir para o blueprint, interface do blueprint. Chame isso de camada PPI. Vamos abri-lo aqui. Digamos que obtenha uma referência de camada. Agora, aqui embaixo, o que quer que estejamos nos referindo, estamos tentando nos referir ao BP Player. Vamos pesquisar isso. Vá em frente e selecione-o. Vamos chamá-lo de Player. Agora vamos compilar. Lembre-se de compilar agora vamos voltar ao player e adicionar essa interface de esquema dentro das configurações da nuvem aqui embaixo, pesquisar por BPI, adicionar o player, compilar Vamos abri-lo e fazer uma autorreferência. Assim como antes, definimos que esse tipo de variável é esse player. Agora que fizemos isso, vamos voltar para a base inimiga aqui. Vamos fazer isso depois do modo de jogo. Se eu simplesmente atacar aqui, deixe-me clicar com o botão direito do mouse e dizer pegue o personagem do jogador. Vá em frente e selecione, então vamos atacar a partir daqui e dizer obter a Referência de Jogo. Selecione isso, vá em frente e conecte-se. Vamos clicar com o botão direito do mouse e promover isso e chamá-lo de Player. Vou chamá-lo de Play Upon. Vamos nos conectar aqui. Basta arrastar isso para cima. Agora temos essa referência pronta e podemos usar a variável s a partir dela. Vamos usar o dano do cursor aqui embaixo. Vamos começar a jogar, vamos procurar danos no cursor, selecioná-lo e conectá-lo aqui. Assim mesmo. Agora, não precisamos fazer nada com eles para ver se isso está funcionando e vamos usá-los mais tarde. Mas o que você pode fazer é escrever, clicar e procurar qualquer dano. Nós vamos usá-lo mais tarde. Você pode imprimir uma string a partir daqui. Você pode simplesmente imprimir a quantidade de dano que estamos causando. Vamos, vamos clicar. E quando eu clico, você pode ver que estou aplicando 15 pontos de dano e tudo está funcionando conforme o esperado. Vamos em frente e exclua isso por enquanto. Na verdade, vamos deletar isso. Podemos fazer isso em outra aula. Vamos compilar, salvar tudo e seguir em frente. 40. 5.06 Como avaliar a saúde: Agora vamos trabalhar com qualquer evento de dano. Se você clicar com o botão direito aqui na base inimiga, você procura por qualquer dano. Vamos usar esse. Isso é usado quando você aplica dano, você vai aqui e depois calcula o dano e depois aplica qualquer dano que tenha causado. Deixe-nos fazer isso. Vamos criar uma nova variável. Precisamos de uma chamada saúde atual. Agora, para este, vamos transformá-lo em um flutuador. Vamos compilar. Agora, para essa saúde atual, precisamos ter saúde. Porque não podemos realmente começar do zero. O inimigo não tem zero, então precisamos colocá-lo em algum lugar. Lembre-se de que, antes, nas tabelas de dados que criamos nas informações do inimigo, adicionamos saúde aos inimigos. Vamos usar isso e defini-lo por padrão sempre que eles aparecerem A melhor maneira de fazer isso é aqui no início do jogo, sempre que o inimigo aparecer. Vamos pegar essa saúde atual e configurá-la. Você segura a tecla Alt e arrasta para configurá-la. Vamos configurá-lo para o que estava na tabela de dados. Vamos clicar com o botão direito do mouse. Lembre-se de que criamos uma função de biblioteca chamada get Enemy info. Agora ele precisa do nome do inimigo. E nós temos isso. Lembre-se de que estamos dentro da base inimiga e temos o nome aqui. Vamos arrastá-lo e conectá-lo. Vamos atacar a partir daqui e dizer “pare”. Quando quebramos, podemos ver todas as variáveis dessa função de informações do inimigo. Agora vamos configurá-lo para a saúde aqui. Começamos com qualquer saúde que escrevemos aqui. Vamos voltar para a base inimiga. Clique aqui, oculte os pinos desconectados para torná-los mais limpos E vamos conectá-lo. Agora isso está funcionando aqui embaixo. Agora temos a integridade atual definida corretamente. Sempre que causarmos danos, quero que você tire a saúde atual, digamos que a saúde atual seja 100. Para o primeiro aqui, vamos dizer 100 menos Se você apenas escrever menos ou subtrair, subtraindo o dano que causamos, diria 100 -15 Isso é igual ao que é igual Temos que pegar isso de novo e colocá-lo de volta aqui. Está atualizado, agora dizemos que 100 -15 é 85. 85 vai estar aqui. Agora, só para garantir que não fiquemos abaixo de zero. Porque você pode imaginar que se eu continuar causando dano e ele chegar a zero e eu causar dano novamente, ele dirá zero, -15, ou seja, -15. Em vez de perder a saúde, usamos algo chamado Se você arrastar a partir disso e disser clamp, selecione este chamado clamp float, porque estamos trabalhando com floats. Flutuador de braçadeira O que é um grampo é basicamente você fixar o valor, então ele nunca pode ficar abaixo de zero e nunca pode ultrapassar algum valor que você Vou apenas adicionar essa saúde atual porque não estamos realmente curando o jogador. Vou prendê-lo entre o que é agora e não podemos ir abaixo Vou conectá-lo assim. Vamos conectá-lo aqui. Agora que está realmente concluído, agora você pode clicar duas vezes nele para melhorar a aparência. Vá em frente e faça isso. Vamos usar uma string de impressão novamente e ver se estamos fazendo isso corretamente. Se eu compilar, clique em jogar e eu causo danos. Então agora é 85, e então é 70, 505-402-0510, e E você pode ver que sempre que eu clico, não pode estar abaixo de zero. Então, agora estamos calculando isso corretamente. 41. 5.07 Criando o bar de saúde: Para criar a barra de saúde, vamos até a pasta UI. Vamos escrever. Clique agora, vamos para a interface do usuário e criar um widgit, Novamente, um widgit de usuário. Vamos chamar isso de barra de saúde WB. Vamos entrar aqui. Novamente, exatamente o que eu disse antes, tamanho da tela. Vamos clicar aqui. Configure-o para um laptop genérico que projetamos para todas as telas. Vamos criar esse painel de tela. Lembre-se de que sempre precisamos adicionar uma tela. Agora, para a barra de saúde, incluí algo para você. Ainda não o importamos. Então, vamos aos materiais de custo aqui nos materiais de custo, quero que você acesse a interface do usuário novamente. Você pode ter muito mais interface do usuário do que eu tenho agora. Isso ocorre porque eu continuo adicionando coisas sempre que continuo desenvolvendo este curso. Vamos agora pegar essa e essa. É disso que precisamos até agora. Aqui, deixe-me clicar com o botão direito, criar uma nova pasta, chamá-la de imagens. Vamos abri-lo. Agora vamos abrir os materiais de custo mais uma vez , vamos arrastá-los para esta pasta. E agora eles estão carregados. Agora, isso é muito escolhido, então eu não quero que fique embaçado Lembre-se de que você pode simplesmente selecionar os dois. Clique com o botão direito do mouse e vá para Spot Actions e aplique papel nas configurações. Agora não está mais embaçado, está com boa aparência. Vamos voltar para a barra de saúde. E dentro daqui, vamos pesquisar por enquanto. Quero que o texto esteja no topo e, em seguida, quero que a Barra de Saúde fique abaixo dele Precisamos de uma caixa vertical para isso. Pegue uma caixa vertical nela. Dentro da caixa vertical, preciso de algum texto. Na verdade, vou copiar o texto que fizemos aqui. Eu acho que está parecendo bom. E podemos simplesmente mudar a cor. Clique no controle de texto C para copiar aqui. Clique no controle da caixa vertical V. Agora, para a barra de saúde, basta pesquisar a barra de progresso e é isso que é. Arraste-o para a caixa vertical. Agora, para a caixa vertical, vamos redimensioná-la para que possamos realmente ver o que está acontecendo Agora, em vez de preenchê-lo em toda a tela, queremos que as informações do inimigo sejam iguais às do tamanho que tiverem. Porque vamos apenas usá-lo no jogo aqui. Não precisamos dele para preencher tudo de novo. Clique em Tela cheia. Aqui até o desejado na tela. Em vez de o ponto de ancoragem estar aqui em cima, vamos mudá-lo para o meio da tela Vamos mudar o alinhamento da caixa vertical para 0,5 por 0,5 e a posição para zero por zero Agora está no meio aqui. Ok, está bem. Agora, para essa barra de progresso, vou clicar nela. E para o estilo, vamos mudar a imagem de fundo. A imagem de fundo é essa barra de progresso. A imagem de preenchimento e a imagem de letreiro, ambas são esta fatura que temos, esta e esta E vamos clicar em Compilar. E podemos ver que não parece muito bom quando olhamos para ele. E isso é porque aqui, eu acredito que é a marquise Eu sempre esqueço aqui na marquise o tamanho da imagem em Y. Podemos alterá-lo. E agora você pode ver que está realmente mudando. Podemos mudar o tamanho que quisermos. Para este, acho que vou chegar aos 45. Você também pode escalá-lo aqui no X e y no X. Você também pode escalá-lo Agora, não podemos realmente ver a diferença porque essa caixa vertical a está bloqueando. Porque podemos escalá-lo aqui. Mas vou escalá-lo aqui de acordo com o tamanho do conteúdo. Vou clicar aqui. Vou escalar a caixa vertical, dependendo do tamanho do conteúdo. Agora, para essa barra, vou reduzir o tamanho para algo como 250. Sempre podemos aumentá-lo mais tarde, mas parece bom agora. Agora vamos ver se esse preenchimento está funcionando. Vamos descer e você verá essa porcentagem. Você pode clicar e arrastar para preencher a porcentagem. Mas você pode ver que a cor não está correta. Está aqui embaixo na cor de preenchimento. Em vez de ser azul, vou apenas configurá-lo para ser branco. E vá em frente e clique. Ok. Agora você vê que está com boa aparência. Ok, agora nós projetamos isso. Vamos mudar a cor do nome aqui em cima ou não, é basicamente a quantidade de saúde pela quantidade de saúde. Vamos mudar para talvez uma cor mais vermelha. Eu escolhi essa cor aqui. Eu acho que está parecendo bom. Agora vamos copiar isso. Basicamente, basta segurar Shift, clicar com o botão direito, Shift, clicar com o botão esquerdo neste e neste. Em vez de ser dessa cor, vamos torná-la Daka Acho que essa cor fica bem como o contorno. Deixe-me copiar isso. Entre aqui e cole na cor linear hexadecimal Clique. Ok, eu acho que essa cor é boa para a saúde. Agora que terminamos com isso, você pode dar um pouco de espaço. Você pode ver que está muito perto, talvez da barra de saúde. Você pode clicar aqui, você pode ir para o preenchimento aqui na parte inferior Podemos dar a ele um preenchimento de seis. Está um pouco afastado da barra de saúde, agora está com boa aparência. Novamente, vou clicar na barra de saúde e no texto e alterar a visibilidade para não testável Portanto, não podemos interagir com ele, com o mouse. Eles não bloqueiam o mouse no jogo. Eu vou bater. Ok. Agora que isso acabou, então vamos seguir em frente e passar para a próxima lição. 42. 5.08 Adicionando a barra de saúde: Para adicionar a barra de saúde. Vamos até Blueprints e desvendar o inimigo. Mais uma vez, vamos ao ponto de vista. Vamos clicar em, basta clicar aqui. Vá para Componentes. Pesquise novamente por Widget, assim como fizemos com o nome É o mesmo conceito. Você pode tentar fazer isso sozinho para praticar. Vamos clicar em Widgets. Aqui podemos apenas dizer Health Bar. Agora clique em, vou dizer apenas widget de saúde. Talvez widgets de saúde. Porque se você continuar programando no jogo e ele se tornar um jogo muito grande, é sempre bom ter nomes muito descritivos para que não seja muito confuso. Clique no widget do Health Par. Vamos mudar o espaço da tela. Ele sempre exibe a interface do usuário na tela. Vamos mudar a cláusula para a barra de saúde. Esse chamado Desenhar um Tamanho Desejado. Tudo bem, vamos clicar em Play e ver como fica. E aqui está. Vamos anotá-lo abaixo do nome. Clique nele, Wrike. Reduza um pouco aqui. Clique em jogar. E vamos acabar com isso ainda mais. Clique em jogar. Isso talvez seja demais. Em vez de -40, digamos menos 37. Clique em jogar. Acho que parece bom. Talvez menos 36, agora é muito TOC. Clique em jogar. Isso parece muito melhor. Talvez seja isso que podemos fazer. Como você pode ver, ainda precisamos atualizar a barra de saúde, tanto o texto quanto a barra de saúde aqui. Vamos fazer isso na próxima lição. 43. 5.09 Atualizando a barra de saúde: Tudo bem, para atualizar a barra de saúde, vamos primeiro acessar a interface do usuário. E vamos abrir a barra de saúde. Dentro daqui, vamos clicar primeiro no texto. Para este, em vez de enviar informações de texto sobre o inimigo, é chamado de saúde de texto. A segunda aqui, a barra de progresso, vou chamá-la de barra de progresso. Vamos também chamá-lo de make it variable para que possamos. Vamos ao gráfico agora. Vamos deletar tudo isso. Vamos escrever clicar e criar um novo evento personalizado. Vamos chamar isso de atualização. Agora, para este, o que estamos tentando fazer, novamente, sempre que programamos, pense no que você está tentando fazer agora? Estou tentando atualizar essa barra de saúde. OK. Como atualizamos essa barra de saúde? A forma como o atualizamos é que você está tentando alterar essa porcentagem, você está tentando mudar isso. Sempre há uma boa ação para analisar o que você está tentando fazer com essa porcentagem. Vamos ao gráfico e vamos pegar essa barra de progresso. Se você não sabe como se chama, tente pesquisar por porcentagem. Você já pode ver aqui, você pode usar isso na função de porcentagem definida. Vamos conectar esse percentual definido. Você tem que dar uma olhada aqui. A porcentagem não é 0-100 0-1 . Na verdade, temos que fazer alguma divisão aqui Porque aqui na atualização de saúde, esta será chamada para a base inimiga a qualquer momento. Lembre-se de que aqui calculamos a saúde após causarmos danos causados por isso. A partir daqui, podemos chamar essa interface de atualização de integridade. Aqui, podemos nos conectar à saúde atual. Vou clicar aqui, criar uma nova variável, apenas regular aqui, para que possamos ver, torná-la flutuante, chamá-la de saúde atual Agora, como dividimos isso se você não é muito forte em matemática? Por exemplo, digamos que a saúde é 100 dividido por, então podemos fazer esse sinal ou dividir para a direita. Vamos dividir isso por um número que é a saúde máxima. Porque, por exemplo, você pode dizer, digamos que eu cause dano a esse inimigo e o inimigo tenha 100 pontos de vida. O dano no momento para o cursor é 15, ele diz 100 -15, é 85 Então você pode dizer 85/100 e obterá a porcentagem. Se você não é muito bom em matemática, sempre pode usar aqui seu navegador. Você pode dizer, digamos que temos 85/100 Enter. E então você pode ver que está realmente exibido corretamente. Está bem? Então é assim que queremos fazer, porque o máximo é 100, que é um. Essa porcentagem vai de 0 a 1 Digamos que a saúde atual é dividida pela saúde atual máxima dividida pela saúde máxima. Essa é a porcentagem, agora vai ficar correta. Vamos compilar agora. Vamos até a base do NM e tentar usar essa. Lembre-se de que você precisa calcular os custos agora porque está dentro da barra de saúde Esse é o mesmo conceito que fizemos com o nome. Vamos fazer isso. Obviamente, você pode seguir em frente e criar uma interface de modelo para ele Não é uma má ideia. Você pode fazer isso, está bem. Mas acho que algo que só vou custar uma vez, como se eu só usasse essa função em todo o meu jogo, talvez duas delas. Não quero criar uma interface de modelo para cada interface de usuário que eu crio Vamos excluir esse nó de impressão. O que podemos fazer agora é criar um novo evento personalizado aqui. Vamos criar um evento personalizado chamado update health. E este chamará a interface de usuário de atualização de integridade. Vamos arrastar esse widget. Vamos nos dar um objeto widget exatamente como antes. Digamos que custe dois e o chamamos custo da saúde para a saúde conectada. Aqui, queremos chamar a atualização de integridade de arrasto de atualização. Eu vou em frente e conecto tudo. Agora precisamos de plug-ins para a saúde atual e a saúde atuais, a saúde atual que já temos aqui. Vamos conectá-lo. Como o colocamos aqui para que possamos fazer isso com o máximo de saúde, precisamos do máximo de saúde do inimigo. Como fazemos isso? Lembre-se de que criamos uma informação sobre um inimigo aqui, é basicamente essa. Você pode basicamente copiar esse controle C, ir até aqui, controlar V ou reescrevê-lo se quiser praticar Tente escrever isso de novo e veja como você fez isso. Vamos conectá-lo aqui. Agora estamos atualizando a saúde. Lembre-se, temos que realizar esse evento antes que ele funcione. Vou executar essa atualização de saúde toda vez que eu causar danos. Por aqui, podemos chamar de update health e ligar para aqui. Agora, o que estamos fazendo é causar danos com o mouse, estamos aplicando danos. E o dano que aplicamos, estamos calculando e atualizando a saúde atual do inimigo Então, estamos atualizando o I aqui. Na verdade, aqui, atualize a saúde. Talvez possamos ter esse aqui embaixo só para que faça mais sentido em termos de programação, vou tirar isso daqui. Vou fazer uma entrada aqui embaixo, um flutuador chamado saúde atual Em vez disso, vou conectá-lo assim. Podemos nos conectar aqui. Acho que faz mais sentido. Podemos fazer as duas coisas, mas às vezes, quando você programa, você pode fazer as coisas de várias maneiras. Mas algumas formas são melhores práticas do que outras. Acho que este é um pouco melhor porque estamos atualizando a saúde atual aqui. Ok, a atualização de integridade está sendo atualizada aqui e, em seguida, estamos atualizando a interface do usuário que atualiza a barra de saúde. No começo, serão 100, mas se clicarmos em Jogar, você verá que ainda é zero na saúde. Isso ocorre porque ele só será atualizado. Agora, sempre que você clica no inimigo, como você vê aqui, se você não clicar no inimigo, ainda é zero. Isso ocorre porque temos que executar esse código sempre que geramos o inimigo Aqui em cima, quando atualizamos a interface do inimigo e atualizamos a saúde atual, eu também quero dizer que atualizamos a saúde. E faça isso em vez de fazer isso aqui, lembre-se de que já o configuramos dentro deste evento. Podemos excluir isso e, em vez disso, podemos simplesmente conectá-lo aqui e conectá-lo. Vamos compilar e clicar em play. E agora você vê que está cheio sempre que o inimigo aparece Sempre que eu clico, ele vai cair. Agora está funcionando, agora só precisamos da última coisa, que é atualizar o texto. Isso é muito mais fácil de fazer neste texto. Vamos arrastá-lo para fora e arrastar aqui e dizer definir texto. Vamos definir o texto aqui. Agora, para o texto, precisamos configurá-lo para qualquer que seja a saúde atual. Arraste-o até aqui. E arraste isso para baixo novamente. Clique duas vezes nele, faça com que pareça melhor. Compile e clique em reproduzir. Agora veja que a saúde é 100. Se clicarmos, ele vai cair. Agora podemos tentar novamente em outra coisa. Se formos às plantas, abra o modo de jogo, o nível atual, para algo como o nível três Sempre que eu clico no inimigo, ele atualiza a saúde corretamente. Novamente, agora tudo está funcionando, e vamos definir o nível atual de volta para um, compilar, salvar tudo e seguir em frente 44. 5.10 Flipbook de sucesso do inimigo: Agora que o dano está funcionando, quando clicamos no inimigo, o inimigo é danificado. Para melhorar um pouco, vamos reproduzir o efeito de golpe quando o inimigo for atingido. Isso vai ficar muito melhor. Lembre-se de que, na tabela de dados que já criamos nas informações do inimigo, já adicionamos os flip-books de animação de sucesso aqui Vamos usá-los. Vamos encerrar isso. Vamos voltar aos inimigos. Abra a base inimiga. Dentro da base inimiga. Vamos até aqui e criar um novo evento personalizado. Vamos chamar isso de efeito de um golpe. Vamos fazer isso aqui. Nós simplesmente queremos jogar o flip-book O inimigo apertou o flip book novamente, assim como antes de podermos pegar o flip É basicamente esse sprite aqui. Pegue o sprite arrastando dos sprites e você poderá escrever Você pode tentar ler. O que você pode fazer com tudo isso. O que queremos usar é esse conjunto de flip-book porque queremos configurá-lo para o flip book, já temos o flip book dentro das informações do inimigo Na verdade, vou copiar isso aqui. Cole-o e aqui vamos esconder os pinos desconectados Vamos clicar aqui embaixo. E eu só vou mostrar a animação de sucesso. E então eu vou conectá-lo aqui. Agora ele vai reproduzir a animação de sucesso. Agora, o efeito de sucesso. Sempre que clicamos agora, você precisa ver de onde faz sentido chamar esse evento? Faz mais sentido sempre que o inimigo sofre dano. Depois de atualizar a saúde, você também joga o evento de efeito de sucesso aqui embaixo. E vai reproduzi-lo. Eu clico em Jogar e clico no inimigo. Você pode ver que está jogando. No entanto, agora está ligado para sempre. Temos que consertar isso. Temos que colocá-lo de volta no flip-book normal depois que o inimigo for atingido O que vou fazer é deixar esse flip book de sucesso, jogar uma vez e depois voltar para o normal A maneira de fazer isso é pegar esse sprite aqui, arrastar aqui e dizer flip book. Você pode tentar ler o que você pode usar aqui, o que vai usar é este. Obtenha o tamanho do flipbook. Então eu vou atrasar por esse período de tempo. Vou atrasá-lo pelo tamanho do flip-book. Depois que isso terminar, podemos levá-lo aqui. Em vez de copiar e colar isso, vou usar a animação ociosa Vamos recuar assim. Basta copiar isso, colocar o flip book aqui e você pode colocá-lo novamente aqui Vou clicar para criar um nó de rota traseiro e algo parecido. Isso deve funcionar muito bem. Podemos tentar jogar agora se clicarmos no inimigo, e aqui está, agora vou aumentar a quantidade de tempo que esse efeito de golpe está sendo reproduzido, porque ele está sendo reproduzido muito devagar e parece estranho Vou voltar aos meus ativos e abrir os personagens. Agora, para esse hit, temos que aumentar os quadros por segundo aqui, para que ele seja reproduzido muito mais rápido. A maneira de fazer isso é clicar em Controle Z aqui. Se eu selecionar todos os hits um, basta manter o controle de todos os flip books de sucesso O que você pode fazer é clicar com o botão direito novamente, nas ações do ativo, na seleção por meio da matriz de propriedades. Assim, você pode editar todos eles de uma vez. E então vamos definir os quadros por segundo. Vou definir para 40 quadros por segundo. Deixe-me salvar todo o jogo e ver como fica. Isso é o que parece. Parece muito melhor que o inimigo esteja sendo atingido. Isso foi tudo para o efeito de sucesso. Muito, muito fácil. Agora vamos em frente e trabalhemos com a morte do inimigo. 45. 5.11 Morte do inimigo: Agora, para a morte do inimigo, obviamente, o inimigo morre sempre que a saúde é zero. Faz mais sentido fazer isso aqui. Sempre que danificamos o inimigo, verificamos se a saúde atual está aqui; na verdade, não estamos verificando nada. Basicamente, estamos apenas calculando a saúde atual e atualizando a saúde Antes mesmo de atualizar a saúde, quero verificar se meu inimigo está morto ou não. Vamos fazer isso aqui. Sempre que a saúde estiver, o inimigo deve morrer aqui. Vou apenas arrastar e dizer se a saúde é maior que zero e fazer um galho ir em frente e conectar isso. Sempre que a saúde é maior que zero, só queremos continuar o que fizemos antes. No entanto, se a saúde não for maior que zero, isso significa que a saúde é zero porque a fixamos em zero, então ela não pode ser negativa Se for zero, vamos fazer o inimigo morrer. Vou criar uma nova variável, um lingote chamado B está morto Eu geralmente adiciono um B na frente das minhas variáveis de ouro. E você pode ver que se você arrastá-lo aqui, você não consegue ver o B. Isso geralmente é feito em C plus plus e também é muito mais fácil pesquisar se você tiver um jogo maior. Agora vamos adicioná-lo e defini-lo como verdadeiro. Sempre que a saúde não for maior que zero, significa que o inimigo está morto. Então, podemos definir isso como verdade. Além disso, continue atualizando a saúde, pois também precisamos atualizar a saúde e fazer o efeito de golpe. Agora, para este, podemos clicar duas vezes e criar nós de rota traseiros, não parece ruim, assim. Agora, o que podemos fazer com esse? Com esse. Obviamente, aqui no efeito de golpe, sempre que atingimos o inimigo que atingimos antes. Não quero reproduzir a animação inativa sempre que o inimigo morre. Vamos levar esse valentão aqui. Depois de adiarmos esse tamanho, o tamanho do livro de sprites , atrasamos Em vez de reproduzir a animação inativa instantaneamente, precisamos verificar se o inimigo está morto ou não Vamos atacar aqui, fazer um galho e perguntar: o inimigo está morto? Sim, o inimigo está morto. Ok, então queremos jogar um evento de morte. Ainda não criamos um, então vamos até aqui, clique com o botão direito e crie um novo evento personalizado chamado morte. Podemos fazer algo com isso mais tarde, mas aqui, se o inimigo estiver morto, quero jogar o evento da morte aqui embaixo. Se o inimigo não estiver morto, quero reproduzir a animação inativa como fiz antes Vamos excluir este e reconectá-lo aqui. E clique duas vezes mais uma vez. Ok, aqui no evento da morte, o que queremos fazer é simplesmente reproduzir a animação da morte. Então, vamos novamente, assim como antes, considerar tudo isso aqui junto com o atraso. Eu vou copiá-lo. Vou colar aqui embaixo. E eu vou conectá-lo assim. Em vez de reproduzir a animação de sucesso, vou desconectá-la, esconder tudo e exibir apenas a animação da morte Vá em frente e conecte esse. Em vez disso, vamos atrasá-lo. Depois de atrasarmos, quero destruir Acta. Quero remover esse Acta do mapa. Vamos clicar em Avião. Agora, sempre que eu clico no inimigo, agora o inimigo morre. Você pode ver o inimigo desaparecer. E isso parece bom. Basicamente, você também pode ver que a animação da morte é estranha, o inimigo cai. Temos que consertar isso. Antes de fazer isso, também precisamos aumentar o nível, porque quando o inimigo morre, queremos que o próximo inimigo esteja lá Também posso ver que acabei de ver um dólar. Se você clicar muitas vezes, você pode continuar clicando e eu não quero fazer isso. Também temos que fazer uma verificação aqui no modo não clicado. Não queremos clicar no inimigo sempre que ele estiver morto. Vamos mover isso e dizer se o inimigo está morto. E eu vou escrever “not bully in” Isso significa que se o inimigo não está morto, se está morto é falso, é isso que significa aqui. Se o inimigo não estiver morto, podemos fazer um galho aqui e perguntar se o inimigo não está morto. Podemos prosseguir e causar danos. Se o inimigo estiver morto, não queremos fazer nada. Vamos clicar em Planejar agora e ver se esse bug foi corrigido. E eu posso enviar spam, você pode ver a caixa lá, então tudo está funcionando novamente. A animação da morte é estranha. Temos que consertar isso. Mas vamos continuar na próxima lição e trabalhar na incrementação do nível 46. 5.12 Incrementando o nível: Ok, para aumentar o nível, acho melhor fazer isso no modo de jogo, porque é aqui que o nível atual é controlado Vamos fazer isso aqui, aqui. Vamos criar um novo evento personalizado. Vamos chamar isso de nível de corrente incremental aqui. Muito simples. Só queremos pegar o nível atual que queremos arrastar aqui e dizer mais, mais, porque mais mais significa que você incrementou em um e depois o configura É a mesma coisa que fazer isso e dizer mais um e depois definir assim. É o mesmo método. Isso é muito mais curto. Novamente, lembre-se, mais mais significa que você adiciona um. Se você precisar adicionar dois no futuro, você não pode fazer assim, você tem que fazer assim. Mas isso realmente não faz sentido. Nosso nível está apenas aumentando em um. Vamos fazer isso dessa maneira. Agora aumentamos o nível em um, mas precisamos ter certeza de não ultrapassar o nível máximo. Vou criar uma nova variável chamada nível máximo e também vou fazê-la como um número inteiro Aqui você pode escrever qual é o nível máximo. Até agora, na tabela de dados, posso ver que meu nível máximo é 11 aqui. Vou escrever 11 como meu nível máximo aqui. Vou me arrastar para baixo e dizer que se o nível atual for menor ou igual ao meu nível máximo, podemos seguir em frente e gerar o inimigo Porque quando você aumenta o nível, você também precisa gerar o próximo inimigo Vou perguntar aqui, meu nível atual é menor ou igual ao nível máximo, não ultrapassamos o nível máximo. Se isso for verdade, eu quero gerar o próximo inimigo. Lembre-se de que, para o inimigo de desova, já fizemos isso no controle de jogo Se eu for para o controle de jogo, teremos esse inimigo de desova Vamos usar isso. Na verdade, nós usamos isso aqui também. Então você pode copiar isso. Ou se você quiser se lembrar de como você fez isso, você pode usar o controle do player. E, na verdade, vejo que não criamos uma variável para essa. Vamos aqui, promover isso para uma variável, chamá-la de controlador de jogador. E conectei e conectei este com este em vez disso. Na verdade, vamos nos desconectar porque agora os dois estão conectados Mantenha pressionada a tecla Alt e clique para desconectar e conectar apenas esta Vá em frente e junte-os assim. Agora, aqui embaixo, vamos pegar o controle de jogo e dizer gerar um inimigo conectado Lembre-se de que criamos essa função aqui chamada fazer com que o inimigo apareça no nível atual Basicamente, acabamos de obter o nível atual, obtivemos o nome do inimigo porque é um novo inimigo. Porque lembre-se de que aumentamos o nível em um. O nível atual é incrementado em um. Vai pegar o próximo inimigo na tabela de dados, se fosse o. Agora vai aumentar o nível em um. Agora vai pegar o Roe, o ladino vai ficar preso aqui e desovar Vamos em frente e aqui. Agora, isso deve funcionar muito bem. Vamos aumentar o nível. Temos que executá-lo em algum lugar. E vamos atropelá-lo no inimigo. Se eu abrir o inimigo novamente, sempre que o inimigo morrer, pouco antes de destruirmos o Acta Vamos continuar e aumentar o nível. O nível de incremento está no modo de jogo. Já temos uma referência. Vamos pegar, digamos, incrementar. Se eu puder soletrar aqui, aumentar o nível atual, então destruiremos o ato Vamos clicar em reclamar. Veja o que acontece se eu clicar em jogar? Eu mato o inimigo, o inimigo morre. Nos próximos períodos, eu posso clicar novamente, o inimigo morre. Você pode ver que as animações de morte precisam ser corrigidas. E podemos fazer isso de uma maneira fácil, mas, como você pode ver, tudo está funcionando bem. E agora parece um jogo. Agora você pode clicar no próximo inimigo que aparecerá depois e assim por diante Incrível, agora essa é uma progressão muito boa. Vamos salvar tudo, e vamos corrigir as animações de morte na próxima 47. 5.13 Consertando as animações de morte do inimigo: Para corrigir as animações de morte. Vamos ver os ativos e nos caracterizar aqui. Temos que consertá-los porque há algo errado com essas animações de morte se clicarmos nelas. Em vez de fazer isso aqui, acredito que temos que fazer isso no sprite, abrir as texturas e abrir a noite, por exemplo, e é a Morte da Morte Abra, você pode ver que o ponto O está aqui, por exemplo, vamos verificar a noite, a noite, vamos ver que a noite está no nível 11 aqui durante a noite. Vou definir a saúde como uma, na verdade, vou deixar que esteja aqui. Vou definir meu dano. Isso é muito mais fácil se eu abrir o controle do player ou preferir o player. E o dano do cursor. Vou apenas configurá-lo para algo muito alto para que possamos fazer o modo de jogo instantâneo. Vamos para o modo de jogo aqui. Vamos definir o nível atual para 11 jogadas. Eu posso clicar aqui, o inimigo é empurrado para o lado. Isso ocorre porque o ponto de articulação está em um lugar errado no ponto de articulação em vez do centro central Você precisa alterar este para personalizado. Agora você tem que jogar com o ponto de pivô aqui. Você pode brincar com ele e ver o que acontece. É por isso que não precisamos brincar com isso. Um que queremos jogar é esse. Agora está às 24. Se eu dissesse isso para a alfândega novamente, 24, o que eu quero que você faça é dizer algo como menos oito geralmente é um bom número Menos oito. Você pode ver que está no meio. Agora tente incrementar em oito ou, digamos, menos oito. Normalmente, para o piloto, é mais oito. Menos oito, menos oito parece funcionar. Temos que fazer isso em todos eles. Se eu abrir os ativos novamente, personagens, texturas, agora tenho que fazer isso para todos eles. Em vez de fazer isso, deixe-me clicar com o botão direito do mouse, vá para a seleção Asset Action It na matriz de propriedades do sprite Vamos definir o ponto de articulação para ser personalizado. Agora eu não posso mudar, por algum motivo, o ponto de articulação personalizado aqui. Eu tenho que fazer isso manualmente. Não acredito que possamos fazer isso. Temos que fazer isso manualmente. Mas definimos o ponto de articulação como personalizado. Agora vamos clicar no primeiro. Digamos que menos oito, assim como antes, temos que fazer isso com todos eles. O próximo menos oito, o próximo menos oito, próximo menos oito e o último Agora vamos ver se isso está funcionando. Vamos clicar em jogar. Agora, se matarmos esse inimigo, a animação ficará boa. Também consigo ver um bug. Se você perceber que, se eu clicar em jogar, o inimigo morre, o inimigo aparece novamente, desaparecendo Assim, você pode ver o inimigo ou um quadro aparecer antes de desaparecer Vamos continuar e corrigir isso aqui também, enquanto vemos o bug. Vamos ao Blueprint. Vamos para a base inimiga, inimiga. Está acontecendo aqui na morte porque nós a atrasamos. Em seguida, aumentamos o nível e depois destruímos o ator. Se você quiser, pode pegar esse sprite aqui, deixe-me mover tudo isso Podemos dizer aqui e dizer que é um loop, ou melhor, definir um loop Defina o loop, podemos definir o loop como falso. Então você pode tentar ver aqui quando eu mato o inimigo para fazer isso. Mas talvez agora ele também defina o loop como falso para o próximo Vamos realmente ver o que ele faz. Provavelmente acontecerá se eu entrar no modo de jogo. Agora abra o modo de jogo. Defina o nível atual para algo como nove jogadas. Agora, se eu matar esse cara, o próximo, tudo bem. Agora tudo está funcionando bem. Isso resolve o problema. Vamos voltar para o nível 11. Você pode ver que fixa o ponto de pivô, corrige a animação da morte desse cara Aqui você tem que testar todos eles para o nível um. Deixe-me mostrar alguns deles e eu tenho que fazer isso no meu tempo, caso contrário, o vídeo será muito longo. Mas deixe-me mostrar dois deles. É o próximo, esse aqui. Vamos para Texturas. Vamos encontrar a Morte aqui embaixo. Vou selecionar todos eles. Clique com o botão direito do mouse. Seleção na Property Matrix, aqui no sprite Vamos mudar o ponto de articulação para personalizado. Vamos, vamos encerrar isso. Agora, abra cada um aqui. Agora, para este, você pode ver que está aqui em cima. Talvez tenhamos que corrigir o y e o X. Vou dizer menos oito Não é menos oito, é mais oito. Mais oito, novamente para voltar ao padrão. E mais oito, novamente, talvez eu precise. Mais oito novamente, assim, são 48. Vamos tentar fazer isso. Mais 16, basicamente, no total. Mais 16, mais 16. Eu tenho que adivinhar e ver se está correto aqui. Mais 16. 16 para este também. Vamos clicar em Jogar. Você pode ver que a animação da morte está correta. Por enquanto, a morte está correta. Temos que fazer isso com todos eles novamente. Mais oito menos oito pixels é sempre a melhor opção O próximo é o Roe. Vamos experimentar o E. Você mesmo pode experimentar o resto. Morte, clicamos na seleção na Matriz de Propriedades. Aqui, vamos para Sprite. Altere o ponto de pivô ou o modo de pivô para personalizado. Vamos abri-lo no primeiro novamente, digamos mais oito. Acho que é mais oito novamente. Mais 16. Vamos fazer isso para o resto deles. Digamos que mais 16 aqui também. Mais 16, acho que é o mesmo número. Vamos copiar esse número e, basicamente colar esse número em todos eles assim. Apenas tenha cuidado, nem sempre é o mesmo número no X. Preste atenção agora vamos jogar e ver Agora a primeira morte está correta, a segunda morte está correta Ok, vamos fazer isso. Eu vou fazer isso sozinho agora. Basicamente, basta editá-los na matriz de propriedades para personalizar e , em seguida, dizer mais oito ou menos oito até que seja corrigido Tudo bem, agora eu terminei. Quando eu clico agora, você pode ver que sempre que eu mato os inimigos, eles estão todos corrigidos em relação à animação da morte. Então, tudo está indo bem. Eu só vou fechá-lo. Agora foi isso. Lembre-se de voltar ao controle do jogador, controlar o modo de jogo e definir o nível atual para um, se quiser. Além disso, configure os controles do player para não jogar. Controle o dano do cursor do jogador até cerca de 15. Novamente, compile e agora terminamos com isso e vamos passar para a próxima 48. 5.14 VFX de sucesso de clique: Tudo bem, então o que podemos fazer agora é fazer um efeito de golpe sempre que estivermos atingindo o inimigo Então, podemos ter algum tipo de efeito que aparece. Então, efeito visual sempre que estamos batendo. Vamos fazer isso. Agora, para o efeito de sucesso, eu lhe dei algo dentro do material do curso. Se você abri-lo aqui nos materiais do curso, eu quero que você abra a interface do usuário. Na interface do usuário, eu dei a você um efeito de sucesso aqui. Vamos colocá-lo nas imagens. Então, deixe-me arrastá-lo até aqui. Adicione agora que é pixel. Vou clicar com o botão direito do mouse nas ações certas e aplicar papel às configurações. Isso é o que vamos adicionar. Apenas um efeito simples para isso. Novamente, são alguns sprites juntos. Vamos clicar com o botão direito do mouse, como antes, e extrair os sprites. Vá em frente e selecione Grade aqui. Para a grade, temos que adivinhar o que é. Talvez 64 por 64. Você pode ver que na verdade é menos do que isso. Mas o que podemos fazer é ver que é dois a dois. Então, podemos realmente dividir isso, podemos dizer dividido por dois, ou você pode escrever 32. Isso também é bom, dividido por dois e será correto, 32 por 32. Vamos extrair tudo isso. Deixe-me escrever, clique aqui para não ficar cheio de tudo isso Deixe-me criar uma nova pasta, e vou chamá-la de Texturas E vá em frente e selecione tudo isso. E selecione isso também. E adicione-o aqui e aqui. Vamos fazer um flip-book com este. Eu seleciono tudo isso e posso escrever Clique em Eu posso fazer, sair do flip book. Vamos chamá-lo de flip book. Efeito de sucesso. Vamos abri-lo. E isso é o que parece agora para o efeito de impacto. Acho que os quadros por segundo em 15 são bons para mim. Parece bom. Sempre podemos ajustá-lo no jogo. Vamos fechá-lo por enquanto. E arraste isso para a pasta de imagens. Está aqui, e podemos usá-lo agora. Você pode fazer isso de duas maneiras. A primeira maneira de fazer isso é no blueprint, assim como antes Assim como os outros sprites, você pode realmente adicionar o sprite aqui Sempre que você clica no inimigo, você pode jogar o sprite para que ele cause algum dano No entanto, a desvantagem é que você só pode jogar uma instância do efeito de dano se clicar duas vezes uma após a outra Ele cancelará o último efeito e reproduzirá o novo. Eu não gosto disso. Eu quero gerar quantos efeitos eu quiser, dependendo da velocidade do jogador Clicando disse, vamos em frente com as plantas. E aqui, vamos clicar com o botão direito do mouse em criar uma nova classe de blueprint e criar um ator simples que contenha esse flipbook. Crie um ator. Vamos chamar isso de efeito de impacto da BP Vamos abri-lo aqui. Vamos adicionar um flip book. Se você pesquisar por flip book, poderá adicioná-lo Vou chamá-lo de Hit Effect. Agora podemos adicionar o flip book aqui. É esse único flip-book. Efeito de golpe. Vá em frente e selecione-o. E aqui você pode ver isso. Agora, para esse efeito de impacto, vou até a colisão e me certificar de que não haja nenhuma colisão, porque não quero, para a colisão, remover essa colisão, gerar eventos de sobreposição Eu vou dizer não aqui para as predefinições de colisão. Eu só vou dizer que não há colisão , não tem nenhuma colisão. Eu e compilo e vamos fechá-lo. Agora eu quero gerar isso sempre que eu clicar no inimigo. E lembre-se de que a desova é sempre feita sob o controle do jogador Então, eu vou entrar aqui para fazer isso. Vou apenas criar um novo evento personalizado. Vou chamar isso de efeitos de geração, como antes, arrastar até aqui e dizer gerar Acta Agora, qual cláusula queremos gerar? Não precisamos conectá-lo aqui porque é apenas um valor estático e é o efeito de impacto, esquema que queremos gerar Eu vou dizer que sempre apareça, ignore as colisões. Agora, para a transformação de spawn, depende de onde clicamos com o mouse para encontrar esse valor O que podemos fazer é clicar com o botão direito do mouse e usar essa função. Se você apenas pesquisar por mouse, se não souber como eles são chamados, é isso que eu faço. Às vezes, você pode dar uma olhada em tudo isso. O que podemos usar para esta instância, podemos usar essa. Converta a localização do mouse no espaço mundial. Onde quer que o mouse esteja, vamos gerar o efeito em que o jogador clicou Vamos fazer isso. conectá-lo aqui assim. Isso vai transformá-lo em uma transformação para nós e conectá-lo. Vamos tentar fazer isso. Por enquanto, temos que gerar o efeito de golpe em algum lugar. Vamos criá-la aqui dentro do inimigo. Sempre que clicamos no inimigo e ele não está morto, aplicamos o dano, mas também queremos reproduzir o efeito de golpe. Vamos atacar aqui a partir do controle do player. E nós realmente não temos uma referência ao controle do player. Deixe-nos fazer isso. Agora deixe-me arrastar esse modo de jogo até aqui. Deixe-me dizer controlador. E selecione-o. Já fizemos isso antes. Podemos arrastar e dizer, obter a referência do controlador do player. Já temos essa interface de projeto. Vamos, com razão, promover isso para uma variável chamada controlador de jogador Vamos conectá-lo aqui. Temos isso muito rapidamente. Agora podemos pegar esse controle de player até aqui e dizer como o chamamos. Se eu simplesmente voltar, não me lembro, eu volto aqui. Chamamos isso de efeito spawn hit, arraste aqui. E diga o efeito spawn hit, respondendo toda vez que aplicamos dano à frente, compilamos e salvamos Agora, se clicarmos no inimigo, veremos que realmente o geramos aqui Mas agora você pode ver que está girando para sempre. Temos que consertar isso também. Você também viu que o efeito está basicamente dentro do inimigo. Eu também não quero que isso resolva isso, pois o efeito está dentro do inimigo. Isso ocorre porque, lembre-se de que estamos trabalhando com dois D e basicamente controlando esse valor verde. O valor verde, lembre-se de que é o y, você move as coisas para trás ou para frente, em vez de ser zero na posição do mouse. Vamos pegar isso e dizer mais, vamos tentar dizer mais um em y. Vamos converter isso de volta aqui. Jogue e veja se mais está atrás do inimigo. Se você simplesmente excluir isso e disser menos, menos um, vá em frente e conecte-o Jogue. Agora você pode ver que está na frente do inimigo. Ok, agora vamos em frente e temos que destruir. Porque lembre-se de que é muito importante que você destrua o ato. Porque se você continuar clicando, lembre-se de que estamos gerando atos. Basta dar uma olhada aqui, quantos atores você está gerando. Toda vez que clico, estou criando um ator. Imagine que se você continuar clicando 2 horas depois, você terá tantos atores que vai travar seu próprio jogo. Certifique-se de que, sempre que gerar algo, você também o remova quando não precisar mais dele. Dentro desse efeito de golpe no início do jogo, vou usar esse efeito de golpe. Este é basicamente esse flip-book aqui. Agora vou dizer que o conjunto de loops é falso, não quero que ele se não quero que ele Além disso, assim como antes de usarmos esse tamanho de flip book, obtenha o tamanho do flip book e, em seguida, criarei um nó de atraso Depois que o efeito for reproduzido uma vez, vou destruir o ator. Para qual ator eu vou? Eu só vou me destruir, ou seja, vou destruir esse projeto aqui E quando eu clico em reproduzir agora, e também presto atenção aos atores aqui em cima, eu clico aqui, eu gero um ator, mas ele volta para 15 e só toca uma vez, como você pode ver aqui Mesmo que eu envie spam aqui e clique, eu faço alguns danos. Parece bom. Sempre voltará para 15 porque destrói todos os efeitos que eu crio e que estão funcionando perfeitamente Agora vamos passar para a próxima. 49. 5.15 Criando a interface de usuário de texto flutuante: Vamos agora criar a interface de usuário de texto flutuante, que aparece sempre que você atinge o inimigo. E dirá quanto dano você causou. Agora, antes de fazermos isso, deixe-me adicionar HP por trás do nome de saúde. Sabemos que é saúde. Vamos fazer isso muito rapidamente antes de continuarmos. Se você abrir o widget da barra de saúde, modelo que criamos anteriormente no gráfico, é aqui que adicionamos a Agora lembre-se de que, se você quiser texto estático além de algum texto dinâmico, precisará usar o formato de texto com muita facilidade. Basta escrever texto em formato a partir daqui. Vamos escrever colchetes abertos e vou chamá-los de saúde e fechar colchetes. Agora isso aparece, então podemos escrever no espaço HP. Temos a HP por trás disso. E eu vou deletar tudo isso. E, na verdade, podemos simplesmente arrastar a partir daqui e conectá-la, e ela usará essa variável inteira Agora isso está corrigido e é tudo o que precisávamos fazer. Agora você pode ver se eu clico em Jogar. Se eu simplesmente reorganizar isso e clicar em jogar. Agora você vê que eu também tenho HP no final das contas, e acho que parece muito melhor. Ok, vamos fechá-lo. Vamos agora clicar com o botão direito aqui. Vá para a interface do usuário e crie um novo widget, blueprint. Faça um novo. Vamos chamar isso de texto flutuante. Agora, para este, vamos abri-lo mais uma vez. Vamos adicionar uma tela primeiro. Em seguida, vamos adicionar algumas para o texto. Na verdade, podemos simplesmente copiá-lo das informações do inimigo. Podemos usar o mesmo aqui, controle para o texto. Vá aqui para o painel de tela e controle V. E aqui está para a tela cheia. Em vez disso, vou alterá-lo para desejado na tela. Em seguida, o tamanho da tela novamente, alterando-o para um laptop genérico como antes. Além disso, garantir que o texto aqui esteja, já é porque o copiamos daqui Mas certifique-se de que o alinhamento seja 0,50 0,5 e a posição seja 00 É perfeitamente censurado aqui e também que o tamanho do conteúdo esteja marcado Ok, então aqui está o texto que precisamos ter. E isso foi, na verdade, quero dizer, não há muita coisa nisso porque vamos ter os danos aqui. Mas você pode simplesmente escrever um texto de preenchimento se quiser, por exemplo Você pode escrever, por exemplo, esse é o dano que o jogador causou. Obviamente, o jogador não vai fazer muita coisa no começo. Mas, novamente, isso é apenas um preenchimento. Vamos fechá-lo e continuar. 50. 5.16 Animação de texto flutuante: Agora é hora de fazer alguma animação da interface do usuário. Se você abrir sua interface de texto flutuante, mais uma vez você terá a animação aqui embaixo. Agora, se você não o tiver aberto, você sempre pode clicar aqui e na guia Animação. E então você pode clicar em Duck in Layout. E vai ficar ativo o tempo todo. Agora, para criar uma animação de interface de usuário, você precisa primeiro criar a animação. Clicando aqui embaixo, vou chamá-lo de texto flutuante aqui. Primeiro você precisa clicar no que quiser para animar esse texto Por exemplo, neste texto, na verdade, vou mudar o nome dele. Não é informação do inimigo, é um texto flutuante como este. Você precisa clicar na faixa positiva ao fazer isso e selecionar o texto flutuante. Você pode ver que ele aparece aqui embaixo. Clicando no texto flutuante, clique aqui novamente. Então temos algo chamado transformação. E é aqui que você altera a posição na tela, assim como a rotação do texto. Se você apenas abrir a transformação e a tradução, é isso que queremos editar. O que eu quero fazer aqui é muito, muito simples. Eu só quero fazer esse texto flutuante voar para cima sempre que eu atingir o inimigo Então, vamos começar aqui do zero, está tudo bem, nada vai acontecer. É zero. Agora, quando eu vou para, digamos, 0,6 segundos, acho que vou fazer com que seja algo como -100 E o y, está aqui em cima Agora você pode ver quando você o arrasta, o texto voa para cima. Agora você tem que testá-lo no jogo para ver o quão rápido ele realmente voa. Mas se você simplesmente clicar no espaço, se eu simplesmente remover essas linhas aqui para o texto de teste flutuante, você pode simplesmente clicar no espaço para reproduzi-lo. Isso faz você ver o quão rápido ele realmente é reproduzido. Eu acho que está tudo bem. Sempre podemos ajustá-lo se não estivermos satisfeitos. Agora, a próxima coisa que eu quero fazer é que ele desapareça nesta fase da animação. E então aparece, e depois desaparece mais uma vez aqui em cima. Vamos clicar aqui. Vamos encontrar a opacidade aqui embaixo, a opacidade Rendo. Vamos continuar e clicar nele. Agora, no começo, eu quero que seja zero. Começa sem opacidade e depois vai para algo como 15 Aqui, aos 15 anos, quero que a opacidade seja uma. Novamente, parece. Agora você pode ver que aparece, ou aparece aqui para nós, é invisível no começo. Então eu acho que com 0,45 eu quero que seja um. Novamente, basta clicar neste pequeno ponto aqui para adicionar um ponto de animação. Então, no final, quero que seja zero. Mais uma vez, você pode ver que parece assim. E então desaparece aqui novamente. Clique no espaço e veja como é a animação. Uma animação muito simples, mas com aparência profissional. De alguma forma, muito rápido. Você pode passar muito tempo, às vezes eu passo meia hora, 1 hora , 2 horas para fazer algo muito complexo. Você sempre pode fazer com que o texto não apenas voe para cima, mas ele possa voar assim em um arco para o lado, como este Você pode tentar brincar com a animação o quanto quiser. Sempre parece profissional quando um jogo é muito bom. Por exemplo, animação I, animação de texto. Isso foi tudo o que precisávamos fazer agora que temos a animação. Vamos continuar com a próxima. 51. 5.17 Gerando o texto flutuante: Tudo bem, para texto flutuante, precisamos gerá-lo no nível Agora, não podemos adicioná-lo ao inimigo, geralmente entramos no inimigo e, dentro daqui, adicionamos um widget como a barra de saúde e assim por diante No entanto, para o texto, já que estamos enviando spam como se estivéssemos enviando spam o inimigo e estamos clicando aqui, muitos textos aparecerão como texto de combate Não podemos adicioná-lo ao inimigo porque, se o adicionarmos ao inimigo, somente uma instância desse texto aparecerá por vez. Parecerá um pouco estúpido se apenas um texto estiver voando aqui, assim como o efeito de impacto aqui. Quando clicamos no inimigo, temos que gerar o texto exatamente como fizemos aqui Lembre-se de que, com o efeito de sucesso, na verdade, o anexamos a um ator que aparece e depois se exclui Temos que fazer o mesmo método. Vamos clicar com o botão direito do mouse aqui, criar uma nova classe de blueprint Basta selecionar um ator simples, vamos chamar isso de texto flutuante BP Agora, dentro daqui, vamos abrir esse. Para o texto flutuante, vamos clicar em um widget de pesquisa Vá em frente e selecione o widget um. Vamos chamá-lo de texto flutuante. Agora, clicando nele, vamos mudar o espaço para a tela, porque queremos que ele o visualize em direção à tela da classe de widget Vamos alterá-lo para o texto flutuante. Desenhe o tamanho desejado e, em seguida, tudo ficará bem. Vá em frente e compile a próxima coisa que queremos fazer. Agora lembre-se de que precisamos gerar isso sempre que clicarmos no inimigo Vamos ver aqui, os inimigos e a base. Sempre que clicamos no inimigo e aplicamos dano, queremos gerar esse ator Agora lembre-se de desovar. Estamos fazendo isso no Player Controller Vamos até o controle do Player, abra-o, aqui estamos fazendo a desova aqui dentro Vamos fazer um novo evento para isso. Vamos clicar com o botão direito do mouse e criar um novo evento personalizado para este. Vamos chamá-lo de gerar texto flutuante. Novamente, vamos clicar com o botão direito do mouse aqui e usar aquele chamado spawn actor from class Essa, a coisa que queremos que surja como antes. Não precisamos que isso seja dinâmico como esse no evento porque é apenas uma classe de classe estética que estamos criando. Assim como o efeito de impacto aqui. Vamos selecionar o texto flutuante que queremos gerar e, em seguida, conectá-lo Agora, onde queremos gerá-lo? Precisamos de um local de desova, verdade não precisamos da transformação Em vez disso, vou pegar isso e dizer faça transformação. Quando fazemos isso, estamos quebrando a transformação. Lembre-se de uma trans: se você olhar o painel de detalhes, se selecionar algo, ele consiste na localização, rotação e escala do item quando o dividimos. E é chamado para fazer, lembre-se de que chama quebrar se for dessa maneira, mas é chamado, vai desse jeito. Sempre pode arrastar a partir daqui. Digamos, por exemplo, um vetor de quebra. Mas eu não posso dizer fazer vetor dessa forma. Isso não faz sentido. Quebrando desse jeito, fazendo desse jeito. Estamos fazendo a transformação. Assim, podemos ver a localização, rotação e a escala também. Agora que temos a localização, vamos arrastá-la até aqui e ver o que acontece. Sempre podemos editá-lo mais tarde. Para isso, vou chamá-lo de local de desova. Então, também precisamos do texto que precisamos ter, qual deveria ser o texto? Vamos editar isso mais tarde. Não precisamos fazer isso agora, mas agora estamos pelo menos gerando o texto também aqui embaixo. Certifique-se de selecionar sempre gerar ignorar colisões e continuar compilando Vamos garantir que as colisões não ocorram. Se eu for até o texto flutuante e clicar no widget, desça até o caractere inferior, aumente o número não, remova, gere eventos de sobreposição E também para as predefinições de colisão, defina-a como sem Não queremos nenhuma colisão desse ator aqui. Vá em frente e salve tudo. Agora, aqui na base inimiga, vamos tentar criá-la aqui para o controle de jogo Nós já temos isso aqui. Vamos atacar e dizer que gera texto flutuante. Vá em frente e selecione agora que temos que especificar um local onde queremos gerá-lo Agora, onde queremos desová-lo, é exatamente onde esse inimigo está atualmente E lembre-se de que estamos no inimigo. Vou me arrastar daqui e dizer pegue uma localização. Ou, para obter a localização do inimigo, eu vou apenas gerá-lo, portanto Agora vamos clicar em Jogar e ver o que acontece se eu clicar no ato aqui ou no inimigo. Você pode ver que está realmente desovando, mas também precisamos removê-lo Não parece cheio de bugs assim, mas vamos continuar com isso em outra lição Pelo menos agora estamos gerando o texto quando clicamos no inimigo Como você pode ver aqui, estamos basicamente reproduzindo esse texto flutuante de spawn O que eu também quero fazer aqui é que o efeito spawn hit é basicamente jogado toda vez que atingimos o inimigo E estamos gerando o texto flutuante porque estamos atingindo O que podemos fazer agora, já que não vejo nenhum problema com isso no momento, sempre podemos gerar o efeito de impacto aqui Toda vez que causamos danos, temos que jogar isso e aquilo. Gosto de jogar o mínimo de funções possível para que você não se confunda com o jogo. Mais tarde, vou controlar o X para remover isso. Em seguida, vou conectar esse texto flutuante de spawn. Só então eu vou entrar aqui. Aqui podemos gerar esse efeito de sucesso. Já temos esse evento aqui dentro. Basta arrastar e dizer, spawn hit effect. Agora, sempre podemos gerar o efeito de acerto toda vez que geramos o texto flutuante Se houver uma instância posterior no jogo em que tenhamos que gerar o texto flutuante sem o efeito de acerto, sempre podemos voltar e adicioná-lo aqui Mas, por enquanto, não precisamos adicionar dois eventos o tempo todo. Sempre podemos jogar isso e tudo ficará bem. Ok, isso foi por enquanto. Vamos continuar com o próximo. 52. 5.18 Atualizando a exibição de texto flutuante: Ok, agora vamos atualizar o texto flutuante corretamente. Agora você pode tentar fazer isso sozinho, porque na verdade é uma tarefa simples. Então, tente pensar em como posso atualizar esse texto flutuante corretamente. Quando eu clico no inimigo, esse texto deve ser exibido corretamente. É sempre bom fazer isso sozinho se você ainda não tiver certeza de como fazer isso Vamos tentar continuar juntos agora. Às vezes, gosto de começar ao contrário. Em vez de começar pelo controle do player e tentar atualizar as coisas aqui. Eu gostaria de começar com a última etapa, porque ela fará mais sentido no final. Vamos para a interface do usuário. Vamos abrir o texto flutuante. Basicamente, o objetivo que queremos fazer é atualizar esse texto aqui. Nós o chamamos de texto de texto flutuante e, em seguida , o tornamos variável aqui no gráfico. Vamos simplesmente deletar tudo isso. O que queremos fazer é pegar esse texto e usar aquele chamado texto definido. Esse é basicamente o nosso objetivo. Queremos definir o texto com um valor semelhante ao dano que causamos com o mouse. O que podemos fazer é clicar com o botão direito do mouse e fazer um evento personalizado. E então podemos dizer atualizar texto flutuante. Podemos simplesmente usar esse evento personalizado. Vamos conectá-lo agora texto com o qual queremos atualizá-lo Sempre podemos simplesmente conectá-lo ao evento e atualizá-lo posteriormente de forma dinâmica Vamos chamá-lo apenas de texto, ou você também pode chamá-lo de texto flutuante. Vou chamar isso de texto. Na verdade, não precisamos chamá-lo texto flutuante e compilar Agora precisamos usar essa atualização, texto flutuante. Vou atualizá-lo por meio do meu ator, porque é isso que faz mais sentido para mim. Vou ver as plantas. Indo para o texto flutuante. Abra-o aqui dentro, queremos usar essa atualização, texto flutuante. Eu, eu vou usá-lo sempre que gerarmos o ator. Toda vez que clico e geramos esse ator, quero que ele seja atualizado instantaneamente Eu só vou usar o início. Jogue aqui no ator de texto flutuante aqui. Vamos usar esse texto flutuante. Adicionamos o widget, vamos arrastá-lo até aqui. E digamos que obtenha dados do widget do usuário. Ou obtenha o objeto do widget do usuário, em vez de dados. Agora, este, vamos dizer, novamente, custou dois. Vamos falar do texto flutuante aqui. Vá em frente e conecte-o. Agora, para este, vamos arrastar e agora podemos usar a atualização de texto flutuante, UI. Vamos arrastar e dizer atualizar texto flutuante I. Temos que ter um valor desse texto porque agora você pode ver se eu apenas escrevo olá, por exemplo. E eu compilo e clico em Play. E eu clico aqui, você pode ver que agora ele está sendo atualizado corretamente. No entanto, como faço para obter o dano aqui? Porque na verdade não temos uma variável de texto e eu realmente não tenho plug-ins para ela como qualquer entrada Agora, o que você pode fazer é criar uma nova variável. Se eu criar uma nova variável aqui e chamá-la apenas de texto, vou transformá-la em uma string. O que podemos fazer agora é descer e abrir o Player Controller. Lembre-se de que esta é a próxima etapa se retrocedermos, porque no controle de jogo geramos esse texto flutuante Como você o transformou em uma instância editável e expôs no spawn o que acontecerá agora se você compilar, às vezes não aparece, então você precisa clicar em Arquivo e atualizar todos Ao fazer isso, você pode ver esse texto aparecer. Isso está acontecendo porque você está configurando isso como uma instância editável e exposta na geração, o que torna isso exposto aqui quando geramos O que podemos fazer agora é pegar esse texto e, novamente , colocá-lo aqui. Vou colocá-lo acima desse local de desova e podemos deixar que seja chamado de texto Isso é bom. Agora, se eu voltar para o texto flutuante, deixe-me pegar esse texto aqui e conectá-lo aqui. Isso mudará automaticamente meu texto em uma string como essa. Ok, agora estamos adicionando-o ao controle do jogador aqui, então ele deve aparecer na base inimiga. Então, vamos verificar se os inimigos abrem a base inimiga. E agora podemos ver que temos uma entrada de texto. Agora, para a entrada de texto, o que simplesmente queremos exibir é o dano do mouse. E nós já temos isso. isso no peão do jogador, temos o dano do cursor Você sempre pode controlar C, controlar V. Copie-o aqui e vá em frente e conecte-o. Agora, ele converterá seu float em uma variável de texto Ok, isso realmente deve funcionar perfeitamente agora, basta clicarmos em Play e testarmos. Se eu clicar, meu dano é 15 com o mouse, e isso está correto, tudo está funcionando corretamente. Mas, como você pode ver, ele ainda está preso aqui no meio porque temos que brincar com a animação. E faremos isso na próxima lição. Mas, só para analisar isso rapidamente, você pode ver como trabalhamos de trás para frente e às vezes , fazemos mais sentido Começando com, você realmente quer fazer, eu quero definir meu texto, e foi aqui que eu comecei. Então eu volto atrás e tento fazer isso. E, na verdade, às vezes faz mais sentido . Na base animada estamos inserindo o dano do cursor Ele vai até o texto flutuante do spawn, que está no controle de jogo respondendo ao ator E estamos inserindo essas informações de texto aqui, que basicamente aparecem porque aqui clicamos no texto e o expomos para gerar essas informações de Agora que temos, estamos conectando-o à interface de atualização de texto flutuante E ele vai atualizar a interface do usuário dessa forma. Ok, foi isso por enquanto. Vamos continuar com o próximo. 53. 5.19 Jogando a animação de texto flutuante: Tudo bem, vamos continuar e reproduzir a animação. Vamos voltar para a interface do usuário e abrir a interface de texto flutuante dentro daqui. Vamos ao gráfico. No gráfico, vemos esse anim de texto flutuante, que criamos anteriormente, como você pode ver aqui Agora, para essa animação, vamos ao gráfico. Vamos arrastá-lo para dentro. Vamos começar com essa animação e simplesmente dizer reproduzir animação. Agora podemos usar essa função, reproduzir animação. Vá em frente e conecte-o. Agora, para esta animação de jogo, esse tempo é zero. Isso é bom. A quantidade de vezes que ele vai repetir é adequada para tudo. Aqui está bom. Nós realmente não precisamos mudar nada. Agora, se eu clicar em reproduzir e clicar nele, você pode ver que a animação está sendo reproduzida. Tudo está realmente funcionando, e deve ser isso. No entanto, lembre-se de que não estamos destruindo o ator. E isso será um grande problema para o seu jogo, se você não fizer isso. Porque agora você pode ver quando eu clico, você pode ver a quantidade de atores que eu gero. Agora é 32, eu continuo clicando, agora é 42 porque estamos apenas removendo o efeito de acerto. Lembre-se de que também geramos esse efeito de golpe agora. E gerando e gerando atores do texto flutuante e nunca os removemos Isso vai ser um problema e travará seu jogo se você clicar nele várias vezes. Vamos abrir o texto flutuante. Como destruímos esse texto flutuante? Eu, podemos realmente fazer isso lá dentro de novo. Volte para as plantas, abra o texto flutuante Vamos fazer isso aqui dentro. Vamos, agora que temos esse texto flutuante, podemos arrastar e pesquisar o texto flutuante, o anim flutuante que criamos anteriormente Agora, o que podemos fazer aqui é arrastar e dizer get end time. Podemos usar um atraso como antes. Você pode até mesmo abrir o efeito de impacto e ver o que fizemos aqui. Basicamente, fizemos a mesma coisa. No entanto, isso era um flip book. Temos o tamanho dos flip-books. Agora, para a animação, estamos chegando ao horário final. Sabemos quando isso acaba. Ao fazer isso, você pode usar um atraso após a reprodução da animação. Depois, você pode excluir esse ator de texto flutuante diretamente daqui. E diga destrua o ator. E agora vai ser destruído. Digamos tudo. E clique em jogar. E eu vou apenas minimizar isso. Novamente, posso ver a quantidade de atores que estou criando. Agora que estou clicando, clicando e clicando, devo voltar às 15 mais uma vez, porque estou excluindo todo meu texto aqui, meu texto flutuante Vou ajustar a localização do texto porque não quero que ele apareça no meio do inimigo Vou abrir o Player Controller, e é aqui que temos o local de spawn Vou arrastá-lo até aqui. Em vez disso, vou pegar isso e dizer vetor de quebra para que eu possa dividi-lo em X, Y e Z. Também é a mesma coisa para este Vou arrastar e dizer que o vetor make também pode ver x, y e z. Agora, ao fazer isso, você sempre pode olhar aqui na janela de exibição e ver o eixo, a localização dele Agora, para o x aqui, não precisamos realmente modificá-lo porque ele já está centralizado no ator do x. Vou apenas arrastá-lo diretamente para Não quero ajustar esse valor agora para o y, Y é esse, o verde. Y controla a quantidade de idas e vindas. Eu só vou dizer um para o Y aqui porque um significa apenas que vou colocá-lo um pouco na frente do inimigo. O texto não aparece no inimigo e temos efeito visual como um bug Em vez de dez, aqui você pode ver que são dez. Agora, em vez de escrever apenas um em Y, estou me certificando de que esse texto esteja na frente do inimigo. Para o valor agora, esse é o importante, o valor Z é esse. E eu queria aparecer aqui acima do inimigo. O que eu posso fazer é dizer talvez algo como pegar esse Z que já temos e eu vou dizer e adicioná-lo. Vou adicionar 22 e depois vou conectá-lo novamente. Agora, o que estamos fazendo é basicamente pegar o valor z , adicionar 22 e depois conectá-lo Indo em frente e jogando. Eu posso ver onde ela abrange as patas aqui acima do personagem. Acho que está muito melhor do que antes. Você sempre pode ajustar a localização dependendo de onde você quer que o texto esteja. Ok, foi isso por enquanto. Vamos salvar tudo, e vamos continuar agora. 54. 6.01 Criando a interface do usuário do temporizador: Tudo bem, agora é hora de adicionar o cronômetro. Quando jogamos e estamos tentando causar danos a esse inimigo, quero ter um cronômetro de rodada para que você não tenha uma eternidade para preencher esse inimigo Se o cronômetro da rodada terminar, esse inimigo será real Se você fizer isso muito devagar, ele se curará novamente e talvez você precise voltar um nível para derrotar o outro inimigo antes de continuar. Vamos encerrar isso por enquanto. Agora, o cronômetro estará dentro da interface principal. Não é realmente uma interface de usuário por si só. Vamos continuar e criar a interface principal. Vamos clicar com o botão direito do mouse, acessar as interfaces de usuário com ele, Blueprint Vamos chamar isso de B principal. Essa é a interface principal do jogo. Vamos abri-lo por cima e por dentro, mais uma vez em um painel de tela. Agora, dentro desse painel de tela, quero que o cronômetro esteja na horizontal Eu só vou encontrar uma caixa horizontal. Vou adicioná-lo aqui. E então essa caixa horizontal, eu vou alinhá-la ao meio, aqui em cima, até o meio superior Clicando nos pontos de ancoragem, tener, no meio superior. Se você escrever 00 no x e y, você pode ver que não está centralizado como costume eu tenho aqui no x, eu tenho que escrever 0,5 para que esteja no centro agora Ok, então isso está concluído agora para a imagem, ou para o ícone, vou pesquisar a imagem, vá em frente e adicione-a à caixa horizontal. Agora, para os ícones, ainda não importamos nada, e eu incluí isso para você aqui na interface do usuário. Eu tenho um relógio aqui, clique rápido, crie uma nova pasta chamada ícones. Vamos em frente e, saindo daqui, vamos arrastar esse ícone para dentro. Apenas certifique-se, novamente, de clicar duas vezes nele, que o grupo de texturas esteja definido como UI e que as configurações de compressão estejam definidas como interface de usuário dois D. Vá em frente e salve. Vamos voltar para dentro e procurar o relógio, ou ele está aqui na nossa frente agora. Em vez de fazer isso esticado aqui para o alinhamento vertical, vou clicar no Então, vamos adicionar algum texto. Agora, para o texto, vou apenas copiá-lo de nossas outras interfaces de usuário. Talvez esse aqui. Eu vou controlar, volte aqui. Controle V na caixa horizontal. Centralize-o verticalmente. Aqui está. Vamos dar um pouco de espaço, vamos procurar um espaçador. Adicione-o entre eles. O espaçador, talvez eu dê algo como 12 D X. Acho que parece bom. Agora, o texto, sempre podemos reduzir o tamanho. Agora, quanto ao texto, não sei se devemos reduzir o tamanho ou não, porque na verdade é um cronômetro importante Acho que o tamanho está bom. Vamos apenas aumentar o tamanho dessa imagem aqui embaixo. Em vez de 32 por 32, vou escrever 40 por 40, algo assim. Você também pode colocar uma almofada na parte inferior aqui. Não acho que seja muito centrado. Talvez se eu clicar aqui e colocar um preenchimento na parte inferior, algo como dois E isso deve estar bem. Sempre podemos ajustá-lo mais tarde. Não estou muito preocupado com a interface do usuário no momento. Você também pode clicar em Tamanho para conteúdo aqui na caixa horizontal na parte superior, podemos empurrá-la. Então, vamos ver aqui o que podemos fazer no Y. Eu geralmente escrevo 30, 35, está nas bordas aqui Agora, isso é o que parece. Eu acho que parece bom. No entanto, para jogos com clicker, eu gosto que o relógio esteja aqui. Porque é muito importante que você veja quanto tempo resta ao clicar. E você não precisa olhar até aqui em vez de aqui. Agora, vou apenas adicioná-lo aqui. Por enquanto, sempre podemos mudar a interface do usuário. Depois de programar tudo o que você realmente pode imaginar, se você tem um jogo grande, você pode realmente mudar toda a interface do Talvez em um dia não demore muito, e esse jogo obviamente não tenha muita interface de usuário. Portanto, podemos alterá-lo em uma hora. Mas, por enquanto, vamos deixar o relógio aqui em cima. E vamos salvar tudo. Deixe-me clicar no texto para garantir que a visibilidade esteja configurada para não ser testável. Esse também. Também podemos configurá-lo para ser testável, que o mouse não interaja com ele Foi isso mesmo. Vamos salvar tudo e passar para a próxima. 55. 6.02 Exibindo a interface do usuário principal: Agora vamos continuar exibindo a interface principal na tela. Normalmente, quando trabalhamos com a interface do usuário, estamos fazendo isso dentro do controle do player. Vamos abrir o controle do player e fazer isso aqui dentro. Agora, não fizemos nada com interface do usuário em que a temos na tela. Normalmente, o que fizemos até agora foi conectá-la a um ator, mas agora precisamos criar uma interface de usuário e anexá-la à tela em vez de ao ator. Vamos seguir em frente e fazer isso. Eu só vou empurrar tudo isso até aqui. Vamos começar. Agora, o que eu costumo fazer é clicar com o botão direito aqui e criar um evento personalizado. E vou te mostrar um método inteligente se você ainda não o fez. Em um dos meus outros cursos, geralmente eu crio um evento chamado show hide ou open close widget Abra e feche widgets, você pode chamá-lo do que quiser. Mostrar widget de ocultar, abrir widgit de fechamento. Isso está aqui. Agora precisamos ter uma entrada de qual widget estamos falando E acho que ainda não criamos uma enumeração para Se você chamar isso de Vem plantas, enumerações. Agora, dentro daqui, vou fazer uma lista de qual interface de usuário vou ter no meu jogo. Vou chamá-lo de widgets de jogos, porque mais tarde eu também tenho um que pode ser chamado de widgets do menu principal Então, esse é chamado de widgets de jogos. Agora temos que especificar aqui uma lista de quais widgets você tem no jogo Por exemplo, eu posso ter uma interface de usuário principal. Eu posso, por exemplo, fazer uma loja de upgrades e assim por diante. Você pode ter isso mais tarde, mas por enquanto eu só preciso da interface principal. Vou chamá-lo apenas de principal. Agora, se você voltar para o controle de jogo, podemos agora, aqui na entrada, pesquisar aquela enumeração que chamamos E podemos sair e selecioná-lo. Vou chamar isso apenas de widgets. Se abrirmos e fecharmos um widget, precisamos especificar de qual widget estamos falando Na verdade, posso chamar essa função aqui, ou esse evento, para que você possa ver como é. É assim que ficará quando eu chamar essa função mais tarde. Agora podemos selecionar de qual widgit estamos falando. Além disso, quero outra contribuição, um touro. Um lingote é simplesmente, novamente, apenas um sim ou não. Só uma falsa ou verdadeira. Para este, vou dizer aberto, vou chamá-lo de show. Eu costumo chamar isso de mostrar esconde-esconde. Eu não me confundo com esse. Vou renomeá-lo para Mostrar Ocultar Widgets. Temos que especificar de qual widget estamos falando por enquanto Nós apenas temos a interface principal e , em seguida, podemos mostrá-la ou ocultá-la. Se eu tiver isso desmarcado, é esconder. E se eu tiver marcado isso, é show. É assim que eu costumo fazer. Neste, podemos fazer um galho. Agora, se for exibido, queremos mostrar o widget Porque isso é verdade. Vamos fazer duas funções. Deixe-me criar um widget chamado show e criar outro widget Normalmente eu adiciono um para minhas funções como prefixo. É muito mais fácil pesquisar porque, se você clicar com o botão direito do mouse e realmente pesquisar, poderá ter todas as suas funções no futuro. Para os widgets do show, vou clicar, tenho uma entrada de widgets do jogo, selecioná-la e chamá-la A mesma coisa aqui para o widgit hyde, clique nele, adicione e chame O que queremos fazer aqui agora no show Widgit, queremos arrastar daqui e dizer ativar O que vamos fazer aqui é basicamente dizer se a enumeração, ou se esse valor é principal, o que queremos fazer? Imagine se tivéssemos outro, por exemplo, se tivéssemos um menu Configurações e saíssemos e salvássemos. Agora você pode ver aqui, isso está sendo adicionado aqui. Se o valor que vem por aqui, que é basicamente selecionado daqui de cima, selecionamos qual deve ser o valor se for colocado aqui no widget show E o valor é principal, por exemplo, ele vai ignorar o código aqui embaixo e só vai executar o código aqui em cima. É isso que ativa a enumeração. O código aqui vai ser executado? E este não será executado se o valor for principal aqui. Deixe-me excluir essas configurações por enquanto. O que queremos fazer aqui é basicamente criar o widget e adicioná-lo à tela Vamos clicar com o botão direito do mouse e dizer criar widgets que selecionou qual widget você deseja criar Quero criar a interface principal e clicar com o botão direito do mouse, promovê-la para uma variável. Vamos chamá-lo basicamente de widget principal. Então, o que queremos fazer é arrastar a partir daqui e dizer Adicionar à janela de visualização É assim que adicionamos a interface de usuário à tela, porque não basta que você tenha criado, mas você também precisa adicioná-la à janela de visualização antes de poder vê-la, ok Agora podemos conectá-lo assim e está tudo bem. No entanto, o que eu gosto de fazer é, apenas para fins de otimização, podemos pegar essa variável que acabamos de criar, escrever, clicar e converter em um get validado O que podemos fazer agora é desconectar isso mantendo pressionada tecla Alt e clicando, e podemos conectar isso Agora, se isso não for válido, essa variável não é válida. Isso significa que isso ainda não foi criado. Ainda não criamos a interface do usuário. Dirá que não é válido. Quando não é válido, queremos seguir em frente e criar a interface do usuário. No entanto, se já criamos a interface do usuário uma vez antes que ela seja válida, não precisamos criar isso o tempo todo e continuar configurando essa variável se já tivermos feito isso uma vez antes, ela será válida se tivermos feito isso uma vez. E então vou adicioná-lo ao ponto de vista. Em vez disso, não precisamos criá-lo o tempo todo Ok, vamos compilar agora para o widget Hyde. Vamos voltar aqui do mesmo jeito. Digamos que ative a enumeração, ative Então aqui está o que eu quero que você faça, basta arrastar essa variável, clicar com o botão direito do mouse novamente e converter um get validado, assim como antes Então, vamos arrastar e dizer remover dos pais. Removendo-o da tela. Isso foi removido dos pais, agora estamos removendo da tela. Ok, como usamos essas funções que acabamos de criar? Agora, se voltarmos ao gráfico de eventos, podemos arrastar as funções, o widget mostrar e ocultar Vamos em frente e conectá-los. Se o bullying for verdadeiro, queremos mostrar o widget, vamos em frente e conectamos este Se isso for falso, queremos ocultar o widget, conectamos o outro Agora, o widget que entra é simplesmente o que selecionamos aqui Mas podemos simplesmente arrastar essa entrada para essas funções, e os dados continuarão para essas funções aqui. Agora está realmente terminado. O que podemos fazer é chamar esse evento aqui sempre que quisermos mostrar e ocultar um widget Então eu posso dizer mostrar, ocultar widget. Posso especificar de qual widget estou falando. Também posso especificar se queremos mostrar ou ocultar esse widget Função super inteligente que podemos usar. Basicamente , não precisamos escrever todo esse código aqui, é muito mais fácil usar apenas este. Vamos continuar exibindo a interface principal. Vamos fazer isso aqui no Player Controller. Vamos escrever eventos, começar a jogar. O que deve acontecer quando eu começar a jogar? Eu só quero mostrar ocultar esse widget. Então, eu quero mostrar meu menu principal ou minha interface principal. Basicamente. É isso aqui. Se compilarmos e eu clicar em reproduzir, você pode ver que agora posso ver meu cronômetro aqui Porque agora estamos mostrando o widget. Se você quiser ocultar o widget, você sempre pode clicar aqui . E você pode clicar em jogar. E você pode ver que o widget sumiu, porque agora o estamos escondendo Mostrando o widget principal, e é assim que é feito Vamos fechar tudo e continuar. 56. 6.03 Configurando o temporizador redondo: Agora é hora de adicionar o cronômetro redondo. Agora, nos jogos para um jogador, não somos realmente responsáveis por onde queremos adicionar o código Eu poderia adicionar o cronômetro de rodada ao jogador, eu poderia adicioná-lo ao controle do jogador e eu poderia adicioná-lo ao modo de jogo Basicamente, no modo multijogador, você teria um problema, porque teria que fazer as coisas corretamente. Mas no modo single player, podemos realmente codificar tudo, por exemplo, dentro do jogador, mesmo que devesse estar no modo de jogo. E o jogo funcionaria muito bem se ficasse e praticasse boas práticas de programação. Vamos fazer o cronômetro da rodada dentro do modo de jogo. Lembre-se de que o modo de jogo controla as regras do jogo. Acho que algo como um cronômetro redondo é uma espécie de regra em um jogo Em vez de aqui, vamos fazer o cronômetro redondo. O que eu quero fazer é tentar fazer outro evento personalizado. Vamos clicar com o botão direito do mouse e fazer um evento personalizado. Vamos chamar isso de cronômetro de início de rodada. Queremos iniciar o cronômetro da rodada. Eu quero usar aqui principalmente algo chamado cronômetro por evento Clique com o botão direito do mouse e pesquise o cronômetro por evento, selecione aquele Agora, o cronômetro por evento é simplesmente um cronômetro que se repete repetidamente Em vez de usar o tick de evento, talvez você saiba o que já é um tick de evento. Se você não fizer isso, este está rodando 60 vezes por segundo. Se eu pudesse simplesmente arrastar aqui e imprimir uma string e dizer olá. Você pode ver que, se eu clicar em Reproduzir, ele será impresso 60 vezes por segundo. Aqui diz olá. Normalmente, isso é muito ruim de usar em um jogo. Se algum dia eu olhar seu jogo, nunca quero ver um evento acontecer em seu jogo, porque é muito ruim usá-lo, a menos que você realmente precise usá-lo. Para o Fun Tail, eu desenvolvi por dois anos, nunca usei esse. E eu também não acho que você deva usá-lo porque ele é realmente otimizado para executar esse código tantas vezes. Em vez disso, fazemos isso configurando um cronômetro. Um cronômetro, você pode escolher quantas vezes deseja repeti-lo segundo em vez de repeti-lo 60 vezes por O que eu posso escrever aqui é, por exemplo, 0.1 Se você não é muito bom em matemática, o que você pode fazer aqui é basicamente dizer, o que é 1/0 0.1 Isso é dez Isso significa que ele é executado dez vezes por segundo. E se eu configurá-lo para 0,03 Então você vai executá-lo 33 vezes por segundo Agora, às vezes, você precisa fazer isso muitas vezes porque, por exemplo, em um jogo RTS em que você constrói edifícios como The Sims, por exemplo, nos Sims você arrasta um prédio ou um item pode colocá-lo Agora, para atualizar o fantasma de construção que você está arrastando, é muito importante que tenha uma aparência suave Você precisa configurá-lo para algo como 0,03, por exemplo. Mas você pode ver que executá-lo 33 vezes por segundo é muito melhor do que executá-lo 60 por 1 segundo. Você está rodando basicamente a metade da velocidade deste. E já vai ser muito otimizado só de você usar um cronômetro e fazer isso aqui Por exemplo, para o cronômetro por evento, não precisamos realmente atualizar o horário Por exemplo, 33 vezes por segundo. Podemos começar com algo como 0.1. Basicamente, podemos atualizar o cronômetro dez vezes por segundo Vamos tentar fazer isso. Vamos deletar isso aqui embaixo. Vamos conectar esse aqui em cima. Para o evento aqui, temos que ter um evento. Eu posso arrastar até aqui, criar um evento personalizado. Normalmente eu chamo isso de loop no final, então vou chamá-lo de round timer, loop Esse evento aqui basicamente vai se repetir. Vamos configurá-lo como está em loop. O que eu quero fazer é basicamente definir um cronômetro. Vamos criar duas variáveis. Deixe-me criar um chamado cronômetro de rodada inicial. Vamos configurá-lo para flutuar, compilar. Agora, esse será nosso cronômetro de rodada inicial. Digamos, por exemplo, que tenhamos 5 segundos inicialmente para matar esse inimigo. Vamos fazer um novo chamado Current Round Tim. Esse é o que será atualizado. O cronômetro da rodada inicial não mudará, mas primeiro mudaremos nosso cronômetro de rodada atual Antes de começarmos esse loop aqui, vamos garantir que o cronômetro da rodada atual seja igual ao cronômetro da rodada inicial, caso contrário, será zero Você não quer começar a rodar com o tempo sendo zero Vamos ajustar o cronômetro da rodada atual para o inicial. Assim, agora temos algum tempo para começar. O tempo é de 5 segundos, porque definimos este como cinco, agora este é 5 segundos. O que queremos fazer aqui usar o cronômetro de rodada atual Eu quero dizer menos. Basicamente, queremos subtraí-lo com 0,1. Se isso for executado dez vezes por segundo, o que isso significa é que vai dizer que basicamente removerá 1 segundo a cada segundo , se isso fizer sentido Porque isso vai ser executado dez vezes em vez de ter um valor estático. Novamente, não gosto de valores estáticos porque é difícil mudar se o jogo for alojado Em vez disso, você pode clicar com o botão direito do mouse nesse valor e promovê-lo a uma variável, e pode chamá-lo de algo como tempo de cronômetro redondo Espero que não fique muito confuso ou me confunda no futuro, porque este é o cronômetro de rodada, esse é basicamente o Vamos apenas arrastá-lo até aqui. Em vez de ter esse valor estático, esse -0,1, vamos compilar e garantir que o tempo do cronômetro da rodada seja 0,1. Também Vamos clicar com o botão direito do mouse nesse cronômetro e promovê-lo a uma variável, porque mais tarde teremos que parar esse cronômetro se não quisermos mais usá-lo E fazemos isso tendo essa variável. Vamos chamar isso de Tim Handle. Se você segurar o mouse sobre ele, é basicamente uma alça de cronômetro, uma alça de cronômetro redonda Agora, o que podemos fazer é dizer que tempo atual é -0,1. Novamente, tenho que fixá-lo porque quero ter certeza de que não ficará abaixo de Agora, o que estamos dizendo é o cronômetro atual, cronômetro redondo -0,1 Se repetirmos esse valor, basicamente será menos um a cada Vou definir o cronômetro da rodada atual novamente, estamos basicamente dizendo menos um a cada Agora vamos imprimir uma sequência de caracteres. Você pode realmente ver o que está acontecendo e vamos arrastar isso para aqui. Vamos compor a rodada. Tim pode basicamente começar aqui no evento começar a jogar. Vamos atacar a partir daqui e dizer que comece com Tim. Vamos compilar e jogar. Agora você pode ver que o cronômetro está funcionando agora. Vai ficar abaixo do zero porque ainda não o fixamos. Vamos realmente seguir em frente e fazer isso. Vamos atacar aqui novamente. Arraste a partir daqui e diga clamplamp float O valor mínimo é zero abaixo de zero O valor máximo é basicamente o que o cronômetro de rodada atual é Agora vamos prosseguir e conectar isso. Tudo deve ficar bem se eu compilar e clicar em Play E dê uma olhada aqui agora, não deve ficar abaixo de zero, e tudo está funcionando bem Agora só precisamos atualizar essa interface aqui para funcionar corretamente. Tudo bem, foi isso por enquanto. Temos um cronômetro funcionando, e podemos deixar isso aqui, porque temos que iniciar o cronômetro, tudo está funcionando E temos que continuar na próxima lição. 57. 6.04 Atualizando o temporizador da interface do usuário principal: Tudo bem, aqui é de onde paramos. Vamos voltar e atualizar o cronômetro na interface principal. O que queremos fazer é voltar para a interface principal. Queremos clicar nesse texto. Vamos chamá-lo de algo como cronômetro redondo. Temporizador redondo. Vamos voltar ao gráfico aqui. Deixe-me deletar tudo isso. Agora, para este cronômetro, eu basicamente quero, novamente, definir o texto, exatamente o que temos feito até agora Vamos criar um evento personalizado para esse evento personalizado. Vamos chamar isso de uma atualização, Tim. Deixe-nos ir em frente e conectá-lo. Agora, vamos em frente e, em vez de apenas conectá-lo diretamente, eu também queria dizer segundos atrás dele. Quero usar um formato de texto, exatamente como o que temos feito até agora. Para esse formato de texto, eu quero uma variável. Vamos chamá-lo de cronômetro redondo restante. Vamos fechar os colchetes. E se você pressionar inter, essa entrada aparecerá, então eu só quero escrever um segundo atrás dela Sabemos que são segundos. Agora, essa variável é um flutuador. Vou apenas adicionar aqui uma entrada float e chamá-la de cronômetro redondo restante. Agora podemos inserir isso aqui e basicamente terminamos. Agora vamos continuar e atualizá-lo. Vamos usar essa interface de usuário do cronômetro de atualização. Agora você pode tentar fazer isso sozinho apenas para praticar , porque na verdade é simples se você pensar bem. Mas se você ainda tiver dificuldades com isso, vamos fazer isso juntos. Se voltarmos às plantas, abra o modo em que criamos o código Agora, aqui, sempre que estiver em loop, também queremos atualizar a interface do usuário Depois de definir o cronômetro da rodada, queremos atualizar a interface do usuário Agora, como obtemos a interface do usuário? Lembre-se de que a interface do usuário está dentro do widget principal aqui, o widget principal Esse é o evento que queremos usar. Temos que obter uma variável ou a interface principal. Lembre-se de que já temos isso dentro do controle do player, porque aqui dentro fizemos isso em uma variável. Vamos ligar para o controlador do player. Temos uma variável no controlador de jogo? Sim, nós temos. Fizemos isso anteriormente. Vamos prosseguir e arrastar o controle do player. Vamos arrastar o WB main e pegar isso. Em seguida, vamos obter os eventos de interface do usuário do cronômetro de atualização Podemos chamar isso agora, vamos conectá-lo. Agora esse é o cronômetro restante, que é esse. Basicamente, vamos compilar. E se eu clicar em play, agora você pode ver que está funcionando muito bem. Agora você pode ver que há um problema porque eu não quero remover essa casa decimal sempre que ela for zero Assim, eu queria dizer 0,0, por exemplo, ou 1,0, não quero que ele o remova. Da maneira como você faz isso, em vez de conectar diretamente o float, você pode convertê-lo primeiro em uma string e ele não excluirá o que você está escrevendo, basta escrever Vá em frente e selecione duas cordas flutuantes. Agora, em vez de ter um flutuador, vamos desconectar isso. E vamos conectar a corda. Vamos compilar. Vamos clicar em Jogar. E agora você pode ver que diz zero no final e não vai excluí-lo. Acho que parece muito melhor para nós, só isso para atualizar a interface do usuário. E vamos para a próxima lição. 58. 6.05 Restaurar a saúde no final do temporizador: O objetivo principal aqui é restaurar a saúde do inimigo sempre que o tempo acabar. Vamos fazer isso. Isso é muito fácil. Já temos tudo o que precisamos aqui no cronômetro da rodada inicial Sempre que percorremos o tempo e ele chega a zero. Vamos usar o cronômetro redondo aqui e podemos basicamente pegar uma nova variável em vez de usá-la o tempo todo Só para torná-lo mais limpo, podemos usar este. E agora podemos dizer se isso é igual a zero, então, basicamente, o tempo acabou, vamos fazer uma ramificação, vamos conectá-la. Sempre que for esse o caso, queremos restaurar a integridade, vamos continuar e criar o evento personalizado para a restauração da integridade. E eu acho que é melhor fazer isso dentro do inimigo. Vamos até o inimigo, abrir a base inimiga dentro daqui. Vamos criar um chamado restaurar a saúde. Vamos até aqui, criar um novo evento personalizado. Vamos chamar isso de restaurar a saúde assim. Agora, para restaurar a integridade, o que vamos simplesmente fazer, lembre-se de que anteriormente temos essa chamada atualização de integridade. Basicamente, podemos usar aquele que eu arrasto aqui e digo atualizar a saúde. Atualize a saúde, aqui está. Agora, qual é a saúde atual? Só queremos curar o inimigo ao máximo. Novamente, novamente, temos que obter informações sobre o inimigo e já temos a saúde. Eu vou controlar C isso e controlar V aqui embaixo. Vamos apenas conectar isso aqui. Estamos basicamente restaurando a saúde. Mais uma vez, deveria ser isso. Se eu voltar ao modo de jogo, agora precisamos de uma variável para o inimigo. Não me lembro se temos uma variável para o inimigo dentro daqui, não temos. Temos que descobrir como obtemos a variável para o inimigo? Porque precisamos chamar isso de restaurar a saúde. Lembre-se, se voltarmos, por exemplo, para o Player Controller, é aqui que geramos o inimigo, geramos o inimigo. E nós o transformamos em uma variável. Na verdade, sabemos qual inimigo está sendo gerado atualmente. Se eu voltar aqui e pegar o Player Controller, posso procurar a variável inimiga gerada, e eu posso pegar isso Agora, aqui podemos dizer que restaure a saúde. Eu posso ver que não consigo encontrá-lo. Então, se eu voltar para o Player Controller, é porque eu o promovi diretamente para a variável spawn enemy O que não está errado. Basicamente, posso entrar no modo de jogo e dizer à base inimiga aqui que posso dizer que restaure a saúde e tudo ficará bem. Mas, novamente, eu não gosto de usar o casting. E essa parte também é desnecessária porque podemos fazer isso dentro do controle do player aqui antes de promovê-la em uma variável. Vamos voltar às interfaces. E não fizemos um para o inimigo. Tente fazer isso sozinho. Nós já fizemos isso algumas vezes. Novamente, se você não se lembra totalmente, vamos fazer isso juntos. Mais uma vez, vou passar por isso rapidamente. Clique com o botão direito do mouse no blueprint e crie uma interface de blueprint. Chame isso de base inimiga. Vá em frente e abra. Digamos que obtenha a referência do inimigo. Então, aqui na saída, vamos procurar a base inimiga da BP qual estamos tentando nos referir Vamos chamá-la de compilação inimiga. Agora vamos voltar para a base inimiga. E aqui nas configurações da classe, queremos adicionar essa interface que acabamos de criar, chamada inimiga, mas compilar Agora podemos ver essa função aparecendo, clique duas vezes nela. Para o inimigo, vou fazer uma autorreferência porque, novamente, estamos dentro da base inimiga e estamos definindo o que é essa variável. Agora, o que podemos fazer é no controlador do player, em vez de promover isso diretamente para uma variável, vou excluir isso por enquanto. Posso dizer que obtenha a referência do inimigo. Porque lembre-se de que, se você segurar o mouse sobre ele, isso é apenas uma referência de ator. Mas se eu promover isso para uma variável, essa é uma referência de base inimiga. E podemos usar isso sem fazer isso o tempo todo em todos os outros projetos Vou remover esse inimigo gerado. Vamos realmente garantir que não o tenhamos usado antes. Porque se eu excluir agora, excluirei todas as referências com ele. O que eu costumo fazer nos meus jogos é clicar com o botão direito do mouse nele, encontrar referências, sem resultados dentro desse plano Temos que pesquisar globalmente. Você pode fazer isso clicando no pequeno ícone. Ele vai pesquisar em todas as plantas. E você pode ver que nunca usou essa variável antes. É seguro excluí-lo. Eu vou deletá-lo, sim. Agora vamos promovê-lo a um inimigo gerado por variáveis. Agora podemos usar esse. Vamos compilar Vamos voltar ao modo de jogo. Vamos deletar tudo isso. Agora, aqui, do arrasto inimigo gerado. Vamos criar um inimigo a partir desta. Agora podemos arrastar e dizer restaurar a saúde. Isso é muito mais fácil de fazer. Vamos agora arrastar a partir daqui. Se o cronômetro for igual a zero, queremos restaurar a saúde Também queremos reiniciar o cronômetro porque precisamos começar de novo. Vou pegar o cronômetro de rodada atual e configurá-lo para o cronômetro de execução inicial. Assim mesmo. Vamos jogar e ver o que acontece. Clique em Jogar Agora Para que possamos testar melhor, vou definir os cronômetros da rodada inicial para 3 segundos, para que não demore uma eternidade Quando o cronômetro acabar, ele será reiniciado, curado O jogador agora clica ou cura o inimigo. Pelo contrário, podemos ver que ele curou o inimigo sempre que fosse zero Se eu matar o inimigo, também curaria esse inimigo. Então, o que basicamente temos que dizer é que se eu matar o inimigo, tenho que dizer para parar o cronômetro, porque agora matamos o inimigo Porque, como você pode ver aqui, sempre que eu mato esse inimigo, ele não para nem reinicializa o cronômetro Então, essa é a próxima coisa em que queremos trabalhar. 59. 6.06 Redefinir o temporizador na morte do inimigo: Agora, o que queremos fazer é zerar esse cronômetro sempre que o inimigo morrer Vamos continuar e fazer isso de novo, isso é muito fácil agora porque já criamos essa variável chamada round timer handle Se eu for à base inimiga e tentar descobrir onde o inimigo morreu, aqui fizemos esse evento de morte e fizemos tudo isso aqui. Vamos parar o cronômetro sempre que o jogador ou o inimigo fizerem tudo isso Se eu pudesse selecionar tudo e pudéssemos arrastá-lo para cima. Agora vamos usar essa alça que está dentro do modo de jogo. Eu posso ver que já temos uma variável de modo de jogo aqui, então podemos dizer Tim handle. Podemos ir em frente e pegar a alavanca do cronômetro de execução. Podemos dizer que o cronômetro é claro e invalidado por alça. Este vai interromper a limpeza do cronômetro e invalidar Vá em frente e conecte-o. Agora estamos parando o cronômetro e fazendo todo esse evento de morte ou essa lógica de morte Depois da lógica da morte, estamos aumentando o nível E então estamos destruindo o Acta. Temos que iniciar o cronômetro novamente, porque agora, quando matarmos o inimigo, o cronômetro vai parar Mas temos que começar de novo. Acho que a melhor maneira de começar de novo é fazer isso dentro do nível atual de incremento Vamos fazer isso dentro do modo de jogo porque toda vez que aumentamos um nível, geramos um inimigo Vamos começar o cronômetro aqui. É o que faz mais sentido. O que podemos fazer é basicamente, assim como antes, podemos fazer isso, iniciar o cronômetro, iniciar o cronômetro da rodada Vá em frente e ligue para este evento que fizemos. E isso deve resolver tudo. Agora, toda vez que eu não ligar para o inimigo, o inimigo vai se curar, como você pode ver aqui. Mas se eu matar o inimigo, o cronômetro parará e reiniciará novamente quando eu matar o inimigo Então, se eu matar o inimigo, ele voltará para três e tudo ficará ótimo. Ok, agora estamos reiniciando o cronômetro quando o inimigo morre E também estamos parando para que não faça a contagem regressiva. E vamos passar para a próxima. 60. 7.01 Criando a interface do usuário de moeda: Agora é hora de criar a interface de usuário da moeda. E antes de fazermos isso, acesse os materiais do curso. E eu incluí algumas coisas para você. Então, vamos para a pasta UI aqui. Vou criar uma pasta chamada buttons em vez dessa pasta. Podemos arrastar esses botões até aqui. Botão pequeno pressionado e botão pequeno. Vá em frente e arraste-os para dentro. Assim como antes. Lembre-se de clicar com o botão direito ações do sprite e aplicar papel dois T, pois são muitas escolhas Além disso, para as imagens na pasta de imagens que vou arrastar até aqui novamente, vou clicar com o botão direito do mouse e aplicar papel às configurações. Agora, quanto ao relógio, quero atualizá-lo também. Provavelmente parece assim para você agora. Vou apenas arrastar isso até aqui. Ou talvez clique com o botão direito do mouse e diga reimportar. Ele já sabe o que fica se eu clicar em jogar, agora fica assim. Vamos ver se precisamos de algo mais, esta moeda aqui. Também precisamos arrastar isso para dentro dos ícones. Clique com o botão direito do mouse, aplique papel às configurações e tudo ficará bem. Agora, antes de continuar verificando este relógio, clicando nele, vou realmente aumentar o tamanho dele para 50, 50. Em vez disso, o preenchimento é zero. Vou configurá-lo para zero. Compile e, se eu clicar em Reproduzir, acho que fica muito melhor assim em comparação com antes Tudo bem, agora para a interface do usuário Curren, vamos projetá-la aqui dentro da interface principal E acho que vou projetá-lo até o topo. Vamos começar com isso. Primeiro, precisamos de uma sobreposição. Vamos adicionar a sobreposição no painel da tela aqui em cima, para que ela apareça aqui Agora, para essa sobreposição, quero uma imagem, quero a imagem de fundo para essa interface Vou alinhá-lo horizontal e verticalmente, Agora temos que selecionar a aparência da imagem para a imagem. Vamos ver as imagens e eu vou selecionar essa moldura de um item. Vá em frente e deixe-o aqui. E aqui está agora para que não fique embaçado novamente, como antes, transforme-o em uma caixa, altere a margem para 0,5, agora parece muito melhor Agora, quando você altera o tamanho da sobreposição, ela se ajusta ao tamanho Agora, aqui embaixo, eu também quero um menu de atualização. Ou não é um menu de upgrade, é mais como uma loja. Na verdade, vamos fazer isso também. Aqui com isso, precisamos de uma caixa vertical. Vou adicionar isso. Vou adicionar uma sobreposição. Lembre-se de que a caixa vertical não deve estar dentro dessa caixa horizontal , está fora dessa sobreposição Vou arrastá-lo para a caixa vertical aqui. Basta redimensioná-lo. Novamente, na sobreposição, vou clicar na fatura por enquanto Não tenho certeza se vou preenchê-lo. Na verdade, acho que não vou. Mas vamos configurá-lo para ser preenchido por enquanto. Agora vamos adicionar o outro. Novamente, vou apenas duplicar isso, Overlay control D. Agora, este é o menu de atualização, ou a loja aqui, a Clicando na imagem, vou mudá-la para esta moldura de papel. Vá em frente e arraste isso aqui. Tudo deve estar bem. Agora, para essa caixa vertical, eu queria preencher a tela inteira para o lado. Clicando no ponto de ancoragem, alterando-o para este Quando você fizer isso, no offset bottom, eu vou escrever 00 E o deslocamento para a parte inferior e superior fará com que todo o lado da tela seja preenchido Agora vou dar a ele um pouco de espaço a partir das bordas da tela na posição do X. Vou escrever o deslocamento 30, o deslocamento superior 30 e o 30 inferior Agora não está na borda da tela. Agora, o tamanho dos dois. Vou clicar na sobreposição da moeda e vou configurá-la como automática Em vez disso, vou usar as imagens e aumentar o tamanho em Y. Agora, para o tamanho em Y, acho que algo como 105 deve ser suficiente Algo assim, e podemos escrever quantas moedas você tem. Além disso, vamos adicionar uma busca por espaçador por um espaçador. Adicione-o entre essas duas sobreposições para o espaço. Acho que vou escrever algo como 20 em Y. E você pode clicar nessas linhas de traço para remover as linhas de traço E agora é isso que parece. Você pode clicar em Play e também assistir. Aqui você pode ver que esta é uma tela para um laptop, mas ela se encaixa muito bem no meu monitor de quatro K, porque, novamente, nós a projetamos para ser usada em vários monitores Agora, quanto ao tamanho aqui, decidiremos isso mais tarde, dependendo do conteúdo desse menu. Mas, por enquanto, vamos deixar que seja do tamanho desta aqui em cima. Vamos com a moeda. Agora, podemos trabalhar com a loja. Aqui em cima, com a moeda, precisamos de uma caixa horizontal porque precisamos de uma imagem e depois do texto. Vamos adicioná-lo à sobreposição dentro dessa caixa horizontal Vou adicionar uma imagem, depois vou adicionar um texto. Agora, para o texto, vou copiar isso aqui. Controle C Controle dentro desta caixa horizontal. Controle V aqui. Agora, para essa caixa horizontal, vou alinhá-la virtualmente horizontalmente no meio desta imagem, vamos transformá-la neste Arrastamos novamente, alinhamento horizontal e alinhamento vertical no meio. Ambos. Agora, para a moeda aqui, vamos clicar na moeda e fazer o tamanho 50 por 50 para a imagem. Agora, para este texto, vou torná-lo um pouco maior porque isso é muito importante. Acho que algo como 34 e talvez um pouco menor, talvez 30. Sempre podemos decidir isso mais tarde. Agora, para a cor da frente, eu também vou mudá-la para algo amarelo. Está exibindo moedas, mudando a cor e a opacidade. Vou tentar escolher uma cor amarela. Acho que vou escolher algo assim. Agora, eu também preciso mudar o contorno. Acho que vou copiar esse aqui. Cole aqui embaixo. Eu só vou mudar para uma cor mais escura. Eu vou usar esse. Clicando em ok, vou copiar isso. Cole aqui embaixo. Se eu diminuir o zoom, isso é o que parece. Parece muito bom. Agora, eu vou te dar um espaço entre a moeda e isso, este texto Apenas certifique-se de que não há acolchoamento aqui para esta moeda. Vou dar um preenchimento aqui à direita de quatro. Portanto, temos algum espaçamento do texto. Se eu clicar aqui e escrever zero para o texto, agora são 30. Se eu escrever 28, acho que é muito pequeno. Vamos tentar 32. Talvez seja muito grande. Na verdade, vamos com 34. Agora, 30 era um bom número. Vamos compilar agora. Agora, projetamos tudo aqui. Agora, para o texto, vou transformá-lo em uma montagem de moedas de texto. Para esse ícone, nós realmente não precisamos fazer nada aqui. Vamos compilar e salvar tudo. Agora estamos prontos para continuar. 61. 7.02 Animação de interface de moeda: Acho que seria legal adicionar alguma animação a esse texto para deixar o jogo um pouco mais único e melhor. E é sempre bom adicionar algumas animações ao seu jogo para que ele não pareça plano São sempre esses pequenos detalhes que fazem seu jogo parecer muito melhor do que os outros. Então, vamos continuar e clicar neste. Vamos criar uma nova animação. Vamos chamá-lo apenas de moedas. Clique nele, clique em Rastrear, adicione a quantidade de moedas no texto e clique nesse sinal de mais. E vamos selecionar a transformação. Porque eu quero mudar a escala desse texto. Vou até a balança aqui embaixo. O que eu quero fazer aqui é depois de 0,2 segundos, eu quero escalar isso para 1,5 A mesma coisa aqui para o Y, 1,5 Agora é enorme. Em seguida, 0,4, vou ajustá-lo de volta para 1,1 na escala. Agora você pode ver que quando eu reproduzo a animação, ela realmente não a configurou. Aqui vou eu, voltando para um, eu toco a animação. Agora você pode ver como fica se você simplesmente clicar no espaço. É assim que vai ficar quando eu adicionar moedas a essa variável ou a essa interface de usuário aqui. Parece bom que você tenha alguma animação de interface do usuário. Mas então compile, salve tudo e vamos continuar 62. 7,03 quantidade de moeda variável: Agora, para a quantidade de moedas, precisamos adicioná-la ao jogador. Vamos voltar às plantas. E agora vamos abrir o player porque agora precisamos armazenar quantas moedas o jogador tem em uma variável. Vamos fazer essa variável aqui embaixo e vamos transformá-la em quantidade de moedas, vamos chamá-la assim. A quantidade de moedas não pode ter casas decimais, então vamos escolher um número inteiro Agora, se você sabe que seu jogo muitos números aqui, terá muitos números aqui, você deve selecionar um número inteiro 64 Na verdade, acho que vou selecionar um inteiro 64 porque um inteiro ou um inteiro 64 pode ter um valor muito, muito maior do que um valor muito, muito maior do No entanto, novamente, um inteiro 64 será mais pesado em termos de otimização do que usar apenas um Mas nós realmente precisamos disso porque novamente, estamos criando um jogo de clicker. E é sabido em um jogo de clicker que a quantidade de moedas pode chegar a um valor intenso Em vez disso, selecione o número inteiro 64. Vamos fazer isso assim. Agora vou excluir tudo isso e vamos criar uma nova variável personalizada ou eventos personalizados. Vamos chamar isso de uma quantidade atualizada de moedas. Vamos atualizar quantas moedas temos aqui. Vou arrastá-la para o Set it here, a quantidade atualizada de moedas. Podemos atribuir duas variáveis. Podemos fornecer a quantidade de moedas que queremos atualizar com a quantidade de moedas. Esse pode ser um número inteiro porque é apenas um número que precisamos adicionar ou subtrair com nossa variável Não é tão grande. A outra coisa é adicionar outra variável e um lingote, vamos chamá-la de I normalmente novamente, escrever B na frente O que queremos fazer aqui é adicionar moedas ou subtrair moedas É disso que trata este evento. Vamos atacar este e fazer um galho. Então vamos, você quer adicionar moedas ou quer remover moedas? Então, essas são as cataratas. Quando você quiser remover moedas, vamos definir essa variável. Se quisermos adicionar moedas, podemos pegar isso. Podemos dizer perda desse valor, perda desse número inteiro, posso arrastar isso agora, podemos pegar isso e colocá-lo aqui O valor que entra aqui perde o valor que já temos na variável. Somamos esses dois e os colocamos dentro dessa variável. Agora, se for menos, novamente pegue isso e diga menos, subtraia, vamos subtrair novamente pegue isso e diga menos, subtraia, vamos subtrair daqui. Assim como antes. Vamos definir essa variável. Agora você pode tornar esse código um pouco mais limpo removendo-o. E você pode fazer isso de outra forma. Agora eu vou te mostrar apenas outra maneira. Lembre-se de que já trabalhamos com o Select antes, então podemos realmente fazer o Select. Agora, toda vez que você vê uma cópia e colagem de um código como essa, você sempre tenta pensar posso usar um nó de seleção aqui para limpar meu código? Na verdade, você pode fazer isso aqui se eu arrastar aqui e disser Selecionar e eu posso selecionar este, esse nó, dependendo se essa intimidação é verdadeira ou falsa E eu posso simplesmente remover isso por enquanto. Se for verdade, significa que eu quero adicionar moedas. Você pode ver aqui, se isso for verdade, aqui significa que eu quero adicionar a quantidade de moedas. Então isso é verdade, eu quero adicionar moedas. Podemos conectar isso aqui. Essa, se for falsa, eu quero subtrair moedas E então entra aqui. Podemos deletar isso. Agora você pode ver o quanto ficou melhor. Agora, pelo ouro, ele sabe se queremos subtrair ou adicionar moedas à nossa variável Tudo bem, vamos compilar e salvar tudo. E foi isso. Agora temos essa função simples na qual podemos atualizar a quantidade de moedas. E vamos continuar. 63. 7.04 Adicione moedas a inimigos: Agora, obviamente, o que estamos tentando fazer é quando eu clico nesse inimigo e o inimigo morre, preciso pegar moedas pela morte que matei aqui. O que precisamos fazer é adicionar quantas moedas esse inimigo deve soltar quando eu o matar. Da maneira como fazemos isso, lembre-se de que temos uma estrutura aqui nas estruturas do projeto Já criamos essa chamada informação do inimigo. Vamos adicionar algo a isso, a este. Vou criar uma nova variável e chamá-la de moedas para soltar”. Muito, muito autoexplicativo e é apenas um número inteiro. E arraste-o, então eu vou apenas arrastá-lo para baixo da saúde Vá em frente e salve, salve tudo. Agora, o que eu quero que você faça é voltar para a planilha de dados no Google que fizemos anteriormente aqui. Agora, depois da saúde, vou escrever Clique em Criar uma nova coluna à direita aqui. Novamente, você deve chamá-lo do mesmo nome que chama a quantidade variável de moedas a serem descartadas. Podemos arrastar isso um pouco assim. Temos que especificar quantas moedas o inimigo deve soltar. Por exemplo, eu posso simplesmente escrever números aleatórios. Por enquanto, honestamente, não nos importamos no momento. Podemos clicar aqui para criar fórmulas. Você sempre pode escrever de forma igual. Clique aqui e vezes 1.5 Então eu posso clicar aqui e arrastá-lo para baixo e ele deve ser preenchido automaticamente. Isso deve estar bem para mim agora. Vou clicar em Download de arquivo e baixar CSV. Agora, com esse arquivo CSV baixado, vou renomeá-lo novamente para DT Enemy Info Dentro deste projeto, vou minimizá-lo um pouco para poder ver os dois. Vou até as tabelas de dados. Novamente, informações do inimigo, basta clicar e arrastá-las até aqui. E ele deve atualizar automaticamente todas essas informações para você. Agora adicionamos quantas moedas cada inimigo deve soltar ao matá-lo. 64. 7.05 Atualize a exibição de moedas: Agora estamos prontos para terminar essa exibição de moedas. Vamos voltar para os inimigos. Agora, o que eu quero fazer aqui nos inimigos, lembre-se de que queremos adicioná-lo a quando o inimigo morrer. Se eu acessar esse código aqui, sempre que você adicionar entradas extras à sua estrutura, elas aparecerão Então, vou clicar aqui e ocultar os pinos desconectados Mais uma vez, quando eu mato o inimigo. Quero lembrar que no jogador, se eu for até o jogador, fizemos essa única atualização da quantidade de moedas dentro daqui quando eu mato o inimigo. Antes de fazer esse atraso, vou apenas adiar esse atraso. Eu quero chamar isso de uma quantidade atualizada de moedas do jogador. E eu já tenho a variável player. Vou arrastar e dizer atualizar a quantidade de moedas. Vá em frente e conecte-o aqui e aqui. Agora, a quantidade de moedas com as quais você deseja atualizá-lo está dentro das informações ainda do inimigo. Porque fizemos isso dentro da biblioteca. Agora temos que especificar as informações do inimigo ou o nome do inimigo. Já temos isso dessa variável. Então vá em frente e conecte-o. Faça isso, divida-o nas variáveis para que possamos vê-las. Agora, a partir daqui, vou arrastar a quantidade de moedas para cá. Vá em frente e esconda isso, e agora está acabado. Lembre-se de clicar em Anúncio. Porque queremos adicionar moedas e não removê-las. Tudo deve estar bem. Vá em frente e compile Vá até o player agora. Agora, essa informação vai entrar aqui e vai ser configurada corretamente. O que estamos perdendo agora é que você pode ver se eu matar o inimigo, nada está acontecendo. Porque lembre-se de que não atualizamos a interface do usuário, então precisamos fazer isso. Vamos voltar para a interface do usuário, abrir a interface principal. Vá em frente e clique neste texto. Para este texto, queremos apenas configurá-lo. Vou ver o gráfico aqui. Vamos fazer um novo evento. Vamos criar um novo evento personalizado. E vamos chamá-lo de quantidade de atualizações I. Agora, para este evento, vamos clicar nele. E vamos criar uma nova variável para essa, novamente, número inteiro 64, porque vamos inserir essas informações aqui para que possamos atualizar a interface do usuário E vamos chamar isso de quantidade de pontos um. Agora, o objetivo aqui é definir esse texto, a quantidade de moedas arrastadas a partir dele e, digamos, definir o texto. Isso é basicamente o que estamos tentando fazer. Estamos tentando atualizar o texto e clicar e arrastá-lo até aqui. E ele deve converter automaticamente seu número inteiro em texto e compilá-lo ou conectá-lo Agora lembre-se de que também temos uma animação. Vamos arrastar essa animação de moedas. E digamos que reproduza animação. Vá em frente e conecte isso também. Tudo deve estar bem. Agora vamos voltar para o player ou usar este. Atualize a quantidade de moedas. Vou em frente aqui e só precisamos editar. Aqui está dentro do WB principal, que está dentro do controlador do player E, como posso ver aqui, não temos uma variável para o controle do player. Vamos começar aqui. Jogue mais uma vez. Obtenha o controlador do player e compre este. Em seguida, podemos arrastar a partir daqui e dizer obter referência do controlador do player que fizemos na interface do blueprint E clique com o botão direito do mouse para promover essa variável e chame-a de controlador do player. Agora temos isso. Vamos pegar essa variável. Só precisamos ligar para o WB main porque o evento está dentro dele Quanto menos arrastar e pesquisar por WB main, já temos esse valor Lembre-se de que podemos arrastar aqui, digamos, atualizar a quantidade de pontos. Eu seleciono isso e bloqueio essas informações aqui. E tudo deve funcionar bem. Agora vou aumentar aqui no modo de jogo, vou aumentar o cronômetro da rodada inicial, porque às vezes é difícil matar o inimigo em 3 segundos. Eu só vou aumentá-lo para 5 segundos, na verdade. Sim, 5 segundos. Tudo bem, certo, e jogue. Agora você pode matar esse inimigo. Como você pode ver, a placa de animação. E nos deu 15 moedas. Deixe-me tentar de novo. Aqui, eu vou matar esse inimigo. Ele nos deu as moedas. Ele reproduziu a animação e tudo está funcionando corretamente. 65. 8.01 Adicionando a caixa de rolagem da loja: Agora é hora de trabalhar com a loja de itens. Se você clicar em Jogar, você se lembra que aqui na Ui, depois de criarmos a moeda ou antes, na verdade, criamos este artigo aqui embaixo, esta será nossa loja de itens. Só estou tentando misturar cookie Clicker e Clicker heroes. Como você pode ver aqui, por exemplo, apenas uma imagem do que estamos fazendo é adicionar essa parte aqui, essa loja onde você pode comprar algumas coisas e elas aparecem no mapa e assim por diante Então é isso que estamos tentando fazer aqui. Vamos fechá-lo por enquanto. Vamos para a interface do usuário e abrir o Maui. E aqui dentro, é aqui que queremos que os itens sejam exibidos. Agora, para exibi-los, precisamos de uma caixa de rolagem. Vamos procurar uma caixa de rolagem aqui em cima. Clique e arraste-o para a sobreposição em que está aqui. Verifique também se ele está alinhado horizontal e verticalmente dentro da caixa de Antes de adicionarmos os itens, precisamos deles dentro de uma caixa vertical. Porque eles vão cair assim. Vou pegar uma caixa vertical e adicioná-la à caixa de rolagem. Para esta caixa vertical, vá em frente e clique em Preencher. Caso contrário, vai estar aqui em cima. Mas queremos preenchê-lo até aqui. Agora este está pronto. Agora você pode ver aqui, sempre que eu adiciono um item, agora ele vai ser um, o topo aqui. E precisamos dar um pouco de espaçamento até as bordas Agora, não podemos realmente fazer isso porque eu posso simplesmente entrar aqui e escrever 100 e posso espaçá-lo entre as bordas, mas não consigo realmente visualizá-lo sem os cortes do meu item Eu vou fazer isso mais tarde. Eu vou escrever zero por enquanto. Foi isso por enquanto. Agora, essa caixa vertical aqui, vou renomeá-la porque vamos usá-la mais tarde Vou chamar o VB caixa vertical e vamos chamá-lo de algo como lista de itens Vamos defini-la como variável porque precisamos adicionar algo ou adicionar os itens posteriormente a essa lista de itens. Foi isso mesmo. Vamos encerrar isso e continuar com o próximo. 66. 8.02 Criando o cartão de item de loja: Tudo bem, agora é hora de criar os cartões de itens. Agora, não vamos adicionar os cartões de itens a essa interface principal, porque os itens que você pode imaginar, cada cartão de item tem informações exclusivas. Então, eu não vou entrar aqui e adicionar um texto e depois adicionar o texto aqui e assim por diante, porque isso exigirá muito trabalho de copiar e colar e não faz sentido Basicamente, o que fazemos para lojas em programação é pegar o cartão do item, criar uma instância dele , alterar dinamicamente todas as informações e o código do item com o código, e simplesmente duplicar o código do item e alterar as informações e alterar as Vamos tentar fazer isso para que possamos entender melhor. Vamos fechar isso aqui embaixo. Vamos clicar com o botão direito do mouse novamente, criar um novo esquema do Git Vamos chamar isso de código de loja aqui. Vamos abri-lo. Agora, aqui novamente, vamos adicionar uma tela. A propósito, o que estamos projetando é algo assim. Mas, basicamente, é isso que estamos tentando projetar. É sempre bom ver, antes de começarmos, que é isso que estamos tentando criar. Você pode tentar fazer isso sozinho, se desejar. Estamos fazendo o desejado na tela. Tente fazer isso sozinho, se desejar. Ou podemos fazer isso juntos aqui, adicionando primeiro uma tela e depois adicionando uma sobreposição, porque precisamos de um plano de fundo adicionando a sobreposição Clicando aqui, vamos adicionar uma imagem também. Esse será o nosso plano de fundo. Agora, para esta imagem, eu sou, vamos ver aqui. Vamos às imagens. Eu vou usar esse. Arraste-o novamente, como antes. Mude para desenhar a caixa logo na margem 0.5 Agora, essa sobreposição aqui, vou alinhá-la no meio, o ponto de ancoragem E escrevendo 0,5 no alinhamento exatamente como antes. Como queremos centralizá-lo, lembre-se de que queremos escrever 00 no x e y. Vou clicar aqui. Ou tamanho para o conteúdo aqui, então está no meio aqui, precisamente. Agora, para o tamanho da tela, vamos selecionar novamente a tela desejada Ela permanece com a tela que selecionamos. A diferença é que se você selecionar desejado, você pode ver aqui, no entanto, se eu for para o tamanho da tela como antes para escalá-lo para o meu laptop, clicando aqui, você pode ver que ele muda automaticamente para desejado na tela. Aqui está. É super, super pequeno. Precisamos aumentar o tamanho dessa imagem. Agora, talvez eu não altere a imagem em si porque ela está ajustada ao conteúdo aqui Vou apenas adicionar um pouco de conteúdo a ele e ver se ficará bem. Para começar, precisamos de uma caixa horizontal. Vamos arrastar isso para o Overallay. Então, na caixa horizontal, precisamos de algum texto. Agora, para o texto, vou copiar e colar algo que já fizemos para que não precisemos refazê-lo. Vou entrar no texto flutuante e vou copiar esse texto aqui. Vou colá-lo na caixa horizontal. Para esta imagem, posso ver que ela não está sendo dimensionada corretamente no alinhamento horizontal e no alinhamento vertical Vá em frente e preencha. Agora, para o tamanho desse texto. Eu vou escolher um pouco menor, talvez 26 em vez disso. E também vou mudar a cor do contorno para algo marrom escuro, algo com essa cor aqui Clicando em OK. Também vou copiar essa cor de contorno para as cores das sombras Nós damos esse efeito aqui. Em seguida, vou pesquisar o espaçador pelo espaçador adicionado à caixa horizontal Para esse espaçador, vou escrever 15 no X. Então vamos adicionar uma caixa vertical, porque agora precisamos adicionar a caixa vertical na caixa horizontal Então, vamos agora adicionar o nome. Basta copiar e colar este texto novamente, colar na caixa vertical deste, esse é o nome, por exemplo, podemos dizer que temos alguns itens mais tarde, mas vamos escrever algo como Whizz Apenas algo aleatório. No momento, não importa para este texto. Este é o número de itens que compramos até agora deste item. Eu só vou escrever 999. Essa talvez seja a quantidade máxima de itens que você pode comprar no jogo. Agora, abaixo do nome desse item, precisamos do preço. Vou fazer uma caixa horizontal, porque precisamos do ícone da moeda e do preço. Adicionando a caixa horizontal à caixa vertical dentro daqui, precisamos de uma imagem e, em seguida, precisamos de algum texto. Agora, para o texto, vou copiar colar isso aqui na caixa horizontal. Pelo preço, podemos escrever algo como 9457 ou algo parecido Pode até adicionar mais um número. Eu gostaria de adicionar um número alto porque só quero ter certeza de que meu cartão de item não será sacado sempre que tivermos números tão grandes para o jogo Você pode até escrever mais um número se quiser curtir isso. Para ter certeza de que o cartão parece adequado para esse ícone, vou até minha pasta de ícones e adicionarei essa moeda aqui. Arraste-o agora para ver a imagem. Não vou desenhá-la como uma caixa, porque a caixa é exatamente quando queremos que a interface seja dimensionada sempre que a arrastamos. Mas para a imagem, vou até aqui, alinhando-a horizontalmente e alinhando-a verticalmente no meio, porque você pode ver aqui, se você fizer assim, você pode ver que ela se você pode Isso também é perceptível. Sempre que você tiver uma interface de usuário que se estenda mais, a imagem não será dimensionada adequadamente Basta alinhá-lo no meio aqui. Vou colocar o preenchimento à direita, para que haja algum espaço entre o texto e o preenchimento do ícone à Dê algo como três. Temos algum espaçamento. Agora, também precisamos dar algum espaçamento à caixa horizontal aqui, porque ela está nas bordas Vou clicar aqui para ver o preenchimento. Agora, para a esquerda, vou tentar dar algo como 25. E à direita, vamos dar 25 também, algo assim. Agora, para o topo, vamos tentar algo como 15 por 15. Podemos dar um pouco mais. Acho que se eu clicar novamente na caixa horizontal, vamos dar cerca de 16. Acho que vou dar mais no final de 16, 20. Isso parece bom. Agora, para essa textura também, alinhe-a verticalmente ao meio Isso parece ótimo. Ok, vamos continuar. Agora, para a sombra, acho que vou escrever para, porque a sombra é muito forte, escrevendo duas em vez de três para esta. Por fim, vamos adicionar o botão Por. Vamos procurar o botão. Na verdade, precisamos primeiro de uma sobreposição porque precisamos adicionar algum texto em cima dela Se eu adicionar o botão, vamos ver onde o adicionamos. Aqui, fizemos essa caixa horizontal. É aqui que queremos adicioná-lo. Arrastando-o até aqui e, em seguida, procurando pelo botão. Vá em frente e adicione-o. Agora, para esse botão, vou apenas alinhá-lo vertical e horizontalmente, assim Vamos até os botões e arrastemos este. Arraste-o até aqui. Agora, para a tonalidade que vou ampliar para que não afete nosso botão de sorteio, vou desenhá-la como uma caixa, como antes Margem 0,5 Agora, para este botão, vamos dar a ele um tamanho aqui no x. Vamos seguir em frente e dar um pouco de espaçamento Você pode escolher o tamanho do botão que deseja que ele tenha, mas, por enquanto, vamos fazer assim, porque vamos adicionar um pouco de texto primeiro. Se eu simplesmente copiar isso, copiar e colar na sobreposição desse texto, vamos alinhá-lo no centro do botão Vamos escrever algo como y. Isso é o que vai dizer. Agora vou colocar um pouco de acolchoamento na parte inferior porque acho que está muito perto da parte inferior O acolchoamento inferior é algo como quatro. Agora que temos, parece muito bom. O que eu quero que você faça aqui, eu quero que você mude a cor das moedas. Podemos simplesmente usar o mesmo que usamos antes. Se voltarmos ao menu principal ou à interface principal e pudermos usar essa cor aqui, podemos copiar e colar no cartão do item da loja aqui, que é de uma cor diferente. Também para o botão Por, quero que você o altere para outra cor, talvez algo como verde. Você pode tentar escolher a cor verde desejada. Eu vou escolher essa cor verde. Vá em frente e clique em OK. Agora, isso é o que parece. O que você precisa fazer agora é tentar estilizá-lo o máximo possível, projetá-lo Aqui você pode aumentar o Y do botão, se desejar. Você pode ver que este não está alinhado no meio. Vou clicar nessa caixa vertical e alinhá-la no meio Em vez disso, parece mais correto. Agora, para esse botão, não vou exagerar. Só estou dando um pouco de espaço. Então, parece bom. Acho que algo como 150 por 75, e isso é o que parece. Agora, você pode dar um pouco mais de espaçamento se quiser aqui, mas acho que tudo está bem agora Este é o nosso cartão e sempre podemos ajustá-lo. Não é como se nós o projetássemos agora. E então podemos tocá-lo mais tarde. Sempre ajustamos o I mais tarde, porque o jogo muda a cada hora em que o desenvolvemos, talvez em dois dias. Acho que isso não parece bom. Eu posso ir em frente e mudar isso se eu quiser. Eu posso até mudar a cor disso e assim por diante. Basta projetá-lo da melhor maneira possível por enquanto. Agora, para este texto, eu só quero testar uma coisa. Você pode ver aqui, se eu escrever aqui, isso vai escalar toda essa interface do usuário. E eu realmente não quero fazer isso. A maneira de evitar isso é basicamente dando a ela uma largura mínima. Se eu conseguir encontrá-la aqui embaixo, largura mínima desejada, você pode ir em frente e aumentá-la. Como você pode ver, ele aumenta essa largura aqui. Para este texto, vou alinhá-lo aqui à esquerda e também aqui embaixo à esquerda Na justificativa, fica à esquerda para essa largura mínima desejada, acho que vou escrever algo como 50 Sempre que mudamos o número aqui no código, você pode ver se eu escrevo zero. Eu escrevo, por exemplo, 51. Isso não vai mudar todo esse layout. Acho que isso parece muito melhor. Talvez eu possa até diminuir o tamanho desta, escrevendo 20 em vez desta. Se eu escrever 999 novamente, posso diminuir a largura mínima desejada para 45 Assim mesmo. A mesma coisa com o nome do item. Então eu escrevo algo como torre ou faço isso. Isso aqui, você pode ver que muda o layout e eu realmente não quero fazer isso de novo. Vou dar a ele uma largura mínima de design aqui. Apenas aumente até ficar feliz. Agora, para este texto, vou alinhá-lo novamente horizontalmente à esquerda e a justificação à Para a largura mínima do projeto, vou fazer algo como 150. Na verdade, vamos dar a ele um nome muito mais longo, podemos testá-lo. Por exemplo, se tivermos um item com um nome longo, por exemplo, Wizard Tower Defender ou o que quisermos escrever aqui, podemos atribuir a ele uma largura mínima projetada, 200.235 seria Podemos simplesmente remover isso com uma torre. Novamente, para este texto aqui, ele realmente não afetará, porque não vai durar tanto quanto afeta aqui. Vou deixar isso pra lá por enquanto. Mas, novamente, você pode simplesmente fornecer um design mínimo, se desejar. Mas, por enquanto, eu simplesmente não vou fazer isso porque acho que não vai demorar tanto aqui. O preço, tudo está bem agora. Tudo bem, então isso era tudo para o cartão de itens da loja. E vamos mudar os nomes porque precisamos ajustar o slater Agora, para este texto, vou dizer o texto do nome do item. Este aqui embaixo será chamado de texto Preço do item por botão aqui. Também vamos alterá-lo mais tarde, porque eu quero mudar a cor e torná-lo vermelho se não pudermos comprar o item. Vou mandar uma mensagem para essa. Essa é uma mensagem de texto. Quantidade de pontos de itens, realmente não precisamos mais fazer aqui. Se você compilar e dar uma olhada no gráfico, essas são as variáveis que temos agora para o texto desta interface de usuário aqui, acho que está tudo bem Sempre podemos ajustar as coisas mais tarde se quisermos mudar alguma coisa. Por enquanto, vamos salvar tudo agora por meio de um botão Vou garantir que a visibilidade esteja configurada para ser testável, para que também não bloqueie o botão desse botão Vou copiar e colar no Hoverdm pressionado para o estado pressionado Acho que temos um estado pressionado nos botões. Vou clicar nesse aqui e arrastá-lo até aqui. Para o estado de Hoverd, não temos um botão. Vou mudar o tom para um pouco diferente sempre que clicarmos no botão, ok, vá em frente, compile e salve Agora, se você quiser testar isso, você sempre pode voltar para o meio e sair daqui Você pode pesquisar o cartão de itens da loja WB que criamos. E você pode arrastar isso para a lista de itens que fizemos, ver como fica se eu apenas controlar D e duplicá-lo algumas vezes Isso é o que parece se eu simplesmente os remover aqui. Agora, o que você pode fazer é dar a ele algum espaço. Agora, na caixa de rolagem, vá em frente e dê espaço para o preenchimento Eu posso escrever 25, eu posso escrever algo como 50. Acho que talvez 50 seja um bom número. Agora você pode ver que está cortando para o lado. O que você pode fazer é aumentar o tamanho deste. Lembre-se, esta é toda a caixa vertical aqui. Você pode ir em frente e aumentar um pouco o tamanho. Você pode ver tudo. O que você também pode fazer é clicar na caixa de rolagem. Vou clicar aqui na barra de rolagem Always Show. É assim. Também consuma a roda do mouse. Vou mudar para sempre para que possamos rolar sempre até aqui. Agora, vamos também projetar essa alça para a barra de rolagem. Quero que você volte aos materiais do curso aqui. E eu te dei essa alça deslizante. Vamos importar isso. Se eu chegar aqui, arraste essa alça deslizante para as imagens Eu só vou fazer isso dentro daqui. Arraste-o aqui, certifique-se de adicionar as configurações de pixels. Vamos clicar com o botão direito do mouse nas ações certas aplicar papel nas configurações. Agora vamos voltar para a interface do usuário, abrir a interface principal e, dentro daqui, clicar na caixa de rolagem. E desça e você encontrará esse chamado estilo de bar. Clicando nela, tínhamos essa imagem entorpecida normal aqui. Você pode alterá-lo para a alça deslizante. Agora você pode ver isso mudar. Agora, novamente para a margem da caixa, vou escrever 0,5 em vez da espessura da barra de rolagem. Você pode ver o quão largo ele deve ser. Acho que vou dar algo como 18. Você também pode dar um pouco de preenchimento, algum espaçamento entre esses itens E esse identificador, eu vou escrever zero em todos eles por enquanto. À esquerda, vou dar algo como dez, então tem um pouco no topo. Vamos ver se eu acho que deveria continuar o mesmo. Na verdade, zero no topo, o direito é zero. A parte inferior também é zero. Vamos tentar assim. Eu só vou dobrar isso algumas vezes Também posso ver a sombra aqui embaixo, como ela se parece. Ok, tudo está ótimo. Agora vamos clicar nessa caixa vertical e aumentar o tamanho dela. Então não está, acho que está ótimo até agora. Isso é o que parece. Você sempre pode reduzir o tamanho desse item se quiser, se o nome for muito longo. Ou você pode diminuir o nome para ter espaço no motor. Mas, novamente, podemos ajustá-lo mais tarde, se quisermos. Mas, por enquanto, vamos voltar ao item da loja, Cod. O que eu quero fazer aqui é dar um pouco de espaçamento, porque você pode ver que não há espaçamento entre esses elementos dentro dos códigos dos itens da loja Vou clicar na imagem aqui. Vou apenas colocar um pouco de acolchoamento na parte superior e inferior Para o topo, talvez seis e para o fundo seis também. Vamos tentar ver o que isso parece. Isso parece muito melhor. Na verdade, vamos dar cinco em vez de 65 por cinco. Novamente, se desejar, você sempre pode aumentar o tamanho do botão. Não é isso para o X, para o Y, na verdade, vou aumentá-lo novamente, um pouco, algo como 80. Lembre-se de copiar esse tamanho de imagem para o cursor do mouse e também para a prensa Compile, compile, salve tudo. Aqui está o que parece. Parece muito bom. Não acho que mudaremos mais coisas se eu apenas maximizá-las. Isso é o que parece. Para mim Talvez eu torne o texto um pouco maior. Na verdade, deixe-me fazer isso. É um pouco pequeno demais. Na minha tela, posso fazer cerca de 20 para o texto aqui em cima, o preço também, e 22 ou 24 para os itens aqui compilados Espero que não precisemos ajustar a largura mínima desejada, mas podemos fazer isso mais tarde, se necessário. Acho que isso parece muito melhor. Ok, esses são os itens que temos. Tudo está indo bem. Também para o botão de compra, vou alterá-lo para 20. Agora terminamos. Vamos salvar tudo e fechar tudo. E agora estamos prontos para continuar. 67. 8.03 Informação do item Estrutura e tabela de dados: Antes de continuarmos com isso, obviamente precisamos de alguns itens com os quais trabalhar. Eu quero que você acesse seus materiais de custo mais uma vez, e eu quero que você acesse a pasta de objetos. Dentro daqui, eu te dei alguns ícones e você pode usá-los como itens no jogo. Então vá em frente e vamos importá-los. Vamos até os ativos aqui dentro, vou clicar com o botão direito do mouse e criar uma nova pasta, vamos chamá-la de objetos. Vá em frente e importe tudo isso aqui. Novamente, vou clicar em todos eles. Clique com o botão direito do mouse e aplique papel nas configurações novamente. Agora temos esses. Agora, para usá-los de forma intuitiva, lembre-se de que precisamos transformá-los em sprites Não podemos simplesmente arrastar texturas como essa, então vamos selecionar todas elas. Clique com o botão direito e vá em frente e diga Create Sprite. Agora não precisamos extrair porque lembre-se extrair somente quando temos vários sprites em uma imagem No momento, é apenas um sprite em uma imagem. Então, podemos seguir em frente e clicar em Criar Sprite. Aqui temos os sprites. Vou clicar com o botão direito do mouse e criar uma nova pasta chamada Texturas, porque basicamente não precisamos mais de todas elas. Vou clicar em todas essas texturas e arrastá-las para essa pasta Agora só podemos ver os sprites. Vá em frente e salve tudo isso. Em seguida, vamos ver as plantas. E vamos seguir em frente e fazer nossa estrutura. Vamos abrir a pasta de estruturas. Crie uma nova estrutura de projeto, informações do item, informações do item ST Vá em frente e abra. Agora podemos adicionar variáveis ao que quisermos para as informações desse item. Agora, para as informações do item, obviamente preciso do nome do item. Basta digitar o nome correto, vá em frente e selecione a string Salvar. Vamos criar uma nova variável. Vamos chamar isso de uma classe. E essa será a classe base do item. Eu posso ver aqui que ainda não criamos uma base de itens. Vamos fazer isso nas plantas. Aqui não temos uma pasta para isso Vou escrever e clicar em criar uma nova pasta chamada Itens. Dentro desta pasta de itens. Vamos escrever uma nova classe de blueprint para esta Agora, quanto aos itens, eu só quero que sejam sprites normais que eu quero que apareçam no mundo Na verdade, vou pesquisar o sprite e selecionar o ator do sprite de papel Vá em frente e selecione este. Vou chamá-la de base de itens da BP. Agora você pode imaginar quando já está criando um jogo. Agora você precisa decidir o que seu item conterá. Porque você pode ver aqui se mais tarde eu decido que meus itens são flip-books de papel animados E eu tenho que ir em frente e criar um plano aqui, procurando por flip book em vez disso, e selecionando este Crie sua base de itens em um blueprint errado. Isso vai ser uma dor para você porque você precisa recriar tudo novamente quando já está criando um jogo a partir de Agora, decida se seus itens são animados? Se estiverem, você deve selecionar um flipbook de papel, obviamente, porque os flipbooks obviamente, porque os flipbooks No entanto, se você não tiver nenhuma animação para os itens, sabe que pode selecionar um sprite Apenas certifique-se de saber tudo isso antes de criar o blueprint Eu sei que meus itens aqui não são animados, são apenas imagens aqui. Sprites, eu crio sprites de papel em vez disso. Agora temos essa base de itens. Agora, nós realmente não precisamos fazer nada com isso. Então, vamos voltar às informações do item. Eu só queria criá-lo aqui na minha classe. Eu posso pesquisar a base de itens, posso prosseguir e selecioná-la como uma referência de classe. A razão pela qual eu selecionei como referência de classe é que isso geralmente é o que você faz quando deseja gerar itens Lembre-se de que, dentro do projeto, eu abro o controlador do player, usamos essa classe, essa é uma classe de ator de referência de classe E usamos isso para gerar coisas. Eu quero gerar o item mais tarde, então vou adicioná-lo a ele Então, queremos escrever sprites porque eu quero saber qual sprite ele tem Vou pesquisar sprites e selecionar a referência do objeto Papa Sprites A última coisa que quero acrescentar é quanto custa esse item? Custo das moedas. Vá em frente e pesquise, vamos selecionar um número inteiro Só um número inteiro. Agora terminamos isso, as informações do item. Vamos agora adicionar uma tabela de dados para isso. Abra a tabela de dados. Clique com o botão direito na tabela Micellaneouselta. Eu tenho que selecionar as informações do item de estrutura, a Coca-Cola. Chame-o de informações do item T. Agora estou passando por isso um pouco mais rápido do que antes, porque já fizemos isso duas vezes antes. Agora, essas informações do item, precisamos de uma tabela de dados para ele dentro do Google Sheets. Quero abrir o Google Sheets mais uma vez aqui. Deixe-me duplicar isso, informações do nível TT, certo? Duplique-o. Vamos chamar esse aqui embaixo. Vamos mudar o nome para base de itens do DT. Agora, dentro daqui, eu vou deletar tudo isso. Exclua tudo isso novamente. Agora, para os itens, tenho que escrever o nome de cada item. Por exemplo, eu posso pegar o primeiro e você sempre pode copiar e colar o método. Novamente, você precisa escrever os mesmos nomes de variáveis que você fez dentro da estrutura aqui para escrever o nome. E então temos que escrever sprites, e então temos o custo das moedas, você tem que escrevê-las exatamente como as escrevemos aqui, caso contrário, não vai funcionar A segunda coisa é que você precisa anotar as informações. Agora, se eu voltar para minha mesa agora para obter o ID, você terá que escrever o nome do item. Se eu voltar para os objetos, encontro um dos itens. Por exemplo, digamos que o primeiro item seja essa pena. Eu posso chamá-lo do que eu quiser. Por exemplo, eu quero chamá-lo de pai da luz. Posso copiar e colar no nome da classe. Ainda não o criamos. Eu vou até os itens da aula. Eu tenho que clicar com o botão direito aqui. Crie uma turma infantil de blueprint. Agora eu tenho que criar todos os itens. O primeiro é chamado BP Light. Você pode tentar ajustá-los em qualquer sequência que desejar. Por exemplo, a pena clara é o pior item do jogo Por exemplo, essa chamada ou esse arco-íris pode ser o melhor item do jogo Você pode simplesmente ajustá-los em qualquer sequência que desejar, mas você só precisa criar todos eles. Por exemplo, eu posso criá-los em uma sequência aleatória. Por enquanto, por exemplo, essa coroa do mal. Agora posso ir até os itens, clicar com o botão direito do mouse na base do item e criar um plano secundário Chame isso de BP Brown of Evil. Volte para os objetos, vou copiar o chapéu do Grande Mago. E faça a mesma coisa com todos os itens. E voltarei com você assim que tiver criado todos eles. Tudo bem, agora estou de volta. Eu criei todos os itens aqui quando era criança. Então, basicamente, clico com o botão direito do mouse e crio um vidro de planta infantil Só estou dando o nome dos itens que eu tenho aqui, aqueles que importamos para cá. Agora eu tenho todos eles. salvar tudo. Agora, o que você pode fazer é voltar à tabela de dados para obter essas informações aqui. Para obter as informações da classe, geralmente vou até a tabela de dados A, adiciono uma linha e seleciono-a aqui, por exemplo. Eu posso selecionar a pena Lucky ou light, por exemplo E então eu posso segurar a tecla Shift, clicar com o botão direito para copiar e, em seguida, posso abrir minha tabela de dados, controlar V para colá-la. É basicamente assim que você faz. Agora você pode ver que tem essa pena clara colada. Agora, novamente, você precisa escrever todos os itens aqui. Agora, muito importante, essa será a sequência de seus itens, quão bons eles são. Apenas certifique-se de escrever os piores itens primeiro e depois ficar cada vez melhor escreva-os em qualquer sequência que desejar. Eu vou fazer isso aqui também. Agora, eu escrevi todos eles em qualquer sequência que você desejar. Acabei de escrever uma sequência aleatória aqui para todos os itens. Agora, para cada uma dessas classes, novamente, você tem que entrar aqui, abrir a tabela de dados para as informações do item, selecionar, por exemplo, a próxima, que é, vamos selecionar apenas em sequência. Por exemplo, Crown of Evil. Volte para a tabela de dados e cole aqui para a Coroa do Mal. Agora volte novamente, selecione as cabeças dos grandes magos. Cole-o nas cabeças do mago aqui em diante. Basta fazer isso por todos eles. Agora, para o sprite, é muito mais fácil porque você pode simplesmente minimizar isso Vá até seu sprite aqui nos objetos. Para cada sprite, clique com o botão direito do mouse na referência e, em seguida, você pode voltar aqui colá-la para a Coroa do Mal Agora, por exemplo, na próxima, o cabeçalho do assistente, clique com o botão direito do mouse na referência. Volte para a tabela de dados, cole-a aqui e assim por diante. Faça isso com o sprite também. Agora, quanto ao custo das moedas, você pode fazer isso aleatoriamente. Agora você pode escrever algo como se o primeiro item estivesse custando 15 moedas Vou escrever da mesma forma clicando nesse número, multiplicamos 1,5. Depois, vou clicar e arrastar isso para todo esse campo. Então, ele adiciona automaticamente o número para mim. Realmente não importa qual é o preço por enquanto. Você sempre pode ajustá-lo mais tarde. Só vamos programar por enquanto. Eu só vou preencher tudo isso agora. Tudo bem, agora eu preenchi todas as informações. Vá em frente e clique em Arquivo e faça o download. Faça o download como um arquivo CSV. Agora vá em frente e renomeie isso para DT base. Vamos voltar para a tabela de dados. Na verdade, a base DT chamou isso de informação. Esse é o meu erro. Informações do item. Você também precisa corrigir isso dentro da tabela de dados aqui. Em vez disso, chame-o de informação, isto. Agora podemos arrastar isso até aqui e importar automaticamente todas as informações para nós. Então, agora temos tudo o que precisamos. Agora, a etapa final que precisamos fazer, pouco antes de terminarmos com isso, sempre podemos ir às bibliotecas. Agora, dentro das bibliotecas anteriores, vamos adicionar uma nova função chamada get item info porque precisaremos dela mais tarde. Vamos adicionar aqui a entrada, chamá-la de nome T, que é uma string. Agora, para o item, vamos arrastar novamente. Assim como antes, podemos entrar aqui. E é basicamente tudo isso. Você pode até copiar e colar tudo isso aqui. Estamos substituindo todos os espaços, como você pode ver aqui. Queremos aqui as informações do item DT e podemos criar um nó de retorno, retornar, ele retorna as informações deste item aqui Posso simplesmente escrever as informações do item, compilar e garantir que as informações do item que você selecionou sejam puras Porque queremos apenas obter as informações, salvar tudo. Foi isso mesmo. Agora temos tudo o que precisamos para as informações do item. Se você quiser apenas testá-lo, você sempre pode entrar no player, por exemplo, corretamente, pode dizer obter informações do item Aqui você vê que tem o nome do item que pode ser conectado e vamos realmente adicionar o nome do item antes de terminarmos isso. Apenas um conteúdo extra aqui, podemos finalizar a base do item. Vamos abri-lo aqui para as variáveis que eu quero adicionar. Podemos até chamá-lo de nome ou nome. Vamos chamá-lo de nome do item. Vamos dar a ela uma variável de string. Compile agora, já que eu a adicionei ao pai, todos os filhos do blueprint herdarão essa variável se eu abrir a coroa do mal. Por exemplo, você pode ver aqui que ela tem o nome do item e você precisa escrever o nome do item corretamente Agora, porque esse é o nome do item que extrairá as informações dessa tabela de dados. Se você chamar essa, por exemplo, de Coroa do Mal, ela encontrará Coroa do Mal aqui. Mais tarde, serão necessárias todas essas informações. Ele sabe qual classe tem, qual sprite, quanto custa e assim por diante Portanto, você precisa escrever isso corretamente e podemos usá-lo mais tarde. Novamente, clique em todos eles. Escreva o nome deles para Grand Wizard. Adicione a esta base de itens de composição, não temos nada. King's Crown, certo? Reis redondos. Eu só vou fazer isso para todos eles. Tudo bem, essa é a última que é a tocha. Vamos compilar e salvar tudo. Agora temos tudo o que precisamos. Vá em frente e salve tudo, e vamos para a próxima lição. 68. 8.04 Criando os cartões de itens da loja: Tudo bem, agora vamos criar o item da loja. Od, vamos agora às plantas. Abra a lei de controle do jogador, porque lembre-se de que aqui é onde fazemos a interface do usuário. Qualquer interface de usuário que você tenha que fazer. Eu costumo fazer isso no controle do jogador. Em vez de aqui, vou criar um novo evento, evento personalizado. Vamos chamar isso de criar itens de loja. Porque agora precisamos criá-los dinamicamente por meio de código Lembre-se de que, para o cartão de itens da loja, basicamente projetamos um cartão aqui como um cartão estático com todas as informações estáticas. Mas agora precisamos alterar todo esse texto aqui para ser dinâmico por meio do código. É por isso que primeiro precisamos criar a carta e depois exibi-la no topo do menu, onde temos essa caixa de rolagem aqui no controle de jogo. Vamos fazer isso. Crie cartões de itens da loja. O que queremos fazer basicamente é usar esse chamado widget de criação aqui Crie widgets. E queremos criar o cartão de itens da loja. Esse é o nosso principal objetivo. Agora temos que criar isso para quantos itens temos. Lembre-se de que essas informações estão disponíveis na tabela de dados que criamos aqui. Já sabemos quantos itens temos daqui. Na verdade, sabemos quantos desses widgets precisamos criar Basicamente, você pode fazer isso clicando com o botão direito do mouse e dizendo, obtenha os nomes das linhas da tabela de dados. Lembre-se dessa que usamos dentro da biblioteca de funções, mas agora precisamos usar essa. Obtenha os nomes das linhas da tabela de dados. Então, estamos obtendo todos os nomes dentro dessa tabela de dados. Agora temos todos os nomes dos itens aqui. Vamos conectá-lo. O que podemos fazer agora é, em vez de conectá-lo aqui, porque precisamos criar um widget para cada um desses itens, o que podemos fazer é arrastar até aqui e dizer quatro em cada loop Agora vamos fazer um loop. Agora, para cada um desses itens, vá em frente e crie um widget Então, quando você cria o widget, eu quero adicioná-lo em uma matriz Se eu criar uma nova variável aqui embaixo e chamá-la, posso alterar o tipo desse widget que criamos Cartão de itens da loja. Se eu apenas pesquisar um item da loja e este aqui, vá em frente e selecione-o. Eu quero mudar este para uma matriz. Você pode clicar aqui ou, na verdade, aqui em cima. E você pode selecionar matriz, ou você pode simplesmente clicar com o botão direito nesse ícone e ele o transforma em uma matriz. Agora, para este cartão de item de loja, o que é uma matriz, se você ainda não sabe que tem as variáveis únicas aqui e tem uma matriz, uma única variável é onde basicamente, assim como antes de usá-la, armazenaremos uma única informação nessa variável para que possamos usá-la posteriormente. Agora, para uma matriz, isso é armazenar várias informações. Podemos armazenar todos os widgets que criamos. Podemos armazená-los aqui para obter essas informações. Você pode arrastar e obter e obter qualquer índice de informações em que ele esteja Se eu clicar nessa matriz aqui, você pode realmente ver clique no sinal de mais. E eu posso selecionar um item e clicar no sinal de adição novamente, selecionar outro item e você pode continuar. Você pode ver que ele salva várias informações. No entanto, para um único, você pode ver que só pode salvar uma única informação . Mas para uma matriz, você pode salvar várias. Vamos simplesmente deletar todos eles. Você pode ver aqui que, quando você tem todos os widgets, também pode escrever para cada loop Agora você pode fazer algo com cada um dos itens que você salvou aqui. Vamos salvar esse widget aqui. Para cada um dos itens, criamos um widget. Vou colocar cada um desses widgets aqui e dizer Adicionar, vamos adicionar isso à loja. Cartões de itens como esse. O motivo pelo qual precisávamos transformá-lo no widget Shop It aqui, digite Porque lembre-se de que, se você segurar o mouse sobre isso, isso também é uma referência ao objeto Shop It. Agora, se você tentar fazer outra coisa, por exemplo, se eu apenas pesquisar base de jogadores por jogador e selecionar esse player PP e transformá-lo em uma matriz, tento adicionar isso aqui. Isso vai dizer que a referência do objeto do item da loja não é compatível com a referência do objeto do jogador porque eles não são do mesmo tipo de variável. Você não pode fazer isso, elas precisam ser do mesmo tipo de variável. Antes que você possa adicioná-los aqui, deixe-me deletar este. Agora, criamos um widget para cada um desses itens e o armazenamos nessa variável de matriz Agora eu também quero ter certeza de que essa matriz aqui não tem nada dentro dela. Antes de fazer isso aqui, antes de fazer qualquer coisa, deixe-me copiar isso, colar e dizer claro. Porque eu quero limpar essa matriz antes de começar a adicionar itens a ela. Agora, basicamente, terminamos de criá-los. Foi isso por enquanto. Vamos compilar e passar para a próxima 69. 8.05 Exibindo os cartões de itens da loja: Tudo bem, agora estamos prontos para exibir os cartões de itens. Agora, antes de fazer isso, vou deletar todos eles. Portanto, selecione esses cartões de itens que adicionamos anteriormente à lista e exclua a compilação Agora, o que podemos fazer dentro do controle do player, novamente, vamos criar corretamente um novo evento personalizado Vamos chamá-lo de cartões Display Shop It. Agora vamos exibir os cartões que criamos anteriormente. Antes de fazer isso, novamente, preciso limpar o que tenho dentro dessa caixa de rolagem. Lembre-se de que temos essa lista de itens do VB. Vamos voltar ao controle do player. Pegue este WB principal, porque esta ou esta lista de itens da lista VB está dentro do WB Posso arrastar a partir daqui e dizer lista de itens VB, digamos, crianças claras Porque eu quero limpar todos os itens que estão dentro dele antes de adicionar meu cartão. Ele não exibe coisas aleatórias. Além disso, se você criar os cartões de itens da loja posteriormente por algum motivo para o seu jogo, certifique-se de remover os antigos antes de adicionar os novos. Agora vamos pegar os cartões de itens da loja que temos. Agora podemos dizer que para cada loop conectado. Agora, para cada um desses cartões de itens, queremos adicioná-lo a essa lista. Eu posso copiar isso, colar e dizer adicionar dois. Adicione a criança à caixa vertical, selecione esta e agora adicione-a dentro daqui. Para cada cartão de item da loja que eu recebo aqui, vá em frente e adicione-o à lista. É basicamente isso se eu compilar agora. Porque aqui, se eu clicar em Jogar, nada realmente acontece. Porque lembre-se de que nunca convocamos esses eventos. Vamos fazer isso no início do jogador ou no início do jogo aqui. Porque normalmente você só precisa pensar em seu jogo, quando ou onde você quer chamá-los? Você quer chamá-los do player, do controlador do Player. Agora eles são exibidos dentro da minha interface principal, então eu posso realmente fazer isso dentro do Begin Play. No entanto, se isso estivesse sendo exibido dentro do meu, por exemplo, um botão aqui que eu tivesse que pressionar para abrir a loja , eu não o exibiria dentro do Begin Play. Eu o criaria. Se eu puder ir até aqui no Begin Play e dizer Create, compre cartões It e ligue para esse evento que criamos. Agora estamos convocando esse evento aqui embaixo. Isso está correto. Agora, se estivesse dentro de um botão, se eu tivesse que apertar um botão para abri-lo, eu não escreveria essa tela no início da reprodução. Eu escrevia isso sempre que clicava no botão. Em seguida, você deseja exibir os cartões de itens da loja. Mas, no momento, temos isso no início, na verdade, queremos exibi-lo imediatamente. Na verdade, posso escrevê-lo aqui sempre que crio os cartões de itens da loja e tudo é adicionado e tudo está completo. Aqui, concluindo, quero dizer que exiba cartões de itens da loja. Então, está fazendo isso corretamente. Vamos compilar e clicar em reclamar agora. E eu posso ver que nada acontece. E isso porque, na verdade, esqueci selecionar as informações do item DT aqui Se eu compilar a reclamação agora, agora você poderá ver todos os meus itens Não é com informações corretas, pois lembre-se que ainda não dissemos onde o título deveria estar, qual deveria ser o preço. Precisamos atualizar isso, mas você pode contar aqui que tem 1-234-567-8910 Isso está correto porque dentro da tabela de dados, também temos dez itens. Agora, na verdade, ele está exibindo a quantidade correta de itens em nossa lista. Isso é o que nós queremos. Eu posso ver que há um bug com essa barra de rolagem. Na verdade, vou corrigi-lo imediatamente . Se eu clicar nessa caixa de rolagem, o polegar normal, vou colá-la Para o pairado, para o Dr. E pairado, você pode até mesmo alterar Também tem algum efeito no arrasto. Eu vou mudar isso um pouco. Ok, clique em jogar agora. Tudo deve estar bem. Ok, agora tudo é exibido corretamente. Vamos continuar com o próximo. 70. 8.06 Dando a cada cartão de item a informação correta: Agora temos que pensar em como dar a cada cartão de item as informações corretas. Assim, podemos mudar o nome, podemos mudar o preço e assim por diante. Então, vamos entrar no gráfico. Dentro daqui, eu quero criar uma nova variável. Vamos chamar isso de informação de um item. Vamos também alterar o tipo para as informações do item. E podemos selecionar a estrutura que fizemos. Ok, vá em frente e compile. E eu posso ver a estrutura agora que você tem todas essas informações, mas agora ela está vazia. Então, como obtemos as informações corretas do item? Todas essas informações aqui. Como colocamos isso dentro do cartão de itens da loja? Assim, podemos definir o texto do título, definir o texto do preço e assim por diante corretamente. A forma como fazemos isso é acessar o gráfico do cartão do item da loja, clicar nas informações desse item e configurá-lo como editável por instância e exposto no Você compila e volta para o controlador do player agora e clica em Arquivo, Atualizar todas as notas Você pode ver aqui, você percebe que essa informação do item apareceu. E, novamente, isso ocorre porque pressionamos a instância Editável e expusemos no Ele será exposto sempre que criarmos o widget. Aha. Agora podemos pegar isso e dizer obter informações. E, na verdade, não podemos fazer isso diretamente porque é uma string. Tally pode dizer para obter informações sobre o item. Lembre-se de que essa é a função que criamos na biblioteca de funções. Agora podemos arrastar isso até aqui e ele converterá sua string de nome ou sua variável de nome em uma variável de string. Agora podemos registrar as informações desse item aqui. Agora, para cada um desses itens, basicamente o que ele está fazendo é obter esses itens para cada nome do item ou cada nome do item. Se eu acessar as informações do item, lembre-se de que temos um nome. Ele usará essas informações para obter informações aqui. Então, basicamente, ele lerá, por exemplo, com uma pena leve, obterá essas informações para a tocha, obterá essas informações e assim por diante para cada um deles Ele vai conectá-lo à respectiva placa que criamos. Então, agora temos essa informação realmente armazenada aqui. Agora podemos continuar com as próximas lições, onde podemos realmente adicionar ou atualizar as informações desse cartão. 71. 8.07 Exibindo as informações do cartão de item correto: Agora que temos as informações corretas do item dentro dessa variável, vamos prosseguir e atualizar as informações. Vou deletar tudo isso por enquanto. Vamos começar com a construção do evento. A construção do evento será reproduzida sempre que você criar o widget aqui Lembre-se de que criamos os cartões de criação de itens da loja. Sempre que você cria o widgit, esse início de jogo ou até mesmo construção será reproduzido imediatamente Vamos atualizar as informações aqui contidas. Simplesmente o que queremos fazer é começar com o nome desse item, clicando nele. Lembre-se de que já alteramos o nome dela e a definimos como uma variável. E fizemos isso para todos eles. Clicando no primeiro, nome do item, arrastando-o até aqui, arrastando e dizendo o texto definido Isso é basicamente o que queremos fazer. Queremos definir o texto corretamente. Queremos pegar as informações desse item agora, arraste-o e diga break. Assim, podemos ver todas as variáveis. Podemos simplesmente arrastar o nome do item dentro daqui e ele será atualizado. Vá em frente e conecte-o. E você já pode ver isso funcionando se clicar em Jogar agora. E agora você vê que tem o nome correto para todos eles. The Protector Night Helmet, King's Crown e assim por diante Ele está sendo atualizado corretamente. Dessa forma, você sabe que as informações corretas estão sendo exibidas. Ok, esse era o nome do item. A segunda coisa que eu quero atualizar é o preço. Clique neste. Vamos arrastá-lo e dizer Definir texto. Agora, para ver o preço, vamos clicar neste. Vou mostrar o custo das moedas. Vou conectá-lo aqui. Divida isso. Agora, se você clicar em Reproduzir, verá que isso também é exibido corretamente. Agora, para a quantidade de itens que compramos, toda vez que você clica e compra um item, você precisa armazená-lo em uma variável, porque mais tarde você precisa saber quantos desses itens você comprou. Agora, quanto à quantidade de itens que compramos, acho que vou armazenar essas informações dentro do player. Se eu abrir o player e entrar aqui, vamos criar uma nova variável. Vamos chamar esse item de potes. Agora vamos transformá-lo em uma string porque precisamos saber de qual item estamos falando. Agora vou transformá-lo em um mapa. Preciso explicar para você o que é um mapa. Se você simplesmente arrastar isso aqui, podemos ver que um mapa é uma conexão entre duas variáveis, em vez de ser uma variável. Agora temos duas variáveis em uma aqui, eu compilo aqui embaixo, clico em mais, você pode ver que há um campo no qual eu posso escrever Essa é basicamente a variável de string aqui. Eu posso definir um número aqui, e essa é a variável inteira. Você pode ver que temos uma string e um número inteiro e, basicamente, você pode ter quantas quisermos Quero usar isso para ter o item, por exemplo, a coroa do rei. E então, quantos King's Crown compramos até agora? É assim que vamos usar essa variável. Mas um mapa, você pode basicamente transformá-lo em qualquer coisa. Por exemplo, você pode transformá-lo em um número inteiro aqui. Você também pode alterá-lo para uma transformação. Por exemplo, aqui, agora você pode ver que pode usá-lo assim, onde você tem um número que é basicamente o número inteiro Então você tem a transformação. Se você clicar aqui, poderá ver a transformação. Basicamente, você pode armazenar talvez a quantidade de transformações que você tem no mapa ou qualquer outra coisa, algo aleatório Mas, como você pode ver, um mapa é uma conexão entre duas variáveis. Mas deixe-me transformá-lo em uma string por enquanto e transformar o segundo em um número inteiro porque eu basicamente quero saber qual item estamos falando e quantos desse item realmente compramos É para isso que você está usando um mapa. Eu não compilei agora para esses itens comprados. Deixe-me agora voltar para o cartão de itens da loja. E preciso de uma referência ao meu player porque preciso usar essa variável na construção do evento. Deixe-me usar minha interface de projeto. Primeiro, jogue o personagem, comece a jogar. Então, a partir daqui, podemos arrastar e dizer get play, nossa referência. Lembre-se de que essa é a interface de projeto que criamos. Clique com o botão direito, promova isso para nossa variável e chame-a de peão do jogador, por exemplo E vá em frente e conecte-o. Agora que temos a variável, agora podemos pegar esse peão e usá-lo dizendo que ele aparece e podemos obter nossa variável O que queremos fazer, basicamente, se eu voltar, este é o ponto do item. Se eu apenas arrastá-lo para dentro, simplesmente queremos definir o texto como antes de escrever o texto definido, vá em frente e conecte-o. Isso é basicamente o que queremos fazer. Precisamos saber quantos desses itens compramos e de qual item estamos falando. Podemos arrastar até aqui e dizer, por exemplo, se você não sabe o que pode fazer com um mapa, você sempre pode pesquisar o mapa. E agora você pode ver todas as funções que você pode usar para um mapa. Por exemplo, você pode pesquisar, encontrar porque queremos encontrar o item aqui quando encontrarmos o item específico, por exemplo, a coroa do rei. A partir daqui, se eu puder soletrar King's Crown, então a partir daqui sabemos quantos itens compramos e podemos realmente exibi-los Em vez de escrever aqui, o que você pode fazer é que já saibamos qual item é porque temos as informações do item. Então, podemos arrastar isso e quebrar aqui. E então temos o nome do item ao qual podemos conectar uma variável. Agora , ele pegará o nome desse item em que estamos e o conectará. E a partir daí, ele encontrará o item e, em seguida descobrirá quantos desses itens você realmente comprou? Mas, no momento, não armazenamos realmente nada dentro desses itens comprados. Portanto, está vazio no momento, mas terá algumas informações mais tarde, quando realmente comprarmos os itens. Vou apenas conectá-lo aqui e ele o exibirá para mim, uma compilação em execução E agora você pode ver que ele está exibindo zero porque não temos informações nele até o momento. 72. 8.08 Mudando a cor do texto de compra: O que eu quero fazer agora é atualizar isso pela cor do botão, porque se tivermos zero moedas, quero exibir essa cor ou a cor do texto como vermelho em vez de verde. E fica verde sempre que temos moedas suficientes para comprar esse item. Vamos seguir em frente e fazer isso. Deixe-me encerrar isso. Novamente, trabalhando com a interface do usuário, quero fazer isso dentro do controle do jogador. Dentro daqui, vou criar uma nova função. Vamos chamar isso de. Vamos chamá-lo de atualizações, armazenar ou atualizar, comprar. E é por botão ou por cor de texto, algo assim. Atualização muito explicativa do cartão do item da loja pela cor do texto. Agora, precisamos de uma referência a todos esses cartões de itens da loja que temos aqui. Lembre-se de que já temos isso dentro da matriz de itens da loja que criamos. Eu direi que para cada loop, e vamos percorrer todos eles. Para cada um deles, quero pegar esse texto. Então, se eu voltar e lembrar o que chamamos, é um texto de e fizemos com que fosse variável. Vamos voltar ao controle de jogo. Vamos arrastá-lo e dizer que podemos pegar esse texto. O que simplesmente queremos fazer é arrastar e dizer cor, se não souber como se chama, você pode ver que existe algo chamado definir cor e opacidade Vamos escolher esse. Vamos arrastá-lo até aqui. Agora você pode arrastar a partir disso e dizer criar uma cor de ardósia porque queremos ver o que podemos fazer com ela Agora podemos definir uma cor específica aqui dentro. Agora eu quero definir a cor dependendo se realmente temos moedas ou não. Agora temos que trabalhar com as moedas. Lembre-se de que isso está lá dentro. Dentro do jogador, temos algo chamado quantidade de moedas que usamos anteriormente. Também temos o custo do item que está dentro do cartão do item da loja porque temos essas informações do item, então sabemos o custo do item. Vamos usá-los dentro do controle do player. Você pode tentar fazer isso sozinho, se desejar praticar, caso contrário, vamos fazer isso juntos. Agora, para este item, vou dizer informações do item. Então, eu vou pegar essa variável e vou quebrá-la. Então eu posso ver o custo do item, vou arrastar isso para cá. Agora eu posso ver o custo do item aqui. Vou apenas esconder os pinos desconectados e mostrar apenas o custo do item Agora eu também quero a quantidade de moedas dos jogadores. Eu preciso de uma variável para o jogador. Eu posso ver que eu não tenho isso. Se eu voltar para o controle do player e voltar novamente, na verdade, podemos simplesmente voltar para o item da loja. Podemos simplesmente copiar e colar tudo isso que acabamos de criar na lição anterior. E eu vou criar corretamente uma variável para jogar, e isso é muito mais rápido Agora vamos voltar. Agora que começamos a jogada, vamos começar. Digamos, quantidade de moedas. Obtenha a quantidade de moedas. Agora, o que vamos perguntar é: a moeda custa? É maior? maior do que a quantidade de moedas que temos? Em seguida, você pode arrastar a partir daqui e dizer selecionar, selecionar cor. Agora, a diferença entre uma cor selecionada e uma cor selecionada. Agora, se você simplesmente arrastá-los para fora para que possamos vê-los, selecione a cor aqui e selecione aqui. A diferença não é realmente muito grande. A diferença é que, se você selecionar a cor, verá que ela escolhe automaticamente que é uma barra de ouro que você precisa conectar a ela Para selecionar, você pode escolher o que quiser. Você pode inserir uma enumeração como fizemos antes, mas você também pode inserir esta e ela dirá verdadeiro E então você pode fazer o que quiser com ele. Basicamente, você pode usar os dois. Vou usar Selecionar cor por enquanto. Selecione a cor. Vá em frente e conecte isso. O que ele vai fazer é dizer que o custo da moeda desse item é maior do que quantas moedas você tem? Se for, diz escolha a. Se essa variável de ouro for verdadeira, ela escolherá a, significa moedas Se a quantidade de moedas que custou este item aqui, se você não tiver o suficiente para comprá-lo, ele realmente selecionará A. Precisamos de uma cor vermelha para o A e precisamos uma cor verde para a carne, porque é aqui que você pode comprá-la. Agora, para a cor verde, vou copiá-la do designer por botão, porque eu já a fiz. Vou copiar a cor linear hexadecimal. Vou voltar para o controle de jogo. Cole para o, Cole aqui, clique para ver este. Vou selecionar primeiro uma cor vermelha aqui para ver como é. Algo parecido com isso. E eu posso copiar a cor linear. Basta clicar em cancelar porque não quero alterá-lo aqui. De volta ao, a cor vermelha. E agora nós o temos. Ele vai dizer se os itens custam mais do que o que você tem em moedas? Se isso for verdade, escolha a, escolhendo a cor vermelha, se você tiver moedas suficientes, ele escolherá a cor verde Ele vai conectá-lo aqui e vai definir a cor do texto e compilar Agora temos que chamar essa função, porque ainda não fizemos isso e queremos chamá-la sempre que eu clicar em reproduzir, já quero que tudo isso seja atualizado. A melhor maneira de fazer isso é criarmos os cartões de itens aqui. Nós criamos todos eles. Antes de exibi-las, quero atualizar as cores. Vou adicioná-los aqui assim. Atualize a compilação. Se você clicar em jogar, agora você pode ver que todos eles estão vermelhos porque eu não tenho moedas suficientes. No entanto, se eu mudar aqui a quantidade de moedas do jogador, digamos que agora eu tenha 60 moedas e clique em Compile Play Agora eu posso ver que, para as 60 moedas, eu realmente tenho moedas suficientes para todas elas, então elas serão verdes. Eu posso ver que esse texto não está sendo exibido corretamente. Isso ocorre porque temos que matar um inimigo antes que ele realmente apareça. Vamos realmente consertar isso. Talvez você queira uma quantidade inicial de moedas. O motivo é que só estamos executando esse código sempre que realmente matamos o inimigo. Se eu abrir a base inimiga, teremos essa quantidade de moedas. Se eu apenas copiar isso, você pode realmente copiar isso sempre que abrir o jogo. E isso vem do jogador. Se você abrir o player e em vez de aqui na base de jogadores, você pode ver que fizemos essa atualização de quantidade de moedas. Só precisamos executar este, atualizar a interface porque a quantidade de moedas está correta. E você também pode ver isso se pegar a quantidade de moedas e imprimir uma sequência e simplesmente imprimir na tela e clicar em Reproduzir. Você pode ver que diz 60 aqui. Se você viu. No canto superior esquerdo, diz 60. Na verdade, ele é exibido corretamente ou o número está correto, mas não é exibido corretamente. Vamos copiar essa interface do usuário. Só precisamos atualizar a interface do usuário e arrastar a quantidade de moedas conectadas dessa forma. Agora, sempre que clicarmos em Jogar, ele também atualizará a quantidade de moedas. Se eu clicar em Jogar, ele será exibido corretamente. Agora está tudo correto e isso exibido corretamente quando matamos o inimigo. Também adicionará a quantidade correta de moedas sempre que obtivermos mais e mais moedas. Agora podemos ver que ele não está exibindo isso corretamente porque precisamos atualizá-lo quando matamos o inimigo. Na verdade, vamos corrigir isso também. Se eu fechá-la, vou até os inimigos, abro a base inimiga. E precisamos adicioná-lo aqui sempre que o inimigo morrer. E atualizamos a quantidade de moedas. Vamos fazer isso. Depois de atualizarmos a quantidade de moedas, vamos usar o controle de jogo. E já temos o controle de reprodução aqui embaixo. Arraste-o e diga atualizar o cartão do item da loja pela cor do texto. Vá em frente e conecte-o conectado aqui. E agora deve funcionar. Agora, se você clicar em jogar e eu mato, você pode ver agora que se eu obtiver 76 ou mais, isso realmente tornará isso verde. Se eu matar esse inimigo, podemos ver agora que ele fica verde. Se eu continuar matando, você pode ver que agora isso fica verde porque agora eu tenho moedas suficientes, isso está funcionando corretamente e agora podemos seguir em frente. 73. 8.09 Verificando se o jogador tem moedas suficientes: Agora, antes que o jogador possa pressionar o botão Por, também precisamos verificar se o jogador tem moedas suficientes, caso contrário, ele pode realmente pressionar o botão Por e comprar itens sem ter moedas suficientes. Vamos tentar trabalhar com este. Se eu abrir o controle do player, mais uma vez para o controle do player, vamos realmente fazer algo também aqui na cor de atualização. O que podemos fazer aqui dentro, podemos arrastar isso. Agora vamos pegar o botão. Eu vou para a interface do usuário, abro o item da loja e clico neste botão. E vou chamá-lo de botão e torná-lo uma compilação variável Agora, se eu voltar para o controle de jogo, arrasto daqui e digo botão. E eu pego esse botão, o que você pode fazer é arrastar aqui e dizer habilitar. Agora você pode ver que algo chamado Definir está ativado. Vá em frente e selecione-o, conectado aqui. Agora você pode escolher quando um botão deve ser ativado ou não. Ou seja, se o jogador puder pressioná-lo ou não, sempre que este estiver vermelho, significa que este é verdadeiro, isso significa que o jogador não pode comprar este item, significa que ele não tem moedas suficientes. Na verdade, podemos arrastar isso e conectá-lo aqui. Na verdade, não podemos, porque isso vai ser verdade e este vai ser verdade, que significa que está ativado, e nós realmente queremos o oposto. Vou novamente arrastar e dizer selecionar para inverter. Vá em frente e selecione esse nó e conecte-o aqui. Agora, pode ser um pouco confuso, não temos moedas suficientes sempre que custo do item é maior do que a quantidade de moedas que temos Isso significa que isso será verdade sempre que for verdade. Quero definir isso para ser desativado porque não queremos comprar se não tivermos moedas suficientes. No entanto, sempre que isso for falso, significa que temos moedas suficientes aqui, quero configurá-lo para ser ativado. Quero pegar isso e dizer que o botão está ativado. Você pode ir em frente e comprar. É assim que revertemos isso, então vá em frente, compile e clique em reproduzir Agora podemos ver que o botão está desativado. Você pode ver que está um pouco desbotado. Além disso, vamos agora verificar se o jogador tem uma quantidade suficiente de moedas. Vamos fechá-lo. Vamos abrir o cartão do item. Vamos clicar nele, aqui embaixo. Vamos clicar no não clicado. Agora, sempre que clicamos nesse botão ou compramos o item, queremos verificar se o jogador tem moedas suficientes. Vamos fazer isso dentro do jogador porque já fizemos a quantidade de moedas e o cálculo das moedas dessa forma dentro do jogador. Deixe-me fazer uma função simples, vamos chamar essa. O jogador tem moedas suficientes? A coisa simples que queremos fazer aqui é verificar se o jogador tem moedas suficientes. Arrastando essa quantidade de moedas, deixe-me também aqui para a entrada, deixe-me adicionar um número inteiro e chamá-lo custo do item é a quantidade de moedas que o jogador tem é maior ou igual Temos que ter o mesmo porque pode ser igual ao custo do item, que significa que você tem moedas suficientes. É maior ou igual ao custo do item? Então, podemos simplesmente fazer uma nota de retorno aqui, se eu escrever return the return node e depois conectar isso aqui, isso cria uma variável para nós. Basicamente, este tem pontos suficientes para verificar isso Vamos inserir a postagem do item e clicar nessa função. Vou purificá-lo. Porque lembre-se, sempre que você tem uma função que só obtém informações, ela não está configurando nada, então você pode configurá-la como pura. Então fica como essa função verde aqui, porque está apenas obtendo informações. Agora, o que podemos fazer é pegar esse jogador e dizer que tem o suficiente, ou chamamos isso de “o jogador tem moedas suficientes”? Assim, ele pode arrastá-lo e dizer que tem moedas suficientes. E você pode ver que é uma função verde porque a configuramos como pura. Agora podemos adicionar o custo e depois podemos sair aqui e ver se realmente temos moedas suficientes ou não. Deixe-nos fazer isso. Vamos pegar as informações do item, podemos quebrá-las. Podemos pegar o custo do item e conectá-lo aqui. Esconda os pinos desconectados. Agora podemos arrastar a partir daqui e fazer uma ramificação e conectar essa ramificação. Agora que realmente fazemos isso, agora estamos verificando se o jogador tem moedas suficientes antes que ele possa comprar o item. 74. 8.10 Comprando o item: Agora que verificamos que o jogador tem moedas suficientes, vamos comprar o item agora. Agora, para comprar os itens, acho que quero fazer isso dentro do player. Sempre que você compra aqui e tem moedas suficientes, você compra os itens. Vamos criar um novo evento no player. Vamos criar um novo evento personalizado chamado item de compra como esse. Agora, para este item de compra, obviamente precisamos do item primeiro. Se você não quiser fazer isso agora, vamos voltar e entrar aqui, vamos pegar o player, já temos a variável player. Vamos atacar a partir daqui e dizer comprar um item e ligar para este evento que acabamos de fazer. Se é verdade que temos moedas suficientes, vamos comprar o item. Obviamente, precisamos saber de qual item estamos falando porque precisamos de algumas informações aqui. Vou apenas criar uma entrada e vamos chamá-la, ou vamos chamá-la de estrutura de informações do item. Temos esse item, vou chamá-lo compilação de itens. Agora podemos voltar ao cartão do item da loja Obviamente, o item é esse item em que estamos agora e já temos a estrutura. Eu só vou pegá-lo e conectá-lo aqui. As informações deste item serão enviadas ao jogador. A partir daqui, agora podemos fazer coisas com ele. O que queremos fazer é, obviamente, subtrair a quantidade de moedas o jogador tem. Vamos tentar fazer isso. Agora você pode fazer isso sozinho para praticar, porque acho que você pode fazer isso sozinho. Agora, se você não se lembra de como fazer isso, vamos fazer isso juntos. Assim, você pode pegar a quantidade de moedas que você tem agora e depois dizer menos para subtrair Então, temos o custo do item aqui se você arrastar a partir daqui e dizer quebrar as informações do item. Agora temos o custo do item. Podemos dizer a quantidade de pontos que você tem menos o custo disso Podemos pegar essa quantidade de moedas e ajustá-la novamente para esse novo preço ou essa nova quantidade de moedas que temos. Vamos apenas clicar aqui. Esconda os pinos não conectados. Vá em frente e torne-o mais estruturado assim. Você também pode imprimir uma string. Na verdade, não vamos imprimir uma string. Podemos simplesmente atualizar a interface do usuário instantaneamente. Vamos fazer assim aqui em cima. Eu só vou copiar isso. Atualize as moedas, quantidade I. Vou fazer o login assim. Vamos compilar Vamos ver o que acontece se eu clicar em jogar. Eu tenho 60. Se eu comprar algo por 23, ainda tenho 37. Eu compro novamente por 34, ainda tenho três. E se eu clicar aqui, você pode ver que não consigo continuar comprando. Porque lembre-se, já verificamos aqui se o jogador tem moedas suficientes ou não. Não podemos comprar o item se não tivermos moedas suficientes. Isso está funcionando muito bem. Agora, o problema agora é que quando eu compro, você pode ver que os botões não são lidos. Parece que ainda tenho moedas suficientes para esta, o que não tenho. Vamos também atualizar os botões. Se eu for até o controle do player. Vamos abrir o controle do player. E lembre-se de que aqui criamos essa função chamada atualizar item da loja pela cor do texto. Vamos chamar esse. Vamos voltar para o jogador. Vamos pegar o controlador colado aqui. Vamos chamar o cartão de item de trabalho atualizado pela cor do texto. Vamos conectá-lo aqui. Ele deve ser atualizado toda vez que compramos. Agora, se eu clicar em Jogar e comprar algo, você pode ver que eles ficam vermelhos. E eu realmente não posso comprá-los. E eles são deficientes. Se eu comprar este, todos ficam vermelhos porque não tenho pontos suficientes agora que a lógica está funcionando muito bem. 75. 8.11 Atualizando a quantidade de itens comprados: Agora é hora de atualizar quantos itens compramos. Porque lembre-se, fizemos este chamado Itens comprados. E precisamos armazenar quantos itens você comprou durante o jogo. Além disso, aqui, quando clicamos em jogar e comprar algo, isso realmente não mostra que você comprou algo porque ainda é zero por aqui. Precisamos atualizar essas informações para fazer. Não me lembro onde usamos esse. Se você quiser apenas tentar lembrar onde usou alguma coisa, você sempre pode escrever, clicar e encontrar referências. E podemos ver que diz que nenhum resultado foi encontrado. E isso é porque ele está apenas pesquisando dentro desse projeto Mas se você clicar nesse pequeno ícone, ele pesquisará em todas as plantas Clique duas vezes neste. Você pode ver que o usamos aqui dentro do cartão de itens da loja para atualizar o texto aqui de quantos itens compramos. Nós o usamos aqui para atualizar quantos itens compramos. Vamos voltar ao player e aqui sempre que comprarmos e atualizarmos o botão. Antes de atualizar o botão, na verdade vou editar o mapa. Pegue este mapa aqui, arraste-o para fora e diga Adicionar. Agora queremos adicionar mais um item ao mapa, porque agora compramos um item. O que você pode fazer é pegar isso de novo, colar, porque você não pode realmente adicionar informações no momento. O que você precisa fazer é encontrar e ter essa função. O que você está tentando fazer é encontrar o item que já está dentro dele. Se você simplesmente escrever um número aqui, se você escrever, por exemplo, um, ele vai sobrescrever as informações que você já tem aqui Digamos que fosse a coroa dourada que estava dentro daqui. Se você apenas escrever um, será um para sempre, porque toda vez que o jogador comprar, será um. Ele substituirá esse item aqui. Precisamos continuar atualizando-o com mais informações. Agora precisamos encontrar o item primeiro dentro da matriz ou dentro do mapa para encontrar o item. Lembre-se de que já temos o nome. Se eu pegar aqui agora, posso usar o nome desse item e podemos encontrar esse item dentro deste mapa. Depois de encontrarmos o item, agora sabemos quantos itens temos até agora. Esse valor aqui, o que eu quero fazer é pegar esse número mais ele com um mais um. Agora estamos adicionando um aos itens que já compramos. Então você pode conectá-lo aqui. Além disso, lembre-se de que você também precisa inserir o nome aqui. Vamos arrastá-lo daqui. Conecte-o e, novamente, faça algumas anotações espelhadas Parece bom. E eu vou colocar esse aqui desse jeito e esse aqui embaixo. Está bem? O que estamos basicamente fazendo é encontrar primeiro o item dentro desse mapa, depois saber quantos já compramos e adicionar um em cima dele e depois colocá-lo de volta no mapa. Não perdemos essa informação. Você clica em play e pressiona por alguma coisa e vê que ainda está dizendo zero. Isso ocorre porque não atualizamos a interface do usuário. A interface do usuário está dentro do item da loja, Cod, e é esse texto aqui que você precisa atualizar mais uma vez, porque essa parte aqui só é atualizada sempre que criamos o Cod e não é mais atualizada Podemos criar um evento personalizado aqui e eu vou fazer um evento personalizado, atualizar a interface de usuário dos itens comprados. O que podemos fazer aqui, basicamente, queremos definir o texto, esse texto aqui. Eu só vou controlar C, controlar V aqui embaixo. Vamos conectá-lo. Basicamente, só quero fazer a mesma coisa que fizemos aqui. Vamos apenas controlar x para recortá-lo e controlar V para colá-lo aqui embaixo. Vou apenas conectá-lo aqui. Em vez de ter esse código aqui, podemos basicamente excluir esse e adicionar este. Atualize itens, em vez disso, eu apenas os adiciono aqui, atualizo os itens I. Basicamente, a razão pela qual escrevemos isso aqui na construção do início, do jogo ou do evento é porque estamos nos certificando de que temos essas informações corretas. Sempre que abrimos o jogo e damos uma olhada nisso, essa é a razão pela qual o adicionamos lá. Porque se, por exemplo, digamos que você tenha um sistema de carregamento e salvamento no futuro e feche o jogo sempre que o abrir, ele será executado novamente e atualizará suas informações com o que você salvou. É muito importante ter isso. Ok, então temos esses itens de atualização, mas UI, precisamos executá-los do player se você voltar e precisamos executá-los depois de adicionarmos o item a este mapa. Agora, o que precisamos é de uma referência a esses widgets de cartão de itens da loja porque agora precisamos usar este Atualize os itens, coloque a interface do usuário. Mas, como você pode ver, não temos realmente uma referência a isso. Temos esse chamado cartão de itens de loja e basicamente podemos usá-lo para encontrar um item. Mas, novamente, nós realmente não temos essa informação daqui. Precisamos de uma forma de referenciar esse cartão. Agora você pode fazer isso de duas maneiras. Você pode, aqui no controlador do Player, basicamente criar eventos personalizados chamados, por exemplo, conjuntos, cartão de item de loja interagido ou o que você quiser chamá-lo Basicamente, basta adicionar o item da loja de itens, Cod. Novamente, basicamente você pode simplesmente chamá-lo daqui, usar o controlador do player Precisamos ter uma referência a ele aqui. Basicamente, você pode configurá-lo por meio do controlador do player. E do jogador, podemos usar essa variável aqui para realmente atualizar esta carta em vez de fazer dessa maneira. Por enquanto, quero experimentar o outro método. O outro método, basicamente, é que você pode simplesmente voltar ao ou ao jogador aqui para comprar o item. Vamos apenas adicionar uma nova variável. Vamos chamá-lo de shop it Cod. Sempre podemos mudar dessa forma se, no futuro, descobrirmos que poderíamos transformá-la em algo melhor. Mas, por enquanto, vamos pesquisar o item Cod. Vá em frente e selecione-o, compile novamente no item da loja Vamos ver aqui no item de compra. Sempre que compramos algo, quero definir a referência para eu e dizer eu. Basicamente, estamos definindo esse cordão de item da loja como esse cartão em que estamos agora. Isso é o que significa “eu”. Agora, essas informações, nós as temos sempre que compramos um item, sempre que adicionamos o item aos itens, exceto no mapa, agora podemos chamar os itens de atualização, mas eu arrasto daqui e digo itens de atualização. Mas eu vou em frente e me conecto, é assim de novo. Você pode clicar duas vezes para criar um nó de rota traseira. Sempre que isso for feito, isso agora deve atualizar a interface do usuário. Em seguida, insira novamente esta atualização do item da loja Cod by text color, salve tudo. E agora vamos jogar e ver o que acontece se eu comprar uma das tochas Veja, eu tenho um. Se eu comprar um de novo, tenho dois. Agora está calculando corretamente. Agora, se eu me der muito mais dinheiro, então se eu voltar para o jogador e dentro daqui a quantidade de moedas, eu simplesmente coloco em algo como 1.000 ou 10.000 100.000 ou qualquer outra coisa. Aqui está. Agora você pode ver se eu continuo comprando, só quero ver se funciona e está funcionando corretamente. Você pode continuar comprando. E você pode ver que a interface do usuário continua a mesma. A interface do usuário não está alterando a posição do texto e assim por diante. Tudo está funcionando bem e o dinheiro calculado Então, agora isso está funcionando totalmente. 76. 8.12 Criando pontos de spawn de itens: Vamos agora adicionar os pontos de geração dos itens. O que eu quero fazer é que, sempre que eu compro algo, quero gerar esses itens no mundo E isso é basicamente a mesma ideia do licor de biscoito. É a mesma ideia em que você compra algo e aparece aqui na tela, acho que é um pouco mais interessante. Então, vamos fazer, ou fazer alguns pontos de pintura aqui dentro. Lembre-se de que já marcamos um ponto para o inimigo que está aqui. Vamos usar o mesmo método. Então, temos o inimigo e temos a base de pontos de desova. Esta é a turma principal, então vou clicar com o botão direito do mouse e criar uma turma secundária do Looprint Podemos chamar isso de BP it, Spawn Point. Agora, esse é o ponto principal. Qual item vamos gerar? Basicamente, podemos colocá-lo no mundo e podemos simplesmente definir Y20, ele está na frente e eu vou configurá-lo para um para que fique na frente dos ladrilhos. Podemos definir algo aqui, salvar tudo. E vou segurar a tecla Alt e arrastar para copiá-la. Agora você pode ver que temos dois pontos de desova, mas como podemos escolher se é a coroa que deve aparecer aqui ou se são outros itens que devem aparecer Podemos fazer isso expondo uma variável a eles. O que podemos fazer é voltar para a base do ponto de desova dentro daqui O que podemos fazer é criar uma nova variável. Podemos chamá-lo de nome ou também podemos simplesmente chamá-lo de nome real do ponto de desova Acho que é um pouco mais descritivo até agora. Podemos transformá-lo em uma string, salve. Lembre-se de clicar em Instance Editable e Expose on Já usamos isso quando adicionamos as informações aos cartões de itens. Quando você faz isso e compila, você pode ver aqui dentro do mundo, você tem esse pino aqui, o nome do ponto de geração Essa é a mesma variável que esta porque você a tornou editável por instância e exposta no editável por instância e exposta no spawn. Aparece aqui em cima. O que podemos fazer com este é clicar no primeiro, por exemplo, podemos chamá-lo, vamos ver quais itens temos. Nós temos o P. Eu só vou usar a pena clara. O primeiro deve ser a luz. Escreva o nome com precisão. Lembre-se de que esse nome precisa ser igual ao da tabela de dados. Seja qual for o nome que você tem aqui, ele precisa ser o mesmo que aqui. O segundo é a tocha. Agora temos os dois pontos de desova. Agora sabemos quais itens devem aparecer onde. Agora, estamos apenas perdendo a lógica, e faremos isso nas próximas aulas. Mas agora temos pelo menos os pontos de desova com os quais trabalhar. Vamos passar para a próxima lição. 77. 8.13 Gerando o item comprado: Tudo bem, agora vamos em frente e geramos o item. Vamos tentar trabalhar de trás para frente a partir desta. Agora, sempre que eu gerar itens, gostaria de retroceder, porque faz mais sentido saber quando ou onde precisamos adicionar nossos eventos e funções para a Lembre-se de que eu uso o Player Controller para gerar coisas no mundo. Então, se eu entrar aqui, já criamos esse ator de spawn aqui Ator Spawn. Vamos ficar consistentes e fazer isso aqui dentro. Vou criar diretamente um novo evento personalizado. Vamos chamar isso de item de spawn. Ok, para este, novamente, precisamos usar um ator de desova da classe e selecionar o item que queremos gerar Realmente depende de qual. Agora, isso está recebendo um erro. Preciso desativar isso. Dependendo do item que compramos, esse é o item que queremos gerar Na verdade, não podemos definir um valor estático, só precisamos arrastá-lo até aqui. Arraste isso de volta para dentro, eu vou chamar isso de um item. Quanto à localização do item, eu realmente não preciso usar uma transformação. Então, o que eu vou fazer é dizer fazer. Sempre que você diz make transform, isso é basicamente porque eu quero ver os valores de localização, rotação e escala. É por isso que usamos make. Agora você pode arrastar esse local para o evento. Então, ele cria uma nota especial para ele. E vou chamá-la de local de desova porque não estou realmente interessado na rotação e na escala, ela permanecerá a mesma Só estou interessado no local em que quero gerar o item Agora, esse item de spawn, onde faz mais sentido jogar esse evento ou convocá-lo O lugar seria sempre que comprássemos um item, calculamos o preço no player. Sempre que compramos o item, nós o adicionamos à variável ou ao mapa aqui e atualizamos os botões. Depois disso, eu posso gerá-lo no mundo. Basicamente, ele é gerado no controle do Player, então eu preciso do Player Controller novamente Ou você pode arrastar a partir daqui, se desejar. E você pode dizer item de desova, fornecimento e seletivo. Agora você precisa especificar de qual item está falando. Agora já temos essa aula daqui. Eu só vou quebrar essa mais uma vez. Faça a aula, conecte-a aqui e esconda os pinos desconectados Vou chegar mais perto aqui, clicar duas vezes para criar um nó. Agora, para o local do spawn, precisamos ser mais específicos aqui Como precisamos ver a localização desse ator aqui, o ponto de desova dos itens Você sempre pode voltar ao modo de jogo e dar uma olhada em como fazíamos isso antes. Se voltarmos ao início do jogo, usaremos este. Consiga o ator da turma. E lembre-se dessa função, obter ator da classe, obtém tudo o que já foi gerado no mundo quando você clica em play Porque se você disser “escolha um ator de classe e você tem isso dentro do nível agora, vai te dar uma era. Lembre-se de que essa função só obtém o ator que já foi gerado no mundo Nós já os geramos. Então, podemos realmente usá-lo, obter o ator da classe. Vamos fazer isso aqui porque, na verdade, esse não é o método que precisamos para usar get actor of class. Podemos pegar este, basicamente, dizemos ponto de desova e podemos selecionar o ponto de desova do item que podemos arrastar daqui e dizer obter a localização do ator Agora estamos obtendo a localização do ator, que é essa localização aqui. E podemos conectá-lo. Agora vamos ver o que acontece. Podemos simplesmente clicar em jogar e eu basicamente tento comprar alguma coisa. Nada está surgindo e, na verdade, é o correto. Só estou me perguntando por que não está desovando. Vamos ver se realmente adicionamos os itens. Esse pode ser o problema agora. Se abrirmos, vamos até a janela de exibição, vejo que não temos nenhum item Na verdade, vou fazer isso agora. Para todos os itens que criamos anteriormente. Por exemplo, o Crown of Evil, precisamos selecionar o sprite de origem Vá em frente e selecione-o aqui, para que apareça aqui, compile Vá para o próximo, Grand wizard, chapéus, clique nos componentes de renderização selecionados aqui e compile a Essa é a base do item, então não precisamos realmente adicionar nada aqui. Indo para a Coroa do Rei. E podemos realmente fazer isso daqui, em vez de clicar aqui. A próxima é a King's Crown. Tudo bem, esse foi o último. Agora eu adicionei todos eles. E vou clicar em Compilar para todos eles para garantir que tudo esteja funcionando conforme o esperado Ok, feche tudo, salve tudo. E vamos clicar novamente em Play by the Light Feather. Agora você pode ver que a pena clara está desovando. E se eu comprar a tocha, a tocha também está surgindo. Ambos estão respondendo. Eles estão desovando no mesmo lugar. Mas sabemos que esse ponto problemático está funcionando. Agora, nas próximas três lições, mostrarei três métodos sobre como podemos gerá-los de forma eficiente O que eu quero fazer, basicamente, é que, a partir deste ponto, queremos gerar todos os itens, mas, por enquanto, está tudo bem Agora, se você quiser reduzir o tamanho do item que está surgindo, agora aqui na base do item você pode basicamente fazer isso nesta escala, para este item, você pode clicar no cadeado Ele altera os três valores de uma só vez. E se eu escrever 0,5, clico em jogar e compro alguma coisa. Você pode ver que o item está menor agora. Agora, para o Em, acho que vou usar a escala de 0,25 porque os ícones são muito grandes Se eu clicar em jogar agora e eu gerar algo, você pode ver que esse é o tamanho que eu gosto, o tamanho deste Você sempre pode ter um Bitloga, mas teremos muitos itens Eu acho que esse é um bom tamanho para ele. Ok, vamos salvar tudo e passar para a próxima. 78. 8.14 Lógica de criação: Como, nas próximas três lições, mostrarei como podemos usar esses métodos de desova. Agora, o primeiro vai ser fácil e depois vamos para algo intermediário e, em seguida, algo avançado. Espero que você fique comigo em todos eles. Vamos começar com este, que é o método mais fácil. Agora, para a desova, vou fazer isso dentro do modo de jogo, porque é basicamente aqui que chamamos os pontos de desova, onde os definimos Deixe-me abrir o modo de jogo. Já definimos o ponto de pintura do inimigo. Agora é hora desse. Em vez de fazer isso aqui, vamos criar uma função para isso. Porque vai ser um pouco maior do que apenas fazer isso aqui. Deixe-me fazer uma função a partir daqui. Deixe-me chamá-lo de itens fixos, pontos. Normalmente tenho um na frente deles para funcionar, e vou fazer isso aqui para me manter consistente com este também. Compile e salve agora para este. O que você pode fazer agora, antes de começarmos , só para não esquecermos, quero chamar os Spawtpoints aqui, arrastar a função até aqui, ir em frente e E agora funciona, ok? Então, agora temos que fazer algo dentro dessa função. O que eu quero fazer primeiro é conseguir todos os pontos do St. Então, para fazer isso, digamos que pegue todos os atores da classe. Lembre-se dessa função, você só pode usá-la para coisas que já estão surgindo, saindo daqui E já temos pontos de St. aqui dentro. Agora, realisticamente, teremos um ponto St. para cada item. Então, teremos muito mais. Opa, teremos muito mais pontos na Espanha como este aqui Mas, por enquanto, vamos excluir todos eles. E eu vou ficar com dois. Sempre que esse método funcionar, vou copiar tudo isso. E serão cerca de 5 segundos de trabalho por enquanto. Vamos ter esses dois e trabalhar com eles. Digamos que pegue todos os atores da turma e procuremos o item spa point, este. E deve ter esses dois. Se você quiser ver o que realmente acontece, você sempre pode imprimir uma sequência de caracteres que você pode arrastar daqui e dizer o comprimento, para que você possa ver. Quantos pontos de desova recebemos? Deveria dizer dois. Se você clicar em jogar, diz dois aqui em cima. Se você pode ver, sabemos agora que ele recebe os dois pontos S. Incrível. O que podemos fazer agora é arrastar a partir daqui e dizer quatro cada. Agora podemos fazer algo com cada um desses pontos de spa. O que queremos fazer é definir basicamente a localização. Porque precisamos da localização dentro do player. Toda vez que geramos um item, precisamos da localização do ponto de desova do próximo item que queremos gerar O que eu quero fazer é não querer gerar todos os itens aqui em cima uns dos outros O que eu quero fazer aqui é gerar itens em uma linha. Eu quero gerar o primeiro item aqui. Eu quero gerar o segundo item aqui. Terceiro item aqui, quarto, quinto, seis e assim por diante. Agora, você pode fazer isso assim, não é um problema. Mas imagine que se você tem 200 itens para o primeiro item, você tem 200 para o segundo. Todo o seu nível receberá spam de atores. Não acho que seja um bom método, então vou excluir todos eles. Mas, basicamente, é isso que estamos tentando fazer. Estamos tentando gerar todos os itens em uma linha aqui. Vamos tentar fazer isso. Vamos voltar ao modo de jogo agora, o que podemos fazer aqui dentro realmente depende de qual item precisamos gerar Lembre-se de que, para cada ponto de desova, criamos a variável de nome do ponto de Espanha que expusemos e escrevemos pena clara. Vamos arrastar a partir desta e pesquisar o nome do ponto de desova. Vá em frente e pegue essa variável. Agora arraste a partir daqui e diga switch on string. Agora, isso é como antes, onde usamos a opção na enumeração, a opção na string, você também pode fazer isso Clique no sinal de adição para adicionar pinos. O primeiro, o primeiro item que temos é a tocha, ou na verdade a pena clara. Então temos a tocha, temos essas duas compilações Agora, o que podemos fazer aqui, se for a pena clara, queremos usar esse ponto pontual É uma tocha. Queremos usar esse ponto pontual. Vamos começar com uma pena clara. O que queremos fazer é primeiro criar uma matriz. Porque não podemos realmente fazer isso sem uma matriz para armazenar os locais que encontramos. Deixe-me transformar isso em um vetor. Deixe-me chamar isso de Light Father Spawn Points. Vamos tirar essa daqui. Agora precisamos transformá-lo em uma matriz porque precisaremos armazenar vários locais, que é essa linha aqui de itens que precisamos gerar Em vez de um vetor, você pode clicar com o botão direito do mouse. Você o transforma em um vetor ou, novamente, sempre pode clicar nele e alterá-lo aqui, se desejar. Agora temos essa matriz. E o que precisamos usar com isso é a função add. Então, precisamos adicionar um local e precisamos adicioná-lo dentro daqui. Ok, agora, depende de quais locais precisamos adicionar. Como fazemos isso? Como faço para obter locais diferentes simplesmente a partir de um ponto de desova Porque eu não vou adicionar mais pontos de desova. Esse é o único ponto de desova que vou adicionar para a pena clara, mas quero muitos itens aqui que eu preciso gerar O que podemos fazer é deixar eu fazer isso e você pode realmente ver como é fácil. Em primeiro lugar, obviamente precisamos da localização deste ponto na Espanha. Primeiro, vou arrastar isso e dizer no local. Agora eu tenho a localização desse ponto de desova. O que podemos fazer com este é que eu posso fazer um loop de quatro voltas. Podemos selecionar esses quatro loops aqui. Agora, depende de quantos itens você deseja gerar primeiro Vamos começar com cinco itens. Vamos escrever quatro aqui. O motivo é que o primeiro índice em um loop é 00, vem como 101234 Ou seja, cinco itens, 0-4 O que precisamos fazer é obter a localização de Atos Agora você tem que pensar que vai gerar os itens dessa forma Você tem que prestar atenção em qual eixo você está. Este é o eixo x, a seta vermelha é o eixo X. Se você clicar nele e arrastar o item, você pode basicamente ver aqui embaixo no local, no painel de detalhes, que você está indo na direção positiva do eixo x. Isso é basicamente o que estamos tentando fazer. Não quero afetar o Z e também não quero afetar o Y. Eu só quero afetar o X. É por isso que podemos pegar isso e dizer vetor de quebra, porque queremos afetar apenas o eixo x. Também para este. Como não consigo fazer login aqui, vou arrastar a partir disso e dizer make vector. Agora eu também posso ver o x, y e z e podemos basicamente arrastar essas informações até aqui. Agora, para o Y, para o z, eu não quero mudar nada. Eu não quero afetá-los, eu só quero afetar o X. Agora, o que posso fazer é dizer que o X perdeu talvez dez unidades Então, basicamente, o que estamos fazendo é pegar esse local e adicionar dez unidades. Em vez disso, o próximo item estará aqui. Vamos voltar. Estamos dizendo dez, e então estamos conectando novamente Estamos tomando esse local, ele já está. Neste ponto, estamos adicionando dez ao x e, em seguida, conectando-o novamente e esta é nossa nova localização Obviamente, não podemos simplesmente conectar dez e manter dez fora daqui, porque isso vai ser o mesmo, basicamente adicionaremos itens aqui em vez disso, todos eles. O que precisamos fazer é usar esse índice novamente. O índice será zero primeiro, depois 123. O que podemos fazer é basicamente multiplicar esse número aqui Em vez de escrever apenas dez, podemos arrastá-lo, multiplicá-lo e selecioná-lo O que podemos dizer aqui é que podemos dizer dez multiplicado pelo índice aqui E isso deve funcionar muito bem. O que estamos dizendo é dez multiplicado por zero primeiro, que será exatamente esse ponto de desova Estamos dizendo dez multiplicado por um, estamos dizendo x mais dez Então, o próximo item estaria aqui. Agora, novamente, ele vai para o índice de dois. Vai dizer dez vezes dois. Isso é 20. Vai dizer x mais 20. O próximo item estará aqui e assim por diante. Ele simplesmente fará um loop e adicionará locais como este aqui. Vamos deletar tudo isso. E agora podemos conectá-lo. Na verdade, podemos experimentá-lo e ver se funciona. Se eu apenas economizar aqui. E podemos tentar gerá-lo no jogador, no item de desova Obviamente, precisamos excluir isso agora que criamos anteriormente e precisamos adicionar os locais do modo de jogo. Eu realmente não tenho o modo de jogo aqui, vamos apenas criar uma referência rápida para ele. Se eu disser para obter o modo de jogo, lembre-se de que isso está no Begin Play. Vamos pegar o modo de jogo. Obtenha a referência do modo de jogo porque lembre-se de que já criamos a interface de projeto Podemos clicar com o botão direito do mouse e promover isso para uma variável chamada modo de jogo como essa. Eu não o conectei. Deixe-me reorganizar isso agora. Podemos usar o modo de jogo. Eu só vou aproximar isso. Podemos pegar os pontos de desova do voo, podemos obtê-los aqui. Também podemos dizer obter porque precisamos obter o ponto da Espanha. Obtenha uma cópia. Agora, isso realmente depende qual ponto de desova você precisa obter, porque depende dos itens que você comprou Na verdade, o que eu preciso fazer aqui é dizer “encontre”. Porque ele encontrará o item que você comprou. Corresponde ao item, o ponto de rotação aqui. Agora encontre o item que você comprou. E isso realmente depende de quantos itens você comprou. Agora, já que o item comprado sempre estará acima, porque estamos adiantando ou adicionando um aqui Precisamos pegar isso e dizer menos um, porque lembre-se de que começamos no índice zero Não começamos no índice um. Quando você compra um item, precisamos menos isso por um e depois conectá-lo, porque o primeiro item aparecerá no índice zero, sempre precisamos dizer menos uma compilação e Clique em Jogar, tente comprar apenas penas leves. Agora você pode ver que está funcionando. Na verdade, estamos surgindo em uma linha e ela não vai mais aparecer Porque você pode ver que ela aparece aqui. Isso porque definimos apenas como 0-4. Agora você sempre pode escrever 99 e isso gerará 100 itens Agora ele vai para a direita 100 vezes antes de parar. Agora você pode ver que isso está funcionando muito bem. Agora, se você quiser fazer isso com todos os outros itens, obviamente precisa pegar tudo isso. Você tem que copiar e colar. E você tem que fazer isso aqui desse jeito antes. Sempre que a primeira for concluída aqui, você também precisará fazer isso com a tocha. Na verdade, também precisamos copiar este. E precisamos fazer isso também. Você pode ver aqui, isso é muita cópia e colagem. Você pode fazer isso muito melhor. Porque lembre-se de que temos, digamos que temos 50 itens no jogo. Você precisa copiar isso 50 vezes para todos os itens. Você pode ver que isso não é realmente uma boa prática de programação. Eu nunca faria isso no meu jogo. Eu só vou deletar isso. Esse foi o primeiro. Esse é o método mais fácil em que podemos fazer isso. Eu tenho um método que é um pouco mais quente. Vamos continuar na próxima lição. 79. 8.15 Lógica de criação - intermediária: Tudo bem, então agora estamos de volta. E o que eu quero fazer agora, antes de mudarmos todo esse método, quero melhorá-lo um pouco. Porque vamos usar esse método aprimorado. Não vamos excluir todas as coisas que estamos fazendo agora. Vamos continuar com o que temos atualmente. Agora, eu preciso mudar isso mais tarde, mas por enquanto vamos manter isso e manter tudo isso. Mas o que eu quero fazer agora é clicar em Jogar e comprar itens. Eu também, sempre que atingir um certo ponto, quero passar na próxima fila. Ele não compra em apenas uma linha, mas também compra na segunda linha Agora eu posso ver que esse bug está funcionando porque nós o definimos apenas como quatro no índice. Mas, como você pode ver, se eu continuar comprando nessa fila, pode demorar muito. O que eu quero fazer também é ir automaticamente para a próxima linha e comprar ou gerar itens lá Vamos adicionar um pouco de lógica a isso primeiro, vamos escrever cinco ou quatro aqui. Assim como antes, preciso saber quando esse loop termina. Vamos clicar com o botão direito do mouse neste. Podemos promovê-lo para uma variável local. A diferença entre uma variável e uma variável local é uma variável local está dentro dessa função em que você está agora. Estamos dentro dessa função de pontos de geração de itens definidos. Se eu criar um ponto local da Espanha e voltar ao gráfico de eventos, não conseguirei ver a variável aqui porque ela só existe dentro dessa função. Basicamente, precisávamos fazer alguma lógica aqui dentro, mas na verdade não precisamos que ela esteja aqui. Só estamos usando isso para que quando o loop estiver concluído ou não, possamos clicar com o botão direito do mouse aqui, promovido a uma variável local. Eu costumo chamá-los de locais para começar, vamos chamar isso de um loop, último índice. Como esse é o último índice do loop, também precisamos criar outra variável local. Vou alterá-lo para um número inteiro. Novamente, não é uma situação normal e errônea. O segundo, eu quero apenas chamá-lo de quantidade local de linhas. Preciso saber em quantas linhas eu preciso que os itens estejam. Preciso dele em uma linha ou em duas linhas, três linhas e assim por diante. Por enquanto, vamos apenas adicionar três linhas. Se eu compilar, clique na variável e aqui no valor padrão, apenas três Agora queremos três linhas. O que eu quero fazer aqui é seguir o loop local. Último índice, quero dizer, isso é igual ao índice agora aqui? Porque esse índice aqui está contando para cima. E você pode ver que, se você imprimir uma string, sempre poderá imprimir uma string se houver algo que você não entenda ou se houver algo que você queira. Clarity four, você pode simplesmente arrastá-lo até aqui e clicar em play. Agora você pode ver que ele imprime o número. E se eu ficar mais longo aqui para que possamos ver o que está acontecendo e fazer com que seja lido. Clique em Jogar. Você pode ver isso no número 01234 Ele conta para cima se for igual a esse índice de perda do loop local, que é esse Se apenas compilarmos, você pode ver que está definido como quatro agora. Se for igual a isso, sabemos que esse é o último loop pelo qual ele passou Basta conectar este novamente. Se isso for verdade, queremos pegar a quantidade de linhas com a qual queremos compará-la. Quantas vezes esse loop foi executado? Digamos que você precise de três linhas aqui. Você precisa executar o loop três vezes, porque na primeira vez que ele faz um loop e um loop nessa linha , ele precisa fazer um loop aqui e um loop aqui Se tivermos escrito que a quantidade de rosa é três, ela precisa repetir três vezes. Vou criar uma nova variável novamente. Vamos chamar isso de um contador de loop local. Vamos pegar esse contador de loop local e, digamos, loss plus, porque precisamos incrementá-lo um sempre que o loop terminar Esse loop aqui agora está terminado. Se isso for verdade, precisamos adicionar um ao contador de loop local. Precisamos perguntar: esse contador de circuitos local é menor que a quantidade de rosa? Se for menor, agora é menor porque a quantidade de rosa é três e esta é apenas uma. Volte e repita novamente. Se esse contador de loop agora for três, ele não fará um loop novamente porque também é três. E vamos parar o código. Basta sair e conectar isso aqui. Agora, se for menor que a quantidade de linhas, precisamos executar o loop novamente. Vamos considerar isso verdadeiro aqui e vamos voltar ao loop. Vamos pegar esse pino de execução aqui. Vou clicar duas vezes para fazer uma anotação da rota traseira. Então, eu posso realmente ver isso assim. Agora vamos voltar e repetir isso mais uma vez. Agora, se você clicar em jogar e comprar. Você pode ver que nada está acontecendo. Por que nada está acontecendo aqui? Mas você pode realmente ver que algo está acontecendo. Porque se eu comprar cinco como aqui, e me lembrar de definir o último índice para quatro, o que significa que posso gerar cinco itens até o sexto Não vai sair de cinco em dez. Não está desaparecendo se F por 15, mas se eu comprar 16, você pode ver que ele se esgota. O que está acontecendo agora é que você está gerando os 15 itens um em cima do outro, você não está na próxima O motivo é que lembre-se de que você precisa afetar o valor z porque a linha é basicamente o valor Z aqui, não afetamos o valor Z. Você precisa fazer algo com esse valor z. O que precisamos fazer é ver em qual direção queremos ir. Agora, se eu clicar e arrastar isso para baixo, preste atenção ao valor z aqui no painel de detalhes. Se eu pressionar isso para baixo, ele vai para o menos do z aqui O que eu posso fazer é pegar o valor z. Eu posso dizer menos. Só precisamos fazer isso como antes. Na verdade, se eu puder pegar isso aqui e dizer multiplicado como antes, vou mover isso e, na verdade, vou excluí-lo, porque realmente não precisamos desse Sempre podemos copiar e colar este aqui se precisarmos. Novamente, precisamos multiplicá-lo exatamente como antes. Digamos que por dez. E não é realmente o índice porque não queremos multiplicá-lo no mesmo loop Como no primeiro loop, o valor z é o mesmo em todos os sentidos. No segundo loop, o valor z é o mesmo em todos os sentidos. Isso não vai mudar todos os índices aqui. Em vez de fazer isso, precisamos criar outra variável local. Vamos chamar isso de multiplicador local do eixo z. Agora, para o valor padrão, ele permanecerá zero porque não queremos multiplicá-lo por nada O primeiro loop, então o primeiro loop, está tudo correto. Vamos conectá-lo aqui. Tudo está conectado. Agora, diz que algo está errado. O valor atual de um número válido e válido. Não sei por que está dizendo isso. Se você clicar em Arquivo e atualizar todas as notas, não sei por que está incomodando Basta arrastar e dizer multiplicar novamente. Vou arrastá-lo até aqui em vez de dizer dez Deus, conectá-lo novamente e compilar. E agora está funcionando. Não sei, era apenas um bug aleatório. Agora temos isso conectado. Basicamente, o que precisamos fazer é aumentar esse multiplicador local do eixo z. Porque para o primeiro loop, queremos que o z seja o mesmo em todos os sentidos. Para o segundo loop, queremos que o z seja sempre o mesmo, e assim por diante. A cada loop, o z muda. Nós podemos fazer isso aqui. Vamos usar o multiplicador z local quando soubermos que vamos fazer um loop novamente Quando isso for verdade, vamos apenas aumentar isso mais um conectado em mais um conectado e voltar ao loop assim. Agora deve funcionar se eu compilar e clicar em reproduzir. E se eu comprar a pena clara cinco vezes seis vezes, ela deve estar aqui, o que é correto E você pode ver que tudo está funcionando corretamente. Agora você pode ver como é ótimo gerarmos todos esses itens a partir de um único ponto na Espanha Agora você não precisa enviar spam para seu mapa com muitos pontos da Espanha. Isso é muito otimizado porque só é executado sempre que você inicia o jogo. Porque ele armazenará todos esses pontos da Espanha em uma matriz que você pode usar posteriormente para realmente gerar os itens. Vamos salvar tudo. Foi isso por enquanto e vamos passar para a próxima e torná-la um pouco mais avançada. Espero que você ainda esteja comigo, mas o que simplesmente vamos fazer é nos livrar dessa parte aqui. E eu vou te mostrar como podemos tornar isso um pouco mais avançado. Vamos clicar em Arquivo, Salvar tudo e passar para o próximo. 80. 8.16 Lógica de criação - avançada: No momento, vamos melhorar o código que escrevemos aqui. Então essa é a última parte que podemos fazer. Em vez de fazer tudo isso, deixe-me deletar essa parte por enquanto e também essa. Para obter esse ponto de itens, vamos clicar com o botão direito aqui e promovê-lo para uma variável local. Vamos chamar isso de um item local, pontos de desova Agora também temos esses pontos de desova. Antes de fazermos tudo isso, vamos garantir que não seja zero. Estamos apenas nos certificando de que realmente temos alguns pontos de desova e que o mapa realmente contém pontos de desova Então arraste a partir daqui e dizemos comprimento, garantimos que esse comprimento seja maior que zero e então podemos fazer uma ramificação. Nossa, estamos nos certificando de que realmente temos alguns pontos de desova Antes de fazermos toda essa lógica, do contrário, não fará nenhum sentido. Vamos afastar isso por enquanto e conectá-lo. Agora, quando você dá uma olhada neste, você tem que pensar em como você pode torná-lo menor do que antes? Em vez de pegar essa cópia do código e depois colar aqui, depois conectar e continuar Como você pode encurtar esse método aqui para não precisar copiar colar o que é diferente desse código para esse código que você precisa alterar Agora, a primeira coisa que me vem à mente é dar uma olhada nessa matriz porque primeiro você precisa adicionar os locais dos grandes pontos de desova das penas Então, vamos fazer um novo. Basta clicar nesse controle D para duplicar. O segundo são os pontos de desova da tocha, acredito que o segundo é a Sim, é. O segundo é a tocha. Na verdade, precisamos da tocha aqui embaixo onde você precisa adicionar os pontos de desova e não a pena clara Essa é a única diferença. Agora, para encurtar isso novamente, lembre-se de usar o nó de seleção, um nó muito importante e poderoso que você pode arrastar deste e dizer selecionar Agora você pode selecionar a pena ou selecionar a tocha, dependendo do que você conecta Agora, como sabemos qual selecionar onde está? Novamente, onde você pode usar a enumeração. Se eu voltar aos itens que posso escrever, clique em Criar uma nova enumeração do blueprint E vamos chamar isso de itens. Vamos abrir esse. Vamos apenas adicionar alguns itens. Agora vou tentar algo. O primeiro item é pena clara. O segundo é o Torch. Sempre podemos tentar ver se isso funciona. Se não funcionar, realmente não importa, então aprendemos algo com isso. Se eu voltar agora, tenho essa enumeração Na verdade, adicionarei essa enumeração a este ponto da Espanha porque, novamente, assim como o nome, precisamos definir a definir a Vamos abrir o ponto problemático dos itens, porque anteriormente adicionamos essa variável de item ou essa variável de nome de ponto da Espanha a essa base de pontos. aqui. Mas realmente não faz sentido adicionar uma enumeração de itens à base de pontos porque o inimigo realmente não precisa Por que você o adicionaria dentro da base de pontos? Porque lembre-se de que o ponto principal é o filho deste. Não quero adicionar variáveis desnecessárias onde você realmente não precisa delas em todos os outros atores. Só precisamos deles dentro daqui. Vamos adicioná-lo aqui dentro. Em vez disso, vamos adicionar uma variável, chamá-la de item. Deixe-me pesquisar itens. Itens. É assim que a chamamos. Vá e selecione-o. Compilar. Vamos salvar tudo de novo. Exposta, Instância, Editável. Exponha ao desovar, compile. Agora, se eu clicar nele, posso mudar o item para pena clara E no próximo eu posso mudá-lo para Torch. Agora temos essa informação. Agora, se eu voltar às minhas plantas, abra meu modo de jogo O que podemos fazer aqui para obter essas informações. Lembre-se de que já temos essas informações aqui. Então, eu posso pegar meu item local, pontos de geração, posso dizer que recebe E eu vou pegar o primeiro, depois vou dizer item e depois vou encontrar minha enumeração Agora vá em frente e conecte isso aqui. Agora você pode conectá-los novamente. Agora pode ver, dependendo de qual é esse valor, ele selecionará essas matrizes Se for a pena clara que você selecionou aqui ao expor uma desova, ela selecionará a matriz de penas claras Eu posso ver que vai funcionar muito bem. Também aqui embaixo para obter a localização do ator, é necessário que um ator , copie , cole e cole aqui. Então, isso também funcionará bem depois de adicionar os pontos de desova do primeiro aqui, do primeiro necessário O segundo quando chega ao segundo aqui. Agora, lembre-se de que perguntamos: o contador de loop local é maior do que a quantidade de linhas que você deseja ter? Menor, maior se for menor. Se isso for verdade, vamos seguir em frente e repetir novamente. No entanto, se não for menor, significa que precisamos interromper o loop porque atingimos a quantidade máxima de linhas para esta, precisamos ir para a próxima. O que podemos fazer é pegar isso e dizer índice. Como sabemos que precisamos remover o índice zero porque estamos basicamente usando o primeiro índice para, basicamente geramos os itens daqui Remova o primeiro índice que é o índice zero Antes de voltarmos para o próximo ponto de desova, precisamos ter certeza de que ele não está vazio Porque o que acontece se você atingir o último ponto de desova? Não queremos continuar circulando. Temos que arrastar até aqui e dizer que não está vazio. Como queremos fazer um loop sempre que não estiver vazio, vamos fazer uma ramificação, conectá-la. Se não estiver vazio, queremos repetir novamente. Agora lembre-se de que precisamos redefinir o valor Z, porque novamente estamos em uma nova linha. Precisamos redefinir todas as configurações do valor Z. Eu vou defini-lo como zero. E também para o contador de loops local, porque agora estamos iniciando um novo contador de loops, vou configurá-lo para 20 também. Deixe-me ver se há algo mais que precisamos mudar. Agora, para o índice de loop local, na verdade, permanece o mesmo porque temos a mesma quantidade de itens por linha. Nós realmente não precisamos mudar nada. Vamos compilar e salvar tudo. Agora, para este, basicamente vamos conectá-lo novamente ao loop desta forma. Novamente, clique duas vezes nele para que possamos ver o que estamos fazendo agora. Vamos ver se está realmente funcionando. Agora, antes de clicarmos em play e tentarmos fazer isso, você pode ver que eles estão surgindo um em cima do outro Não acho que seja um erro aqui, porque lembre-se de que no player você também escolhe como realmente chama isso. Só tínhamos o ponto de desova de penas claras de onde saímos. Você. Na verdade, também preciso tornar isso um pouco mais dinâmico. Agora, novamente, lembre-se de que você precisa obter a localização aqui, a matriz, dependendo do item para fazer esse ato. Porque aqui você tem uma string e o que você está usando dentro do modo de jogo é uma enumeração Você realmente não pode usá-los juntos. Você também não pode conectar uma string a uma enumeração. Se o trouxemos aqui, temos que convertê-lo de alguma forma. Vamos criar uma nova função aqui. Vamos chamar isso de “Spawn Points”. Isso é apenas obter informações. Lembre-se de configurá-la como pura, para que fique como uma função verde. Só estamos recebendo informações aqui. Agora, para este, o que poderíamos fazer, por exemplo, poderíamos pesquisar itens. Poderíamos usar essa enumeração como antes, e podemos dizer ativar E podemos basicamente atribuir os pontos de desova dependendo do que estamos falando, qual item selecionamos O problema com isso é que, se precisarmos usar este, ganhe pontos. Se eu compilar e voltar para o jogador, pegar o modo de jogo e dizer que ligamos, ele ganha pontos de spa Ganhe pontos de spa. Eu tentei usar esse. Se eu tentar conectar isso aqui, você pode ver que diz que a string não é compatível com a enumeração de itens Agora podemos adicionar a enumeração dos itens dentro da estrutura Eu realmente não quero fazer isso, mas você pode fazer isso se quiser. Esse também é um método que pode funcionar. Mas o que eu quero fazer, em vez de transformar isso em uma enumeração, vamos transformá-lo em Em vez disso, selecione uma string e vamos chamá-la de nome do item. Vamos deletar esse. Então, podemos dizer switch on String. Vamos adicioná-los. Clicando manualmente no sinal de adição. O primeiro item é a pena clara. O segundo item é o marrom dourado. O que podemos fazer é que, se for uma pena clara, podemos fazer com que a escrita do nó de retorno retorne aqui, selecioná-la e simplesmente arrastá-la até aqui Vou chamar isso de pontos de desova. O que podemos fazer é basicamente copiar e colar isso aqui embaixo, conectado e assim. Ok, agora temos que fazer isso com todos os pontos de desova, mas por enquanto vamos ver se funciona E sempre podemos continuar. Se eu voltar para o jogador, agora eu pego a variável do modo de jogo e digo pontos de itens, e digo obter itens em pontos Agora posso obter os pontos da Espanha, dependendo do nome do item. Vou apenas arrastar isso até aqui. Então eu pego os pontos de desova e os arrasto até Agora podemos excluir essa parte porque agora ela é adicionada dinamicamente E se eu clicar em Play e comprar penas leves, se eu comprar tochas, elas ainda estão no mesmo lugar Vamos ver o que está errado aqui dentro. Então eu posso ver que escrevi Golden Crown por engano e é Torch. Então esse é provavelmente o problema. Se eu clicar aqui, certo, toca novamente. Se eu conectá-lo novamente quando mudei o nome e clicar em play novamente, compro as penas leves e compro a lanterna Você pode ver agora que está funcionando perfeitamente. Agora eu posso ver que ele também está aparecendo nas três fileiras que eu escolhi Agora vamos testar e ver se isso está funcionando. Se alterarmos as configurações, se eu for para o modo de jogo, defina os pontos de geração do item Se eu simplesmente clicar na quantidade local de linhas e transformá-la em duas linhas, também para o contador de loops. O último índice aqui, digamos que eu queria dez itens em uma linha. Eu escrevo nove aqui, porque lembre-se que o índice inicial é zero, Fycliconplay, eu compro as penas leves, você pode E vai ficar aqui, mas o 11º vai para a próxima fila Agora você pode ver que está funcionando perfeitamente e eu posso fazer a mesma coisa com a tocha O bom é que você sempre pode excluir um e colocá-lo onde quiser. Você pode clicar em Control Alt para duplicar. Ele pode transformá-lo novamente em tocha, como neste salvamento. Acho que não precisamos mais desse nome de ponto para este. Provavelmente vou removê-lo, mas vamos clicar em reproduzir novamente. Agora você pode ver que eles estão trabalhando porque o primeiro foi o Torch. Agora vamos verificar se o primeiro é Torch, o segundo é Feather e assim por diante Todos eles estão funcionando corretamente. Agora vamos voltar para a base de pontos da Espanha ou para esta. Vamos remover a instância Editável e expor no spawn porque não precisamos Vamos voltar ao controle de jogo. Vou deletar tudo isso e vamos mover tudo isso juntos. Vou apenas criar algumas notas de rota traseira para organizar isso muito melhor. Tudo bem, agora eu reorganizei tudo e acabei de fazer anotações de redirecionamento. Parece melhor. Então, o que precisamos agora são todos os outros pontos de resposta. Vamos terminar essa parte. Deixe-me deletar o primeiro aqui embaixo. Vamos começar do começo. O que você pode fazer é simplesmente arrastar até aqui e fazer, obviamente, a quantidade de itens que você tem. No momento, temos dez. Eu só vou descer, isso é 234 Basicamente, precisamos criar um mapa maior ou talvez precisemos criar mais espaço. Vá em frente e copie oito deles. Tudo bem, agora eu tenho dez deles. Clique no primeiro, verifique se é o primeiro item. Você sempre pode conferir aqui quais você tem e em qual ordem. A primeira é a pena clara. Em seguida, Torch seleciona a primeira como pena clara. Novamente, precisamos enumerar os itens. Precisamos adicionar os itens a eles A pena clara é a primeira, Torch, e depois precisamos da ruína do O protetor. Vou apenas adicionar todos eles aqui. O último para mim é a coroa do mal. Agora que tenho todos eles novamente, guarde tudo. Feche isso. Vamos até aqui. E então temos que mudar todos eles aqui também. O primeiro é o Torch. Você pode abrir isso. adicioná-lo ao meu segundo monitor. E essa é a ruína do tempo. Na verdade, está tudo em ordem aqui. Basicamente, podemos simplesmente adicioná-lo em ordem. O protetor, então o último, para mim aqui é a coroa do mal. Tudo deve funcionar bem. Agora, se eu voltar ao modo de jogo, abra o modo de jogo. Vamos abri-lo aqui. Agora eu tenho todas essas entradas nas quais posso inserir valores nelas. Vamos duplicar esse novamente. Você tem que fazer um para cada um deles, por exemplo. O próximo é Ruin of Time Spawn Points. Vá em frente, crie todos eles e conecte-os aqui também. Esse é o último para mim. A última é a coroa dos pontos de desova malignos. Vou prosseguir e adicionar isso também. Novamente, apenas certificando-se de que está tudo bem, reorganize-os assim, tudo bem Ok, agora que adicionamos isso, vamos até o player e também nos certificamos de que não precisamos fazer nada dentro daqui. o jogador aqui realmente conseguir itens, pontos de desova, precisamos fazer isso aqui também Vá em frente e clique no sinal de mais algumas vezes. Mais uma vez, dê uma olhada em suas matrizes aqui e simplesmente renomeie-as adequadamente. O terceiro é Ruin of Time. Certifique-se de ter escrito tudo corretamente, pois isso também será retirado da tabela de dados Diga o nome de ruína do tempo. O outro é o protetor. Vou apenas adicionar todos eles novamente. Novamente, este é o último para mim, a coroa do mal, e espero não ter escrito errado nenhum deles novamente, só para copiá-lo algumas Isso é 678910. Então, agora temos todos eles. Vá em frente e conecte todos eles aqui mais uma vez. E esse é o último para mim. Então vá em frente e conecte todos eles. Esse é o último. Apenas certifique-se de verificar novamente. Se você tiver algum erro aqui, verifique aqui se você fez tudo corretamente. Verifique se você está conectando tudo isso corretamente, assim E também certifique-se de que, nos pontos de geração definidos em que você conectou tudo isso corretamente, você escreveu os nomes corretamente dentro da enumeração nos itens aqui, eles correspondem aos nomes que você tem dentro da tabela tem Apenas certifique-se de que tudo isso esteja correto, porque isso é muito, muito importante. Tudo deve estar bem. Agora, se eu voltar para o player, tudo deve funcionar. Se eu clicar em jogar, agora compro alguma coisa. Vamos testar todos eles. Se eles forem gerados, significa que estão trabalhando Agora eu preciso tornar o mapa um pouco maior, mas podemos fazer isso mais tarde. Mas agora você pode ver que eu posso gerar a rosa que tenho apenas para 20 itens Então você pode ver a caixa se eu tiver acima de 20. Mas vou aumentar o número para muito mais tarde. Mas, como você pode ver, posso comprar 20 de cada item. Parece muito bom. Agora temos itens gerando a quantidade de itens que estamos comprando Tudo está calculando corretamente, tudo está perfeito Agora vamos fechá-lo. Também vou reorganizar isso e podemos passar para a próxima lição 81. 8.17 Estrutura de preço de item e tabela de dados: Tudo bem, então agora o que vamos fazer é aumentar os preços toda vez que você compra algo aqui na loja. Você pode ver que toda vez que eu compro algo na loja, o preço permanece o mesmo. E isso geralmente não é o caso em um jogo ocioso ou clicker, porque precisa ser cada vez mais difícil contrário, esse será um design de jogo muito ruim e será um jogo simples, então precisamos aumentar Na verdade, isso também é o que acontece no Cookie Clicker, por exemplo, se você ainda não o experimentou Então, por exemplo, se você comprar mais cursores, poderá ver os aumentos de preço e as coisas ficarão mais difíceis Então, precisamos fazer isso também em nossa loja. Precisamos alterar o preço estático. Vamos encerrar isso. Agora, para isso, quero criar uma nova estrutura contendo todos os preços. Se você voltar às plantas, abra as estruturas. Vamos criar uma nova estrutura de projeto para este. Vou chamá-lo de custo do item. Agora vamos abrir esse. O que basicamente precisamos fazer especificar o custo do item para cada item. Vou mudar isso para um número inteiro. O primeiro que podemos chamar de custo de penas leves. Você só precisa listar todos os itens que você tem. Agora você pode acessar essa enumeração. Se você não se lembra dos itens, pode sempre tê-los aqui ao lado. E você pode seguir em frente e escrever todos os nomes dentro da estrutura. Adicione uma nova variável e copie esta após ela. Adicione uma nova variável, copie essa e cole nela. Eu vou fazer isso por todos eles. Tudo bem, este é o último para mim, e eu vou adicionar o último, e agora temos todos eles. Deixe-me fechar este e salvar tudo. Agora, o que precisamos fazer, vamos criar uma tabela de dados a partir dessa. É sempre bom ter um. Vamos clicar com o botão direito do mouse, acessar Blueprints, criar uma tabela de dados real diversa e selecionar o custo do item e Clique em OK. Ligue para o custo de um item de DT. Vamos salvar tudo agora. Temos que acessar o Google Sheets. Aqui no Google Sheets, já tivemos isso antes. Vamos criar um novo. Deixe-me duplicar este. Duplique isso. Deixe-me falar aqui , custo do item DT. Agora, o que precisamos é excluir tudo isso por enquanto. O que precisamos aqui nesta tabela de dados é o custo de cada item. O primeiro é o custo da pena leve. Por exemplo, o item número um custará algo em torno de dez. O item número dois custará algo em torno de 15. O item número três pode custar algo como 25 e assim por diante. E vamos escrever todos os nomes dos itens aqui. Agora eu anotei todos eles, todos os itens. Agora você precisa especificar um preço para todos eles. Por exemplo, esse. O primeiro item pode custar dez pela tocha, pode custar 15 Talvez 2030, 40,60, digamos 7510125, e Novamente, é preciso tempo para fazer tudo isso. Vou apenas selecionar igual, pegar o primeiro vezes 1,2, talvez vá em frente e arraste alguns deles. Agora você pode ver o quão poderoso isso é porque você pode criar fórmulas nas planilhas do Google e importar esses números, nas planilhas do Google e que são basicamente feitos por fórmula para o seu jogo, e você pode usá-los Isso também é o que eu usei no Farm Tail quando o desenvolvi. Vamos reduzir a quantidade de casas decimais porque realmente não precisamos de casas decimais Vamos remover todos eles. Sim, nós podemos fazer isso. Clique e arraste também para ver os números, a quantidade de pontos do item, isso realmente depende de quantos itens você pode comprar. Mas para este jogo, digamos que você possa comprar 50 itens. item 50 custa isso, podemos simplesmente arrastá-lo para o item 50, algo assim. Você tem que fazer isso para o resto deles. Acho que posso fazer isso assim. Sim, eu posso realmente selecionar todos eles aqui e arrastar até aqui assim, e tudo ficará bem assim. Ok, agora eu tenho todos esses números. Você pode ver como é rápido usar uma planilha de dados. Agora eu posso clicar em Arquivo, clicar em baixar, baixar arquivo CSV Agora, para isso, podemos prosseguir novamente e mudar o nome dela desta forma. Agora eu posso voltar para o motor. Dentro do motor, vamos para a pasta de tabelas de dados. Vamos clicar e arrastar isso até aqui. Ele atualizará todas as informações, como podemos ver aqui. Agora estamos prontos para usar isso. Vamos salvar tudo isso. Antes de terminarmos isso, vamos criar também a função de biblioteca. Vou abri-lo apenas para me manter consistente. Na verdade, vou renomeá-los para F no começo, porque geralmente faço isso para minhas funções como essa Ok, vamos criar uma nova função agora. Vamos chamar isso de Obter custo do item. Agora, o custo do item depende de quantos itens compramos. Porque, como você pode ver aqui, se voltarmos, isso realmente depende de quantos itens compramos. Porque se compramos um item, precisamos pagar o item dois. Aqui. Se já compramos oito itens, precisamos obter o custo do próximo item, que é o item número nove, em vez de usá-lo como uma sequência, como costumávamos fazer com todos eles aqui. Na verdade, usamos um número inteiro aqui. Vamos usar um número inteiro aqui também. Deixe-me adicionar um número inteiro de entrada. Deixe-me chamar isso de uma quantidade de itens comprados. Quantidade de itens comprados. Já temos essas informações dentro do mapa do jogador. O que podemos fazer é que realmente não precisamos ter esse número, mas precisamos adicionar um a ele. Devido à quantidade de itens que você comprou, digamos que você tenha comprado três itens. Realisticamente, queremos obter o preço do item número quatro Você não usaria esse número, mas precisa adicionar um a ele porque precisa ter o próximo, o preço desse mais um. E então podemos dizer obter a linha da tabela de dados, como fizemos até o fim para obter uma linha da tabela, precisamos usar a tabela de dados de custo do item. Agora podemos conectar isso aqui, mas agora você pode ver que eles não são compatíveis, mas você precisa transferi-lo para uma string, duas strings e, a partir de uma string, você pode convertê-lo em uma variável de nome. Então vá em frente e conecte-o. Agora podemos criar um nó de retorno, adicionando uma devolução, adicionando isso aqui e chamando essa informação de custo de um item. Lembre-se de clicar nele e transformá-lo em uma função pura, porque, novamente, estamos apenas obtendo informações dele. Agora, vamos testá-lo antes de terminarmos esta lição. Só para sabermos que está realmente funcionando. Se eu for para o modo de jogo de plantas, por exemplo, aqui no gráfico, posso dizer obter informações sobre o custo do item E aqui está. E podemos usá-lo como quisermos. Ok, vamos fazer isso, compilar, salvar e passar para a próxima lição 82. 8.18 Obtenha a função de cost do item: Agora, o que podemos fazer é criar uma nova função chamada get item cost. Vamos tentar fazer isso dentro do player porque faria mais sentido. Porque aqui você tem a quantidade de moedas e estamos trabalhando com moedas dentro daqui. Na verdade, vou criar uma nova função. Vou chamar isso de Obter o custo do item. Vamos tentar ver o que precisamos fazer aqui. Novamente, vou transformá-lo em puro porque estamos apenas obtendo algumas informações sobre o custo de obtenção do item. Acabamos de criar essa tabela de dados e biblioteca de funções dizendo obter o custo do item e podemos usar esta. Precisamos das informações de quantos itens compramos até agora. Lembre-se de que já temos esse mapa. Portanto, podemos fazer isso facilmente dizendo find. Assim como antes de precisarmos encontrar o item correspondente, na verdade precisamos do nome do item. Precisamos de uma variável dentro daqui. Agora, em vez de ter apenas o nome do item, vamos clicar aqui. Porque eu sei mais tarde aqui que, se quebrarmos isso, também precisaremos selecionar o preço do item. Se eu fizer uma devolução, para que você possa realmente ver o que está acontecendo, eu crio um nó de devolução aqui. Precisamos devolver o custo do item, pois esse é todo o objetivo dessa função. Precisamos saber o custo do item. Agora precisamos disso, dependendo de, vamos criar um nó de seleção aqui. Depende de qual item estamos falando e podemos conectá-los. Mas o problema é que não podemos conectar uma corda dentro daqui. Porque se eu faço uma string, agora eu faço uma string e tento conectá-la, ela não é compatível. Acho que realmente precisamos adicionar a enumeração que criamos à nossa estrutura de itens ou à estrutura das informações do item ou à estrutura das informações do Agora, eu disse antes, talvez precisemos dele dentro das informações do item e acho que realmente precisamos Vamos realmente fazer isso agora. Isso é muito fácil porque já temos tudo o que precisamos. Se eu me lembro na enumeração, você já tem essa enumeração você já tem essa Vamos até as estruturas, abra as informações do item. E a razão pela qual precisamos adicioná-lo aqui está aqui. Posso apenas dizer o item aqui, informações do item. E eu posso simplesmente adicionar o item assim, porque agora temos o nome do item e também temos a enumeração Vamos adicionar a enumeração a essa estrutura. Vamos até aqui. Adicione uma nova variável chamada item. Vamos mudar isso para a estrutura do item que eu criei anteriormente. Compile ou apenas salve, deixe-me movê-lo aqui abaixo do nome Salve tudo de novo. Agora, o que você precisa fazer é voltar para a tabela de dados. Você precisa abrir as informações do item. Agora, obviamente, você tem que adicionar aqui uma nova coluna à direita e chamar isso de item. Basta copiar e colar tudo isso aqui, e agora está pronto. Vá em frente e baixe o arquivo CSV e renomeie este Agora eu já tenho esse, então vou deletar isso. Vou renomeá-lo para informações do item e depois vou voltar para o motor dentro daqui Vamos até as tabelas de dados e vamos arrastar essa para cá. E agora temos todas as informações de que precisamos. Ok, vamos salvar tudo isso. Agora vamos voltar para o player. E o que podemos fazer é detalhar isso. Agora podemos adicionar o nome M. Nós temos isso, deixe-me mover tudo isso para aqui. Agora podemos adicionar o nome do item. Isso está feito. Agora podemos conectar isso aqui. Então essa é a quantidade de itens que compramos. Então, ele encontrará automaticamente o preço do próximo item. Porque dentro dessa função, lembre-se de que adicionamos uma a ela. Então, ele vai automaticamente para o próximo item para ver quanto custa. Então, agora temos isso. Vamos selecionar o preço do item, dependendo do item de que estamos falando. Agora que temos essa enumeração, podemos simplesmente clicar e arrastá-la aqui e adicioná-la Agora já sabemos de qual item estamos falando porque o definimos agora dentro de nossa tabela de dados. Na tabela de dados, sabemos de qual item estamos falando. Ele selecionará automaticamente o valor correto, dependendo da enumeração Vá em frente e conecte todos eles. E ele selecionará automaticamente um valor dependendo do valor deste aqui embaixo. Tudo bem, terminamos com essa função. Agora, antes de terminarmos com isso, vamos revisar e realmente fazer algo um pouco melhor. Se eu voltar ao modo de jogo. Lembre-se de que fizemos tudo isso dentro do conjunto de pontos de geração Na verdade, já usamos a enumeração de itens, mas nos pontos de geração do get it usamos essa Na verdade, podemos torná-lo um pouco melhor agora que temos a enumeração Deixe-me excluir isso e dizer que na verdade, altere este para itens. Vá em frente e selecione-o, este é o nome do item, tudo bem. Podemos dizer ativar, temos ativar a enumeração em vez de ativar É muito mais fácil porque fornece automaticamente todos os valores que você escreveu dentro da enumeração Novamente, vá em frente e adicione-o. Agora você pode ver, durante o desenvolvimento do jogo, há algumas coisas que você pode precisar no futuro. Por exemplo, eu não queria adicionar essa enumeração antes, mas agora, faz muito mais sentido tê-la no jogo É sempre bom voltar às mecânicas anteriores que você fez e adicionar coisas que são melhores se você começar a precisar delas durante o desenvolvimento Agora que temos itens, um ponto. Lembre-se de que também precisamos ir até o jogador. Então, se eu abrir o player até mesmo o gráfico, porque agora você tem uma era. Porque lembre-se, esse é o problema anterior que tivemos antes. Não podemos adicionar uma string a uma enumeração, mas agora temos a enumeração dentro da Podemos simplesmente arrastá-lo até aqui. Deixe esse pino e vá em frente e compile. Vá em frente e torne-o mais estruturado assim. Agora, se clicarmos na placa para testar o jogo e ver se tudo está funcionando como eu posso ver, tudo está funcionando bem como antes. Ok, agora isso está muito melhor. Criamos nossa nova função para obter o custo do item e podemos usá-la para trocar o custo do item. Vamos passar para a próxima. 83. 8.19 Aumento no preço do item: Tudo bem, bem-vindo de volta. Então, agora estamos prontos para atualizar o custo do item. O custo do item é exibido dentro da interface do usuário. Vamos abrir o cartão de itens da loja aqui para ver o preço. Vamos ao gráfico. Até agora, o que estamos fazendo é apenas definir o preço estático aqui na construção do evento que definimos o preço. Vamos fazer isso novamente dentro de um evento personalizado, assim como estamos fazendo com a quantidade de itens. Deixe-me clicar com o botão direito aqui, criar um novo evento personalizado. Vamos chamar isso de uma atualização de Custo do Item. Agora, o custo do item, o objetivo aqui é basicamente definir o texto. Então, vou pegar o texto do conjunto de preços do item, como antes. Em última análise, isso é o que precisamos fazer agora para o texto do item. Novamente, isso depende de qual item estamos falando. Deixe-me clicar com o botão direito aqui. item custa porque agora criamos essa biblioteca de funções. Podemos pegar isso e detalhar isso. Mas agora você pode ver que o problema agora é que não sabemos qual usar. Lembre-se de que, em vez de usar este, criamos apenas um dentro do player. Vamos usar este em vez disso. Se eu pegar o peão do jogador e pegar isso aqui e dizer obter o custo do item, temos essa função do jogador Agora, basta inserir o item, porque fizemos tudo isso na porque fizemos tudo isso lição anterior, onde selecionamos isso, dependendo do item que fornecemos. Vamos voltar ao item Cod. Deixe-me deletar esse aqui em cima. As informações do item, já as temos, então vou simplesmente conectá-las. Agora. Temos o custo do item. Agora você pode ver como é muito fácil obter o custo do item dessa forma. Também parece muito mais limpo quando você transforma coisas em funções. Deixe-me reorganizar tudo isso aqui. Agora temos o custo do item. Agora, em vez de defini-lo como um valor estático aqui em cima, vou apenas excluí-lo. Clique neste e esconda os pinos não conectados aqui. O que podemos dizer é atualizar o custo do item. E, basicamente, basta chamar a função que somos, o evento que criamos aqui embaixo. Então, atualize esse também. Ok, então isso está funcionando agora. O problema é que também precisamos atualizá-lo, assim como o preço, para todos os outros itens ou outros lugares em que usamos o custo do item antigo. Porque se eu apenas destacar isso, se eu clicar com o botão direito nas informações do item, lembre-se de que temos o custo desse item ou o custo das moedas aqui. E nós realmente não precisamos mais disso porque estamos obtendo isso deste. O que podemos fazer é clicar com o botão direito do mouse aqui, encontrar referências. E vou clicar no pequeno ícone aqui embaixo, porque preciso encontrar as referências em todas as plantas. Clicando na primeira, o que estou fazendo agora é apenas dar uma olhada e ver onde estou usando o custo dessas moedas porque preciso trocá-las por esta. Novamente, vamos pegar o jogador, digamos, obter o custo do item. Conecte o item que é este. Conecte-o aqui. Em vez de usar esse custo do item, podemos usar este em vez disso. Vamos deletar isso. Você precisa trocá-lo porque esse é o custo correto do item que você está usando no momento. Vamos voltar às nossas referências e clicar na próxima. Não mostra nada porque é apenas o nome do item. Clique na próxima. Novamente, esse é o custo do item novamente. Na verdade, vamos ver se podemos copiar isso. Deixe-me copiar isso para que eu não precise escrevê-lo novamente no item. Já temos essa informação aqui. Conecte-o, conecte-o, exclua isso. Vamos colocá-lo aqui, compilar. Vamos abrir as referências. Mais uma vez, clique no próximo, nada aqui. Clique na próxima. Agora estamos dentro do player, então podemos começar a partir daqui. Entenda. Custo. E o item está aqui. E quanto ao custo, podemos simplesmente conectá-lo novamente aqui. Nós não usamos esse. Clique nele. Esconda pinos desconectados como este. Compilar. Volte às referências novamente. Clique no próximo, Nada aqui. Clique no próximo novamente. E aqui também não usamos o custo do item. Agora podemos clicar em Placa para ver o que acontece. Agora, se eu clicar em Por, você verá que o custo do item não é atualizado. Isso porque, é claro, precisamos chamar esse evento de custo do item de atualização. Isso faz sentido sempre que compramos um item. Se eu for até o player e for até esse item de compra, vamos chamá-lo aqui. Vamos ligá-lo sempre que tivermos adicionado a este mapa e atualizarmos o valor do item que compramos antes de atualizarmos a cor do botão de compra ou a cor do texto. Na verdade, vamos adicioná-lo aqui. Se eu simplesmente arrastar daqui e disser atualizar o custo do item, vamos conectá-lo assim. Isso deve funcionar muito bem. Lembre-se de que esse pin é do item da loja porque recebemos uma referência dele. E deixe-me clicar neste. Esconda os pinos desconectados, compile e clique em reproduzir. Agora, quando eu compro, você pode ver que o preço do item está aumentando. Está aumentando dependendo do que eu escrevi dentro da tabela de dados. Agora, só para ter certeza, deixe-me abrir a tabela de dados e ver se fiz as coisas corretamente. Agora, o item número 15 deve custar 128. O item número 15 custa 128 e está correto. Agora você pode ver, e isso deve funcionar para todos eles. Portanto, este último, item número 11, deve custar 929 O item número 11 é esse, pois o último custou 929, então está correto Agora sabemos que isso está correto e também está calculando corretamente. Como agora você pode ver se clicar no último, ele deve subtrair 929 E se pressionarmos aqui, esse também é o caso, tudo está funcionando bem. Vamos salvar tudo e passar para a próxima. 84. 8.20 Como criar o widget de dica de ferramenta de item: O que eu quero fazer a seguir é clicar em Jogar e passar o mouse sobre essas cartas Quero uma dica de ferramenta que mostre quanto DPS você receberá ou dano por segundo você receberá ao comprar este item Vamos criar uma dica de ferramenta. Vamos clicar com o botão direito aqui na interface do usuário e criar um novo widget, blueprint Vamos chamar isso de dica de ferramenta do WB. Dica de ferramenta, como essa. E vamos abri-lo agora. Novamente, precisamos adicionar uma tela, como de costume, antes de começarmos a desenhar. Então eu acho que vou entrar aqui. Vou copiar essa, essa sobreposição e essa imagem Eu vou controlar C e controlar V dentro daqui. Vou clicar aqui na tela cheia. E, novamente, selecione o desejado na tela. Para o sensor de ponto de ancoragem, coloque 0,5 no alinhamento correto para x e y. Em seguida, clique também em Dimensionar para o conteúdo E as posições x e Y devem ser zero. Y zero, agora está no meio. Ok, agora vamos começar a projetá-lo. Estou apenas excluindo essa imagem e essa caixa horizontal Vou apenas arrastar o texto até aqui. Exclua a caixa horizontal. Agora, para este, vou reduzir o tamanho desse texto. Acho que é muito grande, talvez. Em vez disso, vamos tentar 18. Para o deslocamento da sombra. Deixe-me escrever dois em vez disso aqui. Ok, agora para esta imagem, em vez de ter a imagem de um determinado tamanho, vou escrever 32, que é o padrão. E podemos simplesmente dimensioná-lo de acordo com o conteúdo de dentro para fora deste. Vamos começar com o texto. Para o texto, o que precisamos dizer é, por exemplo, cada tocha dá cinco DPS Isso é o que eu queria dizer. Agora, em vez de apenas tê-lo como texto, eu realmente quero adicionar uma caixa vertical porque preciso de algum outro texto abaixo dela Vamos adicionar uma caixa vertical. Adicione o texto a este. E vá em frente e controle D para duplicá-lo aqui embaixo Eu quero dizer que aparentemente fazendo, por exemplo, zero DPS aqui em cima, isso vai te dizer quanto DPS, esse item ele te dá E o DPS, aliás, se você não sabe, é dano por segundo Então, quanto dano por segundo esse item causará quando você o comprar? Quanto você está fazendo atualmente? É quando, por exemplo, 15 desses, deveria dizer 15 vezes cinco. E dirá quanto DPS você está fazendo pela cor Vou apenas copiar essa cor que temos aqui. Cole-o neste. E cole neste também. Agora acho que vou dar um pouco de espaço também. Por exemplo, aqui podemos dar um espaçador entre os dois textos Vamos dar a ela um espaço de dez e o Y. E também vamos dar um pouco de espaçamento à caixa vertical Vamos escrever 30 e o preenchimento, então agora temos algum espaçamento para o Também quero mudar a cor do texto porque acho que fica melhor se alterarmos o quanto os DPs gostam da cor do texto aqui, porque fica mais fácil de ler Agora, não podemos realmente fazer isso com um texto apenas porque, caso contrário, isso mudará a cor de todo o texto. Em vez disso, o que precisamos fazer é duplicar este clicando no controle D. Vamos adicioná-lo em uma caixa horizontal, porque precisamos que ele esteja ao lado do outro Adicionando esses dois à caixa horizontal, vou excluir os cinco DPS desta, da outra Vou excluir todos os outros textos exceto os cinco DPS, como este Lembre-se de adicionar um espaço aqui. Então eu clico nesse espaço publicitário. Agora, isso é o que parece. Agora você pode ver que o espaço é um pouco grande demais. Na verdade, vou excluir o espaço e, em vez disso, adicionar um espaçador, porque agora podemos controlar quanto espaço existe entre os caracteres E eu vou escrever quatro no X. Acho que parece muito melhor Vamos fazer a mesma coisa aqui embaixo. Vou apenas duplicar este. Na verdade, exclua o que está aqui embaixo. Puxe-o para baixo do espaçador assim. Então, podemos escrever, por exemplo, zero DPS aqui, aqui embaixo Atualmente, podemos escrever sem DPS. Por exemplo, quero ter certeza de que essa caixa horizontal está alinhada ao meio, assim como essa outra caixa horizontal alinhada ao meio Agora vamos mudar a cor dos cinco DPS ou do texto do DPS aqui em cima. Vou mudá-lo para algo roxo assim. Você pode tentar encontrar a cor que você gosta, talvez algo assim. Quanto à saturação, não quero que fique muito saturado senão é um pouco difícil de ler Vou configurá-lo para algo como 0,42. Isso é para o volume, um está bom Clique em OK, este é um texto diferente. Agora você pode dar um pouco mais de saturação. Por exemplo, 0,445 Você também pode copiar isso para o outro Agora, o que eu também quero fazer é mudar a cor da sombra abaixo dela, porque ela não cabe mais. Vou copiar isso aqui com base nesses dois. Mude para algo muito sombrio como isso. Talvez 0,4, algo como 0,4 a coca. Em seguida, copie isso além da cor da sombra e dê uma olhada, e acho que fica muito melhor. Agora, deixe-me mudar este aqui para 0,4 em vez disso. Na saturação, vou copiar essa cor aqui embaixo E eu vou copiar a cor do contorno aqui embaixo também Agora você pode ver que tem uma cor diferente e é muito mais fácil de ler. Acredito que terminamos de projetar este. Vamos passar para a próxima. 85. 8.21 Atualizando as informações de dica de ferramenta: Agora, vamos continuar e atualizar a interface do usuário do Tooltip aqui. Vamos ao gráfico e realmente atualizar as informações. Vou deletar tudo isso. E vamos clicar com o botão direito mais uma vez e criar um novo evento personalizado chamado update tooltip UI Agora, para este, o que basicamente queremos fazer é mudar o texto deles. O primeiro, veja aqui , diz o nome do item. Precisamos de um valor dinâmico aqui, precisamos do nome de cada item. Clique neste, vou chamá-lo de PS. Esse texto aqui em cima. Vou chamar isso de quanto DPS esse item vai te dar Qual será o desempenho desse item no DPS? Ou o quanto você vai fazer aqui em cima. Eu só vou ligar que dá PS. Este, vou chamá-lo da mesma forma, dá a quantidade de DPS Essa é a quantia aqui embaixo. Vou chamar isso de fazer PS. Este é o valor do PS. Ok, vamos compilar e, digamos, vamos voltar agora ao gráfico Vamos começar com o give P, o primeiro texto. Só queremos definir o texto como de costume, assim. Agora lembre-se do que eu disse anteriormente. Anteriormente, eu disse que se você tem um texto dinâmico como esse, precisa usar um formato de texto. Vamos escrever a partir daqui e dizer formatar texto. Vamos escrever a mesma frase. Diz que cada um deve dar. O que precisamos escrever aqui é cada um. E então precisamos abrir o colchete porque a tocha é um valor dinâmico, vamos apenas dizer o nome do item e fechá-lo com a entrada dos colchetes, você pode ver uma entrada aparecer em cada uma e o nome do item E agora podemos inserir o nome do item. Na verdade, precisamos das informações do item. Agora, para fazer isso, vamos adicionar um alfinete aqui, alterá-lo na estrutura de informações do item, chamá-lo de item. Agora podemos pegar isso, podemos quebrá-lo e podemos pegar o nome do item e inseri-lo aqui. E ele será atualizado corretamente. Ok, isso acabou. Vamos ver a próxima coisa: essa quantidade de DPS. Vamos pegar, dar a quantidade de PS e definir o texto mais uma vez. Agora, novamente, precisamos basicamente de um formato de texto como antes. Então vá em frente e pegue isso. Agora, em vez de dizer isso, podemos dizer o valor do EPS e podemos dizer DPS, o número aqui, e depois o texto DPS Agora precisamos inserir o valor do DPS. Agora não temos isso. Na verdade, precisamos adicioná-lo e adicioná-lo ao item, porque cada item que compramos deve ter sua própria quantidade de DPS Vamos às estruturas do projeto e vamos abrir as informações da TM. Vamos adicionar uma nova variável chamada DPS, ou dano por segundo Isso depende de você. Transforme-o em um flutuador, salve, salve tudo Agora, lembre-se de que você também precisa adicioná-lo à tabela de dados por meio do Planilhas Google. Mas, por enquanto, vou apenas abrir as informações M. Você pode simplesmente escrever o que quiser aqui. Vou escrever apenas 10.20 e 30 ou talvez 50. Vou escrevê-lo para os três primeiros apenas para testar. Realmente preciso disso agora. Só precisávamos do valor aqui nas informações do item. Agora que você tem esse DPS, vá em frente e conecte-o aqui E isso deve funcionar muito bem. Agora, para o resto, vamos começar com o DPS. Agora. É o texto aqui embaixo. Vai dizer que está fazendo atualmente. Agora você pode ver aqui que não temos valores dinâmicos e realmente não precisamos alterar esse texto. Na verdade, não precisamos manipular esse texto. Só precisamos mudar esse. Vamos voltar e pegar o chamado presentes, valor PS. Em vez disso, defina o texto. Precisamos definir o valor. Eu só vou copiar este. E este exibirá a quantidade total de DPS para este item que você pode fazer Vou escrever aqui a quantidade total de DPS e depois apenas o DPS Eu não o conectei. Agora, a quantidade total de DPS depende de quantos itens você comprou E lembre-se, já temos isso dentro do player. Precisamos de uma referência ao jogador. Vamos fazer isso. Aqui está, personagem do jogador, aliás, tente fazer isso sozinho, se puder. Porque eu acho que você pode fazer isso. Já temos a variável, a variável de mapa dentro do player que você precisa usar, digamos que seja uma referência ao player na interface do blueprint Vá em frente e se conecte. Agora era chamado de Item Spot. Vá em frente e pegue este mapa aqui. Agora, a partir desse mapa, precisamos encontrar o item com o qual estamos trabalhando. Vou me arrastar até aqui e dizer encontre. E precisamos encontrar o item. E quando encontrarmos o item, ele nos dirá quantos itens compramos. Vamos arrastar essa até aqui. Agora temos a quantidade de itens que compramos. Para calcular o DPS total, você precisa multiplicar a quantidade de itens comprados quantos DPs ou quanto DPS cada Vamos pegar esse e multiplicá-lo pela quantidade de PS que cada item faz E então, com isso, temos a quantidade total de DPS que podemos conectar aqui Vá em frente e conecte isso aqui também. Agora estamos realmente terminados, então vá em frente e clique aqui para ocultar os pinos desconectados Vá em frente e clique duas vezes neles para fazer anotações sobre arte e organizar seu código. Tudo bem, agora que está organizado e com isso concluído, vá em frente e compile, salve tudo E agora terminamos de atualizar a dica dupla I. 86. 8.22 Exibindo o widget de dica de ferramenta: Agora é hora de exibir esse widget de dica de ferramenta que criamos Para fazer isso, temos que fazer isso dentro do item da loja, Cod. Porque lembre-se de que, quando clicamos em reproduzir, queremos que essa dica de ferramenta apareça. Sempre que passamos o mouse sobre esses cartões , eles estão realmente dentro do item da loja. Nós fazemos isso. Vamos entrar aqui. Quero exibir esse widget. Sempre que eu passar o mouse sobre qualquer coisa sobre este cartão, vou clicar nessa sobreposição e fazer isso Isso significa que onde quer que passemos o mouse sobre esse cartão, ele aparecerá Clique nessa sobreposição. Vou descer até aqui no Comportamento e clicar em Avançado. Aqui embaixo você vê esse chamado Tool Tip Widgets. Vá em frente e clique em Vincular e crie uma encadernação. Então vá em frente e expanda isso. Agora precisamos obter o widget que criamos, o widget Shop Tooltip Não criamos uma referência a ela, porque normalmente criamos referências à interface de usuário dentro do controle de jogo. No entanto, para esse widget nós realmente não criamos nada Não quero criá-lo aqui dentro , como estamos fazendo. Porque o, não é algo que você possa abrir e fechar. É apenas algo que aparece sempre que você passa o mouse sobre as cartas Em vez de fazer isso aqui. O que vou fazer é geralmente criar meus eventos dentro dos meus jogos chamados de camada de inicialização Dentro desse evento, adiciono tudo o que preciso que deve acontecer sempre que eu abrir o jogo. Por exemplo, esse widget de dica de ferramenta precisa ser criado, digamos criar widgets E vá em frente e selecione o widget Tooltip, essa dica de ferramenta do Shop E vá em frente e promova isso para uma variável chamada dica de ferramenta de loja Por exemplo, ferramenta de loja, OK. Agora isso foi criado, e lembre-se também de adicioná-lo aqui. Vou fazer isso antes de criar os cartões. Agora , isso realmente não importa. Mas só para ficar limpo aqui. Jogador inicializado. Agora estamos chamando esse evento aqui embaixo, coloque conectado, o que eu precisar que aconteça. Quando eu abrir o jogo, vou adicioná-lo ao evento inicial do jogador. Agora temos uma referência a esse widget de dica de ferramenta. Então, o que podemos fazer agora dentro da placa, podemos pegar o controle do jogador, obter o controle do jogador. Então, podemos direcionar a partir daqui e dizer obter referência do controlador do player a partir do modelo do widget Agora podemos pegar essa dica e dizer uma dica de ferramenta, e podemos obter esse widget que acabamos de criar Agora, para esse widget, precisamos chamar, se eu voltar à loja de widgets, se eu voltar à loja de widgets ferramenta aqui. Lembre-se de que criamos a interface de usuário da dica de ferramenta de atualização Vamos chamar isso de dica de ferramenta de atualização que eu conectei. Agora ele precisa de um item porque o usamos para atualizar basicamente todas as informações que temos. Isso porque estamos dentro do código do item da loja e criamos essas informações do item anteriormente, que também usamos aqui para atualizar as informações do item Vamos pegar este e conectá-lo aqui. E então conecte isso. Além disso, lembre-se de conectar essa ferramenta de widget ao Putt até o nó final Novamente, você pode clicar duas vezes aqui. Eles se organizaram assim. Ok, isso deve funcionar. Se compilarmos e salvarmos tudo. E se eu clicar em Reproduzir, agora você pode ver que ele realmente é exibido com o nome correto para o item. Você pode ver que diz cada série de itens ou cada sequência de tempo, e o protetor protege os capacetes de cada rei, coroa de cada rei e assim por diante Agora, ele também exibe a dica da ferramenta com as informações corretas. Agora há um problema. Agora, se eu clicar em jogar novamente e comprar algo, você pode ver que diz zero DPS e nada está realmente sendo exibido Agora, para este, vamos tentar fechá-lo e verificar a tabela de dados se escrevemos as coisas corretamente. Se eu abrir as informações do item, o primeiro DPS, a pena clara deverá ser 1020 E se eu clicar em jogar e verificar se o primeiro deve ser 1.020,50 e vejo que nada está sendo Mas você pode ver aqui, toda vez que eu compro algo, ele realmente é exibido corretamente. Se eu mover meu mouse e passar o mouse sobre ele novamente, dirá 20 DPS Vamos dar uma olhada em onde isso dá errado. Se eu abrir o widget de ferramentas da loja, as informações aqui que ele me fornece, primeiro chamado, fornecem DPS Este fornece a quantidade de DPS. Isso está correto. Vamos dar uma olhada na quantidade de DPS fornecida como ela está sendo definida Vamos também verificar a outra parte do código, e aqui está realmente onde está errado. Como eu uso a quantidade de DPS fornecida, em vez de usar a quantidade de DPS, isso é a coisa errada Aqui, deixe-me deletar este e compilar. Clique em Reproduzir e se eu passar o mouse sobre ele, agora ele será exibido corretamente. Isso porque eu disse o texto errado aqui. texto que faz EPS é o correto e indica que o DPS também estava correto Ok, agora, se eu comprar algo, você pode ver que ele ainda exibe zero no que está sendo feito atualmente. Mas se eu me afastar dele e voltar para ele novamente, você pode ver que ele é exibido corretamente. Se eu me afastar, vá até ele, ele será exibido corretamente. Nos 30 DPS em execução atualmente, precisamos atualizar o DPS em também precisamos atualizar o DPS em execução como em outro lugar, porque ele não é atualizado instantaneamente O que podemos fazer é chamar essa atualização de ToolPi toda vez que eu comprar um item Se eu fechar tudo, volto às plantas Abra o player aqui. Fizemos esse único item de compra. O que podemos fazer aqui com o item de compra é que eu posso simplesmente atualizá-lo aqui. No final, precisamos do controlador do player. Vou pegar o controle do player e pegar o widget de dica de ferramenta que criamos Em seguida, vamos executar a interface de usuário da dica de ferramenta de atualização sempre que comprarmos um item E qual é o item? É este que inserimos aqui. Vamos pegar isso e conectá-lo novamente. Basta organizá-lo assim. E vamos compilar e clicar em Play e ver o que acontece Agora, se eu comprar, você pode ver que ele atualiza instantaneamente a quantidade de dano por segundo e também está sendo atualizado corretamente, dependendo do GPS que estamos criando. Agora, para finalizar, abra seu Google Drive aqui, vamos encontrar as informações do nível, as informações do item aqui, as informações do item e depois do custo das moedas. Vamos adicionar o DPS. Para o TPS, vou escrever apenas para o primeiro item, ele fará cinco DPS e, em seguida, digamos que é igual Vou fazer com que números aleatórios se multipliquem por 1,5. Vou levar tudo até aqui Vou remover todas as casas decimais porque não preciso delas. E podemos fazer isso mais ou menos assim. Você também pode dizer que multiplicado por 1,8 Nós realmente causamos mais danos como esse Vamos agora fazer o download desse arquivo CSV e lembre-se de renomeá-lo, renomeando as informações do item T. Vá em frente e abra o projeto. Vá para as tabelas de dados, depois vá em frente e importe as informações do item para aqui. Vamos verificar as informações do item para garantir que o TPS esteja lá. E é. E agora você pode ver cada item tem a quantidade correta de DPS exibida E se você comprar algo, ele exibirá o DPS atualmente em execução corretamente. Obviamente, não estamos realmente fazendo nenhum DPS no momento porque não temos danos automáticos Mas pelo menos nosso sistema agora está funcionando para que possamos continuar o curso. 87. 9.01 Aplicando dano automaticamente: Agora é hora de aplicar dano automaticamente ao inimigo. E isso geralmente é o que é feito em jogos de clicker quando você compra E causa danos por segundo. Isso deve ser feito automaticamente, em vez de você continuar clicando no inimigo. Vamos seguir em frente e fazer isso. Vamos fazer isso no player. Vamos voltar e entrar no player. Agora já fizemos algo com os danos aqui dentro. Dentro do jogador, ou na verdade, foi dentro do inimigo que aplicamos algum dano aqui. Agora vamos aplicar algum dano dentro do player. Agora é o jogador que está causando dano. Clique com o botão direito do mouse e crie um novo evento personalizado. Vamos chamar isso de Auto Damage. Vou causar danos automaticamente a este. Agora, para causar o dano automático, precisamos de algo em loop Precisamos de um código em loop que continue funcionando , nunca pare e esteja causando danos Você tem algo chamado cronômetro. Temos algo chamado evento. Defina o cronômetro por evento. Você também tem algo chamado set time by function name. Agora eles são parecidos. Essas duas funções são semelhantes. Normalmente, os usamos quando precisamos de algo em loop. Usamos o node de atraso sempre que precisamos atrasar algum código e depois fazer algo. Lembre-se de que, para o nodo de atraso, nós o usamos dentro da base inimiga. Se eu entrar aqui, usaremos isso para realmente atrasar esse código porque esperamos que a inversão terminasse Atrasamos o código pelo tamanho do flip-book e depois verificamos se o jogador ou o inimigo estavam mortos ou não Aqui usamos o atraso. Se você precisar de algo que esteja em loop, o código precisa estar É melhor usar um cronômetro. Temos um cronômetro por nome de função e cronômetro por evento. Agora, realmente não importa qual deles você usa, porque eles são quase idênticos. Na verdade, eu uso os dois, então eu realmente não tenho uma preferência. Eu posso te mostrar como usá-los para o T. Vamos usar primeiro o cronômetro por evento Deixe-me colocar isso aqui, atrasar esse. Vamos conectar esse primeiro cronômetro por evento. Você tem que avisar o cronômetro. Com que rapidez você deseja fazer um loop? Por exemplo, eu quero fazer um loop a cada 0,1 segundo. Isso significa que o código será executado a cada 0,1 segundo. O código aqui será executado dez vezes por segundo. Vou configurá-lo para um loop. Agora precisamos de um evento. Vou arrastar isso até aqui, diretamente no evento personalizado. Vamos chamar isso de loop de danos automáticos. Seja qual for o código que você escrever, ele sairá daqui e agora será repetido. Por exemplo, se eu arrastar daqui e escrever uma string de impressão, ela disser olá e eu compilar Agora, esse dano automático, você obviamente tem que correr em algum lugar e eu vou executá-lo no começo. Jogue aqui. E vamos escrever para causar danos. Agora estamos realizando este evento aqui. E ele executará esse cronômetro que executa o código. Compilar, clique em Reproduzir. Na verdade, ele executa esse código e ainda está em execução. Como você pode ver aqui, ele roda ou diz olá dez vezes por segundo. Se eu escrever 0,04, por exemplo, clique em Play, você pode ver que é muito mais rápido Agora, se você não é forte em matemática, sempre pode calculá-la dizendo, por exemplo, 1/0 0,04. Isso significa que o código está sendo executado 25 vezes por Agora, um carrapato , você deve conhecer esse que eu sempre digo para você não usar evento. Este, muito ruim, está na verdade ocorrendo em, se você estiver certo, 1/0 0,02, isso é na verdade 50 vezes esse tick do evento ocorre 60 Na verdade, este nem é suficiente. Está rodando talvez 0,18 ou até menos. Como você pode ver, o evento é super rápido. Na verdade, está funcionando assim. O complay, esse é o evento. Você pode ver que o cronômetro é muito, está muito mais otimizado Você pode executar o código não tão rápido, mas ainda pode obter os mesmos resultados se eu executá-lo em 0,05. Isso significa que estou executando o código 20 vezes por 0,05. Isso significa que estou segundo Às vezes, isso é necessário porque se você executar o código muito lentamente, parecerá que a barra de saúde está atrasada porque está subtraindo a integridade Isso ocorre se você executar o cronômetro muito devagar. E podemos realmente ver isso sempre que fazemos tudo isso. Agora, defina o cronômetro pelo nome da função. A diferença entre os dois é que isso vai fazer um loop em uma função, uma função que criamos aqui. Na verdade, vou usar este porque principalmente, quero usá-lo porque mantém o código limpo. Não preciso escrever ou enviar spam para meu gráfico de eventos com eventos aleatórios. Na verdade, posso simplesmente criar uma função e ela fica escondida, e é muito mais limpa para essa função Vamos chamar isso de dano automático. Vamos também fazer essa função aqui. Fica em loop qualquer nome que você escreveu aqui. Ele vai repetir essa função. Agora lembre-se de que você deve escrevê-lo exatamente como escreveu aqui. Para que funcione, vou subir 0,05 ou vamos realmente subir 0,14 Agora vamos tentar isso. Deixe-me deletar isso. Deixe-me deletar isso também. Deixe-me conectá-lo, vamos escrever isso, promovê-lo a uma variável, que possamos parar o cronômetro se precisarmos Vou chamá-la apenas de alça de danos automáticos, porque se você segurar o mouse sobre ela, ela diz que é uma alça de cronômetro ou alça de danos Podemos usá-lo para parar o código ou parar o cronômetro. Agora, basicamente, esse dano, eu quero jogar aqui no evento ou começar a jogar para o jogador. Sempre que iniciamos o jogo, começamos a fazer o Orodamage Obviamente, não causamos danos se ainda não compramos nenhum item. Vamos para a função Or damage aqui. Assim como antes, eu quero aplicar dano e agora o ator danificado é o inimigo. E lembre-se de que temos uma referência ao inimigo dentro do controle de jogo. Eu pego o controle do player e procuro inimigo gerado porque o transformamos em uma variável e vou em frente e o conecto Agora, quanto ao dano básico, vamos trabalhar com ele na próxima lição. Por enquanto, vou escrever apenas cinco e isso deve funcionar muito bem. Agora, clique em jogar. Agora você pode ver que o inimigo está sendo danificado automaticamente. E parece bom. Mas obviamente temos que corrigir algumas das animações aqui Agora eu quero te mostrar que parece lento, se você dissesse desta vez Ou jogo muito lento, parece lento, parece de baixa qualidade No entanto, se você configurá-lo para algo como 0,04, o que na verdade eu quero defini-lo para 0,04 , parece muito Quanto mais baixo você o colocar, mais ele ficará limpo, assim. Você pode ver aqui que é muito mais suave. No entanto, lembre-se de que quanto mais baixo você o definir, mais repetirá esse cronômetro e mais recursos usará em seu jogo, e menos otimizado ele será Quero dizer aqui que, quatro cronômetros, tente ajustá-lo o mais alto possível sem sacrificar a aparência do Se eu pensar em 0,05 para Leggy, definirei como 0,04 e ficarei satisfeito com esse e ficarei satisfeito com Novamente, você pode entrar aqui e dizer o que é 1/0 0,04. Isso significa que meu código está sendo executado 25 vezes. Isso é bom. Isso é bom. Muito melhor do que o tick do evento, que é 60 vezes por segundo. Ok, agora terminamos com tudo isso e vamos para a próxima lição. 88. 9.02 Como avaliar o DPS total: Para aplicar a quantidade correta de dano, temos que calcular quanto dano por segundo o jogador tem. Como o jogador pode comprar todos esses itens, precisamos juntar tudo e depois aplicá-lo como dano automático ao inimigo. Vamos fazer isso criando uma nova função. E esse será chamado de atualização total do EPS. Primeiro, precisamos de todos os itens que o jogador comprou. Vamos pegar esse mapa. Para fazer isso, temos duas funções. Temos dois nós. Podemos usar uma chamada chaves. O que são as chaves, são a primeira coluna aqui, a string. Isso é chamado de chaves. Se eu disser valores, você poderá obter os valores dessas chaves. Temos as chaves aqui , que são as strings, e depois temos os valores Agora precisamos de todos os itens que o jogador comprou, então precisamos usar as chaves. Vou pegar essas chaves aqui. Agora temos todos os itens em uma matriz. Vou dar uma olhada em todos eles. Para cada loop, para cada um desses itens, queremos saber quanto DPS eles estão fazendo Para o DPS, lembre-se de que temos a opção de obter informações do item, obter informações que criamos na biblioteca de funções Vamos pegar isso para o nome do item. Vamos conectá-lo aqui. E agora podemos quebrar essa estrutura. E agora temos a quantidade de DPS. Agora, novamente, a quantidade de DPS também depende de quantos itens compramos desse item selecionado que temos no momento Também precisamos usar os valores. Vou copiar isso aqui e dizer valores porque precisamos saber quanto realmente compramos desses itens. Para os valores, vou direcionar a partir daqui e dizer get porque já estamos fazendo loop aqui, então não preciso fazer Então, eu só vou dizer, pegue uma cópia. Qual índice você deseja obter? Vou apenas seguir os índices ou índices deste, para obtermos a quantidade correta de itens para o item correspondente Agora, o que podemos fazer com isso, podemos dizer que essa é a quantidade de itens multiplicada pelo DPS Por exemplo, se tivermos cinco do item, ele dirá cinco vezes. Por exemplo, dez DPS são dez. Então, precisamos de uma nova variável para armazenar o DPS total. Vou criar uma nova variável chamada DPS total. Eu não o transformo em um carro alegórico. Agora, o que podemos fazer é a quantidade antiga de DPS, ou seja, o DPS que temos agora e que calculamos, podemos configurá-lo para o novo DPS Se não fizermos isso, se eu mover tudo isso, se fizermos isso e fizermos isso aqui e conectá-lo, isso significa que toda vez que ele for calculado, ele realmente definirá esse EPS para esse número E não queremos isso porque estamos percorrendo todos os itens e basicamente empilhando todos os números E continue multiplicando, multiplicando e adicionando a essa variável Em vez de defini-lo como um valor estático, precisamos adicionar o valor antigo do DPS total a esse E obtemos o novo valor aqui, e podemos basicamente definir o DPS total aqui Agora temos o DPS total. E também talvez possamos obter um número ou não realmente um dólar, mas mostrar um dólar onde ele continua calculando e talvez o número esteja sendo exibido incorretamente em um O que eu quero fazer é que, em vez de usar o DPS total, vou criar uma nova variável, uma variável local chamada DPS total local Essa é uma variável local que só existe dentro dessa função em que estamos agora. Na verdade, vou usar a variável local aqui para definir a quantidade de DPS Agora, lembre-se de que as variáveis locais não podem sair das funções. Da próxima vez que você tentar calcular o DPS, esse será zero Essas variáveis locais serão excluídas toda vez que você tentar executar essa função. É por isso que você não pode usar isso fora dessa função. Basicamente, o que precisamos fazer é que, quando concluirmos o ciclo e tivermos essa quantidade total de DPS definida, podemos pegar essa quantidade local de DPS e definir o DPS total Você pode fazer isso dessa maneira, ou basicamente pode fazer isso diretamente aqui em cima. Isso realmente não importa, mas posso imaginar que haja uma caixa de exibição no futuro. Se não estiver tudo bem, basta inserir o DPS total aqui, em vez do local Eu só vou fazer isso dessa maneira. E agora temos o DPS total definido e podemos salvar tudo isso Podemos clicar aqui, ocultar pinos desconectados, se desejar, e novamente, reorganizar Agora que temos o número correto de TPS que estamos fazendo, vamos passar para a próxima lição e finalizar o dano oral 89. 9.03 Aplicando a quantidade correta de dano: Agora que temos a quantidade correta de dano calculada ou o DPS total, vamos passar para a função de dano automático mais uma vez e vamos fazer a quantidade correta de dano Agora, em vez de escrever aqui ou simplesmente arrastar o DPS total e aplicá-lo aqui, isso está errado, porque você clica em jogar agora e compra E você pode ver aqui que não está causando danos no momento porque, na verdade precisamos executar essa atualização, com DPS total Na verdade, vamos fazer isso dentro do player quando compramos um item, porque temos que atualizar o DPS. Na verdade, vou fazer isso antes ou depois de gerar o item. E vamos arrastar isso. Vamos adicionar o DPS total da atualização para garantir que ele seja atualizado sempre que compramos algo E se eu clicar em Jogar agora e comprar algo, você pode ver que isso causa o dano por segundo. O que eu quero fazer agora é que você pode ver aqui, mesmo o dano por segundo, então o primeiro deve ser cinco se eu comprar apenas um. Mas, como você pode ver, não está causando cinco danos por segundo. Cada segundo está fazendo muito mais. O motivo é que estamos executando nosso cronômetro. Se eu voltar ao gráfico de eventos, estamos executando nosso cronômetro em 0,04. Não estamos executando uma vez por Então, como você pode ver aqui, cinco pela pluma clara. Agora vamos causar cinco danos por segundo, o que é correto, mas estamos fazendo 0,04. Na verdade, precisamos fazer alguma divisão para obter o número correto por segundo Vamos fazer isso dentro do dano do carro aqui. O que precisamos fazer é basicamente dizer que fizemos exatamente como fizemos antes, onde dissemos aqui, lembre-se de 1/0 0,04 e isso nos dá 25 Basicamente, esse código é executado 25 vezes por segundo. Precisamos dividir o DPS total 25 para obter o número correto. Vamos fazer isso. Digamos que 1/0 0,04 Aqui, eu vou pegar, basta clicar com o botão direito aqui, dividir e escolher aquele Vamos dizer 1/0 0,04 Basicamente 0,04, temos isso em Vamos realmente promover isso em uma variável. Vamos promovê-la para uma variável chamada Auto Damage Tim Time. Agora podemos usar este dentro do dano automático e conectá-lo aqui. E divida por 11 dividido pelo tempo do cronômetro de danos automáticos, que é 0,04. Isso nos dá 25 Como vimos aqui, isso nos dá 25. O que precisamos fazer é dividir o DPS total por 25, que nos dá a quantidade correta de dano por segundo Agora, ele causará cinco danos por segundo corretamente. Se eu compilar agora e clicar em Jogar, e agora clicar em Por para ver a pena clara, ela causará cinco danos por segundo corretamente Basta dizer 75 quando terminar. E na verdade dizia 75 aqui. Porque percorremos 5 segundos e cinco vezes cinco é 25. Isso está correto. Mas eu posso ver que o número aqui está sendo exibido com casas decimais, e eu realmente não gosto disso Vamos consertar isso. Vamos fechá-lo. Vamos voltar para a interface do usuário. Vamos abrir a barra de saúde. E aqui dentro do gráfico da barra de saúde, basta conectar o flutuador É por isso que está jogando aqui com casas decimais quando você atinge o inimigo Em vez de fazer isso, o que você pode fazer é arrastar a partir daqui. Se você não conhece as funções, basicamente pode escrever floats Você pode tentar examinar tudo isso. Mas basicamente o que eu quero usar é o piso ou a vedação. Basicamente, o que é piso e vedação, você pode passar o mouse sobre ele e ver o que diz. Diz que arredonda para baixo, você pode ver. -1,6 se torna -2,1 0,6 se torna um. Ou isso ou você pode usar o selo. Acho que vou usar o selo. Portanto, esse basicamente 1.6 se torna dois em vez de um. Vou usar o Seal, e você pode ver que ele o transforma em um número inteiro E lembre-se de que um número inteiro não tem casas decimais. Eu vou segurar Alt. Clique aqui para desconectá-lo e, em seguida, conecte este. Então, agora temos um número inteiro. E se eu clicar em Jogar e comprar a pena leve, agora você pode ver que ela causa cinco danos por segundo Não está exibindo casas antidecimais, tudo está funcionando corretamente. Mas, como você pode ver aqui, todos os efeitos, eu não quero que esse efeito aconteça. Vamos pular para a próxima lição e corrigir tudo isso. 90. 9.04 Corrigindo o efeito de sucesso: Tudo bem, agora terminamos com os danos no carro. No entanto, você pode ver aqui que temos esse efeito. Eu não quero que esse efeito esteja aqui. Então, precisamos excluir algo do código. Como você pode ver, também não está reproduzindo a animação da morte que está errada. Vamos resolver tudo isso. Vamos abrir o inimigo porque o dano está aqui dentro. Agora, o efeito de golpe está sendo reproduzido, porque toda vez que causamos dano ao inimigo, ele reproduz o efeito de golpe. Vamos desconectar isso e ver o que acontece. Eu clico em jogar e compro alguns danos. Aqui você pode ver que está funcionando corretamente. No entanto, por algum motivo, a animação da morte não está sendo reproduzida. Acredito que seja porque estamos repetindo o código várias vezes e ele continua Agora, se eu simplesmente copiar esse evento de morte e tentar conectá-lo aqui, agora isso realmente não faz sentido, porque vamos matar o inimigo instantaneamente toda vez que clicarmos. E, como você pode ver aqui, essa não é a abordagem correta. O que podemos fazer aqui é perguntar se o inimigo está morto? Vamos tentar aqui. O inimigo está morto? Porque nós realmente não queremos que ele passe pelo efeito de golpe. Se eu simplesmente conectar isso e tentar clicar em Play e comprar alguns tomos, agora parece correto E se o inimigo morrer, você pode ver que o inimigo está morrendo corretamente. Ok, então tudo está funcionando. Desativamos o efeito de golpe e tudo está funcionando. Agora, se eu clicar em mim mesmo, você pode ver que não tenho nenhum efeito de impacto. Então, eu preciso corrigir isso também para o efeito de impacto. Agora, quando eu clico nele, então este é o clique do mouse, podemos adicionar o efeito de hit aqui em vez disso. E se eu clicar em jogar, agora eu clico com o mouse, ver o jogador, o inimigo bate, mas você também pode ver que a animação está reservada Você pode ver aqui quando eu clico, às vezes o inimigo fica parado. E eu tentei fazer isso de novo. Mas acho que esse é o segundo que reservei porque se eu clicar muito rápido, você pode ver esse A animação da morte tinha um livro. Isso ocorre porque aqui no is dead, na verdade, ele está reproduzindo essa animação de morte tanto para o clicker automático quanto Quando você clica, a animação da morte é basicamente reproduzida duas vezes. E isso vai agendar a animação porque você continua enviando spam para esse cronômetro aqui e ele nunca é O que podemos fazer, essa solução muito simples, é o dano que aplicamos. Como temos algo chamado tipo de dano, podemos basicamente especificar se é o dano automático que está causando dano ou é o clique ou o mouse que está causando dano? Para fazer isso, muito simples, vamos às plantas E aqui, deixe-me escrever Click Go to blueprint class, podemos pesquisar o tipo de dano Se você apenas procurar por danos, você pode vê-los aqui embaixo, tipo de dano. Vá em frente e selecione isso, basta chamá-lo de dano automático. Agora, não vamos realmente danificar coisas dentro daqui. Basicamente, precisamos apenas dessa classe de blueprint. Você pode pensar nisso como trabalhar com enumerações em que temos uma lista basicamente usando essa classe e um essa classe e um Vamos voltar e vamos até o jogador. Como você pode ver aqui no player, quando causamos o dano aplicado, você pode definir uma classe de dano, agora podemos configurá-la para a compilação de dano automático que acabamos de criar O que eu quero fazer aqui é jogar isso sempre que estiver, o dano automático que está causando o dano. Agora, o que podemos fazer aqui dentro para detectar o dano do inimigo é suportar esse tipo de dano e basicamente pesquisar um nome e obter a exibição. Agora você pode imprimir uma string e ver o que ela faz se eu simplesmente desconectá-la, guardá-la e você pode escrever uma string de impressão Vá em frente e conecte-o. E conecte este também. Basta ver o que ele traz para a tela. Se eu clicar em jogar e comprar algo para causar danos automáticos, você pode ver que basicamente exibe o nome do projeto e diz Auto Damage É assim que a chamamos. Posso usar isso a meu favor, pegando isso e pesquisando por conteúdos. Vou ver se essa string contém algo que estou procurando. E se eu apenas pesquisar danos automotivos porque fazem parte do nome da planta Se esse tipo de dano que eu causei contiver danos automáticos no nome, posso fazer uma ramificação aqui. Eu também posso sair e conectar isso ou basicamente o que você pode fazer. Você também pode dizer que, se não quiser as duas filiais aqui, pode pegar isso e dizer ouro Você pode basicamente pegar isso aqui em vez disso e conectar este. Você pode excluir os outros lingotes. Se o nome contiver danos e o inimigo estiver morto, você pode jogar este. Vamos continuar compilando e salvando. Agora você pode ver se eu clico em jogar e compro algo aqui, Damage. Você pode ver que tudo está funcionando corretamente. Nada está se esgotando. Além disso, se eu clicar em jogar e tentar matar o inimigo, tudo funcionará perfeitamente como antes. E se eu comprar ou danificar tão bem quanto clicar no inimigo, nós dois estamos fazendo alguma coisa. Você pode ver que está tocando apenas uma vez. E também não há dinheiro no código. Agora sabemos que o código está funcionando perfeitamente. Vá em frente e reorganize tudo isso, e vamos para a próxima lição 91. 10.01 Criando a exibição de nível: O que precisamos fazer agora é exatamente como nos heróis do Clicker, onde você pode ver o nível que alcançou Também temos que fazer o mesmo com esse clicker. Vamos voltar à interface do usuário e adicioná-la aqui no u principal, na lateral dos widgets principais Vou apenas copiar essa parte aqui. Vou clicar nessa sobreposição e copiar e , basicamente , tudo aqui, controle C. E, em seguida, clicar no painel de controle V. Basta colar aqui Agora, para este, vamos colocá-lo ao lado. Vou clicar no ponto de ancoragem e colocá-lo à direita para fazer o deslocamento Vou apenas escrever zero no X. A diferença inferior também é zero Agora você pode ver que está fora da tela, na verdade está aqui ao lado. O que precisamos fazer é basicamente o alinhamento aqui para o x, precisamos empurrá-lo para dentro É só escrever um aqui no alinhamento, agora está na tela O que precisamos fazer agora é colocar a posição x, basta afastá-la borda da tela novamente, assim como antes, você pode clicar nesta. Se você não se lembra do que fez, você o afastou 30 pixels. Vamos fazer a mesma coisa aqui para nos mantermos consistentes. Ao clicar na sobreposição, vou pressioná-la para 30 no deslocamento x, na verdade, -30, caso contrário, ela vai para o outro E 30% de diferença em relação ao topo. E novamente 30 da parte inferior também. Eu também preciso de um texto aqui em cima onde diz nível. Vamos copiar esse texto aqui em cima, Controle C e depois Controle V. Aqui embaixo na sobreposição Vou colocá-lo acima da caixa de rolagem. Na verdade, precisamos adicionar uma caixa vertical, caso contrário, ela ficará no meio. Vamos procurar uma caixa vertical. Vá em frente e adicione-o. Em seguida, adicione o texto e a caixa de rolagem na caixa vertical. Clicando na caixa vertical, vá em frente e preencha-a aqui na horizontal e E também a caixa de rolagem que você precisa preencher para clicar em Preencher aqui. Agora também precisamos dar um pouco de preenchimento, porque, como você pode ver, o texto também está no topo das bordas E também para o tamanho da frente, acho que vou reduzir um pouco mais a frente, então talvez escreva 24 aqui em vez disso. Agora, o que podemos fazer é , basicamente, aqui para a caixa de rolagem escrever zero no preenchimento, porque agora vou adicionar preenchimento à coisa toda Clicando nessa caixa vertical, vou dar um preenchimento de, vamos começar com 50 e ver como fica Ok, isso parece bom. E também preciso aumentar um pouco, talvez a sobreposição que eu possa ver como ela fica à direita e à esquerda Acho que não preciso acrescentar muito à direita e à esquerda. Em vez disso, vou escrever 35. Assim, estou clicando nessas linhas para removê-las. Para ver como é. Obviamente, preciso adicionar um espaçador entre o texto e a caixa de rolagem aqui embaixo Adicione um espaçador de talvez 15 e o y. Agora temos essa tela pronta aqui Em vez disso, vamos escrever o nível. Vá e compile e torne-o um pouco maior. Também precisamos corrigir o tamanho, dependendo do tamanho da carta de nível. Por enquanto, tudo está indo bem. Mas vamos agora para a próxima lição e criar o cartão. 92. 10.02 Criando o cartão de nível: Para criar o cartão de nível, vamos usar o mesmo método que fizemos aqui com o cartão de item da loja. Então, deixe-me clicar com o botão direito aqui, acessar a interface do usuário e criar uma nova. Vamos chamar isso de carta de um nível. Vamos abri-lo novamente. Vá em frente e adicione um painel de tela antes de fazermos qualquer coisa Também altere isso para desejado na tela. Agora estamos prontos. O que eu quero fazer é basicamente que a carta seja um botão , porque haverá vários botões aqui para mudar o nível. Dependendo do nível para o qual você deseja mudar, na verdade vou copiar esse botão que criamos aqui. Clique nesta sobreposição, no botão e no texto e clique no controle C. Volte para a carta de nível e controle V aqui Agora, para a sobreposição, estou clicando em Dimensionar para o conteúdo e também para o texto Na verdade, antes de fazer isso aqui para a sobreposição, vamos mudar o ponto de ancoragem para estar no meio e 0,5 nos alinhamentos e 00 no x e y. Agora está perfeitamente centralizado para este Eu só vou escrever um por enquanto. Portanto, isso exibirá o nível e o tamanho do botão. Acho que vou reduzi-lo um pouco, não preciso que seja tão largo. Clicando nele, podemos reduzir o tamanho em x. Acho que vou escrever 100 aqui. Apenas certifique-se de copiar esse tamanho de imagem e colá-la também no cursor do mouse e no pressionado . Para essa cor de texto. Vou apenas alterá-lo de volta para essa cor padrão. Então vá em frente e copie essa cor. Volte para o cartão de nível e cole-o aqui também. Agora, basicamente, este está pronto. Vamos dar uma olhada em como fica se eu voltar ao menu principal ou à interface principal. E eu clico aqui, e essa é chamada de lista de itens. Na verdade, vou mudar o nome dessa caixa vertical para uma lista de níveis. Compilar. Agora vamos procurar a carta de nível aqui e arrastá-la para a lista de níveis. E vá em frente e duplique-o algumas vezes para que você possa ver como é O que eu quero corrigir um pouco aqui é o tamanho dessa sobreposição Se você pressionar até que isso desapareça aqui, tente fazer com que seja assim, o menor possível, mas sem problemas Também a barra de rolagem. Eu quero começar aqui na borda deste botão. Então, clicando aqui, descendo a barra de rolagem, encontrando o título da barra de rolagem para o topo. Eu só vou escrever algo como oito. Isso é bom. Acho que precisamos disso para a parte inferior também. Não tenho certeza agora. Mas sempre podemos duplicar isso algumas vezes, dar uma olhada e clicar na última E também precisamos disso. Para dar tapinhas na parte inferior Eu também vou escrever oito. Na verdade, precisa de menos. Vamos escrever em vez de oito, vamos escrever algo como cinco. Sempre podemos voltar aqui se precisarmos mudar mais coisas com a interface do usuário. Mas, por enquanto, está tudo bem, e se eu clicar em jogar, espero que com o mouse sobre eles, tudo esteja funcionando. O que posso fazer agora é excluir tudo para que fique limpo e tenhamos apenas essa lista de níveis. Compile, salve tudo e vamos seguir em frente. 93. 10.03 Definindo o nível: Vamos agora mudar dinamicamente esse nível para esse botão Agora, isso vai ser muito fácil, porque vamos clicar nesse texto e renomeá-lo para compilação em nível de texto E agora vamos ao gráfico. Agora vamos fazer isso como antes com o item da loja. Sempre que o adicionarmos à lista, isso mudará essas informações dentro da construção do evento. Basicamente, ele atualizará o custo do item e tudo isso. Novamente, vamos usar essa construção de evento. A única coisa que precisamos fazer é basicamente definir o nível necessário para definir o número. Agora, quanto ao nível, vamos criar uma nova variável aqui e usar um número inteiro Vamos chamar isso de um nível. Nós vamos dar a ele essa informação. Sempre que criamos esse widget, você sempre pode voltar ao controle do player se não se lembrar do que fez com a loja de itens Veja aqui, se você descer, o que fizemos foi basicamente criar essa variável de informação do item. E clicamos em expor em spawn e Instance Editable e pudemos inserir informações Na verdade, faremos a mesma coisa aqui para a instância de nível editável, expor na geração Basicamente, podemos clicar e arrastar isso para aqui desta forma e, na verdade, terminamos aqui agora. Podemos fornecer algumas informações sempre que gerarmos a carta, e faremos isso na próxima lição 94. 10.04 Desbloqueando o novo nível: Tudo bem, agora vamos dar algumas informações. Novamente, estamos trabalhando com a interface do usuário, então, na verdade, vou criar isso no controlador do Player aqui embaixo. Vamos criar um novo evento personalizado. E vamos chamar isso de um nível de desbloqueio. Podemos usar este para desbloquear o nível ou exibir essa exibição de nível aqui. Sempre que o jogador bate em um inimigo. Esse nível desbloqueado, ele basicamente cria esse widget ao lado Assim, podemos ver o nível. Basicamente, o botão agora tem uma era porque eu o conectei sem nenhuma informação. Se eu clicar em Jogar, basicamente um botão aparece sempre que você ultrapassa um nível. E é isso que queremos fazer. Basicamente, ele cria o widget. Qual widget ele cria? É a carta de nível que precisamos criar. Quanto ao nível, podemos dizer mais tarde qual nível desbloquear. Então, vou clicar e arrastar isso até aqui. Quero adicionar esse botão à minha lista de níveis. Se eu voltar para a interface do usuário, abrir a interface principal, chamamos isso de lista de nível VB É aqui que queremos adicionar o cartão. Se eu voltar para o controle de jogo, posso ver o que tenho. Eu tenho esse WB principal, então posso adicioná-lo aqui e pesquisar a lista de níveis. Vá em frente e clique nele. Agora podemos dizer que adicione dois e você pode escolher este. Adicione a criança à caixa vertical. Basicamente, você pode adicionar esse widget que acabou de criar à sua caixa vertical e prosseguir com a compilação Agora estamos começando com o nível um. E o nível um deve estar lá por padrão porque neste nível em que estamos agora, vamos apenas desbloquear o nível um por padrão aqui no Player Controller. Sempre que começarmos o jogo, vou escrever o nível de desbloqueio e podemos basicamente escrever um aqui. Estamos desbloqueando o nível um por padrão e clicando em jogar Agora você pode ver que o nível um está desbloqueado e exibido E precisamos desbloquear todos os outros níveis sempre que derrotarmos um inimigo. Vamos fazer isso dentro do modo de jogo, porque no modo de jogo , se voltarmos, faz muito tempo que não fizemos isso aqui no modo de jogo, mas aqui fizemos esse incremento do nível atual Em vez disso, vamos desbloquear o nível aqui. Sempre que aumentamos o nível e ainda não o desbloqueamos, podemos ir em frente e desbloqueá-lo podemos ir em frente e desbloqueá-lo Vamos chamá-lo, está dentro do controle do player. Então, precisamos do controlador do player aqui. E podemos pesquisar o nível de desbloqueio. E vá em frente e leve isso aqui. O que precisamos fazer aqui em vez de apenas desbloquear esse nível atual Como na verdade podemos estar jogando em um nível inferior, se quisermos entrar em um nível mais alto, não queremos desbloqueá-lo novamente. Imagine se eu estivesse jogando aqui e no nível cinco, mas eu escolho clicar no nível um novamente e jogar no nível um. Não quero desbloquear novamente nível dois porque eu já o desbloqueei Precisamos de uma nova variável aqui para salvar o nível anteriormente desbloqueado Vamos criar uma nova variável e chamá-la de nível anteriormente desbloqueado, transformá-la em um número inteiro Aqui, o que podemos dizer é: o nível atual é maior do que o nível desbloqueado anteriormente Por exemplo, se estamos no nível um e o nível anteriormente desbloqueado é o nível quatro, não precisamos realmente desbloquear o nível três e assim por diante Novamente, como já estamos no nível quatro, nosso nível máximo, vamos fazer essa ramificação se o nível atual for maior do que o nível desbloqueado anteriormente Se atingimos o nível cinco e desbloqueamos o nível quatro mais cedo, se isso for verdade, vamos pegar esse nível anteriormente desbloqueado, vamos configurá-lo para qualquer nível atual, que agora é o nível cinco em vez de quatro E podemos simplesmente inserir essas informações aqui embaixo. Agora, se eu compilar e clicar em jogar, podemos derrotar esse inimigo Você pode ver que o nível dois agora está desbloqueado. Se eu derrotar esse inimigo também, nível três será desbloqueado e assim por diante Então, agora tudo isso está funcionando corretamente. No entanto, novamente, nós realmente não revestimos o botão, então não podemos voltar ao nível. E vamos trabalhar nelas a seguir. 95. 10.05 Configurando o nível atual: O que queremos alcançar agora é evitar que o inimigo apareça, mudando automaticamente um nível como esse O que queremos fazer é alterar manualmente os níveis quando clicamos nesses botões. Vamos continuar e trabalhar com isso a seguir. Agora, aqui estou eu dentro do modo de jogo, e vamos reduzir isso um pouco. Aqui estou abaixo do evento atual de incremento que criamos anteriormente O que eu quero fazer aqui é um novo evento personalizado. Vamos fazer isso, vamos chamar isso de um conjunto de nível atual. Usaremos esse evento personalizado sempre que clicarmos nos botões de nível aqui. Vamos definir o nível manualmente definindo o nível atual. Obviamente, precisamos do nível atual aqui e temos que defini-lo. E temos que conectar isso aos eventos, porque então podemos configurá-lo manualmente em outros lugares. Agora estamos definindo o nível atual aqui para o nível atual, vou dizer apenas um nível. Definindo o nível que escolhemos para o nível atual. Então nós, nós, mudamos um nível. Queremos ter certeza de que o inimigo que está neste nível atual seja removido, caso contrário, eles aparecerão um em cima do outro Lembre-se de que está no controlador da placa, então vou copiar o controlador da placa aqui. Obtenha a variável inimiga gerada. Clique com o botão direito do mouse e diga converter em um get validado. Porque agora podemos dizer que se é válido, podemos ir em frente e destruir o Acta Depois de destruirmos o Acta, queremos gerar o novo inimigo Basicamente, eu posso copiar isso aqui. Eu posso simplesmente copiá-lo, colá-lo e conectá-lo assim. Agora, se o inimigo ainda não for válido, podemos simplesmente seguir em frente e gerar o novo inimigo Porque a única razão pela qual adicionamos essa parte é para garantir que o inimigo atual seja destruído e inimigo atual não exista. Podemos simplesmente seguir em frente e gerar o novo inimigo. Agora, na verdade, podemos definir o nível atual usando essa lógica. Então, vamos compilar e salvar tudo. Agora vamos voltar para a interface do usuário. Aqui na interface do usuário, se eu clicar no cartão de nível e clicar nesse botão, desça até o botão e clique, clique, clique no sinal de adição aqui para criar um evento aqui. Sempre que você clica, o botão é chamado por botão e não está realmente correto. Vou apenas renomear o botão. Vou chamá-lo de compilação de nível. Vamos voltar ao nível do botão. Sempre que clicamos nele, queremos mudar o nível. Queremos chamar esse evento aqui no modo de jogo. Vamos seguir em frente e fazer isso. Digamos que clique com o botão direito aqui e diga obter o modo de jogo. Em seguida, vamos arrastar a partir daqui e dizer obter referência do modo de jogo, aquela da interface do blueprint Vamos atacar a partir daqui e dizer definir nível atual, porque é assim que o chamamos. Agora já temos essas informações de nível porque as conectamos aqui Vamos conectá-lo assim. Vamos compilar. E vamos clicar em Comp e ver o que acontece quando eu mato um inimigo Eu mato o próximo também. Mate o próximo também. Agora vamos ver se consigo mudar o nível. Se eu pressionar em dois, eu posso mudar isso, pressionar em um. E eu posso ver que posso realmente alternar entre os níveis e tudo está funcionando. O cronômetro é reiniciado toda vez que eu mudo os níveis, o que queremos evitar Agora, você tem um bug aqui, por exemplo. Se você matar o inimigo no nível um, verá que ele muda automaticamente para o nível dois. Eu realmente não quero fazer isso. Queremos mudar os níveis manualmente. Vamos continuar trabalhando nisso a seguir. 96. 10.06 Prevenindo o surgimento automático de inimigos: Agora, para evitar que os inimigos apareçam automaticamente ou passem para o próximo nível, vamos abrir o modo de jogo Mais uma vez, precisamos reescrever ou reescrever este chamado Increment Current Level, porque lembre-se de que o usamos na morte do inimigo sempre que vamos à base inimiga Dentro dos eventos de morte, aumentamos o nível toda vez que matamos o inimigo Temos que fazer algo sobre isso agora, em vez de aumentar o nível atual, porque neste jogo você nunca, ele nunca o incrementará automaticamente. Em vez disso, vou chamá-lo de nível de desbloqueio. Desbloqueamos o nível e depois passamos manualmente para o próximo nível. Isso é feito em jogos clicker porque geralmente talvez o próximo nível seja muito difícil e você precise voltar para ganhar mais dinheiro para comprar coisas, e então você pode ir para o nível mais recente Você desbloqueou, é por isso que está feito. Este também é chamado de nível de desbloqueio. Lembre-se de que isso está no Controle do Jogador onde adicionamos o nível. Na verdade, vamos mudar o nome deste para não nos confundirmos. Em vez de chamá-lo de nível desbloqueado aqui no controlador do Player, vamos chamá-lo de botão de nível, UI É aqui que adicionamos o botão à lista. Em vez disso, vamos chamá-lo assim. E vamos voltar ao modo de jogo para não nos confundirmos agora. É chamado assim. Ok, esse nível de desbloqueio. Queremos realmente continuar executando isso aqui. Sempre que o inimigo estiver morto, queremos desbloquear o nível. Mas você só quer desbloquear o nível sempre que estiver no nível mais recente. Sempre que estou nesse nível e estou jogando, quero desbloquear o próximo nível. Eu não quero desbloquear o nível se eu estiver jogando o nível um agora, porque eu já desbloqueei o nível dois Para evitar isso, vamos ao modo de jogo e aqui no nível desbloqueado Antes de fazermos tudo isso, o que podemos fazer é atingir o nível atual. Podemos perguntar: isso é igual ao nível desbloqueado? Em vez deste , temos o que é chamado de nível anteriormente desbloqueado Na verdade, precisamos alterar esse código. Deixe-me renomeá-lo aqui embaixo. Em vez do nível anterior desbloqueado, vou chamá-lo apenas de Compilação de Nível Desbloqueado Certifique-se de que o nível desbloqueado seja um por padrão, porque você já tem o nível um O nível atual também é um. Temos o nível um desbloqueado por padrão. Se o nível atual for igual ao nível desbloqueado, se isso for verdade, queremos ir em frente e desbloquear o próximo nível Porque isso significa que se o nível atual, que é um agora, for igual ao nível desbloqueado, que é um agora, então estamos realmente jogando no nível mais recente E queremos desbloquear o nível sempre que matarmos esse inimigo. Vamos em frente e trancar isso. Novamente, queremos aumentar o nível atual se isso for verdade. Agora estamos perguntando se isso é menor ou igual ao nível máximo? Se isso for verdade. Agora, não queremos realmente gerar o inimigo porque estamos apenas desbloqueando o nível, não estamos mudando de nível não estamos Em vez de gerar o novo inimigo, na verdade vou deletar Exclua isso aqui também. Este também podemos excluir. E esse também. simplesmente ir em frente e conectar isso. Deixe-me arrastar isso para que você possa ver a coisa toda. Agora, o que estamos dizendo é o nível atual é igual ao nível desbloqueado Isso apenas verifica se estamos realmente no nível mais recente Já desbloqueamos anteriormente Se isso for verdade e tivermos derrotado o inimigo, vá em frente e desbloqueie, ou simplesmente suba o nível atual e adicione um a ele Quando você faz isso, neste nível desbloqueado, vamos simplesmente excluir este, porque agora podemos simplesmente conectá-lo aqui, bloquear ou desbloquear Mas ele adicionará um botão para o nível mais recente do nível atual, porque adicionamos um a ele, em vez de ser o nível um, agora é nível dois e adicionaremos o botão para o nível dois. Na verdade, isso é suficiente. Agora, estamos basicamente desbloqueando o nível com este evento E então estamos definindo esse nível atual aqui para gerar o inimigo aqui antes de continuarmos Esse nível atual está realmente errado, porque queremos definir o nível desbloqueado aqui Porque é o nível desbloqueado que queremos adicionar, não o nível atual Porque, novamente, não queremos mudar o nível automaticamente. Quero permanecer no nível atual em que estou agora, mas só quero aumentar o nível desbloqueado Também aqui embaixo, liste este e vamos colar o nível desbloqueado Em vez disso, vamos adicionar um botão para o nível desbloqueado que está correto Agora, para ter certeza de que tudo está funcionando aqui, vamos também até a base inimiga e também garantir que o código esteja correto. Agora estamos no evento da morte, e aqui no evento da morte queremos desbloquear o nível correto. E lembre-se, o nível desbloqueado só funcionará se o nível atual for igual ao nível desbloqueado Estamos nos certificando de que estamos no nível mais recente, no nível desbloqueado, mas também precisamos ter certeza de que queremos definir o nível atual, pois isso está gerando Vamos voltar para a base e chamar o nível atual definido. Vamos conectá-lo aqui. Conectado aqui também. Vamos pegar o nível atual, e essa é a variável aqui. Vamos definir o nível para o nível atual. Vá em frente e compile agora, o nível atual mudará sempre que você pressionar o botão Se você acessar a interface do usuário, acessar o código do nível e pressionar esse botão , o valor do nível atual será alterado. Isso mudará esse nível atual definido. Vamos tentar isso. Vamos clicar em Jogar. Eu vou matar um inimigo. Agora podemos ver que não está trocando inimigos automaticamente porque basicamente, se eu voltar ao código, estamos matando o inimigo e depois gerando o inimigo para o nível atual Lembre-se de que criamos essa função, estamos apenas tomando o nível atual que não estamos incrementando Só aumentaremos o nível desbloqueado em um se estivermos no nível um se estivermos no Então, se eu voltar e continuar jogando, posso ir para o próximo. Agora eu posso matar esse inimigo e desbloquear o próximo nível. Eu posso voltar para o nível um, dois ou três. Então eu posso voltar para um, por exemplo, matar esse inimigo. E posso continuar recebendo dinheiro desse inimigo até sentir sou forte o suficiente para comprar algumas coisas aqui. E então eu posso ir para o próximo nível e posso ver que você pode trocar de inimigo como quiser. E só adicionará um botão se você derrotar o inimigo mais recente. Tudo bem, então terminamos aqui. É assim que você evita a desova automática. Apenas verifique se você cometeu um pequeno erro, verifique se o nível atual é igual ao nível desbloqueado E também é o nível desbloqueado que você está adicionando aqui, adicionando, compilando, salvando tudo e vamos passar para o próximo 97. 10.07 Adicionando ícones de crânio aos chefes: Vamos tornar o jogo um pouco mais interessante. Quero adicionar um ícone de caveira aos ônibus. Lembre-se de que, dentro da tabela de dados, selecionamos que alguns dos inimigos são ônibus. Este, o Mago, por exemplo, e o cavaleiro Rogan. O que eu quero fazer é adicionar um ícone de caveira à exibição do nível Vamos até a interface do usuário, abrir a carta de nível, na verdade, no designer. Vamos começar por aqui. Vamos adicionar uma imagem. Vamos arrastar essa imagem até a sobreposição dessa imagem Vamos transformá-lo em um ícone de caveira. Lembre-se de que podemos realmente usar aquele nos objetos ativos. Aqui estão os sprites. Eu só vou usar a textura ou o crânio. Se você apenas procurar por uma caveira e conseguir encontrá-la aqui, vou usar a textura em vez do sprite Vá em frente e edite o tamanho. Vamos tentar 50 por 50, bem como a posição dele. Vou até aqui para transformar e editar a tradução para ela. Por exemplo, para o x, podemos dizer menos seis, e isso será dessa maneira, e depois menos seis, e isso aumentará dessa Zoom, acho que parece bom. Sempre podemos mudar isso, mas parece bom. Agora, esse ícone aqui, por padrão, eu quero deixá-lo oculto porque eu não quero que ele apareça aqui para cada botão. O que eu quero fazer é aqui na visibilidade, vamos configurá-la para uma compilação oculta agora no gráfico, vamos adicioná-la apenas aos inimigos que são ônibus Lembre-se de que, dentro daqui, o que podemos fazer é sempre pedir informações sobre o inimigo. Precisamos primeiro do nome do inimigo. Temos o nome do inimigo? Na verdade, se você se lembra na biblioteca, se eu voltar às bibliotecas e colocá-la, se você disser obter informações de nível, lembre-se da estrutura de obter informações de nível. Se eu abrir a estrutura de informações do nível, você terá o nome do inimigo que aparece lá Você pode realmente usar isso a seu favor. Então, você pode dizer, obtenha informações de nível. Já temos o nível aqui. Podemos pegá-lo e separá-lo. Quando nos separamos, temos o nome do inimigo, que podemos inserir aqui. Clique aqui, Oculte os pinos não conectados. Em seguida, você pode arrastar a partir daqui. E divida-o também. A partir daqui, agora você tem o tipo de inimigo. Vamos arrastar a partir daqui. Digamos que isso seja igual? E não vamos selecionar esse. Vamos selecionar essa porque é uma enumeração Este é igual a um chefe. Mais uma vez, clique neste. Esconda os pinos desconectados que podemos arrastar daqui agora e faça uma Se é verdade que é um chefe, queremos simplesmente exibir essa imagem. Vamos tirar essa imagem. Agora, não o transformamos em uma variável. Vamos mudar o nome dela para imagem. O crânio é variável. Agora podemos ir para o gráfico. Podemos retirá-lo e dizer definir visibilidade. E defina a visibilidade dela. Podemos configurá-lo para lembrar, não para ser testável. Ele não bloqueia o botão porque visível bloqueará os cliques do mouse Portanto, não podemos clicar no botão. melhor testar o que é testável. Deveria ser isso. Se eu compilar e clicar em reproduzir, agora você verá que não há nada aqui Se eu comprar algo aqui para matar o inimigo muito mais rápido, podemos mudar para os níveis, ver que tudo está funcionando perfeitamente. Se eu mudar para o nível quatro, e ele aparecer aqui no nível cinco, você pode ver que há um ícone e está funcionando perfeitamente. Vou apenas tornar a interface um pouco maior para que ela não saia. Eu apenas minimizo isso. Eu volto para a interface principal aqui, deixe-me adicionar um nível. Se eu apenas adicionar um gato nivelado, posso ver o que estou fazendo assim. Agora podemos clicar na sobreposição e torná-la um pouco maior para que ela não corte nosso ícone de caveira Compile e jogue. E aqui vamos nós. Tudo deve funcionar bem. Vá em frente e exclua este, caso contrário, ele vai errar. Como uma coisa extra. Antes de terminarmos, vamos também adicionar um ícone de caveira ao lado do nome do chefe No nome do chefe, está aqui nas informações do inimigo. Então, basicamente, precisamos adicionar um aqui. Assim como antes, vou pesquisar uma imagem. Na verdade, precisamos de uma caixa horizontal porque não temos nada aqui. Vou procurar primeiro uma caixa horizontal. Adicione aqui embaixo. Pesquise a imagem. Adicione-o também para a imagem. Assim como antes, vou alterá-lo para a pontuação, um tamanho é vamos dirigir 60 por 60. Novamente, acredito que era 60 por 60, ou talvez fosse 50. Se eu voltasse aqui, seriam 50. Vamos fazer 50 por 54. Agora deixe-me adicionar esse texto na caixa horizontal. Esses dois elementos estão aqui dentro. Clicando na caixa horizontal, vou fazer a âncora no meio, 0,5 nos alinhamentos para ter certeza de que está no E também a posição é zero a zero, então está perfeitamente no meio. O tamanho do conteúdo é verdadeiro. Basicamente, altere o tamanho da caixa horizontal para qualquer conteúdo que ela tenha. Ok, então agora temos isso aqui. Agora, para o ícone. Vou apenas adicionar pouco de preenchimento na parte inferior, talvez dois Nós o empurramos um pouco para cima. Na verdade, em vez de um preenchimento, eu realmente quero escrever zero Na verdade, eu quero mudar a tradução aqui embaixo. Então você pode mudar isso. Em vez de adicionar um preenchimento, você pode alterar a tradução Eu ia dizer menos dois, então foi empurrado um pouco para cima Ok, assim como antes, vou deixar a visibilidade oculta e acessar o gráfico aqui para atualizar as informações do inimigo. Assim como antes. Agora temos o nome do inimigo, então vou apenas dizer para obter informações sobre o inimigo. Já temos o nome do inimigo. Então podemos acabar com isso , assim como antes, podemos pegar o tipo de inimigo e dizer: isso é igual a nós? Se for esse o caso, vá em frente e mostre esse ícone novamente, assim como antes. Vamos mudar o nome para image skull. Vamos definir que é variável. Vamos pegar a imagem do crânio e definir a visibilidade para ser testável Mais uma vez, clique neste. Escondeu os pinos desconectados. Acerte isso, talvez um pouco mais perto. Vamos experimentar e ver o que acontece. Eu clico em jogar no jogo. Eu compro alguns desses para que eu possa danificar muito mais rápido e avançar para os níveis Agora, aqui está o inimigo, e você pode ver que o ícone apareceu. Está funcionando perfeitamente. Mas você pode ver aqui, na verdade eu acabei notar que esse nome está empurrado para o lado. Não está no centro desse inimigo. Isso ocorre porque o ícone da caveira está realmente lá. Está apenas escondido. Em vez de colocar o crânio como oculto nesse caso, nesse caso, tudo bem porque simplesmente está lá Este está, na verdade, divulgando o nome. O que podemos fazer é definir em vez de oculto, você pode configurá-lo como retraído É como se você minimizasse um menu. Não está mais na sua visão. Configurá-lo para colapso deve funcionar perfeitamente. Agora, se eu mudar de nível rapidamente só para exibi-lo para você, agora este morre. Se eu for agora, você pode ver esqueleto estava aqui antes do texto começar aqui Agora está começando na posição correta. O colapso é muito melhor de usar neste caso. Ok, legal. Então, agora temos esse crânio exibido Parece mais legal do que antes. Além disso, posso ver que o alinhamento está se alongando um pouco . Em vez disso, vou colocá-lo no meio Vá em frente e compile, salve tudo e vamos continuar 98. 10.08 Adicionando ícones a cartões de compras: A próxima coisa que quero fazer aqui é também adicionar os ícones dos carros, dos gatos da loja. Mas como você pode ver aqui, parece bom. Mas acho que ficará melhor se tivermos um ícone ao lado desse texto Na verdade, vamos acrescentar isso. Vamos abrir a loja aqui. Vamos adicionar o ícone ao lado desse texto. Agora está dentro de uma caixa ou de uma caixa vertical. Precisamos de uma caixa horizontal aqui embaixo. Eu apenas procuro novamente por uma caixa horizontal e a adiciono aqui embaixo, logo acima do texto. Adicione o texto à caixa horizontal. Em seguida, adicione também uma imagem à caixa horizontal, logo acima do texto aqui. Agora, para esse ícone, vamos transformá-lo no ícone do item. Mas, por enquanto, basta ir em frente e selecionar um ícone aleatório para o alinhamento. Vá em frente e coloque-o no meio para que não se estenda até o tamanho desse ícone Acho que 32 por 32 é bom. Acho que não precisamos de mais do que isso. Eu provavelmente preciso de um pequeno espaçador entre eles. Faça com que pareça melhor, basta adicionar o x, talvez quatro e assim por diante. Sim, parece bom. Ok, vamos clicar nessa imagem, chamá-la de item de imagem. Vamos mudar isso para É variável. Agora vamos ao gráfico e fazer coisas com ele. Agora, aqui no gráfico de eventos, vamos dar uma olhada em onde podemos fazer isso da melhor maneira. Temos o item de atualização no local I. Temos a atualização, o custo. Também temos a construção do evento. Sempre que esse cartão for adicionado, esse será o melhor lugar. Sempre que a carta é adicionada a partir do controle do player, nós também adicionamos instantaneamente o ícone. Deixe-me afastar isso. Depois de atualizar o nome do texto, quero pegar o ícone da imagem e, digamos, definir o pincel. É assim que você define uma textura ou uma imagem dinamicamente. Defina o pincel a partir da textura. Vá em frente e selecione este. Isso basicamente significa definir essa imagem a partir de uma imagem que eu importei para esse mecanismo. Defina o pincel a partir da textura. Agora, qual textura você precisa? Acho que já temos os ícones e, na verdade, não temos. Vamos adicionar isso. Só temos o sprite aqui embaixo. Agora, para continuar, precisamos adicionar essa miniatura às informações do item Vamos voltar, ir até os itens e, na verdade, adicionar informações sobre a estrutura do item aqui. Vamos adicionar uma nova variável chamada thumbnail nail. Vamos adicionar essa ou alterá-la para uma textura dois D, que é apenas uma textura que você importa ou uma imagem. E vá em frente e selecione a referência do objeto. Vou mover isso para cima logo acima da miniatura ou do nome do item Lembre-se, agora você precisa acessar o arquivo do Google Sheets. Agora, aqui, vou ver as informações do item aqui à direita. Vou clicar com o botão direito do mouse aqui e inserir a coluna à direita. Chame isso de miniatura. O mesmo que a variável. Agora podemos adicionar a miniatura aqui, referências . Agora vamos voltar para, vamos ver se os temos aqui nos objetos, na verdade, apenas aqui nas texturas, você pode simplesmente usá-los objetos, na verdade, apenas aqui nas texturas, como referências, porque esses são os itens O que eu quero que você faça é abrir a mesa. A primeira é a pena clara. Novamente, assim como antes da luz, clique com o botão direito do mouse na referência. Volte para o seu documento. Colado em próximo é clicar com o botão direito aqui, referência colada para a tocha E vá em frente e faça isso para todos eles. Esse foi o último para mim. Vou continuar e clicar em Baixar arquivo como arquivo CSV novamente. Em seguida, vou importar este novamente para minha pasta de tabelas de dados. Vá em frente e transporte-o, e você deverá ter todas as informações. Agora vamos voltar e trabalhar e continuar o trabalho. Vamos abrir o cartão de itens da loja mais uma vez. Agora temos essa miniatura. Podemos inseri-la aqui nesta miniatura. Vou clicar para criar um nó de redirecionamento como este e clicar E oculte os pinos conectados, compile e salve. Agora tudo deve estar funcionando. Se eu clicar em jogar, agora você pode ver que todos os ícones foram adicionados. Novamente, preciso tornar esse painel um pouco maior para que ele não seja cortado se eu apenas adicionar um cartão a ele para que eu possa visualizá-lo melhor Portanto, se eu adicionar um cartão de item da loja à lista de itens, posso clicar na caixa vertical e aumentá-la um pouco aqui. Então, não é cortar assim. Em conformidade, agora você pode ver que tudo está bem. Parece muito melhor se você tiver um ícone ao lado dos itens da loja. Sim, é assim que você os adiciona e deve ser isso. Vá em frente e economize. Apenas certifique-se novamente de clicar neste ícone. Certifique-se de ter dito que a visibilidade não é testável Não bloqueie nada. Sim, vamos continuar com a próxima. 99. 11.01 Adicionando o medor do mouse à loja: Tudo bem, agora é hora adicionar algo com o cursor do mouse. Até agora temos trabalhado com os itens, mas agora vamos fazer algo com o cursor do mouse. Agora, você clica no inimigo e causa 15 de dano por clique. Isso é bom. No entanto, sempre que você avança nos níveis, digamos que temos esse clicker automático e progredimos nos Você percebe que os inimigos ganham muito mais saúde do que antes. 15. Na verdade, os danos não afetarão muito eles, especialmente se estivermos, por exemplo, no nível 20, precisarmos melhorar o dano do cursor. Vamos seguir em frente e fazer isso. Mas primeiro temos que adicionar o item de clique à loja para que possamos comprá-lo e atualizar o cursor. Vamos fazer isso primeiro. A propósito, você pode tentar fazer isso sozinho, se desejar. Essa é uma prática muito boa. Vamos tentar fazer isso juntos. Se você não tiver certeza de como adicionar um, vamos abrir as enumerações. E lembre-se de que temos todos os itens listados aqui. Vamos adicionar uma nova enumeração e chamá-la de um clique do mouse Vou apenas adicioná-lo como o primeiro item porque quero que ele fique no topo. Este é o clique do mouse. Vamos fechá-lo. Em seguida, precisamos ir para a tabela de dados. Abra suas planilhas do Google mais uma vez , aqui, vamos abrir as informações do item. Eu quero adicioná-lo como o primeiro item. Vá em frente e chame isso de clique do mouse. Clique aqui também. Agora, para a miniatura que forneci nos materiais do curso, se você voltar aos ativos, aos objetos e às texturas aqui, forneci os materiais internos do Se você acessar objetos, use este cursor para importar este, clique com o botão direito do mouse sobre ele, converta-o ou aplique papel nas configurações. Agora, para isso, clique com o botão direito e transforme-o em um sprite de sprite E arraste-o para os objetos aqui. Agora clique nos objetos. Agora temos esse sprite configurado. Vamos salvar tudo isso. Vamos voltar para a tabela de dados. Agora, para a miniatura, vamos para as texturas, clique com o botão direito do mouse, Para essa edição de miniatura, o item é chamado de clique do mouse para o Essa é a enumeração. Lembre-se de adicioná-lo à enumeração. Também precisamos de uma cláusula para isso porque precisamos gerá-lo no chão Na verdade, vamos ver as plantas e fazer isso. Agora, se eu for para Itens e for para a base do item, posso clicar com o botão direito do mouse na base do item, Criar um plano secundário Claus Chame isso de clique do mouse. E vamos abri-lo. Vamos clicar nos componentes de renderização e adicionar o único sprite no cursor Compile e salve. Lembre-se de que também adicionamos os nomes dos itens para cada item. Aqui você pode ver o nome do item, escrevemos isso, lembre-se, para cada item. Então você tem que escrever isso, caso contrário, ele não será lido na tabela de dados. Lembre-se de clicar nos padrões da classe aqui. Vamos chamá-lo de clique do mouse. O mesmo que você o chamou dentro da tabela de dados. Agora criamos isso e, para obter uma referência a ele, assim como antes, vamos copiar este. Cole aqui. Vou apenas renomear essa pena clara para clicar no mouse E esse também. Clique com o mouse. OK. Agora, para o sprite, novamente, vamos aos objetos ativos Podemos clicar com o botão direito do mouse nesse sprite e copiar a referência colada Agora temos que definir quanto custa. Digamos que custe talvez dez ou algo parecido. Sempre podemos alterá-lo mais tarde. Agora vamos clicar em Arquivo, baixar, baixar o arquivo CSV novamente. Agora vou arrastá-lo para a pasta de tabelas de dados. Novamente, arraste-o e vá em frente e salve tudo. Apenas certifique-se de que todas as informações estejam corretas aqui. Tudo parece bom. Agora, se eu clicar em Jogar, posso ver meu clique do mouse. E eu também posso ver isso aqui, eu posso clicar em Por. No momento, está dizendo zero para o custo desse item. Algo está errado aqui. Lembre-se de que, aqui nas informações do item, na verdade não estamos mais usando esse custo de moedas. Não nos confunda mais. Vamos também acessar as informações do item e remover o custo das moedas daqui. Vá em frente e salve tudo agora vamos garantir que o removamos da tabela de dados. Clique com o botão direito do mouse e exclua a coluna, aqui também está. Vamos ver o custo dos itens agora, porque é aqui que realmente temos o custo. Vamos alterá-lo. Deixe-me clicar com o botão direito aqui e adicionar uma nova coluna à direita. Ligue para isso, clique com o mouse aqui. Basicamente, digamos que comece com 18, só porque eu quero um número diferente de todos os outros, digamos que seja igual a isso um vezes 1,2. Vamos arrastá-lo até o Obviamente, isso vai exigir muito trabalho no design de jogos se você quiser que todos esses números façam sentido, mas por enquanto estamos apenas testando. Vou apenas baixar esta tabela de dados de custos dos itens aqui no motor. Vamos importá-lo novamente. Vá para tabelas de dados, importe o custo dos itens. Agora não é possível encontrar a propriedade do clique do mouse no custo ST. Vamos realmente dar uma olhada nisso juntos. Se eu clicar em OK, vou para o custo do STM. Se eu vou para a interface do usuário, na verdade, para a estrutura, abro o custo do item. Isso ocorre porque estamos perdendo essa variável aqui dentro. Deixe-me adicionar um novo. Chame isso de clique do mouse, transforme-o em um número inteiro Basta arrastá-lo até aqui. E vá em frente e clique em Salvar tudo. Agora, o custo desse item também. Lembre-se de que, no player, se eu for até o player, temos uma função chamada, mas custa. Se eu clicar nele, teremos que vinculá-los, caso contrário, não funcionará como antes. Vá em frente e conecte-os. Compile se quiser ter certeza de que não perdeu nenhum outro lugar Além disso, clique com o botão direito do mouse neste item Custo, vá em frente e clique em Encontrar referências, só para ter certeza. E clique no pequeno ícone, e isso mostrará todas as referências que você usou para ele. Clicando neste, nós realmente não fizemos nada aqui. Tudo deve funcionar bem. Agora vamos voltar às tabelas de dados e vou reimportá-las, para que fique correto assim. Agora está tudo bem. Agora vamos clicar em play. Agora, meu motor travou e geralmente acontece que, às vezes, quando você edita coisas dentro de uma estrutura e tenta clicar em reproduzir, ela trava Mas quando você abre pela segunda vez, deve funcionar. Agora, se eu clicar em Jogar e às vezes você puder ver coisas assim, você pode realmente corrigir isso. Às vezes, ele precisa ser atualizado. Se você abrir o controle de reprodução e clicar no arquivo, atualizar todos os nós e clicar em reproduzir novamente, ele deverá funcionar Não sei por que isso acontece , às vezes também acontece com meus outros jogos. Mas você pode sair e atualizar e funciona muito bem. Ok, agora você pode ver que o clique do mouse está funcionando bem. E se eu comprar mais e mais , também está funcionando bem. Está me mostrando o preço. Agora precisamos adicionar um ponto de amplitude para esse clique do mouse. E vamos fazer isso na próxima lição. 100. 11.02 Adicionando o ponto de spawn do medor do mouse: Para adicionar o mouse. Então, ponto de desova, vamos fazer isso aqui Vamos abrir os pontos de desova. Agora temos os pontos de geração desse item, então não precisamos realmente criar filhos, lembre-se de que usamos apenas este Podemos clicar no primeiro e garantir que seja um clique do mouse. É por padrão porque reorganizamos a enumeração Ao clicar com um clique do mouse , abra sua enumeração e certifique-se de que tudo esteja correto Acredito que um deles esteja errado porque ainda temos dez e temos o clique do mouse como um deles, falta um desses itens. Apenas certifique-se de clicar em todos eles e verificar se estão corretos. Na verdade, vou copiar este aqui. Deixe-me ter certeza de que está à mesma distância de todos os outros e é assim. Eu me certifico de que este seja um clique do mouse. A próxima é uma pena clara. E basta examiná-los aqui. O próximo é Torch e assim por diante. Ok, agora eles estão na ordem correta. Vá em frente e salve todos eles quando estiverem. Agora, se você clicar em jogar e tentar gerá-lo, ele não aparecerá Lembre-se de que definimos algumas das quais precisamos cuidar. Se você abrir o modo de jogo e lembrar do que fez com os pontos dos itens, criamos essa função aqui chamada definir itens em pontos e obter pontos de itens. Vamos abrir este, Definir pontos de itens. Precisamos criar um para os cliques do mouse. Vou duplicar este. Vou chamá-lo de pontos de clique do mouse. Vá em frente e adicione-o aqui. Vamos garantir que não tenhamos mais nada. Vamos compilar. Vamos até Obter itens, fixar pontos também. Deixe-me copiar e colar isso aqui. Exclua este e, em vez disso , adicione os cliques do mouse. Vá em frente e conecte-se. Compilar. Eu acredito que deveria ser isso. Clique neste, você pode ver que está funcionando corretamente, assim como os outros itens. Agora isso está funcionando muito bem. Agora, há um problema com isso, porque ele não deve mostrar zero DPS e também não deve mostrar nenhum DPS no momento O problema com este é que, no momento, o mouse não causa realmente dano por segundo, o mouse causa dano por clique. Em vez de mostrar dano por segundo, precisamos mostrar dano por clique. No momento, está dizendo zero DPS porque, nas informações do item, não especificamos quanto dano por segundo ele deveria Por exemplo, você poderia dizer cinco. E se eu clicar em Play, você pode ver que diz cinco. Mas, novamente, não estamos realmente interessados em danos por segundo, estamos mais interessados em danos por clique. Então, vamos seguir em frente e corrigir isso como a próxima coisa. 101. 11.03 Exibindo o texto de dano corretamente: Para que o texto seja exibido corretamente? Obviamente, precisamos acessar a interface do usuário agora e dar uma olhada na dica de ferramenta. Vamos entrar aqui. Vamos abrir o DPS agora apenas para garantir que o texto seja exibido corretamente Agora, quanto aos danos, vou escrever algo como 40 para ter certeza que estou vendo é falso ou estático. I. Estou me certificando de que, ao clicar em jogar, estou realmente vendo a coisa real aqui apenas para ter certeza de que não tenho uma era. Agora, aqui no gráfico, precisamos ter certeza de que diz que, para o mouse, cada clique do mouse causa cinco pontos de dano por clique. E atualmente está causando, por exemplo, cinco de dano por clique em vez de DPS No primeiro texto, lembre-se de como eles são chamados. O primeiro é chamado, fornece DPS e o segundo fornece a quantidade de DPS Agora, essa, na verdade, não precisamos mudar, só precisamos dar a quantidade de DPS e, fazendo a quantidade de DPS , vamos voltar Este fornece a quantidade de DPS. Em vez de dizer isso, vou desconectá-lo Vou direcionar a partir daqui e dizer Selecionar. Agora precisamos usar um nó de seleção. Agora, o que vamos selecionar? Vamos selecionar se isso é um clique do mouse ou não. Lembre-se de que temos as informações do item aqui. E se eu simplesmente esconder essa miniatura porque não precisamos dela Mas eu mostro este item que podemos arrastar daqui e dizer enum igual, igual se for igual a um clique do mouse e conectá-lo aqui embaixo Agora, o que podemos dizer é que lembre-se de que precisamos usar um formato de texto. Novamente, vou arrastar aqui e dizer formatar texto. Também vou usar um aqui embaixo, formatar texto. Agora, para este, se não for um clique do mouse, ele deve dizer a mesma coisa que disse antes. Vá em frente e cole em Enter para ver isso. Agora, esse é o valor do DPS, assim como antes. Na verdade, vou arrastar isso de volta para aqui e, na verdade, vou afastar isso para ter um espaço como este. Agora, para este, se é verdade que é um clique do mouse, o que eu quero dizer aqui é que, em vez de DPS, digamos apenas os valores dos danos Digamos que danos por clique. Agora vou dizer dano por clique. Basicamente, o dano per é esse DPS aqui. Neste DPS, podemos escolher definir a quantidade de dano que ele deve causar ou causar sempre que você compra na loja Se eu apenas compilar e voltar à minha tabela de dados apenas para ter certeza de que está correta, abra as informações do item que realmente não custam o item Só vou dizer que isso me causa 25 de dano cada vez que eu atualizo. E também certifique-se de acessar suas planilhas do Google e alterá-las aqui, caso contrário, estará errado. Toda vez que você importar essa tabela, verifique se ela é, por exemplo, 25 aqui. Agora, dentro daqui, vamos voltar para a dica de ferramenta e continuar Isso deve estar correto. Eu posso deletar este e posso empurrar tudo para o lado para que eu possa exibi-los. Tudo bem. Eu apenas reorganizo as coisas bem Agora isso está correto. Agora vamos continuar. A próxima coisa é essa mensagem de texto fazendo DPS. Antes de você poder arrastar a partir daqui e dizer Selecionar. Então, pouco antes de formatar para o primeiro, formate o texto, formate o sexo para o segundo. Novamente, ele deve escolher se é o clique do mouse ou não. Vou arrastar isso para cá, como antes. Se não for o clique do mouse, vamos adicionar esse que tínhamos antes. Nós não mudamos isso agora. No entanto, se for o clique do mouse, o que queremos dizer é a quantidade total de danos aqui. Por exemplo, essa é a quantidade total de danos. Este basicamente dirá que atualmente está causando, por exemplo, 60 de dano. Você também pode chamar isso de dano por clique se quiser permanecer consistente. Vamos chamar isso de dano por clique. Agora, quanto ao dano, não é realmente esse DPS que adicionamos aqui, mas é mais correto adicionar a variável de dano do cursor Lembre-se de que, dentro do player, se eu voltar, isso foi há muito tempo. Na verdade, desde o início do curso, criamos esse flutuador de dano do cursor aqui, podemos realmente adicionar este Volto à dica da ferramenta, já temos o player, se eu conseguir arrastar do player e dizer dano ao cursor. Agora podemos adicionar isso aqui e deve funcionar bem. Novamente, vou deletar este para esse número. Novamente, conecte-o aqui para que não esteja errado. Isso era o que tínhamos antes. Eu só vou reorganizar as coisas bem. Tudo bem, faça isso e vá em frente, compile e salve tudo isso Vamos clicar em Jogar e ver o que acontece se eu passar o mouse sobre ele. Diz que cada clique do mouse causa 25 de dano por clique. Você também pode chamá-lo de DPC, acredito que seja um termo, na verdade, em vez de DPS, você pode chamar de DPC por danos por clique se comprar Você pode ver que não está realmente dizendo nada e isso é porque não o estamos atualizando como todos os outros que estamos fazendo. Na verdade, essa é a próxima coisa que temos que fazer. Precisamos atualizar o que está sendo feito atualmente, porque na verdade está causando 25 de dano por clique. Mas você não pode vê-lo porque não está atualizando o texto abaixo dele Você não está atualizando essa variável de dano do cursor. Vamos para a próxima lição e fazer isso. 102. 11.04 Atualizando o dano do medidor do mouse: Agora é hora de atualizar o mouse ao clicar em jogar e comprar. o clique do mouse aqui, você pode ver que está causando danos automáticos, que não deveria acontecer porque o clique do mouse é basicamente onde você clica no inimigo e deve causar mais danos Vamos continuar e melhorar o dano do mouse em vez do DPS automático Vamos encerrar isso. E fizemos isso dentro do player. Se você abrir o player e voltarmos ao gráfico do evento, se quiser dizer organizar, você sempre pode clicar com o botão direito do mouse aqui e fechar as abas à direita para que não precisemos ver tudo isso Quando compramos o M, lembre-se que o que fizemos anteriormente foi atualizar o DPS total, que era essa função aqui dentro Em vez de atualizar o DPS total quando compramos um clique do mouse, vamos realmente fazer isso aqui Em vez disso, queremos atualizar o mouse. Aqui está a direita nas funções, podemos clicar no sinal de mais. Vamos criar uma nova função chamada aumentar o dano do cursor. A única coisa que ele vai fazer aqui na entrada adicionar um flutuador e chamar isso de dano a adicionar Vamos reduzir o dano no cursor que criamos anteriormente. Vamos adicionar mais o dano que queremos adicionar. Então, vamos colocá-lo de volta nessa variável. Então, agora temos esse novo dano no cursor. Essa é basicamente a função dessa função aqui, é que ela apenas adiciona a quantidade de dano que queremos adicionar ao dano do cursor e a define aqui como um novo valor. Vamos voltar ao gráfico de eventos e usar esse para aumentar o dano do cursor em vez do DPS total do mouse Agora, para saber se é do mouse que estamos falando ou não, lembre-se que aqui na estrutura do item, podemos clicar nas informações do item e ocultar tudo por enquanto. Aqui no item, lembre-se que na enumeração fizemos a enumeração de cliques do mouse, eu vou fazer, clique aqui e vou arrastar a partir daqui E então eu vou dizer enumeração igual, igual. E então vá em frente e selecione este mouse, clique aqui. Se essa enumeração for igual ao clique do mouse, se esse item do qual estamos falando for igual ao Da forma como sabemos que, dentro da tabela de dados, é aqui que você define suas informações. Se você abrir as informações do item e abrir o clique do mouse, lembre-se de que definimos o item como um clique do mouse aqui, para que ele saiba o que você escolheu. Se você selecionou algo errado aqui, você receberá um erro se o item aqui for um clique do mouse e pudermos arrastar a partir daqui e , em seguida, criar uma ramificação. Agora vou adicioná-lo. Depois de gerar o item, na verdade vou desconectar este E vamos arrastá-los até aqui. Agora, antes de atualizarmos a interface do usuário, porque precisamos fazer isso antes de atualizarmos a interface, a interface do usuário é atualizada corretamente. Precisamos adicionar as informações, geraremos o item e, em seguida, conectaremos essa ramificação Ok, este é o clique do mouse. Se o item for o clique do mouse, queremos aumentar o dano do cristal. Caso contrário, queremos atualizar o DPS total. Em seguida, lembre-se de conectá-los novamente aqui. Se você quiser ficar um pouco mais organizado, você sempre pode clicar duas vezes neste em um nó de rota traseiro como este. E você pode pegar isso e conectá-lo aqui, para que fique melhor. Agora, queremos adicionar o dano que queremos adicionar aqui. Vamos pegar o DPS. Se eu clicar aqui, clico no DPS e posso arrastá-lo até uma função como essa Novamente, vou criar alguns nós de rota traseira para ele. E assim, ok, agora temos o DDPS bloqueado Agora, toda vez que atualizarmos o clique do mouse, vamos adicioná-lo ao aumento do dano do cursor em vez do DPS total . Agora, se eu compilar e clicar em jogar e atualizar aqui, agora você pode ver que minha interface de usuário está ou está sendo atualizada corretamente Se eu clicar no inimigo, ele também está causando a quantidade correta de dano. Se eu clicar nele, diz 65. Se eu atualizar novamente, ele diz 90. Eu atualizo novamente algumas vezes. Diz 240, e deveria dizer agora 340. E você vê que está causando a quantidade correta de dano. Agora terminamos de atualizar o cursor. 103. 11.05 Como criar o widget de mouse: Para torná-lo um pouco mais interessante, vamos mudar o cursor do mouse porque você pode ver que temos o cursor normal do mouse do Windows. Mas vamos transformá-lo em outro ícone, para que pareça um pouco melhor fazer isso. Apresentei aqui os materiais de custo, dei alguns cursores de mouse que eu realmente usei no Farm Tail, mas podemos usá-los agora Aqui, vamos para a interface do usuário e para os ícones. Vamos apenas arrastar esses ícones até aqui. Agora você não precisa aplicar papel a essas configurações porque não são os lotes de pixels. Vamos voltar para a interface do usuário. E vamos clicar com o botão direito aqui, criar novos widgets de interface de usuário Vá em frente e clique aqui. Vamos chamar isso de cursor de mouse. Vamos abri-lo aqui dentro. O que eu quero fazer primeiro é adicionar um painel de tela. Vamos arrastar isso para baixo. A única coisa que queremos adicionar é uma imagem. E esse será o cursor. O que vou fazer de novo clicar aqui e dizer desejado na tela para esta imagem. Podemos dar um tamanho. Agora, o tamanho da imagem depende do tamanho do cursor do mouse. Se eu for até os ícones e der uma olhada no cursor do mouse, é 93 vezes 101. Então, vamos escrever isso, 93.100.1 Como você pode ver, o tamanho da imagem Isso ocorre porque você precisa clicar em Tamanho para conteúdo e agora ele estará correto. Ok, isso está correto. Agora, o que queremos fazer é centralizá-lo também na tela. E não estando aqui em cima, vou mudar a âncora para o meio E eu vou escrever 00 aqui no x e y. E não queremos escrever 0,5 nos alinhamentos porque o mouse realmente vai clicar no meio dessa tela Isso está correto até agora. Clicando nesse widget, vamos mudá-lo para o cursor E esse é o padrão. O cursor do mouse aqui. E vamos compilar e salvar. Acredito que temos que diminuí-lo porque será muito grande no jogo. Mas temos que testá-lo primeiro, antes de sabermos. Além disso, para esta imagem, quero configurá-la para não ser testável, para que não afete o jogo Agora está pronto para ser usado. Vamos voltar ao controle do player. Dentro do controle do player, assim como trabalhamos com a interface do usuário anteriormente, queremos trabalhar com este aqui no player inicializado Agora, não vamos abrir e fechar um widget aqui. Não faz sentido creditar aqui. Em vez disso, vamos adicioná-lo ao player inicial. Vou apenas copiar esses widgets. E vamos procurar o cursor do mouse. Vamos atacar clique aqui. Promova isso para uma variável e chame-a de cursor do mouse. Agora, se você arrastar a partir daqui, basta pesquisar o mouse e ver algo chamado Definir widget do cursor do mouse Essa é uma função padrão dentro do Unreal Engine. Se você clicar nele, o que você quer fazer aqui é basicamente selecionar Padrão. Esse será nosso cursor padrão. Agora definimos que esse widget acabamos de criar agora é o cursor padrão Se você clicar em jogar, agora você pode ver que este é o mouse. Podemos usá-lo para clicar e você pode ver que é muito preciso. Agora vou empurrá-lo um pouco para cima, porque, como você pode ver, ele está clicando um pouco para cima Se voltarmos ao widget, agora acho que vou torná-lo um pouco menor, porque talvez seja muito grande. Vamos voltar e consertar isso. Vamos voltar para a interface do usuário, abrir o cursor. Você sempre pode clicar aqui e dizer, por exemplo, menos cinco aqui, menos cinco Menos cinco inter também. Acho que vou dizer menos cinco novamente aqui, menos cinco. Se eu clicar em play e dar uma olhada, acho que pode ser um pouco menor. Novamente, menos dez, talvez menos dez aqui. Clique em jogar. Acho que está muito melhor agora. Agora, se você quiser empurrá-lo para cima, você sempre pode ajustar a posição no X e Y. Se você escrever cinco, na verdade, é menos cinco para ir para o Digamos que menos cinco por menos cinco. Isso é muito melhor. Você pode, novamente, tentar ajustar isso da melhor forma possível aqui quando estiver satisfeito. Agora, esse é o mouse que temos. Agora também precisamos de um evento de clique, porque, como você pode ver quando estamos clicando, ele não está realmente produzindo outro efeito. E acho que podemos torná-lo um pouco melhor com um efeito de clique. Esse é o outro cursor que importamos. Isso é o pressionado, OK, então se voltarmos aqui agora, eu defino essa posição x para menos oito e menos cinco para torná-la um pouco melhor Agora, quando estiver pronto, vamos ao gráfico e interferir. Vamos deletar tudo isso. criar um novo evento personalizado. Vamos criar um novo evento personalizado e vamos chamar isso de uma imagem de conjunto. O que queremos fazer aqui, na verdade, quero uma nova enumeração Se você acessar o plano e abrir as enumerações, clique com o botão direito do mouse e faça uma nova Basicamente , isso conterá uma lista dos estados do mouse pressionado. Se eu apenas chamar seu estado, eu o abro, na verdade, darei um S aqui no final. Agora, aqui para os estados do cursor do mouse, poderíamos ter um cursor de mouse padrão, poderíamos pressionar o cursor do mouse. Agora temos esses dois estados. Se eu voltar agora para o widget e adicionar isso como entrada, vamos pesquisar os mouses e selecionar essa enumeração Vou chamá-lo de Moussa declara o objetivo aqui. O que estamos tentando fazer é mudar essa imagem dependendo se pressionamos ou não. Vou chamar essa imagem de cursor do mouse. Vamos configurá-lo como variável para que possamos alterá-lo no código. Se eu voltar aqui, arrasto isso e digo definir pincel a partir da textura. Agora, a textura depende do que temos como estado do cursor do mouse. Se eu simplesmente arrastar daqui e disser selecionar, e eu selecionar esse nó aqui, podemos arrastá-lo para o índice. Agora, se for o estado padrão, isso é o que escrevemos dentro da enumeração Se for o estado padrão, quero selecionar esse cursor do mouse. Se estiver no estado pressionado, quero selecionar esse cursor do mouse aqui. Agora podemos usar essa imagem definida, dependendo do que estamos fazendo no jogo. Lembre-se de pressionar os botões. Fizemos isso dentro do player. Se eu voltar para o jogador, vou para o gráfico de eventos, está correto. Agora precisamos encontrar o evento que usamos sempre que clicamos no inimigo. Agora, na verdade , não criamos um porque até agora o que temos feito está dentro do inimigo Temos esse evento de clique aqui. Isso aqui em cima clicou no componente da cápsula. Na verdade, não fizemos um evento aqui. Sempre que clicamos com o mouse, na verdade também precisamos fazer isso. Para fazer isso, temos que trabalhar com insumos. Vamos fazer isso na próxima lição. 104. 11.06 Adicionando a entrada de clique do mouse: Tudo bem, para finalizar, temos que adicionar uma entrada do mouse para sempre que clicarmos com o mouse para que possamos alterar a imagem. Para fazer isso, precisamos adicionar uma entrada para o player. Se eu apenas escrever, clique aqui e crie uma nova pasta, e eu vou chamá-la de Player. E arraste isso até aqui. Dentro deste Player, vou escrever, clicar e criar uma nova pasta novamente, chamada de Entrada. E vamos entrar nessa pasta, clicar com o botão direito do mouse na entrada aqui. Se você nunca trabalhou com ele antes, é aqui que você adiciona as teclas do teclado e assim por diante. Então, sempre que você entra em um jogo de RPG e assim por diante. Então, basicamente, apenas a entrada para o teclado, mouse e pads Vamos primeiro criar um contexto de mapeamento de entrada. Isso é o que você tem que fazer. Vamos chamar isso de IMC Para o contexto de mapeamento de entrada, você pode simplesmente chamá-lo de padrão. OK. Clique com o botão direito novamente. Entrada, e temos que criar algo chamado ação de entrada. Vá em frente e crie um. Vamos chamar isso de um clique do mouse, por exemplo, clique do mouse. Vamos abrir esse. Agora, dentro daqui, o que precisamos fazer é basicamente nada. Vamos encerrá-lo, porque basta clicar com o mouse e algo deve acontecer, então não precisamos realmente fazer nada aqui. Vamos abrir o contexto do mapeamento de entrada. Dentro daqui, temos que clicar no sinal de mais. Agora, ao clicar no sinal de adição, você precisa adicionar uma ação de entrada. Isso é o que acabamos de criar, chamado de clique do mouse. Para essa ação de entrada, você precisa atribuir um botão. Agora, para este, vou clicar aqui. Em seguida, clique com o botão esquerdo do mouse. E ele o atribuirá automaticamente. Também o encontre aqui se você apenas pesquisar o mouse e ver que pode selecionar todas essas coisas aqui, mas já as temos aqui. Botão esquerdo do mouse. Vou clicar aqui nos gatilhos, vou clicar em Mais e selecionar o chamado pressionado A razão pela qual eu faço isso é que, se você não fizer isso, você clicará várias vezes. Na verdade, vou te mostrar que se eu excluir isso por enquanto, podemos simplesmente deixá-lo e voltar a ele. Agora temos que adicionar isso ao player. Se eu voltar para o player, eu abro o player, temos que adicionar o contexto de mapeamento de entrada aqui. Antes de funcionar, vamos fazer isso antes de atualizarmos a quantidade de ícones e danos e assim por diante. Então, vamos fazer isso aqui dentro. O que podemos fazer é precisar do controlador do player. Na verdade, vou usar este controlador de player, você pode pesquisar por aprimorado, você vê este chamado subsistema Enhanced Input Local Player Vá em frente e selecione isso antes de prosseguirmos e trabalharmos com ele. Sempre direcione a partir daqui e diga que é válido, pois às vezes ocorre um erro quando não foi carregado e você está tentando mover o player ou tentar realizar algumas ações de entrada. Vá em frente e selecione é válido primeiro. Sempre que for válido, podemos arrastar a partir daqui e dizer insira este. Adicione contexto de mapeamento, vá em frente e selecione. Em seguida, para o contexto de mapeamento, selecione o que você acabou de criar. Agora, deve funcionar bem para testar se isso está realmente funcionando ou não. Você pode simplesmente ir aqui e escrever, clicar e pesquisar o nome da ação de entrada que você criou. Eu criei o chamado clique do mouse. Vá em frente e selecione-o. Vou apenas imprimir uma string na tela. Compilar. Se eu clicar aqui, você pode ver que diz olá. Se eu clicar com o mouse, ele diz olá. A razão pela qual precisamos adicionar um gatilho pressionado para a ação de entrada é porque você pode ver se eu mantiver o mouse pressionado para enviar spam para esse código que eu escrevo aqui. E não é isso que queremos. Se eu voltar ao contexto de mapeamento de entrada e aos gatilhos, clico no sinal de adição e adiciono esse estado pressionado O que a pressão significa é que ela só tocará o código uma vez sempre que eu clicar aqui. E esse código será reproduzido se eu escrever uma sequência de caracteres impressa novamente e clicar em reproduzir. Agora, se eu segurar o mouse, você pode ver que não vai enviar spam. Só vai dizer isso uma vez. Toda vez que eu clico, vou clicar várias vezes. Agora você pode ver que ele só vai imprimir uma letra baixa sempre que eu clicar no mouse e vai imprimir apenas uma vez. Isso é apenas para otimização, para que você não jogue repetidamente. Agora podemos realmente usar essa ação de entrada. Deixe-me adiantar tudo isso. Deixe-me adicionar este aqui embaixo. Agora podemos usá-lo para mostrar o cursor do mouse. Lembre-se de que o cursor do mouse está dentro do controle de jogo. Novamente, vamos usar o controle de jogo. Vamos acompanhar a partir daqui, vamos pesquisar o widget que criamos Se você pesquisar por mouse e ir até a parte inferior, é sempre aqui que estão suas variáveis. Criamos esse cursor de mouse B dentro daqui. Se você não se lembra, nós apenas voltamos a relembrar. Acesse o gráfico que criamos. Isso é chamado de definir imagem do cursor do mouse. Se eu for até o player, arrasto e digo definir mouse por imagem. Sempre que for acionado, vamos configurar o P a ser pressionado. Agora, em vez de apenas fazer isso, temos que fazer duas coisas. Sempre que for concluído e sempre que for acionado. Sempre que for acionado, vamos configurá-lo para pressionar, e vamos copiar e colar. E arraste isso para o alvo sempre que estiver concluído. Vamos fazer o padrão, vamos realmente ver o que acontece. Fp, você pode ver que está realmente funcionando, mas está sendo acionado muito rapidamente Isso ocorre porque está acionando isso aqui. Mas sempre que for concluído, o que acontece quase imediatamente, ele será configurado como padrão novamente. Isso é realmente o que está acontecendo. É por isso que está assim. Agora, para corrigir isso, vamos voltar ao contexto de mapeamento de entrada aqui. Vamos adicionar novamente outro. Vamos adicionar a mesma coisa. O botão esquerdo do mouse, clique aqui. Clique com o botão esquerdo do mouse no teclado ou com o mouse nos gatilhos Clique no botão agora, em vez de pressionar apenas aqui. Também precisamos selecionar Lançado. Vá em frente e faça isso. Salvar. Vamos voltar para o jogador. Na verdade, você não precisa fazer nada. Está correto Se eu clicar em jogar, agora você pode ver se eu clico, eu libero. Agora isso está correto. Isso é Do the mouse. Agora você pode ver que ele tem um efeito mais frio com o mouse quando mudamos o cursor para este em vez do padrão E também temos os estados pressionados. Agora, no futuro, se você quiser adicionar mais estados de widget do mouse, novamente, você terá que entrar na enumeração, nas plantas e adicionar os Em seguida, lembre-se de acessar a interface do usuário, abrir o cursor do mouse e, também no gráfico, lembre-se de selecionar as imagens corretas que você deseja usar aqui. 105. 12.01 Criando o mapa final: Tudo bem, agora é hora de desenhar o mapa. Então eu clico em Play. Tudo está indo bem. Temos o nível, temos a loja, temos as moedas, temos o cursor do mouse. Mas agora, na verdade, também vamos projetar o nível em si. Agora vou fazer isso no meu próprio tempo, mas só para lembrar que temos que ir aos ativos e aos ambientes. Aqui temos essa prisão de gemas com mapas de blocos que criamos anteriormente. Lembre-se de que você pode alternar entre as configurações de blocos aqui. Você tem os adereços. Se você deseja adicionar alguns adereços, por exemplo, este, você pode clicar nele Ou você pode clicar e arrastar aqui e selecionar os dois. Você pode adicioná-los aqui. Lembre-se de trabalhar com a camada frontal, camada base e as decorações. Você sempre pode criar mais camadas se desejar, porque se você apenas pintar na camada base aqui, seus ladrilhos serão excluídos. Portanto, você precisa criar uma nova camada e adicioná-la para poder adicioná-la à frente. Se você quiser isso na parte de trás, você sempre pode clicar nessa seta. Agora está embaixo dos ladrilhos, então você não pode vê-lo. Vou deletar este por enquanto. O que vou fazer agora é basicamente aumentar o tamanho do mapa, que é a largura e a altura do mapa. Por exemplo, você pode escrever algo como 50 por 50 ou o que quiser. Talvez seja muito grande, mas tente encontrar a largura do mapa adequada para você. O problema é que estamos tentando evitar todo esse espaço preto ao lado, apenas fazer com que caiba mais. Você só precisa adivinhar, por exemplo. Você pode simplesmente criar um mapa maior e tentar adicionar algo assim. E se você clicar em Play, sempre poderá ver aonde ela chega e depois saber onde parar aqui. Mas, basicamente, vou aumentar esse mapa apenas para evitar o espaço preto. Nós realmente não precisamos fazer mais nada. Basicamente, basta aumentar o mapa, tentar trabalhar com as camadas. Vá em frente e selecione o bloco. Tente pintar o mapa como quiser. Agora, tendo em mente que você tem todos esses pontos de desova para esses itens, você sempre pode, por exemplo, apenas uma ideia, criar salas para esses itens ou criar um buraco para esses itens Basicamente, fazer com que esses itens se encaixem no jogo, assim como esse inimigo surgindo talvez no meio É o centro das atenções deste jogo. Basta projetá-lo da melhor maneira possível. Não há realmente nenhuma regra aqui. Vou projetá-lo da melhor maneira possível. Apenas tente jogar com tudo isso. Talvez tente jogar com o canto. Veja como eles trabalham juntos. Por exemplo, isso com este, como este e este aqui. Basicamente. Tente o melhor que puder para criar o mapa e eu voltarei com você. Tudo bem, agora estou de volta. Passei cerca de 30 minutos tentando criar este mapa. Como você pode ver, eu desenhei o mapa. E aqui está. Acabei desenhar o mapa dentro do mapa de blocos. A largura e a altura do mapa são 50. Acabei de adicionar algumas peças aleatórias. Basta projetar o mapa como quiser. Realmente não importa como você o projeta, isso realmente não afetará nada neste curso. Tente ser o mais criativo possível e divirta-se com isso quando terminar. E você pode ver aqui, eu também movi os pontos de geração do item para que fiquem no chão aqui Sempre que eu compro algo, ele realmente vai aparecer dentro dessa coisa aqui Agora posso aumentar a quantidade de itens da linha que ela pode gerar aqui Talvez eu queira aumentá-lo. Vamos tentar fazer isso. Vamos ver a planta E fizemos isso dentro do modo de jogo. Se eu abrir o modo de jogo, vamos ver aqui temos essa função de definir pontos de itens. Dentro dessa função, tínhamos algumas variáveis locais. Aqui, a quantidade local de linhas é duas. Eu queria ficar dois. Agora podemos ter o último índice do loop local. Essa é a quantidade de itens. São dez itens. Porque vale, lembre-se de 0 a 9, são dez itens, eu, vamos tentar adicionar três a ele Vou comprar alguns itens. Parece que está aqui. E agora está se encaixando no mapa. É com isso que eu vou escolher. Este é meu mapa atualmente. Além disso, quero aumentar um pouco o cronômetro porque acho que é muito pequeno e é um grande foco no jogo. Vamos encerrar isso. Vamos para a interface do usuário. Abra. Vamos ver aqui, a interface principal aqui. Vamos clicar no texto. Em vez de 28, vamos talvez escrever 36 e, para o ícone, temos que aumentá-lo, talvez 60 por 60. Em vez disso, vamos clicar em play. Acho que é muito melhor porque ainda é o foco principal. Podemos até aumentá-lo ainda mais, talvez 40, e este é 60, 64 por 64. Por exemplo, clicando em play, é assim que parece. Acho que isso é muito melhor porque é, novamente, o foco principal do jogo. Tudo parece bom. Agora, se você quiser mudar alguma coisa no jogo aqui, basicamente, você sempre pode entrar aqui e ajustar as coisas. Mas eu gosto do jeito que está agora. Eu gosto de tudo sobre isso. Você pode até aumentar o nome e a saúde, se desejar. Na verdade, vou fazer isso um pouco, só para que possamos ver melhor. Clicando aqui, em vez de 28, vou escrever 32 para a ligação. Vou escrever 55, 55 também para a saúde. Em vez disso, vou clicar em Health 32. Compile o com Play. E agora você pode ver que é muito maior e é novamente o foco do jogo. Por isso, é sempre bom ter essa interface de usuário maior. Ok, agora vamos continuar com a próxima. 106. 12.02 Preparando as dicas de som: Tudo bem, agora estamos em um estágio em que podemos adicionar alguns efeitos sonoros ao jogo e também música. E isso tornará o jogo muito melhor. Os efeitos sonoros adicionam quase metade da experiência do jogo. Você pode ver que, apesar de termos feito um jogo divertido, ele ainda é chato sem nenhum som E sim, vamos adicionar alguns efeitos sonoros e torná-lo mais interessante. Agora, na pasta de conteúdo, vou escrever, clicar e criar uma nova pasta chamada Áudio. E dentro daqui, vamos entrar aqui. Nos materiais de custo, incluí todos esses efeitos sonoros para você nos materiais de custo. Vá em frente e abra a pasta SFX. Tudo isso, vá em frente, selecione-os e arraste-os para a pasta de áudio. Quando você os arrasta para dentro, você vê tudo isso e, a propósito, muitos deles estão muito altos. Não clique em reproduzir agora, senão seus tímpanos podem estourar Você sempre pode diminuir o som para isso, mas o volume deles é muito alto. O que queremos fazer é criar algo chamado pistas sonoras a partir delas Vamos começar com, por exemplo, essa chamada compra. Vamos escrever, clicar e criar Q para que você possa criá-lo aqui. O que eu costumo chamar é que eu excluo esse Q no final. E eu chamo isso de S C para som que. É chamado de sound que purchase. Agora vou clicar duas vezes nessa sonoridade. E aqui dentro, muito simples, podemos simplesmente diminuir o som. Vou escrever 0.2 e depois vou clicar em Play e ver se está alto ou faz notas. Esse é o som disso. Talvez eu possa fazer com que seja 20,4 algo assim Sempre podemos ajustar o som mais tarde, mas é isso que eu quero que você faça. Por exemplo, vamos dar outro exemplo, chamado FX punch, clique com o botão direito do mouse E eu crio uma fila disso novamente. Vamos chamá-lo de Sound Punch, abra-o mais abaixo O som talvez 0,4 Ainda está muito alto. Talvez ainda mais baixo. Como isso vai receber spam no jogo, talvez 0,1 ou 0,05, não sei, vamos descobrir Agora, um método para dar um soco aqui é o mesmo se você estiver clicando no inimigo Está ficando um pouco irritante como quando você ouve o mesmo som repetidamente. Para mudar isso, você sempre pode atacar a partir daqui. Você pode ver que não há muitas coisas que você possa fazer aqui, como nos gráficos de plantas que geralmente vemos Mas o que eu quero que você use é esse chamado modulador Vá em frente, selecione-o e conecte-o aqui. Agora, o que um modulador está fazendo é mudar o tom do som Se você clicar nele e alterar o tom mínimo para 0,9 e o máximo para 1,1, salve tudo. Agora, se você clicar em Reproduzir várias vezes, poderá ouvir que o som muda toda vez que você clica em reproduzir. Não é completamente o mesmo som. Está tentando regular ou alterar o tom mínimo e máximo. Isso é feito para este. Agora, se tivermos vários sons, por exemplo, eu tenho este chamado Morte 01020304 Tudo isso vai junto. Se eu selecionar todos eles, clique com o botão direito do mouse e crie um único. Quando criarmos isso, vou renomeá-lo para Sound Or Death Vá em frente e entre nela. E agora você pode ver que ele já fez isso para você. Ele criou um nó aleatório. Ele conectou todos esses sons a ele. Na verdade, ele escolherá o som aleatoriamente quando você clicar em reproduzir. Agora, antes de fazer isso, reduza também o som e clique em reproduzir em alta voz. Talvez 0,10 0,15 Talvez 0,2 seja realmente bom. 0,2 está bem. Parece bom. Agora tudo isso é bom. Vamos fechá-lo por enquanto. A Ascensão novamente, clique com o botão direito. Faça uma criação A e exclua isso. Chame isso de S C, Ascensão. Abra-o, reduza o volume para 0,2, por exemplo, feche-o. Então vamos pegar o próximo, o botão passar o mouse. Vamos clicar com o botão direito do mouse em criar um Q para este. Novamente, vamos chamá-lo de botão e reduzir o som 20.2 Feche-o. Vamos para o próximo, que é o botão pressionado com o botão direito do mouse, criar um som de que soa como este. Você pode ver que é o mesmo método repetidamente apenas para reduzir o som. Agora, pressionando um botão, eu também quero adicionar um modulador Modulador para este também. E conecte-o, tom mínimo e máximo. Vamos definir 20,9 para 1,1 então. Agora soa diferente toda vez que pressionamos o botão, que é muito bom. Agora temos a Morte Noturna novamente. Clique com o botão direito. Crie uma fila sonora. É uma lição um pouco chata porque estamos basicamente fazendo a mesma coisa Mas eu só quero te mostrar como você os cria. Só para eu saber que você tem o conceito, vamos fazer um 0,2 soar bem. O próximo que temos é o nível desbloqueado, clique com o botão direito do mouse. Crie uma fila. Vamos renomeá-lo para abrir esse nível de ônibus desbloqueado. Reduza o som para 0,2 Feche-o. Agora, o próximo é o clique direito normal desbloqueado. Crie uma fila, chame-a de Sound que assim, abra-a novamente, reduza o som para 0,2 Você pode ver o mesmo método repetidamente. Agora, para a música. Vamos clicar com o botão direito aqui novamente, criar um som que, vamos chamá-lo de Sound Music Now para a música. Vamos abri-lo e clicar aqui. Vamos garantir que tenhamos marcado. Isso é um loop porque você precisa repetir a música, caso contrário, ela não voltará e parará em algum momento Agora, o C que já fizemos. Aqui está a ou a morte. Nós já fizemos isso. O soco também, a compra. Fizemos a morte pelos foguetes. Clique com o botão direito em que. Estamos quase terminando. Foi uma lição chata. Vamos chamá-lo de Sound Q Rogue 0.2 Vamos nos sentar. O esqueleto. Agora vamos selecionar o esqueleto. Clique com o botão direito, crie uma única fila. Novamente, vamos alterá-lo para 0,2. E devo me lembrar também de mudar o nome deste. O último é o mago. Clique com o botão direito do mouse em Criar. Vamos chamá-lo de Sound que, abra. 0.2 Agora vou , no meu próprio tempo, ajustar todos esses volumes porque basicamente basta clicar em reproduzir aqui. E depois ouvir o quão altos estão os sons, basta ajustar os volumes deles quando terminar Vamos para a próxima lição. 107. 12.03 Adicionando SFX à interface do usuário: Tudo bem, agora que você terminou de criar todas as dicas sonoras, vamos voltar para a interface do usuário Agora eu quero que você os pegue um por um. No primeiro, consigo ver as informações do inimigo. Na verdade, não temos efeitos sonoros para eles , são apenas alguns textos e algumas partes de saúde. A primeira é a carta de nível. Sempre que clicarmos nesse botão de nível, vamos clicar no botão. Vamos descer até aqui. E você vê algo chamado Som pressionado e passa o mouse. Som Vamos mudar isso. Agora, se você clicar nele, poderá ver todas as dicas sonoras e o som que você importou para dentro desse mecanismo Agora, este é o pressionado, se apenas pesquisarmos por pressionar e selecionarmos este aqui, procuraremos por passar o mouse e selecionaremos este Compilar. Agora, se você clicar em reproduzir e experimentar, verá que isso é o mouse, essa é a pressão É um pouco mais interessante que eles tenham sons aqui. Vamos fechá-lo. Vamos para a próxima. Deixe-me excluir este cartão da loja apenas para ver ou testar essa interface de usuário aqui. Nós realmente não temos nada que faça som aqui. Vamos fechá-lo. Vamos abrir o item da loja, Cod. Dentro daqui temos esse botão novamente. Vamos pesquisar, pressionei, na verdade, por esta. Vamos procurar o som do mouse que está corrigido. Vamos fechá-lo. A última é a dica de ferramenta que também não contém nada. Vamos em frente e salve tudo agora. Antes de terminarmos, vamos também adicionar o clique do mouse. A melhor maneira de fazer isso é abrir os inimigos e abrir a base inimiga. Lembre-se de que aqui dentro fizemos o clique. Também temos todo esse dano aplicado. Efeito de desova, flutuação e efeito de golpe. Vamos realmente fazer isso aqui. Se você arrastar a partir daqui, se você apenas pesquisar por som, você tem algo chamado Play Sound two D. Você também tem algo que eu acabei de pesquisar, Play Sound tem algo chamado Play Sound two D e toca Sound no local. Reproduzir som no local geralmente é usado normalmente. Por exemplo, em três jogos D em que há um inimigo distante e você pode ouvir o som ao longe em um determinado local. No entanto, este é um jogo em dois D e basicamente temos o som dois D. Vamos tocar o som dois D. Isso é usado principalmente para elementos de interface do usuário. Você também pode passar o mouse sobre ele e ele emite um som diretamente sem atenuação, que basicamente significa que você não pode ouvi-lo como se estivesse vindo de uma distância ou de um local É perfeito para sons de interface do usuário. Vamos selecionar esse para o som. Você pode ir em frente e selecionar o soco. E vá em frente e selecione-o agora, você pode fazer assim ou você também pode simplesmente aqui, promovê-lo para uma variável e chamá-lo, por exemplo, de efeito sonoro de soco Isso é sempre bom porque em vez de mais tarde no jogo, vez de procurá-lo e não se lembrar de quem era, basta clicar aqui e alterar o efeito sonoro a partir daqui. Agora temos o efeito sonoro de soco se eu clicar em reproduzir agora e experimentar. Agora, a outra coisa que podemos fazer é sempre que você desbloquear um nível, vamos emitir um som. Acho que também será muito mais interessante para desbloquear os níveis Lembre-se de que você fez isso dentro do modo de jogo. No modo de jogo, se eu voltar ao gráfico de ventilação e dermos uma olhada no nível de desbloqueio, vamos realmente jogar a partir daqui Vamos fazer isso aqui. Vamos arrastar a partir daqui. E, novamente, toque Sound Two D. Na verdade, incluí dois sons diferentes para você. Se você voltar ao áudio e abrir, poderá ver aqui algo chamado desbloqueios e desbloqueios Dependendo se o inimigo é um chefe ou um inimigo normal, podemos realmente fazer algo com ele. Agora, a maneira de fazer isso é novamente, podemos arrastar a partir daqui e dizer selecionar, porque agora podemos selecionar o som, dependendo do valor, para obter o status do próximo inimigo. Por exemplo, se for um chefe ou um inimigo normal. Lembre-se de que podemos dizer para obter informações sobre o inimigo. Vá em frente e selecione obter informações sobre o inimigo. Vá em frente e quebre. Quebre a estrutura a partir daqui que conhecemos, o tipo de inimigo aqui. Vamos em frente e conecte isso. Dependendo se é um normal ou um chefe, podemos selecionar, na verdade, vamos clicar com o botão direito do mouse aqui e na verdade, vamos clicar com o botão direito do mouse aqui promover essa variável. Vamos chamá-lo de FX desbloqueado de nível. Esse é o normal. Vamos clicar com o botão direito do mouse nessa e promover essa variável. Vamos chamar esse de chefe no final. Ok, agora temos esses dois pinos selecionados e desconectados Agora, quanto ao nome do inimigo, de onde tiramos isso? Lembre-se de que sempre podemos clicar com o botão direito do mouse e dizer obter informações do nível. Vá em frente e selecione-o. Agora, o nível do qual queremos obtê-lo é o nível desbloqueado Vá em frente e conecte isso, porque o nível desbloqueado está sempre um passo à frente do nível atual Vamos acabar com isso de novo. E agora temos o nome que você pode conectar, ocultar os pinos desconectados Vá em frente e torne-o mais estruturado assim. Agora temos essa informação. Ele só tocará uma vez porque sempre que desbloquearmos o nível, ele tocará o som uma vez. Vamos compilar e salvar tudo isso. Agora você pode ir em frente e experimentar. Mas antes de fazermos isso, vamos adicionar o som ao som normal, podemos pesquisar por desbloqueado, desbloqueado e procurar o normal Para o próximo, para o chefe. Vamos selecionar o chefe desbloqueado, compilar o jogo e testá-lo Esse é o som quando você desbloqueia um nível. Se eu fizer isso de novo, você verá não há som porque ainda estou jogando o nível um. Se eu voltar para o nível dois, passar para o nível dois, agora eu tenho o som. Incrível. Agora, esse é o último. Quando eu mato este, ele deve reproduzir o efeito sonoro do chefe ou o nível desbloqueado do chefe Vamos tentar fazer isso. Agora é um chefe. Você pode ver que é muito mais interessante jogar com ele. Agora, antes de continuarmos dando alguns efeitos sonoros ao inimigo, vamos dar um efeito sonoro também à compra. Para a compra que temos aqui no player. Lembre-se novamente de que temos o item comprado. Vamos adicionar o efeito sonoro aqui antes de fazermos qualquer outra coisa. Novamente, clique com o botão direito do mouse em Play. Soe dois D, vá em frente e adicione aqui. Deixe-me clicar com o botão direito neste e dizer Comprar efeitos sonoros. E arraste-o para baixo assim. Agora, para este, vamos clicar nele Compilado primeiro e pesquisar a compra. E isso deve funcionar, muito bom se eu clicar em Jogar e comprar algo. Agora vejo que o som está tocando. Vou continuar com o áudio e abaixá-lo um pouco. Acho que está muito alto. Se eu abri-lo, escrever 0,4 em vez disso e jogar novamente, posso ver que também está funcionando. Ok, agora temos todos esses efeitos sonoros implementados. Vamos salvar tudo agora. Vamos adicionar alguns efeitos sonoros para o inimigo. 108. 12.04 Adicionando SFX ao inimigo: Ok, basicamente todo inimigo pode ter um efeito sonoro único. Para fazer isso, lembre-se de que criamos uma estrutura. Se eu abrir a estrutura e abrir as informações do inimigo, o que podemos fazer é adicionar o som a ela. Porque lembre-se de que toda vez que você adicionar uma variável aqui, ela será exclusiva desse inimigo. Por exemplo, se clicarmos em Adicionar aqui, podemos dizer efeitos, morte, efeito sonoro. E se apenas procurarmos por som, vá em frente e selecione esse som. Então, o que você pode fazer é acessar o Google Sheets. Dentro de suas planilhas do Google, vá em frente e abra as informações do inimigo aqui à direita. Vá em frente e escreva a morte como efeitos que você acabou de criar. Agora, o que você pode fazer é adicionar referências um pouco antes. Sempre podemos acessar o áudio agora. Agora, para o primeiro, vamos ver aqui, todos os quatro primeiros são os , vamos ver aqui. Nós temos o C. Basta encontrá-lo aqui embaixo, aqui, a morte, clique com o botão direito. E então copie a referência como antes. Vá em frente e adicione-o agora. Tecnicamente, você pode ter um efeito sonoro de morte de orc que é exclusivo para cada um Mas eu vou usar o mesmo aqui. Como eu adicionei aqui, lembre-se de que, na dica sonora, adicionamos um aleatório a partir deles, ele só vai escolher um som de morte aleatório Mas, basicamente, você pode atribuir um som de morte único a cada inimigo. Agora, para o feiticeiro, vou novamente até aqui, Encontre o feiticeiro Morte, clique com o botão direito, copie, faça referência e cole aqui. O próximo é o esqueleto. Vamos encontrar o esqueleto que está aqui. Vou renomeá-la e removê-la, 01, clicar com o botão direito do mouse, copiar a referência e colar nas próximas quatro, isso, isso e isso Agora temos a morte desonesta e a morte noturna. Vamos procurar o ladino. A noite chegou. Copie a referência passada da noite para o ladino. Vamos clicar com o botão direito do mouse em Copiar base de referência para o ladino. Novamente, clique no arquivo e baixe-o como um arquivo CSV Agora vá em frente e leve essas informações do inimigo para as tabelas de dados. E, basicamente, basta arrastá-lo dentro e ele deve ter todas as informações. Agora vá em frente e economize. Agora, sempre que o inimigo morre, e isso acontece dentro da base inimiga, vamos abrir a base inimiga, salvar tudo, compilar E vamos ver aqui onde podemos adicioná-lo, então estamos causando algum dano. Aqui, no final, temos a morte F, clique duas vezes nela. E está aqui sempre que o inimigo joga. Vamos realmente fazer isso aqui. Sempre que jogamos o flip book. Deixe-me tocar o som antes de tocar o flip-book. Agora, eu realmente não acho que importe se você joga uma coisa primeiro ou outra, mas vou fazer dessa maneira. Vamos tocar novamente o Sound Two D. Vá em frente e conecte-o assim. E vá em frente e conecte esses efeitos aqui. Agora, ele selecionará esse efeito sonoro, dependendo do que você forneceu como informação na tabela de dados. Então vá em frente e compile. Clique em Jogar e vamos experimentar. Ok, isso funciona bem. Tudo bem, agora temos o problema do som tocar muitas vezes. Então, se você apenas diminuir o volume, isso pode ficar irritante. Se você clicar em Comprar algo aqui, você comprou algumas vezes. Você pode ver que quando o inimigo morre, ele joga várias vezes. E isso é um pouco chato. Vamos até a base inimiga aqui. Vamos dar uma olhada na morte. Se eu apenas fizer uma string impressa, basta imprimir uma string para ver se está tocando. Algumas vezes, eu posso clicar em jogar. Eu posso comprar alguma coisa novamente. Eu posso ver que está tocando muitas vezes. Vamos resolver esse problema aqui. Podemos usar algo chamado de um nó. Vamos pegar isso e dizer uma vez, e selecionar isso uma vez. Em seguida, ele reproduzirá esse efeito sonoro ou basicamente todo esse código aqui. Só uma vez eu compro alguma coisa. Você pode ver que agora está corrigido porque só vai ser reproduzido uma vez. Isso é redefinido basicamente automaticamente. Porque lembre-se, estamos destruindo o ator. Toda vez que o ator morre , um novo ator responde. Então, eles terão um novo, node. Nós realmente não precisamos reinicializar este. Tudo está funcionando bem aqui. Vamos fechá-lo e seguir em frente. 109. 12.05 Adicionando música: Como última coisa para o efeito sonoro, vamos adicionar um pouco de música. E isso é super simples, então se abrirmos o áudio mais uma vez, podemos arrastar essa música até aqui. Vou clicar nele novamente. Reduza também o som. Não tenho certeza de quão alto é. 0,2 está bem, acho que sim. Deixe-me fechá-lo. Agora temos isso. Eu só vou dizer que às 0200 , realmente não importa onde esteja Agora, se você clicar em Reproduzir, verá que pode ouvir o som. Isso é muito simples adicionar música e vai ficar em loop para sempre. Tudo parece bom. OK. Vamos em frente e salve tudo. E vamos passar para a próxima. 110. 13.01 Criando a IU de ascensão: Tudo bem, então agora vamos trabalhar na Ascensão. Basicamente, o que é Ascension, se você ainda não sabe, é que sempre que você alcança um progresso, determinado progresso no jogo, você pode pressionar o botão de reiniciar Isso dá uma capacidade de reprodução ao jogo. Quando você reinicia o jogo, ele causa mais dano básico. Por exemplo, tudo causa 300% a mais de dano. Pode reiniciar o jogo basicamente e causar mais danos. E você pode basicamente continuar porque, em um determinado momento, se você não reiniciar, o jogo ficará muito difícil e você precisará reiniciar para obter esse bônus de dano e continuar os níveis. Ok, vamos começar com a mecânica da Ascensão Então, a primeira coisa que eu quero fazer é basicamente projetar a interface do usuário e tirar isso do caminho. Vamos para a pasta UI. Vamos aqui, crie novos widgets Vamos chamar isso de pop-up de Ascensão. E trabalharemos com o pop-up na próxima lição, mas por enquanto, agora terminamos isso. Vamos até o Main. Vamos adicionar o botão Ascensão aqui embaixo e faremos com que ele apareça sempre que os critérios forem atingidos. Vamos começar aqui. Primeiro, o que eu quero fazer é pegar essa sobreposição e arrastá-la até o painel da tela Vamos minimizar tudo isso. Agora temos essa sobreposição. Eu quero que essa interface seja A, aqui embaixo, ponto de ancoragem, embaixo Vamos subir 00 na posição x e y. Agora, para o x, temos que subir 0,5. Para o y no alinhamento, temos que escrever um Está aqui na tela. Em seguida, precisamos da interface do usuário. Agora, primeiro vamos adicionar uma imagem. Adicionando essa imagem, essa será a imagem de fundo. Será o mesmo que este. Eu só vou copiar essa imagem. Clique aqui e cole. Agora terminamos isso. Em seguida, queremos uma caixa vertical. Vamos adicionar uma caixa vertical a essa sobreposição. O que eu quero é um texto e um botão abaixo dele. Vamos adicionar um pouco de texto. Eu só vou copiar um deles. Por exemplo, este, controle C, desça aqui, controle V na caixa vertical. Vamos também adicionar o botão, e podemos adicioná-lo simplesmente acessando esta carta de nível. Podemos clicar em tudo isso, copiar e colar aqui na caixa vertical. E eu posso remover esse crânio. Agora foi isso. Vamos clicar nessa imagem. Vamos fazer com que seja preenchido na horizontal e na vertical. Agora vamos clicar aqui na sobreposição. E vamos apenas redimensionar as coisas, ou basicamente o que você pode fazer é apenas dimensionar o conteúdo Acho que vou fazer isso em vez disso. Em seguida, podemos adicionar texto para esse botão. Vou escrever Ascend aqui. Aqui podemos escrever Ascension disponível. Agora, para o texto de fundo aqui, na verdade vou copiar essa cor de contorno Vá até aqui e cole neste para que eles tenham a mesma cor. Além disso, podemos clicar nessa caixa vertical e dar um pouco de preenchimento Se você escrever algo como 50, talvez nem tanto. Se clicarmos aqui novamente, vamos escrever 30. Talvez algo em torno de 30, 35 seja algo assim. Eu acho que isso parece bom. Agora vamos dar um pouco de espaçamento na parte inferior para que não atinja a borda E essa é a posição na posição Y -30, o X. Vamos escrever zero. Mais uma vez, vá em frente e compile Você pode clicar na placa para ver sua aparência. Acho que talvez esse texto seja muito grande. Em vez de 24, vamos escrever um. Vamos também dar um pouco de espaço. Eu só vou clicar aqui. Coloque um pouco de preenchimento na parte inferior, por exemplo, quatro, compile e clique em reproduzir Eu acho que isso é bom. Agora temos essa ascensão disponível, e também temos alguns efeitos sonoros para o botão, pronto para esta interface Vamos fechá-lo e continuar no próximo. 111. 13.02 Criando o pop-up da ascensão: Tudo bem, agora é hora de projetar o Ascension Pub. E podemos fazer isso facilmente simplesmente copiando isso por enquanto. Copie tudo isso que fizemos na última lição e abra o Ascension Pub Up Passe isso aqui embaixo. Agora, em vez de aqui. Na verdade, vamos adicionar um painel de tela. É por isso que parece tão grande. Adicione um painel de tela e , em seguida, adicione-o aqui. Certifique-se de que, ao clicar na sobreposição, ela esteja ancorada E 0,5 no alinhamento para X e Y. E também 00 na posição X e Y. E aqui em cima, selecione desejado na tela. Tudo bem, então o que eu quero fazer aqui é que você reinicie o progresso, mas com 300% a mais de dano Por exemplo. Sempre podemos escrever um número dinâmico para essa porcentagem de dano, mas, por enquanto, vamos escrever assim. Se você quiser torná-lo um pouco menor aqui na largura, você sempre pode ir até aqui e na embalagem, você tem esse texto quebrado Vou apenas aumentar isso e podemos basicamente agrupar esse texto em um determinado número. Vamos embrulhá-lo em algo como 360. Eu posso ver que a imagem está realmente desfocada no fundo em vez da Vamos mudar para uma caixa e escrever 0,5. Isso parece muito melhor. Vamos também fazer isso, na verdade , principalmente. Acho que não fizemos isso. Voltando, clicando nele, transformando-o em uma caixa e escrevendo 0.5 Vamos voltar. Agora, aqui, vou duplicar esse botão, mas precisamos deles em uma caixa horizontal Vou procurar uma caixa horizontal. Vá em frente e adicione-o aqui. E adicione esse botão à caixa horizontal. E duplique essa sobreposição. Ao clicar no controle D, podemos clicar na primeira sobreposição. Clique em Phil. Clique na segunda sobreposição. Clique em Phil. Agora, o primeiro vai dizer As, Tudo bem. O segundo vai dizer cancelar, porque queremos voltar. Se não quisermos continuar, podemos clicar aqui. Podemos mudar a cor apenas para torná-la um pouco mais exclusiva. O botão de cancelamento é um pouco mais vermelho, algo assim aqui. E eu vou copiar essa cor para o mouse e para a prensada também, para as Também vou mudar a cor para algo um pouco mais verde como esse. Ok, isso para os outros. Aqui está. Se eu compilar e salvar, agora terminamos isso Vamos passar para a próxima. 112. 13.03 Abrindo o pop-up da ascensão: Tudo bem, agora é hora de adicionar esse pop-up de ascensão à interface do usuário Se eu voltar ao controle do player, lembre-se de que foi aqui que criamos toda a interface do usuário e criamos a função show hide widget Vamos abrir a função show widgit. Perceberemos que precisamos adicioná-lo à enumeração. Vamos fazer isso. Vamos abrir o, vamos aos widgets do jogo. Vamos somar a Ascensão. Vamos salvar aqui e voltar para o controle do player. E agora você vê que tem um alfinete para isso. Agora vamos copiar este widget de peça e vamos pesquisar, vamos ver aqui, o pop-up Ascension, clique com o botão direito do mouse Promova isso para uma variável e chame-a pop-up de ascensão, assim como antes Vamos pegar esse pop-up de ascensão e convertê-lo em um get validado quando não for Vamos criar a interface do usuário. No entanto, sempre que for válido, vamos arrastar a partir daqui e dizer adicionar ao ponto de vista Vamos adicioná-lo à tela. Se for válido, vamos adicioná-lo à tela. Não faz sentido criá-lo se ele já for válido. Vamos adicionar este aqui e aumentá-los. Agora vamos voltar para o widget ocultar aqui. O que precisamos fazer é, sempre que fecharmos o widget, arrastar esse pop-up de ascensão, clicar com o botão direito do mouse e convertê-lo em um get validado, e convertê-lo em um get validado conectá-lo e removê-lo Sempre que quisermos fechá-lo, podemos removê-lo da tela dizendo remover do Pai. Eu guardo tudo. Agora estamos prontos para usá-lo. Vamos às plantas ou, na verdade, à interface do usuário Agora, isso acontece sempre que eu clico no botão no widget principal Se eu for aqui, esse botão aqui, vou mudar o nome para Button Ascend Vou ver o gráfico. Agora aqui você pode clicar nele e clicar no evento clicado O que deve acontecer quando você clica nesse botão? O que deveria acontecer é que eu quero pegar meu controle de jogo e mostrar o widget, o menu pop-up Eu posso ver aqui, eu não tenho uma variável de controlador de jogador. Na verdade, vou criá-lo aqui na construção do evento como esta. Vamos, como antes, obter o controle do player e, em seguida, obter a referência do controlador de reprodução na interface do blueprint E clique com o botão direito para promover isso para um controlador de player de chamadas variável. Agora temos isso. Vamos descer até aqui. Vamos arrastar esse controle do player e dizer Mostrar widgets ocultos Vamos selecionar Canine Pop up. Vamos clicar em Mostrar. Mas também queremos ocultar o menu principal. Na verdade, basicamente vou arrastar isso também e dizer Mostrar Ocultar Widgets Vou esconder a interface principal. Já está assim. Compilar. Se você clicar em Jogar, clicar em concordar, poderá ver que ele aparece Na verdade, vamos fazer a mesma coisa aqui. Vamos remover isso da tela. Sempre que clicamos no lápis, vamos chamá-lo de lápis de botão aqui em cima. Vamos até o gráfico e clique em “ Vamos excluir tudo isso por enquanto”. Novamente, precisamos do controlador de jogo. Então, vamos seguir em frente e fazer essa construção de evento. Vou apenas copiá-lo do principal aqui. Basta copiar tudo isso e colar aqui. Assim como antes, lembre-se de clicar nessa linha de controle de voo criada como uma variável como essa. Então, agora temos isso. Na verdade, vamos copiar e colar aqui. Não precisamos escrever as mesmas coisas repetidamente. Sempre que clicamos em cancelar, queremos abrir a interface principal, mas queremos fechar o pop-up Ascension Vamos tentar isso. Abra-o, clique em Cancelar e vejo que está funcionando bem. Vá em frente e salve tudo, e vamos para a próxima. 113. 13.04 Configurando o evento de jogo de reinício: Tudo bem, agora sempre que clicarmos no Ascend aqui, na verdade eu vou deletar a música só que possamos trabalhar aqui sem a música Eu só vou clicar nele. Em seguida, clique no multiplicador de volume para zero. E se eu clicar em jogar agora sempre que clicar em Ascender e Ascender aqui, quero reiniciar o Isso é basicamente o que eu quero fazer. Basicamente, estamos reiniciando o jogo e dando ao jogador uma quantidade extra de dano Vamos continuar e reiniciar o jogo. Do jeito que fazemos isso, vamos realmente fazer isso dentro do modo de jogo porque é aqui que faz mais sentido aqui embaixo. Clique com o botão direito do mouse e crie um novo evento personalizado. Vamos chamar isso de jogo de reinício. Há muitas variáveis que precisamos reiniciar porque , na verdade, precisamos reiniciar todas as variáveis com as quais trabalhamos até agora. Nem todos , mas aqueles que são muito importantes e exibidos na tela. Vamos começar, por exemplo, com o nível que você desbloqueou e o nível atual Deixe-me arrastar esse nível desbloqueado, arrastá-lo para dentro e configurá-lo como um Novamente, isso é o que era desde o início. A mesma coisa com o nível atual. Vamos arrastá-lo e configurá-lo como um. Vamos também remover todos esses botões aqui. Quando você tiver todos esses botões, precisará removê-los. Vamos fazer isso obtendo o controle do player. Vamos encontrar o Maui. Vá em frente e pegue. Então, precisamos obter a lista de níveis. É assim que a chamamos. Se você não se lembra de como o chamou, pode sempre abrir o Maui Você pode clicar nessa lista e chamá-la de lista de níveis. Estamos recebendo esse menu. Estamos recebendo a lista de níveis. Vá em frente e pegue. arrastar daqui crianças claras. Vamos remover todos os componentes secundários que estão dentro dessa lista. Sempre que eu removo todos eles, lembre-se de que também removemos o nível um. Precisamos adicionar o nível um também. A maneira como podemos fazer isso é diretamente do controle do player e temos essa chamada interface de usuário de botão. Se você não se lembra disso, o que é natural, porque trabalhamos com isso há algum tempo e às vezes eu também esqueço de mim mesma, como chamei isso. É sempre bom voltar e ver uma interface de usuário de botão. Basicamente, adiciona esse nível atual à lista de servidores. Se eu voltar ao modo de jogo e adicionarmos essa interface de botão de nível, ela será de nível um. Basicamente, o nível desbloqueado que temos aqui. Vamos arrastar o nível desbloqueado e adicioná-lo. Agora temos os níveis corretos. A próxima coisa em que queremos trabalhar é a quantidade de moedas que o jogador tem. Precisamos de uma referência ao jogador, e posso ver que não temos uma variável para o jogador. Na verdade, vamos adicionar um aqui. Deixe-me arrastar tudo isso. Agora, este está no início do jogo. No início do jogo, vamos clicar com o botão direito do mouse e dizer obter personagem do jogador, digamos, obter referência do jogador na interface do blueprint Vá em frente e conecte-o. Vamos clicar com o botão direito do mouse e promover essa variável chamada peão do jogador Vamos nos conectar novamente a este e apenas empurrá-los de volta novamente, Compile Agora, o que podemos fazer aqui é enfrentar esse jogador e dizer a quantidade de moedas. Podemos definir a quantidade de moedas como zero, mas também precisamos atualizar a interface do usuário. Não me lembro totalmente da lógica aqui. Se eu voltar para o jogador, abrir o player aqui, atualizamos a quantidade de moedas. E é essa que está no WB principal, que chamamos de quantidade de moedas de atualização Vamos copiar essa parte do código. Vamos voltar ao modo de jogo e colar. Basicamente, não precisamos escrever mais código. Podemos simplesmente copiar e colar os que já temos e conectá-los. Faça um nó de rota traseiro como este. E agora isso está definido. Ok, a próxima coisa que queremos corrigir também é a quantidade de itens que compramos aqui. Então, precisamos reiniciar isso também. Para a porta de itens, também temos esse ponto de item variável dentro do player. Se eu voltar ao modo de jogo, copio o plano do jogador aqui e procuro os bots à frente e corrijo a partir daqui. E então diga claro, você limpará todos os valores dentro deste mapa sempre que eu os limpar. Também quero atualizar a interface do usuário. Quando você atualiza a interface dos cartões de itens, basicamente recria todos os itens Porque lembre-se de que, quando criamos os cartões de itens da loja, basicamente limpamos os anteriores. Podemos seguir em frente e voltar ao modo de jogo. Podemos pegar o controle do player aqui e arrastar e dizer Criar cartões de itens da loja. Vá em frente e se conecte. Agora, a última coisa é que também precisamos atualizar o DPS para o jogador Precisamos reiniciar o DPS total e o dano do cursor. Vamos voltar ao modo de jogo. Vamos novamente pegar o jogador assim. Vamos pegar o DPS total defini-lo como zero, porque é isso que é por padrão Vamos pegar o dano do cursor e definir o dano do cursor. Agora, o dano do cursor é 15, eu acredito. Portanto, se você clicar nele, poderá ver o valor padrão que você definiu para o seu jogo. E vou voltar para 15, que é o padrão para o meu jogo aqui. E podemos simplesmente fazer uma anotação artística traseira e tudo ficará ótimo. Ok, então a última coisa é que queremos definir o nível atual em que estamos, porque temos esse nível atual definido e ele também gera o inimigo desse nível e inicia a rodada em que precisamos fazer isso Vamos voltar aqui. Digamos que defina o nível atual. Vamos adicionar o nível em que estamos , que é o nível atual. O nível atual, reiniciamos para um. Novamente, aqui, se você se lembra do primeiro, nível atual definido como um seria definido como um Agora terminamos este jogo de reinício. Vamos realmente ver se funciona. Se voltarmos, vamos ver aqui, se eu fechar tudo isso. Eu abro a interface do usuário. Eu abro esse pop-up de ascensão. Eu clico nessa subida, desço e clico no botão clicado para essa subida Vou copiar tudo isso porque precisamos mostrar a interface principal e também remover o pop-up Ascension Quando clicamos nesse botão, vamos mudar o nome dele. Não é o nível do botão, é a subida do botão. Vamos voltar. Ok, aqui também queremos reiniciar o jogo. Vou clicar com o botão direito do mouse e dizer obter modo de jogo e depois obter a referência do modo de jogo. Então eu vou dizer reiniciar o jogo. Deve funcionar muito bem. Vá em frente e salve e vamos jogar e experimentar. Inimigo. Eu compro algo aqui e ligo o nível. Se eu clicar em concordar e depois subir, você pode ver que ele reinicia Ele reinicia a quantidade de itens que eu comprei. Também reinicia a progressão de nível aqui e a quantidade de moedas que eu tenho. Vamos tentar novamente. Se eu disser ao inimigo que compro algo nas lojas, reiniciamos todo o progresso e tudo está funcionando bem Isso foi tudo para reiniciar o jogo. E vamos passar para a próxima. 114. 13.05 Mostrando a ascensão no final do jogo: O que queremos garantir agora é que, quando você clica em jogar, queremos ter certeza de que essa ascensão disponível só seja mostrada quando o jogador chegar ao final do jogo Digamos que, por exemplo, em meu critério sempre que o jogador comprar todos os itens em uma certa quantia , essa ascensão disponível será mostrada Vamos seguir em frente e fazer isso. Vamos fazer isso dentro do modo de jogo. Vamos abrir o modo de jogo aqui dentro. Vamos criar uma nova função. Vamos chamar essa função conforme os critérios atendidos. Por exemplo, ele verificará se os critérios foram atendidos. E então ele mostrará esse widget agora para garantir que ele esteja oculto desde o início. Vamos para a interface do usuário. Primeiro, vamos abrir a interface principal. Dentro da interface principal, vamos clicar aqui. Aqui na sobreposição da Ascensão. Vou mudar o nome dessa sobreposição porque vamos ocultá-la, então é sempre bom saber o nome dela Vou chamá-lo de Overlay Ascension e configurá-lo como Também como um começo aqui na visibilidade. Em vez de não ser testável, vamos configurá-lo para colapso Não é do nosso ponto de vista. Se você reproduzir o clipe agora, verá que ele não é mais exibido. Mostraremos isso sempre que esses critérios forem atendidos. Agora, o critério, sempre que você comprar uma certa quantidade desses itens, mostrará que precisamos do mapa local do item. Isso está dentro do nosso player. Vamos pegar ou obter uma referência ao jogador, e já temos isso aqui. Continue jogando. Vamos retirá-lo e dizer os pontos dos itens. Vamos pegar esse mapa que criamos anteriormente. Agora precisamos obter todas as chaves dele. Os valores são basicamente chamados de chaves. Todas as chaves estão aqui. Também podemos ver os valores deles. Vamos atacar a partir daqui e dizer as teclas novamente e arrastar, depois conectar aqui Agora temos todas as chaves. O que eu quero verificar primeiro é se temos todos os itens? Porque realmente não importa repetir tudo isso e verificar quantos itens temos , se nem mesmo temos o item. Só para fins de otimização, vamos primeiro verificar se o jogador tem todos os itens antes de examiná-los e ver quantos existem de cada item. Vamos pegar isso e dizer que o comprimento é esse comprimento, isso é igual? Vá em frente e selecione isso. Isso é igual à quantidade de itens da loja que você tem? E como podemos obter quantos itens da loja temos? Na verdade, isso é muito fácil porque agora, aqui no modo de jogo, vamos definir isso no jogador no início. Jogue aqui no modo de jogo depois de eu definir os peões e os pontos de desova Na verdade, vamos fazer isso antes de gerarmos o inimigo. Desconecte este e vamos atacar a partir daqui e dizer obter a tabela de dados Até agora, estamos usando este. Obtenha a linha da tabela de dados, mas agora vamos usar esta. Obtenha os nomes das linhas da tabela de dados. Vamos obter todos os nomes das linhas da tabela de dados para a tabela de dados de informações. Aqui estão todos os nomes dos itens com este comprimento e, dizendo, isso lhe dirá quantos itens temos. Por exemplo, se você tiver 11 itens, ele dirá 11. Vamos clicar com o botão direito do mouse nessa e promovê-la a uma variável e chamá-la de quantidade de itens da loja. Vá em frente e conecte-o. Agora, assim, conecte isso também. Agora, o que podemos fazer, vamos compilar. Se você quiser ver o que ele faz, você sempre pode criar uma sequência de caracteres impressa. Sempre use uma string de impressão se quiser ver o que está fazendo. É um indicador. Você pode clicar em reproduzir, e aparece 11 aqui no canto superior esquerdo. Isso está funcionando perfeitamente. Vamos compilar. Vamos voltar aos critérios atendidos. Vamos colocar essa quantidade de itens da loja aqui e depois fazer uma filial. O que estamos basicamente fazendo é pegar as chaves dos itens, pegar o comprimento deles. Basicamente, estamos verificando quantos desses itens compramos. E estamos comparando isso com a quantidade de itens da loja. Se a quantidade de itens que compramos for igual à quantidade de itens da loja, isso significa que comprei todos esses itens pelo menos uma vez. Depois de saber que comprei todos esses itens pelo menos uma vez, o comprimento do pote de itens será igual à quantidade de itens da loja. Se isso for verdade, vamos continuar com o código. Se isso não for verdade, podemos, podemos simplesmente deixar isso porque não queremos fazer nada. Vamos continuar a partir daqui. E agora queremos que os valores sejam arrastados daqui Ou você pode, basicamente, apenas para torná-lo mais limpo, você sempre pode arrastar aqui novamente e depois arrastar e dizer valores. Agora você está obtendo os valores dessas chaves. Basicamente, as chaves estão aqui e os valores estão aqui. Agora você está jogando com os valores aqui. Agora, para os valores que você dirá para cada loop com Brick. Pegando este, o que queremos verificar é se compramos uma certa quantidade desse item, por exemplo, digamos que o jogador tenha que comprar pelo menos dez itens de cada um antes. A ascensão aparece. Vamos examinar todos os valores dos itens e verificar se eles estão nessa quantidade de bots. Basicamente, o que quer que definamos, se eu disser que é maior ou igual ao que escrevo aqui, por exemplo, é maior ou igual a dez e eu posso fazer uma ramificação. Então, o que eu quero fazer é criar um contador. Vamos fazer uma variável local. E vou chamá-lo de balcão local. Vai ser apenas um contador que conta para mim. Começa do zero. Vamos dizer este contador mais mais. Sempre que descobrirmos que esse critério foi atendido, adicionaremos um a esse contador. Se compramos dez itens de cada um desses itens, esse contador deve ser 11, porque temos 11 itens. Sempre que estiver 11 aqui no final, ele percorrerá todos eles e será esse L plus local, o que significa basicamente mais um. Se fosse zero, será um. Se fosse um, serão dois e assim por diante. Vai passar por eles. E se esse contador local for igual à quantidade de itens da loja, que é 11, basicamente esse contador será 11 se tivermos comprado essa certa quantidade de itens de cada um desses itens, porque temos novamente 11 itens, vamos fazer uma filial e dizer: isso é verdade? Se isso for verdade, queremos dizer que os critérios foram atendidos. Na verdade, vou criar uma nova variável aqui. E é apenas um ouro chamado critério de ascensão atendido. E transforme-o em um lingote, vá em frente e conecte-o aqui e configure-o como verdadeiro Sim, deveria ser isso. Na verdade, o que estamos fazendo aqui. propósito, vamos fazer uma pausa aqui, porque não precisamos percorrê-la sem quebrá-la. Porque aqui estamos usando um para cada loop com intervalo. E isso significa que vamos repetir esse código. No entanto, não faz sentido continuar percorrendo eles Se descobrirmos que por causa da pena clara, não compramos dez, por que você deveria dar uma olhada em todas elas Porque não vai aparecer de qualquer maneira. Porque esse não é dez. Em vez disso, isso é basicamente para otimização, para que você não percorra o código sem nenhum significado. Se examinarmos e descobrirmos que um dos itens não tem dez itens. Mas, como escrevemos aqui, podemos arrastar até aqui e dizer break. Estamos basicamente quebrando o ciclo. O que estamos dizendo é, por exemplo, que estamos dando uma volta, dando uma olhada na pena clara Diz, por exemplo, que sim, compramos dez. Então, estamos mais atentos ao balcão local. Em seguida, ele dá uma olhada na tocha. E talvez tenhamos comprado apenas nove. Vai dizer falso, você não comprou dez. Se isso for falso, vamos apenas quebrar o ciclo. Então, não examinamos mais isso porque não faz sentido. Não compramos todos os itens dez vezes. Isso quebrará o ciclo e será concluído. O balcão local não é igual à quantidade de itens de empurrão, porque talvez fossem apenas dois aqui Então será falso e nada acontecerá. Os critérios de ascensão só serão atendidos quando o balcão local for igual à quantidade de itens da loja Agora você precisa pensar em onde faz sentido verificar isso ou chamar essa função aqui? Agora, basicamente, faz mais sentido no item de compra. Vamos voltar para o jogador. Foi aqui que fizemos isso. Temos esse único item de compra. Toda vez que compramos um item, precisamos verificar se os critérios foram atendidos. Vamos fazer isso aqui. No final, está no modo de jogo, então precisamos pegar o modo de jogo e dizer ascensão. E pegue esse critério de ascensão, vamos chamá-lo toda vez que comprarmos algo porque precisamos verificar, se precisarmos mostrar a ascensão, se precisarmos mostrar a ascensão, se você clicar em Jogar e comprar todos eles, ela não aparecerá Porque lembre-se, definimos a sobreposição de Ascensão. Então, se eu voltar para a interface principal, configuramos essa sobreposição para ser reduzida. Em algum momento, precisamos mostrar isso. Vamos voltar ao modo de jogo agora, aqui nos critérios de Ascensão, e agora vamos mostrar essa sobreposição Agora lembre-se de que essa sobreposição está dentro do WB main, que tem a referência dentro do controlador do player Se eu pegar o controle do player e procurar por WB main, eu entendo isso e depois obtenho a ascensão V. Isso é basicamente o que eu chamei. Então, posso dizer que defina a visibilidade. Vamos definir a visibilidade para que não seja testável. Lembre-se de que o visible basicamente bloqueará os cliques do mouse e não queremos fazer isso Vamos fazer isso de forma testável, compilar e salvar. Agora, apenas para fins de teste, vamos escrever um. Se eu simplesmente desativar os sons antes de clicar em reproduzir, acho que será irritante para você continuar tocando os sons aqui na base inimiga Sempre que o inimigo morre. Vou apenas desativar essa opção Reproduzir som para D. Por enquanto, vamos clicar em reproduzir. Eu só vou comprar. Cada item. Agora, este é o último e eu vou comprá-lo. Eu posso ver que nada está acontecendo, mesmo que devesse acontecer. Na verdade, essa é uma boa oportunidade para tentar depurá-lo juntos e você pode ver como eu o depuro Vamos continuar e voltar ao modo de jogo. Basicamente, o erro está acontecendo aqui. Vamos fazer anotações impressas em seqüências de caracteres. Isso é o que eu costumo fazer para depurar aqui. Vamos escrever uma string de impressão. Digamos que se o código for aprovado. Basicamente, o que estou vendo é se o código é aprovado? Se isso acontecer, significa que funciona. Vamos escrever primeiro aqui, por exemplo, qualquer coisa. Realmente não faz diferença o que você escreve. Deixe-me escrever, por exemplo, em segundo lugar aqui. Sempre que eu leio o código aqui, o que está mostrando aqui se diz segundo, isso significa que o comprimento dessas chaves é igual ao dos itens da loja, o que significa que o código está funcionando antes de eu continuar. Vamos tentar fazer isso. Agora, dizendo primeiro que está tudo bem, devo dizer segundo sempre que eu comprar o último. Mas você pode ver que, na verdade, é dito em segundo lugar. Sempre que comprei este, ainda não comprei este. Então, na verdade , eu já tenho a quantidade de itens da loja a quantidade de itens da loja antes de comprar o último item. Ou eu tenho um valor padrão dentro desse item por engano, que vou ver em um segundo, ou a quantidade de itens da loja está errada. Vamos primeiro dar uma olhada na quantidade de itens da loja. Vou apenas deletar a string de impressão. Vou voltar ao gráfico de eventos do modo de jogo. Vou imprimir a quantidade de itens da loja que realmente estou comprando com isso, são 11, que eu deveria comprar. Diz 11. Há algo errado com a outra variável, algo errado com o local do item. Se eu voltar para o player e clicar nos itens, mas posso ver aqui, esse é realmente o erro aqui. Por padrão, cliquei no sinal de adição e adicionei um item vazio aleatório E eu posso clicar em Excluir aqui e clicar em Compilar e jogar Vamos tentar novamente agora. Se eu comprar um de cada item, ele vai funcionar agora. E também vai me mostrar a Ascensão disponível. Posso clicar em Ascender e subir aqui e depois reiniciar o jogo Agora precisamos esconder isso novamente, sempre que subirmos, vamos realmente fazer isso muito rapidamente Nós podemos fazer isso. Vamos encerrar isso. Vamos voltar para a interface do usuário. E vamos abrir esse pop-up aqui. Vamos fazer isso aqui sempre que clicarmos em Ascend, aqui sempre que clicarmos em Ascend e reiniciarmos o jogo Vamos fazer isso antes de reiniciarmos o jogo. Vamos pegar o controle do player novamente. Depois de entrar, vá para a central do WB. Então vamos pegar novamente V Ascension. Então, vamos afastar isso ainda mais. Basicamente, queremos definir a visibilidade como antes, mas agora queremos definir a visibilidade como reduzida como antes, reduzida e, em seguida, conectar esta E então isso deve funcionar muito bem. Ok, agora tudo está funcionando e vamos continuar com o próximo. 115. 13.06 Criando a estrutura de ascensão: O que eu quero fazer agora é criar o Multiplicador para a Toda vez que subimos para um novo nível ou reiniciamos o jogo, quero me causar mais danos Por exemplo, o jogador deve ter 300% a mais de dano do que antes, e tudo causa 300% a mais Vamos definir o multiplicador e podemos fazer isso muito facilmente por meio uma estrutura e uma tabela de dados Vamos voltar às estruturas e clicar com o botão direito do mouse em Blueprints e depois criar uma nova estrutura Vamos chamar isso de ST Ascension. Você também pode chamar o multiplicador de Ascensão , que é o que é Vamos abri-lo em vez de aqui, vamos transformá-lo em um flutuador E, basicamente, o que queremos fazer é ter o multiplicador Ascension Damage Esse é o único valor que precisamos. Agora vamos fechá-lo. Vamos até Tabelas de dados e clique com o botão direito do mouse em Tabela de dados diversos E vamos selecionar a estrutura que acabamos de criar. Você pode ver no blueprint que você basicamente faz a mesma coisa repetidamente. E sempre que você ficar realmente bom nisso, você pode basicamente criar sua própria mecânica usando apenas as ferramentas que aprendeu Este chamado basicamente de ascensão. Para este, vamos salvar e agora abrir o Google Sheets Basicamente, aqui, vamos fazer um novo. Vou apenas duplicar esse item para, por exemplo, chamarmos esse novo de T, ascensão Vamos deletar tudo agora. Pois o ID é em que nível de ascensão estamos. Começamos com o nível zero porque não temos nenhuma ascensão. Basicamente, você pode pensar nisso como a quantidade de Ascensões que fizemos ou a partir de 01, e você pode continuar até quantas quiser Então você pode dizer Damage Multiplier. Basicamente, você deve chamá-lo do mesmo nome, Ascension Damage Multiplier Portanto, o mesmo nome do que você escreveu dentro da tabela de dados. Agora, para o multiplicador, ele tem que ser um quando você está em ascensão zero, porque você multiplicará tudo por um, que significa que você está apenas recebendo o dano que acabou de sofrer anteriormente, que é basicamente o dano básico que você definiu aqui nas informações do item, tudo Agora, sempre que subimos, você pode, por exemplo, dizer três Isso significa que agora você tem três vezes mais danos do que antes. E então você pode dizer, por exemplo, sete. E eu vou escrever números aleatórios, vou dizer isso vezes 1,5 ou qualquer outra coisa. E você pode simplesmente arrastar para baixo e clicar aqui para remover todas as casas decimais Agora podemos simplesmente usar isso. Ok, vamos clicar em Download de arquivo, baixar CSV Agora eu tenho essa ascensão DT. E eu vou voltar para o meu motor. E aqui agora podemos arrastá-lo para aqui, e ele deve carregar tudo corretamente. Tudo bem, agora você tem os multiplicadores. E vamos continuar indo às bibliotecas. Abra-o. Vamos criar uma nova função aqui. Vamos clicar em Adicionar, clicar em uma função, chamá-la de y como multiplicador, por exemplo, ou multiplicador de danos de ascensão Você pode chamá-lo do que quiser. Agora, para essa entrada, basicamente precisamos saber em que nível estamos? Quantas Ascensões fizemos até agora? Transformando-o em um número inteiro, podemos chamá-lo de Nível de Ascensão. Agora, digamos que seja uma mesa como antes. Vamos pegar a tabela de dados da Ascensão. Agora, novamente, você não pode conectar isso a isso porque primeiro precisa dizer duas cordas. Você precisa convertê-lo em uma string e, em seguida, conectá-lo aqui, e ele o converterá automaticamente em um nome para você. Você pode arrastar a partir daqui e dizer return. Você pode retornar as informações aqui arrastando até aqui E agora você pode dizer informações sobre Ascensão, por exemplo, compilar. E lembre-se de clicar nessa função e clicar em Pure. Novamente, estamos apenas obtendo algumas informações daqui. Vamos salvar tudo. E agora podemos usá-lo nas próximas lições. 116. 13.07 Adicionando o multiplicador de ascensão: Agora, o que temos que fazer é multiplicar todo o dano que estamos causando no jogo pelo multiplicador Portanto, estamos obtendo a quantidade correta de dano. Para fazer isso, precisamos saber onde causamos todo o dano? Podemos encontrar isso facilmente. Vamos primeiro até o jogador. Agora, no player aqui, por exemplo, no item de compra fizemos isso, TPS Agora, o que você pode fazer é sempre clicar com o botão direito aqui e clicar aqui. O que eu faria é encontrar referências para isso porque temos o DPS aqui Se conseguirmos encontrar todas as referências aqui em todos os esquemas, poderemos descobrir onde estamos fazendo DPS ou para onde estamos levando essas informações, botão direito do mouse em Encontrar referências e clicando nesse pequeno ícone para encontrar as referências dentro de todos os Não só essa. Ok, vou colocar isso no meu segundo monitor e basicamente estou trabalhando com este primeiro. Agora, o que eu quero fazer é multiplicar essa quantidade de DPS pelo multiplicador de Ascensão, estou recebendo a quantidade correta de dano em comparação com o multiplicador de dano em comparação com Vou clicar com o botão direito do mouse e dizer Obter multiplicador de danos de ascensão Podemos pegar isso e dizer Break agora, podemos multiplicar por este Talvez eu devesse ter chamado de algo mais curto, mas é sempre bom ter um nome descritivo para saber o que você está fazendo Basicamente, quando lançamos esse DPS, queremos pegar isso e dizer multiplicar E eu vou simplesmente desconectá-lo daqui e colocá-lo aqui Realmente não faz diferença, mas parece melhor. Vou multiplicar o DPS pelo multiplicador, depois vou arrastá-lo agora e conectá-lo aqui agora e conectá-lo Basta arrastá-lo para baixo, para que fique melhor assim. Agora estamos multiplicando o multiplicador, então, por exemplo, se o multiplicador for três, podemos dizer três vezes podemos E isso mostrará ou aumentará o dano do cursor na quantidade correta. Agora precisamos do romance essencial. Precisamos saber em que nível estamos? Vamos criar essa variável dentro do modo de jogo. Se você abrir o modo de jogo e dentro daqui, vamos criar uma nova variável chamada nível de Ascensão Vamos transformar esse em um número inteiro. Compile por enquanto. Nós realmente não fizemos nada com esse nível de ascensão, mas isso realmente não importa agora Vamos voltar para o jogador e pegar o modo de jogo. Agora, se eu conseguir encontrá-lo aqui, nível do modo de jogo. E podemos simplesmente pegar esse nível de Ascensão e seguir em frente e conectá-lo a este Basicamente, estamos obtendo o nível de ascensão, que agora é zero, se o nível de ascensão for zero, se você voltar às tabelas de dados no nível zero, o multiplicador será um, o que basicamente significa que o DPS foi multiplicado por um, que é apenas o DPS que Isso não vai mudar nada. No entanto, se você subir pela primeira vez, então você tem uma ascensão de nível um, você vai multiplicar todo o dano em três, o que significa que você tem 300% Agora vamos encontrar todos os lugares em que temos DPS. E vou copiar todo esse código para que você não precise escrevê-lo novamente. Copie todo esse código. Agora vou falar sobre isso aqui novamente. Clique no primeiro, é só isso aqui. Clique nos nove segundos. Informação, não causamos nenhum dano aqui. Clique no terceiro, não causamos nenhum dano. Clique no quarto, aqui temos alguns danos. Isso está dentro da atualização da função. O DPS total atualiza o DPS total. Vamos fazer isso, depois vamos pegar esse DPS novamente multiplicado pelo multiplicador de danos da ascensão e A propósito, já posso ver que temos um bug aqui porque estamos atualizando a quantidade total de DPS obtendo todos os itens que compramos Estamos recebendo TPS para eles e, em seguida, os adicionamos ao DPS total Na verdade, isso também está acontecendo com o mouse aqui. Na verdade, está adicionando isso ao DPS total. O que eu quero fazer aqui para evitar o bug é clicar no item. Então eu vou dizer que não é igual. E vá em frente e selecione diferente do clique do mouse. Não queremos adicionar o DPS de cliques do mouse ao DPS total Um pequeno bug que estava aqui. Vamos apenas garantir que não adicionemos isso. E eu vou fazer um galho. Vá em frente e conecte-o aqui. E conecte-o novamente. E agora deve funcionar muito bem. Agora, vou reestruturar as coisas novamente. Tudo bem, agora isso acabou e estamos multiplicando isso pelo multiplicador da ascensão Vamos continuar com a próxima. Se eu voltar e encontrar minhas referências anteriores e clicar na próxima, aqui também estamos fazendo o DPS Isso está atualizando o ToolTipi. Novamente. Cole-o. Vá em frente e multiplique isso com o multiplicador de Ascensão e reconecte-o e Agora estamos multiplicando corretamente. Compile E temos um bug aqui. Diz que não temos a referência do modo de jogo e, na verdade, não temos. Vamos prosseguir e obter a referência do Gamode. Agora, antes de fazer tudo isso, vou dizer obter o modo de jogo e seguida, digamos, obter referência do modo de jogo. E vá em frente e conecte isso. Isso, eu vou atacar daqui e conectá-lo. Agora você também pode clicar com o botão direito do mouse e promover isso para nossa variável, se desejar. Na verdade, vamos fazer isso para deixá-lo um pouco mais limpo. Conecte-se, você pode fazer isso das duas maneiras. Basta conectá-lo diretamente ou agora pegue essa variável do modo de jogo e conecte-a aqui embaixo. Isso é a mesma coisa. Tudo bem, vamos agora compilar também Vamos garantir que o dano do cursor esteja sendo exibido corretamente. E será exibido corretamente porque já estamos multiplicando aqui no player sempre que causamos o aumento do dano do cursor dentro do Aqui, sempre que compramos um item, já multiplicamos por três, por exemplo, e o conectamos ao dano do cursor Esse dano no cursor deve estar correto. Esse dano aqui já está multiplicado pelo multiplicador de adesão Então, isso também está correto. Agora vamos voltar às referências . Clique na próxima. Não há DPS aqui. Clique na próxima. Também não há DPS aqui. Agora, tudo deve estar funcionando bem. Agora, só para garantir que o dano da ascensão seja exibido corretamente. Agora vamos voltar ao modo de jogo aqui. Toda vez que reiniciamos o jogo, vamos pegar esse nível de ascensão e, digamos, mais, mais Vamos adicionar um ao nível de Ascensão toda vez que subirmos Portanto, estamos obtendo a quantidade correta de dano nisso. Agora vamos tentar isso. Se eu clicar em Play e comprar um de cada aqui, comprarei o último e clicarei em Ascend Este não é realmente exibido corretamente, é apenas um texto estático. Mas vamos clicar em cancelar e ver o dano aqui para ver se ele é realmente exibido corretamente. Eu, cada mouse está recebendo 25 DPS e cada pena leve dá cinco Portanto, isso deve exibir 15. Por exemplo, se eu clicar em Ascender e clicar em Ascender Agora, isso está exibindo 15. Isso está exibindo 75, o que está correto. Então agora eu tenho o triplo do dano. Deixe-me tentar jogar e tentar subir novamente. Tudo bem, então agora eu vou comprar o último item aqui. Clique no último item. Eu posso ver isso de novo. Estou clicando em Ascend E então suba mais uma vez. E agora o dano da pena leve é 35, o que é correto, e 175, porque agora o multiplicador é sete, tudo está funcionando corretamente porque sete vezes cinco é igual a 35, o que é correto vezes cinco é igual a 35, o que E agora temos a quantidade correta de dano. Ok, agora isso está funcionando. E também para ter certeza de que estamos otimizados, vamos voltar para verificar se os critérios de ascensão foram atendidos Sempre que crio loops, sempre presto atenção se estou realmente executando esse loop nos momentos necessários Por exemplo, aqui estamos executando o loop que está correto. No entanto, você realmente precisa executar esse loop sempre que os critérios de ascensão forem atendidos Porque agora você sabe que os critérios de ascensão foram cumpridos. Você realmente não precisa executar esse loop novamente porque sabe que ele foi cumprido. Pegue esse ouro aqui, critérios de ascensão foram atendidos no início do código Só queremos executar isso. Os critérios de ascensão atenderam a essa função aqui. Queremos executá-lo sempre que este for falso. Vamos partir disso e, digamos, ouro, ascensão não é verdadeira, que significa que é falsa. Isso é falso. Queremos prosseguir e verificar se os critérios foram atendidos. No entanto, se isso se tornar verdade, não vamos executar porque estamos basicamente ficando falsos e não estamos executando o código. Não queremos executar todo esse código. Os critérios de ascensão já foram atendidos porque são desnecessários Já cumprimos esses critérios. Ok, lembre-se de que temos que tornar isso falso em algum momento, porque, caso contrário próxima vez que você subir, isso será verdadeiro por padrão porque você o configura como verdadeiro aqui embaixo e nunca mais o configura como falhas Vamos voltar ao reinício do jogo depois disso. Lembre-se de pegar os critérios de ascensão atendidos e defini-los como falsos sempre que você reiniciar o nível ou reiniciar o jogo aqui Vá em frente e salve tudo e vamos para a próxima. 117. 13.08 Exibindo o multiplicador de ascensão: Tudo bem, nesta fase final, temos que exibir a quantidade correta de dano que é multiplicada Então, se eu acessar a interface do usuário aqui no pop-up de ascensão, basicamente precisamos exibir a quantidade correta aqui Agora vou escrever um número falso, para possamos realmente ver que estamos alterando dinamicamente Então, eu vou escrever 00 por enquanto aqui. Vamos agora para o gráfico e basicamente precisamos alterar esse texto. Agora é chamado de temporizador redondo de texto e, na verdade, vou mudar para Ascension de texto, então faz mais sentido. E vamos compilar E agora podemos definir esse texto sempre que esse pop-up for aberto. Sempre que eu clico, o botão Ascent aparece e queremos atualizá-lo imediatamente Podemos fazer isso dentro da construção do evento, que é reproduzida sempre que esse pop-up é aberto. Vamos fazer isso aqui. O que queremos fazer é definir o texto. Vamos pegar esse texto e dizer definir texto novamente. Temos que usar um formato de texto porque estamos mudando as coisas dinamicamente Novamente, direto daqui e diga formatar texto. Saia e selecione-o. Você pode ver que estamos usando os mesmos nós repetidamente. Se você continuar praticando, você se lembrará de todos os nós e basicamente saberá o que fazer sempre que precisar criar um novo mecânico sozinho Vamos voltar ao designer. Eu só vou copiar tudo isso. Vou colá-lo aqui. Ele dirá que você reiniciará o progresso, mas agora precisamos desses colchetes aqui E digamos uma porcentagem de danos, uma porcentagem como essa, então mais danos. Diz que você reiniciará o jogo, mas com, por exemplo, 300% a mais de dano Vamos tentar fazer isso. Vamos conectar este primeiro. Agora, o que precisamos usar é exatamente como antes, precisamos clicar com o botão direito do mouse e dizer obter o Multiplicador de Ascensão Porque é basicamente de onde estamos obtendo as informações. Vamos parar agora novamente para o nível de Ascensão Precisamos que o modo de jogo tenha essas informações Vamos tirar tudo aqui. Digamos que obtenha o modo de jogo. E então vamos começar a partir daqui e dizer obter referência do modo de jogo. Vamos sair e conectá-lo. Agora, aqui para o modo de jogo, precisamos do nível de Ascensão Vá em frente e obtenha o nível de Ascensão, e você pode conectá-lo aqui Como obtemos a porcentagem? Agora estamos obtendo o nível de Ascensão. O que precisamos fazer é obter o multiplicador depois de reiniciarmos o jogo Porque basicamente o que você está fazendo aqui é que sempre que você abre esse pop-up e você só obtém esse nível de ascensão, que é zero agora, porque você começa no nível de ascensão zero, ele vai dizer um, basicamente 100%. Agora precisamos dividir o multiplicador que vem depois, se eu abrir a tabela de dados para se eu abrir a tabela de dados fique esse número que vem depois de sempre que subimos , qual é o número aqui dividido pelo 13/1 atual. E você sempre pode arrastar isso para a visualização e dizer 3/1, que é três vezes 100, ou seja, 300% Agora, se você tentar com o outro, se você tentar com o outro, se você tentar com o sete, digamos que subimos uma vez e eu estou no nível um e eu preciso o que precisamos fazer é dividir esse número que vem depois de sempre que subimos, qual é o número aqui dividido pelo 13/1 atual. E você sempre pode arrastar isso para a visualização e dizer 3/1, que é três vezes 100, ou seja, 300% Agora, se você tentar com o outro, se você tentar com o outro, se você tentar com o sete, digamos que subimos uma vez e eu estou no nível um e eu preciso para mostrar a porcentagem de dano que você receberá aumentada ao chegar ao nível dois. Agora vamos dizer 7/3 vezes 100. Isso equivale a 233% a mais de dano daqui até aqui, que faz todo o sentido. Deixe-nos fazer isso. O que precisamos fazer é pegar esse nível de ascensão e adicionar um a ele, adicionar um a ele, porque precisamos saber qual é o próximo multiplicador do nível de ascensão Agora, quando temos essa informação, por exemplo , são sete divididos, por exemplo, 7/3, que é a atual , a atual Basicamente, precisamos copiar tudo isso e excluir isso mais um e simplesmente sair e conectá-lo. Basicamente, estamos dizendo: qual é o próximo dano multiplicador Estamos dividindo isso pelo atual. Então, isso precisa ser convertido em porcentagem. Agora você pode fazer isso de duas maneiras. Você pode pegar isso e dizer como porcentagem e pode sair, selecioná-lo e conectá-lo aqui. Agora, eu não gosto desse método porque ele vai mostrar as casas decimais Por exemplo, se for 7/3 aqui e dissermos multiplicado por 100, vai dizer 233,33 Eu não gosto flutuadores ou das casas decimais que eu quero que Em vez disso, vou dizer multiplicado por 100 assim Então você pode dizer chão e ler sobre isso. Se você segurar o mouse sobre ele, ele diz -1,6 se torna -2,1 0,6 se torna um, ou você pode usar o chamado E esse é basicamente o oposto. 1.6 se torna dois e assim por diante. Eu só vou dizer chão. Basicamente, ele removerá as casas decimais e , em seguida, exibirá isso para você Agora, isso deve funcionar muito bem. Agora, se eu conectá-lo aqui , ele definirá o texto sempre que eu abrir esse pop-up e eu poderei compilar E vamos ver se funciona agora se eu comprar cada um desses itens como antes, e depois clicar em As. Agora vai dizer que vamos reiniciar o progresso, mas com mais 300 de dano. Agora precisamos da porcentagem, obviamente, do sinal. Então, vamos voltar e corrigir isso rapidamente. Se eu clicar aqui e definir um sinal de porcentagem, isso deve funcionar, basta compilar bem Tudo bem, agora eu vou comprar o último e vou clicar em As. E agora vai me mostrar 300%, o que está correto. Agora vou clicar em Ascend e vou jogar novamente e ver se tudo está funcionando agora Estou comprando o último item mais uma vez e vou subir pela segunda vez E agora vai dizer que você reiniciará a parte de progresso com 233% a mais de dano, prosseguirá e subirá E agora você pode ver que tudo está multiplicado corretamente, ok. Então foi isso. Por enquanto, tudo está funcionando corretamente. E agora podemos continuar na próxima seção em que estamos finalizando o jogo E podemos ir em frente e limpar tudo e empacotar o jogo. Então, vamos seguir em frente e passar para a próxima lição. 118. 14.01 Limpando o projeto: Tudo bem, agora terminamos o jogo e agora você tem que limpar o projeto. Agora, o que eu geralmente faço é que, se tenho um projeto maior, eu o limpo pelo menos uma vez por semana. Então, talvez toda sexta, todo sábado, eu não sei. Normalmente, eu não o limpo todos os dias porque o código muda constantemente. Então, às vezes você limpa alguma coisa, mas precisa trocá-la no dia seguinte. Não faz nenhum sentido porque você precisa limpá-lo novamente, então dá muito trabalho. Normalmente, limpo uma vez por semana ou duas vezes por semana no máximo. Então, vamos, por exemplo, ao projeto. Eu só vou aqui nesta lição. O objetivo é dar dicas de como limpar o projeto. E eu também vou limpar esse projeto e entregá-lo a você como o projeto final. Por exemplo, se iniciarmos o controle de jogo. Então, se você abrir o controle de jogo aqui e abrir o gráfico de eventos, verá que está um pouco confuso. O que eu costumo fazer é, por exemplo, aqui em cima, você pode selecionar todo o evento, começar , jogar aqui e clicar em C Você cria um comentário e eu posso, por exemplo, escrever begin, Play. Eu sei que é Begin. Jogue. Sempre que eu diminuo o zoom , também posso clicar nesse comentário e clicar no balão de exibição Quando ampliado, posso ver isso sempre que estou ampliado. Eu sei que este é o início do jogo, então não preciso ampliar constantemente para ver o que é. Você também pode clicar nele e alterar a cor do comentário. Você pode alterá-lo para o que quiser. Você pode alterar a cor aqui, alterar o alfa e assim por diante. Clique em OK. Agora você também pode salvar essa cor clicando e arrastando-a até aqui Clicando em OK. Da próxima vez que você criar um comentário. Por exemplo, neste player inicializado, você pode clicar em C. Por exemplo, você pode escrever Initialize Você pode clicar em Mostrar bolha e Zoom. Por exemplo, você pode clicar nessa cor de comentário. E agora você pode clicar na cor salva aqui. E clique em ok. Na verdade, vou fazer isso durante todo o projeto antes de entregá-lo a você. A segunda coisa que você pode fazer é também clicar nessas variáveis. E você pode atribuir a eles aqui uma categoria. Por exemplo, posso dizer widgets e pressionar Enter E agora você pode ver que está em uma categoria de widgets. Se eu clicar no próximo widget aqui embaixo, posso clicar aqui e clicar nos widgets E eu posso basicamente fazer isso para todos eles. Todos os widgets estão juntos dentro dessa categoria. E você pode ver que eu posso minimizá-lo. Agora eles estão dentro daqui. Também é assim que você pode limpar todas as variáveis que você tem. Vá em frente, compile e salve tudo agora. Basicamente, você pode fazer isso em cada projeto. Por exemplo, indo para o modo de jogo. No modo de jogo, talvez eu possa juntar todos esses pontos de desova Então, eu posso escrever uma categoria chamada pontos de desova, por exemplo E eu posso basicamente arrastá-los até aqui. Vá em frente e faça isso. Vá em frente e limpe seu projeto. Crie bens comuns. Agora, a terceira coisa que eu costumo fazer, novamente, é criar notas de redirecionamento Como você aprendeu, clique duas vezes. Crie algumas notas de redirecionamento e tente limpar seu projeto da melhor maneira possível O que eu também costumo fazer é reorganizar todos os eventos que criei Por exemplo, esses são os cortes de itens da loja, esse é o item de desova Por exemplo, você pode pegar isso e colar aqui ao lado e talvez comentar isso. Você também pode voltar aqui e ver se eles estão na ordem correta. Por exemplo, se você quiser que isso fique aqui embaixo, e assim por diante. Então, vá em frente e tente organizá-lo da melhor maneira possível. Se houver algumas coisas que você deseja converter em uma função em vez de um evento, você também pode fazer isso. Por exemplo, digamos que isso reinicie o jogo. Se você quiser fazer isso como uma função, vamos realmente transformá-la em uma função. Normalmente, para funções, você não pode converter coisas em uma função se forem eventos cronometrados Por exemplo, se eu tiver um atraso. Você pode ver que este ícone aqui significa um evento cronometrado, fly-rod. Clique aqui e diga fechar para funcionar. Isso me dará um erro porque você não pode converter funções em funções. Lute, clique e diga a linha do tempo também e adicione uma linha do tempo. Esta também é a primeira vez. Não consigo clicar com o botão direito do mouse e fechar para funcionar Isso me causará um erro. Eu posso ver isso olhando o ícone na parte superior e não tenho tempo. Basicamente, posso transformar isso em uma função. Eu costumo fazer isso às vezes porque, se você criar muitos eventos em um gráfico de eventos, ele realmente começará a funcionar. Se você tiver um jogo grande o suficiente, ele começará aqui sempre que você entrar neste plano Agora você pode transformar esses eventos em funções ou criar novos gráficos de eventos Se você clicar aqui no sinal positivo, você cria um novo gráfico de eventos. Por exemplo, fizemos isso no curso de tiro em primeira pessoa Por exemplo, você pode chamar isso de ascensão. E você pode ter todo o código de ascensão aqui Se for muito código, o que você basicamente pode fazer é copiar tudo isso basicamente controle x) para extraí-lo e ir para o próximo gráfico par. Você pode clicar no controle V. Agora você o tem dentro desse gráfico par. Você não precisa ver isso aqui no normal, mas você o tem aqui embaixo. Em vez disso, basta clicar no controle Z porque não temos muito código aqui. Vou deletar esse gráfico uniforme se você quiser transformar coisas em uma função. Você também pode fazer isso voltando ao gráfico de eventos aqui. Então, o que você faz ou o que eu geralmente faço é selecionar todos os nós aqui sem o evento. Posso gravar click collapse em uma função novamente. Normalmente eu ligo para isso para começar. Se eu apenas arrastá-lo até aqui, chamo de reiniciar o jogo. Em seguida, escrevo, clique neste evento para ver onde eu o usei. Encontre referências e clique no ícone, todos os lugares em que o usei. Essas referências são basicamente apenas essa, não é o que eu usei. Clicando no próximo, Reinicie o jogo. Aqui embaixo, posso sair desse modo de jogo agora e dizer Reiniciar o jogo. Agora estou usando minha função em vez do meu evento. Eu posso deletar isso e posso conectá-lo aqui. Acabei de compilar aqui, volto ao modo de jogo, excluo este evento agora E exclua essa função, porque agora você está basicamente usando essa função para reiniciar o jogo. também uso esse método Às vezes, também uso esse método para limpar meu gráfico de eventos. Quando vejo que alguns eventos eu realmente não preciso, posso transformá-los em uma função. Agora, qual é a diferença entre essa função que criei e esse evento? Absolutamente nada. Basicamente, ele apenas limpa seu gráfico de eventos Agora você pode ver que fica mais limpo. E mesmo que você queira que esse nível desbloqueado seja uma função, você pode fazer isso reduzindo-o em uma Lembre-se de clicar com o botão direito do mouse aqui, encontrar referências. Vá em frente e clique no pequeno ícone. Onde quer que você tenha usado isso aqui na base inimiga, você pode transformá-lo em uma função e vez disso, usar a versão da função. E então você pode excluir este. Vá em frente e limpe seu projeto dessa maneira. Vá em frente e lembre-se de sempre salvar seu projeto, e vamos passar para o próximo, ou empacotamos o projeto. 119. 14.02 Empacotando o jogo: Tudo bem, agora é hora de empacotar o projeto. Assim, podemos enviá-lo para amigos e eles também podem tentar jogar ou para a família. Então, para fazer isso primeiro, antes de empacotarmos, gostaria de abrir o depurador ou o log Então, registre registros se você simplesmente clicar em Janela e Registro de Saída para mostrar isso. Agora podemos ver se temos algum erro ao exportá-lo. Agora, antes de fazer isso, vou clicar com o botão direito do mouse aqui e limpar os registros. Eu começo do zero, para que eu possa ver o que está acontecendo agora. Clicando nos filtros aqui em cima, você pode ver as mensagens, avisos e erros Às vezes eu simplesmente removo mensagens como essa, só consigo ver os avisos e erros Isso é basicamente o que é importante, para que possamos corrigi-los. Mas, por enquanto, vamos continuar com a mensagem. Deixe-me minimizar isso um pouco para que eu possa realmente ver o que estou fazendo. Assim, clicando aqui nas plataformas, acessando o Windows e selecionando Remessa. Agora, quando você seleciona o frete, você também precisa ir basicamente aqui. Deixe-me fechar isso por enquanto. Indo para Editar configurações do projeto, aqui, você precisa ir para Embalagem. Agora, dentro da embalagem, o importante é o Avançado aqui, clicando em Avançado. Então vamos descer. Agora, aqui no Avançado, você precisa incluir os mapas que deseja empacotar aqui na lista de mapas para incluir em uma compilação de pacote , clicar no sinal de adição e clicar nos mapas. Clicando nesses três pontos, selecione os mapas que você tem Se eu soubesse, estamos dentro do projeto aqui na pasta de conteúdo e criamos essa pasta de mapas. Vou selecionar este mapa, Dungeon. Basicamente, o mapa principal com o qual estamos trabalhando clicando em Abrir. Agora, se você tiver algum filme, por exemplo, quando os jogos iniciam e eles têm uma tela de inicialização, inicie o filme, você também pode incluí-lo. Se você tem diretórios extras em seu mecanismo, você não os usa, você também pode adicioná-los aqui. Mas, basicamente, isso é tudo o que temos que fazer aqui. Além disso, para a configuração construída pelo projeto, vou transformá-la em envio. E diz que se o projeto tem código ou está executando um editor criado localmente, eu sou a favor da compilação vou dizer que sempre construo. Sempre que transformarmos um envio aqui para a reconstrução, vou clicar nele ou em distribuição Eu vou marcar isso também. E agora você também está pronto para melhorá-lo. Vá em frente e clique nas Configurações do projeto. Mais uma vez, aqui em cima, procure por FPS suave, aqui, taxa de quadros suave É muito importante marcar isso , porque se você não fizer isso, ele rodará seu jogo com o FPS mais alto que o computador do jogador pode rodar Eu fiz isso com o Farm Tail para começar por engano, porque eu não conhecia essa opção que rodamos a, por exemplo, 500 FPS. 600 FPS E isso realmente prejudicará seus computadores porque eles funcionarão super rápido e você pode ouvir os ventiladores correndo super rápido. Ao clicar aqui, não preciso ter mais de 60 FPS neste jogo Não é um jogo de tiro nem nada. E eu posso ter até 22 FPS se o computador estiver muito lento por parte do jogador Mas, basicamente, vamos maximizar o FPS para 62. Você também pode chegar a 122 FPS se quiser, mas vou deixar que seja para 62 PS. Feche isso. Clique em Arquivo, Salvar tudo. Agora você pode clicar em Plataformas, Conteúdo do Pacote Windows. Mas deixe-me abrir novamente. A saída da minha janela é bloqueada para que eu possa ver o que está acontecendo. Clique com o botão direito para limpar as fechaduras antes de fazer isso. Agora também o que você precisa se lembrar de fazer aqui também, clique em Filtrar e mostre tudo também. Eu posso ver todas as mensagens. Eu também posso ver tudo isso . Apenas todos eles estavam marcados. Vá em frente e clique em Plataformas e, em seguida, clique em Windows. E então vá em frente e empacote o conteúdo. Agora eu criei uma pasta aqui na minha área de trabalho chamada Pacotes. Basicamente, vá em frente e crie uma nova pasta em algum lugar seu computador, isso realmente não importa. E vá em frente e clique em Selecionar pasta, e ela será empacotada aqui. Agora vai levar algum tempo. Na primeira vez que ele faz isso, geralmente mostra alguns erros porque eu nunca empacotei pela primeira vez sem erros Porque existem alguns erros aleatórios que aparecem em algum momento. Tudo bem, agora eu posso ver que estamos pegando um bug aqui e diz Falha desconhecida no cozimento. E você simplesmente para de empacotar porque temos um erro. Então clique aqui e clique nas mensagens, e vamos ver o que é. E diz propriedade da estrutura e diz Estrutura desconhecida. Agora, esse é um bug conhecido no motor uneral e é um pouco irritante Não sei por que isso acontece, mas basicamente diz que você tem uma estrutura desconhecida. Realmente não faz nenhum sentido porque nós fizemos isso, está funcionando e está tudo bem. Mas preste atenção em onde ele está e dentro da sua interface de usuário. Informações do inimigo na Web. Se você acessar sua interface, vá até a interface do usuário e abra as informações do inimigo. Isso é basicamente o que está lhe dizendo. Abra as informações do inimigo, vá para o Gráfico. A única coisa que você precisa fazer por algum motivo é clicar em Arquivo, Atualizar todas as notas E então isso deve resolver isso. O arquivo atualiza todas as notas. Em seguida, o próximo é o código de nível B na interface do usuário. Apenas minimize isso, eu também vou para o nível Cod aqui. Arquivo gráfico, atualize todas as notas. O que eu também costumo fazer é atualizar todas as notas dentro da biblioteca Ao abri-lo, clique no primeiro, no arquivo de informações do inimigo, atualize todas as notas A segunda atualiza todas as notas, a terceira apenas para garantir que não tenhamos esse bug novamente. Sempre que cozinhamos e clicamos em Salvar tudo, agora ele deve funcionar. Clicar em Plataformas novamente, na verdade, deixe-me abrir primeiro o log de saída P, clicar com o botão direito do mouse, limpar o arquivo ou as plataformas de log e, em seguida, empacotar o projeto novamente aqui. Agora clique aqui e mostre todas as mensagens também só para ver se temos alguma caixa agora. Realmente não deveria acontecer. Geralmente acontece quando diz Estrutura desconhecida, você só precisa atualizar todas as notas por algum motivo Não sei por que isso acontece, mas é um pouco chato. Mas agora você pode ver que tudo está cozinhando e tudo está funcionando bem. Não temos erros. Só leva um minuto aqui. Agora, você sempre pode clicar aqui e remover as mensagens. Agora o cozinheiro está completo, o pacote está completo. O que eu geralmente faço é remover as mensagens para ver se há algum erro no meu jogo. E você pode ver que o projeto está super limpo. Não temos um único aviso. Não temos uma única era. O jogo está funcionando perfeitamente e é isso que queremos. Agora vamos para a pasta Pacotes dentro da minha área de trabalho. E dentro daqui eu posso abrir essa pasta do Windows que ele criou, e agora o jogo está dentro daqui. Vamos tentar rodar esse jogo fora do motor. Como posso ver, tenho alguns erros aqui, problemas que preciso corrigir. Mas, como você pode ver, o jogo está funcionando muito bem. Preciso reaplicar a música e assim por diante. Mas também posso ver que o fundo está desfocado. Também posso ver que esse texto está muito próximo um do outro. Então, vamos corrigir isso e voltar todos os quatro. Para fechá-la, vou deletar essa pasta por enquanto. Agora vamos ver qual é o problema do embaçamento. Agora, o problema embaçado é se você abrir, por exemplo, essa textura de prisão de masmorra Vamos descer até aqui na configuração de textura. Vamos clicar em Avançado. Aqui embaixo você vê algo chamado filtro nuclear. Em vez disso, você precisa alterar este para o mais próximo. Quando você a altera para a mais próxima, isso significa que ela não borrará sua textura sempre que você a exportar ou empacotar Na verdade, você precisa fazer isso para todas as texturas. Agora vamos ver como podemos fazer isso facilmente. Agora, se eu clicar em Ativos e clicar aqui, descer aqui, e aqui temos uma textura, vou clicar nela aqui. Ao fazer isso, podemos ver todas as texturas que temos no jogo dentro dessa pasta Assets Vamos tentar fazer isso com todos eles. Deixe-me clicar no primeiro, Shift, olhar no último, clicar com o botão direito do mouse e, em seguida, ir para Seleção de edição da ação do ativo na matriz de propriedades. Estamos apenas tentando fazer tudo de uma vez. Se eu clicar na textura aqui novamente e puder ver esse filtro, e puder ver esse filtro, mude-o para o mais próximo, que é a configuração correta que podemos salvar. Então vamos ver se os blocos foram incluídos aqui. Eu posso ver que os ladrilhos estão incluídos. Está tudo bem. Tudo está incluído aqui. Basicamente, tudo deve funcionar bem. Ok, agora isso está feito. Também temos um problema com o nome. Vamos corrigir isso também. Se eu clicar aqui e remover essa textura para poder ver tudo, mais uma vez, posso clicar no inimigo. Se eu voltar às plantas, abra os inimigos e a base inimiga E eu clico na janela de exibição. Agora, clicando na barra de saúde, eu só preciso mover a barra de saúde um pouco abaixo, acredito que se você clicar aqui, clique em Jogar. Como um jogo independente, você deve ser capaz de ver como fica aqui sem tentar empacotar o projeto aberto aqui no meu segundo monitor e eu posso ver como é Agora você pode ver que nada está mais embaçado. No entanto, como você pode ver agora o nível e nós podemos movê-lo um pouco para baixo, assim como a saúde. Vamos fechá-lo. Clique nos widgets de informações do inimigo Vou movê-lo para -25 também para a barra de saúde. Vamos tentar -45 E vamos compilar e clicar em reproduzir novamente. Agora. Parece muito melhor quando está tela cheia e tudo parece jogável e tudo parece bom, se você quiser Você também pode fazer o não filtrado para a interface do usuário apenas para garantir que tudo esteja bem e não Você sempre pode voltar para a interface do usuário. Se eu vou para o conteúdo, eu abro minhas imagens, basicamente esses itens aqui também. Se eu pressionar o botão direito do mouse, clicar com o botão direito do mouse, selecionar a ação ácida , selecionar na matriz de propriedades, ir para a textura e então o filtro também deverá estar mais próximo. Para eles, deixe-me abrir as texturas aqui também. Esse é o efeito de impacto. Só para garantir que o efeito de impacto também não fique embaçado, basta abri-lo e descer novamente para Mude-o para o mais próximo, feche-o. Agora, também para os ícones. Clique com o botão direito do mouse, defina ações, edite a textura da matriz de propriedades e, em seguida, altere-a para a mais próxima, feche-a para fontes. Realmente não preciso fazer nada aqui. Agora, para os botões. Novamente, edite-os e torne o filtro de textura mais próximo. Agora isso está feito para todos eles. Vamos clicar em Salvar. Vou colocar o volume da minha música no padrão, que é um. Mais uma vez, também vou, em vez das plantas e do interior da base inimiga, reativar meu som durante o ano inimigo em que eu desconectei Compilar Salvar tudo. Agora, deixe-me seguir em frente e tentar empacotar o projeto mais uma vez. Agora que o projeto foi empacotado, deixe-me clicar no Dungeon Clicker mais uma vez para ter certeza E você pode ver que nada está mais embaçado. Tudo parece bom, a interface do usuário parece boa, todo o som está funcionando. Eu posso jogar basicamente reiniciando as moedas. Isso é algo que eu perdi, mas não é realmente um problema no momento. Mas você pode ver que tudo está funcionando e a lista está funcionando aqui, e a Ascensão está funcionando basicamente também E eu posso ver que causa a quantidade correta de dano e agora temos um jogo concluído. Tudo bem, agora terminamos o projeto. E você deve estar muito orgulhoso do que fez até agora, porque passamos por muita coisa. Causamos pontos de desova, causamos danos aos inimigos, causamos todos esses dois D juntando-os, a interface do usuário, codificando a interface e assim por diante Então, você trabalhou muito e espero que tenha aprendido muito com este curso. E espero que tenha sido muito divertido aprender também. E se você quiser, você também pode dar uma olhada nos meus outros cursos. Tenho muitos cursos aprofundados e ainda estou criando novos cursos até hoje. Então, muito obrigado por assistir. Espero que você tenha se divertido muito. Eu me diverti muito criando discursos. E lembre-se, se você deseja obter ajuda 2047, você sempre pode entrar no meu servidor de discussão. Somos uma comunidade que adora ajudar. E também podemos falar sobre coisas no desenvolvimento de jogos em geral. Ou você pode me mostrar seu trabalho. Você pode mostrá-lo para a comunidade. Uma comunidade muito saudável de se conviver. Muito obrigado por se matricular neste curso e espero que você se divirta muito E nos vemos na próxima.