Masterclass de programação em C# e Unity para desenvolvimento de jogos 2D | Michael Murr | Skillshare

Velocidade de reprodução


1.0x


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

Masterclass de programação em C# e Unity para desenvolvimento de jogos 2D

teacher avatar Michael Murr, Software Engineer | Coding Instructor | Game Dev

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.

      Por que você deve assistir este curso

      4:05

    • 2.

      Como usar este curso

      14:35

    • 3.

      Download de Unity e estúdio visual

      7:09

    • 4.

      Unity e Visual Studio 101

      10:50

    • 5.

      Controle de versão 101

      18:37

    • 6.

      Inspiração com jogos Hades

      6:54

    • 7.

      Seção 2: configurando nosso mundo — Como configurar folha brite-

      21:18

    • 8.

      Como criar o jogador

      16:03

    • 9.

      Como usar as entradas (variáveis)

      21:31

    • 10.

      a mudar a posição do jogador (transformação de objetos de jogos

      11:28

    • 11.

      Hit Hitting Hitting (colisões) Obstacles

      15:04

    • 12.

      Objetivo de arma (ponto de tela)

      13:18

    • 13.

      Para direcionar a direção direita (se declarar)

      10:43

    • 14.

      Animações na Unity

      24:28

    • 15.

      Melhora animações para jogadores

      18:29

    • 16.

      Velocidade do jogador 00

      5:57

    • 17.

      Seção 3: configurando a mecanica de filmagem — Criação -

      16:46

    • 18.

      Balões de que Firing (prefabs e instanciação)

      14:39

    • 19.

      Contador de dois

      9:01

    • 20.

      Bolas de se atingindo os outros

      9:36

    • 21.

      Efeito de impacto de balas

      16:56

    • 22.

      Como adicionar trails às balsas

      12:44

    • 23.

      Seção 4: configurando arquivos

      20:24

    • 24.

      Se movendo em direção

      11:42

    • 25.

      Como animar inimigos

      12:59

    • 26.

      Enemy Damage Enemy (métodos)

      17:06

    • 27.

      Splatter

      9:55

    • 28.

      Efeito de sangue Enemy

      22:03

    • 29.

      Enemies de Entradas (coroutines)

      11:06

    • 30.

      Como fazer bolsos completos

      12:05

    • 31.

      Faixa de fotografia inimiga

      10:45

    • 32.

      Design de jogos

      6:24

    • 33.

      Seção 5: criando quartos — introdução à lading na Unity

      15:06

    • 34.

      Tilemap com tilemap

      9:59

    • 35.

      Como criar uma sala maior (Cinemachine)

      13:20

    • 36.

      Como criar portas de fechamento (para cada loop) (loop)

      19:52

    • 37.

      Como coletar todos os arquivos (lists) (lists)

      15:41

    • 38.

      Portas de abertura 00

      14:04

    • 39.

      Seção 6: fluxo de nível (gerenciador de cenas (gerenciador de cena e a coragem) (

      16:45

    • 40.

      Gerente de níveis

      10:32

    • 41.

      Como fazer a Making até

      11:47

    • 42.

      Fading e out (tela).

      20:02

    • 43.

      Seção 7: ambiente destrutivo - Tornado

      14:19

    • 44.

      Como animar o Torpedo

      14:33

    • 45.

      Objetos quebráveis

      17:09

    • 46.

      Peças quebradas

      9:55

    • 47.

      As peças quebradas (Lerp)

      11:50

    • 48.

      Como destruir peças vagamente

      10:50

    • 49.

      Seção 8: filmagem em a captura - criando um sistema de fotografia

      11:53

    • 50.

      Contador de taxa de fogo

      6:25

    • 51.

      Ter armas diferentes

      11:54

    • 52.

      Comutação entre armas

      13:35

    • 53.

      Tela de tela com armas

      22:22

    • 54.

      Criação shake

      14:21

    • 55.

      Seção 9: sistema de saúde — configurando o sistema de saúde de jogadores

      7:09

    • 56.

      Tama com barra de saúde

      13:49

    • 57.

      Como atualizar a UI com scripts

      10:05

    • 58.

      Como criar uma tela de morte

      13:16

    • 59.

      Adição de Invincibility temporária

      19:11

    • 60.

      Como adicionar picos no chão

      12:07

    • 61.

      Seção 10: captadores — de coleta a a saúde

      13:20

    • 62.

      Gota de artigos aleatórios

      19:56

    • 63.

      Como coletar armas

      18:53

    • 64.

      Como adicionar armas colheitas

      13:50

    • 65.

      Como criar um test que se abre

      16:28

    • 66.

      O o que se Spawn

      6:49

    • 67.

      Seção 11: música e SFX - vamos falar sobre música

      16:36

    • 68.

      SFX na Unity

      12:58

    • 69.

      Usando mixer

      14:47

    • 70.

      Seção 12: vários tipos de inimigos — tipos diferentes de Entrada: tipos de inimigos (design de jogos) (de jogos)

      10:17

    • 71.

      O Enemy

      11:55

    • 72.

      O Wanderer

      16:15

    • 73.

      O Patroller

      14:35

    • 74.

      Seção 13: sistema de compra e dinheiro - criando dinheiro (Bitcoin) - Criação dinheiro (Bitcoin)

      9:44

    • 75.

      Como coletar Bitcoin

      10:10

    • 76.

      Exibindo a UI no nosso tela

      7:29

    • 77.

      Como ganhar Bitcoin

      5:37

    • 78.

      Itens de loja

      12:35

    • 79.

      Compra na loja

      15:20

    • 80.

      Como obter um aprimoramento de saúde

      9:58

    • 81.

      Compra por armas

      18:41

    • 82.

      Seção 14: criando menus — Configurando tela de título - Configurando

      18:44

    • 83.

      Com tela Victory

      11:18

    • 84.

      O restauro de nível após a morte

      8:12

    • 85.

      Configuração menu de pausa

      8:50

    • 86.

      Na t de a usar a página

      6:42

    • 87.

      Seção 15: bates de Boss (a máquina de estados C# avançada - Introdução à máquina

      15:50

    • 88.

      Como configurar o movimento Boss

      16:18

    • 89.

      Movimento melhores para boss

      11:50

    • 90.

      Como configurar o Boss

      14:35

    • 91.

      Boss

      9:00

    • 92.

      Como adicionar o sistema de saúde de Boss

      13:34

    • 93.

      Como adicionar barra de saúde de Boss

      21:22

    • 94.

      Adição da habilidade de fotografar

      30:22

    • 95.

      Seção 16: geração de quartos (a programação orientada em C# de C# de

      8:05

    • 96.

      Como criar o Enemy

      14:09

    • 97.

      Descreva vários tipos de Entrados

      17:16

    • 98.

      Concluir as ondas

      11:55

    • 99.

      Como escolher um quarto

      20:02

    • 100.

      Vai até o próximo nível

      14:40

    • 101.

      Próximo de caminho adequado

      15:10

    • 102.

      Padrão de singleton

      19:56

    • 103.

      Tweaking finais

      22:03

  • --
  • 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.

1.985

Estudantes

3

Projetos

Sobre este curso

Este curso é feito com os mais recentes e as técnicas mais recentes usadas no desenvolvimento de jogos moderno (Unity 2D222)

A melhor maneira de aprender alguma coisa é fazendo isso de forma muito divertida e é aqui a aqui a partir de uma coisa a partir de ação. Se você quiser aprender como esses jogos incríveis que vê não é melhor para começar que este curso. Certificamos que este curso tem tudo que você precisa levar você a partir de um iniciantes (mesmo com zero com a versão de programação) e levando lentamente para nível intermediário

Eu escolhi o projeto principal neste curso para ser um Roguelike 2D porque não apenas tem uma vasta biblioteca com conceitos de desenvolvimento de jogos que podemos implementar e aprender, mas também porque é muito simples (especialmente se for iniciantes) para se entrar em que se iniciar a sua jornada de desenvolvimento de jogos.

Tudo neste curso foi meticuloso criada, de revisão e redefinição para fornecer a melhor experiência possível e maximizar sua aprendizagem ao máximo. Então, não vai ter um ótimo tempo que também vai ter o mais ponto a o mais BANG A SUA bUCK ao sair a ir a partir deste curso, com muitas ferramentas no arsenal para continuar a visitar no oeste da de jogos.

Seção 1: introdução

Vamos começar baixando o Unity e estúdio visual de visu, Como instalar eles e garantir a certeza de que funcionar. Em seguida, vamos criar nosso primeiro código em C# e usar a interface Unity e se acostumar com a interface Unity. Por fim, vamos falar sobre o design de jogos do nosso jogo e o que ele leva para começar a criar um jogo do zero

Seção 2: configurando nosso mundo

Nesta seção vamos começar a aprender que folhas de are são e como configurar as folhas de In Vamos aprender quais as camadas estão na Unidade. Vamos analisar os colliders e rigidBodies e adicionar aos nossos objetos de jogo e ver como ela começa a ser afetada com física. vamos aprender como animar nossos sprites. Vamos entender o que mesclagem que vai ajudar muito a reduzir a dificuldade da animação

Seção 3: configurando a Mechanics de fotografia

Nesta seção vamos criar nossos bolos de bullets, de uma vez, na sua de de uma parte de mouse é a a de uma parte, tendo um counter para criar a queima automática e adicionar efeitos de impacto às bolas. Ao fazer tudo isso, vamos aprender sobre prefabs e prefabs e como manipular o mundo do nosso jogo para tornar que ele parecer muito mais agradáveis

Seção 4: configurando arquivos

Esta seção concluiu a seção anterior que concluiu Criamos nossos mechanics de filmagem, mas precisamos algo para fotografar. Vamos configurar nossos inimigos e fazer a sua jogada. Vamos mergulhar mais profundo com animações adicionando o nosso inimigo e os métodos de uso, de acordo com a o nosso inimigo e os arras e a o que a Coroutine

Seção 5: criando quartos (mapa de telhas)

Até este ponto usaremos uma imagem pre-created para representar o mapa. Os dias são acabados e é hora para criar nosso próprio mapa. Vamos ser introduzidos aos leigos na Unidade, adicione várias colidentes a ele e aprender sobre um mecânico na Unity que poucos a serem Também vamos ter nossa compartilha justa em C# quando aprendermos de loops e listas

Seção 6: fluxo de nível

Nesta seção vamos aprender sobre o gerente de cenas no Unity que nos permitirá criar vários níveis vários em nosso jogo e a transição entre eles. Além disso, vamos aprender uma maneira muito complicada para garantir que sempre chegar na posição certa ao se mover-nos nos mundos

Seção 7: ambiente destrutivo

Esta é uma da seção mais divertida no curso. Cada roguelike tem um mecânico de roguelike e vamos ter nosa uma. Vamos adicionar um mecânico de tornado, mas não apenas nos vamos fazer nos tornar invincible e um pouco ágios que também vai destruir qualquer objeto de jogo tornado no nosso caminho

Seção 8: captura avançada (sistema de armas) (sistema de armas)

O que é melhor do que ter uma arma com as armas para fotografar? Ter muitos muitos deles e poder escolher entre os quais as saltos, vamos adicionar várias armas ao nosso jogo. Cada com o próprio estilo de filmagem, velocidade e danos. Com várias balas e taxa de disparo para cada uma. Não apenas isso, também vamos fazer nossa câmera shake sempre que fotografamos para adicionar mais peso ao nosso jogo

Seção 9: sistema de saúde

Nesta seção vamos adicionar um sistema de saúde de jogadores Também visualizamos criando uma barra de saúde que podemos ver mais sobre uma tela. Vamos aprender como podemos atualizar a barra de saúde através de script e adicionar uma tela de morte legal sempre que nosso jogador sofre uma morte. Por fim, vamos adicionar spikes no chão, quando o jogador se machos com eles se machos e perder um pouco de saúde

Seção 10: pickups

Nesta seção vamos mergulhar em into Vamos pegar as armas do chão. As moedas com o quais vamos poder comprar dinheiro em lojas, pacotes de saúde que uma vez ferir que podemos fazer e retirar-se e também vamos adicionar um bah que possamos abrir e obter uma armas. Uma arma aleatória é onde nossas habilidades C# será começar à concretização

Seção 11: música e SFX

Tempo para respirar um pouco vida a vida neste jogo adicionando efeitos somde e música. Agora nosso jogo vai da estática para dinâmica. Vamos adicionar música de fundo e SFX. Para cada nível e cada interação, respetivamente para cada

Seção 12: vários tipos de inimigos (alguns devem ter ataques de mele)

O que É mais divertido que se ter um inimigo que pode matar? Ter quatro tipos diferentes de inimigos que podem matar você. Vamos ter o wanderer, o We'll o inimigo assustado e o inimigo esquelético irritado. Essa seção será a base do nosso AI e abrirá as portas para a maneira de implementar nosso chefe na próxima seção

Seção 13: sistema de loja e dinheiro

Agora que pegue artigos, queremos vendê-los ... para MONDE! Quem não gosta dinheiro? Vamos introduzir um sistema monetário então a para criar uma economia. Criamos uma loja com um nutricionista e vamos ser transaccionar com ele usando o dinheiro que precisamos comprar e os itens que temos

Seção 14: criando menus

Cada jogo tem a ter um menu principal. Mas também precisa de um menu principal dinâmico. Criamos um menu simples com o fundo. Mas a parte de saídos é a maneira como damos a nossa pessoa de continuar de sua última salvar ou começar um novo jogo. Também vamos adicionar uma tela vital, uma maneira de reiniciar o nível após a morte e um mecânico de puso/Resume/

Seção 15: batalhas de batalhas de Boss (máquina de Estado da a a

É hora para a parte divertida aqui. Vamos criar um combate de luta com We'll Mas não apenas de patros, a luta de chefe vai usar uma máquina de estado. Qual também é ao mesmo tempo o animador ao tempo. Vamos enviar o novo novo chefe para o estado para a condição e em cada uma, que terá um conjunto diferente

Seção 16: geração de quartos (a programação orientada C# em C# de

Vamos chegar à nossa seção final onde vamos criar várias salas com cada com que é um pouco de ajuste com a mecânica do jogo, vamos ter um surto de inimigos aleatório. Vamos ter portas que estão fechados e somente quando destruamos todos os inimigos no nosso nível desejado. E terá uma opção para escolher entre dois níveis para ir depois de matar todos os que estão aqui aqui

O que você vai aprender neste curso:

  1. Use o Visual Studio com a Unity com maneira simples

  2. Como definir um bom ambiente de desenvolvimento de jogos

  3. Unity Engine está de uma maneira simples e abrangente

  4. Os conceitos mais divertidos de formas mais divertidas de a criação de um jogo

  5. Use uma entrada para jogadores para controlar o comportamento do nosso jogo

  6. Adicione componentes diferentes aos objetos de jogo

  7. Adicione a gravidade e outras forças aos objetos de jogo

  8. Faça objetos de jogos interact em nosso jogo

  9. Adicione folhas de sprite e o dilatar

  10. Crie ativos de telha

  11. Como criar níveis a partir de nossos ativos de tile

  12. Torne-se um trabalhador de problemas no ninja e aprender como resolver qualquer problema no desenvolvimento e codificação

  13. Crie animações

Conheça seu professor

Teacher Profile Image

Michael Murr

Software Engineer | Coding Instructor | Game Dev

Professor

Hi there, my name is Michael Murr. I'm a software engineer from one of the most highly esteemed universities in the Middle East and the founder of 2M Dev. 

I started coding when I was about 11 years old, when my dad taught me my first lines of HTML, and I have never looked back.

I am a software engineer with more than 10 years of experience. I am the founder of 2M GameDev, a leading game development software company in the Middle East.

Over the years, I've helped hundreds of students create real-world games, learn how to code, and set their lives up for opportunities in many fields that require a software programming skillset. And I will help you do the same.Visualizar o perfil completo

Level: Beginner

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. Por que você deve assistir este curso: Então você provavelmente está aqui se perguntando, como meus jogos favoritos são criados? Como o inimigo sabe onde estou e me segue? Como eles devem projetar arquivos? Como funcionam as placas? Posso criar meus próprios níveis? Como faço para captar padrões? Como atiro nessas armas? As respostas a todas essas perguntas ficam claras quando você entende alguns conceitos fundamentais, como adicionar um corpo rígido a objetos do jogo, começar a movê-lo. Adicione animações para fazer com que o Sprite troque em um mundo que construímos usando um conjunto de blocos, permita que ele interaja com o mundo e muito mais de uma cena para a outra. Ah, e também adicionar comportamentos a esses objetos usando código com mais de 30 scripts e milhares de linhas de código, você se tornará uma programação mestre C-Sharp. Meu nome é Michael Moore, fundador da WM game Dev, e meu objetivo é fazer de você o melhor desenvolvedor de jogos e da maneira mais divertida possível. Desenvolvi uma estratégia que ajudou milhares de aspirantes a desenvolvedores de jogos a alcançar seus objetivos de criar os jogos do mundo real. E eu quero fazer o mesmo por você. O que aprendi é que pode ser muito difícil saber por onde começar e quais passos tomar para ir do iniciante ao intermediário, não apenas no desenvolvimento de jogos, mas na programação e aprendendo a codificar. E é aí que entra a nova estratégia atualizada. Eu chamo isso de pirâmide cíclica, onde começamos aprendendo o básico do mecanismo Unity, programação C-Sharp e design de jogos usando slides e documentação de unidades, usamos imediatamente o que aprendemos a aprimorar nosso jogo. Mas à medida que avançamos em nosso projeto, voltamos aos mesmos conceitos e usamos esses e formas mais complexas e divertidas. Finalmente, temos as duas últimas seções onde vamos mais fundo do que qualquer outro curso. Primeiro, em unidade avançada, onde projetamos uma máquina estatal para nossas lutas contra chefes. E em segundo lugar, avançado C-sharp foi semana em que demos um loop de jogabilidade de nível 2 consistente. Você também terá a chance de flexionar seus músculos do desenvolvedor de jogos porque com cada vídeo há um mini desafio para você concluir. E mesmo que você não consiga descobrir como fazer o desafio, não se preocupe, estarei lá para ajudá-lo depois de tentar estarei lá para ajudá-lo depois de tentar completar o desafio com você. E a parte mais incrível é que estamos fazendo tudo isso com a versão mais recente do Unity, com as mais recentes técnicas e conteúdo e desenvolvimento de jogos modernos. Muitos alunos, assim como você, que não conheciam a casa para produtos e o y limita as pontuações para serem extremamente úteis. Mas mais de 10 mil alunos, centenas de avaliações, um número que provavelmente cresceu no momento em que você está assistindo este vídeo e uma enorme comunidade ativa em crescimento na pontuação. E posso dizer com absoluta confiança, as pontuações facilitam para qualquer iniciante com experiência de codificação 0 entrar e começar a aprender a criar ganhos incríveis. Então, o que você deve esperar até o final das pontuações? Você se tornará um solucionador de problemas mestre. Você entenderá os fundamentos da codificação e aprenderá como os jogos de programa, assim como os que você está vendo na tela agora. Tudo em nosso ganho será configurável. Assim, você pode ajustar, brincar e dar ao jogo e sensação individual e especial sobre isso. Então você estará colocando sua própria criatividade nisso e realmente a tornará sua. Estou tão animado para começar e espero que você também esteja. Este é o momento perfeito para começar a aprender a codificar. Então mergulhe comigo e eu vou ajudá-lo em cada etapa da sua jornada de desenvolvimento de jogos. 2. Como usar este curso: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. E este vídeo, na verdade, não neste vídeo. Eu criei este vídeo para que possamos maximizar o potencial de aprender com este curso. Então eu quero que você, eu quero guiá-lo através de alguns passos que podemos usar para extrair totalmente toda a energia de aprendizado do curso que você está fazendo atualmente, porque você já, você já está gastando seu tempo aqui. Então, por que não maximizá-lo? Então, a primeira coisa que vamos entender é como as perguntas e respostas funcionam. Então, enquanto você está assistindo aos vídeos, você está examinando por eles. Talvez surja algo que não deva entender completamente. Então, o que você pode fazer é ir em frente e deslizar para as discussões aqui. E você pode ver que você tem várias opções. Você pode iniciar uma conversa, fazer uma pergunta ou simplesmente compartilhar um projeto. Então, aqui, você pode me fazer qualquer pergunta que quiser. Nenhuma questão é de limite. Mas há um pequeno passo que você precisa fazer antes de me fazer uma pergunta. E isto é, vá em frente e faça sua própria pesquisa. Por que eu peço para você fazer isso? Bem, porque às vezes quando você se depara um problema e você vai frente e procura uma solução você mesmo, e então você a encontra ou não. Quando você volta e me faz a pergunta, é muito mais fácil de entender. Por que isso? Como você já passou por algumas sugestões, talvez nenhuma delas fosse adequada. Mas, à medida que você avança encontrando a solução para o seu problema, você ganhou muito conhecimento. Quando você vem até mim, quando você pergunta a Michael e nós passamos juntos encontrando a solução, você entenderá como tudo clica e mais tarde, quando você talvez se deparar com o mesmo problema ou talvez você vê esse problema para outro aluno. Você pode ajudá-los e é muito mais fácil. E, finalmente, sempre que você encontrar uma solução para sua pergunta, sua pergunta e adicione um prefixo sal a ela porque outros alunos podem ter o mesmo problema e eles encontrarão uma solução para o problema deles se eles virem o prefixo resolvido por trás dele. E finalmente, antes de eu sair, você só quer dizer uma coisa que não há questão de limite. Não há perguntas estúpidas, não há perguntas idiotas. Existem apenas desenvolvedores de jogos não profissionais. Ninguém nasceu profissional. Todos nós temos que aprender por meio de tentativa e erro. Você não acreditaria como citação sem aspas, minhas perguntas foram feitas porque eu não nasci um profissional em unidade me levou anos de prática, tentativa e erro ou fazendo perguntas, pesquisando coisas no Google. Portanto, esse é um processo. Não se preocupe, não tenha medo, não fique inseguro sobre algumas das perguntas que você pode querer fazer. Seja corajoso o suficiente para procurar uma solução. Se você não encontrar um, não se preocupe com isso. Basta deixar uma pergunta. Eu sempre respondo a todos os meus alunos e sempre nos aprofundamos tão profundamente quanto necessário para encontrar uma solução para qualquer problema. E agora vamos falar sobre o servidor Discord. E é aqui que você pode se aprofundar na comunidade que criamos aqui no desenvolvimento de jogos WMD. Então você pode acessar o link na descrição deste vídeo ou visitar meu perfil e encontrar o link em algum lugar lá. E eu recomendo que você se junte à discórdia. Por quê? Porque na maioria das vezes pode levar algumas horas para responder com base em onde você é. Então, talvez nós vivemos em fusos horários diferentes. Talvez quando você me fizer a pergunta, é meia-noite e você precisa de uma solução rápida. Talvez eu esteja dormindo, talvez não consiga chegar ao meu computador. Portanto, é muito benéfico para você se juntar ao canal de discórdia que criamos. E deixe-me mostrar o canal de pontuação aqui mesmo. Este é o começo do nosso canal de discórdia. Você pode ver que temos a comunidade em geral. Temos o bate-papo C-sharp, temos o bate-papo de design do jogo, temos o show fora do seu jogo. Temos as questões gerais de desenvolvimento de jogos. E você pode ver que ainda não temos nada aqui porque é bastante novo, pois estou gravando isso. Mas mais tarde, quando você entrar aqui, você notará que há uma enorme comunidade de pessoas esperando para ajudá-lo e talvez pessoas esperando para obter ajuda de você. E é muito benéfico tentar resolver a pergunta de outras pessoas. Você não acreditaria o quanto eu aprendi apenas ajudando outras pessoas. E você pode ver aqui que temos vários cursos. Estes são todos os cursos que o double m gamma game down tem ou eu criei. E podemos ver também podemos compartilhar memes e aqui temos discussões gerais sobre jogos, jogos AAA, não sei o que você gosta de jogar. Podemos discuti-los aqui e o canal social ou categoria e assim por diante e assim por diante. Então eu recomendo que você se junte ao nosso servidor de discórdia. É muito divertido. Vamos nos divertir muito lá. E é isso. Isso é tudo o que eu queria dizer sobre o servidor Discord. Agora vamos passar para os slides do desafio. Então, o que nosso desafio desliza. À medida que você passa por cada vídeo, você notará que, em algum momento, vou lhe dizer para pausar o vídeo e iniciar o desafio. Então, quando você vir este slide, você vai esperar que eu termine todos os pontos e então você terá que pausar o vídeo. Por que estou enfatizando a palavra? Tem que fazer uma pausa? Porque é muito melhor aprender fazendo e não apenas assistindo muitos cursos que aprendi , que eu pessoalmente levei onde me sentia faltando no Departamento de fazer. Então. Você acabou de dar a volta para assistir alguém criar novamente. Certo. Isso é muito bom. E agora acabou. Certo? E então você termina o curso. E depois de algumas semanas, você percebe que não sabe como fazer nada. Portanto, os slides de desafio que criei são extremamente importantes porque você, neste momento , começa a fazer em vez de assistir. E mesmo que você não consiga descobrir como fazer o desafio, não se preocupe com isso. Eu estarei lá para ajudá-lo depois de você tentar e ajudar a completar o desafio com você. Então você nunca é deixado sozinho. E uma adição a isso, assim como olhar as respostas para suas perguntas antes de fazer no Q e a, quando você faz um desafio, você se depara com várias variáveis que você pode não considerou antes. E quando você ver como eu concluo o desafio, você o enraizará muito melhor em sua cabeça quando você encontrou o mesmo problema quando começar a criar seus próprios jogos. Ok, então vamos passar para a estrutura do curso e apenas falar sobre cada seção. E, brevemente, só para te dar um aviso sobre o que vamos fazer. Então, antes de tudo, temos a seção um que você está vendo atualmente no momento. Temos como usar as pontuações, como baixar e configurar o Unity e o Visual Studio. E então falaremos sobre o design do jogo e a inspiração do nosso jogo e onde vamos obtê-lo. Também teremos apenas uma breve introdução ao Unity e no Visual Studio, só para que você tire essa primeira fase desconfortável fora do caminho. Então vamos montar nosso mundo. Isso é como diz, vamos montar o mundo que temos. Usaremos um pouco de sprites com a configuração, o jogador e assim por diante e assim por diante. Então vamos montar a mecânica de tiro porque obviamente teremos armas e o invasor de robôs do tempo. Então, precisaremos de algum tipo de armas. E a coisa mais importante sempre que você está começando de novo, é configurar a mecânica principal. E isso é o que vamos fazer configurando o tiroteio. Vamos montar os inimigos. Obviamente, precisamos de inimigos. Esta será a primeira fase de nossa configuração inimiga. Então vamos ter uma variedade mais variada, digamos, mais nos inimigos. Mas, por enquanto, isso será suficiente apenas para ter alguém para atirar nisso. Vamos criar salas usando mapas de mosaico. É aqui que vamos aprender a cortar os sprites. Já aprenderemos com isso, mas aprenderemos como criar ácidos biliares a partir dos sprites cortados. E então teremos o nível de fluxo. Então é quando vamos começar a passar de um nível para o outro, porque obviamente este é um jogo desonesto. Então, vamos criar esse fluxo de nível. Vamos continuar. Temos a Seção 7, que é o ambiente distrativo. Queremos ter caixas que possamos destruir e obter moedas delas e não caixas, na verdade, acho que serão vasos ou algo assim. Receberemos moedas delas e receberemos ajuda delas. Teremos tiroteios avançados. Então é aqui que vamos criar um sistema de armas. Então, quando criamos a mecânica de tiro, só teremos uma pistola talvez, ou uma espingarda ou algo assim. Então, neste, teremos uma espingarda, rifle, pistola e todas essas coisas boas. Então teremos o sistema de saúde porque neste momento ainda não morremos e ainda não matamos o inimigo, ele simplesmente explode. Então, nesta seção, na verdade, vamos adicionar um sistema de saúde onde nossa saúde drena lentamente e os inimigos também. Temos os pickups. Obviamente, podemos pegar armas de coleta de saúde, pegar o que mais pode ser moedas. Teremos a música e os efeitos sonoros, porque o jogo não tem música e efeitos sonoros terá vários tipos de inimigos. Isso é algo que eu já lhe disse antes. Já temos um tipo de inimigo, mas vamos criar diferentes AIs, quatro maneiras diferentes pelas quais os inimigos funcionarão. Teremos na Seção 13, a loja e o sistema monetário, como você verá no próximo vídeo, talvez, ou nos próximos vídeos. Nossa inspiração vem de um jogo chamado Hades. E lá temos uma loja e todos, quase todos os jogos têm uma loja e sistema monetário. E é aqui que vamos apresentar o nosso próprio e a loja. Você pode comprar saúde por upgrades e comprar armas. Outra coisa, veremos, teremos a criação de menus. Obviamente, cada jogo tem um menu, então também teremos um menu. E então temos a Seção 15, que é unidade avançada, e é aí que vamos criar a batalha de chefes. Então, até este ponto, temos os inimigos, temos o sistema de armas, temos tudo configurado. Agora é hora de uma batalha de chefes real. E acho que todo bom jogo tem suas próprias batalhas contra chefes. A mecânica será diferente dos inimigos regulares, e será diferente através um sistema que é a máquina de estado, que é a parte da unidade avançada do curso. Portanto, certifique-se de chegar à seção. Finalmente, temos a seção de bônus, que é a seção 16, que é a geração da sala. Então, como você verá no jogo que vamos jogar no, na verdade, um jogo desonesto como. Há sempre a geração da sala. Então teremos, digamos, cinco ou seis modelos para salas. E então, ao matar todos os inimigos e todas as ondas em todos os cômodos, então você vai passar para a próxima sala e o próximo termo será aleatório. E você também terá uma escolha entre dois quartos. Então você poderá escolher entre, digamos que a sala de batalha do chefe e uma sala cheia de esqueletos, ou a sala de batalha do chefe e uma sala cheia de picos. E então talvez uma sala cheia de espinhos. E eu não sei, talvez a loja ou algo assim. Então, esta será a programação avançada C-sharp e orientada porque será preciso muito trabalho para termos essa seleção aleatória de salas. E vai ser muito divertido. Vamos aprender muito. Então, antes de te deixar, vou te dar algumas palavras de encorajamento. Mas se você quiser chamá-lo, isso, pode chamar esse encorajamento, passar por essa jornada, você enfrentará muitos desafios. Portanto, certifique-se de sempre empurrá-los sempre que encontrar um problema, eu recomendo que você, em primeiro lugar , faça sua própria pesquisa. Então vá em frente, faça a pergunta no Google, Checkout, alguns vídeos no YouTube e, em seguida, quando você se encontrar extremamente estoque, vá para as perguntas e respostas, procure suas perguntas, olhe para uma resposta. E você também pode me perguntar imediatamente, estou sempre lá, sempre respondo a qualquer pergunta. E com isso dito, esta será uma jornada incrível de, eu não sei quantas horas ou para você, quantas semanas levará para você terminar o curso ou talvez dias levem dias. O que eu recomendo é que você chegue às duas últimas seções porque todo esse curso é, especialmente se você é um iniciante. Então o discurso começa em um nível muito iniciante, passamos para um nível intermediário. E como você vê agora, e as duas últimas seções, vamos para o nível avançado. E depois de chegar às últimas cinco ou seis seções, você terá tantas habilidades, tantas ferramentas em seu arsenal que as seções avançadas serão bem fáceis. Acho que espero ter ensinado tudo certo? Então, com isso dito, não vamos perder mais tempo e vamos começar. Continue. 3. Download de Unity e estúdio visual: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos baixar o Unity, parando bem e integrando com ele as ferramentas do Visual Studio que precisaremos para as pontuações. Então, vamos começar. A primeira coisa que você precisa entrar no Google e depois ir, basta digitar aqui, baixar Unity. É tão simples quanto isso. Quando você digita, você receberá muitas sugestões. Portanto, certifique-se de encontrar aquele com o Unity 3D.com e obter unidade, é claro, e clique no download Unity, que abrirá esta página aqui. Então, aqui você precisará baixar o Unity Hub se você nunca usou o Unity. Agora, o que é Unity Hub? Unity Hub é como um lugar onde manteremos todas as nossas versões do Unity e também todos os projetos que fazemos. Agora, antes do Unity Hub, nosso projeto estará em todo o nosso computador, em algum lugar em diretórios diferentes e assim por diante. Portanto, o Unity Hub realmente torna muito mais fácil passar pelo seu projeto e realmente ter, se realmente boa organização. Portanto, certifique-se de baixar Unity com base em qual sistema operacional você tem. Então, se você tiver o macOS, você precisa ter certeza de baixar o macOS Unity 40. E se você tiver um Windows 7, faça o download para o Windows 7. Então, basta clicar em baixar Unity Hub. E quando você terminar de baixar, Q deve ter essa pasta de instalação aqui. Quando você clica duas vezes nele, ele perguntará, você quer? Sim. Então você continua, clica em Concordar, escolhe o destino onde deseja colocar seu Unity Hub. E então você inicia a instalação. Agora, como já tenho o Unity Hub instalado, não o instalarei novamente. Portanto, certifique-se de instalar tudo e eu vou te ver daqui a pouco. Oh, ok, bem-vindo de volta. Então, se você instalou o Unity Hub corretamente, você deve receber uma mensagem ou uma janela aqui que se pareça com isso. Agora, ainda não temos nenhum projeto, mas é aqui que nossos projetos estarão todos presentes e podemos acessá-los em nosso lazer. Agora, antes de continuar, Unity terá que garantir que você tenha uma conta. Então esta é minha conta aqui. Usei meu Google Gmail para criar uma conta no Unity. Você pode criar uma nova conta ou também usar seu Gmail ou Facebook. Não tenho certeza se eles permitem isso. E depois de criar uma conta no Unity, você pode ir direto aqui para as instalações. E é aqui que baixamos versões diferentes do Unity. Agora, para este curso, usarei a versão mais recente do Unity que temos atualmente. Agora, se você quiser instalar uma nova versão do Unity ou qualquer tipo de versão do Unity, basta ir direto aqui para o anúncio. Clique em Adicionar. E aqui você pode ver que temos diferentes tipos de unidade que podemos instalar. Agora, em primeiro lugar, temos as versões recomendadas. Estes são os que já foram testados e testados minuciosamente e funcionam perfeitamente. Mas você também pode procurar os lançamentos oficiais. Agora, vamos usar esta versão aqui. E esta é uma versão muito boa. Você pode instalá-lo. E você também tem o pré-lançamento é agora que os comunicados de imprensa são trabalhar da mesma forma que o lançamento oficial e os lançamentos recomendados, mas às vezes eles são um pouco buggy e você pode encontrar alguns bugs nos lançamentos oficiais. Também pode haver problemas de bugs, mas eles não são tão evidentes quanto nas versões anteriores. Você pode não encontrar nenhum problema, mas eu recomendo que você use o lançamento oficial porque eles são mais recentes do que os lançamentos recomendados e menos volumosos do que os pré-lançamentos. Então baixe a versão mais recente que você tem no seu computador. Ou atualmente talvez você seja do futuro e tenha uma versão mais nova do que eu. Então baixe a versão mais recente. E não se preocupe, este curso funciona ou o projeto que vamos criar funcionará em qualquer versão do Unity e do futuro. Agora, vamos clicar em Avançar aqui. E essa é uma parte muito importante do download e instalação do Unity agora. E aqui temos módulos, e esses módulos são como complementos para nossa unidade que nos permitem criar jogos em diferentes plataformas. Então, por exemplo, aqui você pode ver que agora podemos carregar módulos para diferentes plataformas. Por exemplo, se você quiser criar um jogo no Android, você pode usar o módulo para Android. Ou se você quiser criar um jogo para o iOS ou ícones e assim por diante. Você também pode estar procurando criar jogos para Linux ou Mac OS ou o quê. Então, com base no que você deseja criar, você pode escolher um desses módulos de modelo, ou você pode esperar mais tarde, você pode baixá-los a qualquer momento. Você também tem as documentações que eu recomendo que você baixe. Essas documentações são a documentação Unity e são muito importantes. Talvez às vezes você queira procurar certas coisas. E finalmente você tem o pacote de idiomas. E talvez se você é chinês ou coreano, eu não tenho certeza do que são, honestamente, eu não faço ideia. Talvez você possa usar um desses pacotes de idiomas. Mas o mais importante, e você precisa ter certeza de que você tem o Microsoft Visual Studio Community 2019 ou mais recente instalado com sua unidade. Porque vamos usar o Visual Studio para codificar tudo, tudo e todos os comportamentos dos objetos que criamos imunidade. Agora, isso é tudo que você precisa fazer. Basta clicar em Avançar e você começará a instalação do seu Unity. Então, com isso dito, é hora de seu primeiro desafio. E seu desafio será baixar Unity e Visual Studio. Então baixe o Unity Hub, assim como mostrei, certifique-se de que, se você tiver um Mac, o download da versão para Mac. Se você tiver um Windows, faça o download da versão do Windows. Então você precisa baixar a versão mais recente. E, finalmente, certifique-se de que você também baixe o Visual Studio com Unity. Então, pause o vídeo agora mesmo e vá em frente e baixe o unity com o Visual Studio. E no próximo vídeo, simplesmente analisaremos a interface da unidade e do Visual Studio que você acabou de ver que podemos superar nossos medos iniciais. Então, vejo você no próximo. 4. Unity e Visual Studio 101: Olá e bem-vindos de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos simplesmente explicar o que é Unity, o que é o Visual Studio, como eles se comunicam entre si. E explicaremos um pouco sobre a interface dessas duas ferramentas incríveis. Então, antes de tudo, o que é unidade? Deixe-me colocar meu laser. Então laser, por favor. Certo. Então, unity é um desenvolvedor de mecanismo de jogos multiplataforma, desenvolvido pela Unity Technologies. Então, o que quero dizer com plataforma cruzada? Multiplataforma significa que ele pode ser usado em diferentes tipos de plataformas. Por exemplo, unity, Windows e Mac OS usarão Unity para desenvolver nossos jogos. E, claro, vamos usar esse mecanismo Unity aqui. Então, antes de seguirmos em frente, deixe-me mostrar a interface da unidade e passaremos a explicar o Visual Studio, e isso é unidade. Parabéns, você chegou até aqui. Então, antes de tudo, temos nossa barra de ferramentas aqui sobre tudo. E essa barra de ferramentas fornece acesso aos recursos de trabalho mais essenciais. À esquerda, temos as ferramentas básicas para manipular a visualização de cena e os objetos do jogo dentro dela. No centro temos o controle de jogo , pausa e passo bem aqui, o que nos permite jogar nosso jogo, pausar nosso jogo. E então também podemos adicionar um passo quadro a quadro. Os botões à direita dão acesso à unidade, colaboração e à nuvem que não usará e às contas. Também temos as camadas aqui que usaremos muito neste curso para o nosso projeto. E finalmente temos o layout e a bi-layer. Este é o nosso layout aqui. Assim, podemos alterar o layout, por exemplo, os dois por três ou quatro divididos. Ou podemos basicamente usar o padrão e é isso que vamos usar. Então, se você não tiver a mesma interface que eu ou diferentes tipos de layouts. Basta clicar aqui, ir para o padrão e nós dois teremos a mesma interface. Agora, a próxima coisa que eu quero falar é a janela da hierarquia aqui. Então, se clicarmos nisso aqui, podemos ver que temos uma câmera principal e esta é a nossa visão de cena. Chegaremos à nossa visão de cena e temos a luz direcional aqui. Mas essa hierarquia, hierarquia aqui , representa todos os objetos do jogo em nossa cena. Então, cada item na cena é uma entrada na hierarquia. Portanto, as duas janelas são aprimoramentos inerentemente vinculados. A hierarquia revela a estrutura de como objeto do jogo se conecta um ao outro. E você verá com mais detalhes o que quero dizer com anexado um ao outro. Agora, a próxima coisa que temos a visão de cena aqui. E se clicarmos com o botão direito do mouse, podemos realmente nos mover usando as teclas a WASD aqui. E você pode ver que podemos nos mover pelo mundo. E aqui vamos construir nossos jogos. Também temos outra janela aqui que é o jogo, e esta é a nossa visão do jogo. Então, é assim que vemos nosso jogo da perspectiva da câmera, mudará tudo ao redor. E é aqui que estaremos mais focados mais tarde com nossa criação de jogos. Em seguida, temos a janela do inspetor à direita e deixe-me voltar às cenas. Portanto, em uma janela do inspetor, você tem permissão para visualizar e editar todas as propriedades do objeto de jogo atualmente selecionado. Então, como você pode ver agora, temos a luz direcional selecionada. Podemos aumentar e diminuir a intensidade. Podemos mudar a cor, podemos brincar com tudo. E também temos a câmera principal aqui. Também podemos mudar e brincar com várias propriedades. E o inspetor aqui. E essas palavras técnicas são muito importantes porque vou usá-las durante todo o curso. Portanto, lembre-se de um inspetor de hierarquia, a visualização de cena, o jogo de exibição. E, finalmente, temos a janela do projeto aqui. E é aqui que exibimos as bibliotecas e os ativos do nosso jogo. Então, se você clicar em ativos, atualmente, não temos mais nada além das cenas. E se clicarmos duas vezes em cenas, temos a cena de amostra aqui que podemos clicar duas vezes e entrar, podemos salvar. Portanto, não temos nada além de nossas cenas. Em seguida, vamos falar sobre o Visual Studio e o que é. 0. Certo, então o que é o Visual Studio? Portanto, o Visual Studio é, na verdade Microsoft Visual Studio e é um IDE. O que é um ID? É um ambiente de desenvolvimento integrado. E o que isso significa é que é como um ambiente para nós desenvolver código integrado no Unity. Então esta é uma explicação muito complicada, mas é basicamente aqui que vamos escrever todo o nosso código. E o VS nos ajudará a escrever o código. Use para manipular objetos de jogo no Unity usando scripts. Então, quais são nossos scripts, é assim que usamos o Unity com o Visual Studio. Então, queremos que a unidade se comunique com o Visual Studio. Na unidade, você criará objetos de jogo. Então, por exemplo, o carro que queremos mover enquanto não tem o jogador que queremos movimentar. Talvez os objetos que caem, talvez algum tipo, as armas que atiram nos monstros que nos atacam. Colocamos esses, todos esses objetos em Unity. Mas sempre que quisermos manipulá-los, vamos usar o Visual Studio. Mas a unidade e o Visual Studio não funcionam automaticamente juntos. A maneira como os fazemos trabalhar juntos é através desses scripts, que são arquivos CSV de ponto. E é aqui que escrevemos todos os nossos códigos nos arquivos CSS de ponto no Visual Studio e lá, e a partir desses scripts vamos manipular os comportamentos dos objetos que temos dentro do Unity. Então deixe-me mostrar a você como o Visual Studio se parece. Então, este é o Visual Studio. Deixe-me apenas ampliar um pouco. E aqui você pode ver que antes de tudo, temos essas três linhas que estão usando algo, usando algo e usando o mecanismo do Unity. Agora, esses são chamados de namespaces. E o que são, eles são uma coleção ou uma biblioteca de códigos que nos permitem usar certas coisas em nosso jogo. Por exemplo, o mecanismo Unity nos permite usar diferentes aspectos da unidade. Por exemplo, a física em Unity. Ele nos permite acessar vários detalhes no Unity isso sem isso. Por exemplo, se removermos essa linha aqui, não poderemos mais usar o comportamento mono. E porque não estamos usando 10 comportamentos, que chegaremos em um segundo. Não podemos mais usar o início e a atualização. Então, vamos ligar isso novamente e podemos usar o comportamento mono. Antes de chegarmos a isso, vamos primeiro falar sobre o que o público significa. Público significa que é para todos. Existem dois tipos. Existem públicos e são privados. Chegaremos a isso também. Mais tarde. Temos a classe e temos o nome da classe, e esse é, na verdade, o nome do nosso script. E aprenderemos que sempre temos que nos certificar de que nomeiamos nossa classe corretamente na primeira vez, porque isso criará muitos problemas para nós. Então, é assim que criamos uma classe e todo esse código será escrito automaticamente para que você não precise se preocupar com isso. Esses dois pontos aqui significam que somos herdados, herdando o comportamento mono. Então, o que é o comportamento do Monte 10 são, bem, usamos comportamentos que já estão embutidos no Unity que permite, nos permite controlar os vários objetos do jogo. E por causa do comportamento monetário, podemos usar dois métodos ou funções, que, claro, serão mais tarde entrando como iniciar e atualizar. E na verdade aqui você pode ver que temos essa linha verde. E essa linha verde significa que este é um comentário. E sempre que você quiser criar um comentário, basta colocar essas duas barras atrás dele. E sempre que colocamos duas barras invertidas atrás de qualquer código, isso significa que este é um comentário e não será executado no casaco. Ótimo, então o que é começar? O Start é chamado antes da primeira atualização do quadro. Então, quando o objeto do jogo que tem esse script anexado a ele for iniciado, o código dentro desse método de início será executado. E semelhante à atualização inicial é chamada uma vez por quadro. Então, cada quadro que nosso jogo passa. Este método, atualização será chamado de tudo dentro dele será executado para colocá-lo de forma mais simples, começar é onde colocamos nossas condições iniciais. Então, por exemplo, o peso do carro, a velocidade do nosso jogador, o clima talvez. E, em seguida, atualizar é onde fazemos nosso carro se mover. Fazemos nosso jogador pular, e fazemos a mudança climática, por exemplo, o vento explode ou algo assim. E o outro, eu não sei. Então é assim que basicamente usamos Unity com Visual Studio. É claro que, no futuro, à medida que avançamos pelo nosso projeto, você terá uma compreensão muito, muito melhor do início e da atualização e de tudo o que há nele. Portanto, não se preocupe muito se você não entender tudo imediatamente. Mas agora você tem um desafio à sua frente. E seu desafio vai fazer uma massa. Então abra Unity e mexa. Clique em algumas coisas. E quando você terminar, vá para o próximo vídeo e vamos fazer nosso primeiro código e começar. E você ainda não sabe como criar um novo projeto. Não se preocupe com isso. No próximo vídeo, vamos criar um projeto e dar o primeiro passo. Então, espero que você tenha gostado deste vídeo e eu te vejo no próximo. 5. Controle de versão 101: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos aprender tudo sobre controle de versão, árvore de origem e criação de repositórios de nossos projetos. Então, como você pode ver aqui, criamos um novo projeto e baixamos a árvore de origem. Agora temos alguns commits aqui e, na verdade, revertemos alguma coisa. Criamos nosso commit inicial, adicionamos um cubo, o revertemos. Podemos realmente reverter esse commit. Uma lata. Então clique em Sim. Como você pode ver, podemos voltar para a recarga Unity e temos nosso cubo aqui. Estaremos aprendendo tudo em detalhes minuciosos. Então me dê toda a sua concentração. Isso é muito importante. É um vídeo ou lição extremamente útil e ficaremos com você para sempre, desde que você esteja comprometido em se tornar um programador profissional ou desenvolvedor de jogos. Então, não vamos perder mais tempo e vamos começar. O k. Então, controle de versão e coloque meu controle de versão a laser. É difícil de aprender. É ainda mais difícil ensinar, mas vou tentar mantê-lo o mais simples possível. E quando você pega o jeito, confie em mim, é muito simples e fácil de usar. Além disso, é uma habilidade indispensável que você precisa aprender se deseja se tornar um desenvolvedor de jogos profissional ou até mesmo um programa profissional. Então, vamos começar com o que é. Primeiro de tudo, é um sistema responsável pelo gerenciamento de alterações em programas de computador. Isso significa que sempre que criamos alterações em nossos programas, podemos realmente salvar essas alterações em cada etapa do nosso projeto. Dessa forma, podemos antes de tudo verificar o que fizemos. Podemos criar diferentes tipos de versões onde podemos voltar e mudar as coisas que criamos. Ele permite um melhor trabalho em equipe. Por exemplo, digamos que você tenha quatro ou cinco pessoas trabalhando no mesmo projeto, mas cada uma delas tem uma tarefa diferente que precisam criar. Portanto, o controle de versão é uma maneira muito boa de lidar com tudo isso. E por que precisamos disso? Bem, por que nós, nós realmente o usamos? Bem, vamos usá-lo para lembrar a versão anterior do nosso jogo e ter mais flexibilidade para experimentar. Normalmente, o desenvolvimento de jogos é um ambiente em que você precisa de muitas experimentações. Por exemplo, você deseja adicionar algum tipo de propriedade a algum tipo de objeto de jogo e talvez ele quebre todo o seu projeto. Então você quer sempre ter uma versão anterior do seu projeto antes de adicionar esta mecânica de quebra de jogo. Então você sempre pode voltar e começar de novo a partir daí. Portanto, isso é extremamente importante, especialmente para desenvolvedores de jogos que sempre precisam experimentar novas ideias e coisas em seus jogos e projetos. E como vamos usá-lo? Bem, vamos usar algo chamado árvore de origem, e isso é controle de versão. Ele nos permite criar versões diferentes. E é primeiro de tudo, é de graça. É muito fácil para iniciantes, muito flexível, e tem uma interface muito simples que podemos usar como iniciantes. Então, vamos em frente e baixe a árvore de origem. Deixe-me mostrar onde podemos fazer isso. Se você abrir Google Chrome ou qualquer navegador que você tenha, basta acessar o Google e aqui , baixe a árvore de origem. Você deve encontrar um link aqui, e ele deve ser a árvore de origem. Para cima. Quando você clica nele, você vai até o site deles. Se você rolar para cima, você pode ver que você tem a opção de baixar para o Windows. Mas se você estiver em um Mac, certifique-se de clicar aqui e baixar árvore de origem para Mac OS ou não funcionará para você. Então, se você tiver um Mac, baixe a versão para Mac, se você tiver um Windows, baixe a versão do Windows. Simples o suficiente. Agora, quando você terminar de baixar, você deve obter esse arquivo aqui. E quando você clica duas vezes nele, você deve iniciar a instalação. Agora, como já tenho árvore de origem, não vou instalá-la outra hora. Vou apenas levá-lo pelo processo de realmente instalar. Ok, então esta é a primeira janela que vai aparecer para você. Primeiro de tudo, você precisa concordar com a licença, é claro. E talvez você possa desligar isso se não quiser nenhum e-mail do seu caminho da árvore de origem e et cetera na aula. A próxima coisa que você precisa fazer é criar uma conta de vez em quando, você pode ir na lisina e colocar como a empresa-mãe da árvore de origem pode ir em frente e criar uma conta lá, ou você pode usar uma conta existente se você já tiver um Gmail. Eu pessoalmente crio um usando o Gmail. É muito mais rápido, é muito mais fácil e eles não enviam spam com muitos e-mails. A próxima coisa aqui, vamos conectá-lo a uma conta. Agora, isso é, claro, não faremos isso. Se você quiser hospedar seu código em determinados sites como GitHub ou Bitbucket. Não faremos isso, então você pode simplesmente clicar aqui na configuração ignorada. Finalmente, ao instalar a árvore de origem informará que ela não consegue localizar o get. Então, para concluir isso, basta clicar em Download e versão incorporada do Git e continuar. E então também pode pedir algo chamado mercurial. Agora, o Mercurial é um sistema diferente, assim como obter. Ele nos permite salvar diferentes versões do nosso projeto. Não vamos usar o Mercurial, então você pode simplesmente clicar, eu não quero baixar ou não quero usar o Mercurial. E isso deve ser quando você terminar de instalar. Você deveria ter isso aqui. E sua, bem, esta janela bem aqui quando você inicia a árvore de origem, se você não clicar simplesmente aqui em Criar e você deve obter esta janela. Agora, é aqui que realmente criamos nosso repositório. E aqui você pode ver que temos o caminho de destino, o nome e o tipo de controle de versão que queremos usar. Claro que estaremos usando o GET. Também temos a opção de criar uma conta, mas, como já disse, estamos mantendo as coisas muito simples. É nossa primeira vez, então não criaremos nenhuma conta. Então, aqui vamos escolher qual é o caminho de destino do nosso repositório. Então, qual é o projeto do qual estamos realmente criando um repositório para versões subsequentes do. Bem, vamos criar nosso primeiro projeto que vamos usar. Então aqui está aberto o Unity Hub. E, como você pode ver, já temos o Hello World que não temos em um vídeo anterior que clique em Novo. E vamos nos certificar de que é um projeto 3D. E este será nosso espião cibernético 2087. Vamos seguir em frente e criar esse projeto. Então clique em Criar. E eu, claro, sempre usando minha magia de edição para acelerar esse processo. Vejo você do outro lado. Certo, bem-vindo de volta. Então, espero que tudo tenha funcionado para você. Então agora temos um novo projeto que é cibernético apesar de 2087. Então, agora que criamos nosso projeto, podemos realmente seguir em frente e começar a criar um repositório. Agora, se voltarmos à nossa árvore de origem aqui, podemos clicar em Browse e podemos realmente ir em frente para projetos Unity. E você pode ver que temos um hello world e temos um ciberespaço até 2087. Então, vamos selecionar essa pasta. Ele criará um repositório com esse nome. Se clicarmos em Criar, ele pedirá um problema. Não se preocupe com isso. Clique em Sim. E voila, agora nós realmente começamos a criar um repositório. Você tem os arquivos preparados aqui. Você tem diferentes tipos de botões. Você não precisa se preocupar com nenhum deles por enquanto, apenas se concentre nos arquivos preparados, em arquivos preparados e faça o commit aqui. Agora, se rolarmos para baixo nesses arquivos no palco, você poderá ver que a maioria deles é da biblioteca. Rolamos para baixo até o final, podemos ver alguns deles são Tampa 10 ou temporariamente. Podemos ver também que temos configurações de projeto e esses são todos os arquivos que nós para o nosso projeto. Também temos ativos aqui para unidade nas cenas, por exemplo. Portanto, este é um repositório que é uma versão do nosso projeto atual. Agora, o problema aqui é, como você pode ver, há uma tonelada de arquivos, e B não precisará de todos eles. Bem, na verdade, vamos precisar de quase nenhum deles. Precisaremos apenas de um determinado tipo de arquivos. Então, queremos ignorar a biblioteca e os arquivos temporários temporários. Por que isso? Bem, deixe-me mostrar-lhe abrindo o diretório do nosso projeto. Oh, ok, então este é o Cyberspace 2080 sevens diretório dentro do projeto Unity, até 2080 sevens diretório dentro do projeto Unity, como você pode ver aqui. Portanto, temos os ativos, os registros da biblioteca, os pacotes , etc., e etc. Agora, o que é a pasta temporária e qual é a pasta da biblioteca e por que realmente não precisamos deles? Então, temporário é apenas uma maneira de a unidade se abrir mais rápido sempre que iniciamos o projeto. E sempre é criado sempre que abrimos um projeto. Por exemplo, se eu entrar no Unity aqui e realmente fechá-lo, você verá que o arquivo temporário. Desaparecerá. E mesmo se excluirmos a biblioteca agora, vamos seguir em frente e excluir totalmente essa biblioteca. Se voltarmos ao nosso Unity Hub e abrirmos o espião cibernético 287. Como você pode ver aqui, você viu que a biblioteca foi criada novamente e a pasta temporária também foi criada. Então, é claro, o projeto deve levar um pouco mais de tempo agora para se abrir. Mas isso é evidência de que uma biblioteca e as pastas temporárias não são necessárias para sempre nos comprometer e encenar. E o que quero dizer com palco? Então, sempre que preparamos nossas pastas, criamos um commit delas, qualquer versão delas. E a biblioteca ocupa muito espaço. Como você pode ver, se rolarmos para baixo, ele ocupa a maior parte do espaço e não queremos nenhum deles. Então, como devemos proceder? Bem, podemos realmente ignorar todas as pastas que estão sob a biblioteca simplesmente indo e escolhendo qualquer uma das pastas que têm biblioteca nelas. Clique com o botão direito nele. E aqui você pode ver que temos a opção de ignorar um deles. Então clique em ignorar. E aqui você tem a opção de ignorar esse nome de arquivo exato, ignorar todos os arquivos com essa extensão, ou você pode ignorar tudo abaixo de uma biblioteca, e é isso que queremos. Então clique em OK. E como você pode ver, tudo na biblioteca agora foi ignorado, então não podemos prepará-lo, então não podemos salvá-lo em nossa versão mais recente. E se você rolar para cima, você deve ter notado que temos uma nova pasta aqui que é o ponto git ignore. E quando clicamos nele à direita, você pode ver que ele tem a biblioteca. E, se clicarmos duas vezes nele, podemos realmente abri-lo em nosso bloco de notas e aqui podemos adicionar os diferentes arquivos que também queremos ignorar. Então, quais são os arquivos que queremos ignorar? Bem, há uma tonelada de arquivos, mas, felizmente, alguém realmente passou por todos esses arquivos e criou uma lista de tudo o que podemos ignorar sempre que criar controles de versão ou versões do nosso projeto. E para encontrar esse arquivo, você pode ir novamente para o Google ou para a frente. Vá em frente e pesquise dot git, ignore a unidade. E você deve ter este link aqui para o github.com. E ele será hospedado no GitHub. Se você abrir este link, ele o levará aqui. Então este é o ponto gitignore e é o ponto de unidade git ignore. E esses são todos os arquivos que podemos ignorar ao criar versões do nosso projeto. Você pode clicar na linha aqui e ela abrirá esta janela ou guia. Vamos em frente e selecione todos eles clicando no controle a. Copiaremos tudo isso usando o controle C. E vamos colá-lo aqui no nosso bloco de notas de pontos gitignore. E agora temos o bloco de notas gitignore preenchido com todos os arquivos que não usaremos para o nosso 3 positivo. Vamos salvar isso usando o Control S. E agora de volta ao Unity ou quero dizer de volta à árvore de origem, você pode ver que quando tivemos o git ignorar, tudo é ignorado. Vamos encenar tudo isso. E quando preparamos tudo isso, você pode ver que esses são os arquivos que serão confirmados. E esse seria nosso compromisso inicial ou nossa versão inicial do repositório do projeto. E, geralmente, sempre que você cria seu commit inicial, chamamos isso de inicial. Você pode capitalizá-lo, o commit inicial, oops, inicial. E clicamos em Commit aqui. Então, agora, se você olhar para a esquerda, você pode ver que temos ramificações aqui embaixo e temos o branch master. Parabéns, criamos nosso primeiro compromisso. Muito bom. Agora, deixe-me mostrar como vamos avançar mais para baixo na linha, mesmo que este vídeo tenha sido longo o suficiente. Mas acho que precisamos obter uma base adequada para o controle de árvore de origem e versão à medida que avançamos pelo nosso projeto. Então, digamos que estamos em nosso projeto aqui. E vamos em frente e criar algum tipo de cubos. objeto 3d. botão direito na hierarquia. objeto 3d, crie um cubo, e agora temos um cubo. Vamos escalar um pouco. Então escale-o no x, no y e no z. ótimo. Então agora temos um cubo e nossa cena. E agora, se entrarmos na árvore de origem, vamos salvar isso antes de irmos. E ele precisa salvá-lo em uma determinada cena. Então, vamos dentro das cenas. Esta será a nossa amostra de cena. Claro. Cena de amostra, sim, substitua-a. Então, temos esse exemplo de cena de volta e árvore de origem. Aguarde um pouco e você pode ver que temos alterações não confirmadas. Então, se clicarmos neles, você pode ver que os arquivos no palco são alterações dentro das cenas, que é a cena de amostra. E aqui você pode ver em detalhes o que criamos agora. É um pouco estranho aqui, mas se você olhar de perto, você pode ver que criamos box collider. E basicamente isso representa o cubo que adicionamos à nossa cena. Então, vamos avançar e encenar tudo isso. Podemos clicar em Confirmar aqui e nomear este cubo adicionado. Clique no comentário. E agora em nosso branch master, você pode ver que temos um commit inicial que não tinha nenhum cubo. E agora em nosso cubo adicionado, adicionamos um cubo. Então, parabéns. E como nota final, isso pode parecer um pouco complicado. Isso pode parecer um pouco estranho, mas não tenha medo que isso seja muito simples. E o mais importante, é extremamente importante para nós entendermos à medida que avançamos pelo nosso projeto, criamos versões, versões dele. E se alguma vez cometermos um erro, podemos realmente voltar clicando com o botão direito do mouse aqui, revertendo o commit. E sim, podemos reverter o commit se voltarmos e para a unidade, ele nos pedirá uma recarga ao vivo. Escrevemos, recarregamos e agora não temos o cubo ou qualquer mecânica de quebra de jogo que adicionamos ao longo do caminho. E agora é hora do seu desafio. Seu desafio será baixar e configurar a árvore de origem e o arquivo ignorado. Então baixe a árvore de origem e pare e configure tudo. Crie seu projeto 3D no Unity Hub, configure um repositório para ele e árvore de origem, nem os arquivos da biblioteca e obtenha o arquivo de ignorar ponto e adicione-o ao seu repositório, crie seu primeiro commit, e, em seguida, crie seu segundo commit. Você pode até ir em frente e tentar brincar com algumas coisas. Adicione um cubo, inverta o commit, veja o que acontece. Fique confortável com a árvore de origem. E se você estiver tendo algum problema, você pode pausar o vídeo nesta lista de coisas que você precisa criar. E você também pode sempre voltar e assistir ao vídeo e ver como fiz tudo e acompanhar comigo passo a passo. Então vejo você em um pouco. 6. Inspiração com jogos Hades: Ok, então vou terminar este vídeo mostrar o jogo Hades. E é uma das maiores inspirações para o projeto que vamos criar. Então, vamos começar. Obviamente, você vai jogar e eu vou jogar um dos jogos que já estava jogando. Vou mostrar alguns aspectos no jogo e aqueles que vamos ser infinitos. Portanto, este é o hub de área. Não teremos um hub de área necessariamente um jogo de hora, mas será apenas o suficiente. Então, vou apenas percorrer e ir para a parte real da jogabilidade. Então vá aqui. E como você pode ver, a primeira coisa que notamos no jogo e neste jogo, obviamente. E a primeira coisa que notamos é que temos várias armas que podemos escolher. Isso é algo que obviamente teremos um jogo de hora também. Então eu só vou pegar a arma e aqui está o que vou virar. E eu vou apenas ir em frente e começar a ser morto novamente. Obviamente, antes de começarmos, nosso jogo não será tão polido quanto este. Este é um ganho de NP que levou anos para ser criado. Este é um operador que você escolhe. Então, vou escolher qualquer coisa. Então esse jogo levou anos e anos de design gráfico e todas essas coisas boas. Como você pode ver, isso é um inimigo. Ele só vagueia por aí e depois que ele te encontra, ele começa a atirar em você ou começa a atacar você ou o que quer que seja. Como você pode ver aqui, temos, este é um estilo de jogo isométrico. Teremos uma plataforma 2D ou um jogo 2D. Então, obviamente, você pode ver aqui que temos a filmagem se conecta. Para que possamos atirar. Você pode ver os vasos que se quebram. Se os mostrarmos, teremos um mecânico semelhante. E se tirarmos, podemos quebrá-los, mas em nosso jogo poderemos quebrá-los. E você pode ver que temos o traço e isso é algo que é usado regularmente e todos os jogos desonestos, também teremos o traço deles. Bem, teremos realmente um torpedo, mas teremos a mecânica arrojada. Como você pode ver aqui, a capacidade de entrar em uma segunda sala. Então, vamos fazer exatamente isso. Você pode ver que temos a saúde aqui. Também teremos uma barra de saúde. Você pode ver como a interface do usuário está configurada. Vamos fazer algo bem parecido. Então você pode ver aqui, temos a opção de pressionar a tecla E. Vou pressioná-lo e vamos para o próximo nível. Também teremos portas. Você pode ver que também teremos cada nível harold tem seu próprio mapa de mosaico. Podemos ver aqui que também temos picos. Então, isso é algo que vamos adicionar. Teremos picos, obviamente não tão bonitos quanto esses, mas eles farão o truque. Você pode ver agora que temos diferentes tipos de inimigos. Você notará que quando eles nos atacarem, se estivermos arrojados, não somos atingidos. E isso é algo que também vamos implementar em nosso ganho, que é a capacidade de ser invencível por alguns segundos depois que nos traçamos e depois que, por exemplo, conseguimos. Então vou atirar nesse cara e vamos matá-lo. Você pode ver que não temos apenas um inimigo ou dois inimigos que já estão no mapa. Temos inimigos surgindo, então temos ondas de inimigo. Então, neste jogo atual e nesta câmara atual, você verá que só tinha um tipo de inimigo, mas geralmente temos vários tipos de inimigos. Podemos ver que as armas também têm diferentes tipos de ataques e esse ganho. Então eu vou simplesmente atirar e você notará que, como você pode ver, temos várias ondas. Quando matamos a primeira onda, temos uma segunda onda aparecendo. Então matamos o próximo, matamos o próximo. E finalmente ganharemos todas as ondas ou não e todos os inimigos ou mortos. Temos nossa recompensa e os estoques de combate. Então, vou pegar qualquer coisa aqui. E você pode ver que os picos param de nos machucar quando não estamos mais em combate. E isso é algo que eu queria te mostrar. Temos duas opções. Ou passamos pela opção a, que é a ANOVA, que é algo a moeda do jogo. E o outro onde podemos pegar uma chave. E você também pode ver aqui que temos a moeda ou o dinheiro que vamos usar o tiro. Então, vou jogar um pouco neste jogo e apenas mostrar como fazer compras funciona. Então você terá uma ideia. Oh, caso. Então, como você pode ver, um dos níveis é o coração, o outro nível é a loja. Então, vamos à loja e ver como isso parece. E tudo isso vamos implementar em nosso jogo, obviamente para certos níveis de graus. Obviamente, não podemos criar um jogo como este. Isso leva anos e anos e um tema enorme. Lá vamos nós. Estamos na loja. Temos o lojista. Não temos um lojista e nosso jogo. Teria o barulho. Você pode adicioná-lo você mesmo. A mecânica funciona. Como você pode ver, podemos comprar um pouco de saúde, podemos comprar uma atualização ou podemos atualizar nossa saúde e nosso jogo. Também teremos coisas semelhantes a esta em que podemos atualizar nossa saúde, então aumente o máximo de saúde que temos. Também podemos comprar novas armas que estarão no lugar das atualizações. E também podemos aumentar nossa saúde. Então, se nossa saúde estiver em baixa, podemos comprar ajuda e seguir em frente. Então, isso é basicamente tudo o que eu queria mostrar a vocês. Não sei se há mais alguma coisa que eu gostaria de lhe mostrar. Vou só voltar. Obviamente, também teremos a reprodução das opções, o botão Sair e todas essas coisas boas, um pouco de menu e assim por diante e assim por diante. Então, espero que você tenha gostado deste vídeo, a pequena demonstração do que é comum o futuro. Com isso dito, não vamos perder mais tempo e vamos começar a montar nosso mundo. 7. Seção 2: configurando nosso mundo — Como configurar folha brite-: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Como você pode ver neste vídeo, criamos uma cena simples. Adicionamos um plano de fundo simples. Adicionamos uma planilha chamada nosso carinha aqui, Jimmy, talvez mude o nome dele. Eu não sei. Talvez o chamemos condenado de Jimmy. Mas por enquanto temos o Jimmy GameObject com um fundo de algum tipo de masmorra. E nós, se jogarmos o jogo, você pode ver nada acontecer, mas pelo menos temos a planilha e tudo configurado. Criamos um repositório aqui. Como você pode ver, o commit inicial, aprendemos a criar um projeto usando os novos dados do Unity Hub. Então, não vamos perder mais tempo. E vamos começar. Ok, então vamos começar. A primeira coisa que vamos fazer é criar um novo projeto. Então, como você pode ver aqui, temos a versão mais recente do Unity Hub 3 melhor, eu agora carreguei hoje. Então, vamos ver como tudo está configurado. E aqui temos as instalações. É bem parecido com as versões anteriores do Unity Hub. A única diferença é que se entrarmos no novo projeto aqui, você pode ver que temos muitas maneiras de escolher o modelo que queremos usar. Temos a versão do Unity ou a versão do editor do Unity que vamos usar. E temos os diferentes tipos de modelos. Portanto, essa é uma maneira de configurar um projeto. Por exemplo, digamos que você precise de um projeto que seja móvel 2D. Isso irá configurá-lo para você, mas é claro que você precisará baixá-lo. Mas o que vamos fazer é escolher um núcleo 2D. Vamos ter o nome do projeto. Vou chamá-lo de hora. Mas invasor do ROCC. Assim, você pode escolher o nome que quiser para o seu jogo. Meu jogo será chamado de invasor de robôs do tempo porque essa é a história do meu jogo. Então, e também é um 2D, parecido com rocha. Você escolhe o nome que se adapte ao seu tipo de jogo. Vou criar um projeto. Isso vai levar um pouco de tempo. Então, o que vou fazer é usar a magia da edição para ir até onde temos tudo configurado e podemos começar a criar nosso jogo. Então eu te vejo lá. Oh, ok, bem-vindo de volta. Então, agora tudo está configurado. O projeto está aberto. Podemos começar a criar nosso jogo. A primeira coisa que queremos fazer é entrar na janela do jogo. E aqui você pode ver que é um aspecto livre. Não queremos isso. Queremos que nosso jogo seja 16 por 9 ou um ATP 1920 por 10. Esta é a resolução padrão da maioria das telas, maioria dos PCs que vão jogar este jogo. Portanto, se você não tiver essa opção aqui, você pode clicar no botão mais e adicionar o seu próprio usando a resolução fixa. Então, 1920 por 1080, vou selecioná-lo aqui. Agora, a resolução da nossa janela do jogo está fixa e podemos entrar na cena e podemos ver tudo aqui em nossa cena de amostra. Você pode ver que temos a câmera principal. Temos tudo configurado. Se mudarmos o tamanho da janela da cena, nada mudará. Ele permanece 1920 por 1080. Certo, ótimo. Então, agora a primeira coisa que queremos fazer é adicionar alguns antecedentes interessantes ao nosso jogo. Não queremos apenas ter essa tela azul e adicionar coisas a ela. Então, vou entrar em meus arquivos aqui. Vou selecionar o plano de fundo e vou arrastá-lo para os ativos aqui. E agora você pode ver que nós o temos, apenas vamos esperar que ele seja importado. Lá vamos nós. Então, vou clicar na imagem de fundo. E você pode ver aqui no Inspetor, temos muitas informações sobre isso. E você pode ver que é um Sprite 2D. Vamos mantê-lo nisso. Mas você pode ver que os pixels por unidade são 100 e há um modo de filtro agora, vamos escolher entre bi-linear a ponto. Isso significa que não há filtro porque já temos uma imagem bonita. E se adicionarmos a imagem aqui, você notará que ela é muito pequena. Então, o que podemos fazer é clicar no plano de fundo e definir os pixels por unidade como 50 e aplicar isso. E lá vai você. Você pode ver que é muito maior agora. E vamos redefinir a posição aqui, 200. Então, o que fizemos, acabamos de definir o modo de filtro para nenhum filtro. Definimos os pixels por unidade de 100 a 50, e aplicamos todas as alterações e apenas definimos a posição e o meio. Então, agora, se clicarmos no botão de reprodução, você notará que não temos mais apenas um fundo azul. Na verdade, temos. Um fundo bem sólido. Agora, você pode ver que as bordas estão um pouco fora do nosso jogo. Você pode mudar isso se quiser. Vamos tornar isso talvez um pouco menor, então ele se encaixa exatamente da maneira que queríamos. E vamos nos certificar de que também alteramos a escala no y. Então basta copiar a escala no eixo x, colada no eixo y. E agora, se entrarmos no jogo, você pode ver que podemos ver as bordas, embora haja uma pequena linha azul aqui. Se você tem TOC como eu, podemos realmente mudar essa barra se movendo um pouco para cima. Então, agora podemos colá-lo aqui. O jogo está bonito? Não, ainda precisa de um pouco. Lá vai você. Agora, o jogo parece bom o suficiente. Talvez você também precise mudá-lo aqui em baixo. Agora o jogo parece perfeito. E vamos apenas copiar a escala no y. Copie isso porque quando saímos do nosso modo de reprodução, você pode ver que a escala volta ao normal, que não é algo que queremos. Então, agora vamos ver, o modo jogo e jogo parecem perfeitos. Lá vamos nós. Nós salvamos tudo de volta em nossa cena. Podemos ver que o plano de fundo tem a escala diferente correta. Vamos continuar. A próxima coisa que queremos fazer é adicionar nosso jogador ao jogo. Então, vou entrar em meus recursos. Vou escolher o jogador versus jogador. E vamos escolher a folha Xanax. Agora você pode ver aqui que eu tenho um tipo diferente de personagem. Também podemos usar este, se você quiser. Eu forneci isso e os recursos, mas vou usar esta folha aqui, porque vamos aprender como podemos dividir essa folha ou cortar essa folha. Se você clicar duas vezes, você pode ver que esta é uma imagem regular de um, algum tipo de, eu não sei, Butler, este é o que vamos usar e eu vou usá-lo deste Xenakis, melhor amigo smash. É por meio da rica mentira vermelha, algo assim. Stephen Challenger do open game arm.com, que é um site incrível. Você pode obter toneladas de ativos gratuitos. E aqui eu sempre uso isso para quase todos os ativos que tenho. E você pode ir conferir a planilha do exame Docs baixada daqui, dar um pouco de amor e os comentários ao criador da planilha do sprite. Mas vamos continuar um. O que estamos fazendo aqui? Por que estamos cortando? E antes de tudo isso, o que é um sprite? Então deixe-me explicar o que é exatamente um sprite. Então, vou colocar meu laser. Um sprite é um para o objeto. Assim como temos a imagem que adicionamos agora, isso é algo um pouco diferente. Um sprite é um objeto 2D, vai se aprofundar no que eles são no futuro. Eles têm imagens gráficas nelas chamadas texturas. Então, se voltarmos à Unity aqui, você pode ver que temos esse histórico, certo? E também temos um renderizador sprite e um elemento Sprite aqui, que é o plano de fundo. Se eu defini-lo como nenhum, você pode ver que ainda tenho o objeto de fundo, mas não há mais uma imagem nele. Então, vou definir esse preço do plano de fundo. Eles são usados adicionando um componente chamado renderizador de sprite a um objeto de jogo. Assim como você viu agora, temos o objeto de fundo e adicionamos uma renderização sprite a ele. E nela temos a opção de adicionar um sprite. Mais tarde, veremos que também podemos adicionar camadas aos sprites para que eles possam renderizar e frente um do outro. Então, de volta ao nosso jogo, e aqui você pode ver que temos a folha Xanax. Agora, se adicionarmos ao nosso jogo, você pode ver que temos essa folha inteira e não queremos isso. Queremos cortá-lo e ter diferentes tipos de animações para o nosso exame, não tenho certeza de como pronunciar. Vou chamar isso de Jimmy. Este será o nosso gene. Então Jimmy, vamos clicar aqui. Vamos procurar no inspetor. Podemos ver que temos nosso modo sprite e single, que significa que toda essa imagem é uma única imagem. Mas como vamos cortá-lo, vamos torná-lo um múltiplo. Então, escolhemos vários. Clicamos em Aplicar e, em seguida, entramos no Sprite Editor aqui. Nós clicamos nele. E agora temos as opções para cortar esse bebê. Então, como vamos fazer isso? Existem muitas maneiras de cortar um sprite. Sempre que temos uma boa posição, o sprite geralmente podemos fazê-lo automaticamente. Então, se tentarmos fazê-lo automaticamente, como você pode ver, todos os sprites não foram cortados. Isso é bom. Mas isso não é o que queremos exatamente. Porque se, digamos que temos a animação aqui que é a ociosa. Temos três animações, que são o ídolo e temos três animações ou para não animações. Isso, isso, essas três imagens criarão a animação de ocioso, e essas quatro imagens criarão a animação da caminhada. E essas imagens criarão o torpedo ou o flipping ou o que quer que seja. Mas cada um deles tem um tamanho diferente e isso será uma grande dor mais tarde quando criarmos nossas animações. Então, nosso objetivo aqui é cortá-los exatamente do mesmo tamanho todos juntos. E podemos alterar o tamanho da nossa fatia mudando aqui, como você pode ver, o corte. Então, vou fazer esse corte um pouco menor para que não tenhamos os retângulos pretos. Como você pode ver, removemos os retângulos pretos. E aqui também removemos os retângulos pretos e o mesmo aqui. E eu só quero manter isso agora para que eu possa demonstrar o que acontece quando realmente aplicamos o corte. Então, neste momento, mudei apenas este. Você pode ver que aquele com o ocioso ainda tem retângulos pretos ao redor dele. E todos eles também foram cortados. Então, quando pressionamos a tecla de aplicação aqui, você pode vê-la. À direita. Fecharemos esta janela e podemos abrir a folha Jimmy. E você pode ver que agora temos todas essas fatias diferentes das ovelhas. Assim, podemos adicionar cada um individualmente à nossa cena. E você pode ver a câmera escondendo o cordão Jimmy. Lá vai você. Um pequeno Jimmy pequeno. E você pode vê-lo aqui. Este é o ponto de corte, a fatia que acabamos de adicionar. E se adicionarmos aquele com o retângulo, você pode ver que há um retângulo ao redor dele que não queremos. Então, vou excluir os dois. Vou clicar na folha do painel. Mais uma vez. Vou ao Sprite Editor e vou cortar todas essas coisas corretamente. Agora, você pode fazer isso sozinho. É muito fácil. Só vou mudar os quadrados aqui. Então, vou torná-los menores. Este é para o ocioso. Então lá vai você. Estou diminuindo para que ele se encaixe no quadrado. Não vamos usar nenhum desses dois. Vou excluir tudo o que não vamos precisar e saber que esses dois vamos precisar deles. Então eu apenas pressionei o Control Z para desfazer algumas das coisas. Não vamos usar o voo, mas eu recomendo que mantenha algumas das coisas que você pode querer adicionar. Então, vou cortar tudo isso. Não vamos usar as animações de filmagem que temos aqui porque vamos criar nossa própria mecânica de tiro. Então, estou apenas selecionando e excluindo todos esses. Você pode manter este por diversão. Quer dizer, honestamente, isso parece tão engraçado. Você pode mantê-lo para uso posterior. E finalmente, vou mudar o torpedo aqui. Então, também vou excluir todos esses. Vou escolher uma dessas caixas. Vou duplicá-lo. Então, da forma como duplicamos como Control D, vou garantir que todas as fatias tenham o mesmo tamanho. Então, vou escolher um desses. E vou duplicá-lo novamente, colocá-lo aqui. Precisamos ter certeza de que todos eles estão na mesma altura. Então este é 513. E vamos ver se isso se encaixa em todos os outros. Mais tarde, você entenderá por que estamos fazendo isso e por que é tão crucial ter todas as fatias iguais. Então, vou mover isso aqui e este. Então, obviamente, podemos ver que todos eles se encaixam corretamente, exceto para este. Então, precisamos ter certeza de que está aqui. Vamos ver se funciona neste. E é um pouco pequeno como você pode ver, não, ele realmente se encaixa perfeitamente de cima para baixo. Isso é ótimo. E também tente garantir que o personagem esteja no meio disso. Então, vou mover isso um pouco para a esquerda. Este também. E qual é a altura desses? Então, vamos ver que são três, 513. Vamos copiar isso. Certo. Este está correto. Cole-o aqui. Com base neste. Com base neste. E com base neste. E este, precisamos tê-los todos da mesma altura. Posso ver que tenho uma caixa extra aqui. Vou excluí-lo e agora temos os recortes adequados que precisamos. Então o ocioso, a caminhada e o torpedo que vamos usar. Então, vou apertar a tecla de aplicação. Vou olhar, lá vai você. Agora temos tudo configurado. Vou usar um dos, vamos ver qual deles é o 0. E também mais uma coisa que esqueci de dizer, podemos realmente mudar o nome para que eu possa mudar esse nome para um ocioso. Eu faço. Três ociosos, e assim por diante. Podemos mudar todos esses por enquanto. Eles são chamados de examinador dez, Exemplo 2 e assim por diante. Só vou mantê-los como estão. Este não é um passo muito importante, mas eu só queria ter certeza de que você sabe o que está acontecendo. Então, vamos, é claro, que nos pedirá para salvar. Vamos apenas acertar o aplicativo aqui. Lembre-se sempre de se inscrever. E agora podemos adicionar o ocioso. E aqui você pode ver que é extremamente pequeno. Como tornamos isso maior? Bem, assim como fizemos com o plano de fundo, podemos clicar aqui e podemos alterar os pixels por tamanho. Essa será sua tarefa. Podemos mudá-lo. Vamos defini-lo para 15. Para onde ele foi? Oh, então desapareceu. Por que isso? Por que não está mais aparecendo? Essa é uma pergunta complicada. Vamos lidar com isso mais tarde. Mas, por enquanto, vamos tentar torná-lo o maior que pudermos. Então talvez 50 ainda seja um pouco pequeno. Vamos fazer 32. Então eu acho que 32 é grande o suficiente 0, então apareceu na frente. Por que, por que aparece às vezes na França, às vezes na parte de trás. Como podemos consertar isso? Não se preocupe, vamos consertar todos eles no futuro. Então eu acho que 32 é um tamanho bastante decente. Talvez talvez façamos 28. Então, tudo bem. Acho que 28 é suficiente, talvez até um pouco grande. Veremos mais tarde, vou mudá-lo de volta para 32, talvez 30. Não tenho certeza. Eu nem sei. Claro, reserve um tempo para entender como você quer configurá-lo. Mas até lá antes de eu ir, deixe-me emitir. Você comeu um pequeno desafio e seu desafio será criar seu próprio jogador. Então, explore o jogo aberto r.org ou você também pode encontrar muitos recursos de jogos excelentes no HI dot io. Esses são sites incríveis. A maioria dos ativos é gratuita e você pode usá-los. Encontre alguns personagens e sprites que se adequam ao seu estilo. Então, como você pode ver, adicionei minha própria imagem de fundo. Talvez você possa encontrar uma área diferente onde você quer que seu jogador esteja lutando. Adicione-os ao seu jogo e corte os sprites, assim como aprendemos neste vídeo, e pronto. Então, pause o vídeo agora mesmo e faça o caso de cada desafio. Então, antes de ir, a última coisa que precisamos fazer é criar um repositório. Então, já aprendemos a baixar a árvore de origem, como adicionar tudo. A última coisa que vamos fazer é apertar a opção Criar ou você pode abrir uma nova guia nas sobrancelhas. Vamos ver um projeto Unity. Onde salvamos isso? Esquecemos onde salvamos todos. Vamos ver, o backup de projetos Unity. Lá vamos nós. Encontre invasor comprado na linha assim é onde vamos selecionar a pasta. Vamos criar um repositório. Sim. E como você pode ver, tudo aqui está configurado como aprendemos, precisamos ter certeza de que temos que ignorar as bibliotecas. Então clique com o botão direito do mouse, ignore tudo na biblioteca. Ok, então agora temos o arquivo gitignore. Vamos abri-la. Vamos entender que está tudo bem. Git. Ignore. Lá vamos nós, os mestres. E nós só vamos clicar na linha. Controle, uma cópia disso de volta aqui. Selecione tudo controle V. Salve isso. De volta. Aqui, você pode ver que o arquivo gitignore mudou, então tudo o que não precisamos foi removido e não será salvo. Vamos encenar tudo isso. Vamos comprometer nosso trabalho e esse será o commit inicial do nosso jogo. Cometa nossas mudanças, vá para os mestres, e lá vamos nós, Estamos preparados para nossa jornada. Isso é tão emocionante. Esta é a primeira vez que você cria um projeto. Verdadeiramente, isso é muito emocionante. Então, espero que você faça o desafio. Encontre seus próprios sprites, certifique-se de sempre confirmar as alterações é muito importante. Você entenderá por que, mais tarde, em sua jornada de desenvolvimento de jogos, você vai me agradecer, confiar e eu o verei no próximo vídeo. 8. Como criar o jogador: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, aprendemos tudo sobre classificação de camadas. Também aprendemos sobre o relacionamento entre pais e filhos, não como na relação pai-filho regular, como na relação pai-filho do objeto do jogo. Como você pode ver agora, a espingarda é renderizada na frente do braço ou atrás do braço, mas todas elas são renderizadas na frente do jogador, que é renderizada na frente do fundo. E ele também tem uma pequena sombra. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, vamos começar. A primeira coisa que queremos fazer é criar um objeto de jogo de jogador. Então, não queremos ter este nenhum por enquanto, vamos mudá-lo. Não queremos ter o sprite como objeto principal. Queremos usar um objeto de jogo de jogador que tenha um corpo que , por sua vez, é a renderização do sprite. Então vou mudar isso de ocioso para o corpo. E vou clicar com o botão direito do mouse aqui, criar um novo objeto de jogo. E vou redefinir sua posição porque atualmente você pode ver que criamos esse objeto de jogo e sua posição é baseada em Onde estamos olhando na cena. Então você pode ver que tem certos atos, certa forma, um certo Z. O que podemos fazer é clicar no X, colocá-lo em 0, podemos clicar no Y, mas se os zeros em 200, mas isso é um pouco complicado em funciona. Mas há uma maneira muito mais suave e profissional. A propósito, cliquei em controles que três vezes para reverter todos esses, podemos clicar nos três pequenos botões aqui, ou três pequenos pontos. Podemos rolar para baixo e podemos ver que podemos redefinir a posição ou podemos redefinir todo o transporte. Então, por exemplo, digamos que eu estabeleça uma rotação de 134. Eu clico aqui, posso redefinir a posição ou redefinir a rotação, ou posso redefinir todo o objeto do jogo. Então, essas são apenas pequenas pistas. Você pode até ver que o nome do objeto do jogo foi redefinido. Então, não foi semana ou semana, nem sequer nomeamos. Eu acho. De qualquer forma, vamos chamar isso de camada de desgraça, que também é Ginny. E vamos mover o corpo e colocá-lo lá, o doom player. Ok, então o que aconteceu ali? Deixe-me refazer isso. Vejamos o corpo. Qual é a posição dele? É menos 5,60,89. Quando o colocamos sob o jogador da cúpula, estamos fazendo dele uma criança. Então agora você pode ver que se movemos V, não jogamos ou para a esquerda e para a direita, observe que não estamos movendo o corpo. Estamos movendo o objeto do jogo do jogador do doom. Você pode ver que o corpo, que é esse aqui, está se movendo também. E você pode ver que podemos mudar sua posição. E o mais legal é, vamos olhar para o corpo novamente, recentemente a posição do corpo. Então o corpo é, digamos adicionar 0, 0, ok? Se movermos o jogador DOM, qual será a posição do corpo enquanto ainda for 00? Então agora a posição, rotação e escala e tudo é relativo ao objeto principal do jogo, que é o jogador do condenado. Mas o objeto principal do jogo não é a palavra correta. É o objeto do jogo pai e o corpo se torna o objeto do jogo filho. O que uma relação pai-filho gosta? Agora, isso não é uma sessão de terapia. Na verdade, é o que é chamado de relacionamento pai-filho no Unity. Então, a criança vai se mover, girar e dimensionar com o objeto do jogo pai, como vimos agora, usado para criar um corpo de objetos APT que se movem juntos. Veremos o que quero dizer com um corpo de objetos. Quero dizer, não só o corpo do jogador. Vamos adicionar um braço, adicionaremos uma arma, adicionaremos uma sombra. E todos eles se moverão ou precisarão se mover com o jogador enquanto jogamos nosso jogo. As crianças também podem ser pais de outros objetos. Você notará mais tarde que podemos ter um filho de uma criança. Então, a criança se torna pai, mas ainda é uma criança em relação ao pai principal. Então, é como um tipo de avô, se você quiser, chame-o assim. Finalmente, as propriedades de transformação filho são relativas ao pai. Isso significa que, como você viu quando mudamos a posição do objeto principal do jogo pai, a posição do corpo permanece a mesma, 0, 0, 0, 0. Então, vamos voltar para Unity. Então agora temos o corpo. A próxima coisa que vamos fazer é adicionar uma arma e a sombra. Então, se entrarmos nos recursos. O jogador aqui, você pode ver que temos um R e temos uma sombra. E este ONE pertence ao outro jogador do doom, não este, aquele que estamos usando atualmente para o outro que eu forneci, você pode usar os dois. Vou usar esse braço especificamente só para que sempre saibamos a diferença entre os dois. Não vai parecer tão bonito, mas é bom para aprender. Então, vou selecionar o braço e a sombra, e vou arrastá-los para os ácidos aqui. Vou colocar a sombra e você pode, tentar fazer isso sozinho. Então, se eu mover a sombra sob o jogador da cúpula, você notará que apenas movendo-a como filho do jogador de dunas agora temos a sombra em uma posição diferente. Posso redefini-lo e posso colocá-lo aqui, mas não está lá. E mesmo se eu torná-lo um pouco maior, então vou fazer isso talvez oito em vez de 100. Lá vai você. Você pode ver que a sombra está agora na frente. Mas por que às vezes tem que estar na frente, às vezes na parte de trás? O que dá, como vamos consertar isso? Vamos discutir isso em um pouco. Deixe-me adicionar o braço aqui. Lá vamos nós. Agora temos o braço. Vamos defini-lo como o filho dos jogadores da cúpula na sombra embaixo dele. Vamos redefinir a posição do braço. Vamos fazer com que os 32 armados se apliquem. Então, enquanto o braço, para que você possa ver o braço. Lá vai você. Está por trás do jogador. Isso não é nada bom. Como vamos consertar isso? Vamos corrigir isso usando algo chamado camadas de classificação. Então, atualmente, podemos ver que o corpo tem um renderizador sprite, o braço tem um renderizador sprite e a sombra também tem um renderizador sprite. E você pode ver aqui mesmo na renderização do sprite há algo chamado configurações adicionais, que tem algo chamado camada de classificação e a ordem em camadas. Agora, o que tudo isso faz? Você pode ver que tudo atualmente o plano de fundo está no padrão. O corpo, o R e a sombra estão todos no padrão, e todos são ordenados em 0. É assim que a unidade determina qual sprite deve estar na frente de qual outro sprite, especialmente quando se trata de jogos 2D. Então, atualmente, você pode ver que a sombra está em 0 e está atrás do jogador. Mas olhe atentamente aqui. Ou vamos fazer o braço. Se eu receber o R, ele ainda está no padrão, assim como o corpo. Mas se eu colocá-lo em um, lá vamos nós. Agora está na frente do nosso jogador. Se eu colocá-lo, vamos movê-lo para o lado. Se eu colocá-lo em minus1, você pode ver que ele desaparece atrás do fundo. Então deixe-me colocá-lo de volta para um e deixe-me colocá-lo no avião. Agora, isso é ótimo, tudo está funcionando bem. Posso definir o plano de fundo como minus1 e garantir que toda vez que adiciono algo, ele está na frente ou no banco e no banco. Mas há um problema. O que acontece quando tenho 100 objetos ou 200 objetos de 5000 objetos? Eu tenho que definir todos eles? Menos 1 mais 1, 2, 3, 4 menos 100. Obviamente, não. O que precisamos fazer é criar uma camada de classificação. E se eu clicar aqui no plano de fundo, e se eu clicar no padrão, você poderá ver que posso adicionar uma camada de classificação ao nosso ganho. Então, vamos clicar em Adicionar camada de classificação. Abrimos a camada. Como você pode ver, temos tags, temos camadas de classificação e temos camadas. Vamos nos aprofundar neles em apenas um pouco. Vamos nos concentrar na camada de classificação. Podemos acertar a pequena vantagem aqui. E podemos criar uma nova camada que chamará o plano de fundo. Então, agora você pode ver que o plano de fundo é renderizado na frente ou atrás do padrão. Então, se eu voltar ao fundo, isso fará sentido em apenas um pouco. Vou definir a camada de classificação como plano de fundo. E lá vai você. Você pode ver que ele desaparece. Porque deixe-me voltar. Do jeito que voltamos, vamos para Layers, as camadas que você pode ver aqui. Então camadas, camadas adicionadas. Você receberá esse inspetor. Se eu mover o plano de fundo para trás do padrão, você pode ver agora que o, tudo o que estava na camada padrão, então a sombra, o braço e o corpo agora são renderizados na frente dele. Então, de volta à camada. Nessa camada, você pode ver que é assim que a hierarquia funciona. E isso é muito importante aqui. Mas, como você pode ver, torna a vida muito mais fácil. Agora você tem um desafio e seu desafio será criar uma camada de classificação de camadas. Então, vamos criar uma nova camada de classificação chamada player. Atribua todos os elementos do jogador a essa camada. Certifique-se de que o jogador seja renderizado na frente do plano de fundo como vimos alterando a hierarquia na camada de classificação. E, finalmente, como um desafio extra, se você estiver se sentindo bem, vá para os Recursos, adicione uma arma deles, coloque-a no jogador e certifique-se de que ela seja renderizada entre o jogador e o braço. Queremos que o braço esteja na frente da arma, mas queremos que a arma também esteja na frente do jogador, mas atrás da arma. Então você precisará brincar com isso. Se você precisar criar uma camada extra, vá em frente. Você pode criar quantas camadas de classificação quiser, mas certifique-se de que as verdadeiras mantenham as coisas para que você não precise criar uma camada especial para o braço e a sombra. É o tempo todo no jogador. Portanto, não se preocupe com isso. Com isso dito, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, como você conseguiu quase isso? Espero que você tenha tentado o seu melhor para fazer o desafio. Sempre faça o seu melhor com um desafio, mesmo que seja difícil, mesmo que você não tenha certeza de como fazê-lo, você sempre pode voltar e desfazer o que fez. Você aprende com os erros que cometeu. De qualquer forma, camada do jogador, vou selecionar o corpo, segurar Control, selecionar o braço e a sombra. E eu posso mudar todos esses. E para a camada do jogador, vou mover a sombra para estar logo abaixo do jogador aqui. Vamos ver. Lá vamos nós. Posso fazer a camada de ordem. Vamos mantê-lo em 0. O corpo estará em um e o braço estará em dois. Então, o braço sempre será renderizado e na frente do corpo do jogador. Vamos salvar a cena e vamos entrar em nossos recursos e pegar nossas armas. Então você pode ver aqui em nossos recursos nós temos as armas que estão indo aqui. Vamos para o PNG. Vou selecionar a espingarda, vou arrastá-la para os ativos aqui. Vou para que fim? O jogador da cúpula. Vou mudar isso através da arma de tiro. É extremamente pequeno. Vou me certificar de que esta é uma rampa terceira, para talvez aplicar as alterações. Enquanto a espingarda 0 ou quem arranca grande. Então eu vou mudar isso para talvez a arma que crie uma camada de classificação para a arma. Então, todas as armas, armas. E isso vai ser definido como as armas. Certo. É um pouco maior do que eu gostaria. Ou sabemos porque estamos usando apenas as armas do jogador que não vamos criar. Então lá vamos nós. Nós removeremos isso. Manteremos a espingarda na camada do jogador. E como o braço está nos dois, vamos colocá-lo nos três e a espingarda estará nas duas agora. Então lá vai você. Mas, obviamente, vamos fazer disso um filho do jogador. E, obviamente, precisaremos tornar a espingarda um pouco menor. Então 32, vamos fazer 50. Veja como isso parece. Talvez pequeno demais. Vamos tentar. 40. Obrigado. Quarenta serão bons. Ainda assim tão grande. Talvez vamos fazer de 40 a 40 para aplicar isso. Sim, acho que essa espingarda está parecendo boa o suficiente. Então lá vamos nós, salve tudo isso, executamos o jogo. E lá vamos nós. Então agora temos o fundo, o jogador, temos uma sombra que é um toque muito bom, a propósito, dá ao jogo capaz de profundidade. E temos uma espingarda que é renderizada na frente do jogador. Agora acho que a espingarda se beneficiaria de um pouco de mudança de posição, mas por enquanto, espero que você goste. Vamos e nunca nos esquecemos também. Mudanças de metal. Então você pode ver que vamos encenar tudo isso, mas temos algumas coisas que não gostaríamos de mudar. Por exemplo, alguns PNGs ou as imagens que ocupam muito espaço. Por enquanto, vamos mantê-los, mas depois você verá que não precisamos encenar as imagens. Podemos simplesmente removê-los. Eles ocupam muito espaço, espaço desnecessário. Então, estamos indo por enquanto, vamos encenar tudo isso, confirmar as alterações. O que fizemos? Criamos um jogador e aprendemos a classificar camadas. É muito importante sempre nomear seus commits para algo que você possa se lembrar mais tarde. Por exemplo, agora sabemos que esse foi o commit inicial e o segundo commit criamos um jogador e aprendemos a camada de classificação. Poderíamos ter adicionado uma arma, mudar a camada de classificação das armas, etc, etc. Então espero que você goste e eu o verei no próximo vídeo onde vamos realmente adicionar um roteiro ao jogador e começar a mudar seu comportamento. Tão emocionante, eu te vejo então. 9. Como usar as entradas (variáveis): Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vamos criar nosso primeiro script e adicioná-lo ao nosso reprodutor de condenação. Não só isso, vamos aprender muitas coisas, vamos aprender o que essa palavra assustadora significa. Vamos aprender sobre variáveis. Vamos aprender sobre entradas. Vamos aprender sobre o vetor 2. Vamos aprender como o início e a atualização funcionam separadamente. Então, com isso dito, este é um vídeo um pouco mais longo, se você quiser, mas se você é um iniciante, é muito importante, muito crucial entender tudo. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então é hora de algum script. A primeira coisa que vamos fazer é criar um script e atribuí-lo ao jogador do doom. Agora, existem muitas maneiras de criar scripts e há muitas maneiras de atribuir scripts a determinados objetos. Eles são todos iguais. Vamos começar com o mais básico, e isso é simplesmente clicar no objeto do jogo. Você pode ver aqui que temos a transformação. É um dos componentes que temos. Podemos adicionar outro componente aqui clicando nele. Agora, você pode ver que temos muitos componentes que podemos adicionar, variando de áudio a afetar, física e assim por diante. Mas também temos essa opção aqui de adicionar scripts. Podemos clicar nele. Podemos ver através dele e adicionar o script que quisermos. Ou ainda mais fácil do que isso, podemos simplesmente começar a digitar o nome do script que queremos adicionar. E o script que queremos chamar ou criar será o controlador do player. Então, vamos criar o controlador de camada aqui e garantir que você crie o nome para ser uma única frase sem espaços. Você pode ver aqui que temos a opção de um novo script. Vamos clicar nele. Você pode ver o nome como controlador do jogador. E agora podemos criar o script, mas certifique-se de que o sapato descubra a palavra correta ou o nome correto para o script, pois ele será o nome da classe dentro desse script. Isso será muito crucial à medida que você criar scripts mais tarde. Então, vamos criar um anúncio. Espere um pouco. E agora devemos ver que temos o roteiro pronto. Se clicarmos nele aqui, podemos ver no Inspetor como será esse script. E agora vamos clicar duas vezes. E você pode ver que o Visual Studio está se abrindo. Agora. Uma das coisas que muitas pessoas ou muitos alunos meus continuam me perguntando repetidamente. Se o script não abrir usando o Visual Studio ou, por exemplo, quando você digitar algo aqui e não receber as recomendações do Visual Studio, você pode acessar isso, ir para Preferências, ir para as Ferramentas externas, e no editor de script externo, verifique se você tem o Visual Studio Community. Você pode escolher nossos IDEs como o Visual Studio Code. Mas eu, pessoalmente, gosto ou prefiro usar o Visual Studio Community 2019. É muito melhor e mais suave que o estúdio. Às vezes, o estúdio só tem suas peculiaridades onde ele não aparece, não abre corretamente. Por isso, prefiro usar o Visual Studio Community. Isso é gratuito. Funciona. Vamos continuar. Agora. Temos nosso roteiro aberto aqui. Temos as bibliotecas que podemos usar. Temos o nome da classe, o controlador do jogador. Ele sempre deve ter o mesmo nome que o script que criamos aqui. Então você pode ver o controlador do jogador em nenhuma circunstância você altera o nome do script aqui sem alterar o nome da classe? Nem tente fazer isso. Isso criará muitos problemas. O que temos aqui? É um público, veremos o que isso significa. É uma classe, é um comportamento mono. comportamento do Monte nos dá a capacidade de usar coisas como iniciar e atualizar. O que é o início? Start é um método. Veremos mais tarde quais são os métodos. Mas, por enquanto, tudo o que você precisa saber que qualquer código que escrevemos dentro da estrela é executado assim que começarmos nosso jogo, se esse objeto estiver ligado, é claro, veremos o que isso também significa mais tarde. Uma atualização, como você pode ver, é chamada uma atualização uma vez por quadro. Então, se tivermos, por exemplo, coisas que queremos chamar cada atualização de quadro é perfeita para isso e veremos tudo isso à medida que avançarmos neste curso. Você entenderá tudo, não se preocupe com isso. Agora, a primeira coisa que precisamos fazer é que precisamos de uma maneira de mover nosso jogador. Faremos isso tirando entradas das teclas de seta ou das teclas WASD. Mas antes de fazermos isso, há algo que precisamos levar em consideração e essa é a velocidade de movimento do nosso jogador. E para isso, vamos precisar de uma variável. O que é uma variável quando se trata de C-sharp? Deixe-me explicar. As variáveis são como caixas. Então, temos uma caixa, damos a ela o nome vidas, e colocamos dentro dessa caixa um número três. Então agora temos uma variável obter vidas que tem três dentro dela. Então, é assim que criamos o código para essa caixa ou valioso. Começamos dando a acessibilidade. Então, onde você pode acessar essa variável? Pode ser público ou pode ser privado. Se for privado, só podemos acessá-lo dentro da classe que criamos, não de fora. Se for público, podemos sair de qualquer outro script que quisermos. Precisamos atribuir o tipo da variável. Então, temos vários tipos, temos números inteiros, cadeias de caracteres e assim por diante. Veremos em apenas um pouco quais outros tipos temos. Temos o nome da variável. Obviamente, todas as variáveis devem ter um nome. De que outra forma chamamos isso? E temos os dados que estão dentro dessa variável. Então é assim que criamos uma variável em C Sharp. E esta é a representação, se você quiser, é como uma caixa que colocamos as coisas e depois seguimos em frente. Temos diferentes tipos de variáveis. E o primeiro tipo é uma velocidade. Então, um número inteiro é um número normal, digamos 123456. Um flutuador é, digamos 4.8. Por que temos um flutuador? Porque às vezes a velocidade de algo ou a velocidade de um carro não é apenas cinco ou seis. Pode ser 6,32, pode ser 6,9, pode ser 6.9456. Então, precisamos de um flutuador, e é assim que criamos um flutuador. Sempre adicionamos os dados. Então o 4.8 com um F no final. Então temos um booleano. O booleano geralmente é verdadeiro ou é falso. Por exemplo, digamos que queremos determinar se um jogador está morto ou não. Então, como ele, que ele está morto, então a variável é verdadeira. Se ele não estiver morto, então a variável é que S false. Finalmente, temos uma string. Então, por exemplo, o que é uma série de caracteres? Temos vários personagens, um após o outro. Vejo h, e, l. Essa cadeia de caracteres é Michael. Então chamamos uma variável do tipo string com o nome meu nome, e ela representa michael. Certifique-se sempre que você criar uma variável de string que esteja entre essas duas aspas. Ok, agora, com todas essas variáveis feitas com, vamos seguir em frente e criar nossa própria variável nos scripts aqui. Então, a primeira coisa que vamos fazer, pois vamos criar algo chamado campo serializado. Agora, não tenha medo desse nome longo. Vai ser um número inteiro, e será chamado de velocidade de movimento. Agora, isso determinará a rapidez com que nosso jogador se move à medida que implementamos seu entendimento e por que estamos usando algo chamado campo serializado. Acabou de me dizer, Michael, que é público ou privado. O que esse campo serializado se encontra? Bem, não se preocupe com isso. Mais tarde. Também explicarei por que estamos usando algo chamado campo serializado. Mas, por enquanto, entenda que é algo que podemos ver no Inspetor. Então, se eu tornar isso público, salve isso, volte para o nosso roteiro. Você verá que no inspetor isso muda. Temos o público e o movimento. E se formos ao doom player, você pode ver aqui que temos a velocidade de movimento e podemos mudá-la. Mas se eu torná-lo privado para que outros scripts não o acessem, você notará aqui que não podemos mais alterá-lo. Mas e se quisermos ser capazes de alterá-lo do Inspetor, mas, ao mesmo tempo, não queremos que outros scripts o acessem. Bem, nesse caso, criamos um campo serializado. Nós salvamos isso. Voltamos e fazemos inspetor. E você pode ver agora, não podemos alterá-lo, mas outros scripts não podem acessá-lo. Analisaremos isso mais tarde à medida que progredirmos quando tivermos outros scripts. Ótimo, então agora temos a variável da velocidade de movimento. A próxima coisa que queremos obter é d, movimento, direção ou a entrada que obtemos. Então, como vamos mover nosso jogador? Bem, vamos precisar de duas entradas. Um que moverá o jogador para a esquerda e para a direita, ou na direção horizontal, e outro que moverá o jogador para cima e para baixo, que é a direção vertical. Então, a maneira como fazemos isso é usando o sistema de entrada e vamos obter nossas entradas usando algo chamado ponto de entrada obter acesso Raw. Agora, você pode estar confuso. O que é isso? Como vamos conseguir isso? Bem, sempre que você enfrentar algum talvez. Talvez um novo método ou alguma coisa estranha que estamos usando em unidade e você esteja um pouco confuso. Você tem um amigo muito útil, que é o Google. E então, quando você procura no Google, você pode ver que temos algo chamado documentação do Unity, que é um lugar tão incrível e deve ser uma fonte diária de informações para você. Então, queremos usar a entrada. Queremos obter os eixos, que são horizontais e verticais. Você pode ver aqui, se procurarmos por ele e as documentações, temos todas as informações que precisamos. Primeiro de tudo, podemos ver como a declaração funciona. Podemos ver a descrição para que ela retorne o valor do acesso virtual identificado pelo nome do eixo. Ele também informa como usar esses métodos diferentes. E também lhe dá aqui um exemplo de como usá-lo. E eis que eles o usam e a atualização, podemos até mesmo ir em frente e copiar isso e usá-lo em nosso próprio rei. Mas, por enquanto, vamos procurar o ponto de entrada, obter linha de acesso, horizontal. Muito bom. Mas de onde eles obtiveram o nome horizontal? Vamos verificar. Se voltarmos e nosso jogo. Se formos para o arquivo ou me deixarmos ver as configurações do projeto Editar. Se olharmos através do gerenciador de entrada, clicamos no eixo, podemos ver que temos o firewall horizontal, vertical para pular, salto fogo MouseX, etc. Essas são todas as entradas que podemos usar. E se clicarmos na Horizontal, você pode ver aqui que temos o nome horizontal, daí por que ele está sendo usado aqui. Enquanto aqui você pode ver que estamos usando horizontal. E você também tem a vertical e você pode ver que o botão negativo está esquerdo, o botão positivo está certo. E você também tem um botão negativo para fora, o que significa alternativa, que é o a e o D. Você também tem a gravidade e assim por diante, mas de detalhes lá dentro. E você também tem o eixo, o eixo x, que significa a horizontal. Então, vamos avançar em nosso código e implementar isso. Então, vamos abrir o frio aqui. Eles usaram uma atualização. Vamos em frente e usá-lo e atualizar porque queremos ter acesso a ele todas as vezes. Então, vamos escrever aqui o ponto de entrada, obter acesso errado. E vamos abrir os dois suportes aqui. Mas agora queremos escrever na horizontal. Digamos que escrevamos xantana pressa. Então você pode ver, eu meio que estraguei tudo. Não é a palavra correta. Se não for exatamente a mesma palavra que a usada aqui nas Configurações do projeto. Isso não funcionará. O que isso significa? Sempre que estamos usando as referências de string, já aprendemos o que são strings. Precisamos ter certeza de que entramos em Unity. Clique duas vezes aqui para selecioná-lo, Controle C para copiá-lo, volte aqui e cole. Isso garantiu que não cometeríamos nenhum erro sempre que estivermos criando ou usando uma referência de string. Isso é muito importante porque quando se trata de erros, isso não será detectado pelo Visual Studio. É por isso que é imperativo sempre que você estiver usando uma referência de string para sempre, sempre copiá-la e colar. Esta é uma regra que você usará todo o seu desenvolvimento de jogos de jornada. Agora que temos o eixo rolando na horizontal. Também podemos adicionar a vertical, mas não é suficiente. Precisamos de uma maneira de armazenar o que estamos clicando. Então, a maneira como fazemos isso é criar outra variável aqui. Desta vez, vai ser privado. Vai ser do tipo vetor 2 e será o movimento. E agora o que é um vetor dois e por que o usamos para ter a entrada do movimento. Bem, porque se olharmos para trás aqui e esperarmos que ela seja compilada, você pode ver que a posição é um x, y e z. Agora, porque não estamos trabalhando na dimensão VC e nesta dimensão, seja lá o que você quiser chamá-la, nós estão trabalhando apenas no x e y. Queremos ter um vetor para que leve tanto o x quanto o y. Então agora o que podemos fazer em nosso código, podemos vir aqui. Podemos escrever entrada de movimento. Podemos adicionar o ponto x e ele será igual ao ponto de entrada. Obtenha acesso errado. E só para garantir que possamos ver tudo, vamos escrever log de pontos de depuração. E aqui vamos apenas imprimir o movimento, esse ponto de pé x. vamos salvar isso. Vamos também ir em frente e imprimir o log de pontos de depuração e toda a entrada de movimento. Então, vou escrever aqui, este é o vetor. Para salvar isso, volte para o Unity e certifique-se de ter o console aqui. Se você não for para Window, vá para General. E você pode ver aqui que você tem a janela do console. Então, vamos clicar aqui. Não se preocupe com esses pequenos erros. Execute o jogo. Lá vamos nós. Assim, podemos ver que atualmente temos zeros. Podemos clicar no colapso. Isso colapsará todas as mensagens que são as mesmas. Se agora tentarmos pressionar a ou D, se pressionarmos o a, lá vai você. Você pode ver que isso se torna menos 1 e o vetor 2 é menos 1 000. Se pressionarmos a tecla d, você notará que ela se torna 1 e o vetor dois é 110. Então lá vamos nós. Excelente. Agora que você entende como eles funcionam, como eles parecem, é hora de um pequeno desafio e seu desafio será obter a entrada y. Então, verifique no Gerenciador de entrada de configurações do projeto para obter a entrada y, o que deveria ser? O que a string deve me referir? Obtenha a entrada e o código usando o rolo do eixo de lacuna. Você também pode conferir algo chamado obter acesso sem linha. Este é um bom O recurso extra para você fazer. É muito fácil, basta verificar a documentação, apenas obter acesso sem Rob, ver qual é a diferença. E, finalmente, você precisará exibir essa entrada no console usando o log de pontos de depuração, assim como fizemos usando a entrada de movimento. Então, pause o vídeo agora mesmo e vá fazer cada galão. Certo, bem-vindo de volta. Como você se deu bem com isso? Eu sempre espero que você esteja tentando o seu melhor. Então, vamos duplicar essa linha. Como faríamos isso? Basta clicar no final desta linha. Mantenha o controle D. Agora você tem exatamente a mesma linha. Vamos mudar isso do x para o y. lá vai você. E, em seguida, o input.txt obtém acesso. Rob, o que isso deveria ser? Bem, sabemos que isso deve ser vertical, mas sempre que estamos lidando com referências de string, vamos para a vertical, clique duas vezes em Controle C, voltamos no controle de código V, salve isso. E vamos duplicar isso também, entrada de movimento ponto y. E vamos apenas adicionar um pouco de palavras aqui. Então este será o x, este será o y. Salve tudo isso, volte para a unidade. Isso fecha a janela de configurações do projeto. Execute o jogo. Então, agora, como você pode ver o x, o y e o vetor ou todos os 0. E você pode ver quantos temos aqui. Uma vez que pressionamos o w, podemos ver que temos o y como um, o vetor 2, 0, 1. Se pressionarmos o S, é menos 1. Se pressionarmos a tecla a, x é minus1 enquanto o y ainda é 0, você pode vê-lo aqui no vetor 2. Se pressionarmos a tecla W e D, você pode ver que temos esse vetor é 1, 1 com x sendo um. E tudo está funcionando perfeitamente bem com tudo. Então, espero que você goste. Espero que você tenha entendido o que está acontecendo. Se você não tem certeza do que está acontecendo. Tentei analisar isso novamente, entenda o que significa um vetor dois. Também temos algo chamado vetor 3. Sempre que estamos trabalhando com dimensões VC, se for um jogo 3D. E com isso dito, espero que você goste e espero que também tenha entendido como a atualização está sendo chamada a cada quadro que você pode ver quantas vezes ela está sendo chamada. E só para uma pequena demonstração, se você ainda está um pouco cético em relação ao que estou dizendo, vamos tentar depurar o log de pontos. E vamos apenas dizer aqui, ei, eu sou e começo a ser chamado uma vez. Salvei isso de volta em nosso jogo quando corremos, assim que isso for montado, executamos o jogo. Você verá aqui, ei, é chamado apenas uma vez. E estes estão sendo chamados de cada quadro. E nosso jogo com isso dito, volta aqui, compromete todas as nossas mudanças. Compromete-se. E como devemos chamá-lo aqui? Criou um script para o jogador e as variáveis aprendidas. Agora, isso ocorre porque estamos criando um curso geralmente quando você está fazendo um projeto e aprendeu variáveis, isso não é importante? Vou removê-lo. Isso é só dizer que criou um script para a camada. Vamos comprometer nossas alterações. E te vejo no próximo vídeo. 10. a mudar a posição do jogador (transformação de objetos de jogos: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, na verdade, vamos colocar as entradas que criamos para usar e veremos como as variáveis são importantes. Então, agora, quando tivermos nosso ganho, você notará que não ficamos parados lá. Você não tem nada no console. Quando pressionamos a tecla WASD, podemos ver que nosso jogador se move para a esquerda, para a direita, para a esquerda, para cima, para baixo. E não só isso, se eu aumentar a velocidade de movimento, lá vamos nós, somos muito mais rápidos. Então, não só movemos o jogador com as teclas, também podemos controlar a rapidez com que ele se moveu. Então, bem, dito isso não vamos perder mais tempo e vamos começar. Ok, então agora que temos as entradas prontas, vemos como elas funcionam. É hora de realmente começar a mover o jogador. Como prometemos. Vamos abrir o script aqui. E vamos prosseguir e remover esse log de pontos de depuração. Estes estavam aqui também. Faça-nos acreditar que isso está realmente funcionando. Ok, então a primeira coisa que precisamos fazer é que precisamos acessar a posição transformada do jogador. Então, vamos seguir em frente e clicar em Transformar. E você pode ver aqui como o visual Studio já é útil. Está nos dizendo qual é a transformação. Portanto, a transformação que vai escrever agora é o transporte anexado a este objeto do jogo. Qual objeto de jogo? É o objeto do jogo que tem o script do controlador do jogador nele. E se olharmos para trás aqui, clicamos na camada. A qualquer momento, clicamos no jogador. Podemos ver que o controlador do jogador está ligado ao jogador e a transformação que está no GameObject não joga como esta. Então, estamos acessando essa transformação específica. Então, de volta aqui, vamos escrever transformada novamente, pressione Tab para completar a posição do ponto da palavra. Você pode ver que pode acessar a posição, a escala, a rotação, tudo o que está disponível na transformação. E nós escrevemos posição. Agora, isso será igual a um novo vetor três. E vai ser, digamos, por enquanto, apenas 0,1 f. E também podemos escrever o ponto 1 f. Isso significa 0, e vamos manter o eixo z no mesmo lugar. Vamos salvar isso. Agora, você pode estar pensando por que Vector3 não dizemos que não queremos modificar isso? Bem, se passarmos o mouse sobre a posição, você pode ver que a posição do espaço mundial da transformação como um vetor três, que também pode passar pelas documentações e ver que é realmente a posição transformada de qualquer objeto, independentemente de estarmos usando 3D, 2D 1D, Isso é impossível, mas você obtém o vetor de imagem três posições. Sempre acessamos a posição do vetor C, mas a mantemos como 0 f. Agora o escopo não está completo, mas vou usá-lo apenas para aprendermos à medida que cometemos erros, vou salvar isso. Vou voltar aqui. E vamos apenas obter alguns valores reais aqui para que saibamos, então menos cinco e digamos que isso seja menos 1 salvará isso. Vamos executar nosso jogo e vamos dar uma olhada. Lá vamos nós. Então 0.10.1. Agora, qual parece ser o problema? Não estamos chamando isso de cada quadro? Bem, o problema aqui é que estamos simplesmente atribuindo esse valor aqui, o novo vetor, 30.10.10 f para a posição. Em cada quadro, não estamos aumentando a posição de transformação. Então, como vamos começar a aumentar? Deixe-me parar o dramaturgo aqui. Vamos escrever que tomamos a posição de ponto de transformação do objeto do jogo e, em seguida, adicionamos a ele o 0.10.1 vector 3, cada quadro. Então, vamos salvar isso. E vamos voltar e olhar para o nosso jogo, como ele parece agora. Nós executamos o jogo e lá vai você. Muito objetivos. O jogador acabou de sair do prédio, como você pode ver, como você pode ver agora o que acontece aqui. Tomamos a posição transform.py. Atribuímos na transformação já disponível, mas posicionamos mais o vetor 3, e fazemos isso a cada quadro. Então, digamos que comecemos em 0, 0. Levamos 000 aqui, adicionamos a este vetor, o próximo quadro temos 0,21. Nós pegamos, adicionamos a ele, ele se torna 0,2. Nós pegamos, adicionamos a ele se torna 0,3. Então, cada quadro aumentamos isso. Agora, como você pode ver, há código redundante aqui. Redundante significa que estamos usando isso várias vezes. Para evitar isso, podemos simplesmente remover isso aqui e, em vez disso, adicionar uma vantagem por trás dos iguais. E essa é exatamente a mesma sintaxe de antes. Então, se escrevermos isso de novo, deixe-me duplicar isso. Vou simplesmente adicionar duas barras. Isso se torna um comentário. E, como já dissemos, um comum não executa o código, e simplesmente removeremos isso. Então, como um pequeno lembrete do que essa vantagem é igual a isso. Então, vamos salvar isso. Vamos voltar ao nosso jogo e vamos deixar isso um pouco menor, então adicionaremos outro 0 e aqui, salvaremos isso de volta em nosso jogo. Nós executamos o código, o jogo. E lá vamos nós, podemos vê-lo lentamente flutuando para longe e de novo, ótimo. Então agora temos nosso jogador se movendo. Mas não queremos que esses valores sejam apenas arbitrários. Não queremos ter 0,1 ou 0,01. Na verdade, queremos que a entrada que recebemos aqui mova o jogador. Então, esse será o seu desafio. Seu desafio é mover a posição do jogador com a entrada. Então você acessará a posição da transformação do jogador. Você vai tornar a posição um novo vetor 3. E você vai usar o movimento input.txt e ponto y, pois o x e y deste novo vetor 3 também manterá o eixo z em 0 F. E alguns apenas um pouco de ajuda extra. Eu recomendo que você analise a documentação do Unity e veja o exemplo. Eles foram tão legais na empresa Unity em algum lugar para nos dar um exemplo exatamente do que estamos procurando. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então, se rolarmos para baixo aqui, você pode ver que obtemos a entrada horizontal, obtemos a entrada vertical e, em seguida, colocamos todas elas dentro da posição transformada. Este é o exemplo exato de que precisamos e nosso ganho. Então, se voltarmos aqui, em vez de 0,01, vou escrever o ponto de entrada do movimento x. Vou escrever a entrada do movimento ponto y. E vou salvar tudo isso. Agora, de volta ao nosso jogo, executamos o jogo e agora nosso jogador não se move. Se quisermos movê-lo para a direita, tivemos o Dickey que ele se move para a direita, a esquerda, e ele desapareceu. Então, como você pode ver, nosso jogador é extremamente, extremamente rápido. Por que isso? Bem, é porque as atualizações são chamadas de cada quadro. Então, se tentarmos jogar de novo, deixe-me mostrar o que quero dizer. Se procurarmos aqui as estatísticas, podemos ver quantos quadros por segundo temos. Então você sabe o que são quadros por segundo? Se você já jogou um jogo e pode ver agora , são quase mil quadros por segundo. Estamos chamando isso mil vezes, 1000 vezes. Estamos adicionando um, então estamos adicionando um 1000 cada vez ou a cada segundo, se você quiser. Então, como vamos controlar isso? Bem, há uma maneira muito simples, e isso é multiplicando isso pelo tempo.DeltaTime. E o que acontece agora, time.DeltaTime, se passarmos o mouse sobre ele, é o intervalo e segundos do último quadro para o atual. Então, o que isso faz é que leva o tempo entre cada quadro, nós o multiplicamos por este e agora nos tornaremos a taxa de quadros e dependente. Deixe-me mostrar o que isso significa. Isso significa que quando executamos o jogo, o tempo que leva do primeiro quadro ao segundo é adicionado ao movimento. E agora, quando apertamos a tecla D, lá vamos nós. Somos muito mais lentos. E se tivéssemos o W, movemos para cima, SVMs para baixo, a, nos movemos para a esquerda, movemos para a direita, e assim por diante e assim por diante. Quão legal é isso? O que temos em outro plural, quem somos extremamente baixos. Isso não é maneira de jogar um jogo, especialmente quando temos inimigos assustadores nos seguindo. Então é por isso que tínhamos essa variável de velocidade de movimento o tempo todo. Isso nos permitirá controlar nossa velocidade. Então agora também vamos multiplicar isso pela velocidade de movimento. Vamos salvar isso. Então, de volta ao nosso ganho, podemos ver que a velocidade de movimento é 20. Vamos defini-lo para cinco. Salve isso, execute o jogo. E agora podemos mover para cima, para baixo, para a esquerda, para a direita, como quisermos. Quão legal é que finalmente temos um personagem, um jogador que está se movendo em um mundo que criamos usando código simples. Vamos fazer isso 50. Vamos dar uma olhada nisso. Bem, lá vamos nós. Podemos até controlar o quão rápido ele vai. Quero dizer, sério, quão animado você está? Talvez seja só eu. Vamos mantê-lo às cinco. Acho que cinco. Nenhuma fibra realmente lenta. Vamos fazer então. Sim, lá vamos nós. Então 10 parece muito, muito bom. E com isso feito, espero que você goste. Antes de apresentar o próximo vídeo, você notará que ainda podemos caminhar pelas paredes e ir embora, o que não é bom. É por isso que no próximo vídeo, estaremos aplicando física ao nosso player e o faremos interagir com vários objetos em nosso mundo. Com isso dito, quatro, eu vou me certificar de confirmar suas alterações. Eu não vou fazer com todos os vídeos porque é algo que você precisa se tornar automático. E toda vez que você fizer algo importante em seu jogo, certifique-se de preparar todo o trabalho, comprometer todo o seu trabalho, e eu te vejo no próximo vídeo. 11. Hit Hitting Hitting (colisões) Obstacles: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, estamos levando nosso jogo para o próximo nível. Quando executamos nosso jogo. Você notará que não só andamos por aí, mas se tentarmos deixar nosso mapa, lá vamos nós. Não podemos. Juro que ainda estou pressionando o dolor. Ainda estou tentando descer, mas não funciona. Ainda estou tentando sair. Isso não funciona. Então, estamos confinados neste pequeno espaço. Fazemos isso usando corpos rígidos, usando colliders. E isso é muito bom porque finalmente podemos sentir o peso do nosso jogo. Então, mesmo que pudéssemos andar, pudemos ver que podemos fazer qualquer coisa, mas agora realmente temos peso para o nosso movimento. Podemos sentir o mundo ao nosso redor. Com isso dito, não vamos perder mais tempo. E vamos começar. O k. Então, atualmente, quando executamos nosso jogo, podemos nos mover e tudo isso é ótimo. Mas, como você pode ver, quando tentamos bater na parede ou algo assim, apenas nos movemos desgraçados. E é como se não houvesse nada neste mundo. Parece vazio, não parece real, mesmo que estejamos nos movendo nele. Então, como vamos consertar isso? Vamos usar algo chamado colisor. Deixe-me mostrar o que é um collider na documentação do Unity, como você pode ver, sempre referido na documentação do Unity, você pode chegar lá através do Google. É super fácil, super eficaz. Vamos ver o que temos uma classe de colliders baseada em descrição. Temos caixa, esfera, cápsula, um colisor de malha, materiais físicos e corpos rígidos. Algo que aprenderemos em apenas um objeto com um colisor precisa ser movido. Durante a jogabilidade, você pode anexar um componente rígido do corpo e vamos apenas obter o corpo rígido um pouco de pacientes, você pode ver todas as propriedades que podemos ter, os limites, o deslocamento de contato, o material. Temos métodos públicos, como relançar o ponto mais próximo. Temos mensagens que são extremamente importantes e usaremos muito Trigger Enter na saída do gatilho no Trigger Stay. Você pode ler as descrições aqui do que cada método, o que cada propriedade, o que cada mensagem significa, o que ela faz, toda a herança, o que podemos usar, a tag de comparação será muito importante. Você pode ver que temos muito. Você não precisa entender cada um deles. É bom saber que você pode, se você tiver algo em mente a implementar, você sempre pode entrar em documentações da Unidade e ver se o que você está procurando está disponível aqui. Então, com isso dito, vamos voltar aqui e vamos em frente e adicionar um colisor de caixa a uma dessas paredes aqui. Vamos começar com o inferior. Então, a maneira como fazemos isso é que vamos clicar com o botão direito do mouse aqui. Ou vamos para o segundo plano. Vamos adicionar um componente aqui. Vamos torná-lo um colisor de caixa 2D, porque estamos trabalhando neste colisor de caixa é 3D. Este é 2D. Nós clicamos nele. Você pode ver que ele preenche toda a sala imediatamente, mas não queremos isso. Na verdade, queremos editar isso, ou podemos clicar no botão Editar aqui. Você pode ver que podemos torná-lo um gatilho. Podemos definir um deslocamento, podemos definir o tamanho, para que possamos diminuir isso no eixo y, ou podemos simplesmente clicar nesses três pontos conectados aqui e simplesmente movê-lo manualmente. Então lá vai você. Então agora temos esse colisor aqui na parede ou na parte inferior ou o que você quiser chamá-lo, podemos desclicar. Isso executará o jogo. E agora nosso jogador, quando ele se move para baixo, oh, bem, o que está acontecendo? O jogador ainda batendo na parede e ele está se movendo para além. Por que isso? Bem, porque não temos um colisor em nossa camada. Então, esse será o seu desafio. Seu desafio é adicionar um colisor ao jogador. Então, em um collider, uma cápsula, não precisa ser uma cápsula. Depende do tamanho e do quadro do seu jogador. Aquele que realmente obteve pessoalmente, ou se você estiver usando o mesmo que eu, certifique-se de que é apenas um objeto pai do jogador, não o corpo. E altere o tamanho do colisor para o tamanho apropriado do seu jogador. Então, com essas instruções, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, como você se deu bem com isso? Vamos adicionar uma cápsula collider 2D. Lá vamos nós. Temos a cápsula, a cápsula e nem sequer ao certo como ela é pronunciada. Então, clicamos aqui. Você pode ver a pequena linha verde aqui. Então, vamos derrubar. Lá vamos nós e fazemos isso quase do tamanho da nossa camada. Agora, vamos ver se isso funciona. Se executarmos nosso jogo. Agora, quando descemos, ainda estamos nos movendo pelo objeto. Por que não está funcionando? Eu deveria ter avisado você sobre isso. Agora vamos adicionar um Corpo Rígido 2D. E agora, quando executarmos o jogo, veremos que batemos na parede. Mas eu não pressionei nada. Se eu subir e soltar, cairmos. Por que isso? O que está acontecendo? Bem, porque quando você adiciona um corpo rígido, você também adiciona gravidade. Vamos nos aprofundar um pouco mais no que é um corpo rígido. Portanto, ele controla a posição de um objeto por meio de simulação física. Então, quando você adiciona um corpo rígido a um objeto de jogo, você adiciona física a ele. objeto de corpo rígido será puxado para baixo pela gravidade sem adicionar nenhum código adicional. E também podemos aplicar nossas próprias forças a eles, o que quero dizer com eles, é o corpo rígido. Você também pode entrar em documentações de unidade e aprofundar o que é corpo rígido. E, de fato, vamos precisar nos aprofundar nisso. Então, vou entrar aqui. Documentos de unidade de corpo rígido. Lá vamos nós. Lá vamos nós. Vemos os documentos Unity 3D. E você pode ver a descrição, as propriedades, os métodos públicos e assim por diante e assim por diante. Então, vamos voltar e novamente, podemos ver aqui que podemos mudar a massa, o arrasto angular. Podemos mudar a forma como a colisão é detectada, discreta, contínua, mas é preciso um pouco mais de poder de processamento , o modo de suspensão, as restrições, nós realmente vamos usá-los em apenas um pouco. Você verá o porquê. E podemos mudar isso de dinâmicas duas cinemáticas, estáticas. E cada um deles é explicado aqui. Mas a principal diferença, enquanto explicada em algum lugar aqui, não tenho certeza de onde você pode ler sobre cada um para se aprofundar nele, mas saber que a dinâmica significa ser afetado por forças externas. Cinemático significa que não é afetado. E meios estáticos são como uma grande rocha. Ele não se move de forma alguma. Você pode ver aqui a escala de gravidade. Vamos configurá-lo para 0, salvar isso, executar o jogo. E agora você notará que não estamos mais caídos. Então, agora, quando descemos, você pode ver que não podemos mais passar por isso. Mas o que, o quê, o que aconteceu? E você pode ver que nos movemos, precisamos adicionar um colisor de caixa. Mas o que aconteceu aqui e o que é, esse nervosismo? Então, a primeira coisa que vamos consertar como as coisas invertidas. Então isso é porque estamos girando. Você pode ver aqui, é porque a física calculou que devemos girá-lo por causa da cápsula aqui. Então, congelaremos a rotação ao redor do eixo z enquanto Z, porque isso mostra se clicamos na ferramenta girar aqui ou simplesmente acertar o tipo. Podemos ver quando giramos, é o eixo z que nos gira e podemos vê-lo claramente quando saímos de 2D, você pode clicar nisso à direita aqui, nós saímos. Você notará que o eixo z, e você pode vê-lo. Lá vamos nós. É em torno do eixo z que estamos girando. Então vamos parar o para o, definiremos isso para 0, congelaremos no Z. E agora, quando executarmos nosso jogo, descemos. E lá vamos nós. Nós não viramos mais se passarmos da esquerda para a direita, mas ainda temos esse nervosismo. E o que é esse nervosismo? De onde vem isso? Bem, é uma questão de código. Podemos ver aqui que estamos movendo o jogador usando sua transformação, essa posição. Então, temos duas forças de colisão. Temos a posição transformada tentando passar pela andorinha, mas temos a física dos dois coliders tentando afastar o jogador. Então isso está criando esse nervosismo. Como corrigimos isso? Bem, vamos começar a mover o jogador, não usando sua posição de transformação, mas usando sua velocidade. E a velocidade está disponível no corpo rígido. Se você achar isso em algum lugar aqui, não tenho certeza do que é. Vamos ver. Velocidade. Lá vai você. Podemos adicionar velocidade aqui, velocidade angular, a velocidade normal. Podemos mudá-lo aqui. Então, vamos fazer isso. Se formos e você souber o que, vamos adicioná-lo aqui. Criaremos um campo serializado. Esta será uma variável do tipo corpo rígido 2D, e vamos chamá-lo de corpo rígido do jogador. Salve isso. Ah, e mais uma coisa que você notou, e eu esqueci de te dizer isso. É a forma como nomeamos nossa variável. A primeira palavra deve sempre ter a primeira letra não maiúscula, enquanto todas as palavras subseqüentes serão maiúsculas. Por que isso? Vamos dar um exemplo daqui. Você notará que o jogador não está em maiúsculas. O corpo rígido é pelo B para o corpo não. Então, se salvarmos isso, vamos procurar no inspetor. Você notará aqui, a variável, a forma como está escrita será o corpo rígido do jogador com corpo rígido como uma única palavra. Se voltarmos, faremos com que isso seja maiúscula. Nós salvamos isso. Voltamos para o inspetor, você notará que agora o B está em maiúsculas e é uma palavra separada. Então, toda vez que capitalizamos uma das palavras, ela se torna separada. Mas não queremos isso. Queremos isso como um único. Você pode ver o mesmo exemplo e a velocidade de movimento. Quando voltarmos, lá vamos nós. Então, acabamos de criar uma referência ao corpo rígido do jogador, mas não o adicionamos porque você pode ver agora que o corpo rígido do jogador, e não há como fazemos isso. Simplesmente clicamos no corpo rígido aqui e o arrastamos para cima. Então agora você pode ver, como o nome sugere, é o corpo rígido na camada de dunas. Nós salvamos isso de volta em nosso jogo. E aqui vamos usar em vez do delta de posição de transformação e tudo isso, vou apenas comentar essa saída, vamos excluí-lo, mas eu só quero ter tudo isso na sua frente para você saiba o processo do que é acontecendo. Então agora pegamos o corpo rígido dos jogadores, acessamos a velocidade nele. E será igual à entrada do movimento vezes a velocidade do movimento. E porque estamos usando a velocidade, isso não exigirá nenhum tempo.DeltaTime. Nós salvamos isso. Voltamos aqui. Vamos mover esse cara um pouco. Então, agora, quando executamos nosso jogo, nos movimentamos. E se tentarmos nos mover pela parede, lá vai você. Você pode ver que não temos mais o nervosismo porque temos os dois motores de física funcionando. Bem, não o mecanismo de física 2, 1 trabalhando nas duas bibliotecas por causa do corpo rígido. E, finalmente, vamos adicionar mais alguns colliders ao plano de fundo. Então, vou adicionar um box collider 2D. Vou tornar isso um pouco menor. E agora nunca é recomendável adicionar vários planadores de caixa no mesmo objeto do jogo, mas, por enquanto, faremos uma exceção. Isso raramente acontecerá. Então lá vai você. Vamos adicionar um colisor de caixa assim. Vamos adicionar outro. E este estará para o lado. Então, não saímos, vamos torná-lo um pouco maior. E vamos adicionar o último colisor de caixa, e este será o do outro lado. Lá vamos nós. Nós salvamos tudo isso. Nós executamos nosso jogo. E agora caminhamos para baixo. Não podemos andar para a esquerda, não podemos. Caminhamos para a direita, não podemos. E se tentarmos subir, também não podemos, mas há um pequeno problema. Você pode ver que ainda temos espaço aqui para caminhar até. Então, o que vou fazer é deixar os jogadores colisores um pouco menores no topo. Então, vamos fazer isso por aqui. Podemos até mudar isso de uma cápsula para outra coisa e torná-lo assim. Opa. Onde está? Nós mudamos a posição, então a movemos no X. Sim, lá vamos nós. Nós executamos nosso jogo. E podemos ver que meio que nos movemos para cima. Ainda temos esse pouco de espaço. Isso não é um problema enorme. Podemos até fazer B em vez de uma cápsula, fazer um colisor de caixa ou outra coisa. Mas você pode ver que tudo funciona bem e elegante com isso dito, certifique-se de confirmar suas alterações. E no próximo vídeo estará apontando nossa arma usando a direção ou onde nosso mouse está apontando porque atualmente, apenas ter essa arma não está fazendo muito. Vejo você no próximo. 12. Objetivo de arma (ponto de tela): Ei, bem-vindo de volta, Meus desenvolvedores de jogos favoritos neste vídeo, nossa arma não é mais um objeto estático. Se você olhar de perto, você pode ver que quando nos movemos para baixo, a arma se move para baixo. Quando olhamos para cima, a arma trava. Obviamente, ainda há algumas coisas que precisam ser consertadas porque segurar a arma assim que eu sinto é muito desconfortável, mas não se preocupe com isso. Este é o primeiro passo para nomear nossa arma corretamente. Então, não vamos perder mais tempo e vamos começar. Há muita matemática nisso. Então, coloque seus bonés de pensamento. Agora que estamos nos movendo e estamos esbarrando nas coisas, é hora de começar a apontar nossa arma. Para fazer isso, queremos girar a arma em torno de uma determinada posição. Não queremos realmente estar girando a arma exata porque se olharmos aqui, se formos para a cena, você pode ver agora mesmo, se tentarmos girar a arma como ela é, ela não parece tão boa. Precisamos de um ponto a partir do qual a arma estará girando. Então, o que faremos é clicar com o botão direito do mouse no reprodutor de domo. Vamos criar um objeto de jogo vazio. Vamos chamá-lo de braço de armas. E vamos movê-lo para um certo ponto. E este é o ponto em que a arma ou a partir do qual a arma estará girando. Então, vou colocá-lo em torno de quase a mão ou o braço do jogador. E eu vou fazer a espingarda, um filho dessas armas são. Então, agora, quando giramos o braço das armas, você notará que a espingarda permanece em seu lugar quase ao redor do braço aqui, e parece muito mais natural à medida que giramos a espingarda ou as armas estão. Então agora é hora de um pouco de frio. Mas antes de fazermos isso, como vamos realmente girar esse braço? Vai depender de onde nossa boca está. Então, vamos dizer que estamos aqui em cima. Queremos que a arma de tiro aponte para o mouse. Como vamos calcular isso? Bem, vamos precisar de alguns pontos e deixe-me explicar isso usando matemática, sim matemática. Então, vamos começar. Primeiro, precisamos da posição do jogador na tela. Bem, eu uso o termo posição do jogador, mas na verdade é o ponto em que estamos girando a espingarda ao redor. Mas, por enquanto, vamos manter isso simples. Chame isso de posição do jogador e temos a posição do mouse na tela. Então, o que queremos é que queremos obter o vetor nesses dois pontos. Esta é a direção que se foi apontando. Mas como vamos calcular o ângulo em que queremos que a arma esteja apontando? Bem, conhecemos a exposição e conhecemos a posição y. Bem, eu quis dizer X e Y. Então o que podemos fazer é usar algo chamado tangente de arco. E isso é algo disponível para nós em matemática. F da unidade é biblioteca. Então, podemos usar isso para calcular o arctan. E se você não sabe o que arctan ou você nem sabe o que Dan é tangente Eu acredito que se chama é o lado da frente, que é o y dividido por V x. E quando fazemos isso, obtemos um certo número, que é a tangente. Então, para obter o ângulo, usamos algo chamado tangente do arco, que é meio inverso. Mas tudo o que você precisa saber é que temos a diferença na altura, temos a diferença na distância. E usando isso, calculamos o ângulo em que o argônio deve estar apontando. Isso é matemática elementar básica. Não tenho certeza se você está familiarizado com isso. Se você quiser se aprofundar nisso, seja meu convidado, acredito que isso será explicação suficiente. Então, vamos traduzir essas equações matemáticas em códigos matemáticos. Então, vou voltar e nosso script aqui no controlador do jogador. E a primeira coisa que precisamos é das duas referências para a câmera e para as armas são. Então, vou começar criando um campo serializado, que será uma transformação. E isso vai representar que as armas são ótimas. A segunda variável que vamos criar como uma câmera privada, e ela será a câmera principal. E o legal disso é que podemos imediatamente entrar em Stuart e dizer que a câmera principal é igual à câmera. Dot principal. E usando esta câmera, essa principal, podemos imediatamente obter uma referência à câmera principal que temos. E aqui, ótimo. Agora precisamos saber onde nossa boca está no mundo. Então, vamos rolar para baixo e aqui, e vou remover esses comentários porque não precisamos mais deles. Se você acha que precisa deles, mantenha-os como um lembrete para mais tarde como mudamos e passamos pelo nosso código. Então agora vou conseguir a posição do mouse. Vou usar um vetor três. E vai ser chamado de posição do mouse. E será igual à posição do mouse de ponto de entrada. E você pode ver agora que imediatamente a Comunidade Visual Studio nos dá a posição atual do mouse em coordenadas de pixel. Tão ótimo, é disso que precisamos. E, obviamente, já conheço essas coisas. Se você quiser pesquisar isso, você precisaria entrar no Google, como obter a maioria das posições. Você obteve as documentações para a unidade. Você teria encontrado essa posição do mouse de ponto de entrada. Você teria usado isso. Isso é apenas um atalho. Vamos continuar. A próxima coisa que precisamos é o ponto de tela. Então, ponto de tela, e será igual à câmera principal, à câmera mundial, ponto de mundo a tela. E você pode ver a definição e aqui está a posição de transformação do espaço mundial e do espaço da tela. Lá vamos nós. Isso é o que precisamos. Transforme a escala local, quero dizer posição local. E isso nos dará a posição local da transformação, que é o jogador agora. E agora é hora de calcular o ângulo. Vamos antes de tudo, salvar tudo isso. Vamos seguir em frente e atribuir o braço para o jogador. Então, vou arrastar o braço das armas agora mesmo. Vamos salvar isso. E agora o próximo passo é realmente calcular o ângulo. Então eu vou antes de tudo, mostrar-lhe isso novamente para que você possa voltar e olhar para ele se precisar. E então vou te dar um desafio. E seu desafio será calcular o ângulo. Então, a primeira coisa que você faz é que você precisa subtrair a posição do mouse x da posição do ponto da tela do x. Obviamente, você precisará fazer o mesmo para o y. E então você precisará calcular o ponto F matemática arctangent para descobrir isso na documentação Unity. Vá em frente, pause o vídeo agora mesmo. Vá fazer o seu melhor. Experimente. Você não perderá nada fazendo o seu melhor. Pause o vídeo agora mesmo e faça o desafio. Ei, bem-vindo de volta. Então, como você pode ver, acabei de procurar matemática, arco tangente em Unity. Agora estou aqui. O que eu faço? Bem, preciso ver como isso funciona. O que faz? Ele retorna um flutuador. É assim que eu uso matlab.org Tange. Certo, ótimo. Então vamos voltar aqui. Então, a primeira coisa que precisamos fazer é calcular a diferença. Vou colocar os dois em um vetor dois. Então eu vou usar um vetor para, vou chamar isso de deslocamento. Portanto, é o deslocamento entre os dois pontos. Será igual a um novo vetor dois. E aqui vou primeiro pegar a posição do mouse ponto x e subtrair dele, o ponto da tela direciona. E vou fazer o mesmo sobre o porquê. Agora vou criar um float porque, como vimos esse método, o método dot arctan retorna um flutuador, será igual a matemática F dot arc tan ou não, Eta. Chama-se bronzeado dois. E vou usar o ponto offset y dividido pelo offset DRX. Ótimo, então vou salvar isso. Mas sempre que queremos atribuir a rotação real às armas são, não podemos simplesmente fazê-lo usando um flutuador. O que precisamos fazer é usar um método extra, que é o método que rad dois graus. E você pode ver isso converte radianos em graus constantes. Então, precisaremos fazer isso. E a última coisa que precisamos fazer é que precisemos acessar as armas na rotação de pontos e agora nos preparar para um mundo um pouco assustador. Vamos usar quaternions. Então quaternion dot Bueller. E vamos defini-lo como 00 no eixo x. Não giramos no eixo y, não giramos. Nós giramos apenas em torno do eixo z usando o ângulo. Agora, antes de fugir, o que é Turnitin dot Hulu? Se você olhar para o anterior aqui, você pode ver que ele retorna uma rotação que gira Z graus em torno do eixo z, x em torno do eixo x, e assim por diante e assim por diante. Então quaternion dot. Se você estiver interessado, você pode se aprofundar nisso. Eu pessoalmente, tenho girado objetos no Unity há vários anos e nunca entendi muito bem o que eles querem dizer com quaternion é apenas uma maneira de converter do XYZ em uma rotação e espaço reais. Portanto, sinta-se à vontade para se aprofundar, ir procurar, certifique-se de entender tudo. Caso contrário, se você não está incomodado por não entender completamente o que está acontecendo com o quaternion u dot. Confie em mim, você pode passar por sua jornada de desenvolvimento de jogos sem se preocupar com isso. Portanto, esta é simplesmente uma maneira de converter x, y e z em um ângulo em uma rotação. Vamos salvar isso. Voltaremos para a Unity. E vamos executar o jogo. E vamos ver o que está acontecendo com a arma agora, nós movemos para cima, a arma se move para cima. Nós nos movemos para baixo. A arma se move para baixo. Se formos para a esquerda, sim. Nossa arma parece um pouco estranha quando olhamos na outra direção, mas quando se trata da direção correta, lá vai você. Nós nos movemos e até nos ajustamos à medida que caminhamos. Então você pode ver quando nos movemos para cima, a arma se move para baixo. Sempre olhando exatamente onde está a posição do mouse. Tão bom agora temos uma arma que está realmente disparando, o que é incrível na minha opinião, não atirando, que será disparando na direção certa mais tarde à medida que avançarmos. Mas, obviamente, há algo errado quando tentamos mover o mouse na outra direção, ele se move corretamente. Isso é o que vamos corrigir no próximo vídeo enquanto aprendemos algo muito bom codificação que é chamado de instruções if e condições if. Então eu te vejo lá. Mas antes de irmos, certifique-se sempre de preparar todos os seus arquivos. Mega commits. Vou chamar isso fez minha arma apontar na direção certa ou não invejar o ângulo reto. Porque no próximo vídeo, faremos com que ele aponte na direção certa, faremos todo o jogador apontar e a direção certa. Então, vejo você então. 13. Para direcionar a direção direita (se declarar): Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, não só vamos girar a arma, mas também estaremos apontando na direção certa. Mas não só isso, não só estamos apontando na direção certa, também podemos apontar para trás. E isso é muito importante e esse será o seu desafio. Vamos aprender como podemos usar condições if, if declarações para girar da esquerda para a direita. E vai ser muito apaixonado, vai ser incrível porque estamos tornando nosso ganho muito mais vivo, muito mais eficaz. Então, não vamos perder mais tempo. E vamos começar. Oh, ok. Então agora nossa gengiva está realmente girando. Ele está sempre apontando para o mouse. Isso é ótimo. Mas o que acontece quando ultrapassamos um certo limite? Você pode ver agora que o GAN ainda apontando para a boca. Mas é, em primeiro lugar, está invertido. Em segundo lugar, o jogador não está olhando na direção correta, então precisamos consertar tudo isso. Mas como, como podemos dizer ao nosso jogador para se comportar de uma maneira quando ele está olhando em uma direção e outra maneira quando ele está olhando na outra direção ou deve estar olhando para como podemos dizer a ele? Se for assim, então queremos fazer alguma coisa. Se for outra coisa, queremos fazer outra coisa. Bem, isso é o que chamamos de declaração if. Deixe-me levá-lo através dele. Estrutura de instrução IF assim condicional. É assim que a sintaxe se parece. Temos alguma condição que precisa ser verdadeira. Está dentro desses dois suportes aqui. E se essa condição for verdadeira, então o código dentro dessas duas linhas rasgadas é executado. Se não for, então temos algo chamado o else. Se, se essa condição não for verdadeira, se alguma outra condição for verdadeira, esse código será executado. E se nem essa condição nem a segunda forem verdadeiras, então temos algo chamado o else. E esse código será executado se nenhuma das condições anteriores for verdadeira, você poderá adicionar quantas outras instruções se quiser para que você possa adicionar. O primeiro é sempre se você não pode nem fazer um outro, se você pode adicionar imediatamente um else ou você pode adicionar 15 else, se precisar, talvez nunca precise desse dinheiro, mas se você precisar de mais de um, mais do que dois, você pode adicionar. Então, temos uma condição aqui. Se for verdade, esse código é executado e nós paramos. Não continuamos olhando para baixo. Se isso não, este primeiro não é verdade. Olhamos para o segundo. Se for, executamos, se não for, continuamos. Finalmente, se não encontrarmos nenhuma condição verdadeira, executaremos outra coisa. Então, vamos prosseguir e implementar isso. Então, o que estamos procurando aqui? Estamos procurando girar o objeto inteiro. Se sim, o que estamos procurando aqui? Queremos ver se a posição do mouse é menor do que porque vamos olhar para o jogador de cúpula, por exemplo, esta é a posição no x de volta na cena. Então, quando estamos nos movendo para trás, você pode ver que é menos quando estamos nos movendo para a direita. Isso significa que é pequeno. Então imagine a posição do mouse como sendo outro objeto do jogo. Por exemplo, estamos aqui e esta área à esquerda do jogador, o que significa que a maior posição é menor do que este ponto verde, que significa que queremos girar o inteiro não jogador para o outro lado. Mas como vamos realmente fazer isso? Bem, há a escala aqui, o que torna super fácil. Então, se eu mudar a escala no x, você pode ver que ele se torna cada vez mais amplo. Mas o que acontece quando vamos e negativa? Então, quando vamos Negativo, sim, lá vamos nós. Na verdade, viramos o jogador. E é isso que queremos estar ajustando sempre que estivermos olhando na outra direção. E essa direção, quando a posição do mouse é menor que o ponto da tela, que é o jogador. Queremos estar procurando aqui. E essa direção queremos mudar a escala para menos um, não apenas o ACS, também o y. veremos o porquê. Então, agora que temos essas coisas estabelecidas, vamos criar nossa primeira declaração if. Então, aqui, vamos criar o suficiente. Vamos abrir os dois colchetes ou colunas. Não tenho certeza do que eles são chamados. Vamos verificar a posição do mouse ponto x. Não precisamos do y. Não importa. E se for menor que o ponto de tela, o RX. Em seguida, vamos pegar a escala local de transformação, que é a escala local do objeto que contém esse script. Isso significa que todo o jogador não será novo vetor 3 menos 1, f 1, f 1. Salve isso. Nós executamos o ganho. Isso ocorre enquanto o y ainda é positivo. Então, se olharmos na outra direção, você pode ver que a arma está de cabeça para baixo. Então nosso objetivo, deixe-me mostrar a você e a maneira como eu pauso isso usando teclas é controle shift P. Então, o que precisamos fazer é se pegarmos o braço das armas, se eu defini-lo para menos um, lá vai você. Você pode ver que estamos de volta em uma escala adequada ou em um anúncio adequado. Então vou definir isso como minus1, salvar isso de volta em nosso jogo, executar o jogo. E agora olhamos para cima e para baixo, a gangue gira. Se formos para o outro lado, lá vai você. A arma parece corretamente. Ótimo. Então, tudo está configurado. O único problema é que quando olhamos para trás, o jogador não muda. Então, como vamos garantir que, quando não tivermos essa condição como verdadeira, como vamos girar o jogador de volta? Bem, é o seu desafio. Seu desafio é criar uma declaração else. Você precisará adicionar às declarações if e else. Já vimos como isso parece. Isso será ativado quando a posição do mouse x for menor que o ponto de tela x. Nesse caso, precisamos definir as escalas locais ou todas as escalas locais de volta para uma. E vou dar-lhe uma pequena dica, que é definir a escala para o vetor três pontos um, vetor três ponto um. Você também pode pesquisar sobre a documentação da Unity. Isso significa que é um vetor 3, 1, 1, 1. Pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Como você conseguiu tudo isso? Eu realmente espero que você esteja sempre tentando romper com esses desafios. Então, vou criar uma declaração else aqui. E o que vou fazer é pegar a escala local de transformação. E será igual ao vetor três pontos um. Vamos salvar isso. E também vou duplicar isso. Então, a maneira como duplicamos como lembramos Control D. E em vez da transformação, vou usar as armas, vou salvar tudo isso. Vou voltar ao meu jogo. Vou executá-lo. Então agora eu olho para a direita, minha arma gira corretamente. Tudo está bom. Olho para a esquerda, a arma gira corretamente. O jogador está olhando na direção certa. Agora, se eu voltar, lá vamos nós. Então você pode ver que corrigimos nosso problema. O jogador sempre olha na direção certa. Temos a arma apontando corretamente, e finalmente ficamos incríveis ao fazê-lo. Então agora podemos andar por aí. Você pode ver que é muito mais natural porque está sempre apontando para a arma. Não só a arma está apontando corretamente para a arma, problema de arma apontando para o mouse, mas também camada profunda, o corpo inteiro está girando e apontando na direção certa. Então, faça isso, certifique-se de seguir em frente e confirmar as alterações que fizemos. E no próximo vídeo, vamos adicionar mais sabor aos nossos jogos. Como, criando a caminhada, a marcha lenta e talvez até mesmo as animações de torpedo para o jogador mal possam esperar para começar a animar. Vejo você no próximo. 14. Animações na Unity: Bem-vindo de volta meus colegas desenvolvedores de jogos a um dos vídeos mais emocionantes e longos, muito longos. Mas acredite em mim, vale muito a pena. Neste vídeo, vamos injetar mais vida e ao nosso jogo criando animações. Então, agora, quando começamos nosso jogo, não ficamos parados como uma estátua. Você pode ver que estamos nos movendo. Então nosso jogador vai para cima e para baixo, para cima e para baixo, para cima e para baixo. E não só isso, sempre que começamos a andar, olhe para isso. Ele começa a mover os pés. Quão legal é isso? Sério, agora não temos apenas o jogador em pé estátua de sorte. Ele realmente tem vida, sua respiração. Ele está andando, ele está olhando ao redor, ele está apontando sua arma, ele está pronto para começar a atirar. Ele ainda precisa de um pouco de ajustes, mas vamos lidar com isso no próximo vídeo. Então, o que realmente, no final, qual vídeo? Não vamos perder mais tempo pensando e vamos animar. Oh, tudo bem. Então, atualmente, quando começamos nosso jogo, se nos movimentarmos, como você pode ver, estamos muito obsoletos. Não temos animações em particular, não vemos o jogador mudando de estado quando ele começa a andar ou quando ele está de pé também. Então, vamos mudar isso. Vamos adicionar animações ao nosso jogador. E já temos algumas planilhas e aqui, aquelas que determinarão nossa animação. Então você pode ver a marcha lenta, a caminhada. Vamos colocá-los lado a lado e tocar esses sprites enquanto caminhamos, enquanto ficamos parados, enquanto fazemos o movimento do torpedo. Então, vamos começar com animações. Primeiro, vamos entender o que são animações. Alguns componentes-chave que precisamos. Primeiro de tudo, temos o controlador do animador, que permite organizar e manter um conjunto de clipes de animações. Temos o componente animador que adicionamos a qualquer objeto de jogo que queremos animar. Temos as animações reais, que são vários sprites são renderizados um após o outro. Também veremos que temos outro tipo de animações que nos permitem mover objetos e depois lembrá-lo e reproduzi-lo em determinados momentos. E, finalmente, temos o renderizador sprite. Agora, por que estou te lembrando do renderizador sprite? Porque em um pouco, você precisará entender qual renderizador de sprite realmente tentaria mudar para criar as animações que temos para o nosso player DOM. Certo, basta falar. Vamos começar com animações. Então, vamos para a Unity. E a primeira coisa que precisamos fazer é que precisamos obter as janelas para a animação. Então, vamos criar a janela de animações. Vamos encaixá-lo por aqui. E vamos criar uma outra janela para o animador. Lá vai você. Então, o animador como onde vamos definir todas as animações. E as animações como onde realmente criaremos as animações. Vamos começar. Primeiro, vamos escolher nosso jogador de condenação. E como você pode ver imediatamente na janela de animação, temos que começar a animar, fazer o player, criar um animador e um clipe de animação. Ótimo, vamos fazer isso. Vamos clicar em Criar. E, como você pode ver, estamos atualmente no tempo do arquivo invasor e dos ativos. Vou criar uma nova pasta aqui, que serão as animações. Ou animações. Lá vai você. E aqui crie uma pasta chamada player. E vamos nomear nosso clipe. Vamos começar criando um jogador, eu acho. Certo, ótimo. Então agora temos nossa nova animação. E se olharmos para o jogador de cúpula, você pode ver que temos um novo componente ao lado do corpo rígido e da cápsula, que é o animador. Então, se entrarmos em cena, nada muda senão dentro do animador, apenas para atualizar tudo, você pode ver que agora temos esses pequenos retângulos aqui. E o que são esses? Bem, temos qualquer estado, a entrada e saída. Não vamos nos preocupar com qualquer estado e com a saída. Vamos nos concentrar na entrada e no jogador em marcha lenta. O que isso significa é que assim que começamos nosso jogo, passamos imediatamente para o jogador em marcha lenta. E você verá que toda vez que tivermos um animador, sempre temos uma animação padrão com a qual começamos. E neste caso, temos o jogador ocioso começando imediatamente a partir da entrada. E, como você pode ver, ele está conectado por essa linha com uma seta. Isso é chamado de transição. E mais tarde faremos nossa própria transição para ir de uma animação para a outra. Certo, vamos continuar. A próxima coisa que queremos fazer é realmente queremos criar a animação. Então, para fazer isso, precisamos obter nossos sprites em marcha lenta aqui. Esses três, queremos adicioná-los ao jogador e começar a jogar com eles. Mas há um pequeno detalhe aqui que precisamos levar em consideração. Vamos mudar os sprites do jogador. E os sprites que estamos mudando estão realmente no corpo, não no imediato. Fazendo objeto de jogo do jogador. Então, através dessa animação, será necessário adicionar uma propriedade aqui. E deixe-me explicar esta janela aqui. Esta é a linha do tempo para a animação. Então você pode ver a partir de 030, este é 2.5º e 2 um aqui. Este é um segundo inteiro. Você tem a peça, o próximo quadro-chave, etc. Você tem o botão Gravar aqui e você pode criar um novo clipe clicando neste menu suspenso aqui. Então, vamos adicionar uma propriedade. Quando clicamos nele, você pode ver que temos acesso a todos os componentes que estão presentes no jogador ou no objeto do jogo do jogador condenado, podemos mudar as armas são Chicago, o braço, o corpo, tudo. Então, vou acessar o corpo. E você pode ver que eu posso acessar a renderização sprite nele. E se eu rolar para baixo, posso acessar o sprite que está no corpo aqui. Então, vou clicar no pequeno sinal de mais aqui. Se eu fizer isso um pouco maior, você pode ver que eu posso realmente ver esse pequeno sprite e isso é o que vamos mudar. Então, se eu clicar em Play, você notará que nada muda porque esse sprite é exatamente o mesmo que este. Então, vamos mudar isso. Vou encaixar as animações e aqui só para ter um pouco de espaço, vou excluir a última, Mantenha isso aqui. Vou selecionar esses três e adicioná-los à linha do tempo aqui, e posso me livrar do primeiro. Então agora deixe-me fazer isso, ok, mas à parte. Vou encaixar a animação aqui. E agora, se eu tentei reproduzir a animação, lá vai você. Você pode ver que nosso jogador começa a se mover. Quão legal é isso? O que está acontecendo aqui? Se você olhar de perto, deixe-me apenas pausar isso por um segundo. Vou fazer o tempo entre cada um um um pouco longe. Então, agora, quando jogarmos, você notará que estamos indo de um sprite para o outro. E você pode ter certeza disso olhando aqui no inspetor do corpo e ver que estamos indo de qualquer um, seja para ocioso, quer dois ociosos. E este aqui, que são os três, mal está sendo jogado porque assim que chegamos ao fim, começamos imediatamente desde o início. Então um bom, digamos que o principal para criar animações é que o tempo todo, o primeiro quadro deve ser copiado pressionando Control C e B, o último quadro também. Então, agora você notará como a animação parece muito melhor. Então, vou reproduzir a animação novamente. Lá vai você. Você pode ver que agora estamos em marcha lenta. Podemos ver 1, 2, 3, 1, 2, 3 jogando um após o outro. Então agora temos a animação do jogador em marcha lenta. E se tivermos nosso ganho, você pode ver que assim que começarmos, o jogador inicia qualquer um dos links. E mesmo enquanto estamos nos movendo, ainda estamos em marcha lenta. Mesmo se olharmos para o outro lado, ainda estamos em marcha lenta. E se verificarmos o animador, você pode ver que o tempo todo estamos em marcha lenta. Vou bloqueá-lo aqui para que possamos vê-lo claramente e diminuir um pouco. Então este é o jogador ocioso o tempo todo enquanto estamos de pé, ainda. Ótimo. Agora, o próximo passo é seguir em frente e criar a animação de caminhada. E será seu desafio. Seu desafio é criar outra animação. Então, pegue os sprites ambulantes do sprite principal. Se você ainda não tiver cortado isso, escolha o jogador da condenação na hierarquia e crie um novo clipe como eu mostrei a você. Adicione todos os sprites ambulantes e separe-os. Brinque e faça a caminhada parecer boa. E se você estiver interessado em um desafio extra, você pode ir em frente e criar a animação de torpedo. Não tenho certeza se vou continuar usando a animação de torpedo. Talvez devesse ser algo diferente, talvez v, rolando em torno de animação. Não sei com esse não, pause o vídeo agora mesmo, vá experimentar a animação. Não se preocupe, mesmo que você seja um iniciante, apenas experimente. Veja alguns passos. Como eu criei a marcha lenta. Experimente você mesmo, divirta-se, aproveite. E é isso. Pause o vídeo agora mesmo e faça isso em cada desafio. Ok, então agora vamos criar a segunda animação, que é a caminhada. Então, vou clicar aqui. Vou criar um novo clipe. Vá para o jogador de animações, escolha ocioso e, em vez de ficar ocioso, vou defini-lo como a caminhada. Então agora o jogador está andando. Muito bom. Ok, então agora vamos adicionar uma propriedade aqui. Vamos acessar o corpo porque lembre-se os sprites que estamos mudando estão no corpo. Renderizador Sprite, o sprite porque estamos realmente mudando cada sprite. E vamos adicionar, vamos mover a animação aqui. Talvez este não seja o melhor lugar para adicionar uma animação, mas só teremos a ver com o que temos por enquanto. Vá para o projeto, que é a nossa caminhada. Então eu acho que esses últimos quatro são a saída. Basta adicioná-los aqui. Vou remover o último e o primeiro. Isso começou a animação de volta para baixo. Vamos escolher todos esses e vou espalhá-los com um intervalo de 10. Vamos fazer 10. Então 10, 10, 10. E vou copiar o primeiro e defini-lo como o último. E agora, quando tentamos reproduzir a animação, lá vamos nós, você pode ver a caminhada do jogador. E correto. Agora, como vamos fazer a transição? E se você realmente clicar no animador, verá que agora temos um novo clipe aqui, que é o jogador andando. Mas como vamos fazer a transição do aumento da conversa? Esta é a pergunta de US $1 milhão. Antes de lhe dizer como fazemos isso, deixe-me mostrar o que criamos nesta pasta Animações dentro do player. Então, temos o jogador da condenação, ele tem um animador, ele tem um controlador. E se eu clicar no controle, a propósito, sempre que você clicar, por exemplo, no não jogador, você pode ver o corpo rígido onde ele está ou as armas ligadas, pode obter uma referência. Clicamos no controlador. Este é o controlador e estas são as animações do jogador e da caminhada, a marcha lenta. E você pode ver aqui, podemos fazer uma pequena modificação para o deslocamento do ciclo, o tempo de loop, os pólos de loop. Mas, por enquanto, não vamos nos aprofundar nisso. Por enquanto, vamos nos concentrar no animador e em como vamos criar transições. Como vamos decidir quando fizermos a transição? Isso também é muito importante. Então, vamos criar uma transição aqui clicando com o botão direito do mouse no jogador em marcha lenta. Aqui temos a transição make e vamos colocá-la no jogador andando. Então deixe-me ampliar um pouco. Então agora você pode ver que temos essa flecha indo do jogador em marcha lenta para jogar ou andar. E também podemos criar uma transição do jogador caminhando para o jogador em marcha lenta. Então, agora podemos ir e voltar entre essas duas animações. Vamos clicar em uma dessas setas e ver o que temos aqui. Então, temos algo chamado hora de saída. Se você passar o mouse sobre ele, poderá ver que essa transição tem um tempo de saída fixo. O que significa o tempo de saída? Isso significa que se eu for da marcha lenta para a caminhada depois de uma certa quantia, eu quero ir automaticamente da caminhada para a marcha lenta? E nosso caso, não queremos fazer isso. Queremos fazer a transição de volta sempre que realmente pararmos de andar. Então, vou desligar o Tempo de Saída Tem. Vou fazer o mesmo no caminho para baixo. Então, vamos procurar a duração da transição. E você pode ver, na verdade, uma pré-visualização, uma pequena janela de visualização aqui. Então, quando jogo, estou em marcha lenta e depois começo a andar. Temos a duração da transição. Então, como você quer terminar a animação de marcha lenta antes de fazermos a transição para andar e nosso caso, acho que não precisamos disso. Então, vou definir a duração da transição para 0 e também para isso na transição da caminhada. Então, em ambas as transições, ambas as setas indo e para a caminhada, vamos remover o tempo de saída, remover a transição mais tarde quando precisarmos delas. Vou me certificar de falar sobre isso. Não se preocupe. Agora, se rolarmos para baixo, podemos ver aqui que temos algo chamado as condições. E esta é sob qual condição fazemos transição do jogador em marcha lenta para o jogador andando? E sob qual condição fazemos a transição do jogador caminhando para o jogador qualquer link? Então, vamos ter que adicionar uma condição. Como adicionamos uma condição aqui nas transições? Se olharmos novamente para o animador, podemos ver que temos a etapa da camada e temos algo chamado de parâmetros. E aqui podemos adicionar certos parâmetros que podemos acessar a partir do nosso código e fazer as condições. Então, vou clicar e tentar adicionar um dos parâmetros. Você pode ver que temos float, inteiro, booleano e um gatilho. Agora, float e integer se explicam. Um booleano, como você sabe, é verdadeiro ou falso e um gatilho é exatamente como o que a palavra significa, um gatilho. Por enquanto, vamos nos concentrar no booleano. Então, quando clico no booleano, você tem a opção de chamá-lo do que quiser. Então este será o booleano que as transições de qualquer link para andar, eu vou chamá-lo, é. Andando, pressione Enter. E agora você pode ver que eu posso ativá-lo, que significa que se torna verdade, ou eu posso desligá-lo, o que significa que se torna falso. Então, vou clicar na transição, indo do link de ID do jogador para andar. E vou clicar na condição. E como você pode ver, porque temos apenas um parâmetro, ele imediatamente pensa que precisamos da caminhada ou determina o que é verdade. Então, quando andar é verdade, fazemos a transição do jogador em marcha lenta também andando. E se estamos caminhando, queremos fazer a transição para a marcha lenta. Queremos ter uma condição em que andar é falsa. Então, agora, quando andar é verdade, passamos do jogador Ivan para jogar ou caminhar. Quando o jogador está andando e anda se torna falso. Estamos de volta à marcha lenta. Vamos converter isso em código e adicionar comportamento a ele. Vou abrir meu roteiro. E aqui a primeira coisa que precisamos fazer é obter uma referência do animador do jogador. Então, vou criar um animador particular, o animador do jogador. E ele pode porta. Agora é privado. Como vamos adicionar? Não podemos acessá-lo do inspetor aqui. Se eu clicar no dome player no script, não teremos acesso a ele. Bem, podemos usar algo chamado componente get. Então, aqui vou escrever o animador do jogador será igual para obter componente. E vamos adicionar o tipo de componente que queremos obter. Então, o que está acontecendo aqui? Deixe-me passar o mouse sobre o componente da dívida. Ele não tem uma explicação. Vou lhe dizer qual é a explicação como você também pode ir em frente e encontrar na documentação do Unity, é muito fácil. O que ele faz é assim que começamos, obtemos o componente, que é do tipo animador anexado ao objeto do jogo que tem o controlador do jogador como um script. Então, efetivamente, o que estamos fazendo é que esse script está usando o componente VI get aqui. E pegar o animador, que é este. E agora temos uma referência a ele. Então agora podemos acessar muitas coisas usando este animador. E você também pode passar por documentações de unidade e ver todos os diferentes tipos de métodos, propriedades e várias coisas que podemos fazer com este animador. Então, o que vamos fazer neste animador? Queremos verificar se há uma condição. Queremos verificar se estamos andando. Queremos definir o Walking como true e depois fazer a transição para a animação de caminhada. Então, vou criar uma condição if aqui e verificar se a entrada de movimento é diferente do vetor de 0. Então, o vetor para o 0 é como o vetor 3 aqui. Ponto um, que significa 111 vetor dois pontos 0 significa 00. Isso significa que se a entrada de movimento não for 0, isso significa que temos andando aqui. Temos velocidade, temos movimento. Vamos pegar o animador do jogador. Vamos usar algo chamado de conjunto booleano. E aqui você pode ver que é preciso um ID ou uma maneira diferente de usar a cabine de configuração. Se eu clicar aqui, você pode ver que posso usar um nome de string. E é isso que vou fazer. E você pode ver que temos uma referência de string. E o que dissemos sobre referências de encolhimento? Sempre que temos um, sempre vamos, copiamos porque se houver algum erro, o IDE não nos dirá qual é o problema, qual é o erro. O IDE, quero dizer a unidade ou o Visual Studio. E aqui porque estamos andando. Ah, e eu esqueci. O que esse ponto de exclamação significa? O que significa o ponto de exclamação igual a? Então, se você ver aqui, dissemos que quando as posições do mouse de x são menores que este ponto verde, poderíamos ter dito que se a posição do mouse que AX for igual, sempre que quisermos comparar dois valores, podemos definir eles como iguais, iguais. Isso significa que é a maior posição x igual ao ponto do mouse x. Mas aqui decidimos mantê-lo como menor ou igual. Mas e se quisermos dizer, se não for igual? Bem, então usamos o ponto de exclamação igual. Isso significa que sempre que a entrada de movimento é diferente do vetor dois pontos 0, temos o andando está definido como true. Else. Isso significa que quando a entrada de movimento for igual a 0, vamos duplicar essa linha. E se mantivermos Alt pressionado e usarmos as teclas de seta, podemos colocá-lo aqui. E vamos definir o está andando para falso. Vamos salvar isso. Vamos rever isso mais uma vez porque esqueci de falar sobre isso e continuei usando, o que é muito ruim. Então, espero que isso não tenha sido muito confuso. De qualquer forma, criamos uma condição if que aprendemos em um vídeo anterior. Verificamos se a velocidade de movimento é diferente de um vetor 0, digamos diferente de usar um ponto de exclamação e igual. Então, se a velocidade de movimento for diferente de 0, isso significa que estamos caminhando. Vamos acessar o animador do jogador que usará o método Bool set. E vamos acessar o parâmetro is walking e configurá-lo como verdadeiro. E lembre-se, quando definimos isso como verdadeiro, temos a transição aqui que diz que se B está andando é verdade, vamos de andar ocioso demais, e fizemos o mesmo usando outro. Caso contrário, quando a entrada de movimento é igual ao vetor 2, 2, 0, isso significa que paramos de andar está funcionando como falso. Nós vamos do jogador andando para jogar ou ficar em marcha lenta. Vamos ver se isso funciona. Então, começamos o jogo. Podemos ver aqui que temos o jogador em marcha lenta. Se começarmos a andar, lá vai você. Você pode ver que agora estamos andando e é evidente, a propósito, as pernas do nosso jogador estão se movendo. Quão legal é isso? Então agora temos animações. Temos transições de uma animação para a outra. Criamos duas animações. Talvez você tenha criado o terceiro em si mesmo. Eu não vou fazer isso agora, embora mais tarde para o futuro Michel lidar com esse problema, eu me sinto preguiçoso agora. Mas há mais uma coisa que precisamos cuidar se formos aqui e para o jogador da cúpula. E vamos para Animações. Se escolhermos a marcha lenta, por exemplo, e jogarmos, você notará que temos nossa arma e nosso braço parado ali sem fazer nada. Isso não é nada bom. Faz o jogo parecer muito, muito ruim. Então, e também quando se trata de andar, para você possa ver aqui que o braço está se movendo, o jogador está se movendo, mas o braço e o desaparecido são muito rígidos. No próximo vídeo, vamos consertar isso. Então, antes de eu ir, certifique-se de encenar tudo, certifique-se de confirmar adicionadas e animações para a marcha lenta e andando no seu caso também a animação de torpedo para o jogador, confirme as alterações. E te vejo no próximo vídeo. 15. Melhora animações para jogadores: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, quando executamos nosso jogo, nossa mão e arma não são mais estáticas. E quando nos movemos para a esquerda e para a direita, talvez não seja muito perceptível, mas você pode ver que o braço que é apenas torna a velocidade do movimento muito mais lenta. Então, agora, quando nos movemos, lá vai você. Você pode ver que a arma se move para cima e para baixo e o braço se move para a esquerda e para a direita. Tudo realmente gira um pouco. Quão legal é isso? Agora não somos mais apenas uma arma apontando matar monstros, Doom Slayer. Na verdade, somos uma camada de dooms animada que faz das outras coisas. Então, não vamos perder mais tempo e vamos começar. O k. Então, o que quero dizer com aprimorar nossa animação? Já não temos uma animação boa o suficiente? Bem, não. Como você pode ver, quando tocamos a animação, a arma não se move, o braço não se move, e isso não é bom. Então, vamos consertar isso. Vamos em frente e começar com a abertura dos olhos. Vão ver como eu faço isso, e então você vai implementá-lo na caminhada. Este será o seu desafio. Então, até eu gosto de manter os desafios uma surpresa, mas quero que você se concentre no que estamos fazendo. Então, temos esse pequeno botão vermelho aqui. Quando clicamos nele, começamos a gravar. Você pode ver que temos o rato e podemos mudar o que quisermos. Então, durante essa animação, posso aumentar a velocidade de movimento. Então você notará que quando começarmos no início, olhe para a velocidade do movimento enquanto eu avançar na linha do tempo, você verá que ela aumenta até o ponto em que eu disse isso. E então, por exemplo, quero diminuí-lo. E você notará que temos essa propriedade adicional sendo adicionada. Então, começamos com eles. Nós movemos para 72 e depois passamos para menos quatro. Então começamos a voltar para trás. Quão legal é isso? Mas não estamos aqui para mudar a velocidade do movimento. Podemos mudar o que quisermos. A propósito, é por isso que as animações, uma ferramenta tão incrível e poderosa no Unity. O que queremos fazer é mover o braço e o braço se abrirá para cima e para baixo. Então o que faremos é que vamos fazer, esta é a nossa primeira animação. Deixe-me fazer o braço um pouco maior porque quero cobrir todo o lado do jogador. Eu não quero que nada seja visível por trás dele, então vou escolher o braço e vou fazê-lo em torno de 30. Aplique isso. Então agora o braço está um pouco maior. Ele cobre o braço do jogador. E de volta aqui. Oh, eu mudei? Isso foi durante a animação Aquino? Então, quando descemos, você pode ver que nos movemos um pouco para baixo. Vou mover para baixo o braço e a arma. Só um pouco. Certo. E então, quando descermos ainda mais, vou mover o braço e a arma um pouco mais. E então, quando nos levantarmos, vou copiar a posição original do R e da arma, copiar e colar no final. Certo, ótimo. Quando terminamos a gravação, precisamos ter certeza de que tínhamos essa linha do tempo vermelha. Certifique-se de que paramos de gravar. Então agora temos o conjunto de animação. Você pode ver aqui que temos duas propriedades adicionais onde mudamos o y, o x, apenas a posição do transporte. Poderíamos ter feito isso adicionando uma propriedade e acessando tudo daqui, mas isso é um pouco rápido. Então, vamos ver o que temos aqui. Deixe-me fechar isso. O que acontece agora quando tocamos a animação? Lá vamos nós. Você pode ver que o braço e a arma estão subindo e descendo. Mas é óbvio para mim e para você que há algo um pouco errado. O que há de errado? Você pode ver que o jogador, deixe-me parar com isso. Vou jogar isso. O braço começa a cair antes que o sprite realmente seja acionado, antes do primeiro pequeno jogador NT de mergulho. E lá vai você. Você pode ver que o braço é mais rápido, não mais rápido. Mas o problema é que quando se trata de animar sprites, temos essas quatro imagens, ok? Então, nós temos a primeira imagem. Pesamos esses 10 quadros, depois temos a segunda imagem. Fomos dez quadros, depois temos a terceira imagem. Mas o braço e outras animações funcionam de forma diferente. Se eu olhar, por exemplo, as armas estão, observe como o y muda. Ele não vai imediatamente para menos 0,332. Na verdade, ele vai lentamente de menos 28. E cada quadro vai menos, menos, menos, menos, menos até chegar a este ponto. E então ele cai um pouco menos, e depois cai um pouco mais. O petróleo sobe. Posição original. Isso não é o que queremos. Parece muito ruim. Se eu executar o jogo, você pode ver que parece muito ruim. Parece que o braço não está devidamente preso ao jogador. Agora, se você quiser, se for parte do seu jogo, se essa é a peculiaridade que você quer ter em seu jogo, então vá em frente. Eu recomendo que você brinque e crie sua própria animação. Você não precisa seguir meus passos exatos, mas eu quero mostrar o que pode ser feito. Você tem aqui a folha de drogas. Folha de drogas. Não tenho certeza de como é pronunciado, mas é aqui que definimos as várias propriedades. Podemos fazer também outra coisa, que são as curvas. E você pode ver agora que temos essas curvas muito diferentes. Assim, podemos mudar a forma como os sprites, as armas estão em posição e como a posição dos braços muda com o tempo. Por exemplo, posso selecionar o x aqui. O porquê, como uma muda e o z. Deixe-me dar um exemplo para que você entenda que temos essa alavanca aqui. Quando clico no segundo quadro, você pode ver que posso ajustar o quão rápido ou lento ou como a curvatura da animação vai. Então, se eu criar assim ou torná-lo assim, você notará que o y aumentará e depois descerá e depois vai mais baixo do que o pretendido e, em seguida, chegará ao objetivo. Então, quando eu tocá-lo, veja o que isso parece. Você pode ver, lá vamos nós. Então deixe-me abrandar isso. Então o y sobe e depois desce e depois vai para a posição em que pretendemos que estivesse. Qual é o sentido de fazer isso? Podemos brincar com eles, torná-los como quisermos. Mas o que queremos é que queremos pegar isso e levá-lo até que ele se torne um pequeno quadrado. Como isso parece? Deixe-me mostrar a você. Agora, quando jogamos. Lá vai você. Não é muito perceptível. Mas, novamente, quando nos movemos, você notará que a arma não se move apenas pelo braço. E quando chegamos a este ponto, a arma cai com o jogador e depois sobe lentamente. Então, descobrimos uma maneira de fazer essa transição como os sprites. Então, novamente, tomamos este também. Lá vamos nós. Então agora você notará que a arma se move para cima e para baixo. O jogador era exatamente. Vamos fazer o mesmo pelo braço. Se clicarmos no porquê. Ele disse isso aqui. Vamos correr. Você pode ver como o braço funciona. Escolheremos o segundo quadro. Vamos movê-lo todo o caminho. Escolheremos o quadro também o moverá por todo o caminho. E agora a animação deve parecer perfeita quando a revisarmos. Lá vai você. Você pode ver que o braço, a arma e o sprite do jogador se movem juntos em uníssono. Então, espero que você tenha entendido o que estamos criando aqui. Deixe-me executar o jogo para que possamos ver corretamente o que está acontecendo. Lá vai você. Você pode ver que agora o R e D podem parecer realmente parte do jogador. Agora, antes de eu emitir o desafio, há uma coisa que precisamos cuidar, não cuidar ou tomar cuidado enquanto estamos jogando. Você percebe que me criou e faz juntos. Criamos a arma tendo uma rotação. Então, giramos a arma para apontar para nossa massa. Se tentarmos adicionar rotação à arma agora enquanto estamos andando, ou se tentarmos adicionar rotação nessa animação, o apontar da gengiva não funcionará mais. Por quê? Porque a atualização e a animação estarão em conflito. Então, a animação quer girar a arma de um jeito enquanto o mouse quer girar o desaparecido para o outro lado. E o que acontece é que a animação ganha e não podemos mais apontar que se foram. Então, com isso dito, agora que você sabe que não devemos adicionar rotação à arma, mas sinta-se à vontade para adicionar rotação ao braço. E agora é hora do seu desafio. Seu desafio é terminar a animação de caminhada. Então, balance o braço enquanto caminha para que você possa mudar a rotação do braço, certifique-se de que ele cobre o braço real do jogador para que não tenhamos inconsistências. Certifique-se de não girar a arma na animação se quiser, seja meu convidado, experimente, veja se eu estava mentindo ou não. Talvez eu fosse quem sabe. Então, pause o vídeo agora mesmo. Juro que não estava. Eu nunca faço. E faça o desafio. O K. Bem-vindo de volta. Então, vou de virar para caminhar. E vou fazer o mesmo. Vou clicar no botão Gravar. E vamos ver, eu vou, este é o primeiro quadro que já estamos andando. Então, o que devemos fazer aqui? Você pode ser criativo, fazer o que quisermos. Vou fazer minha coisa e explicá-los a passo se você ainda não entendeu o que fizemos antes. Então, as armas nunca girando, vamos mover um, vamos subir um pouco. Então, sim, isso é em torno do que eu quero. E o braço, vou girá-lo um pouco e mudar sua posição para a direita. Certo. Em seguida, passamos para essa posição. Vou derrubar a arma e vou mover o braço um pouco assim e mudar de posição. Vamos ver, onde está? Ok, então aqui. Então nos movemos novamente, a arma para cima e o braço posam assim, e desce um pouco ou mudamos a rotação. E tudo isso depende da sua preferência. Talvez também devêssemos fazer o RNA, mas maior agora. Em seguida, passamos para o próximo quadro. A arma se move um pouco para baixo. E o braço move isso. Enquanto o braço deve o RMB. Ok, então leve em torno disso e sobe. E, finalmente, temos o último quadro onde copiaremos esses três. Assim, você pode ver cada um desses quadrados, os quadrados invertidos ou invertidos representam a posição do braço, a rotação do braço e as armas do braço não estão em posição. Então, vou selecionar todos os três, copiá-los e colá-los no último quadro. Então, vamos ver como isso parece. Certo. Então a arma está se movendo para cima e para baixo, o que é meio legal. O braço está indo para frente e para trás. Há um quadro que eu não gosto muito, que está bem aqui. E é porque o braço é um pouco pequeno. Então eu acho que o sprite realmente torna o braço um pouco maior. Vamos mudar isso daqui a pouco. Na verdade, podemos até mudar a escala. Vamos tentar fazer isso. Então estamos no link Chris, oh, não, não vai aumentar a escala para 1,2, talvez no X e no Y. E tudo bem, isso é muito grande. Vamos fazer 1.1 e reduzir a rotação um pouco. Então agora você verá e ele permanece o mesmo. Então, vou ver também que a couve continua aumentando na audição. Saiba, não vamos brincar com a escala. Vamos apenas excluir. Não é bom, faz com que possamos fazer com que os animais só aumentem a partir daqui. Então, se entrarmos no braço, vamos fazer isso talvez um pouco mais. 28, talvez 29. Aplicar. Sim, acho que isso é bom o suficiente. E vou parar a animação. Agora. Vou entrar nas curvas. Vamos ver o que temos aqui. Temos a arma. Agora, o que eu acho que talvez queira manter a arma a mesma e vamos ver o que está mudando aqui. Então, a posição no Y e no X. Então eu vou configurá-los para ser, escolher este, movê-lo para cima para que você possa ver agora uma representação visual do que queremos dizer. Então, ainda temos a mesma posição o tempo todo. Até clicar, descer, clique em descer. E vou mudar este. Também. Clique na posição x visita enquanto a curva. Enquanto a curva, ok, então está aqui em baixo. Por que você quer tornar minha vida mais difícil? Nós giramos esta linha, esta linha, esta, e lá vamos nós. último permanece o mesmo. Então, agora vamos ver. Certo, meio bom. A posição que ajusta a rotação. Então, enquanto estamos nos movendo, a rotação ao redor, z está mudando. Ok, o que, qual é o problema com isso? Vamos ver. Então, por algum motivo, as escalas mudaram, mas não se preocupe. Encontraremos uma solução e depois vamos nos mover. Oh, para que possamos aumentar isso. Certo, ótimo. E lá vamos nós. Então, agora vamos dar uma olhada nisso. Ok, então o braço parece bom o suficiente e a arma está se movendo para cima e para baixo. E se tentarmos executar nosso jogo, vamos ver como isso parece. Ok, The Eagle é bom. O andar na arma ainda está um pouco agitado. Não gosto da maneira como ele está se movendo para cima e para baixo. Vamos mudar isso. E a animação, feche essas duas coisas. Vá para a posição de caminhada, curvas. O que está mudando? Certo, é a posição y. Onde está isso? Ok, então vamos fazer este quadrado, este também. E o último, salve isso, fica em torno da animação. Certo, então lá vamos nós. Temos a arma movendo-se para cima e para baixo. Honestamente, não é perfeito, mas é bom o suficiente. Vamos testar a rotação. Se estiver funcionando, espero que você teste você mesmo. Então, agora, enquanto caminhamos, lá vamos nós. Estamos apontando corretamente. Nós andamos com a arma se move para cima e para baixo. Nós andamos com a mão. Não temos mais uma mão estática e uma arma estática. Na verdade, temos o jogador andando por aí. Quão legal é isso? Temos animações incríveis. No vídeo final, vamos ajustar a velocidade dos jogadores porque talvez você não tenha notado, talvez você tenha percebido. Mas quando caminhamos para a direita, temos uma certa velocidade. Quando subimos, temos a mesma velocidade, mas se tentarmos andar para baixo e para a esquerda, você pode ver que somos um pouco mais rápidos. Então você pode ver agora que, se estamos andando, então tentamos subir. Você notará que somos um pouco mais rápidos e vou explicar por que é assim que a velocidade funciona. Um pouco de matemática sobre como os vetores e a normalização funcionam. Então a matemática, ele Yay, pode esperar pelo próximo vídeo, certo? Vejo você, então, certifique-se de confirmar todas as suas alterações. Olha até onde chegamos. Veja tudo o que fizemos até agora. Criamos, aprendemos a classificar camadas, criamos scripts. Agora o jogador se move. Agora nosso jogador se move usando um novo corpo rígido e colisor. Fizemos uma arma no ângulo. Fizemos o jogador apontar na direção certa. Adicionamos animações. Agora aprimoramos nossas animações, também aumentaremos nossa velocidade e verei você no próximo vídeo. 16. Velocidade do jogador 00: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Este é um vídeo muito rápido e curto. Este é apenas um pequeno ajuste que queremos fazer. E a forma como nosso jogador se move, não temos um grande resfriado, não temos princípios importantes. Temos uma pequena lição sobre matemática, que é reconhecida como a parte mais emocionante no desenvolvimento de jogos. Yay, isso é o que você veio aqui para matemática, certo? De qualquer forma, não vamos perder mais tempo. E você pode ver que a velocidade quando nos movemos na diagonal é a mesma que quando estamos nos movendo para cima ou para baixo ou para a esquerda e para a direita. De qualquer forma, não vamos perder mais tempo e vamos começar. Oh, ok. Então, vamos ver o que está acontecendo aqui. Como já lhe disse, sempre que estamos nos movendo para a esquerda e para a direita, estamos nos movendo a uma certa velocidade. Mas quando estamos nos movendo para a esquerda ou para a direita e estamos subindo, estamos nos movendo a uma velocidade muito mais rápida. Então, se você não está convencido, vamos testar isso. Talvez eu esteja mentindo. Vou descer aqui. Vou escrever log de pontos de depuração. E aqui vou dizer andando com uma velocidade de e vou avançar e adicionar a velocidade rígida do corpo da camada. Vamos salvar isso e vamos ver o que temos. Agora isso pode não funcionar. Se eu clicar no Console, você notará que temos 00. Então agora, se eu movê-lo, você não o veria ficar de pé. Quando eu me afasto, é menos 10 quando eu me movo para cima e para a direita, você pode ver que é 10 por 10, e essa é a velocidade de movimento que temos aqui. Mas não queremos ver como é o vetor da velocidade. Queremos ver a magnitude. Então, vou adicionar algo chamado magnitude. Se você não sabe qual é a magnitude, vou explicar isso daqui a pouco. Então, novamente, executamos o jogo. Agora temos a magnitude 0. Se eu andar para a direita, fizemos para a esquerda, temos dez. Se eu subir, ainda são 10. Você pode vê-lo aumentando aqui. Se eu me mover para baixo, ainda são 10. Mas agora se eu passar para a direita, acabar, podemos ver que são 14. Então Michael, seu instrutor, não mente. Nunca. Você pode ver que estamos nos movendo mais rápido quando estamos nos movendo diagonalmente, cima ou para baixo pressionando duas teclas. Por que isso está acontecendo? Bem, ele volta. Matemática simples. Você pode ver que temos a velocidade no y e a velocidade no x. Isso é o que estávamos vendo antes de adicionarmos a magnitude, que é 10 por 10. Então, o que acontece aqui é que estamos adicionando esses dois vetores à medida que estamos nos movendo na diagonal. E temos a velocidade final do jogador, que é mais rápida do que esses dois. Agora, se você quiser, você pode manter isso em seu jogo se for parte da sua jogabilidade. Mas geralmente não queremos que o jogador se mova mais rápido quando ele está se movendo em uma diagonal. Isso não é algo lógico. Então, o que faremos é normalizar. Fazemos normalizando é recriar esse arco. E isso significa que isso se torna um círculo, o que significa que a velocidade no x mais a velocidade no y é a mesma a velocidade quando estamos nos movendo em uma diagonal. Portanto, este é um vetor normalizado, ou quando dizemos normalizar um vetor. Então, vamos seguir em frente e fazer exatamente isso. Então, de volta ao nosso código, vamos ao Visual Studio. E agora vamos ver onde temos nossa velocidade sendo adicionada? Está bem aqui. Então, vou adicionar uma outra linha ou sinto muito, antes de adicionarmos isso à velocidade, vou pegar a entrada do movimento e vou normalizá-la. Salve isso. Então, agora, quando voltamos ao nosso jogo, e a propósito, todo o processo aqui, você sabe que este está apenas tomando um valor. velocidade de movimento não muda. Portanto, a única variável que está mudando é a entrada de movimento. É por isso que normalizo a entrada do movimento. Portanto, a velocidade permanece a mesma. Então, apenas se você estava confuso, por que estamos mudando a entrada do movimento, não a velocidade. Então voltamos aqui, executamos nosso jogo. E agora você pode ver que caminhamos para a direita. Stan, à esquerda ainda é 10, cima, Stan para baixo, é 10. Quando nos movemos em uma diagonal. Lá vamos nós. Você pode ver que ainda está feito. Quão legal é isso? É incrível. Em uma nota final, talvez você queira mantê-lo. Talvez você queira tornar o jogador mais rápido à medida que se move na diagonal. Isso não é um problema. Você pode fazer o que quiser. Este é o seu jogo, adicione seu próprio sabor a ele. Mas este é um hábito de desenvolvimento de jogos de batalha que você deve ter à medida avança em sua jornada. Bem, isso disse que foi um vídeo rápido e curto. Certifique-se de confirmar suas alterações. Esqueci de cometê-los da última vez, mas não se preocupe. Eu posso manter este controlador de jogador, pois só mudamos o log de ponto de depuração aqui. E o normalizado, eu posso encená-los, cometer essas alterações e depois confirmar as outras. Então, bem dito isso, espero que você goste. E acredito que este é o final da seção 2, onde vamos configurar nosso jogador. Na próxima seção, vamos começar a usar nossa arma para atirar adicionando mecânicas de tiro. Então, vejo você. 17. Seção 3: configurando a mecanica de filmagem — Criação -: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E quando executamos o jogo, você pode ver que temos uma bala que viaja pelo espaço e quando atinge uma parede, ela é destruída. Então, não vamos perder mais tempo. E vamos começar. Ok, então vamos em frente e criar algumas balas. A primeira coisa que precisamos fazer é que precisamos pegar alguns sprite de balas. Vamos seguir em frente e fazer exatamente isso. Vou entrar no projeto. E antes de fazer essas coisas, quero mudar algumas coisas aqui. Então, vou clicar com o botão direito do mouse em criar uma pasta. Vou chamar isso de saias. E vou adicionar o controlador do jogador. E aqui vou criar uma pasta pela primeira vez agora os sprites. E vou adicionar todos os sprites que temos nesta pasta. Ou mesmo antes disso, vou criar uma pasta para o jogador e uma pasta para as armas. Armas. Lá vamos nós. Então agora eu posso abrir os sprites aqui. Vamos pegar a arma e colocá-la aqui. Vamos pegar o preço do jogador e colocá-lo na pasta do jogador. Ótimo. Agora temos tudo configurado. Temos esse pequeno erro. Não acho que seja um grande problema. Certo, ótimo. Agora vamos em frente e crie outra pasta aqui, que serão as balas. E vamos entrar nos recursos e pegar os sprites para as balas laser. Agora, você pode estar se perguntando, por que eu escolhi ter balas laser e não balas para uma espingarda regular? Bem, antes de tudo, olhe para essas balas, como elas parecem legais. Isso é 4142. Eu queria que algo aparecesse facilmente. Então, como você pode ver, estamos, Vamos colocá-lo na camada do jogador, ok, então eu quero que algo seja claramente visível para nós. Não quero ter uma pequena bala que mal podemos ver. Quero ter uma grande bala brilhante que podemos disparar. Então, se você quiser, podemos criar uma camada de classificação para as balas. Vamos seguir em frente e fazer isso. Uma nova camada de classificação, chamaremos isso de balas e ela deve ser renderizada na frente do jogador. Vou escolher isso. Vou renomeá-lo para a bala do jogador. E acabei de escolher isso aleatoriamente. Você pode escolher qualquer bala que quiser. Acho que talvez um vermelho como espingarda. Saiba. Ainda melhor do que isso. Olha o que podemos fazer. Posso escolher a bala do jogador e posso mudar o sprite aqui, arrastar o número 14 sobre. Lá vamos nós. Então, é uma bala enorme. Talvez possa ser mudado um pouco, então a bala renderiza na frente do jogador. E eu acho que talvez faça isso 0,50.5. Não, talvez mantendo um. Sim. Parece uma bala de arma grande. Certo, ótimo. Agora precisamos adicionar algumas coisas a isso. Precisamos, em primeiro lugar, adicionar um corpo rígido porque vamos ser, O que é isso, Desculpe, quarto. Vamos adicionar um corpo rígido porque, obviamente, essa bala estará se movendo. Vamos nos certificar de que congelamos a rotação. Vamos nos certificar de que a escala de gravidade 0. E lá vamos nós. Então vamos adicionar um collider a isso. Então, vou adicionar um colisor. Vamos ver qual deles devemos usar? Acho que o colisor de cápsulas não funcionará porque está invertido, culminou na horizontal. Vamos seguir em frente e usar um colisor de caixa. Acho que é bom o suficiente. Então, onde está o colisor de caixa? Vamos torná-lo um pouco menor. Sim. Lá vamos nós. E eu sempre recomendo que você faça a caixa coliders em torno de coisas como balas um pouco menores do que elas precisam ser. Então lá vamos nós. Oh, ok. Isso é bom o suficiente, eu acredito. E agora precisamos mudar o comportamento da bala. Queremos fazê-lo voar. Como fazemos isso? Fazemos isso adicionando um script a ele. Então, vou entrar em nossos roteiros aqui. Vou clicar com o botão direito do mouse e criar um novo script, que será o controlador de bala do jogador. Vamos esperar que isso compile o ponto imediatamente abra um script sempre que você criar um, basta esperar que ele seja compilado. E agora podemos ir em frente e arrastar o script para a bala do jogador. E podemos ver na bala do jogador que temos o renderizador sprite via corpo rígido, o colisor de caixa e, claro, o script do controlador de bala do jogador. Então, vamos clicar duas vezes e abrir o script. Então, temos um novo roteiro. O que vamos fazer aqui? Bem, antes de tudo, queremos uma maneira de controlar a velocidade dessa bala. Então, vou criar um campo serializado do tipo flutuador, que é a velocidade da bala. E vamos defini-lo por padrão 25 F porque nunca queremos ter um padrão de 0. Então 55, mas a velocidade da bala. Então, se for baixo, mas é melhor do que nada. E a próxima coisa que queremos fazer é adicionar velocidade a essa bala. Então, para fazer isso, precisamos de uma referência ao corpo rígido. E eu não tenho vontade de fazer isso, então eu quero dar a você como um desafio, você precisará obter uma referência ao corpo rígido. Portanto, crie uma variável de corpo rígido tipo garante que seja particular. E comece a obter o componente do tipo corpo rígido. Se você já sabe como fazer isso, pause o vídeo e faça o desafio. Se não, vou dar-lhe uma pequena dica sobre como obter um componente. Use o componente get com um tipo entre os dois sinais pouco maiores ou menores. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então aqui vou criar um corpo rígido privado 2D e o corpo rígido de bala. Salve isso. E agora, porque temos o controlador de bala do jogador em um objeto de jogo que também tem o corpo rígido. Podemos acessá-lo imediatamente dizendo que o corpo rígido das balas é igual ao componente de dívida, corpo rígido 2D. E agora temos uma referência a ele. Agora e atualize o que vamos fazer? Bem, assim como fizemos com o jogador, vou seguir em frente e dizer que a velocidade rígida do corpo das balas é igual ao novo vetor 2, porque a velocidade é um vetor 2. Quando estivermos trabalhando no espaço, vou manter um para o x. e vou manter 0 F como o y. E vou multiplicá-lo pela velocidade da bala. Por que estou fazendo isso? Bem, porque eu não quero que a bala se mova no eixo y. Não quero que ele se mova verticalmente. Quero mover a bala apenas horizontalmente por enquanto. Então, vamos salvar isso. Ok, então vamos voltar para o Unity e vamos diminuir um pouco e vamos fazer a velocidade os dois para que possamos ver claramente o que está acontecendo. Vamos mover o empregador e a bala de volta e executar nosso jogo. Então lá vamos nós, você pode ver que a bala está viajando pelo espaço e quando ela atinge, então tudo, ela pára completamente, tão grande. Nossa bala está se movendo perfeitamente. Podemos dividi-lo. Podemos fazer o que quisermos. Mas o que acontece, por exemplo, se o livro for diagonal quando executamos nosso jogo? Vamos ver o que acontece. Sim, então claramente não é assim que uma bala deve estar se movendo. O que queremos fazer é queremos que a bala esteja sempre se movendo na direção que definimos para ela. Então, como vamos fazer isso? Digamos que, por exemplo, temos nossa espingarda aqui, nosso braço, e ela é girada para cima. Nossa bala também será girada para cima. Então, se o movermos, é algo semelhante a isso. Mas se clicarmos aqui, cima, aqui em cima, você pode ver o centro e o global. Isto é para a rotação, isso é para o, bem, como os eixos são representados. Então, se eu clicar no local, você pode ver que essa é a direção que a bala está olhando atualmente. Então é assim que a bala vai sair e voar. E você pode ver que é o vermelho, que é o eixo x, está olhando para cima e a direção da bala. Então, sempre que giramos nossa espingarda, queremos que a bala gire com ela também. Então, queríamos voar sempre na direção do x. Então, como vamos fazer isso? Bem, felizmente, há um vetor que é chamado de ponto de transformação, certo? E deixe-me mostrar o que é isso. Opa, desculpe, isso é para mais tarde. Então, transformar esse direito é o eixo vermelho do transporte no espaço mundial. Assim, podemos acessar esse eixo sempre que quisermos. E essa é a direção em que vamos fazer nossa bala voar. Então, de volta ao nosso código e aqui vou remover o novo vetor dois. E eu vou, em vez disso. Diga que a direção será transformada ponto, certo? Então, agora toda vez e a atualização, quando a bala está voando, ela está voando na velocidade da velocidade da bala que determinamos e na direção do transform.py, à direita, que é o eixo vermelho. Vamos testar isso. Então, se eu executar o jogo agora, a bala está se movendo bem. Ótimo. Vamos ver se salvamos isso. E quando a bala está apontando para cima, se eu correr o jogo, sim, lá vamos nós, a bala está se movendo para cima. Quão legal é isso? Ótimo. Agora, mais uma coisa. Não é assim que ele se comporta. Geralmente uma bala Sempre que for assim. Deixe-me apenas esticá-lo. Bem, funciona. Sim. Lá vai você. Acabou de adorar o edifício e continuará para sempre até a eternidade. E isso é um problema. Sempre que você tem uma bala que não é destruída em algum momento quando atinge uma parede. Isso é o que precisamos consertar. Essa é a primeira coisa. A segunda coisa, uma bala não atinge apenas uma parede e fica lá. Uma bala deve ser capaz de viajar por uma parede. Talvez, talvez tenha viajado por uma parede. Então, vamos clicar na bala dos jogadores. Vamos para baixo e para o colisor e vamos torná-lo um gatilho. Então, o que é um gatilho? Um gatilho se o colisor se comporta como um gatilho ou não, isso não é muito útil. Um gatilho significa que, se essa bala atingir um tipo de superfície, ela não a impactará fisicamente. Mas isso nos dá a capacidade de chamar algo chamado de causa, algo chamado Isso é muito inteligente. E no Trigger Enter para o, então o que isso faz, você pode ler a descrição enviada quando um outro objeto entra em um collider acionado anexado a esses objetos somente à física. Então, o que acontece se essa bala for um gatilho enquanto ela viaja pelo espaço? Quando ele atinge a parede aqui, que está no fundo. Quando ele atingir esta parede, um método de entrada de açúcar será chamado, que criará no controlador de bala dos jogadores de bala e ouro cauteloso, podemos ir em frente e fazer o que quisermos. E uma dessas coisas é destruir a bala. Deixe-me demonstrar. Isso é muita conversa, não há ação suficiente. Vamos ver o que acontece. Vou escrever em Trigger, Enter 2D, pressione a tecla Tab. Então, como você pode ver, é um vazio privado. Não se preocupe se você não sabe o que é essa palavra. Mais tarde, explicaremos tudo e como podemos criar métodos. Não se preocupe. E então temos o Onsager entrar e temos algo aqui chamado de parâmetro. Também vamos nos aprofundar nisso. Mas tudo o que você precisa saber que essa colisão é o objeto que acabamos de acertar. Então, por exemplo, se essa bala voar e atingir o jogador, o jogador é a colisão aqui. Mas, de qualquer forma, o que queremos fazer quando a bala atinge alguma coisa? Bem, queremos que essa bala se destrua. Queremos que essa bala desapareça. Não precisamos mais em nosso mundo. Existe um método muito bom de fazer isso, simplesmente escreveria destruir o objeto do jogo, e é isso. Então, destruímos o que os esteroides devem ou remove um objeto, componente ou ativo do jogo? E o que queremos remover? Queremos remover o objeto do jogo real. E se você passar o mouse sobre ele, poderá ler o objeto do jogo. Esse componente é anexado a componentes de um objeto de jogo. Então, vamos salvar isso. Vamos voltar para Unity, que set doublet aqui. E agora, quando a bala atinge qualquer um dos coliders, ela deve desaparecer da nossa cena. Vamos executar o jogo. Mantenha os olhos na vista da cena. Lá vai você. Ele fica esteroide. Você notou na hierarquia que não temos mais a bala? Com licença, essa é uma atualização irritante. Vamos tentar isso novamente sem atualizações. Isso tentou definir a bala aqui. Execute o jogo, fique de olho na hierarquia quando ele atingir, para que toda a bala desapareça. Então, agora, quando entramos em uma zona, bala é destruída porque é um gatilho, que significa que ele aciona o método de entrada Onsager sempre que ele realmente atinge qualquer tipo de parede, você pode ler mais sobre isso aqui em a documentação Unity. Então, espero que você tenha gostado de criar sua nova bala. Espero que não o incomode que as balas sejam brilhantes e muito futuristas no local da peculiaridade do jogo que estamos criando. E também estamos usando sprites livres. Portanto, temos que contornar as limitações que temos. No próximo vídeo, na verdade estaremos filmando essas balas da arma aprendendo o que é breve. Nunca se esqueça de confirmar suas alterações. Espero que você goste e te vejo no próximo vídeo. E antes de ir a propósito, há algo que não queremos encenar e nosso jogo, que são os sprites que acabamos de adicionar. Então, o que faremos, porque isso não é necessário encenar, comprometendo os sprites. O que vou fazer é entrar aqui. Vou clicar com o botão direito do mouse e vou ignorar e ignorar tudo abaixo de ativos, sprites. Não queremos salvar nada que esteja dentro dos sprites. Porque um deles, sempre teremos os sprites em nosso computador para, talvez nunca tenhamos excluído os sprites por engano. E mesmo se o fizermos, sempre podemos colocá-los de volta. E 3, eles ocupam muito espaço desnecessário. Então ignore tudo sob os sprites ativos atingiu Ok, Tudo deve ter desaparecido, apenas as balas e assim por diante e assim por diante. Então, espero que você tenha gostado de encenar tudo e eu te vejo no próximo vídeo. 18. Balões de que Firing (prefabs e instanciação): Bem-vindo de volta meus colegas desenvolvedores de jogos para um novo vídeo ultra emocionante. Criamos balas anteriormente, nós as fizemos voar, mas agora usando o poder do resumo, o poder da entrada, o poder da instanciação. Quero dizer, aprendemos muito neste vídeo, podemos começar a fotografar balas em várias direções. Quão legal é isso? Como você pode ver, temos várias balas atirando de nossa espingarda. Então, não vamos perder mais tempo. E vamos começar. Oh, ok, então é hora de começar a disparar balas de horas. Mas queremos que várias balas sejam disparadas. Não queremos apenas ter uma bala. Então, o que vamos fazer? Devemos duplicar essa bala várias vezes? A propósito, estou fazendo isso usando o Control D. Bem, obviamente não, isso não é uma ótima ideia. O que precisamos fazer é criar algo chamado prefab. O que é um prefixo? Deixe-me mostrar-lhe. Um prefab basicamente significa que é um objeto de jogo fabricado anteriormente que podemos usar várias vezes. Há muitos, muitos benefícios em ter prefabs quando se trata de criar novas cenas e fazer coisas diferentes. Vamos rever algumas coisas importantes sobre prefabs. É um modelo para um determinado objeto de jogo. Assim como temos a bala com seus componentes específicos no collider específico, podemos criar um prefab a partir dele e criar múltiplas balas com os mesmos componentes, com os mesmos sprites, o mesmo collider, etc. sistema pré-fabricado permite armazenar um objeto de jogo com todas as suas propriedades. Então, como eu disse, você pode criar um prefab da bala e, em seguida criar várias balas com as mesmas propriedades, componentes do jogo, etc. Para que usamos isso? Podemos reutilizar um objeto de jogo configurado de uma maneira específica. Daí a bala que podemos criar múltiplos, mas vamos ver como em um pouco podemos editar muitos objetos de uma só vez. Então, por exemplo, digamos que queremos tornar as balas mais rápidas. Devemos ir e mudar todas as balas ou toda vez? Não, podemos alterar apenas o prefab e todas as outras formas deste prefab serão alteradas. Podemos usar o mesmo objeto em cenas diferentes, muito mais fácil quando começamos a criar vários níveis. Você saberá o que quero dizer com isso, e é isso. Então, vamos criar um prefab. Agora, o processo de criação de um Prefabs é extremamente, extremamente difícil. Então seja muito, coloque seus bonés, pare tudo e veja o que eu faço. Isso é muito importante. Primeiro de tudo, criamos uma pasta que é o prefabs. Vou entrar aqui e agora vou criar um pré-fabricado dessa bala. Então, o que devemos fazer é primeiro que precisamos arrastar essa bala aqui. E é isso. É assim que criamos um prefab. Então, agora o que podemos fazer é simplesmente arrastar essa bala aqui e criar várias balas. E você pode ver que a bala três, duas balas 1 têm todos os mesmos componentes no inspetor. E você pode saber que um objeto de jogo é um prefabricado olhando para seu estudioso. Então você pode ver que o plano de fundo não é um pré-fabricado, mas a bala do jogador é porque é um pouco azul. Então, digamos, por exemplo, que eu quero criar um prefab fora da sala. Lá vamos nós. Então, agora a camada de despejo é uma pré-fabricada e posso adicionar outra e uma terceira. E se eu correr o jogo, agora temos três jogadores condenados andando ao redor do a. Quão legal é isso? Lá vai você. Temos um exército legal. Os Três Mosqueteiros, vamos chamá-los de três. Não tenho certeza. Certo. Mosqueteiros, basta. Vamos em frente e excluir todas as balas que temos. Podemos até excluir este original e ainda podemos adicioná-lo de nossos prefabs. E vamos manter o jogador aqui como prefabricado. Muito bom. Agora temos tudo quase configurado e podemos começar a criar, disparar as balas. Então, vamos entrar no controle do jogador e começar a fazer exatamente isso. Agora, vou disparar essas balas do controlador do jogador. Mas tenha em mente mais tarde, precisaremos de outro roteiro para fazer o disparo para nós. Apenas um headup a partir de agora. Primeiro de tudo, vou criar um campo serializado que é do tipo objeto de jogo. E esta será a referência à bala, ou podemos chamá-la jogável. Não se preocupe. Por enquanto, vamos mantê-lo como bala. Vamos precisar de uma referência a algo chamado transformação ou a posição de fogo de transformação. E por que precisamos disso? Bem, de onde sairá nossa bala? Então, obviamente, ele sairá da nossa espingarda. E onde está o ponto de disparo da espingarda? Se ele sair do meio da espingarda, isso não seria muito bom. O que faremos é adicionar um ponto de fogo. E este ponto de fogo será um objeto de jogo vazio, que será um filho das armas. Então, ponto de fogo. E observe o que acontece agora, porque eles não camada é um pré-fabricado. Você notará que o vínculo de arquivo tem uma pequena vantagem sobre ele. O que isso significa? Se eu clicar na camada superior aqui, posso clicar duas vezes nele e abri-lo separadamente. Você vai notar que ele não tem o ponto de fogo porque o pré-fabricado ainda não foi ajustado. E você pode vê-lo da cor do ponto de fogo e da pequena vantagem. Para que possamos entrar no jogador do. Aqui temos a substituição. Se clicarmos, você notará que as coisas que mudamos, mas ainda não aplicamos ao pré-fabricado. E você pode ver que podemos aplicar a coisa específica ou podemos, podemos aplicar tudo. Então, quando atingimos o aplique tudo, agora, o jogador da condenação, quando clicamos duas vezes nele, tem o ponto de fogo, o prefabricado do jogador condenado também tem o ponto de fogo. Então vamos mover o ponto de fogo aqui e na frente da espingarda. Mas se adicionarmos outros 11 jogadores da cúpula, você notará que o ponto de fogo ainda está no meio, enquanto o ponto de fogo no jogador condenado aqui está na frente da espingarda. Ah, e também, você pode ver quando eu clico no ponto de fogo, a transformação, a posição tem essa pequena linha azul e isso representa que mudamos algo do pré-fabricado. Então, vou para o jogador do doom, clique em substituir e aplicar tudo. Mas nem sempre aplicamos todos. Tenha isso em mente. Quando eu pressiono Aplicar tudo. Se eu voltar para o doom player aqui, seleciono o ponteiro do arquivo e ele apareceu magicamente no final da espingarda. Então você está começando a entender o quão útil um prefab pode ser quando se trata de modificar vários elementos do prefab que criamos. Mais tarde. À medida que avançamos pelo curso, fazemos coisas mais complexas. Você verá como o sistema é eficiente. Por enquanto, excluiremos o doom player e vamos continuar. Então, temos nosso ponto de fogo, temos nossa bala. A próxima coisa que queremos fazer é começar a disparar 0. Então eu adicionei isso no lugar errado, com licença. Estávamos trabalhando no controlador de bala do jogador e deveríamos estar trabalhando no controlador de camada, não no controlador de bala do jogador. Isso é um pouco confuso. Não notei a bala do jogador. Não se preocupe. Vamos apenas Control X, que os cortará daqui, e vamos colá-los aqui. Desculpe pela confusão. Peço desculpas pela minha falta de concentração. Salve isso. Volte. Agora, veremos que temos uma referência à bala, uma referência à posição do arquivo ou ponto de fogo, que deve ser o ponto de fogo. Salve isso de volta em nosso jogo. Por favor, não perca meu tempo e nada pau. ponto de fogo e a bala serão os ativos. Prefabs. Arraste a bala. E lá vamos nós. Também podemos aplicar as alterações e aqui. Então, o que precisamos fazer? Queremos, toda vez que pressionamos um botão, que será a tecla esquerda do mouse, queremos disparar uma bala. Então, vamos fazer isso. Vamos criar uma condição e a atualização em que verificamos se pressionamos um determinado botão do mouse. Mas como se entrarmos na unidade são documentações. Podemos ver que temos uma entrada para baixar o botão do mouse. Se lermos a descrição, podemos ver que ela retorna um verdadeiro durante o quadro, o usuário pressionou o botão do mouse fornecido e podemos até ver um exemplo aqui. Então, se o ponto de entrada obter o botão chefe para baixo 0, pressionamos o botão primário, que será o botão esquerdo do mouse, aquele como botão direito do mouse. E os dois são o meio, que é a pequena roda. Então, de volta aqui, vou excluir este log de pontos de depuração. Vou verificar se o ponto de entrada baixar o botão do mouse no 0. O que vamos fazer aqui? Bem, queremos fazer algo chamado instanciação. O que é isso? De volta? E a documentação do Unity, podemos ver que podemos instanciar um objeto. Vamos ler a descrição. Ele retorna um objeto que instanciou roupas ou criamos um clone do prefabricado que temos. Clona o objeto original e retorna o clone. Esta função pode copiar um objeto semelhante ao duplicado, etc. Você pode ler tudo sobre ele, e é assim que podemos usá-lo. Assim, podemos simplesmente instanciar o objeto, seja lá o que for sem qualquer adição. Podemos instanciar um objeto e torná-lo filho de um determinado pai que queremos, o que é muito útil. Podemos instanciar em um determinado mundo e espaço. Podemos adicionar rotação de posição e um pai. Então, todos esses são muito importantes. Então, agora que você sabe como a instanciação funciona, é hora de um desafio. E seu desafio será instanciar os prefabs de bala. Portanto, verifique o exemplo de instanciação na documentação do Unity. Os objetos devem ser ou o objeto original deve ser o prefab de bala. Certifique-se de que a posição esteja na posição cinco. A rotação também está na posição cinco. E eu lhe darei uma pequena dica se você não precisar, você sabe como criar. Vá em frente e faça o desafio. Caso contrário, para acessar a posição e a rotação do ponto de fogo, use a posição superior e a rotação. Então, pause o vídeo agora mesmo. Eu sei que você ainda não sabe como criar instanciações, mas este é o momento perfeito para se testar, ir além de seus limites ou o que você acha que são seus limites. Então, pause o vídeo agora mesmo. Vá para o Shalon. O que faremos é instanciar, abriremos os colchetes. E podemos ver aqui todas as opções que temos. Mas já sabemos pelas documentações como usá-lo. Qual é o objeto original que usaremos? Será a bala a que obtivemos a referência. Qual é a posição que queremos definir esse marcador adicionar. Vai adicionar a posição do ponto de fogo. E como adicionamos uma posição, queremos também adicionar uma rotação e ela simplesmente será a rotação do ponto de fogo. Salve isso. Então, agora, quando clicamos no botão do mouse diferente de zero, instanciaremos a bala, à qual temos uma referência na posição do ponto de fogo que criamos com a rotação de pontos distantes. Por que estamos especificando a rotação do ponto de fogo? Porque se eu clicar no ponto mais distante, você pode ver como ele está sendo girado aqui. Se eu girar o braço agora porque o ponto de fogo é um filho das armas, você notará agora que esta é a direção, mesmo que a rotação ainda seja 0. Mas a direção que você pode ver aqui, se você puder vê-la mudou isso de global para local. Você verá como o ponto de fogo é direcionado. Então, vou satisfazer de volta a 0. E as rotações às vezes são estranhas. Não se trata de apenas 0. Se olharmos para a posição, se mudarmos a rotação, você notará que a posição também muda. É um pouco confuso. É por isso que usamos geralmente rotações de quaternions no Unity são muito duvidosas. De qualquer forma, vamos salvar isso. Vamos executar nosso jogo e agora podemos atirar nossas balas. Quão legal é isso? Veja quantas balas criamos. Mas, como você pode ver, quando atiramos muitas balas, elas se destroem. Então isso é um não-não. Então, com isso feito, espero que você goste. Certifique-se de confirmar as alterações no próximo vídeo, faremos nossas balas automaticamente sem ter que pressionar o botão toda vez. Mesmo que isso seja uma espingarda, faremos dela uma espingarda automática. Então, confirme as alterações e verei você no próximo vídeo. 19. Contador de dois: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos adicionar disparo automático. Então você pode ver aqui que temos um tempo entre os tiros. Quanto tempo você quer entre tiros? Eu posso ouvi-lo. Você quer dizer 0,5? Certo, senhor, lá vai você. Nós jogamos run. Tínhamos o botão Play. Executamos o ganho e mantemos pressionado o botão esquerdo do mouse. E lá vai você. Você pode ver que devemos cada quadro e você pode ver que eles são muito consistentes. Então eu não estou jogando um jogo e aqui estou pressionando o botão e ele continua disparando a cada 0,5 segundos ou cada um tem segundo, continuamos atirando capaz. Então, não vamos perder mais tempo. Vamos aprender sobre contadores. E vamos começar. O k. Então, queremos ter a capacidade disparar balas automaticamente quando o botão do mouse é pressionado. Então, atualmente, sempre que pressionamos o botão, uma vez que podemos atirar, mas o que queremos é ter algum tipo de disparo automático enquanto estamos segurando o botão, assim como um rifle, mesmo que estejamos usando uma espingarda aqui, vamos apenas usar nossa imaginação e imaginar que esta é uma espingarda automática. E enquanto estamos segurando o botão, ele continua disparando. Então, como vamos fazer isso? Atualmente, se você olhar aqui, você pode ver que esse método, o botão baixar o mouse, retorna um verdadeiro durante o quadro que o usuário pressionou o botão do mouse fornecido. Portanto, ele só retorna true uma vez no quadro em que o player ou o usuário pressionou o botão. O que queremos é que queremos usar algo chamado botão de entrada do mouse. Portanto, observe que este foi o botão do mouse para baixo. Este é o botão obter o mouse. E se você ler a descrição, você pode ver que ela retorna um verdadeiro se o botão do mouse fornecido está pressionado. Então, enquanto estamos segurando, isso continua retornando verdadeiro. E isso nos permitirá continuar instanciando balas o tempo todo, a cada quadro. Mas chegamos a um problema. Você notou que quando executamos o jogo, se você se lembra, podemos ver as estatísticas aqui. Então, temos cerca de 800 a mil quadros por segundo. Então, cada quadro, enquanto estamos pressionando o botão do mouse, vamos instanciar uma bala, o que é muito ruim. Então, vamos ter cerca de 1000 balas a cada segundo. Agora, é divertido. É uma arma muito OOP, mas não é isso que queremos. Queremos ter um certo tempo entre disparar cada livro enquanto estamos segurando como uma arma real. Qual é o assunto aqui? Certo, então não se preocupe. Acho que isso vai resolver sozinho. De qualquer forma. Vamos começar. A primeira coisa que vamos fazer é criar um campo serializado, que será um flutuador, e será o tempo entre os tiros. Uma segunda variável que teremos como um flutuador privado e o balcão de disparos. E o que faremos é assim que começarmos, vamos definir o contador de disparos em torno de 0, ou podemos configurá-lo imediatamente aqui em vez de configurá-lo e começar. Então, começamos em 0. Agora, se rolarmos para baixo aqui, vamos criar outra condição. E diremos que, se o ponto de entrada obter o botão do mouse, que retorna se o botão de modos fornecido está pressionado. E também usamos o índice 0 para o botão esquerdo do mouse. Vamos começar a usar o contador de tiro e remover dele o tempo delta do ponto de tempo. Então você se lembra quando usamos o plus é igual em algum lugar aqui em cima quando estávamos usando a transformação, agora não a temos. Bem, isso é semelhante ao mais igual. Portanto, isso representa o contador de disparos menos o tempo.DeltaTime. E você sabe, vou duplicar isso, comentar isso. E então farei disso um minuss igual. Então você vai se lembrar que essas são as mesmas coisas. E até vou movê-lo para baixo ao lado da linha aqui. Você pode manter isso como um lembrete de por que estamos definindo menos iguais, mais iguais e todas essas coisas. É muito mais fácil de ler e é muito mais legal e vai deixar você muito mais profissional sempre que mostrarmos a alguém o seu jogo. Então, vamos continuar um, o que precisamos aqui? Enquanto estamos segurando o botão do mouse, contador de disparos está sendo contado para baixo. Então, o que queremos é que sempre que esse contador de disparos terminar ou se tornar 0, queremos disparar uma bala e depois atualizar o balcão de tiro de volta ao tempo entre os tiros. Então, como vamos fazer isso? Em vez de instanciar imediatamente, vou lançar um desafio. Foi uma transição melhor do que da última vez? De qualquer forma, seu desafio é verificar se o contador tem e, portanto, criar uma condição if que verifique o contador de disparos. Se o contador de disparos for menor ou igual a 0, por que é menor ou igual a 0? Você pode estar perguntando por que não imediatamente 0? Bem, porque como estamos contando. 20. Bolas de se atingindo os outros: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos neste vídeo, quando definimos o tempo entre os tiros para 0,1 e começamos a fotografar nossos pássaros. Você notará que, mesmo estando um em cima do outro, eles não se destroem, mas ainda são destruídos quando atingem qualquer parede. Não só isso, se eu tiver muitas balas sendo disparadas e passar o jogador através delas, você notará que o jogador também, ou as balas e o jogador não interagem uns com os outros e eles não são destruídos ao acertar a camada, que é um bom mecânico. Não queremos que o jogador use a bala para poder se matar. Este é um mecânico de jogo. Então, com isso dito, não vamos perder mais tempo, e vamos começar aprendendo camada e física 2D matriz k. Então, agora, quando executarmos nosso jogo, você verá que podemos disparar nossos livros. Mas o problema é que se tentarmos pressioná-lo várias vezes ou se definirmos o tempo entre os tiros, por exemplo, 0,1, você verá que não vemos nenhuma bala voando para longe. Por quê? Porque observe à esquerda, temos as balas disparando e se destruindo porque elas estão interagindo umas com as outras. E não queremos isso. Queremos corrigir esse problema. Como vamos fazer isso? Agora, antes de continuarmos, talvez seja algo que você queira manter em seu jogo. Mas honestamente para mim, é meio irritante ter suas balas sendo destruídas. Então, novamente, como vamos consertar isso? Bem, se olharmos aqui à direita e o inspetor de qualquer objeto do jogo, podemos ver que temos algo chamado camada. E eu mostrei isso antes quando estávamos falando sobre a classificação de camadas, mas não nos aprofundamos nisso. Então, se eu voltar para camadas, você pode ver que tenho tags sobre as quais falaremos no futuro. Temos as camadas de classificação que determinam qual Sprite ou qual camada renderiza na frente de qual outra camada. E também temos as camadas. E você pode ver que já temos os efeitos transparentes padrão , ignoramos a água refundida. Vocês são todas essas camadas diferentes que já estão presentes no Unity. Então, o que vamos fazer é colocar as balas em uma determinada camada. Você pode estar perguntando, mas por que deveríamos colocar essas balas em uma determinada camada? Bem, deixe-me mostrar primeiro criando a camada de balas do jogador. Agora, queremos entrar nos projetos. Vá para o nosso onde estão os prefabs, o prazeroso? E vamos apenas definir a bala do jogador na camada de balas do jogador. Certo, então este era o prefabricado. Portanto, todas as criações ou clones subsequentes deste pré-fabricado também estarão na camada de bala do jogador. Mas ainda assim, como isso está nos ajudando? Bem, se entrarmos em nossa edição, em nossas configurações de projeto, e se entrarmos na física 2D e rolar para baixo, podemos ver aqui essa matriz de colisão de camadas. E se você, desculpe, se você inclinar a cabeça, você pode ver, deixe-me maximizar isso. Você pode ver que temos as balas de retransmissão transparentes padrão do player, interface do usuário de água e também neste lado. Então, como essa matriz funciona? Digamos que tenhamos a camada padrão, que anteriormente era a camada de marcadores. E podemos ver que ele também interage aqui com a camada padrão deste lado. Então, o que podemos fazer é realmente desligar isso. Portanto, agora a camada padrão não interage com as outras camadas padrão. Mas, obviamente, não queremos que isso aconteça porque sempre que você criar um objeto de jogo, você o terá como padrão. E talvez desejemos que alguns dos objetos do jogo padrão interajam com outros objetos de jogo padrão. E é por isso que criamos a bala do jogador. O que podemos fazer é dizer que a bala do jogador, que está bem aqui, não interage com a bala do jogador. Então, desligamos isso. E agora as balas do jogador não devem destruir umas às outras porque não poderão interagir umas com as outras. Vamos testar isso. Vou voltar. Vou executar o jogo. E eu vou para o jogador DOM e tudo bem, então o tempo entre os tiros será 0,1. E vamos tentar manter pressionado o botão do mouse. Agora, quando eu mantenho pressionado o botão do mouse, lá vai você. Você pode ver que as balas, mesmo estando em cima umas das outras, não estão se destruindo, mas ainda estão sendo destruídas quando atingem uma parede. Então você pode ver isso claramente quando atiramos em direção à parede, mas eles estão em cima um do outro e eles não se destroem. Quão legal é isso? Temos essa ferramenta poderosa em nosso arsenal agora, onde podemos definir objetos diferentes em camadas diferentes e garantir que eles não interajam uns com os outros. Agora, outra coisa que podemos querer mudar são as balas do jogador atingindo o jogador. Mais uma vez. Eu lhe digo, se você quiser manter essa mecânica em seu jogo, sinta-se à vontade para fazê-lo. Se você não fizer isso, vamos mudar a forma como as balas interagem com o jogador. Agora, atualmente, o colisor da cápsula do jogador é muito pequeno. O que podemos fazer é adicionar outro colisor de cápsulas. Teremos que mais tarde porque o que acontece se um dos inimigos atirar uma bala na nossa cabeça e não tivermos um colisor lá que não registre que fomos baleados. Vamos consertar isso. Mas, por enquanto, vamos manter as coisas simples e tentar acertar o jogador em suas pernas. Então, vou executar o jogo. Vou atirar em uma bala. E se eu parar por aí, você pode ver que ele atinge o jogador e pode matá-lo. Mais uma vez. Você quer manter esses mecânicos. Você quer que as balas do jogador ajudem o jogador. Tudo bem. Mas você terá esse desafio. Você precisará ter certeza de que o jogador e as balas não interagirão. Então crie uma camada, camada. Atribua o jogador a essa camada e certifique-se de que o jogador e as balas do jogador não interajam através da matriz física. Dito isso, pause o vídeo agora mesmo, vá criar a camada do player. Certifique-se de que as balas não matem nosso jogador. Certo, bem-vindo de volta. Então, como você se deu bem com isso? Antes de continuar, só quero fazer alguma coisa. Eu disse que não iria querer fazer isso, mas vamos fazê-lo por enquanto. Vou adicionar um colisor de caixa ao jogador. Não será aqui que o jogador interage. Este será apenas um colisor de caixa para determinar que o jogador está sendo atingido. Então, vou chegar ao tamanho do jogador e vou torná-lo um gatilho porque não quero que esse colisor de caixa interaja com o mundo fisicamente. Eu quero manter este colisor de caixa como registrado se alguém tiver camada profunda ou algum tipo de camada. Então, vou salvar isso. Vou executar o jogo. Obviamente, precisaremos substituir o pré-fabricado. Vou atirar nisso e se eu caminhar em direção à bala, você pode ver que ela atinge o jogador. Então, vamos em frente para as camadas que aparecem. Em camadas, abra as camadas. Vou adicionar a camada do jogador. E agora vou entrar no doom player. Vou entrar nas camadas e vou definir essa camada para a camada do jogador. E você pode ver que quando você altera a camada de um pai, você obtém a opção. Você quer definir o jogador, o jogador para jogador para todos os objetos filhos também. Você gostaria de fazer isso ou não? Acho que não daria mal se colocarmos as crianças também. Então eu vou definir isso, vou salvar isso. Vou entrar nas configurações do projeto, física, e vou me certificar de que as balas do jogador e o jogador não interajam. Então você pode ver onde há uma interseção entre as balas do jogador. O jogador. Vou me certificar de que não há sinal aqui. Lá vamos nós. Agora, se executarmos o jogo, as balas devem percorrer o jogador. E sim, lá vamos nós. Assim, podemos disparar as balas quantas vezes quisermos, e elas não atingem o jogador. Eles continuam flutuando até atingirem algum tipo de inimigo. Então, espero que você goste, espero que você goste dessa nova ferramenta que você tem. Também podemos aplicar todas as nossas alterações ao prefab que temos do jogador de cúpula. E no próximo vídeo, você notará que temos essas balas, ok, elas estão disparando. É, tudo é bom, mas quando eles batem em uma parede, não há nada que esteja acontecendo. A bala está apenas desaparecendo e isso não é muito emocionante. Queremos ter algum tipo de impacto, algum tipo de efeitos, ou podemos sentir o peso dessas balas atingindo uma parede. E é exatamente isso que faremos no próximo vídeo adicionando os efeitos especiais à bala após o impacto. Portanto, não se esqueça de confirmar suas alterações. E te vejo no próximo vídeo. 21. Efeito de impacto de balas: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Então, acabamos de tornar nosso jogo muito mais legal. Então, agora, quando devemos premiar, não temos apenas nossas balas desaparecendo. Temos nossa bala indo em um sopro de fumaça. Então, quando atiramos, você pode ver que temos esse pequeno efeito legal que é destruído. Observe aqui que ele é destruído depois de um certo tempo, o que é algo que precisamos levar em consideração. Então, não vamos perder mais tempo e vamos começar. Oh, então é hora de adicionar um pouco de peso aos nossos impactos de bala. E faremos isso adicionando um efeito de impacto. Então, vou entrar nos ativos e vou entrar na pasta sprites, e vou criar uma nova pasta aqui, que será o fato das balas. E aqui vamos entrar nos recursos. E eu lhe forneci alguns fatos que encontrei. Você pode usar o que quiser. Ou você também pode encontrar alguns no site, open game art.com ou qualquer outro site. Então você pode ver aqui que temos três efeitos. Este com um pouco de fumaça, este com um pouco menos de fumaça, mas é um pouco estranho. E este aqui, agora eu vou usar o OH, então você vê que ele tem o impacto do metal de impacto. Metal de impacto metálico. Não se preocupe com isso. Só teremos a ver com o que temos. Usaremos o metal de impacto. Vou usar o primeiro. Claro. Por que não? Então, como vamos fazer isso? Vamos cortar o sprite. Vamos criar uma animação e depois vamos reproduzi-la sempre que atingirmos o objeto. Vou cortar isso se você quiser. Podemos fazer isso juntos ao mesmo tempo e ver quem faz isso mais rápido ou melhor. Então, primeiro, selecionamos o primeiro 1. Primeiro impacto, torne-o múltiplo. Aplique alterações. Vamos fazer isso apontar. Talvez não precisemos fazer isso apontar. Vamos em frente e Sprite Editor. Ok, a partícula de fumaça ou não visível, mas vamos seguir em frente e cortar isso pelo tamanho da grade. Vamos ver o quão grande é essa grade. Então, temos 1, 2, 3. Ok, então vou pegar minha útil calculadora. E a maneira como vou cortar isso é porque temos esse 960. Você pode vê-lo aqui à direita, 960 na horizontal e 576 na vertical. Então 576 divididos por, porque existem três linhas, acredito que seja 192. Então, no eixo y, é 192. E aqui temos 12345, então 960 dividido por 5 também 192. Ótimo, deveria ter visto isso chegando. Então, nós cortamos quadrados. Muito bom. Aplique as alterações. Lá vamos nós. Agora temos todos esses. Vou criar um novo objeto de jogo aqui, e esse será o impacto da bala. Então impacto de bala na parede. E lá vamos nós. Aqui está. Vou seguir em frente e adicionar um renderizador sprite a ele. Então renderizador sprite, e eu só vou dar esse efeito aqui. Onde está isso? Vamos adicionar esse impacto de fato aqui. Podemos vê-lo? É visível? Está por trás. Devemos criar uma camada de classificação? Claro. Por que não? Vamos em frente e criar ou podemos fazer uma camada de classificação de balas de camada profunda. As balas. Claro, vamos manter isso porque, obviamente, faz parte das balas, então é lógico fazê-lo na camada de balas que o colocará aqui. Isso é grande o suficiente? Talvez queiramos torná-lo maior. Vamos em frente e fazê-los pensar que 50 é muito. Vamos fazer 75 e ver o quão grande isso é. Ok, talvez possamos adicionar, fazer 50, aplicar isso, e talvez remover o ponto, torná-lo bi-linear para que fique um pouco mais suave. Sim, eu gosto mais disso. Então lá vai você. Esse será nosso impacto. Vou adicionar um componente do animador aqui. E vamos escolher este. Animações, na verdade. Claro, vamos seguir em frente e criar. Isso estará nas animações de ativos. E isso será chamado de parede de impacto de bala. E estou chamando isso de bala impactante. Bem, porque mais tarde teremos diferentes tipos de impactos. Então, aqui vamos ter a bala. Parede batendo bala. Salve isso. Lá vamos nós. Então você pode ver imediatamente porque já tínhamos o componente do animador, o controlador é enviado aqui que moveu a animação um pouco para que possamos obter todos esses, configurá-los aqui e agora colocar a animação de volta. Agora, vamos jogar isso. Certo, muito bom. Acho que é um pouco rápido. Ou talvez isso seja perfeito. Vamos ver. Vou torná-lo um pouco mais amplo. Certo, ótimo. Acho que isso é suficiente. Mas ainda acho que 50 é um pouco demais. Talvez vamos fazer com que 18 sejam não, salve isso. E animações. Vamos jogar isso. Certo, acho que isso é bom o suficiente. Então, vou salvar isso. Vou entrar nos ativos, ir para os prefabs, e vou fazer disso um prefixo ou o impacto da bala agora é um prefab. É na visita, os sprites estão na camada de bala e temos tudo configurado. Espero que você tenha feito o seu melhor e criando isso ou se não o fez, espero que tenha seguido e eu não tenha sido muito rápido para você. Então, agora, o que vamos fazer? Agora precisamos instanciar esse efeito toda vez que uma bala atinge uma parede. A maneira como fazemos isso é emitindo um desafio para você. Então, seu desafio é instanciar o efeito. Então encontre seu próprio efeito de impacto, se você precisar. Assim, você pode passar pelo jogo aberto, nosso site ou pelo HIO ou simplesmente pesquisando no Google. Talvez se você for um bom artista, você pode criar o seu próprio e obter uma referência ao impacto no script do controlador de bala. E certifique-se de instanciar o efeito antes que a bala seja traçada. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então, de volta à nossa bala de jogador aqui, vou criar uma referência ao campo serializado para a bala. Ou será um objeto de jogo, o efeito de impacto de bala. Salve isso. E o que faremos é antes de destruirmos ou seremos destruídos ou antes que a bala seja destruída, vamos instanciar o efeito de impacto da bala. E vai ser onde, onde deveria estar? Vai estar na posição de transformação, ponta da bala e a rotação da transformação dessa bala. Então, vou salvar tudo isso. Vou voltar para Unity. Vou escolher a bala do jogador. Agora temos um fato de impacto. Podemos adicioná-lo aqui. Podemos salvar isso. Vamos apenas verificar o inimigo para 1 segundo. Então, o que acontece aqui? Por que estamos tão confiantes e criando isso? E por que há um pequeno problema. Ainda assim, o que acontece é assim que instanciamos, você vê que a camada padrão aqui é a bala atingindo a parede. Então, imediatamente após a entrada, começamos a bater em paredes de bala, fato. Então, vamos ver como isso funciona. Deixe-me remover isso daqui. Sim, acho que posso removê-lo. E mais uma coisa que eu queria fazer, notei que esses Z estavam em 0, que eu acabei de redefinir tudo isso, salvar isso, executar o jogo. Então agora eu deveria atirar em uma parede e, após o impacto, você pode ver que há uma explosão, mas por algum motivo você pode ver que ela ainda está acontecendo. Então, se eu tiver muitas balas, você notará que temos muitos fatos e nenhum deles vai embora. Você pode vê-lo aqui no impacto das balas na parede. Então, o que vamos fazer, e isso é por causa da natureza da animação que acabamos de criar. Se eu entrar nas animações, se eu entrar na bala, você pode ver aqui que temos o controlador e temos a animação. E já lhe disse anteriormente alguns vídeos atrás, quando estávamos fazendo as animações do jogador, que há esse tempo de loop aqui. Então eu só vou removê-lo, salvar isso, executar o jogo. Se a bala. Lá vai você, ele explode na parede. Lá vai você. Você pode ver agora que o impacto é jogado apenas uma vez, mas há um pequeno problema e é que os impactos da bala na parede ainda estão presentes e eles não estão sendo destruídos. Então, como vamos consertar isso? E há uma maneira muito simples de fazer isso. E enquanto te ensina como fazer isso, mostrarei uma ferramenta extremamente eficaz dentro da animação. Então, o que vamos fazer é entrar nos ativos. Vamos para prefabs. Vamos adicionar a bala Impact de volta. E aqui. E o que vamos fazer é voltar ativos, scripts e criar aqui um novo script C-sharp que será o, vamos ver, impacto, efeito, destruidor. E será um roteiro extremamente, extremamente simples. Vamos apertar Enter. E mais tarde, serei lembrado de colocar cada script e uma pasta porque, à medida que avançamos, teremos muito mais scripts. Vou adicionar o destruidor de efeito de impacto. Vou abrir isso. Vou remover o início e a atualização e vou apenas fazer um método. E isso vai ser um vazio público. Destrua. E o que vamos fazer, não , não destruir, apenas destruir. E o que vamos fazer aqui é simplesmente destruir o objeto do jogo. Ótimo, como vamos chamar isso? Agora, poderíamos chamar esse método daqui, mas isso não é muito eficaz. Por quê? Porque quando instanciamos o boletim aqui , tudo bem, vamos passar pela lógica. Instanciamos a bala após o impacto, e depois destruímos o objeto do jogo, que é a bala, porque o controlador de bala do jogador está na bala. Então, as placas de impacto. Então, depois de destruirmos esse objeto do jogo, não temos mais o controlador de bala do jogador. Ele não está disponível e podemos demonstrar isso. Então, vou criar esse fato de impacto. Então acabei de definir a bala criada aqui. E depois de destruirmos o objeto do jogo, tentarei obter o componente de ponto de efeito de impacto e vou acessar o destruidor de impacto. E a partir daqui vou acessar a destruição. Portanto, esse é o método. E agora, se eu jogar meu jogo, você notará que teremos um erro. Então, vou mover isso e me certificar de que você aplica as alterações. Então, todo o impacto da bala na parede tem esse método e veja o que acontece quando filmamos no console. Lá vamos nós. O que acontece? Nem vemos o impacto. Por que isso? Porque fomos destruídos. E se tentarmos fazer isso antes de destruirmos o objeto do jogo, vamos dar uma olhada nisso. Execute o jogo. Lá vamos nós. Portanto, não há efeito. Está sendo destruído antes mesmo de vê-lo. Então, vou comentar isso e podemos manter isso como está. Isso não é problema. Mas acho que vou remover isso. E isso será para testes talvez mais tarde você se lembre de como tentamos, mas não deu certo. Então agora temos o método destruir aqui que destrói o objeto do jogo. E como vamos chamar isso depois de terminarmos nossa animação, essa é a parte complicada. Então, agora, se eu for para a animação enquanto tiver o efeito de impacto de bala, eu posso reproduzi-la e vejo que no final, você notará que quando toda a fumaça desaparecer, não temos mais nada a fazer. O que podemos fazer é aqui que temos essa pequena chave e aqui e eu estou tendo, ok, então adicione um evento. Podemos adicionar um evento em algum momento da animação, e isso será crucial mais tarde à medida que passarmos pelo curso. Eu não esperava fazer o solo cedo, mas não se preocupe com isso. Podemos adicionar um evento. E quando adicionamos um evento, vemos aqui que temos animações, eventos e funções que podemos escolher. E se clicarmos aqui, vemos que temos a palha. Por que só temos que destruir? Esta é a destruição, que está bem aqui. Então, o que acontece quando adicionamos um evento também, a animação que temos em um determinado objeto, podemos acessar todos os métodos presentes dos métodos públicos aqui. E não se preocupe se você ficou um pouco surpreso com a forma como criamos isso mais tarde no curso, vou passar por cada etapa da criação de métodos. Mas, por enquanto, saiba que podemos acessar todos os métodos públicos que estão disponíveis para nós no objeto. Então, o que acontecerá agora? Ao tocarmos nossas animações, veremos a explosão, o sopro de fumaça. E quando chegarmos ao último quadro, esse evento será acionado, que é o destruidor. E o que isso destrói faz? Ele entra aqui e destrói o objeto do jogo, que está segurando o destruidor de efeito de impacto, que é o impacto da bala na parede. Portanto, certifique-se de aplicar todas as alterações e a substituição. Vou para a liderança do impacto da bala. Vou executar o jogo. E quando eu atiro em uma parede, devemos ver o efeito, mas não o fazemos. Por que isso? Vamos voltar aqui. Nós salvamos essas alterações? Vamos tentar isso novamente. Acho que isso é porque não salvamos o script. Nós executamos o jogo. Vemos o sopro de fumaça. E lá vai você. Você pode ver que ele desapareceu da hierarquia. Então, agora vamos testar isso um pouco melhor. Lá vai você, você pode ver o efeito de impacto acontecendo ao nosso redor. E então todo o efeito desaparece. E é muito mais eficaz. É melhor do que ter muitos objetos de jogo em nossa hierarquia, ocupar espaço, ocupar memória RAM crucial e entupir o sistema. Então, espero que você tenha gostado, espero que esteja fazendo o seu melhor em cada desafio. Espero que você esteja gostando das coisas novas que adicionamos todas as vezes. Vou encenar todos esses. Vou dizer que adicionou o fato de impacto de bala e o destruiu, destruído depois. Usar eventos com um ponto de exclamação, porque isso é, os eventos são uma ferramenta incrível que você não verá com muita frequência que as pessoas usam. Então, espero que você goste e eu o vejo no próximo vídeo, onde vamos adicionar os efeitos de trilha às nossas balas, portanto, tornando o órgão muito mais frio. 22. Como adicionar trails às balsas: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, adicionamos um Renderizador de trilha à nossa bala. Vou torná-lo um pouco exagerado para que você possa ver claramente o que está acontecendo quando executamos nosso jogo. Quando atiramos nossa bala. Lá vai você. Você pode ver que ele tem algum tipo de arrastado por trás dele. Vou torná-lo um pouco maior. Então você vê claramente o que está acontecendo. Eu atiro uma bala. Bem, lá vai você. Você pode ver nossa trilha legal, as trilhas por trás da bala. Na verdade, não é perfeito. Não é tão bom. Mas deixei a parte de criatividade para você porque enquanto eu me conheço, não sou tão criativo com isso dito, não vamos perder mais tempo. Nós resolvemos um pequeno problema que tínhamos, mas não vimos antes talvez você tenha notado e pensou que Lua, Michael esqueceu alguma coisa. O que é E, tal fardo, o constrói. Não, não, estou brincando. Isso não é perder mais tempo e vamos começar. Ok, então queremos adicionar uma pequena trilha atrás de nossa bala enquanto ela voa pelo espaço. Como vamos fazer isso? Na verdade, é muito simples. Vamos simplesmente entrar na bala do jogador. E aqui podemos adicionar um componente que é o Renderizador de trilha. Então, quando clicamos nele, você pode ver que podemos adicionar uma trilha. Como vamos testar essa trilha? Como vamos clicar duas vezes no pré-fabricado, abra-o aqui e veja o que podemos fazer. Então, antes de tudo, não conheço todos os elementos aqui. Você pode brincar com tudo. Você pode ver que uma das coisas que temos como camada de classificação. Assim, podemos escolher se é uma bala, se é um jogador com o que quiser, vou escolher os dois. Então, como vemos a trilha? Simplesmente pegamos nossa bala e começamos a movê-la. Então, neste momento, esta é a trilha que temos. Sim. Sei que não é tão bom. Sobre o que vamos fazer? A primeira coisa que quero fazer é mudar o material. Então, sempre que em unidade você tem essa coisa rosa atrás de você, isso significa que há algo errado com o material. Então, vou rolar para baixo, descobrir onde temos material se eu removê-lo completamente, você verá que não temos mais nenhuma trilha. Você pode adicionar vários tipos de material aqui. A propósito, há muita coisa e há coisas que você pode importar para o Unity, como rock, como, eu não sei, relâmpagos ou qualquer coisa que você queira. Então, por exemplo, podemos adicionar esse escuro algum tipo de material escuro. Não sei o que é isso. É um dos materiais padrão que temos. Só vou usar, podemos usar, por exemplo, o sistema de partículas padrão. Então, parece que há uma trilha de fumaça por trás disso, o que não é ruim. Eu poderia mantê-lo. E, a propósito, só estou me divertindo. Não tenho certeza do que vamos fazer. E vamos ver o que podemos fazer? E você pode ver que essa trilha é meio estranha. De qualquer forma. A próxima coisa que quero fazer é mudar a largura dessa trilha para que você possa ver que eu possa aumentá-la ou diminuí-la à medida que nos movemos pelo espaço. E também podemos adicionar outro ponto aqui. Então, por exemplo, você pode começar como sendo grosso e depois ter essa pequena trilha no final, então ela se torna menor à medida que avançamos. E vamos ver o que mais temos nesta partícula? Podemos adicionar esse tipo de partículas, esse tipo de material na verdade. Certo, bom, nada mal. Você pode adicionar isso, um sprite normal. E o que isso faz é que podemos realmente mudar a cor. E aqui você pode fazer com até ter cores mescladas ou fixas. Então 11, cor única ou uma mistura de cores. Então você pode escolher, por exemplo, aqui, a primeira cor deve ser, vamos torná-la quase vermelha. E a cor final deve ser talvez branca. Ok, então agora você notará que, à medida que nos movemos, temos no início lido e, em seguida, aqui no final, temos uma cor branca. Você pode alterar a largura. Então, por exemplo, você pode ver aqui que é um pouco grande para a bala e é assim que o barco se moverá porque só está se movendo na direção certa. Então, vamos torná-lo um pouco menor, mais fino. Lá vamos nós. Então agora temos essa pequena trilha à medida que nos movemos pelo espaço. Vamos ver como isso ficará. Certo? E outro problema é a hora. Então, se passarmos o mouse sobre ele, quanto tempo a cauda B? Então são cinco segundos. Eu não acho que cinco como algo que queremos. Acho que um faremos o suficiente, talvez até menos. Então lá vai você. Esta é a trilha. Acho que até 0,5 será suficiente. Então lá vai você. Dê-me a bala. Remova. Este será o nosso rastro atrás da bala. Na verdade, branco e não tão bom de uma cor. Só vou escolher algum tipo de laranja, amarelo, algo assim. Vamos ver. Lá vamos nós. Então eu acho que parece bom o suficiente. Talvez eu gostaria de torná-lo um pouco mais fino. Só um pouco mais fino. E vamos tentar um material diferente apenas por diversão. Veja como isso parece. Bom. Nada mal, eu acho. Não, não, na verdade, não, eu não gosto disso. Talvez eu devesse torná-lo um pouco mais grosso. Podemos aumentar a espessura no final. Então é por isso que o começo, como você pode ver e então é muito pequeno. Você pode brincar testado quanto você quer adicionar, espessura que você pode até mudar aqui, você pode ver que ele começa baixo sobe. Você pode adicionar outro ponto de inflexão aqui. Então, por exemplo, assim. Lembre-se de quando estávamos fazendo as animações. Então lá vai você. Esse tipo de rabo de raposa atrás. Veja como isso é legal. Você pode criar muitos efeitos legais usando o trail se tiver tempo para testar tudo isso, apenas excluindo isso. E vamos torná-lo normal novamente. Então lá vai você. Esta é a nossa trilha. Na verdade, o último foi uma honestidade muito melhor, mas não se preocupe com isso por enquanto, vamos ver o quê. Você também pode alterar as sombras. Você pode ter destruição automática. Há muitas coisas com as quais você pode brincar. Você pode entrar na documentação do Unity e conferir tudo, ver quais outras opções você tem. Por exemplo, as sondas, movimento da câmera, algo assim. Não tenho certeza. Claro. Então, vou salvar isso. Vou voltar ao nosso jogo e vamos ver se temos uma boa trilha. Então, quando eu atiro na bala, você pode ver que eu tenho uma pequena trilha atrás dela. Não é tão bom. Não é do jeito que eu gostaria que fosse. Mas você pode ver que é apenas uma pequena trilha atrás. Então espere que as balas sejam destruídas. Tente isso novamente. E se você notou que não há uma bala, há duas balas aqui. E por que isso? O que você acha que o problema não está aqui? E a razão pela qual temos duas balas é porque, se voltarmos ao nosso script aqui, você notará que se pressionarmos o botão do mouse durante um quadro ou se continuarmos pressionando, nós estamos instanciando uma bala. Então, para corrigir isso, vamos dar a opção ao jogador de escolher se isso será uma arma automática ou não automática. Agora, vou lembrar que isso será movido para outro script porque não queremos lidar com isso no script do player. Vamos nos aprofundar no porquê. Porque deixe-me dizer-lhe a partir de agora, porque ter uma arma automática não é o trabalho do controlador do jogador. Ele deve estar em um roteiro diferente. Mas, por enquanto, vamos resolver esse problema. Vou criar um campo serializado que será do tipo booleano. E vou chamá-lo de mágica automática de armas. Então, se a arma for automática, vamos mudar as condições. Então, se a arma não for automática e pressionarmos o botão mais baixo, instanciaremos imediatamente. Então, assim como tínhamos ou qual roteiro, não tenho certeza, era o roteiro? Qual script adicionamos um ou? Ou não temos todos, ok, então temos o fim. O que esse símbolo significa? Deixe-me terminar. A arma é automática? E assim como dissemos anteriormente, quando temos um ponto de exclamação, isso significa que se esta, se a arma for automática, toda essa condição será falsa. Então, se for automático é verdadeiro, esse ponto de exclamação por trás disso o torna falso. Mas isso entendeu isso n significa que ambas as condições precisam ser verdadeiras para instanciar. Então, o que temos aqui? Se a arma não for automática com o ponto de exclamação, se a arma não for automaticamente, toda essa condição se tornará verdadeira. Por que isso? Porque se a arma não for automática, isso é automático por si só sem que o ponto de exclamação seja falso. Com o ponto de exclamação, isso se torna verdade. E se estamos pressionando o botão, instanciamos a bala imediatamente. E se estamos pressionando o botão e a arma for automática, então teremos nosso balcão de tiro. Deixe-me fazer isso de novo. E, na verdade, deixe-me ir em frente e imprimir aqui no log de pontos de depuração. Se o ponto de exclamação for automático. Então você pode ver por si mesmo, salve isso. Então, novamente, o que está acontecendo aqui? Podemos ir agora e escolher se uma arma é automática ou não. Como isso nos ajuda se a arma for automática? E esses dois símbolos aqui, e estamos mantendo pressionado o botão do mouse. Teremos o balcão de disparos e teremos filmagens constantemente dependendo do tempo entre os tiros. Mas se a arma ou a arma não for automática, isso significa que a arma automática é falsa. O que significa que quando adicionamos um ponto de exclamação por trás dele, isso o torna verdade. Portanto, toda essa condição aqui é verdadeira e estamos apertando o botão do mouse assim que instanciamos imediatamente sem qualquer demora entre eles. E também temos isso para exibir para garantir que você entenda como o ponto de exclamação funciona. Você pode ver aqui o ponto de exclamação automático. De volta ao nosso jogo. Nós executamos nosso jogo. Você notará console, lá vamos nós. Este é um pequeno erro. Não se preocupe com isso. Vou limpar isso e você pode ver que é falso. Falso, falso selvagem é automático, é verdade. Quando eu desligo, você pode ver que se torna verdade. Você pode ver as mensagens que estão sendo enviadas aqui entraram em colapso umas sobre as outras. Então agora, se eu não tiver uma arma automática como falsa, se eu segurar o botão do mouse, você pode ver que eu só atiro uma vez. Se eu o tiver automático, mantenho pressionado o botão do mouse. Tenho muitas fotos. E o melhor disso é esperar que todas as balas sejam destruídas. Agora, quando eu pressiono o botão, uma vez, lá vai você, só temos uma bala. Então, corrigimos o problema de ter uma bala mágica salvará que, se você quiser, podemos ajustar a trilha. Acabei de fazer isso um pouco rápido. Tenha seu tempo, divirta-se, divirta-se criando uma trilha estranha com muitas cores e assim por diante. E acredito que este é o último vídeo nesta seção, e na próxima seção, vamos montar os inimigos que queremos matar. Porque qual é o sentido de ter balas se não tivermos ninguém com quem matá-las. Portanto, certifique-se de sempre confirmar suas alterações. E te vejo no próximo vídeo. 23. Seção 4: configurando arquivos: Bem-vindo de volta meus colegas desenvolvedores de jogos para um novo vídeo extremamente longo. Sei que você está cansado disso. Mas, como sempre, vale a pena porque aprendemos muito. Primeiro de tudo, criamos um inimigo. Adicionamos um intervalo a ele. Adicionamos uma maneira de desenhar esse intervalo. E também executamos o jogo. Podemos atirar no inimigo. Obviamente, ele não morre por enquanto, mas podemos entrar no intervalo. Você pode ver aqui que o jogador está no intervalo Chase. Ele está sendo enviado toda vez. Se sairmos dessa pequena bolha, lá vai você, você vê que o jogador está fora do alcance. Então, não vamos perder mais tempo. E vamos começar com esse vídeo longo. Oh, então é hora de alguns inimigos. Vamos começar. A primeira coisa que vamos fazer é mouse para criar um objeto de jogo vazio. Certifique-se de que sua posição esteja redefinida. E a rotação e a escala e et cetera. E vamos chamar isso de inimigo por enquanto até decidirmos qual inimigo vai querer usar. A próxima coisa que precisaremos fazer é que precisemos entrar nos sprites. Vamos clicar com o botão direito do mouse em criar uma pasta aqui para os inimigos. E dentro dos inimigos entrará nos recursos e vamos arrastar o monstro e as criaturas. E vamos colocá-lo aqui. Então, vamos esperar que tudo seja importado. Vamos abrir isso. E como você pode ver, temos quatro tipos de inimigos que baixei de artes de jogos abertos. Claro, como sempre, você pode encontrar seus próprios inimigos. Esses são os que usei e eles estarão no link, nos recursos. E o que devo escolher? Acho que vou escolher quatro agora, o, vamos ver qual deles. Eu realmente não pensei nisso. Os inimigos. Vamos apenas escolher o esqueleto e ser muito genérico. Então, como você pode ver, temos um ataque de três morte ou et cetera, et cetera. Então, eu só vou entrar no ocioso. Vou fazer com que seja aplicado vários Sprite Editor. E vamos seguir em frente e cortá-lo, não automaticamente, mas por um tamanho de grade. E se você estava um pouco confuso com o que fiz da última vez, eu só verifico o comprimento de todo o sprite. Então são 600 e eu divido por quantos esqueletos temos. Então, temos quatro ou uma única linha, então dividida por quatro. Isso significa que é 150 por 150, como sempre. Por algum motivo, estou surpreso. Então vamos para a emenda, fatia. Splice, pense que isso é emenda de filme, claro, fatia. Lá vamos nós. Aplicar. Agora temos nossos pequenos esqueletos aqui. Vou arrastá-lo. E a cena, whoa, é um esqueleto enorme, não é? Isso é ironia. Se você não o pegou. De qualquer forma, faremos 50. Lá vamos nós. Ainda não podemos vê-lo porque precisamos ter e aplicar. Vamos seguir em frente e criar uma camada aqui que será o inimigo ou os inimigos. E vou definir as balas para renderizar na frente do inimigo e também o jogador para renderizar um enredo do inimigo. E vamos em frente e definir o inimigo aqui. Então lá vai você. Ainda é um inimigo muito pequeno. Vamos salvar isso. Vamos torná-lo um pouco maior. Então, um ocioso 50, vamos fazê-los 32. Aplique isso. Talvez ainda maior. Vamos fazê-lo 16. Então, 16. Sim. Lá vamos nós. Certo. Isso é muito grande. Quando D talvez 20. Sim, acho que 20 é bom o suficiente. Isso mudou esses dois pontos. Veja se isso ajuda. Sim, lá vamos nós. Ele parece muito melhor, ainda um pouco granulado, mas não se preocupa com isso. Nós o temos de graça. De qualquer forma. Vamos ver, este é o corpo. Este seria o corpo. E eu vou cuidar do objeto do jogo inimigo. Então agora temos o inimigo aqui e o corpo. Vamos apenas defini-lo para 00. A posição é relativa, claro para os objetos do jogo inimigo ou agora nos movemos usando o inimigo e você pode ver que ele é renderizado atrás do jogador, atrás da arma e ele também deve ser renderizado atrás das balas. Vá para a direita. Agora que temos isso, próxima coisa que precisamos fazer é obviamente em algum comportamento ou uma maneira de controlar o comportamento de nosso inimigo. Então, vamos entrar nos ativos, nos scripts, vamos clicar com o botão direito do mouse aqui, criar uma nova pasta talvez, e vamos chamá-la de inimigos. Entre. Talvez também crie um aqui para o jogador, que será o controlador do jogador. E vamos ver, também criaremos um para as balas e o tempo agora. Então crie uma nova pasta para as balas. E vamos movê-los para a bala. Por quê? Porque temos a bala, o controlador de bala do jogador e o efeito de impacto. Então e dentro dos inimigos clicará com o botão direito do mouse, criará um novo script C Sharp, e nós o chamaremos controlador E EMI pressionado Enter. Aguarde que isso seja compilado. Certo, ótimo. E agora no inimigo, podemos ir em frente e adicionar um componente que é o controlador inimigo. E vamos abrir o roteiro. Certo? Então, algo que você deve ter notado que todas as guias desapareceram. Isso não é porque eu os fechei, é porque mudamos o diretório deles. Então, movemos, por exemplo, o controlador do player dos scripts de pasta para os scripts do player da pasta. É por isso que não o temos, mas não se preocupe, ainda assim, se clicarmos duas vezes, podemos abri-la facilmente. Vamos continuar. O que precisamos aqui dentro do controlador NMI? Embora precisemos, em primeiro lugar, de uma variável que manterá em controle a velocidade dos inimigos. E precisaremos de uma variável que representará o corpo rígido dos inimigos. Então, vou fazer exatamente isso. São coisas muito simples. Não há necessidade de muita explicação. Este é um campo serializado, um flutuador e a velocidade inimiga. E outra variável que será um corpo rígido privado 2D. E acabei de me lembrar. E EMI, corpo rígido. O corpo não precisa ser capital. Salve isso. E eu só me lembro que esquecemos obviamente de adicionar algumas coisas ao inimigo, que está aqui. Vamos adicionar um componente que será um colisor de caixa. E vamos prosseguir e fazê-lo. Então, talvez sem o escudo, geralmente é melhor manter os coliders da caixa um pouco menores do que o corpo real. Isso fará com que o jogador do seu jogo quisesse se tornar mais preciso. E também podemos adicionar a sombra, a propósito, sob o inimigo, o que é uma boa ideia. Vou adicionar outro componente, que será o corpo rígido 2D. Obviamente, vamos fazer a escala de gravidade 0. Salve isso, e fecharemos os dois, ambos para baixo. Mova o script sob os dois componentes, ou podemos deixá-lo lá. Qual é a velocidade do inimigo? Qual é a velocidade do jogador primeiro, ok, é então, vamos fazer a velocidade inimiga 5.5 disso. Salve isso. Certo, ótimo. Então agora temos o inimigo. Temos um corpo rígido e um colisor nele para que possamos atirar nele e interagir com ele fisicamente. Agora, o que você quer fazer é começar a mover o inimigo em direção ao jogador, mas não o tempo todo, apenas quando o jogador chegar perto o suficiente. Então, precisamos de uma variável para o alcance em que o jogador estará em uma ordem para que o inimigo pare de persegui-lo. E também precisamos da direção em que o inimigo se moverá. Então, primeiro, vamos criar um campo serializado, que será um flutuador com o jogador ou o alcance da perseguição do jogador, vamos chamá-lo de alcance das cadeias de jogadores. Então, o alcance que o jogador deveria começar a persegui-lo. E criaremos um fator privado três. E esta será a direção para se mover na direção para mover e salvar isso. Certo, ótimo. Vamos voltar aqui. E qual é o alcance da perseguição? E você sabe o quê? Vamos mantê-lo para mais tarde. E vou te mostrar uma maneira muito bacana de como podemos desenhar. Então, como vamos saber o que a perseguição varia? Assim, posso, por exemplo, começar a fazer o intervalo de alteração cinco ou dez, ou 21. Mas o que isso significa? O que significa o alcance da perseguição aqui. Então, temos que calcular todas as caixinhas aqui para determinar o quão longe ou próximo está declarar. Bem, claro que não. O que vamos fazer é desenhar um círculo aqui que só aparecerá no modo de cena, mas não dentro do modo de jogo. Como vamos fazer isso? Se voltarmos e aqui temos algo chamado gizmos de sorteio. E você pode encontrar isso na documentação do Unity. E aqui vamos, você pode ver que temos algo sob o comportamento mono, que é OnDraw gizmo select. E você pode ver aqui implementar o OnDraw é selecionado para desenhar o objeto gizmo selecionado. Observe o que dissemos, se o objeto for selecionado e você puder ver aqui, temos o teste de aparelhos e como podemos usá-lo. Então, criamos um aparelho OnDraw vazio. E aqui podemos criar a cor do gizmo para selecionarmos qual cor queremos ser desenhada. E o que queremos desenhar, que é a esfera. Assim, podemos clicar na troposfera e podemos vê-la aqui, que é o público atrai medo, desenha uma esfera sólida com centro e raio. Então, vamos implementar isso. E use-o para desenhar nosso próprio círculo ou esfera ao redor do inimigo e conhecer o alcance dele. E se olharmos atentamente para o método e aqui podemos ver que atrai o medo, precisamos de um centro e precisamos de um raio. Então, qual deve ser o raio? Pense nisso enquanto criamos esse método. Então, aqui, vamos dizer sobre os aparelhos de desenho selecionados. E primeiro vamos escolher uma cor. Então, será a cor do ponto de gizmos e será igual à cor, digamos vermelho. Salve isso. Em seguida, vamos acessar o gizmos dot Draw wire, esfera. Então, por que o olhar de esfera que desenha uma esfera de wireframe com um centro e o raio. Então, é um pouco diferente da esfera, mas como estamos jogando em 2D, não precisamos desenhar toda a esfera, só precisamos do fio ao redor dela. E vamos ver o que deveria ser o centro. O centro obviamente deve ser as posições de ponto de transformação ou o transporte é o transporte do objeto que tem o controlador inimigo. Sei que já disse isso um milhão de vezes, mas para aqueles que ainda estão confusos, sei que fiquei um pouco confuso quando comecei a fazer isso há alguns anos, há muitos anos. E eu me lembro, então de onde isso vem? Bem, é a transformação do objeto que tem o controlador inimigo nele, o que significa que é este, inimigo V. Este é o transformador falando de volta aqui. Qual é o raio? Bem, você já pensou nisso? Qual deve ser o raio? Obviamente, é o alcance da perseguição do jogador. Vamos salvar isso. Vamos voltar para a Unity. E bem, enquanto o círculo que você pode estar perguntando, bem, se você se lembrar de alguns vídeos atrás, desligamos os aparelhos. Talvez você já tenha visto, você não notou, mas se clicarmos nele, lá vamos nós. E por que o desligamos? Porque tínhamos essa câmera e ícone irritante da câmera. O que podemos fazer é abrir os aparelhos. Você pode ver que podemos desmarcar muitas coisas aqui, mas uma das mais importantes é que podemos fazer com que esses ícones sejam um pouco menores. Então lá vai você. Não vemos mais a câmera irritante, correto? Então olhe para aquele grande e enorme círculo. Vamos torná-lo um pouco menor. E você pode ver que ele muda imediatamente. Vou fazer isso sim grande. Vou colocar o jogador lá. E a próxima coisa que precisamos fazer é calcular a distância entre o jogador e o inimigo e ver se é menor que o alcance. Se for menor, podemos começar a perseguir o jogador. Se não for menor que, não perseguimos o jogador. Então, qual é o primeiro passo a fazer? Bem, temos o alcance, temos a posição de transformação do inimigo. A próxima coisa que precisamos é uma referência ao jogador. Como vamos obter a referência do jogador? Bem, primeiro precisamos entender um método que vou mostrar a você, que é o ponto objeto encontrar objetos do tipo. E o que isso faz, o objeto t significa que depende do objeto que você está procurando. Então, quando você encontra o objeto, d se torna esse tipo de objeto. Portanto, o objeto, o primeiro ato de objeto carregado que corresponde ao tipo específico. Portanto, ele retorna o primeiro objeto carregado dos tipos de tipo ou você pode dar seu tipo a ele. E se olharmos aqui, podemos ver alguns exemplos. Então, digamos que queremos encontrar o renderizador Canvas. Se você não sabe o que é o renderizador Canvas, não se preocupe, vamos examiná-lo mais tarde. Mas, por enquanto, veja o renderizador Canvas. Criamos uma variável de pipe renderizador de tela com o nome Canvas, e usamos objeto finito do tipo e obtemos a renderização de tela. Então, agora temos uma referência a ele. E como só temos um jogador, podemos usar isso. Se tivéssemos vários jogadores, não poderíamos ter porque, bem, obviamente, encontramos apenas o primeiro ato de um. Então, procure esse método, encontre-o, estude, entenda. E então você terá que fazer esse desafio. Você precisará encontrar o objeto do jogador. Portanto, crie uma variável do tipo transformada para representar o jogador que queremos perseguir e comece a usar encontrar objetos do tipo 2, encontre o jogador. O tipo deve ser o controlador do jogador. Por quê? Porque precisamos encontrar algum tipo específico de jogador. Então, como identificamos o jogador? Ele é como todos os outros objetos. O que o torna único? Não é apenas o nome que você pode encontrar através do nome, do corpo ou do ligado. Precisamos usar algo específico. E isso é algo específico é o script do controlador do player. É por isso que o tipo de objeto que você deseja encontrar é o controlador do player. E, finalmente, use a transformação de pontos no objeto que você encontrar e atribuí-lo à variável que criamos, transformação de pontos y. Você deve saber disso porque o tipo que vamos criar é a transformação. Por que ela se transforma? Bem, porque queremos obter a distância. Como conseguimos a distância? Bem, obviamente porque é uma transformação. Então, pause o vídeo agora mesmo. Vá fazer o desafio. Ok, então primeiro, primeiro, vamos criar uma transformação privada e o jogador a perseguir. Agora, dentro do início, vamos dizer que o jogador a perseguir é igual a encontrar objetos do tipo. E o tipo que estamos procurando é o controlador do jogador. E quando o encontrarmos porque declarado de dois Chase como uma transformação, vamos acessar a transformação imediatamente de mim. Então, espero que você tenha feito o desafio. Espero que não tenha sido muito difícil. Eu sei que havia alguns truques aqui, mesmo que seja a primeira vez que você usa encontrar objeto do tipo, tenho certeza de que você era pelo menos capaz de fazer essa parte se você não pudesse ter descoberto isso, não se preocupe sobre isso era o devido tempo, vai entender tudo. Mas agora, o próximo passo é seguir em frente e calcular a distância. Então, vou criar antes de tudo, uma declaração if. E então vou escrever o vetor 3 pontos. E você pode ver que temos um método aqui que é a distância e ele retorna a distância entre a e B. Então vamos abrir isso. O que é o a? Vai ser a posição do ponto de transformação. E o que é o B? Será o jogador perseguir a posição dos pontos. Lá vai você. E qual é a condição se a distância entre a posição transformada, que é o inimigo e o jogador a perseguir, que é o jogador e é menor que o alcance da perseguição do jogador V. Então vamos mover nosso inimigo. Mas isso é para outro vídeo. Por enquanto, vou usar o log de pontos de depuração. E vou dizer que o jogador está no alcance do Chase. E uma declaração else que diremos que duplicar essa linha, mova-a para baixo. E vai dizer que o jogador fora do Chase está fora do alcance da perseguição. Salve isso de volta em nosso jogo. Vamos saber o que eu só quero fazer alguma coisa. Vou tornar isso público apenas por enquanto, só para que possamos ver o que acontece. Então você notará que no inimigo agora temos um jogador para perseguir, mas não há nada. Não vamos adicionar nada. Vamos apenas executar o jogo. Lá vai você. Você pode ver que agora o jogador da condenação, se eu clicar nele, há a referência e agora o esqueleto, nosso inimigo tem uma referência ao jogador. Posso até atirar nele. Então, vou para o console. O que é isso falso? Vamos clicar duas vezes. Certo, então este jogador e está fora do alcance da perseguição. Deixe-me definir a janela do jogo ao lado da cena quando aqueles para que possamos ver claramente o círculo aqui. Então, se eu chegar perto o suficiente, lá vamos nós, você pode ver que agora o jogador está no alcance do Chase. Se eu sair, o jogador está fora do alcance. Se eu for jogar como NJ estranho, lá vai você, tudo está funcionando perfeitamente bem. Então, espero que você goste. E o próximo vídeo estará realmente movendo nosso inimigo, não apenas imprimindo algo para a depuração, para o log. Deixe-me remover este log de pontos de depuração. Salve isso. Deixe-me tornar isso privado novamente porque não precisamos vê-lo. Eu só queria demonstrar. Não se esqueça de preparar todos os seus arquivos. E antes de ir, o que eu também queria contar a todos vocês. Espero que você goste. Vejo você na próxima vez. 24. Se movendo em direção: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E como você pode ver, agora temos um círculo amarelo. O que esse círculo amarelo faz quando executamos nosso jogo? Você pode ver que se eu entrar no círculo amarelo, nada acontece e apenas tornar a velocidade inimiga um pouco menor. Se eu entrar no círculo vermelho normalmente, ele começa a nos perseguir. Eu tentei fugir. Estou dentro do círculo amarelo, mas ele ainda está nos perseguindo. O que está acontecendo? A única maneira de ganhar é sair do círculo amarelo. Além disso, é assim que você se afasta do inimigo porque ele começou agora que não quer mais persegui-lo. Então, não vamos perder mais tempo. Vamos começar. E esqueci de dizer que você precisa confirmar suas alterações no final. Não se esqueça de fazer isso. Então, vamos começar k. Então agora temos o inimigo sabendo onde o jogador está baseado em uma certa distância que ele está dele. Quando o jogador chegar a uma certa distância, um certo alcance de perseguição, o inimigo saberá e ele começará a perseguir o jogador. Bem, ele não faz isso fisicamente, mas podemos ver pela lógica e pelo código que ele sabe, como vamos fazer isso? Primeiro, vamos determinar a direção em que esse inimigo se moverá. Então, se a distância for menor que o alcance da perseguição do jogador, vou parar a depuração e vou salvar que a direção para se mover, será igual ao alcance da perseguição do jogador ou não alinhamento Eclair para perseguir camada para perseguir a camada para perseguir posição de ponto menos a posição de transformação. Então, isso é exatamente como a fórmula que usamos. O 2 a arma e a direção certa, escolhemos a posição, removemos a posição do jogador para perseguir. Subtraímos a posição do inimigo do jogador para perseguir a posição e dessa forma obtemos a direção. Portanto, é semelhante à maneira como estamos apontando para nós, você pode voltar e ver como isso funciona. Agora, o que vamos fazer depois de sabermos a direção em que estamos nos movendo, vamos normalizar essa direção. Porque não queremos que o inimigo seja mais rápido quando ele se move na diagonal. Então, normalizamos. E então vamos acessar o corpo rígido. Assim, o corpo rígido inimigo obtém a velocidade e será igual à direção para mover n vezes o inimigo. Fale. Salve isso. E agora vamos voltar ao nosso jogo. Vamos ver como isso funciona. Vou definir a visualização do jogo ao lado da visualização de cena para que possamos ver como o alcance funciona. Quando entrarmos no alcance, vou executar o jogo. Então, agora, quando me aproximo do inimigo, sim, lá vamos nós, nada acontece. Por que isso? Bem, porque temos o pequeno erro aqui e que o objeto, não temos uma referência à largura. Por que isso? Porque estamos tentando acessar o corpo rígido inimigo, mas não o definimos. Assim, o corpo rígido NMI, o ponto é igual ao componente de dívida, corpo rígido 2D. Lá vamos nós. Ok, agora tudo deve estar funcionando bem. Vamos parar o jogo, executá-lo novamente. E agora estamos chegando perto. E lá vai você. Você pode ver que o inimigo está realmente nos perseguindo. E, obviamente, precisamos consertar algumas coisas, mas está funcionando. O que acontece se estivermos fora de alcance? Estou tentando sair do alcance. Certo. Então, não funciona. Deixe-me primeiro, bem, pelo menos está funcionando. Não é perfeito, mas está funcionando. Então deixe-me definir este. Deixe-me tornar o alcance um pouco menor porque quero demonstrar algo. E vamos fazer a velocidade também para que possamos escapar. Vou executar o jogo. Vou chegar perto do inimigo e depois vou parar, vou passar. Então, como você pode ver, o inimigo ainda está andando e finalmente ele bate em uma parede. Então, qual é o problema aqui? O problema é que o inimigo ainda terá o ímpeto com eles. Então eu chego perto, eu me afasto. E mesmo que eu não seja e o alcance ainda esteja andando sem mente, agora, isso não seria muito ruim se ele fosse um zumbi, mas aparentemente ele é um esqueleto, então ele deveria parar. Certo, eu deveria parar de piadas. E vamos ver o que podemos fazer. Então, aqui, o que devemos fazer é quando estamos ao alcance, estamos perseguindo o inimigo. Se estivermos fora do alcance, a direção para se mover será igual ao vetor 3, 0. Lá vamos nós. Essa era a direção para se mover e o vetor três , ok, sim, era. Então, salve isso. Então, agora, quando saímos do alcance, devemos parar de perseguir o jogador. Então, deixe-me saber o quê. Vamos usar uma visão diferente, um layout diferente. Podemos usar o dois por três. Lá vai você. Essa é uma boa maneira também de visualizar o mecanismo Unity. Então você pode ver agora mudar isso de três aspectos para 19 por 1920 por 1080. Agora podemos ver a visualização da cena claramente e a visualização do jogo claramente. Executamos o jogo e chegamos perto do alcance da perseguição. Lá vamos nós. Você pode ver que ele continua nos perseguindo quando estou fora desse alcance. Você pode ver que ele pára imediatamente. Lá vai você. Você pode ver assim que eu entrar, ele pára. Quando estou fora, ele pára de perseguir. Certo, ótimo. Então, o que isso fez? Espero que você goste. Agora podemos fazer o alcance da perseguição um pouco maior porque sabemos se ficarmos longe o suficiente do inimigo. Lá vai você. Você pode ver que ele pára de perseguir garotas. Agora, você pode adicionar uma camada extra de inteligência ao inimigo, se quiser, você pode criar um stop range. Por exemplo, digamos que tenhamos esse intervalo, temos outro intervalo. E se o jogador, se pudermos sair desse alcance, o segundo, então o inimigo deixará de nos perseguir. E isso será realmente um desafio para você. Então, como você gosta das transições para o desafio agora, há melhores, certo? Eu te peguei desprevenido lá, não foi? Então, espero criar uma variável de intervalo de continuação perseguindo. Você precisará desenhar esse intervalo usando os aparelhos. Você precisa criar um booleano está perseguindo. Isso é verdade quando perseguimos e falsa quando estamos fora do alcance certo. E, finalmente, você precisará criar uma declaração else if que verifique se estamos perseguindo e estamos dentro do intervalo de continuação perseguindo. Então, espero que você tenha entendido o desafio. É um pouco difícil. Vai precisar de um pouco de configuração, mas tenho certeza de que você está à altura do desafio. Então, pause o vídeo agora mesmo e vá para o caso Shalon. Então, a primeira coisa que vamos fazer é criar uma nova variável aqui, que será a continuação perseguindo. E vamos chamá-lo de o jogador manter o alcance do Chase. E então criamos um booleano. E aqui que vamos chamar, vou torná-lo privado ou saber o que, vamos torná-lo público para que possamos vê-lo e depois torná-lo privado. E o booleano público está perseguindo. Então, o próximo passo, qual foi o próximo passo e o desafio que vemos, desenhar , ok, então vamos desenhar o círculo aqui. Só vou pegar isso e duplicar. Então, controle D como sempre, vamos torná-lo amarelo. E este será o alcance do keep chases. Salve isso. E agora o que temos que fazer a seguir? Precisamos criar um booleano como rastreamento com isso. E tudo bem, então quando é verdade? É verdade aqui quando estamos dentro do alcance e começamos a ir atrás do jogador. Assim como perseguir é igual a verdadeiro. Então, o que acontece se sairmos desse alcance? A perseguição é falsa. Mas no meio, queremos criar um if else ou então, if. contrário, se o vetor ou a distância do jogador e do inimigo ainda for menor que v0, mantenha o alcance do Chase. E então isso é para, está perseguindo. O que vamos fazer é manter a direção como ela é. Lá vai você. Vamos salvar isso. Vamos olhar mais uma vez e esse código e ver se tudo funciona. Então, criamos o intervalo, nós o tornamos amarelo. O que acontece aqui é que quando o jogador entra no alcance da perseguição, a direção se tornará o jogador a perseguir. E então vamos definir que a perseguição é verdadeira. Em seguida, vamos verificar se o jogador pode sair ou se o jogador ainda está dentro do alcance do keep Chase. E estamos perseguindo, então teremos a direção para nos mover e ainda no jogador. Else. Se estivermos fora, ambos os jogadores perseguem o alcance e eles mantêm o alcance do Chase, então a perseguição é falsa. E o que é ótimo nisso é que se entrarmos no jogador mantivermos o alcance do Chase, o inimigo não nos seguirá porque está perseguindo como falso. Então, vamos ver se isso realmente funciona. E vou aumentar o alcance do Keep Chase. Vamos fazer isso. Sim, lá vamos nós. Acho que isso é bom o suficiente. Vou executar o jogo. E agora vamos ver se eu ando dentro do alcance do Keep Chase. Nada acontece. Se eu andar dentro do alcance da perseguição, o inimigo começa a perseguir. Se eu estiver, posso realmente empurrá-lo. Se eu estiver fora do alcance da perseguição, ele ainda me segue. E se eu sair de ambos os intervalos? Ele pára de seguir. E você pode ver aqui que está perseguindo é falso. Então ele não me persegue. Quando a perseguição é verdadeira? Ele continua perseguindo até eu sair do círculo amarelo. Então, espero que você faça o desafio. Espero que não tenha sido muito difícil. Eu sei que quando fiz esse desafio, senti que poderia ser um pouco difícil demais, um pouco confuso demais. Mas espero que você tenha entendido qual era o ponto do booleano. Espero que você tenha entendido como as declarações mais se aqui funcionaram. Se você não assistiu novamente ao vídeo, acho que expliquei bem o suficiente, então espero que você goste e eu o vejo no próximo vídeo, onde estaremos realmente animando nosso inimigo. Porque, como você pode ver, ele é muito chato atualmente. Até lá, tenha um bom dia e eu te vejo então. 25. Como animar inimigos: Bem-vindo de volta meus colegas desenvolvedores de jogos um novo vídeo, onde vamos adicionar animações ao nosso inimigo. Olha, ele está em marcha lenta. Estou em marcha lenta. Se eu chegar perto o suficiente e notar que ele está olhando para o meu caminho. Se eu chegar perto o suficiente, lá vai você. Você pode ver que ele começa a andar, começa a tentar me matar. Ainda posso empurrá-lo de volta. Eu fugi. Ele está lá. Eu fugi. Ele pára. Ele começa a abrir os olhos. Eu chego perto. Ele começou a ensinar. Posso atirar nele. Ele não sente nada. Ok, então vamos parar de perder tempo e vamos começar a animar nossos inimigos. Caso 0. Então, vamos animar nosso inimigo. Então, se entrarmos nos sprites e aos inimigos, o monstro, Monstros, e você tem o esqueleto e você tem todos esses sprites diferentes. Então, o que vou fazer é ir em frente e dissecar tudo isso. E vou mostrar a vocês como vou fazer essa animação de forma diferente. E então você vai fazer todo o resto porque já sabe como criar animações. Agora, a única diferença desta vez, como vou seguir em frente e fazer as animações imediatamente no corpo. E, em seguida, vou acessar o animador a partir da escrita do roteiro inimigo. Vamos acessar o animador no corpo. Por quê? Bem, honestamente, é sempre melhor usar as animações e criá-las da maneira que fizemos com o doom player. Mas, por exemplo, acho que uma mudança na forma como criamos as coisas lhe dará uma perspectiva melhor e uma compreensão mais ampla de como as coisas funcionam. Além disso, temos a chance de usar um novo método, que é obter o componente e filho, que eu gostaria de mostrar todos os métodos possíveis e exatamente assim. Então, vamos em frente e adicione um componente e, em seguida, você pode escolher qual é a melhor maneira para você. Enquanto a janela de animação, ok, vamos para o Windows. Então, talvez quando mudamos o layout, a animação desapareceu. Vou definir a animação aqui. Vou seguir em frente e criar uma animação no corpo do inimigo. Então crie e as animações de ativos inimigos, clique com o botão direito do mouse, crie o esqueleto e as animações. Este será o esqueleto. Esqueleto ocioso. Salve isso. Vou escolher a marcha lenta. Onde está isso? Vou escolher todos esses, arrastá-los para cá. Então, agora, quando corremos, você pode ver que ele está ocioso muito rápido. Ele está extremamente animado por estar ocioso. Vou movê-los. Vamos ver como isso parece. E por algum motivo. Então eu acho que o primeiro, segundo 1 são os mesmos. E por que isso? É isso. Então, vamos correr. Não, espere. Oh, ok, então o primeiro, segundo 1 por algum motivo que eu não escolho o Cisne. Não se preocupe. Vamos seguir em frente e fazer isso. Certo, ótimo. Então você pode ver que o último já é semelhante ao primeiro. Ou não. Vamos copiar isso. Defina como o último. Veja como isso parece. Sim, lá vamos nós. Isso parece muito melhor. Devemos torná-lo mais rápido? Eu não sei. Mas vamos salvar isso. E esta é a entrada. Então eu só queria mostrar como estamos fazendo isso. Vamos continuar e eu escrevi esqueleto errado, não se preocupe com isso. E vamos continuar assim no corpo. E então vou usar a magia da edição para fazer tudo isso em alguns segundos. Mas você toma seu tempo, cria a fatia de animação dos sprites. E eu vou te mostrar um desafio que é escolher um dos inimigos. Não precisa ser o esqueleto. Então crie o ataque ambulante da CID-10. Você tem o ataque de lançar uma alma e você tem a animação de arremesso de espada. Então eu acredito que há uma animação de arremesso de espada. Então, pause o vídeo agora mesmo. Slugs up os sprites, crie as animações. Vejo você em um pouco. Ei, como você se deu bem com isso? Então, tenho cortado sprites. Tenho criado animações. Deixe-me mostrar o que eu fiz. Se eu clicar no inimigo, no corpo, você pode ver que eu tenho ocioso, atacando, andando e jogando o tipo. Então eu jogo a espada, assim. Eu ataco esse cara. Correndo e andando muito fácil. Foi assim que fiz tudo. Espero que não tenha sido muito difícil para você. Espero que você tenha certeza de que todos eles eram 150 por 150. Então você pode ver todas as fatias precisam ser exatamente as mesmas, como eu disse quando estávamos cortando para brincar de condenação. Ok, e deixe-me mostrar o animador para que você possa ver que eu tenho todos esses quatro agora nós não vamos fazer nada. Não vamos ser jogados o sal ou o esqueleto atacar manterá isso para. Mais tarde, estaremos andando. Então, vou criar uma transição do esqueleto andando para o esqueleto ocioso. Vou escolher os dois segurando o Controle, escolhendo os dois. Remova na hora de saída em ambos, remova a duração da transição em ambos. Vou criar um parâmetro aqui que será chamado de andar. Então, é o mesmo. Oh, não, espere, eu criei o parâmetro errado. Eu criei uma camada. Vou criar um parâmetro booleano aqui está andando. Lá vai você, e eu vou ficar. Ok, então estou nessa transição, vou adicionar os parâmetros aqui. Então, se eu estou andando é verdade, começamos a andar e andar, falso, eu paro de andar. Diga tudo isso. Agora, vamos voltar à nossa cena e vamos abrir nossos roteiros aqui. Então, o que deveríamos estar fazendo? A primeira coisa que precisamos é uma referência ao animador. Então, no controlador inimigo aqui, vou criar um privado e ele vai ser o inimigo. E ele fez para isso, opa, é do tipo animador. E ele pode, para salvar isso. Vou pegar o componente. Mas, como você viu, o animador não está no inimigo, então eu não posso acessá-lo. Quando eu, como dissemos, Get componente, os componentes devem estar no mesmo objeto que o script. Então, para corrigir isso, terei que acessar o animador no corpo. Para fazer isso. Eu simplesmente vou dizer que o animador, quero dizer o animador inimigo, é igual a obter componente em crianças. E você pode ver agora, deixe-me terminar isso. Vamos passar o mouse sobre ele. Ok, então não há explicação, mas acho que é um componente muito autoexplicativo como este, mas em crianças, então encontramos o animador nas crianças, e porque só temos um animador, isso não é problema. Mas usamos isso com cuidado. Então, a próxima coisa que vamos fazer, vamos verificar quando adicionarmos uma velocidade. Então, aqui, vamos verificar se a direção para se mover e é diferente do vetor do 0 ou do vetor 3, desculpe-me, porque este, lembro que foi um fator três. Oh, lá vai você. Como esse preenchimento automático? Eu nem sei. Vou acessar o conjunto de pontos do animador inimigo Bool. Então isso é extremamente fácil. Acredito que todos já fizemos isso. Então você só tem um pequeno pico nos bastidores. Copie isso, cole-o aqui e vamos defini-lo como verdadeiro. Então, else declaração. Vamos duplicar esta linha para ela aqui e configurá-la como false e remover o espaço em branco extra. Então, o que acontece aqui? Assim que tivermos direção para avançar, é diferente do vetor 3 0. A animação está andando é definida como verdadeira e fazemos a transição para a animação. Se não estamos andando, é falso. Certo, ótimo. Vamos testar isso de volta em nosso jogo. Vamos colocar o animador. Onde devemos colocá-los todos? Vamos mantê-lo aqui. Jogo, execute o jogo. Vamos ver. Certo, então o inimigo está em marcha lenta. Se eu chegar perto dele, ele começará a andar. E lá vai você. Você pode ver que ele está andando, mas há um pequeno problema. Sinto como se houvesse algo. Certo. Então ele está pairando um pouco. Por que ele ainda está pairando, não ficamos bem. Então, obviamente, não removemos o tempo de transição deste. Execute o jogo novamente, ele deve começar a andar imediatamente assim que começar a se mover. Lá vai você. Ele está caminhando em nossa direção. Excelente. Agora, mais uma coisa que precisamos tomar flecha e essa é a direção que o inimigo está olhando. Então, vou fazer uma coisa semelhante, assim como aqui. Se a posição do mouse não agir como viramos nosso jogador, vamos virar nosso inimigo. Mas em vez de olhar para o ponto da tela, vamos comparar a direção ou o x do jogador com os atos do inimigo. Portanto, se a camada para perseguir o ponto, o jogador para perseguir a posição do ponto, ponto x é menor que a posição transform.py x. o que vamos fazer é acessar a escala local de transformação. E será igual a um novo vetor 3 e menos 1 f. O que é isso? Minus1 f. E vamos manter o y o mesmo. E o z, Z, z, Z, o que quer que você queira chamá-lo, o mesmo. E, caso contrário, se o jogador estiver do outro lado, a escala local de transformação é igual a um novo vetor, três pontos um. Se não me engano, No.1, um, qual é o problema? Vetor 3. Certo. Então eu não deveria colocar, deixe-me ver. Certo, então não há novidade, com licença. Então, sempre que não estamos criando um novo vetor 1, temos apenas um vetor que estamos configurando a escala local para salvar isso de volta em nosso jogo. Vamos ver isso em ação. Execute o jogo. E lá vai você. Você pode ver que ele está olhando na direção certa. Assim que chegamos perto, ele começa a caminhar em nossa direção. Certo, ótimo. Eu tentei fugir. Ele olha para nós e continua perseguindo. Agora, o único problema que notei é que o inimigo está batendo nas paredes ou assim como temos o problema anteriormente. Lembre-se de quando queríamos ter os inimigos. Então você pode ver por causa do colisor no inimigo, ele não pode passar por esta parede aqui mesmo você pode ver que essas são suas limitações. Se você quiser tornar seu jogo mais detalhado, eu recomendo que você adicione dois colliders, assim como fizemos no doom Player. Um deles será apenas para ser ouvido. O segundo será apenas onde andamos. Onde está nossa limitação? Sinta-se à vontade para fazer isso. Eu encorajo você a fazer isso. Este é o seu jogo. Você pode torná-lo tão perfeito quanto quiser. Com isso feito, obviamente vamos definir tudo aqui. Você pode ver quantas animações eu criei. Espero que você goste. Vou encenar tudo isso e verei você no próximo vídeo, onde estaremos realmente danificando nosso inimigo. Atualmente, podemos atirar nele, mas ele não sente nada. Isso é o que vamos consertar no futuro. E eu recomendo que você também crie a animação para o ticket e a animação para Surdos, o que será muito divertido de fazer o próximo vídeo. Então, vejo você. 26. Enemy Damage Enemy (métodos): Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste vídeo, quando executamos nosso jogo, quando clicamos no inimigo, você notará que ele tem uma variável extra aqui, que é a saúde inimiga e phi atirar nele com algumas balas. Observe como sua saúde se deteriora de 100 para 40. E se eu continuar atirando nele de 40 a 0 e ele desaparecer porque ele está morto. Então, vamos aprender muitas coisas neste vídeo. Coloque seus limites de pensamento e vamos começar. Oh, ok, então agora é hora de começar a danificar nossos inimigos usando o método. Então, a primeira coisa que vamos fazer é criar uma maneira adicionar saúde ou remover a saúde do nosso inimigo. Então, vou entrar no controlador inimigo. E aqui, vamos abrir o Visual Studio. E vou criar uma variável inteira que representará a saúde do inimigo. Por que é um número inteiro? Bem, porque queremos manter as coisas simples. Não queremos que seja um flutuador. Então, vou adicioná-lo aqui sob a velocidade. Então, vamos criar um campo serializado que será do tipo inteiro. E vai ser chamado de Saúde. E vou defini-lo para ser 100 no início, então nunca temos a Saúde em 0. Vou olhar para trás para o inspetor e ver como isso parece. E eles agora, ok, ótimo. Então agora você pode ver que eu tenho a opção aqui de mudar a saúde do nosso inimigo. Agora, como vamos garantir que toda vez que o inimigo for atingido, removemos uma conta de saúde. Vamos criar um método para fazer isso. Quais são os métodos? Bem, você já me viu criar métodos. A atualização é um método. Começamos como um método e também o gizmo selecionamos como um método. Mas vamos nos aprofundar um pouco mais na estrutura real de um método e ver como o usamos. Então deixe-me colocar meu laser, e essa é a estrutura do método. Portanto, é semelhante à forma como criamos variáveis na medida em que ela tem uma acessibilidade. Então, um tipo de acesso, o que é isso? É um privado, um público? Não podemos torná-lo um campo serializado, mas podemos criar um público, o que significa que podemos acessar esse método de qualquer lugar em nossos scripts, em qualquer outro script. Se for privado, só podemos acessá-lo dentro da classe em que estamos usando. Em seguida, temos o tipo de retorno. Por exemplo, retornos vazios, nada. O que é um tipo de retorno? À medida que avançamos pelo curso, você entenderá todos os diferentes tipos de retorno. Mas o que isso significa é que podemos realmente retornar um valor desse método. Se não retornar nada, isso significa que está vazio. Por exemplo, deixe-me mostrar-lhe aqui. Isso é um vazio porque não retornamos nenhum valor. Não esperamos que nenhum valor seja devolvido a partir desse método mais tarde, quando tivermos um método que retorne algo, talvez, eu vou me certificar de apontar isso para você. Em seguida, temos o nome do método. Então, geralmente, sempre que você quiser nomear um método, você precisa nomeá-lo pelo que esse método realmente faz. E você pode notar como criamos o nome de um método. Ao contrário das variáveis, a primeira palavra tem que estar sempre na classe inferior, ou a primeira letra da primeira palavra tem que ser classe mais baixa. Em um nome de método, todas as palavras dentro do nome do método precisam ser maiúsculas. Então você pode ver essa velocidade de adição, então esse método é privado, então só o usamos em um vazio de classe. Ele não retorna nada e seu nome está adicionando velocidade. Isso significa que ele adiciona velocidade a alguns tipos de objetos. E quais são os parênteses no final? Embora esses sejam chamados de parâmetro, parâmetro significa que podemos enviar um determinado valor para esse método. E ele pode usá-lo para fazer cálculos ou qualquer coisa que quiser. Vamos demonstrar como tudo isso funciona no método que danificará nossos inimigos. Então, basta falar, vamos começar. Vou abrir o Visual Studio e aqui, e vou criar um método dentro do controlador inimigo. Vou rolar para baixo na Terra, a atualização. E aqui criarei um método para danificar o inimigo. Primeiro, o que eu preciso que seja? Tem que ser privado? Então eu só posso usá-lo dentro daqui e o controlador inimigo, ou tem que ser público? Isso significa que posso acessá-lo de qualquer lugar. Bem, provavelmente vou precisar que seja público porque quero que as balas danifiquem o inimigo sempre que atingirem o inimigo. O que vai ser um vazio público, e eu vou chamá-lo de inimigo de dano. E é um vazio porque não precisamos devolver nada do inimigo de dano. Tudo o que precisamos fazer é remover um pouco de saúde que já temos. E aqui, então a saúde do inimigo. E vamos mudar isso ou não, vou te mostrar um truque muito legal e fique um pouco. De qualquer forma, vamos continuar com nosso foco principal. Também quero enviar-lhes um parâmetro do tipo inteiro, que será o dano. Eles podem. Então, agora o que posso fazer é acessar a saúde e eu posso remover dela. Desculpe, o dano sofrido. Então, agora o que acontece? Você já sabe o que significa o sinal de menos. Isso significa que removemos da saúde os danos sofridos. E, finalmente, precisamos ter certeza de que, se a saúde for menor ou igual a 0. Isso significa que você acabou de adicionar um pouco de espaços aqui. Isso significa que nosso inimigo morreu e eu quero destruir o objeto do jogo. Ok, então vamos dar uma olhada em outro momento para isso. E antes de fazermos isso, acho que o nome de saúde de uma variável não é tão específico. Acho que precisamos mudá-lo para a saúde dos inimigos. Então, o que posso fazer aqui? Posso mudar o nome aqui para a saúde do inimigo. Ok, e então role aqui para baixo e mude esses dois aqui. Mas isso é um pouco complicado, especialmente se tivermos usado saúde talvez 10 vezes em nosso código. Então, como podemos evitar isso? Basta clicar duas vezes em saúde, clicar em Control R, R. E agora você verá que pode adicionar isso. Então vou chamar isso de saúde inimiga. Vou pressionar Enter. E se eu rolar para baixo, você verá que a saúde do inimigo mudou. Então, como lembrete, controle ou clique duas vezes, mantenha pressionada a tecla Control R. E você poderá alterar o nome da variável e alterá-lo em todos os lugares e no jogo. Agora, a próxima coisa que vamos fazer é realmente chamar esse método. E de onde chamamos isso? Precisamos ir para o controlador de bala. E deixe-me encontrar o controlador de bala aqui em algum lugar. Onde está nos scripts? Nas balas, na lei terrível no controlador. E aqui, quando acionamos algo, então atingimos um objeto, o que vamos fazer, vamos deixar que eu remova esta linha daqui. Por isso, instanciamos o impacto e vamos seguir em frente e acessar a colisão. Então, qual é a colisão aqui? Como você pode ver, este é um parâmetro que está sendo enviado para o método em Trigger Enter. Qual é a colisão? É o objeto com o qual acabamos de colidir. Por exemplo, se batermos em uma parede, a colisão seria a parede que atingimos. E no nosso caso, a colisão será o inimigo que atingimos. E vou pegar o componente, com licença. Então, vou pegar o componente que está nessa colisão e ele vai ser o controlador inimigo. E no controlador inimigo, porque eu fiz esse método aqui público, posso acessá-lo aqui, que é o dano e a amina. E o que devo enviar para esse inimigo de dano? Você pode ver agora, aqui, não há argumentos, então precisamos dar o dano sofrido. Você notará tudo isso aqui. Então, vou enviar a ela o valor do dano. Mas não criamos um valor de dano. Então, vamos em frente e criá-lo aqui. Portanto, a bala também terá uma variável que será um número inteiro. E isso só copiará isso, que será o valor do dano e eu vou configurá-lo para cerca de 10. Então, o que está acontecendo aqui? Toda vez que a bala colide com algo, obtemos a informação dessa colisão. Temos a colisão, obtemos o componente do controlador inimigo e acessamos o método inimigo de dano lá. Enviamos a ele o valor do dano. Vamos para o controlador inimigo. É público, tudo o que temos a saúde inimiga, removemos os danificados tomados. O dano sofrido como obviamente o valor do dano aqui. E então verificamos se a saúde é menor ou igual a 0. Se for, destruímos o objeto do jogo porque o inimigo fez. Então. Vamos salvar tudo isso. E vamos em frente e testá-lo no Unity. Então, vou clicar no inimigo, certifique-se de que vemos a saúde do inimigo. Vou executar o código. Vou tentar atirar em nosso inimigo. Então mostrei até as balas ficarem em terceiro. Vamos ver a saúde do inimigo. Foi feito. Lá vai você. Tornou-se 90. Deixe-me tentar atirar nele duas vezes agora sua saúde deve se tornar 70 aqui. Mantenha esses 80, 70, lá vai você. O inimigo está sendo danificado. E se eu continuar atirando nele com todas as minhas balas, você notará que 70 se torna 0 e o inimigo desaparece. Mas observe o que acontece agora. Primeiro de tudo, nossas balas continuaram voando em todos os lugares. Por que isso aconteceu? Deixe-me diminuir o zoom. Você pode ver que as balas não interagiram com a parede. Eles não foram destruídos. E temos um erro aqui. E deixe-me abrir a janela do console para que possamos ver qual é o problema. Lá vai você. Você pode ver que temos por erros para as quatro balas aqui que interagiram com a parede. E vamos clicar duas vezes nesta seta e ver o que aconteceu. Oh, então você pode ver que nos leva para a linha que temos um erro e deixe-me mostrar isso mais uma vez. Clique duas vezes. Estamos nesta linha. Você pode ver aqui. E como essa linha não foi executada corretamente, a destruição não foi executada corretamente solucionável, continua voando. Esta é apenas uma nota lateral. De qualquer forma, qual é o problema? O problema é que estamos acessando a colisão, certo? A colisão deve ser o inimigo porque estamos tentando acessar o controlador NMI. Mas o problema é que agora acabamos de bater em uma parede, e essa parede não tem o script inimigo nele. Interessante. Então, como vamos salvar isso? Bem, felizmente temos uma ferramenta muito, muito poderosa. Deixe-me falar isso aqui. Deixe-me limpar todos esses erros desagradáveis. Temos uma ferramenta extremamente poderosa da qual ainda não falamos. Se eu entrar nas camadas de edição, como vimos, temos as camadas das camadas de física, temos as camadas de classificação. Também temos essa tag aqui. E o que podemos fazer, podemos marcar o inimigo, foi uma etiqueta inimiga. E sempre que estamos tentando verificar o controlador inimigo, antes de fazermos isso, podemos criar uma condição que verifique se a etiqueta na colisão é inimiga, então podemos ir em frente e danificá-la. Se não for um inimigo ou o objeto que nos encaixamos não estiver marcado como inimigo, então não podemos acessar o controlador inimigo. Então deixe-me voltar aqui. Deixe-me mostrar onde podemos criar adaga. Podemos simplesmente clicar neste botão mais, nomear a etiqueta, o que quisermos, salvar isso, voltar para o inimigo. E você pode ver aqui que podemos marcá-lo com uma tag que acabamos de criar. Deixe-me voltar. Exclua a pilha aqui. Sim. Certo. Também porque o inimigo foi marcado que pode desmarcar. Não sei por que fiz isso. Então lá vai você. Será removido desta lista na próxima vez que o projeto for carregado. Ok, então isso foi um grande erro, mas não se preocupe com isso porque agora é hora de um desafio e seu desafio é marcar nossos inimigos. Então, antes de tudo, crie uma etiqueta inimiga como eu mostrei a você. Certifique-se de marcar o inimigo dentro da etiqueta inimiga. Antes de obter o controlador inimigo, verifique se há uma condição se o objeto de colisão, para que você já saiba qual é o objeto de colisão, tem a etiqueta inimiga nele. E eu recomendo que você passe pelo Google, encontre uma maneira de verificar a tag e comparar a tag. Se você quiser continuar sozinho, vá em frente e faça isso. Se não, vou te dar uma pequena dica. Você pode usar algo chamado the.com DAG, ir conferir em cães Unity, usar suas informações, fazer sua própria pesquisa. Existe outra maneira de verificar a tag. Eu recomendo que você o encontre. Pause o vídeo agora mesmo e faça as compras. Ei, bem-vindo de volta. Como você se deu bem com isso? Portanto, esta é a unidade de documentações, component.com, declaração do DAG. Ele retorna um bool, seja verdade ou não ou nenhum bool público. Além disso, a tag compare é um bool e vamos usá-la em nossa declaração if porque, como sabemos, uma condição na declaração if é verdadeira ou falsa. Assim, também podemos ver como ele é usado e é usado no Trigger Enter, quão conveniente para nós. Então, usamos esse outro, eles chamaram de outro, nós o temos como colisão. É o mesmo, não se preocupe com isso. Então, vamos ver como podemos fazer com isso aqui. Então, antes de verificarmos uma colisão, adicionei uma guia aqui. Vou ver se a colisão que acabamos de bater na tag é inimiga. E antes de fazermos isso, devemos criar esse tipo que é o inimigo. Pressione Enter. Então, vou me certificar de que escrevemos corretamente. Então inimigo, e eu vou marcar nosso inimigo como inimigo. Então agora aqui, se é um inimigo, então vamos seguir em se é um inimigo, frente e fazer a colisão e outros truques bacanas, Este vídeo está cheio de truques bacanas. Se você tiver apenas uma linha sob a condição if, não precisará adicionar esses colchetes aqui. Então, se você tiver apenas uma linha, não precisará adicionar os colchetes se eu adicionar outra linha. Por exemplo, o contratorpedeiro não faz parte da condição if. Mesmo se eu pegar e colocá-lo aqui, ainda não fará parte da condição. E se você está um pouco confuso com isso, não se preocupe. Você pode adicionar seus próprios colchetes. Este é apenas um pequeno teste. Você pode até adicionar um comentário aqui para dizer que isso é o que acontece. Então, vou salvar isso agora. E somente se a colisão um inimigo marcar nele. Bem, chamamos o controlador inimigo e damos a ele. Vamos testar isso. Vou executar o jogo e vou começar a atirar nas paredes. E lá vai você, você pode ver que não temos erros. Se eu atirar no inimigo , verei o dano que o inimigo sofreu. Lá vai você. Você pode ver que está em 40. Vou atirar nele mais três vezes, então ele se torna 30, 20, 10. E finalmente, vou atirar nele pela última vez e ele será destruído sem erros. Então, espero que você goste, espero que esteja cometendo todas as mudanças que estamos fazendo. É muito importante. Às vezes farei isso fora do reino do vídeo. E com isso dito, espero que você goste. Se você está curtindo este curso, por favor, deixe-me um comentário. Isso me ajuda muito. Ele permite que todos saibam que este é um bom curso. Portanto, certifique-se de me deixar um comentário. Muito obrigado por assistir. Vejo você no próximo vídeo, onde estaremos tornando a profundidade de nossos inimigos um pouco mais brutal. Então, verei você. 27. Splatter: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, como prometido, adicionamos um pouco de brutalidade à forma como nosso inimigo morre. Então, agora, quando eu atiro nele com balas DO, olhe o que acontece. 1, 2, e você pode ver o sangue espirrando dele. Agora, mesmo sendo um esqueleto, tecnicamente ele não tem sangue. Mas vamos usar nossa imaginação e descobrir algo. De qualquer forma, não vamos perder mais tempo. O desafio neste vídeo será um tipo, digamos que eu contra você que pode fazer o desafio mais rápido. Então eu preciso de sua atenção e concentração. Não vamos perder mais tempo. Vamos começar. O que é um novo tipo de desafio. E quem pode fazer com mais rápido? Por quê? Porque você tem todas as ferramentas necessárias. Estamos fazendo algo que já fizemos muitas vezes antes. Então meu objetivo agora é ver quem pode fazer isso mais rápido. Você pode fazer isso mais rápido do que eu? E vamos ter uma pequena petição de copo antes de começarmos a criar um sprites de respingos. Então, a Animação cria um campo serializado do respingo de morte, onde deveria estar? E finalmente, antes de destruirmos o inimigo, vamos instanciar esse respingo de morte. Então, espero que esteja à altura do desafio. Não vamos perder mais tempo e vamos começar. Não pause o vídeo. Vamos. Vamos. Ok, então primeiro, sem pressão, sem pressão. Não é como se você estivesse indo contra o instrutor. De qualquer forma, respingos de sangue, estamos dentro deste Brigts. Vou aqui e já temos tudo cortado. Vou adicionar esse arquivo aberto. Lá vamos nós. Você pode vê-lo aqui. Vamos em frente e clique com o botão direito do mouse para criar um objeto de jogo vazio. Vou redefinir sua posição aqui. Vou seguir em frente para as animações, ótima animação. Isso estará nos ativos e animações. Clique com o botão Lá vai você. Lado de V, clique com o botão direito Oh, não, muito espirrando. Depois. Inimigo. Um nome muito longo para uma animação. Agora vou escolher todos os sprites, vá em frente e adicione-os aqui. Vamos executar isso e ver como isso parece. Certo, isso é muita coisa. Então, vou escolher tudo isso e talvez tornar os pixels por unidade um pouco mais, talvez 120 ou 150. Aplique isso. Vamos tentar essa animação novamente. Livro. Oh, ok. É um pouco menor. Vamos fazer dez segundos. Certo. Talvez eu até o guarde por 20. Vamos ver. Certo, então acho que 20 é bom o suficiente. Vamos, vamos, vamos, vamos. A próxima coisa que vamos fazer é entrar no controlador NMI aqui. Vamos ter uma referência ao respingo de sangue. Vou seguir em frente e depois do dano. Então, campo serializado, que vai ser o maduro, chame-o de objeto de jogo como o respingo da morte. Por que a manteiga? Nem tenho certeza. Vou mantê-lo no final porque todos os efeitos, é sempre melhor adicionar os efeitos no final. Salve isso. O que mais devemos fazer quando somos destruídos aqui? Ou, oh, eu, bem, um grande erro por mim, não no controlador do jogador aqui e o inimigo, salve isso. Oh, ok, então agora você tem uma vantagem sobre mim por causa dos meus erros estúpidos. Não se preocupe, salvamos essa rolagem para baixo até o inimigo. Onde ele morreu antes de ser destruído, vou instanciar os respingos surdos na posição de ponto de transformação. Então eu espero que você esteja bem em sua estrada porque estou quase terminando a rotação de pontos de transformação e talvez você esteja apenas esperando por mim e rindo. Então, salve que tudo esteja bom. Volte aqui, o objeto do jogo, este é o splatters de carga. Salve isso. E o inimigo também, vamos preferir isso, então entraremos nos reembolsos. Lá vamos nós. Sangue salpicado, adicionado e aqui vai para o inimigo. Ele recebe o respingo de morte removido da hierarquia, salva isso, execute o jogo. O inimigo deve duas vezes? Ele faz. E posso ver o respingo de sangue, mas acho que esquecemos de ter certeza de que o renderizador sprite está no onde devo adicioná-lo? Que, ou eu posso adicionar uma camada de classificação. Vamos ver, vamos pensar nisso por um segundo. Posso adicionar 0, então os inimigos, Ok, ótimo. Então, para o inimigo, salve isso. E agora, quando atiramos no inimigo duas vezes, devemos ver o sangue. Certo, ótimo. Então, mas como você pode ver, nós o temos em loop. Então vou entrar nas animações, sangue e remover o tempo do loop, salvar isso, executar o jogo novamente. E nós deveríamos ter um bom, muito bom toque de sangue. E lá vai você, desaparece. Precisamos ter certeza de que há alguns inconvenientes. Então, no final, podemos querer ir em frente e destruir isso. Então, para fazer isso, vamos entrar em nossos roteiros aqui. E já criamos algum tipo de script que foi o destruidor de efeito de impacto. Podemos, a propósito, vamos em frente e ir para os Prefabs, escolher o respingo de sangue. Temos esse pequeno bloqueio aqui, então isso não faz mais parte do desafio. Isso é algo extra que adicionará. Até me esqueci da destruição disso. E podemos ir em frente e adicionar o efeito de impacto, destruidor, destruidor. Então agora eu posso acessar isso aqui e posso dizer que quando chegarmos ao último quadro e talvez possamos até mantê-lo por alguns milissegundos aqui, então o sangue está no chão. Depois de terminarmos, adicionamos esse pequeno fato, removemos o bloqueio e o evento de animação. Qual parece ser o problema aqui? Algum tipo de chave, está aberta. Ok, então nós temos o destruído, mas por algum motivo o sangue espirrando atrás do inimigo. Ei, bem-vindo de volta. Então, houve um pequeno problema quando adicionei o evento, tive algo diferente. O problema era que, se você não tiver o respingo de sangue, por exemplo, na hierarquia, quando você adiciona um evento, parece um pouco estranho. Deixe-me mostrar-lhe novamente. Então eu escolhi o respingo de sangue e a animação escolhi os respingos de sangue. Então você pode ver que não há animação. Primeiro precisamos adicioná-lo aqui na hierarquia e em nossa cena. Então podemos ir em frente e adicionar o pequeno evento que eu só faço isso mais uma vez. Então lá vai você. E cerca de 50, vou adicionar essa função aqui. Vou acessar o destruir, salvar isso, executar o jogo. Agora, eu mato o inimigo com algumas balas. O respingo acontece livro e, em seguida, ele é removido por si só. Não o temos mais em nossa hierarquia. Então, espero que você goste. Espero que você tenha feito o desafio. Talvez você não tenha feito isso tão rápido quanto eu. Você pausa o vídeo, tentou algumas coisas sozinho. Está um pouco avançado. Tudo o que usamos, já conhecemos a instanciação. O que é o efeito que criamos, a animação, a posição transformada, tudo o que fizemos, talvez o único desafio, talvez você não soubesse onde deveria ter adicionado isso. Talvez você tenha adicionado após a destruição. Eu não acho que isso funcione se você adicionou depois de destruir tão bem feito, certifique-se de cometer suas alterações, espero que você tenha gostado. E no próximo vídeo, vamos adicionar alguma brutalidade à forma como ferimos nosso inimigo. Então, atualmente, quando atiramos nele, ele não sente nada, mas vamos nos certificar de que ele faz. E a propósito, também, temos a animação da morte que você pode criar para o inimigo e adicionou a ele quando ele morrer, algum tipo de gatilho. Talvez façamos isso mais tarde. Se você não quer tarde demais para o meu traseiro preguiçoso, você pode ir em frente e fazê-lo agora mesmo entre os vídeos. Então, vejo você no próximo. 28. Efeito de sangue Enemy: Bem-vindo de volta Meus desenvolvedores de jogos favoritos para um novo vídeo muito longo. E este, criamos animações para o sangue. Aprendemos sobre matrizes. E agora você pode ver na hierarquia quando atiramos em nosso inimigo, você pode ver que temos diferentes tipos de sangue sendo instanciados. Então, por exemplo, agora o sangue para então nós temos o sangue, então temos os três. Então, o que está acontecendo? Temos muitos Bloods e eles estão instanciando de forma aleatória porque usamos uma matriz. Então, não vamos perder mais tempo e vamos começar. Então, é hora de adicionar algum efeito de rebanho aos nossos inimigos. Vamos em frente e, antes de tudo, criar todos esses efeitos. Então eu vou entrar nos sprites, temos o respingo de sangue. Vou criar uma pasta para o respingo de impacto sanguíneo. Talvez devêssemos ter chamado isso de morte, mas não se preocupe, vamos chamar isso de respingos de impacto. Então sabemos que a França e eu vamos entrar nos recursos e você pode ver que eu lhe forneci mais sangue. Você pode usá-los e cortá-los ou usar esses cinco aqui. Então, vamos escolher todos eles e arrastá-los para a pasta aqui. Por que estamos usando todos eles? Porque queremos ter um pouco de diversificação entre o 1D 2D, 3D e et cetera. Então você pode ver que cada um deles é um pouco diferente dos outros. Então, vou salvar isso e vou criar as animações. E é muito fácil, eu acho. Então, vou fazer com e usar a magia da edição para fazer isso em 1 segundo. Então, o k, bem-vindo de volta. Então, como você conseguiu tudo isso? Deixe-me mostrar o que eu fiz. Então, antes de tudo, criei cinco sangue para o 55 do impacto sanguíneo que temos agora eles não são muito diferentes uns dos outros, mas há uma pequena diferença. Então, quando executamos isso, você pode ver que este é o primeiro. Este é o segundo que é um pouco diferente. O primeiro é um pouco mais espirituoso. O terceiro, vamos ver. Você pode ver que ele cai mais do que o segundo. Então você pode ver que estes são os dois. Este é três. Está um pouco mais caindo. Não tenho certeza do que chamá-lo. O quarto, você pode ver que é muito pequeno e muito concentrado. E o quinto que você pode ver é muito GUI. Então, o que vamos fazer? Vamos salvar tudo isso. Vou entrar nos Prefabs aqui e vou criar uma pasta para os salpicos de cílios e vou arrastar o sangue 1, 2, 3, 4 e 5. Vou salvar tudo isso. Vou excluí-los da hierarquia. E agora temos o sangue aqui. Agora acho que provavelmente teremos que destruí-los e apenas um pouco, mas por enquanto, não se preocupe com isso. Vamos corrigir isso quando o problema surgir. Então, o que vamos fazer? Queremos instanciar esses sangue toda vez que o inimigo se machuca? E a maneira como fazemos isso é antes de tudo, obtendo obviamente uma referência a ele, assim como fizemos com o respingo de morte. Então, isso será chamado de efeito de dano. Para o dano. O efeito de dano. Vamos apenas mantê-lo nisso ou você pode chamar o dano de respingos de sangue o que quiser. E agora o que vamos fazer é simplesmente instanciá-lo toda vez que nos machucarmos. Então, aqui em baixo, vamos duplicar isso. Mova um pouco para cima. E se você se lembra de como duplicamos o Control D, como movemos isso muito bem pressionando Alt e usando as teclas de seta. Então agora instanciamos v. O que devemos instanciar o efeito de dano? E está na posição de transformação do. Então, vou salvar tudo isso. Vou voltar ao nosso jogo. Vou escolher o inimigo aqui, temos o efeito prejudicial, e vamos escolher um azul. Salve isso. E agora vamos executar o jogo. E agora vou atirar em nosso inimigo. Lá vamos nós. Você pode ver o sangue. Obviamente, está em repetição. Ok, então agora precisamos começar a instanciar esses efeitos toda vez que o inimigo se machuca. Então, onde estamos instanciando o efeito ou os efeitos de impacto das balas? Bem, estamos instanciando-os no controlador de bala de camada. Então você pode ver que é aqui que os instanciamos. Agora, o que queremos fazer sempre que estamos batendo em uma parede, temos esse efeito de impacto de bala. Mas sempre que estamos atingindo um inimigo, queremos ter algum tipo de efeito de carga. Então, vou duplicar essa linha aqui. E vou chamar isso de maduro. Eu chamo isso de fato de dano. Porque isso significa que haverá algum tipo de dano quando tivermos danos significa que há sangue significa que há algo diferente. E o que faremos aqui é que toda vez que atingirmos um inimigo, vou abrir os parênteses. E vou acrescentar aqui que instanciamos e instanciamos o efeito de dano na posição de transformação e na rotação da transformação. Mas o que não queremos ter como quando estamos atingindo o inimigo e ainda instanciamos um efeito de bala. Então, o que vou fazer é que vou fazer outra declaração aqui. E vou mover toda essa linha para baixo para aquela declaração. Como estou fazendo isso? Mantendo pressionada Alt e usando as teclas de seta em uma das linhas que eu quero mover. Então, agora o que acontece quando a bala impacta ou tem uma colisão e essa colisão tem uma etiqueta de inimigo, então teremos esse respingo de sangue e acessaremos o controlador animal e causaremos dano. Se não, se não for o inimigo, que significa que estamos batendo, não sei o que é. Vamos ter o efeito de bala e costas. Então, vou salvar isso. Vou voltar aqui. E aqui, vou procurar minha bala nos prefabs, prefabs V bilayer bala aqui, devemos ter o jogador, mas eu deveria ter o efeito de dano. Vou bloquear isso no inspetor para que você tenha esse pequeno login aqui, você pode clicar nele. Agora, seja lá o que você pressionar, você não muda do inspetor do livro de jogadores. E isso é útil. Por quê? Porque agora podemos abrir este arquivo, escolher o sangue, e vamos adicioná-lo aqui no dano de fato, salvar tudo isso, executar o jogo. E agora devemos ver que quando estamos atirando na parede, temos esse impacto. Quando atiramos em um inimigo. Lá vamos nós. Temos o sangue tocando repetidamente, o que significa que teremos que mudar as animações. E não lhe disse que criei animações. Pode simplesmente remover isso. E deixe-me excluir esta pasta. Eu tive isso por engano. Então, respire um, remova isso. Splash para remover isso do loop do, opa, eu o liguei por engano. Desligue-o. Desligue. Então lá vai você. Nós temos todas as animações não em loop, ok, salve isso, execute o jogo agora quando devemos o inimigo, devemos ver o sangue respingo de sangue um. Ok, então isso é bom e elegante e tudo está bom. Mas temos cinco fatos por um motivo. Como vamos garantir que um deles seja renderizado? E não só isso, como vamos garantir que um número aleatório deles seja renderizado? Então, precisamos de vários objetos de sangue aqui. Agora, o que podemos fazer é simplesmente ir em frente e duplicar isso cinco vezes. Dano 123, etc. Portanto, temos cinco danos que podemos chamar aleatoriamente. Essa é uma solução, mas não é a solução ideal porque, por exemplo, digamos que queremos ter talvez 17 efeitos de dano. Temos que ir em frente e criar 17 variáveis? Bem, você pode, mas antes de tudo, é muito pesado. Em segundo lugar, não é uma boa maneira de usar os recursos. Qual é uma boa maneira de usar recursos como criar algo chamado array? Então, o que é uma matriz? Uma matriz permite armazenar vários objetos do mesmo tipo em uma única variável. Assim, podemos ir em frente e criar um int. Por exemplo, uma série de números inteiros, por exemplo, que é o número de inimigos. Então eu posso armazenar, por exemplo, 4, 6, 11 e 71. E cada um desses pequenos dados está na matriz. Você pode ver que temos antes de tudo, o tipo como uma variável, mas a única diferença, adicionamos esses dois colchetes. Temos o nome e temos os valores. E cada um desses valores é ou tem um índice dentro. Por exemplo, os quatro são indexados em 0. E lembre-se que sempre começamos a indexar em 0, não 10. Os seis estão no índice um, o 11 está no índice dois e os três estão no índice. Quero dizer, 71 está no índice 3 e podemos ter quantos quisermos. Então, agora que você tem um pouco de compreensão do que são arrays, e mais uma coisa podemos determinar o comprimento de uma matriz. Por exemplo, o comprimento dessa matriz é quatro porque temos quatro valores. Então, fora do caminho, essa pequena explicação, vamos tentar implementá-la um pouco e você pode ver como isso funciona. Então, vou voltar e unir ou, na verdade, não aqui. E como convertemos esse efeito de dano em uma matriz? Simplesmente adicionamos esses dois colchetes. E agora acho apropriado nomear isso não efeito de dano, mas efeitos de dano com um S no final, porque agora é plural. Então, usaremos nossa útil ferramenta de controle ou, ou, e simplesmente adicionaremos um S no final, pressione Enter. Agora, o efeito de dano aqui é diferente, mas você pode ver que a instanciação agora está errada. Por quê? Porque estamos tentando instanciar uma série de efeitos que não funciona bem, mas vamos consertar isso, ou, na verdade, você vai consertar isso mais tarde no desafio. Primeiro de tudo, vamos adicionar todos os danos e ver como ele fica no inspetor. Então, se eu for para a minha bala, na bala prefabs player, você pode ver aqui, onde está? Então, algo está errado. Qual é o problema? E o console? Vamos clicar duas vezes e ver. Oh, então deixe-me apenas comentar isso. Salve isso às vezes quando você tiver um erro, o script não é montado corretamente. Então agora que resolvemos esse problema, e podemos ver aqui que temos efeitos de dano, não mais um único elemento, mas podemos abri-lo e ter uma lista de elementos. O que podemos fazer é dizer que o tamanho da matriz é dois. Pressione enter. Agora temos dois elementos, ou podemos fazê-lo à moda antiga e acertar a vantagem aqui e adicionar um objeto. Mas vou te mostrar um truque ainda bacana. Vou trancar o inspetor aqui. Vou aos meus prefabs. Vou clicar no primeiro, manter pressionado, mudar, clicar no último. Então, eu tenho todos selecionados e vou arrastá-los para o efeito prejudicial. E voila, agora você tem por que eu usei água? Agora temos os 50 sangrentos e você pode ver os elementos numerados de 0, 1, 2, 3 e 4. Agora, o próximo passo é instanciar um deles aleatoriamente. E posso mostrar a vocês, antes de tudo, isso será um desafio. Não tenho certeza de qual devo mostrar primeiro. Deixe-me antes de tudo, mostrar-lhe isso. Então, temos algo chamado intervalo aleatório, que retorna um número aleatório. Vá em frente, olhe para cima. Agora é hora do seu desafio. E seu desafio é criar um efeito aleatório. Portanto, número um, crie um splash aleatório de 0 como o valor mínimo e o comprimento da matriz como o valor máximo. Então agora você está um pouco confuso. o que Michael está falando? Mais uma vez, voltamos para este. O mínimo, o máximo. Lá vai você. Use isso, procure por ele. De volta aqui. Atribua esse valor a uma variável inteira que você criará localmente. Portanto, crie um inteiro aleatório, atribua a ele um número aleatório. Procure latrinas aleatórias 0. Ok, então eu adicionei isso. E, finalmente, vou te dar uma dica. Se você não quiser a dica, é sobre como obtemos o comprimento da matriz. Vou te dar a dica. Caso contrário, pause o vídeo, vá para o desafio. Você quer ter a dica, use o comprimento do ponto para obter o comprimento da matriz. Você pode até procurar alguns exemplos são não, isso é um desafio um pouco difícil. Eu adicionaria uma escala de um a 10 como iniciante, isso é um 10 porque antes de tudo, você acabou de aprender arrays. Em segundo lugar, você está usando aleatoriamente. Sei que é difícil. Aproveite seu tempo, pause o vídeo, use suas habilidades de resolução de problemas, tudo o que você adquiriu e não se preocupe com isso quando terminar o desafio. Se você não sabe como fazer isso, farei isso na sua frente, mas tente. mais importante, pelo menos dê cinco minutos para tentar. Então, pause o vídeo agora mesmo e faça o seu melhor e o caldeu. Certo, bem-vindo de volta. Então, sempre que atingirmos um inimigo, o que vamos fazer é criar uma variável aleatória e localmente, então localmente significa dentro daqui, toda vez que atingimos um inimigo, vou dizer que temos um número inteiro variável, que será o splatter selecionado. E será igual a um intervalo aleatório. Assim como temos nos exemplos, e a documentação do Unity vai estar entre 0 e o respingo de morte ou não, o que chamamos, parece que o dano afeta. O dano afeta o comprimento do ponto. Salve isso. Então, agora o que acontece aqui, temos esse número inteiro. É igual a um intervalo aleatório. E você pode ver aqui que temos o mínimo. Então, por que é 0? Porque queremos escolher um número aleatório da matriz que temos aqui. E o primeiro índice é 0, e o último índice será o comprimento do dano. Mas há algo muito importante que eu quero apontar para você. E se olharmos aqui para a explicação, você pode ver que o mínimo é inclusivo enquanto o máximo é exclusivo. O que isso significa? Inclusive? Isso significa que podemos escolher um aleatório de 0 ao máximo. Então 0 está dentro. 0 pode ser um desses números aleatórios. Mas o máximo, que é o comprimento, não pode. E isso é importante porque a indexação em uma matriz, se escolhermos o comprimento, o comprimento é sempre maior que o último índice. Porque se eu voltar e o exemplo aqui, deixe-me mostrar-lhe. Então, vamos dizer qual é o comprimento de toda essa matriz? São quatro porque temos quatro pontos. Mas se eu tentar acessar o quarto número nesta matriz, receberei um erro porque temos o índice 0, 1, 2, 3 se eu tentar acessar o quarto, então, pois não há nada, recebo um erro e começo a chorar. Não necessariamente, mas espero que você consiga o ponto. A próxima coisa que vamos fazer é que queremos instanciar. Então, agora que temos nosso número aleatório, o que podemos fazer entre os efeitos, posso abrir os colchetes e posso usar o splatter selecionado aleatório. Então agora eu tenho um número aleatório que está entre 0 e o comprimento menos um, obviamente porque é exclusivo. E agora posso instanciar os efeitos de dano ou um dos efeitos de dano aleatoriamente usando esse número. Então eu poderia ter dito o 0 V1, mas eu selecionei o respingo aleatório. Então, vamos salvar isso. Espero que você entenda tudo. Se não, basta dar uma outra olhada nele, talvez repita o vídeo, entenda tudo. Tentei ser o mais detalhado possível enquanto era chato. Acho que esse é um dos vídeos mais longos, mas não se preocupe. Vou entrar no meu jogo. Vamos remover isso aqui é como o inimigo. E a propósito, também me certifiquei de que todo o sangue que você pode ver aqui, a camada de triagem como inimigo. Então você pode vê-lo. E onde está o inimigo? Vou dar a ele mil ou 10 mil de saúde só para que possamos ver corretamente todos os respingos de sangue. Então eu vou chegar lá, mas perto, vou filmar 12345. Então lá vai você. Você pode ver que algo não está completamente certo, então eu vou atirar. E qual é o problema com este caso 1, 0? Então acabei de encontrar o problema e o sangue 5 que adicionei aqui, o sangue. Olhe quando você reproduz a animação, a última é um ponto vermelho. Então, o que vou fazer, vou remover o último. E lá vai você. Agora, só temos isso quando o sangue termina nas lanças. Salve tudo isso. E deixe-me escolher a lua. O sangue 5 e um vivo mudam. Exclua-o novamente na bala. Deixe-me ver. Talvez porque mudamos algo, talvez prefabs bala. Certo. Ainda trabalhando, salve isso, volte ao nosso jogo. Obviamente, precisaremos remover tudo isso para que um sapato, o inimigo, vamos ver. Temos sangue diferente. Não, ainda está lá por algum motivo. Por que isso? É muito chato. Certo. Então descobri que o sangue também tem seu último quadro como esses pontos vermelhos irritantes. Então, vou excluí-lo e salvá-lo. Estou excluindo-o imediatamente dentro do pré-fabricado. Então eu simplesmente vou para o pré-fabricado, clique duas vezes nos três. Vamos ver se este também tem o pequeno ponto vermelho irritante que você sobe. Ok, então lá vai você. Ele também economiza isso e sangue para ampliar e ver a animação. Certo, outro trabalho sangrento. Este vídeo está ficando fora de controle. Então lá vamos nós, o último, também excluímos isso. E uma coisa que notei, quero escolher todos os prefabs e me certificar de que todas as posições deles estão em 0 para que eles não sejam instanciados. E algum lugar estranho. De qualquer forma, de volta ao nosso jogo. Espero que desta vez tudo esteja funcionando perfeitamente. Então, vou correr o jogo e vou atirar no inimigo. Lá vai você. Este é o sangue grosso. Açuque-os novamente. vez, é um tipo diferente de sangue. Você pode ver que ele está bloqueado. Três. Sangue por Sangue um. Lá vai você. Você pode simplificar para novamente, sangue um. Então, como você pode ver, sempre que estamos atirando no inimigo, temos diferentes tipos de sangue que estão sendo instanciados. Então você pode ver que é um número aleatório sendo disparado. Então, espero que você tenha gostado. Obviamente, há algumas coisas que precisaremos consertar com nosso sangue não sendo destruído no final, podemos encontrar uma maneira diferente de consertá-lo uma vez que aprendemos algumas ferramentas extras, ou talvez possamos removê-las usando o eventos e nossas animações, o que também é muito útil. Então, espero que tenha gostado, espero que esteja curtindo este curso. Espero que você não esteja sendo um pouco desmotivado pela duração de alguns dos vídeos porque eu entro em alguns detalhes. Espero que você goste do fato de eu cometer erros e mantê-los aqui para que possamos consertá-los juntos e me deixar um comentário se você estiver gostando. Sei que já disse isso antes. Talvez eu direi algumas vezes, então certifique-se de fazer a revisão para que você não precise mais ouvi-la. E certifique-se, é claro, fazer os commits. Vejo você no próximo vídeo em que daremos ao inimigo e a capacidade de atirar em nós. Então, atualmente, ele é muito fraco. Queremos dar a ele uma maneira de se defender. Então, vejo você. 29. Enemies de Entradas (coroutines): Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, na verdade, tornamos nossos inimigos um pouco estúpidos. Então, mesmo que ele possa atirar, mas apenas o pequeno problema é que ele atira em si mesmo, o que às vezes é bom, especialmente se um inimigo muito duro. Mas no nosso caso, vamos consertá-lo mais tarde. Mas, por enquanto, tudo o que você precisa saber é que podemos mudar o tempo entre os tiros para, por exemplo, três. E você pode ver que leva três segundos para atirar, mas não fazemos isso usando um contador. Fazemos isso usando algo chamado de co-rotina, o que é um assustador muito difícil, mas é uma ferramenta credível para aprender no Unity. Então eu preciso de sua concentração e sua atenção total. Não vamos perder mais tempo e vamos começar. Ok, então é hora de dar ao nosso inimigo a habilidade de atirar no jogador, ou pelo menos atacar o jogador. Temos dois tipos diferentes de ataques que vamos implementar em nosso jogo. Um deles será o malaio, um deles simplesmente atirará de longe ou jogando a espada e o exemplo dos esqueletos. Mas vamos nos concentrar mais por enquanto no tiroteio à distância e fazer-lhes ataques corpo a corpo mais tarde. Talvez em uma seção diferente, pode estar na seção chefe onde temos o esqueleto gigante. Ok, com isso fora do caminho, vamos prosseguir e começar. A primeira coisa que vamos fazer é criar algumas variáveis e o caso do controlador inimigo 0. Então, vamos entrar no controlador inimigo. E aqui vamos criar algumas variáveis. Então, antes do respingo da morte aqui, vamos adicionar ataque, apenas um comum, então sabemos o que tudo é e será um campo serializado do tipo booleano e será um ataque corpo a corpo. Então, se for um atacante corpo a corpo, vamos verificá-lo no inspetor e ele atacará usando corpo a corpo. Então vamos criar um campo serializado, que será um objeto de jogo e será o projétil inimigo. Então, isso é o que o inimigo estará jogando fora de sua mão se ele atirar. Finalmente, vamos criar um ponto de transformação. Oh, desculpe, posição de fogo. Ok, então agora temos o projétil. Criaremos uma posição de arquivo. E também queremos ter um tempo entre os tiros que o inimigo faz. Então, é semelhante à forma como lidamos com nossa arma. Então, flutuar o tempo entre os tiros. E, finalmente, vamos criar um bool privado pronto para atirar. Então, o que acontece aqui? Quando estamos prontos para atirar, o inimigo atira, e toda vez que ele atira e entre tiros de tempo vai calcular. Então fizemos isso usando, acredito no balcão. Criamos um contador onde contamos o tempo até terminarmos uma certa quantidade de tempo entre os tiros quando terminar, então podemos mostrá-lo novamente. Esse era um jeito antigo. Agora vamos usar algo chamado co-rotina. Então, antes de eu fazer isso e apresentá-los a co-rotinas, deixe-me antes de tudo preparar o pronto para atirar aqui como verdadeiro. Então, sempre que o inimigo começa, ele está pronto para atirar e atualizar. Vamos seguir em frente e criar algo aqui que é uma condição. E se o atacante malaio, ou se não somos um meramente atacante, não somos. Quando colocamos o ponto de exclamação novamente e estamos prontos para atirar. Então o que vamos fazer é ir em frente e dizer isso pronto para atirar como falso. E então aqui vamos começar um revestimento. Então, o que é uma co-rotina? Por que precisamos disso aqui? Vamos ter uma pequena explicação. Então, o que é um coltan? Uma co-rotina é um método que pode suspender a execução das instruções até que uma determinada condição ou certas condições sejam atendidas. Essas suspensões são conhecidas como rendimento. E em nosso exemplo, estará suspendendo o tempo até que nosso inimigo esteja pronto para atirar novamente. Então, vamos voltar ao nosso código e ver o que tudo isso significa. Então, atualmente o que temos, verificamos a atualização que é chamada de cada quadro. Verificamos se não estamos mirando atacante e estamos prontos para atirar, depois prontos para atirar, definir como falso. E, por exemplo, aqui vamos atirar a bala. Mas o que queremos, assim como tínhamos no balcão, queremos depois de um certo tempo poder atirar. Novamente, temos esse conjunto como falso porque não queremos filmar cada quadro uma bala e ter gazilhões de balas. Então, a maneira como corrigimos isso é usando uma co-rotina. Então deixe-me ir em frente e criar uma corrotina aqui vai ser do tipo enumerador ocular. Você não precisa se preocupar muito com o que é nosso enumerador, apenas saiba que é o tipo de revestimentos. Vamos criar o nome de corrotina como inimigo de fogo, projétil. Vou abrir os parênteses e vamos suspender o tempo. Então, vou dizer esse rendimento. Ok, Focus, rendimento. Isso significa que estamos suspendendo. Retorno. Novo. Aguarde quatro segundos. Vou abrir os suportes. E quantos segundos queremos pesar como o tempo entre os tiros? E depois disso, podemos ir em frente e instanciar a bala ou instanciar o projétil, que é o projétil, projétil inimigo onde instanciado na posição cinco, aquela posição e a posição, mas estação rho. E então o que podemos fazer é preparar o pronto para atirar de volta à verdade. E agora podemos mostrá-lo novamente. Complicado, não é? Sei menos explicar. Ah, e antes que eu esqueça, e aqui depois que tivermos o tiro, começamos a co-rotina, que é o projétil inimigo distante. Ok, agora você está ainda mais confuso. Vamos tentar isso novamente e atualizar. O que temos cada atualização de quadro como sendo fria, temos todas essas declarações aqui, que estaremos convertendo em métodos em apenas um pouco. Mas o que nos concentramos é aqui, se não formos um atacante corpo a corpo e estamos prontos para atirar, prontos para atirar, definir como falso, e começamos um Colton. Então, o que acontece aqui, pronto para filmar um conjunto para falso? Isso significa que esse método ou essa condição aqui é falso. Então, não filmamos novamente todos os quadros. É por isso que o definimos como falso. Mas como vamos defini-lo de volta para verdade? Costumávamos fazer isso usando o contador. Agora estamos usando algo um revestimento. E assim como eu disse, co-rotina é chamada Usando co-rotina de início. Você coloca o nome aqui e chama isso de enumerador. Não se preocupe. Não se preocupe com isso. Por enquanto. Você quer se aprofundar nisso? Seja meu convidado. Você não precisa saber exatamente o que isso significa. Temos o projétil inimigo distante, então temos essa expansão, que é rendimento. Então temos o retorno novo, espere quatro segundos. Então, como temos um numerador de íons, temos que retornar um novo peso quatro segundos. O que isso faz? Assim como diz, ele espera por alguns segundos, que é o tempo entre os tiros. E depois de esperar por isso, instanciamos o projétil inimigo. inimigo atira, e ele está pronto para atirar de novo, de novo e de novo. Então, o que acontece aqui? Primeiro de tudo, começamos, temos o pronto para atirar para verdade. Nós deveríamos. É falso, não atiramos mais. E quando o tempo entre os tiros termina, jogamos o projétil e, em seguida, estamos prontos para atirar novamente. Vamos testar isso e ver como ele funciona. Vou voltar para a Unity. Vou ver onde realmente temos nossa faca 0. Então, não temos uma faca. Então, o que faremos é simplesmente usar a bala que já temos. Então, nos prefabs, temos os folhetos do jogador. Basta usar isso por enquanto, a posição de fogo, deixe-me adicionar o botão direito do mouse, criar um objeto de jogo vazio. E vou colocá-lo aqui, são executados quase aqui. Então esta será a posição de fogo no inimigo. Nós fornecemos-lhe a posição FAR definida entre os tiros seria de 1 segundo. Vamos salvar isso. E agora vamos nos certificar de que ele não é um atacante. Vamos executar o jogo e ver o que acontece. Então agora, lá vai você. Você pode ver que ele está instanciando a bala, mas ele está atirando em si mesmo e no rosto. Então, se eu pausar isso por um segundo, você pode ver que a posição cinco, é assim que ela está sendo direcionada. E sabemos que a bala dos jogadores só viajou na direção certa. Sei que é meio engraçado. Vamos tentar isso de uma maneira diferente. Mas, em qualquer caso, não vamos nos preocupar muito com isso por enquanto, porque no próximo vídeo estaremos criando balas inimigas adequadas que realmente vão longe para o jogador ou não. Até balas criarão o projétil, que é o nono do inimigo. Ele vai jogá-lo como o jogador e não atirar em si mesmo. Mas você pode ver agora que isso está funcionando usando o Colton. Se eu clicar de volta no inimigo aqui, você pode ver que posso aumentar o tempo entre os tiros para 2. Então agora, a cada dois segundos, temos esse ataque. Então, espero que você tenha gostado do vídeo. Sei que a mecânica de tiro não é perfeita, mas como eu disse no próximo vídeo, estaremos criando balas melhores. Espero que você esteja cometendo todas as suas mudanças. E no próximo vídeo estaremos fazendo balas inimigas apropriadas, gentios, ou o que quer que você queira chamar. Então, vejo você. 30. Como fazer bolsos completos: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos adicionar balas. Nós os chamamos de balas, mas são espadas para o nosso esqueleto. Então, quando executamos nosso jogo, olhe o que acontece. Você pode ver que o esqueleto está realmente jogando tipos. E não só isso, se andarmos por aí, as espadas começam a nos seguir. E se você notar, se mudarmos a fonte que já está voando, continue voando na direção porque há algo muito recente que aconteceu. Eles descobriram que os tipos não mudam de direção no ar. Descoberta incrível. Não vamos perder mais tempo com o nosso, não vamos chamá-los de piadas estúpidas. E vamos começar. Oh, ok, então é hora de criar algumas balas inimigas apropriadas. Então, a primeira coisa que vamos fazer é ir em frente e pegar os sprites da nossa espada ou do tipo de inimigo. Então, se eu entrar nos sprites, se eu entrar no inimigo, nos inimigos muçulmanos, o esqueleto. E aqui eu tenho o sprite para onde ele está? Onde estão os pensamentos voadores? Então lá vai você. Este é o voo classificado. Criamos qualquer coisa para isso. Acho que não o fizemos. Então, vou criar um objeto de jogo vazio, redefinir sua posição. E eu vou dar a ele um dos, onde está, o tipo? Então, vamos dar a ele este. Vou adicionar quatro. Posso simplesmente adicionar a espada aqui. Basta remover este objeto do jogo e eu chamarei isso de espada de esqueleto voador. Lá vai você. E vou criar uma animação. Então, vou para os ativos e animações, e vou para animação esqueleto. E vamos chamá-lo de disco voador. Clique em Salvar. Lá vamos nós. Então agora temos o animador e deixe-me escolher todos os sprites do tipo. E vamos em frente e arrastá-los para cá. Então agora, se executarmos a animação, lá vamos nós, você pode ver que temos uma espada extremamente rápida que a move. Certo, então está quase tudo bem. Então lá vai você. Você pode ver que é assim que nosso tipo funciona. E explode antes que chegue ao inimigo. Por isso, tem cerca de 40 quadros de tempo de voo. E isso é bom. Queremos que a espada pelo menos possa destruir em algum alcance. Não queremos que o sal esteja voando o tempo todo agora, se você quiser ter seu sal voando o tempo todo, você precisará adicionar algumas coisas. Então, por exemplo, você pode simplesmente colocá-lo em um loop e o sal continuará voando e voando sem nunca ser destruído até que ele atinja o jogador. E, finalmente, justo pode ser destruído com algumas condições. Mas não vamos nos preocupar muito com isso agora. O que faremos é abrir os scripts aqui. Vamos entrar nas balas e clicaremos com o botão direito do mouse e criaremos um novo script C-sharp, que será o controlador de bala inimigo. E vamos chamá-lo de bala ou projétil, mas por enquanto vamos chamá-lo de bala. Então, vou salvar isso. E vou clicar duas vezes e abrir isso. Então, a primeira coisa que vamos precisar é de um campo serializado, que é um flutuador para a velocidade da bala. E eu vou usar bala e meio que projetado à medida que prosseguimos. E vamos precisar de uma referência à direção dos jogadores. Então, vou criar um vetor privado 3 e ele será a direção do jogador. Então, como a bala inimiga realmente vai funcionar? O que faremos é então começar, vamos determinar a direção dos jogadores. Então, será igual encontrar objetos do tipo. E vai ser o controlador de camada. E a partir daqui vamos seguir em frente e usar a posição de ponto de transformação do jogador que encontramos menos a posição transform.py ponto o. É isso. Não, não normalizado, não, não agora. Então, por que estamos fazendo isso instalado e não uma atualização? Porque não queremos que a bala continue seguindo o jogador. Só queremos ter a direção do jogador assim que a bala for disparada. Então, quando a bala é disparada, estamos instanciando essa bala. E essa bala. Assim que ele acordar. Comece. Vamos começar. Ele encontrará o objeto do jogador, obterá a direção do jogador. E então vamos nos certificar de que a direção do jogador se normalize. Lá vamos nós. Então, dessa forma, não é mais rápido se estiver se movendo em uma diagonal. Certo, ótimo. Agora, a próxima coisa que queremos fazer é garantir que essa bala seja destruída sempre que atingir um obstáculo. Mas não só isso, queremos também reduzir a saúde do jogador mais tarde, quando ele o atinge. Então, uma das coisas que precisaremos fazer. O problema é um desafio? Que tal essa transição? A palha, a bala e verifique o jogador. Então você precisará criar, isso deve ser M no Trigger Enter to D para a bala. Você precisa verificar se o que atingimos foi o jogador por sua etiqueta, precisará destruir a bala quando ela atingir algo. E eu vou te dar uma pequena dica, você precisará usar a palha. Bem, isso não é realmente, foi muito fácil, mas pensei que talvez porque é a primeira vez que você usa destruído, talvez você precise disso. Portanto, lembre-se de que você também precisará adicionar um gatilho a isso. Pause o vídeo agora mesmo e vá fazer o Shalon k. Então há algo que eu deixei do desafio. Eu mencionei um pouco e espero que esse sapato que isso por conta própria, eu vou ter que adicionar um colisor. Então, um colisor circular 2D, é bem grande. Vou colocar o raio acima, tomar grande. Vou, ok, então acho que esse raio é bom o suficiente. Vamos ver como isso vai voar. Então este é o círculo completo. Então, vou movê-lo um pouco para baixo, um pouco assim ou tudo bem, ótimo. Então agora temos o colisor, nós nos certificamos de torná-lo um gatilho. Vou salvar isso e vou seguir em frente no o e adicionar também os scripts do controlador de bala inimigo. Lá vamos nós. A velocidade do barco será, vamos fazer 34. Agora, clique duas vezes sobre isso, abra isso. E agora o que vamos fazer é criar um no açúcar entra, então em Trigger Enter to D. E aqui vamos verificar se a tag collision.com. E se for o jogador, obviamente precisaremos criar a pilha em um pouco. Se for, o jogador simplesmente usará o log de pontos de depuração. A camada foi atingida. E então nós simplesmente vamos tirar isso, seja qual for o alvo, objeto de jogo destruidor de alma. Salve isso. Agora, o passo final é que queremos mover nossa bala. E como vamos mover nossa bala? Bem, obviamente podemos usar o corpo rígido novamente, assim como fizemos com a bala do jogador. Mas acho que sou esse caso, é muito melhor usar a maneira antiquada que é movida a transformação do livro. Primeiro de tudo, há muitos motivos. Primeiro de tudo, podemos fazer isso com bastante facilidade e é muito eficaz. E a segunda razão é que não queremos ter muitos corpos rígidos e nosso jogo, porque sempre que você tem um corpo rígido, isso significa que o motor de física está funcionando. E quando há um mecanismo de física está funcionando, isso significa que há mais poder computacional. Então, na última vez que usamos a manteiga, nosso jogo corre. Então, uma atualização, vou acessar a transformação. Eu vou, quero dizer a posição sobre a transformação. E vou continuar aumentando isso. Indo para a direção do jogador, cronometre a velocidade da bala. Então, essa velocidade, e, claro, vou usar o tempo, o tempo delta. Assim que a bala é instanciada, a direção do jogador é encontrada. E cada quadro em que a transformação é movida em direção a esse jogador. E assim que ele atinge o jogador, o objeto do jogo é destruído. E se tivéssemos uma camada profunda ou qualquer outro objeto que seja destruído, mas se tivéssemos o jogador especificamente, o jogador foi atingido será colocado ou impresso no console. Então, vou salvar isso. Vou voltar para o meu novamente. E vamos ver, vamos fazer disso um pré-fabricado. Pré-fabricado. Vou clicar com o botão direito do mouse e aqui e criar uma pasta, 40 marcadores. E a bala do jogador aqui. Clique duas vezes aqui, defina a classificação do esqueleto voador aqui. Vou excluí-lo. Vamos salvar isso. E vamos seguir em frente e executar o jogo e ver o que acontece. Então, ok, não mudamos a pilha. Não alteramos as balas reais do jogador. Então lá vamos nós. Vamos adicionar este esqueleto voador, classificar o jogo. E como você pode ver, nada está acontecendo porque a bala está nas camadas de classificação erradas. Então, na camada de classificação inimiga, agora devemos salvar isso. Agora, quando corremos, devemos. Sim, lá vamos nós. Você pode ver que temos esses tipos voando em direção ao jogador. E quando tínhamos o jogador, não temos nada impresso no console. Por que isso? Bem, vamos verificar, vai salvar isso. Então eu esqueci o passo mais importante e o que você deveria ter feito no desafio, presumo que você saberia o que fazer e o desafio, porque estamos verificando a tag do jogador, mas aparentemente pela memória, não é ótimo? Então o problema aqui é que não marcamos o jogador também, o jogador. Como você pode ver, já temos a tag aqui. Um grande erro, não se preocupe com isso. Vivemos, aprendemos, aplicamos nossas mudanças. Nós salvamos tudo isso, executamos o jogo. E agora o que devemos ver é que lá vai você. Assim que o jogador classificou, o jogador foi atingido e você pode vê-lo várias vezes e aqui 4, 5, etc Agora, o que eu queria mostrar é se eu mover o jogador, as espadas que já estão indo na direção do o jogador não mudará. Então lá vai você. Você pode ver que agora siga o jogador enquanto ele se move e podemos destruí-lo? Sim, podemos. Se você quiser, você pode adicionar outra camada, que é a camada de bala inimiga, e certifique-se de que as balas do jogador não interajam com o inimigo da bala. A escolha é sua. Que mecânica de jogo você tem em seu jogo? Faça isso, aplique? Eu adoraria ver se você me mostrar. E não foi isso, espero que você goste. Espero que você esteja cometendo suas alterações a cada vídeo. E no próximo, vamos adicionar um alcance ao tiro inimigo para que não queremos deixar que nosso ME garanta de onde quer que no mapa queremos ter um, algum tipo de alcance em que o inimigo possa atirar em nós. Então, vejo você. 31. Faixa de fotografia inimiga: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, adicionamos um campo de tiro. É bem simples. Já fizemos isso. Você pode ver agora que o inimigo não atira mais em nós, a menos que paremos neste círculo vermelho. Quando fazemos coisas, ele começa a jogar seus tipos de flechas. Se estivermos fora, ele não os joga. Agora, não vamos perder mais tempo. Este vídeo não se trata apenas de criar o intervalo. Também tivemos um extra, vamos chamá-lo de lição. E aqui, um ponto extra para criar. Usamos o conhecimento de nossos métodos. Então, não vamos perder mais tempo conversando e vamos começar. Oh, ok, então é hora de adicionar um campo de tiro ao nosso inimigo. Mas antes de fazermos isso, há uma coisa que precisamos cuidar e que a espada não estava sendo destruída quando atingiu algum tipo de gatilho. E você pode estar pensando, bem, por que isso está acontecendo? Mesmo que tenhamos a bala inimiga no gatilho, tudo está funcionando. Há um pequeno detalhe que eu deveria ter dito que cometi o erro. Precisamos de um corpo rígido 2D aqui, mas precisamos torná-lo cinemático. Então, agora, quando o sal voador tiver um corpo rígido até o fim é cinemático, ele será destruído quando atingir uma parede com isso fora do caminho. Desculpe-me por não dizer isso antes de eu te dizer que você não deveria ter um corpo rígido. Deveríamos, mas deve ser cinemático. Então, vamos continuar. Do que precisamos? Precisamos ter a capacidade de mostrar ao jogador apenas em um determinado intervalo. Como fazemos isso? Dando a você um desafio? E seu desafio é criar um campo de tiro com cores. Portanto, crie uma variável flutuante para o campo de tiro. Antes que possamos atirar, certifique-se de que estamos no campo de tiro, verificando a distância entre o inimigo e o jogador e desenhe um amarelo. Não sei por que disse o amarelo porque já temos amarelo. Escolha a cor que você quiser e certifique-se que esse é o campo de tiro. Garante que o inimigo não atire a menos que o jogador esteja nesse campo de tiro. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então, vou entrar no controlador inimigo. E onde filmamos? Lá vamos nós. Este é o tempo entre os tiros. E vamos em frente e adicionamos. Acho que este é um bom lugar para adicioná-lo. Então, vou criar um campo serializado, que será um flutuador, e será o campo de tiro. Salve isso. E então vou rolar para baixo aqui. Vou verificar se não somos um atacante masculino e estamos prontos para atirar, então vou em frente e aqui antes de verificarmos a condição, criar uma variável que será o flutuador. Ou saiba o que, não vamos criar uma variável extra. Vamos colocá-lo aqui. Vamos adicionar outra condição. E essa condição será que um vetor três e calcule a distância entre a camada a ser perseguida. Lá vamos o jogador para perseguir posição do ponto de transformação de pontos. E vamos verificar a posição do ponto de transformação do inimigo. E se for menor que o campo de tiro, então vamos iniciar a condição. Agora você notou que essa linha é um pouco longa. Então, o que podemos fazer é simplesmente ir isso, clicar em Enter, entrar aqui, clicar em Enter. Então agora eles estão em linhas separadas. Podemos vê-los com mais clareza. Se você quiser, você pode mantê-los na mesma linha. E essa é uma maneira melhor de olhar para as condições. Também podemos adicionar isso aqui para que saibamos tudo. Com isso feito, vamos economizar oh, e precisamos desenhar o mais longo. Então, vou seguir em frente e duplicar essas duas linhas. E vou deixar a cor não amarela. Vamos torná-lo azul. E este vai ser o campo de tiro. Salve isso de volta em nosso jogo. Vamos ver o inimigo. Agora, o que você quer que o campo de tiro seja? Claro, isso dependerá de como o jogo será. Então, por exemplo, você pode tornar o campo de tiro um pouco maior, mas talvez talvez você queira que a perseguição do jogador esteja por aí assim. Então, o inimigo pode precisar perseguir um pouco o jogador. E quando ele está no alcance, ele começou a atirar, ou podemos fazer o que quiser. Depende do seu jogo. Basta adicionar o slide aqui, circulado rotulado maior, salvar isso, executar o jogo. E agora devemos ver que o inimigo não atira até conseguirmos um alcance. Então lá vamos nós. Ele começa a atirar no jogador. Se sairmos, ele continua atirando? Sem pagamento, não faz. Ele pára. Estamos em seus frutos. Estamos fora. Ele pára de atirar. Certo, ótimo. Então, trabalhando, acredito que ainda temos um pouco de tempo e usaremos esse tempo para organizar tudo o que temos aqui. Então, qual é o problema? Você pode ver que tudo está funcionando. Não temos erros. Mas o código é muito API. Você pode ver aqui que temos essa atualização e essa atualização faz muito, e isso não é algo que queremos um par. E o jogador, você pode ver o controle do jogador. Temos muitas linhas de código e elas são bagunçadas. O que acontece aqui? O que fazemos? Devemos fazer um movimento para reproduzir o que está acontecendo aqui. Então, vamos, é claro, corrigir isso criando ou usando nosso novo conhecimento encontrado de criar métodos. O que podemos fazer é, por exemplo, digamos onde o jogador está andando? Então esse é o movimento que normalizamos, damos velocidade. Então, desde a primeira linha até esta linha, estamos movendo o jogador. Vamos seguir em frente e selecionar todos esses. Vou selecionar essas linhas. Vou clicar com o botão direito do mouse. E você pode ver aqui que temos as ações rápidas e refatoração. Então, quando clico nele, você pode ver que ele nos dá a opção de extrair um método. Vou clicar em Extrair Método e agora você tem um novo método. Como você quer chamá-lo? Vamos chamá-lo de jogador em movimento. Pressione Enter. Então agora você pode ver que todas as linhas desapareceram, mas elas estão armazenadas neste método pequeno e muito prático aqui em baixo. Então, agora sabemos que começamos movendo o jogador e, em seguida, temos tudo isso. Então, o que acontece aqui, a posição do mouse e o ponto da tela, calculamos o deslocamento, obtemos o ângulo, giramos o braço e, em seguida, verificamos se devemos ir de uma direção para o próximo. O que mais temos aqui? Vamos separar antes de tudo, o tiroteio. Então, vamos separar o tiroteio. E o que chamamos isso de jogador em movimento. E vamos chamar isso de entrada de tiro da camada. Isso é chamado isso em vez de mover o jogador. Isso é chamado isso, o jogador Movendo e controla o RR, é claro. E como queremos nos separar? Podemos chamar isso de animar o jogador se quisermos. E podemos chamar isso de colocando o jogador na direção certa. E este será. Mas, por exemplo, o que devemos chamar isso? Então, honestamente, tudo isso é baseado na sua preferência. Como você quer fazer isso? Então, vou chamar isso de clique com o botão direito do mouse. E é chamado de apontar. Apontando em nosso caso. Então, obviamente, você pode ver aqui o que aconteceu. Temos essa posição mais alta e ponto de grito. Isso significa que estamos retornando esses valores. Por que estamos devolvendo eles? Enquanto? Porque usamos o ponto de tela em outro lugar em nosso código. Isso é apenas dito se candidatar por enquanto, clique duas vezes no ponto de fluxo e lá vai você. Você pode ver que estamos usando a posição do mouse e o ponto de tela nesta condição if. Mas estamos calculando isso dentro do ponto em apontar. Eu não mudei o nome. Então você pode ver que é aqui que calculamos e é aqui que precisamos. Então criamos isso, mas eu não quero isso. Sinto que é um pouco ruim. Opa. Demasiado. Controle Z, camada. Movendo enter. Nós salvamos isso. Agora vamos seguir em frente e usar tudo isso, clique com o botão direito do mouse. E o que vamos chamar esse método enorme? Vamos chamá-lo, o que fazemos aqui? Apontando uma arma para o mouse, em Enter. Então você precisa do nome do método para descrever o que está acontecendo. E, finalmente, podemos dizer que isso está animando o método de extração do jogador. Animando o jogador V hit Enter e whoa, que diferença enorme que apenas fez olhar seriamente para a atualização, como ela está limpa agora, sabemos que o jogador está se movendo. Ele está apontando a arma para o mouse. Estamos animando o jogador e o jogador está atirando. E talvez você possa até extrair um método extra dentro das armas apontadoras para torná-lo ainda mais limpo. Porque, por exemplo, o que estamos fazendo aqui é que estamos, pode estar girando ou apontando o jogador na direção certa. Você pode até extrair esses dois métodos, até mesmo tornar isso mais limpo. Então, o tempo dela como um desafio, vou te dar a liberdade de extrair os métodos no controlador NMI. E te vejo no próximo vídeo, onde já terei feito isso. Talvez eu mostre o que você quiser. Faça você mesmo, divirta-se. Não há pressão aqui. Apenas tenha essa prática de fazer as coisas por conta própria. Claro, mostrarei os resultados mais tarde, mas espero que você goste e te vejo no próximo vídeo. Nunca se esqueça de confirmar suas alterações. Meu corpo. 32. Design de jogos: Bem-vindo de volta, meus colegas futuros desenvolvedores de jogos. Por que eu disse futuros desta vez não como as palavras regulares que eu digo. Bem, porque este é o vídeo em que você decide se quer se tornar um verdadeiro desenvolvedor de jogos ou só quer seguir os passos que eu faço. Porque este vídeo, tudo o que fazemos, extremamente simples. Já fizemos isso. Já fizemos tudo. Não há nada novo para aprender. Este vídeo é sobre usar sua imaginação e treinar os músculos do desenvolvedor de jogos que você tem. Eu te disse o tempo todo que você precisa adicionar sua própria criatividade e ao jogo. Até este ponto, você sempre acompanhou o que eu fiz 100%. Este é o momento de realmente pensar em diferentes maneiras que você pode usar ou em diferentes designs de jogos que você pode usar em seu jogo. Então, sem mais delongas não vamos perder mais tempo e vamos começar. Ei, bem-vindo de volta. Então, este vídeo é sobre design de gangues. Não vai demorar muito. Será apenas um exemplo de como você gostaria de projetar seu ganho. Então, obviamente, agora você já sabe que quando o inimigo está atirando em nós, à medida que você se aproxima, você pode ver que podemos disparar suas balas toda vez que o tiro em nossa direção. Certo, ótimo. Agora, isso é bom o suficiente. Mas e se o tempo entre os tiros for, digamos 0,1 do jogo novamente. Então você pode ver agora que as balas do inimigo estão se destruindo. Por quê? Porque é assim que configuramos as camadas. E mais uma coisa também, se formos em frente e tentarmos vendê-lo de volta a um, ok, então o inimigo dispara flechas. Vamos ver o que está acontecendo. 0 vezes 0, 0 sabe, volta aqui escolhemos o inimigo. Se os colocarmos, você pode ver agora que o inimigo começa a atirar em si mesmo. Lá vai você. Você pode ver que a bala do inimigo realmente o mata. Então, qual é o objetivo deste vídeo? É para lhe emitir esse desafio. E seu desafio será criar uma camada de bala inimiga. Então crie uma camada de bala inimiga, atribua-a às balas inimigas ou às balas, obviamente a, seja lá o que for, a espada ou talvez você tenha criado a sua própria, eu não sei. E então decida se você quer que as balas inimigas interajam com as balas dos jogadores com base no seu jogo. Se você quiser que as balas dos inimigos matem o inimigo. Se você quiser que as outras balas inimigas interajam com balas inimigas. Assim, esse é o ponto em que você decide como quer que seu jogo fique. Talvez inimigos se matarem se forem estúpidos, seja uma boa ideia que vai melhorar o realismo ou a sensação do jogo melhor do que ter a bala atravessar o inimigo. Talvez você não queira que suas balas destruam as balas dos inimigos. Então, isso adicionará uma jogabilidade mais desafiadora ao seu jogo. Aproveite o tempo para pensar em todas as maneiras que o jogo Sure pode se desenrolar. Então, com isso dito, pause o vídeo agora mesmo, vá para o desafio. Certo, bem-vindo de volta. Então vou em frente e adicionarei uma camada aqui que será as balas inimigas entrarem. Vá para o flanco, tipo esqueleto como as balas inimigas. Vamos para o Editar. Vamos verificar as configurações do projeto. As balas inimigas não devem interagir com as balas inimigas, e as balas inimigas não devem interagir com o inimigo, mas não temos uma camada inimiga. Bem, vamos em frente e acrescentamos, se eu verificar o inimigo, este deve ser o inimigo esqueleto. Entre. Vamos em frente e o prefabricado ele. Vamos criar uma nova pasta para os prefabs inimigos. Porque talvez você só queira criar outro mais tarde. Lá vai você. Vamos definir a camada dele como a, ok, nós não criamos a camada. O inimigo atingiu Enter. Selecione o cara. E vamos fazê-lo sim, mudar as crianças, salvar isso, executar o jogo. Então agora, se nosso inimigo esqueleto tiver um tempo entre tiros de 0,1 e vamos ver como isso parece. Lá vai você. Ele atira muitas balas e elas não se destroem. Eles são feios, mas não se destroem. Ou seja, vamos parar com isso por um segundo. Mantenha isso em um. Talvez aumente o alcance do fogo. Então, o alcance da caixa deles, onde está o tiro? Lá vamos nós. Aumente um pouco. Eu não moveria o jogador para o alcance. E eu vou selecionar o, onde ele está o inimigo? Vou movê-lo na frente das balas. Ele também está se destruindo com as balas z. ok, então ele ainda está. Então, precisamos adicionar as configurações do projeto. E o inimigo não interage com as balas inimigas, ou talvez o inimigo nem interaja com o inimigo. Então vai para você, qual é a sua preferência? Eu disse que você vai adicionar sua própria criatividade e ao jogo. Este é o momento se você ainda não fez nada, faça algo diferente de mim. Tente fazer os desafios o tempo todo. Certifique-se de tentar o seu melhor toda vez que puder criar um código melhor do que o meu não está recebendo. Às vezes recebo sugestões, sugestões de alunos incríveis e coisas que nem notei. Então eu sempre recomendo que você faça o seu melhor com isso. Espero que você goste. Se você ainda não deixou um comentário, faça-me o favor, faça a revisão, certifique-se de sempre confirmar suas alterações. Isso me ajuda muito quando você deixa um comentário em que todos saibam que este é um bom curso. Vale a pena assistir. Espero que você esteja gostando e eu o vejo na próxima seção, pode ser onde começamos a configurar o sistema de saúde se não me engano. Dito isso, verei você no próximo vídeo e seção. 33. Seção 5: criando quartos — introdução à lading na Unity: Bem-vindo de volta meus colegas desenvolvedores de jogos. E como você pode ver pela primeira vez, em vez de avançar, voltamos para trás e não temos mais antecedentes. Só temos esse mundo estranho na nossa frente. Não se preocupe com isso. Temos as ferramentas certas para resolver esse problema. Então, como você pode ver agora, não só temos um histórico, mas podemos desenhar nosso próprio plano de fundo. Posso adicionar o que quiser. Quero adicionar este e o nosso mundo. jeito nenhum. Vou adicionar este e atualmente não é perfeito, mas funciona. Então, eu vou, por exemplo, neste e vamos fazê-lo no chão. Lá vai você, com algum espaço azul por trás dele, mas não se preocupe, estaremos consertando isso mais tarde. Mas, por enquanto, vamos entender como convertemos sprites e ativos de azulejos em paletes biliares, desenhando-os na tela, como você pode ver, extremamente profissionalmente. Então, não vamos perder mais tempo. E vamos começar. Oh, ok, então agora temos um jogador sólido, temos um inimigo sólido. Temos balas, temos camadas, temos efeitos, temos animações, temos tudo. O que não temos é o controle sobre a criatividade do nosso jogo. Então, atualmente, tudo o que criamos está apenas neste plano de fundo. É bom o suficiente. Temos os planadores de caixa, temos todos os limites, mas não é suficiente. E se quisermos criar nosso próprio nível? Obviamente, não podemos simplesmente procurar origens diferentes. Isso é o que faremos neste vídeo e nesta seção inteira. Agora, vamos clicar no conjunto de blocos. Eu criei uma pasta dentro dos sprites chamada de conjunto de pilhas. Vou entrar nos recursos e vou usar as catacumbas. Obviamente, se você quiser usar um conjunto de peças diferente, eu recomendo que você faça alguma pesquisa sobre arte de jogo aberto e adicione o seu próprio. Então lá vamos nós. Agora adicionamos a pasta. Se eu abrir isso ou talvez eu devesse abri-lo daqui e mostrar algumas coisas. Então você pode ver que temos essas velas, temos um sprite. Aqui está você. Você pode ver que este é o sprite. É exatamente o que é usado em segundo plano. E, na verdade, criei um, usei uma captura de tela e fiz dela um plano de fundo. Mas agora vamos aprender a usar esses quadrados para criar um mapa. Nós também temos as decorações, e eu deixei você, digamos capturas de tela ou imagens e os recursos que você pode conferir e ver como o mundo é criado. Então, sem mais ou fazer, como vamos fazer isso? A primeira coisa é que vamos para a janela. Vamos entrar em 2D. E você pode ver aqui que temos algo chamado paleta de azulejos. Então, vou clicar nisso e vou adicioná-lo aqui. E o que é a paleta de azulejos? Bem, é a ferramenta que Unity tem que nos permitirá desenhar diferentes tipos de, digamos que esses sprites ou os azulejos ou os ativos de azulejos. E talvez você esteja confuso. O que vamos fazer? Como vamos converter essa imagem aqui e duas peças e começar a se juntar? Bem, deixe-me explicar usando meu laser bacana. Então, a primeira coisa que temos a folha de sprite. Você viu isso, você notou enquanto eu estava mostrando que temos a folha de sprite. O que faremos é cortar a planilha. E vamos ter fatias desta folha de sprite. Depois de termos as fatias, o que faremos é convertê-las em ativos de mosaico. E depois de convertê-los em ativos de mosaico, vamos tê-los em nossa paleta de azulejos. Então você acabou de resolver a paleta de azulejos que eu adicionei agora. Você também verá isso em apenas um pouco quando convertemos nosso sprite e para este. E, finalmente, vamos desenhá-los e adicionar o inimigo e criar todo tipo de coisas legais. Então, antes de continuar, eu só quero mostrar o desafio agora. Eu não deveria, mas vou porque há o primeiro passo aqui que é importante o que outros sprites e azulejos você escolhe usar para seu ganho. Então, se você não gosta das catacumbas, talvez não seja seu estilo, não faz parte do seu jogo. Talvez você tenha jogadores diferentes inimigos é precisar de um ambiente diferente. Eu recomendo isso verdadeiro. Vá procurar sprites 2D. Talvez tenha, eu não sei, alguma cidade futurista de ficção científica. Talvez você possa criar o seu próprio se for tão bom, então você precisa dimensioná-los. E, finalmente, adicionou à Paleta de mosaico e crie seu novo conjunto. Não vou dizer pause o vídeo porque lá vai você. É bem simples. Estas são as instruções do desafio. Vou fazer isso na sua frente. Então, primeiro, precisamos cortar este mapa de mosaico. E isso é um pouco complicado de se fazer, porque às vezes você não obtém a melhor qualidade e precisará determinar quanto ou qual é o tamanho dessas fatias. Então, se eu tentar fazer automático, lá vai você, você pode ver que é meio cortado, mas eu não posso adicionar, por exemplo, uma parte disso ou um pequeno quadrado dessas peças. Então, o que vou ter que fazer é ter que ir em frente e escolher em vez de grade automática por tamanho de célula. E eu vou usar, vamos primeiro tentar 64 por 64. Quando eu corto isso, lá vai você. Você pode ver agora que temos fatias adequadas, mas elas não são boas o suficiente porque digamos que eu queira desenhar isso, eu preciso escolher essas quatro fatias e você vê que esta não está sozinha. Vou ter que escolher esses dois. Então, precisamos torná-lo ainda menor. E eu sei o tamanho. Deveria ser, creio eu, 16 por 16. E se eu cortá-lo, lá vai você. Você pode ver que eu tenho muito mais controle sobre como tudo isso funciona. E você pode ver como este é cortado, como todos eles são cortados. Eles são bons o suficiente, não perfeitos, mas são bons o suficiente, acredito que talvez se você tiver as habilidades, você pode ir em frente e adicioná-las você mesmo. Veja o que funciona, veja o que não funciona. Mas eu recomendo que você mantenha todos eles 16 por 16 e você verá o porquê daqui a pouco. Então, vou aplicar isso. E, obviamente, se você baixou seus próprios sprites, então você terá que, é claro, encontrar seu próprio tamanho de fatias. E, por algum motivo, hoje a unidade é extremamente lenta. Então eu apliquei as mudanças, cortei tudo. Então, agora, quando eu saio do Editor Sprite, lá vai você. Você pode ver todas as peças. Agora, qual é o próximo passo? O próximo passo é ir em frente e adicioná-los à Paleta de azulejos. Então, agora nós cortamos tudo. O próximo passo é criar os ativos de mosaico e tê-los na Paleta de mosaico. Então o que vou fazer é pegar esses Sprite fatiados e vou arrastá-lo para o nada. Precisamos antes de tudo, criar uma paleta. Então, qual será o nome da paleta? Vamos chamá-lo de catacumbas principais. Catacumbas, é assim que escrevemos catacumbas criam. Onde devemos criar isso? Bem, você pode adicioná-lo nos sprites ou pode ir em frente e criar um novo ativo aqui, que será o conjunto de arquivos ou paleta de mosaico ou o que você quiser chamar, insira, selecione a pasta e lá vai você. Agora você pode arrastar isso. Assim, você pode arrastar a imagem inteira, então arraste-a para a paleta de mosaico aqui. Onde você quer salvá-lo? Claro, essa também é sua escolha, mas farei é entrar no bloco definido aqui, e chamarei isso de pasta Ativos de arquivo. E vamos mantê-lo nos sprites porque já o ignoramos. E eu acho que é melhor ignorar os conjuntos de azulejos porque eles já são dependentes dos sprites. Então, depende de você. Talvez se você quiser mantê-los, se quiser alocar um pouco mais de recursos em seus commits, recomendo que você faça isso. Caso contrário, vou selecionar esta pasta. E agora você pode ver que os sprites estão sendo convertidos em ativos de mosaico. Então, usarei o poder da edição e farei isso em um segundo. Oh, ok, bem-vindo de volta. Então, agora temos tudo configurado. Se eu fizer essa paleta de azulejos um pouco maior, lá vai você, você pode ver todos os sprites que estavam inicialmente aqui estão agora. Aqui. Agora, você pode ter encontrado muitos problemas aqui, especialmente se você tentar fazer algo diferente de 16 por 16, você notará que eles estão todos em cima um do outro. É um pouco complicado se segurar. O que eu recomendo é sempre ter todos os sprites cortados do mesmo tamanho para que você não tenha nenhuma confusão e arraste a imagem inteira, nem todos os 11 por um. Então agora temos isso. Como começamos a desenhar? Bem, você pode ver que temos uma paleta, temos os ativos, mas o mapa de arquivos ativo não é nada. Então, o que vamos fazer é clicar com o botão direito aqui e vou entrar no objeto 2D. Então eu escolhi a hierarquia para os objetos, e você pode ver que tenho a opção de criar um mapa de mosaico. E eu tenho muitas opções. Posso criar isométrico, retangular x, ordinal e et cetera. Mas vou fazer é criar um mapa de pilha de forma retangular. E você pode ver imediatamente que eu tenho um mapa de mosaico ativo aqui. E o que posso fazer é que eu realmente posso duplicar isso e ter um segundo mapa de mosaico. E eu posso chamá-lo, por exemplo, de chão. E eu posso chamar isso de paredes. E agora posso escolher entre paredes e o chão. E por que isso é importante? Porque mais tarde precisaremos de níveis diferentes para o nosso jogo. Você verá isso no próximo vídeo quando começarmos a adicionar colliders e et cetera. Mas, por enquanto, o que vamos fazer, vamos salvar a cena da amostra. E vou entrar na pasta de cenas. E você pode ver que esta é a cena de amostra. Vou chamar isso de talvez teste um ou algo assim ou você pode chamá-lo de nível um, o que quiser. Vou chamá-lo de melhor. Ele nos pedirá para recarregar. Recarregar. Eu vou, não tenho certeza. Vamos manter a grade aqui. E vou duplicar esse. Então, agora temos essa ferramenta. Vamos para o teste2. Você pode ver o nome da mudança de cena aparece, então foi o teste um. Agora são dois. Vou excluir o plano de fundo. Então agora temos o jogador e o esqueleto apenas flutuando no ar. E agora o que vamos fazer é selecionar a grade, vou escolher o terreno por enquanto. Vamos manter tudo no chão e vou começar a desenhar. Então, o que devemos usar como solo? Você pode ver que este é o, e eu recomendo que você veja as imagens. Deixei os exemplos que você pode seguir. Mas, por enquanto, a primeira coisa é que vamos desenhar o chão. Podemos escolher entre um desses agora, obviamente não está muito certo. Mas não se preocupe. Vamos falar sobre algumas ferramentas que temos aqui. Então, antes de tudo, sempre que quiser escolher, certifique-se de saber em qual mapa de mosaico você está. Você saberá o porquê no próximo vídeo. Por que isso é tão importante? Escolha um dos azulejos. Então, vou escolher esses quatro. E agora você pode ver que eu posso simplesmente clicar aqui, mas eles são muito pequenos. Então, o que sempre fazemos, vamos para o conjunto de blocos, iremos para a imagem que usamos. E vamos acabar com o Inspetor. Vamos fazer 50. Aplique as alterações. Vamos ver o quão grande isso se torna. Ok, então não é suficiente. Vamos fazer 16. Aplique as alterações e elas devem preencher todo o quadrado. Certo, lá vamos nós. Então, alteramos o pixel por tamanho. Pixels por unidade, talvez até seja, devemos torná-los ainda maiores porque você pode ver aqui, há uma pequena linha azul fina que não queremos. Então, vamos fazer isso em torno de 15. Aplique as alterações. E lá vamos nós. Então, agora não temos mais nenhum desses contornos. Certo, ótimo. Vamos nos certificar de que eles são aplicados filtros de pontos. Então eles se tornarão muito mais crocantes. Certo, lá vamos nós. Agora, de volta à paleta de azulejos, vamos diminuir o zoom. O que temos aqui? Temos o chão, temos os diferentes ladrilhos e as ferramentas aparecem. Então, se você passar o mouse sobre eles, poderá ver o que cada uma dessas ferramentas significa. Este para o select, este pode ser usado para o movimento. Mas os três mais importantes, acredito, é o pincel. Então, o pincel, como funciona? Então, por exemplo, o que quiser aqui, você pega o pincel e agora você pode pintá-lo em sua cena bem aqui entre os quadrados. Por exemplo, você também pode usar essa tinta, uma caixa cheia. Então, o que você pode fazer é escolher um desses ou você pode escolher vários, obviamente. E então você pode criar esse tipo de visual, pode criar esse mapa inteiro usando este. Portanto, é uma ferramenta muito poderosa para desenhar mais rápido. Então lá vai você, você pode ver, você pode criar muito mais, muito mais rápido, mas não é muito preciso. Então, o que mais temos? Temos o pico ou marquise select. Nunca usei isso honestamente, o preenchimento de inundação nunca o usou. E as matrizes, o que é muito importante. Então, como você faz isso? Você tem exatamente como as matrizes e, se quiser, você pode escolher um quadrado grande, selecionar a borracha, e lá vai você, você pode remover tudo. Então, com isso feito, espero que você tenha entendido o que fizemos. Espero que você tenha entendido como convertemos dos sprites para a fatia, para os ativos de azulejos, para a Paleta de Azulejos. E, finalmente, como estamos criando o mapa de mosaico. Mas, por enquanto, vou deixar você com sua própria criatividade. Então, pause o vídeo agora mesmo e tente criar um mapa de pilha ou mosaico ou qualquer mapa que você quiser. Mas, por enquanto, não demore muito tempo porque no próximo vídeo, vamos criar dois mapas de blocos diferentes. E usando esses mapas de mosaico, vamos entender por que precisamos de mapas de mosaico diferentes para diferentes níveis. E novamente, para que nenhum. Espero que você goste e te vejo no próximo vídeo. 34. Tilemap com tilemap: Ei, bem-vindos de volta, meus colegas desenvolvedores de jogos. Então, como você pode ver o que eu prometi que vamos torná-lo um pouco melhor. Eu cumpri minha promessa. Agora, quando executarmos o jogo, você notará que não há manchas azuis, nem linhas azuis. E se eu passei, tentei passar por isso. É uma parede. Se eu subir, é uma parede. Obviamente, temos algumas coisas que podemos mudar. Se você olhar atentamente no modo Cena, obviamente, ainda não é perfeito, mas você pode ver quando eu tiro em uma parede, é uma parede de trás, de frente, e o inimigo ainda nos persegue. Tudo está bom, tudo funciona bem. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, agora que configuramos tudo o tempo para usá-lo de forma adequada. Então, a primeira coisa que precisamos entender é o mapa de mosaico e o que o inspetor desse mapa de mosaico faz. Então, criamos as paredes, o solo, e você pode ver que elas também têm, cada uma delas tem um componente de mapa de mosaico e um renderizador de mapa de mosaico. Como o renderizador de mapa de mosaico funciona exatamente como o renderizador de sprite, também podemos escolher uma camada. Então, por exemplo, posso ir ao chão e escolher o fundo da camada, as paredes, o fundo da camada. E posso fazer, por exemplo, as paredes um e o Ground Zero. Você pode brincar se quiser. Você pode até criar sua própria camada de classificação dependendo quantas coisas você quer estar em primeiro plano ou segundo plano. Então eu vou, antes de tudo, excluir tudo ou apagar tudo, devo dizer? Então eu apago tudo e você pode ver por que isso não está sendo apagado. Então deixe-me aumentar a tela. Por que isso não está recebendo um aumento? Bem, porque estamos usando onde ele está? O mapa de mosaico ativo é o solo. Então, só podemos excluir coisas que estão no chão. Se eu escolher as paredes. Lá vai você. Agora posso excluí-lo porque quando criei isso, usei paredes. Então, vamos fazer um pequeno teste. Agora que temos as camadas de classificação, vou criar este grande quadrado aqui, que é, opa, não o chão, desculpe-me, o chão. E agora vou criar esse pequeno terreno aqui. E agora, se eu entrar nas paredes e vamos em frente e adicionar este. Então você se lembra por que tínhamos as linhas azuis antes? Porque tínhamos esses contornos aqui. Você pode ver que eles são transparentes, então eles só refletem o que estava por trás. Então, agora, porque estes são, deixe-me clicar neste. Então, agora porque estas são as paredes e as paredes são renderizadas na frente do fundo. Quando eu os coloco aqui, lá vai você, você pode ver que não há mais linhas azuis por trás das quais representam a cor do fundo da câmera. Eu também posso fazer isso aqui. Então, vou selecioná-los. E você pode ver porque elas são paredes, eu posso desenhar imediatamente em cima delas. Mas você pode ver agora mesmo a inconsistência, como faço, por exemplo, seca é ter uma terceira parede contínua e quarta parede. Bem, nesse caso, precisaremos selecionar algo diferente, que são essas linhas aqui. E agora podemos adicionar a ilusão ou criar a ilusão que temos. Deixe-me apenas criar a ilusão de que temos tudo isso conectado. E se você olhar no jogo, se eu executar o jogo, Além disso, não importa. Deixe-me fazer essa janela de jogo maior. Lá vai você. Você pode ver como tudo isso olha, parece como se tivéssemos tudo normalmente configurado e podemos simplesmente executar o jogo e andar por aí. E então você vai, você pode ver que eu posso andar por aí em cima disso. Tudo funciona perfeitamente bem. Mas o problema é que agora eu posso caminhar pelas paredes e isso geralmente não é um problema enorme, mas ter seu jogador sair para sempre mais, além disso, quando estamos atirando, você pode ver que as balas continuarão indo para sempre porque eles não estão interagindo com nada. Ou não temos mais paredes, elas não estão interagindo com as paredes. Então, como vamos consertar isso? Bem, podemos ir em frente e começar a adicionar colliders e todas essas coisas boas. Mas, obviamente, esta não é a solução mais eficiente para resolver o problema. O que podemos fazer, por outro lado, adicionar algo chamado colisor de mapa de mosaico. Então, se eu for para as paredes, e é por isso que criamos paredes, não apenas o chão. Vá para o Inspetor. Posso adicionar um componente aqui que será colisor de mapa de mosaico 2D. E lá vai você. Você pode ver que agora tudo sob as paredes tem o colisor verde nele. E você pode ver que eles estão se cruzando. Por quê? Porque nós os tornamos um pouco maiores do que onde está a imagem? Lá vai você. Nós os fizemos um pouco maiores que 16. Nós os fizemos 15. Se eu fizer 16, acho que podemos começar a ver rachaduras entre cada sprite. Agora você sabe o que? Parece bom o suficiente. Acho que não há discrepância. Ok, então vamos mantê-lo aos 16. Então mudei os pixels por unidade para 16. E agora, se eu escolher as paredes, ainda há uma interseção, mas tudo bem, isso não é um problema enorme. Deixe-me demonstrar que isso funciona. Então agora, se eu correr, você pode ver que eu bati em uma parede e não posso mais passar por ela. Excelente, tudo está funcionando. Eles estão na camada padrão. Você pode alterar a camada se quiser também de cada mapa de mosaico. Mas agora há algo que precisamos adicionar isso, adicionar esse planador não é suficiente. O que fazemos é que precisamos adicionar algo chamado planador composto. Por quê? Deixe-me mostrar como isso mudará tudo e você entenderá sozinho. Então, agora que eu adicionei um Collider composto, você notará que eu também adicionei automaticamente um corpo rígido. Portanto, um corpo rígido é necessário quando você tem um colisor composto. E se você olhar aqui no colisor de mapa de mosaico, você pode ver que temos algo chamado usado pela bússola. Se eu ligar isso, lá vai você. Você vê que não temos mais muitos planadores. Isso significa apenas fazer isso novamente, desmarque os EUA por composto notará que temos muitos colliders. Quando eu uso o composto, só temos um colisor em todas as formas. Isso é extremamente útil. Não posso enfatizar o fato de quanto isso economiza energia e energia computacional de nossa computação. Isso nos permitirá criar um único colisor em torno de muitos planadores emaranhados. Portanto, certifique-se de adicionar um collider composto 2D com isso. Entendido. Agora, é hora de um pequeno desafio. Ou antes de fazermos isso, eu só quero executar o jogo para talvez fazer você entender quais são os desafios. Se eu executar o jogo. E lá vai você, você pode ver que algo é definitivamente seriamente tornar essa parte do seu jogo algum, em alguns tipos de mecânicas do jogo. Então, o jogador brinca com o jogo e com o mapa. Então, ei, deixe-me apenas diminuir um pouco para que você possa ver que o mapa não está se comportando completamente como deveria ser. Acho que isso é um eufemismo. Deixe-me apenas tentar empurrar isso e lá vai você. Então agora não temos mais um mapa e ele continua caindo tão bem que entendeu. Fora do caminho, aquela coisa que pensaríamos que não resolvi o problema era o seguinte mapa. Se você não quiser nenhuma dica, você sabe como corrigir isso. Pause o vídeo agora mesmo, vá para o desafio. Caso contrário, verifique o inspetor no mapa de mosaico, você verá um corpo rígido. Isso significa que temos uma gravidade sendo aplicada. Remova a escala de gravidade ou melhor ainda, você pode tornar todo o objeto cinemático ou estático. Eu recomendaria estática porque estática significa que ela nunca se moverá e, obviamente, nosso mapa não deve se mover a menos que você queira, eu não sei, adicionar o mapa rotativo. Coisa estranha que acabamos de experimentar. Então, com isso feito, pause o vídeo agora mesmo, vá fazer o caldeu. Certo, bem-vindo de volta. Então, como você se deu bem com isso? Vou seguir em frente e enquanto as paredes corpo rígido fazem a estática, execute o jogo. E agora devemos ver que não há mais nada caindo e todos os coliders funcionam perfeitamente bem. Ok, com isso feito, espero que você goste. E no próximo vídeo, certifique-se de criar algum tipo de mapa. Deve ser maior do que a câmera porque estaremos implementando um acampamento de outono. Então, por que isso? Bem, se eu digamos adicionar um pouco mais de terreno aqui, certifique-se de que temos o terreno selecionado. Eu adiciono o chão. Vamos ver se eu faço disso um terreno enorme. Eu executo o jogo. Quero poder andar pelo nosso mapa e passarela, assim como o jogo que vimos no começo. Então eu quero ter a liberdade de andar por aí. Mas, obviamente, se eu olhar no menu do jogo, não consigo ver nada. Eu posso vê-lo no modo de cena. Não consigo vê-lo em nosso jogo. Por quê? Porque a câmera aqui, você pode ver, deixe-me apenas esta é a câmera, esta é a câmera principal, então teremos que movê-la para que possamos sempre seguir o jogador. E isso é algo que vamos aprender no próximo vídeo quando se trata de cinema cine, espero que você esteja gostando, espero que você esteja sempre cometendo suas mudanças. E espero que você tenha deixado um comentário porque isso me ajuda muito. Vejo você no próximo vídeo. 35. Como criar uma sala maior (Cinemachine): Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, o que fizemos foi quando executamos nosso jogo, você notará que, à medida que andamos por aí, podemos passar por toda a sala e a câmera continua nos seguindo. E fazemos isso usando algo chamado máquina do Senado, que é uma ferramenta extremamente poderosa que vamos implementar neste vídeo. Então, não vamos perder mais tempo. E vamos criar esses filmes. Olhe como isso é legal agora, nosso jogo é muito, muito melhor, se sente muito mais profissional, não é? Quando você tem uma câmera seguindo, não vamos perder mais tempo. Vamos começar. Certo, então bem-vindo de volta. Como você pode ver, criei uma espécie de mapa. Acho que isso só me torna maior. Por favor, desencaixe, por favor. Certo, lá vai você. Abra isso. Ok, então este é o nível que eu criei. Não é muito, mas funciona. Então, como você pode ver, eu adicionei essas duas janelas. Espero que você tenha aproveitado o tempo para brincar e entender como tudo isso funciona. Levei cerca de duas a três horas brincando, certificando-se de como tudo parece e funciona e assim por diante e assim por diante. Mas esse é o resultado que temos. Você pode ver que eu tenho um par de, ok, isso é um erro aqui, por exemplo, você pode ver que eu adicionei muito preto e o fundo. Você saberá o porquê daqui a pouco. Eu fiz as paredes aqui que não podemos atravessar. E eu fiz algumas paredes aqui são infundidas algumas coisas juntas para criar tudo isso. Então, algumas paredes pretas, algumas causas naturais, estudioso, até paredes avermelhadas e assim por diante e assim por diante. Mas o problema é que se eu fizer essa janela menor, coloque-a aqui. Phi 12, execute o jogo. Então lá vai você. Se eu executar o jogo, posso andar por aí e todo esse mapa, mas não consigo me ver na visualização do jogo. Então imagine se não tivéssemos a visão da cena, como seríamos capazes de nos ver? E, na verdade, você pode testá-lo. Você pode maximizar o jogo. Então, quando executarmos o jogo, teremos uma tela cheia. Ok, então agora eu quero ir embora, mas lá vai você. Você não pode ver nada. Enquanto o jogador, por favor, oh, lá vai você. Aí estamos nós. E agora tentamos atirar. Há um pouco de atraso, um pouco de atraso, mas não se preocupe com isso. De qualquer forma, como vamos consertar isso? Bem, o que podemos fazer é ir em frente e anexar a câmera ao doom player e torná-la uma criança. E lembre-se de que a câmera ou uma criança sempre se move com o jogador. Então, se eu executar o jogo agora, lá vai você, problema corrigido agora temos um acampamento de outono. Espero que você tenha gostado do vídeo e eu te vejo no próximo. Só estou recebendo. E o que vamos fazer é usar uma técnica muito mais sofisticada para ter nosso folículo. Então, vou remover a câmera principal do jogador do condenador, filho ou pai, seja lá o que você quiser chamar, salve isso. E então vamos para a janela. O gerenciador de pacotes aguarda a Riunite buscar nossos pacotes. E qualquer dia agora. E aqui vamos entrar no Registro Unity e vamos encontrar esta máquina aqui. Quando você encontrar algumas máquinas, basta clicar em Instalar, aguardar a instalação. E quando terminar de instalar, você pode ler mais sobre. Então você pode ver aqui que é uma ferramenta de câmera inteligente para criadores apaixonados. Muito bom. Então, teremos essa guia extra exibida, que é a máquina de cinema. E você pode ver que podemos criar muitas coisas com a máquina de cinema. E o que realmente queremos é criar uma câmera virtual. Então, vamos fazer isso. Vamos criar uma câmera virtual. Você verá isso aqui. O C e V Canvas apenas chamam de câmera virtual. Pressione Enter. Vou configurá-lo aqui ao lado da câmera principal. E na câmera principal, vou entrar no inspetor. E imediatamente posso ver aqui que adicionamos algo chamado cérebro da máquina de cinema. E se você ainda não tiver esse componente em sua câmera, certifique-se de adicioná-lo porque é isso que nos permitirá usar a câmera virtual. Então, o que é a câmera virtual? Você pode ver que é apenas uma transformação com esse componente, que é uma câmera virtual de máquina central. Tenha isso em mente. Vou me abrir e você pode ver que temos muitas coisas que podemos acrescentar, podemos mudar, podemos brincar. Não vou entrar em todos os detalhes aqui porque há muito. O que vou fazer é antes de tudo, clicar com o botão direito do mouse e a hierarquia. E eu vou realmente definir isso todos os 200 000. E você pode ver que temos algo que acabou de desaparecer. E o que parece ser o problema aqui, câmera virtual. Então, a câmera principal. Ok, então se eu entrar no modo 3D, você notará que quando o z é 0 significa que está na frente, então não podemos, na verdade estamos olhando por trás. O que eu preciso fazer é movê-lo um pouco. De volta para que possamos ver a visualização e você pode ver a câmera em 3D aqui. Essas linhas brancas representam o que a câmera vê. Vou voltar para 2D, e depois vou para a câmera virtual. Você pode ver aqui que temos uma opção para seguir e o objeto com o qual a câmera deseja mover ou o corpo e o alvo. Então, qual é o objeto que eu quero mover com o doom player? Então, vou adicionar o doom player, e vou salvar tudo isso. Vamos também nos certificar de que temos essas câmeras bem emplumadas. Então, vou criar um objeto de jogo vazio, redefinir sua posição será as câmeras. E vamos nos certificar de que essas duas câmeras são filhos das câmeras. E agora nós os configuramos corretamente. Salve isso quando eu executar o jogo, lá vai você. Você pode ver que agora eu tenho uma câmera de acompanhamento muito boa que segue o jogador em qualquer lugar que ele vá. Mas há muitas coisas que podemos mudar usando essa câmera. Então, vou antes de tudo, sair do molde de argila, garantir que não maximizemos o jogo. E vou entrar na câmera virtual. E o que são todas essas coisas aqui? Você pode ver que podemos mudar isso de transposição para outras coisas. Como eu disse, vá e veja o que todas essas coisas. Mas uma das coisas que queremos mudar principalmente é decomposta aqui. E você pode ver que a aparência é necessária. Você pode escolher algo diferente. Você pode optar por não fazer nada com o objetivo. Essas são todas as opções que você pode usar. E aqui você pode ver que podemos mudar isso para transposição de enquadramento. Então mude o corpo para transposição de enquadramento. Se você adicionar o lookahead, se eu adicionar o jogador de cúpula e olhar para frente, veja o que muda. Então, agora, quando eu jogar o jogo, você verá algo um pouco diferente. Acho que sei até agora parece ser o mesmo. Você pode manter o olhar à frente. Você pode mudar, brincar com as opções. Só vou mostrar as principais coisas aqui. Então, no corpo, em primeiro lugar, você pode ver as janelas aqui, as diferentes cores do jogo. É porque o guia do Windows do jogo aqui no Inspetor, posso ativá-los e desativá-los. Então, o que temos? Primeiro de tudo, temos o olhar para frente, temos o alisamento lookahead, temos o amortecimento x, amortecimento e assim por diante e assim por diante. Eu nem sei a maioria das coisas o que eles fazem exatamente. Mas um truque muito bom que você pode fazer é realmente ir em frente e aumentar isso ao máximo e depois jogar o jogo e ver o que acontece. Então, como você pode ver, sim, lá vamos nós. Portanto, a câmera é mais rápida que o jogador. E isso ocorre porque o olhar à frente é muito forte. Então, se eu suavizar o olhar para frente, você notará que, à medida que andamos, as câmeras começam a se mover na frente do jogador e é representada por esse pequeno ponto amarelo. E aqui você pode ver que o ponto prevê onde o jogador está prestes a ir e define a câmera para ir lá apenas um pouco mais rápido do que o jogador. Se eu defini-lo para 0, ele simplesmente se moverá com o jogador enquanto ele está indo. Podemos aumentar a suavização um pouco maior, olhe para frente suavização. Então agora você pode ver que é um pouco mais suave, um pouco mais agradável. E isso, lá vai você. O que mais temos? Podemos ignorar o y, modo que isso mudará a aparência na direção y. E vamos ver o que mais temos? Temos o amortecimento x, então vamos colocar isso em 20 e ver o que acontece. Então lá vai você. Você pode ver que quando o jogador atinge o lado vermelho deste quadrado ou retângulo, você pode ver que, em seguida, a câmera começa a se mover e, se não, ela é lenta, lentamente vai para o x, ou você pode configurá-la para 0. E nesse caso, sempre que estamos nos movendo, ele está imediatamente seguindo a camada. Vamos colocá-lo de volta para um. Vamos ver o que mais temos. Temos o amortecimento y, amortecimento V, z. Vamos ver, temos a tela x. Vamos ver se a movemos para que possamos jogar nosso jogo com o jogador sendo capaz para a direita. Podemos configurá-lo para estar no meio, ou podemos definir o widescreen para estar na parte inferior. Então lá vai você. Temos a distância da câmera, que é um toque muito bom, e atualmente não está funcionando. Talvez seja porque a câmera aqui deve ter um tamanho maior. Não sei qual é o problema aqui. E vamos redefini-lo. Então, volte aqui, redefina tudo. Então, vamos mantê-lo às 10. Temos a largura da zona morta. Então, se eu aumentar a largura da zona morta no y e no x, veja o que acontece. Se eu mover para cima e para baixo e para a esquerda e para a direita, ele permanece no lugar. E se eu sair dos limites, começaremos a ir enquanto a câmera começa a ir com o jogador. Então isso também é algo que você pode ajustar e brincar. E, na verdade, eu gostaria de torná-lo um pouco pequeno. Por exemplo, se eu andar por aí, nada acontece e quando eu começar a me mover, a câmera começa a seguir o jogador. Ok, vamos fazer isso em torno de zero ponto dois por 0,2. E lá vamos nós. Para que possamos nos mover um pouco. Mas quando saímos dos limites, as câmeras começam a nos seguir. Certo, muito bom. O que mais temos? Temos a profundidade da zona que tentou colocá-la em 100, ver o que acontece. Não tenho certeza do que exatamente faz. Mas vamos mantê-lo em 0. Vê o que acontece agora? Sim. Oh, ok. Parece mudar muito. Acho que vamos colocá-lo em 20. Nada, nada acontece. Vamos mantê-lo às 20. A largura da zona macia, acho que a Zona Sul é o quadrado vermelho. Então, se eu configurá-lo para, digamos, ser pequeno, o que acontece então? Não consigo nem sair por causa do coração ou da largura da zona morta. Certo, não se preocupe com isso. Redefina a posição. Vamos ver que temos o viés. Então, o que acontece? Ok, então agora a zona vermelha é tendenciosa em direção à zona azul, e você pode ir em frente e procurar tudo isso sozinho. E a única coisa aqui é que a câmera virtual como um mundo inteiro por si só. Então, se eu quiser entrar em cada detalhe, acho que preciso de uma seção inteira por si só. Mas usar a máquina de cinema como uma ferramenta incrivelmente poderosa e uma das ferramentas mais modernas que temos em nossa posse. Então eu recomendo o que você faz é brincar com todas essas configurações. Veja o que funciona, veja o que não funciona. Mas lembre-se, como você viu agora, todas as mudanças que fizemos voltaram ou foram redefinidas. Por quê? Porque todas as mudanças que fazemos dentro do modo de jogo são então redefinidas quando paramos de jogar o jogo. Com essas informações, recomendo que você passe pela documentação da Unity da máquina do Senado, veja o que acontece, veja o que você pode usar. Por exemplo, temos algo chamado barulho, que usaremos em alguns vídeos para tornar nossa mecânica de filmagem um pouco mais impactante. E isso foi feito antes de eu ir, deixe-me lhe emitir um pequeno desafio e seu desafio será configurar sua máquina. Então, brinque com todas as configurações que você tem na mesma máquina. A melhor maneira de saber o que cada coisa faz é levá-la ao máximo e ver o que acontece então. Bem, essa informação, espero que você goste. E no próximo vídeo, vamos criar as portas ou o que quer que você queira chamá-las, você pode chamá-las de portas, ou você pode chamá-las de lugares onde passamos de um nível para o próximo para os níveis de saída, seja lá o que você quiser chamá-los. Tão bem feito isso. Espero que você goste e te vejo no próximo vídeo. 36. Como criar portas de fechamento (para cada loop) (loop): Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. Como você pode ver, adicionamos alguns quartos ao nosso jogo. Adicionamos alguns caminhos ao nosso jogo agora nosso nível, ou na verdade eu deveria ter dito nosso nível. Agora nosso nível parece muito bom. Você sabe que a máquina Cinna realmente adicionou algum sabor ao jogo, o que nos deu a capacidade de correr e fazer níveis maiores e mais interessantes. Mas essa não é a única coisa que é muito legal. Se eu executar o jogo, olhar para a cena, você pode ver que agora temos portas que estão impedindo nosso caminho de se mover. E estas serão as portas que costumávamos ir para o próximo nível depois de matarmos nossos inimigos, obviamente precisamos matar nossos inimigos. Mas isso não é da nossa preocupação agora. Mais tarde, será. Mas, por enquanto, não vamos perder mais tempo e vamos começar. E estaremos aprendendo cheio de coisas incríveis, incrível caso 0. Então, vamos seguir em frente e criar portas. Quais são as portas? Eu criei a porta já, você pode vê-los aqui. Vou lhe fornecer a porta e os recursos, mas é bastante simples. Tudo o que fiz foi recortado onde está? A foto principal? A imagem principal. E basta usar a porta que já estava disponível lá. Então agora podemos ir em frente e adicionar a porta ou vamos adicioná-la aqui. Então temos a porta, colocamos a camada talvez no jogador ou podemos definir a camada no, em uma porta separada. E o que essas portas vão fazer é seguir em frente e fechar esses dois caminhos que eu também criei e não falei sobre isso. Então, qual é o objetivo do nosso jogo? Como vamos fazer a transição de nível para nível? Assim como vimos no jogo de hades. Toda vez que matarmos todos os inimigos, teremos essas duas barricadas. Teremos esta porta e uma segunda. Então aqui duas portas. E quando matamos todos os inimigos, simplesmente desativaremos as portas. E isso permitirá que nosso jogador se mova através e para o caminho onde ele encontrará dois portais aqui e ele pode passar por eles. Mas não vamos nos antecipar. Vamos antes de tudo começar certificando-se de que essas portas funcionem e o que mais queria lhe dizer? Oh, tudo bem. Então, se você entrar nessa paleta de azulejos aqui, você pode ver que podemos adicionar essas duas âncoras ou onde quer que você, esses caminhos aqui. Mas o problema com esses caminhos, se eu clicar na grade e na parede, você pode ver que eles também impedirão o jogador de se mover. Então, o que eu quero dizer? Eu me certifiquei de que este é o chão e estes são a parede. E se eu, por exemplo, executar o jogo, você verá que posso andar por aí em todos os lugares. E se eu passar por aqui, você pode ver que eu não posso mais me mover. E isso é porque temos um colisor embaixo e isso é algo que teremos que consertar para passar por eles, obviamente. Então, como vamos consertar isso? Bem, se entrarmos em nosso conjunto de azulejos aqui, os cones, se rolarmos para baixo, podemos encontrar a imagem aqui. Vá para o inspetor, selecione o Sprite Editor. Abra isso. Se passarmos do Sprite Editor para a forma física personalizada, vamos clicar aqui. Você pode ver que se nós, Onde está, ok, então a âncora e aqui, se clicarmos em um desses, podemos gerar. E agora temos os pontos âncora da física. Então é assim que o colisor será renderizado neste sprite. Então, vou me certificar de que é muito ou nem pequeno. Vou me certificar de que é cerca de 0. Então, aproveite isso assim, assim, e finalmente, minta isso. Vou aplicar as alterações e esperar por apenas um segundo. Levará um pouco de tempo para mudar os colliders e o jogo Além disso, talvez tenhamos que desenhar esse preço novamente. Ok, ótimo, então este está acabado. Vamos gerar neste bloco. Também. Mova para cá. Não precisamos movê-lo para baixo como o do meio. Podemos simplesmente movê-lo para a direita. Aplicar. Agora, o colisor só estará deste lado. E, finalmente, encontre qualquer dia. Agora, podemos clicar no último, gerar OK. Não o último. Na verdade, ainda temos mais dois a fazer. Então. Agora que você sabe como isso é feito, eu vou fazer o acima e obviamente espero que você esteja fazendo isso ao mesmo tempo comigo. Isso não é um desafio. Isso é só nós tornando nosso jogo muito melhor. Então, gere, gere, mova isso para a esquerda, eu aplico as alterações. E por algum motivo é extremamente lento. Achei que poderia ser um pouco mais rápido. Então, vamos lá, Generate. Mova isso aqui. É assim, assim. Aplicar. E estou tão animado para mostrar como tudo isso vai funcionar. Final, gerar o quão chato é isso? Sim, é. Sei que é por causa do tempo de espera que temos que esperar pela unidade para gerar física. Então eu acho que deveríamos ter movido isso para baixo também. Deixe-me ver algo também deveria ter sido movido para baixo. Assim mesmo. Agora aplicamos as alterações. Agora, se voltarmos, talvez devêssemos atraí-los de volta. Talvez não devêssemos. Esse é o problema com limitado. Se chegarmos perto quando a unidade do que abri-la, talvez não encontremos esse problema. Então, vamos ver o que temos. Então lá vai você, as paredes ainda estão lá, mas se eu escolher essa outra hora, e eu desenhar isso, vamos dizer aqui. Ok, então obviamente há algo muito errado aqui. Oh, ok, então tivemos um pequeno problema técnico. Agora, se eu clicar nas paredes, pensei que para um secundário não funcionou, mas funcionou. Agora, se você vir as paredes, o colisor não está mais aqui e apenas nos lados em que se destina a estar. Agora, quando executo o jogo, eu olho aqui. Se eu subir, lá vai você. Posso percorrer eles. Agora, obviamente, há um problema que é que estou andando sobre eles. Vamos consertar isso em um pouco, mas por enquanto temos isso funcionando. Talvez isso deva estar em uma camada diferente. Não se preocupe com isso. Vamos continuar. O que realmente precisamos fazer aqui? E precisamos adicionar as duas portas fechadas. Precisamos obter uma referência a eles e precisamos ter certeza que sempre que o jogador estiver na sala, queremos fechá-los. Então, vamos começar. A primeira coisa que queremos fazer é ir em frente e adicionar as duas portas. Então vou entrar nas portas e vou selecionar no inspetor aqui. E vou adicioná-lo na hierarquia, criar o objeto primeiro que Gore se encaixa aqui. Vou seguir em frente e defini-lo como o Charlotte o definiu como o jogador. Não se preocupe com isso. Vamos definir isso como camada, camada. Então esta é a porta, e eu vou duplicá-la. Esta será a porta 2 e vou movê-la para o outro lado. Ou você sabe, não vamos duplicar isso agora. Primeiro, precisamos adicionar um colisor de caixa porque não queremos jogar ou passar por esta porta. Então, vou adicionar um box collider 2D. E vamos ver como essa caixa se parece. Certo, acho que parece bom o suficiente. E agora vou duplicar esta porta. Esta será a porta 2, e vou movê-la para aqui. Então agora esses dois caminhos estão fechados. Vou executar o jogo. Vou tentar entrar pela porta e lá vai você. Você pode ver que eu não posso passar. Excelente. Agora, qual é o próximo passo? O próximo passo é que vou prefabricar isso. Vou entrar no pré-fabricado, clique com o botão direito do mouse. Criar pasta, sala ou salas ou errado. Isso será para qualquer coisa que envolva um quarto. E eu vou prefabricar isso e chamarei isso de simplesmente a porta. Lá vai você. E agora vou adicionar isso novamente nos prefabs. Então, ele está ligado ao pré-fabricado. Então, se alguma vez mudarmos alguma coisa, essas mudanças estão acontecendo para tudo. Ok, então vamos em frente agora e criar um objeto de jogo aqui, que será chamado de sala. Vou redefinir sua posição. E esta sala terá uma criança chamada de portas. E este será o objeto que manterá todas as portas que temos na sala. Agora vamos criar um novo script aqui. E vamos anexá-lo à sala, e este será o gerente da sala. Então, scripts, clique com o botão direito do mouse, vamos criar uma pasta para os gerentes. E aqui vamos criar um script C-sharp para a sala. Gerente. Pressione Enter, aguarde que ele seja compilado. Não, obrigado. Eu não preciso disso agora. E espere que ele seja compilado. Ok, então salas, vamos adicionar o roteiro aqui. Vamos abrir o gerente da sala. E o que precisamos aqui? Bem, precisamos ter uma variedade de objetos de jogo que representarão as portas que queremos fechar. Então, o objeto e a matriz do jogo, que são as portas para fechar. Salve isso. E agora o que queremos fazer é criar um gatilho enorme em todo o mapa. E, em seguida, verifique quando o jogador está dentro desta sala de gatilho. E por que precisamos estar dentro da sala de açúcar? Porque talvez. Por exemplo, você quer que seu jogo tenha um nível um pouco maior. Talvez quando você passar por algum tipo de porta, as portas se fechem e então o nível começa e até você matar todos os inimigos, então você pode sair da sala. É por isso que eu queria seguir esse processo de parada de ter portas fechadas somente quando o jogador está dentro do trono. Então, vamos primeiro adicionar essas duas portas para trancar isso nas duas portas das portas para fechar. Lá vamos nós, salve isso. E agora vou voltar e meu roteiro. E aqui vou criar um booleano que será um campo serializado. E essa será a porta fechada na camada. Entre. Salve isso. E o que vamos fazer aqui enquanto vamos passar por tudo isso no, no açúcar. Entre. Ok, isso deveria ter sido muito profundo. E, na verdade, vamos criar o empreendedor entrar imediatamente. E aqui vamos verificar se a tag collision.com é a camada. Agora vou trapacear porque já sei como o jogador está escrito. E vamos verificar se a porta fechada no jogador entrar. Ok, então agora queremos ir em frente e fechar nossas portas. Agora temos esse array aqui. O que devemos fazer? Devemos passar por todos eles e fechá-los um a um? Então eu deveria escrever porta para fechar, por exemplo, 0 ponto ativo para verdadeiro, e depois fazer porta um, porta a porta três. Poderíamos fazer isso, mas há um problema e não sabemos quantas portas teremos. Então, o que podemos fazer é que podemos fazer um loop através deles. E um dos primeiros loops completos ou primeiros que eu quero ensinar é o para cada loop. Então, o que é um loop para cada? Vamos ver como essa estrutura funciona. Ele permite que você passe por cada coisa em uma coleção de coisas do mesmo tipo em uma matriz. Então, o que quero dizer com as coisas? Então, digamos que tenhamos um tipo que, no nosso caso, é o objeto do jogo. A coisa é a porta nas portas que queremos fechar. Então, o que fazemos, como diz, para cada porta, que é do tipo objeto de jogo nas portas para fechar, podemos ir em frente e fazer coisas com ela. Por exemplo, podemos acessar algum método sobre a coisa. Podemos usar a coisa em algum outro método e podemos executar outras coisas. Então isso foi explicado o que queremos fazer? Nosso objetivo neste vídeo é ir em frente e acessar ou percorrer usando o For Each, queremos percorrer todas as portas e nos certificar de que definimos todas elas ativas como verdadeiras. Assim que o jogador entrar na sala, tudo será fechado até que ele mate todos os inimigos mais tarde. Então, com isso explicado, vou lançar um desafio para percorrer todas as portas e fechá-las. Então crie um loop para cada loop que passe por todas as portas endossadas fechadas. Defina, cada porta para ativa. E eu vou te dar uma dica. Use o conjunto ativo como verdadeiro. Já mostrei a você. Tentei dar-lhe tantas mãos quanto possível. Sei que talvez seja a primeira vez que você vê loops. Esta é uma ótima oportunidade para tentar ver algo pela primeira vez e tentar implementá-lo na sua frente sem que eu lhe ensine isso de antemão. Sei que é um pouco difícil. Eu o beberia como um dos desafios mais difíceis, mas não se preocupe com isso. Leve seu tempo. Pause o vídeo, tente fazer o seu melhor e te vejo daqui a pouco. K, Como você conseguiu tudo isso? Espero que não tenha sido muito difícil. Então, o que vamos fazer é criar um loop para cada. E como eu disse, vamos passar pelos objetos do jogo. E podemos chamar isso o que quisermos as portas, as portas que podemos chamá-lo de ABC você o que quisermos nas portas para fechar. E o que faremos aqui é simplesmente acessar a porta, ponto definido ativo. Verdade. Salve isso. De volta à Unity. Vamos seguir em frente e ativar essas portas. Então, digamos que eles estejam abertos. A primeira coisa que entramos na sala. Ok, também, eu não deveria ter clicado aqui. Vou ligar para trás a sala. Então, o que aconteceu aqui? E isso é algo que eu sempre caio pois tive o quarto e eu o tinha trancado. Então eu escolhi as duas portas e cliquei nesta. Então eu desliguei o quarto. Na verdade, você pode ver aqui o que você escolher, ainda é o quarto. Então, o que vou desbloquear isso mostra as duas portas. E eu vou fazer isso. Vá em frente e desligue-os. Vou para o quarto. Vou adicionar um componente que será um enorme colisor de caixa. Agora, o único problema aqui é que talvez o colisor verifique o jogador e quando ele ainda não entrou na sala. Então, vamos voltar aqui e ver no Trigger Enter. Quando entramos no gatilho, é quando esse método será chamado. Então, vamos ver. Não tenho certeza, às vezes é por causa de como o script é executado. Então o script da sala FVA executado primeiro, depois teremos a sala e, em seguida, teremos o jogador. Então, dessa forma, o jogador realmente entra. Então, vou salvar isso. Eu vou, ok, então este é um gatilho quando eu tenho um erro. Ok, então esse erro não é nada para se preocupar. Execute o jogo. Certo, então as portas não fecharam. Vamos escolher fechar as portas no jogador entrar. Certo, então lá vamos nós. Funcionou. Então, espero que você tenha entendido qual era minha preocupação. Às vezes, isso é o que acontece quando eu estava criando este jogo pela primeira vez. Isso é o que acontece. Então eu tive que criar algo diferente. Mas notei que às vezes funciona, às vezes não funciona. Eu só queria que você soubesse de antemão para que você não pense Oh, Michael, toda vez um erro. Agora, na verdade, espero que você goste. Espero que você tenha feito o para cada desafio. Sei que foi complicado, mas essa é uma boa maneira de praticar suas habilidades de desenvolvedor de jogos. Então, verei você no próximo vídeo, onde estaremos pegando todos os inimigos que temos para que possamos matá-los e depois abrir as portas quando eles morrerem. Então, verei você. Certifique-se de preparar todos os seus arquivos. Desculpe por isso. E certifique-se de me deixar um comentário se você ainda não o fez. Isso me ajuda muito. Obrigado. Vejo você na próxima vez. Ei, Michael aqui do futuro, você pensou que se livrou de mim, mas não o fez. Quando corremos o jogo, notei algo que você pode ver que eu estava me perguntando por que o esqueleto não estava atirando em nós e se eu tentasse atirar, você pode ver isso imediatamente. Eu tenho o efeito de impacto de bala. Qual é o problema aqui? Bem, porque estamos sentados dentro do colisor da sala, estamos atirando e ele está interagindo imediatamente com ele. Então o problema aqui é obviamente que são as camadas. Então, o que queremos fazer é adicionar uma camada. Podemos chamar isso de intocáveis ou o que você quiser chamá-lo. Vou chamá-lo de camada da sala. Pressione Enter. E vou entrar na matriz e aqui nas configurações do projeto. E vou me certificar de que a camada da sala não interaja com as outras camadas da sala com as balas inimigas. E talvez possamos até garantir que eles não interajam com nada. Honestamente, não precisamos deles, exceto para o jogador. Queremos ir em frente. Mas, por enquanto, vamos garantir que eles não interajam com a literatura de balas sobre se encontrarmos um problema, isso pode ser problemático e saber o quê. Só por esse motivo, vamos desligar tudo, salvar isso. Fechado do jogo. As boas portas devem fechar. E se atirarmos, algo ainda está errado. Oh, obviamente, precisamos defini-lo como a camada da sala sim. Crianças mudadas se você quiser executar o jogo ou não, talvez as crianças não devessem ter sido mudadas. Certo. Então a porta se fecha e podemos atirar normalmente. Talvez as crianças não devessem ter sido trocadas porque não quero que as portas sejam afetadas. Vamos mudar isso para o padrão. Sim. Crianças mudadas. Certo. Então agora podemos atirar nas portas, mas podemos atirar nas paredes, caso as portas. Sim. Tudo está funcionando bem. Então, do futuro, estou saindo. Vejo você no futuro. 37. Como coletar todos os arquivos (lists) (lists): Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Como você pode ver agora, temos três inimigos, x2, muito assustadores. Deixe-me maximizar o jogo. E temos um erro em não só ter portas, como também temos inimigos, que são três esqueletos. Esses esqueletos são os caras que precisamos matar para abrir as portas. Mas, por enquanto, o que fazemos é pegá-los no ato usando uma lista. Então eu maximizei no jogo, não deveria ter feito isso. Agora vou correr de novo. Se eu olhar para os quartos e hoje agora, posso ver que tenho os inimigos aqui e tenho as duas portas, mas a magia é que os pegamos sem adicioná-los manualmente. Você pode ver que isso acontece automaticamente usando filtros de contato, usando listas, usando muitas coisas legais. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então agora temos as portas fechando. É hora de começar a abri-los. Como abrimos as portas? A maneira como vamos permitir que eles abram é quando nos livrarmos de todos os inimigos que temos no mapa atual. Então, o que vamos fazer é criar uma variável que antes de tudo garantirá que todas as portas se abram quando todos os inimigos forem mortos. Talvez apenas o nível que você criou não tenha que matar todos os inimigos. Talvez seja um nível para a loja, por exemplo, assim como tínhamos no Hades. É por isso que adicionaremos essa variável. Então, vamos começar. Então, aqui temos o controlador inimigo. Como você pode ver, organizei tudo. De qualquer forma, não vamos perder tempo porque no gerente errado, vamos adicionar o volume aqui. E isso é abrir ou abrir portas. Quando e eu estamos dy. Lá vai você. Nós salvamos isso. Voltaremos aqui e vamos nos certificar de definir esta, esta sala em particular para ser aberta quando os inimigos morrerem. Certo, ótimo. A próxima coisa que precisamos fazer é obter uma referência de todos os inimigos. Bem, como fazemos isso? Obviamente teremos vários inimigos. Isso significa que provavelmente teremos que obter algum tipo de array. Mas por que não queremos usar uma matriz? Porque quando temos uma matriz, como vou demonstrar isso? Então, por exemplo, você pode ver aqui, se eu clicar em um desses arrays aqui, e se eu usar o menos, isso simplesmente removerá a porta do nosso jogo. Na verdade, ele não exclui todo o elemento. Então ainda temos duas portas aqui, mas uma delas está faltando. Agora, quando se trata da porta, isso não é um problema enorme porque já sabemos que teremos apenas duas portas. Não vamos contá-los. Não vamos nos livrar deles. Eles estão lá, são estáticos, não estão se movendo. Mas quando se trata dos inimigos, o que queremos é que queremos obter uma referência a todos os inimigos no mapa. E então, à medida que os matamos lentamente, um por um, vamos contá-los. E se descobrirmos que todos eles desapareceram , abriremos a porta. E isso causará um problema quando estivermos usando uma taxa. É por isso que vamos usar algo um pouco melhor, que é a lista. Então, uma lista é como uma matriz. Ela representa uma lista de objetos fortemente digitada. E a propósito, essas são as documentações da Microsoft para o C-sharp, não a documentação Unity, mas é praticamente a mesma coisa. Você pode encontrar exemplos, você pode encontrar o que quer e lista a grande coisa sobre eles, pois eles são muito melhores na classificação, eles são muito melhores em classificar e manipular. Então, o que podemos fazer é que cada inimigo morre, podemos removê-lo da lista sem nos preocupar com qualquer tipo de erro, a lista se ajustará. Então isso explicou, vou permitir que você encontre a lista, a classe, encontre a documentação disso. E vou lançar o desafio de novo, assim como o último desafio que conheço. Tão irritante quando você tem que fazer algo sozinho sem ver o que eu fiz primeiro. Mas é hora de crescer, hora de se tornar verdadeiros desenvolvedores de jogos, procurar problemas e fazer coisas que nunca encontramos antes. Essa é a beleza disso. Veja a documentação e descubra como podemos instanciar um novo. Vamos criar uma lista de campos serializados. Queremos ver a lista no inspetor. Mais tarde, obviamente precisamos torná-lo privado, mas queremos verificar se tudo está funcionando. E, finalmente, o tipo da lista será um colisor para D. Então encontre a documentação, passe por ela, crie uma nova lista, que é a lista de inimigos do tipo collider 2D. Vejo você em um pouco. Certo, bem-vindo de volta. Então, como você entrou nisso? Espero que não esteja muito zangado comigo. De qualquer forma, vamos seguir em frente e criar um campo serializado. E isso vai ser uma lista. E como você pode ver, bem, você viu no exemplo, vamos apenas verificar novamente e ver como ele é criado. Então você pode ver que ele precisa das coleções de pontos dos sistemas, que está bem aqui. Opa, desculpe, que está aqui que nos permite criar listas. Vamos ver o que temos aqui. Digamos que eu esteja rolando para baixo, como você cria listas, por favor? Como crio uma lista? Onde está isso? Onde está isso? Ok, então lá vai você. É assim que você cria uma lista. Então, precisamos digitar o tipo disso que temos dentro desses dois não naturais, o que eles são chamados e dizer que é igual a uma nova lista. Então, de volta aqui, o tipo collider 2D, eu já te disse isso. E você verá por que é um collider 2D em apenas um pouco. Então inimigos, e é igual a uma nova lista de Collider para os inimigos e nós a fechamos com esses dois parênteses. Agora, obviamente, você levou um pouco mais de tempo para encontrar tudo, talvez olhar pela documentação, mas isso é bom. Agora você pode dizer que orgulhosamente esse sapato olha através da documentação descobriu por si mesmo como as listas são criadas, e isso lhe dará muito mais confiança medida que você percorre sua jornada de desenvolvimento de jogos. Nem sempre estarei aqui. Às vezes não vou ser às vezes, não tenho tempo para responder. Portanto, este é um ótimo exercício. Adoro esses exercícios. Espero que você não esteja muito zangado. Vamos continuar. O que precisamos fazer agora? Precisamos entrar nos quartos aqui e vamos criar um novo objeto de jogo vazio, que será o inimigo. E isso vai conter todos os inimigos que temos. O inimigo esqueleto aqui que C ele precisa de alguma coisa? Também o campo de tiro. Vamos torná-lo um pouco menor para que não queremos que os inimigos atirem em nós. Sabemos que tudo funciona. Isso é bom e vamos fazer a saúde deles. Mas menor, talvez três. Então ele leva três hits, aplique as alterações. E vou movê-lo para os inimigos. Também vou entrar nos Prefabs e adicionar alguns inimigos. E aqui, então o inimigo, o esqueleto adicionará outro. Aqui. Outro, tão bom. Agora temos três esqueletos andando por aí que vão perseguir e atirar no jogador. Vamos salvar isso. Certo, ótimo. Agora, a próxima coisa que queremos fazer é que queremos obter o, uma referência a todos esses inimigos e poder contá-los. Agora, o que podemos fazer, obviamente, como podemos seguir em frente, selecione esses três e arraste-os para cá e defina-os manualmente. Isso seria bom, isso estaria funcionando. Mas queremos ter uma maneira mais dinâmica de acessar esses inimigos. Uma dessas formas dinâmicas é usar objetos de tipo find, onde passamos por todos os objetos e encontramos todos eles. Isso também é uma boa ideia, mas é muito taxante para o sistema. Você tem que passar por todos os elementos, começando pela câmera e para baixo até encontrar todos esses inimigos do tipo ou objeto do tipo. Não vamos fazer isso. Em vez disso, vamos fazer algo muito mais complicado no início, mas muito mais eficaz e menos taxativo sobre o sistema. E é uma ótima maneira de aprender algo muito novo. E já temos o, digamos que a infraestrutura para isso estabelecida por ter os coliders dos inimigos e o colisor da sala. Então, do que estou falando? Você acabou de ver. É o colisor, colisor de sobreposição 2D. O que isso faz? É preciso um filtro de contato, que veremos em apenas um pouco. E isso nos dá os resultados de todos os objetos 2D collider. Então, um filtro de contato usado para filtrar os resultados de forma diferente. O que queremos dizer com isso? Queremos dizer que temos o colisor da sala aqui. Então, temos o colisor, temos todos os objetos dentro. Não queremos pegar o jogador, por exemplo, estamos interessados apenas nos esqueletos. Então, precisamos adicionar esse filtro de contato que entenderá como ele é usado. Mas vamos continuar. Então, filtro de contato e o resultado, esse resultado, é o array. Para receber os resultados. Podemos usar uma matriz, podemos usar também uma lista. Não se preocupe com isso. Vamos continuar um. Do que precisamos? Portanto, ele retorna o número de resultados se quisermos um retorno e, em seguida, vamos verificar o que é um filtro de contato. Então, estou lhe dando todas as formas de como criamos. Então, honestamente, não fazia ideia do que era um filtro de contato. Esta é a primeira vez que encontrei quando eu estava criando este jogo, mesmo tendo tido muita experiência em desenvolvimento de jogos, esta é realmente a primeira vez que eu o usei no, então fui e procurei por ele. Ok, então olhe, temos muitas propriedades. E se você voltar, podemos ver aqui os resultados de forma diferente. E o que mais temos? Temos algo chamado máscara de camada bi. Eu sei o que é máscara de camada, então eu tenho que olhar e encontrar. Definir máscara de camada, excelente. Isso define a máscara de camada com base em algum tipo de parâmetro fornecido ou algo assim. Ótimo. Eu clico nele, vejo filtro de contato, máscara de camada. Eu dou uma máscara de camada. Eu sei qual é a máscara de camada e mostrarei como vamos usá-la. Mas, de qualquer forma, esses são os passos que até eu às vezes tomo. Então não pense que NOVO, não se lembre de tudo e você deve saber, não, você deve fazer sua própria pesquisa. Sempre olhe a documentação e agora vamos em frente e comece. Então eu vou voltar aqui e vou criar, em primeiro lugar, um colisor particular 2D, e este será o colisor de sala. Salve isso. E então um outro contato privado filtrado para D e será o filtro de contato para D. Vou manter o nome como está. Então agora e comece, o que vamos fazer? Bem, antes de tudo, precisamos de uma referência ao colisor da sala. Então o colisor de sala é igual a obter componentes. E vai ser o collider 2D. Ótimo, então agora temos uma referência ao colisor na sala. A próxima coisa que queremos fazer é obter o filtro de contato 2D. E vamos definir a máscara de camada como vimos. E o que dissemos que precisamos dentro do conjunto Layer Mask, precisamos da máscara de camada. Como obtemos a máscara de camada? Bem, sabemos qual camada é, mas qual é a máscara? A máscara é uma maneira de nos dizer para converter, para entender quais são as camadas. Então, o que podemos fazer? Podemos usar algo chamado máscara de camada. E podemos usar um método aqui que diz para obter a máscara. E como conseguimos a máscara? Podemos obtê-lo realmente comprar o nome das camadas. Ótimo, então agora temos acesso ao nome da camada. E o que faz a camada, é o inimigo. E como esta é uma referência de string, certifique-se de que o sapato tenha sido colocado corretamente, vá até copiá-lo se for necessário. Mas o que está acontecendo aqui, temos o nome da camada. Usamos a máscara get, que é um método disponível na biblioteca de máscaras de camada. Usamos essa máscara de camada inteira e definimos a máscara de camada no filtro de contato. Complicado, eu sei. E agora usamos o colisor de sala, pensamento sobreposição colisor. E aqui, o que precisávamos? Precisamos do filtro compacto para o, quais são os resultados? Onde queremos lançar nossos resultados? E você pode ver aqui a seta, se você clicar nela, lá vai você. Você pode adicioná-lo a uma lista ou podemos adicioná-lo a um collider 2D com base no que lhe damos. Então, se dermos uma matriz aqui, esse resultado será um array. Mas como estamos dando a ele atualmente uma lista, isso será como uma lista, salve esse registro. Então, novamente, vamos passar por isso mais uma vez. Criamos um filtro de contato. Entendemos quais filtros de contato são através das documentações da unidade. Adicionamos um collider 2D. Isso é muito simples. Temos uma referência usando o componente get. Já sabemos como fazemos isso. Acessamos o filtro de contato. Usamos um método chamado Definir máscara de camada. Este conjunto de máscara de camada requer um, algo chamado máscara de camada, não apenas uma camada, uma máscara de camada. Então, o que fazemos, procuramos obter máscara de camada. E isso realmente será um desafio visual para você. Vá procurar Layer Mask, obtenha Layer Mask e defina como encontramos esse método. Portanto, esse é um processo totalmente diferente. Usamos a máscara de camada get, que faz parte da máscara de camada e da máscara de camada do mecanismo Unity, e usamos o nome da camada inimiga. Então, agora o que acontece assim que esse gerente de sala começar? Primeiro de tudo, no Trigger Enter, ele encontra o inimigo. Em segundo lugar, ele olha todos os inimigos que já estão aqui. E como eu disse, existem muitas maneiras de pegar os inimigos. Há objetos encontrados do tipo. Podemos ter usado o empreendedor entrar, mas achei que essa é uma ótima oportunidade para aprender sobre listas. Saiba mais sobre o filtro de contato em nunca saber quando. Às vezes, você pode se encontrar em uma situação e programação em que você simplesmente não pode fazê-lo sem um filtro de contato. Então, salve tudo isso. Voltamos para a Unity e vamos olhar para nossos inimigos agora, assim que corremos, devemos ver os três inimigos aqui. Espero que execute o jogo. Lá vamos nós. Excelente. E você pode ver que temos todos os colliders do esqueleto um, esqueleto para e esqueleto três, ou como você quer chamá-lo. Excelente, temos uma referência a eles. Então, agora o próximo passo é matar todos eles e abrir as portas com azul que no próximo vídeo, certifique-se de concluir suas alterações. Certifique-se de deixar um comentário e verei você no próximo vídeo. 38. Portas de abertura 00: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, estamos tornando o jogo muito mais legal. Então, finalmente, esse vídeo faz com que tudo pareça incrível. Então, começamos o jogo. Começamos a correr por aí, oh não, há uma porta. Está fechado. Oh, não. Vamos para a porta ao lado. Oh, não, está perto. Há três inimigos aqui. Oh, eles tentaram atirar enquanto tentam seguir como não, nós matamos o primeiro. Talvez ele pegue muito disso é o segundo. Quantos são necessários? Um atingiu suas mortes e seu prazer, sangue. Chamamos isso. Tentamos matar o último. Estamos atirando nele enquanto ele atira de volta. Não, ele não é. Espere, mas Tim shu Ok, não está atirando. Então, devemos ter, há coisas voando em nossa direção. Devemos perto dele e ele morre. Incrível. Então lá vai você. As portas estão abertas. Passamos e agora podemos ir para o próximo nível ou poderíamos usar a outra porta porque ela também se abre quando matamos todos os nossos inimigos. Então, não vamos perder mais tempo. Vamos consertar essa coisa aqui, vendo as coisas azuis ao nosso redor, e vamos começar. Oh, caso. Então agora é hora de abrir as portas sempre que os inimigos forem mortos, vamos para os inimigos aqui ou na sala. Na verdade, execute o jogo. E vou tentar matar alguns inimigos que se abriram. Lá vai você. Vamos atirar no inimigo aqui. Três balas devem ser suficientes, e ele está morto. E você pode ver aqui que ele agora está desaparecido. Muito bom. Ele está desaparecido. O segundo está faltando. O terceiro também está faltando, então não temos mais inimigos. A porta deve abrir. O único problema é que ainda temos esses elementos aqui. Mas, felizmente, quando estamos trabalhando com listas, podemos realmente remover o item com muita facilidade. Então, a maneira como fazemos isso, à medida que entramos em nossa atualização aqui na atualização do gerenciador de salas. E vamos criar outro loop. E desta vez esse loop será um loop for. Então, o que é um loop for? Deixe-me explicar. Então, o que é um loop for? Loops podem executar um bloco de número de código. Tempos. Loops são úteis se você quiser executar o mesmo código repetidas vezes cada vez com um valor diferente. Agora, estou me aprofundando um pouco mais em loops do que fizemos com o para cada um, mas não se preocupe com loops são semelhantes aos loops para cada. Mas desta vez, em vez de usar os itens, usamos os índices e o lado da lista ou da matriz. Então você pode ver que isso continua a executar código dentro até que eu atinja um certo limite. O que isso significa? Vamos analisar essa sintaxe aqui e entendê-la melhor. Começamos escrevendo para, isso é bom. Instanciamos uma variável que é um número inteiro, provavelmente que é um I igual a 0. Depois, adicionamos esse ponto e vírgula. Então, dizemos qual é o limite para o qual o eu continuarei trabalhando. E então paramos e cada vez adicionamos um aos olhos. Então você pode ver aqui, isso mais, mais significa que sou eu mais um. Então começamos em 0, digamos que o limite certo seja três. Continuaremos percorrendo até que eu não seja mais inferior a três. Então começamos em 0, fazemos algumas coisas, executamos o código I plus, mais. Isso significa que eu me tornei um. Ainda é menos de três. Ótimo, continuamos. Temos eu mais dois, já que ainda é menos de três. É, continuamos. Eu é igual a três é ainda menor que três. Não, não é porque precisamos ser menores que 3 ou menos do que o limite certo. E vamos usar isso para ver que vamos contar com todos os inimigos. E quando estivermos no último inimigo, vamos seguir em frente e parar o loop. E em cada nível vamos verificar se esse inimigo é um objeto de jogo vazio, então vamos remover o item inteiro da lista. Então, vamos começar. Isso será um pouco complicado, mas fique comigo. Então, vou seguir em frente e criar um loop for. E em vez de ir do primeiro elemento para o último elemento, vou começar pela parte de trás. Então, eu vou ter um int Eu iguala a contagem de pontos de inimigos menos 1. Primeiro de tudo, qual é a contagem? Contagem de pontos de inimigos é o número de itens que temos na lista. E nosso caso, estes serão os três esqueletos. Por que estou adicionando menos um? Como as listas funcionam exatamente como os arrays fazem onde começamos, a contagem do indexado a partir de 0. O último elemento dos três esqueletos será dois. Temos os zeros esqueleto, esqueleto um esqueleto também. Então, a contagem é igual a três porque temos três esqueletos. Portanto, o primeiro elemento deve ser a contagem menos um. Espero que isso seja entendido. Agora, porque estamos começando pela parte de trás, qual é o nosso objetivo? Continuaremos percorrendo. Enquanto eu for maior que menos um. Por que isso é minus1? Bem, porque quando chegamos a 0, ainda queremos percorrer a lista. E um temos dois menos um porque deixe-me terminar isso. Lá vai você. Porque estamos indo. Menos menos. Então, assim como Plus, Plus adiciona um, menos, menos remove um. Então, novamente, o que está acontecendo? Estamos começando da parte de trás da lista. Estamos nos certificando de que sempre somos maiores do que menos um, o que significa que não queremos ter 0 como o último elemento pelo qual passamos. E, finalmente, estamos adicionando eu menos menos. Então, vamos continuar um. O que vamos fazer aqui? Bem, vamos verificar se os inimigos ou o inimigo na posição I é igual a nulo. Tão nulo significa que ele está desaparecido. Vimos anteriormente em um vídeo anterior quando matamos os esqueletos, o elemento lá ficou faltando. Isso significa que não é. Então, se o inimigo ou o colisor 2D estiver faltando neste inimigo, do que o que vamos fazer é acessar os inimigos. Remova o ponto em, e vamos removê-lo na posição I. Então, novamente, vamos olhar para ele mais uma vez e entender o que está acontecendo. Estamos começando na parte de trás da linha porque queremos remover as coisas de baixo para, até chegarmos ao primeiro. Então, estamos começando pela parte de trás. Estamos usando count menos um porque count é o número de elementos, mas os elementos internos são indexados de 0. Então, começamos em 0, 1, 2, mas a contagem é três, então removemos uma. Continuamos removendo um usando IA menos menos até que não sejamos mais maiores do que menos um y. Quero dizer, quando somos menos que menos um, por quê? Porque o último será 0, então menos 1, quando nos tornarmos menos 1, isso significa que terminamos e não queremos mais continuar com o loop. E cada vez que descobrirmos que os inimigos estão faltando ou são nulos, vamos removê-los da lista. Ótimo, vamos salvar isso. Vamos voltar ao nosso jogo e vamos ir em frente e imprimir aqui os inimigos. Certo, então enemies.gov. E vamos ver o que acontece. Então, de volta ao nosso jogo, vou conseguir o ganho. Eu tenho a lista de inimigos, vou atirar no primeiro 1, segundo 1 e o terceiro. Então, vamos esperar que os livros apareçam. Lá vai você. Você pode ver um pop-up. Oh, tudo bem. Então agora você pode ver que a lista está vazia. Há algo que esqueci de dizer. Assim, podemos ver que temos isso e não olhamos para o Conselho, mesmo que possa aparecer. Então, o número de inimigos a três, quando eu atiro neles, um deles morre, o último elemento é removido. É por isso que estamos indo de baixo para cima. Portanto, o número de inimigos é de 0. Então as balas que funcionam para isso continuaram. Também. Este, lá vai você, O número de elementos ou o número de inimigos é 0. Ótimo. Então agora sabemos que somos capazes de matar os inimigos. Podemos removê-los da lista. Por fim, queremos abrir a porta sempre que o número de inimigos 0, e isso fará parte do seu desafio. Seu desafio é abrir as portas depois que os inimigos morrem. Portanto, verifique se a lista de inimigos está vazia. Isso vai ser, eu não sei, vou deixar para você. Então você precisará passar por todas as portas e as portas para fechar. E você precisará ativar todas as portas. E vou te dar uma pequena dica. Você precisa verificar o tamanho da lista. Você pode usar a contagem de pontos. Bem, já fizemos isso. Se você quiser. Você pode usar um loop for cada para passar pelas portas ou você pode tentar usar o loop for que acabamos de aprender e para obter o comprimento da matriz, este é um bom exercício em loops. Temos muitos loops. Isso é bom. Então, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, vou manter o depurador aqui. E o que vamos fazer, vamos verificar se a contagem de pontos dos inimigos é igual a 0. Então, vamos usar o loop for. Vou criar um int I igual a 0. Então, estamos a partir do 0. Vamos continuar em loop enquanto eu for menor do que as portas para abrir ou lamentar, portas para fechar o comprimento do ponto. Quando queremos acessar o comprimento de uma matriz, usamos o comprimento de ponto quando queremos acessar o comprimento da lista, usamos contagem de pontos. Então lá vai você. Agora você tem dois exemplos. Você pode até adicionar um comentário aqui para se certificar de que você se lembra. E em cada etapa vamos adicionar um. Então agora porta para fechar ou, na verdade, porta para fechar. Sim. E vou acessá-lo usando o I porque estou aumentando a cada vez. Então, digamos que já temos duas portas. Portanto, temos o índice 0 e o índice um. Começamos em 0. Temos a porta para fechar em 0. Definimos ativo como falso. Lá vamos nós. Não teremos mais a porta. Verificamos se o I, que atualmente é 0, é menor que o comprimento do ponto das portas, que é 2. Então, sim, 0 é menor que 2. Eu mais, mais, ou realmente fazemos isso e depois eu mais, mais. Voltamos aqui, eu estou, ok, então não voltamos mais aqui. Agora, um é um a menos que dois? Sim, é. Temos r igual a 0 ponto-ponto ativo, desculpe, eu é igual a 1. Nós nos configuramos ativos. Lá vamos nós. É falso. Finalmente, eu me tornei dois. Dois são menos que dois? Não, não é. Saia do loop. Nós salvamos tudo isso. Voltamos ao nosso jogo. Nós executamos o ganho, temos o console aqui, então o número de inimigos, F3, você pode vê-los. Devemos 12, ok, os inimigos em que atiramos nele. Segundo, quantas balas levam? Um? É preciso apenas um. Bom. Vamos ver por que ele está? Porque me lembro que adicionamos a vida dele aos três anos. Lá vai você. O inimigo morreu. Você pode ver que em 0 as portas se abrem e podemos caminhar. Quão legal é isso? Então, finalmente, tudo parece estar funcionando, ok. Existem alguns bugs. Um deles é que o sangue não está desaparecendo por causa das animações. Ainda não adicionamos a chave no final. O esqueleto aqui. Quão grande é a vida dele? A casa dos inimigos é três, então parece haver um problema. Ele está morrendo imediatamente. Por quê? Porque se entrarmos no controlador de bala da camada, a quantidade de dano é de 100 k. Portanto, a quantidade de dano é padronizada. A vida dos inimigos é 3. Acho que esse é o problema. Então deixe-me fazer a metade desse cara. Então eu só quero ter certeza de que não estamos tendo algo errado, salvo que execute o jogo. Porque às vezes podemos chamar um método muitas vezes, então estamos dando muito dano. Então, se eu verificar, ok, então lá vai você. Ele precisa de várias balas. 123 e lá vai você. Certo, então tudo está funcionando bem. As portas estão se abrindo sempre que estamos matando todos os inimigos, tudo parece estar funcionando. Aprendemos muito sobre loops nesta seção, aprendemos muitas informações. Espero que você esteja gostando. Espero que você esteja se divertindo. Espero que você esteja aprendendo muito. Espero que você esteja fazendo sua pesquisa. Espero que você esteja sempre cometendo suas mudanças. Espero que seus cérebros de desenvolvedores de jogos estejam ficando mais fortes a cada vídeo. Espero que você não esteja muito frustrado, e espero que esteja muito feliz. Então, vejo você na próxima seção. Não se esqueça de adicionar um comentário. 39. Seção 6: fluxo de nível (gerenciador de cenas (gerenciador de cena e a coragem) (: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E este é realmente um dos vídeos mais legais que já fizemos até agora, na minha opinião. Então, o que vamos fazer é apenas executar o jogo. E antes de fazer isso porque estamos experimentando, vou mover esta porta para fora do caminho novamente. Então estamos brincando, abrimos a porta com algum tipo de matança e whoa, nós viemos aqui. O que é isso? Uau, um portal. O que você acha que aconteceria se eu tentasse saltar? Bem, o que aconteceu? Bem, estamos no nível 2 ou quero dizer, no nível um, estávamos no nível dois, deveríamos ter apontado isso, mas você pode ver aqui que começamos no nível dois e depois vamos para o nível 1. Aprendemos sobre portais, aprendemos sobre o gerenciamento do pecado e aprendemos a usar uma variável de string. Então, não vamos perder mais tempo. Vamos começar. Oh, então tempo para algum nível de fluxo. E a primeira coisa que precisamos para o fluxo de nível como o gerenciamento de cena e a maneira como gerenciamos cenas é através de um gerenciador de cena, quão conveniente é isso? Mas antes de fazermos tudo isso, a primeira coisa que precisamos fazer é realmente criar algum tipo de portal. Então, um portal que nos levará a outro nível. Agora, antes de fazermos isso, precisamos de um outro nível real para ir. Então vou entrar nas cenas aqui e vou duplicar s2. Vou abri-la. Então agora vimos três. É o mesmo, é exatamente o mesmo que o s2, mas tudo o que vou mudar são os azulejos no chão. Então vou entrar na paleta de azulejos. Vou escolher o chão, e vou fazer disso uma cor verde. E vou mudar isso um pouco. Lá vai você. Então isso é um bout o que eu quero fazer. Vou cobrir essa parte, essa parte, e essa parte só para que possamos diferenciar entre eles. Não quero gastar tempo criando um nível totalmente diferente. Vai demorar muito e não há propósito real, mas para você ao criar seu jogo, eu recomendo que você passe pelo incômodo de fazê-lo. É uma boa prática se você quiser criar seu próprio jogo a partir dos estilos. Chega de conversa, vamos começar. Salve isso. Vamos voltar ao Test2. Então agora temos os amigos entre test2 e test3. Acho que é hora de chamar esse nível 2 e nível 3. Então, Nível 2, nível 1 ou não. Vamos manter isso como um, isso foi realmente um teste. E nível três. Na verdade, isso deve ser, ok. Espere um segundo. Vamos manter esse nível 3. Claro, nós carregamos, isso se tornará o nível um. E este é o nível dois. Então, temos apenas um, nível um, nível dois, ok, então de volta ao nível 2, e aqui vamos ter algum tipo de portal de saída. Eu lhe forneci os recursos para os portais, e escolhi este. E você pode ver que você tem 25 ou 20 portais, eu não sei. E você também tem esse verde, mas eu vou usar o 15. Foram 15 anos? Foram 15. Então, de volta aqui nos sprites, clique com o botão direito do mouse em Criar Pasta, portal em Enter. Clique duas vezes aqui e vou adicionar todas as imagens e aguardar que elas sejam adicionadas. Muito bom. Vou clicar com o botão direito do mouse em criar um objeto de jogo vazio que será chamado espectro de entrada do portal. Defina z como 0. Lá vamos nós. Vamos movê-lo para aqui. Adicionar um componente ou o quê? Não vamos adicionar um componente. Vamos adicionar um animador. Vamos para a janela. E, na verdade, antes de fazermos isso, vamos adicionar uma das imagens aqui ao portal. Podemos adicioná-lo imediatamente? Não, não posso. Vamos adicionar uma renderização sprite. E vamos adicionar apenas esta imagem aqui. E vamos defini-lo como o jogador. E lá vamos nós. Você pode ver que é um pouco pequeno. Vamos escolher todas as imagens e fazê-las aplicar 50. Então, ele dobrará em tamanho, ok, taxa de menina e fará isso apontar. Vai se tornar melhor? Vamos ampliar e ver às vezes o ponto não é o melhor filtro. Às vezes você o mantém bi-linear, é manteiga e, neste caso, é. Então bi-lineares, eles são mais suaves, você notará agora que está um pouco mais suave. Eu gosto mais, faça o que quiser com ele. E você sabe o quê? Na verdade, sou porque o quarto já é grande, vou fazer 25. Sim, lá vamos nós. Certo, 25 é bom. Bom. Então lá vamos nós. Temos este portal aqui. Vamos para a janela. Animações, animações. Então, já abordamos como fazemos isso. Não vou entrar em muitos detalhes. Vou criar ativos, animações, portal. Certifique-se de sempre criar pastas e manter tudo pequeno. Então, redemoinho do portal. Ou isso será apenas o animador ou nano, e esta é a animação. Girou porque o portal está girando. Vou selecionar todos esses e arrastá-los para cá. Agora, quando jogamos, lá vai você. Acho que isso é bom o suficiente. Você não precisa torná-lo maior ou menor. Excelente. Então agora temos esse portal funcionando. A próxima coisa que vamos fazer é, obviamente, adicionaremos algum tipo de Collider aqui. Então adicione um círculo, círculo collider 2D, e é um pouco grande. Vamos tornar o raio um pouco menor para que o inimigo precise, o inimigo, o jogador precisa pular para o portal imediatamente para ser teletransportado para o próximo nível ou qualquer nível que queremos diferenciar também. E esta é a parte em que escolhemos qual, onde queremos ser teletransportados? É sempre que o próximo nível não precisa ser porque mais tarde, acredito na seção em que geramos níveis, acho que é o último. Estaremos escolhendo níveis aleatórios como temos no Hades. Então, criaremos diferentes tipos de layouts, temos diferentes tipos de níveis pelos quais passamos. Então, vamos para os scripts. Vamos adicionar um script aqui para o portal. Vamos chamá-lo de saída de nível. Vamos chamá-lo de níveis, fluxo de nível que diminuirá. Acho que isso é bom. Clique com o botão direito do mouse aqui, crie um script C-sharp que será a saída do nível. Nem me lembro se teremos outros scripts relacionados ao nível SOPA. Vamos mantê-lo nisso. Então, vou clicar aqui. E é claro que vamos torná-lo um gatilho. Este colisor deve ser um gatilho. E vamos adicionar o nível de saída. E finalmente, vou para os Prefabs e vou aqui criar um prefab para o, devo apenas fazer um portal aqui? Digamos que possamos adicionar, criar aqui, algo como talvez, ok, vamos apenas fazer os portais, portais. Abra isso. Portal. E talvez o portal um, talvez não porta um. Vamos mantê-lo no portal, salvar tudo isso. E agora vamos abrir o script aqui. Então, temos a saída de nível aberta e o que queremos fazer aqui? Então, a primeira coisa que queremos ter obviamente, um campo serializado, que será uma string de tipo string. Essa é a primeira vez que criamos uma variável do tipo string, acredito. E esse será o nível a ser carregado. Ótimo, então agora podemos voltar aqui, mostra o portal. E podemos selecionar o nível para o qual queremos ir. E a maneira como fazemos isso é que precisamos ter certeza de que obtemos o nome exato que queremos. Então, e cenas que copiamos, por exemplo, nível também estamos no nível 2 agora. E não pesa preocupações. Vamos e dois, vamos do nível dois para o nível um. Claro. Por que não? Então, vamos bloquear isso, selecione o nível para selecionar Nível 1. Copie isso, cole-o aqui. Oh, não, espere, espere, espere. Devemos selecionar este e agora copiamos aqui. Então agora este portal, quando o acionamos, devemos ir para a carga de nível 2. Mas como vamos realmente fazer isso? Vou voltar aqui. E vamos remover iniciar uma atualização por enquanto. Só por enquanto, mais tarde, precisaremos deles curso. E aqui vou criar um empreendedor entre d. Já sabemos como isso funciona. É claro que vamos garantir que a colisão, a tag, seja igual ao Jogador O. Então agora você está pensando, Oh, Michael, bem, o que é isso? O que, qual é a tag de comparação? Bem, você pode usar comparar tag é muito melhor, mas eu queria mostrar uma maneira diferente e agora é hora de carregar a próxima cena. Como vamos fazer isso? Como realmente mudamos de uma cena para a outra? Deixe-me mostrar-lhe um pouco. Então este é o gerenciador de cena e você pode ver aqui que temos muitas coisas que podemos usar métodos estáticos, eventos. Vou deixá-lo para você porque mais tarde, em pouco, teremos um pequeno desafio. Mas o que vou ajudá-lo é que vou ter certeza de que aqui sempre que quisermos usar cenas, precisamos adicionar o gerenciamento de cena de pontos usando o mecanismo Unity. Salve isso. E agora podemos fazer muitas coisas com nossas cenas ou podemos gerenciar nossas cenas. Então, antes de lhe emitir o desafio de encontrar qual método vamos usar ou como você pode usar essa unidade? Onde está o gerente de cena? Vou mostrar a vocês como realmente acessar e porque quero esse desafio para você trabalhar imediatamente quando começar. Se você entrar no arquivo aqui, temos algo chamado configurações de compilação. Se clicarmos nele, podemos ver as cenas construídas. E é aqui que realmente construímos nosso jogo. E você pode ver que temos várias opções. Podemos usar o Windows, podemos usar o iOS ou o que quer que seja, tvOS, ios, PS4, PS5, xbox One, et cetera, et cetera. Você pode criar coisas para diferentes plataformas, e o PC é aquele que vamos usar. Podemos fazer coisas diferentes. E é aqui que você adiciona todas as cenas ou os níveis que você terá em seu jogo. Então, por enquanto, a única cena que é adicionada à conta é o teste de cena 1. E sem adicionar temporada aqui, você não poderá viajar de um para outro usando o Scene Manager. Tão bem claro, vou adicionar o nível um. E também podemos fazer isso por cenas abertas do AD. Lá vai você. Você pode ver na cena 2 porque é uma cena aberta. Certo. Ótimo. Podemos adicionar outra hora? Não, não podemos. E você também pode ver que essas cenas têm índices nelas. Não usaremos índices das cenas agora, mas lembre-se porque depois elas aparecerão. Então, configurações, salve isso novamente, File BuildSettings. Lá vai você. Em todas as cenas que você tem sempre que quiser usar o Scene Manager para ir de uma para a outra, feche isso. Agora, o que vamos fazer? Vamos lançar o desafio de carregar a próxima cena. Então, veja o gerenciador de cenas na documentação do Unity, encontre a função apropriada que pode nos ajudar a ir para uma cena diferente. Então isso é uso de astronautas. E, finalmente, certifique-se de que é um método que usa uma string como argumento. Então, pause o vídeo agora mesmo e vá para o caldeu. Certo, bem-vindo de volta. Então, digamos que eu sou estudante de Michael Moore e eu sou apenas mais, mais o que todos estão dizendo. E só estou aprendendo a usar o gerenciador de cena. Certo. Qual é o objetivo, qual é o desafio? Ele me perguntou que eu deveria carregar a próxima cena. Certo, ótimo. Vamos olhar. O que temos? Então, vimos contar, parece que contar o edifício não parece que ajuda a criar visto. Não. É visto. Não. Eu não acho que isso seja mantido. Entrou no não. Construindo pelo nome, é visto. Carregue, carregue uma cena, carrega a cena pelo nome. Espere, qual foi o desafio? String como argumento, o k. Isso é um pouco mais rápido do que eu deveria, mas não se preocupe. Cena de carregamento, vamos clicar em Carregar visto. Espero que tenhamos a Internet o faça. Declaração, ok, carregamos visto. Podemos usar o índice de símbolos ou podemos usar o mesmo nome, excelência, seu nome, nome. scription carrega a cena. Excelente, é isso que vou usar. Então agora no Trigger Enter, se for o jogador, o que vamos fazer como vamos ver como isso é realmente feito. Então, se eu rolar para baixo aqui, ok, então a carga de pontos do gerenciador de cena os viu. Há algo mais que eu preciso? Não, nada. Vamos continuar. Ou talvez neste momento você possa estar pensando, bem, o que é essa carga visto aditivo Moldau? Bem, se você não sabe, vamos tentar. Então, gerenciador de cena, cena de carregamento de pontos. Vou abrir os suportes e posso ver aqui esses em seis. Então, o índice de compilação de cena. Não, eu não quero isso. Ok, veja você nomear isso é o que eu quero, mas temos outros quatro e este é um bom momento para te ensinar isso. Às vezes, um método pode levar 12 ou talvez até mais argumentos com base no que você dá, ele funcionará. Por exemplo, podemos adicionar o modo. Você pode ver aqui, carregar o modo Cena, é disso que estávamos falando aqui. Então carregue o modo Cena, aditivo. Nem sei o que é isso. Mas aqui você pode ver que existe uma opção para isso. De qualquer forma, isso foi uma nota lateral. O que queremos usar? Qual cena? Bem, já o temos com o nível a ser carregado. Então Lovell para carregar como essa cena que vamos carregar. Então, tudo deve estar funcionando bem. Vou voltar para a Unity. Salve isso, torne o jogo um pouco maior. Além disso, preciso matar todos os inimigos. E, honestamente, não tenho tempo para matar todos eles. Isso é só fazer com que as portas se abram, execute o jogo. Além disso, ele vai fechar em qualquer caso. E nós temos essas linhas, ok? Então, antes de tudo, não maximize o jogo. Agora execute o jogo. Essas linhas estão me incomodando um pouco, então vou escolher a porta 1, vou desativar. Vou analisar por que é que posso atirar nele? Acho que posso. Ele não é destruído. Não, não acontece. Então, se eu andar de perto, você pode ver que estou no nível 2, estou fora dele para 0. O que aconteceu? O que aconteceu? Estou no nível 1. Wo, quão legal é isso? Sério, pessoal? Essa é uma das coisas mais legais que aconteceram hoje. De repente, passamos do nível 2 para o nível 1 através de um portal. Muito bom. Então agora tudo está funcionando, mas é muito rápido. E, honestamente, não queremos que aconteça tão rápido. Queremos torná-lo um pouco lento e adicionar um pouco mais de personagem ao jogo à medida que passamos por ele. Então, vejo você no próximo vídeo. Claro, não se esqueça de confirmar suas alterações. Olha até onde chegamos. Olha por que adoro cometer minhas mudanças. Bem, começamos com um commit inicial, adicionamos animações ociosas e hast criaram o jogador adicionou balas, criamos animação para o inimigo, dano, deterioração do inimigo. Eu nem sei qual é a fechadura, quanto conseguimos e talvez nem sequer estejamos no meio do caminho. Bem, muito bom. Então, espero que esteja se divertindo, espero que esteja gostando e te vejo no próximo vídeo. 40. Gerente de níveis: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vamos não apenas fazer a transição para o próximo nível, mas também vamos fazer a transição. Eles estão de uma forma muito mais legal. Então, agora, quando passamos pelo portal, não vamos imediatamente. Esperamos dois segundos e depois vamos e podemos até ajustar isso do gerenciador de níveis o quanto quisermos. Então você pode ver que temos uma figura central agora que é o gerenciador de níveis. Vamos usar corrotinas, gerente de cena e todas essas coisas boas. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então agora precisamos de um gerente de nível porque, ok, é tudo divertido e jogos quando o portal está nos transitando. Mas quando se trata de grandes jogos, não queremos que esse objeto em particular esteja no controle da maneira como nos movemos pelas cenas. É muito melhor fazer com que o cisne determine qual nível queremos passar e depois ter um objeto mais central, que é o gerenciador de níveis que lidará com o processo de nos mover de nível para nível. Isso mais tarde à medida que você cresce. Por enquanto, não precisa ser assim. Você pode simplesmente usar o portal. O jogo funcionará para sempre. Quando se trata de grandes jogos, o objeto real não faz o trabalho. Você tem mais, digamos uma autoridade maior, uma cabeça maior, que é o gerente de nível que lida com isso. Então, vou clicar com o botão direito do mouse em criar um vazio, redefinir sua posição. E este vai ser o gerente de níveis. Você pode satisfazer onde quiser. E você pode acessar os scripts aqui e para os gerentes, clicar com o botão direito aqui e para os gerentes, clicar com o do mouse em criar um script C-sharp. O gerenciador de níveis. Pressione Enter e espere que ele compile o gerenciador de nível de meta no script aqui. E vamos seguir em frente e abri-lo. Agora, a primeira coisa que queremos fazer é fazer esse gerenciador de níveis e instância. O que é uma instância? A instância nos permitirá chamar esse gerenciador de nível onde quer que estejamos e usar o que é valioso como público e qualquer método público disponível para nós é criado, torná-lo uma instância e depois chame isso, e você entenderá como isso funciona. Então, o que podemos fazer é antes de tudo, vamos fazer um gerenciador de nível estático público, o que significa que essa variável estará fora do gerenciador que significa que essa variável estará fora do de nível de tipo e chamará essa instância. E, em seguida, no início, vamos definir a instância igual a esta salva. Ok, então o que está acontecendo agora? Primeiro de tudo, público, sabemos o que público é estático. O que é estático? Estático significa que, através de todo o código, teremos isso o coletor. Então, se chamamos isso do controlador do jogador, do impacto da bala, do gerente da sala. A instância do gerenciador de níveis é sempre a mesma quando instanciamos o livro, por exemplo, cada marcador é um clone. Você se lembra? Então, se eu executar o jogo, deixe-me mostrar o que quero dizer. Então eu atiro algumas balas, pauso o jogo. Você pode ver que cada um deles é um clone. Então, se eu tentar acessar o controlador de bala do player, por exemplo, se não for estático, alguma variável que ele acessará, será diferente, por exemplo, de uma variável que está aqui ou aqui. Mas se eu criar uma variável estática na bala do jogador, então qualquer bala que eu acesse, a variável estática, será a mesma. Portanto, estático significa que é o mesmo em todo o ganho, onde e quando você acessá-lo. Isso é muito importante quando se trata de uma estática. Portanto, é do gerenciador de nível de tipo que é muito fácil de entender e seu nome é instância. Podemos chamá-lo do que quisermos. Podemos chamá-lo de Michael se você quiser, o que o manterá como instância. E então temos esse trocadilho ironicamente pretendido e o quê? Temos instância igual a isso. Isso significa a classe real. Então, estamos usando a instância assim que começamos o jogo. Instância é essa. Então, agora, onde quer que estejamos no código, podemos ir em frente e escrever instância de ponto do gerenciador de níveis e acessar qualquer variável que seja pública obviamente, ou método que temos aqui. Então, a próxima coisa que vamos fazer é remover a atualização por enquanto. Use-o irá criá-lo novamente. E precisamos criar algo chamado campo serializado. Flutuador. E será a hora de carregar. Então, e será igual a 2 f. Por que criamos um carregamento de fonte? Qual é realmente o nosso objetivo? Fora de tudo isso, esqueci de te dizer. O que queremos fazer é atrasar a transição para o próximo nível, então não queremos que isso aconteça instantaneamente. Queremos ter pelo menos dois segundos, então chegamos ao portal, esperamos dois segundos e depois viajamos para o próximo nível. Isso apenas adicionará um pouco de nós autenticidade como você sabe, sempre que você estiver jogando um jogo, você não faz. E para relatar e, em seguida, iniciar imediatamente o próximo nível. Você quer ter um pouco de tempo, dois segundos talvez repensem sua decisão, mas acabará. E como vamos fazer isso? Obviamente, vamos usar um revestimento. Então eu não vou te dizer para criar a quarentena agora porque você precisa fazer com isso, acho que tenho um desafio em algum lugar onde você cria a corrotina. Portanto, preste atenção muito de perto. Sei que os adolescentes chamados são muito difíceis de aprender no começo. Depois de pegar o jeito, é extremamente fácil. Vamos começar. Primeiro de tudo, porque acessaremos essa co-rotina a partir de um script diferente. Vou escrever enumerador visual público. Portanto, a corrotina é do tipo I e do numerador. E vamos chamá-lo de carregamento próximo, próximo nível. E aqui vamos aceitar uma discussão. Então, vai ser do tipo string e será o próximo nível, assim. E aqui o que faremos é esperar o tempo para carregar e depois carregar a cena. Então, como dissemos, produza, retorne, novo, espere quatro segundos. E isso espere quatro segundos, vamos usar o tempo para carregar. Quão ótimo é isso? E finalmente, depois de esperarmos 42 segundos, vamos entrar no gerente de cena. Adicionamos o gerenciamento de cenas aqui e agora podemos acessar o gerenciador de cenas. Então você notou o que aconteceu agora? Não me permitiu usar o gerenciador de cena até que eu tivesse os critérios dizendo à unidade que estamos usando isso. Então Scene Manager, não Unity, desculpe-me o script aqui, todo esse arquivo que estamos usando, gerenciamento visto. Então Scene Manager, carga de pontos vista. E como a próxima cena que vamos para 0 ou quero dizer, no próximo nível que estamos indo muito baixo. Certo, ótimo. Agora, a próxima coisa que precisamos fazer é entrar na saída de nível. E em vez de usar o Scene Manager aqui, simplesmente usamos a instância para iniciar a co-rotina. E honestamente, já estou muito cansado, então acho que é melhor para você fazer isso em vez de mim. Então vá em frente, inicie a co-rotina. Primeiro de tudo, a partir do nível de script de saída, Kali, chame o gerenciador de níveis e vá para o próximo nível. Há um pequeno mais complicado que você precisará tomar cuidado. Vou te dar uma pequena dica, que é que você não pode simplesmente chamar uma co-rotina. Você precisa começar uma qualidade. Então, pause o vídeo agora mesmo e comece a co-rotina. Oh, ok, bem-vindo de volta. Então, como você se deu bem com isso? E aqui vou remover isso. E, em vez disso, vou dizer que vou começar uma co-rotina. Vou usar o gerenciador de níveis. Espero que esta não tenha sido a parte mais difícil se você conseguiu usar a instância, eu o parabenizo, você passa para o próximo nível de desenvolvimento de jogos. Se não, não se preocupe com isso, provavelmente é meu erro porque eu não te disse que não lhe dei a dica. Mas vamos carregar o próximo nível. Portanto, esse método no carregamento próximo nível é, na verdade, um enumerador ocular do gerenciador de níveis e requer uma sequência de nível seguinte aqui, como você pode ver como um argumento. Então, vou dar a ele. E o que deveria ser? Deve ser o lote de nível dois. Salve isso. E uma coisa muito boa. Você pode ver que quando paramos de usar o gerenciador de cena, o mecanismo de uso do Unity não é mais tão amplo quanto o mecanismo Unity sozinho. Então, as coisas que não usamos estão um pouco acinzentadas. Então eu posso realmente remover isso, salvar um pouco de memória. E agora a saída do nível apenas aloca ou chama o gerenciador de níveis de cabeça central e diz a ele para carregar o nível. Isso será útil quando tivermos vários portais. Você verá, confie em mim, é muito melhor fazê-lo dessa maneira. Então, salve isso. Volte e para o nosso jogo aqui. Comece o jogo, caminhou em direção ao portal. Estou jogando no modo cena. Então, agora, quando eu cheguei ao portal, devemos ter dois segundos antes de votar. E podemos vê-lo aqui mesmo na hora do gerente de Londres para carregar dois segundos. Então lá vamos nós. Aqui não vai nada. 112 para cima. Lá vamos nós. Então agora estamos no nível 1 e não fomos para lá imediatamente. Então, espero que você goste. Certifique-se de declarar e todas as suas alterações. E no próximo vídeo, vamos tornar as transições ainda mais frias. Você pode imaginar isso ainda mais legal do que isso? Certifique-se de deixar um comentário para as transições legais. Vejo você então. 41. Como fazer a Making até: Bem-vindo de volta, meus colegas desenvolvedores de jogos para um novo vídeo. E neste, vamos fazer algumas coisas. Primeiro de tudo, adicionamos um combinador de máquinas de cinema. O que é isso? Isso significa que nossa câmera não sai mais dos limites. movimento é um pouco estranho, mas como não demos tempo suficiente, lembre-se, podíamos ver as linhas azuis e aqui não as vemos mais. E agora, quando passamos pelo portal, Whoa, você pode ver que nos movemos em câmera lenta e depois vamos para o próximo nível. Portanto, há um pouco de atraso e a escala de tempo do nosso mundo. Então, não vamos perder mais tempo. E vamos começar. Oh, ok, então agora é hora de tornar nossas transições um pouco mais legais. E a primeira coisa que quero fazer é entrar no console e ver esta mensagem aqui. E eu vou excluir isso. Não precisamos mais disso. Isso foi apenas para fins de depuração. E sempre que você tiver algum tipo de erro ou não tiver certeza de algo, use o log de pontos de depuração em ajuda muito apenas para ver se alguma condição está funcionando. Alguma condição não é se a quantidade de inimigos que ela terminou e assim por diante e assim por diante. Então o log de pontos de depuração é o melhor, incrível. Ele salvou meu traseiro tantas vezes. Então, vamos continuar um, o que queremos fazer aqui? Bem, a primeira coisa que queremos fazer é quando passarmos pelo portal. Então, quando vamos ao portal, não queremos ter nosso jogador correndo por aí como um maníaco louco depois que ele entra lá, queremos realmente detê-lo e fazê-lo esperar alguns segundos. Peso. Portanto, há uma diferença. Queremos parar completamente o jogador? Ou podemos fazer algo ainda melhor? E podemos realmente desacelerar o tempo em que se move, para que seu movimento se torne muito lento. E quanto a isso? Acho que é uma solução melhor. Então, vou abrir o gerente de nível. E aqui depois de começarmos a carregar o próximo nível, o que vou fazer é acessar a hora e acessar a escala de tempo no mundo. E você pode ver aqui qual é a escala de tempo? É a escala em que o tempo passa. Então, atualmente, o tempo passa normalmente em nosso jogo, o que vou fazer é mudar isso para 0,2. Então, agora ele estará funcionando a 20% de sua velocidade original. E vamos ver como isso parece. Eu não recomendo que você faça isso o tempo todo porque não só o jogo diminui, mas tudo fica mais lento , então até a animação. Então eu vou correr, vou entrar no portal e você notará que agora, whoa, quão legal é isso? A arma ainda está apontando corretamente, obviamente, mas a animação é muito mais lenta. Então lá vai você, Michael Jackson. E estamos no nível dois. Muito bom, mas ainda estamos nos movendo. Ah, e olhe para as balas. Mas as balas, quão legal é essas balas? Eu recomendo que você se lembre disso e você adicionou algum tipo de mecânica ao seu jogo. Então, tudo fica mais lento e deixe-me atirar em algumas balas e ficar longe de lá. Quão legal é isso? Sério? Não me diga que isso não é muito legal. Então, agora o que queremos fazer é que queremos voltar. Então, como você viu no nível 2, estamos nos movendo em câmera lenta, mas quando vamos para o nível 1, estamos de volta a esse momento muito ruim. Então, o que fazemos é que vamos lançar esse desafio. Nós ajustamos a escala de volta. Então, obviamente, não queremos ter a escala de tempo assim. Então, descubra onde precisamos definir a escala de tempo de volta à sua forma original. E eu lhe darei uma dica do que ou como configurá-lo de volta à sua forma original para retornar ao normal, defina a escala de tempo de volta para 1. A-flat significa que é 100% não 0,1, ou você pode torná-lo ainda mais rápido. Isso se diverte, divirta-se. Certifique-se de voltar a balança para a forma original. Onde devemos fazer isso? Pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Espero que você descubra isso. Onde devemos fazer isso? Bem, começamos a escala de tempo. Esperamos por dois segundos, e depois de terminarmos, antes de carregarmos, a próxima cena, acessaremos a escala de tempo do ponto de tempo e vendê-lo de volta para um f. Diga isso de volta ao nosso jogo. Do jogo, suba, passe pelo portal e não faça algo que agora leva mais de dois segundos para carregar o nível. Então, um. Dois, Por que isso? Bem, porque a escala de tempo está mais lenta. Lá vamos nós. Então agora estamos de volta aqui e tudo está funcionando bem. Então, a última coisa que precisamos consertar é o fato de que temos que esperar tanto tempo para o nível carregar. Por que isso? Bem, obviamente porque aqui estamos esperando por segundos, o tempo para carregar, mas antes de fazermos isso, a escala de tempo foi definida como 0,2, então 20% do tempo original. Como vamos consertar isso? Bem, felizmente, há algo muito bom e aqui, muito conveniente que diz que temos que esperar por segundos em tempo real. Então, isso gasta o tribunal em execução para uma determinada quantidade de segundo usando tempo não qualificado. Você pode ler isso? Acho que devemos torná-lo maior. Não, tempo não qualificado. Então, espere onde está? Espere quatro segundos em tempo real, salvamos isso. E agora a co-rotina não é mais afetada pela escala de tempo. Então, agora vamos apenas testar isso. Corra, corra, corra, corra, chegue a este 112 e estamos no nível um. Muito bom. Espero que você goste. Espero que você esteja se divertindo. E vamos ver, ainda temos alguns minutos. É um vídeo muito curto. Há algo que eu queria abordar. Então, aqui, quando executamos o jogo, na verdade vamos fazer isso um pouco maior para que possamos ver. Então agora andamos por aí, OK, então tudo é preto. Sentimos que estamos no jogo corretamente, mas vemos esse azul aqui, e eu não gosto disso. Agora, poderíamos cobrir isso com alguns furúnculos pretos. Essa seria uma boa solução, não ruim, é claro, mas há uma maneira muito melhor e uma propriedade dentro da máquina de cinema que vamos aproveitar, e isso é o confinamento. Então, vou tornar a cena um pouco maior. Vou diminuir o zoom. E se eu clicar na câmera virtual aqui, você pode ver aqui em baixo que temos algo que diz, onde está? Ok, então lá vamos nós, Adicionar máquina do Centro de Extensão confinada, e ela cria um componente adicional aqui. E você pode ver que temos a forma delimitadora e a forma delimitadora é necessária e deve ser um colisor de polígono. O que é um polígono? Polígono significa que, assim como temos um círculo, retângulo, triângulo, polígono significa que podemos dar a forma que quisermos. Então, o que isso faz? Ele adiciona um limite à forma a câmera ou quanto a câmera pode se mover. Deixe-me explicar. Vou entrar no local onde é a nomeação da grade? Clique com o botão direito aqui. Vou adicionar talvez um componente. E vamos seguir em frente e chamá-lo de verdadeiro por causa do colisor de polígono 2D. Lá vamos nós. Posso editar isso. Você pode ver que este é o polígono, então podemos, lá vamos nós. Faça assim. Se você manter pressionado o Control, poderá ver esta linha vermelha. Isso significa que ele será excluído. Então, vou seguir em frente e fazer os limites pelos quais nossa câmera ou a câmera da máquina está se movendo, os limites pelos quais ela não passa. Então, vou me certificar de que, por exemplo, não podemos olhar aqui e ver o que podemos fazer. Na verdade, podemos adicionar outro ponto. É por isso que precisamos de um colisor de polígono, e lá vamos nós. Portanto, a câmera não poderá sair desses títulos e não poderemos ver o azul aqui. Podemos? Michael diz a verdade? Nem sempre. Isso é executá-lo novamente e ver por nós mesmos. Então, ok, estou fora do vínculo porque há algo muito importante e precisa ser um gatilho. Não queremos que isso afete nada. E melhor ainda se pudermos tornar essa grade um jogador diferente. Então eu acho que teremos que torná-la uma camada diferente, mas teremos que torná-la uma camada diferente. É por isso que eu queria chamar a grade de intocável, chamá-la de camada errada. E o Norte este objeto só porque afetará apenas o polígono que temos as paredes, podemos querer que as paredes interajam com o jogador. Então execute o jogo, ok, com as balas dos jogadores. Lá vamos nós. Agora não estamos interagindo. E se subirmos aqui, costumávamos ver as linhas azuis. Lembre-se, ainda estamos vendo as linhas azuis porque ele cometeu um dos maiores erros. Nós nem sequer atribuímos o colisor de polígono aqui. Então arraste a grade e lá vai você. Agora temos o colisor de polígono, execute o jogo. Podemos mostrá-lo ao redor e depois vamos. Então, eu não te contei? Certo. Então, como você pode ver, eu não posso mais oh, e olho no modo cena. Você pode ver que agora a câmera se move apenas com o quanto o confinamento permite. Assim que atingimos um dos outros, lá vai você, a câmera não funciona mais e você pode ver que ela é forçada a subir por lá. Muito bom. Então este é um truque muito bacana que você aprendeu. Você pode descer, como você pode ver, não podemos mais mover a câmera. Olhe onde estamos. Não estamos mais no centro porque a câmera está confinada aqui. Ele não se move. Então, espero que você goste. Espero que você goste do estrito. Obviamente, isso precisa ser corrigido. Eu não gosto disso. Precisamos mudar esse colisor de polígono um pouco. Então talvez faça assim, talvez este assim. Portanto, é sempre melhor ter as formas quadradas. Certifique-se de que você olhe isso. Não faça apenas com indiferença, certifique-se de que você dedique um tempo para criar o combinador corretamente. Então, espero que você tenha gostado que o vídeo tenha duração suficiente. Ainda há uma coisa que precisamos consertar e essa é a animação de sangue nos inimigos. Então, vou te dar essa tarefa. Então aqui estas animações flash no final, queremos nos certificar de destruir todo esse sangue que sai do jogador, o inimigo. Não queremos mantê-los na hierarquia. Então, com isso feito, espero que você goste. Espero que você esteja encenando tudo, encenar tudo. O que fizemos neste vídeo mudou a escala de tempo e agora é muito mais legal ao fazer a transição. E fiz uma máquina de cinema. Tiros. Confirme as alterações. Olhe para o mestre. Agradeço seu trabalho. Aproveite o quão longe você chegou, e eu te vejo no próximo vídeo. 42. Fading e out (tela).: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E este, você notará que temos o desvanecimento dentro e para fora. E para que serve isso? Bem, se olharmos aqui, temos uma enorme caixa preta. E você pode ver isso agora. Não vemos nada no jogo. Por que isso? O que aconteceu? Que deixaríamos o jogo? Por que é tão pequeno agora? Por que estamos ampliados? Tantas perguntas, tão poucas respostas. Se eu executar o jogo, você notará que começamos o nível desaparecendo da imagem preta. E se andarmos por aí, você pode ver que assim que entrarmos no portal, não apenas diminuímos a velocidade, mas desaparecemos, e depois desaparecemos de volta quando vamos para o próximo nível. Então, não vamos perder mais tempo e vamos falhar. Oh, tudo bem. Então, agora estamos transição correta de um nível para o outro. Temos o efeito de escala que diminuímos tudo. A próxima coisa que queremos fazer é que queremos ter algum tipo de efeito de desvanecimento. Então, o que queremos é que B1, a imagem ou o jogo inteiro desapareça para preto. E então, quando entramos em um novo nível, queremos desaparecer. Então, vamos em frente, faça isso. A primeira coisa que precisamos fazer, ou como a saída desvanecida funciona? Teremos uma grande imagem preta aqui que vai desaparecer e depois desaparecer à medida que passamos de nível para o próximo. Então, é tudo sobre uma imagem preta e usamos o alfa nela. Então, vamos fazer isso. Como vamos adicionar uma imagem no Unity? Bem, precisamos de algo chamado tela. Então, vou criar uma tela. Vou clicar com o botão direito do mouse na hierarquia, ir ao seu olho e encontrar o campus. Lá vai você. Agora temos um campus. Se eu clicar duas vezes nele, lá vai você, você pode ver que é uma tela enorme e grande e você pode estar se perguntando, por que a tela é tão grande enquanto nosso jogo é tão pequeno? Bem, é assim que o Unity lida com o uso do Canvas e adicionando imagens. É melhor brincar com as imagens aqui. Em vez de brincar nas imagens, escreva e tenha tudo na frente do jogador e dos objetos no jogo. Portanto, essa é uma maneira muito melhor ou a maneira que a unidade usa para lidar com as coisas. Você também pode ver que temos algo chamado sistema de eventos. E isso nos permite, por exemplo, digamos que tenhamos algum tipo de botão na tela. Queremos clicar nele para que possamos adicionar sistema de eventos sob o Canvas, torná-lo um filho e mantê-lo lá por enquanto. E esse sistema de eventos nos permite realmente apertar botões na tela e nos permitir interagir com a tela. Veremos como isso funciona em um pouco. Mas, por enquanto, queremos entrar no scaler de tela aqui. Você pode ver que podemos dimensionar com o tamanho da tela. E queremos mudar isso de 100 para 1920 até então oito, que é o tamanho da tela que estamos usando ou criando o jogo. Pressione Enter. Lá vai você. Agora tudo está feito. Você pode ver que temos o rodízio de raios e um elemento para a tela que não é tão importante. Não vamos mudar nada demais aqui. Só queremos ter certeza de que o escalador de tela seja tamanho de tela de escala e queremos fazê-lo 1920 por 1080. Certo, ótimo. Agora, com isso feito, próximo passo é adicionar uma imagem. Então, vou clicar com o botão direito do mouse aqui, ir até você e encontrar uma imagem. Então agora você pode ver que temos uma imagem no meio da tela enorme e eu vou, é a imagem desvanecida. Mas mesmo que o tenhamos na tela, você pode ver aqui no jogo que temos como um pequeno bloco. E se eu movê-lo para o lado superior, você notará que está no lado superior do jogo, e no meio, está no meio onde o jogador reside. E no canto inferior esquerdo você pode vê-lo. Portanto, não é mesmo que a imagem aqui no topo do jogo seja enorme. Mas você pode ver isso na tela, é muito pequeno e diminui. Então, é assim que representamos as coisas no Unity na tela da interface do usuário. Agora, o que vamos fazer? Queremos fazer essa imagem preencher toda a tela, torná-la completamente preta. E então vamos usar a transparência para desaparecer e desaparecer. Primeiro de tudo, como fazemos isso tão grande quanto a tela? Bem, há uma opção aqui. Você pode ver que é a ferramenta rect. Quando você clica nele, você pode arrastar e tornar essa imagem cada vez maior e menor. E você notará aqui que temos muitas coisas que é a Rect Transform para lidar e mudar a aparência da imagem. Também podemos segurar Alt e escolher um dos cantos, ou exército. Escolha um dos coordenadores e mantenha pressionada a tecla Alt. E você pode ver que podemos expandi-lo e todas as formas. Mas há uma solução ainda melhor para isso. E isso se clicarmos aqui, você pode ver que temos algumas opções e essas são chamadas de âncora. Então, por exemplo, se eu clicar nessa âncora, a imagem diminuirá grande e pequena com escala para cima e para baixo com base neste ponto aqui, também podemos clicar neste onde ela será dimensionada com base em toda a tela. Você verá o que quero dizer escalonamento quando precisamos dimensionar. Mas o que acontece se mantivermos Alt pressionado? Você pode ver que podemos expandir a imagem dessa maneira. Podemos expandi-lo no meio, podemos expandi-lo para a esquerda e podemos expandi-lo que ele preencha todo o quadrado. A tela inteira imediatamente. E você pode ver que agora a imagem bloqueou totalmente o jogo. E se eu for para a tela e a imagem desvanecida, posso mudar a cor aqui na imagem, e vamos torná-la completamente preta. Agora, como vamos mudar a transparência? Primeiro de tudo, podemos fazer isso aqui para que possamos alterar o alfa na imagem. Mas é meio difícil acessar o alfa na imagem porque precisamos acessar todas as cores vermelha, verde e azul. De outra forma de fazer isso é adicionando algo chamado grupo do campus. Então, se eu entrar aqui e adicionar um grupo de telas, você pode ver que eu tenho a opção de ter Alpha. E se eu mover esse alfa para baixo de 0 para um ou de um para 0, você pode ver em 0 que é completamente transparente. Em um, não é. E eu posso bloquear o re-cast. Isso significa que re-cast significa que sempre que eu quiser clicar em algo, isso pode ajudar a bloquear o re-cast e o interativo é essa imagem interativa? Digamos que não seja. E lá vai você. Então, agora nosso objetivo é criar uma animação. Usando essa animação, vamos controlar o grupo de telas alfa aqui. E então vamos desaparecer e desaparecer toda vez e nosso ganho. Então, com isso explicado, vou lhe emitir um desafio. E seu desafio é desaparecer a imagem para dentro e para fora. Então, vou dar-lhe um processo passo a passo de como fazer isso. Primeiro de tudo, você precisará criar uma animação para o desvanecimento e desvanecimento e ficará preto para transparente e desaparecendo, o que será transparente para preto. Você precisa criar uma transição entre a transição entre as duas animações com base em um gatilho. Então lembre-se, criamos a transição com base em um booleano. Agora é hora de usar um gatilho. Você precisará adicionar um parâmetro de gatilho. Obviamente, você precisa criar um script do UI Manager e adicionar à tela. Você precisará criar um método que desencadeia o desvanecimento. E, finalmente, você precisa chamar esse método a partir do Colton de carregamento no gerenciador de níveis. Então, quase conhecemos todas as etapas. Talvez você não saiba como definir um gatilho. Então é isso que você precisa procurar por si mesmo. E tudo o mais, acredito que é algo qual passamos, vimos com testado. Lembre-se de que a animação funcionará é pressionando o pequeno botão vermelho na gravação na animação para que as informações, pause o vídeo agora mesmo e vá fazer o Chavan. Certo, bem-vindo de volta. Então, a primeira coisa que vamos fazer é entrar na animação. Vou seguir em frente e me certificar de que tenho a imagem desvanecida e criar uma animação. E agora posso entrar nas animações, clicar com o botão direito do mouse aqui e criar a imagem desvanecida. Então estou dentro de animações de ativos e aqui vou criar antes de tudo, o desvanecimento, o desvanecimento e salvar isso. Agora, o que dissemos que a arma de desvanecimento deve ser o desvanecimento em preto para transparente. Certo, ótimo. Então, quanto tempo eu quero que isso demore? Então, vamos fazer isso em torno de 1,5 segundos. Então, vou clicar no botão gravar. E o que eu disse de novo, preto muito transparente. Opa, essa não é a chave que eu estava procurando. E onde ele está? Certo, volte aqui. Então começamos em preto e no final estamos gravando. Quero levar o alfa para 0. Então, o que acontece agora quando eu toco a animação? Começa como preto e depois desaparece muito transparente. Excelente. A próxima coisa que vou fazer é criar o desvanecimento. Então, desaparecendo. E agora começamos em 0 e depois entramos na escuridão completa após 1 segundo. Então paramos de gravar, executamos o jogo tão transparente, desvanecemos para preto. Excelente. Agora, a próxima coisa vamos abrir o Animator. E aqui vamos antes de tudo, ok, então o desvanecimento e desvanecimento significa que vamos de preto para transparente. Isso deve começar assim que começarmos de novo. Então, não aparecemos apenas no modo de jogo, nós desaparecemos no modo de jogo e, em seguida, temos o desvanecimento para preto criará uma transição aqui. Essa transição não deve ter tempo de saída e as configurações devem ser um, quero dizer, a duração da transição deve ser de 0. Vou criar um parâmetro que será um gatilho, e vou chamá-lo de Start, fade. Faça esse capital. Lá vai você. E adicione-o como uma condição aqui. Excelente. E espero que você tenha feito todos esses passos. São coisas que já abordamos e já criamos. E antes de seguirmos em frente, precisamos ter certeza de que esta tela também esteja presente no segundo nível Y ou no nível 1. Por quê? Porque se formos para o nível 1, onde estão as cenas? Se formos para o nível 1, você verá que não temos uma tela, então não poderemos desaparecer quando começarmos o Nível 1 ou quando formos para o nível 1. Então, de volta ao nível 2, vou chamar isso de tela de interface do usuário Enter. E vou para os Prefabs. Onde estão os prefabs? E vou criar e aqui uma pasta de interface do usuário. E aqui vou arrastar o campus da interface do usuário. Salve isso. E agora veja como os prefabs são incríveis. Eigen não acredita que falamos sobre isso. Mas se entrarmos nas cenas no nível um, podemos ir imediatamente para Prefabs UI e adicionar uma tela e nossos jogos. Então agora temos uma tela aqui no nível 1 e não precisávamos criar tudo de novo. Essa é a beleza de ter Prefabs. Com isso feito de volta no nível 2. Vamos ver o que temos aqui. Então as animações são reproduzidas, tudo deve estar funcionando agora, quando executamos nosso jogo, devemos ter um desvanecimento e animação. Então eu executo o jogo. Lá vai você. Então você pode ver que eu tenho um loop desvanecendo na animação. Então, vou entrar nas animações, encontrar o desvanecimento e desvanecimento, e me certificar de que não há tempo de loop. Salve isso. E agora, quando executamos o jogo e o segundo agora temos um desvanecimento em uma polegada. Excelente. Então você sabe por que isso está acontecendo? Bem, porque na entrada, a primeira coisa que fazemos é o desvanecimento. Então isso já está configurado para nós. Agora, a próxima coisa que precisamos fazer é criar o UI Manager e adicionar ao campus. Então, vou entrar em meus scripts aqui, clique com o botão direito do mouse e criarei uma nova pasta para a interface do usuário. Nós mudamos muito o nome dessa pasta, mas, por enquanto, vamos em frente e criar um script C-sharp, que será o UI Manager ou deveria estar no gerente. E isso não tem preocupações. Aguarde que isso seja compilado. Vamos movê-lo para os gerentes. Acredito que seja manteiga aqui ou talvez não. Eu não sei. Depende da sua preferência. Acho que no gerente talvez seja melhor. Cancele ou não, vamos mantê-lo. Vamos mantê-lo em seus olhos. Mesmo que seja um gerente o manterá na interface do usuário. Vou abrir o UI Manager, abrir o Visual Studio. E a primeira coisa que precisaremos é uma referência à imagem que queremos desaparecer aqui. Espero que isso não tenha sido muito difícil porque vai ser um campo serializado, que é uma imagem do tipo de imagem. Oh, então havia algo que espero que alguns de vocês consigam descobrir. Se eu tentasse usar a imagem aqui. Você notará que eu não tenho uma opção para isso. O que eu preciso é que eu preciso usar seu motor Unity ponto u i. Então espero que este não tenha sido um grande problema para você. Espero que você tenha encontrado esse erro ou encontrado esse inconveniente no desafio e saído do seu caminho e tente descobrir a solução se não o fez, não se preocupe com isso. Foi em meu nome. Eu deveria ter avisado você de antemão. Não se preocupe. Imagem para o destino. Alguns de vocês podem estar pensando, sim, não se preocupe, claro, apenas minha confiança foi destruída. De qualquer forma, o que vamos fazer nesta classe aqui e no UI Manager? Bem, como dissemos, precisamos de um método. Crie um método que aciona o desvanecimento e chame esse método a partir do coworking de carregamento no gerenciador de níveis. Certo, então vou me certificar de que isso é público. Então, vou criar uma imagem de desvanecimento de vazio público. E aqui vou ir em frente e acessar a imagem para desaparecer. Vou colocar um componente nele, que é o animador. E vou definir o gatilho. E esse gatilho será a referência de uma string para o desvanecimento inicial. E hoje, agora, copie isso de volta aqui, cole-o aqui, feche, salve isso. Então, o que estamos fazendo? Porque criamos a animação na imagem real para desaparecer. Você pode ver que o animador está aqui neste objeto do jogo. Um dos componentes da imagem a desaparecer. Então, o que fazemos é acessar o animador na imagem e, em seguida, definimos o gatilho que é iniciado. Certo, ótimo. Agora, o próximo passo é ir em frente e chamá-lo de Gerenciador de níveis. E há duas maneiras de fazer isso. Podemos ir em frente e encontrar o objeto do jogo ou encontrar o UI Manager. Ou vamos seguir em frente e criar uma instância disso. Vou criar um Gerenciador de UI estático público. Em exemplo. Salve isso. E vou criar um começo aqui. E, em seguida, inicie a instância será igual a isso. Salve isso. Agora, de volta ao gerente de nível, onde devemos colocar isso? Bem, acredito que assim que atingimos ou assim que entrarmos no nível de carregamento. Então, temos a escala de tempo em 0,2. Vou seguir em frente e acessar o UI Manager, a instância. E vou ir em frente e desaparecer a imagem. Agora, você notará algo que porque dissemos a escala de tempo para 0,2, o desbotamento da imagem será mais lento do que o que temos aqui. Então, vamos testar isso e ver se funciona. Se você acha que é um pouco lento, você pode ir em frente e tornar o desbotamento da imagem um pouco mais lento. Então lá vamos nós. Começamos, corremos para cima. E quando entramos neste portal aqui, lá vamos nós. Estamos diminuindo a velocidade e esquecemos de adicionar um hey, esquecemos de adicionar a referência. Você pode ver aqui o erro. Se eu clicar duas vezes nele, você verá que a imagem de ponto do UI Manager desvanece, há algo errado. O que há de errado? Bem, não há instância. Ok, então se eu for para a tela da interface do usuário, notaria que nem adicionei o gerente, então não tenho certeza do que está sendo chamado. Então, vamos arrastar o UI Manager. Vamos nos certificar de que dissemos a imagem desvanecida e vamos aplicar as alterações. Então, observe agora que a tela neste nível não tinha um UI Manager, certo? E este é o que usamos no nível um. Se eu for agora para o nível um, clico na tela da interface do usuário. Ele tem um UI Manager e a imagem já está configurada. Assim, você pode ver novamente o poder de usar aplicativos de luto. Quão legal é isso? Então, de volta ao nível para executar o jogo, nós desaparecemos. Não há mais erros. Nós subimos, passamos pelo portal, e lá vamos nós, diminuímos a velocidade. Temos esse açúcar aqui. Então, houve um pequeno problema aqui. Como você percebe que não tivemos tempo para desaparecer. Então, vou acessar o desvanecimento novamente e a imagem desvanecida. E onde está isso? Bem, isso dependerá de quanto tempo ou qual é a escala de tempo que você tem aqui. Então, vou fazer 0,5. Salve isso. E em vez de 1,5 segundos, vou fazer isso por aí, vamos fazer isso em torno de 0, talvez 1 segundo ou 2,5º. Digamos que seja cerca de 40 do jogo. Teste, veja se temos tempo para desaparecer. Então eu subo, eu me movo. Lá vamos nós, desaparecemos completamente e depois paramos de desaparecer. E muito normalmente. Então, com isso feito, espero que você goste. Vamos nos certificar de confirmar nossas alterações. Etapa todos confirmam as alterações. Criou uma imagem desvanecida usando você é incontável. Confirme as alterações. Espero que você goste e te vejo no próximo vídeo. 43. Seção 7: ambiente destrutivo - Tornado: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vou maximizar o jogo. Adicionamos uma mecânica arrojada. Então, agora, à medida que nos movemos, se eu clicar na tecla Espaço, lá vai você. Você pode ver que eu me movo um pouco mais rápido de um, mas na verdade dobrei vezes a velocidade. Então, quando eu corro, eu me movo duas vezes mais rápido. Lá vamos nós. Podemos ver um eu não posso matar os inimigos para correr ao redor deles e atirar neles. E sim, lá vamos nós. Então, adicionamos esse mecânico muito bonito e legal. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então agora podemos voltar e não jogar, clicar duas vezes nele. Ok, então agora o que queremos criar, na verdade, a primeira coisa que quero fazer é livrar-se dessa imagem. Agora, o que podemos fazer é desligar a tela, mas isso não é muito prático. Mas o que podemos fazer, e esta é uma ótima oportunidade para ensinar algo novo. Se você clicar na tela, você pode ver que a camada e aqui está, você está. Então, se entrarmos aqui para as camadas, você pode ver que temos todas as camadas aqui. E você pode ver que temos algum tipo de fechadura e então podemos ter algum tipo de eu aqui. E se eu clicar no olho, você poderá ver que tudo sob a interface do usuário ou tudo sob a interface do usuário da camada desaparece. Se eu clicar no jogador, eles vão, você pode ver o jogador também desaparecer. Ainda está no jogo. Ainda funciona quando começamos o jogo. Você pode ver na janela do jogo, ainda está lá, mas na cena, não podemos vê-lo. O que é isso fora do caminho? A próxima coisa que queremos fazer é adicionar algum tipo de mecânica arrojada, assim como temos no jogo Hades. Podemos ver que podemos correr rapidamente. Vamos fazer o mesmo neste jogo. É um pouco diferente, obviamente por causa da limitação e sprites. A limitação em uma equipe. E vamos usar os sprites aqui. Onde eles estão, esses dramaturgos sprites para a camada azul. E você pode ver que temos isso girando aqui. E isso é o que vamos usar. E obviamente, obviamente, na verdade , nos recursos que deixei para outro tipo de torpedo que você pode usar que é um pouco diferente e cores do que este, mas acho que isso não é um problema enorme. Então, o que vamos fazer? Em primeiro lugar, vamos explicar o que o torpedo do tornado. Nem sei como chamá-lo. Talvez você tenha uma maneira totalmente diferente. Vamos chamá-lo de arrojado a partir de agora, tudo será o arrojado apenas para evitar qualquer confusão. Então, antes de tudo, o jogador se moverá muito mais rápido. Então, aumentaremos a velocidade de movimento do jogador. E a animação será acionada, o que fará com que o jogador vá em círculos. E enquanto o jogador estiver fazendo o tornado, ele será invencível para que ele não possa se machucar por nada. Isso é algo que implementaremos mais tarde quando adicionarmos um sistema de saúde ao jogador. Por enquanto, saiba que isso é o que acontecerá quando o jogador estiver arrojado. E finalmente, ele pode quebrar objetos ao seu redor. Então, como você sabe o nome desta seção, assim como os objetos estruturais. E antes de tudo, precisamos adicionar uma forma ou um pouco de movimento avançado ao jogador para que ele possa destruir esses objetos do jogo sem mais ou azul. E vamos começar. Então, a primeira coisa que queremos fazer é ir para o controlador de camada, ver quantos scripts temos. Acabei de notar, isso é bom. Isso significa que estamos aumentando nosso entendimento. De qualquer forma. Primeiro de tudo, precisaremos criar uma maneira de acompanhar a velocidade de movimento atual. Porque agora temos a velocidade de movimento regular, teremos agora a velocidade de movimento arrojada. Então, a primeira coisa que quero fazer é criar um flutuador privado e a velocidade de movimento atual. E essa velocidade de movimento atual mudará se estamos fazendo o torpedo ou tornado, e se estamos simplesmente andando. Então eu vou criar um bool privado que será chamado de can dash. E por que estamos criando esse booleano? Bem, porque você verá que agora uma atualização que queremos traçar. Então, vamos clicar em algum tipo de chave e começaremos a correr, mas não queremos poder correr o tempo todo. Queremos ter um arrefecimento para o traço, e também queremos ter algum tipo de comprimento ou o traço. Então, teremos este booleano para manter tudo sob controle e garantir que possamos correr 20 vezes seguidas. Então, a próxima coisa que vou fazer é rolar para baixo aqui e ver onde o jogador está se movendo. Então, clique duas vezes e posso rolar para baixo e encontrar o Rigo. Temos o jogador em movimento e é aqui que adicionamos a velocidade. Portanto, é a entrada do movimento vezes a velocidade do movimento. E em vez de usar a velocidade de movimento, vou dizer que é a velocidade de movimento atual. E só para ter certeza de que temos uma velocidade de movimento atual e não é 0. E comece, vou definir a velocidade de movimento atual para ser igual à regular. Velocidade de movimento. Lá vai você. Você pode alterar o nome da velocidade de movimento, se quiser, você pode nomear a velocidade de movimento regular. Vou mantê-lo assim. Não é muito confuso para mim. Se for grosso para você, vá em frente e mude o nome. A próxima coisa que queremos fazer é configurar as variáveis 40 arrojadas. Deixe-me adicionar aqui um comentário que estamos arrojados. Drajado e movimento por aparência. Então, vou criar um campo serializado e será o flutuador, e será a velocidade do traço. E, por enquanto, vou defini-lo para qual é a nossa velocidade de movimento? Qual foi a velocidade de movimento no jogador de dunas? Vamos ver, dez. Ok, então, vou fazer isso pelo menos 20, talvez até mais tarde. A propósito, poderemos controlar a partir do espectral. Portanto, isso não é um problema. E a próxima coisa que eu quero ter certeza de que temos são essas duas variáveis que são a ou não, na verdade, essa deve ser privada. Ou vamos prosseguir e torná-los serializados. Então, o comprimento do traço, que será definido como 0,5 f. Então, é por quanto tempo estamos correndo. E então teremos o traço esfriar, que será o tempo entre cada traço e vendê-lo de uma só vez. Então agora temos a opção de brincar com os traços, a velocidade do traço, o comprimento do traço e o tracejado. Legal. Agora 1 segundo. Certo, ótimo. Agora uma atualização. Vamos seguir em frente e criar um método aqui não são método na verdade. Primeiro de tudo, antes de criarmos o método, vamos verificar algum tipo de entrada. E com base nessa entrada, vamos seguir em frente e mudar a velocidade atual, torná-la a velocidade do traço e, em seguida, garantir que não possamos mais correr. Você pode usar o botão que quiser. Talvez eu use o espaço. Vou usar a entrada que get key down. E você pode ver que isso retorna um verdadeiro durante o quadro, o usuário começa a pressionar uma tecla e identificado por um código de tecla. Então aperte a aba, abra os colchetes. Vou escrever aqui espaço do ponto do código chave, e lá vai você, podemos ver que temos as opções para mapear em nossas chaves e queremos ter certeza de que podemos traçar, abrir isso aqui. Então, a primeira coisa que fazemos é a velocidade de movimento atual se torna a velocidade do traço. E pode traço está definido como falso. Então lá vamos nós. Clicamos no espaço. Verificamos se podemos correr. Se ambos forem verdadeiros, o movimento atual se torna a velocidade do traço, então é muito mais rápido. Então o movimento atual aqui se torna 20, não dez, nos movemos mais rápido e não podemos mais correr. Claro, teremos que redefinir esses valores em apenas um pouco. Mas, por enquanto, vamos testar isso e ver se funciona. Ah, e esquecemos de fazer algo que é criar a animação real. E vamos fazer isso em um pouco por enquanto, vamos testar nossa mecânica do trabalho. Então, vou fazer isso um pouco maior. Então eu me movo. Se eu tivesse a chave do espaço. Sim, não, nada aconteceu. E por que isso? Porque temos algum tipo de erro. Certo, isso é muito chato, mas não nos impede de nada. Qual parece ser o problema? Pressionei Space, pego keydown, declare controller. Certo, bem-vindo de volta. Então, depois de um pouco de escavação e fiquei muito confuso por que isso não estava funcionando. E isso porque o candidato não estava definido. Então, não era verdade. Eu me certifiquei de defini-lo como verdadeiro e começo. E agora também tive esse log de pontos de depuração. Então deixe-me mostrar o que eu estava fazendo. Eu estava confuso. Se necessário. problema era que o movimento atual não estava mudando por algum motivo. Então eu tinha o log de pontos de depuração definido aqui e estava procurando no console. Então, observe que ele manteve seu estado, e então percebi que esse método não estava sendo pego. Então eu sabia que o espaço premente estava bem. Eles podem bater provavelmente não era. Eu defini isso como verdadeiro. Funcionou. Deixe-me remover isso, salve isso. Este é apenas o poder da depuração. E como você pode ver, às vezes nem tudo funciona perfeitamente. Às vezes você precisa se aprofundar nas coisas. Então, agora, quando eu me movo, você pode ver o movimento. Você pode perceber o quão rápido é quando pressiono a tecla de espaço. Lá vamos nós. Você pode ver que estou me movendo muito mais rápido, ok, com isso feito, o próximo passo é realmente nos levar volta à velocidade regular e também garantir que o cool-down do traço funcione e fins de semana , então novamente depois de onde quer que o traço esfrie. E isso será, na verdade, parte do seu desafio. Seu desafio é criar dois cotilédones. Então, o primeiro será o contador de arrefecimento onde vamos esperar e depois poderemos torpedar novamente. E o segundo será a velocidade na qual nos movemos para que, no final disso, coloquemos a velocidade de volta à sua velocidade normal. Portanto, essas instruções pausam o vídeo agora mesmo e vão fazer o desafio. Certo, bem-vindo de volta. Então, o que vamos fazer aqui? Assim que tivermos o movimento, teremos que chamar rotinas. O primeiro aqui será um enumerador ocular. E vai ser o traço. Esfriar. E aqui vamos ceder, retornar novos. Aguarde quatro segundos. E vamos esperar pelo traço, puxar para baixo. E quando terminar, vamos dizer que pode traçar igual a verdade. E então vamos criar outro numerador I, que será chamado de comprimento do traço. E você sabe o quê? Acho que o nome não é suficiente. Vou chamá-lo de contador de comprimento do traço, só para sabermos o que está acontecendo e os contadores de arrefecimento. Claro. Vamos chamá-lo de contador para baixo do painel. E vou copiar isso. Então, produza, retorne um novo peso por segundo, mas agora é o comprimento do traço. E quando terminarmos o traço, isso significa que nós corremos para, eu não sei, por mais tempo que o arrefecimento do traço seja. Por mais tempo que você queira que o jogador se mova rápido. Vou mantê-lo em 0,5. Talvez nós o mudemos. Você pode fazer o que quisermos. Vou definir a velocidade de movimento atual para ser igual à velocidade de movimento regular. Então, finalmente, precisamos iniciar o coltan, que é o traço, arrefecer o contador e, em seguida, começar outra co-rotina. E vai ser o contador de comprimento do traço. Contador de comprimento do painel. Certo. Então eu estava olhando e me perguntando por que isso ainda estava vermelho. Isso porque na verdade não chamamos o balcão frio down. Acabamos de chamar a variável lá em cima. Nós salvamos isso. Então agora pressionamos o espaço. Dissemos que o movimento atual para a velocidade do traço. Sem ele, não podemos correr mais. Começamos a co-rotina. O traço esfriar. Após o resfriamento terminar, podemos então correr novamente e o comprimento do traço. Então, salve isso. Voltamos ao nosso jogo. Nós executamos o jogo. E lá vamos nós. Podemos ver que agora nos movemos rápido. E então começamos a mover o slogan, tão rápido, depois lento novamente, rápido, depois lento novamente. Quão legal é isso? Lá vamos nós, tudo está funcionando. E se eu tentar correr várias vezes, você pode ver que eu não posso fazer isso. Tenho um período de tempo no meio. Não posso me mover muito rápido tanto quanto gostaria. Então, espero que você goste. Espero que você esteja cometendo as mudanças que criaram um movimento de torpedo, vou chamar isso porque parece muito legal. Etapa tudo criado. Torpedo, movimento. Confirme as alterações. E verei você no próximo vídeo, onde na verdade adicionaremos visualização a esse torpedo, a esse arrojado. 44. Como animar o Torpedo: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, na verdade, adicionamos uma animação, que é a camada que está entrando no animador. Então, quando eu executo o jogo, você pode ver aqui que estamos nos movendo. Quando pressionamos o espaço, não nos movemos mais rápido. Na verdade, fazemos o valentão. O que é realmente intimidá-los? Algo da minha infância. Mas, de qualquer forma, você pode ver enquanto caminhamos, também podemos fazer isso. Temos a coisa fria e bacana é que adicionamos no último segundo, estava fora do topo da minha cabeça quando estamos atirando. Se eu fizer o torpedo, lá vai você. Você pode ver que não podemos mais porque obviamente não temos uma arma, nossas mãos. Então, não vamos perder mais tempo. E vamos começar. Certo, então é hora de animar o torpedo. Em primeiro lugar, vamos fazer é entrar no reprodutor de cúpula, selecionar as animações, a marcha lenta. Vamos criar um novo clipe e aqui que será definido e a camada de animações. E vamos chamá-lo de arrojado porque cada um de nós ou jogador arrojado para permanecer consistente com o outro nome. Então, jogador arrojado, salve isso. E agora vamos começar. Agora, sabemos que estamos acessando. Estamos alterando as animações ou as propriedades no renderizador de sprite corporal e rolando para baixo para os sprites. Então, vamos adicionar isso. Vamos abrir isso para que possamos vê-los corretamente, assim como sempre estávamos fazendo. Então, vamos ver o arrojado 1, 2, 3. E vamos, na verdade, eu quero apenas abrir isso e ver corretamente o que está acontecendo. Então temos 1, 2, 3, 4, 5, 6, 7 sprites. E nós temos todos eles corretamente. Vamos ver. Ok, então todos eles, isso é chamado isso, o D1, D2, D3, D4, 5, 6 e 7. Então eu só quero evitar a confusão só para saber quais são os d. Então lá vai você. 12345 a sete. Mantenha pressionado, Shift, selecione-os todos, coloque-os aqui. E eu vou remover o primeiro e vou mover tudo isso para o início. E agora vamos expandir isso um pouco, mas vamos dar a volta. Lá vamos nós, executá-lo. Vamos ver. Certo, muito bom. Então, mesmo que ainda tenhamos o braço aqui, se você quiser, isso é algo que eu estava pensando muito. Então o braço e o gon permanecem no lugar. O que devemos fazer sobre isso? Bem, honestamente, vou mantê-lo como está. Você pode girar o braço, você pode votar começou, você não será capaz de atirar. Acho que seria um bom mecânico na verdade. Talvez devêssemos adicioná-lo. Não, porque eu quero ver o braço e a arma girando durante esse tempo não será capaz de atirar obviamente, mas não queremos mudar a rotação da arma. Isso causará um problema. Lá vamos nós. Este é o arrojado, mas podemos fazer é que talvez possamos desligar assim como podemos criar uma gravação onde desligamos o corpo e o braço do jogador. Talvez apenas os esconda por um segundo. No início, nós os desligamos. E até o final, opa, não o corpo. Eu quis dizer o braço e as armas ligadas. Nós os desligamos. E no final, quando terminamos a rotação, precisamos ter certeza de que o, este é o último. Cole-o aqui. Nós ligamos isso de volta. Agora, espero que isso não cause nenhum erro. Nós salvamos isso, executamos o jogo. Também. Precisamos realmente acionar isso. Deixe-me voltar. E deve haver um problema. Então, o que eu acredito que vai acontecer, talvez isso cause um pequeno problema aqui. Então você pode ver as armas ligadas. Temos uma referência a ele e ao ponto mais distante. Então, o que eu tenho medo é que quando desligamos as armas, elas não funcionarão mais. Mas vamos ver o que acontece e o desperdício, salvamos isso. Vamos entrar no animador e vamos nos preocupar com isso em um pouco. Então, o que deveríamos estar fazendo? Vamos começar a correr quando estivermos no jogador andando. Então, vou do jogador andando para o jogador arrojado. Vou criar um gatilho aqui. E vou chamá-lo de traço. Lá vamos nós. A condição aqui será o traço. Sim, então, de caminhar para arrojado, temos isso. E o que podemos fazer é que talvez teremos um tempo de saída porque não temos um tempo real para quando paramos o arrojado. Não temos uma condição que nos faça parar de bater. Se não voltarmos, continuaremos correndo para sempre. E também podemos ser arrojados quando estamos ampliando. Então, vou mover isso um pouco, fazê-los parecer um pouco melhores. Lá vamos nós. Lá vamos nós. E vou me certificar de que isso também está sob a condição de arrojado. E vamos remover qualquer tempo de transição da caminhada e do arrojado. Vamos seguir em frente e testar isso. Na verdade, se eu entrar no animador executar o jogo, podemos ver o ocioso aqui. E não deveria ter maximizado ao jogar o jogo. Vamos ver como isso funciona. Então este é o meu processo real de eu traço. Lá vamos nós. Nós o temos funcionando corretamente. Parei de correr dois. Certo. Então, como você pode ver, há algo um pouco errado se eu tentei atirar agora, onde estão as armas? Para que cometamos algum tipo de erro no jogador da condenação, no arrojado, e este está desligado. Eles ficam ligados? Sim, eles fazem. No último quadro, mas por algum motivo ele não ligou. Então, vou executar o jogo novamente e ver qual é o problema. Então eu traço o, ok, agora eu sei o problema que estamos fazendo loop. Então, na animação, camada, traço, pare de looping, esta é a primeira vez que eu esqueço tantas vezes de remover o loop em um jogo. Então, vamos executar isso novamente. Teste isso. Então eu faço o traço, parei de correr. Eu olho para o doom player. Sim, lá vamos nós. Então olhe o que acontece quando nos traçamos. Ok, então isso seria traço. Eu não sabia 0. Então, ainda estamos na animação arrojada. Ótimo. Agora vamos fazer uma transição volta do arrojado para o jogador andando e o jogador ocioso. E este terá um tempo de saída. Nós removeremos o tempo de saída no caminho de volta. Então, do traço para o jogador, em marcha lenta e andando, ambas as transições não devem ter um tempo de saída, nem precisam ter uma duração de transição. E enquanto estamos indo, teremos algum tipo de tempo de saída aqui. Então, vamos manter o tempo de saída como está. Por quê? Porque quando você está criando animações e você tem tempo extra em meio que acontece automaticamente e perfeitamente nesse momento, se tivermos um tempo de saída um pouco mais longo, a animação pode ser corte no meio e depois volte para a marcha lenta. Então, vamos testar isso. De qualquer forma. Vou seguir em frente e executar o jogo. Então, quando eu corro, lá vamos nós e não voltamos. Por que isso? Não voltamos aos olhos, o link por algum motivo. Há algo que não está funcionando corretamente. A maneira como isso funciona é quando essa animação está sendo reproduzida, então temos um tempo de saída. Portanto, não é sobre este, aquele que está indo em direção ao arrojado para aquele que volta. Então isso foi um erro da minha parte. Algo que eu pensei que sabia ou, claro, sei disso, mas por algum motivo estou confundido com o caminho de volta, não o caminho a seguir. Mas de qualquer forma, uma coisa eu notei, se jogarmos agora, o jorro funciona corretamente. Então, mesmo se estivermos andando, dissemos o gatilho, temos a divisão. Certo. Então, enquanto estamos trabalhando, lá vamos nós. Paramos de trabalhar porque estamos clicando nisso. Vamos testar isso dentro do jogo. Mas, por enquanto, você verá que, quando nós tocamos, só temos o aviso de animação aqui no arrojado. Então você verá que nós jogamos tem a animação e depois voltamos. Por que isso? Bem, porque na hora de saída e aqui estamos jogando 60% dele. Então, o que faremos é simplesmente aumentar isso até que ele se torne em torno de 97 ou mesmo um. E este também, então isso é uma porcentagem. E quando você aumenta, você vê aqui na linha do tempo que jogamos todo o arrojado e depois voltamos para o jogador andando por volta de 97. Eu não gosto de mantê-lo em um porque vamos começar o, novamente o jogador arrojado ou ter algo obsoleto. Então 97% executam o jogo. Agora, quando corremos, lá vai você. Fazemos o traço. Fazemos o traço, fazemos o traço e tudo está funcionando corretamente. Vamos testá-lo quando estamos andando do jogo. Então estamos andando, estamos andando, corremos. Certo, não está sendo acionado. Muito bom. Por que não está sendo acionado? Bem, porque é parte do seu desafio. Seu desafio é acionar a animação do torpedo para que você tenha apenas uma tarefa e isso é uma atualização. Quando pressionamos os botões, certifique-se de acionar a animação e você deve saber quais botões. Talvez você use algo diferente do espaço. É por isso que eu uso botões e sempre pauso o vídeo agora mesmo e vou me certificar de que vamos correr. Certo, bem-vindo de volta. Então, aqui, quando corremos, vamos seguir em frente e dizer que o animador do jogador definir acionadores, definir gatilho. E como esta é uma referência de string, voltamos , copiamos, voltamos aqui, colamos, fechamos isso. E, finalmente, também quero adicionar um pequeno comentário aqui para mais tarde, vamos mudar ou garantir que o jogador seja invencível. Portanto, acesse o manipulador de integridade da camada porque ele será um script separado. E certifique-se de que ele seja invencível por um tempo. Ótimo, então vamos salvar isso agora, voltar ao nosso jogo e vamos correr. Então agora podemos atirar. Fazemos o traço, podemos atirar, fazemos o traço. E se estivermos arrojados, ainda estamos atirando mesmo que o braço esteja destruído. Então lá vai você. Também podemos Dash enquanto estamos caminhando e funciona perfeitamente bem. Lá vai você. Você pode ver que podemos correr enquanto caminhamos e voltamos a caminhar. Agora, o problema aqui é que quando corremos, atiramos, ainda podemos continuar atirando, mesmo estando arrojados. Agora, é meio fácil. Podemos criar algum tipo de booleano aqui. Certifique-se de que se pudermos correr, então não podemos atirar. Essa é uma boa ideia, na verdade. E onde ela está apontando arma enquanto o jogador atira? E podemos criar uma condição. E aqui, isso é muito bom. Eu não queria fazer isso agora porque mais tarde, quando criamos armas avançadas, tudo o que gira em torno da mecânica de tiro será movido do roteiro. É aqui que explicaremos como evoluímos nossos scripts à medida que avançamos. Mas, por enquanto, vamos adicionar essa pequena condição. Essa é uma boa maneira de ensinar algo novo. Vamos verificar antes de começar a atirar no jogador, se pudermos, o traço é igual a false. Por que isso? Bem, porque enquanto estamos correndo o ponto pode traçar, então temos esse tipo de contador. E vamos dizer aqui que retorno, se este, desculpe-me, volte, simplesmente isso. Então, o que significa retorno? Retorno significa que saímos do jogador atirando. Portanto, todo esse código aqui não é executado assim que a vela for falsa, não podemos mais atirar. Vamos testar isso. Espero que você entenda o que queremos dizer com retorno. Retorno significa que acabamos de sair, paramos tudo nisso. Se essa condição não for verdadeira, então o traço, o traço é verdadeiro sozinho. Isso significa que toda essa condição é falsa. Isso significa que não retornamos. Então salve isso de volta em nosso jogo, do jogo. Devemos ver que quando estamos arrojados, lá vamos nós. Paramos de atirar até que eles esfriem como terminado. Certo, ótimo. Então, esta é apenas uma pequena linha de como podemos consertar isso mais tarde, é claro, tudo isso mudará. Então, espero que você tenha gostado do vídeo. Espero que você tenha assumido os compromissos aqui. Espero que você tenha deixado um comentário. Caso contrário, este é o momento perfeito para fazê-lo. Muito obrigado. palco fez a animação arrojada. Agora estamos mais frios. o commit das alterações e verei você no próximo vídeo. 45. Objetos quebráveis: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Este vídeo será um pouco mais longo porque essa é uma das vezes que eu realmente não tinha certeza do que vamos fazer. Então, eu não tinha certeza se queria tornar isso um gatilho ou queria fazer disso um objeto sólido. Mas de qualquer forma, quando passamos por isso, mas nada acontece, mas se passarmos por isso, você pode ver que podemos quebrá-lo. Quão legal é isso? E ele desaparece sozinho depois de alguns segundos. Então, não vamos perder mais tempo. Certifique-se de colocar sua concentração SCAP. Tenho pequenos erros e algumas hesitações durante isso, mas não se preocupe, expliquei tudo o máximo possível. Então, vamos começar. Oh, ok, então agora é hora de adicionar alguns objetos quebráveis. Este é o ponto inteiro da seção. Estamos no segundo vídeo e ainda não adicionamos nada para destruir. Então, vou entrar em meus sprites aqui. E vou fazer isso um pouco maior. Neste caminho. Acho que podemos até fazer com que esses ícones sejam um pouco menores, então eles se encaixam bem. Lá vamos nós. Então, vou clicar com o botão direito do mouse em criar uma nova pasta, e esses serão os objetos quebráveis. Objetos quebráveis, e é por isso que sempre criamos pastas. Imagine se tivéssemos todos os sprites completamente em uma única pasta, teria sido um pesadelo. De qualquer forma, entraremos nos recursos, como você pode ver aqui, temos muitos bots para destruir. Vou escolher o caminho certo. Vou escolher o objeto quebrável branco. Lá vamos nós. De repente entramos aqui. E podemos ir em frente e dissecar isso. Então, vou me certificar de que é múltiplo. E eu vou fazer isso pode estar fora da tela e vou avisá-lo quando eu terminar. Certo. Então, bem-vindo de volta. Deixe-me dizer o que eu fiz. Eu não queria te aborrecer com todos os detalhes, então tudo o que fiz, cortei 32 por 32 a caixa branca. Temos três partes diferentes aqui e três intervalos diferentes são usados. O W1, W2 e W3 para descrever a maior quebra pop. E eu me certifico de que temos essas pequenas três peças aqui. Eles serão úteis mais tarde. Então, vou descartar quaisquer alterações. Também criei uma animação para as partes de bicicleta. Então lá vai você, você pode ver isso se separar. Vamos nos certificar a partir de agora que vamos para o quebrável. Então você pode ver o branco comprado quebrando, certifique-se de que ele não faça loop. Vamos salvar tudo isso. Agora o pote de travagem, vou adicionar um ano Box Collider ou uma circular mais não, não uma tela. Remova o componente. Vou adicionar um colisor de caixa. Então box collider 2D. Lá vamos contornar isso, vou torná-lo um pouco menor. Eu faço o tamanho do pixel no sprite. Deixe-me mostrar o que eu fiz também. Então você não fica confuso. Você pode ver que o pote é em torno de um bom tamanho para o jogador. Vamos mantê-lo assim. E o que podemos fazer é ir em frente e fazê-lo, bem, isso dependerá de você. Você quer que seu objeto seja capaz de querer que possamos colidir com esse objeto, ou queremos apenas torná-lo um gatilho. Vou mantê-lo um gatilho por enquanto, mais tarde, se você quiser mudar isso, se você quiser ter interações com os potes, você quer que eles o impeçam de andar por eles. Do que eu recomendo que você o torne não gatilho. Saiba o que, vamos mantê-lo como um não-gatilho. E por esse motivo vamos adicionar um corpo rígido a ele e vamos torná-lo estático. Certo? Portanto, é uma estática. Ele não se move, mas podemos quebrá-lo. Então, o que mais deveríamos estar fazendo aqui? Bem, acho que é isso. Por enquanto. Vamos salvar isso e vamos em frente e adicionar um script a ele, que será chamado de touros de separação. Então, nos scripts, porque queremos adicionar comportamento obviamente ao local que queríamos quebrar. Vamos lá, ok, então vamos ver a interface do jogador dos inimigos, e vamos seguir em frente e criar uma pasta aqui. E vamos fazer isso para o quebrável. Break bubbles abre o botão direito do mouse Criar provavelmente não terá um script diferente ou outro script, ok, então quebrável. Mas o bom de criar uma pasta e definir apenas um script aqui que podemos vê-la de fora. Então, e os scripts aqui, podemos ir em frente e verificar o quebrável para que possamos encontrá-lo imediatamente. Vou adicionar à parte de frenagem. Lá vamos nós. Temos as bolhas de ruptura. Vamos abrir isso aqui. E o que vamos fazer? Bem, porque não estamos usando um gatilho, vamos usar algo chamado “ on collision enter”. Então lá você pode ver na colisão é quando o corpo coliders menos rígido começou tocar em outro colisor ou corpo rígido, e vamos nos certificar de que é 2D. Então aqui você pode ver que, em vez de outros, temos a colisão. Então, o que vamos fazer é verificar se a tag collision.com, ela tem comparado tag? Não, não acontece. Etiqueta. Ou podemos acessar a tag collider.com. Lá vamos nós. Então agora temos o colisor da colisão. E verificaremos se é o jogador. E se for, então vamos destruir o objeto do jogo. Com licença, o objeto do jogo. Salve isso. E também entraremos aqui, verificaremos o animador e veremos que tipo de gatilho ele faz. Então, precisaremos criar um ídolo aqui. Então, entraremos nas animações de ativos. Ou é, onde está? Onde está isso? Quebrável? Parte branca, ociosa. Isso significa que não está se movendo porque obviamente você pode ver que não queremos tê-lo quebrando assim que começarmos o jogo, queremos mantê-lo assim. Então, o que podemos fazer é clicar com o botão direito do mouse aqui e definir isso como o estado padrão. Então lá vai você. E vamos adicionar isso aqui. Crie uma transição que terá algum tipo de gatilho, que é a quebra, Scott break para simplicidade, sem tempo de saída, duração de transição 0. E eu vou seguir em frente e fazer isso como o intervalo. Então vamos voltar aqui. Nós vamos, porque isso é, isso não será muito complicado. Vou pegar o animador imediatamente. Então aqui vou dizer se a colisão como jogador antes de destruirmos ou, na verdade, você sabe, nós vamos remover isso. Vou seguir em frente e pegar o componente, o animador. E no gatilho tor dot set e vai ser o ancinho. E sei que é uma referência de string e não a copiei, mas espero que a quebra seja fácil de entender. E então vou criar um vazio público. Destrua. Bem, não, destrua. Apenas, vamos chamar isso de destrói. E talvez queiramos adicionar algum tipo de frio para não queremos que o pote seja destruído. Então deixe-me dizer o que estou procurando aqui para fazer. O que sem uma corrotina, simplesmente destrua o objeto do jogo. O que eu queria dizer, eu queria usar uma co-rotina para atrasar o desaparecimento das pequenas peças aqui. Mas, por outro lado, achei que poderia ser ainda melhor apenas definir isso aqui, ligar para o evento depois de talvez alguns segundos, ou podemos escolher talvez no segundo três, vá, marcar o evento. Qual é a função? Destrua, salve isso, execute o jogo. Então agora devemos ver que assim que colidirmos com o pote, ele é destruído. E lá vamos nós, o objeto desapareceu. E o que também podemos fazer é, por exemplo, ir na animação da parte de frenagem e da animação. Então, assim que o pote quebra, digamos que ele se quebre aqui. O que podemos fazer, podemos começar a gravar e depois desligar o colisor de caixa. Então você verá que agora a caixa está boa quando você vê o pote completamente e quando ele quebra, lá vamos nós. Não há mais colisor. E se olharmos de perto, podemos escolher o colisor e talvez movê-lo um pouco antes que ele realmente quebre. Então, parece que passamos por isso. Então, salve isso. Execute o jogo. Oh, não. Fale. Não. Não é assim. Desculpe. Oh, então ele gravar Esqueci de pressionar o botão direito. Nós executamos o jogo. Nós tínhamos o pote. Lá vai você nos intervalos. Então parece realmente como se passássemos por ele e você pode ver o pop desaparecendo. Certo, ótimo. Então, o que isso fez, o que precisamos fazer é ter certeza de que esse pote quebre, não quando estamos apenas andando por ele, queremos que ele quebre quando realmente atravessamos ele. E acho que isso vai ser um desafio para você. E seu desafio será retornar um valor booleano. O que eu senti que era quebrar quando estamos executando, bem, quando estamos arrojados, queremos criar um método int player controller que possamos acessar a partir do intervalo que vamos roteiro. Por que isso? Bem, precisaremos criar um método que retorne um bool em vez de um vazio. E esse método deve retornar verdadeiro se formos arrojados e falsos, se não formos e falsos se não, não, isso não é w, é íngreme. Por isso, precisaremos usar os jogadores, a velocidade ou a velocidade de movimento do jogador ou o que você quiser usar. Então, por que estamos criando esse valor de retorno? Porque nas bolhas de intervalo, queremos ter certeza de que o jogador está realmente arrojado. Então, vamos adicionar à condição na colisão on enter. Queremos ter certeza de que não é apenas a camada. Queremos ter certeza de que é o jogador arrojado que acabou de bater em nosso pote. Assim, essas informações criam o método que retornará um valor booleano. Pause o vídeo agora mesmo. Vá fazer o desafio. Vá fazer o seu melhor. Sei que não fizemos esse tipo de método que retorna algo diferente do vazio. Mas eu sei que você está pronto para tentar fazer o seu melhor. Certo, bem-vindo de volta. Espero que isso não tenha sido muito difícil. Vou entrar no controlador de camada. Certo, então qual é o problema aqui? Você pode dizer que, na verdade, eu só quero acessar o movimento atual. E posso saber imediatamente qual é a velocidade do jogador. Mas aqui você pode ver que o movimento atual é privado. Então, o que precisaremos fazer à medida que vamos criar um método aqui. E esse método vai ser uma camada bool pública é arrojada. E o que estamos fazendo aqui? Vamos verificar se a velocidade de movimento atual é igual à velocidade do traço. Nós também poderíamos ter usado a vela, mas eles podem traçar não é equivalente. Onde está isso? Onde estamos redefinindo o numerador. Então ele pode correr não é equivalente a quando a velocidade do movimento pára. Assim, podemos traçar é apenas para esfriar o arrojado enquanto a velocidade de movimento está imediatamente relacionada ao comprimento tracejado. Então, de volta aqui, se a velocidade atual for igual à velocidade do traço, vamos retornar verdadeiro. Caso contrário, vamos retornar false. E, a propósito, poderíamos ter feito algo semelhante a isso, que eu possa removê-los. E como você pode ver, é muito mais limpo. Por quê? Porque só temos uma linha de código sob as instruções if e else. Caso contrário, não poderíamos ter usado dessa maneira. Agora temos isso como público. Voltamos ao quebrável. Vamos seguir em frente e criar um booleano dentro do ano 4. Destruímos o pote depois de verificarmos a colisão, obviamente porque não queremos sempre saber qual a velocidade do jogador a menos que seja o jogador real colidiu, basta bater. Então, vou seguir em frente e criar um bool. E vai ser a camada é arrojada. E será igual ao componente get ponto do objeto do jogo de ponto de colisão. Portanto, é um pouco diferente do que quando estamos usando um gatilho. E aqui vamos simplesmente pegar o controlador do jogador. E vamos verificar se a camada está arrojada, salve isso. Então agora isso deve retornar verdadeiro ou falso. E aqui vamos verificar se a camada está arrojada. Então vamos iniciar a animação. E quando a animação começa em intervalos e destrua o objeto do jogo stick eventualmente. Então, uma coisa que eu queria mencionar aqui é que usamos o Collider. Aqui usamos o objeto do jogo. Poderíamos ter usado o objeto do jogo aqui, salvar isso, e teria funcionado da mesma forma, mas a colisão, você pode ver aqui, retorna uma colisão. Não tem o certo, digamos que métodos que precisamos. Então, se eu for, por exemplo, e no outro lugar, então saia de nível, por exemplo, aqui, o collider 2D é diferente da colisão 2D. Portanto, a colisão faz parte do retorno detalhado à física. Se olharmos na saída do nível, o collider 2D realmente retorna os objetos do jogo que possamos acessar imediatamente a tag enquanto quando se trata da colisão, é apenas um pouco diferente. Eu recomendo que você passe pela documentação do Unity, veja qual a diferença entre colision collider. Essas são coisas pequenas, mas saiba que estamos acessando o objeto do jogo primeiro e depois usando o tack de comparação. Com isso fora do caminho, vamos salvar tudo isso. Vamos voltar ao nosso jogo. Vamos executar o jogo. Vamos tentar quebrar a caminhada patois. Ok, lá vai você. Portanto, não está quebrando. E se eu tentasse correr, opa, esqueci o traço inferior dos dois. Se eu correr. Certo. Também não está funcionando. Por que isso? Certo, então quebrou. Lá vai você. Vamos tentar isso mais uma vez porque há algo que foi um pouco lento. E acredito que o problema é com o jogo. Aguarde um segundo. Então eu acho que quero mover isso, a coisa que lida com o colisor. Quero movê-lo para o começo. Salve isso porque quero que o colisor desapareça assim que começarmos a quebrar o dinheiro. Então lá vamos nós. Você pode ver agora que podemos simplesmente passar. Agora, se você quiser adicionar um pouco mais, talvez eu não saiba autenticidade que queremos mantê-lo apenas um pequeno segundo antes de irmos em frente e quebrá-lo, é sua escolha. Certifique-se de escolher o que quiser. Deixe-me ver. Ok, então se eu quiser me mover, se você mover apenas o pote quebrável, escolha a segunda linha. Lá vai você e você pode ver que você pode movê-lo. Então, salve isso. Agora temos tudo funcionando. Vamos tentar percorrer isso. Não funcionará. Nós caminhamos por lá. Não funciona com o traço através dele, ele quebra. Ótimo. Vamos e nos certificar de que encenamos tudo. E no próximo vídeo, queremos mostrar os pedaços quebrados do nosso pote. Então, queremos ter algum tipo de peças que se espalham. É por isso que eu criei e os sprites em recebíveis aqui temos o P1, P2 e P3. Estas são peças que vão colocar em torno disso e elas vão adicionar um pouco mais de uma sensação de potes quebrando. Então, queremos ter peças voando um pouco e depois desaparecem lentamente, tornando as coisas um pouco mais autênticas, um pouco menos rígidas. Então, verei você. 46. Peças quebradas: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. E neste vídeo, quando executamos o jogo, ainda estamos quebrando a parte, mas você notará que depois de desaparecer, temos três partes. Parte 1 no chão sendo destruído. Temos uma parte 2 e parte 3 e outra parte 3. Portanto, estamos instanciando e quebrando partes quando um objeto ou um objeto quebrável de ligação quebrável é destruído. Então, não vamos perder mais tempo. E vamos começar. Oh, caso. Então, hora de fazer algumas peças quebradas. A primeira coisa que vamos fazer é arrastar esta peça quebrada aqui. E onde ele está? Clique duas vezes em k. Aí estamos. E vamos nos certificar de que está na camada do jogador. E acho que devemos mudar isso para ter os objetos de nível e não o jogador viver. Mas, por enquanto, vou mantê-lo , pois não vale a pena sobre isso. Obviamente, devemos mudá-lo, mas não vamos fazer isso agora. Vou adicionar um 23. Então agora temos três peças. Vou selecionar todos eles e torná-los todos no jogador. Lá vai você, o PS2 e as abelhas. Três, vou salvar isso. Antes de seguir em frente. Vamos mudar isso para o barroco e a primeira parte. Copie a parte 2 quebrada e a parte quebrada 3. Lá vamos nós. Agora, vou para a pasta Prefabs e vou clicar com o botão direito do mouse e criar uma nova pasta para as partes quebradas. Abra-o. E vou adicioná-los um por um. Se selecionarmos todos eles e arrastarmos nós, isso não funcionará. Então, vou arrastar um após o outro. Então agora temos as três peças quebradas e, se você quiser, você pode fazer algo ainda melhor. Assim, podemos adicionar, por exemplo, a terceira peça. Podemos girá-lo ao redor. Então agora temos esta peça aqui, nós a giramos ao redor. E isso pode ser chamado, por exemplo, a peça para, se você quiser, eu recomendo que você use sua imaginação quando estiver em dúvida com as peças que temos. Vou selecionar esses três e garantir que a posição deles esteja em 0. Porque, por exemplo, se tivermos, vamos dizer isso como um seis, Ok, Nós os adicionamos às seis ou temos todos em seis se eu adicioná-los, então eu os instancio. Você pode ver que ele começa na posição 6, não em 0. Isso causará problemas. Então eu sempre gosto de mantê-lo em 0, mesmo que quando o instanciamos em uma determinada posição de transformação, ele tomará a posição que lhe dizemos. Mas, de qualquer forma, vamos continuar. Acho que sabe o que eu quis dizer? Vou excluir essas peças quebradas. Vou abrir o script quebrável se eu encontrá-lo. E aqui vamos antes de tudo, obviamente obter uma referência à parte quebrada. Então, vou criar um campo serializado do tipo objeto de jogo e chamar isso de parte quebrada. Salve isso. E antes de destruirmos o objeto do jogo, vou prosseguir e instanciar parte quebrada na posição transform.py e transformar a rotação. Salve isso. Vamos voltar ao nosso jogo. Certo, para isso, compile qualquer dia agora. Certo, então vou trancar isso. Vou entrar em prefabs e selecionar as peças quebradas. E vamos apenas adicionar o primeiro, salve que o jogo colida com o objeto lá vai em intervalos e devemos ficar com esta peça aqui. Certo, muito bom. Agora não está desaparecendo. Vamos lidar com isso em um pouco. Mas, por enquanto, temos as peças quebrando. Mas, obviamente, obviamente queremos ter várias peças quebrando e aparecendo uma após a outra. Então esse será o seu desafio, seu desafio de instanciar todas as peças. Então, antes de tudo, pegue todas as peças dos sprites que já fizemos isso. Crie uma variedade de objetos de jogo para as partes quebradas em loop pelas peças que você usa o loop for. Então, já aprendemos como funciona um loop for. Você precisará gerar um número aleatório toda vez. E precisaremos usar o número para instanciar uma peça quebrada. Agora você pode estar pensando, bem, isso significa que algumas peças quebradas serão feitas duas vezes. E tudo bem. Honestamente, acho que não é algo muito ruim para se preocupar. Se você quiser, você pode ir ainda mais fundo nisso e instanciar um ângulo aleatório para que as peças tenham para que elas pareçam diferentes umas das outras e não. Defina no mesmo lugar. Agora, é claro que haverá um pequeno obstáculo aqui. Falaremos sobre isso assim que você fizer o desafio. Então, pause o vídeo agora mesmo e faça o desafio. Oh, volte. Então, antes de destruirmos o objeto do jogo, o que vamos fazer é que vamos, e acho que este não é o lugar perfeito para fazer isso. Então, em vez de instanciar aqui, vou avançar e mover isso para cá. Então, depois de começarmos a animação, ou você sabe o quê? Isso também é um problema. Então, vou fazer isso um pouco maior. E depois de começarmos a animação, vou instanciar as peças se você quiser. Se você quiser, você também pode criar um método separado e chamá-lo usando os eventos. Mas, por enquanto, vamos em frente e fazer as coisas que queríamos fazer. Então, antes de tudo, vamos transformar o objeto do jogo em uma matriz, e a parte quebrada clique duas vezes aqui. E estas serão as partes quebradas aplicarem isso. Vou comentar isso para ver tudo no inspetor. Então potes quebráveis rolam para baixo, feche-os porque são irritantes. E o que temos aqui? As partes quebradas. Bloqueie isso, selecione todos esses e arraste-os para cá. Então agora temos as três peças quebradas prontas para uso. Vou voltar aqui. E o que vamos fazer? Então, antes de tudo, vamos percorrer todas as partes. Então, para eu vou iniciar em r igual a 0. Então, espero que isso não tenha sido muito difícil. Vamos começar de novo. Começamos criando a variável. Começamos com um 0. Então o que vamos verificar, ou continuaremos em loop. Embora eu seja menor que as partes quebradas ponto, comprimento e comprimento porque estamos usando matrizes. Se estamos usando listas, usamos count e toda vez que aumentamos i em uma. Então, precisaremos gerar três peças, e queremos que essas peças sejam aleatórias. Então, temos uma variedade ao quebrar potes. Então int, é um número inteiro. Vamos chamá-lo de parte quebrada aleatória. E será igual ao intervalo de pontos aleatório. E qual é o alcance? O intervalo é de 0 no comprimento do ponto das partes quebradas. Lá vamos nós. Agora, depois de fazermos isso, vamos mover a instanciação para cima. E dentro daqui, em vez de simplesmente as partes, vamos usar a peça com a parte quebrada aleatória. Então, vou salvar tudo isso. Ok, então vamos prosseguir e testar esse código. Então, vou voltar aqui. Vou ver o que mais precisamos fazer? Acho que está tudo bem. Execute o jogo. Agora caminhamos até o bot, não quebra. Tentamos destruí-lo. Lá vamos nós, ele é destruído e lá vamos nós. Temos algumas peças não, talvez eu não devesse ter maximizado no jogo. Mais uma vez, pare, maximize no jogo. Vamos fazer isso maior. Queremos ver a hierarquia. Queremos saber o que está acontecendo. Ok, então eu me deparo com a parte que se rompe. Então lá vamos nós. Nós quebramos a parte dois, quebramos a parte 1 e quebramos a parte dois. Então eu posso mover isso um pouco e as partes quebradas estão em cima umas das outras. Então é por isso que eu recomendei que criássemos um pouco de rotação. Então, com isso feito, vamos nos certificar de que encenamos tudo aqui. Nós estamos preparando isso. E vou chamar isso, agora, instanciamos partes quebradas. Quando instanciamos partes quebradas, um pote é o golpe. Quando os bots forem destruídos, salve isso, confirme as alterações. E espero que você esteja gostando, espero que você esteja entendendo tudo. E no próximo vídeo, vamos nos certificar que as peças quebradas não fiquem apenas no lugar. Eles se espalharam como se isso tivesse sido destruído e tivéssemos algum tipo de impacto. Então, vejo você. 47. As peças quebradas (Lerp): Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, criamos as peças quebradas e garantimos que quando atingimos essas peças quebradas, elas voam um pouco separadas. Então, agora, quando eu bati, lá vai você. Você pode ver que esses pontos se moveram um pouco e você pode ver isso, ok, Então, para este não foi o melhor exemplo. Vamos tentar ver quando temos duas partes que são as mesmas. Então lá vai você. Você pode dizer qual é a parte 2 e qual também é a parte dois? Não, você não pode porque adicionamos uma rotação aleatória. Achei que teria sido uma boa ideia quando falei sobre isso no vídeo anterior, pensei por que não implementei neste jogo agora. Então, não vamos perder mais tempo. E vamos começar. Todo o estojo. Então, agora, quando destruímos nossa compra quebrada, temos as peças quebradas e especializadas. Mas antes de tudo, às vezes eles são os mesmos mesmo que escolhemos números aleatórios. E a segunda coisa é que eles não se separam. Então, a primeira coisa que eu quero lidar é a rotação. Então, em vez de apenas ter a rotação da transformação, mas vou fazer é criar outro inteiro, rotação aleatória. E será igual a um intervalo aleatório entre 04, Y4 porque vou girá-los em torno do eixo z em quatro direções. Então, a maneira que vou fazer isso é multiplicando aqui por 90 graus. E teremos quatro opções. Então, ou nós giramos noventa cento e vinte e dois setenta ou apenas trouxemos todo o caminho. Talvez este deva ser 0. Começamos em 0123. Ok, então em vez da rotação de pontos de transformação, vou usar algo chamado quaternion, aquela régua. Lá vamos nós, é régua. Eu estava procurando por ele e o vi. Então você pode ver que isso traduz o eixo três e para a rotação. E nós vamos obviamente girar no, em torno do eixo z. Então 90 metade da rotação aleatória. Lá vamos nós. Salve isso. Você pode ver a instanciação aqui. Se você acha que essa linha é um pouco longa demais, o que você pode fazer é pressionar Enter em cada linha. E agora é muito mais óbvio o que essa instanciação faz e quais são os elementos dela. Certo, ótimo. Agora, com esse nenhum, a próxima coisa é que queremos adicionar comportamento aos nossos potes quebrados. Então, vamos entrar nos scripts aqui e o do mouse quebrável e criar um script nítido C que será chamado de pote quebrado. Então parte quebrada, pressione enter. Ok, eu não sei por que isso continua acontecendo e vou entrar nas partes quebradas, selecionar todas as três, e ir em frente e adicionar o script de e ir em frente e adicionar parte quebrada em cada um desses pré-fabricados. Abra o script e o que queremos aqui? Então, antes de tudo, queremos uma variável também, após a velocidade de movimento dessas partes. Portanto, é um campo serializado que vai ser um flutuador. E iremos para a velocidade de movimento. E se você quiser adicionar um pouco mais de variedade, você pode até fazer com que cada um deles tenha uma velocidade diferente e bebê, dependendo de quão rápido traços ou o que quiser fazer. Em seguida, vamos criar um vetor privado 3. E isso representará a direção do movimento. Então direção do movimento. Então, em que direção cada peça se moverá? E, finalmente, teremos algo chamado campo serializado, que será um flutuador. E esse é o fator de parada. E serão 50 desses números arbitrários e já testei alguns outsold. É por isso que eu sei por que cinco atos. Mas, de qualquer forma, qual é esse fator de parada? Obviamente, quando nossas peças se separarem, elas se espalharão, mas então elas vão parar em algum momento. Portanto, nosso objetivo é fazer o fator de salga, que afetará as peças à medida elas se afastam umas das outras e finalmente as pararam. Então, vamos lentamente diminuir a velocidade. E vou te mostrar como vamos diminuir a velocidade usando algo chamado lóbulo. Mas não vamos nos antecipar. A primeira coisa que queremos fazer é ter uma direção aleatória na qual cada peça se move. Então, antes de tudo, vou fazer uma direção de movimento de x. Então, por que estou fazendo isso e começo? Porque a parte quebrada está presa à peça quebrada, o que instancia. E assim que instancia, o início está sendo chamado. E então comece determinará qual é a direção. Assim, o ponto de direção do movimento x2 será igual ao intervalo de pontos aleatório e quais valores você, você pode escolher qualquer valor que quiser aqui. Mas só para torná-lo um pouco divertido. Por exemplo, você tem as peças quebradas voando muito rápido. Acho que a direção, a aleatoriedade da direção será um pouco mais maluca, vamos chamá-la. Então, o que faremos é usar a velocidade de movimento menos como mínima e a velocidade de movimento como máxima. Então, agora, à medida que a velocidade de movimento aumenta, se você quiser aumentá-la, a aleatoriedade também aumentará. E ter um menos garantirá que algumas peças acabem. Não sei onde algum lugar aleatório. Então agora com o movimento age para baixo, isso tem o movimento y e será exatamente o mesmo. Com isso. Vamos continuar. Queremos começar a mover as peças e vamos usar a posição do ponto de transformação. E vamos aumentar isso pela direção do movimento vezes tempo ponto delta tempo. Obviamente, sabemos mais, mais iguais, então ele se move lentamente e a direção do movimento vezes tempo. DeltaTime para se separar da taxa de quadros. Então, isso seria mais estável. De qualquer forma. Agora precisamos ter certeza de que estamos interrompendo o movimento de cada peça e não apenas fazendo com que elas se movam para o infinito e passando por tudo. Então, a maneira como vamos fazer isso é usar algo chamado Aprendizado. Então, vou mostrar o que é, certifique-se de encontrá-lo sozinho na documentação do Unity. O que ele faz? É preciso três variáveis. O primeiro é o valor inicial da velocidade de e com seu o valor inicial. B é o valor final e t é o valor a ser interpolado entre a e b. O que significa interpolação? Então, interpolação linear entre os dois pontos. Então, o que acontece é que queremos levar o valor a ou qualquer valor de a a B usando um fator de t Toda vez. Então, esse será o fator de Parada sobre o qual falamos que vamos aplicar e garantir que você entenda o que está acontecendo aqui. Estamos tentando mover as peças cada vez mais devagar. Então, vamos começar com algum tipo de direção. E então vamos levá-lo para 0 para impedir que as peças se movam. Então vou emitir esse desafio para usá-la para parar o movimento. Então, antes de tudo, queremos diminuir o impulso das peças quebradas, das peças em movimento. Queremos definir a direção do movimento para aprender. Vamos começar o valor. Teremos que o valor inicial seja a direção do movimento real, e o valor final deve ser o 0. E, finalmente, a velocidade da qual vamos interromper o movimento será o fator Halting. Então, basicamente, esse desafio ao se candidatar, pare o movimento. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então, aqui, depois do nosso tempo estamos nos movendo em certas direções. Então, temos a direção do movimento como o único fator que está afetando isso. Então aqui vamos definir a direção do movimento para ser igual a um vetor três engarrafadores. E aqui, o valor inicial será a direção do movimento. O valor final será o vetor 3 0, e o fator, o T será o fator Halting vezes tempo.DeltaTime porque estamos aprendendo cada quadro, então não queremos que seja muito rápido. Ok, então vamos voltar aqui e vamos testar isso e ver se funciona. Pois fazemos isso. Vou entrar no pré-fabricado e ver o que quebramos partes. Talvez possamos adicioná-los aqui. Pote tão quebrável. Lá vamos nós. Está nas partes quebradas, talvez seja o que for chamado. Ok, potes quebrados, execute o jogo. Vamos ver o que acontece. Talvez isso não funcione de forma alguma então. Oh, bom. Então, como você pode ver, cada parte seguiu nossos caminhos separados e você pode ver que temos a parte um que estava exatamente em cima da parte uma ou da outra parte 1. Então eles tinham a mesma rotação. Vamos testar isso novamente. Lá vamos nós, nós o destruímos. O que temos? Parte 2. 2. E então você pode descobrir qual parte os dois eram? Então, se eu mover isso direito, também ainda tendo a mesma rotação por algum motivo, fizemos algo não completamente certo, então vou quebrar o pote e vamos ver. Ok, então eu sinto que a coisa de rotação não está funcionando se eu voltar para a rotação aleatória quebrável. Certo, bem-vindo de volta. Então eu estava preocupado que houvesse algo errado com o código, mas não, aparentemente, nós somos as pessoas mais sortudas do mundo ou as pessoas desafortunadas do mundo, dependendo de como você olha para ele. Mas toda vez que as rotações eram as mesmas. Então você pode ver aqui, parte dois é menos 180 e a outra parte 2 é menos 90. Então, novamente, vamos testar isso. E vamos ver, lá vamos nós. Nós o quebramos. E você pode ver que temos a Parte 1 e a Parte 1. Mas você pode dizer a diferença entre essas duas partes? Então você pode ver que este é girado em 90 graus e este é o mesmo. Escrevi isso. Portanto, há uma grande diferença entre eles. Assim, espero que você possa ver e apreciar como as rotações aleatórias funcionam. Espero que você possa ver e apreciar como o pequeno detalhe de adicionar um pouco de velocidade às peças quebradas faz com que tudo pareça mais e digamos natural e melhor. Então, vamos nos certificar de que permanecemos todas as nossas mudanças e espero que você esteja gostando e eu o verei no próximo vídeo onde realmente estaremos nos livrando dessa parte que se desfez usando algo semelhante a aprender. Mas vamos aplicá-lo às partes quebradas para fazê-las desaparecer lentamente e não apenas um instante desaparecer. Então eu vou te ver. 48. Como destruir peças vagamente: Bem-vindo de volta meus colegas desenvolvedores de jogos e este vídeo, quando estávamos como o jogo, quando maximizamos isso, executamos o jogo. Quando andamos por aí, quando atingimos uma das partes, você pode ver que ela é destruída e elas lentamente, lentamente, desaparecem, e então elas desaparecem da hierarquia. Então, não vamos perder mais tempo. E vamos começar. Oh, tudo bem. Então agora é hora de finalmente acabar com isso e destruir as peças quebradas no chão. Como vamos fazer isso? Bem, vamos combinar algumas coisas que já conhecemos e talvez um método que não conhecemos. Então, vamos começar. A primeira coisa que vou fazer é entrar nos meus roteiros. E aqui, na parte quebrada, primeiro vou criar um temporizador aqui, que será um campo serializado. E vai ser um flutuador com uma vida inteira chamada vitalícia. E vamos defini-lo em cerca de três segundos. Certo? Talvez até mais, talvez cinco, vamos definir como cinco. E depois de instanciarmos, depois de começarmos a nos mover e a posição e sermos selvagens ou afinal, mostrar enquanto estamos aprendendo a direção, queremos ir em frente e ir para a vida e garantir que cada quadro estamos removendo o tempo, esse tempo delta. Certo, ótimo. Agora, o que acontece quando a vida, onde está? Quando o tempo de vida for menor ou igual a 0, vamos destruir o objeto do jogo. Vamos verificar isso e ver se funciona. Então, vou entrar de novo, deixe-me salvar isso. Sim, nós executamos o jogo. Tinha as peças quebradas, 1, 2, 3. Certo. Então, é em torno de cinco. Eu acho. Acho que foram cinco de qualquer maneira. Mas, obviamente, não queremos destruir isso. Queremos destruí-lo lentamente, então queremos ter certeza de que ele não exploda. Queremos nos deteriorar lentamente com o tempo. Então, para fazer isso, vamos usar algo chamado o movimento em direção. Mas antes de nos aprofundarmos nisso, quero te mostrar algo. Vamos acessar as cores, então vamos usar o pote. Ok, então, nas peças quebradas, temos o mesmo pote quebrável. Na verdade, deixe-me adicionar uma dessas peças quebradas aqui e demonstrar sobre elas. Então você pode ver que temos o renderizador sprite, temos a vida e tudo mais. Se eu acessar a cor, tenho essas três cores. Então o R, Você pode ver que eu posso mudar a cor se eu aumentar o zoom, você pode ver claramente o quão feia essa pixel art é. Não, estou brincando. É incrível. E então temos o vermelho. Finalmente temos o amarelo, e também temos o destino, e é isso que queremos acessar. Agora, como sempre digo, existem maneiras mais fáceis de fazer isso, mas quero testar tudo. Quero explorar com você o máximo possível. Então, vou excluir isso. Vou voltar para Unity, e vou acessar o renderizador sprite. Então, vou, antes de tudo, criar uma referência aqui. E vai ser um serializado, sabe o quê? Ele não precisa ser um campo serializado. Só vou ter acesso à direita, um renderizador. E vou chamar a parte sprite. E vai ficar tudo bem. Vai ser privado. Esqueci de torná-lo privado porque não precisamos vê-lo e começar. Vou me certificar de que a parte Sprite seja igual para obter renderização de sprite de componente. Certo, lá vamos nós. Então agora temos uma referência à parte Sprite. E aqui vou acessar a parte cor do ponto Sprite. Ok, então você percebe que no renderizador sprite temos a cor. Então, estamos acessando a cor aqui. E estamos dizendo que é uma nova cor. E qual será essa cor B. Vou abrir o colchete aqui e vou pressionar Enter e começar a digitar. Então podemos ver aqui, onde está? Onde está a nova cor? Certo, mas de qualquer forma, temos que dar o vermelho, o azul e o verde. E como você viu, o vermelho, azul e o verde não vão mudar. Então, os três primeiros serão extremamente fáceis. Serão as partes cor brilhante ponto r, vírgula duplicada, duplicada, vermelho, verde, vermelho, verde e azul. E lá vamos nós. Se passarmos o mouse aqui, podemos ver que essas são três cores que queremos. E finalmente, queremos mudar o a. Então a maneira como acessamos isso é através do ponto de cor do ponto da parte a. Mas, obviamente, desta vez queremos mudar isso. Queremos que isso passe do que é atualmente para 0. E este é o ponto matemático movido em direção. Então, como você pode ver, ele move um valor da corrente em direção ao alvo. E você pode ver aqui, seguir em direção ao uso da biblioteca de matemática. Podemos adicionar o valor atual, o valor alvo que queremos chegar e o máximo. Portanto, é a mudança máxima que deve ser aplicada ao valor. Então, é como se tivéssemos algum alerta, o fator de desaceleração ou o fator Halting. Esse também é algum tipo de fator que você pode usar. Ok, então vamos prosseguir e implementar esse movimento em direção. Então, aqui eu vou escrever o método ponto se mover em direção. E vou abrir isso. Portanto, o alvo atual será o alfa atual. O alvo, ok, então a corrente, o valor atual, eu queria dizer, e o alvo será obviamente 0 F. E nós vamos estar se movendo nas velocidades de desvanecimento. Então, vou apenas escrever a velocidade da fé aqui, vezes tempo. DeltaTime. E vou seguir em frente e criar algum tipo de variável de velocidade de fade. Copie isso e vamos em frente. Onde devemos adicionar? Certo, então lá vamos nós. Esta será a velocidade do destino e definirá para cinco. Vamos configurá-lo para um e ver o quão rápido isso é. Não tenho certeza de quão rápido será. Eu realmente não faço ideia. Então, vamos salvar isso. Então, o que acontece aqui é quando a vida, há um erro, que é que a vida útil é menor que 0. Certo? Então, precisamos adicionar um ponto e surgir. Então, o que acontece aqui quando a vida é menor que 0? Então terminamos de nos espalhar, a vida está pronta. Vamos passar por isso toda vez. Então, o que acontece aqui? O vermelho, o verde, o azul permanecem os mesmos na parte Sprite. Mas a cor, o Alpha se move do estado atual que é n para o 0 usando algum tipo de velocidade de desvanecimento. Então, vamos testar isso. Então, vou executar o jogo. Vou tentar fazer isso maior, ver tudo. Vou destruir isso. E agora veremos que as peças quebradas depois de alguns segundos. Whoa, quão legal é isso? Então eles desapareceram lentamente. E se você notou, tínhamos as três partes sendo parte 3 e todas elas parecem diferentes. Então, não tínhamos nada parecido. Mas como você notou, mesmo que eles desapareçam, ainda os temos aqui. Precisamos nos livrar disso e será um desafio para você destruir as peças. Por fim, crie uma instrução if que verifique se a peça alfa até 0. E se for, você precisará ir em frente e destruir o objeto do jogo. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Então, aqui, depois de avançarmos em direção, vamos continuar verificando se a parte Sprite dot color dot alfa, que é a, é igual a 0 f. Então vamos simplesmente destruir o objeto do jogo. Salve isso de volta em nosso jogo. Vamos maximizar o jogo. Nosso jogo está fantástico. Quero dizer, exceto pelas linhas azuis que você acabou de ver. Quero dizer, temos os inimigos atirando em nós, nos seguindo. Temos armas atirando corretamente. Temos efeitos diferentes para armas diferentes atingindo coisas. Você pode ver talvez a batida de sal possa usar um pouco de ajuda. Temos sangue em todos os lugares. Temos sangue quando interagimos. Bem, o que você viu isso? Então, quando devemos esperar, quando atiramos em um dos inimigos, você pode ver o sangue saindo deles, o que é muito bom. Lá vai você. Você pode ver o sangue. Temos sangue aleatório, agora também temos os objetos estruturais, se você quiser. Também podemos implementar destruição deles quando atiramos neles. Mas, de qualquer forma, quando os esmagamos, essas são as peças. E eles desaparecem lentamente, o que é uma adição muito boa. E eu sempre esqueço também, eu queria, ok? Ok, então remova a maximização. Lá vai você. Podemos ver que não temos mais partes, mas ainda temos o sangue, que você sabe, eu vou dar a você como um desafio de eu não sei. Não vou lidar com isso agora. Obviamente, em algum momento eu vou, mas tenho certeza que você sabe o que fazer. Você pode usar qualquer método que aprendemos. Há muitas coisas, então espero que você tenha gostado desta seção. Eu acho que isso realmente aumenta toda a atmosfera do jogo, o movimento, destruindo lentamente. Aprendemos muito nesta seção também. Portanto, certifique-se de que você está sempre cometendo suas alterações. E se ainda não o fez, sei que te entediei, mas por favor, deixe-me um comentário me ajuda muito. Claro, se você estiver curtindo o curso, se não, não, até começar a curtir o curso. De qualquer forma, te vejo no próximo. 49. Seção 8: filmagem em a captura - criando um sistema de fotografia: Ei, bem-vindos de volta, meus colegas desenvolvedores de jogos. Neste vídeo, não mudamos muito, mas o que fizemos foi que acabamos começar a montar um sistema de armas adequado. Movemos a mecânica de tiro do jogador do condenador para a arma real, que é o console Sharp. Como você pode ver, não há nada de novo aqui. Acabamos de fazer algumas mudanças. Este vídeo é tudo sobre, vamos chamá-lo de atualizar seu projeto para que você chegue a um certo ponto. Você tem todas as mecânicas básicas que você quer, mas agora é hora de torná-las muito mais eficientes. Então, sem mais delongas, não vamos perder mais tempo. E vamos fazer a nota do projeto novamente. Caso 0. Então é hora de criar um sistema de tiro mais avançado e profissional. Então, a primeira coisa que vamos fazer é mover tudo o que está relacionado ao disparo do controlador do jogador para um script separado que vou criar agora. Se eu entrar nos roteiros e talvez vamos fazer isso um pouco maior. Assim, podemos vê-los pelo menos e duas linhas. Estes, tudo bem, lá vamos nós. Vou entrar aqui. Estou criando uma pasta que será chamada de arma ou vamos chamá-la de sistema de armas. Tenha Enter. E eu vou criar um script aqui que será o sistema de armas. Pressione Enter, aguarde que ele seja compilado. E lá vamos nós. E um dia agora. Obrigado. Foi apenas um roteiro. De qualquer forma, vou fazer do fogo apontar um filho da espingarda, e isso não permitirá que precisemos abrir o pré-fabricado. Lá vamos nós, torná-lo uma criança, salvar isso. Volte para o nosso jogo. Lá vamos nós. Então agora temos, e às vezes quando você quer adicionar os prefabs, fazer filhos das coisas e fazer pais. Às vezes, isso exigirá que você faça o passo extra de realmente mudar todo o pré-fabricado. E a próxima coisa que vamos fazer é adicionar esse sistema de armas à espingarda real. Então, agora a espingarda vai lidar com todo o tiroteio. Primeiro de tudo, vamos abrir o sistema de armas. E se eu olhar no controlador de camada, onde está? Vamos clicar aqui. Enquanto o controlador do jogador, tudo bem, no entanto. Então lá vamos nós. Como você pode ver, temos tantos scripts agora. Mas, de qualquer forma, o que queremos fazer é nos mover e esse deve ser um método separado. O que queremos fazer é mover toda a mecânica de tiro do jogador do controlador do jogador para o sistema de armas. Talvez já tenha mencionado isso antes. Não queremos que o jogador cuide de tudo. Por exemplo, não queremos que o jogador cuide de como as balas voam, e não queremos que o jogador cuide de como as armas funcionam. Então, com isso dito, vou lhe emitir um desafio. E seu desafio será mover o disparo para o roteiro adequado. Então, alguns dos métodos de disparo do controlador do jogador para o script do sistema de armas. Certifique-se de que os dois copiem todas as variáveis apropriadas com ele e definam tudo em unidade e teste-o, certifique-se de que ele funcione corretamente. Portanto, esse desafio é apenas sobre como você atualiza seu script, como você atualiza seu projeto e ganha. Às vezes você começa seu projeto. Você não tem todo o grande plano para isso, então você precisa fazer ajustes. Este será apenas um exercício como transferir coisas de um roteiro, o próximo, tornando-o melhor, eu farei isso na sua frente, então não se preocupe com isso. Vamos garantir que tudo funcione corretamente. Mas, por enquanto, pause o vídeo e vá fazer o desafio. Oh, ok, bem-vindo de volta. Então, o que vamos fazer aqui? Vamos seguir em frente e selecionar tudo isso. Vou cortar então Control X. Vou seguir em frente e colocá-lo aqui ou saber o que, vamos manter a atualização e começar. Talvez precisemos deles. colar tudo aqui para que você possa ver que temos muita coisa que precisamos lidar. Então, de volta aqui, precisaremos de algumas variáveis que são, deixe-me subir. Primeiro de tudo, vou comentar este, salvar isso. Então vou verificar aqui, o que precisamos? Precisamos da troca e automatize a bala no ponto mais distante. Certo. Então, vamos ver como o tempo automático da arma entre tiros, tiros combatidos, ponto de fogo. Lá vai ele. Estes são. Variáveis e eu vou colá-las aqui. Salve isso. Vamos ver o que mais temos? Temos algum tipo de erro aqui? Não, não acho que fosse toda a mecânica. Então, de volta aqui, o que mais temos? 0. Então, se o jogador pode correr, agora, obviamente, o arrojado faz parte da mecânica do jogador do jogador é aquele que vai correr. Então, o que precisamos é de uma maneira de obtermos uma referência ao traço. Então o jogador está arrojado ou não? O que podemos fazer? Se rolarmos aqui para baixo, podemos criar um método. E se eu olhar aqui, o traço que você pode ver como privado. E o que podemos fazer é criar um método aqui. E essas são coisas que vamos usar cada vez mais à medida que seguirmos esse tipo de método. Portanto, é um bool público e é arrojado em camadas. Então, aqui, tudo o que você vai fazer é retornar pode traçar. E vou adicionar um ponto de exclamação porque lembre-se de como os traços funcionam. E porque só retornamos uma coisa, é assim que vamos escrevê-la. Agora, obviamente, isso não é algo que seja como um padrão. Isso é mais como práticas. Portanto, tenha algum tipo de variável em algum script diferente que você deseja acessar. Como você faz isso? Bem, ou você torna a variável pública, você a torna acessível a todos. Mas o problema ao torná-lo público é que você pode mudar. Então, se eu tornar isso público, posso mudá-lo de um roteiro diferente, o que é uma péssima ideia. Confie em mim, você nunca quer poder alterar variáveis em scripts diferentes de scripts diferentes. Portanto, você não quer ser capaz de fazer o jogador passar, digamos, do UI Manager por engano, isso acontece às vezes. Então, uma maneira melhor é apenas poder verificar se estamos arrojados para que possamos obter o arrojado, mas não podemos mudar se o jogador está arrojado. Portanto, essa é uma camada extra de segurança e é por isso que sempre usamos campos serializados. Poderíamos ter tornado todos públicos e teriam sido as mesmas funções. Poderíamos tê-los visto no inspetor e assim por diante. Mas torná-lo um campo serializado significa que não podemos acessar essas variáveis de diferentes scripts, e isso pagará dividendos mais tarde medida que você for em sua jornada de desenvolvimento de jogos. Certificando-se de que você pode, não apenas no desenvolvimento de jogos, sempre que se trata de programação, você não quer classes diferentes, alterando variáveis, outras classes diferentes. De qualquer forma, estou ficando à frente de mim. O que vamos fazer aqui? Podemos encontrar o objeto do jogador ou podemos obter o componente no pai. E podemos, vamos remover isso por um segundo. Podemos acessar o controlador do jogador e os pais, e podemos ir em frente e verificar. O jogador é o jogador arrojado ou o que, o que é esse jogador é arrojado. O que é essa camada é arrojado, está se movendo. Há 0 arrojado, então também podemos retornar isso. Portanto, esse método não é mais necessário. E isso realmente não foi algo que eu notei. Mas, de qualquer forma, a camada é arrojada. Pelo menos tivemos a oportunidade. Vamos verificar se a velocidade de movimento atual é igual à velocidade. Certo, então retornamos verdadeiros. E lá vamos nós. Se estivermos arrojados , não podemos atirar e não chamaremos isso de tiro do jogador. Vamos mudar para as balas de disparo. Lá vamos nós. Então isso faz mais sentido agora. E o que mais deveríamos estar fazendo? Bem, obviamente, precisamos chamá-lo aqui na atualização, certificando-se de que podemos filmar. Então, vou simplesmente chamar o método de balas de disparo. E agora precisamos voltar ao Unity e configurar tudo. Então, vou abrir o Unity. Você verá que o sistema de armas mudou. E isso foi, isso é tão embaraçoso. Nem percebi que estava lá e esqueci completamente que tínhamos exibido isso arrojado. Mas, de qualquer forma, pelo menos você aprende algo de um tipo diferente. Ou temos esse pequeno monólogo do motivo pelo qual não queremos acesso às variáveis. Agora, não se preocupe. Electron, é claro, estaremos implementando muitos desses métodos à medida que avançamos e tornamos nosso código um pouco mais profissional. Então, com isso, quem as coisas fizeram? Vamos entrar, antes de tudo, como 70 pontos distantes da espingarda. Vamos nos certificar que esta arma não é romântica e faremos o tempo entre os tiros em torno de 1 segundo, 1, não 21. Precisamos de uma bala, então vamos para os Prefabs, balas quebradas e as balas da camada. Salve isso. Vamos entrar no doom player e aplicar todas as alterações. E agora vou para O que mais temos? Vamos executar o jogo e ver o que acontece. Então o jogador, o jogador se move por aí, mas então o jogador se move e se devemos, lá vamos nós, podemos atirar. E se eu segurar o botão do mouse, por algum motivo, ele não está disparando. 123. Oh, não é automático. Certo. Mas o problema é tão bom. Agora, mesmo que eu mantenha pressionado o botão do mouse, não é automático, mas a espingarda ainda dispara muito. E isso é algo que queremos consertar porque agora estamos falando de uma mecânica de tiro avançada. Não é o mecânico de tiro habitual. Precisamos ter certeza de que nossa filmagem seja consistente. Então a espingarda, se segurarmos, ela dispara um botão, mas se continuarmos pressionando para que a espingarda não deva estar disparando tanto ao atirar. Então, com isso fora do caminho, com toda essa seção, Alterar, criar scripts de tudo. Espero que você goste e te vejo no próximo vídeo. Certifique-se de que você sempre confirme suas alterações. E eu vou fazer esse commit mover a mecânica de tiro da camada dois, a arma real. Lá vamos nós, comprometemos as alterações e te vejo no próximo vídeo. 50. Contador de taxa de fogo: Bem-vindo de volta meus colegas desenvolvedores de jogos para outro vídeo de manutenção. Sei que não são as partes mais divertidas do vídeo, mas é muito importante e há lições cruciais que precisamos aprender e esta. Então, agora, quando executarmos o jogo, você verá que não temos mais a opção de criar uma arma automática automática. Mas agora, se mantivermos o botão pressionado, você pode ver que devemos 11111. E se tentarmos pressionar o máximo que pudermos, ouça o mouse, você pode ver que não temos mais a opção de atirar ou ignorar esse mecânico de tomar o tempo entre os tiros. Então, não vamos perder mais tempo e vamos manter o caso 0. Então, este é outro vídeo em que queremos consertar nossas coisas. Então, a primeira coisa que queremos consertar é ver a espingarda. Então, digamos que não seja automático. Então, uma filmagem. E lá vai você. Temos uma chance. Se eu continuar segurando, não funciona. Mas o problema é que se eu pressionar muitas vezes, você pode ver que temos muitas lojas. Agora, isso não é um problema enorme, mas, por exemplo, uma espingarda não deveria estar atirando tão rápido. Se o tornarmos automático e continuarmos segurando, você pode ver que continuamos atirando em todos em segundo lugar. E se tentarmos pressionar muitas vezes, isso não é um problema. Mas ainda precisamos corrigir o fato de que, se não tivermos a arma automática, devemos tanto quanto quisermos. Outra coisa que queremos corrigir é a redundância no código. Portanto, essa não é uma maneira perfeita de representar o código. Existe uma maneira muito melhor. Podemos antes de tudo, aliviar-nos de um dos problemas de ter que escolher entre automático e não aromático para que possamos, em primeiro lugar, nos livrar de uma variável. E a segunda coisa que podemos evitar, redundância e frio. Então você pode ver aqui que temos a pontuação que instancia uma bala e esta que também instancia ou Ebola. Portanto, não é tão bom. Queremos tornar algo muito mais eficiente, muito mais bonito. Então, vou comentar isso. E aqui vou verificar algo diferente. Vou começar verificando se o contador de disparos é maior que 0. Então, se o balcão de disparos for maior que 0, então o que faremos é manter o balcão da loja sendo removido a cada pouquinho. Então, vamos contar o balcão da loja. E porque lembre-se disso nas balas de disparo, isso significa que isso vai funcionar bem. Então, aqui, vamos verificar as entradas. E se essas entradas forem verdadeiras, então vamos instanciar a bala. Então, o que vou fazer é emitir isso para você como um desafio. Portanto, seu desafio é garantir que verificamos as duas entradas, se estamos segurando ou pressionando apenas uma vez. E então vamos instanciar a bala e garantir também redefinir o contador de disparos. Então, pause o vídeo agora mesmo e faça o desafio. Oh, ok, bem-vindo de volta. Então, aqui, a primeira coisa que vou fazer é criar a declaração if. E vou copiar essa linha aqui. Portanto, se o ponto de entrada, baixe o botão do mouse ou onde está, Ok, então, ou, ou como representado por esses dois. Ou se o ponto de entrada obter o botão do mouse. Então, estamos segurando substantivo, então vamos seguir em frente e instanciar a bala no ponto de fogo. E também vamos pegar o contador de disparos e redefini-lo para o tempo entre os tiros. Lá vai você. Então, o que acontece aqui? Estamos sempre chamando o disparo, mas verificamos se o jogador está arrojado. Se não for, então vamos continuar. Se o contador de disparos for maior que 0, então vamos contar o tempo todo e quando ele ficar abaixo de 0. Então, vamos continuar a contagem regressiva , desde que o contador fechado seja maior que 0. Quando não for mais, teremos a opção de filmar. E o melhor disso é se a arma é automática ou não. Se continuarmos segurando, não poderemos atirar o tempo todo. Mas se não for automático e usarmos apenas o dedo para pressioná-lo uma, duas ou três vezes, vamos instanciar e teremos o contador redefinido toda vez que devemos, uma vez que ele pare e espere que o curto contador volte a menos de 0, então podemos atirar e o quanto quisermos. Então, a única coisa aqui é que não verificamos mais se a arma é automática ou não. Assim, podemos ir em frente e excluir isso. Criamos algum tipo de atalho. Agora, se você não gosta disso, se você está procurando, é isso que eu comento todo esse código. Se você quer ter uma arma automática e isso não o incomoda, permita isso? Podemos filmar o quanto quisermos , porque no final do dia, se for automático, não será filmando muito rápido. Então seja meu convidado. Mantém frio. Não é ruim. Mas para mim, honestamente, não quero isso. Eu prefiro ter isso como um código muito simples e fazer com que salvemos algumas variáveis. Então, e eu também alguns códigos redundantes, o que é muito importante. Então, salvamos tudo isso. Voltamos para Unity. Vamos executar o jogo e agora o tempo entre os tiros é reduzido. Então agora, mesmo que cozinhemos muitas vezes, você pode ver que ele continua esperando até que o contador curto seja reiniciado. Se seguirmos, lá vai você. Você pode ver que a cada segundo soltamos um tiro. Se fizermos isso, por exemplo, digamos 0.1, então podemos ir em frente e atirar várias vezes. E se pressionarmos tão rápido quanto prometemos, nunca seremos mais rápidos do que o balcão jamais nos permitirá ser. Então, com isso feito, espero que você tenha gostado. E no próximo vídeo, adicionaremos armas diferentes ao jogador. E você verá como ter algo diferente de uma espingarda realmente tornará o código muito mais visível ou as mudanças que fizemos muito mais importantes se você ainda não achar que é tão bom. Então, vejo você. 51. Ter armas diferentes: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, criamos um conjunto extra de armas. Criamos um rifle e criamos uma pistola. Então, agora, quando executamos o jogo, não estamos limitados apenas à espingarda, mas também podemos encontrar uma pistola. Obviamente, as balas também são diferentes. A taxa de disparo é diferente. O, mesmo o dano que as balas causam e a velocidade de cada bala é diferente. Então, como você pode ver aqui, eu posso ligar o rifle, desligar a pistola, correr. Opa. Então isso foi um grande erro. Desculpe por isso. E desligue a pistola, ligue o rifle e posso começar a atirar. E como você pode ver, as balas do rifle ou um pouco mais rápidas, elas são um pouco mais verdes e não vamos perder mais tempo. E vamos começar. Oh, caso. Então Nilo, é hora de adicionar mais algumas armas. Como vamos fazer isso? Então, já temos o pré-fabricado para a espingarda. Então eu vou para o pré-frontal para que não tenhamos um pré-fabricado para a espingarda especificamente, só temos para o jogador condenado que tem uma loja. Então, vou criar uma nova pasta aqui, que será chamada de armas. E eu vou arrastar a espingarda aqui. Certo, então precisamos abrir o pré-fabricado. Lá vamos nós. Então, agora podemos clicar duas vezes e arrastar e espingarda. Então agora temos uma espingarda como prefabricada separadamente do deutério. E você pode ver como a Praça ficou um pouco mais azul. Agora posso adicionar a espingarda e aqui e temos a arma que vamos ajustar e criar algo diferente na frente. Então, as primeiras coisas primeiro, precisaremos mudar esse orgulho. Então, vamos para o Enquanto os sprites que adicionamos, todas as armas ou sangue, balas, inimigos, armas de telha de jogador. Certo, então só temos uma arma. Vamos para o caso Resources 0. Então, vamos ver o que temos aqui. Como você pode ver, eu lhe forneci muitas coisas. Uma delas é a animação para diferentes tipos de armas. E você pode ver que também temos o fogo do focinho, fumaça de focinho. Eu recomendei tentar adicionar tudo isso. Também podemos fazer isso daqui a pouco, mas por enquanto queremos apenas ter o conceito básico. Não estamos muito olhando para o quão bonito é o tiro, embora seja importante quando se trata de um jogo. Mas de qualquer forma, temos esse rifle aqui, temos esse atirador, e também temos a pequena arma. Então eu vou selecionar todos os três e vou arrastá-los para o sprite das armas e adicioná-los. Certo, ótimo. Agora que temos a espingarda, vamos renomeá-la para o rifle. Um rifle. E se eu abrir, você pode ver o ponto de fogo aqui. Mas antes de fazermos isso, queremos mudar esse orgulho. E para o rifle você pode ver que é muito pequeno, então nós os fizemos 42. Vamos selecioná-los e torná-los todos 40 para aplicar as alterações. Lá vamos nós, temos nosso rifle. Agora, por causa da coloração do fundo, você pode ver que o rifle não é tão prevalente, vamos chamar isso. Não é tão bonito, mas não vamos nos preocupar com isso enquanto lá e quando estiver no PLR, tenho certeza que ficará um pouco melhor. Então, de qualquer forma, vamos continuar um, o que mais definimos entre tiros, obviamente, para um rifle e não é um rifle, é um rifle de assalto, então é automático. Vai ser muito menos. Então, vou chegar em torno de 0,3. E vamos ver, o ponto de disparo obviamente precisa mudar para que você possa ver onde o músculo está agora. Vou movê-lo aqui. E o que mais temos? Se eu clicar no rifle? Lá vamos nós, podemos ver que tudo está bom. O que mais precisamos mudar? Oh, também queremos mudar a bala que ela dispara para que não queremos ter a mesma bala que a espingarda. E vou voltar para os Prefabs, ir para as balas. Vamos encontrar o, ok, então a bala do jogador, vou mudar isso de bala de jogador para bala de arma de tiro. E vou avançar e adicionar em nosso mundo. E vou duplicar a bala da arma de tiro. Vou chamá-lo de bala de rifle. E esta bala de rifle terá quase tudo, tem o mesmo pode ser a velocidade deve ser capaz de melhorar um pouco mais. Então, digamos que a velocidade seja talvez seis, eu não sei. A quantidade de dano, talvez devesse ser menor. Então, por exemplo, digamos que o valor do dano seja cinco. E o que mais precisamos mudar aqui, talvez o sprite. Então, vamos ver o preço das balas que temos. Estamos usando atualmente o 14. E talvez para um rifle possamos usar um dos mais curtos. Então, vamos ver, vamos usar o pequeno verde. Então, o pequeno verde, este é o que vamos usar, enquanto a bala rifle, vamos adicionar o pequeno verde. Certo. Então isso não funcionou. Por quê? Por causa disso funcionou, mas não vimos a bala de espingarda. De qualquer forma, vamos remover a bala republicana. E esta será nossa bala de rifle. Lá vamos nós. É muito pequeno que eu sinto que havia algo também a escala 0,5? E vamos torná-lo um. Mantenha-o como está. Certo, ótimo. Então agora temos essa bala de rifle. Vou entrar no rifle e vou atribuir uma bala de arma de tiro, mas a bala do rifle. Mas antes de fazer isso, precisamos pré-fabricar tudo. Então vou voltar para os Prefabs, ir para as balas e adicionar a bala. E me perguntará, você gostaria de criar um novo ou original ou variante do pré-fabricado? Se eu clicar em dois para a variante prefab, esta mudará, mas vou criar um prefab original. Eu também vou para os Prefabs, as armas, armas, onde eles estão? E eu vou arrastar o rifle também. Então agora temos uma espingarda e um rifle original. E neste rifle, em vez de usar a bala de espingarda, vou entrar nessa ranhura, entrar nas balas na bala do rifle, salvar tudo isso. E, finalmente, vamos excluir o rifle. Exclua a bala do rifle. Todos vão para o onde está? Prefabs. Ok, então armas, é a última. E vou adicionar o rifle como filho das armas. E, obviamente, a posição dos rifles deve ser definida como 0. Agora vamos tentar isso novamente mais uma vez. Mais uma vez, adicionamos o rifle como as armas são, e desligaremos a espingarda. Ótimo. Então agora temos o rifle e os braços, e como você pode ver, ele não está perfeitamente posicionado. O que podemos fazer é movê-lo do pré-fabricado. Você pode estar pensando, por que não está posicionado para escrever? Bem, se voltarmos aos recursos aqui, você pode ver, se você olhar atentamente que o spray de espingarda pode ver onde ele termina. O rifle tem um pouco de espaço na frente e na parte de trás. Portanto, isso é apenas uma tecnicalidade e se você adicionar este, por exemplo, será ainda mais longe. Então, o que vou fazer é simplesmente mover isso na direção X um pouco. Então, lá vamos em torno de ponto zero 40 para copiar isso e adicioná-lo ao prefab rifle. Então, agora, quando eu desligo o rifle, vamos tentar isso novamente, adicionados às armas em movimento em que se encaixa perfeitamente. Então, remova isso. Ligue o rifle. Temos o ponto de disparo, temos as balas de rifle, temos tudo ajustado corretamente. Vamos testar isso, salvar isso, executar o jogo. Vamos fazer isso um pouco maior. Certo, então lá vamos nós. Sim, lá vamos nós. Você pode ver agora que temos a espingarda, não a espingarda, desculpe-me, na verdade, vamos maximizar o jogo para vê-lo corretamente. Lá vamos nós. Então, agora, quando devem as balas, elas são muito mais rápidas e o tempo entre os tiros é muito melhor. Lá vamos nós. Quão legal é isso? Eles parecem muito bonitos? Talvez devêssemos fazer o dano deles um pouco menos, mas não nos certificamos se o dano estava funcionando corretamente. E você pode ver isso se vira e faz tudo o que a espingarda estava fazendo e foi muito fácil de criar. Então, com isso, vou lançar um desafio e é adicionar suas próprias armas. Portanto, crie mais uma ou duas armas de sua própria escolha. Vou adicionar uma pistola. É, tudo será o mesmo como eu mostrei. Eu criarei uma bala diferente para ela e etc. Então talvez você tenha baixado algumas armas, sprites de armas futuristas. E eu realmente queria fazer isso, mas não encontrei um bom conjunto de aberturas futuristas, todos os sprites onde você tinha que pagar por eles ou eles não eram tão bons. E eu queria ter certeza de que tudo isso acabasse. Todos os meus cursos dos ativos que usamos são 100% gratuitos. E, finalmente, pelo menos mais uma arma, ou adicione pelo menos mais uma arma com seus próprios atributos. Então pause o vídeo agora mesmo, vá fazer o desafio no próximo vídeo, talvez agora, eu vou usar a magia da edição, criar a arma que você viu o processo, você não precisa vê-la novamente, mas eu recomendo que você adicione suas próprias armas. Confiar que é muito mais divertido ter armas que você criou e não apenas coisas que você copia de mim. Dito isso, eu vou te ver em um pouco. Certo, bem-vindo de volta. Então eu adicionei uma pistola e acabei de ter algumas coisas malucas que eu queria criar. Você pode ver, então eu fiz uma barraca com um tempo entre tiros. Fiz uma bala de pistola. Não é uma bala de cristal perfeita. É meio grande, honestamente, quando se trata da forma como a pistola funciona ou do tamanho da pistola. Mas não vamos nos preocupar com isso. Este jogo é tudo sobre criatividade e diversão. Então, o que quer que você queira fazer, basta fazê-lo. Então lá vai você. Você pode ver a pequena pústula. Ele se move e quando devemos reservar, lá vamos nós. E você pode ver que a bala é meio grande, mas eu realmente acho que é muito legal. Portanto, pelo menos, diferenciará entre as balas regulares da espingarda e as balas do rifle. Então você saberá que esta é uma pistola e esta é a bala do pistão. Então, com isso feito, espero que você goste. Espero que você tenha criado suas próprias armas. E se você ainda não me deixou um comentário, isso me ajuda muito. Certifique-se de confirmar suas alterações. Lá vamos nós. Criou um rifle de sal e uma pistola como armas extras. Então, por favor, certifique-se de me deixar um comentário. Isso me ajuda uma tonelada e te vejo no próximo vídeo, onde vamos realmente alternar entre nossas armas. Como você pode ver, temos que ligar e desligar certas armas e podemos até ligar armas, o que é um mecânico legal, mas não uma que estamos procurando fazer, especialmente quando não está no nosso controle. Então, vejo você no próximo vídeo. 52. Comutação entre armas: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, quando eu executar o jogo, você verá agora que posso usar um rifle, não preciso ir para a hierarquia e mudar a arma. Eu posso pressionar a aba e você pode ver que eu tenho a pistola agora. Pressiono a guia novamente. Eu pego a espingarda. Pressiono a guia novamente. Eu tenho o rifle. Pressiono o Tab novamente, tenho a pistola e assim por diante e assim por diante. Posso fazer isso o dia todo. Atire neles com uma espingarda, o rifle mãe deve então com uma pistola, eu posso fazer o que quiser e ninguém pode me parar. Então, não vamos perder mais tempo e vamos trocar de armas. Oh, caso. Então, é hora de trocar nossas armas. A primeira coisa que vamos fazer é que vamos obter uma referência a todas as armas que estão disponíveis no jogador. Agora, este é um ponto de debate. Onde queremos lidar com tudo isso? Onde queremos ter a lista de informações sobre todas as armas e assim por diante. E eu senti sobre isso. Podemos adicionar um script às armas e garantir que tudo corra bem aqui. Mas, na verdade, acho que talvez o jogador devesse ser o único que está lidando com as armas disponíveis que ele tem. Então eu vou subir e jogar e vou remover tudo o que você sabe, vamos mantê-lo como um lembrete de como às vezes não estamos muito atentos e cometemos erros. Então, faça backup aqui. Vou seguir em frente e criar antes de tudo, a referência a todas as armas que temos. Então, será um campo serializado, que será uma lista de tipos, armas, sistema de armas. E assim. E eu role um pouco para baixo e vou chamá-lo de armas disponíveis ou armas disponíveis. Vamos chamá-lo de armas disponíveis. E é igual a uma nova lista de sistemas de armas. Salve isso. Agora, a próxima coisa que queremos ter é uma variável que é um número inteiro que acompanhará a arma atual que temos. Então, vou criar um int privado e ele vai ser a arma atual. Salve isso. Então, o que estamos fazendo aqui? O que queremos fazer é que vamos querer obter uma referência a todas as três armas que estavam segurando ou o que quer que seja, quantas armas temos armas disponíveis. Vou bloquear isso, selecione. E antes que eu faça isso, vamos nos certificar de substituir o jogador de dunas aplicar tudo. Então, sabemos que temos as armas nele. Vou trancá-los e vou selecionar o rifle, a pistola e a espingarda, e vou adicioná-los às armas disponíveis. Então, como você pode ver agora, temos uma referência ao rifle de espingarda e à pistola. Então, o que vou fazer é criar algum tipo de loop que é ativado. E esse loop passará por todas as armas e virará apenas a que eu quero. Então, o postal atual e toda vez eu vou aumentar a pústula atual um a um. Então eu sei que essa explicação é um pouco confusa. Vamos prosseguir e implementá-lo e isso fará muito mais sentido. Então, aqui, primeiro vou criar o método que vai ser ou saber o que antes de fazer isso, deixe-me remover o tiro do jogador e o que tudo isso faz? Isso, deixe-o para baixo espaço, ok, então jogador arrojado, então clique com o botão direito do mouse, ação rápida e refatoração do método de extração. Lá vamos nós. Tão arrojado, jogador ou jogador arrojado. Acho que faz mais sentido. Controle RR. Lá vamos nós. Então, como você pode ver, conheço todos os atalhos para resolver erros porque cometi tantos. De qualquer forma, vamos ir em frente e trocar a arma. Vou criar imediatamente um método aqui para que não vamos extrair. Então, vai ser uma arma pública de interruptores vazios. E aqui, em primeiro lugar, vamos querer verificar qual tipo de tecla queremos pressionar para trocar a arma. Então, será uma entrada que obtém C0, get keydown era um código de chave. E você pode usar o que quiser. E vamos usar a guia. Não, não a fuga. Lá vamos nós. Então, quando pressionamos Tab, queremos trocar nossas armas e vamos chamar isso aqui. Então troque a arma, troque as armas com afiação. Estou um pouco confuso. Você pode chamá-lo do que quiser. Então, arma de arma é a mesma. Queremos ter algo além de armas como armas. De qualquer forma, vamos continuar. A próxima coisa que queremos ter. Queremos ter certeza de que realmente temos armas em nossa posse. Então, vamos verificar se a contagem de pontos disponível do Gana é maior que 0. E você pode estar pensando, bem. Claro que vamos ter uma arma. Michael, do que você está falando? Bem, mais tarde, quando começamos a comprar armas, quando começamos a pegar armas, você notará que talvez em algum momento o jogador não tenha armas. Então, o que isso nos evitará um grande erro. E vou adicionar um aviso aqui. O aviso de ponto de depuração e nenhuma arma disponível. Pegue um pouco. Portanto, isso é diferente do log normal. Este é um aviso de log e também temos um erro de log, e isso estará em uma cor diferente. E o console, como você pode ver, são erros e por algum motivo, temos o dinheiro de pré-visualização claro. Isso vem acontecendo há muito tempo e eu procurei. Eu tentei muitas coisas, atualizando ou tudo. Nada funciona. Aparentemente, é algum tipo de problema no Unity, mas não afeta nosso jogo, então não se preocupe com isso. Vou limpá-lo com este botão. E você pode ver que são erros. Registramos registros regulares e temos registros de aviso. Mas vamos manter o foco. O que acontece quando sabemos que temos uma arma? Em primeiro lugar, vamos obter a gengiva atual e aumentá-la em uma. Então isso faz um plus, plus. Depois que fizermos isso, vamos verificar algo que é muito importante. E isso é depois de passarmos por todas as armas. Então, se estamos aumentando e o canhão atual que agora foi aumentado em 1, é maior do que a contagem de pontos de armas disponíveis. Queremos voltar para a primeira arma. E como fazemos isso? Redefinimos a corrente voltada para 0. Então, o que está acontecendo aqui? Digamos que tenhamos as três armas. Isso significa que a contagem de armas disponíveis é três. Isso significa que começamos em 012. Os dois são o último índice do último elemento é o índice do último elemento. Então, o que acontece aqui, uma vez que pressionamos a aba, verificamos que temos armas disponíveis aumentadas em um elétron. Vamos ligar essa arma. Mas, por enquanto, nos certificamos de que, se tivermos a arma atual, então digamos que você esteja no índice dois e a contagem disponível é três. Então nos tornamos, a arma atual se torna três, o que significa que queremos reiniciá-la para 0. Então pegamos a primeira arma e passo e evitamos um erro enorme. Então, o que isso fez, o que mais precisamos fazer? Bem, há algo que precisamos ter certeza e isto é, se eu voltar aqui. Então lembre-se de como estávamos usando as diferentes gengivas. Não ligamos apenas o rifle. Então, se eu clicar no rifle, não ligamos o rifle e começamos a atirar. Primeiro viramos a pistola e depois colocamos o rifle e podemos atirar com ele. Então, esse será o seu desafio. Seu desafio será definir todas as armas para decretar. Portanto, crie um loop para cada loop para passar por todas as armas disponíveis, defina todas elas como inativas. Então, todos eles estão inativos. E, em seguida, defina apenas a arma atual para estar ativa. E eu vou te dar uma pequena dica se você já sabe o que fazer ou você sente que quer fazer isso sozinho. Pause o vídeo, vá fazer o desafio. Caso contrário, isso é o que você precisará. Você precisará acessar as armas disponíveis na arma atual. E você precisará acessar o objeto do jogo porque as armas disponíveis são do sistema de órgãos de tubos, possamos apenas definir ativo para isso. Precisamos acessar o objeto do jogo que contém a arma atual e, em seguida, definir o ativo como verdadeiro ou falso. Então, pause o vídeo agora mesmo e defina todas as armas para um ativo. Certo, bem-vindo de volta. Como você se deu bem com isso? São realmente, realmente, esse foi um desafio interessante, usar um para cada desligar as coisas e realmente entender a mecânica. Então, primeiro, vamos criar um loop para cada. E aqui este será o sistema de armas. Vamos chamá-la de arma nas armas disponíveis. Parece meio estranho, não é? Sabe o quê? Vamos renomear isso das armas disponíveis para as armas disponíveis. Lá vamos nós. E precisaremos nos certificar de colocá-los de volta no Unity. Porque quando mudamos o nome de uma variável, você verá que agora a lista é , não, ainda está boa. Por quê? Porque não salvamos. Quando salvamos, agora devemos ver que tudo desaparece. Precisamos colocá-lo de volta novamente. Lá vamos nós. Você pode ver que está em 0. Isso é algo para ter sempre em mente. Então faça isso antes de esquecermos de evitar erros, salve isso, ok, Agora, de volta à Unity, o que queremos fazer aqui enquanto estamos percorrendo todas as armas. Então, o que vou fazer é ir frente e usar a arma. Dot. Ponto Gameobject definido ativo como falso. Então, o que acontece aqui? Temos todas as armas disponíveis. Nós definimos todos eles como falsos. E então o que fazemos como verificar novamente as armas disponíveis na arma atual, o ponto GameObject ativo. Verdade. Então, por que estamos desligando todas as armas e não apenas a arma que estamos usando. Isso era algo em que eu também estava pensando. Mas também mais tarde, quando começarmos a trocar amina, quando começarmos a pegar armas, vamos querer trocar a arma. E é, é muito mais seguro desligar tudo e depois simplesmente virar a coisa que realmente precisamos. Talvez às vezes a ordem das armas seja diferente. E apenas virando o que temos agora, talvez vamos ligar algo diferente que não queremos. Então eu tomei a precaução extra de apenas percorrer todas as armas, colocando todas elas como falsas. E então, acho que a única coisa que precisamos ser verdade, espero que seja compreensível. E se você quiser criar algum tipo de mecânica mais complexa, eu realmente ficaria feliz em vê-lo. Você pode ir discórdia e mostrar suas coisas lá. Então, vou voltar ao meu jogo aqui, salve isso. E vou seguir em frente e vamos ver, executar o jogo e ver o que acontece. Então eu tenho o rifle. Você pode ver que ele está ligado aqui na hierarquia. Se eu apertar a aba, se eu bater na aba, lá vamos nós. Eu tenho a pistola. Se eu bater na Tab novamente, eu tenho a espingarda. Quão legal é isso? Você pode ver tudo na hierarquia. Vamos tentar isso novamente. Rifle, tiros de rifle, pistola, tiros de pistola, espingarda, tiros de espingarda, e assim por diante e assim por diante. Então, espero que você goste , certifique-se de confirmar suas alterações. E acabei de mencionar este tribunal, espero que você já soubesse que tínhamos uma discórdia indo para lá. Mostre suas coisas que vemos. Certo, então eu não abri este curso só para me manter concentrado. Eu sempre respondo lá o mais rápido possível. Às vezes, não respondo tão rápido quanto deveria ser. É porque, claro, MyTime, todos nós temos 24 horas e porque todos estão em uma escala de tempo diferente ou qualquer outra coisa, teriam sido lugares diferentes no mundo. Temos uma comunidade incrível. Muitas pessoas estão lá por causa da forma como lidamos com a mentalidade que temos, que somos todos alunos. Eu sempre aprendo coisas novas quando estou ajudando alguém e é isso que você sempre deve estar fazendo. Não tenha medo de cometer erros. Tente ajudar o máximo possível. Juntou-se à discórdia. Deixe-me um comentário. Espero que você esteja gostando e eu o vejo no próximo vídeo, onde na verdade não veremos apenas as armas aqui nos jogadores estão, e também poderemos vê-las na interface do usuário tela que criamos. Então, com isso dito, te vejo no próximo vídeo. 53. Tela de tela com armas: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos e este vídeo, quando executarmos o jogo, você verá que temos o rifle. Quando trocamos uma arma, temos uma pistola. Quando trocamos a arma, temos uma espingarda. Então agora temos uma representação visual da qual se foi, estamos carregando conosco. Então, sem mais, não vamos perder mais tempo e vamos começar. Oh, caso. Então agora, em vez de apenas mudar a arma, os pilares segurando, queremos também exibir isso na tela da interface do usuário que criamos. Então, vamos seguir em frente e fazer isso. Primeiro de tudo, vou tornar a cena um pouco maior para que possamos ver corretamente, vou clicar duas vezes em algum lugar aqui na tela, enquanto a tela clica duas vezes nela. E lá vamos nós. Agora temos a tela enorme. Vamos para as camadas e vamos definir que podemos ver a camada da interface do usuário. E aqui isso só por um momento, desligue a imagem desvanecida para que vejamos o que está acontecendo. E aqui, o que vamos agir? Bem, queremos duas coisas para representar as armas que estamos usando no momento. Queremos ter algum tipo de imagem para representar a arma e queremos algum tipo de texto sob essa imagem. Então, vamos em frente e começar. A primeira coisa que vou adicionar é clicar com o botão direito do mouse aqui. E vamos primeiro criar um objeto de jogo vazio apenas para representar tudo sobre arma. Então, vou dizer armas, interface do usuário. E sob armas você está, vou criar uma imagem antes de tudo. Então, imagem, esta será a imagem da arma. E também vou criar um texto que será o trabalho. O que é isso, o texto das armas. Lá vamos nós. Então agora temos uma imagem de arma e um texto de arma. Vou clicar na tela aqui por um segundo. Basta abrir isso. Ao abrir a tela, posso, onde quer que clique, ainda consigo ver as bordas. Então, vou escolher a imagem e vou arrastá-la para o lado. E você pode ver aqui mesmo na visualização do jogo o que vamos ver o tempo todo. Então, vou fazer isso um pouco maior, como algo sobre esse tamanho. E este será o engenheiro de armas. E então teremos os textos para escrever embaixo dele aqui. E vamos apenas testar isso e ver como ele funciona. Então, na imagem, escolheremos uma fonte. Vou trancar isso só para não perdê-lo. E vou entrar nas armas de sprites. E vamos em frente e adicionar a espingarda. Então lá vai você. Você pode ver agora que podemos ver a espingarda. Podemos configurá-lo para o tamanho nativo para torná-lo um pouco menor. Mas você sabe o quê? Sinceramente, gosto do jeito que era antes. Grande e fácil de ver. Agora, o texto das armas, queremos mudar um pouco porque queremos ter isso, por exemplo, o nome das armas. E mais tarde, aprenderemos como podemos mudar ou criar nossa própria fonte. Mas, por enquanto, vamos mantê-lo como é apenas para fins de teste. Podemos mudar o alinhamento aqui e podemos colocá-lo no meio. Podemos torná-lo ousado. Podemos fazer muitas coisas com o texto, mas uma delas está mudando a cor e tornando-a completamente branca para que possamos vê-lo em segundo plano, não importa o que aconteça. Vou torná-lo um pouco maior que possamos aumentar o tamanho. Lá vai você, você pode ver que é assim que aumentamos o tamanho e agora aumentaremos o tamanho da fonte. Então lá vai você. É sobre como eu queria fazer isso. Então o nome das armas logo abaixo da arma real e podemos até tornar a caixa um pouco maior e aumentar o tamanho das palavras. Então lá vai você. Agora podemos escrever a espingarda e assim por diante e assim por diante. Vamos remover o naufrágio como alvo aqui porque nós repetimos o alvo, como dissemos, podemos clicar nele. Não queremos clicar nele. Não fará diferença, mas vamos mantê-lo assim. Podemos alterar o estouro horizontal, o estouro vertical, e podemos criar algo chamado o melhor ajuste. E isso é muito bom porque agora, quando mudamos, você pode ver que a fonte mudará com o, ou o, o tamanho das palavras vai caber quanto ao grande V. E não tenho certeza por que posso dizer algo corretamente, mas de qualquer forma, lá vai você. Você entende o que quero dizer com melhor ajuste? Você acabou de ver o que acontece. Certo, vamos continuar e parar de divagar. A próxima coisa que queremos fazer é que queremos ter acesso ou ao comportamento dessa interface do usuário. Então, o que vamos fazer, queremos antes de tudo, atribuir a cada arma o sprite e o nome apropriados. Então, vou entrar no prefabricado das armas. Então prefabs, armas, selecione a pistola. E é aqui que vamos definir tudo. Então, vou abrir o roteiro aqui. E no sistema de armas, porque cada um tem um sistema de armas, vamos adicionar duas variáveis. O primeiro será um sprite. E vai ser a imagem da arma. E o segundo será uma string. E vai ser a arma. Vamos mantê-lo. Uma arma e a arma. Arma, pescoço. Lá vamos nós. Então, texto da arma, imagem da arma e o nome do que aconteceu. E se eu voltar para o Unity depois que ele compila, lá vamos nós. Podemos ver que temos o sprite da imagem e o nome da imagem. Então, vamos escolher a pistola. Vá para a pistola na imagem. Faça disso a pedra. E então vamos para o rifle ou nano para voltar para o rifle de armas Prefabs, trancar isso, encontrar a imagem aqui embaixo. Qual é o nome? Vamos mantê-lo no rifle sem a parte de assalto. E o que mais temos? Menos escolha a espingarda, saiba que a arma de tiro pré-fabricada, trave isso. Finalmente, imagem de espingarda, verde aqui, nome das armas, chocado, arma. Lá vamos nós. Então, agora cada pré-fabricado tem sua própria imagem de jardim ou Imagem Arma e seu próprio pescoço de arma. Então, a próxima coisa que precisamos fazer é precisamos de dois cada vez que trocamos uma arma para preencher esta imagem. Atualmente, se eu executar o jogo, você vai notar que eu tenho a imagem aqui, posso me movimentar, mas se eu tentasse mudar minha arma, as imagens não mudam. Então, agora é hora de adicionar comportamento a isso. E vamos fazer isso no UI Manager, que está no campus. Então, vamos abrir o UI Manager e vamos ver o que vamos fazer aqui. Então, a primeira coisa é que precisamos uma referência à imagem e ao texto. Então, vou criar um campo serializado aqui, que será do tipo de imagem. E podemos usar o EMG porque temos Unity engine dot QI usando lá em cima. Vamos chamar isso de imagem da arma. Vamos manter as coisas simples, assim como eram antes. E aqui teremos um texto com o qual é o nome da arma. Salve isso de volta no Unity. E vamos ver agora que podemos ir em frente e bloquear isso. E podemos adicionar a imagem da arma, e podemos adicionar o imposto sobre armas. Podemos clicar na tela da interface do usuário e garantir que aplicamos essas alterações em todo o nosso projeto. Excelente. Agora, a próxima coisa a fazer é mostrar um desafio. E seu desafio será criar um método que mude o intestino. Então, primeiro, você precisa criar um método vazio que seja público e use dois parâmetros. Uma imagem para a arma e uma corda para o nome da arma ou nome das armas ou o que você quiser chamá-la. Então você precisará definir o sprite da interface do usuário da arma usando a imagem. E você também precisará definir o texto do nome da arma como o nome da coluna. E finalmente, vou te dar uma pequena dica se você quiser, se você não fizer e fazer o desafio. Se não, você pode usar a arma que você pontuo sprite e a interface do usuário ou o nome da arma que você é, ou qualquer que seja o nome da variável real. Texto de ponto, sprite de ponto para acessar o sprite e o texto. Lembre-se que isso deve ser arma e não imagem da interface do usuário. Oh, ok, então lá vai você. Pause o vídeo agora mesmo. Vá fazer o caldeu. Certo, bem-vindo de volta. Então, o que vamos fazer aqui? E vamos criar um vazio público e mudar o desaparecido ou alterar a UI aberta. E dissemos que vamos tomar em dois parâmetros. O primeiro parâmetro será um sprite, e será a imagem das armas. E saiba, porque já temos o ano da imagem da arma. Vamos mudar este para arma. Então lá vai você, imagem de arma. E também vamos pegar uma corda, que será o texto da arma. Então, esses são os dois parâmetros que vamos criar e agora que os temos, como vamos mudar as imagens? Enquanto se entrarmos aqui, como já lhe disse nas mãos, se clicarmos na imagem da arma, podemos ver que aqui temos a imagem de origem. Então, se eu for, vou dizer que temos o Sprite de Imagem de Arma e é igual à imagem da arma que nos foi fornecida. E então temos o texto do ponto do nome da arma. Então, estamos acessando. Deixe-me voltar aqui e mostrar-lhe uma coisa. Então, temos as armas relaxadas. É do tipo texto, mas o imposto do componente, mas estamos acessando o texto no texto. Portanto, temos esse parâmetro ou característica de texto. Os componentes. Então, estamos acessando isso dizendo ponto txt e é igual ao texto da arma. Salve isso. Oh, ótimo. Agora podemos realmente mudar a interface do usuário, mas o próximo passo é realmente mudar a interface do usuário das armas sempre que as trocarmos. E onde vamos fazer isso? Bem, vamos fazer isso no método de arma switch 0 e 0. Há algo aqui que eu queria te dizer, eu comentei. Deixe-me dizer-lhe agora, se você notou quando jogamos nosso jogo, assim que começamos, por exemplo, temos o rifle, ok, então apertamos a tecla tab e ela não muda, não até atingirmos o tecla tab novamente. Então, qual é o problema? O problema é que em nossa camada aqui podemos ver que temos a corrente desaparecida, mas não atribuímos nenhum valor a ela. Portanto, ele não sabe qual é o valor. Então, o que eu fiz e começo e o controlador do jogador, podemos simplesmente escrever essas duas linhas de código. E o que eles fazem é antes de tudo, definimos a arma atual, que é um número inteiro para a contagem de pontos de arma disponível, e então nós apenas mudamos para a arma. Então, começamos no rifle. Então agora, quando eu corro o jogo, ou podemos até algo muito melhor se você quiser começar com a primeira arma que temos. Podemos definir isso como a contagem de pontos das armas disponíveis menos um. Então, agora, assim que começarmos o jogo, teremos a primeira arma conosco. Certo, então lá vamos nós. Agora podemos mudar imediatamente e há algo errado aqui. Oh, ok, então novamente, é esse erro irritante. Então, de volta aos jogos. Então, como você pode ver agora, assim que começarmos, podemos clicar na guia. Talvez queira tornar isso público, mas como já disse no vídeo anterior, não é uma boa maneira de ter acesso a variáveis. Uma maneira muito melhor é entrar aqui e criar dois métodos. O primeiro será público. Ele retornará um sprite será chamado de imagem get gun. Você obtém a imagem de armas realmente obtém a IU da imagem da arma. E vou abrir os suportes e vou simplesmente devolver as armas e fechá-las com um ponto e vírgula. E então eu vou criar um método semelhante que retornará uma corda e ele vai pegar a arma. Obtenha arma, texto, interface do usuário ou nome, na verdade nomeie a IU ou não. Não podemos nem usar a palavra UI. Mas vamos mantê-lo apenas por uma questão de saber por que estamos recebendo isso. Então, nome da arma, salve isso. Então agora podemos acessar o sistema de armas. E a partir desse sistema de armas podemos acessar esses dois métodos. E com esses dois métodos, podemos ter a imagem e o nome das armas sem enfrentar o problema de mudar essas variáveis por engano ou causar algum tipo de erro. Então, agora, o que podemos fazer é conseguir a arma disponível. Arma disponível na posição atual arma ou é a arma atual? E podemos obter o componente nesta arma atual, que obviamente é o sistema de armas. E a partir deste sistema de armas, podemos, o que podemos fazer? Em primeiro lugar, podemos obter o que é chamado? Obter imagem de arma. E então podemos pressionar Enter aqui porque a linha é muito longa. Em uma vírgula. Copie isso e cole-o aqui na entrada inaugural. E qual parece ser o problema aqui? Por que o primeiro está me dizendo que não pode converter o método grupo 2, certo? Certo. Certo. Este é um método. E pegue o nome, obtenha o nome da arma UI. Lá vamos nós. Nós salvamos isso. Então, agora, se você quiser, eu recomendo que façamos algo aqui porque temos código redundante. Podemos definir isso como uma variável e, em seguida, usar a arma Get e obter uma imagem. Isso seria algo mais inteligente de se fazer. Mas, por enquanto, vamos mantê-lo para que sempre saibamos está acontecendo depois de mudarmos a arma, definimos como verdadeira e, em seguida, acessamos o UI Manager. Obtemos a arma disponível na posição atual, obtemos o script dos sistemas de armas e, em seguida, obtemos a imagem das armas. Nós o enviamos para a interface aberta de alteração, que está no UI Manager. E isso deve mudar a imagem sempre que trocarmos a arma. Então, de volta ao nosso jogo, vamos correr e ver o que acontece. Lá vai você. Quando atingimos Tab, pegamos a arma de tiro, pegamos o rifle, pegamos a pistola que é esmagada por algum motivo porque a pistola está tentando preencher toda a lacuna. Vamos ver, onde está, onde está? Onde está isso? Na interface do usuário, a imagem da arma. Então, obviamente, quando o colocamos como arma, não é tão bom, mas não se preocupe com isso. Contanto que funcione para você, podemos mudar isso, torná-lo menor, torná-lo maior. Talvez até uma ideia melhor, talvez tenha mudado a forma como essa imagem é representada. Me incomode demais. Se isso te incomoda, e eu recomendo, talvez vejamos como podemos corrigir isso mais tarde. Mas, por enquanto, podemos ver que ele está funcionando. A única coisa que não está funcionando. Assim que corremos. Podemos ver que, a menos que troquemos a arma, temos a primeira que é o nome das armas, assim como uma imagem em branco e um texto em branco. Então, o que podemos fazer é no UI Manager aqui. Então, vou selecionar isso. Vou clicar com o botão direito do mouse em ação rápida e refatoração. E vou chamar isso de armas de configuração. Armas. Você, eu apertei Enter. E agora eu posso ir e começar. Não vou trocar a arma porque acabei de notar algo que isso não funciona a menos que tenhamos a guia. Então, tudo o que estamos fazendo aqui é apenas definir a corrente para que ela funcione imediatamente. Você pode defini-lo como 0, se quiser. Mas vamos remover isso e, em vez disso vamos definir a interface do usuário de armas. Então, definindo armas você. Assim que começarmos. E deixe-me selecioná-los e apertar guia Shift algumas vezes apenas para fazê-los parecer um pouco melhores. Nós salvamos isso como eu disse, a coisa inteligente a fazer é mudar isso e colocá-lo em uma das variáveis. Eu recomendo que você possa fazer isso. E com todo esse conjunto, vamos voltar ao nosso jogo e vamos testar isso, ver se funciona a partir do jogo. E não, isso não ajudou no início. Por que isso? Então, depois de fazer um pouco de pesquisa, percebi algo e entendi de onde o problema está vindo. Então, aqui estamos tentando definir a interface do usuário de armas, que está aqui, e estamos tentando acessar a instância Don do UI Manager. O problema é, e eu notei que aqui, se eu executar o jogo, você notará que eu tenho essa seta aqui. E você pode ver que a referência de objeto não é definida como uma instância de um objeto. Então eu cliquei duas vezes e olhei aqui e notei que, por algum motivo o script do player está sendo instanciado ou começando antes do script da interface do usuário começar. Portanto, ainda não temos uma referência ao UI Manager. Agora, o que podemos fazer é tentar fazer isso e acordar em vez de começar e aguardar começa um pouco mais cedo do que o início. Vamos testar isso e ver se ele funciona. Se isso acontecer, então nos salvamos de muitos problemas. Não tenho certeza se isso funcionaria, mas vamos testá-lo. Então, no jogo, execute o jogo. Certo, então lá vamos nós. Funcionou. Quão legal é isso? Quem economizamos tanto tempo, não tinha certeza se funcionaria. Agora outra coisa é a pistola sendo esmagada. Podemos entrar na imagem aqui e certifique-se de clicar no aspecto preservar. Você pode ver que a pistola permanecerá a mesma. Então vou parar o jogo e as predefinições, salvá-lo e me certificar de aplicar as alterações. Então, agora, quando corremos, lá vai você. Você pode ver que o PESTEL está definido corretamente, mas qual é o problema? O problema é que eu tenho um rifle e minha mão, mas a pistola está sendo retratada. Por que isso? Bem, porque novamente, se voltarmos, salvaremos isso. E para fins futuros, certifique-se sempre de definir a instância e o acordado não no início. Então, agora esta foi uma oportunidade incrível para você entender a diferença entre o início e o acordado. Começa acordado um pouco antes de começarmos. Vamos continuar um, por que temos a pistola no começo? É tudo por causa do atual desaparecido disponível. Então, a arma atual está sendo configurada para contagem de pontos menos um, que é a pistola. Porque a pistola, como você pode ver no jogador dos dooms, é a contagem menos um, que significa elemento dois. Então, como vamos consertar isso? Bem, o que podemos fazer é duas coisas. Simplesmente definiremos a arma atual para ser. Acho que talvez um. Dessa forma, começaremos na posição certa. Então, de volta aqui, vamos executar o jogo. Estamos segurando um rifle e temos um rifle representado. E mais tarde, tenho certeza de que encontraremos uma solução mais inteligente para isso, mas, por enquanto, faremos o que funciona. Espero que você tenha gostado do vídeo. Espero que você esteja dizendo todos os seus arquivos e eu o vejo no próximo. 54. Criação shake: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, sempre que começamos a filmar, não temos mais essa coisa chata que acontece. Na verdade, temos tremores. Então, quando atiramos, lá vamos nós. Você pode ver sempre que devemos, temos algum tipo de agitação, então ele adiciona um nível de intensidade. Obviamente, a intensidade na espingarda é demais, mas como você pode ver, cada arma tem sua própria intensidade. Então observe o rifle, observe a arma e observe a espingarda. Lá vai você. Então você pode ver que temos intensidades diferentes para armas diferentes. Então, não vamos perder mais tempo. E vamos começar. Oh, ok, então agora o que queremos fazer é adicionar um pouco de intensidade à maneira como estamos filmando. Então, atualmente, tudo está funcionando bem. Estamos atirando com nossas armas. Podemos mudá-los para armas diferentes. Podemos matar inimigos. Tudo é bom, mas ainda há algo me incomodando e isso é que o tiroteio não é tão emocionante. Então, temos o tiroteio, não sentimos isso. Vemos isso. Isso não afeta, mas não o sentimos dentro de nós. Então, o que vamos fazer é adicionar um pouco de agitação à câmera. E, felizmente, é extremamente fácil quando se trata de usar uma máquina pecadora. Antes de ter uma única máquina, levaria muito sempre que você quiser fazer a câmera tremer e não funcionaria . Às vezes é feito. Então, não vamos perder mais tempo. E vamos em frente para a câmera virtual e adicionar algo chamado Berlim multicanal básico sob o barulho. Então você quer me perguntar, qual é a Berlim multicanal básica? Não faço ideia, mas sei que isso cria barulho. Então, se você quiser se aprofundar nesse feixe, acho que ficaria muito feliz. Então ela fora do caminho. Vamos ver o que acontece aqui. Temos diferentes tipos de perfis, ruído, não vamos mais chamá-lo de saber. E podemos mudar isso para ter vários aspectos diferentes. Você pode ir em frente e ler sobre tudo isso. Eu realmente não sei o que eles realmente fazem. Não estou tão profundamente na máquina SONA, mas o que sei é que podemos usar 60 shake e temos a amplitude e o ganho de frequência. Então, se eu executar o jogo, você notará que teremos tremores agora. Ok, então lá vai você. Você pode ver o pequeno tremor e você pode ver a câmera como ela está tremendo. Se eu aumentar a amplitude, lá vai você, você pode ver que à medida que eu aumento, temos cada vez mais tremendo até que possamos lidar com isso. Sem guerra. Vamos defini-lo como 0 por enquanto, você pode ver que eu também posso criar um deslocamento. Então, se eu defini-lo para um e eu aumentar no y, acho que no Y haverá mais tremores, mas vamos mantê-lo em 0. Também podemos aumentar a frequência, e isso aumentará a frequência do tremor. Então, vamos mantê-lo em um. Vamos configurá-lo de volta para 0. E vamos encontrar uma maneira de controlar esse tremor sempre que estamos realmente atirando. Então, para fazer isso, vou criar um novo script. Então vou entrar no script, vamos clicar com o botão direito do mouse e criar uma pasta para as câmeras. Porque mais tarde podemos ter um controlador de câmera. E vamos seguir em frente e criar um roteiro nítido C e chamá-lo de agitação, acampamento. Pressione Enter, aguarde que ele seja compilado. E vamos adicioná-lo à câmera virtual. E lá vamos nós. Agora temos um roteiro aqui. Vou abri-la e vamos fazer algumas coisas. Então, a primeira coisa, primeiro, precisamos estar usando cin uma máquina. Isso nos permitirá acessar coisas diferentes dentro da máquina, assim como usar a UI doc do mecanismo Unity para acessar coisas na tela da interface do usuário. A próxima coisa que vamos fazer é criar algumas variáveis. Agora carregue comigo. Isso será um pouco estranho, mas você entenderá tudo. Primeiro, obviamente precisamos de uma referência à câmera virtual. Então, vou criar um pecado privado em uma máquina. Na verdade, vamos apenas câmera virtual, câmera virtual de máquina central. E vou chamá-la minha câmera virtual só para manter as coisas muito simples. Em seguida, vamos criar outra variável privada, que será o purlin de vários canais. E vamos chamar isso de barulho. Então, como dissemos, esta animação, Berlim multicanal básica. Esta é a última vez que vou salvar o mundo da música. Aí está, bem aqui, e precisaremos de uma referência a ele e ao barulho. Então, de volta aqui, o que mais precisamos? Bem, acho que precisaremos criar uma instância disso porque não queremos continuar procurando por ele e só precisávamos de uma vez. Eu acredito. Então, vou tornar isso uma estática pública. E faremos disso um tipo de câmera instável e instável. E vai ser chamado de instância em postura. E lá vamos nós. E de certa forma a partir de agora, sempre que queremos instanciar uma instância, ela está sempre e acordada. Portanto, a instância é igual a isso. Ótimo. Em seguida, vamos em frente e configurar tudo. E enquanto estivermos acordados agora vamos definir o ruído MD da câmera virtual aqui. Então, primeiro, minha câmera virtual, o que é igual? Bem, é muito simples. Vamos obter o componente, obter o componente e vamos obter a câmera virtual. Lá vamos nós. Então, agora temos acesso à câmera virtual. Então vamos precisar obter o barulho. Portanto, o ruído é igual a sair ou desculpar, ruído é igual ao meu ponto da câmera virtual. E você pode ver aqui que temos isso entra em um componente de máquina. Então, qual é o problema ou não o problema, na verdade, por que entramos em um componente de máquina e por que não podemos simplesmente obter um componente normal? Bem, porque se eu entrar aqui e quatro, eu faço isso, deixe-me preencher este fim. Então, este será o purlin multicanal. Lá vamos nós. Então, por que usamos o componente get cinema machine? 12 máquinas de silano são um pouco complicadas e é por isso que eu recomendo que você veja as documentações e aprenda tudo sobre. Você pode, aliás, vender máquinas para criar trailers e cenas de corte e assim por diante. Portanto, é uma ferramenta muito, muito poderosa. Você aprenderá o que ele faz. Então você pode ver aqui que esses são diferentes, digamos que componentes dentro da câmera virtual. E qual é o problema aqui por algum motivo. Certo, então não estava se abrindo. Nós dissemos que precisávamos do corpo? Oh, ok. Então lá vamos nós. Por algum motivo, não estava abrindo máquina de cinema e torná-lo uma câmera de 60. Salve isso. Certo, vamos continuar. Agora que temos acesso ao ruído, o que vamos fazer é primeiro excluir ou remover o início e a atualização. E vamos criar um método para realmente começar a tremer. Então, vou criar um vazio público e chamaremos isso de câmera de vibração. E dentro da câmera de vibração, vou absorver um flutuador de intensidade. E essa intensidade será traduzida para o ruído. Então, se olharmos aqui sob o barulho, temos o ganho de amplitude. Vamos acessar isso. Então a amplitude ganha o ego deles e temos o pequeno m por trás disso. Mas esse é o nome da variável que estamos acessando e vamos vendê-la como intensidade. E por que temos esse parâmetro de intensidade enquanto? Porque toda vez que atiramos em nossa arma, queremos ter uma certa intensidade. Então, por exemplo, a espingarda deve adicionar um pouco mais de agitação do Arno, o que quer que seja, o rifle adicionará um pouco menos agitando a arma não deve tremer quase. Mas, por enquanto, vamos em frente e chamar esse método aqui. E vamos seguir em frente e, em primeiro lugar, atuar como a sacudida, por exemplo, câmera de agitação. E vamos dar por agora 55. Então, criaremos tremores usando cinco intensidades e veremos como isso parece. Então, vou esperar que isso seja compilado. Vou executar o jogo. E agora devemos ver isso quando eu atiro. Lá vai você. Você pode ver que eu tenho o tremor. Agora, há dois problemas aqui. A primeira é que temos muita agitação. A segunda é que se eu mudar para outra arma, o tremor é o mesmo. Se testarmos, será o mesmo. Confie em mim. Isso não parece assim, mas digamos que eu tentei usar a arma. Então você pode ver agora quando eu tiro, a intensidade é a mesma e não queremos isso. Então, vou te emitir um pequeno desafio. Você vai fazer a câmera tremer. Portanto, crie duas variáveis para cada arma. 14, a intensidade do tremor, e um para o tempo que continuamos tremendo, não queremos continuar tremendo para sempre. Em segundo lugar, você precisará adicionar um parâmetro ao método de forma que leva o tempo. Além disso, você precisará parar o tremor usando uma co-rotina e você precisa chamar o método shake camp toda vez que devemos nos tornar, acho que o último ponto que já fizemos. Então, pause o vídeo agora mesmo e vá fazer a jogada rasa. Certo, bem-vindo de volta. Então, como você conseguiu tudo isso? Então, a primeira coisa que vou fazer é aqui, vou criar um campo serializado do tipo float. E vai ser uma intensidade de tremor de armas. E as armas. O quê? Arma? Tempo de agitação. E vamos remover as armas e fazer com que isso aconteça. Então agora temos a intensidade e o tempo de agitação. A próxima coisa que vamos fazer, o que devemos fazer? Vamos ver o desafio ou até mesmo esquecer como um parâmetro. Ok, então voltamos aqui e adicionamos um tempo flutuante ou tempo de agitação. Tempo de agitação, então precisaremos parar o tremor usando uma co-rotina. Então aqui vou criar um enumerador e ele vai ser chamado de “stop shaking”. Então pare de tremer e ela vai levar uma variável aqui que não é hora de esperar. E, como sempre, vamos ceder, retornar. Novo, espere, quatro segundos, tempo, espere. E aqui depois de terminarmos, vamos pegar o ruído novamente, a amplitude dos pontos. E vamos colocá-lo de volta para 0. Salve isso. E vamos começar o tribunal aqui em cima. Então comece a corrotina. Pare de tremer, por favor. E vamos agitar o tempo. Tempo de agitação. Diga que finalmente, há algo aqui. Então lá vamos nós. Então a intensidade da arma e o tempo de agitação da arma. Salve isso. Acredito que isso é tudo o que precisamos fazer. Então chamamos, recebemos a instância do shakeup, acessamos o método, damos a ele a intensidade da arma, damos a ela o tempo necessário para continuar tremendo. E então chamamos esse método aqui, que leva o tempo de agitação de intensidade, nos dá a intensidade ao ruído. Começa abalado e começa uma coisa fria que irá parar o tremor depois de um pouco de tempo. Então, com isso feito, salvamos tudo isso. Voltamos aqui, temos o Por que o barulho continua fechando? Você notou que toda vez , por algum motivo, há algum tipo algo que não está completamente certo com isso. Espero que funcione. Então, vou defini-lo como 0. Salve isso, execute o jogo. Ah, e eu esqueci de adicionar a cada um tremendo. Então, espingarda, qual é a intensidade do shake em uma espingarda? Vamos fazer seis. E o tempo é talvez de dois segundos. Eu não sei. Eu não testei isso. A intensidade em um rifle será quatro com um tempo de agitação de um. E na pistola será um três para o tempo de agitação de 0,5. Salve isso, execute o jogo. E vamos testar nossas armas para o tremor. Então, vou maximizar o jogo para que pareça muito melhor. Acredito que isso funcionará. Acho que não temos um erro. Então agora, quando eu tiro com um rifle, vá e eu, se eu computar, temos tremendo o tempo todo, então quando eu escolho a pistola, é um pouco menos, então 0,5 segundos e o tremor é um pouco menor. E então temos a espingarda, que deve levar muito e para o MLA. Então boom, lá vamos nós. Estamos lançando algum tipo de bomba nuclear. Mas, obviamente, todos eles precisam de um pouco de ajustes. Vou fazer um pouco de ajustes aqui. Não queremos ter tanta agitação. Teremos um pouco menos, mas sempre volta para você. Como você quer que sua agitação se sinta? Tem que ser intenso? Não precisa ser intenso? Vamos cometer todas as nossas mudanças e vamos chamar isso de uma câmera instável quando eu atirar. Comente esses. E lá vai você. Acredito que este será o último vídeo nesta seção do sistema de armas avançado. Adicionamos nossas armas mais tarde, vamos pegar um resumo. Veremos como vamos encontrar todas as nossas armas. Aprendemos a trocar as armas. Aprendemos a adicioná-los à interface do usuário. Adicionamos uma taxa de disparo, criamos um sistema de tiro incrível e espero que você esteja gostando. Espero que você tenha que revisar isso me ajudou muito e eu te vejo no próximo. 55. Seção 9: sistema de saúde — configurando o sistema de saúde de jogadores: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, na verdade, vamos adicionar um sistema de saúde ao player. Então agora, não só matamos os inimigos, mas também se formos atingidos demais com as espadas, morremos. Obviamente, há coisas nas quais teremos que corrigir a palestra, mas por enquanto, tudo o que estamos fazendo é configurar o sistema de saúde do nosso jogador, tornando nosso estar um pouco mais perto realidade e sentindo-se muito melhor adicionando um pouco de bife. Então, antes deste vídeo, sempre corremos e nos divertiríamos e matávamos todos e não preocupávamos com nada no mundo. Mas agora estamos morrendo. É como terminar a faculdade e começar um trabalho de verdade. Você vai para o mundo real. Há muitas coisas em jogo. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, atualmente, tudo está configurado corretamente. Podemos atirar, podemos levar um tiro, podemos fazer tudo. Ouvimos o inimigo, podemos matá-lo, mas quando o inimigo atira em nós, não dói tanto. Então, o que vamos fazer nesta seção, e especialmente neste vídeo, é criar um sistema de saúde. Então, vamos começar configurando tudo. Primeiro, vamos entrar nos scripts, entrar no jogador, entrar no jogador, e criaremos aqui um script C-sharp que será o controlador de saúde do jogador, ou deveria ter chamado Player manipulador de saúde porque não está realmente controlando a saúde do jogador. É manuseio. Sabe o quê? Vamos prosseguir e fazer com que seja a exclusão completa. Isso criará um manipulador de saúde de camada porque ele lida com eles e não é um problema tão grande, mas eu sempre gosto de manter as coisas que eles manipulam a saúde. Então, como isso lida com a saúde do jogador, não o controle de forma alguma. Então, vou adicioná-lo à camada de desgraça e vou aplicar todas as alterações. E vou abrir o manipulador de saúde do jogador. Então, o que precisamos aqui? Bem, obviamente, a primeira coisa que precisamos é um campo serializado que representará a saúde atual. E isso é apenas para fins de depuração. Obviamente, não queremos ser capazes de ver sempre a saúde atual. Em seguida, vamos criar uma segunda variável que é a saúde máxima. E então comece, vamos instanciar a saúde atual como a saúde máxima. Então, sempre que começarmos um jogo, sempre que nosso jogador papiro ou começar a jogar, teremos a saúde atual como a vida máxima. Agora, o próximo passo é criar um método que realmente lidará com o dano causado pelos inimigos. E isso fará parte do seu desafio. Portanto, seu desafio é criar um método para sofrer dano. Portanto, crie um método que danifique o jogador. Deve tomar um parâmetro, a quantidade de dano determinou qual tipo o parâmetro deve estar dentro do método. Remova a quantidade de dano da saúde atual e verifique se a saúde é menor ou igual a 0. Queremos deixar o jogador inativo. Então, pause o vídeo agora mesmo e faça o desafio. Bem-vindo de volta. Então eu acredito que esse foi um desafio muito fácil. Não acho que tenha sido muito difícil. Então, vou remover a atualização. 56. Tama com barra de saúde: Bem-vindo de volta meus colegas desenvolvedores de jogos para um novo vídeo no qual aprendemos tudo sobre controles deslizantes. Aprenderemos sobre o next mesh Pro e também criaremos nossa própria fonte. Quão emocionante é isso? Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, é hora de adicionar um pouco mais de sabor à forma como nossa saúde se deteriora pelos inimigos. Então, vamos começar. A primeira coisa que queremos fazer é tornar a cena um pouco maior. E vamos clicar duas vezes na enorme tela da interface do usuário que temos. Então podemos ver que temos o, o que acontece aqui, a imagem desvanecida que desligamos. E vamos mover as armas um pouco para a direita. E podemos ver aqui que essas imagens devem estar no 0, 0, no y e no x. Só para que as tenhamos no meio da interface do usuário e vamos movê-las para baixo. Isso é apenas um pouco de ajuste, e lá vai você. Então agora vou colocar a arma para a direita porque à esquerda vou adicionar algo chamado controle deslizante. Antes disso, vou criar um objeto de jogo aqui, que representará a saúde. Vamos apenas chamá-lo de saúde. Lá vamos nós. E sob a saúde, vou clicar com o botão direito do mouse, vá até o seu e crie algo chamado controle deslizante. Então, vamos adicionar o controle deslizante. Então, como você pode ver, criamos um pequeno controle deslizante. E o controle deslizante faz algumas coisas. Ele se move da esquerda para a direita. Tem um plano de fundo. Se eu abri-lo, ele tem um plano de fundo, ele tem uma área de preenchimento e tem o controle deslizante da alça. Se eu clicar no controle deslizante aqui, você pode ver que há um componente ou componentes do jogo no controle deslizante. E você pode ver que há algumas coisas. A cor normal, a cor realçada, todas essas coisas boas. Mas o que mais queremos focar, o valor mínimo, o valor máximo e o valor aqui. Você pode ver isso enquanto eu aumentá-lo em movimentos da esquerda para a direita, e isso é o que vamos usar para representar a ajuda que temos. Mas, obviamente, fazer com que o controle deslizante se mova esquerda para a direita é muito feio. Então você nunca quer ter sua saúde representada dessa maneira. Então, queremos ter algum tipo de bar para representar a saúde, assim como temos nos ganhos de aparência profissional. Então, vou fazer antes de tudo é excluir o controle deslizante do identificador. Então agora não temos mais esse pouco ou nenhum, o que é chamado de, algum tipo de, de qualquer forma, esse círculo que estava se movendo e agora só vemos o bar. A próxima coisa que eu quero fazer é eu quero acessar o plano de fundo. E o plano de fundo. Vou clicar aqui. Sabe o quê? Antes de fazer isso, vamos em frente e adicionar esses sprites, os elementos da interface do usuário que vamos usar. Então, nos sprites, isso abre esta pasta e vamos ver o que temos aqui. Vamos clicar com o botão direito do mouse em criar uma nova pasta para os elementos da IU. Clique duas vezes aqui e vamos entrar nos recursos. Como você pode ver, eu forneci algumas barras e você pode usar a cor que quiser. Você também tem os botões aqui que usaremos mais tarde e a fonte. Então, vou escolher a fonte, o controle deslizante vermelho e o fundo do controle deslizante. E vou arrastá-los para o elemento UI. Certo, ótimo. Agora vamos para o controle deslizante. Vamos chamá-lo de controle deslizante de saúde. E se clicarmos no plano de fundo, você pode ver que podemos alterar a imagem de origem. Então, a imagem de origem que eu quero ter esse controle deslizante. Então, quando eu adicioná-lo aqui, lá vai você. Você pode ver o controle deslizante agora mesmo , se eu configurá-lo para tamanho nativo, é meio enorme. Talvez o façamos um pouco menor. Mas o ponto é que agora temos esse controle deslizante de fundo. E eu quero ter certeza de que quando clico aqui e mantenho pressionado Alt, ele preenche toda a imagem do controle deslizante, não apenas em si mesma. Então, temos o elemento de controle deslizante de saúde. Se clicarmos nas ferramentas do rack, você poderá ver as bordas dela. E antes de termos isso, você pode ver que as bordas são as bordas. Lá vamos nós. Esses quatro pontos, eram as bordas do controle deslizante de saúde, mas o fundo era muito maior. Então, quando clicamos, mantenha pressionada a tecla Alt e clique no trecho, preenchemos todo o controle deslizante. Em seguida, temos a área Preenchimento. Agora, atualmente, quando queremos preencher a área, você verá que é uma linha branca muito feia. Então, o que faremos é acessar o preenchimento. E você pode ver que também podemos mudar esse brilho e eu vou usar o controle deslizante vermelho. Então agora podemos clicar aqui e você verá que é muito mais bonito, certo? Não é tão rápido porque também queremos ter certeza de que a área de preenchimento quando clicamos aqui, mantenha pressionada a tecla Alt, faça com que ela se estenda toda a área do campo. E então a área de preenchimento também deve se esticar e para todo o fundo. Mas porque estamos trabalhando em segundo plano. E queremos ver o plano de fundo. Quero dizer, vamos torná-lo menor e, portanto, ele se encaixa exatamente neste plano de fundo. Isso parece bom o suficiente. Então, vou movê-lo um pouco para cima. E tudo bem, então lá vamos nós. Podemos ver que podemos selecionar o controle deslizante de saúde e podemos começar de 0 e aumentá-lo até que ele se torne um. Agora, como vamos mudar a saúde com base em nossa própria saúde? Isso será um vídeo para mais tarde. Mas, por enquanto, como você pode ver, criamos tudo o que precisamos para o controle deslizante de saúde. Vou diminuir um pouco. E talvez, na verdade, eu vou fazer o controle deslizante um pouco maior. Então, vamos aumentar o tamanho. E como você pode ver, porque tudo está ancorado nesses pontos, eles crescem juntos sem problemas. Vamos torná-lo um pouco mais grosso. Obviamente, isso precisará de um pouco de mudança. E vou mover o elemento de saúde para baixo, depois diminuir o zoom, ver como isso parece. Então lá vamos nós, por aqui acho que é bom. Ou talvez mova-o um pouco ou não, vamos mantê-lo aqui embaixo. Para, aqui em baixo é bom. Vamos ampliar. Talvez faça isso um pouco mais longo. E a propósito, todas, todas as coisas que estou fazendo dependem de mim. Então, se você quiser criar algo diferente, por favor, seja meu convidado. Eu recomendo que você tente criar seu próprio tipo de controle deslizante. Vamos preenchê-lo apenas para que possamos ter as dimensões certas. E lá vamos nós, à esquerda, cima e para a esquerda. Certo, então lá vamos nós. Esta é a nossa saúde e parece muito legal, eu acho Então, se eu maximizar o jogo e jogar o jogo, vamos ver como isso parece. Certo, então lá vamos nós. Temos a saúde, temos o rifle. Há mais uma coisa que está faltando e isto é, queremos também representar a saúde usando texto. Primeiro de tudo, isso é o nosso jogo de zumbis, e acho que parece muito bom. Em segundo lugar, será uma boa maneira de saber o quanto estamos realmente mudando e aprender mais algumas coisas. Então, vamos em frente e adicione um texto aqui. Mas desta vez, porque vamos adicionar nossa própria fonte, vamos adicionar não apenas um texto, mas adicionaremos um texto Mesh Pro. Então, se eu clicar aqui, você pode ver que precisará importar alguns itens essenciais. Basta clicar no primeiro e esperar que ele seja importado. Se isso levar muito tempo, vou reaparecer magicamente. Certo, fiz isso. Lá vamos nós. Então agora temos algo chamado de texto Mesh Pro. E vou chamar isso de texto de saúde. Pressione Enter. E vamos movê-lo um pouco para a esquerda. Então, aqui, vamos torná-lo ousado. E você pode ver que atualmente a fonte usada nela é o senso de libertação ou algo assim. Mas queremos usar a fonte que eu forneci nos recursos, baixando-a do font.com. Meu Deus, de qualquer forma, como vamos converter isso em uma fonte? Bem, se formos a algum lugar aqui no texto do windows Mesh Pro, você pode ver que temos a opção para o ativo de fonte Creator. Clicando aqui, ele solicitará o arquivo de fonte de origem. Vamos arrastá-lo aqui. E isso apenas lhe dirá para criar um bom Atlas. Salvar. E ele perguntará onde você quer salvá-lo? Vamos salvá-lo dentro das fontes aqui. Ou no elemento UI. Salve isso. Ótimo. Então, agora, se entrarmos em elementos de interface do usuário, você pode ver que temos o local aqui. Tem um monte de propriedades que eu nem vou tentar entrar. Então, textos de saúde apenas arrastam a fonte para sua posição. E lá vai você, podemos ver que temos uma fonte diferente agora. Agora, eu recomendo porque, como já disse várias vezes, sou muito ruim em desenhar coisas. E eu tenho um gosto muito ruim quando se trata de cores e com ele se trata de texto e tudo o que está relacionado a fazer algo parecer bonito. Então, eu recomendo que você talvez tente encontrar um texto melhor do que este. Mas, por enquanto, vamos tentar criar o tipo de sistema de saúde e talvez torná-lo tamanho automático. tamanho automático significa que ele crescerá e diminuirá com o tamanho disso. Sim, lá vamos nós. Então, vou torná-lo maior, torná-lo ousado. E o legal de ter texto Mesh pro é que podemos mudar muitas coisas para que possamos adicionar iluminação, podemos adicionar underlay, podemos adicionar algum tipo de brilho e você pode brincar com isso. Também podemos adicionar um esboço. Então, se eu adicionar um pouco de espessura, você notará que temos o contorno, podemos mudar o deslocamento, o ladrilho, a velocidade , muitas, muitas coisas incríveis. E vou fazer um esboço branco só para que possamos ver tudo com mais clareza. Talvez. Lá vamos nós, cento e cem. Essa é a ajuda. Podemos mudar muitas coisas que a cor e assim por diante e assim por diante. E enquanto estivermos aqui, irei em frente e lhe darei um desafio. Portanto, seu desafio é configurar sua própria interface do usuário. Então faça uma pesquisa e encontre seus próprios elementos de interface do usuário para usar no seu jogo. Use esses elementos para configurar sua tela de interface do usuário para o player e pense outras coisas que você gostaria de exibir na tela. Por exemplo, você pode querer ter nossas operações. Você vai querer ter temporizadores de contagem regressiva para a espingarda. Você pode querer apenas a espingarda para a arma, o arrojado ou o que quer que seja. Não sei o que mais você pode querer. O que você quiser, pense nisso, tentou adicioná-lo. Você, mesmo que você não saiba como criar a coisa que gostaria de colocá-la lá e depois anotá-la. Talvez você encontre as pontuações à medida que avançamos. Ou talvez sozinho, você encontrará uma solução para isso. E há um desafio extra. Eu recomendarei que você vá em frente e converta o nome das armas que exibimos sob a espingarda. Mas eu tenho que avisá-lo de que será preciso um pouco de ajustes antes que você possa realmente conseguir mudar o nome das armas. Então isso é pausar o vídeo agora e vá para o desafio. Certo, bem-vindo de volta. Então esse vídeo já é um pouco longo demais, então não vou seguir em frente e mudar o nome dele agora. Mais tarde, obviamente, vamos mudá-lo. Vou seguir em frente e aplicar todas as alterações que fizemos na tela da interface do usuário. E agora, quando executamos o jogo, e agora podemos ver que podemos mudar para a pistola, correr por aí. Temos a saúde, temos a pistola e alguém fica preso em algum lugar. Oh, então nós morremos no, a luz exatamente neste ponto estranho aqui no inimigo. Então, há uma falha. Obviamente, vamos cuidar disso mais tarde. Então, espero que você goste. Espero que você esteja cometendo suas mudanças. E verei você no próximo vídeo, onde realmente acessaremos sprites da interface do usuário e atualizando-os. Então, vejo você. Ei Michael aqui do futuro, você pensou que tinha acabado comigo? Não. Você não estava. Então, há algo aqui quando vim para cometer minhas alterações, e essa é a malha de pilhas ácidas. E se eu entrar aqui, Onde posso encontrar isso nos ativos, você pode ver que criamos esse arquivo de malha de texto e essa malha de texto. Vamos ver as propriedades nele. Posso ver o tamanho? Não, não consigo ver o tamanho, então acho que não precisamos salvá-lo em nossos commits. Então, o que podemos fazer apenas para economizar um pouco de espaço, vou clicar com o botão direito do mouse aqui. E vamos ignorar tudo abaixo do texto de ativos Mesh PRO. Certo, lá vamos nós. Não precisamos disso. Prepare tudo e chame-o de elementos de interface do usuário adicionados ao Canvas para representar a saúde e criar minha própria loja. Então eu vou cometer essas mudanças e verei você na próxima. Prometo que vou embora agora. 57. Como atualizar a UI com scripts: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, não só temos esse bar sentado aqui bonito, quando formos atingidos, você verá que nossa saúde diminui. Então agora, quando somos atingidos em outra hora, lá vamos nós, você pode ver que morremos. Obviamente, há esse pequeno problema sobre o qual falaremos não abordado agora, mas falaremos sobre isso mais tarde. Então, sem mais nada ou faça um não vamos perder mais tempo e vamos começar. Ok, então agora temos um controle deslizante, temos o texto. Todos eles representam a saúde do jogador, mas ainda assim, quando sofremos danos, a saúde não diminui. Então, o que vamos fazer é mudar esse comportamento com base no uso do UI Manager. Então, vamos para o UI Manager e vamos obter uma referência ao controle deslizante de saúde e ao texto de integridade. Agora, eles serão públicos. E por que eles são públicos? Bem, porque vamos lidar com eles em um roteiro diferente, que é a saúde do jogador tratada. Então, vou criar um Slider público, e ele vai ser o controle deslizante de saúde. E lembre-se, não poderíamos ter usado esse controle deslizante se não tivéssemos o motor Unity Ow.ly. Então, como você pode ver, eu comentei isso e você pode ver que o controle deslizante agora ele não existe. Então esse é continuar um, temos agora uma referência ao controle deslizante de saúde? Em seguida, precisamos de uma referência ao texto da saúde vexada. E esses são muito básicos. Agora vamos salvar isso e lembrar que temos uma instância, uma instância estática no despertar. Então vou entrar no manipulador do jogador, manipulador saúde aqui e depois começar. Assim que eu disse, a integridade atual, vou acessar a instância de ponto do UI Manager, controle deslizante de integridade de ponto ponto o valor máximo. E vou defini-lo como a saúde máxima. E depois farei o mesmo com a interface do usuário. Onde está o UI Manager, a instância, o controle deslizante de integridade e o valor atual, que é representado pelo valor, serão a integridade atual. Lá vamos nós. Então agora, quando eu executar o jogo, se eu entrar no jogador da condenação e eu vou definir sua vida máxima para, digamos, Oh, ok, vamos apenas definir a corrente aberta porque já estamos configurando aqui. Vou apenas comentar isso pelo motivo de ter valores máximos e valores atuais diferentes. Então eu vou definir isso, digamos que às 20. Então, quando eu executar o jogo, devemos ver que esse Health Bot se moverá. E não aconteceu. Porque, obviamente, podemos ver aqui a referência do objeto não definida e saberei qual é o problema se eu clicar duas vezes aqui, não dissemos o controle deslizante de saúde na tela da interface do usuário. Então, de volta à tela da interface do usuário, obviamente precisamos definir isso aqui. Então, saúde e controle deslizante, vou arrastar o controle deslizante e a saúde flexionada. Lá vamos nós. Não, não o texto. Oh, ok, então isso é algo sobre o qual precisamos falar. Então, os fatos de saúde aqui não são apenas qualquer texto, é um texto Mesh Pro, então não podemos usar, onde está? Onde está o UI Manager? Lá vamos nós. Então, vou movê-lo para que não possamos usar o texto. Precisamos ter um texto Mesh Pro, mas você pode ver que não temos a malha de texto. Por quê? Porque antes de podermos usar o texto Mesh Pro, precisamos ter o namespace apropriado. Então, usando, vamos ver, acredito que seja a malha txt ponto do mecanismo Unity. Então, usando o TMP, lá vamos nós, malha hexagonal Pro. E agora aqui podemos usar o texto, malha de texto por linha. E lá vamos nós. Nós salvamos isso. Agora de volta ao nosso jogo. E unidade, quero dizer, podemos ir em frente e arrastar a saúde. Quero dizer, na tela da interface do usuário, podemos arrastar a saúde para baixo. Qual é o problema? Acredito que, em vez de texto Mesh Pro, isso também deve ser texto Mesh pro GUI. Vamos tentar isso novamente. Salve isso agora de volta em nosso jogo. E hoje, agora, vou deixar isso. Agora, lá vamos nós. Finalmente, podemos adicionar, então salvamos isso. Nós executamos o jogo e devemos ver que a saúde, sim, lá vamos nós. Então, definimos a integridade atual para 20, V-max Health para 100. Então você pode ver que é cerca de 1 quinto do caminho. Então, sabemos que isso está funcionando. O próximo passo é fazer com que isso seja atualizado toda vez que tivermos um sucesso ou começamos o jogo. Então, vou, e seu desafio é atualizar a interface do usuário de saúde. Então, antes de tudo, crie um método que atualize a IU de integridade. Então, estamos falando sobre o livro, tanto o controle deslizante quanto o Próximo, então você precisará usá-lo nos locais apropriados. Então, você precisará pensar em onde posso usar a atualização da interface do usuário? Certifique-se de que você também acessa o texto e o, e atualize-o. E, finalmente, vou dar uma dica de onde você pode usar essa interface de usuário de atualização. Você pode usá-lo no início e quando o jogador for atingido. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá para a Sharon. Oh, ok, bem-vindo de volta. Então, vou entrar no manipulador de saúde do jogador. E aqui vou criar um vazio privado, atualizar a integridade da camada. E aqui o que vamos fazer é antes de tudo, vamos acessar o ponto da instância de ponto do UI Manager texto de integridade, texto de ponto. E vamos defini-lo para a saúde atual. Então vamos concatená-lo. Então eu sei que você ainda não fez isso, mas desta forma estamos concatenando. Então, antes de tudo, pegamos a saúde atual, adicionamos esse traço aqui ou não aquela barra para frente, é chamado, eu acredito. E vamos definir o máximo de saúde e aqui também. Então, vamos salvar isso. Mas não só isso, também vamos alterar o valor do controle deslizante. Então, aqui também vou acessar o valor do ponto do controle deslizante de integridade do ponto da instância do UI Manager. E vai ser igual à corrente. Opa, desculpe por isso. A corrente. Então, a saúde atual, sim, foi isso. Salve isso. Então agora a questão é onde realmente usamos isso? Então, há dois lugares. Primeiro de tudo, podemos usá-lo no início e então nós meio que já o usamos e o começo porque dissemos a saúde atual, mas vamos remover essa linha e vamos simplesmente chame a saúde do Atualizar Jogador. E então toda vez que sofremos danos aqui, depois de removermos a quantidade de dano, vamos definir isso, mas acredito que é muito melhor vendê-lo depois de verificarmos a saúde de 0, talvez não. A única coisa aqui que estou preocupado é ter a Saúde negativa e ver o bar indo para o outro lado. Essa é a única coisa que me incomoda sobre isso. Então, vou seguir em frente e talvez colocá-lo aqui. Então, depois de verificarmos se somos menos de 0, isso também pode não parecer muito bonito. Quando morremos, ainda temos um pouco de saúde. Vamos ver, sabe o quê? Vamos colocá-lo aqui. Não se preocupe com isso. Mais tarde, faremos esse pequeno ajuste, ele muda onde desativamos também a barra sempre que desativarmos o jogador. Então, com isso feito, salve tudo isso de volta em nosso jogo. E vou deixar c entrar aqui. Vamos remover esse comentário, salve isso porque, na verdade, agora temos saúde adequada. Vou entrar no jogador da cúpula e vamos ver. Vamos remover a saúde atual. Isso é apenas para acompanhar, vamos nos certificar de que é privado mais tarde. E o que eu queria fazer? Porque a arma que o inimigo está jogando em nós causa e 50 de dano, acredito. Então, vamos fazer isso 300. Portanto, a vida máxima do jogador é 300. Eu executo o jogo. E devemos ver que o máximo de saúde, você pode ver que temos 300 de 300. Então, vou chegar perto do inimigo. Ele diz: Lá vamos nós. Você pode ver que a saúde está diminuindo lentamente. E, finalmente, o último, morremos. Mas você notará que há um pequeno erro que apareceu e ele está vindo muito para nós. Então, vou parar o jogo. Vou então agora temos que consultar quando aqueles que não queremos tão perto um deles e você pode ver que há um problema. E qual é o problema? Primeiro de tudo, temos o controlador de bala inimigo não consegue encontrar o jogador. Em segundo lugar, nós temos, eu acredito. Certo, então não, não é o problema aqui. Bem, o problema é que ainda estamos tentando obter uma referência do jogador mesmo que ele esteja morto. Então, estamos tentando alterar o slide de saúde. Mas, de qualquer forma, esses são pequenos ajustes que obviamente vamos cuidar mais tarde. Mas, por enquanto, espero que você goste. Espero que agora entenda e sinta como nosso jogo é bom. Então, tudo é feito dinamicamente. Tudo muda automaticamente usando o código e nosso jogo está realmente tomando forma. Então, espero que você goste e te vejo no próximo vídeo. Não se esqueça de, é claro, confirmar suas alterações. 58. Como criar uma tela de morte: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. E este vídeo, como você pode ver, a tela da interface do usuário tem um elemento extra, que é a tela de morte. Então, agora, quando executamos o jogo, podemos ver que temos uma saúde. Então nós levamos um tiro uma vez, fomos baleados duas vezes, e lá vai você. Você pode ver que morrerá como em Dark Souls. E temos esse efeito aparecendo. Quão legal é isso? E não só isso, você notará que não temos mais tipos instanciados pelo inimigo depois que o jogador morre, que é um mecânico muito legal que adicionamos no último segundo porque eu me lembro disso. Então, não vamos perder mais tempo e vamos criar a tela. Oh, ok, então é hora de tornar a morte do nosso jogador um pouco mais emocionante. E eu mudei os pixels por unidade para 15 dos blocos. Então agora não temos essas linhas azuis irritantes. Então, vou seguir em frente na tela da interface do usuário e vou criar uma nova imagem. E essa imagem será a tela da morte. Lá vamos nós. E vamos apenas tornar a cena um pouco maior e vamos encaixá-la em toda a tela. E assim como sempre fazemos, vamos seguir em frente e torná-lo completamente preto. E então o que vou fazer é que eu quero pegá-los , então ainda não usamos esses trills de blocos. Então, vou pegar o 123 e o último, selecionar todos eles. E vou arrastá-lo para quatro. Fazemos isso, isso está nos sprites. Crie uma pasta para a tela de morte no sangue. Que bom curso, um projeto muito adorável sobre surdos de sangue e outras coisas. Então, vamos ver como isso parece. E agora, antes de fazermos isso, na verdade acredito que precisamos criar um, algum tipo de imagem aqui. Então lá vamos nós, a imagem e eu vou mudar isso aqui, e vou defini-la para o tamanho nativo. Então, é meio grande. Vou apenas fazer com que esta configuração doasse o tamanho e talvez apenas aumente o tamanho dela. Então, lá vamos por aí. Vou manter a preservação da proporção. Então agora podemos torná-lo um pouco maior. Então lá vamos nós. Então, isso vai se espalhar sobre nossa tela. Vou criar uma animação aqui. Então vou para as animações, criação e ativos, animações, tela de morte, tela, sangue. E vamos ver, espirrar, muito na tela. Salve isso. E vou adicionar todas essas imagens aqui. E vamos ver como isso parece. Vamos fazer primeiro, vamos fazer isso em torno de 1 segundo. Veja como isso parece. Certo, isso parece bom o suficiente para mim. Salve isso. Vamos chamar isso de sangue. E vamos alterar todas as imagens e fazer com que elas não sejam aplicadas filtros pontuais. Portanto, as imagens devem estar mais nítidas agora. E vamos assistir isso de novo. Não muito afiado. Eu preferiria torná-lo um pouco mais afiado que talvez possamos mudar a aplicação de um para 50. Agora eles não deveriam se tornar muito maiores. A extrusão com largura. Ok, então vamos ver qual é o problema aqui. Claro que, ok, então agora temos o sangue espirrando tudo logo que começamos. E o que vou fazer é adicionar também uma tela e aqui. Então, qual é o grupo do campus chamado grupos Canvas ou agora podemos ajustar o Alpha e podemos bloquear o re-cast. Isso não é uma má ideia. Não vamos torná-lo interactável. E agora eu também quero ir em frente e talvez mover o sangue um pouco para baixo, talvez girá-lo um pouco. Então agora lá vamos nós. Este é o sangue que aparecerá. E, honestamente, sinto que isso não é realmente bom porque é meio granulado porque nós o tornamos maior. Acho que podemos removê-lo mais tarde, mas por enquanto vamos adicionar um problema de malha de texto aqui. Sonda de malha de texto e você morre ou maiúscula. E torná-lo ousado. Vamos ver como isso parece. Vamos torná-lo um pouco maior e tamanho automático. E vamos colocá-lo no meio. E podemos ver que o tamanho máximo aqui, podemos torná-lo ainda maior. Então lá vamos nós, você morreu. Vamos escolher uma fonte diferente, que é a sobre o robô. Vamos mudar a cor dela para torná-lo vermelho. Vamos movê-lo para cima. Vamos ver como isso parece. Não parece muito bom por causa do esboço que temos. Então, vamos mudar o esboço para ser talvez também lido ou talvez apenas remova o contorno completamente. Então lá vamos nós sem nenhum esboço. Certo, isso parece bom. Então você morreu. Ok, então se você já jogou Dark Souls, você sabe a referência e o, Vamos continuar. Então eu acho que isso é grande o suficiente. Então, agora, quando o Senhor está, lá vamos nós. Podemos ver que pegamos o sangue e temos o que você morreu na tela. Então isso nos diz que o jogador acabou de mergulhar. De qualquer forma, vamos continuar agora precisamos realmente ativar e desativar isso. Então, o que vamos fazer é sempre manter a tela da morte desligada. Então, enquanto o jogador estiver vivo, essa tela está desligada e quando ele morre, então ligamos a tela. Então, vamos para o UI Manager. E, obviamente, estaremos mudando o alfa aqui também. Não queremos que ele apareça. Vamos torná-lo lento aparecerá. E para isso, também vamos criar uma animação aqui e filtrar sangue. Vamos chamar isso de tela. Aparece. Salve isso. E vamos mudar isso para levar cerca de 0,3 segundos e colocá-lo em um. Então, isso é uma espécie de, você precisa ativá-lo. E então isso é o que acontece. Então, ligamos a tela, ela começa a ser reproduzida. E lá vamos nós. E vou apenas mover a animação de sangue para quando a tela da morte estiver completamente escura. Então começamos a animação, não há nada e, em seguida, o bloco deve aparecer mais tarde. E, na verdade, podemos ir em frente e selecionar isso aqui e apenas ter um sprite vazio. Então, começamos vazios. Vamos ver como isso parece. E vou ligar isso completamente. Então lá vamos nós. Não. O sangue corre isso. Lá vamos nós. E então temos o sangue aparecendo. Certo, excelente. Acho que isso vai ficar muito bom. Então, salve tudo isso de volta na tela da mesa, configure-o para 0, desligue a tela, salve tudo isso. E agora vamos entrar em nossos roteiros. E no UI Manager, vou seguir em frente e obter uma referência a essa tela. Então, campo serializado, é um objeto de jogo e será a tela da morte. E agora vamos seguir em frente e criar um método que nos permitirá ativá-lo. Então, vai ser um desafio. E seu desafio é ativar a tela de profundidade. Bem, quando morremos. Então, você precisará criar um método que defina a tela de morte como ativa. E então você precisará chamar os métodos, método quando o jogador morrer. Então, para criar esse método e gerenciar e, em seguida, chamá-lo da saúde do jogador tratada com isso dito, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, aqui no UI Manager, vou criar um vazio público. Ative a tela de morte. E tudo o que ele fará é apenas pegar a tela da morte e definir ativo como verdadeiro. E isso é tudo. E depois vamos voltar e fazer o manipulador do jogador e terminar aqui depois de desativarmos o objeto do jogo do jogador, vamos acessar o UI Manager. Ou antes de fazermos isso aqui, a Instância do UI Manager, surda, ativa a tela de morte. E lá vamos nós. Então, agora vamos começar nosso jogo. Vamos ao jogo, torná-lo maior. Vamos para o jogador DOM vai definir sua saúde para 100. Execute o jogo. Então agora, quando somos atingidos uma vez, lá vamos nós, nada aconteceu, obviamente porque toda vez eu tenho que esquecer, você sabe, onde isso está indo. Esquecemos de adicionar uma referência. Excelente. Agora salvamos, agora corremos. Agora devemos ter tudo funcionando. Lá vamos nós. Nós somos baleados uma, duas vezes, você morreu. E, obviamente, também esquecemos a coisa que sempre esquecemos. Então, animações, onde está? O sangue? O sangue ou a morte? A morte. Certo, remova a animação. Remova a animação. Salve isso do jogo pela terceira vez, por favor. Não há mais erros. E agora somos baleados uma, duas vezes, morremos. Bom. Quão legal é isso? Mas, obviamente, há o único problema que ainda prevalece e que é o disco voador. Então o que vamos fazer é garantir que o inimigo só possa classificar ou deve qualquer projétil que ele tenha. Somente quando estamos visíveis ou quando estamos no jogo. Então vou entrar no controlador NMI e aqui, e vou rolar para baixo e descobrir onde estamos instanciando a bala ou o projétil. Então lá vamos nós aqui. E o fogo inimigo e o Colton aqui estamos instanciando isso. Então, o que vou fazer é criar uma condição aqui que verifica se o jogador a perseguir ponto é um objeto de jogo de ponto para fora. Portanto, este é o alcance da perseguição do jogador. Então, o jogador para perseguir o ponto está bem. Portanto, o ponto do objeto do jogo é, ponto está ativo ou ativo e hierarquia. Então vamos atirar. Se não, então não estamos. Portanto, essa hierarquia ativa e define se o objeto do jogo está ativo na cena. Então, o que estamos fazendo é desligar o jogador quando morremos. Isso significa que ele não está mais ativo. E a hierarquia, isso significa que não instanciamos mais o projétil do inimigo e não devemos ter nenhum erro. Então, vamos tentar isso mais uma vez. Execute o jogo. E vamos ver, ficamos afiados uma, duas vezes. Certo, você morreu. Lá vamos nós. Podemos ver que não temos mais erros e os inimigos não instanciam nada. E se eu aumentar o zoom para onde ele está? A desgraça, bem aqui, ok, então não podemos ver nada, mas você pode ver que não estamos mais instanciando nada. Vamos executar isso de novo porque eu acreditava que vi algo aqui quando fomos baleados. Oh, ok. Certo. Não, está tudo bem. Então lá vamos nós. Temos nossa tela de morte. Não temos mais os projéteis e instanciamos sempre que nosso jogador morre, vamos nos certificar de que aplicamos as alterações. Nós nos certificamos de que cometemos nossas mudanças, e nos certificamos de que deixamos um comentário para Michael porque isso o ajuda muito. No próximo vídeo, estamos, é claro, se você estiver curtindo o vídeo, obviamente, de qualquer forma, no próximo vídeo, vamos criar a mecânica de tornar o jogador um pouco invencível sempre que ele chegar isso por apenas um tempo temporário. Dito isso, espero que você goste e te vejo no próximo. 59. Adição de Invincibility temporária: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vamos nos tornar invencíveis. Então, agora, quando somos baleados uma vez, pela segunda vez, somos invencíveis e você percebe que fizemos um pequeno flash, o que é muito legal. Agora também vamos nos tornar invencíveis quando fizermos o torpedo. Então ninguém pode nos machucar enquanto estamos fazendo nosso torpedo. Obviamente, não chegamos lá, mas não vamos nos preocupar com isso. Vamos antes de tudo criar nossa mecânica de invencibilidade. Então, vamos começar. O k. Então agora, sempre que somos baleados, se estivermos, por exemplo, presos entre os três esqueletos aqui, pode ser apenas um pouco injusto para o jogador jogando nosso jogo que ele morre imediatamente e nem percebe o que aconteceu. E outra coisa, uma coisa muito legal que eu gostaria adicionar como mecânica de jogo ao nosso jogo é que sempre que estamos arrojados, temos nosso jogador apenas um pouco invencível para alguns segundos, talvez até milissegundos. Então, para isso, vamos implementar essa mecânica de fazer com nosso jogador seja invencível por pelo menos alguns segundos. Então, vamos entrar em nosso manipulador de saúde do jogador. E aqui vou criar duas variáveis. O primeiro será um campo serializado e vai ser um flutuador, e será o tempo de sensibilidade. Então, quanto tempo o jogador permanece invencível? Ele será adicionado como um padrão de 1 segundo. E então eu vou criar um bool privado e chamá-lo de invencível. Então, quando o jogador é invencível, há algumas coisas que vão acontecer e algumas coisas que não acontecerão. E uma das coisas que não acontecerá é que o jogador não sofrerá dano. Então, aqui, vamos verificar antes de começarmos a danificar o jogador. Se o jogador for invencível, então vamos realmente saber o que eu queria fazer é curvar. Então, aqui, deixe-me remover este. E, e um convite para eles. O que eu queria dizer se o jogador não for invencível, então não é invisível significa que vamos adicionar um ponto de exclamação por trás disso, e isso mudará a coisa toda. Então, se ele não é invencível, é invencível é verdade, que significa que toda a condição é falsa por causa do ponto de exclamação, isso significa que não acessamos isso. Isso significa que sempre que somos invencíveis, é invencível é verdade. Não nos machucamos. Tão excelente. Vamos continuar. A próxima coisa que queremos fazer é ter certeza de que deixamos de ser invencíveis após um certo período de tempo. Então, para isso, teremos que criar um revestimento. Então, vou emitir isso para você como um desafio. Então volte o jogador usando um revestimento. Você precisará criar uma coisa central que volte o jogador de sua invencibilidade, deve usar a variável de tempo de invencibilidade e você precisa chamar o revestimento no local apropriado. Então, com essa informação do vídeo agora, e vá para o desafio. Certo, bem-vindo de volta. Como você se deu bem com isso? Sabe, o que eu amo sobre os desafios é que isso te mantém responsável. Então, se neste momento você ainda não soubesse como funciona um tribunal depois de todos os desafios, você terá que aprender em algum momento porque continuarei pedindo que você faça algo até que ele esteja arraigado em você. Então, vamos ter calma e vamos seguir em frente e criar um enumerador de olhos aqui. Então eu acredito que é muito fácil agora. Então, o jogador é invencível. Ou volte para o que devemos chamar essa camada? Vamos apenas chamá-lo de invencível. Eles, eles não são invencíveis. Certo, vamos chamá-lo assim. E aqui vamos produzir um novo peso de retorno por segundo. Quero dizer, a este ponto, deveria ser como apenas espirrar ou respirar. Portanto, rendemos retorno nova espera quatro segundos, o tempo de invencibilidade. E depois que o tempo de invencibilidade é invencível voltará ao falso. E também quero ter certeza de que assim que começarmos o é invencível está definido como falso. Para que não sejamos invencíveis assim que começamos com isso feito, acredito que é tudo o que precisamos fazer. Então, vou salvar isso. Vou voltar ao nosso jogo. E vamos executar o jogo. E vamos ver o que acontece. Então, quando eu, ok, então primeiro, precisamos adicionar talvez mais alguns segundos. Então, tempo de desgraça e sensibilidade, vamos fazer dois, e vamos executá-lo novamente. Então esse será o momento. Então, somos atingidos uma vez. Lá vamos nós. Agora conseguimos duas vezes, ainda morremos. Por que isso? Vamos ver qual é o problema. Vamos tornar isso público para que possamos ver claramente se estamos realmente mudando o que está acontecendo. Tudo o que não começamos o frio aqui. Então, vou me certificar de que sim. Aqui, Onde devemos chamá-lo de 0? Então também o que eu quero fazer é sempre que somos atingidos, também precisamos mudar o que é invencível para verdadeiro. Então, há muitos passos que eu esqueci de fazer. E depois de conseguirmos, vou começar a co-rotina. E a corrotina será a camada, não invencível. Então, há muitas coisas. Então deixe-me dizer o que eu esqueci de fazer. E aqui, assim que formos atingidos, queremos definir o invencível como verdadeiro. E uma vez que formos invencíveis, vamos começar a corrotina. E porque o é invencível é verdade, não ficamos mais danificados. Então essa linha foi crucial. E eu nem sei como eu poderia ter esquecido algo tão importante, essa é toda a essência de tornar nosso jogador invencível. Então, espero que você entenda o que está acontecendo. Espero que você não esteja muito bravo os erros que às vezes cometi. E vamos seguir em frente e executar o jogo. Então lá vamos nós, somos atingidos uma vez, recebemos duas vezes. Lá vai você. Você pode ver que o segundo quadril não nos matou. Por quê? Porque tivemos o tempo de invencibilidade. Então podemos ver aqui que estava ligado. Vamos testar isso novamente porque eu sinto que talvez devêssemos ter tomado mais um golpe. Então lá vamos nós é invencível e morremos. Ainda sinto que há algo não errado e estou certo. Então 50. Então, vamos nos certificar de que está funcionando. Vamos defini-lo para talvez cinco segundos e ver se isso dura mais tempo. Porque posso ver aqui que isso não está mudando 1234, ok, então eu sei que acho que tudo está funcionando, mas por algum motivo não estamos vendo essa mudança aqui. Mas não se preocupe com isso. Sabemos que está funcionando porque quando aumentamos o tamanho do tempo, somos invencíveis. Podemos ficar no rosto do tipo um pouco mais. Certo, ótimo. Agora, isso está tudo bem e elegante. Mas aqui está o problema. Não temos ideia de que somos invencíveis por um certo período de tempo. Então, o que vamos fazer é tentar visualizar isso. Então faça isso. O que eu acho que vou fazer é acessar o corpo aqui. Você pode ver que temos as cores e quando formos atingidos, vou fazer o jogador piscar. Então eu vou fazê-lo piscar uma, duas, três vezes, ou continuar piscando até que o tempo que temos acabe. Então, vamos seguir em frente e fazer isso. Então, vou entrar aqui e vou obter uma referência ao sprite do jogador. Campo tão serializado. E vai ser o renderizador sprite. E vai ser o sprite do jogador. Lá vamos nós. E aqui vamos criar um numerador. E vai ser o pisca. E aqui o que faremos é que vamos, primeiro determinar quantos flashes queremos ter. E então criaremos um loop for. Espere por isso. Sabe do que estou falando? Vai ter o int igual a 0, enquanto eu é menor do que quantos flashes queremos? Digamos que cinco flashes. E eu mais, mais. Certo. Então fique comigo. Vou deixá-lo corretamente. Em primeiro lugar, vou adicionar um pouco de espaçamento aqui e depois vou acessar a cor do ponto sprite do jogador será igual a uma nova cor. Abra os colchetes ou o que eles são chamados. E então eu vou escrever aqui, vamos manter a mesma coisa. Vamos manter o, deixe-me duplicar esta linha duas vezes. Vamos manter o a. Então temos o ordinal. Começamos por vermelho, vermelho, verde e azul. E, finalmente, teremos o último que não deve levar uma vírgula. Podemos ver aqui que não temos uma vírgula e vai ser a, a. Mas no nosso caso, em primeiro lugar, queremos reduzir o a. Então vamos defini-lo para talvez 0,1. Depois disso, vamos dar retorno novo. E vamos esperar quatro segundos. E isso é o quão rápido vamos piscar. Então, vou defini-lo para o seu 0.1. Quando não temos um 0 ou apenas um ponto, isso significa que temos 0,1. É uma maneira um pouco mais rápida de fazer as coisas. E então vamos voltar e copiar esta linha e colocá-la aqui. E em vez de 0,1, nós íamos ter o único. E deixe-me adicionar uma guia aqui para fins de implementação. Então, apenas entenda tudo. E então vamos voltar a produzir retorno de peso para 1. Segundo. Salve isso. E agora temos que começar a corrotina em algum lugar. Quando formos atingidos logo após definirmos a invencibilidade como verdadeira, vamos começar a co-rotina, que será V pisca com os parênteses também, estes são chamados de parênteses, acabei de me lembrar. Talvez eles vão carpool e parênteses e maneiras como salvamos o que está acontecendo aqui. Então, antes de tudo, temos o loop. Já sabemos como o loop funciona. Começamos em 0. Fazemos isso quatro vezes, cinco vezes na verdade é 4, 0, 1, 2, 3 e 4. Então, 5 vezes, aumentamos em um cada vez e vamos percorrer. Então, o que estamos fazendo aqui? Estamos mudando a cor. Mantemos tudo vermelho, verde e azul iguais, exceto o alfa. E aqui estamos fazendo o mesmo. Então, o primeiro que estamos reduzindo para alfa para 0,1. E o segundo, estamos fazendo o Alpha 1. E o que estamos fazendo aqui? Bem, já sabemos como o retorno de rendimento que você espera quatro segundos funciona. Primeiro de tudo, temos o alfa em 0,1. Esperamos por 0,1 segundos. Então, voltamos para um. Esperamos 0,1 segundos e, novamente, iniciamos o loop e continuamos fazendo isso. Então vamos, ok, e continuamos fazendo isso e isso criará um efeito piscante, não acredite em mim, isso é isso. Então, vou voltar aqui. Vou executar o jogo e vamos ver o que acontece. Então, vou me aproximar do inimigo. Ele atira em mim e nada acontece porque, obviamente, toda vez que temos que cometer o mesmo erro que precisamos adicionar o sprite do jogador. Então arrastamos o corpo, salvamos tudo isso. Vamos aplicar as alterações e vamos executar. E agora devemos ver que nós, lá vamos nós. Você pode ver que começamos a piscar. Quando paramos de piscar, isso significa que não somos mais invencíveis. Agora, a única coisa aqui, o único truque, coisa complicada aqui é que queremos ter certeza de que o tempo de invencibilidade e o rubor coincidem para não começarmos a piscar e, por algum motivo pare de piscar, mas ainda somos invencíveis ou, ao contrário, continuamos piscando, mas não somos mais invencíveis, então morremos. Não temos certeza do que está acontecendo. Então, haverá um problema de tempo que você precisará ajustar e garantir que ele funcione. Mas com isso dito, vou lhe emitir um desafio extra. Quão legal é isso? Tenho 100% de certeza que você não viu isso chegando porque eu quero tornar o jogador invencível quando ele faz o torpedo ou o traço ou o que quer que você chama. Então essa informação, pause o vídeo agora mesmo e torne o player também invencível quando ele faz o torpedo. Oh, ok, bem-vindo de volta. Então, o que vamos fazer aqui? Obviamente, temos o pisca aqui, mas queremos ter certeza de que o chamamos de outro método, que é o controlador do jogador. Quando estamos, Onde está, Onde está a arma de troca? O jogador arrojado. Então lá vamos aqui, queremos ter certeza de que chamamos isso sempre que estivermos arrojados, como vamos fazer isso? Bem, é muito fácil. Precisamos iniciar uma co-rotina. Então, vamos olhar para trás aqui. Temos uma corrotina? Vamos seguir em frente e obter o componente, a saúde do jogador. Enquanto ele manipulador de camadas. Lá vamos nós. E aqui vamos, antes de obter o componente, iniciar uma corrotina. E eu acho que porque este é qual é o nome? E apenas verifique Não, na verdade, desculpe por isso. Corrotina de início de pontos. E aqui vamos acessar o pisca. Podemos saber que precisamos torná-lo público no enumerador. Então pisca, não está me permitindo. Ok, então eu acho que temos que fazer isso assim. Então comece a corrotina. E lá vamos nós. Salve isso. Então, como você pode ver, mesmo eu não tinha certeza de como isso vai funcionar, mas aparentemente precisamos iniciar a corrotina. Acessamos o componente, obtemos o manipulador de saúde do jogador e o manipulador de jogadores da NBA. Nós pegamos o pisca. Então, salve isso. Vamos testar isso. De volta ao nosso jogo. Nós executamos o jogo. E agora, quando fazemos o traço, lá vamos nós. Você pode ver que estamos piscando. Quão legal é um phi dash? Devemos ver que eu não entendo, ok, então isso não funcionou. Não vamos nos preocupar com isso. Vai ser difícil, talvez, cronometrar o tempo em que somos invisíveis com o arrojado, com os atiradores inimigos. Não se preocupe com isso porque no próximo vídeo vamos criar algumas armadilhas de picos. E essa é uma ótima maneira de testar nossa invencibilidade quando estamos arrojados. Então, se passarmos pelos sprites morrerão. Se andarmos pelos sprites Enquanto arrojados, não morreremos porque seremos invencíveis. Então, isso é dito. Há também mais uma coisa que, embora estejamos piscando aqui no controlador do jogador, não somos invencíveis. E tornar o jogador invencível era o desafio, e acabei de perceber isso antes de desligarmos tudo. Então, para evitar a confusão, o que vou fazer é voltar e onde estamos, o manipulador de saúde do jogador. Vou criar um método que não seja um vazio público. Faça camada sensível o que não era invisível, ok, faça seu símbolo de inventar. E aqui vou, antes de mais nada, ativar a invencibilidade. Assim é como e invencível será igual a verdadeiro. Então vamos iniciar a corrotina do flash. E, finalmente, também vamos iniciar o revestimento. Por favor, deixe-me começar a cortejar o make para o que foi chamado? Jogador não invencível. Jogador não invencível. Então agora temos um método que faz tudo, um método para governar todos eles. Então, podemos remover este daqui. Podemos remover o pisca e o verdadeiro. E podemos fazer uma coisa e isso é chamado make player invencível, salvar isso e depois terminar o controlador do jogador. Não precisamos chamar o pisca manualmente. Podemos apenas dizer Get Component, Layer health handler, dot, make, player invencível. Lá vamos nós. Então, vamos testar isso novamente. De volta ao nosso jogo, execute o jogo. Devemos nós. Não podemos fechar uma vez. Fomos baleados duas vezes e morremos. Qual é o problema? Fizemos isso apenas 1 segundo? Vamos passar pelo R3. Três segundos, execute o jogo. Mais uma vez. Nós somos baleados uma, duas, três vezes. Certo, então isso está funcionando. E então, quando fazemos o traço, lá vamos nós. Estamos arrojados. Ok, não testamos corretamente. No próximo vídeo, vamos nos certificar disso. Sinto muito pela duração do vídeo. Mais uma vez, isso é algo bom. Acredito que aprendemos a iniciar uma corrotina a partir de um roteiro diferente. E também aprendemos a criar um método e compactar tudo em um único lugar. Acho que é bom, um bom hábito para eles. Então, muito obrigado por assistir. Espero que você esteja gostando, espero que esteja cometendo suas mudanças. E verei você no próximo vídeo em que estaremos criando picos. Também tivemos um desafio extra, o que é muito bom. 60. Como adicionar picos no chão: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Como você pode ver, criamos alguns picos aqui. Então, agora, quando temos essas motos, se eu ficar sobre elas, lá vamos nós. Eu fico danificado. E se eu ficar de pé e voltar, não fico danificado. E se eu ficar de pé, fico danificado. Mas agora, porque ainda sou invencível, fico danificado novamente. Se eu continuar aqui, então eu poderia morrer, vou embora um pouco e não vamos perder mais tempo. E vamos começar. Oh, ok, então vamos começar a criar um pico. E eu já criei os picos e tudo mais. Agora, isso é algo que eu não gosto de fazer. Eu não gosto de fazer as coisas fora da tela e depois dizer, mas como eu queria ter certeza de que este vídeo é o mais eficiente possível, é um longo e algumas coisas precisarão ser explicadas. Então, por esse motivo, criei todas as animações e assim por diante. Vou te dar um passeio rápido. Então, o que eu fiz, escolhi uma dessas três armadilhas aqui. Voltei ao jogo. Selecionei os sprites, tenho certeza de que são 32 múltiplos, certifiquei-me de editar o sprite e cortei 32 por 32, fiz o filtro e assim por diante. Então fui em frente e criei essa armadilha de espigões, que tem um renderizador sprite. Um animador chegará a isso e um colisor de caixa que está ao redor dele, o que também é um gatilho porque queremos que o jogador passe por cima dele. Certo? Agora também criei uma animação para o pico. Um está ocioso, um está estourando, então o ocioso fica lá, não faz nada. Essa será a animação padrão. E então temos os picos estourando, que está aqui. Você verá que eu criei um para estourar este particular. Então lá vai você. Você pode ver, e por que eu deixaria um pouco lento? Eu só queria dar uma chance ao jogador pensar duas vezes antes de pisar lá novamente. Portanto, não tem nada a ver com o jogador quer que o jogador pare e ele começa a ser acionado. E então ele tem alguns quadros. Pode mover isso aqui. Ele tem alguns quadros para perceber seu erro e depois tentar fugir dele. Com isso fora do caminho, vamos falar sobre o animador e o que fizemos aqui. Então eu criei o ival, fiz dele o estado de camada padrão e criei as duas transições, uma indo 21, indo de. Também criei um parâmetro aqui que é um booleano para os picos de BOP. E uma vez que os picos pop são verdadeiros, então vamos de ocioso a picos Pops. Não temos nenhuma duração de transição, não temos nenhum tempo de saída. Mas quando estamos voltando do bopping, temos um tempo de saída que é cerca de 90% da animação. Podemos até aumentá-lo para um talvez até terminarmos a animação inteira e depois voltarmos. Eu prefiro fazer isso 0,57. Mas, por algum motivo, quando eu defini para isso, a animação aqui desaparece. Estou realmente confuso por que isso está acontecendo. Eu não gosto disso. Então 92 talvez em 1906. 1907 só faz tudo desaparecer, o que é extremamente irritante. E não faço ideia por que isso está acontecendo. Mas, de qualquer forma, temos um tempo de saída que é 96% da animação. Então voltamos. Bem, isso fora do caminho, se você fizer um, pause o vídeo agora mesmo, vá fazer tudo por isso. Crie todas as animações e assim por diante. Como vou seguir em frente e começar nos scripts criando um, vamos chamar essa pasta de armadilhas. Talvez você queira criar várias armadilhas. E aqui vou criar os picos. Então clique com o botão direito do mouse, crie o C-sharp, e vamos fazer com que os picos pressionem Enter, selecione a armadilha de pico. E vou arrastar esses parques aqui. Agora vou clicar duas vezes e abri-lo e Visual Studio. Agora, antes de continuarmos, deixe-me explicar qual é a ideia principal ou como esse pico vai funcionar. Porque em um pouco vou lançar o desafio e quero que você saiba como o pico funcionará. Então o jogador está andando por aí, enquanto o jogador, ele não joga, está andando por aí. Então, de repente, enquanto os picos estão escondidos, escondidos, ele caminha sobre os picos e eles começam a aparecer. Então, quando eles o atingirem, o que queremos é que queremos a animação tenha algum tipo de sistema de eventos e esse sistema de eventos danificará a lâmina. Então, vamos precisar que a variável de quantidade de dano terá que obter uma referência a essa camada e temos que adicionar um evento aqui que irá danificá-lo. Também queremos ter certeza de que, se o jogador ainda estiver de pé nos picos, queremos continuar danificando-o. Não seja apenas danificado uma vez e depois pule de pé aqui e não sinta nada. Também queremos ter certeza de que quando o jogador ativar os picos, ele vai embora. Não queremos que ele continue sendo danificado porque enquanto a animação dos picos está funcionando e o sistema de eventos ainda será acionado, ou você verá como tudo está funcionando quando realmente criamos isso. Mas até lá, vou lançar um desafio para danificar a camada profunda com picos. Então, antes de tudo, crie uma variável para o dano e o jogador que devemos danificar precisará criar o empreendedor Enter. Você precisará iniciar a animação e garantir que ela pare. Portanto, certifique-se de que ele pare significa que podemos precisar e na saída do açúcar. Então você precisará danificar o jogador usando o sistema de eventos. E finalmente, eu só quero que você pense no que deve acontecer se o borrão permanecer nos picos e depois sair. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, de volta ao nosso script aqui, vamos obter, em primeiro lugar, um campo serializado que será do tipo inteiro e a quantidade de dano. Então, vamos criar um vazio privado. E não há desculpa, nem um vazio privado, um colisor privado 2D, e este será o jogador a danificar. Salve isso. Agora vou remover o início e a atualização se precisarmos deles mais tarde, podemos adicioná-los. É bem simples. Vou criar o On Trigger Enter para D. Vou verificar se esta tag collision.com é a camada. Se for, então vou pegar o componente que é a porta principal final. E vou seguir em frente e definir o bool, que será a letra porque esta é uma referência de string. Vamos pegar essas motos. Bob spikes, copie isso. E de volta aqui. E vamos definir esse pops. Bicicletas, salve isso. E então criaremos um método aqui que será danificar o jogador, que é uma camada de dano vazio público. E também precisamos definir isso como verdadeiro. Salve isso. Então, vamos danificar o jogador. O que devemos fazer aqui? Vamos apenas fazer com que o jogador danifique o componente dot get, o manipulador de saúde do jogador. E vamos avançar e danificar a camada com a quantidade de dano. E antes de esquecermos, como vamos ter acesso a esse dano de camada quando o jogador entrar aqui? Qual é o problema aqui? Quantidade de doadores não existe. Oh, desculpe. Quantidade de dano. Onde recebi a quantidade de dano? Nem tenho certeza de qualquer forma, aqui, o jogador a danificar será igual à colisão. Lá vamos nós. Então, no Trigger Enter, verificamos, é o jogador? Sim, começamos a animação pop spikes. Em seguida, colocamos o jogador para danificar como a colisão porque ela é declarada, sabemos que, em seguida, vamos danificar o jogador. E, finalmente, vamos voltar aqui. Qual é o problema? Certo? Nada de animação e vamos selecionar na cena. Então lá vai você. Podemos ver que ele começa, então nada acontece. E alguns segundos esperamos e depois reservamos aqui, vou adicionar o evento e vou selecionar para danificar o jogador. Vamos salvar isso para executar o jogo. E veremos aqui que temos uma vida de 600 quando eu parar nessas motos. Sim. Lá vamos nós. Isso nos prejudica. Isso não nos prejudica porque se eu voltar aos picos, não teremos nada a danificar. Vamos defini-lo como 100 por enquanto, porque a vida é 600. Então eu acho que ele pode dar alguns hits. Então agora temos os picos. Sim, lá vamos nós. Você pode ver que ele remove 100 todas as vezes. E como temos essa invencibilidade por alguns segundos, a segunda dica não afeta a camada. Mas o problema é você pode ver que ele continua jogando e eu continuo sendo danificado. Então o jogador morreu mesmo estando do lado fora do perímetro das faíscas. Então, o que deveríamos fazer é antes de tudo, precisamos parar a animação On Trigger exit 2D. E aqui, vou fazer a mesma coisa que fiz aqui. Verifique o jogador. E se for o jogador que acabou de sair da colisão, vamos definir isso como False, salvar isso de volta em nosso jogo. E lá vamos nós e executamos o jogo. Então, agora entramos aqui, ficamos danificados, saímos. Lá vamos nós. Podemos ver que a animação pára, mas há algo quando eu paro e volto, você pode ver que, mesmo estando lá fora, então recue. Ainda estou sendo danificado. Por quê? Porque a animação aqui ainda está sendo reproduzida. O sistema de eventos ainda está sendo acionado e sabemos o que é o jogador. Então, para evitar isso, vou criar um bool público. E este bool público só para que possamos vê-lo no inspetor vai mais tarde defini-lo para privado. E eu vou chamar isso dar jogador ou dano ao jogador, ou não devo danificar o jogador, acredito que seja um nome melhor para isso. Os verbos devem danificar o jogador. E uma vez que ele está dentro, então o jogador deve danificar é igual a verdadeiro. Quando ele está fora, o jogador deve danificar é falso. E então, dentro do método do jogador de dano, vou verificar se devemos gerenciar o jogador. Em seguida, vamos ir em frente e acessar o manipulador de saúde do jogador e danificar o jogador. Então, agora de volta ao nosso jogo, devemos ver que quando eu executar o jogo, não devemos danificar o jogador. Quando eu entrar aqui, devemos danificar o jogador, ficamos danificados. Mas se eu ativei e depois vou lá fora, lá vai você. Você pode ver que isso deve danificar o livro do jogador, livro. Lá vamos nós. Você pode ver que eu não sou mais afetado. Então, espero que você tenha gostado deste vídeo. Espero que você tenha gostado desta seção. Espero que você esteja sempre preparando seus arquivos, confirmando suas alterações, criando revisões. E então, na próxima seção, veremos onde essa jornada nos leva. Então vou seguir em frente e dizer aqui que criei picos, essa camada de dano, cometi as alterações. E eu posso ver aqui e os mestres como nosso jogo está se movendo. Veja o quanto fizemos, e veja o quanto ainda temos que fazer. Este jogo está apenas começando, então eu não posso esperar. Não vamos perder mais tempo e te vejo no próximo vídeo. 61. Seção 10: captadores — de coleta a a saúde: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, quando você pode ver aqui que temos esses captadores de saúde verde. Então, quando somos atingidos, você percebe que estamos ao vivo como 500 sobre 600. Mas assim que eu pegar essa saúde, você notará que eu aumento minha saúde e agora estamos de volta aos negócios e podemos atirar em todos. Então, sem mais delongas, não vamos perder mais tempo. Eu cometi alguns erros neste vídeo. Espero que você aproveite a lição deles e não vamos perder mais tempo novamente. E vamos começar. Oh, ok, então vamos adicionar a habilidade para o jogador pegar um pouco de saúde enquanto ele está danificado. Então, a primeira coisa que quero fazer é criar o prefab fora da armadilha de espigões. Então prefab e o que deveria estar tendo aqui. Vamos clicar com o botão direito do mouse aqui e criar uma pasta para os objetos de nível. Objetos de nível. E vamos seguir em frente e adicionar a armadilha de espigões e aqui, e vamos mantê-la em nosso mundo. Agora, a próxima coisa que queremos fazer é entrar nos sprites. Onde estão os sprites? E digamos que aqui temos a coleta de saúde ou você sabe o que, vamos chamá-los de Operações PEC. Pressione Enter. E aqui vou entrar nos recursos e arrastar todo o PNG ou imagem ou o que você quiser chamar. E eu queria fazer isso lá fora e fazer isso antes de começarmos o vídeo. Mas pensei que talvez alguns de vocês estivessem zangados por eu ter criado todas as animações e outras coisas. Então eu pensei que vamos criá-los juntos. Se você quiser, podemos ir em frente e ver quem pode fazer isso mais rápido. Portanto, 64 por 64 ou menos slides que, tudo bem, obviamente deve ser 32 por 32 fatia que aplicou alterações. Lá vamos nós. Agora vou pegar um desses, adicioná-los ao mundo aqui. É extremamente pequeno. Vamos colocá-lo na camada, camada. Ainda é extremamente pequeno. Vamos fazer 32 e os pixels por unidade aplicam as alterações para que ainda fique um pouco pequeno. Vamos fazer com que talvez 16. Aplique as alterações. Lá vamos nós. Acho que isso é bom. E a propósito, este é um dos captadores de saúde mais feios que eu já vi. Então, se você quiser agora, não, eu não queria dizer isso porque talvez a pessoa que trabalhou neles talvez tenha tido dificuldade em neles talvez tenha tido dificuldade criar as sombras e assim por diante. Então, sinto muito por dizer isso, mas honestamente, eles não são tão bons. Então eu recomendo que você encontre seus próprios sprites. Tudo o que quero fazer é ter certeza de que temos a mecânica do jogo e o lugar. Não precisa ser extremamente bonito. De qualquer forma, adicionamos um colisor de caixa obviamente. Vamos ver o quão grande isso é. Sim, acho que isso é grande o suficiente. Vamos nos certificar de que é um gatilho salvará isso. Entraremos nos scripts aqui e vamos clicar com o botão direito do mouse e criar um script C-sharp para a saúde ou a coleta de saúde. Pressione enter. E criaremos uma pasta que será os captadores. Então, qualquer dia agora, pega e adicione a coleta de saúde e faça as captações. E depois adicionaremos a coleta de saúde na coleta de saúde. Quão legal é isso? Portanto, a coleta de integridade obtém um novo componente, que é o script de coleta de integridade. Lá vamos nós, abra-o no Visual Studio e vamos começar. Então, o que precisamos aqui? Primeiro de tudo, obviamente precisamos saber a quantidade que isso vai curar. Então, campo serializado, faremos dele um número inteiro e chamaremos isso de quantidade de calcanhar infinita. Apenas defina para ser, eu não sei, como talvez dez. Acho que dez é um número bom o suficiente. Vou remover o início e a atualização por enquanto. E vou seguir em frente e criar um no Trigger Enter para o obviamente o que estamos procurando? Compare tag. Quero dizer, desculpe, precisamos antes de tudo obter a colisão e depois comparamos a tag e essa tag como o jogador. Então você já viu tudo isso, penso que cerca de 1000 vezes, mas de qualquer forma, isso é o que deveríamos estar passando. Mas antes de fazer isso, deixe-me criar a animação para a coleta de saúde. Então, Animação, crie animação. Vamos criar uma pasta aqui que será os captadores. Talvez nós adicionemos um pouco mais captadores. E aqui criaremos a coleta de saúde apenas para garantir que tudo esteja realmente limpo e fácil de passar. Então agora nós levamos a saúde para cima, para baixo, para cima, para baixo. Isso vai para o sprite liga. E onde ele está? Backup, coleta de integridade. Lá vamos nós. Vamos adicionar todas essas imagens e vamos mantê-las como a camada padrão executada. Certo, isso é extremamente rápido, talvez assim. Não, isso é chato. Assim. Certo. Acho que isso é bom o suficiente, talvez. Sim, claro. Por que não? Então, vamos apenas mantê-lo nisso. Eu acho. Sim, claro. Desde que possamos ver o que está acontecendo e ele está se movendo um pouco. Talvez o torne um pouco mais lento. Não, isso é 2 primeiro. Eu não sei. Isso realmente dependerá de você. Como você quer que sua pickup pareça? Obviamente, alguns de vocês têm sprites de bateria, entendem melhor o que torna uma animação bonita. Então, vou manter isso para você, desde que a coleta de saúde funcione corretamente. Agora vamos voltar aqui. E o que queremos fazer aqui depois que o jogador colidir obviamente, queremos aumentar a saúde do jogador, mas há algo que não está certo e isto é, nós não tem alguma maneira de fazer isso. Então, vou lançar um desafio para criar um método que adiciona saúde. Então, antes de tudo, e o manipulador de saúde do jogador cria um método que adiciona saúde ao jogador. Deve ter um parâmetro que é a quantidade do calcanhar. Você precisará ter certeza de que nunca ultrapassa o máximo de saúde que temos. Portanto, nosso máximo é 100. Não queremos ter 120, por exemplo. E, finalmente, e o mais importante, você precisa atualizar também a tela da interface do usuário. Então, com essas informações, pause o vídeo agora mesmo e vá alcançar o desafio. Gay. Bem-vindo de volta. Como você entrou nisso? Espero que não tenha sido muito difícil e espero que você tenha dado tudo de você. Então, aqui onde danificamos o jogador logo abaixo, vamos criar um vazio público. E será adicionar HB dois jogadores. E ele vai ter um parâmetro inteiro, que é a quantidade do calcanhar. E o que vamos fazer aqui? Bem, vamos acessar a saúde atual e vamos aumentá-la pela quantidade de saúde. Agora, para a parte complicada, se tivermos a saúde atual maior que a saúde máxima, o que deveríamos estar fazendo? Bem, devemos definir a saúde atual para ser igual à saúde máxima. Portanto, isso garantirá que a saúde atual nunca ultrapasse a saúde máxima. E, finalmente, precisamos atualizar o Plano de Saúde do jogador, Atualizar a saúde do jogador. Sim, Atualize a saúde do jogador. Você sabe o quê? Clique duas vezes aqui, Controlar RR, Atualizar a saúde do jogador que você está. E o problema é que há algo, um conflito não resolvido. Qual é o problema? Oh, tudo bem. Então, aqui, ele não sabe o que deveria estar usando. E lá vamos nós. Então, agora atualizamos a saúde do jogador que você é. E o último passo é obviamente entrar aqui, vamos para a colisão, o componente Get, porque já sabemos que este é o jogador, então não enfrentaremos nenhum erro que o que foi chamado, na HP para jogador, na HP para jogador. E enviamos a ele a quantidade de calcanhar desse objeto. E finalmente, e é claro que precisamos destruir o objeto do jogo. Lá vamos nós. Acredito que isso é tudo o que precisamos fazer e isso deve estar funcionando. Então, de volta ao nosso jogo, vamos executar isso. E vamos ver se isso funcionou. Então vamos ficar nos espinhos, atingidos uma vez, vamos, pegue-o duas vezes. Lá vamos nós. Seja atingido pela terceira vez. Certo. Então agora nossa saúde é 300. Então, agora, quando pegamos isso, devemos ter 310. Temos 320. Então, por que você acha que isso aconteceu? Vamos ver qual é o problema aqui. Então, a coleta de saúde foi feita, não tem animação. Tem um colisor de caixa, mas o problema, Oh, bem-vindo de volta. Então acredito que levei apenas uma fração de segundo para saber o que aconteceu por causa da magia da edição. Mas passei por algumas coisas. Apenas entenda se minha teoria estava correta e estava. Então, o que eu estava pensando é que temos dois coliders aqui. Temos o colisor de cápsulas do jogador, e temos o Planador de Caixa do Jogador. Um deles é 2. Certifique-se de que não vamos além das paredes. Então fizemos um pequeno para que possamos ter a ilusão de que este jogo é mais do que apenas dois. Estes são os muro, na verdade, não nos tornam incapazes de percorrer um pouco por ela. Então, se você sabe o que quero dizer, estou aqui. E então o segundo é, na verdade, ser capaz de ser baleado do chapéu. Então, o problema, o que está acontecendo? Estou tentando te mostrar, vou ser atingido por esses picos. E agora, se eu andar com esses dois coliders, você vai notar que quando eu escolher um deles, você vê que eu recebo 20 porque estou pegando com os dois planadores. Se eu apenas pegar com o colisor acima, olhe para o 520, você verá que é apenas 530. Se eu pegar apenas com minha cabeça, recebo 540. Então 10, o que é bom. E se eu pegar de lado, lá vai você. Você pode ver que ele adicionou 20. Portanto, esse é o problema que precisamos corrigir. Agora, eu quero que você tire um momento e pense em uma solução para esse problema. Então eu vou dar a vocês, isso não é um desafio, nem um desafio eficiente. Só vou te dar um pouco de tempo. Certo, o tempo acabou. Então, vamos ver o que vamos fazer aqui. Então, a coisa toda que precisamos ter certeza é que essa coleta de saúde foi retirada pelo menos uma vez. Então, o que faremos é criar um bool privado e isso será chamado Pick it up. Então, foi apanhado. E aqui vamos dizer que, se for o jogador e não tiver sido pego, então adicionamos o ponto de exclamação, então vamos pegar, mas também definiremos essa coleta como verdadeira. Então, uma vez que o pegamos, uma vez , é isso, não podemos mais pegá-lo em outra hora. Então, vamos salvar isso. Vamos voltar ao nosso jogo e vamos testar isso. Então nós executamos o jogo, somos atingidos pelos picos. E então, quando andamos pelos lados, lá vamos nós, temos 10. Portanto, não importa o quanto tentemos agora, nunca devemos aumentar isso em 20. Então agora eu passo por isso que você vai para os lados, sempre recebemos 10 e nunca recebemos mais 20 ou mais. Espero que você goste. Espero que você goste disso. E eu realmente não tinha certeza do que o problema estava resolvido. Levei talvez cerca de dois a três minutos, mas lembro quando comecei isso me levou talvez de volta. Hoje é para descobrir o que diabos estava errado com esses jogos ou por que não foi um grande começo? Isso foi há muito tempo. Agora, por causa da minha experiência, entendo as coisas um pouco mais rápido e isso é o que eu quero que você saiba que às vezes, mesmo sabendo que tenho tanta experiência, estou ensinando as pontuações. Eu também cometi muitos erros e aconteceram coisas que não faço ideia do porquê, mesmo que este curso realmente tenha criado este jogo de antemão e passei por tudo. Mas eu encontrei esse problema, então espero que você goste. Espero que gostem da minha transparência que eu sempre me certifico de mostrar os erros que cometi, mesmo que algumas pessoas não gostem, elas dizem isso, como um não estruturado pode cometer erros? Oh não, todo mundo tenta ser perfeito. Sei que ninguém é. Confie em mim. Todo mundo usa o Google para descobrir qual era o problema. E neste caso eu não fiz porque já o encontrei e consertei de antemão, então espero que você goste. Certifique-se de preparar seus arquivos e eu o verei no próximo vídeo. 62. Gota de artigos aleatórios: Bem-vindo de volta meus colegas desenvolvedores de jogos para outro vídeo muito longo. Mas neste, vale a pena. Como toda vez que somos atingidos, quebramos. Podemos ver que temos esse item. Nós não pegamos imediatamente, mas depois de um certo tempo, não só isso, mas agora quando devemos o inimigo e ele morre, em algum momento, ele também cai e item. E obviamente não corrigimos a maneira como as camadas interagem umas com as outras. Mas acho que porque esse vídeo foi muito longo, não tivemos muito tempo. Então, sem mais ou fazer Não vamos perder mais tempo e vamos começar. Oh, caso. Então agora temos a coleta de saúde funcionando, mas não muito divertida quando você tem toda a saúde ao seu redor. Você poderia fazer isso. Você pode simplesmente definir algumas captações de saúde em seu mundo e depois pegá-las assim que encontrar certos quartos ou o que quer que seja. Mas acho que é muito melhor quando você pode ter algum tipo de mecânico que derruba os itens e permite que você os pegue. Então, por exemplo, se tivermos o quebrável aqui, essas urnas, se as esmagarmos ou quebramos, então teremos algum tipo de coleta de saúde ou quando matarmos um determinado inimigo, então também temos a coleta de saúde caiu. Então, vamos fazer isso primeiro, vou para os Prefabs, onde temos o onde está? Onde estão as armas, balas, sangue, balas, inimigo. Então, aparentemente, não temos nada. Oh, você sabe o quê? Vamos criar uma nova pasta para os captadores. E então vamos deixar a coleta de saúde lá dentro. Ótimo. Então agora temos isso. A próxima coisa que queremos fazer é entrar nos scripts. Vamos encontrar as captações e vamos criar um novo script C-sharp será chamado de item drop. Agora, por que estamos fazendo isso? Primeiro de tudo, eu queria fechar isso por um segundo. Então, o que eu queria fazer é adicionar imediatamente esse código aqui na coleta de saúde ou quero dizer, desculpe, no quebrável. Onde eles estão? Acabamos de fechá-lo, então eu queria adicioná-lo imediatamente ao quebrável. Então, assim que quebramos, obtemos um determinado item. Mas então eu pensei, se eu quisesse que alguns inimigos soltem itens que não seriam muito eficientes porque queremos várias coisas. Talvez para soltar itens, queremos ganhos diferentes, talvez não apenas o quebrável, talvez eu não saiba nada que derrube itens. Achei que seria melhor apenas criar um script que é o conta-gotas do item e adicioná-lo a qualquer objeto que quisermos soltar um item quando ele morrer ou matar ou o que quer que seja. Ok, então vamos seguir em frente e fazer isso. Primeira coisa. Primeiro, vamos seguir em frente e criar um campo serializado, que garantirá que tenhamos a opção de verificar se ele derruba itens, seja ele ou ela ou o verificar se ele derruba itens, seja ele que quer que seja que ele solte itens. A segunda variável que eu quero criar é um campo serializado, que é do tipo objeto de jogo. E vamos torná-lo um array e serão os itens muito soltos. Agora você pode estar se perguntando, nós só temos um item para soltar, que é a saúde. Mas, mais tarde, criaremos uma moeda e talvez até você queira criar algum tipo de sistemas de nivelamento ou você soltar algo que viaja como temos no Hades. Então, itens para soltar, nós o temos como uma matriz. A próxima coisa que teremos como um campo serializado, haverá do tipo float e ele será chamado de itens ou queda de item. Chance. E vamos defini-lo em 0,5. Portanto, é uma chance 5050. E por que queremos ter isso? Bem, não queremos ter todos os nossos quebráveis ou todos os nossos inimigos soltando esses itens. Então, queremos ter uma chance 5050 de conseguir um item. Ótimo. Então agora vou prosseguir e remover o início e a atualização. Nós os criaremos se precisarmos deles. E vou criar um item vazio público. E isso simplesmente seguirá em frente e criará um inteiro aleatório. E antes de tudo, vamos verificar algumas condições. Então, o primeiro será aleatório. O valor do ponto é menor que a chance dos itens de cair. E o que é o valor de ponto aleatório que passa o mouse sobre ele e veja retorna um flutuador aleatório entre 0, um. Então, se obtivermos, por exemplo, ponto zero, pois é menor que 0,5, queremos instanciar. Esta é uma ótima maneira de evitar que o todo seja menor que um, mais de 0,5 ou onde quer que isso nos dê um valor aleatório entre 01. Se for maior, instanciamos. Se não for, então queremos. Então, vamos seguir em frente e criar um inteiro aleatório. Então, número de item aleatório e será igual ao intervalo de pontos aleatórios e ao intervalo. E aqui teremos um intervalo entre 0 e os itens a serem soltos. Comprimento do ponto. Tão bem simples o que estamos fazendo aqui. Já sabemos tudo isso e depois vamos seguir em frente e instanciar os itens para cair. E vamos tê-lo como o número de item aleatório. Vamos configurá-lo na posição do ponto de transformação e na rotação da transformação. Lá vamos nós. Então, vou salvar isso. Eu vou, oh, e antes de fazermos isso, também vou criar uma condição aqui que esqueci completamente por algum motivo. Vou me certificar de que, se derrubar itens, vamos seguir em frente e fazer tudo isso. E vamos apenas adicionar alguns suportes encaracolados em torno dele para que seja melhor assim. Não gosto de ter várias linhas sob um único item de descarte. Certo, ótimo. Então, com isso, não salve isso de volta em nosso jogo. E vamos para o pote quebrável. E isso é fechá-los um pouco. E então vamos adicionar um conta-gotas de itens aqui. E como você pode ver, há um problema. Você pode ver que não temos os campos desserializados e você pode ver que há algo esperado aqui, que é que não fechamos um dos, ok, então lá vamos nós. Agora salvamos isso. Agora devemos ver aqui o grande. Então eu derrubo itens, itens em gotículas, apenas dou a coleta de saúde. Vamos fechar isso ou o bloqueio realmente entrar nos Prefabs. Onde está, onde está coleta e coleta de saúde. Então agora só temos a coleta de saúde. E apenas para fins de teste, vou definir os itens para diminuir a chance para 1. Então, sempre soltamos um item, salvamos isso. E agora a última coisa que queremos ter certeza é que em onde deveria estar nas bolhas de ruptura? Se formos, Onde está? Onde está enterrado? 2ls quebrável. E aqui vamos verificar depois de nos certificar de que nós, Onde está, instanciamos o objeto. Também queremos ir em frente e verificar se o conta-gotas do componente e do item Get. E vamos verificar e esperar que tenhamos uma pequena coisa em massa aqui que fará porque é um campo serializado, vamos apenas criar um retorno. Portanto, bool público é item, item conta-gotas. E vamos apenas voltar aqui, Verdadeiro ou seja lá o que for, o item de gotas. Então, isso retornará verdadeiro se ele soltar um item para que possamos voltar e a palavra era, ok, O ponto quebrável é o conta-gotas do item. Para este conta-gotas de item, uma vez que o jogador entra nele, acionamos a quebra, instanciamos as partes e verificamos se ele é um conta-gotas de item, então vamos acessar novamente o dropper Obter item componente, item de soltar. Lá vamos nós, salve isso. E você sabe, eu estava pensando que talvez essa afirmação aqui não seja tão necessária. Então, o que vamos apenas removê-lo. E agora me lembro por que esqueci, porque não era necessário lá. Então, de volta aqui, salve que tudo esteja funcionando bem. A única coisa que ainda me incomoda é que se tentássemos pegar o componente, mas ele não está lá, então não o adicionamos a algum tipo de pote quebrável. Talvez isso cause um problema se isso acontecer, a melhor maneira de corrigir isso é criar uma condição se extra, uma camada extra aqui de proteção se o conta-gotas Obter item de componente, e é diferente do nulo, isso significa que temos este item aqui. Então podemos ir em frente e verificar o conta-gotas do item. Portanto, isso nos dará uma camada extra de proteção se não tivermos o conta-gotas do item componente, se for igual a nulo, então vamos verificar se não podemos soltar itens e, em seguida, vamos realmente soltar um item. Então salve isso de volta agora novamente, vamos ver. Agora isso é como, Honestamente, eu não gosto muito disso porque deveríamos estar sabendo como estamos criando este jogo, Bu, mas esse é o pior cenário. Então execute o jogo. E agora, quando tentamos quebrar uma parte, deixe-me destruir. E então, quando tentamos quebrar a parte que você vê, lá vamos nós. Nós o destruímos. E você pode ver que nossa saúde simplesmente passa de 500 para 510. Mas há um problema. Você viu isso? Você viu o item ser descartado? Não, você não fez, mas a saúde aumentou. Então, qual é o problema? Bem, o problema aqui é que é extremamente rápido e não queremos que isso aconteça instantaneamente. Na verdade, queremos ver o item que deixamos cair antes de pegá-lo imediatamente. Então, vou emitir isso para você como um desafio. E seu desafio é atrasar o tempo antes de podermos pegar um item. Então, antes de tudo, crie um novo script. Pegue a camada novamente. Por que isso? Este é um vídeo incrível de como você estrutura seu jogo. Como pegar a camada, isso nos permitirá atrasar o tempo antes de retirarmos um item. E não queremos adicionar esse atraso apenas para o script de saúde e depois ter que copiá-lo todas as vezes e para todas as moedas, os power-ups e etc. Então, o que vamos fazer é apenas criar um novo script de pegar a camada e adicionar a cada item que queremos pegar, que é muito mais fácil e saudável quando se trata desenvolvimento de jogos e design de jogos estrutura e assim por diante. É por isso que criamos um novo script. Em seguida, você criará um float para o tempo antes de podermos pegar, você precisa criar uma variável booleana que verifique se podemos realmente pegar o item ou não. Crie uma equipe principal que depois do tempo, após um certo período de tempo, que é o, obviamente, a variável flutuante recriada aqui nos permite pegar o item. E, finalmente, onde deveríamos estar? Devemos chamar esse revestimento? Onde deveríamos chamar a rotina escolar? Então, obviamente, bom que eu não sou bom em codificar porque sou horrível na gramática e tudo o resto, sabe, qual é o sentido da última frase? Pause o vídeo agora mesmo e vá para o desafio. Certo, bem-vindo de volta. Então, uma coisa que eu queria fazer é que eu quero entrar na coleta de saúde. Não, não a coleta de saúde, a parte quebrável. E vou aplicar alterações a todas as outras partes, mas certifique-se de que sempre que você adicionar um pote, certifique-se de verificar se ele solta um item ou não e você tem que mudar a chance de queda de itens obviamente. E elétron, é claro que estaremos mudando isso. Portanto, sempre tenha isso em mente ao adicionar novos bots. E então precisamos entrar no, onde está a sala, os inimigos. Temos alguns inimigos. Vamos apenas verificar este e adicionar a ele conta-gotas de item. Lá vamos nós. Então ele solta um item. Qual é o item que ele derruba? Será por isso que sempre o trancamos. Em seguida, adicionamos o item que o definiu como 11. Devemos deixar cair um item? Vamos para o controlador NMI aqui. Onde ele morre? Danifique o inimigo se a saúde for menor que 0, instancie os objetos do jogo de palha. Então, o splatter surdo. Também verificaremos aqui se o componente, e agora? Enquanto o quebrável, copiamos este. E então nós apenas colamos aqui. Portanto, esse é um código redundante. Mas vou deixá-lo deslizar por causa de todas as outras coisas eficientes que criamos. Então, verificamos se temos um conta-gotas de itens, então verificamos se ele é um conta-gotas e, em seguida, vamos em frente e soltamos o item. Então, vamos tentar testar isso no esqueleto inimigo aplicará as mudanças. Então agora todos os inimigos devem ter o script para executar o jogo. E eu sei que isso não era parte do desafio, mas eu só quero testá-lo, então devemos as balas finalmente ele morrer e podemos pegar um item que veja se funciona. Eu entendo. Eu pego o item. Excelente. Agora, a próxima coisa é atrasar, que é o desafio real. Então, vamos entrar no, eu sei que foi uma nota paralela, mas talvez você não soubesse exatamente o que fazer neste caso. Não se preocupe com isso. Vamos para os scripts. As captações, e clique com o botão direito do mouse aqui, criam um novo script C Sharp, que será o PEC. Pegue, o grande, , pegue a camada, pressione Enter. Aguarde que isso seja compilado e clique duas vezes aqui. Clique duas vezes aqui. E vamos ver o que vamos fazer. Primeiro de tudo, vamos criar o campo serializado para o flutuador, que é o momento antes da retirada. E vamos defini-lo em cerca de 0,5 segundos. Então, vamos criar um bool privado que pode ser retirado. Salve isso agora e comece. Vamos nos certificar de que isso pode ser pego como igual a false. E então vamos criar o Coubertin E aqui, que vai ser o enumerador dos olhos. E vai ser chamado de pick-up, esfriar. Sim, claro, pegue, esfrie. E então aqui vamos ceder, retornar, novo. Aguarde quatro segundos. E eu tenho certeza que neste ponto, você sabe, co-rotinas tão bem que você está entediado de mim toda vez dizendo rendimento devolvê-lo por segundos de peso. Você provavelmente está dizendo Michael, já sabemos como fazer isso. Por favor, pare. Não. Vamos aprender. Ele tem Gantt ser pego é igual a verdade. Salve isso. E agora vamos entrar no conta-gotas do item. E eu sinto muito, quero dizer, a coleta de saúde. E aqui vamos verificar se foi apanhado. E também vamos verificar. E se o componente Get, o captado, a camada, o que deve ser chamado? Onde está? Pode ser pego? Vamos prosseguir e devolver isso. Então, booleano público, ele pode ser apanhado. E nós só vamos voltar. Pode ser coletado variável. Certo, nome não muito criativo para este, mas funciona. E aqui está algum tipo de problema que definição de vetores de tipo pode ser captada. Certo? Assim, pode ser retirado. Claro, digamos que tenha chamado um método. Então eu acredito que seja só por causa do nome. Portanto, você não pode nomear a variável assim como nomeia o método desejado. Então, vamos chamá-lo de método porque temos a imaginação de uma pequena mosca da fruta e, em seguida, podemos pegar método. E isso deve fazer o truque. Agora, a última coisa e a última parte deste desafio foi onde chamamos de Colton? Espero que você tenha pensado sobre isso e espero descobrir que ele deve ser chamado imediatamente e começar. Então, no início, começamos a co-rotina. Isso pode ser, não, quero dizer, pegar, esfriar, pegar, esfriar. Lá vamos nós. Então, por que e começar? Porque estamos instanciando o item. Assim que instanciamos o item, ele tem a camada D de coleta, iniciamos imediatamente o Colton. Então, de volta ao nosso jogo. Vamos ver aqui, a camada. Pegue a camada. Quantos, quanto tempo espera? E vou aplicar as alterações a todos. Então, agora, quando executamos o jogo, devemos ver que assim que atingirmos as bolhas de ruptura, lá vamos nós. Acertamos os parafusos de freio. Não pegamos imediatamente o item. Vemos isso cair. Lá vamos nós. Sim. Você pode ver agora que ele ainda está lá. Nós não pegamos, mas agora podemos, vamos tentar algo diferente. Vamos adicionar o atraso a cerca de três segundos e ver se ele funciona. Na vida real. Vamos ser atingidos. Vamos destruir isso e tentar pegá-lo. Ok, então isso funcionou muito rápido e estou me perguntando qual é o problema aqui. Oh, ok, bem-vindo de volta. Então, o maior erro que já foi cometido, mudei essa coleta de saúde para 10, mas o pré-fabricado real não mudou. Então, vamos aplicar as alterações. Eu queria saber que tudo está funcionando sem problemas, mas por algum motivo isso não estava funcionando. Então lá vamos nós com o esteróide e agora temos 10, 10 segundos antes de podermos realmente pegá-lo, mas vamos configurá-lo para cerca de 0,5. Salve isso. Espero que você goste. Espero que você tenha gostado todas as diferentes mecânicas e pequenas coisas de ajuste adicionar e remover e garantir que possamos aplicar coisas diferentes, itens diferentes. Então eu sei que este foi um vídeo longo. Obrigado por sua atenção. Obrigado por preparar todos os seus arquivos todas as vezes e fazer todo o progresso que você fez. Agradeço também pela refutação, incrível crítica que você me deixou e eu te vejo no próximo vídeo. 63. Como coletar armas: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Sei que este é um vídeo longo, mas fazemos muitas coisas. Aprendemos muitos pequenos truques bacanas aqui. Então, quando executarmos o jogo, você notará que temos apenas o pistilo agora e o braço de armas devemos a pistola, tudo funciona bem. Temos a espingarda no chão. Uw, o que você acha que vai acontecer quando o pegarmos? Então eu fui buscá-lo. Lá vamos nós. Podemos ver que eu tenho uma espingarda e podemos ver a bala daquela arma de tiro. Não podemos desligar nada. Podemos alternar entre a pistola e a espingarda, mas não vamos nos preocupar com isso. Tudo acontecerá. Tudo será corrigido no devido tempo. Então, não vamos perder mais tempo com este grande vídeo longo e vamos começar. Oh, caso. Então, hora de configurar a maneira como pegamos nossas armas. Então, agora, a maneira como temos nossas armas é boa o suficiente. Estamos mudando, estamos fazendo tudo, mas não é assim que queremos que nosso jogo funcione. Não queremos apenas começar com todos os nossos botões e apenas alternar entre eles. Queremos ter algum tipo de mecânica que nos permita tê-los ou adquiri-los de alguma forma. E uma dessas coisas é que podemos pegar nossas armas em certos pontos e no nível. Então, vamos seguir em frente e fazer isso. A primeira coisa que vamos fazer é entrar no doom player. Vamos remover as armas que não estamos segurando. Então, vou remover o rifle, precisarei abrir o script. Então remova o rifle, remova a pistola e volte para o nosso jogo. Lá vamos nós. Agora, uma coisa que precisamos ter certeza é que também os removemos das armas disponíveis aqui. Então, vou remover esses slots vazios, salvar isso e vamos ver o que temos aqui. Ok, como você pode ver, isso também é algo que precisaremos mudar e eu vou te dizer o porquê. Vamos tirar as coisas do caminho. Então, atualmente, estamos configurando a arma atual em um e, em seguida, configurando a interface do usuário da arma, mas uma não está disponível aqui. Então, vamos ver o que acontece quando executamos nosso jogo. Devemos ver que temos uma seta aqui, e esse erro é argumento fora do alcance. Eu clico duas vezes aqui, ele me leva para a arma de configuração. Isso significa que a arma atual está fora de alcance dentro das armas disponíveis. E é claro que é porque estamos definindo a corrente para uma, enquanto só temos uma arma. Então, o único índice que podemos acessar um 0. Eu poderia definir isso como 0 se eu quisesse. Mas o que acontece é que toda vez que começamos o jogo, temos, por exemplo, a espingarda e o rifle, e o rifle está ligado enquanto a arma atual é diferente do que você entende o que quero dizer. Então o índice ficará fora de lugar e isso é algo que não cuidamos no último vídeo. Então eu vou mostrar o que acontece, mesmo isso leve um pouco de tempo para entender, mas não se preocupe. Quero ter certeza de que tudo está devidamente compreendido e por que estamos fazendo todas essas coisas. Então pistola, espingarda, rifle, aplique as mudanças. Por exemplo, digamos que eu desligue a pistola e desliguei o rifle. Então agora o que devemos ter como espingarda quando começamos. Então, vou executar isso. Lá vamos nós. Temos o tiro de espingarda, mas eu tenho a pistola e a interface do usuário. Se eu clicar nele novamente, então eu tenho a espingarda que tenho o rifle. Então, como você pode ver, as coisas são estranhas no início. Então, em vez de fazer isso , o que vamos fazer, vamos remover isso e vamos criar um loop for. Então quatro e eu é igual a 0, eu sou menor do que a contagem de pontos de armas disponíveis, conte porque estamos usando listas e eu mais, mais. E aqui vou verificar se a arma disponível, a posição que pontuo GameObject ponto ativo na hierarquia, isso significa que aparece e nós realmente escolhemos estar disponíveis para o jogador? Então vamos definir a arma atual igual a I. E dessa forma tudo deve estar funcionando perfeitamente bem. Então, se eu voltar aqui, eu tenho a espingarda. Eu executo o jogo. A arma deve estar correta aqui. Lá vamos nós, espingarda. Vamos testá-lo no rifle. Então, desligue isso, execute o jogo. Então agora devemos ter o rifle. E lá vamos nós, tudo está funcionando corretamente. E finalmente, testamos na pistola e removemos o rifle, corremos isso. E devemos ter a pistola. Certo, ótimo, então tudo está funcionando bem. Agora, eu me diverti um pouco para fazer isso. Não se preocupe, mas desde isso esteja fora do caminho, porque será importante quando começarmos a pegar armas. Então, a primeira coisa que precisamos fazer é criar o objeto de coleta com o qual vamos interagir. E eu criei esses três sprites aqui. E a diferença entre os sprites regulares e as armas e esses é que eu adicionei um pouco de camada branca ao redor do console. Podemos vê-los no mundo. Então, vou entrar nos sprites, clique com o botão direito aqui, criar. Não. Crie uma nova pasta que será o backup de armas. Pressione Enter, abra isso. Ou poderíamos ter adicionado aos pickups, mas não se preocupe com isso. Ter mais pastas nunca machuca ninguém. Então, como você pode ver, há um contorno branco ao redor da espingarda. Então, se eu adicioná-lo aqui, coloque-o no player. E vou fazer todos esses 32 e fazê-los apontar. Aplique as alterações. Lá vamos nós. Então, como você pode ver, a espingarda tem esse contorno branco em torno dela para que possamos vê-lo e trabalhar corretamente. Não era tão grande coisa sempre que estávamos segurando a arma porque temos o jogador como pano de fundo. Mas agora precisamos ter certeza de que podemos ver visivelmente e facilmente a espingarda ou qualquer pistola e arma. E se você não gosta, honestamente, levei como, eu não sei, uma hora para fazer isso no Photoshop. Não faço ideia de como é bom ou ruim. Talvez alguns de vocês estejam se encolhendo no trabalho, mas pessoalmente, foi o meu melhor. Vamos continuar um. Então, o que vamos fazer aqui é manter isso como a espingarda. Vamos adicionar um componente. Obviamente, vai ser o colisor. Então, um colisor de caixa 2D. Vamos ver o quão grande isso é. E talvez possamos aumentar um pouco o tamanho no x e no y. Não precisa acertar a arma inteiramente para pegá-la. Então, só um pouco e tê-lo como um gatilho. Nós salvamos isso. E a próxima coisa que vamos fazer obviamente é algum comportamento. Então vou entrar nos scripts, entrar nos captadores, clicar com o botão direito do mouse aqui e criar um novo script C-sharp que será o backup de armas. as armas Enter, pegue, espere que ela seja compilada para o captador da espingarda. E vamos abrir o roteiro e ver o que vamos fazer aqui. Ok, então a primeira coisa que precisamos, pois realmente precisamos saber qual arma isso vai ser. Então a espingarda obviamente nos dará a arma de espingarda. Então eu vou criar um campo serializado aqui, que será o sistema de armas do tipo sistema urbano será a arma real que vamos pegar. Salve isso. Agora, a próxima coisa que queremos fazer é que queremos ser capazes de pegar esse objeto. E antes de podermos realmente adicionar esse objeto ao jogador, queremos ter certeza de que ele ainda não tem esse objeto. Então eu não quero carregar cerca de 10 espingardas. Só preciso de uma arma de tiro único para estar disponível para mim. Então deixe-me antes de tudo assim para baixo. Vamos ao pré-fabricado, ir para as armas, e vamos adicionar a espingarda aqui como arma. Então, espero que você tenha entendido o que quero dizer. Não quero pegar uma espingarda enquanto já tenho uma espingarda. Quero pegar uma espingarda somente se ela não estiver sendo mantida em minhas armas disponíveis. E esse é o seu desafio de olhar através das armas de camada. Então, antes de tudo, você precisa criar um empreendedor Enter e verificar se colidimos com um jogador. Obviamente, não queremos que nossos esqueletos estejam nos atacando foram armas de tiro. Quem, então, você precisará criar uma variável dentro do método para acompanhar se encontramos a arma ou não no jogador. Você precisa passar por toda a camada profunda das armas e , obviamente, verificar se estamos carregando a arma, você pegou usando o nome GAN, então precisaremos do nome da arma e do telefone para acessar o nome da arma e acesse as armas disponíveis, você precisará criar alguns métodos extras. Então este é um grande desafio, um desafio muito difícil, mas sei que você está à altura da tarefa. Leve seu tempo, brinque, cometa erros, não se preocupe com isso. Estarei lá para ajudá-lo depois de tentarmos. Então você não perde nada. Pause o vídeo agora mesmo e vá até Alan. Kay, bem-vindo de volta. Então, a primeira coisa que vou fazer é remover o início e a atualização. Vou criar o empreendedor entrar em 2D. E aqui, obviamente, verificamos se a tag collision.com como o jogador. E agora podemos continuar. Agora, a próxima coisa e algo aqui, talvez pudéssemos ter feito imediatamente todos os captadores terem uma determinada camada e fazê-lo interagir apenas com a camada do jogador que teria sido um pouco inteligente e talvez não tenha todas essas condições f toda vez que queremos usar uma pickup. Então, só um silêncio, esqueci disso. Talvez você possa fazer isso sozinho. Com isso dito, vamos continuar em seguida. O que queremos? Bem, obviamente queremos essa variável booleana que dirá essa arma no jogador. E isso será definido como falso. Ok, agora a próxima coisa que precisamos fazer é que precisemos criar um loop foreach que verifique. E vai estar verificando armas ou armas. Então, é o sistema de armas. A arma para verificar. E onde estamos procurando por isso? Bem, estamos procurando as armas disponíveis no jogador. No controlador do jogador, seu objetivo, ele diz isso aqui. Então, vamos examinar as armas disponíveis, mas obviamente as armas disponíveis, mas obviamente é um campo serializado. Não queremos torná-lo público e disponível para todos. Então o que faremos é aqui embaixo, vamos criar e lá você pode ver o erro que cometemos. Vamos criar uma lista pública de sistema de armas de tipo. Então espero que você tenha tentado isso, com licença. E vamos chamá-lo de obter armas disponíveis na camada. Lá vamos nós. Esse é um nome longo. E o que vamos fazer é simplesmente devolver as armas disponíveis. Lá vamos nós. Então agora o que podemos fazer de volta aqui, e porque podemos acessá-lo imediatamente a partir da colisão, que colidimos com o componente Get. E como já sabemos que é o jogador, podemos acessar o controlador do jogador. E a partir do controlador do jogador podemos obter as armas disponíveis no jogador. Ótimo. Então, o que fizemos aqui, criamos as armas disponíveis do gueto tendo o retorno simples, que retorna uma lista. E como é uma lista, podemos adicioná-la aqui. Então, estamos verificando as armas para verificar. Agora, como vamos saber se a arma está lá? O que faremos é criar uma condição if. E aqui vamos verificar se a arma que está aqui pontilha o nome da arma. Então, obviamente, se eu for para o sistema de armas, se estiver aqui em algum lugar, o sistema de armas, nós temos o nome das armas, mas novamente, é um campo serializado. Então, estes estão bem. Então, temos o nome das armas get, UI. Certo. Não se preocupe. Isso é tudo o que precisamos. Sim, isso é tudo o que precisamos. Então, aqui vamos verificar o nome das armas nas armas ou não, na verdade, não precisamos disso. Obter o nome das armas que você é. E se for igual à arma para verificar ponto, obtenha o nome da arma UI. Então, talvez a UI não tenha sido o nome perfeito aqui para o método, talvez seja melhor chamá-lo de nome porque estamos usando-o de uma maneira diferente. Podemos clicar duas vezes em criar nosso R e apenas usar o getWidth e o nome. Pressione Enter. Lá vamos nós. Agora mudamos isso tudo, mesmo no sistema de armas. Aqui em baixo, você pode ver o quão legal é isso. Portanto, controle, dobre ou , ou, então, se estiver lá, isso significa que a arma já está nas armas disponíveis. Então, vamos definir a arma na camada como verdadeira. E depois de terminarmos de olhar através de todas as armas disponíveis, vamos depois deste check-in aqui, se a arma V no jogador não for verdadeira, então isso significa que ainda é falso. Não temos a arma, honesto. O que faremos é ir em frente e instanciar a arma no componente get ponto de colisão. E vai ser o controlador do jogador. E por que estou fazendo todas essas etapas? Bem, porque eu quero realmente fazer essa arma. Se voltarmos aqui, você pode ver que a arma é na verdade, um filho do braço de armas. Então precisamos fazer com que possamos ver aqui que uma instanciação, podemos definir a criança. Então, vamos fazer exatamente isso e precisamos de uma referência às armas. Então, se eu rolar para cima e aqui você pode ver que temos um braço de armas. Então, tudo o que precisamos fazer uma rolagem para baixo e novamente, criar um público. E o que é isso? É uma transformação, eu acredito. Sim, digamos transformar. Então, precisaremos criar uma transformação pública e obter braço de armas. E nós simplesmente vamos voltar, devolver as armas. São. Lá vamos nós. Então esse foi um desafio difícil, eu sei, mas espero que você pelo menos tente chegar na metade dele. Então, pegue armas. Não está aparecendo porque é uma transformação pública. Coloque armas. Então, o ponto do controlador do jogador pegue arma. Oh, então controlador de bala do jogador. Certo, então o controlador do jogador pegue braço de armas. E lá vamos nós, salvamos isso. Voltamos ao nosso jogo. E vamos ver como isso funciona. Então, temos o histone e temos a espingarda no chão. Pegamos a espingarda, a arma disponível nela, salvamos isso, executamos o jogo. E agora, quando chegamos perto da espingarda, nada acontece porque se eu clicar duas vezes aqui, podemos ver isso, ok. E além disso aqui, podemos verificar. Certo. Então, bem-vindo de volta. Por algum motivo, não mudei nada. Acabei de executar o jogo agora e parece funcionar. Lá vamos nós. Você pode ver que pegamos duas espingardas. Por que isso? Bem, obviamente por causa dos dois coliders que temos sobre nós. E também não destrua essa espingarda. Mas, como você pode ver, ainda estamos pegando a espingarda várias vezes, mesmo que possamos analisar isso e ver que temos a espingarda já honesta agora. Então, antes de continuarmos, a primeira coisa que precisamos fazer é criar o booleano privado, assim como temos na coleta de saúde. Então podemos simplesmente copiar isso, colá-lo aqui e dizer que a coleta verdadeira sempre que realmente pegamos a arma. Então aqui disse isso imediatamente para verdade. E também verificamos se ainda não pegamos a arma. Então, como você sabe, isso é porque temos os dois colisores em nós. Então salve isso de volta em nosso jogo. Vamos ver como isso funciona. Agora, nós executamos o jogo. Temos a espingarda. Ah, e também precisamos destruir a arma, com licença. E depois de pegá-lo, se instanciarmos a arma, onde está ela para cada um? Então, aqui você pode escolher se deseja destruí-lo em qualquer caso. Acredito que devemos destruí-lo em qualquer caso. Então, mesmo que não o peguemos, ele não precisa ficar lá. Então, vou destruir o objeto assim que a camada profunda realmente encabeça esse objeto. Então, volte aqui, execute o jogo. E lá vamos nós. Pegamos a arma, e agora temos a espingarda e a mão. Como você pode ver, a espingarda dispara e não podemos ligar e sair as armas entre a espingarda ou a pistola. Por que isso? Bem, porque na verdade não adicionamos a espingarda aqui nas armas disponíveis e isso é algo que precisaremos consertar no próximo vídeo. Essa também é a razão pela qual vimos aqui que temos várias espingardas sendo apanhadas sem que a arma fosse destruída. Isso será corrigido no próximo vídeo, onde realmente começamos a adicionar a arma pegada nas armas disponíveis. Dito isso, espero que você goste. Certifique-se de confirmar suas alterações e eu o verei na próxima. 64. Como adicionar armas colheitas: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, nós realmente começamos a adicionar a espingarda, rifle e o pistilo, que são as armas para nossas armas disponíveis. Então, agora, quando executamos o jogo, você notará que, quando todos nós, também adicionamos um pouco de rotação, o que torna nosso jogo muito mais legal. Então, agora, quando eu pego a espingarda, lá vamos nós. Você pode ver que eu pego a arma de tiro na minha mão. Não só isso, se eu entrar no doom player, você pode ver que ele já está aqui. E não só isso, quando eu pego a pistola, por exemplo, lá vamos nós. Você pode ver que, mesmo sendo destruído, na verdade não pegá-lo. E finalmente, o rifle e pegue-o. Está aqui em nossas armas, estão em nossas armas disponíveis. Podemos alternar entre ele, ele faz isso que automaticamente, quão legal é isso? Todas as mecânicas são perfeitas. Então, vamos, não vamos perder mais tempo e vamos começar. Oh, tudo bem. Então, enquanto você estava se movendo entre vídeos e deixando resenhas para mim, porque isso me ajuda muito. Eu criei mais duas armas, pickup 14, a pistola 14 o rifle, e obviamente é muito fácil. Tudo o que fiz foi duplicar a espingarda, pegar no sprite e adicionar a arma e o captador de armas. Então eu vou para os Prefabs, vamos ver e ouvir os pickups. E vamos chamar isso de pasta ou você sabe o que, O que fazer isso apenas permite que as espingardas, pistola, rifle salvem isso. Ótimo. Agora, o próximo passo é realmente começar a adicionar o jogador às armas disponíveis. Então, precisaremos criar algum tipo de método para fazer isso. E será seu desafio criar um método que acrescente às armas disponíveis. Então você precisará criar um método que use um parâmetro, os contras para adicionar, a arma para adicionar ou a arma para adicionar o que quiser chamar, precisa adicioná-lo à lista de armas ou armas disponíveis. Então vou dar uma pequena dica de como você pode adicionar a qualquer lista que você tenha e apenas usar o ponto add com dentro dela. Você também pode passar pelas documentações de Eu deixei a lista de documentação sobre como pontuar para uma lista. Então, pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Como você se deu bem com isso? Então, vou seguir em frente e rolar para baixo. E aqui. E mantemos esses métodos sozinhos e criamos métodos aqui. Este é apenas um critério de organização para mim, talvez você tenha algo diferente e maneiras. Vazio público. Adicione duas armas disponíveis e abra os suportes, como eu disse, o sistema de armas de varas e armas. E temos a arma para adicionar. Abra os círculos aqui. E vamos simplesmente obter o disponível, abrir o anúncio e temos a arma para adicionar. Lá vamos nós. Isso é tudo o que precisávamos fazer. E finalmente, quando realmente pegamos a arma aqui, instanciamos a arma. Também obtemos o componente colisão get , o controlador de camada. E adicionamos duas armas disponíveis. O que adicionamos? Bem, queremos adicionar a arma que criamos aqui. Então, vou obter uma referência para que a troca será do tipo sistema de armas. Lá vamos nós e vemos a arma para adicionar é igual a isso. Então, arma para adicionar, salve isso de volta em nosso jogo. Vamos executar isso. E eles agora, qualquer dia agora executam isso. E agora devemos ver que temos a pistola e ele, eles agora vêm. E finalmente temos o pistilo. Agora pegamos a espingarda para que possamos ver que podemos mudar para a espingarda aqui e você pode vê-la nas armas disponíveis. Finalmente, tentamos pegar a pistola. Como você pode ver, não pegamos a pistola, só pegamos a espingarda e agora pegamos o rifle. Temos o rifle. Podemos alternar entre eles. E como você pode ver aqui, agora, houve um pequeno problema que você pode não ter notado. Primeiro de tudo, quando eu executar o jogo, deixe-me mostrar isso de novo. Então, quando eu pego a espingarda, ok, isso é bom. Eu tenho a espingarda era eu. Mas quando eu pego o rifle, você pode ver que assim que eu começar a atirar, primeiro lugar, temos a pistola e o rifle. Ambos trabalhando, então eu preciso de alguma forma alternar entre eles para pegá-lo. Então, isso é algo que precisaremos consertar. E para fazer isso, vou voltar na visita. Então, nas armas disponíveis. E aqui vou me certificar de definir a arma atual e o que deveria ser. Então defina a arma atual. E o que tem que ser? Bem, vou escrever e depois vou explicar. Então, as armas disponíveis contam menos 2, e então eu vou trocar a arma. Certo? E, a propósito, troque a arma. Qual deles é? Qual? Certo, então trocando. Então, como você pode ver, isso não funcionará. Por quê? Como o interruptor desapareceu , na verdade, exige que pressionemos a tecla Tab. Portanto, se acessarmos esse método e tentarmos usar a tecla Tab, ele não funcionará. Então, o que vamos fazer é, em vez disso extrair todo esse método. Clique com o botão direito aqui. Ação rápida e refatoração, extraia o método. E este será o, vamos chamá-lo de interruptor de arma real. Aplique a alteração, salve isso. Então agora podemos realmente fazer a troca de armas real aqui. E espero que tenha ficado claro por que fizemos isso. Porque novamente, isso pode apenas mostrar que temos filhotes. Tentamos chamar a pistola do interruptor, mas a pistola do interruptor não funciona a menos que pressionemos a tecla Tab. Então, o que faremos é extrair esse método aqui. Então, agora o interruptor desaparecido funciona completamente bem. Mas a única coisa que temos é que podemos realmente trocar o intestino, o interruptor de arma real. Então, de volta aqui, onde está o real pode mudar? Por que temos a contagem de pontos de arma disponível menos dois? Vamos antes de tudo ver se isso realmente funciona. Então, de volta ao nosso jogo, executamos o jogo. E vamos pegar a espingarda. Lá vamos nós. Você pode ver que a espingarda é a única arma que está funcionando. E agora, quando pegamos o rifle, lá vamos nós. O legítimo é a única coisa que estava funcionando. E eu pressiono tab apenas fora das reações ou vamos tentar isso novamente. Torne-se a espingarda, pegue o rifle é o único a trabalhar. Ótimo. Agora, de volta aqui, por que temos a contagem de pontos de armas disponíveis? Vamos pensar nisso por um momento. Digamos que peguemos uma arma. Então, digamos que tivéssemos apenas o pistilo, tínhamos 0, tínhamos apenas uma arma e a contagem era uma. Esse índice de pistola era 0. Digamos que peguemos a espingarda. Então, pegamos a espingarda. Agora temos a contagem igual a 2 e temos a espingarda na posição 1. Então, como vamos nos certificar de que só pegamos a espingarda? Nós obteríamos a contagem de pontos de armas disponíveis, que agora é cerca de dois, removerá dois. Isso significa que estamos em 0 e, em seguida, fazemos o switch real e o switch real assim que ele começa. Se olharmos aqui, você pode ver que, assim que começarmos, obtemos a arma atual mais, mais. Então aumentamos em um e isso funcionará em qualquer caso. Então, digamos que também pegamos o rifle. Então agora a contagem é 33 menos dois é um. Isso significa que estamos em um, que é a espingarda. Mas quando nós realmente fazemos a pistola, aumentamos. Temos dois e recebemos a espingarda disponível. Eu sei. Confuso, não é? Você pode rever o que eu disse. Tenho certeza que disse tudo corretamente. Portanto, esta é apenas uma maneira de garantir que sempre obtemos o copo correto e adequado. Então, espero que você tenha gostado no próximo vídeo, queremos apenas adicionar um pouco mais de, digamos, emoção. Sempre que queremos pegar uma arma, não queremos apenas ter as armas por aí em nosso mundo. Na verdade, queremos ter não, talvez algum tipo de baú, baú que se abrirá quando chegarmos perto dele ou pressionar um determinado botão quando estivermos perto dele e depois fazer com que a arma apareça a partir dele. Então acho que ainda tenho alguns minutos neste vídeo. Tem sido curto. Então o que vou fazer é pegar o captador de rifle ou a espingarda pegar. E vou criar uma animação aqui. Então, apenas para tornar um pouco mais agradável continuar para onde está, clique com o botão direito do mouse aqui. Crie novas armas. Backup. Aperte Enter abrindo, você está girando arma, linha, a coisa, arma, pegue. E isso não é novidade. Nós só vamos fazer é você ver em apenas um pouco pela coisa, arma, pegar, salvar isso. Então pegue a espingarda. Pare de gravar. E eu quero ter uma rotação em torno do segundo para ser sobre isso. Sim, claro. Então, 90. E no segundo, segundo, segundo, segundo, a rotação deve ser em torno de 180. Lá vamos nós. E, em seguida, adicione os três segundos. Devemos estar em 270, quase 70. E, finalmente, no segundo quatro, temos 362. Vamos ver como isso parece. Certo, parece bom o suficiente. Então esta é a arma rotativa, mas também podemos fazer algumas coisas aqui se escolhermos todas elas com o botão direito do mouse e você pode ver que podemos criar algum tipo de tangente. Podemos escolher a tangente e torná-la talvez linear. Então, agora a rotação, vamos mudar um pouco. Lá vamos nós. Você pode ver que ele continua girando, muito bom. Também podemos fazer o mesmo e aqui. Então, vou deixar o resto para você. Esta é apenas uma maneira de ter um jogo um pouco melhor. Então agora você pode ver que temos essa espingarda que precisamos pegar. Lá vamos nós. Nós pegamos isso. Tudo está funcionando perfeitamente bem. Então, espero que você goste. Espero que você esteja preparando seus arquivos e eu o vejo no próximo vídeo em que criamos um simplesmente abre e nos leva, nossos bonecos. Vejo você então. Ei, você pensou que estava livre de mim, mas não, ainda temos um pouco de tempo para algo e eu só estava preocupado com uma coisa que você poderia querer criar uma animação para cada arma. Mas não, você não precisa ir até a espingarda. Você pode simplesmente clicar nessas três pequenas teclas aqui, ou botões ou o que quiser chamá-los. E você pode ver que você pode realmente copiar esse componente inteiro. Então, quando você copiá-lo, deixe-me voltar para a pistola. Já fiz isso Remover componente, sala de componentes. Então, na espingarda aqui, copiamos o componente. Entramos no captador de pistola que não gira. Clicamos em qualquer componente que quisermos. E você pode ver aqui que podemos colar componente como novo. Então, quando clico no Colar, lá vamos nós. Você pode ver que agora ele tem o controle da espingarda. E você pode pensar aqui que talvez isso não seja uma boa ideia. Devíamos ter sido chamados algo diferente do captador de espingarda, mas não se preocupe com isso. O que estamos procurando é a animação aqui, que afeta apenas a rotação. Portanto, não altera os sprites, afeta apenas a rotação de um objeto de jogo. Portanto, não teremos que nos preocupar com a mudança de sprites e essa é uma maneira mais rápida para nós. Vamos adicionar isso também ao rifle. Portanto, essa é uma maneira muito rápida de termos objetos rotativos e não precisamos criar animações todas as vezes. Então copie-o, execute o jogo agora devemos ver que todas as armas o escreveram. Lá vamos nós sem mudar nada e eles ainda estão trabalhando no estilo de lista. Nós vamos fuzil, ainda não é pego porque já temos a pistola conosco. Quão legal é isso? Espero que você tenha gostado. Desculpe por voltar. Sei que você já está muito irritado. Este é um passo apenas para economizar talvez alguns minutos, horas, seja lá o que for preciso para criar animação. Então, espero que você goste da alavanca de você. Vejo você no próximo. Desta vez, de verdade. 65. Como criar um test que se abre: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos neste vídeo e neste longo vídeo, novamente, vamos aprender a criar um baú. Mas isso é muito legal só porque quando chegamos perto dele, ele nos diz que podemos pressionar o e para abrir o peito. Se pressionarmos o E, você verá que temos um baú aberto. Lá vamos nós. Então, isso é tudo o que fizemos. Então, não vamos perder mais tempo e vamos começar. Oh, ok, bem-vindo de volta. Então agora sabemos como podemos pegar armas. Podemos adicioná-los facilmente ao jogador, podemos atirar com eles. Atualizamos a interface do usuário, tudo está funcionando perfeitamente, mas como dissemos, queremos adicionar um pouco mais de sabor à maneira como realmente conseguimos essas armas. E a maneira como faremos isso é ter baús e nossos níveis nos quais podemos clicar. Eles se abrem, nos dão a arma, nós a pegamos, continuamos com o nosso jogo. Então, vamos seguir em frente e fazer isso. Vou apagar o captador de três armas. Vou entrar nos sprites e antes, obviamente, antes de excluí-los, precisamos tê-los como prefabs. Então vamos para os sprites. Vamos clicar com o botão direito do mouse aqui, criar uma pasta para o baú. Clique duas vezes aqui e vá para a visita aos recursos, arraste os baús. Obviamente, se você conseguir encontrar pelos baús, recomendo que você vá em frente. Vou torná-lo múltiplo. Vou fazer isso por ponto. O modo de filtro vai para esse orgulho, aplique obviamente. E agora vamos seguir em frente e cortar isso. Acredito que o automático deve funcionar perfeitamente bem. Lá vamos nós, aplicamos as alterações. Qual caixa você deseja escolher? Vou escolher o dourado. Então o, este e este quando ele se abre. Então, precisaremos ter dois tipos de sprites aqui, 140, baú aberto 14, o fechado. Vou arrastá-lo e adicioná-lo ao mundo aqui e colocá-lo na camada do jogador. Obviamente, é extremamente pequeno. Então vou mudar isso do baú do tesouro para o baú das armas, e vamos torná-lo um pouco maior. Então eu acredito que 16 talvez 16 sejam grandes demais. É um baú muito grande. Não, acho que isso é bom o suficiente. Agora vamos para os scripts clicar com o botão direito do mouse ou não, temos algo pickups, fluxo de nível? Temos uma pasta adequada para o Nope, não temos uma. Então, vou clicar com o botão direito do mouse em criar uma pasta para as armas. Basta copiar isso dentro daqui. Para onde fomos? Armas. Mas nós lamentamos por isso. A arma está bem. Por algum motivo. Acabei de abrir uma pasta diferente qualquer maneira, criamos isso. São as armas, baú. Pressione Enter, aguarde que ele seja compilado. E a qualquer dia agora nós o adicionamos às armas reais, apenas e abrimos o roteiro. Certo, então o que precisamos ter aqui? Primeiro de tudo, queremos que isso só nos dê armas aleatórias. Então, o que faremos, e isso é apenas um mecânico que eu quero ter. Talvez você queira criar algo diferente, mas por enquanto campo serializado, a coleta de armas. E vai ser um, uma matriz com as armas em potencial. Então, as armas em potencial, então eu vou criar um renderizador de sprite privado. O que faz isso, certo? Renderizador. E vai ser o baú como R. E você entenderá tudo. Mas, por enquanto, vamos continuar. Obviamente, o sprite apenas renderizar isso será, precisamos de uma referência à largura. Você entenderá em um pouco. Agora vou criar outro campo serializado, só vou ser um sprite. E esse sprite vai ser o sprite aberto. E então vamos ter algum tipo de texto. E como precisamos usar o mecanismo Unity Wi, agora podemos acessar o texto e ele será o texto de chave aberta. Abra textos-chave. E eu não quero dizer por chave, a chave que nos permitirá abrir o baú. Bem, eu meio que faço, mas a tecla, qual tecla pressionamos no teclado para abrir o baú? Agora que penso, talvez seja por isso que eles chamaram o Cofre de Chave talvez. E com particular, finalmente, precisamos de um booleano para garantir que possamos abrir. Isso significa que vamos estar nas proximidades disso. E no peito. E por que primeiro de tudo, ela perguntou, por que precisamos do renderizador de sprite torácico e por que precisamos do sprite de tórax aberto? Bem, porque quando abrimos o peito, lá vai você. Quando vemos o sprite, só um segundo. Quando vemos temos dois sprites, um para o fechamento 1, 1 para o aberto. É por isso que precisamos de uma referência ao renderizador sprite para mudar esse brilho quando realmente abrimos o baú. Então, vou adiante e adicionar o sprite de peito aberto, as armas em potencial. Vou acrescentar isso e trancar isso por um segundo aos Prefabs. Pickups, armas V3. Ou mesmo se você quiser, você pode adicionar o útil. Então, talvez você obtenha a ajuda do peito e curto, vamos fazer isso. Vamos adicionar também a saúde apenas por diversão. Oh, tudo bem. Então, é um conjunto do que faz com que o sistema de armas. Então ou desculpe, coleta de armas ou não podemos adicionar os ratos de saúde. Isso algo que eu não percebi. Mas, de qualquer forma, vamos continuar e começar. Precisamos obter uma referência ao renderizador sprite. Portanto, o baú como r é igual ao renderizador de sprite do componente de dívida. Lá vamos nós. Então, agora temos uma referência a ele. E quando realmente abrimos o baú, queremos mudar o sprite para algo diferente. Agora, antes de continuar um, lembro-me da pequena dica que dei no vídeo anterior. Não queremos sempre criar a tag se a tag for o jogador. Então, vamos seguir em frente e criar uma nova camada. Camadas. Oh, ok, então precisamos remover isso. E vamos criar os pickups. Pressione Enter. E agora, onde podemos ir e definir todos esses captadores para funcionar ou todos têm os captadores de camada. Salve isso e agora vá para Editar, desculpe, Editar configurações do projeto. Onde está isso? Física, 2D e os captadores, todos interagem com o jogador. Então, vou desligar tudo, exceto o PLR. Nós salvamos isso, voltamos. Agora vamos nos certificar de que até mesmo o baú, podemos ter certeza de que realmente devemos fazê-lo como o captador também. Então, ele só interage com um jogador e não precisamos verificar a etiqueta toda vez. Então, o que isso também? Então, agora, o que mais precisamos fazer? Bem, precisamos criar uma tela para este baú que tenha algum tipo de palavra aqui ou textos que serão exibidos. Por exemplo, pressione E para abrir o baú ou pressione C ou o que quer que seja. Então, vou clicar com o botão direito do mouse nas armas, basta ir até u i e criar uma tela. Muito bom. Então agora você pode ver que temos uma outra tela enorme. Sobre o que vamos fazer? Obviamente, não queremos que seja tão grande. Então, o que podemos fazer, podemos defini-lo como o espaço mundial aqui. E isso nos permitirá mudar a escala aqui. Então, vou definir a escala para 0,01 no x, 0,01 no y. E vamos mantê-la em 0 ou Z em 1212 fatores. Vou mudar a posição para 0. E você pode ver o quão pequena a tela é agora, este pequeno quadrado aqui. E vou mudar o x e o y para 0. Agora eu clico duas vezes nas armas e lá vai você. Você pode ver que temos a tela aqui. Então agora vou adicionar outro 0 e aqui, e talvez outro também no Y. Ok, isso é muito pequeno. E talvez vamos tentar ficar bem. Isso é demais. Desculpe. E talvez nós apenas façamos em torno de 35 , ok, cinco no y e no x. excelente, então agora temos isso Isso é redefinir sua posição de volta para esses 000, talvez aumente o modelo de altura. E chamaremos isso de Canvas de peito. E, como você pode ver, agora é uma tela muito pequena e precisamos ter certeza de que é espaço mundial e agora se abre. E no peito Canvas, vou seguir em frente e criar um texto Mesh pro. E esse texto muito Pro vai dizer aberto, pressione a tecla, pressione E para abrir o baú e insira um pouco isso. Faça-o em negrito, faça a fonte do robô que temos e faça o tamanho automático. E vamos ver como isso parece. Vou voltar a aumentar o zoom e tornar isso um pouco maior. Onde está a cor do texto? Enquanto o texto de qualquer forma, não consigo vê-lo. Oh, caso. Então, o que precisamos fazer é também precisamos mudar isso para essa camada de classificação. E lá vamos nós, podemos ver que o texto está, e aqui, e eu estava testando isso no 2D. Eu estava me perguntando o que estava errado. E pensei que talvez se estivermos em 3D, eu poderia mudar a posição Z. Mas não, acontece que no próprio Canvas. Tenha isso no espaço mundial. Você pode escolher a camada de classificação e nós a faremos na camada do jogador. E vou me certificar de que isso é ousado, de tamanho automático. E vamos mover o texto um pouco para cima, então é aqui que ele aparecerá. E vou aumentar o tamanho e vamos garantir que o máximo seja maior. Ok, então aumente o máximo o máximo possível e podemos redimensioná-lo para o conteúdo do seu coração. Quanto você quer, quão grande você quer fazer isso? Quão pequeno você quer fazer isso? Ele volta para você. Então, vou configurá-lo aqui, salve isso. Agora, a próxima coisa é que entraremos nas armas, apenas vamos adicionar alguns coliders. O primeiro será um colisor que apenas garantirá que mantemos as coisas intactas. E então certifique-se de que não andamos pelo peito e depois faremos um segundo colisor de caixa. E este será um gatilho. E eu vou mudar seu tamanho para ser quase grande, tão capaz de ser maior que a caixa real. Ou se ficarmos nessa posição, poderemos abrir a caixa. Então, salve tudo isso, certifique-se de que é um gatilho. Agora, o que vamos fazer é lançar um desafio para você. E seu desafio é saber o que está na caixa. Se você conhece essa foto, você sabe disso. Se você não souber a referência, então o problema é seu. Então, de qualquer forma, abriu a caixa sob certas condições. Então, queremos abrir a caixa. Queremos estar pressionando o Iike. Precisamos ter certeza de que queremos estar ao lado da caixa quando a abrirmos. Então, quando não estamos de pé dentro da caixa, não queremos ter a capacidade de abri-la. E também certifique-se de exibir o texto quando estamos ao lado da caixa. Então, precisa ter duas maneiras. Se estamos perto da caixa ou não estamos perto da caixa, estaremos exibindo o texto e poderemos abri-lo se estivermos ao lado dele ou não. Então, a formação de padrões com essas condições em sua mente, pause o vídeo agora mesmo e faça o seguinte. Certo, bem-vindo de volta. Então, vou começar porque já perdemos muito tempo em detalhes e maneiras simples. Estamos no Trigger Enter. Não verificaremos a tag do jogador por enquanto. E vamos nos certificar de que o ponto de texto da chave aberta GameObject pontos estão ativos é verdadeiro. Então, vamos desligá-lo e somente quando estivermos dentro do colisor vamos abri-lo e na saída 3 do gatilho do braço, teremos a mesma coisa e vamos colocá-lo aqui. Em vez de verdade, vai ser falso. Excelente. Agora, o que é a próxima coisa que queremos fazer é ter certeza que podemos abrir e está definido como verdadeiro. E se não estivermos, então set pode abrir. Bem, eu só faço disso um parênteses. Não, pode abrir z igual a verdadeiro e pode abrir é igual a false. Lá vamos nós, salvamos isso. E vamos ter uma atualização aqui. Nós o removemos e vamos apenas depurar. log de pontos pode abrir igual a pode abrir. Lá vamos nós. Nós salvamos isso. Qual é o problema booleano em um objeto. Por algum motivo, acabei esquecer todo o contexto e o mundo. Ok, com isso feito, vamos voltar e verificar. Aqui. Nós executamos o jogo. Temos em nosso console. É falso, falso, falso, falso. Quando entramos na caixa, lá vamos nós, recebemos um erro. Excelente. Por que isso? Porque, obviamente, esquecemos de definir o resultado para baixo, desce o texto. Quão ótimo é isso? O, e também nos esquecemos, espero que alguns de vocês tenham pego esta sonda DTM. E isso não é qualquer texto, é um texto Mesh condicional Gui. Então salve isso, volte aqui e agora devemos ver que adicionamos o texto, salvamos isso, executamos o jogo. Ah, e mais uma coisa, desculpe-me. Precisamos ter certeza de que voltamos o texto. Apenas salve isso. Mais uma vez. Vamos fazer isso um pouco maior. Então nós falsos, falsos, falsos podemos abrir. Então corremos aqui, podemos abrir a verdade. Temos a imprensa Baú E. E, finalmente, o último passo que realmente queremos fazer uma atualização aqui. Vamos remover isso. Sabemos o que funciona. Vamos nos certificar de que, se o ponto de entrada obter a tecla para baixo, abrimos esse código de tecla, o e. Então, quando pressionarmos E e pudermos abrir, então vamos pegar o baú como nosso sprite. E vai ser igual ao aberto. Apenas sprite. Salve isso de volta em nosso jogo. Agora nós executamos o jogo. Estamos ao lado do peito. Se pressionarmos a tecla E aqui, não, não podemos fazer nada se quisermos apenas aqui. Lá vamos nós. Podemos abrir o baú. Quão legal é isso? Então, espero que você tenha gostado deste pequeno tutorial sobre como criar baús. No próximo vídeo será realmente aparecer algumas armas sempre que abrirmos o baú. Então, verei você, então, certifique-se de confirmar suas alterações. E te vejo lá. 66. O o que se Spawn: Bem-vindo de volta, meus colegas desenvolvedores de jogos neste vídeo, quando executamos o jogo são simplesmente não se abre. Ele se abre e nos dá um mapeamento aleatório. Vamos buscá-lo e começamos a filmar. E a melhor parte é que, se continuarmos pressionando o tipo, não teremos mais armas. Você verá por que isso é uma coisa incrível de se fazer. E alguns minutos, então não vamos perder mais tempo. E vamos começar. K. Então agora temos nossa abertura no peito. Na verdade, queremos gerar algum tipo de arma. Então, o que faremos é instanciar uma das armas em potencial. Onde está nas armas bem aqui. Agora, há mais uma coisa que precisamos levar em consideração, e é aí que geramos uma dessas captações. Está no peito imediatamente e o peito é sólido. Então, o que vamos fazer é criar um ponto de spawn de spam, spam, spam aqui. E estamos chamando de ponto de desova. E vamos movê-lo um pouco para baixo. E é aqui que eu posso fazer isso maior. E é aqui que a arma vai surgir para nós e vamos colocá-la aqui. E se você quiser, você também pode adicionar a cada uma dessas armas o captador, a camada D. Acho que é uma boa ideia porque se o jogador estiver bem na frente do peito, nem veremos o que era a arma. Portanto, é uma boa ideia. É muito fácil. Basta adicionar o script. Talvez façamos isso mais tarde. Mas, por enquanto, vamos nos concentrar no que temos. Vamos para as armas apenas e aqui criaremos um campo serializado extra que é de tipo de transformação, e será o ponto de desova. Salve isso de volta em Unity, espere que ele compile e armas só lá vamos nós. O ponto em que agora o que vamos fazer é aqui, queremos criar um número aleatório, ou pelo menos quando pressionamos a tecla criará um número aleatório. E a partir desse número aleatório, instanciaremos um dos potenciais gametas. Então, vou emitir isso para você como um desafio, então você precisará gastar as armas pegando. Aqui. Deveríamos ter pickup. Então, você precisará criar um número aleatório. Você precisará instanciar uma das armas em potencial. E você precisará ter certeza de que está na posição do ponto de desova. Então, com isso dito, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, depois de mudarmos o sprite, vamos criar um int, uma arma aleatória, número de arma, e é igual a alcance aleatório. E o alcance é de 0 ao potencial, comprimento de pontos de armas potenciais. E aqui vamos seguir em frente e instanciar. Instanciar abre o que é o objeto? Serão as armas potenciais na posição, o número da arma aleatória, a posição do ponto de spam e o ponto de spam 0, 0, 1. Salve isso. E agora vamos voltar e ao nosso jogo. Acredito que isso é tudo o que precisamos fazer. Certo, vamos voltar. Vamos fazer isso um pouco maior. Execute o jogo. Fique ao lado do peito, bata o tipo. Lá vamos nós. Quão legal é isso? Agora temos a espingarda, podemos realmente pegá-la e começar a atirar. Agora, há mais uma coisa que precisamos levar em consideração. E então eu posso gerar como dinheiro, armas como eu quiser, é algo que você pode pensar que é bom. Mas, na verdade, não é. Talvez você queira ter isso, talvez você não. E vou te dar a oportunidade de fazer isso por conta própria. Pause o vídeo se quiser. Este não é um desafio oficial. Vou te dar alguns segundos. Pause o vídeo, descubra como podemos parar isso. O tempo K acabou. Então aqui vou adicionar um outro booleano que está aberto. Ele abriu, abriu. E aqui, depois de abrirmos o baú, o foi aberto é igual a verdadeiro. E outra condição aqui, se não tiver sido aberta, salve isso, e eu quero adicioná-la a um outro lugar. E é aqui onde colocamos a Vicky de volta para verdade. Então, aqui vou dizer, desculpe-me, isso é muito. Se não tiver sido aberto, então vamos ativar isso. Salve isso. E se estivermos fora, então vamos defini-lo como false e nunca abriremos uma conta. Portanto, não queremos continuar vendo o texto quando já abrimos esse baú. Então, executamos o jogo. Temos o baú. Nós abrimos isso. Temos a espingarda que tentou abrir outra hora. Não, não podemos se voltarmos, é isso. Não vemos isso porque já abrimos e pegamos nosso aplicativo e filmamos por aí. Temos uma incrível desova de armas, abertura do peito, pegando mecânico que funciona perfeitamente bem. Então, espero que você goste. E se você quiser ter algum desafio extra ao lado, talvez crie algum tipo de animação para o baú, onde possa ser oscilações para a esquerda e para a direita antes de se abrir. Ou eu não sei, talvez adicione algum tipo de animação extra se você tiver que o baú encontrar em si mesmo. Com isso feito, certifique-se de sempre confirmar suas alterações se ainda não o fez, você conhece o drill. Eu me ajuda muito quando você deixa um comentário positivo 1, é claro, uma revisão sobre o curso Atlas, a plataforma. Saiba que eu sou o autor deste curso vale a pena assistir, vale a pena mostrar a outras pessoas e se juntar à discórdia obviamente, se você ainda não o fez, e espero que você tenha gostado desta seção. Foi muito bom. Aprendemos muito. E o próximo, não tenho certeza do que vamos fazer, mas tenho certeza que vamos descobrir isso por eles. Então, não vamos perder mais tempo e vamos para a próxima seção. 67. Seção 11: música e SFX - vamos falar sobre música: Bem-vindo de volta meus colegas desenvolvedores de jogos para uma das partes mais interessantes. Talvez seja um pouco menor quando se trata da duração dos vídeos. Estou no comprimento de toda a seção, mas isso realmente faz uma diferença muito maior em nosso jogo. Então agora, quando executamos o jogo, lá vai você. Você pode ver que temos na música, andamos por aí, atiramos em nossos inimigos. Tentamos matar o esqueleto e, por algum motivo, morremos. Todo meu deus. Oh meu Deus. Quanto você sente a pressão agora que aplicamos campos tão assustadores que morremos. Não só temos a tela preta para você morreu, mas também temos a música mudando sobre nós, que acrescenta uma atmosfera muito assustadora. Ok, talvez não tanto, mas você sente a gravidade da sua morte muito mais agora. Então, sem mais delongas, não vamos perder mais tempo e vamos começar. Ok, então é hora de adicionar um pouco de música e efeitos sonoros. Claro, adoro essa parte do jogo porque é aqui que adicionamos a magia ao jogo, onde o tornamos um pouco mais incrível. Então, a primeira coisa, primeiro, vou entrar nos Prefabs e vou pré-fabricar as armas apenas e vamos adicioná-las ao Sure. Vamos adicioná-lo aos captadores. Por que não? Por que não? Ou objetos de nível, talvez objetos de nível teriam sido um lugar melhor para colocá-lo. Então, vou movê-los para os objetos de nível. Ok, ótimo, tire isso do caminho. Vamos entrar nos ativos. Vamos clicar com o botão direito do mouse aqui e criar um áudio. Apenas tudo o que você clica duas vezes aqui. E vou criar duas pastas, uma para a música e outra para os efeitos sonoros. Basta chamá-lo de f x. Por algum fato, vou entrar nos recursos. E aqui você pode ver que temos essas quatro músicas. Vamos em frente e adicionar todos eles. Não tenho certeza de qual deles vamos usar, então vou adicionar todos eles à música. Espere por isso. Se demorar muito, vou usar a magia de editar 0. E agora vamos entrar nos efeitos sonoros. Então, como raposa, selecionarei todos eles, exceto esses dois. Não sei por que eles ainda estão lá, mas vou adicioná-los até os efeitos sonoros e esperar eles sejam adicionados. Certo, ótimo. Então, vamos clicar duas vezes na música e vamos ver o que temos aqui. Então, se eu clicar na mosca e se eu tentar ligar o volume dele no meu computador, posso ouvi-lo. Ouça uma prévia dele. Certo. Então, obviamente, você pode ouvi-lo. Então, agora o que vamos fazer é tocar essa música e nosso jogo. E é bem simples. Sempre que você quiser tocar música, você pode simplesmente arrastá-la para cá. Lá vamos nós. Você pode ver que agora Vamos tornar isso menor. Você pode ver que eu tenho a mosca aqui. E uma das coisas legais que podemos fazer é simplesmente a partir do jogo agora. E você pode ver que temos uma opção aqui que é jogar em acordado e o loop. Então, vou colocá-lo loop porque não queremos que a música realmente termine quando a música real terminar. Então, agora, quando eu executo o jogo, e obviamente nada está acontecendo. Por que isso? Bem, porque a música não está realmente tocando acordada. Oh, tudo bem. Então, levei cerca três a quatro minutos para descobrir qual é o problema. Eu estava tão confuso e tive o humor do seu próprio. Então agora, quando eu desligo, quando executamos o jogo, lá vamos nós. Você pode ver que começamos a tocar a música. Só vou recusar isso. E como estamos tocando essa música? Quero que preste atenção ao que temos aqui. Usamos algo chamado fonte de áudio. E a fonte de áudio, você pode ver que ela tem um clipe de áudio nele. Então, o clipe que vamos reproduzir uma saída sobre a qual falaremos mais tarde quando adicionarmos um mixer de áudio, temos a prioridade, o volume, a praia e etc. Então, e também temos sons 3D que você pode brincar com. Então, como você pode ver, assim que adicionarmos qualquer tipo de música ao nosso jogo, podemos reproduzi-la imediatamente. Mas, obviamente, não é assim que queremos que as coisas funcionem. Queremos poder controlar tudo isso. Então, aqui podemos ver que temos os vários voos ou vamos tentar o voar e ver como isso soa. Ou a indústria. E acho que vou usar essa mosca e vou chamar isso música de nível e usar a mosca como música da morte. Então música, lá vamos nós. Você pode ver agora que é a música de nível. Ainda é chamado de mosca. E a mosca será o hit da música da morte Enter. E agora temos esses dois sons. Então, antes de entrarmos nos efeitos sonoros, vamos em frente e criar algo chamado Gerenciador de áudio. Então, primeiro vou remover a mosca aqui. Vou clicar com o botão direito do mouse em criar um vazio. E isso será um objeto do jogo. E eu vou chamá-lo de, eu chamo de GameObject seriamente, gerenciador de áudio. Vou redefinir sua posição. Não importa onde esteja, mas vou redefini-lo em qualquer caso. E nos scripts aqui, vou entrar nos gerentes que têm uma pasta para os gerentes. Não, nós não temos. Então, vou clicar com o botão direito do mouse em criar um script C-sharp chamado Gerenciador de áudio. Pressione Enter e clique com o botão direito, crie uma pasta para os gerentes. O que isso não mudou? Gerentes, por favor. Gerente. Então, oh, ok. Já temos uma pasta optima manager excluí-lo. Então, gerentes. Oh, havia uma pasta para os gerentes. Por que não recebi em nenhum caso? Vamos abrir os gerenciadores permitem que o Gerenciador de áudio para o gerenciador de áudio e vamos clicar duas vezes e ver o que vamos fazer aqui. Agora, o AudioManager, algo que vamos chamar muito. Então, vou criar uma instância a partir dela. Portanto, instância pública, estática ou gerenciadora. E vou criar o acordado e a incidência é igual a isso. Ótimo, agora podemos acessar o Gerenciador de áudio sempre que precisarmos. Em segundo lugar, precisamos de uma variável aqui que representará toda a música que terá um campo serializado, o clipe de áudio. Então, por que é clipe de áudio? Porque, como vimos aqui, onde a unidade, quando adicionamos a fonte de áudio que toca nossa música, a música aqui, digamos que adicionemos o nível de música. Você verá que esses são os clipes de áudio, ou precisamos de uma referência aos clipes de áudio reais que vamos reproduzir. Então volte e ouça os clipes de áudio e esta será a nossa música. Só neste caso, faremos a primeira letra da variável maiúscula. E então vamos fazer algumas coisas. Então, o que faremos, como você viu aqui, se ele terminar de compilar qualquer dia agora, você vai se lembrar que quando adicionamos a música à nossa cena, criamos a fonte de áudio. Então, para isso, vamos realmente criar ou adicionar um componente que é a fonte de áudio, mas algo que eu não mencionei, e é assim que realmente ouvimos? Então, obviamente, se você quiser ouvir música, você precisa de ouvidos. Você precisa de um ouvinte. E onde está nosso ouvinte? Embora nosso ouvinte geralmente esteja posicionado na câmera principal, você pode ver aqui, este é um pequeno componente da câmera chamado ouvinte de áudio. E eu posso realmente desativá-lo e você pode ver que ele não tem propriedades. É apenas um ouvinte de áudio. É extremamente simples. Ele está sempre na câmera por padrão, então mantenha-o lá. Funciona. Então, de volta ao Gerenciador de áudio, agora temos uma fonte de áudio nele. E o que faremos como vamos adicionar a música que temos aqui, a morte e o nível. E vamos adicioná-los aqui. E toda vez, por exemplo, começamos um nível. Vamos tocar o nível da música e toda vez que morrermos, removeremos o clipe daqui e adicionaremos as notícias surdas. Então, precisaremos de uma referência à fonte de áudio. Então, fonte de áudio privada, e ela será chamada de fonte de áudio, simplesmente como essa fonte. Lá vamos nós. E agora e começar, vamos obter a referência à fonte de áudio é igual a obter Fonte de áudio do componente. Lá vamos nós. Muito simples. Então, agora vamos criar um método que nos permita ir frente e realmente tocar qualquer tipo de música de nível. Então, o que faremos é entrar aqui e vou criar um vazio público, tocar música de nível. E vou abrir o direito aqui. Esses dois, sempre esqueço o que são chamados. E então aqui vou dizer que a fonte de áudio pontilha o clipe. Assim, você pode ver o clipe de áudio padrão a ser reproduzido aqui. O clipe é igual à música. Abra os dois suportes. E aqui podemos escolher qual música queremos tocar. Então podemos ver aqui que a música, o primeiro elemento é a morte, o segundo é o amor pela música. Então eu vou escolher um aqui, e isso tocará a música. Mas mais uma coisa que precisamos fazer é realmente ir em frente e acessar a fonte de áudio e realmente ir em frente e jogar, salvar isso. Então agora vamos realmente começar a tocar essa música. Vamos salvar isso. E vamos ver o que vamos fazer. Também precisamos ter certeza de que assim que começarmos o jogo aqui, vamos em frente e chamamos o jogador que eu chamo isso de música no nível do jogador. Eu quis dizer música de nível de reprodução. Então jogue nível, música de nível leigo. Salve isso. De volta ao nosso jogo. Então, agora, se olharmos para o Gerenciador de Áudio, você verá que não temos nenhum clipe, mas quando começarmos o jogo, lá vamos nós. Você pode ver que agora temos esse clipe de áudio e podemos correr por aí. Lá vamos nós. Agora, obviamente esta não é a música de jogo mais emocionante. Acredito que você encontrará uma música muito melhor para tocar, mas acho que é boa o suficiente e emocionante o suficiente para brincar e explorar. Então, mas isso fora do caminho, deixe-me parar com isso. E você pode, por exemplo, aqui alterar a prioridade. Então, qual é a prioridade entre essa fonte de áudio e outra? Isso é muito detalhado. Não vamos entrar nisso. Podemos alterar o volume. Então, por exemplo, defina-o em 0,68. Se você acha que a música é muito alta, mude o tom, mude a panorâmica estéreo e assim por diante e assim por diante. Mas agora, por exemplo, quando morremos, se eu brincar e nossa vida é cúbica, deixe-me selecionar a camada e remover esta aqui. Enquanto eles não nos jogam na saúde dos Macs. Vamos defini-lo para 50. Execute o jogo, e agora devemos morrer imediatamente. Então lá vamos nós. Mate-me, por favor. Lá vamos nós, morremos. Mas a música continua piscando. Então, queremos encontrar uma solução para isso. Vou mostrar isso para você como um desafio. Então, seu desafio é jogar o jogo com música. Então procure música para tocar quando o jogador morrer de arte de jogo aberto. E você também pode encontrar muitos outros níveis. E eu não mencionei isso porque eu realmente não me incomodava em passar por muita música. Eu só quero ter certeza de que entendemos o conceito e não realmente vamos e temos muitas músicas e tocamos por aí. Você pode, por exemplo, entrar aqui e em vez de apenas tocar a música, você pode adicionar um número inteiro aqui que representará a música que devemos tocar, por exemplo, e depois tocar essa música e para cada nível temos algum tipo de música que tocamos. Mais tarde, você verá como no Level Manager podemos gerenciar tudo isso. Mas, por enquanto, procure algumas músicas para tocar, especialmente quando o player morrer ou você pode usar a que eu lhe forneci. Crie um método que reproduz o jogo sobre música e chame o método quando morrermos. Então, com essa informação, pause o vídeo agora mesmo e vá para a extremidade rasa. Certo, bem-vindo de volta. Como você conseguiu tudo isso? Então, aqui, vou ir em frente e jogar desculpas, vazio público. Jogue o jogo. Oh meu Deus. Jogo Over. Música. Abra o faça o que eles chamaram. E então, aqui, a fonte de áudio, esse clipe é igual à música 0. E aqui vou dizer à fonte de áudio para reproduzir. Então, salve isso. E há mais uma coisa que precisamos fazer, e precisamos chamar isso sempre que o jogador mordar. Então, se eu for ao manipulador de saúde do jogador, se eu olhar aqui e descobrir onde morremos. Então aqui você pode ver ativar a tela da morte. E dissemos que o jogo se opõe a inativo. E também obtemos o gerenciador de áudio, instância de ponto, ponto, jogo de reprodução sobre música. Salve isso. Back end nosso jogo. E aqui, espere que isso seja compilado. Execute o jogo para fonte de combustível. Agora, quando morremos. Sim, quão legal é isso? Sério? Sério, reserve um momento para apreciar o quão incrível o que acabamos de criar não adiciona mais profundidade ao jogo, não acrescenta mais sensação de medo de realmente morrer. Você se sente, oh meu Deus, acabei de morrer. Isso é tão ruim por causa da leve mudança na música. Nunca senti esse sentimento quando morri anteriormente neste jogo. Agora, o que a música estava mudando com a mudança da atmosfera? Sinto que acabei de destruí-lo porque eu realmente gosto da mudança de música. Espero que você tenha sentido isso também. Espero que você tenha gostado e algo que precisamos ter certeza de que fazemos aqui quando cometemos nossas mudanças. E no dia agora, se você, por favor, pode me mostrar. Então, venha a qualquer dia, vamos ver aqui que temos as mudanças comprometidas que queremos fazer. Mas precisamos nos certificar de ignorar tudo sob todos os seus ativos. Então, se eu ignorar tudo sobre os ativos, tudo FAZER porque não queremos salvar o áudio. Só ocupa muito espaço e não é tão prático. Então agora nós encenamos tudo, comprometemos nossas alterações e criamos e todo o seu gerente que toca música ou toca música e música de nível usando toda a sua fonte. Lá vamos nós, comprometemos nossas alterações. Espero que você goste e eu o vejo no próximo vídeo onde vamos reproduzir os efeitos sonoros, o que é um pouco mais divertido talvez do que a música. Então eu vou te ver. 68. SFX na Unity: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, adicionamos alguns efeitos sonoros. Então, quando executarmos o jogo, você notará agora que, quando atiramos, temos o som do pássaro. Se abrirmos o baú, pegamos um rifle. Temos um som diferente. E se tentarmos quebrar isso, lá vamos nós. Você pode ver que também temos um efeito sonoro para isso. Então, não vamos perder mais tempo e vamos começar. Ok, então agora é hora de tocar alguns efeitos sonoros e fazer com que o jogo ganhe vida ainda mais. Então, o que vamos fazer? A primeira coisa é, obviamente, precisamos uma referência a todos os nossos efeitos sonoros. Então, aqui vou duplicar isso. E em vez de música, vou chamar isso de efeitos em Enter. Opa, não entre. Lá vamos nós. Então agora temos uma referência aos efeitos sonoros. Mas há um problema. Se eu quiser usar o mesmo método que usei para tocar nossa música , nossos efeitos sonoros estarão substituindo nossa música. E isso é um não-não. Não queremos que os efeitos sonoros substituam a música. Isso não é lógico. Então, temos algo diferente que podemos fazer. E esse é um método que é jogar clipe no ponto. E eu recomendo que você abra os recursos da fonte de áudio e veja tudo o que puder encontrar. Então você pode ver que você pode mudar o jogo em acordado, o campo, o MUX usando frio. E este é um curso inteiro sozinho. Se você quiser entrar na Fonte de Áudio, como manipular a música, como manipular diferentes efeitos sonoros e todas essas coisas boas. Mas, por enquanto, vamos nos concentrar no clipe de jogo. No ponto. É assim que você chama. Você precisa de uma posição, um volume se precisar cortar. E você pode ver na descrição que ele reproduz um clipe de áudio em uma determinada posição no espaço mundial. Então, é isso que precisamos. Mas você pode ver aqui que a posição no espaço mundial, bem, onde você acha que é a melhor posição para tocar nossa música? Bem, vou te dizer agora que o melhor lugar para jogar que é exatamente na câmera principal, exatamente no ouvinte. Assim, podemos ouvi-lo da melhor maneira. Como eu clico no 2D aqui, podemos ver que temos esse 3D. E no ouvinte de áudio, se eu tivesse que ver como isso funciona, como eu mostro a você? Talvez no Gerenciador de Áudio, em algum tipo de, bem , ok, por enquanto, eu não vou te mostrar, ou pelo menos podemos ver isso aqui. Então, esse é o alcance em que tocamos nossa música. E por enquanto estamos jogando na fonte de áudio isso, então isso não é ruim. Mas se reproduzirmos o ponto de desligamento do clipe e ele em algum lugar longe do ouvinte, não poderemos ouvi-lo corretamente. É por isso que vamos reproduzir o som na câmera principal. Isso foi fora do caminho? Vamos voltar ao nosso código aqui. E vamos seguir em frente e criar um vazio público, jogar como fax. E desta vez vamos dar a ele um número inteiro que é o número do fax. E aqui vou seguir em frente e abrir os suportes. E vou dizer que a fonte de áudio, reprodução de pontos, clipe, reprodução, todos sabem o real, não a fonte de áudio à qual temos uma referência, mas a fonte de áudio real. Então, aquele que tem o a como capital que joga clipe em um ponto. E aqui vamos dar a ele um efeito sonoro ou um clipe de áudio, que será o número dos efeitos. Ok, então salve isso. E qual é o problema aqui? Bem, obviamente precisamos adicionar a posição e qual é a posição? É a câmera principal. Portanto, lembre-se de que podemos acessar o domínio do ponto da câmera, transformar a posição. E honestamente, não tenho certeza se cobrimos isso. Então, vou dizer que se escrevermos câmera, essa principal, obteremos imediatamente uma referência à câmera principal. E a partir daí podemos usar a transformação dessa posição. Se não cobrimos isso, sinto muito, eu disse: Bem, nós já sabemos, mas talvez já o fizemos. Em qualquer caso, é assim que acessamos a câmera principal. Então agora vamos em frente e tentar quebrar algumas caixas ou não quebrar as caixas realmente tentou quebrar a Roberta. Então, de volta ao nosso jogo, podemos ver que se formos para o quebrável, tão quebrável, ou são as contas a receber? Lá vamos nós No quebrável, se estivermos arrojados, dissemos o gatilho para quebrar. Então, aqui, podemos ligar imediatamente ou podemos ir em frente e criar um método. E digamos, por exemplo, o método será um vazio público. Jogue, quebre como afeta. E aqui, se você quiser. Agora, há dois tipos diferentes de talvez pensar dessa maneira. Se você quiser, podemos ter apenas um som quebrando para todos os nossos quebráveis. Ou se você quiser, você pode ir em frente e criar aqui, por exemplo, um inteiro público ou não público realmente eu serializei campo é algo inteiro manteiga e será o número de fax ASA para jogar, por exemplo. E então você pode escolher qual você joga e você pode enviá-lo aqui. Portanto, acesse a instância de ponto do gerenciador de áudio, reproduza pontos como efeitos e envie para o número de fax para reproduzir. Feche isso. E então, quando entrarmos aqui, depois de acionarmos a animação, podemos ir em frente e jogar break como efeitos. E lá vamos nós. Isso é tudo o que precisamos fazer. Ou, se você quiser, há uma outra maneira e isso é reproduzir os efeitos sonoros usando o evento de animação, se você quiser. Então, se entrarmos no bot em direção ao bot, não, compramos, o quebrável comprado se formos às animações, podemos escolher aqui para ter algum tipo de sistema de eventos. Por exemplo, aqui nós destruímos, podemos jogar isso aqui. Assim que ele quebrar bam aqui, adicionamos este evento de animação. Talvez mova-o um pouco para a esquerda. Reproduzimos o evento de animação. Nós jogamos a pausa como efeitos. E no bot quebrável notará que temos o número de fax que queremos jogar. E se formos ao gerenciador de áudio, ok, então adicionamos os efeitos sonoros ainda. Então clique aqui todos os seus efeitos sonoros, selecione todos esses e arraste-os para os efeitos sonoros. Como você pode ver, temos 12 efeitos sonoros. Uma delas é a garrafa quebra, então é isso que vamos usar. Então, vamos ouvir isso. Ok, então eu acho que isso é bom o suficiente. Uma quebra de garrafa como um surto. Então, qual é a posição no Gerenciador de áudio? É o 0. Então eu vou para o quebrável. Eu defini 0 exatamente. Então, estava esperando por nós. Excelente. E 0, salve isso. Execute o jogo. E devemos ver, opa, lá vamos nós. E você pode um pouco aqui como isso comprou realmente quebrou. Então, com isso fora do caminho, com todas essas maneiras interessantes de reproduzir efeitos sonoros. Vou lhe emitir um desafio. E seu desafio é adicionar todos os efeitos sonoros. Então encontre todos os efeitos sonoros que você precisa para seus jogos. Todo o tiroteio, o sangue, a espingarda, o pistilo, a arma, o que quiser, e chamar o método e todos os lugares apropriados e reproduzir os fatos sonoros tão bem que, fora do caminho, pause o vídeo direito agora. Eu não faria todos esses efeitos sonoros. Só vou a alguns e deixo o resto com você. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá para o desafio. Oh, ok, bem-vindo de volta. Então, o que vou fazer é entrar no sistema de armas. E aqui vou seguir em frente e criar um campo serializado, que será int ou inteiro. E enquanto o quebrável, quebrável, vou usar o mesmo aqui, mesma variável baseada aqui. E vamos criar um público ou público, seja lá o que for, podemos torná-lo privado. Isso não importa. Público anular e jogar. Efeitos sonoros de armas na verdade E aqui vamos acessar o antigo ponto da instância de ponto do gerenciador como efeitos. E vamos enviar para ele o número do fax para jogar, salvá-lo de volta no Unity. Vejamos nosso gerenciador de áudio e o que temos. Então, AudioManager, vamos ver. A pistola tocará o rifle de corrida, tiro de pistola, que é quatro. Então pistola como número de fax para salvar que podemos até mesmo aplicar as alterações na arma da pistola e tudo mais. Aplique as alterações. Agora, se eu entrar nos Prefabs, se eu entrar no lugar onde estamos? Armas? Rifle, e vamos ver o que temos aqui. Então, vou verificar o gerenciador de áudio. O som do rifle é o sete. Então sete, o som da espingarda é a espingarda. 99. Salve isso. E vou deixar nossa música um pouco menos barulhenta. Então, o volume, vamos defini-lo para 0 para executar o jogo. E agora devemos ver que quando atiramos com a pistola, não temos nenhum som por algum motivo, porque obviamente todos, obviamente, esquecemos de chamar isso. Então, aqui depois de instanciarmos a bala, também vai tocar a arma como efeitos. Lá vamos nós, salve isso de volta em nosso jogo. Nós executamos o jogo. E agora, quando nós Quão legal foi isso? Então agora temos uma pistola de verdade sendo baleada. Vamos ver o que entramos aqui. O rifle. Então você pode ver se tentamos filmar porque estamos do outro lado da câmera. Então esta é a câmera principal se estivermos à direita. Quanto mais longe nós vamos embora. Neste último fim de semana aqui os tiros porque estamos jogando na posição da câmera principal e a câmera principal precisa de um pouco de tempo para conversar com o jogador. Então, vamos tentar isso novamente. Talvez tenhamos uma espingarda desta vez. Quão legal é isso? Então agora temos sons para nossas armas. Há muito mais efeitos sonoros que você pode adicionar. Não vou adicionar todos eles. Só vou mantê-lo como está. Mas, por enquanto, vamos em frente e o Prefab, o Gerenciador de áudio. E vamos adicioná-lo aqui ao lado do jogador. Talvez possamos até criar uma pasta para ela por conta própria. Então, espero que você goste. Espero que você esteja cometendo suas mudanças. E verei você no próximo vídeo, onde talvez adicionaremos algum tipo de mixer de áudio. Então, vejo você. 69. Usando mixer: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Como você pode ver, nos tornamos um DJ neste vídeo, temos nossos mixers. Agora, quando executamos o jogo, você notará que podemos brincar com a música, torná-la mais alta, diminuí-la e também podemos controlar o quão alto são os efeitos sonoros. Então, tudo bem, isso mal é. Você pode ver que quando aumentamos o som, podemos ouvi-lo melhor. Quando diminuímos o som, ouvimos menos. Então, não vamos perder mais tempo. E vamos misturar 0 estojo. Então, vamos adicionar o mixer de áudio e misturar as coisas. No entanto, vamos fazer o desafio ou algo assim. De qualquer forma, áudio, mixer de áudio, então Áudio da janela, mixer de áudio. Lá vamos nós. Nós recebemos o mixer de áudio aqui. Vamos vendê-lo na cena. E como você pode ver, esse é algum tipo de objeto. E se olharmos para a fonte de áudio no Gerenciador de áudio, você notará que ela tem um critério de saída e este é um objeto ou um prefab do Gerenciador de Áudio, mas você não viu isso, mas meu Unity falhou depois que eu finalizou o vídeo. Então, há muitas coisas estranhas. Se você vir algo estranho, provavelmente é por causa do acidente. De qualquer forma, mixer de áudio, o que temos aqui? Esta é uma maneira de ler tudo sobre os mixers. Mas, de um modo geral, essa é uma maneira de controlar o som de cada áudio que temos em nosso mundo. Agora, temos a música, temos os efeitos sonoros. Então, vamos criar, primeiro lugar, um mixer. E este mixer será o misturador principal. Simplesmente aperte Enter. Lá vamos nós. Criamos um mixer principal, e você pode ver aqui mesmo nos ativos, criamos um objeto principal do jogo mixer ou o que você quiser chamá-lo, não um objeto de jogo e um controlador de mixer de áudio. Assim como temos um controlador de animador, também temos o controlador do mixer principal. E podemos adicioná-lo aos Prefabs aqui. Então você pode vê-lo claramente. A próxima coisa que temos é que alguns grupos, visualizações e instantâneos não entrarão em detalhes e atenuação e tudo isso. Eu mal sei o que todos esses são. Tudo o que sei que posso criar um grupo aqui sob os mestres e chamá-lo de música. E, em seguida, selecione os mestres. Mais uma vez. Certifique-se de não selecionar a música selecionando mestres. E então crie aqui os fatos ASA. Você pode, por favor, sair do caminho? Lá vamos nós. Então, o efeito sonoro, para que você possa ver o mestre controla tanto a música quanto o efeito sonoro. E então podemos mudar o nível de música e efeitos sonoros como quisermos. Então, se eu entrar no Gerenciador de áudio aqui, você pode ver que posso alterar a saída e escolher um desses dois. Então, como estamos usando essa fonte de áudio 40 música, vou escolher a música. E lá vamos nós. Podemos ver que agora os clipes de áudio que reproduzem usando essa fonte de áudio estarão usando a música. Vamos demonstrar como isso funciona. Então, vou entrar no, onde está? O volume aqui? Vou colocá-lo de volta para um. E agora, quando eu corro o jogo qualquer dia, agora, lá vai você. Você pode ver o quão alto isso é, mas posso reduzir o som nele no modo de reprodução. Lá vai você. Você pode ver que posso reduzir o som usando este mixer aqui. Mesmo torná-lo mais alto do que deveria ser. Portanto, tenha em mente que isso está no modo de reprodução, então, quando eu voltar, preciso alterá-lo. Mas, como você pode ver agora, porque ele é reproduzido através do mixer de áudio do grupo e da música aqui, isso significa que eu posso mudar as coisas e adicioná-las como quiser. Então, vou parar com isso. E lá vamos nós. Você pode ver isso porque ele tinha esse botão vermelho, isso significa que estava gravando e ele o manteve muito baixo, 20 ou o que quer que seja, 28 decibéis. Certo, ótimo, isso é ótimo. Mas agora queremos adicionar efeitos sonoros. Mas como os efeitos sonoros são produzidos? Enquanto se eu executar o jogo, isso é algo que não lidamos no último vídeo. Eu deveria, eu faço uma pausa? Ok, eu não fiz isso mais rápido, nem devo fazer uma pausa. E lá vai você. Você pode ver que isso foi um único tiro, e ele tem a Fonte de Áudio por conta própria e ela é reproduzida, e funciona. Mas não há como acessar a fonte de áudio. Quero dizer, desculpe, a saída desta fonte de áudio, confie em mim, eu tentei muito tentar acessá-la. há absolutamente nenhuma maneira de fazer isso, mas encontrei algum tipo de maneira de contornar isso. Tenho certeza que ninguém fez isso antes. É a primeira vez que vejo isso, mas tentei e funciona. Então, vamos fazer isso. Então, a primeira coisa ou a primeira compreensão que precisamos mudar sobre isso é em vez de apenas ter os clipes de áudio. Vamos convertê-los em objetos de ganho. E então toda vez que atirarmos, vamos instanciar esse objeto de jogo. E então vamos alterar obviamente a saída disso, ou mudar o mixer nesse objeto de jogo que terá a fonte de áudio. Acho que ninguém entendeu nada. Então, vamos demonstrar como isso funciona e você o verá. Então, de volta aos efeitos sonoros. Vou selecionar todos os meus efeitos sonoros. Vou arrastá-los para minha hierarquia. Então agora você pode ver que cada um deles é um objeto de jogo com uma fonte de áudio. Então, o que vou fazer é selecionar todos esses. Então, da quebra da garrafa até a arma equipada e selecione a saída aqui e faça-a sob o mixer principal de efeito sonoro. Então iremos para o pré-fabricado. Clique com o botão direito do mouse, crie uma pasta aqui que serão os efeitos inseridos, abra isso. E então, um por um, faremos todos eles uma preferência. Com licença. Lá vamos nós. Ainda jogador aquele jogador sendo atingido, tiro de rifle, corrida, espingarda, tiro atirador, arma equipada. E agora podemos excluir todos esses e todos nós temos todos eles como objetos do jogo. Vamos tornar o Gerenciador de áudio também um objeto de jogo. Salve isso. E agora devemos mudar a forma como nossos efeitos sonoros são reproduzidos no Gerenciador de áudio. Então, vamos fazer isso. Vou abrir o gerenciador de áudio aqui. E como já estamos usando esse tipo de sistema onde obtemos o parâmetro, podemos mantê-lo como está. Mas em vez de ter esses efeitos sonoros como clipes de áudio, vou mudar isso em uma matriz de objetos de jogo e salvá-lo. Aqui embaixo teremos um erro. Vamos apenas comentar isso, salvar isso. E agora de volta ao Unity, você notará que temos os efeitos sonoros que são objetos do jogo. E vou definir isso como 0 Enter. Então nossa lista está vazia. Vou entrar na pasta de efeitos sonoros, e vou bloquear isso, selecionar todos esses e arrastá-los para o efeito sonoro. Então, como você pode ver, eles ainda têm o mesmo arranjo. Assim, podemos mudar o que quisermos no quebrável, por exemplo, ou na pistola, e tudo permanecerá o mesmo. A implementação do método permanecerá a mesma. Então, agora que temos isso fora do caminho, vamos aplicar nossas mudanças. E vamos voltar ao código e ver o que vamos fazer. Agora, vou te emitir um desafio. Acho que é um sólido oito em cada dez no nível de dificuldade. Então, vou te dar uma pequena dica. Isso não é uma grande dica, ou apenas criar um objeto de jogo privado, que será V como fax. E isso é porque seremos aros. Mais tarde, excluiremos esse objeto do jogo e precisamos de uma referência a ele. Então, vou salvar isso e vou levá-lo ao seu desafio. Seu desafio é instanciar os efeitos sonoros. Então, converta o método reproduzir como Efeitos. Você precisará instanciar o VV. O próprio como efeitos GameObject. Você precisará ter certeza de que o pai é a câmera principal para que ouçamos corretamente. Por que a câmera principal? Bem, obviamente porque dissemos que queremos que o efeito sonoro instancie no ouvinte mais próximo. Você precisa destruir o efeito sonoro após um certo período de tempo. E vamos usar algo chamado invoke. Então, fizemos co-rotinas, ainda não fizemos invocações. E vou mostrar um pouco do que nossos invocam. De qualquer forma, esta é a chamada aqui, que é um comportamento mono. E você pode ver, você pode usar a chamada usando a string de nome do método e usar um tempo de fluxo. E se o horário for definido como 0, isso está no livro. De qualquer forma, para um melhor desempenho, você pode usar corrotinas em vez disso, mas eu só queria mostrar que essa invocação funciona. Você pode ver aqui e o exemplo de como ele funciona. E finalmente, vou te dar uma pequena dica. Use as tábuas do clipe pelo tempo de espera. Então, com essa informação, sei que esse é um dos vídeos mais difíceis. Desafios, quero dizer, se você achar que envolve muito complicado, e até eu tive que fazer isso várias vezes para acertar 100%. Você ainda pode usar corrotinas, está perfeitamente bem. Eu só quero que você saiba ou tenha essa ferramenta em seu próprio arsenal apenas no caso de talvez às vezes você precisar dela. Então, fora do caminho, pause o vídeo agora mesmo e vá para o desafio. Certo, bem-vindo de volta. Como você se deu bem com isso? Espero que não tenha sido muito quente. Então, aqui, o que vamos fazer é antes de tudo, vamos seguir em frente e instanciar. E o que estamos instanciando? Estamos instanciando o FX no número de fax que nos foi enviado. E precisamos escolher o pai. E esse pai vai ser a câmera, mas Maine, e ela será transformada. Portanto, não tenho certeza se alguma vez acessamos o ponto principal da câmera. Talvez o fizéssemos, talvez não tivéssemos. Espero que não tenha sido um desafio muito difícil, mas de qualquer forma. É assim que fazemos isso quando criança da câmera do jogo, você tem a câmera principal. E depois que fizermos isso, vamos criar um método aqui, que será um vazio privado. Destrua como afeta o objeto de ganho. E aqui vamos destruir, mas o que vamos destruir? Você quer destruir esses efeitos sonoros aqui. Então, vou criar um objeto de jogo Via ou não, desculpe, desculpe por isso. Eu quis dizer não criar o objeto do jogo. Eu já o criei. Então v como f x será igual ao objeto do jogo que instanciamos. E vamos destruir os efeitos dos EUA. E isso é tudo o que precisamos fazer. Então temos a invocação. Então invoque ou não, este não é o que precisamos e invocamos, este é o que precisamos. Aqui. Precisamos dar o nome do método, então vou copiar o nome do método. Mas entre essas duas pequenas citações, e então precisamos do tempo e, como eu disse, precisamos usar o tempo do eclipse. Então, como vamos fazer isso? Bem, podemos usar os efeitos. Em seguida, podemos obter o componente nele, que é a fonte de áudio ou a força. E então, a partir daí, podemos acessar o clipe. E usando o clipe, podemos acessar o comprimento desse clipe. Então, vou salvar isso, o que está acontecendo aqui? Primeiro de tudo, estamos instanciando os efeitos sonoros com base no número do efeito sonoro que obtemos. Em seguida, pegamos a câmera ou tornamos uma criança da câmera principal acessando a transformação ensinada principal do ponto da câmera . Acredito que passamos por isso. Só não consigo lembrar onde. Mas, de qualquer forma, tornamos um filho da câmera principal. Por quê? Porque queremos que o som esteja exatamente na câmera principal. Em seguida, invocamos um método que destruirá o efeito sonoro após um certo período de tempo. Porque lembre-se, os objetos uma vez instanciados precisam ser destruídos. E não queremos ter nossa hierarquia cheia efeitos sonoros que não estamos mais usando ou mesmo objetos de jogo que não estamos mais usando. E então criamos este objeto de jogo de efeito sonoro destruir que destrói o efeito de som v que instanciamos aqui. Então, embora a maneira como salve isso de volta no Unity, abra isso, vamos executar o jogo. Salve tudo isso porque tenho medo disso cair novamente. Então, agora, quando executamos o jogo, vamos abrir a câmera. Podemos ver aqui as câmeras principais. Então, quando devemos pausar isso, olhe para isso. Então agora temos o tiro da pistola. Lá vamos nós. Então, vamos continuar. Você pode ver que temos 1234 e todos eles. E você pode ver aparecer nos efeitos sonoros que ele está sendo afetado pelos efeitos sonoros aparecem. Vamos tentar isso. Certo, então temos a mesma arma. Não se preocupe. Vamos tentar isso novamente. Talvez voltemos de novo. Recebemos novamente a pistola, por favor. Posso ter uma espingarda, por favor? Ou um rifle? Isso é bom o suficiente. Então, agora, quando atiramos, lá vai você. Você pode ver que todos os tiros foram instanciados aqui e eles estão sendo jogados. Então, espero que você goste. Espero que você esteja cometendo suas mudanças e eu o vejo no próximo vídeo, pois você pode ver nosso ganho muito melhor agora com efeitos sonoros. Então feito isso, te vejo no próximo. Se você ainda não tem vista da alavanca, eu te vejo. Então. 70. Seção 12: vários tipos de inimigos — tipos diferentes de Entrada: tipos de inimigos (design de jogos) (de jogos): Ei, bem-vindo de volta Meus desenvolvedores de jogos favoritos para um novo vídeo. E este, teremos a introdução e todo o vídeo completamente misturados porque não há necessidade de uma introdução. Não vamos fazer nenhuma codificação, não estaremos fazendo nenhuma unidade, mas estaremos falando um aspecto muito importante no desenvolvimento de jogos e design de jogos. Então, sempre começamos com a criação dos principais recursos ou a mecânica principal. Estes são, por exemplo, a caminhada, o salto, o tiro, a mira, as balas, todas essas coisas, o núcleo, a mecânica central do nosso jogo, estas precisam ser muito bem- polido e é muito importante ter tudo configurado corretamente antes de começar a criar outras coisas, como, por exemplo, as animações ou os inimigos. Por quê? Porque digamos que você tenha algum, eu não sei, é claro que você já passou por isso. Talvez você tenha alguns jogos incríveis com muitos edifícios caindo e eu não sei, muitos inimigos assustadores. O tiroteio é muito ruim. Então, mesmo que seja qual for o tipo de inimigo ou qualquer tipo de, eu não sei, atualize o sistema que você tem. Se o tiroteio for chato, você não quer jogar o jogo. Se andar e correr for chato, você não quer jogar o jogo. Portanto, é importante, antes de tudo, focar nos principais recursos do seu jogo e então você pode começar a criar a segunda coisa mais importante, que são, por exemplo, a, eu não conheço os inimigos, os tipos inimigos que vamos fazer, certo? Ou não, mesmo os tipos inimigos, apenas os inimigos. Essa é a segunda coisa mais importante. Ter inimigos, ter transições de nível, ter Arnaud talvez um bom conjunto de animações, um bom design de nível, por exemplo, estes também são muito importantes. Imagine um nível incrível, mas a caminhada é tão ruim que você não pode se divertir. Portanto, é muito importante começar focando nas coisas mais importantes que são os principais recursos, então você se concentra nas segundas coisas mais importantes, como inimigos, sprites, animações e assim por diante. E então a terceira coisa mais importante para se concentrar, por exemplo, na variedade inimiga. Eu não sei. Talvez o tipo de armas que você tem, a cor das balas, por exemplo, essas são as terceira coisas mais importantes. A iluminação, o que quer que seja. Então, as coisas que tornam o seu jogo um pouco melhor, as pequenas mecânicas que apenas ajustam ou os captadores ou a saúde. Estas são as terceiras coisas mais importantes, os principais recursos, as segundas coisas mais importantes, os recursos externos e o terceiro. Então, já criamos um jogo muito bom. Nós nivelamos a transição, temos uma boa caminhada, temos arrojado. Temos vários e vários inimigos, desculpe, várias armas, várias balas que funcionam diferentes umas das outras. Temos boas animações. Temos as boas transições do rebelde. Já disse transições. De qualquer forma, criamos um jogo muito bom, mas agora é hora de nos concentrar no segundo, terceiro aspectos mais importantes do nosso jogo. E vamos começar com diferentes tipos de inimigos. Então, antes de tudo, teremos o inimigo covarde. Então, atualmente, já temos um tipo de inimigo, que é o esqueleto que apenas fica lá. E assim que a camada passa em um certo intervalo, ele começa a jogar as facas. E se chegarmos muito perto, ele começa a nos perseguir e, se fugirmos , podemos nos afastar. Portanto, esse é um tipo. O segundo tipo é aquele que foge quando o jogador chega perto e começa a fotografar à distância. Então esse, o desafio nesse cara é que tentamos atacá-los. Tentamos atirar neles. Chegamos perto de obter uma chance precisa, mas ele continua fugindo. Então precisamos nos aproximar e o tempo todo ele está atirando flechas. Portanto, é muito chato, o que é um bom tipo de inimigo. E usei os sprites de esqueleto em todos estes porque não sei qual deles vou usar dessas partes que temos. Então temos o Wanderer, que anda por aí em direções aleatórias sem qualquer mira, mas persegue o jogador se ele chegar perto. E tentaremos adicionar algum tipo de ataque malaio. Ou se o jogador estiver na vizinhança ou próximo, este inimigo, ele começará a se machucar. Não vamos nos concentrar muito principalmente porque faremos isso. E na seção de chefes, não vamos adicionar nenhum ataque corpo aos nossos inimigos agora, talvez nós vamos, talvez apenas adicionemos algum tipo de círculo ao redor do inimigo. Se o jogador se aproximar, você começa a se machucar a cada dois segundos. Mas o ataque do mailer será mais um foco para nós. O sistema POS. E finalmente temos o petróleo. E esse cara vai de 1 para o próximo e ataca o jogador se ele chegar perto e se o jogador fugir, então ele volta a patrulhar. Então você viu todos esses tipos de inimigos. Um que foge e depois atira de longe, um que vagueia sem rumo. Mas quando ele vê o jogador, ele corre em sua direção e tenta matá-lo. E então, finalmente, temos um pequeno que apenas patrulha a área, balança de 1 para o próximo que lhe daremos um específico , daremos a ele pontos específicos que ele terá que entrar. E então, quando o jogador chegar perto, ele começará a persegui-lo do jogador pode fugir, então esse cara voltará para sua posição. Então, antes de continuar e lhe dar o desafio, já mostrei os inimigos que lhe forneci os inimigos nos Recursos, você pode ir em frente e encontrar o seu próprio. Obviamente, vou criar todo o conjunto de animação, todos os sprites porque todos já fizemos isso muitas vezes. Então, não quero continuar perdendo tempo e cortando sprites e criando animações. Então, essas são coisas que você deve estar bem equipado até este ponto. Se você ainda encontrar dificuldade neles, volte, assista a alguns vídeos podem ser onde criamos as animações, mas acho que fizemos isso tanto agora que você tem um entendimento bastante sólido, se você quiser, vou passar por um pouco de como os criei tão rápido, como eu configurei os sprites e assim por diante. Mas acredito que seja bem fácil. É como o primeiro inimigo. Quero dizer, talvez eu só o copie e cole e use a mesma mecânica, quase tudo. E com isso dito, vou lançar um desafio antes ir e é hora de pensar. Então. Você está me observando o tempo todo. Você está copiando o que eu faço agora é hora de você pensar. Então. Onde está isso? Ok, Graças a outros movimentos que você gostaria de ter ou adicionar aos seus inimigos, use videogames que você joga. Então, talvez você queira algum tipo de inimigo que talvez desapareça e apareça em outro lugar. Talvez você queira algum tipo de inimigo que se aproxima do jogador e passe por ele e o danifique. Talvez você queira, eu não sei, sinc de coisas. Mesmo que você não saiba como criar essas mecânicas, basta anotá-las. Pense em usar sua imaginação de que tipo de inimigo você gostaria de ter, mesmo que você não saiba como fazer, isso é imperativo. Você pode estar pensando, bem, eu não sei como criar um inimigo que desaparece. Michael, como vou fazer isso? Bem, não pense assim. Pense em eu quero criar um inimigo que desapareça e farei o que for preciso para fazer isso. Mesmo que eu não tenha a informação completa agora, você precisará pensar em ataques diferentes. Você gostaria de ter inimigos. Então, como dissemos, talvez esse inimigo atravesse você e o prejudique. Talvez esse inimigo jogue algo. Talvez esse inimigo salte em cima de você. Talvez esse inimigo, eu não sei o que ele faz. Talvez ele crie algum tipo de terremoto ou algo para você, não seja, use sua imaginação, divirta-se, aproveite. E, finalmente, você pode compartilhá-lo em nosso canal de discórdia. Então, se até este ponto você ainda não sabe, tenha uma discórdia. Talvez você tenha vivido debaixo de uma pedra ou algo assim. Na verdade, temos um canal de discórdia. É uma comunidade incrível, está crescendo, acredito que agora temos quase 200 membros. E quando você assiste a este vídeo, provavelmente é mais de 300. Muitas pessoas estão assistindo. Muitas pessoas não estão apenas fazendo perguntas, mas também tentando ajudar outras pessoas. E é muito importante, confie em mim, quando comecei a criar cursos e responder às pessoas, meu conhecimento da unidade passou pelo teto porque todos os dias eu tenho pessoas me fazendo perguntas que nem eu tenho saiba a resposta para. Então eu pesquisei coisas e criei ou simulo o problema no meu PC e entendo qual é o problema. E a partir disso, pude usar a mecânica e toda a solução de problemas que aprendi respondendo aos alunos para criar um jogo melhor e, em seguida, melhor e ainda melhor a cada vez. Então eu recomendo o canal de discórdia, vá lá, assista algumas das pessoas que são as perguntas não respondidas, fazem perguntas e compartilham seu jogo. Compartilhe o que você gostaria de ter em seu jogo, que tipo de inimigo você gostaria de implementar. Talvez você até encontre amigos lá que o ajudem juntos a criar um jogo. Já somos vistos como três pessoas que fizeram uma equipe lá. E tão incrível. Seus nomes são marcados como brega e algum tipo de BD, eu não sei. Então Mark, Jesus e NVD agora estão trabalhando juntos para criar algum tipo de jogo louco. O quê? Nem tentei me colocar na conversa porque já tenho muita coisa no meu prato. Mas, como você pode ver, é uma comunidade incrível, lugar incrível para aprender. Então, com isso dito, pause o vídeo agora mesmo. Pense, leve pelo menos, pelo menos, dê a si mesmo dez a 15 minutos para apenas anotar as coisas. Divirta-se, aproveite. E com isso dito, te vejo no próximo vídeo. 71. O Enemy: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, como você pode ver, criamos um pequeno demônio voador, mas desta vez ele não é muito corajoso. Ele é um pouco covarde, então ele começa a fugir quando chegamos perto. Então agora eu ando por aí, eu chego perto e como você pode ver, ele começa a fugir e jogando seu cocô em nós, eu acho, ou sujeira ou eu não sei o que é isso. Então, como você pode ver, tentamos atirar nele. Tentamos chegar perto, obviamente suas ações perto da parede, mas você pode ver que quando nos aproximamos de uma direção diferente, ainda seu estoque na parede, mas não se preocupa com isso. Você vê que ele está fugindo de nós. Então, não vamos perder mais tempo e vamos começar. Ok, como você pode ver, eu criei para mais inimigos, o voador covarde, eu, o duende maravilha. Não sei por que se chama Wonder One, mas de qualquer forma, esse é o nome dele. E é claro que temos o esqueleto e finalmente temos o cogumelo patrulhando. Então, vamos usar tudo isso em cada vídeo. E como eu disse, não quero passar pelo processo de fazer isso com você. Tudo o que fiz foi duplicar o esqueleto, mudar o sprite do corpo, mudar o animador, a animação e tudo isso. Eu também me certifiquei de mudar e aqui a animação e assim por diante e assim por diante. Então agora todos eles perseguem e fazem o mesmo. Mas o que vamos fazer é remover o covarde ou o goblin Wanderer, o cogumelo patrulhando e o inimigo esqueleto. E vamos apenas manter o voando covarde eu, e isso é o que usaremos para criar nosso inimigo covarde. Então, sem mais delongas, vamos avançar e abrir o controle. Ah, e a propósito, também criei um projétil para cada um deles. Então, cada um tem seu próprio projétil. Eu também criei isso. Mas de qualquer forma, e vamos abrir o controlador inimigo aqui. E vamos começar com algumas cabras. Então, a primeira coisa que precisamos é que precisamos ir até aqui e precisaremos adicionar um pouco de espaço. E vamos dizer que esses são os inimigos que fugiram e isso significa que fogem. E aqui vou criar dois campos serializados que serão um booleano para o deve fugir. E, em seguida, outro campo serializado para o intervalo de fuga flutuante. Então, alcance R1. E, obviamente, porque queremos ter um certo alcance no qual o inimigo começará a fugir. Agora, há outra coisa que precisamos adicionar porque estamos criando inimigos que devem fugir. Também devemos conhecer os inimigos que deveriam estar perseguindo o jogador. Então, vou novamente criar outro aqui, que será o, ou saber o que aqui em cima criamos algo. E ele fez o atacante dentro da notícia de que ainda o jogador se move em direção, jogador para perseguir o alcance da perseguição do jogador. Ok, então aqui eu vou criar isso e ter os inimigos que jogador de xadrez, inimigos que perseguem a camada. E aqui também vou criar um campo serializado para o booleano. Haverá o jogador de perseguição deve. Lá vamos nós. Então agora temos a opção de escolher um desses dois. E vamos ver o que precisamos fazer antes de continuarmos. Precisamos adicionar isso deve perseguir a condição do jogador. Então, onde o adicionamos? Primeiro de tudo, precisamos adicioná-lo obviamente quando estamos dando velocidade. Então, aqui, atualizamos olhando animando o inimigo se movendo em direção ao jogador. Então lá vamos nós, movendo-se em direção ao jogador. E aqui precisamos ter certeza de que também estamos tendo e devemos perseguir o jogador. Então, aqui temos a direção que é o jogador para perseguir a posição menos a posição atual do inimigo. E então vamos lá e dissemos que o está perseguindo. E aqui, como você pode ver, eu tenho código redundante. Essas duas linhas são exatamente as mesmas. Então, o que vou fazer é criar uma variável aqui, que será chamada, então a distância é um flutuador. Então, vamos criar um flutuador, que será a distância, o jogador da distância, o inimigo. E vai ser igual à distância vetorial, et cetera, et cetera. E em vez dessa longa linha, vou dizer que é o inimigo da camada de distância. Adicione um pouco de espaço. Lá vamos nós. E agora clique duas vezes aqui, copie isso, cole-o aqui é o mesmo, certo? Então, transforme a posição, a posição do ponto de perseguição do jogador , exatamente a mesma. Lá vamos nós. Nós salvamos isso. E também aqui precisamos ter certeza de que ele está perseguindo e é o jogador deve perseguir. Lá vamos nós, salve isso. E com isso feito, vamos continuar e ver o que temos. Agora aqui. Já sabemos o que acontece se deveríamos perseguir o jogador. Mas o que acontece se deveríamos estar fugindo do jogador? Vou criar uma condição if separada aqui, o que vai dizer. Se devêssemos estar fugindo ou devemos fugir. E onde ele termina a distância? O inimigo do jogador é menor que o alcance fugitivo. Então o jogador está no alcance, então vamos criar a direção para avançar. Mas desta vez, em vez de obter a direção do jogador para perseguir a posição para a posição de transformação, o que faremos é definir a posição do ponto de transformação menos o jogador para perseguir o ponto contra jogador para perseguir suas horas, jogador para perseguir a posição do ponto. Então, o que isso fará é criar a mesma direção para se mover, mas da maneira oposta. Então, isso será negativo. Então, em vez de nos movermos em direção ao jogador, vamos nos afastar do jogador. Então, vamos salvar isso. Vamos voltar ao nosso jogo. E vamos ver o que temos aqui. Então, precisamos mudar algumas coisas. Então, precisamos ter certeza de que qualquer dia agora. E a nova atualização da unidade é muito, muito irritante. Não tenho tantos erros, tantas falhas nele. Eu tive muitos acidentes. Assim, você pode baixar uma versão melhor do que a 2020 0.3.15 F2 ou seja lá o que for, certifique-se de fazer isso porque eu não estou gostando dessa versão. Quero dizer, veja como é lento de qualquer maneira, de qualquer maneira. Primeiro de tudo, está perseguindo. Precisamos torná-lo privado porque eu não quero vê-lo o tempo todo. Não precisamos mudá-lo de forma privada. E o macho, o atacante. Agora, porque não vamos implementá-lo nesta área, nesta parte do curso. Vamos removê-lo apenas para que tenhamos um pouco mais de espaço aqui. Então, aqui podemos escolher perseguir o jogador e precisamos ter certeza de que devemos fugir. E qual é o alcance fugitivo? Bem, vou lançar um desafio que saibamos qual é o alcance fugitivo. E isso é criar um círculo azul ao redor do inimigo ou o que eles quiserem. Então encontre os aparelhos OnDraw nele, crie uma condição para o inimigo que deveria estar fugindo. E escolha a cor azul ou qualquer cor que você quiser e desenhe, obviamente uma esfera. E como um desafio extra garante que não desenhemos círculos desnecessários. Portanto, crie também uma condição para o intervalo de perseguição, por exemplo, não queremos vê-lo se não estivermos perseguindo o jogador. Então isso pausa o vídeo agora mesmo e vá ao chat. Certo, bem-vindo de volta. Então eu vou rolar para baixo e ele também principalmente atacante. O atacante estava sendo usado aqui. Certo, não se preocupe com isso. Nós removeremos isso. Ok, então volte aqui na droga é mais. Então, aqui podemos ver que obtemos o alcance da perseguição do jogador. Então, se devemos perseguir o jogador, então vamos, é claro, escolher esses dois e colocá-los dentro do jogador continuar perseguindo. Isso também é algo que deve estar dentro do alcance da perseguição do jogador. Ou quero dizer, no jogador deve perseguir. Lá vamos nós. Se o alcance de tiro estiver bem , para isso, vamos mantê-lo como está. E, finalmente, vamos criar uma declaração if aqui, que diremos que se fugirmos, então vamos obter a cor do ponto dos aparelhos e também será igual à cor. Já estamos usando azul, então vamos usar amarelo, verde, verde. Então lá vamos nós, verde. E vamos copiar esta linha aqui porque é quase a mesma, exceto pelo, do de tiro, o alcance fugitivo. Salve isso. Remova os espaços extras aqui. E agora temos uma maneira medir a distância que vamos fugir com k. então lá vamos nós. Temos o alcance azul, que é o único para o tiro. Certo, ótimo. E então temos o alcance fugitivo. Então, tudo bem, quando o jogador entrar nesse alcance, o inimigo deve começar a fugir. Então isso é executar o jogo. E vamos ver como isso funciona. Então agora estamos no jogo. Chegamos perto do inimigo. Lá vamos nós, você pode ver que ele está fugindo de nós. Se eu tentasse me mover mais rápido, ele começa a se mover. Bem, isso é porque ele é lento. Obviamente, vamos torná-lo um pouco mais rápido porque ele é um inimigo voador. Então, agora, quando eu tentei chegar perto, ele continua fugindo. Então ei, bem, e ele até nos chamou porque enquanto o perseguimos, ele está jogando projéteis. Honesto. E também uma coisa que esqueci de mencionar, mudei a posição cinco. Não, é o mesmo lugar. Vou fazer isso em cima da cabeça dele ou talvez, quer saber, vamos mantê-lo onde estava. Acho que isso foi bom. De qualquer forma, espero que você goste. Espero que você tenha entendido o que está acontecendo aqui porque onde está? Certo? Então, se devemos fugir, em vez de, temos a posição do jogador e maior que a posição transformada. Ou pelo menos não, não apenas maior na outra direção. Se optarmos por remover a posição de transformação do jogador para perseguir a posição, obtemos um positivo, então estamos nos movendo em direção ao jogador. Se removermos nossa posição da posição do jogador, então estamos nos afastando do jogador. Então, com isso feito, espero que você goste. E no próximo vídeo estaremos criando o andarilho. Então, vejo você. E não se esqueça, é claro, confirmar suas alterações todas as vezes. 72. O Wanderer: Bem-vindo de volta meus colegas desenvolvedores de jogos honestamente, um dos melhores vídeos que eu já fiz porque essa é uma das poucas vezes em que algo acontece. Temos um bug no jogo, mas na verdade é muito melhor do que o que foi originalmente pretendido. Então, é incrível. Você verá o que quero dizer durante o vídeo. Mas, por enquanto, vamos executar o jogo. E você verá que eu criei esse pequeno duende. Então esse Goblin só anda aleatoriamente. Então você pode ver que ele caminha por algum ponto, ele pára, ele então se afasta. Ele pára. E se chegarmos perto o suficiente, você pode ver que ele começa a perseguir e atirar bombas que estão jogando bombas em nós. Olha, como é legal que se nos afastarmos dele, lá vamos nós. Você pode ver que ele continua andando por aí até voltarmos e alcance. E então ele começa a nos perseguir como um maldito lunático era naquela noite. Sério, tenho tanta sorte de ter essa forma brilhante. Eles são tão legais. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então agora temos um inimigo covarde. Hora de adicionar o maravilhoso. Então, vou entrar em meus inimigos e nos prefabs. E aqui vou adicionar o patrulhamento, não, o covalente. Lá vamos nós. Então, adicionamos o goblin. Vamos remover o cartão ou você sabe o quê? Vamos desligar a mosca atualmente. Talvez nós os adicionemos mais tarde. E então vamos verificar os duendes. Então olhe para o governo. Quão legal ele é? Então ele corre por aí, atira nas pessoas. Não sei com o que sei o que ele faz. Na verdade, ele só acho que ele joga uma bomba ou algo assim. Mas, de qualquer forma, ele vai ser um maravilhoso. Então, vamos e ele é chamado de duende maravilha. Então, vamos fazer dele o goblin maravilha, aplicar as mudanças. Certo, então o nome ainda é o mesmo. De qualquer forma, vamos abrir nossos scripts e vamos ver o que vamos fazer aqui. Então eu vou subir e aqui vou criar os inimigos que se maravilham e Chase. Ou vamos chamá-lo de inimigos que se perguntam. Então, aqui vou criar um campo serializado. E vai ser um booleano. E vai ser, deve se perguntar, imaginar, imaginar , é um, foi, Oh, não, eu só vou ficar com um. Então, me pergunto, me pergunto. E então vou criar um campo serializado para dois carros alegóricos. O primeiro será o comprimento do Wonder. Então, quanto tempo ele se pergunta? Maravilha. Vou dizer como eu quiser. E então temos o comprimento do pulso. Então, por quanto tempo ele fez pausa antes de começar a vagar de novo? E então vou criar obviamente duas coisas porque parece que é óbvio que estamos usando contadores aqui. Então, vou criar um balcão flutuante e vagar privado. E depois o contador falso. A propósito, algo que acredito que não mencionei no vídeo anterior e no modo de jogo. Desliguei tudo relacionado à música, então me certifiquei de que o áudio da música esteja desligado apenas por motivos de teste. Não queremos continuar tendo música de fundo e quatro para meus vizinhos obviamente para mantê-los são nos próximos meses até que eu terminei de gravar e novas formas de volta aqui. Não preciso dos policiais novamente privados. E, finalmente, precisamos obviamente obter a direção maravilha. Aqui vamos ter a direção para avançar e será a direção da Maravilha. Ainda inserimos, mas iremos. E então vamos verificar. E então, à medida que estamos removendo do contador Wonder, vamos verificar se, em algum momento o contador de maravilhas se torna menor ou igual a 0. Em seguida, vamos definir algo chamado contador de pausa. E este contador de pausa não será apenas um contador de postagens. Vamos criar um intervalo de pontos aleatório. E esse aleatório.randrange terá o contador pos vezes 0,75 F, e o contador vezes 1,25. Então você pode estar se perguntando, por que estamos fazendo isso? Bem, porque queremos ter uma maneira muito aleatória de colocar nosso ganho, ou desculpa, não passar nosso jogo de pausar o inimigo. Então ele vai esperar um momento muito diferente toda vez antes de começar a se mover. Isso adicionará mais variedade à forma como ele se move. E depois de verificarmos aqui, então verificamos se o contador maravilha removeria dele. Definimos a direção. Agora, na verdade, é hora decidir em qual direção iremos. Então, aqui vou verificar se o contador do chefe ainda é maior que 0. O contador pos é maior que 0. Obviamente, a primeira coisa que vamos fazer é remover do contador de postagens, então tempo delta de ponto de tempo. E então vamos verificar se o contador de pulsos em qualquer ponto se torna menor ou igual a 0. Então aqui vamos fazer duas coisas. A primeira coisa é que vamos escolher o contador passado. E, em vez disso, vamos definir o contador de maravilhas. E vai ser o OK, desculpe, não é o contador de pausa, é o comprimento da pausa. Então, pause o comprimento. Comprimento da pausa, desculpe por isso. E aqui, em vez do contador pos, vamos definir o comprimento da maravilha. E o comprimento da maravilha. Então isso era um, algo que eu não sabia disso, desculpe-me por isso. Mas aqui não queremos apenas definir o contador, também queremos definir a direção da maravilha. E esse será o seu desafio. Seu desafio é dar ao andarilho um aleatório, não terminar um aleatório. Então, depois de redefinir o contador, precisamos de uma nova direção maravilha. Você precisará definir a direção da maravilha como um novo vetor 3. Você precisará definir o x e o y deve ser números aleatórios. Certifique-se de manter o z como está ou melhor ainda, você deve vendê-lo como 0. Finalmente, uma dica para fazer o intervalo entre menos 1,551. E isso acabou de ver que o inimigo não vagueia muito longe. Então, para essa informação, pause o vídeo agora mesmo e vá fazer o caldeu. Certo, bem-vindo de volta. Como você se deu bem com isso? Então, depois de definir o contador de maravilhas, vamos definir a direção da maravilha. E a direção maravilha, obviamente , como um fator três, você pode vê-la aqui. Então, vamos criar um novo vetor 3 e vamos abrir. Agora, obviamente, o eixo zed deve permanecer o mesmo. Então, vamos definir um intervalo de pontos aleatório e ele será menos 1, f menos 1,551. Então vamos definir este para o x, este para o y. E, finalmente, temos zeros no final. Então, vamos dar uma olhada no que está acontecendo aqui. Primeiro de tudo, começamos, verificamos, se nos perguntarmos se sim, então vamos verificar como o contador de maravilhas maior que 0, então continuamos no qual continuamos removendo o tempo dele. Definimos a direção porque, obviamente, estamos nos perguntando, só queremos definir a direção imediatamente. E então continuamos removendo, fazendo esse loop, fazendo esse loop, fazendo esse loop. Obviamente, neste momento, o contador pos deve ser 0. Mas quando o contador de maravilhas é menor que 0, o contador passado obtém um valor aleatório. E então conseguimos que essa condição seja verdadeira, e esta será falsa. Então começamos aqui, começamos a remover do contador pos até que em 1, obtemos um contador pos que é menor que 0. Definimos um contador de maravilha aleatório e, ao mesmo tempo, definimos uma direção maravilha. Nós paramos essa declaração if. Voltamos aqui e novamente começamos a remover. Temos uma nova direção maravilha que determinamos aqui durante o passado. E continuamos removendo até novamente, o contador de maravilhas é menor que 0, um novo contador de postagens. Começamos este e continuamos fazendo tudo isso. Mas há uma coisa que você precisa considerar e é que precisamos iniciar do chefe ou o contador de maravilhas. Então, para cima e comece. Vou criar uma condição aqui. E se nos perguntarmos, lembro que essa era a condição. Deveria se perguntar. Se devemos vagar, então precisamos definir um contador pos, que é igual a um intervalo de pontos aleatório entre o comprimento do chefe vezes 0,75 e, em seguida, o comprimento do chefe vezes 1,25. Lá vamos nós. Então, é praticamente o mesmo que temos aqui. Aqui em cima. Inicializamos o contador do chefe. Ele espera ou o inimigo espera um pouco. Então ele percebe, oh, eu preciso começar a me mudar para cá, enquanto isso aqui. Então inicializamos algum valor, começamos a partir dele. Quando chega a menos de 0, começamos toda a cadeia aqui e ele começa a perseguir, quero dizer, desculpe, vagando. E há algo porque queríamos adicionar a perseguição ao inimigo. Primeiro, vamos ver se isso realmente funciona e depois adicionaremos a perseguição. Então, de volta ao nosso jogo. Vamos ver o que temos aqui. Então, o duende se perguntando, vamos antes de tudo definir tudo. Então, vamos manter isso deve perseguir. E então o azul é para o projétil. Então, talvez eu vou tornar o campo de tiro um pouco menor. E então o tempo entre os tiros, vamos mantê-lo como está. Deve fugir. Não, deve vagar. Sim. Comprimento da maravilha. Quanto tempo ele vagou por aí? Por 1 segundo. Quanto tempo ele faz uma pausa? Quer saber, vamos manter dois. E para salvar isso, execute o jogo. E vamos ver como isso parece. Então, vou chegar lá, mas perto dele. Lá vamos nós. Você pode ver que ele acabou de ir em alguma direção aleatória. E lá vai você. Você pode ver que a cada dois segundos ele anda por aí. Lá, ele pára por aí. Vamos ver. E então você pode ver que não é um inimigo muito inteligente, obviamente. Às vezes ele anda e duas paredes. Ele fica preso lá. Certo, então ele está correndo atrás de nós. Lá vai você. Ele está ao alcance. Faz a filmagem, está amadurecendo. Certo. Então oh, lá vamos nós. Então ele está atirando quando ele é arranjado. Quão legal é isso? Agora, a próxima coisa que queremos acrescentar é que se entrarmos nas proximidades deste inimigo, queremos que ele comece não apenas a babar e nós, mas na verdade correndo em nossa direção porque ele tem uma bomba, é pesado. Ele precisa se aproximar para jogar em nós. Isso é algo que acabei de inventar. Então, como vamos fazer isso? O problema aqui é que nós somos nós temos a condição para a perseguição, todos, temos a condição para a errante. Então, se eu voltar aqui e eu apenas disse o, onde está? Onde está o carinha aqui? O goblin maravilha, então deve perseguir o jogador, então teremos o alcance da perseguição do jogador. Lá vamos nós. Então é um pouco, talvez seja assim e continue perseguindo. Certo, claro, vamos fazer aleatoriamente assim. Estranho. Vamos ver o que acontece quando ele realmente começa a nos perseguir. E lá vamos nós. Vamos ver como isso funcionaria. Então eu me aproximo dele. E como você pode ver, cada perseguição é cada. Certo, então ele está perseguindo, depois indo de novo e vagando. Então, se eu ficar aqui, você pode ver que é meio mecânico, mas ao mesmo tempo ele pára em algum lugar. E o que, na verdade, estou muito surpreso, a propósito, o movimento dele é realmente louco e incrível. Então você pode ver que ele continua perseguindo. Em algum momento, ele só começa a vagar novamente. Então eu amo a aleatoriedade nisso, mas só por uma questão de entender como eu queria fazer o jogo ou como minha ideia do que eu queria fazer é ele se pergunta. Mas quando o jogador está no alcance perseguindo, então ele começa a perseguir e deixa de se perguntar. Então, vamos ver como isso ficará. Então, de volta aqui, você pode ver que quando começamos a perseguir, dissemos que o está perseguindo para verdade. Então, aqui, devemos verificar duas coisas. Se deveríamos estar nos perguntando e onde está? E não estamos perseguindo, então ele não está perseguindo. Então, de volta aqui, corremos o jogo e agora você notará que ele vai estar se perguntando. Então, estamos fora do alcance da perseguição. Ele vagueia por aí, ele vagueia por aí, Hopi segue no meu caminho. Então, obviamente, você pode ver que a imunidade aleatória não é tão boa. Então você pode ver que estamos ao alcance e lá vamos nós. Você pode ver que ele está nos perseguindo. Ele não está mais apenas se perguntando, ele continuará nos perseguindo até ficarmos um pouco longe. E lá vamos nós. Você pode ver que ele continua vagando por aí. Agora, honestamente, eu amo como ele estava indo entre vagar e perseguir e seu movimento foi muito errático e ele não tinha certeza do que está acontecendo. Eu adorei. Se você quiser, você pode mantê-lo assim. E se nada se você gostaria do jeito que ele estava apenas pausando, nos perseguindo e quando escaparmos, ele continua vagando. Então, ser meu convidado depende de você. E como você pode ver, às vezes você apenas inventa coisas e pequenos insetos no jogo, faz as partes interessantes do jogo. Espero que você goste. Espero que você esteja cometendo suas mudanças. Espero que você tenha adorado um comentário. Isso me ajudou muito. Então, se você ainda não tiver, não hesite, negrito pode rever, isso realmente me ajuda muito. Se não, verei você no próximo vídeo em que estaremos criando o último inimigo que é uma patrulha profunda ou assim. Vejo você então. 73. O Patroller: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste vídeo vamos criar um cogumelo patrulhando. Então, agora, quando maximizarmos o jogo e correr o jogo, você notará que se andarmos por aí, descobrimos que este cogumelo começa a nos perseguir e fugimos, apenas começa a andar de 1 para o próximo, você sente como se ele tivesse um predeterminou-nos que ele vai entrar. Então, como você pode ver, ele caminha de 1 para o próximo. Continua olhando para nós o que esses olhos assustadores e assustadores. E se chegarmos perto, ele começa a nos perseguir e atirar com sua pequena caixa vermelha. Então, não vamos perder mais tempo e vamos começar. Oh, estojo vendido, hora do último inimigo. E temos o andarilho de Copeland. Temos o voador covarde I. E agora é hora de apresentar o cogumelo rolando. Ok, então o que a patrulha no cogumelo faz enquanto o cogumelo patrulhante realmente tem alguns pontos que ele caminha de e para. Então, adicionaremos alguns pontos. Então ele se mudou de 1 para o próximo, para o próximo, para o próximo para o próximo, para o próximo e assim por diante. E como ele faz isso, se o jogador chegar perto, começamos a persegui-lo. Então, e se o jogador entrar no alcance com o alcance do tiro, sem entrar no alcance da perseguição, também começamos a atirar. Então, vamos começar. A primeira coisa que vamos fazer é entrar aqui e vamos adicionar outra parte. Então isso é para os inimigos que patrulham. E aqui, em primeiro lugar, obviamente vamos criar sempre um booleano e dizer que ele deve patrulhar, deve patrulhar. Não sei por que esqueci onde está o P S no teclado. De qualquer forma. Em seguida, continuamos com um campo serializado, que é a transformação. E é uma série de pontos de patrulha. Lá vamos nós. E, finalmente, vamos criar uma variável para acompanhar o atual ponto de patrulha. Então, ponto de patrulha atual ou pontos ou não sei, é apenas um ponto porque é um número inteiro privado. Certo, ótimo. Agora, se rolarmos para baixo aqui onde estamos perseguindo, onde estamos nos perguntando, onde estamos fugindo. Também precisamos verificar se estamos patrulhando. Então, vou mostrar isso para você como um desafio e seu desafio é apontar e a direção certa. Então, antes de tudo, verifique se devemos patrulhar. Isso é muito fácil. Então você precisará determinar a direção que o inimigo deve estar se movendo. E então é da mesma forma que acabamos com o inimigo perseguindo. Então você precisará da posição do ponto e, em seguida, remova dele ou subtraia dele a posição do inimigo real. Mas então, como você vai saber quando chegou a este ponto? Enquanto você precisará acompanhar a distância entre o inimigo e o ponto em que ele está indo. E se ele estiver fechado em torno de uma festa inferior 0,2 F, aumente o ponto de patrulha para que o inimigo continue andando. Então eu espero que você entenda o que eu quis dizer nas proximidades aumentar o ponto de patrulha. Vamos começar em um determinado ponto de patrulha e, em seguida, continuaremos aumentando, estabelecendo um novo ponto de patrulha usando o atual ponto de patrulha que criamos. Se você acha que o último em que aumentamos o ponto como um pouco difícil demais para você, então não se preocupe. Pelo menos tentou fazer os três primeiros. Eu conheço o último como eu um pouco difícil, mas se você se sentir bem, vá para o caldeu. Certo, bem-vindo de volta. Esse foi um dos desafios mais difíceis que conheço. Eu admito. Então, aqui vamos criar se deveríamos patrulhar. Enquanto isso, então, vamos definir a direção para avançar. E será igual aos pontos de patrulha no atual ponto de patrulha. Mas posição menos a transformação da posição atual do ponto inimigo. E então vamos seguir em frente e criar um, ou saber o que, vamos apenas mantê-lo aqui. A distância de 3 pontos do vetor, é a distância entre a transformação dessa posição e a posição do ponto de patrulha. Copie isso, cole-os aqui. Então agora temos a distância, e se essa distância for menor que 0, então precisamos, antes de tudo, então chamaremos isso de vetor de três nano, na verdade, desculpe, desculpe, é um flutuador. E a distância e o ponto me são iguais à distância do vetor 3. Então, se o ponto inimigo de distância for menor que 0,2 F, então está muito próximo. Não queremos ter exatamente 0. Queremos começar a passar para o próximo ponto. Assim que chegarmos ao primeiro, vamos aumentar o atual ponto de patrulha em um. E então vamos verificar se estamos no último ponto de patrulha atual ou quero dizer, se o ponto neutro atual for maior do que os pontos de patrulha, pontos de patrulha comprimento do ponto, então vamos defina o ponto de patrulha atual de volta para 0. Então, você sabe, quando temos apenas uma única linha sob a condição if, então podemos simplesmente colocá-la assim, salvar isso. Então, o que está acontecendo aqui? Nós verificamos, devemos patrulhar? Sim, claro, obtemos a direção que é o ponto de patrulha da posição menos transformação. Então nós, assim como perseguimos o jogador, acompanhamos a distância. Quando essa distância é menor que 0,2, aumentamos o ponto de patrulha. Isso significa que novamente iniciamos a atualização até aqui. Isso aumenta em um, obtemos um novo ponto de patrulha. Eles se transformam, a posição é removida , conseguimos a distância, verificamos, é então quando chegamos à última, começamos a voltar a primeira. Então, salvamos isso e vamos configurar tudo. Então, vou entrar, onde está? Aqui? Espere o roteiro compilar, e esse cara é um arrastão. Então, deve patrulhar. Agora vamos em frente e criar alguns pontos. Agora, isso é uma questão de debate. O que eu gosto de fazer é ter os pontos de patrulha aqui. Portanto, clique com o botão direito E por que é um ponto de debate? Embora principalmente porque você quer ter para cada nível seus próprios pontos de patrulha. Então, por exemplo, você poderia criá-lo dentro da sala. Então você tem a porta, os inimigos e os pontos de patrulha, ou você pode simplesmente adicioná-los ao inimigo patrulhamento real. E então toda vez que você o coloca em um novo nível, você de repente patrulha aponta você mesmo. Isso depende de você. Vou chamar isso de patrulha DV, desculpe, pontos de controle. E então eu vou criar um objeto de jogo vazio aqui. Este será o primeiro ponto de controle. Então, patrulha 0. E por que estou adicionando esses suportes? Bem, porque agora quando eu duplique este, eu tenho aquele imediatamente dentro deles. Então esse é um truque muito legal. Coloque-o aqui. Envie o segundo aqui. Terceiro aqui, este aqui, este aqui, este aqui, este aqui. E lá vamos nós. Acho que são pontos suficientes para hoje. Então lá vamos nós. Começamos 12345678 e depois voltamos no início. E agora vou para o inimigo patrulhante. Vou prendê-lo. Vou me certificar de saber antes de aplicar as alterações, deixe-me definir tudo nos Pontos Petro, salve isso. Aplique as alterações, execute o jogo. E eu não quero maximizar porque eu quero CV, eu realmente quero olhar aqui. Então execute o jogo. Vamos ver como isso parece. Então lá vai você. Ele começa a andar. E ele continua andando. Garota. Então, não fazer nada muito inteligente. Isso porque acho que devemos acompanhar o ponto atual. Então, vou tornar isso público apenas por alguns segundos para que saibamos o que está acontecendo. Então C, execute o jogo e estamos em 0. Ele vai para, deveria ir para o 0, que é onde está? Eu posso ver, oh, ei, então há um problema e qual é o problema que você pode estar perguntando? Bem, o problema óbvio, há o seu ponto de patrulha, certo? Se eu mover o inimigo. Então isso é algo muito desajeitado para mim. O ponto de Patrulha se move com o inimigo. Por quê? Porque o inimigo agora é pai dos pontos de patrulha. Então, meu traseiro inteligente vai colocá-lo dentro dos quartos. Sim. Prefabs abertos. Não queremos mais isso. Certo. Então agora você vai me fazer muitas coisas, certo? Então clique com o botão direito do mouse prefab, descompacte Agora podemos mover isso para os quartos e agora podemos oh, esperar um segundo. Patrulhamento. Certo. Então, desempacotamos pontos de patrulhamento, colocamos eles para a sala. Desculpe por esses caras. Isso foi um grande erro. Acho que esse erro não deve ser perdoado. Sério, isso não seria perdoado. Então agora vamos, onde está, o inimigo patrulhante? Se você puder ver aqui, se clicarmos duas vezes nele, o pré-fabricado tem isso. Então, o que faremos é apagar o cogumelo patrulhante e depois criar o nosso próprio novamente. Então lá vamos nós. Então, agora, quando executamos o jogo, devemos ver um sistema de patrulhamento muito melhor. Lá vamos nós. Você pode ver que ele vai para o primeiro assim que ele chegar lá, lá vamos nós. Quando ele vai para o próximo ponto onde toda a patrulha aponta o segundo, o terceiro. Agora até este ponto e olhe, assim que ele chega lá, ele começou a ir para o último ponto, ele atira flechas. Estamos no caminho. Ele tenta nos empurrar, mas estamos presos no que quer que seja. Então eu me afasto. Obviamente, este não é o inimigo mais inteligente do mundo, então ele estará entrando em coisas que você precisa para se certificar de colocar os pontos de patrulha de maneiras que ele não encontrará objetos ou obstáculos sólidos. Então, como você pode ver, ele anda por aí, atira em nós, e ele caminhou por seu ponto de patrulha apropriado. Agora, obviamente, você notará thir, algo que esses picos estão renderizando sobre o inimigo, que é algo que não queremos. É por isso que o tempo todo eu estava definindo todos os objetos do jogo como a saúde, como os picos na camada do jogador, isso foi muito errado. Devemos colocá-los em um objeto de nível. É muito fácil consertar mais tarde. Mas só para você saber, isso não é algo que queremos qualquer maneira com isso, fora do caminho, vamos voltar aqui. E uma coisa que queremos fazer é exatamente como tínhamos para o inimigo errante. Queremos também estar perseguindo o jogador. Então, aqui, e se não estamos perseguindo, e se não estamos perseguindo, patrulhamos. E aqui nós perseguimos o jogador. Deve perseguir o jogador. Qual o que estamos selecionando? Desculpe, então patrulhando cogumelo deve perseguir o jogador. E isso também é o que era o amarelo 10? Então o amarelo era continuar perseguindo o jogador. Tão vermelho, amarelo. E vamos ver, vamos salvar isso. Vamos executar o jogo que tentou tê-lo JSON. Então, vamos aumentar a janela do jogo. Então, andamos por aí. Estamos ao lado dele. Lá vamos nós. Você pode ver que ele começa a nos perseguir e atirar as bolinhas em nós. Por algum motivo, eles não estão filmando corretamente. Sinto que algo está definitivamente errado com as bolas. Talvez. Eu não sei. Eu vejo. Sim, sim. Claro que há algo definitivamente errado com as bolas. Então, mesmo que quando saímos do alcance, ele continue patrulhando, então quando estamos perto, ele atira em nós. Então, obviamente, há um problema com a posição do fogo. Acho que está atingindo a cabeça do inimigo. Está interagindo com ele. Não sei qual é o problema, mas, por enquanto, isso é algo que precisaremos ajustar extremamente rápido. Então eu não sei, talvez tenhamos um problema aqui. Mas o principal aqui é que queríamos criar a mecânica do petróleo. Com isso, espero que você goste, espero que você tenha se divertido criando diferentes tipos de inimigos. Agora, nosso ganho está realmente tomando forma. Como você pode ver, temos a mecânica central agora. Temos vários inimigos que se movem de maneiras diferentes. E, obviamente, jogos como esses que são tão incríveis e divertidos precisam de algo chamado menu principal, menu de pausa e transições entre eles. Então é isso que podemos estar fazendo na próxima seção. Isso fora do caminho, espero que você goste. Certifique-se de confirmar suas alterações e eu o verei na próxima. 74. Seção 13: sistema de compra e dinheiro - criando dinheiro (Bitcoin) - Criação dinheiro (Bitcoin): Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, criamos dinheiro, então vamos começar. Quando eu executo o jogo. Você pode ver que eu tenho 0 Bitcoins. Se eu acertar o GKE, tenho 20, 40 , 60 e também posso removê-los do meu inventário. Não é nada muito especial. Não há nada para o vídeo de refrigerantes, exceto pelo símbolo realmente bonito aqui do gerenciador de jogos. Então, não vamos perder mais tempo e vamos criar dinheiro. Oh k. Então agora temos inimigos, agora temos armas, tudo está pronto. É hora de dinheiro sonoro. Precisamos ganhar algum dinheiro. Então, e eu acredito no último vídeo, eu disse que vamos criar menus. Desculpe por essa honestidade. Na verdade, não me lembro do que temos. Acabei de ir de um vídeo para o outro. Obviamente, o tempo todo eu sei o que estou fazendo. Obviamente, sei para onde estamos indo. Mas, de qualquer forma, vamos continuar. Temos o gerente de nível e é aqui que queremos acompanhar o dinheiro que temos. Então, antes de tudo, vamos criar uma variável aqui que será um campo serializado, e será um fim das moedas atuais. Ok, então aqui é onde teremos nossas moedas atuais. E agora é seu trabalho criar dois métodos para obter e gastar os Bitcoins. Então, você criará dois métodos. Um que acrescenta, eu deveria mudar isso, você sabe o que, deixe-me verificar ou nenhum elétron mudará isso para Bitcoin. Então, crie dois métodos. Uma que adiciona moedas de bits, uma que remove os Bitcoins. Em seguida, cada um deve tomar um parâmetro para o valor. Certifique-se de que nunca tenhamos quantias negativas de dinheiro porque isso é muito ruim. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá fazer o desafio. Certo, bem-vindo de volta. Então, em vez de moedas atuais, vou chamar isso de moedas de bits atuais. E se você não gosta de Bitcoin, bem, você deve experimentá-lo de qualquer maneira. Não estou tentando colocar nada na sua cabeça. Vamos continuar. Vamos nos concentrar no principal. Agora, algo aqui que você pode querer considerar. Então, é ótimo. Temos Gerente de Nível que toma, cuida de todo o nível. Mas quando se trata da quantidade de dinheiro que carregamos conosco, acho melhor tê-lo em algo chamado gerenciador de jogos que é apenas para o futuro. Não é problema. Você pode criá-lo no gerenciador de níveis. Ele faz a funcionalidade, mas o gerenciador de níveis parece que ele só lida com o nível atual em que estamos. Quando se trata da mente que temos, ele deve estar em torno de todo o jogo. Assim que você começar o jogo, a cada nível você coleciona mais moedas, você vai para o próximo nível e depois adiciona a isso. Então, o gerente de nível é um pouco estranho. Não sei, talvez devêssemos movê-lo para um gerenciador de jogos. Quer saber, vamos movê-lo para um gerenciador de jogos. Eu me convenci. Então, aqui, vou clicar com o botão direito do mouse. Crie um gerenciador de jogos vazio, pressione Enter. Vamos redefinir a posição. E aqui, o gerente vai criar um script C-sharp quatro para o gerenciador de jogos no Enter. E é exatamente por isso que eu queria criar um gerenciador de jogos apenas para mostrar esse símbolo estranho por algum motivo, nenhum outro script muda, exceto este. Este tem esse botão estranho nele. Não sei o porquê. Não me pergunte por quê. Ainda não tenho certeza. Mas, de qualquer forma, agora o gerenciador de jogos tem o script do gerenciador de jogos. E enquanto estivermos aqui, temos o gerenciador de níveis, temos o gerenciador de jogos, também temos o Gerenciador de áudio. Lá vamos nós, o Gerenciador de áudio. Então, vou clicar com o botão direito do mouse para criar um vazio. Os gerentes pressionam Enter. Vou redefinir sua posição para que o gerenciador de jogos, gerenciador de níveis e o onde está? Audiomanager. Lá vamos nós. Então agora temos uma lista de todos os gerentes. E nos prefabs, vamos prefabricar o nível e o gerenciador de jogos. Então, temos onde o AudioManager está salvo? Eu acho que ele está nos prefabs onde z. ok, então AudioManager, seu próprio Albany, gerentes de pastas, AudioManager, gerente de nível, e o gerente de jogo. Ok, com isso fora do caminho, vamos abrir o script novamente. Enquanto o gerente de nível, vamos pegar os Bitcoins daqui e movê-los para o gerenciador de jogos. E então vamos seguir em frente e criar dois métodos aqui. Vou manter o início e a atualização. Tenho a sensação de que podemos usá-los mais tarde. Então, aqui, em primeiro lugar, o vazio público, obviamente tem que ser público porque vamos ser. Chamando-o de diferentes scripts. Então, vazio público obtém bitcoins. E aqui o valor a ser obtido. Então, abrimos os colchetes ou linhas rasgadas ou o que quer que seja. E o Bitcoins atual mais é igual ao valor a ser obtido. E se você quiser, podemos defini-lo para 21 milhões, mas vamos mantê-lo como infinito. Podemos obter quantos quisermos. E então vamos criar o vazio público, gastar moedas, bitcoins. E este será um número inteiro de quantia para gastar. E aqui vamos pegar as moedas atuais, desculpe-me, retirar as moedas atuais delas, o valor a gastar. E, finalmente, vamos verificar se as moedas atuais são menores ou iguais a 0, do que as moedas atuais serão. moedas atuais serão definidas como 0. Salve isso. E agora vamos criar um pequeno Peston perto. Então, se inserir e colocar ponto, pegue a tecla para baixo, casaco gene G, então keycode. Então quero dizer, se, GET, então pegue bitcoins e digamos que recebamos 25 ou 20. Então, se o mesmo aqui. Mas em vez de um G, usamos o gasto H, H, mas moedas. E quantos gastamos? Digamos que 10. Então, recebemos 20, gastamos dez. E, finalmente, vamos criar uma depuração. Oh, esquecemos essa depuração. Eu tenho Bitcoins atuais mais igual a bitcoins. E, obviamente, estaremos configurando tudo isso na interface do usuário, mas por enquanto economizamos, entramos no nosso jogo. Acho que está tudo bem. Então, configuramos tudo. As moedas atuais sempre começarão em 0. Então, começamos o jogo. Lá vamos nós. Eu tenho 0 Bitcoins, então vou pegar, pegar, pegar, chegar, lá vai você. E então vou gastar, gastar, gastar, gastar, gastar, mas gastar, gastar, e como você pode ver, não podemos ir menos de 10 Sempre que tentei gastar 10 porque só tenho 10. E isso é algo que precisaremos ter em mente se for menor ou igual, se definirmos para menor ou igual que 0. Na verdade, acho que é uma boa ideia. Então agora podemos realmente gastar o que temos problema aqui, é isso, ok, desculpe. Foi assim que dissemos o menor ou igual. Portanto, há algo que precisaremos ter em mente e que sempre que estamos gastando, precisamos ter essas moedas conosco. Mas isso é algo que acredito que será tratado mais tarde pelo roteiro Sharp. Então, aqui, vamos ver, eu gasto, gasto, gasto, gasto. Certo, isso ainda não está funcionando. Ei, bem-vindo de volta. Então, foi algo muito simples. Quando temos o colapso aqui, você pode ver que começamos em 0, 20, 40 e et cetera. Mas quando começo a gastar, quando chego a 0, ele já está aqui, então não aparece. E as mensagens que posso mostrar se removermos o colapso. Portanto, cada linha não é maximizada no jogo, por favor. Se eu clicar aqui, agora você pode ver que quando eu acertar o gigi, gigi, 120, vender, vender, vender, vender, vender, vender, vender. Lá vamos nós. Tudo está funcionando. Portanto, não foi por causa do menor ou igual, era na verdade nossa incapacidade de vê-lo. Então, espero que você goste. Certifique-se de confirmar suas alterações. E eu vou te ver no próximo vídeo, onde vamos realmente pegar os bitcoins e não apenas adicioná-los usando teclas mágicas no teclado. Então, vejo você. 75. Como coletar Bitcoin: Bem-vindo de volta Meus desenvolvedores de jogos favoritos para um novo vídeo e este, em vez de apenas adicionar os pontos à nossa camada ou ao nosso gerenciador de jogos, nós realmente temos essa moeda aqui. E como você pode ver, ele gira. É muito legal. E se você ouvir quando pegamos, há uma pequena explosão. Por que uma explosão? Porque eu não tomei tempo para realmente encontrar algum efeito sonoro para pegar a moeda. Então, com isso do caminho, não vamos perder mais tempo e vamos começar. Oh, tudo bem. Então, é hora de começar a pegar o dinheiro que criamos. Então, vou limpar tudo isso. Vou abrir o script e remover o que temos aqui para a BBC ou o que quer que ele esteja exibindo e adicionando usando o teclado. Então, de volta aqui para compilar. E nos sprites aqui, vou criar uma nova pasta para as moedas. Clique duas vezes, abra isso e vou entrar nos recursos aqui. E como você pode ver, temos a moeda rotativa, a moeda pisca e a moeda brilha. Então escolha o que você quiser. Quero girar porque gosto de ver as moedas girarem. Então, neste final, aqui se abre. Vamos ver como eles se parecem. Moedas muito boas, mas sinto que elas podem estar um pouco fora de lugar com os gráficos 2D que temos, mas não se preocupe, estamos usando ativos gratuitos da arte de jogos abertos. Então lá vamos nós. Nós adicionamos isso aqui. Esta será uma moeda enorme. Prepare-se para o enorme Coyne. Whoa, eu nunca pensei, eu realmente não sabia que essa moeda seria tão grande. Então, vamos torná-lo um pouco menor. Ainda mais. Então 400, vamos ver. Podemos, a propósito, você tornar o dimensionamento um pouco menor, mas eu gosto de alterar os pixels por unidade. E mesmo isso, vamos fazer 800. Então, fazemos duas vezes menores do que o que quer que seja agora. Isso ainda é enorme. E vamos fazer isso 1600. Então, vamos lá, por favor. Precisávamos de um pouco menor. Oh meu Deus. Eu não esperaria esse valor. 3500 sério, isso deve ser muito pequeno agora. Certo, ótimo. Então eu acho que esta moeda, lá vamos nós. Então esta é uma pequena moeda que vai girar e podemos pegá-la. E, na verdade, você sabe o que, talvez faça 3000. E lá vamos nós, aplicamos as alterações. Vamos fazer isso apontar. Point, e não precisamos fazer múltiplos. Lá vamos nós, salve isso. Agora este será o caso Bitcoin 0. Então, agora o que vamos fazer é entrar na animação e criar uma animação. Portanto, as animações de um ativo clique com o botão direito do mouse em Nova Pasta, girando um Bitcoin, clique duas vezes aqui e gire. É isso. Tudo o que precisamos fazer. Um arrastar estes n e isso mesmo. Certo, isso é muito rápido. Vamos separá-los um pouco. Então, a cada ponto, lá vamos nós, acho que esta é uma rotação boa o suficiente. Então, e por algum motivo, sinto que é um pouco irritante, mas não se preocupe. Agora vamos seguir em frente e adicionar um novo script aqui. Então, vou entrar nos roteiros e adorar os pickups. Clique com o botão direito do mouse e crie um novo script C-sharp, que vai ser o caminho e pegar uma moeda. Atenda. Lá vamos nós. Então agora temos a coleta de moedas. Vamos fazer isso menor. Lá vamos nós. Então adicionado ao Bitcoin e vamos abri-lo e Visual Studio. Então, se eu for pegar a coleta de saúde, é praticamente o mesmo. Então, onde está? Onde está a coleta de saúde? Então, isso é praticamente o mesmo. Só vou copiar o código. Vou colá-lo aqui. E as únicas coisas que vão mudar, como por exemplo, o valor da moeda que você receberá dessa moeda, então eu vou mantê-la nelas. E talvez também o pego, o que vai ser bom e pegá-lo. E k pode ser escolhido método. Ok, então o captador, a camada. Isso é obviamente algo que também vamos adicionar à moeda porque mais tarde vamos querer talvez quebrar um frasco ou matar um inimigo. E então queremos ter um pouco de atraso. Então, a qualquer momento, vamos tornar isso menor no componente as camadas ou pegar a camada. Lá vamos nós. O tempo antes da coleta é 0,5, o que é bom o suficiente para nós. E então aqui, o que mais precisamos fazer? Destruímos o objeto do jogo. Nós, em vez de adicionar HP, vamos remover isso. E vamos nos certificar aqui, também podemos remover que o jogador irá configurá-lo na camada de coleta. Então, pickups. E lembre-se de que paramos de usar a camada, camada. Quero dizer, desculpe, a tag do jogador para pegar as coisas. E aqui nós dissemos que a pickup é verdade, então não pegamos duas vezes. E aqui devemos realmente aumentar a quantidade de moedas que temos e isso vai ser um desafio. Você. Então adicione a moeda e reproduzindo um efeito sonoro. Então, antes de tudo, crie o gerenciador de níveis e adicione as moedas a ele. Dicey criar, eu quis dizer pegar o gerente de nível e as moedas para ele e tocar os efeitos sonoros quando pegamos as moedas, você pode escolher qualquer som que a fratura seja. Talvez você possa até ir e pegar o seu próprio, encontrar alguns se eu lhe fornecesse um para que fora do caminho, pause o vídeo agora mesmo e vá para o desafio. Certo, bem-vindo de volta. Então, aqui vamos pegar o gerenciador de níveis, ou desculpamos, não o gerenciador de níveis, o gerenciador de jogos, mas o gerenciador de jogos não é uma instância. Então, aqui vamos criar um Game Manager estático público. Podemos encontrar o objeto, isso é algo que poderíamos ter feito, mas como talvez vamos acessar várias vezes, acredito que ter uma instância é melhor. Então, aqui, vou arrumar o acordado e a instância é igual a isso. Salve isso. Vamos remover o início e a atualização por enquanto. Se precisarmos deles, vamos criá-los mais tarde. Salve isso de volta na coleta. Jogo. Gerente. Instância de pontos, pontue, adicione moedas ou obtenha moedas, obtenha bitcoins. E quanto queremos? É o valor da moeda. Salve isso e agora queremos reproduzir o áudio. Então, AudioManager, você gerencia a instância que é reproduzida como fax e qual efeito sonoro queremos reproduzir? Poderíamos criá-lo aqui. Sim, claro, vamos fazer isso. Então, a caixa de areia para jogar. Lá vamos nós. Como fax para jogar, salve isso. E de volta ao nosso jogo. Vamos ver o que temos aqui. E o Gerenciador de áudio, onde está o Gerenciador de áudio? E o que temos a explosão, rifles inimigos, espingardas, jogador digitador sendo atingido, tiro de pistola, explosão. Vamos adicionar a Explosão. Claro. Por que não? Porque não consigo encontrar nenhuma coleta comum. Você pode adicionar o que quiser. Só precisa de algum tipo de metal. Na verdade, acho que adicionei algo aqui, mas não adicionamos. De qualquer forma, vamos usar a explosão apenas por diversão. De qualquer forma, elemento dois. Então os dois salvam isso, executam o jogo. E agora, quando chegamos à moeda, não devemos ouvir nada porque aqui, não, não há erro lá. Ok? Não. Mas nem sequer se destruiu. Portanto, há um problema. E obtenha o componente. camada de coleta não foi retirada. Vamos ver, porque isso deve ser simples. Vamos esperar por isso talvez cronômetro 0.5. Não, não está funcionando de forma alguma. Então, vamos ver qual é o problema. 0, ok, volte. Então, criamos um On Trigger Enter. Tudo bem, mas não temos um gatilho para acionar isso. Então, precisamos adicionar um colisor de caixa ou um colisor circular 2D e torná-lo um gatilho. Então, o colisor de círculo, acredito, é extremamente enorme. Não, onde está? Embora esteja exatamente na moeda, isso é excelente. Salve isso, execute o jogo. Agora devemos dessilenciar a música. E você podia ouvir um som fraco da explosão em segundo plano. Eu conseguia ouvi-lo. Espero que você possa ter ouvido isso. Vamos para os prefabs, vamos para os pickups e dissemos o Bitcoin aqui. Então, espero que você goste. Certifique-se de confirmar suas alterações, certifique-se de deixar um comentário. Isso me ajudou muito e te vejo no próximo vídeo. 76. Exibindo a UI no nosso tela: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos neste vídeo, em vez de sempre ter que procurar no console a depuração ou procurar o objeto do gerenciador de jogos para saber quantas moedas temos. Na verdade, criamos a tela da interface do usuário para registrar todos os Bitcoins que temos. Então, como você pode ver, temos 0 agora, mas se pegarmos uma moeda, conseguimos isso. Então, não vamos perder mais tempo e vamos começar neste vídeo realmente simples. Oh, ok, então agora é hora de realmente exibir os Bitcoins que pegamos em nossa tela de interface do usuário. Então, vou tornar a cena um pouco maior. Vou encontrar o Canvas e aqui em algum lugar. Portanto, clique duas vezes na tela da interface do usuário. Vamos abri-lo. Vamos ver o que temos e clicar em Exibir tela da interface do usuário para que possamos ver tudo. Temos a saúde da interface do usuário da arma, e vamos prosseguir e criar um novo jogo vazio. Não, não, desculpe, não na saúde na tela da interface do usuário crie um objeto de jogo vazio. E essas serão as moedas ou o que quer que seja. Mas o rastreador de moedas, eu não sei, com milho ocorre. Lá vamos nós. Então, rastreador Bitcoin, e aqui vamos adicionar a UI e a imagem, e isso representará a imagem, a imagem. Lá vamos nós. E vai ser, deixe-me olhar através dos sprites. Sprites os tornam menores. Lá vamos nós, as moedas, enquanto a moeda que acabei de ver, moedas, moedas de estrela. E vamos adicionar as metas de terapia de imagem no sprite. Podemos definir o tamanho nativo. Lá vamos nós. Acho que é bom o suficiente. Nós colocamos aqui ao lado de você pode colocá-lo onde quiser, obviamente, como eu sempre digo, mas eu vou colocá-lo aqui mesmo. E então eu vou criar uma outra interface do usuário aqui. Oh, desculpe por isso. Não deveríamos ter colocado a imagem. Deixe-me apenas definir a imagem. bug de posição moverá o objeto inteiro em apenas um pouco. E vou criar texto muito profissional aqui. E, obviamente, vou fazer isso, digamos 99, 99, negrito, e mudar a fonte nele, torná-lo aquele com o robô pensando, vou mover todo esse objeto aqui. Vou mover a imagem um pouco para a esquerda. Lá vamos nós. E então o texto um pouco à direita. E essa será a quantidade de texto BDC. E vamos mantê-lo no meu 99 só para representar tudo. E vamos colocá-lo no meio no alinhamento e configurá-lo para tamanho automático, aumentando o máximo. E deixe-me mudar o texto um pouco. Lá vamos nós. Isso parece bom. Eu acho. Sim, isso parece bom na minha opinião. Então, temos o número aqui exibido acima da saúde e toda vez que pegamos, devemos obter isso. Ok, ótimo, então vou salvar isso. Vou entrar na tela da interface do usuário e vou abrir o UI Manager. Então, aqui, obviamente, precisaremos de uma referência. Portanto, a primeira referência será um campo serializado do texto do tipo. O que era texto Mesh Procore, tributado mash Pro GUI. Você eu concordo. Certo, é isso. E o texto BTC. Salve isso. Certo, então vamos voltar aqui. Vamos obter uma referência a este dia. Agora. Lá vamos nós. E vamos aplicar as alterações na tela da interface do usuário para que ela seja aplicada em todos os lugares. Certo, ótimo. Agora, de volta ao nosso lado aqui, o que vamos fazer? Bem, obviamente, toda vez que pegamos uma moeda ou começamos de novo, ou gastamos o ponto, queremos que ela seja exibida aqui na tela da interface do usuário. E esse será seu desafio definir o valor da moeda e atualizar todas as vezes. Então, crie um método que atualize o texto da moeda e o UI Manager, defina-o no início para que não precisemos saber onde está o começo, onde o vendemos? E também certifique-se de que toda vez que adicionarmos ou removemos moedas para atualizá-las na tela da interface do usuário. Então, fora do caminho, pause o vídeo agora mesmo e vá fazer o caldeu. Certo, bem-vindo de volta. Então, no UI Manager, enquanto o UI Manager, e vamos rolar para baixo e aqui vamos criar um vazio público, Atualizar texto Bitcoin. E aqui tudo o que vou fazer é acessar o texto, o texto, o texto do PTC. E será igual ao inteiro aqui, que é a quantidade de BDC. E será igual à quantidade de BTC. Lá vamos nós. Portanto, isso não funciona porque você não pode converter em string. Então, vou adicionar a corda de ponto dois. Salve isso. Então isso é um truque. Talvez você não soubesse como fazer isso. Há outras maneiras de contornar isso, mas essa é uma maneira que eu vou te mostrar por enquanto. Então, de volta ao gerenciador de jogos, assim que começamos. Então, no começo ou você sabe o quê? Enquanto tivermos o acordado, vamos vendê-lo no acordado. Mas o problema com o despertar é que ele pode começar antes de termos uma instância do UI Manager. Então, para isso, vamos fazer isso e começar por enquanto. É um pouco mais seguro. Ui Manager, instância ponto, atualização de pontos, textos Bitcoin, e serão os Bitcoins atuais. E então, quando obtivermos os Bitcoins, também vamos atualizar isso e o gasto depois vendê-lo porque não queremos ter negativo, então não vamos vendê-lo aqui. Dissemos isso depois de verificar se temos menos de 0 e depois fazemos 0. Então, salve isso. De volta ao nosso jogo. Vamos executar o jogo. Vamos fazer isso um pouco maior. Então execute o jogo, devemos ver 0 aqui porque não temos nenhuma moeda. Lá vamos nós. Temos 0. E agora, quando pegamos isso, por favor, mude o áudio. Quando pegamos isso, devemos ver que temos dez. Excelente. Então agora podemos pegar nossas moedas e, claro, também podemos gastá-las. Não temos a oportunidade de gastá-los, mas daqui a pouco começaremos a criar lojas e é aí que poderemos gastá-las. Então, com isso fora do caminho, não sei por que continuo dizendo essa mistura para cometer todas as suas alterações. Espero que você esteja gostando e eu o vejo no próximo vídeo, onde aprenderemos como podemos realmente ganhar nossos bitcoins e não apenas pegá-los do chão. Então, vejo você. 77. Como ganhar Bitcoin: Ei, bem-vindo de volta a um novo vídeo, meus desenvolvedores de jogos favoritos. Este será muito curto porque acho que já sabemos como fazer essas coisas. Então, vou te dar um desafio virtual. Não há slides, não há tempo. Basta pausar o vídeo e pensar em como podemos realmente ganhar esses Bitcoins. Certo, o tempo acabou. E agora que você pensou nisso, onde deveríamos estar fazendo isso? Bem, deveríamos fazer isso sempre que matarmos um inimigo. Então, vou ligar o duende errante. Aqui, estamos ocupados. Então ligue o goblin errante, ligue o covarde voando e os cogumelos patrulhando. Então agora temos uma tonelada de inimigos e nosso jogo voando por aí e tentando aula. Espero que peguemos o rifle. E como vamos fazer isso? Bem, se você se lembra, cada um dos inimigos tem o conta-gotas de item aqui. E você pode ver que temos um item drop que é a metade. Então, o que podemos fazer, podemos adicionar um aqui e fazer o Bitcoin. E outro mecânico legal é que podemos criar os dois ou adicionar dois bitcoins ou até três bitcoins e 1,5 de volta. E isso tornará o jogo um pouco mais realista porque, como você sabe, sempre que você não é realista, talvez difícil. Eu materialista por jogos realistas. Portanto, nosso ganho se tornará mais verde, mais aterrado. Então nós, enquanto você joga um jogo, você sabe, por exemplo, você passa por salas ou mata inimigos, mas nem todos eles lhe dão saúde. A maioria deles não. Então, o que você precisa fazer é que você precisa matar muito e tentar sobreviver máximo possível até obter um bot de saúde, enganar o dinheiro, bem, você ganha muito dinheiro. Então, adicionamos mais bitcoins. E se você se lembrar, se entrarmos no item Docker, você verá aqui que criamos uma variável inteira aleatória e o usamos para obter um dos itens de trabalho. Então, quando você adiciona mais bitcoins, você tem uma chance melhor de pegar um pouco quieto. Então, o que aconteceu em anos? Então, o voador covarde, vamos adicionar o bitcoin. É isso? Então, estou adicionando o que já está aqui. Não acho que seja uma boa ideia. Deixe-me adicionar o prefab e as estatísticas. Então vou para o nível Prefabs, não balas inimigas. Prefabs, onde estão os pickups? Então aqui é voltar para o aqui mesmo, e em vez disso usaremos o Bitcoin, isso é o preferido. Eu não acho que isso fará muita diferença, mas só para garantir que não façamos algo estúpido. E vamos adicionar o Bitcoin aqui. Adicionamos 24, o patrulhamento, temos uma chance de 5050. Então, quando reunimos patrulhamento inimigo, temos chance efetiva. Nós salvamos tudo isso. Nós executamos o jogo e esperamos que possamos ver, não, não a espingarda. Quero o rifle. Faça as coisas mais rápidas. Vamos lá. Mais uma vez. Vamos jogar. Vamos lá. Rifle ligou, vamos. Dê-me esse comando. Vamos tentar. Honestamente, não quero o rifle. Quero dizer, eu quero o rifle. Poderia pensar que este vídeo é pouco conhecido da pistola. Por favor, venha. Rifle, rifle, rifle, rifle. Lá vamos nós. Então agora vou atirar a vida desses duendes. Então, como você pode ver, quão legal é isso. Então, a vida que temos uma vida, não conseguimos o Bitcoin que queríamos. Mais uma vez, vamos tentar matar isso. Ok, então novamente, temos uma vida por algum motivo, ou nossa sorte é extremamente ruim ou fizemos algo errado. Então, vamos ver o que fizemos de errado. Então, temos o Bitcoin aqui, a chance de trabalho como 1, 0. Certo, bem-vindo de volta. Então, por algum motivo, acabei de jogar isso, testei mais algumas vezes e o tempo todo sempre tivemos com o console. Eu não sei. Acho que nossa sorte foi tão ruim assim. Deixe-me retirar a pistola daqui. E também vamos remover a espingarda. Eu só quero pegar rifle, executar o jogo. Deixe-me pegar o rifle. E agora devemos ver isso quando eu matar esse carinha aqui. Certo, então lá vamos nós. Nós pegamos Bitcoin, pegamos, recebemos dez. E você já notou que nosso ganho é realmente muito difícil. Então eu tenho que andar por esse cara e eu tenho que matá-lo e ver como ele foge rápido e lá vamos nós em outra moeda. E então vamos para casa e pegamos outra moeda. Lá vamos nós. Então agora temos 30 moedas. Agora, outra coisa que também podemos fazer para ganhar isso é, onde está, Onde está o pote quebrável? Você pode ver aqui que podemos adicionar alguns desses . Lá vamos nós. Não, adicione um par de Bitcoin para que tenhamos uma chance melhor e vamos aplicar essas mudanças. Como eu aplico as alterações, não sei se elas afetaram. Não deveria ter afetado, mas acho que talvez a quebremos. Lá vamos nós, nós conseguimos isso. Vamos tentar quebrá-lo novamente. Devemos obter o Bitcoin. Então, por algum motivo, quando adicionamos um novo oh, lá vamos nós. E então pegamos e conseguimos isso. Então, espero que você goste. Certifique-se de confirmar suas alterações, mesmo que não tenhamos feito nada. Não é necessário confirmar suas alterações desta vez. Divirta-se, divirta-se toda vez e te vejo no próximo vídeo. 78. Itens de loja: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E este, não fazemos nada muito extravagante. Criamos uma nova cena. Temos uma cena de compras agora e, como você pode ver, temos três itens aqui. Eles são muito idênticos. Eles não fazem nada de especial, mas esta é apenas a configuração para o próximo vídeo em que começaremos a criar coisas. Então, não vamos perder mais tempo e vamos começar. Ok, então agora é hora de criar uma loja. E para criar uma loja, eu queria torná-la uma cena separada por conta própria. Dessa forma, somos inspirados no jogo Hades. Podemos ir de uma cena para o próximo gueto, uma loja, fazer compras lá e crescer para as outras cenas. Então, o que vou fazer é duplicar o nível dois. E agora temos o nível três e vou chamar isso de loja, posso chamar isso de nível de loja ou cena da loja ou o que quer que seja. Então, vou clicar duas vezes e você pode ver que, mesmo que seja o mesmo, mas estamos na loja agora, aqui em cima na hierarquia. Então, vou antes de tudo apagar o Bitcoin, apagar a arma, ela os captadores de saúde soltou o quebrável comprado e vamos abrir a sala e vamos seguir em frente e excluir todos os inimigos. Eu só vou removê-los daqui e apenas manter este quarto como está. Acredito que faremos disso um pré-fabricado e poderemos adicioná-lo a qualquer sala que quisermos. Mas, de qualquer forma, mais tarde vamos pensar sobre isso. Mas, por enquanto, vamos apenas excluir todos os inimigos e fazer com que isso manterá a camada, manterá o portal obviamente porque queremos sair da loja mais tarde. E vou clicar com o botão direito do mouse aqui e criar um objeto de jogo vazio, que será o item da loja. E vamos começar com a saúde. Lá vamos nós. Então, vamos ter principalmente três itens de loja para focar agora. Onde obtemos saúde 14, o upgrade de saúde, e queremos comprar algum tipo de arma, uma mulher aleatória, eu acho. Então. Vamos definir esses três. Então, vamos ter um aqui, um aqui e outro aqui. Vamos começar com o mais simples, que é o item afiado regular. Vou adicionar um componente aqui que será um sprite. Ou saiba o que, talvez queiramos ir no PS, saber o que, vamos apenas adicionar um sprite por enquanto. Então, um renderizador sprite. E nós vamos nos sprites no, Onde está? Oh, então pickups. E lá vamos nós. Esta é a saúde. E vou apenas adicionar o sprite aqui. E vamos colocá-lo na camada do jogador, mesmo que tenhamos dito que não faremos mais isso. Mas, de qualquer forma, vamos continuar. Então, obviamente, vamos adicionar um box collider 2D, e isso será um gatilho. Então, enquanto é um gatilho, vamos ver o tamanho e, obviamente queremos torná-lo muito maior. Assim, o jogador pode entrar aqui. E teremos, por exemplo, quando declarar etapas nas proximidades deste item de compra, ele receberá uma mensagem aparecer. Também adicionaremos uma tela e apenas um pouco onde ele lerá. Você pode comprar este item, por exemplo, uma saúde ou reabastecer sua saúde por, digamos, 50 moedas. E isso só aparecerá quando o jogador ficar perto botão ou do item afiado ou o que quer que seja. E também queremos criar um pequeno colisor de caixa que garantirá que não atingimos esse objeto real. Então, um segundo colisor de caixa, vamos torná-lo um pouco menor para ser suficiente para não acertarmos o objeto real aqui. Lá vamos nós, fechamos isso, salve isso. E agora o que vamos fazer é adicionar uma tela a isso. Então, iremos para a interface do usuário. Vamos adicionar um, onde está a tela. E chamaremos esse item D nítido Canvas. E vamos definir, queremos ver a interface do usuário, ok, então não podemos ver a interface do usuário. Onde está isso? É isso, a grande tela gigante? Vamos ligar os aparelhos. E isso não está me permitindo remover a escala porque precisamos configurá-la para o espaço mundial. E zero ponto cinco no eixo x, zero zero ponto cinco no eixo y. E vamos redefinir sua posição para 0. Agora clique duas vezes no item da loja e lá vamos nós. Agora temos a pequena tela por aqui. E vamos apenas definir o arco. Sim, acho que isso é bom o suficiente aqui em cima. E vamos adicionar, em primeiro lugar, uma visita a textos. Então, vamos para o texto da interface do usuário muito Pro. Este é o primeiro. Isto é para o, digamos que o botão pressione, o texto. E outro que será o Enquanto isso, este será o texto que representa o preço do item. Então item, item para texto gelado. Lá vamos nós. E vou mover este para baixo e mover este para cima. E vamos fazer algumas edições e aumentar isso. Pressione. E para comprar. E role para baixo um novo conjunto no meio e certifique-se de que ele faça o tamanho automático. E também vamos recusar isso. Não queremos ver isso e torná-lo ousado, torná-lo robô. E não podemos vê-lo porque precisamos entrar na tela e na camada de classificação e colocá-la no player. Lá vamos nós. Então agora podemos ver tudo. E agora de volta ao botão, esse é o ajuste perfeito. Bem, acho que podemos aumentar o máximo. Então, quando você pressiona no lado oposto, você tem as opções aqui para a opção de tamanho automático o mínimo, o máximo e o que quer que sejam. Então eu só aumentei o máximo para preencher todo o espaço aqui. Lá vamos nós. E agora de volta ao item de preço, você sabe o que, deixe-me excluir este e depois duplicar este. E agora nós o movemos para baixo. Isso será, digamos, preço dois botões. E então podemos dizer, por exemplo, 99, 99 moedas. Lá vamos nós. Então, como você pode ver agora é uma tabela. Talvez seja um pouco grande, mas não se preocupe com isso. Podemos realmente diminuir o tamanho desses dois porque eles parecem um pouco volumosos demais. Então lá vamos nós. Algo assim. E este também Algo assim. Sim, claro. Por que não? Então, aproveite seu tempo para criar tudo isso, certifique-se de que eles fiquem realmente bons para o seu próprio bem. E, finalmente, quero adicionar algum tipo de plataforma sob a alma, o jogador ou quem estiver jogando seu jogo não confunde isso apenas com algum tipo de item no chão. Então vou entrar em meus recursos e tenho algum tipo de teletransporte, vou usá-lo como plataforma. Então, vamos arrastá-lo para os sprites aqui. E é irritante quando temos os arquivos tão pequenos. Então clique com o botão direito do mouse aqui, crie a plataforma da loja. E vamos adicioná-lo aqui. E nós temos isso agora. Então, vou torná-lo um múltiplo, apontar, aplicar as alterações no Sprite Editor. E como vamos cortar esse bebê? Vamos ver, acredito nisso como um dos sprites maiores. Então você pode ver aqui que é 128 por 320. Então, de volta ao Sprite Editor, acho que vamos tentar automático. Sim, claro por que não? Automático parece bom. Se você quiser, você pode ir em frente e criar animações para isso. Eu recomendo para que você possa jogar o tempo todo. Talvez façamos isso. Então, vou voltar para o item aqui. E vamos apenas adicionar esse teletransporte. Lá vamos nós. Então, este será o formulário plat do item. E devemos colocá-lo na camada, camada. É muito pequeno. Então, vamos entrar no, onde está? Ok, então aqui, vamos fazer 50. Veja como isso parece. Vamos torná-lo ainda maior. 25. Agora que temos 25. Não, isso é um pouco grande demais. Agora. O que há entre 25 e 50? Esse é o caminhão 14. Aplicar. Ótimo. Então 40 parece ser o tamanho certo e vou defini-lo para 00 e depois movê-lo um pouco para baixo. Bem, vamos mantê-lo. Talvez se você quiser, você pode começar a mover isso para cima e para baixo. E mas vou mantê-lo como é para o botão, talvez queira girá-lo. Eu recomendo que você faça isso. Mas lembre-se de que, se você quiser mover a vantagem real aqui, o verde mais, você precisa se certificar defini-lo como um objeto separado. Porque se movermos este, olhe o que acontece na largura, tudo vira. Então você precisa ter certeza de que se deseja adicionar algum tipo de animação para animar isso também, talvez eu vá mais tarde, mas por enquanto vamos nos concentrar em criar o item real. Então, vou mover isso um pouco para baixo aqui. Então lá vamos nós. Então agora podemos ver que este é um item. Vou criar um script aqui que será, e os scripts, vou fazer isso um pouco maior. E temos alguma coisa? Ok, então vamos em frente e clique com o botão direito aqui e crie uma nova pasta. E isso será para a loja. E dentro do seu andamento para criar o item da loja. Lá vamos nós. Espere que ele seja compilado e eu vou saber, Obrigado o que isso abre. E vou acrescentar ao qual é o problema. Então, a nova Unity é muito horrível. Ele continua batendo, continua parando. O carregamento do jogo leva muito tempo. Porque o script não pode ser encontrado. Excelente, ótimo. Portanto, temos o script, o script não pode ser encontrado. Nosso caso, obviamente, há um problema. Deixe-me excluir isso. Oh, desculpe. Foi por minha causa porque acabei de notar, quando estou excluindo, que adicionei uma opção de espaço, item nítido, não podemos adicionar espaços entre eles. Item tão afiado. Agora isso deve funcionar. Certo, lá vamos nós. Então abra o script. Agora temos esse item nítido. Deixe-me duplicar isso uma e duas vezes. E agora temos esses três itens. Deixe-me mover isso um pouco para a esquerda e mover este um pouco também para a esquerda. E finalmente, este também, talvez possamos torná-los um pouco menores, mas não se preocupe, por enquanto, temos esses três itens mais tarde, vamos mudá-los. Obviamente, esta será a atualização de saúde e esta será a arma. As armas atingem Enter. Espero que você tenha gostado. Essa foi apenas a configuração de nossos itens. No próximo vídeo, começaremos todo o processo de script, mudança de comportamento. E antes de ir, deixe-me criar um objeto de jogo vazio, redefinir sua posição. E estes serão os itens da loja só para que tenhamos uma boa hierarquia aqui para tudo. Salve isso. E te vejo no próximo vídeo. 79. Compra na loja: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, pegamos algumas moedas, somos atingidos. Então nossa vida é 200 sobre 300. Mas, felizmente, temos essa saúde aqui para que eu possa comprar um par de saúde e melhorar minha saúde, mas nem tudo funciona. Então você pode ver aqui porque isso é algo diferente. Isso não é meio upgrade, quero dizer, um item de restauração de saúde. Este é, e eu compro. Mas finalmente você pode ver que eu tenho 0 quantias de dinheiro. Então, se eu tentar comprar mais, infelizmente, não posso culpar a economia, culpar quem você quiser. Não vamos perder mais tempo. Vamos começar. Oh, caso. Então, agora é hora de começar a comprar os itens. E a primeira coisa que queremos fazer é que esses textos aqui apareçam quando o jogador está parado dentro do colisor de caixa aqui. E se ele estiver do lado de fora daquele colisor de caixa, não queremos ver o texto e não podemos comprar. Então, a primeira coisa que vamos fazer é acho que quero aumentar isso um pouco. Então, vamos tornar o tamanho um pouco maior com isso. Opa. Um segundo. Aumente os coliders de caixa por todos os lados, faça-os um pouco maiores e talvez até faça o colisor de caixa que não é um gatilho, que é este, e talvez apenas tenha coberto toda a superfície disso, seja lá o que for, plataforma com um pouco mais verde plus, e de qualquer forma, com isso, fora do caminho, vou fazer isso fora da tela é muito fácil, nada demais. E sempre volta para você quão grande, quão pequeno você quer torná-lo. Mas há algo que não depende de você e esse é o desafio hoje. Queremos que o texto apareça quando chegarmos perto. Portanto, obtenha uma referência ao texto do byte. Use o empreendedor entrar e sair para definir o texto ativo como verdadeiro e falso, respectivamente. E também crie um bool que verifica verdadeiro quando o jogador está nos jogadores e falso quando ele está fora dele. Então, embora a maneira como pause o vídeo agora e vá chegar a raso. O K. Bem-vindo de volta. Então eu estava terminando com essas primeiras coisas que vou fazer é selecionar esses três itens e torná-los os pickups? Sim. Faça as crianças também pickups. Então agora vamos abrir os itens da loja, um roteiro, acredito que ele está abrindo aqui, e vamos parar. Então, antes de tudo, vou criar uma tia açúcar entrar e sair. Então por diante, Trigger Enter 2D e no açúcar saia 2D. Agora precisamos de uma referência à mensagem de adeus. Então, aqui vou criar um campo serializado do tipo texto Mesh Pro. Ou você sabe, o que talvez o que podemos fazer é ir em frente e simplesmente mudar os itens inteiros. Ou o que quero dizer é desligar a tela inteira e ligá-la. Então, pegamos toda a tela, podemos ativá-la e desligá-la. Então, talvez essa seja a melhor maneira criar uma referência à tela. E aqui, podemos criar uma referência a um objeto de jogo. Isso realmente não importa. Mas, em qualquer caso, a mensagem Canvas, vamos chamar isso de mensagem Canvas. E agora, quando entramos, porque só temos a coleta e as pickups de coleta só interagem com os jogadores disso não será um problema. Então, aqui, a mensagem de adeus, fora, desculpe, tchau mensagem. Ainda estou pensando em uma variável diferente. Portanto, o ponto de mensagem do Canvas definido ativo ou ponto de objeto de jogo de ponto definido ativo, true. E depois vou duplicá-lo. E aqui, quando sairmos, é falso. Salve isso. Então também precisamos de uma variável que será um bool privado em por zona. E aqui vamos dizer que em por Zona é igual verdadeiro e por zona é igual a falso. E talvez nós o instanciamos bem aqui como falso. Então, começamos com false. Não queremos poder comprar quando estamos muito longe. Certo, ótimo com isso fora do caminho. Vamos entrar aqui. E vamos selecionar essas três telas. Então 123, desligue-os, corra o jogo, caminhe em direção a ele. Lá vamos nós. Nada acontece, obviamente porque esquecemos de fazer o mais importante, que é a atribuição da tela. Então, atribuímos a tela a cada um daqueles que executam o jogo. E agora deveríamos ter corrigido nosso problema Qualquer dia agora. Então descemos. Lá vamos nós. Pressionamos E para comprar preço 99 moeda, preço 99 moeda e priceline.com. Certo, ótimo. Então, agora ele desliga, ele liga. E, obviamente, o bi também deve funcionar. Temos um erro que é algo. Presente e a versão atual do Unity. Obrigado Unity por esta atualização muito ruim. De qualquer forma, vamos continuar. Agora há algo a ser levado em consideração. Temos os três tipos de itens que podemos comprar. Isso é bom. Ok, então podemos, por exemplo, dizer que se este item é assim por diante e assim por diante, nós o fazemos, então há algo melhor que eu quero ensinar a vocês neste vídeo e isso é chamado de interior. Não vou entrar nos slides porque é bem simples de entender. Podemos criar um enum. Vai ser o tipo de item. E podemos abrir os suportes aqui e dizer que um deles é a restauração da saúde, saúde, restauração. O segundo é o grau de saúde e o último é uma arma. Então, o que é o tipo de item enum basicamente, em seus termos mais simples, nos permite criar um novo tipo de variável. Assim como temos o booleano, a tela e assim por diante, também podemos criar um enum, que é o tipo de item. E agora podemos criar uma variável aqui, que é um campo serializado de tipo, tipo de item e é o tipo de item real. Lá vamos nós. Então, como você pode ver, o enum tem maiúscula primeira letra e em cada palavra, enquanto a variável não está em maiúsculas, ela está em minúsculas. Então, se salvarmos isso e voltarmos ao nosso jogo, veja como isso será legal. Se eu escolher o tipo de item, deixe-me fechar os colliders de caixa. Você pode ver que eu tenho um menu suspenso e posso escolher um desses itens. E isso é algo muito bom. E isso é um upgrade da seção anterior, onde cada um dos inimigos tinha sua própria caixa para tomar e assim por diante. E você tem que desmarcar algo para pegar outra coisa. Isso aqui é uma maneira muito melhor, uma maneira muito mais suave. Então este será o meio upgrade e o último será a arma. Ótimo. Então, agora temos o tipo de item do qual podemos escolher ir. Mas há mais uma coisa que precisamos adicionar aqui, e esse é o custo do item. Então campo serializado e o custo do item, mas isso não é o que eu estava. Eu queria me concentrar em eu queria focar em algo chamado instrução switch. Mas antes de fazer isso aqui, vou criar a atualização. E vou verificar se sou inveja por zona. Então vou verificar se temos ponto de entrada, obter keydown, abrir isso, código de chave, ponto de código de chave e. E aqui o que podemos fazer é, por exemplo, podemos começar a criar se, digamos que o item digite ponto algo e o que quer que seja, e comece a verificar os itens e comprar com base nisso. Mas temos, neste caso, algo muito mais poderoso. E essa é a caixa do switch. Então, deixe-me mostrar o que é essa caixa de troca. Assim, semelhante às instruções if, ela nos permite a execução de código condicional. Se tivermos um determinado tipo de item, queremos chamar algo diferente. Se quisermos ter a saúde atualizada, devemos chamar um método diferente daquele em que compramos uma arma. Portanto, a instrução switch será muito eficaz aqui. E assim como a instrução if, ela funciona da mesma forma que temos execução de código condicional, mas é estruturada como um pouco diferente e mais eficiente quando se trata de coisas como essas. Então, começamos escrevendo o interruptor. Adicionamos o interruptor da caixa. Então aqui isso pode ser o que quisermos. No nosso caso, será o tipo de item que temos. No caso de um. Por exemplo, digamos que o tipo de item seja uma atualização de integridade. Então, no caso 1, um aqui diz, por exemplo, atualização de saúde. Executamos algum código que quebramos. Isso é muito importante e depois vamos para o segundo caso. O segundo caso, digamos que seja a arma. Em seguida, executamos algum código diferente, quebramos e, em seguida, verificamos o padrão. Agora, obviamente, você pode adicionar quantos casos você deseja 123, 1520, 500 se quiser. Mas, eventualmente, teremos que obter algum tipo de coisa padrão. Então, o que acontece se não tivermos um tipo de item? Isso é algo que não acontecerá, mas caso não haja tipo de item, precisamos ter uma quebra padrão e seguida, terminamos as instruções switch. Portanto, certifique-se de entender isso. Vamos ver a implementação e apenas um pouco, mas basta olhar para a estrutura. Então, sem Olha o que é. E vamos voltar ao nosso código e implementar isso. Antes de criarmos essa declaração de switch, precisamos saber se realmente temos dinheiro para isso. Então, antes de tudo, vamos verificar se o ponto da instância de ponto do gerenciador de jogos. Deixe-me ver. Temos acesso ao curso atual? Não, nós não temos. Então, vamos criar um int público. E obtenha moedas de bits atuais. E isso apenas retornará Bitcoins atuais. Salve isso, volte e ouça o ponto da instância obter bitcoins atuais. E se tivermos mais ou pelo menos igual a, então, se tivermos mais ou pelo menos igual ao custo do item, podemos continuar. E assim que comprarmos o item, vamos para o gerenciador de jogos, instância de ponto, ponto, gastar moedas. E a quantidade de moedas que vamos gastar conforme o custo do item. Mas então o que acontecerá depois de gastarmos nossa moeda, devemos obter um item. Então, vamos criar o switch. E aqui vamos dizer o tipo de item. Então este é o caso em torno do qual estamos trocando. E agora vamos abrir isso. Então, no caso de termos o tipo de item dot health restore e isso não está me permitindo oh, não, não é. O tipo de item pequeno é o tipo de item grande restauração de integridade do ponto. Colocamos os dois pontos, apertamos Enter. Aqui vamos, enquanto aqui podemos encontrar objetos do tipo e será o manipulador de saúde do jogador. E então podemos entrar aqui. E o que não declaramos que o manipulador de saúde prejudica o jogador. Ok, então na HP para o jogador, HP para o jogador. E quanto queremos adicionar? Bem, podemos escolher aqui se 10 ou 20 ou qualquer valor que você queira adicionar, salve isso. Brake tinha isso e lá vamos nós, salve isso. Então eu fiz uma pausa lá por um segundo porque não tinha certeza se deveríamos usar o objeto de arquivo do tipo ou se você quiser ainda melhor, criar uma variável aqui para o player. Então, uma variável privada para a camada e, em seguida, defini-la aqui e a colisão, isso seria mais inteligente e mais econômico porque sabemos que apenas o jogador pode ser a colisão aqui por causa da camada que nos sentamos. E encontrar objeto do tipo às vezes é um pouco complicado. É, é preciso muito espaço do processamento, muito, muito poder de processamento porque objeto fino do tipo passa por toda a lista em sua cena e depois escolhe um deles. Então, depende de você. O que quer que você queira fazer realmente depende de você. Então, onde temos o item aqui? Então, vamos escolher o primeiro. Esse é o custo para 20. Ou sabe o quê? Vamos apenas mantê-lo às 10. E isso restaurará um pouco de Saúde. E vou para os Prefabs. E aqui vou adicionar os picos. Então, ou são os pickups? Vamos adicionar um pouco de moeda e aqui, 23 moedas. Então, temos dinheiro para gastar. E então entraremos nos Prefabs novamente e adicionaremos a. Onde está? Onde está isso? Onde está isso? Objeto nivelado nos picos aqui. Execute o jogo. Então eu quero ser atingido pelos picos. Certo? Pegue alguns cones, vá até aqui e estamos visitando. Então lá vamos nós. Nós pressionamos o Iike. Sim, lá vamos nós. Nós ficamos bronzeados, bronzeados, bronzeados. E se eu tentasse comprar mais, lá vai você. Temos 0, então não posso mais comprar nada. Lá vamos nós, tão ótimo. Isso parece estar funcionando. No próximo vídeo, usaremos a atualização de integridade criará um método separado e o manipulador de saúde. E como eu disse, e a propósito, esse erro continua aparecendo. Não se preocupe com isso. Como eu disse aqui, o objeto fino do tipo algo que eu não gosto particularmente, não gosto de usar o objeto definido de pipe remonta a você. Eu realmente espero que você tente criar sua própria variável, defina-a aqui. Com isso dito, espero que você goste. Espero que você esteja salvando tudo, cantando todos os seus arquivos, e eu te vejo no próximo vídeo. 80. Como obter um aprimoramento de saúde: Bem-vindo de volta Meus desenvolvedores de jogos favoritos para um novo vídeo. E neste nós pegamos algumas moedas, somos atingidos, descemos. Podemos restaurar nossa saúde ou podemos atualizar nossa saúde. Então, vamos atualizar nossa saúde. Como você pode ver, o máximo aumentou em dez, e nossa saúde agora está cheia porque essa é a nossa mecânica no jogo. Então, não vamos perder mais tempo e vamos começar. Ok, então é hora de atualizar nossa saúde. Mas antes de fazermos isso, há algo me incomodando e algo que precisamos consertar. Primeiro de tudo, vamos ligar esses três campi aqui. E em cada tela eu vou mudar o, qualquer que o preço aqui diga. Então, por exemplo, o preço 999, em vez disso, vamos salvar isso como a saúde da restauração. Restaure a saúde. E vamos dizer, quanto dizemos que custa? Quanto custa o custo da restauração de saúde 10. Então, aqui, depois BTC. Ok, então no segundo, será a atualização. Então abre, selecione o botão, deixe-me fechá-los. O que foi isso? Atualize a integridade. Upgrade, saúde. E digamos que este custará 30 aC. E finalmente o novo item, deixe-me fechar isso novamente e virar essas duas telas de e, finalmente, temos esta aqui. E isso será por arma ou por arma. E isso será, digamos que 40 BTC. Lá vamos nós. Agora temos tudo configurado corretamente Ao pensar no próximo vídeo, eu também talvez adicione um pouco de animação a cada um desses itens e talvez algo à plataforma apenas para dar um pouco mais de vida. Ok, com isso fora do caminho, vamos deixar isso de volta para baixo. Mas antes de irmos, quero mudar o sprite real aqui. E eu lhe forneci alguns sprites. Então temos antes de tudo, este, mas honestamente achei isso um pouco feio. Então eu também uso esses, e isso realmente depende do que você quer que seu jogo tenha. Você pode ver que há muitas poções aqui, então vou selecionar o vermelho. E temos esse copo grosso talvez devêssemos usar o vidro grosso? Não, vamos usar o copo normal. E vou adicioná-lo aos sprites aqui. Então, dentro de sprites se abre maior. E vamos prosseguir e clicar com o botão direito do mouse aqui e talvez criar uma pasta separada para isso ou apenas adicionamos aos captadores se tivermos alguma ou algo para a saúde. Qualquer coisa. Pickups? Sim, claro. Isso é adicionado aos captadores. Não se preocupe com isso. Mantenha-o aqui. Acho que este é um bom lugar. E então vamos entrar no upgrade do item e dar este. Lá vamos nós. Bom. Muito grande. Então, talvez eu vou fazer 200, aplicar, torná-lo ponto bi-linear. Aplicar. Ainda grande. 400, 400 acho que seria muito pequeno. 300 se aplicam. E o sim parece ser bom o suficiente. Talvez possamos movê-lo um pouco. Mas é por isso que eu queria criar o sprite de item real aqui para cada um. Agora o quê? Vamos seguir em frente e fazer isso. Alguns em andamento criam o sprite do item. E é sempre melhor ter isso brilhante em um diferente. E o que podemos fazer é selecionar aqui e clicar em Copiar componente. Portanto, copie componentes, selecione o sprite do item e selecione aqui e basicamente componente como novo. Então agora posso voltar aqui e remover o componente completamente. E agora esse sprite é livre para se mover para cima e para baixo e podemos adicionar algum tipo de animação a ele livremente. Então, vou copiar isso e colá-lo para o primeiro item e aqui. E então, para este também aqui. E devemos redefinir a posição de cada um deles. E para este. E aqui, em vez de ter esse vermelho, vamos adicionar o sprite usual que estamos usando. E aqui vamos apenas remover o componente. Lá vamos nós. Excelente. Então agora podemos controlar este item sprite tudo na música. E o que mais queremos fazer? E o último aqui, itens privados, remova este item e elétron e no próximo vídeo vamos adicionar sua própria arma. Ok, então isso fora do caminho, também certifique-se de mudar os planadores de caixa em cada um desses, só para não colidirmos com os itens com isso fora do caminho. Vamos continuar um e agora é hora da atualização de saúde. Então, vamos. Primeiro de tudo, crie um método e o manipulador de saúde do jogador que nos permitirá aumentar o nível máximo 2. Temos algo para fazer isso? Não, nós não temos. Então, vou adicioná-lo aqui. Então, aqui vou criar um vazio público. Aumente máx. O que é isso? Vida máxima. E aqui e o valor máximo de saúde. E então vamos obter o máximo de vida e aumentá-lo pela quantidade de vida V-max. E então vamos ter a saúde atual e é igual à saúde máxima. Ou, se você quiser, você pode evitar isso e não fazer isso. Então, recebemos um upgrade, mas não temos saúde. Ou, por exemplo, se você quiser, você pode definir em vez da integridade máxima, você pode definir a integridade atual mais 75% ou algo assim. Eu acredito que isso é algo que acontece no Hades ou você pode aumentá-lo apenas dez ou como quiser fazer, eu vou manter simples como aqui. E então há mais uma coisa que precisamos fazer, e isso é que precisamos entrar na instância UI Manager Door, e precisamos atualizar o The Wait um segundo, enquanto o UI Manager, precisamos atualize a meia barra , então precisamos ter certeza de que ela mostra o que está acontecendo. Aumente o valor máximo e o valor da nossa integridade aqui, na instância do UI Manager, atualizamos o valor máximo, que é a integridade máxima do controle deslizante. E isso é importante porque isso determinará como o lento funciona. Então, depois de atualizarmos a integridade máxima, precisamos ir para a instância de ponto do UI Manager, valor máximo do ponto do controle deslizante de integridade de pontos. E será igual ao máximo Olá novamente. Então, salve isso. E também vamos nos certificar de atualizar a saúde do jogador que você está no final. Salve isso. Certo, ótimo. Agora, com isso fora do caminho, hora de realmente comprar o item aqui. Então, vou emitir isso para você como um desafio. E isso é para criar outro caso para a atualização de saúde. Portanto, crie um novo caso que use o tipo de item de atualização de integridade. Então você precisará encontrar o sistema de saúde do jogador como anteriormente ou se você estiver usando a colisão e, finalmente, aumentar a vida máxima do nosso jogador. Foi isso, embora a maneira de pausar o vídeo agora e ir para o desafio. Oh, ei, bem-vindo de volta. Então, de volta ao item da loja aqui temos outro caso que vamos chamar o tipo de item de caso dot health upgrade. E vamos fazer o mesmo. Vamos encontrar o manipulador de saúde da camada. E então vamos aumentar a vida máxima em quanto aumentamos o Mac South? Vamos mantê-lo às 10. Mantenha as coisas simples para que possamos entender facilmente e depois vamos quebrar. Então, de volta ao nosso jogo, vamos ver, dissemos que isso causará 13 Bitcoins. Então, em qualquer lugar, vamos fazer 30. Salve isso, execute o jogo. Agora, devemos ver que pegamos algumas moedas. Podemos nos machucar se você quiser. Lá vamos nós. Então agora estamos em 200. Podemos restaurar a saúde ou podemos atualizar nossa saúde. Então, se eu atualizar a saúde, lá vai você. Você pode ver que eu tenho 310 agora e também posso atualizar. Posso comprá-lo, mas nada é atualizado. Se você acha que isso é injusto que possamos realmente comprar o item, mas não obtemos nenhum benefício dele, então seja meu convidado. Eu recomendo que você tente verificar, antes de tudo, antes de aumentarmos a saúde, nós realmente a temos no máximo? Se você tiver no máximo, não vamos pegá-lo ou não comprá-lo ou algo assim. Então, com isso fora do caminho, espero que você goste e eu o vejo no próximo onde compraremos as armas. Em seguida, vamos defini-lo a partir de agora, 40. Salve isso. E eu te vejo então. Ah, e não se esqueça de claro, comprometer suas alterações. Vejo você no próximo. 81. Compra por armas: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo, um novo vídeo longo. Mas vale a pena porque agora, quando executamos o jogo, pegamos algumas moedas. Nós vamos aqui, ok, para que possamos restaurar a saúde, podemos melhorar a saúde ou podemos fazer algo muito mais legal, e isso é por nós mesmos alguma arma. Então, pegamos um rifle e então podemos ir e atirar nele em todos os lugares. Então, não vamos perder mais tempo e vamos comprar armas, vistos como Paxos, em qualquer caso. Então, hora do último item que podemos comprar, que é a arma. Então, vou entrar no sprite do item. E, a propósito, o que eu fiz fora da tela é que adicionei algumas animações e certifique-se de que o sprite do item esteja em um nível diferente. Então, lá você pode ver todos eles girarem e você pode ver que a plataforma tem essa pequena animação nela. Muito simples, muito fácil. Não vou me aprofundar muito nisso. Mas o que vou fazer é entrar aqui e mudar esse orgulho no último. E vamos para os sprites. Pickups. Não, não captadores. Arma de armas, captador de arma de arma. Selecione este e vamos adicionar o rifle por enquanto. Lá vamos nós. Conseguem vê-lo. Vamos torná-lo um pouco maior. Desculpe por isso. Devemos de alguma forma manter a proporção. Agora o quê? Vamos apenas aumentar a escala em dois, por dois, em 1,5, em 1,5. Certo, ótimo. Então, agora, quando executamos o jogo, acredito que isso deve estar girando porque ele tem o animador. Lá vamos nós. Você pode ver que ele gira e espera que venhamos e coletemos. Agora, a diferença entre os outros dois itens e o item da arma é que não queremos ter, por exemplo, apenas um rifle item 40. Queremos obter algum tipo de item aleatório ou arma aleatória quando queremos comprar uma arma. Então, vou entrar no script do item e esse erro está me incomodando muito. E no item da loja aqui, vou criar algumas linhas. Então, primeiro, quero criar um campo serializado do sistema de armas. E vai ser uma série de armas potenciais para comprar. Esse é um nome longo para uma variável. E então eu vou criar um sistema privado e o sistema de armas e a arma real, sem arma também. Por, lá vamos nós. E, finalmente, vamos fazer duas coisas. A primeira coisa vai acertar isso porque queremos mudar o sprite com base na arma que vamos comprar. Então, sprite privado, renderizador. E lá vamos nós. E o sprite do item, não o sprite do item, o sprite da arma. Então, arma, então porque isso só vai ser usado para a arma. E então vamos obter o campo serializado, o texto Mesh Pro ou TMP Pro, Tempe pro, sim, abreviação P Pro. E este será o texto de preço que queremos alterar o preço com base, ok, então não podemos usar isso porque precisamos do TMP Pro, desculpe por isso. Ou você sabe o que podemos fazer na verdade, podemos, em vez de usar o texto de ponto de sonda TMP Mesh pro Gu. Lá vamos nós. Então, dessa forma, não precisamos adicionar uma biblioteca inteira. Então, essa é apenas uma nova maneira de fazer as coisas. E agora que temos um preço para cada uma de nossas armas e um sprite para cada uma de nossas armas. Vamos para o sistema de armas. E vamos seguir em frente aqui e criar um campo serializado pelo preço das armas. Então, int arma preço. E também criaremos um campo serializado para o sprite. E este será o sprite da loja de armas. E, obviamente, todos esses são campos serializados, então não podemos acessá-los. Então, precisamos criar alguns métodos aqui. O primeiro será público e o que e, e receberá um preço de arma. E isso retornará o preço da arma. E então teremos um sprite público para o certo, e conseguiremos um sprite de loja de armas. E isso voltará, devolverá a arma, certo? Sprite de loja de armas. Lá vamos nós. Então a imagem da arma e as armas Sprite são coisas totalmente diferentes. Talvez eles não devessem ser, talvez possamos ter apenas um que retorne todo o sprite. Mas se você olhar aqui, eu quero ter aquele com a pequena linha branca branca em torno dela para que possamos distinguir facilmente a arma. No que você pode até mudar isso aqui, este. Não vamos nos preocupar com isso. Vamos continuar do jeito que estamos. Esses pequenos truques podem então, no final, ser ajustados e podemos mudar tudo isso. Então agora vamos entrar nas armas. Foram as armas que estão nos prefabs. O residual, residual reservado, as armas inimigas quebradas. Lá vamos nós. Então o rifle que ranhuram isso para baixo e vamos ver o que temos aqui. Então, o sprite da loja de armas e o preço da arma, quanto custa o rifle? Digamos que 10. Digamos que a pistola custe 20. Não, desculpe por isso. Agora o quê? Vamos fazer o rifle custar 20. Vamos voltar. A pistola custará dez e a espingarda custará 30. E esses são apenas números arbitrários. Não sei o que você quer usar nos EUA. Lei. Vamos configurar os sprites. Então, vou tornar este um pouco maior que eu possa ver os nomes aqui mais rapidamente. E o que temos aqui? Pickups? Não. Toda vez. Certo. Então adicione o sprite de espingarda para o rifle. Desbloqueie isso para o rifle. Eu vou não, não, não, não. Isso é um pouco complicado, não é? Então, em qualquer lugar do rifle. E, finalmente, selecionamos as armas e o Prefab, a pistola. Armas, pegue o PESTEL, salvamos isso. E agora temos uma referência a todos esses. Ótimo. Agora que temos o sprite, temos o preço da arma, a próxima coisa a fazer é ir e começar e configurar tudo assim que as armas pensarem. Então, no item da loja aqui, vou economizar, vou criar um começo e vou lançar um desafio para você. Portanto, seu desafio é verificar o tipo, selecionar armas aleatórias, definir o sprite e o imposto. Então, e comece a verificar se temos um item do tipo arma, você precisará selecionar uma arma aleatória de armas potenciais ou armas potenciais. E você precisará definir o custo do item como o preço da arma. Você precisará definir o sprite como a arma apropriada. Você precisará satisfazer os textos também. E acredito que este seja o último ponto. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá para o HL7. Oh, ok, bem-vindo de volta. Então, no começo, não foi isso que eu quis dizer. Se tivermos um tipo de item igual à arma do tipo de item. Então aqui vamos definir algumas coisas. Primeiro de tudo, criaremos uma arma selecionada aleatoriamente e ela será igual ao alcance de pontos aleatório. O 0 e o potencial. O que é isso? As armas potenciais para comprar o comprimento do ponto. Então aqui vamos selecionar a arma para comprar e ela será igual à arma potencial para comprar na posição da arma selecionada. Então vamos seguir em frente e obter o custo do item, que será a arma para comprar, que obtém o preço da arma. Lá vamos nós. E, finalmente, vamos definir esse orgulho. Então, como vamos antes de tudo obter o sprite? Vamos obter componentes e crianças o sprite. Ou saiba o que talvez este aqui não precisaremos. Mas, de qualquer forma, vamos pular. Entraremos no renderizador sprite. Este é o componente sobre as crianças, por que as crianças enquanto? Porque neste item que tem o script real, o sprite do item está aqui em baixo. E porque nenhum outro objeto de jogo, oh, nós temos outro objeto de jogo que é a plataforma de itens. Este será um complicado. Então, você sabe o que, por uma questão de ter tudo configurado corretamente, vou fazer deste um campo serializado e salvá-lo. E depois volte, desculpe. E depois volte e para cada um desses e espere um segundo. Renderizador de sprite de armas. Eu estava e fiquei confuso. Fiquei confuso lá por um segundo, desculpe por isso aqui. Então, vou seguir em frente e adicionar o sprite do item. E aqui o sprite. E aqui também o item sprite. Então, não confundimos nenhum desses. E também, enquanto estivermos aqui, vamos seguir em frente e adicionar também o texto do preço. Então. Certo, então, por algum motivo, esqueci de mudar o nome desses. Então este será o texto do preço do item por algum motivo, pensei que mudamos o aluno. Não se preocupe com isso. E essas são as coisas que temos que fazer. Não gostamos deles, mas temos que fazê-los em algum momento. Então, vamos seguir em frente e configurar tudo. Lá vamos nós. Então agora temos uma referência a todos esses. De volta aqui. O renderizador de sprite de armas. O sprite será igual à arma para comprar isso, obter sprite de loja de armas. Lá vamos nós. Salve isso. E a última coisa que precisamos fazer é que precisamos definir o texto. Então, vamos obter o texto do preço. O texto. E o que dizemos aqui? Vamos ver o que foi originalmente escrito aqui por arma. Então, em vez de apenas por arma, começaremos com por. Então vamos concatená-lo com a arma para comprar ponto obter o nome da arma. E isso é uma string, então podemos fazer isso legalmente. E então diremos o preço. Então, adicionaremos esses dois mais o custo do item, o custo do item. E este é um número inteiro. Então lembre-se quando tínhamos um número inteiro anteriormente em algum lugar, eu esqueci. Então você se lembra porque era um número inteiro, não podíamos apenas vendê-lo. Tínhamos que dizer ponto toString. Então, e talvez eu não estivesse claro o que isso faz. Então, toString apenas converte qualquer inteiro ou qualquer flutuador em uma string e você pode usá-lo. Mas aqui, porque estamos concatenando, concatenando significa que adicionamos um plus entre uma string e um inteiro ou uma string e um flutuador. Então, quando concatenamos uma string com um item ou desculpamos, com um número inteiro, não precisamos adicionar duas strings imediatamente. Visual Studio e C Sharp code entendem que isso, embora seja um número inteiro aqui, estamos usando-o como uma string. Então, salvamos isso e também precisamos adicionar aqui BTC. Salve isso. E agora vamos voltar ao nosso jogo e ver se isso funciona. Ainda não adicionamos a arma, mas vamos ver se isso realmente funciona é uma seleção aleatória. Então, vamos descer aqui. Certo, então um rifle. Lá vamos comprar uma arma e ela não funcionou. Por que isso? Porque não adicionamos nada à matriz. Então, aqui, precisamos adicionar as armas potenciais para comprar. E é consistente, então aqui em cima nos prefabs, armas prefabs, selecione as armas em potencial e vamos apenas pegar a espingarda e o rifle porque estamos segurando uma pistola e nossa mão. Então execute o jogo. Vamos ver o que acontece. Então, um rifle lá vamos nós. Compre um rifle por 20 bitcoins. Vamos tentar isso novamente para tentar pegar a espingarda, certifique-se de que ela funcione. Lá vamos nós. A espingarda pela espingarda, moedas de 430 bits. Mas agora, quando pressionamos E, nada acontece porque ainda não adicionamos nenhuma forma de comprar. Então, de volta aqui, vamos criar um caso. E este caso será para o tipo de item pontuar a arma. Lá vamos nós. E agora aqui vamos antes de tudo, encontrar o jogador que queremos adicionar, as armas também. Então aqui vou dizer que temos um controlador de jogador, que é o jogador que está comprando o jogador, o jogador comprando. Então, comprando o jogador. Eu realmente tenho dificuldade em selecionar nomes para objetos de objeto finito do tipo. E, como você pode ver, temos código redundante todas as vezes. Talvez devêssemos mudar isso. Estamos fazendo muitas descobertas. Não sei, acho que devemos mudar isso em algum momento. Então, em vez de declarar o manipulador de saúde, vamos pegar o controlador do jogador. Lá vamos nós. Então, agora temos uma referência ao controlador do jogador. Então aqui vamos dizer que a arma que temos, então vamos instanciar a arma que temos. Então, a arma para comprar. E vamos instanciar no ponto de compra do jogador. Obter armas são. Então, assim como fizemos quando estávamos pegando uma arma. Então, instanciamos a arma no braço das armas. E a última coisa que precisamos fazer, precisamos também dizer essa arma na arma disponível dos jogadores. Então, vamos seguir em frente e obter uma referência a isso. Porque se eu me lembro corretamente, se estamos comprando arma de ponto de arma disponível, lá vai você. Você pode ver que leva a arma para adicionar. Então, precisamos obter uma referência aqui, ou você pode realmente copiar isso e colocá-lo aqui. Isso não parece muito bonito, isso não parece muito profissional. Se você olhar para trás para o código, você não entenderá exatamente o que está acontecendo. Então, em vez disso, vamos criar um sistema de armas aqui. E é a arma para adicionar um igual a instanciar. E então aqui dissemos a arma para adicionar e não se esqueça de quebrar. Isso é algo que precisamos e apenas no caso de criarmos o padrão aqui. Isso diz que, se nenhum desses funcionar, a depuração padrão, log de pensamento e nenhum tipo de item foi escolhido. E tudo. Eu realmente gosto das caixas de troca. Eles são muito legais. Se você olhar para eles. Eles realmente parecem muito bonitos. Então você tem um caso, tudo está realmente organizado corretamente. Então, vamos voltar e ver o que acontece aqui. Caso seja uma arma, temos o controlador do jogador, uma referência ao controlador do jogador. Nós só temos um, então isso não é problema. Em seguida, instanciamos a arma. Nós o colocamos em uma variável e, claro, colocamos na compra do jogador, que tem um exército sempre quer definir a criança, definimos o pai da arma que instanciamos como o braço, e então compramos o jogador, adicionamos a arma disponível. Obviamente, precisamos ter, como você se lembra aqui, temos as armas disponíveis no jogador. Nós adicionamos essa arma, quebramos e temos nossos Robins. Então, de volta novamente. Vamos ver se isso funciona. Execute o jogo. E pegamos algumas moedas para comprar uma espingarda. Então agora temos uma pistola, pegamos a espingarda. Quão legal é isso? Então agora temos uma espingarda, e não só temos aqui, eu gostaria de não usar o maximizar no jogo e maximizar, Vamos apenas removê-lo. Então, não só temos a espingarda e os braços e ela funciona e atira e faz tudo. Mas nós também, se formos, Onde está? Onde está no jogador DOM? Desbloqueie este aqui. Lá vai você. Você pode ver que temos uma espingarda e uma pistola. Então, com isso fora do caminho, terminamos de criar todos os nossos itens de compras. Espero que você goste. Espero que você goste de como o jogo está se tornando. Certifique-se de sempre confirmar suas alterações e certifique-se de me deixar um comentário se você ainda não tiver dito isso, verei você no próximo vídeo. 82. Seção 14: criando menus — Configurando tela de título - Configurando: Bem-vindo de volta Meus desenvolvedores de jogos favoritos para um novo vídeo longo. E neste, quando executarmos o jogo, você verá que temos o pinheiro comprado invasor 2D. Por que soa assim? Mas, de qualquer forma, temos dois botões. O botão de saída que apenas exibe esse texto aqui, e o botão Iniciar quando o escolhemos, lá vamos nós. Vamos para o primeiro nível. Quão legal é isso? Podemos atirar, podemos obter ajuda, também podemos morrer. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, é hora de criar alguns menus e vamos começar com a tela de título, porque obviamente todo jogo precisa de uma tela de título. Então, o que eu decidi fazer é ter a tela de título, o test1, e vou convertê-lo na tela de título. Sim, recarregue. E vou remover o esqueleto. Só vou manter o jogador e adicionarei alguns itens quebráveis. Então, nos prefabs. E vamos aumentar o tamanho aqui apenas um pouco. E onde ele está? Portais de pickups, quartos. Certo, então algumas peças quebráveis. Então vou adicionar um aqui e outro aqui, e outro aqui. E apenas algumas partes que nos divertiremos destruindo. E neste menu, também teremos os dois botões que nos dirão para iniciar o jogo ou sair do jogo. Então, vamos seguir em frente e fazer isso. Vou clicar com o botão direito do mouse aqui. Vou adicionar uma tela de interface do usuário, e essa será a tela do menu principal. Vou definir o sistema de eventos aqui. Vou me certificar de que é desculpa, pois o espaço na tela se sobrepõe e certifique-se de que a escala será o tamanho da tela. E lá vamos nós, 1920 por 1080. Pressione Enter, clique duas vezes para que possamos vê-lo corretamente aqui. E o que vamos ter enquanto vamos ter a tela onde nos movemos. Mas também teremos dois botões e o nome do jogo op aqui. Então talvez devêssemos fazer isso um pouco menor. Eu não sei. Eu ainda estava pensando em como vamos nos encaixar em tudo isso. Talvez possamos tentar selecionar todos os potes e o jogador de cúpula e apenas fazer todas as partes um pouco menores também na escala, talvez torná-las 0.30.20 para isso. Ainda pequeno. 0,50,5? Sim, claro. E então eles não jogam também é 0,50.5. Então lá vamos nós. Se tentarmos executar o jogo agora com o nosso pequeno cara. Ou como você pode ver, ele ainda é muito grande e não consegue pegar os itens porque a escala é muito pequena. Isso porque o, acabei perceber que as animações o manterão grande. Então, vamos trazê-lo de volta a um. E não se preocupe, vamos tentar encaixar tudo aqui. Então, de volta a um. Salve isso, ok, inimigos executam o jogo. Teremos o cara do sprite. Você estará andando por aí. Ele não pode pegar coisas porque aqui temos algum tipo de erro. E isso porque não temos o gerente, não temos um empreendedor entrar na moeda. Há um problema. Por que isso? Bem, porque o gerenciador de jogos não está disponível também na moeda. Então, vamos parar o jogo. E vamos selecionar todas essas peças e garantir que o conta-gotas do item, vamos apenas remover o componente por enquanto e apenas manter o quebrável para evitar erros. Então lá vamos nós, quebramos alguns potes e nos divertimos. E também adicionaremos duas teclas aqui para permitir que o jogador selecione se deseja sair ou continuar o jogo. Então, em nossa tela e em nossa tela aqui, vou clicar com o botão direito do mouse em selecionar seu, adiciono um texto Mesh Pro. Este será o título. Então, o título do jogo, então bot de tempo , invasor, não tenho certeza se quero chamar isso pode estar condenado, comprado e Vader, mas vamos mantê-lo como está. Alterou o tamanho automático da fonte, aumente o máximo e vamos torná-lo um pouco maior. Vamos colocá-lo no meio. Vamos aumentar o máximo ainda mais. Então lá vamos nós. Precisamos de um grande e enorme título 40 vezes invasor para d. E podemos adicionar alguns underlay, algumas iluminações no brilho. Por exemplo, podemos aumentar o ou o underlay e adicionar uma cor aqui para torná-lo um pouco mais frio. Então vá em frente, rotule isso, aumente a suavidade, o deslocamento no y ou algo parecido. Então escolha as cores que você achar apropriadas. Talvez faça este vermelho ou preto ou antinode. Não, o preto é ruim. Vamos ver, talvez aumentar isso totalmente vermelho e no Y, aumentá-lo. Então lá vamos nós. Então, temos algo como um bot de tempo e Vader 2D. E não é muito bonito, mas faz seu trabalho. E agora vamos adicionar mais dois botões. Então, aqui vou clicar com o botão direito do mouse e UI e adicionar um botão. Este será o botão Iniciar. E vou movê-lo um pouco para a esquerda. E é aqui que decidimos onde queremos colocá-lo. Então, como não temos muito espaço, você pode ver como estou olhando para o jogo. Vou colocá-los talvez aqui. Vamos ver se executamos o jogo. Como isso parece? Então, ter um botão aqui embaixo, não, acho que isso não é ruim. Isso não é nada ruim. Então, talvez eu vou aumentar o tamanho. E nos recursos. Podemos entrar aqui e você pode encontrar os elementos do menu que eu lhe forneci. Então, esses são os botões. Então, de volta aos nossos sprites, vamos ver, temos algo sob os elementos da interface do usuário, elementos da interface do usuário e clique com o botão direito do mouse, crie 140 botões. Abra isso e vamos arrastar os botões até o Unity. E vamos ver o que temos aqui. E vamos para várias mentiras Sprite Editor. Isso é cortar esses bebês. Lá vamos nós. Então, estes são perfeitamente cortados com as sombras. Então aplique as alterações. Agora temos esses e vou selecionar o botão Iniciar. E como você pode ver, temos o componente React normal com o qual estamos acostumados. E também temos a imagem e as coisas do botão aqui. E você pode adicionar um evento ao clicar neste botão. Sempre que for clicado, você pode mudar a forma como ele se comporta. Portanto, se a cor normal, por exemplo, puder ser completamente preta ou branca ou vermelha ou qualquer outra coisa, você pode alterar a cor realçada. Então, por exemplo, se movermos o mouse sobre este botão, pressione o botão e ficará, por exemplo, verde. E se selecionarmos, não sei, cor selecionada, não tenho certeza do que é isso. Então, se eu executar o jogo agora, você notará que se eu passar sobre o botão e ficar vermelho, quando eu clicar nele, ele ficará verde. Então, é assim que os botões funcionam. Você pode brincar com muitas coisas aqui. Mas o que eu quero focar é mudar a fonte do sprite. E vamos ver que tipo de botões temos aqui. Então algo não bom aconteceu no Sprite Editor. E quantos sprites temos? 1, 2, 3, quais são essas coisas vazias aqui? Não gosto da aparência disso, mas de qualquer forma, vamos tentar adicionar esse botão. Lá vamos nós. Então você pode ver que este é o botão que adicionamos. Vamos tentar defini-lo pode ser para o tamanho nativo ou talvez aumentá-lo no Y. Então lá vamos nós. Podemos definir dois botões em cada lado da tela de título. E talvez você possa adicionar um tipo diferente de botão, pode ser este que seja um pouco mais claro. Acho que é melhor. Então, agora, quando executamos o jogo, você pode ver que temos um botão muito bonito e ele até muda de cor quando o pressionamos. E talvez você não queira ter esse tipo de coisa. Talvez a única coisa que você pode querer ter é não ter isso pressionado. Talvez possamos torná-lo mais escuro ou algo assim ou mantê-lo como está, mas apenas mude o alfa nele, que também é uma boa ideia, mas vou ter certeza de ter algum tipo de cor verde apenas assim sabemos que estamos pressionando este botão. E agora com isso temos o botão Iniciar. Vamos duplicar isso e movê-lo para a esquerda. E este será o botão de saída. Então, botão Sair. E agora o que precisamos fazer ou você sabe o quê? Talvez eu tenha feito isso cedo demais. Isso é apenas excluir o botão X porque queremos alterar o texto. E aqui você pode ver que temos textos de botão. Não queremos esse texto. Excluímos. Vamos adicionar nosso próprio texto, que é um texto Mesh Pro. E, obviamente, vamos torná-lo o ciborgue ousado. O tamanho automático, o aumento das demandas, defina-o no meio. E isso é tudo, isso é tudo o que precisamos fazer. E vou aumentar o tamanho deste. Então, vamos torná-lo um pouco maior e colocá-lo no meio e apenas garantir que ele se encaixa corretamente. Agora, a única coisa que pode nos incomodar aqui é que quando, quando tentamos mudar, por exemplo, a cor desta. Oh não, não, tudo está funcionando. Então, devemos deixá-lo escuro? Acho escuro. Primeiro de tudo, tente digitar o nome, então o começo veio. Ok, então, aparentemente, tê-lo completamente escuro não é o caminho a percorrer. Quais cores devemos escolher? Talvez até devêssemos remover o underlay. Mas se removermos o underlay aqui, remova também o underlay aqui. É por isso que às vezes não gosto de usar o teste de malha de texto porque tudo está meio relacionado. Estamos mudando todo o sombreador do que detecta o mesh Pro é. Shaders são uma raça totalmente diferente de informações. Então, não vou me aprofundar muito nisso. Então, de volta à Unity. E vamos ver como isso parece. Se eu executar o jogo, ele fica visível? Então comece o jogo e não muito. Quando fica vermelho, fica mais visível. Talvez possamos mudar o fundo do botão. Então, estou brincando honestamente, não tenho certeza do que estou fazendo. Só estou testando as coisas assim como você. Não, acho que este é melhor para o nosso jogo inicial. E agora que temos este, agora podemos duplicar, chame-o de botão Sair. E vamos movê-lo para o lado. Do outro lado. E aqui vamos mudar o texto para acessar isso. Mais uma vez. Pressione Enter. Lá vamos nós. Então agora temos dois botões. Configuramos o menu. Podemos andar por aí, podemos destruir essas coisas, podemos atirar ao nosso redor. Estamos usando os botões muito assustadores. Lá vamos nós. E podemos começar o jogo, sair do jogo. Mas, como você pode ver, eles não fazem nada de vez em quando. Então, o que vamos fazer é adicionar algumas funcionalidades a elas. Então, vou entrar nos roteiros. Vou clicar com o botão direito do mouse e criar uma pasta para o menu. Clique duas vezes aqui, clique com o botão direito do mouse e crie um script nítido C para o Gerenciador do Menu Principal. E vamos chamá-lo de menu, menu principal porque teríamos que adicioná-lo ao Gerenciador do Menu Principal se fizéssemos. Qual é o problema aqui? Acho que temos um problema com os efeitos sonoros. Sim, acho que é um problema com os efeitos sonoros. O problema com algumas coisas. Há muitos problemas aqui porque não adicionamos todo o gerente e todas essas coisas, mas não nos importamos com isso. Isso não será um problema porque não estamos realmente fazendo nada. E nesse nível, agora era o menu principal. Vamos adicioná-lo à tela do menu principal. E vamos clicar duas vezes e abrir o script aqui. Então, primeiro vamos criar um método para o jogo de saída. Então, o jogo de saída vazio público. E como ainda estamos no editor e não implementamos o jogo, isso não funcionará. Mas se escrevermos o ponto do aplicativo perto, quero dizer que o aplicativo ensinou sair. Isso sairá do aplicativo e encerrará o aplicativo do player. E como você pode ver, mas como estamos no modo de jogo do editor Unity, isso não funcionará. Então, o que faremos é apenas adicionar um log de pontos de depuração. E diremos que saímos do jogo. Confie em mim, quando você construir este jogo, esse botão funcionará. Não se preocupe com isso. De qualquer forma, isso executará o jogo. E se voltarmos para Unity, se formos para o botão de saída, podemos rolar para baixo aqui e no evento onclick, podemos pressionar este botão Plus e podemos adicionar, primeiro lugar, um objeto que nós acessará as funções do. Então, se eu adicionar o menu principal, você notará que agora posso acessar funções e uma dessas funções. Por exemplo, posso acessar objeto do jogo e fazer algumas coisas aqui. Talvez desligue o objeto do jogo, direcione, transforme, mude o nome e assim por diante e assim por diante. Mas também posso acessar o menu principal. E você pode ver aqui eu tenho Canvas, canvas , scaler, graphic, ray caster, e todos esses são componentes dentro da tela do menu principal que eu forneci o botão nele também contém o menu principal. Então, no menu principal, vou selecioná-lo. E você pode ver que eu tenho muitos métodos que posso usar. E um deles é o jogo de saída que acabei de criar. Então, quando clico neste, executo o jogo. Posso andar por aí e fazer as coisas que faço. E então, se eu clicar no jogo de saída, você notará que saímos do jogo. Por que capitalizamos, eu não sei, mas você pode ver que esse botão realmente funciona e eu posso pressioná-lo. Então, agora é hora de criar o método de início do jogo, e esse será o seu desafio. Então defina a cena e o índice de construção como a primeira cena e o primeiro nível para ser a segunda cena. Então você se lembra dos decks do edifício. Se você não fizer isso, você precisará ir em frente e verificá-lo. Está nas Configurações de compilação de arquivos, acredito. Sim. Sim. Então, precisamos começar o jogo. Para iniciar o jogo, precisamos carregar o primeiro nível. Para carregar o primeiro nível, obviamente, precisamos ter um gerenciador de cena e todas essas coisas boas. Espero que você não tenha esquecido como fazer isso. Foi algumas seções atrás. Crie o método de início do jogo, verifique se ele é público. E o método acessa o gerenciador de cenas e obtém as configurações de compilação do ativo atual visto. E então você precisará aumentá-lo em um. E assim como uma pequena dica, Você precisa acessar o gerenciador de cenas, obter cena ativa e criar índice mais um. Então, com isso fora do caminho, pause o vídeo agora mesmo e vá fazer o sozinho. Certo, bem-vindo de volta. Então, antes de tudo, deixe-me remover o início e a atualização. Não tenho certeza se vamos usá-los. E aqui vou adicionar na gerência sênior do motor ponto. E agora vou criar um vazio público. Void star game deve estar em maiúsculas e este não deve iniciar o jogo. Isso abriu as linhas rabugas. E aqui vou acessar a carga de pontos do gerenciador de cena vista. E que cena eu deveria estar carregando? Bem, antes de tudo, vamos para as Configurações de compilação de arquivos. E a tela de título já é a primeira. Então, o que eu quero fazer como eu quero obter o índice deste e, em seguida, aumentá-lo em um. Então, vou seguir em frente e pegar essa cena. Gerente ponto, obtenha cena ativa. E aqui vou obter o índice de compilação e vou aumentá-lo em um. Então vamos imediatamente para a próxima cena. Salve isso. Agora vamos voltar ao nosso jogo. E vamos ver se isso funciona. Então, vou correr de novo. Andamos por aí, destruímos coisas, saímos do jogo, não funciona. Comece o jogo. E isso não funciona porque não atribuímos o quão inteligente da nossa parte, não atribuímos o botão de parada para fazer nada. Então menu principal, quantas vezes cometerei esse erro até finalmente salvarmos isso? Execute o jogo. Vamos começar de novo. Lá vamos nós. Então, agora estamos no primeiro nível. Quão legal é isso? E sabemos que é o primeiro nível porque temos todos os esqueletos aqui. Veja, mesmo que não tenhamos feito nenhuma alteração nesse nível, mas como mudamos os prefabs do esqueleto, eles agora podem pegar as coisas. Obviamente, há algumas coisas que precisamos mudar. Mas, por enquanto, sabemos que o jogo inicial funciona, o jogo de saída funciona. Criamos uma tela de título. Vamos comprometer nossas mudanças e vamos ver você ou, na verdade, vou vê-lo no próximo vídeo. 83. Com tela Victory: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, como você pode ver, criamos uma vitória, não vimos nada de especial demais, nada muito extravagante e apenas temos a vitória. Pressionamos qualquer tecla, coletamos, vamos ao menu principal, começamos o jogo, apenas começamos de novo. Temos isso estranho por algum motivo, temos a arma não funcionando corretamente. Vamos lidar com isso mais tarde por algum motivo, quando passarmos pelos níveis pode ser algo perdido ao longo do caminho. Mas há algo que eu quero fazer nesta introdução e eu não pensaria ao fazer o vídeo e isso está adicionando a camada aqui. O que vou fazer é clicar com o botão direito do mouse na vitória Canvas e na interface do usuário. Será muito simples. Você se lembrará de fazer isso. Vou chamar essa camada D. Vou adicionar o sprite a ele, enviá-lo para a noite upsized. E então criarei uma animação que está na animação de ativos. E vamos ver, acredito que fiz o jogador dançante aqui. Vamos remover isso e criar meu próprio jogador de dança. Então, salve isso. Sim, quero substituí-los. E então criarei a animação dos jogadores dançantes ou selecionarei esses dois, colocá-los aqui e vamos ver isso. Certo, isso é muito rápido. Pare, pare, pare, pare, pare, pare. Copie isso, cole-o aqui. E vamos ver como isso parece. Isso ainda é extremamente rápido. Vamos adicioná-los cinco separados. E, no entanto, não parece muito bom. Mas sim, nós gostaríamos de ter o jogador fazendo o Cancun de cada lado. Então, definimos um aqui, duplicamos, definimos um aqui, mas vamos fazer a escala desse menos um. Então, agora, quando executamos o jogo, quero dizer, corremos a tela da vitória. Lá vai você. Temos dois ken, Ken's, a vitória e mais NEG, e depois vamos para a camada. Excelente. Então, como você pode ver, obviamente há um problema aqui. Vamos analisar isso mais tarde, mas por enquanto, não vamos perder mais tempo e vamos finalmente chegar à tela da vitória. Caso 0. Então, agora que temos uma tela de título, também queremos criar uma tela vetorial. Então, vamos seguir em frente e fazer exatamente isso. Vou entrar em meus sprites, que eu digo sprites, eu quis dizer minhas cenas. E em cenas vou seguir em frente e criar uma nova cena. Portanto, clique com o botão direito Oh, onde está a cena? E aqui, lá vamos nós. Então, cena, e esta será a tela da vitória ou cena Vector3 ou o que você quiser chamar, pressione Enter. E vamos adicioná-lo às configurações de compilação agora. Então, vou arrastar a tela da vitória vista aqui. Lá vamos nós. Abra. Como você pode ver, não temos absolutamente nada que manterá essa coisa simples. É muito fácil. Então eu vou para o seu Canvas e esta será a vitória Canvas. Nada demais aqui, então apenas o scaler de tela definido como 1920 por 1080. Então aqui vamos nós, 1920. Então AT, e você está muito familiarizado com o que está acontecendo. Há apenas uma coisa que talvez seja um pouco particular. Então, eu vou saber não apenas ainda, não o desafio, ainda. Deixe-me fazer algumas coisas aqui. Então esta é a nossa cena de vitória. Vamos ver como ele se parece no jogo. Ok, então clique com o botão direito do mouse, vamos criar uma imagem , uma imagem aqui, e vamos nos certificar de que ela preenche toda a tela assim. Vamos torná-lo completamente preto. Ou você pode mantê-lo largo, você pode fazer o que quisermos. Então, vou definir para preto. E aqui vou dizer que também quero adicionar uma sonda Mesh de texto. As pilhas. Muito profissional será o texto da vitória. Lá vamos nós. Vamos fazer o tamanho automático, aumentar o máximo. E vamos torná-lo um pouco maior. Lá vamos nós. Vamos mudar, torná-lo ousado. Faça isso no meio. Defina para o Robo. E vamos remover o underlay daqui. Eu não estou gostando de tanta água, então vamos tentar aqui. Vitória com alguns pontos de exclamação e aumentará o máximo para caber nesta tela inteira. Lá vamos nós. Então, fábrica. E então o que vamos fazer é duplicar esse texto, movê-lo um pouco para baixo e talvez os tamanhos para baixo. Opa, e isso lerá. Enquanto isso, então esta será pressionada qualquer tecla. E aqui, pressione qualquer tecla para retornar ao menu principal. Então lá vamos nós, pressione qualquer tecla para retornar ao menu principal. Vamos apenas executar este jogo e ver como isso parece. E lá vamos nós. Então, como você pode ver, a vitória pressione qualquer tecla para retornar ao menu principal. Muito simples, nada muito complicado. Então, vou emitir um pequeno desafio para fazer com que o texto apareça após dois segundos. Portanto, crie uma animação que faça com que o texto apareça após dois segundos e faça isso sem nenhum código. E se você quiser um desafio extra que eu não incluí no slide, você também pode criar uma maneira de pressionarmos qualquer tipo de botão. Portanto, não precisamos fazer um pouco de pesquisa aqui. Então, pressionamos qualquer botão e depois vamos para o menu principal. Isso também é um desafio para você fazer em ambos os lados. Então, fora do caminho, pause o vídeo agora e depois vá para o desafio. Certo, bem-vindo de volta. Então, o que vamos fazer aqui é que vamos apenas criar uma animação. E entraremos nas animações de ativos e vamos criar uma nova pasta para a vitória. Texto. Aberto, aberto e ouve cerveja. Depois de dois segundos. E eu sinto, veja quantas pastas agora temos. E eu sinto que esse projeto era sobre criar tantas pastas quanto você puder. Então, bem-vindo à versão mais recente de criar a maioria das pastas que você pode. De qualquer forma, vamos continuar. Então, temos isso aqui. Vamos acessar o texto de qualquer tecla pressionada. E aqui vou adicionar um grupo de telas. Então esse grupo. Então agora podemos brincar com o Alpha. Lá vamos nós. E vamos remover a interatividade e o bloqueio do re-cast. E aqui vamos pressionar gravar e depois de dois segundos. Então, vamos começar em 0. E na marca de 2 segundos, vamos ficar em 0 e talvez adicionar o ticket, talvez 1 segundo para carregar. Então, aqui, isso se tornará um. Mas na marca de 2 segundos. Então, como você pode ver, isso progredirá lentamente. Então, não, eu não quero que seja assim. Quero adicionar 0, tenho isso. E como vamos fazer o sal aparecer por conta própria? Bem, isso provavelmente será um pouco chocante para você, mas quando executarmos o jogo, isso acontecerá sozinho. Então, começamos o nível. Então chegamos 12. Lá vamos nós. Então, temos o texto aparecendo. Obviamente, não queremos ter loop. Então, vou para a vitória e me certificar de que não fazemos um loop. Agora, a próxima coisa a fazer é fazer com que pressionemos qualquer tecla para voltar ao menu principal. Então, vou entrar nos roteiros aqui. E onde devemos adicionar? Vamos apenas adicioná-lo na interface do usuário. Acho que este é um bom lugar para isso. E vamos clicar com o botão direito em criar C-sharp. Vitória. Não, na verdade, você sabe o que você é é um lugar ruim para isso. De qualquer forma, tela de vitória. E isso será extremamente simples. Mas onde devo colocá-lo? Se não estiver na pasta UI? Scripts, vamos ver, armadilhas, armas, menus, sim, monumento. Claro, o menu é um lugar melhor. Então, vamos arrastar essa vitória e para a pasta do menu. E na pasta do menu, vamos adicionar a vitória à vitória Canvas. E aqui Vamos clicar duas vezes se abre , remova o início. Não precisamos dele por enquanto. E como vamos mudar de cena para cena, vamos apenas adicionar o gerenciador de cenas da interface do usuário ou o gerenciamento visto. E aqui vamos dizer que o ponto de entrada get key down ou não, desculpe, não get key down porque não queremos nenhuma chave específica. Então, aqui, espero que você tenha tentado fazer um pouco de pesquisa. Há algo chamado qualquer chave para baixo. E vamos dizer isso, e isso é suficiente. E você pode ver aqui retorna verdadeiro. No primeiro quadro, o usuário pressiona qualquer tecla ou até mesmo um botão do mouse. Então, vamos para a carga de pontos do Scene Manager vista. E vamos carregar a primeira cena porque sabemos que sempre, sempre, sempre , o menu do título será o primeiro C. Então salve isso. Voltamos ao nosso jogo. Vamos executar o ganho. Então lá vamos nós, vitória. Dois segundos. Pressione qualquer tecla para continuar no botão Demos. E agora estamos na cena do menu do título e algo que eu esqueci de lhe dizer. E isso é que você pode realmente adicionar algum tipo de música aqui. Então você pode ver que podemos sair, iniciar o jogo. E lá vamos nós. Estamos novamente iniciando o jogo. Whoa, o que é isso? O que é isso? Parece algum tipo de lançador de chamas. Acho que há um pequeno problema, mas não vamos nos preocupar com isso por enquanto. Resolveremos o problema mais tarde. Obviamente, há algum tipo de erro e algum tipo de parte do código por causa da forma como estamos fazendo a transição, mas não se preocupe com isso mais tarde. Talvez eu acredite na última seção em que realmente fazemos a unidade avançada ou avançado C-sharp, Um deles, na verdade, criamos uma maneira muito sofisticada de passar por níveis, mantendo tudo conosco. Então saímos do caminho. Obrigado por assistir. Espero que você esteja gostando. Espero que você esteja preparando todos os seus arquivos. Preparando todos os seus arquivos, confirmando todas as suas alterações. Acabei de fazer uma tela de vitória. Confirme as alterações. E te vejo no próximo. 84. O restauro de nível após a morte: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos adicionar um pouco de funcionalidade à nossa tela surda. Então, atualmente, quando andamos por aí, estamos vivos e está tudo bem. Quando morremos, temos a opção de reiniciar o nível, então começamos no mesmo nível, ou temos a opção de voltar ao menu principal e chorar um pouco. Então, não vamos perder mais tempo e vamos começar. Ok, então agora temos tudo. Temos o título, temos a vitória. É hora de fazer algo sobre tela surda. Então, atualmente, quando morremos, você pode ver agora se executarmos o jogo com IA, você pode ver que temos a UTI, temos o lote resfriado, mas não há nada a fazer. Então, ficamos sentados lá até interrompermos o modo de reprodução novamente. Não queremos fazer isso. Queremos ter um loop contínuo em nosso jogo. Então vou fazer é entrar na tela surda. E aqui vou clicar com o botão direito do mouse e vou criar um botão ou você sabe o quê? Antes de fazer tudo isso, vou lhe emitir um desafio. E seu desafio será criar os dois métodos e os dois botões. Então, antes de tudo, você precisa criar dois botões, deseja reiniciar o nível e querer voltar ao menu principal. Você precisará criar um método para cada um desses botões. E então você precisará atribuir as funcionalidades a esses dois botões. Então, com isso fora do caminho, acredito que você já sabe como reiniciar um nível. Você precisa carregar a cena que estamos atualmente na qual podemos obter, sendo vistos ativos. Então, pause o vídeo agora mesmo e vá fazer o desafio. Oh, ok, bem-vindo de volta. Como você se deu bem com isso? Então, porque os desafios atuais estão ficando um pouco chatos porque você já sabe de tudo. Então, adorei todo o vídeo para você. E estou editando coisas sem ver a tela de profundidade. Então, vamos transformar o Alfa para um para que possamos ver corretamente o botão. E vamos ver o que vamos fazer aqui. Então, temos o botão. Vamos selecionar este e vamos torná-lo maior. Mova para a esquerda. E então aqui vamos remover o texto e adicionar nossos próprios textos. Então, tudo o que estou fazendo aqui já cobrimos. Então, diga o nível de reinicialização. E vamos definir tudo adequado, tudo e tamanho adequados, máximo, máximo e obviamente o botão aqui deve ter os botões de elementos da interface do usuário e deve ter esse sprite aqui. Lá vamos nós. Então agora podemos aumentar o texto e torná-lo um pouco maior. Lá vamos nós. Nós o tornamos ousado. Negrito, quero dizer ousado. Então agora temos o texto em negrito e vamos fazer esse botão. Fui maior. Sim, como isso parece? Acho que parece muito bom. Então, vou duplicar isso. Mova isso aqui. Este será o botão do menu principal e o texto será o menu principal. Lá vamos nós. Então eu acho que isso parece bom o suficiente. Vamos talvez apenas saber disso, o texto. Quero aumentar um pouco o tamanho do texto para a reinicialização. E lá vamos nós. Então eu acho que isso parece bom o suficiente. Salve isso. E agora vamos em frente e adicionar as funcionalidades. Então, no Scene Manager, queremos criar tudo. Quero dizer, gerente não invisível, você é um gerente. Queremos criar os métodos que nos levam ou reinicie o amante ou nos levam ao menu principal. Mas a coisa aqui é, e isso é uma filosofia no desenvolvimento de jogos. E onde você realmente quer fazer isso? Então, o UI Manager, o que ele faz? Isso nos leva de uma cena para a outra? Não, não acontece. Ele apenas gerencia a interface do usuário e esse é o seu trabalho. Então, um lugar melhor eu acredito, de fazer esse método ou criar esses métodos como no gerenciador de níveis, mas também ao mesmo tempo, não queremos que os botões tenham acesso ao gerenciador de níveis. Só queremos que os botões possam mudar as coisas no UI Manager. Então, estamos em apuros se você quiser chamá-lo assim. Então, o que vou fazer é confiar nos meus instintos e vou criar os métodos aqui. É um nível de reinicialização do vazio público. E a forma como reiniciamos o nível é simplesmente obter o gerenciador de cena, a carga vista. E qual cena vamos carregar o gerenciador de cena, ponto ficar ativo visto essa compilação e x. Então agora nós apenas carregamos a cena da cena ativa atual. Isso significa que recarregamos o nível e, em seguida, o vazio público re, retornamos ao menu principal. E aqui vamos ter essa cena de carregamento de pontos do gerenciador de cena. E vamos carregar as cenas 0 porque sabemos que a cena ou a cena do título ou a cena MainMenu está no índice 0. E agora vamos voltar para o UI Manager. E aqui vamos criar os mesmos métodos. Mas em vez de realmente fazer as coisas, vamos acessar o gerenciador de níveis e temos uma instância? Sim, temos uma instância. Então, aqui, vamos obter a instância de ponto do gerenciador de níveis, nível de reinicialização de pontos. E vamos fazer o mesmo aqui, mas em vez de reiniciar o nível, volte ao menu principal. Então, salve isso, volte para Unity. E sei que isso parece um pouco redundante. Sei que parece que estamos fazendo a mesma coisa de novo e de novo. Mas acredito que essa é uma maneira mais adequada de fazer as coisas. Assim, podemos ir para o UI Manager, nível reiniciado e o menu principal. Vá até seu gerente e volte ao menu principal. Salve isso. Vamos desligar a tela de profundidade. Primeiro de tudo, vamos aplicar as alterações que fizemos se aplicam. Então, agora desligamos. Primeiro de tudo, definiremos o Alpha como 0. Vamos virar a tela surda. Maior o jogo morre. E agora temos o reinício e o menu principal. Se eu clicar no menu principal, volto ao menu principal. Excelente. Vamos tentar isso novamente com o mesmo de reiniciar o nível. Morremos, começamos o nível. Lá vamos nós. Estamos de volta ao nível 2, baby. Muito excelente trabalho. Espero que você goste. Espero que você tenha feito esse desafio. Espero que você tenha tentado o seu melhor e eu parabenizo se você fez isso do início ao fim, tudo por conta própria. Vou encenar tudo, sage todos cometer as alterações. Criou uma maneira de reiniciar o nível ou voltar ao Menu Principal após a morte. E não é uma forma criada. Dois botões para reiniciar o nível voltam ao menu principal após a morte. E quando as mudanças. Se você ainda não me deixou um comentário, se não, você pode esperar um pouco e depois me deixar um comentário. Este é o momento perfeito e verei você no próximo onde estaremos criando um dos aspectos mais legais de qualquer jogo, que é o menu de pausa. Então, verei você. 85. Configuração menu de pausa: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, quando executamos o jogo, quando tivemos o pico, você pode ver que temos um menu de bolas. Podemos ir ao menu principal em obras, confiar em mim ou podemos retomar o jogo. Se retomarmos o jogo, estamos de volta e de novo, também podemos pausar isso novamente, e em vez de clicar em um dos botões, podemos acertar o pico. Mas somos que isso é algo que também abordaremos no próximo vídeo. Mas, por enquanto, vamos em frente e crie nosso menu de pausa. Oh, ok, então agora queremos adicionar a capacidade para o nosso jogador pausar o jogo. Nosso jogador, quero dizer, o cara que, ou a garota que está realmente jogando nosso jogo. Então, como vamos fazer isso? Bem, vai ser bastante simples. Vamos duplicar a tela de profundidade. E esta será a tela de pausa ou o menu de pausa. Então, pause o menu e pressione Enter. E aqui vamos ter tudo o mesmo, exceto pelo deixe-me ligar isso, exceto pelo lote. Então, antes de tudo, o sangue, não queremos o sangue e o menu de pausa, será deixe-me colocá-lo no um. Então, temos a imagem aqui, mas queremos deixá-la um pouco desbotada para que possamos ver o fundo. Então, vamos dizer 0,5, ok? Então, teremos isso em 0,5. E então vamos mover o botão de reinicialização. E você apenas faz com que menor mova o botão de reinicialização aqui, mova o menu principal aqui. E em vez de reiniciar o nível que você pode manter se quiser, mas vamos fazer este botão Continuar. Então, o botão Retomar e no texto aqui só retomará o jogo. Então lá vamos nós. Agora temos esses dois botões. Obviamente, precisaremos mudar as funcionalidades e aqui. Mas isso é algo e eu alguns minutos. Primeiro de tudo, vamos abrir o UI Manager. E aqui vamos fazer algumas coisas. Primeiro de tudo, obviamente precisamos de uma referência. Então, vou criar um campo serializado do objeto do jogo, que é o menu de pausa. Salve isso. Mas a coisa aqui é, como dissemos no vídeo anterior, UI Manager, ok, talvez ele ligue e desligue o menu de pausa, mas ele não é responsável por realmente pausar o jogo. O gerenciador de níveis é o script responsável por fazer isso. Então, no gerenciador de níveis, vamos criar um bool público. E vamos chamar isso, o jogo está pausado. E, obviamente, não quero torná-lo público, mas vamos usá-lo muito. Você sabe o quê? Não vamos torná-lo público. Vamos torná-la uma variável privada e criaremos uma maneira de acessar. Então, um bool público está em pausa no jogo, e nós apenas retornaremos. Então, às vezes, são um pouco complicados. Talvez você esteja pensando, Bem, estou criando muito ouro. Mas confie em mim, quando você chega aos níveis mais altos, ao nível profissional, essas são coisas essenciais para se ter. Não quero que seu jogo seja facilmente corruptível por meio do código. Então, agora que temos o jogo está pausado até que eu gerente temos o menu de pausa que obviamente queremos acessar de alguma forma, altere o menu de pausa. Então eu vou criar um método aqui que vai dizer que o vazio público ative, pausa, menu ligado, desligado. E vai levar um booleano que vai ser o ligado, desligado. E eu sei que essa não é a melhor maneira de representar a variável, mas de qualquer forma, vamos continuar. Você verá o que quero dizer. Então, aqui, vamos seguir em frente e pegar o menu de pausa, diretiva de pontos para ligar, desligar. Então, agora voltamos para o gerenciador de níveis. E aqui vamos criar um vazio público. Pausa, retome o jogo. E o que faremos aqui é que vamos verificar se não estamos no jogo pausado. Então, ainda não fizemos uma pausa. Em seguida, acessaremos o UI Manager. Instância de ponto, ponto, pausa, ative e desative o menu de pausa. E o que vamos defini-lo? Bem, vamos apenas defini-lo como verdadeiro. Porque se não formos um jogo sem oposição, quando pressionamos algum tipo de tecla , queremos ativar o menu de pausa. E então. Isso significa que se não tivermos pausado o jogo. Então, se nós ou me desculparmos, se estivermos em um jogo pausado. Então vamos fazer o mesmo aqui, mas, em vez disso, vamos desligá-lo. E isso irá para o eixo UI Manager, este e o desligará. Então, com isso fora do caminho, há algo que ainda precisamos fazer e que é realmente virar ou mudar este jogo vez de usar algum tipo de botão. E esse será seu desafio para retomar o jogo usando algum tipo de chave. Portanto, verifique se há entradas e, quando pressionado, devemos chamar o método e retomar o ganho ou pausar o jogo e certifique-se de alterar o status do jogo. Então, se estiver pausado ou se não estiver mais, então pause o vídeo agora mesmo e vá criar uma entrada. Certo, bem-vindo de volta. Então, onde você quer colocá-lo? Acho que aqui em cima. Então, uma atualização, vamos verificar se o ponto de entrada get key down e um código de chave para p. Então vamos pausar, retomar, o jogo. É simples assim. E então termine aqui. Se não tivermos pausado o jogo, então o ganho não está pausado. Nós clicamos no pico, ligamos. Então, a ativação, desligar é verdade. Então, aqui vamos dizer que o jogo está pausado, é igual a verdadeiro. E duplique isso e mova isso aqui. Falso. Salve isso. Então, vamos testar isso. Espero não ter cometido um erro com o falso e o verdadeiro. Por que acredito que está correto. Então, no botão Continuar e vamos adicionar algo aqui, que é a tela da interface do usuário. E aqui vamos para o UI Manager. Vamos encontrar o menu ativar, pausar ativado, desligar. E, como você pode ver, temos a opção de adicionar verdadeiro ou falso. E este é o booleano real aqui que liga todos os caminhos. Então, de volta ao nosso jogo e aqui, vamos primeiro virar o menu de pausa, executar o jogo. Então, e aqui temos o pico. Podemos voltar ao menu principal. Também podemos acertar o pico do que o pico de volta. E depois desativamos o menu de pausa. Lá vamos nós. Mas ainda há uma coisa que é o botão Retomar. Agora vou seguir em frente e adicionar o evento onclick aqui. E eu vou quebrar minha própria regra de adicionar o gerente de nível do gerente todo mundo agora é como, Oh, não quebrar as regras. Mas sim, eu sou. Vou entrar no jogo de currículo de pausa restaurado. Então execute o jogo. E agora vamos pressionar a tecla, retomar o jogo e tudo funciona bem. Mas como você pode ver, se eu pausar o jogo, ainda posso andar por aí. Ainda posso atirar em inimigos e ainda posso morrer. Agora, se você quiser criar almas escuras, peça um tipo de pausa no jogo onde o jogo continua em segundo plano. E você apenas senta lá indefeso tentando descobrir o que está acontecendo no menu. Seja meu convidado. Caso contrário, se você quiser que o mundo pare, continue para o próximo vídeo. Mas antes de fazermos isso, obviamente precisará cometer nossas mudanças. Então, vejo você. 86. Na t de a usar a página: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, vamos aplicar as alterações que fizemos. Não só isso, vamos executar o jogo quando devemos impor, você notará que mesmo a bala congela e o espaço matemático, se tentarmos andar por aí, nada acontece. E se tentarmos atirar, também, não são produzidas balas. Portanto, esta é a análise real do jogo, não apenas ter um menu. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, mesmo que tenhamos a tela de pausa, podemos voltar. Podemos ir ao menu principal. Na verdade, não estamos pausando o jogo. O jogo ainda está em execução, ainda podemos correr, ainda podemos pular. Podemos fazer tudo. Na verdade, não pulamos. O inimigo ainda nos ataca. Então, precisamos descobrir uma maneira realmente congelar nosso ganho. E eu não estou me sentindo bem nisso. Então, vou apresentar a vocês um desafio para parar o mundo inteiro com um l, congelar o mundo usando escala de tempo. Então este é o único ponto e o desafio, bem fácil, acho que você sabe o que fazer. Então, pause o vídeo agora mesmo e vá congelar o mundo. Ei, bem-vindo de volta. Eu sei que você odeia quando te dou um desafio no início de um vídeo, você está apenas sentado. Sim, finalmente, vou aprender algo e, em seguida, Michael só te dá um desafio. Ok, de qualquer forma, aqui, uma vez que pausarmos o jogo e acessaremos o tempo, um ponto por hora delta. E vai ser igual a nenhum tempo que a escala de tempo 0, F. E aqui, quando pararmos o chefe, a escala de tempo do ponto é igual a 1,5. Salve isso de volta em nosso jogo. Ou vamos fazer isso um pouco maior, executar o jogo. Então, pause o jogo. Excelente. Mas há um problema, e isso não está aparecendo nada. Não só isso, mas ainda estamos sendo capazes de mexer a arma. E o que aconteceu aqui? Bem, o problema é que nosso menu de pausa está sendo tratado ou está aparecendo usando a animação. Então, o que vou fazer é entrar no animador aqui. E vou remover os componentes para que não tenhamos mais animações. Então, agora, quando executamos o jogo, pausei o menu e tudo pára. Mas como você viu, ainda posso me movimentar com o inimigo. Não me mova, mas ainda posso atirar e produzir balas. Lá vai você. Você pode ver a estabilidade e eu posso produzir alguns desses. E isso não é algo que queremos quando retomamos o jogo, tudo volta ao normal, mas isso não é suficiente. Então, o que vamos fazer é ir para onde ele está? Controlador do jogador. Então, jogador, o controlador do jogador. Então, controlador do jogador. E aqui, se rolarmos a atualização, iremos em frente e terminaremos aqui. Digamos que se o jogo de pontos da instância de ponto do gerenciador de níveis estiver pausado quando o jogo pausado. Então, se for verdade, isso significa que vamos simplesmente retornar. E lembre-se do que acontece quando simplesmente retornamos, apenas evitamos todo o objeto. Então, se chegarmos a essa linha, verificaremos se está pausada, true. Em seguida, retornamos e voltamos para a Atualização, e depois voltamos para a atualização. Então o jogador não faz nada. Ele não pode se mover, não pode apontar a arma. Ele não pode ser animado, saber arrojado, trocar gengivas, não, nada. Então agora de volta ao nosso jogo, quando ganhamos o ganho, agora podemos pausar o jogo. E você pode ver que nosso jogador não se move mais mesmo que ainda possamos produzir uma bala por algum motivo. Oh, isso é porque o tiro real está no que é chamado de sistema de armas. Então, retomamos o jogo, o barco voa. Você pode fazer isso em qualquer lugar que quiser dentro da atualização sempre que tiver algum tipo de coisa, enquanto o sistema de armas que entramos aqui, uma atualização. Lá vamos nós. Agora não poderemos mais disparar balas. Você também pode adicionar isso aos controladores inimigos, onde eles também nos atiram com moles. Então, acho que este é o fim da criação de menus e do nosso jogo. Vou cometer nossas alterações. Vamos chamar isso de menu de pausa feito. Na verdade, bolas. Mais uma vez. Confirme as alterações. Espero que você goste. Vejamos nossos mestres. Enquanto tivermos aqui, ainda temos tempo. Este vídeo foi muito curto. Quero dizer, olha, veja o quanto conseguimos juntos. Esse ganho é incrível. Tem tantas coisas, tem tantas opções, tantas variáveis, tantos scripts, tantas pastas como as pastas que temos são eu não sei o que ela quase em 100 pastas, eu acho. Provavelmente temos tantas animações que não gostam. Veja quantos e ainda não animamos tudo. Ainda temos muito o que fazer. Pode animar os inimigos quando atiram, ainda há muitas coisas que podemos adicionar. Então, como esse vídeo é curto, quero que você aproveite o tempo para orar, depois expire e aprecie o quão longe você chegou em sua jornada de desenvolvimento de jogos. E que crítica incrível. Você acabou de me deixar de qualquer maneira. Muito obrigado por assistir. Eu realmente aprecio se você chegou a este ponto. Se você me deixou uma mensagem na pontuação, vamos conversar. Diga à comunidade o quanto você veio, quanto você aprendeu, quanto você realizou e o vê no próximo, eu acho, onde vamos criar uma luta contra chefes, eu acredito, que é como a coisa mais legal do mundo. 87. Seção 15: bates de Boss (a máquina de estados C# avançada - Introdução à máquina: Bem-vindo de volta meus colegas desenvolvedores de jogos para um novo vídeo na nova seção. E uma das melhores seções, vou apresentá-lo ao ônibus Skelly chefe. Não vou desperdiçar muito seu tempo. Primeiro de tudo, falaremos sobre a máquina de estado, o que é, como é, por que estamos usando, como vamos usá-la, usando o animador, todas essas coisas boas. E na segunda parte do vídeo, falaremos sobre as animações que criei apenas para guiá-lo durante o processo. Se você criou as animações, no meio, teremos um desafio. Se você já fez todas as animações, você pode pular a segunda parte. Ou se você acha que precisa de um pouco de ajuda, eu apenas o guio através de um pouco do que fiz. Então, com isso fora do caminho, não vamos perder mais tempo. Então vamos começar com o caso chefe luta 0. Então, uh, bem-vindo a uma das partes mais emocionantes de todo este projeto e essa é a maior batalha. Que ganho está completo sem um botão de perda? Sem jogo. Então, vamos em frente e pensar em como vamos criar uma batalha contra chefes. Primeiro de tudo, vamos falar sobre algo chamado máquina de estado. Se olharmos aqui no animador, você notará, e vamos pegar o jogador da condenação, por exemplo. Você notará que essas são, de fato, animações, mas elas também funcionam como estados. Portanto, temos os estados, ou estou no estado dos links de ID de jogador ou nome do jogador. Ele é uma propriedade. Ele pode fazer coisas específicas. Ele não pode se mover. Por exemplo, ele pode atirar, ele pode fazer muitas coisas, mas ele está em estado de marcha lenta. Então temos o estado de caminhada e, em seguida, temos o jogador arrojado. Por exemplo, quando estamos arrojados, temos certas animações. Também não pode se mover. Quero dizer, desculpe, não podemos atirar com nossas armas ou armas. Então isso é um sinal de um estado diferente em que temos diferentes mecânicas e comportamentos diferentes. Então, vamos usar o animador para produzir esses tipos de estados. E eu estava o tempo todo chamando essas animações. Mas muitas pessoas gostam de chamá-los de estados. E tudo bem. Você pode chamá-los do que quiser, desde que descreva corretamente o que está acontecendo. Então, vamos falar mais sobre estados e o que uma máquina de estado, como uma máquina de estado, é um modelo comportamental. Consiste em um número finito de estados. Então modelo de comportamento, assim como temos a marcha lenta, assim como temos o avião, desculpe, a corrida e o arrojado. Estes são modelos comportamentais e são finitos. Então, sempre precisamos saber quantos estados temos. E uma determinada entrada, a máquina executa transição de estado e produz saídas. Então, assim como temos as transições entre as animações no animador, então uma máquina de estado tem transições? É por isso que o animador é o perfeito, digamos que a ferramenta para criar essa máquina de estado. Então, vamos falar sobre o que temos em nossos estados. Primeiro de tudo, temos o estado inicial. Então, temos o estado inicial, fazemos a transição para outro estado que é a ou o que quer que seja. Talvez comecemos por marcha lenta, depois passamos para caminhar, então podemos fazer a transição entre, por exemplo, e isso tudo é um exemplo entre dois estados, B e C. E, por exemplo, quando vamos do estado a para o estado C, não podemos voltar ao estado a, bot do estado C, podemos ir para o estado B, ir para o estado a e, em seguida, para frente e para trás entre a e b. Portanto, este é apenas um exemplo do que um estado poderia ser. E, obviamente, em cada transição, temos condições. Portanto, certas condições devem ser atendidas para fazer a transição de um estado para outro. E isso é algo que temos feito o tempo todo e as pontuações. Então, vou continuar. Vamos falar sobre a máquina do estado chefe que vamos ter. Então, o primeiro estado será o que aparece. Então o chefe, assim que entrarmos na sala do chefe, o chefe começará a aparecer do chão e você verá os sprites do chefe em um pouco. Eu forneci a você com eles nos recursos. Então começamos a andar. Assim que o chefe ganhar vida, ele começará a caminhar em direção ao jogador. Portanto, não há tempo a perder, sem marcha lenta, sem nada. O chefe só começa a caminhar em direção ao jogador. Então temos os cinco tiros. Então, daremos a habilidade ao nosso enorme chefe de esqueleto que você verá em apenas um pouco para disparar certos tiros adder. Assim como tínhamos as balas inimigas, assim como tínhamos as balas do jogador, também teremos as balas do chefe que serão disparadas de muitas direções. Então teremos os ataques corpo a corpo ou, assim como prometi, vamos criar um ataque corpo a corpo para o nosso chefe que atacará o jogador assim que ele estiver perto daqui. Então, teremos algum tipo de temporizador. E, obviamente, queremos que a transição vá para os dois sentidos. Por exemplo, não queremos aparecer, caminhar e depois aparecer novamente. Então é isso. Uma vez que aparecemos, nunca voltamos ao estado sob uma determinada condição. Começamos a andar. Sob uma certa condição, começamos a atirar tiros e depois começamos a andar novamente. E sob certas condições, também começamos a atacar corpo a corpo e, sob certas condições, voltamos a caminhar. Mas depois há a segunda parte da luta. E é quando nosso inimigo fica com raiva ou nosso chefe fica com raiva quando atiramos nele o suficiente para que sua saúde diminua. Ele então começa a andar com raiva. Ele começa a disparar tiros com raiva. Ele começa angularmente, principalmente nos atacando. Ele mudará de cores, você mudará de tamanho. E finalmente, quando o matamos, se o matarmos, se conseguirmos fazê-lo, temos o estado de morrer onde ele não pode mais nos machucar. Ele desaparece e nós fomos. Então eu vou, se você quiser, você pode pausar o vídeo, olhar para isso, tomar esse fim. Vamos fazer tudo isso em nossos próximos vídeos, mas também vou te dar um desafio para criar todas as animações e pensar assim, criar as animações que teremos para o chefe. E deixe-me mostrar os recursos. Temos a aparência, o ataque, o corante, o ocioso, a caminhada. E se você não tiver certeza do que o Angry vai mostrar brevemente depois que eu terminar todas as animações, não vou fazê-las ao vivo porque honestamente vai levar muito tempo. Será preciso muito esforço. Vou apenas criar uma nova cena, colocar as barras lá e criar algumas animações. Então você precisará criar o aparecer, atacar, andar, atirar, ficar com raiva, irritar, atacar com raiva , atirar com raiva, andar. E agora, se você não tem certeza de como criar a raiva, apenas pelo menos a caminhada com raiva, por exemplo, é a mesma que o tiro com raiva, desculpe. Quero dizer, a caminhada com raiva é exatamente a mesma que a caminhada regular. Mas o que vou fazer é aumentar a escala do inimigo, do chefe. E eu também vou fazer dele um pouco de cor vermelha para que ele pareça diferente. O ataque com raiva é o mesmo que o ataque. E, finalmente, queremos definir o estado de raiva, que o estado de raiva terá apenas o chefe como cor vermelha, um pouco maior e em escala e animações um pouco mais rápidas também. Então, com isso fora do caminho, pause o vídeo agora mesmo, e eu não sei, talvez eu mostre a vocês no próximo vídeo as animações. Talvez eu mostre neste aqui as animações só para que ele possa ver tudo, configurar tudo. E eu te vejo no próximo mês talvez, talvez, você sabe. Ei, bem-vindo de volta. Então, como você se deu bem com isso? Eu só queria mostrar algumas coisas ou maneira como eu criei meus estados e como fiz a caminhada com raiva, tiro com raiva e ataque com raiva e como eu fiz o ficar com raiva pode ser que você possa se inspirar. Também consertei algumas coisas. Se você fez o ataque, você deve ter notado que o sprite se move para a direita, que não é muito bom. Então eu também conserto isso. Então deixe-me mostrar o que eu fiz. Primeiro de tudo, tenho todos os meus sprites aqui, a Bíblia ataca o ocioso que não usamos. Então você pode ver a caminhada. Todos eles foram mantidos quase iguais. Acabei de mudar o filtro e fazer os pixels por unidade 75. E o que eu fiz, esse chefe da Kelly. Então deixe-me mostrar o que eu fiz aqui. Então, digamos que estamos aparecendo. Deixe-me mostrar o aparecimento. Muito simples, muito normal. Só lá vai você. Você pode ver que temos o esqueleto aparecendo. Você pode ver que eu adicionei dois coliders de caixa. Um deles é um gatilho para que possamos caminhar como você sabe, onde caminhamos pelas paredes. Me fez ver. Certo. Então, aquele na parte inferior, o de cima, que é este. Lá vamos nós. Posso desligá-lo e ligar. E você pode ver que é aquele que vamos fazer um gatilho que é só para podermos acertar o inimigo, mas ao mesmo tempo o inimigo pode ficar atrás do fundo aqui. Então lá vamos nós. Temos a aparência, como você pode ver. E essa estrutura aqui no animador. Ainda não criei as transições porque quero fazê-las à medida que criamos o código. Eu não queria fazê-los sem que você soubesse, porque em algum momento teremos tempo de saída, teremos tempo de transição e todas essas coisas boas. Então, como você pode ver, começamos aparecendo assim como fizemos nos slides do que andando e entre a caminhada e o tiro, então ficamos com raiva do que a caminhada irritada, o ataque irritado e com raiva tiro. Então, visite a caminhada. Lá vamos nós. Muito simples. Acabamos de andar por aí. Então temos o ataque. Então, como você pode ver, talvez no seu caso e até mesmo em mente ainda, você pode ver que o chefe apenas se move um pouco para o, cima e para a direita. Então observe lá vamos nós. Você pode ver que ele se moveu um pouco, mas isso é mesmo que nós mudamos um pouco nos sprites. Se você os manteve da mesma forma, você notará que o seu se move muito. Então, para corrigir isso, eu me certifiquei de entrar no Sprite Editor. E aqui mudei o pivô personalizado. Então este é o ponto em que vamos chamá-lo de centro. Na verdade, é um pivô. Mas há uma pequena diferença entre pivô e centro, mas este é o centro agora quando o centro estava bem aqui, porque toda a imagem foi movida para a direita. É por isso que todo o inimigo se move para a direita. Então o que eu fiz foi mudar o centro aqui, criei um pivô personalizado e foi 0.6554878. Se você quiser copiar esse número como eu fiz, ou talvez você possa encontrar um que seja melhor. mente não é perfeita. Como você pode ver, ele se move um pouco para a direita. Então você pode encontrar seu próprio valor e ver que não precisa ir e editar todos os sprites. Você só pode selecionar todos eles. E aqui, você pode selecionar o pivô personalizado na parte inferior e, em seguida, anotar esse número, mantê-lo em 0,5. Isso no Y, no x, mude para 6554878. Certo, e o que mais fizemos? Então este é o ataque e você pode ver que eu saio um pouco de espaço quando ele está marcando. Então, teremos um ataque deste lado. E quando o tipo for APU, espere um pouco apenas para dar espaço ao nosso jogador para talvez fugir. E então nós balançamos de volta para baixo. E quando vamos criar são principalmente ataques. Você verá como isso é crucial porque adicionaremos sistemas de eventos que danificarão o jogador somente quando o sal estiver em uma determinada posição. Não queremos danificar o jogador quando soldados se levantam porque obviamente o esqueleto não está balançando. Então vamos danificá-lo quando a fonte estiver bem aqui e vamos criar algum tipo de colisor circular aqui. E se o jogador estiver lá dentro, ele fica danificado. É assim que criaremos o ataque malaio. Então, o que mais devemos ao tiroteio? Então eu tenho este dos sprites moribundos, eu acredito. Sim, lá vamos nós. Então, é dos sprites moribundos e não é a coisa mais inteligente do mundo. Só preciso de algum sprite em particular. E como você pode ver quando estamos filmando, basta mudar a escala. A escala aumenta e depois volta para baixo. Você pode vê-lo aqui. Então eu envio o botão de gravação e depois os tornei maiores, menores, maiores, menores, maiores, menores. E é aí que estaremos filmando. Vamos acrescentar, assim como fizemos com um irregular. E isso significa que adicionaremos pontos de filmagem, então adicionaremos quatro. E então, quando ele estiver com raiva, vamos adicionar seis e falar sobre raiva. Vamos ver como ficamos com raiva. Então lá vamos nós. Você pode ver que é assim que ficamos com raiva. Primeiro de tudo, nos tornamos maiores. Então, temos o menor, maior, menor, maior. E também adicionei os sprites ociosos aqui. Você não precisa. Não notei muita mudança. Se excluirmos todos os sprites legais, nada muda honestamente, mas eu só queria ter algo diferente de apenas uma imagem obsoleta. Isso acrescenta, talvez em apenas um movimento pouco sutil para o jogador que com o inimigo, quero dizer para o chefe, para Skelly, você pode ver que ele fica maior, menor, maior, menor, e sua mão se contrai apenas um pouco o suficiente para apenas ter um pouco de vida e ele crescendo maior ou menor. E então você pode ver que ele se torna grande onde temos a escala em 1,3 no x e no y, obviamente no SAT, não precisamos dela. E então esperamos alguns segundos para o jogador perceba o que acabou de acontecer. E, finalmente, começamos a andar com raiva. Então, enquanto a caminhada com raiva ou com raiva, é exatamente o mesmo que a caminhada regular, mas é um pouco mais rápido. E no primeiro quadro, eu me certifiquei de definir a escala em 1,3. Então, na animação, eu tinha o registro. Eu mudo a cor para vermelho completo. Ah, e a propósito aqui, enquanto o ficar com raiva. Então eles ficam com raiva, você notará que ele se lê lentamente lê-la. E aqui, é aqui que eu coloquei para vermelho e ele se move lentamente. Você pode ver a cor aqui. Ele se move lentamente para ler. Na caminhada com raiva, nós apenas configuramos para ler no início, aumentamos a escala para 1,3 em todos os lados e fazemos a caminhada um pouco mais rápida. Isto é o que acontecerá quando ele ficar com raiva. Ele começará a andar mais rápido, então as animações serão mais rápidas. Temos o tiro com raiva, então exatamente o mesmo, a cor que ele só muda. É completamente rad porque neste momento toda a NME ou chefes vermelhos. E, finalmente, o ataque com raiva. É exatamente o mesmo, apenas com uma escala maior, uma cor diferente e movimentos muito mais rápidos. Então você pode ver que não há tempo de espera quando as fontes se levantam, ele continua cortando o tempo todo e criaremos a mesma coisa que teremos aqui, o dano. Nesta posição teremos o dano. E nesta posição também teremos o dano. Ok, então com isso fora do caminho, espero que tenha gostado deste vídeo. Espero que você tenha criado todas as suas animações. Demorou tempo para fazê-los. Isso é palco todo nosso whoa, isso é bom. De qualquer forma, por algum motivo eu tenho um erro. Vou consertar isso mais tarde. Mas, por enquanto, espero que você goste e eu o vejo no próximo vídeo, onde vamos realmente mover nosso inimigo e destruir coisas. Então vejo você. 88. Como configurar o movimento Boss: Bem-vindo de volta meus colegas desenvolvedores de jogos em um novo vídeo. E neste, se eu maximizar jogo para ver tudo quando eu correr o jogo, você notará que o chefe apela do chão e começa a caminhar em nossa direção. E quando ele chega a uma determinada posição, ele começa a colaborar nos espancando. Isso é mesmo um verbo apropriado? Ele começa a nos bater com seu sal gigante. Então isso não é perder mais tempo. E vamos começar. Oh, ok, então agora vamos fazer o inimigo realmente andar ou não inimigo , o chefe realmente começar a caminhar em direção ao jogador. Então, como vamos fazer isso? Se formos ao animador, primeira coisa que queremos fazer é fazer a transição da aparência para a caminhada real. Então, vou criar uma transição para a caminhada. E não haverá condição. Haverá apenas um tempo de saída e talvez uma duração de transição que veja como isso se parece. Então o inimigo aparece e lá vai você. Você pode ver que quando ele termina de aparecer, ele então faz a transição para a caminhada. Você pode brincar por aqui. Por exemplo, vamos aumentar o tempo de saída para 97%. Então, terminamos a sua aparição completamente. Vamos ver como isso parece. Ok, então há um tipo de erro aqui. E eu quero fazer tudo isso na sua frente só para que você possa ver como as coisas acontecem. Talvez demore um pouco mais do vídeo, mas eu tenho que te mostrar isso. Não quero confusão de qualquer forma. Agora que temos a caminhada, na verdade é hora de antes de tudo, encontrar a transformação do jogador, obter um corpo rígido, encontrar a direção, e assim por diante, adicionar a velocidade. Como vamos fazer isso? Bem, como você sabe, temos todos esses estados configurados aqui. Então, o que vou fazer, vou clicar na caminhada. E você pode ver aqui que posso adicionar algo chamado comportamento. Então, vamos clicar em Adicionar comportamento. Vamos seguir em frente e criar um novo script. E em vez de chefe ficar com raiva por algum motivo, vamos chamar isso de caminhar chefe. Portanto, adicionar um script de comportamento a um estado tem um tipo diferente de convenção de nomenclatura que vou usar. Na verdade, MINHA unidade usa o sublinhado, então vou manter esse padrão, digamos. Portanto, crie um anúncio, aguarde o arquivo ser importado. E lá vamos nós. Agora temos o pós-guerra. Se clicarmos e vermos onde isso realmente está, lá vamos nos ativos. Está imediatamente nos ativos. Então, se algum dia agora, se eu fizer isso um pouco maior para que possamos ver corretamente as pastas. E você pode ver que está apenas nos ativos. E por esse motivo, vou entrar nos scripts aqui, clicar com o botão direito do mouse e criar uma nova pasta para o sistema chefe ou chefe. Vamos chamá-lo de sistema POS. Pressione Enter e, em seguida, faça back-end dos ativos. Vou arrastar isso para o chefe. Lá vamos nós. E o chefe clica em andar. O roteiro ainda está lá? Portanto, a nova versão do Unity é extremamente válida de qualquer maneira, espero que a sua não demore tanto para compilar e entender tudo. Então, agora vamos clicar duas vezes no calçadão e vamos ver o que temos aqui. Como você pode ver, não temos mais um comportamento mono. Como você pode ver aqui, o comportamento de Mano geralmente é reservado a um script que será anexado a um objeto de jogo. Então, algo que se moverá. Por exemplo, aqui, não temos um comportamento motor, temos um comportamento de máquina de estado. E este é um script anexado apenas a determinados estados. Então, vamos continuar um, o que temos aqui? Assim como temos o início e atualização sobre o comportamento mono, temos o Enter no estado e a atualização no estado. Também temos a saída no estado, movimentação no estado e o QI no estado, seja lá o que for. De qualquer forma, não estaremos nos concentrando nos dois últimos, então podemos ir em frente e excluí-los. E aqui, vou selecionar todas essas linhas porque elas são comentadas. E podemos descomentar tudo usando a mudança de controle ou não, desculpe, Controle K, você. Lá vamos nós. Portanto, certifique-se de manter pressionada Control e pressione K você ao mesmo tempo. Como você pode ver, temos muitos erros. E isso porque essas linhas são, na verdade, os comentários. Assim como aqui temos sobre a atualização, a atualização do comentário é chamada cada quadro que você pode ver aqui, a entrada no estado é chamada quando uma transição é iniciada e a atualização no estado é chamada cada update e on exit é chamado nas transições. E tudo bem, Excelente. Então, agora vamos continuar. Aqui vou criar antes de tudo, a transformação para a camada perseguir. Então eu vou pegar. Um corpo rígido 2D. Então, chefe corpo rígido, sem chefe. Corpo rígido 2D. Ou você sabe o quê? Não vamos ter que liderar todo esse jogo é um jogo 2D, então não precisaremos disso e uma direção de três pontos do vetor para se mover. E assim como inimigos regulares, temos os componentes do chefe andando e assim por diante. Então, agora que temos isso, é hora de um desafio. E seu desafio será encontrar a camada IP e obter o corpo rígido. Então, antes de tudo, pense em onde deveríamos estar obtendo todas as referências. Então, geralmente usamos o início, mas agora não paramos. Então, onde deveríamos estar? Você acha que onde deveríamos usar um, onde deveríamos estar obtendo todos os nossos componentes? Então precisaremos encontrar o jogador, obviamente. Então vamos precisar colocar o corpo rígido no chefe. E vou te dar uma pequena dica. Precisaremos usar o animador a partir dos parâmetros. O que quero dizer com o animador a partir dos parâmetros? Deixe-me mostrar isso. Então, se entrarmos aqui, você pode ver que na entrada no estado, na atualização do estado e na saída no estado, temos certos parâmetros aqui, e um deles é o animador. Portanto, temos acesso imediato ao animador. Isso é o que você usará um pedido para obter as referências. Então, para frente e para trás para o nosso desafio, isso é um pouco difícil. Faça o seu melhor, experimente coisas diferentes, truques diferentes, cometa erros, faça o seu melhor. Não há pressão sobre você. Pause o vídeo agora mesmo e faça o desafio. O K voltará. Então, como não temos início, vamos usar a entrada no estado e fora Allstate enter works é assim que entrarmos no estado, vamos configurar os parâmetros e então veremos o que queremos faça mais tarde. Por enquanto, vamos seguir frente e usar a perseguição do jogador. Qual é o jogador Chase será o objeto do jogo encontrar objetos do tipo. Ou, na verdade, onde ele encontra objeto do tipo. E vai ser o controlador do jogador. Anote na bala superior o controlador do jogador. Então encontre o objeto do tipo. Acredito que já vimos isso antes. E usamos o objeto do jogo porque podemos usar o objeto do jogo sem ter o comportamento mono aqui. Então, precisamos da classe de objetos do jogo. Em seguida, obtemos o objeto final do tipo. Temos o controlador do jogador. E, finalmente, precisamos obter o transporte desse objeto de jogo que encontramos. Então agora temos uma referência ao jogador para perseguir. Em seguida, precisamos dos corpos rígidos. Então vou dizer que o corpo rígido dos chefes é igual ao componente do animador. E vamos obter o corpo rígido 2D. E adicionamos um corpo rígido ao chefe? Vamos verificar isso e ver se fizemos. Se clicarmos no Skelly, não nós não fizemos. Então, vamos em frente e adicionar um corpo rígido 2D. Lá vamos nós. Então agora temos um corpo rígido. E vamos nos certificar de que congelamos a rotação neste final. E garantimos que a grande escala seja 0. Lá vamos nós. Salve isso. Se você não quiser ser capaz de empurrar seu chefe, você pode se certificar de defini-lo como cinemático ou talvez até estático. Mas acho que ele não será capaz de se mover. De qualquer forma, vamos continuar um agora precisamos garantir que o inimigo ou o chefe realmente comece a se mover. Então, onde deveríamos fazer isso? Bem, obviamente, deve ser o oposto. Então, uma atualização, vou dizer que temos um vetor dois, que é a nova posição em que devemos estar. E será igual ao vetor à névoa em direção. E para que deveríamos estar nos movendo? Deve ser o ponto chefe, posição rígida do ponto do corpo. Então, isso será, como você pode ver aqui. Primeiro de tudo, temos a corrente, depois temos o alvo, depois temos a distância máxima. Então aqui vamos seguir em frente e dizer que posição corpo rígido. Então, do corpo rígido dos chefes obviamente. Então vamos dizer que a posição do ponto de perseguição do jogador é o alvo. E vou criar aqui uma velocidade de flutuação pública. E esta será a velocidade na qual vamos nos mover. E depois um flutuador público de volta. Alcance, e isso será um alcance de ataque mais tarde no uso da ferramenta. Então, aqui o que vamos fazer é dizer que vamos nos mover na velocidade, mas vamos adicionar a ele ponto de tempo fixo delta prime e y tempo delta fixo. E qual é a diferença? Você pode ver aqui, o intervalo em segundos no qual física e outros quadros fixos são atualizados. Então, é quase o mesmo que o tempo delta, mas é um tempo delta fixo. Ele só adiciona um pouco de desempenho extra ao jogo. E por algum motivo notei que quando usamos o tempo delta regular, temos algum comportamento estranho porque estamos em um animador. Talvez esse seja o motivo. Não tenho 100% de certeza, mas o que encontrei usando o tempo delta fixo, que é exatamente como o tempo delta, apenas fixo e mais preciso. Então, vamos continuar. Finalmente, o que queremos fazer quando entrarmos em um determinado intervalo? Queremos começar a atacar nosso jogador. Portanto, se o vetor dois pontos distância entre a camada para perseguir a posição do ponto e o corpo rígido. A posição do ponto do corpo rígido chefe. Se for menor que o alcance de ataque que criamos aqui. Enquanto estávamos criando a velocidade. Então aqui vamos dizer que o animador que aciona, o gatilho definido e vamos começar a atacar. Então, vamos voltar ao nosso jogo. Vamos criar uma transição entre a caminhada e o ataque. E eu fiz a transição entre o ataque e a caminhada. E aqui vamos nos certificar de que não temos tempo extra ou não que, na verdade, vamos pular isso porque às vezes pode precisar disso. Então, aqui vamos dizer que queremos atacar. Este será o nome do gatilho. A condição para fazer a transição da caminhada e para o ataque será o ataque de gatilho. Vou colá-lo aqui, salvar isso. E agora aqui vou ver como vamos voltar. Então, antes de tudo, nós fazemos, vamos de The Walking, começamos a atacar, mas então como voltamos? Primeiro de tudo, vamos ver como isso ficará. Então, vou executar o jogo e vamos olhar para o comportamento do nosso jogador. Então, como você pode ver, ele apareceu, mas por algum motivo ele não está se movendo e seus desliza muito facilmente. Então, vamos ao programa e vamos ver qual é o problema aqui. Talvez você devesse torná-lo um pouco dinâmico ou cinemático. Vamos tentar isso novamente. E novamente. Parece que ele começa a andar. E quando estamos no alcance, como você pode ver, ele está. Lá vai você. Tudo parece estar funcionando. O único problema é que estamos sendo renderizados em cima dele. Então, vou voltar. Vou verificar se há essa camada privada e chefe. Portanto, essa é sua preferência. Você quer aparecer atrás do chefe, na frente do chefe? Mas, na verdade, o que queremos é talvez aparecer atrás do chefe. Não queremos andar sobre o chefe. Então, nas camadas adicionadas, jogador, lá vamos nós. Então agora, quando executamos o jogo, agora há um problema óbvio aqui que tudo bem, então somos renderizados atrás do chefe. Isso é bom. Ele está lutando contra EUA, está fazendo um ataque do que outro ataque do que andar EBIT do que outro ataque. Mas aqui o problema é que ele ainda não está caminhando em nossa direção. Isso porque na verdade não fizemos o chefe se mover. Isso foi um erro da minha parte. Corpo rígido no ônibus. Podemos usar a posição Mover. E aqui vamos vendê-lo como a nova posição. Então, salve isso. Você pode ver aqui, Mover a posição não funciona, move o corpo rígido para a posição, salve isso de volta. Agora jogo, execute o jogo. E agora devemos ver que quando o chefe aparece, ele começa a caminhar em direção à camada e começa a bater no jogador e caminhar em sua direção. Mas, como você pode ver, ele não está voltado para a direção certa e ele está parando muito perto da camada. Isso porque se clicarmos no programa na desculpa de caminhada, na caminhada aqui, na caminhada aqui, foi que você pode ver que a velocidade e o alcance do ataque talvez sejam um pouco maiores. Então, vamos fazer talvez cinco. Vamos ver como isso parece. Execute o jogo. E agora ele se aproxima, então você vai, você pode ver que ele começa a lutar contra nós e ele começa a caminhar em nossa direção. Então isso parece bom. Acredito que não queremos ser capazes de andar atrás do chefe. Eu não gosto muito disso. Então, talvez isso não deva ser um gatilho afinal. Talvez você devesse ser capaz acertar o chefe na cabeça. Não é um grande negócio se pudermos realmente percorrer isso ou você pode fazer com que, por exemplo, a parede da grade mudou a parede para um determinado nível e certificar-se de que o chefe não interaja com parede, o que eu acho que é uma boa ideia. Talvez nós testemos isso. Vamos salvar isso. Mas, por enquanto, tudo parece estar funcionando bem. Há o problema de obviamente, a virada do inimigo. E temos que fazer algumas reparações para o movimento, mas vamos manter isso para um vídeo posterior. Por enquanto. Espero que você goste. Espero que você esteja cometendo suas mudanças e eu o vejo na próxima. 89. Movimento melhores para boss: Bem-vindo de volta meu favor aos desenvolvedores de jogos. Neste vídeo, vamos corrigir alguns bugs ou inconvenientes e o movimento de nossos chefes. Então, agora, quando executamos o jogo e há alguns pequenos ajustes que você pode não notar. Por exemplo, agora, se formos embora, não teremos o ataque duplo. E também podemos ver que nosso inimigo está sendo virado toda vez. Então, com isso fora do caminho, não vamos perder mais tempo e vamos começar a virar. Oh, ok, então agora que estabelecemos o primeiro tipo de caminhada e um piruvato atacando. A próxima coisa que vamos fazer é consertar o movimento do chefe e vamos avançar com ele em toda a máquina de estado chefe, SAP. Então, vamos começar. A primeira coisa que eu quero consertar isso, o ataque duplo. Qual é o ataque duplo? Bem, se eu executar o jogo, vou mantê-lo como está bem aqui. Como você pode ver, ele chega perto, ele ataca uma, duas vezes. Se eu fugir, ele ainda ataca um. Então 12, este é o ataque duplo. Não queremos que isso aconteça. Então, para evitá-lo, vou abrir o Visual Studio e aqui e na saída no estado. Então, quando sairmos da caminhada do chefe, vou ir em frente e acessar o animador. E vou redefinir o gatilho. Então, aqui vou dizer novamente ataque. Então o que isso vai fazer é, você pode ver aqui quando estamos a uma certa distância, acionamos o ataque. Então, entramos no ataque. Mas assim que sairmos da caminhada, vamos redefinir o gatilho para que não estejamos mais no ataque. Então, de volta aqui, não atacamos mais duas vezes. Então agora, se eu executar o jogo, os inimigos chefes só devem atacar uma vez que tivéssemos impostos. Então, impostos, nós vamos embora. Lá vamos nós. Você pode ver que ele só ataca uma vez. Ótimo, bem isso consertado. A próxima coisa que eu gostaria de corrigir é a animação atacante. Então você vai notar que ele não faz os dois balanços completos para cima e para baixo. Você não é o único para cima e então ele pára. Por que isso? Bem, porque é o tempo de saída aqui na transição. Então, se eu clicar nestes, Kelly, e você vai notar aqui na prévia quando eu fizer o jogo correr, ele atira uma vez e então ele volta a andar, o que não é algo que queremos. Então, em vez disso, o que vou fazer é definir o tempo de saída para jogar cerca de 90% do movimento. Sim. Lá vamos nós. Talvez ainda mais, só um pouco mais. Então talvez 97 ish do movimento. Vamos ver como isso parece. E tudo isso precisa ser calibrado com base em como você quer que seu jogo se sinta. Então lá vamos nós. Nós atacamos uma, duas vezes para baixo e para baixo. Lá nós, novamente, começamos a andar. Excelente. Mais uma coisa que está um pouco incomodando aqui é o tempo de saída na caminhada para o ataque. Então agora temos tudo configurado. Então agora devemos ver um jeito um pouco mais suave. Lá vamos nós. Então atacamos, andamos, atacamos, andamos, atacamos, andamos um pouco e continuamos empurrando em direção ao jogador. Mas, obviamente, ainda falta uma coisa e isso é que o inimigo não está olhando em nossa direção, o que é algo que eu chamaria um grande problema por causa da forma como nosso ataque corpo a corpo será configurado. Então, vamos consertar isso. A primeira coisa que vamos fazer é obviamente que vamos girar o jogador assim como escrevemos. Inimigos. Mas onde fazemos isso? Podemos querer fazer isso e caminhar. Bem, e se estivermos atacando? Também queremos estar olhando para o jogador e não deveríamos estar olhando para o jogador e atirando? Então, isso parece ser algo mais geral e não baseado em estado. Então, vamos criar um script aqui chamado de controlador chefe. E vou esperar que ele compile e adicione esse controlador chefe a esse objeto de jogo Kelly chefe aqui. E aqui, primeiro vou obter uma referência ao jogador para perseguir. Então, um vazio privado. Vazio, vazio que eu tinha transformado. E a camada a perseguir. Lá vamos nós, salve isso agora e comece. Vou seguir em frente e dizer que o jogador a perseguir é igual ao objeto final do tipo. O controlador do jogador. E vou ir em frente e acessar a transformação sobre isso. Então agora temos o jogador para perseguir pronto para ir. Agora, a próxima coisa a fazer é realmente começar a virar. O chefe sempre que o jogador vai de um lado para o outro do inimigo. Então, como já fizemos isso, vou lançá-lo como um desafio. E seu desafio é girar o chefe na direção certa. Então, antes de tudo, verifique a posição do chefe em relação à posição do jogador. Lembre-se, conseguiríamos isso através das transformações com base nisso, girar o transporte de ônibus em torno do eixo y. Então você precisará virar 180 graus. Então é semelhante à forma como estávamos lançando as armas, não apenas a NMI. Você precisará adicionar o contrário , é claro, obviamente. E então chame esse método antes de andar com o inimigo. Teste isso. Existe algum problema? Por que há algum problema? Então você obviamente encontrará um problema. Não se preocupe com isso. Faça o seu melhor. Encontre o caminho invertido, e te vejo daqui a pouco. Certo, bem-vindo de volta. Então, na atualização, vou verificar se a transformação, a posição ponto x, que é que o chefe, é maior que a camada para perseguir essa posição, o RX. E, a propósito, isso é baseado em como a massa está inicialmente olhando. Então, se ele estivesse olhando para o contrário, poderíamos ter querido verificar isso ao contrário. Então, de qualquer forma, se a posição do chefe for maior que a posição do jogador a perseguir, obviamente no eixo x, apenas. Então o que vamos fazer é aqui que vamos obter a posição do ponto de transformação. E nós vamos, com licença, a Transform Rotate. Enquanto ele gira. E então 0 F no eixo x e 180 no eixo y e 0 no eixo z. E por que isso? Se voltarmos ao nosso jogo, e se conseguirmos esse chefe Kelly, se fizermos uma rotação aqui, lá vamos nós, você pode ver que ele gira para o contrário, que é exatamente o que queremos. Então, também vamos nos certificar de que mais se transformarmos essa posição, mas desta vez é o contrário. Isso significa que o jogador foi o que aconteceu. O jogador está do outro lado. Então vamos nos certificar de virar o inimigo de volta novamente. Então lá vamos nós. Salve isso. Então agora, se voltarmos aqui, e qual é o problema? Então talvez tenhamos feito um erro de digitação aqui. Sim, lá vamos nós. Então, de volta, novamente, executamos o jogo. Vamos ver o que acontece. E lá vamos nós. Então, obviamente, há um pequeno problema. O que, qual foi o problema? Obviamente, nosso chefe inimigo está tendo algum tipo de convulsão. E por que isso está acontecendo? Bem, porque estamos tentando virar. Então observe o que acontece aqui na rotação, estamos virando e depois estamos voltando. Estamos tentando virar o inimigo, quero dizer o chefe baseado na direção dos jogadores. Mas porque estamos chamando isso de cada quadro e por causa da animação que nos faz caminhar em uma determinada direção, estamos tendo essa constante virada o tempo todo. Então, o que vamos fazer é voltar aqui, vamos criar uma variável que verificará se faltamos ou não. Então, aqui, vou criar um público. E só para mantê-lo público por enquanto, obviamente, não vamos manter-se como sempre. Então, se for lipid virado e eu vou defini-lo como falso no início. Então, aqui vamos verificar se temos um flippant. Isso significa que é invertido é igual a falso porque esta é a direção regular que estamos olhando. Se o jogador estiver do lado esquerdo, aqui. Então, se o jogador estiver do lado esquerdo, não queremos ser virados. E aqui está virado é igual a verdadeiro. Desculpe. Por algum motivo, a guia não é tomada o que eu quero. Comunidade Visual Studio não está me acompanhando. E então vamos adicioná-lo aqui em nossas condições. Então, se o jogador estiver do lado esquerdo e, e for virado, então ele é virado, então nós vamos virá-lo de volta para o outro lado. E aqui, se ele não for virado, então vamos virá-lo de volta. Então, espero que você entenda o que está acontecendo aqui. Primeiro de tudo, temos o é invertido no início, é falso. Então, aqui, isso não funcionará apenas quando o jogador estiver do outro lado do caminho e não tivermos virado, então vamos virar. Vamos definir isso como verdadeiro, e isso nos permitirá não voltar novamente quando obviamente não precisarmos ser invertidos. Então execute o jogo. E você notará agora que o inimigo aparece, ele vai atrás de nós. Obviamente, a distância precisa ser ajustada um pouco. E então, quando vamos para o outro lado, enquanto estes caíram, lá vamos nós. Você pode ver que lá vamos nós. Ele está virado. Ele está virado. Certo. Ele não é virado. Ele está virado. Ele não é virado. Então lá vamos nós. Agora temos manteiga, movimento e manteiga e uma missão transições podem ser uma melhor gestão da distância seria boa. Então, cinco eu acho que é muito, talvez 3,5 seja um bom número. Eu não quero que o jogador ou o inimigo esteja atingindo V. Talvez até três sejam bons. Vou salvar isso. Adicionamos um pouco de transição. Aproveite seu tempo e brinque com as transições e as torne perfeitas de duas vias, você gostaria de, com isso fora do caminho, certifique-se de confirmar suas alterações. Espero que você goste e eu o verei no próximo vídeo, onde estaremos configurando o ataque real principalmente e começaremos a machucar nosso jogador e não apenas balançar MC. Então vejo você lá. 90. Como configurar o Boss: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, na verdade vamos atacar corpo a corpo. Então, a maneira como vamos fazer isso é que vamos criar um método para o ataque. E aqui vamos criar um círculo de sobreposição em torno de um determinado ponto. Vamos nos certificar de chamar esse sistema de defesa toda vez que balançarmos uma espada. Então, sem mais ou fazer, deixe-me mostrar o que fizemos aqui. Então o inimigo se levanta. Ele faz uma vez, dano duas, três vezes, e você percebe que ele só nos danifica quando realmente somos atingidos na cabeça com a espada. Então, não vamos perder mais tempo. E vamos começar. O k. Então agora vamos em frente e criar o ataque malaio. Obviamente, agora, o chefe balança ao redor do que se foi, quero dizer, desculpe a espada. Ele balança por aí, mas ele não causa nenhum dano. Então, vamos causar um dano real. Então, vou antes de tudo explicar a você como fazer um ataque. Então, obviamente, existem muitas, muitas maneiras de criar ataques corpo a corpo, mas é assim que vamos implementá-lo. Desculpe por isso. E é a maneira que aprenderemos mais com isso. Então, a primeira coisa que faremos é criar um círculo de dano para o jogador a partir de uma determinada posição. Assim, toda vez que o tipo de jogador estiver nessa posição na animação, criaremos um círculo aqui, ou um círculo sobreposto, que você saberá mais tarde que verificaremos se o jogador está dentro o raio do círculo, ele será danificado. Se ele não for, se ele fugir a tempo, você não será danificado. Então, vamos nos certificar de que usaremos algo chamado círculo de sobreposição 2D física sempre que o pulso atacar. Então lembre-se da física para o círculo de sobreposição. E vamos seguir em frente e criar algumas variáveis para fazer exatamente isso. Nós vamos lidar com esse ataque aqui a partir do roteiro. Então, vamos em frente e começar. A primeira coisa que vamos fazer é criar um campo serializado. E vamos seguir em frente e tornar este privado porque já sabemos o que ele faz. Portanto, a quantidade de dano ent e será igual a 20 como padrão. Então precisaremos criar uma transformação que representará o ponto de ataque. Então, ponto de ataque. E por que temos um ponto de ataque? Porque se eu te levar de volta aqui, você verá que temos um certo meio e este será o ponto de ataque em torno do qual construiremos nosso círculo e verificaremos o jogador dentro dele. Então, obviamente, vamos desviar a criação desse objeto de jogo. Mas antes de fazermos isso, obviamente também precisará de algo chamado raio, que é o raio de ataque. Portanto, não deve ser confundido com o alcance de ataque e. Portanto, o alcance de ataque é o alcance no qual começaremos a atacar. O raio de ataque é o raio no qual o jogador fica danificado se ele ficar lá. E então vamos criar finalmente um campo serializado de máscara de camada de tipo. E vai ser chamado o que é jogador e por que chamamos isso assim? Bem, eu, desde que comecei a usar o Unity, todos os fóruns, vídeos do YouTube , outros cursos e, geralmente, a comunidade Unity sempre causou o que é jogador sempre que queremos definir algum tipo de camada. Então, e não apenas o jogador, às vezes é chamado o que é chão. Então, estou acostumado com isso. Você pode chamá-lo do que quiser, mas esse é o consenso geral sobre isso. E antes de seguirmos em frente, precisamos de uma maneira de realmente ver esse raio. Então, vamos usar os aparelhos vazios do OnDraw selecionados. Já fizemos isso. Nada muito extravagante aqui. Então gizmos cor, cor vermelha. E vamos fechar isso. Pressione Enter. E aqui vamos para os aparelhos desenhar fio, esfera. Somos esfera e ela vai estar no posição de ponto de ataque. E será o raio de ataque como o raio. Então lá vamos nós, A esfera andro, como você pode ver, um centro e um raio. Acabamos de dar a eles o ponto de posição de ataque, raio de ataque. Então, de volta ao nosso jogo. E precisamos esperar que alguma coisa seja compilada? Saiba que foi rápido. Então, vou clicar com o botão direito do mouse e criar um objeto de jogo vazio quando filho do chefe. E vamos chamá-lo de ponto de ataque. E nestes chefes da Kelly aqui, vou acrescentar o ponto de ataque. O que é o jogador? É o jogador e o raio de ataque. Só vou entrar na cena para ver o que está acontecendo. E lá vamos nós. Obviamente, como sempre fazemos, isso depende de você. Onde você quer definir sua animação ou, desculpe, eu estava pensando na animação. Onde você quer definir o ponto de ataque e quão grande você quer fazer isso? Então, vou rolar para baixo e ver o ataque. Então, no ataque, lá vamos nós. Este é o ponto em que vamos atacar, então exatamente aqui. E a partir deste ponto poderemos determinar quanto queremos mover o raio. E observe que, como os aparelhos OnDraw estão no controlador de barramento, isso significa que aumentamos aqui apenas um pouco, basta fazê-lo também. Acho que dois são um número apropriado, mas vou seguir em frente e fazer três. Então, apenas para fins de teste. Então, vou movê-lo um pouco Skelly. E então, se virmos outro ataque aqui, então não temos, lá vamos nós. Se o jogador estiver de pé em qualquer lugar dentro desse raio, ele terá tido. Então, sem mais delongas, vamos salvar isso e vamos lançar um desafio porque desta vez você vai fazer o ataque. Primeiro de tudo, você precisa criar um método e o controlador chefe torná-lo público. Por quê? Porque precisamos disso em outro lugar. Então vamos verificar o círculo de sobreposições nos cães da unidade. Este será o seu trabalho. Você precisará ver como tudo funciona. E você precisa verificar se o jogador está dentro do raio de ataque. Se ele estiver, então aplicaremos danos. Chame esse método usando uma animação de evento. Então, com isso fora do caminho, lembre-se, deixe-me mostrar uma coisa. Chama-se física para o círculo de sobreposição. E agora pause o vídeo e vá em frente e faça o Shalon. Oh, ok, bem-vindo de volta. Então, aqui, irei em frente antes de tudo e criarei um vazio público. E vou chamá-lo de camada de ataque. Ótimo. Agora, o que vamos fazer aqui? Primeiro de tudo, precisaremos entender como funciona o círculo de sobreposição 2D da física. Então, digamos que eu sou um desenvolvedor de jogos sem noção. Não faço ideia de como funciona a física para o círculo de sobreposição. Então, antes de tudo, acabei de verificar aqui. Portanto, a declaração, uma estática pública, não precisa se preocupar com a estática. Podemos fazê-lo sem a estática. Eu role para baixo aqui. Posso ver que é um círculo de sobreposição 2D collider. Temos um ponto, temos um raio, uma máscara de camada, quero dizer profundidade e profundidade máxima. Portanto, isso é para as coordenadas z quando estamos trabalhando em 3D, presumo, ou talvez algo inclua o objeto O, objetos que estão no z. assim, ele também verifica a profundidade. Não precisaremos disso. Se rolarmos para baixo, podemos ver que também podemos obter algum tipo de resultados aqui. E também podemos usar fotos de contato sendo aprendidas sobre filtros de contato em um dos vídeos, obtemos uma matriz, mas também vamos rolar para baixo. Ok, então é isso, é tudo o que precisamos. Também podemos retornar listas. Então isso é o que precisamos e isso retorna um collider, colisor 2D sobreposto ao círculo verifica se um colisor cai dentro da área circular. O círculo redefine coordenadas, etc., etc. E aqui você pode ir mais detalhadamente nas coordenadas z. Mas, de qualquer forma, isso é o que precisamos de física, o círculo de sobreposição de volta ao nosso jogo. O que queremos fazer aqui? Primeiro de tudo, precisaremos obter o jogador que estamos atacando. Então, vou criar um collider 2D. E vai ser o jogador a atacar. E eu vou dizer que ele é igual ao círculo de sobreposição de pontos 2D de física. E eu vou dizer, o que temos aqui? Então, antes de tudo, temos o ponto. Qual é o ponto? Obviamente, é o ponto de ataque, essa posição. Então precisamos do raio. Então, é o raio de ataque. E então precisamos do que é Jogador porque só queremos bater no jogador. Então aqui vamos verificar se o jogador atacar camada, camada. Então, ok, então jogador para atacar é diferente do nulo. Então, por que dizemos que ele é diferente do nulo? Se olharmos aqui, vamos salvar isso. Em primeiro lugar, imprima o jogador para atacar. Então, salve isso. E vamos recuperar, e vamos adicioná-lo ao sistema de eventos. Então, onde queremos que isso seja chamado? Se eu entrar no ataque aqui, eu balanço a espada e, assim como ele balança e vendeu, eu vou aplicar a função. E qual função devemos aplicar? Nessa camada. E, novamente, quando entrarmos aqui, vamos adicionar uma outra opção, desculpe, quero dizer, outro evento. E vamos atacar o jogador. Então salve isso, execute o jogo. E vamos ver o que queremos dizer com nulo. Então, deixe-o nos atacar. Então lá vamos nós, doom player, fazer camada. Lá vamos nós. Se balançarmos, lá vamos nós. Podemos ver que temos um nulo aqui quando estávamos lá fora. Então, porque a maneira como vamos continuar, porque vamos fazer com que o jogador ataque esse componente através do manipulador de saúde do jogador. E qual era o método do que lá? Acredito que foi danificar o jogador e a quantidade de dano, a quantidade de dano que criamos aqui. Então parece que espero que você entenda o que não entendemos. Se não tivermos ou não verificamos se o jogador é nulo. Então, vamos acessar o manipulador de saúde do jogador, que não existe, que causará um erro. Então, temos esse passo extra de segurança. Verificamos se o jogador a atacar é diferente do nulo. Se for, então atacamos ou realmente danificamos. Se não for, isso significa que ele está fora do raio. Isso significa que não temos. Kim e eu vamos manter isso aqui apenas para fins de teste. Então, vamos salvar tudo isso. E vamos voltar ao nosso jogo e aqui, e vamos correr e ver o que vai acontecer. Então o jogador se aproxima, ele luta e, como você pode ver, ele sofre dano toda vez. Então, vou fazer o jogador dunas máximo ajudar um pouco maior. Vida máxima. Vamos fazer 500 para fins de teste, executar o jogo. Quão legal é isso, que podemos mudar a vida toda vez que quisermos, porque criamos o jogo. Então lá vamos nós, 202020. Lá vamos nós. Você pode ver que somos atingidos. Nós conseguimos. Nós somos atingidos toda vez. Removemos ou reduzimos nossas vidas em 20. E você pode estar pensando, bem, por que não estamos sendo atingidos no balanço para baixo? Bem, deixe-me mostrar-lhe. Então eu tentei ser atingido. Em segundo lugar. Seja atingido. Ok, então isso não funcionou bem porque somos um pouco invencíveis em alguns segundos. Então você pode ver, deixe-me tentar fazer isso. Sei que não está funcionando. Então, deixe-me ver se consigo remover o tempo de sensibilidade para 0. E dessa forma não nos tornaremos invencíveis. Você notará que somos atingidos no caminho para cima e no caminho para baixo, no caminho para cima e no caminho para baixo. E como você pode ver, é por isso que adicionamos um pouco de invencibilidade ao nosso jogador porque isso não é muito divertido ter sido danificado todas as vezes. E se continuarmos sendo danificados, eventualmente, o jogador vai morrer para sucumbir aos ferimentos. Então você pode ver aqui que temos alguns erros por causa do Enter no estado. Estamos tentando encontrar o jogador, mas não há camada. Agora, nós poderíamos ficar com isso. Obviamente, não devemos manter isso porque isso é um erro. Isso pode causar problemas, pode fazer com que algumas linhas não sejam levadas em consideração. Então, uma vacua aqui é apenas verificar se ele está disponível e assim por diante e assim por diante. Mas não vamos nos preocupar com isso. Vamos nos preocupar com a mecânica central, os pequenos detalhes que podemos contornar mais tarde. Então, com isso dito, espero que você goste. Espero que você esteja cometendo suas alterações cada vídeo. Espero que você me tenha deixado um comentário porque isso me ajuda muito. E isso vai sair do caminho? No próximo vídeo, vamos levar nosso chefe para o segundo estágio, segundo ou dois, o palco irritado. 91. Boss: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vamos deixar nosso chefe zangado. Então, como você pode ver, criei uma transição aqui. Eu criei um gatilho que não usamos. E podemos ir de caminhar para ficar com raiva, com muita raiva, andando com muita raiva, atacando. Então, vamos ver como isso parece em nosso jogo. Vou maximizar o jogo. Vou ao programa e fazer, não, quero dizer, ir para a caminhada com raiva e fazer a velocidade cinco, salvar isso, e maximizar o jogo, correr o jogo. Então agora você deve ver o chefe ficar com raiva, ele fica maior, e agora ele anda muito mais rápido. E você notará que ele faz muito mais dano e podemos fugir. Você pode ver que agora nossa saúde se esgotou. Tentamos atirar nele. Ele não tem um sistema de saúde. Que tipo de jogo é esse, e agora chegamos à nossa morte morrendo. Então, com isso fora do caminho, voltamos ao menu principal. Nós quebramos alguns óculos, choramos e tentamos sair do jogo, mas isso não nos permitirá. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então agora é hora de levar nosso chefe para o próximo nível. E no próximo nível, obviamente quero deixá-lo com raiva, não se preocupar com o tiroteio. Vamos lidar com isso mais tarde. Já conhecemos todas as mecânicas de tiro. Então, vou criar uma transição da caminhada regular para o ficar com raiva. E aqui, vou criar um novo gatilho ou, na verdade, um gatilho. Então, vou chamá-lo de ficar com raiva. Então, quando estamos caminhando, ficamos com raiva e depois passamos para a raiva. Então nos tornamos maiores, nos tornamos mais rápidos e nos tornamos mais fortes, eu acho. Bem, obviamente vamos nos tornar mais fortes. E então, quando fizermos a transição do ficar com raiva, quero dizer, quando terminarmos a transição com raiva, vamos fazer a transição para o ficar com raiva. Então, vamos dar uma olhada nisso. Ficamos com raiva. Terminamos a animação, respiramos um pouco e depois começaremos a andar de volta novamente. Tão excelente, tudo isso funciona perfeitamente bem. A próxima coisa que vamos fazer é criar uma transição da caminhada com raiva para o ataque com raiva e uma transição de volta. E vamos remover qualquer hora de saída aqui. E eu vou fazer essa hora de saída e aqui estão em torno de 90. Quanto tempo durou o anterior? Então, aqui, 97. Certo, então 97. Então, quando estamos atacando, atacamos uma, uma, duas, uma, duas vezes. Certo, excelente. Então, temos tudo configurado corretamente e vamos usar o mesmo gatilho aqui para o ataque. Porque, por que não? Podemos fazer isso, salvar tudo isso. E agora temos o ataque com raiva. Mas, obviamente, quando estamos atacando, queremos ter mais danos. Queremos ter um raio de raiva maior. Então, para isso, vou te dar um desafio para fazer o chefe atacar com raiva. Então, antes de tudo, crie um novo método que lida com o ataque irritado do chefe. Esse ataque deve ter um alcance maior e um ataque mais forte. Então, você precisará criar variáveis apenas para isso e adicionar eventos à animação tecnológica com raiva. Então, com isso dito, pause o vídeo agora mesmo e vá criar o novo ataque com raiva. Ei, bem-vindos de volta, meus colegas desenvolvedores de jogos. Deixe-me mostrar o que está acontecendo em nosso servidor de discórdia por um segundo. Esta é uma pessoa que eu vou ajudar e, como você pode ver, ele me envia um pouco de código. Enviei um pouco de código de volta. Temos um bate-papo, temos as conversas o tempo todo no desenvolvimento geral do jogo e assim por diante. Isso é tão ativo o tempo todo. As pessoas estão se ajudando. Tentei ajudar o máximo que pude. Portanto, certifique-se de se juntar ao Discord. Eu deveria ter falado sobre isso antes, mas não se preocupe com isso. Vamos terminar este vídeo para que eu possa ajudar a marcar. Então, vou rolar para cima aqui. Vou criar duas novas variáveis. O primeiro será um campo serializado em D-major e será o zangado do que a média. E vamos defini-lo como talvez 30. Então 30 ou 40. Então dobramos porque dobramos o tamanho, dobramos a quantidade de dano. E um campo serializado para o flutuador e o zangado com o raio. E lá vamos nós. Nós salvamos isso. Vamos prosseguir e remover isso. E então vou rolar para baixo aqui. E, a propósito, se você quiser, você pode desenhar o raio de ataque aqui também. Então, o raio de ataque com raiva, eu não vou fazer isso. Não acho que isso seja necessário. Só vou criar um novo método aqui para o ataque com raiva. E há outra filosofia para isso, ou outra maneira realmente suficiente, não filosofia, mas você pode chamar filosofia se quiser soar chique, como eu quero agora, podemos, em vez de fazer um outro método, podemos realmente mudar o que temos aqui, mas acho que é mais apropriado criar um novo método apenas por não ter confusões. Tão zangado com a camada traseira. E vamos fazer exatamente o mesmo. Então aqui, outra coisa que podemos fazer é talvez, talvez apenas fazer essa parte de uma variável geral só porque não temos nenhum código redundante, mas vamos apenas copiar isso, colá-lo em aqui, e vamos remover a impressão aqui. E aqui. Isso foi apenas para fins de depuração. Eu sempre recomendo que você use esse todo o log de pontos de depuração. E em vez da quantidade de dano, vamos usar a quantidade de dano com raiva. E em vez do raio de ataque, o raio de ataque com raiva, salvamos isso. Voltamos ao nosso jogo. Verificamos as animações no chefe Skelly. O ataque com raiva, raiva, ataque com raiva. Então, é o primeiro, a inclinação e as cenas. Estamos atacando com raiva e no balanço. Lá vamos nós. Então, aqui, adicionamos um evento. Chamamos o ataque com raiva. E agora nós balançamos para baixo sobre isso aqui. Adicionamos outro evento e fazemos o jogador de ataque com raiva. Então, salve isso. Vamos também ir para o disco Zonde Syllabus. Role para baixo raio de ataque com raiva, este era três, Isso faz isso 16. Diga que talvez mesmo que não seja muito lógico quando temos o solo, imagine como se tivéssemos algum tipo de, eu não sei, talvez algum, algum campo de força ou algo assim. Eu não sei. Então agora salvamos tudo isso. Nós corremos o jogo e devemos ver que agora ele fica com raiva e ele não faz absolutamente nada porque há algo que esquecemos de fazer. Se formos ao animador, podemos ver que andar com raiva não tem nenhum comportamento. Então, vamos tentar adicionar a caminhada assim. Não, não funciona no comportamento. E vamos apenas o chefe andar. Lá vamos nós. Então agora temos um alcance de ataque e vamos torná-lo um pouco maior. Então talvez quatro, porque e é maior e a velocidade se torna quatro, digamos que, execute o jogo. E agora devemos ver que ele fica com raiva e agora ele é mais rápido. Então, como você pode ver, lá vamos nós. Isso é ataque. É muito mais rápido em negócios, muito mais dano e ele é um pouco mais rápido. Talvez o façamos ainda mais rápido adicionando um 50. Oh não, não, não, não, baixo-baixo. Você. Lá vamos nós. Então, como você pode ver, quando o chefe está com raiva, ele está realmente zangado, obviamente. Mas há um problema. Você deve ter notado que não foi muito difícil não notar é que imediatamente vamos ao bife angular e isso não é algo que queremos, mas isso é algo que teremos mais controle de uma vez que temos um sistema de saúde para o nosso chefe, o que é algo que faremos no próximo vídeo. Portanto, certifique-se de confirmar suas alterações e eu o verei na próxima. 92. Como adicionar o sistema de saúde de Boss: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, vamos fazer a camada, quero dizer, o chefe sofre dano. Então, quando executamos o jogo que é colocado em Skelly, role para baixo. Você pode ver agora que ele tem uma saúde máxima de chefe e uma saúde atual de ônibus. Então eu devo ele assim que você perceber que ele se torna quatro. Por que ele se torna quatro? Quero dizer, por que ele fica com raiva? Porque na metade da ajuda dele, vamos deixá-lo com raiva. Então, quando sua saúde metade do caminho, ele fica com raiva. Nós atiramos nele de novo. Devemos inferir da última vez. Como você pode ver, ele morre e desaparece e o fim. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, é hora de adicionar uma saúde BRAF ao nosso chefe. Então, vamos em frente e começar. A primeira coisa que vamos fazer é passar de andar com raiva para morrer. E vamos seguir em frente e criar um gatilho aqui chamado de dado, e definir as condições aqui para morrer. E então vamos rolar para baixo. E aqui onde estamos caminhando para ficar com raiva, vamos adicionar uma condição e defini-la como o caso do gatilho 0 com raiva. Então, com isso fora do caminho, acho que era tudo o que tínhamos que configurar antes de começarmos. Então, vou entrar na pasta de script chefe e clicar com o botão direito do mouse e criar um novo script C Sharp chamado manipulador de saúde do chefe. Pressione Enter, aguarde que ele seja compilado. E vamos arrastá-lo para esse chefe da Kelly. Por que estamos fazendo isso aqui? Bem, porque morrer é ou o manipulador de saúde chefe ou toda a saúde faz parte de todo o chefe. Não é especificado para um único estado, assim como dissemos, é para todo o chefe e vai ser bem simples. Primeiro de tudo, aqui, vou criar um campo serializado, que será um número inteiro e o chefe, max health, e será igual a 500. E então vamos criar uma saúde pública atual. E, obviamente, vamos mudar isso mais tarde. Então chefe, saúde atual, salve isso. E então, e comece. Vamos apenas dizer que a saúde atual dos chefes é igual à saúde máxima dos chefes. Correto? Então, agora precisamos criar um método para nos permitir causar danos ao nosso chefe. Então, para isso, vou mostrar isso para vocês como um desafio porque já fizemos isso. Então faça o chefe sofrer danos. Primeiro de tudo, você precisa criar a qualidade variável max health e a saúde atual. Obviamente, eu não me preparei corretamente porque achei que você deveria ter feito isso sozinho. Mas lá vai você. Um passo extra de mim para você. Vamos continuar e começar com o movimento inteligente extra de saúde atual por mim, em seguida, criar um método que permita que o chefe sofra dano com base em um parâmetro. Finalmente, algo novo para você fazer. Quando a saúde é metade da vida máxima, precisamos fazer a transição para a animação moribunda. Opa, eu digo morrendo. Eu queria dizer, espere pela magia da edição. Ei, você é bem-vindo de volta. Portanto, crie um método que permita que o chefe sofra dano quando a saúde tiver a transição máxima de saúde para a animação com raiva. Então você sabe o que fazer quando o coração está em 0, a transição para a animação moribunda e, finalmente destrua ambos usando um sistema de eventos. Então, com todas essas informações, pause o vídeo agora mesmo. Não cometa nenhum erro como eu. E vá em frente e faça o desafio. Certo, bem-vindo de volta. Como você se deu bem com isso? Então, aqui vou criar um vazio público. O dano foi um número inteiro, a quantidade de dano. Tudo isso é bem básico. Acredito que você já sabe como fazer tudo. Então, aqui vou dizer, vou dizer que a saúde atual dos chefes é menos igual à quantidade de dano. Então eu vou dizer se os chefes de saúde atual como menor ou igual a, menor ou igual à saúde máxima do chefe, ônibus, saúde máxima dividida por dois. Então isso significa que estamos a meio caminho da saúde dele. Então vamos obter o componente, o animador. E ele pode falar. Obrigado. E vamos definir o gatilho. E vamos ficar com raiva. Então, vamos entrar no nosso animador e vamos copiar o ficar com raiva de volta aqui. Cole-o aqui. Lá vamos nós. Então agora ficamos com raiva. E então vamos seguir em frente e dizer, se a saúde atual do chefe for menor ou igual a 0, então vamos seguir em frente e fazer o mesmo aqui, mas em vez de ficar com raiva, vamos morrer. Excelente. Então, agora vamos criar um método para morrer. Então, aqui vou dizer vazio, destruir, destruir o chefe. E vamos simplesmente ir em frente e destruir o objeto do jogo. E onde deveríamos estar chamando isso? Vamos tornar este público, apenas no caso de podermos acessá-lo a partir do sistema de eventos. Enquanto o sistema de eventos, se eu clicar neles, Kelly, vamos para as animações, morremos. O que temos aqui? Vamos ver, nas cenas, lá vamos nós. Então nós, temos essa poça de ABA, sem sangue ósseo ou algo assim. E devemos deixar este um pouco vermelho, obviamente. E talvez neste momento, apenas mantenha alguns segundos. E então vamos adicionar um sistema de eventos. Ou talvez saibamos o quê. Vamos movê-lo para o segundo segundo. E aqui, destruímos o chefe. Então, na animação, morremos e depois destruímos o chefe. Excelente, salve tudo isso. Vamos ver o que mais temos? Oh, então, obviamente, precisamos também acionar esse dano. Onde chamamos a viagem de sofrer danos? Bem, se entrarmos na camada, temos bala. Se eu abrir isso e encontrar o jogador, então eu digo bala de saúde do jogador. Eu quis dizer o controlador de bala do jogador. Aqui. Vamos verificar se temos o inimigo, então vamos danificar o inimigo. Vamos ver, temos uma camada para o chefe? Não temos um advogado para o chefe, então vamos em frente e editar as camadas. Crie uma camada chefe ou você pode criar uma tag chefe. Isso também é algo que podemos fazer. Ou talvez tenhamos uma nota de tag chefe que não temos a escuridão do Abel, então vamos em frente e edite. Crie tags. Chefe DAG. Lá vamos nós. Então agora, se entrarmos aqui, agora, agora este é o exemplo perfeito para você entender a diferença entre uma tag e uma camada. Então lembre-se de onde. Ok, então eu nem me lembro talvez nos picos aqui, eu disse que podemos evitar usar o comparar tag player. Podemos dizer imediatamente que os picos são algum tipo de camada de dano, então eles estão no Do nós temos qualquer coisa, os captadores ou qualquer coisa, por exemplo, os backups. Assim, podemos evitar usar a tag a para compará-la com o jogador, por exemplo, para garantir que apenas a camada a carregue. Portanto, somente o jogador pode interagir com os captadores através de camadas. Não precisamos verificar se há uma etiqueta comparada no empreendedor. Entre. Lembre-se que falei sobre isso, mas agora no controlador de bala, podemos dizer que a bala só interage com o chefe, mas isso não é suficiente porque queremos também verificar o resto. Se houver uma tag collision.com com um chefe, então precisamos chamar um componente totalmente diferente ou totalmente diferente sim, componente. Então, de volta aqui, vamos ver, está o programa. Oh, não criamos a camada de classificação de tags. Não, não. Por que temos que classificar camadas para o chefe? A etiqueta é tão chefe. Copie isso. Então agora não nos desculpamos, precisamos definir a tag chefe. Lá vamos nós. Nós salvamos isso. Agora, de volta ao nosso jogo, verificamos o chefe. E se for o chefe, então vamos seguir em frente e obter a colisão que obtém componente, o manipulador de saúde do chefe. E daqui vamos sofrer dano e será a velocidade da bala. Não, o valor do dano. Então, quantidade de dano, salve isso. Agora temos tudo configurado, então estou muito feliz que isso tenha surgido. Esta é uma maneira de você demonstrar. Poderíamos ter dito que nós temos uma camada de bala, uma camada de bala de jogador, e ela só interage com o chefe e o inimigo. Mas se atingirmos um inimigo, o chefe não é qualquer inimigo. Ele também é um manipulador de saúde chefe. Então, precisaremos acessar a saúde e o chefe. Se tentarmos usar este, ele não funcionará. Isso causará um erro tão bem que, embora a maneira de salvar isso, você também pode ir em frente e copiar essas duas linhas e podemos configurá-las aqui. Então, obviamente, esse é um código redundante. Então, o que podemos fazer é clicar com o botão direito do mouse e aqui ações rápidas e refatoração e podemos dizer criar efeito sanguíneo, extrair o método, chamá-lo instanciar efeito sanguíneo. E eu escrevo instanciar corretamente é Dan Shi Da. Sim, lá vamos nós. Aplique as alterações e aqui vamos instanciar o efeito sanguíneo. Salve isso. Então, agora de volta, nosso jogo não deveria estar funcionando perfeitamente. Então, se eu clicar nesse calibre, role para baixo e o chefe Mac South, vamos fazer 20. Uh, não, não, não 20, talvez 40, só para que possamos ver as transições corretamente. Nós executamos o jogo. Então, agora o chefe aparece. Nós atiramos nele uma vez, e eu não quero maximizar o jogo novamente. Quem deveria o chefe? Onde Z? Então, devemos o chefe. Vamos rolar para baixo. Qual é sua saúde atual saúde sábio, os livros. Então, uma bala tão nova. E tudo bem, então esse erro não é nada também porque o cristal tem algum tipo de dano. Ok, então vou fazer isso quatro em vez de 40. Saiba que mais, vamos fazer oito. Execute o jogo. O sistema é muito pobre, então devemos imediatamente, lá vamos nós, rolamos para baixo, é às seis. Devemos, uh, duas vezes. Lá vamos nós. Podemos ver que ele fica com raiva e agora ele começa a correr muito mais rápido. Então, atiramos nele de novo. Devemos ele pela última vez. E lá vamos nós. Ele entra na garrafa e morre. Mas há algo um pouco errado, mas eu não, como se você não tivesse visto porque eu não fiz isso. Mas quando atiramos nele uma vez, atiramos nele duas vezes, ele está ficando com raiva. Ainda posso atirar nele. E lá vai você. Você pode ver que ele ainda é baleado e morre imediatamente após a transição para a caminhada. Então, no próximo vídeo, vamos ter certeza de que ele é invencível enquanto ele está ficando com raiva. E só por uma questão de lembrar, vou adicionar um comentário aqui e fazer, você sabe o que, vamos imediatamente certo. Se ficar com raiva, isso não deve funcionar. E isso é apenas uma demonstração de como às vezes você pode querer adicionar algo no futuro, só para que você não se esqueça disso. Adicione um comentário, verifique se ele funciona. Espero que você tenha gostado. Este foi um vídeo muito bom que pensava como a lição importante da diferença entre tags e camadas, porque às vezes é difícil de explicar, mas esse era o lugar perfeito para aprendê-lo. Então, espero que você goste. Espero que você esteja cometendo suas mudanças e eu o vejo na próxima. 93. Como adicionar barra de saúde de Boss: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, como você pode ver, adicionamos uma pequena imagem, adicionamos um pouco de texto e adicionamos uma grande barra de saúde para representar a saúde de nosso chefe. Então, agora, quando executamos o jogo, quando o chefe aparece, atiramos nele. Você pode ver que a vida dele se esgota. Quando atiramos nele de novo, ele está com raiva. E se atirarmos nele enquanto ele está com raiva, você notará que ele não pode sofrer nenhum dano. E este é um mecânico de todos os chefes e todos os jogos. Então eu atirei nele de novo, mostrei a ele de novo, o Health Bot desaparece, o chefe morre. E não vamos perder mais tempo com um vídeo muito longo, mas deixe-me, é importante, e isso é o que acontece quando estamos criando seus olhos. Então, vamos começar. Ok, então agora temos tudo funcionando bem. Somos capazes de danificar o chefe. Somos capazes de matá-lo, somos capazes de removê-lo, mas não temos nenhuma pista de onde sua saúde é adicionada. Então, o que vamos fazer é criar um ajudante para o chefe. Então, vou subir aqui. E neste vídeo, na verdade, acho que há algo que você pode escolher para si mesmo. Portanto, existem dois tipos de barras de saúde que você pode adicionar ao chefe. Um deles será, por exemplo, se você quiser que a Health Bar esteja sempre se movendo com o chefe. Mas eu pessoalmente acho que essa não é a melhor ideia porque você gostaria seus inimigos regulares tenham essa barra de saúde em cima de suas cabeças. Então, talvez ter uma barra de saúde chefe seja melhor ser como Dark Souls, seja na parte inferior ou no topo. E porque já temos a saúde, o dinheiro e as armas na parte inferior para exibir para o jogador. Então eu vou criá-lo aqui no topo. Então, vou abrir a tela da interface do usuário. Vou abrir a saúde, vou pegar o controle deslizante de saúde. E o, sabemos quais cortes não usaram os efeitos para a saúde para o chefe. Vou duplicá-lo. E vou movê-lo para fora. E vou precisar abrir os prefabs e preciso mover o, para onde está? Saúde, controle deslizante e fora aqui. Salve isso de volta em nosso jogo. Agora temos um controle deslizante de saúde 1, que também é um I por acidente. Remova o controle deslizante real sim. Abra o resumo. Sinto muito por isso. Deveria ter movido o outro controle deslizante de saúde. Então lá vamos nós. Este aqui está. E então vou duplicar este. E vou mover este para fora da tela. E o que temos maior do que aqui, podemos simplesmente excluir. Então, onde está o controle deslizante de saúde? Lá vamos nós. Este é o que precisamos. Vamos ver, mover isso para cima. Este será o chefe. Tem controle deslizante. Lá vamos nós. E eu vou apenas ir em frente e talvez criar um objeto de jogo vazio aqui, colocá-lo para fora. Então o chefe deslizar, eu conheço esse objeto de jogo para o campus. Saúde falsa. E, em seguida, adicione o chefe tem controle deslizante sob a saúde do chefe. Portanto, isso é muito irritante sempre que você tem um prefab por novo querer mudá-lo, é extremamente irritante. Então, mesmo que eu mova este, ainda preciso mudá-lo aqui. Então, saúde dos EUA, controle deslizante e, em seguida, a tela da interface do usuário e o objeto de jogo vazio, que é a saúde do chefe. Enquanto o chefe tem. E vamos mover o controle deslizante para o chefe Health. E vamos definir a posição para ser em 0, 0. E lá vamos nós. Então agora temos o controle deslizante chefe. Estamos trabalhando no pré-fabricado. Então aqui também quero fazer isso um pouco maior. Então, se eu ampliar e vamos ver o que temos aqui. Faça isso maior ao lado. Faça isso maior no site. Também. Mova um pouco para cima. E eu só vou seguir em frente. E se você quiser, você pode ir em frente e fazer isso sozinho. Preencha tudo. Vamos ver todos os pequenos ajustes. Isso vai demorar um pouco bem sempre que você estiver, eu acho que você está. É por isso que os vídeos onde temos você são mais longos do que o normal. Então lá vamos nós. Acho que isso é bom o suficiente. Sim, parece bom para mim. E, finalmente, quero adicionar um pouco de uma imagem. Então, vou entrar na imagem da interface do usuário. E essa imagem terá a imagem do chefe. E também podemos adicionar aqui o nome do chefe. Então, vou adicionar uma sonda Mesh de texto. E esta será a Kelly. Faça-o ousado, faça-o no meio. Faça com que seja ousado, torne-o um robótico. E vamos Não, não, não. E talvez vamos movê-lo. Você ou por baixo ou por cima. Isso não importa. Escolha sua própria maneira de criar isso. Vou fazer o tamanho automático. E lá vamos nós. Então Kelly, lá vamos nós, Skelly e aqui a imagem representará o chefe. Então eu vou encontrar nos sprites, o z, enquanto essas barras de chocolate, lá vamos nós. Então, imagem, Skelly e nativo definidos para tamanho nativo. Vamos preservar a proporção. E vamos fazer com que pareça muito, muito menor. E talvez coloque-o aqui e saiba o que, talvez essa não seja a melhor maneira de fazer isso. Talvez você possa simplesmente manter a cabeça para saber o que, deixe-me excluir isso ou esperar um segundo e eu vou editar esta foto. Certo, bem-vindo de volta. Então tudo o que eu fiz foi apenas editar esta foto e você provavelmente a terá em seus recursos. Então, vou adicioná-lo aqui. E a imagem dos ônibus será que o esqueleto tinha. Então lá vamos nós. Agora temos isso. Eu sei que isso não é muito, não torna o jogo muito melhor, mas só adiciona um pouco de financiamento. Então você sabe que esta barra de saúde pertence ao chefe Skelly e você tem uma pequena imagem de sua cabeça. Então, agora temos uma boa representação. Então agora, se eu voltar do pré-fabricado e, por algum motivo, não está em seu lugar. Temos a saúde do chefe. Vamos apenas excluir isso. Mantenha isso tanto de saúde. E por algum motivo não estava em seu lugar. Vou ir para Slider e definir a posição 0, 0. E agora temos isso corretamente. E vamos ajustar a posição um pouco. E lá vamos nós. Agora temos os boths. Saúde Skelly. Vamos apenas movê-lo um pouco para a esquerda. E eu acho que está muito bom agora. Então, esta é a ajuda que podemos ver no chefe, se você quiser. Também podemos alterar a imagem do preenchimento. Então, não quero que seja vermelho. Talvez eu queira que ele o tenha nos sprites. Vamos ver. Você tem seu olho. Você é você, você é eu elementos. Eu estava pressionando a UE, mas não entendi isso. Ok, então vou entrar nos elementos da interface do usuário e pegar o azul. Então, vamos usar o azul. Imagem. O azul, não, não, não, não, não este. Área de preenchimento. Preencha o controle deslizante azul. Certo. Então agora temos o controle deslizante azul movendo-se para cima e para baixo. E como eu disse, toda essa seção ou todo esse vídeo, você precisa fazer sua própria pesquisa. Você precisa criar sua própria interface e precisa fazer as coisas do jeito que você gostaria que elas fossem. Oh, tudo bem. Então eu acho que isso é bom o suficiente. Não tenho certeza se é bom o suficiente. E há um pouco das bordas não são muito suaves, mas não se preocupe com isso, desde que represente as coisas corretamente. Então, agora temos a saúde. A próxima coisa que precisamos fazer é ter controle sobre. Então vou entrar na saúde dos chefes, vou entrar no roteiro. E na interface do usuário ou nano, na verdade, no chefe. Lá vamos nós. Clique com o botão direito do mouse em criar script C-sharp e esta será a barra de saúde chefe em Enter. Aguarde que ele seja compilado. E qualquer dia agora temos o chefe indefeso adicioná-lo à saúde do chefe aqui que abriu o chefe Health Bar. E o que precisamos ter aqui? Bem, obviamente queremos uma referência ao controle deslizante. Então controle deslizante de campo serializado, precisamos ter um mecanismo de interface do usuário, Unity engine dot u i. Então agora podemos ter o controle deslizante, então temos o controle deslizante de integridade do chefe definido então aqui. Então, a primeira coisa que fazemos assim que começamos, pois precisamos definir o valor máximo, obviamente. Portanto, o chefe tem valor máximo do ponto deslizante é igual a encontrar objetos do tipo. E vai ser o manipulador de saúde chefe. E do manipulador de saúde chefe, precisamos obter o máximo de saúde. Então, vamos entrar no manipulador de saúde chefe. E aqui crie um pequeno método que será um int público. Obtenha o máximo de saúde ou obtenha a saúde máxima do chefe. Abra os suportes, retorne Max, tenha. Vamos salvar isso. De volta aqui. Obter chefe, max, saúde. Nós salvamos isso. Agora vamos deslizar para a Atualização, obtê-lo slide porque estamos usando um controle deslizante ou com que frequência aguardamos um controle deslizante. Então, uma atualização que vamos sempre fazer com que a perda do hub tenha valor de ponto deslizante e será igual encontrar objetos do tipo, manipulador de saúde, chefe, manipulador de saúde. E nós vamos obter a corrente. Então, vou duplicar este. Obtenha chefe, saúde atual, saúde atual, salve isso. Portanto, este é apenas um método de retorno de inteiro. Nada muito complicado. Então, obtenha a saúde atual do chefe o tempo todo. E agora vamos seguir em frente e atribuir o controle deslizante. Então abra isso. O controle deslizante e o trabalho são o controle deslizante. Este é o controle deslizante salvando tudo isso. Vamos fazer isso um pouco maior, executar o jogo. Então agora devemos ver o controle deslizante de saúde mover os inimigos para que você atire nele. Lá vamos nós. Então, como você pode ver, sua saúde fica menor e ele fica com raiva sobre o ponto de meio caminho do nosso jogo. Finalmente, quando atiramos neles pela última vez, ele morre. Mas ainda temos essa casca de saúde. E não só isso, temos esse pequeno erro aparecendo aqui, na verdade, não é um pequeno erro, um erro constante. Então, vou colapsá-lo. Clique duas vezes aqui e veja qual é o problema. Encontre objetos do tipo. Portanto, esta é uma referência nula. Referência nula significa que estamos tentando obter uma referência a algo que não existe ou o retorno não é. Então, aqui temos o manipulador de saúde chefe. E, obviamente, quando morremos, destruímos o chefe. E quando destruímos o chefe, o manipulador de saúde chefe mete William. Então, precisamos encontrar uma solução para isso, e esse será o seu desafio. Seu desafio é remover a Barra de Saúde e tornar o chefe invencível. Talvez seu desafio não seja corrigir o erro. De qualquer forma, vamos ver o que temos aqui. Primeiro de tudo, quando o chefe morrer, certifique-se de que a barra de saúde seja removida e pare o erro. Obviamente, você precisará remover a barra de saúde e remover a imagem e a imagem. Portanto, não precisamos mais chamar isso toda vez. Então você precisará ter certeza de que quando o ônibus estiver indo para o estado irritado, queremos torná-lo invencível. Então, quando ele está ficando com raiva, não queremos poder atirar nele. Isto é antes de tudo, não justo com o chefe porque ele não pode nos atacar ou se mover quando está ficando com raiva. Em segundo lugar, porque em cada jogo quando um chefe faz a transição para a segunda fase, você não pode acertá-lo. Isso é algo padrão e todos os jogos. Então, vou te dar uma dica de como fazer a última parte. Você precisará adicionar comportamento ao estado de raiva get. E como eu disse, precisamos corrigir o problema do erro. Embora, obviamente, quando realmente desativamos a meia casca em não mais chamadas para os jogadores seguravam o manipulador de saúde dos chefes, então não temos mais a flecha. Então, com essa informação, pause o vídeo agora mesmo e vá fazer o desafio. Então, ok, bem-vindo de volta. Então, a primeira coisa que vamos fazer é entrar na atualização e aqui. E vamos verificar se o valor do ponto deslizante de saúde do chefe é menor ou igual a 0, que significa que vamos destruir todo o objeto do jogo. Agora nós, não temos que destruir o objeto do jogo. Talvez possamos definir o objeto do jogo como ativo, falso ou configurá-lo como inativo. Mas vou destruí-lo só para nos certificar de que não temos mais nada. Então, salve isso. E então vamos entrar no manipulador de saúde chefe. E aqui vamos criar uma variável. E essa variável será um bool público e está invencível. E vai ser definido como falso no início ou você sabe o quê? Não vamos torná-lo público. Vamos torná-lo privado. E vamos criar um método aqui que será público, int ou não, Na verdade, desculpe, vazio. Conjunto. O chefe. Mesmo sutil. E ele vai tomar um parâmetro que é um booleano. E vai ser Skelly ou normal não que seja chefe em um determinado símbolo. E então aqui vamos dizer que é invencível é igual a, é chefe invencível. Salve isso. E aqui, antes de sofrermos danos, como você pode ver, temos o comentário se ficarmos com raiva, isso não deve funcionar. Então, vamos dizer, se for invencível, então vamos ajudar, então vamos apenas retornar. Então, retornar significa. Quando retornamos, assim como temos os valores de retorno e aqui, uma vez que chegamos ao retorno, todo esse método é interrompido. Então, qualquer coisa sob essa linha de código. Então, aqui, qualquer coisa que escrevermos não será registrada após o retorno. E isso é exatamente o que fazemos aqui. Então, quando sofremos danos aqui, verificamos se ele é invencível. Abrimos este. Desculpe. Entramos na condição, executamos o retorno e nenhuma dessas linhas é executada. Então, basicamente retornamos um valor, e como isso é um vazio, podemos retornar qualquer coisa. Se fosse um número inteiro, não um vazio, poderíamos apenas retornar 0. Então, vou remover isso. Vou salvar tudo isso. E agora, como vamos realmente definir o é invencível? Vou voltar aqui. Eu tinha este correndo. E vamos isso para fora. Primeiro de tudo, a Health Bar. Então Shruti, deveria o Shruti. Certamente, lá vamos nós. E quando ele terminar essa animação, ele morrerá. E você pode ver que não temos mais uma barra de saúde e não temos mais erros. Excelente. Agora, a próxima coisa a fazer é entrar no animador e para o estado irritado. E por que isso não está ficando menor? Ok, então no final, fique com raiva, vamos adicionar um comportamento. Vamos chamá-lo de chefe, sublinhado, ficar com raiva. Novo script, crie um anúncio. E, obviamente, será criado nos ativos aqui, o chefe ficará com raiva. Vou movê-lo para a pasta Boss scripts para arquivo ou o que você quiser chamá-lo. Assim foi, lá vamos nós. Então ambos ficam com raiva. Abra este. Como podemos ver, os dois últimos não precisaremos. E esses serão o controle do KU. Tecla de controle, você pode controlar o KU. Então, aqui, o que deveríamos estar fazendo? Onde devemos ter certeza de que o chefe é invencível ou configurá-lo? Bem, acredito que devemos antes de tudo, defini-lo como verdadeiro quando entramos no estado. Então, vou acessar o componente do animador. Então, agora temos acesso ao manipulador de saúde do chefe. E aqui vamos definir a invencibilidade do chefe como verdadeira. E quando sairmos, vou duplicar essa linha e movê-la para baixo. E quando saímos do estado, podemos novamente ser atingidos. Então, como você pode ver, aqui, criamos o chefe invencível. Temos um parâmetro que precisamos enviá-lo. Nós o acessamos usando o componente do manipulador de saúde chefe, que também está presente com o animador. Portanto, temos os dois componentes no mesmo objeto do jogo. É por isso que podemos acessar o animador, obter um componente que é a metade Handler disse que o chefe invencibilidade é verdade. E aqui, quando dissemos é invencível para qualquer que seja o chefe, invencível qualquer que seja o parâmetro. Se for verdade, ele retorna. Se for falso, não retornamos. O chefe sofre dano. Nós salvamos isso. Voltamos ao nosso jogo. Quem eram. Então, aqui em cima, nós executamos o jogo. Devemos o ônibus uma, duas vezes. E você pode ver aqui que, enquanto ele está com raiva, ele não fica danificado. Então eu atirei nele três a quatro vezes. Ele não fica danificado. Finalmente, eu atiro nele, ele morre. E lá vamos nós. Não teríamos erros, exceto este, que acredito em algo que não é da nossa preocupação, algo sobre o painel. Temos esse tempo OK. Então, vamos sair, vamos nos certificar de preparar todos os nossos arquivos e agora criamos uma barra de saúde. Então, espero que você tenha gostado, desculpe-me pelo vídeo longo, mas isso é o que acontece quando estamos criando UI. Tudo isso é baseado na sua preferência, como você quer que seu jogo fique. E te vejo no próximo vídeo. E eu acredito no vídeo final em que faremos o chefe realmente filmar depois de um certo período de tempo. Então, vejo você. 94. Adição da habilidade de fotografar: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Eu sei que neste momento você provavelmente está dizendo Michael, cada vídeo que você diz que este é o vídeo mais longo, mas este será o vídeo mais longo. Espero que você esteja animado com isso ou não. Não sei, mas esse vídeo exigirá muitos ajustes. Eu cometi alguns erros e depois os consertei no local na sua frente. Então você sempre sabe que sou transparente o máximo que posso, então não vou mais desperdiçar seu tempo. Vamos começar. Ok, então agora temos uma barra de saúde. Temos saúde, temos principalmente atacando, temos caminhada, temos máquina de estado, temos tudo para o nosso chefe, mas também precisamos adicionar um pouco de raiva e suporte ou tiro. Então, vamos seguir em frente e fazer isso. A primeira coisa que precisamos fazer é realmente criar pontos dos quais nosso chefe estará atirando. E vou aumentar o zoom no chefe. E a forma como o tiroteio vai funcionar é que teremos oito pontos ao redor do chefe. Quatro serão as filmagens regulares, e oito serão para o tiroteio com raiva. Quando ele fica com raiva, ele atira mais. Isso é lógico. Vamos seguir em frente e fazer isso. Clique com o botão direito aqui, crie pontos de disparo vazios. E aqui vou criar o primeiro, que será 0,1. E vamos avançar e movê-lo cá ou aqui à direita dele. Duplique este. E, obviamente, isso não será muito conveniente. Então, vou chamar isso. Então 0.1.2, vou colocá-lo em sua cabeça. 0.3, mova-o para baixo aqui. E 0.4, mova-o aqui. Agora, quando vamos criar nosso tiro ou a bala de musgos, ela se moverá na direção das balas, certo? Então, precisaremos girar tudo isso e mais tarde, mas por enquanto, vamos apenas duplicar os quatro. Coloque-o aqui. Talvez em torno deste ponto quase. E então, novamente aqui, 678. Então lá vamos nós. Agora temos oito pontos ao redor do nosso chefe. Agora, a próxima coisa que precisamos fazer conforme precisamos para seguir em frente e criar as conexões aqui. Então, da caminhada, uma transição para o tiroteio e qualquer transição do tiroteio para a caminhada. E vamos adicionar um gatilho aqui, que será a filmagem. E então aqui em cima vamos fazer o mesmo. Então faça a transição, pode fazer a transição. Não vamos ter tempo de saída. E sim, mantenha a duração da transição como ela tem. Não se preocupe com isso. Isso aqui também não tem tempo de saída, duração da transição, hora. Então, esquecemos de adicionar também uma condição aqui. Então a condição é que eles devem ser acionados. E aqui a condição como o gatilho oh, atirar. E depois voltando, acredito que não precisamos ter um tempo de saída. E aqui também, acredito que não teremos tempo de saída, mas vamos querer reproduzir toda a animação e depois voltar. Ou talvez vejamos, veremos o que acontece à medida que criamos o ganho, o que precisaremos. Agora, o próximo passo óbvio é criar a bala dos ônibus. Então, vou clicar com o botão direito do mouse dentro da pasta Boss. E aqui vou criar o chefe. Bala. As balas apertam Enter. Aguarde a compilação do script. E vamos clicar duas vezes e abri-lo. E o que vamos fazer aqui enquanto vamos fazer o óbvio? Então, a primeira coisa, obviamente seremos um flutuador para a velocidade. E então vamos ter um vetor privado 2 ou um vetor 3 na verdade para a direção da bala. Então teremos 14 para o dano talâmico. Isso deve ser um número inteiro. Certo, ótimo. Agora, no início, vamos definir a direção da bala e será a direção do sangue igual a ponto de transformação, certo? Então, certo significa que se olharmos aqui, o eixo vermelho na transformação, se subirmos. Então talvez eu tenha feito isso muito rápido. Então, o eixo vermelho da transformação e do espaço mundial. Então, de volta à cena. E observe que este, este é o eixo vermelho. Por exemplo, o para a bala voará para a direita. Então, o que precisaremos fazer como precisamos para girá-lo assim, acredito. Então. Lá vamos nós. Podemos ver que temos ele irá defini-lo para 90 graus. Então, o terceiro a 180 graus disse que o ponto na parte inferior talvez 90 graus? Não, não, não 90 graus menos 90 graus. E temos esse ponto aqui. O que devemos defini-lo? Vamos ver. Então, se você não é um bom caminho, isso é perfeito. Lá vamos nós. Então, 45, eu acredito. Sim, 45 é bom para os seis. Isso deve ser menos 45. Lá vamos nós. Vamos mudá-lo. Mas para que você possa brincar, você pode fazer o que quiser e como quiser. Se você quiser, você pode definir todas as posições de disparo em uma direção. Talvez assim por aí assim. Sim, claro. Por que não? Então lá vamos nós. Então, deve ser um 135. E por que é 135? Bem, porque eu adicionei 90 graus e depois adicionei um 45. Isso é cento, dez centenas continua. Agora temos um ângulo perfeito e isso seria 135. Sim, lá vamos nós. Então, agora temos bons pontos de ferramentas do nosso chefe. Então, vamos salvar isso. Vamos tornar isso menor. E agora vamos voltar ao nosso script e ver o que mais precisamos fazer aqui, uma atualização. Vou seguir em frente e obter a posição do ponto de transformação e mais é igual à direção da bala vezes a velocidade. E, obviamente, tempo. DeltaTime. Lá vamos nós. Então, o Time.DeltaTime garante que, mesmo que isso seja chamado de cada quadro, estamos desanexando-o usando o time.DeltaTime. A próxima coisa que vamos fazer, vamos verificar se não temos o chefe em nossa hierarquia. Portanto, se a instância de ponto do controlador chefe tiver uma instância, não temos uma instância, então vamos seguir em frente e encontrar a maioria dos objetos do tipo. Ou talvez devêssemos criar uma instância. Acho que é melhor, ou podemos obter uma referência ao chefe, o que também é uma boa ideia. Mas você sabe o quê? encontrar o chefe e o mundo. Tão bem. Objeto do tipo, controlador chefe. E se ele estiver ativo e objeto de jogo e estiver ativo, ativo na hierarquia. Então, se ele não estiver ativo na hierarquia, então queremos destruir todas as balas que já estão voando. Destrua objetos do jogo. Então o bolus é destruído quando o chefe morre, não queremos que as balas mantenham o cliente. Ou se você quiser, podemos manter as balas voando no mundo. Depende de suas preferências. Agora, a próxima coisa que queremos fazer é lidar com a forma como as balas interagirão com o mundo. E, obviamente, ainda não criamos as balas. Mas tenho certeza de que neste momento você já sabe e tem todo o conhecimento. Então, vou criar um empreendedor entre no e dentro deste Centro Empreendedor. Eu vou, bem, eu queria dizer que queria verificar a tag do jogador, mas, como sabemos, já vamos nos certificar de que as balas só colidem com um jogador e nada mais. Então, ponto de colisão obtém componente. E vamos verificar o manipulador de saúde do jogador. E vamos sofrer dano ou danificar o jogador. E neste jogador de dano, vamos para o dano de bala centrado no dano de bala que não temos aqui, podemos clicar duas vezes e garantir que é com isso que estamos trabalhando. E então o que deveríamos estar fazendo? Bem, acredito que devemos destruir o objeto do jogo. Mas o problema aqui que eu não gosto é que, se atingirmos qualquer outra coisa, ele não interagirá com ele. Então o barco continuará voando para sempre. Então, novamente, teremos que verificar a colisão. Então, se collision.com emparelhado tag e é a camada, e então vamos fazer isso. E sempre que temos apenas uma linha de código sob a condição, podemos evitar o uso das duas linhas rabugas. E por que escolhi novamente criar a tag e não apenas mantê-la como era porque a bala voa. Queríamos bater em um muro para ser destruído em qualquer caso, porque não queremos que a bala sempre continue voando no mundo e tenha muitas balas e a hierarquia que só ocuparão espaço e dificultará o desempenho da nossa máquina. Então, finalmente, o que mais deveríamos estar fazendo? Acredito que isso é tudo, e acredito que isso é tudo. Então, vamos criar nossa bala. Então, onde estão nossas balas no pré-fabricado? Temos balas, temos balas de AMI ou não, não queremos replicar as balas inimigas. Vamos entrar, você sabe, eu vou. Pullets player e ainda rifle, arma de tiro. Vamos em frente e duplicar a espingarda chamada S1, a bala chefe no Enter. E vamos ver o que vamos usar aqui para ver os sprites. Podemos usar um desses e talvez usar o grande e enorme vermelho. Sim, claro. Por que não? Vamos usar o grande vermelho enorme. Vamos ver como isso parece no mundo. Então, de volta ao prefabricado Boss? Ou prefere o jogador de balas? Vamos movê-lo para fora. Então, aqui temos a bala chefe. Vamos colocá-lo na cena. Lá vamos nós. É isso. O que devemos fazer? Balas, é claro, está na camada de balas. Vamos ver o que mais temos? O que vamos fazer aqui? Acho que a bala é um pouco menor. Dimensione um no x. E em vez de ter menos mudanças, talvez o colisor, como? Porque o colisor não, é perfeito. Vamos ver o dano da bala do jogador. Obviamente, removeremos o componente e vamos seguir em frente e adicionar o nosso próprio, que é o controlador de bala chefe. Lá vamos nós. Então agora temos o controlador de bala chefe, a quantidade de dano, o ponto de ataque. Observe que este é um controle de chefe ou não. Eu estava me perguntando como o quê, o que há de errado com essa bala chefe? Balas chefe. Lá vamos nós. Então agora temos velocidade que deve ser animal como cinco, dano de bala será, pode salvar isso. E quando criarmos um novo pré-fabricado, não se preocupe, este será removido ou podemos simplesmente aplicar as alterações à bala chefe. Então, de volta à nossa possibilidade aqui, se rolarmos para baixo e escolhermos este, na verdade, o chefe, mas você pode aplicar tudo. E agora temos a bala funcionando regularmente. Então eu acho que esta é uma bala boa o suficiente para nós. Então, vou apagar a bala chefe. Agora temos isso em nossa hierarquia. Temos o roteiro, temos o colisor, temos um corpo rígido que é importante, o que salva tudo isso. E vamos ver o que mais precisamos fazer? Bem, levará a lançar um desafio para você. E seu desafio é fazer com que o chefe atire. Então, antes de tudo, crie uma referência aos pontos de tiro e aos pontos de tiro com raiva. Então você precisará criar duas referências aqui. E isso tudo obviamente vai acontecer. E o controlador chefe, então você precisará obter uma referência à bala dos chefes. Obviamente, você precisará criar um método que percorra todos os pontos usando um loop foreach e instancie as balas. Então você precisará criar outro método para o tiro com raiva. E você precisará usar os eventos para chamar os métodos e as animações para que as informações, pause o vídeo agora, tudo isso precisará ser feito e o controlador chefe e vá fazer o desafio. Oh, ok, bem-vindo de volta. Então, onde estamos, chefe controlador aqui em cima, vamos seguir em frente e criar um campo serializado do formulário trans. Esta será uma matriz obviamente para os pontos de disparo. Então vamos criar um campo serializado para a transformação, também, os pontos de tiro com raiva. E então vamos criar um campo serializado para o objeto do jogo, que é a bala chefe. E espero que você tenha feito o desafio. Espero que não tenha sido muito difícil neste momento, você deve ter muito conhecimento de tudo o que estamos fazendo. Então, nada é realmente conhecido. É por isso que estou apenas passando pelo movimento e fazendo tudo muito rápido, sem explicar. Então, tenho certeza que você já sabe a maioria das coisas que fizemos aqui. Vamos continuar. O que mais precisamos fazer? Bem, precisamos criar o método que queremos. Então, aqui, sob o jogador atacante angular, vou criar um jogador público de tiro vazio. E aqui vou criar um loop para cada ou um loop para cada que percorra todo o ponto transformado. E jogador de tiro. O quê? Estou atirando em pontos. Em pontos de disparo. E aqui vamos instanciar a bala chefe na rotação de transformação de posição de ponto de transformação. Então, precisamos ter certeza de que temos a mesma rotação que tivemos com o ponto de disparo real que está instanciando. Então, precisaremos criar um vazio público. Tiro com raiva. Deixe-me apenas copiar este e adicionar raiva também. Ele sempre adiciona raiva, zangada. E eu sei que esse vídeo é longo. Eu queria separá-los em dois vídeos. Um para a Basileia aos 14 anos, o tiroteio regular. Mas, na verdade, eu só pensei que não adianta criar apenas um postulado. Muito simples, já fizemos isso. Então eu queria criar dois vídeos ao mesmo tempo. Pontos de tiro tão irritados. Lá vamos nós. Nós salvamos isso. Agora qualquer um ou você pode adicionar um mecânico extra e eu recomendo que você faça isso. É bem simples. Em vez de ter esses pontos de tiro e pontos de tiro com raiva, você pode simplesmente criar um grande ou um grande, apenas os pontos de tiro com raiva. E quando estamos atirando regularmente em vez de um para cada um, você pode criar um loop for, passar por pontos aleatórios e instanciar balas deles. Talvez seja uma mecânica de jogo legal. Não sei se você quer fazer isso. Vá em frente, seja meu convidado e por muito tempo. E eu não fiz isso porque eu realmente quero ter a direção b e esses quatro, ou você pode fazer isso, não importa. Este é o seu jogo em suas próprias coisas para ele. Então, no programa, vou rolar para baixo. E onde temos isso? Ok, então pontos de tiro, abra isso. Sou eu. Basta bloquear a escala para baixo, escolher os quatro primeiros. E estes são os pontos de disparo regulares e , em seguida, todo o resto são os pontos de tiro com raiva. Esta é a bala chefe. E salve isso. E, finalmente, precisamos ir às animações no tiroteio. Então, atirando, onde deveríamos atirar? Vamos ver, e talvez aqui. Então, nesta posição, adicionamos um evento. Vamos apenas desbloquear isso. O que fazemos atirando jogador. Então nos tornamos menores, maiores. Talvez neste momento novamente, tivéssemos um evento deveria jogador. E depois voltamos talvez uma última vez, e aqui nós atiramos no jogador. Então, devemos jogar ou três vezes. Ótimo. Então, salve isso. Agora, de volta ao nosso tiro de raiva, tiroteio com tanta raiva, ficamos maiores. Devemos ter mais fotos aqui. Tão furioso jogador de tiro, torne-se maior, menor, maior. Por que não nos tornamos maiores? E neste ponto, não sei, mas obviamente cometemos um pequeno erro aqui, mas não se preocupe. Vamos tornar este o jogador de tiro angular maior, menor. E outro evento. Jogador de tiro angular maior, menor. Acho que neste momento é bom. Não se preocupe com a animação. Não o tornamos perfeito. Jogador de tiro com raiva. Nós salvamos tudo isso. Agora temos tudo configurado. A última coisa que precisamos fazer é que precisamos realmente entrar nesse tiroteio. E como queremos ter esse mecânico? Embora eu pense a melhor maneira de fazer isso. Como digamos que os chefes andando, andando, andando, ele não consegue chegar ao jogador. O jogador continua fugindo. E depois de um certo tempo, ele só começa a atirar no jogador. Então, vamos fazer exatamente isso. Vou abrir a caminhada do chefe. E aqui vou criar algum tipo de contagem regressiva ou algum tipo de contador de choque. E por que precisamos criar um balcão de tiro? Bem, por que não um comportamento mono? Bem, porque quando você está em um comportamento de máquina de estado, você não tem uma co-rotina arriscada. Eu quis dizer por que não podemos criar uma rotina inteira? Você pode criar uma chamada dentro, porque isso não é um comportamento mono, só podemos criar igualdade e lado de um comportamento mono. Então, por esse motivo aqui, vou criar um balcão de tiro flutuante privado e um campo serializado para a sessão de fotos. Estou salvando isso. E então vou entrar na atualização no estado. E aqui eu vou dizer Se o tempo for menos igual, menos igual ao tempo ponto de tempo tempo delta fixo. Foi o problema aqui. Também. Menos igual, não igual menos, desculpe. E então aqui vou dizer que se o tempo do show for menor ou igual a 0, então vamos seguir em frente para gatilho do animador e copiar o caminhoneiro de tiro. Copie isso deve acionar, colocá-lo aqui, fechar isso, salvar tudo isso. Acredito que precisamos de uma maneira de voltar. Então, aqui precisamos de uma maneira de voltar. Então, adicionaremos um tempo de saída. E vamos nos certificar de que reproduzimos toda a animação para 97%. Então, vamos ver como isso fica na pré-visualização. E lá vamos nós. Podemos ver que jogamos, devemos, devemos emitir e depois voltamos a caminhar. Certo, acho que isso é bom o suficiente. E aqui também teremos um tempo de saída em 97%. Eu tenho isso. Acho que na saída no estado, também precisaremos redefinir a filmagem. Então, salve isso. E acho que é isso. Acredito que isso é tudo o que precisamos fazer. Então, vamos ver. Em The Walking in here, qual é o curto período de tempo? Talvez depois de dois segundos de caminhada. E se formos para a caminhada com raiva, depois disso, talvez depois de três segundos de caminhada. Então, esses são apenas números arbitrários. Não pensei se isso é bom ou não. Então, vou fazer isso maior. E como você pode ver, há algo errado. Primeiro de tudo, temos uma bala aqui que não é boa. Então, onde está, Onde está? Enquanto as cenas, essa bala que vai ajudar, vamos fechar Dui. O que essa bala realmente está fazendo aqui? Não faço ideia. Por que não posso selecionar, ei, bem-vindo de volta. Então, por algum motivo, não consigo encontrar o que diabos é isso. Não vamos nos preocupar com isso. O que precisamos nos preocupar é mudar a camada de balas para a bala inimiga. Salve isso. E agora vamos ver como isso parece. Quando a bola atira nos é realmente não consegue encontrar o que é isso. Então ele anda por aí, ele começa a atirar e é muito ruim. Certo, ótimo. Então, obviamente, temos algo que não está funcionando corretamente. Ei, bem-vindo de volta. Um grande erro que cometi. Em vez de usar a transformação dessa posição, eu não deveria ter usado o ponto que está bem aqui. E o ponto que está bem aqui. Desculpe por isso. Isso é muito ruim, não, não parece bom. Mas lá vamos nós. Agora corrigimos todos os problemas. Isso deve funcionar agora. Então, de volta ao nosso jogo, devemos ver que agora, quando o chefe atira, lá vamos nós. 123. Mas, por algum motivo a bala que sobe não está disparando corretamente. Então, qual é o problema? Lá vamos nós, até levamos um tiro. Vamos tentar ver qual é o problema quando ele dispara. Então, para cima, há um problema. E da maneira como eu só percebi como o último funcionou, por exemplo , olhe, podemos usar quadro a quadro. Ele fica maior 0. Observe o que aconteceu. Então, vamos remover a pausa. E vamos ver o que está acontecendo quando ele atira. Você pode ver que a bala sai, que são as balas chefe, veja, ok, então esta, esta sai. E assim que sair por algum motivo, ele simplesmente desaparece. Então, qual é o problema aqui? Vamos ver, talvez seja por causa do colisor. Pode ser. Então, vamos ver o ponto, obviamente este 0.2 e o colisor. Mas não deveria ser por causa do colisor porque, bem, obviamente, a bala inimiga não interage com o chefe ou vem? Então, notei que quando movo o ponto para cima, isso não cria um problema. Então minha suspeita é que a bala chefe, que está no tarugo inimigo, esteja interagindo com esse chefe Kali, que está na camada padrão. Então, o que vou fazer é criar uma camada para o chefe. Então, nas camadas aqui, crie uma camada de chefe Skelly. E então, no chefe, são as balas inimigas. Então, vou entrar no Editar, Configurações do projeto, Física 2D, rolar para baixo e garantir que ele não interaja com o chefe. Crânio. Move-se, impulsione Skelly, aumente o escamoso. Vamos voltar às camadas, editar camadas e não aumentar a cesta Skelly. Então Muschelli não interage com ambos Skelly que funcionam. De volta aqui. Disse o chefe, Kelly. Sim, mude todas as crianças. Nós salvamos isso. Voltamos e as configurações do projeto. E o terceiro é x para o e o horário do ônibus não interage com o Boss Kelly e não interage com o jogador. Mas podemos realmente mover tudo isso honestamente, mas vamos mantê-los. E agora devemos ver que todas as balas, todos os pontos disparam corretamente, mesmo que esse ponto esteja dentro do colisor de caixa do jogador, o inimigo. Então agora devemos esse cara, como você pode ver, ele atira a cada dois minutos em segundos ou o que quer que seja. Então, olhamos aqui. Vamos atirar, Verdadeiro? Verdade. Vá lá. E vamos tentar atirar nele e deixá-lo com raiva. Então ele está com 50 por cento de saúde. Portanto, há um problema com a animação. Então o problema está no chefe entrar aqui, é o balcão de tiro. E quando o contador de disparos é definido para menor ou igual a 0, precisamos redefinir o contador de disparos para ser igual ao disparo tempos em tempos. Salve isso. E lá vamos nós. Tudo deve estar funcionando corretamente. Agora. Em seguida, voltamos a executar o jogo. Espero que este seja o último erro que cometemos. Nós atiramos, lá vamos nós. Terminamos a animação de filmagem. Caminhamos um pouco, e depois voltamos a atirar. E está funcionando? Não, não acho que esteja funcionando corretamente. Algo está errado. Certo. Bem-vindo de volta. Então, eu não tinha certeza de qual era o problema. Acontece que o balcão de tiro era muito estranho. Então, quando estávamos redefinindo o balcão de tiro aqui, sempre que fizemos a transição para a filmagem, o problema era que ele só contava quando realmente estávamos nesse estado. Então, nós só contamos quando estamos na atualização do estado da caminhada do chefe. Então, a melhor solução é apenas mover a reinicialização do contador de tiro, que é apenas configurar o contador de disparos para o tempo de disparo. Nada da atualização no estado, mas na saída no estado. Então, agora o contador de choque é reiniciado toda vez que realmente entramos em outro estado. Então, aqui, quando executarmos o jogo, você verá que agora o chefe sobe, ele atira, você verá a contagem de tiros. E aqui, lá vai você. Cinco remonta a 0. Então lá vamos nós. Agora tudo está funcionando bem. Agora o deixamos com raiva. Vamos ver o tiroteio se funcionar quando estamos com raiva. Sim, lá vamos nós. O disparo é muito mais prevalente, 123. E acho que um deles está faltando. Queríamos ter na animação várias fotos. Este é o vídeo mais longo e todo o curso, eu prometo a você. Ataque tão irritado. Mas temos Não, quero dizer, tiro com raiva, 1, 2, 3, 4. Temos que devemos pagar. Não emitimos o quarto. Acredito que seja por causa da hora de saída. 97. Vamos jogar, vamos jogar a coisa toda. Então, salve isso, salve isso, execute o jogo. Vamos ver como isso parece. E eu poderia ter feito tudo isso fora da tela, mas eu realmente queria mostrar como tudo está funcionando. Então, espero que isso seja bom. Quantas vezes será 2, 1, 2 , 3, 4, então quatro, mesmo estando andando, acho que isso é bom. Isso não é ruim. Podemos filmar na última vez enquanto estamos caminhando. Isso é uma boa mecânica, os chefes finalmente terminaram após 40 minutos de gravação. É o tempo que me demora depois da edição, talvez seja um pouco menor. Então, vou cometer todas as alterações que fizemos. Vou dizer, finalmente, fez o chefe. Atire depois de quase 100 erros. Isso não é algo que você deve escrever. Isso é para mim lembrar o quanto eu realmente cometi erros neste vídeo. Mas em qualquer caso, espero que você goste. Espero que você aprecie a transparência e eu mostre tudo que está acontecendo nos bastidores. Se você ainda não o fez, este é o momento perfeito para me deixar um comentário e eu te vejo no próximo vídeo na última seção. Talvez eu não saiba onde estaremos criando o fluxo de nível real de uma cena para a outra agora que temos tudo no lugar. Então, vejo você. 95. Seção 16: geração de quartos (a programação orientada em C# de C# de: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, acabamos de criar alguns novos níveis para toda a geração de níveis aleatórios. Então, antes de tudo, criamos o nível de picos. Se a escala é onde temos alguns esqueletos, a loja onde temos apenas um inimigo guardando a nova arma, onde matamos o inimigo e pegamos uma nova arma, a saúde com saúde de volta que dá nós um nível covarde 120,5. Todo mundo é um ano covarde. E o nível do chefe, e é isso. Isso é tudo o que você precisa fazer. Isso é tudo o que fizemos. Então, não vamos perder mais tempo e vamos começar. Ok, então bem-vindo a uma nova seção em C avançado afiado. Então, o primeiro vídeo é sobre a criação de várias salas. Então, já temos o nível 1, nível 2, o nível 3, o nível nítido e a tela de título com a tela da vitória. A próxima coisa que precisamos fazer é criar mais alguns quartos. Vou fazer isso separadamente porque não quero desperdiçar muito seu tempo. Então, o que vou fazer é lançar um desafio para criar várias salas. Então, antes de tudo, queremos ter várias salas para passar. É semelhante à forma como teremos o jogo de hades. Então, temos vários quartos. Temos a opção de passar por duas portas em cada quarto depois de terminarmos de matar todos os inimigos. Isso é exatamente o que queremos fazer e nosso jogo também. Então, esses são alguns dos quartos que você terá. Você precisará ter uma sala afiada, a sala de saúde onde você acabou de entrar e pegar o quanto quiser. O pico Roma. Então, uma sala cheia de picos, não há inimigos. Você pode ter inimigos se quiser, mas está cheio de picos. Você precisa passar por isso sem morrer. Uma sala de chefe, obviamente, e mais três salas de várias formas. Portanto, no total 1, 2, 3, 4 e 56, 7. Então, quase sete quartos para escolher. E é importante tê-los porque teremos várias opções em duas portas de saída diferentes e assim por diante. Obviamente, a tela de título e a tela da vitória não fazem parte do jogo. Então isso será deixado para outra coisa. E você precisará adicionar, certifique-se de adicionar. E isso seria, e certifique-se de adicionar as regras ao índice de compilação, obviamente. E vou te dar uma pequena dica. Você pode simplesmente duplicar o nível e alterar algumas coisas ao redor que você não precise realmente passar pelo processo de criação de uma nova cena, adicionar grade, fazer todas essas coisas pode simplesmente basta selecionar um dos níveis, duplicar, configurar tudo, e antes de eu ir, há algo que precisamos cuidar. E isso é que, na tela da interface temos a saúde dos chefes sempre presente. Não queremos que isso aconteça. Assim, podemos fazer desta a sala do chefe e depois duplicar e criar outros níveis a partir dele. E outras telas de interface do usuário não terão o chefe mantido. Ou se você quiser uma coisa mais inteligente a fazer é aqui no UI Manager, podemos obter uma referência à saúde do ônibus e, em seguida, podemos ativá-la e desativá-la com base em se podemos encontrar um chefe e a área em que estamos lutando. E então, o que todas essas informações. Deixe-me levá-lo de volta ao desafio. Pause o vídeo agora mesmo e crie algumas salas para os próximos vídeos. Vejo você em apenas um pouco 0 caso. Então, como foi isso? Deixe-me mostrar o que eu criei. Então eu criei antes de tudo, a cena do chefe onde você encontra um chefe. Tudo é o mesmo. Eu mantive as portas são os portais. Eu o que eu fiz, porém, é ter os portais aqui mesmo na sala separados de 12 portais para ficarem ao redor da hierarquia. Eu os coloquei dentro do objeto portais dentro dos quartos. Outra coisa que eu fiz foi no administrador, feche-os. Este aqui no UI Manager, bem aqui. No UI Manager, recebi uma referência ao menu chefe e me certifiquei ativá-lo ou mantê-lo como desligado se não conseguirmos encontrar o controlador chefe. Então isso é apenas para a barra T das bolas. O que mais fazemos, o covarde? Este não é o peso. Também por que meu erro. Então este deve ser o covarde eu, então é aqui que temos todos esses olhos atualmente. Lembre-se, esses são os que fogem e este será o salão de saúde. Errado. Lá vamos nós. E esta sala de saúde tem um halfback e este Outback restaura 120 de vida. Então, basicamente, restaura toda a sua saúde. E você pode notar aqui que ainda tenho um inimigo, mesmo na loja, que não deveria ter um inimigo. Mas sim. Coloquei lá porque as portas não se abrem a menos que matemos um inimigo. E eu sei que isso é um pouco complicado. Talvez devêssemos adicionar mais alguns. Talvez, digamos uma linha extra de código para garantir que nem sempre temos que matar os inimigos. Para abrir as portas. Podemos abrir as portas em um conhecido, sabe o quê? Eu não queria passar por isso porque é bastante simples, mas ao mesmo tempo consome tempo. Então eu só pensei que vamos manter isso nisso. Acabamos de adicionar um inimigo que reunimos enquanto passamos pelos quartos e continuamos. Então eu criei a sala de espinhos por algum motivo, não é a sala de espinhos. Temos os esqueletos. De onde são os picos? Então, as novas armas. Então, tudo bem. Então, a nova arma está no esqueleto com os picos por algum motivo. Não sei por quê. Deixe-me renomear picos WAS só para não termos o mesmo nome. Então, espinhos e eu vou remover as armas apenas e nesses picos. Sim, salve este e a sala de espinhos. Vou manter estes como o e este. O que esse tem? Oh espere, também estes são os picos, este como os esqueletos e este. Então este não tem nada. Vou apagar todos os inimigos aqui. Apenas mantenha um só mantenha um deles para proteger, digamos que o baú. Se eu entrar nos pickups Prefabs, onde está? Objetos de nível. Certo, então lá vamos nós. Este é o baú. E então nós, uma vez que venhamos esse inimigo, podemos abrir o baú, pegar a arma e depois sair de lá. Então, agora o que mais fazemos? E esses esqueletos, esqueletos, picos, picos. Estes são os sim da Kelly. Renomeie essas estelas. E então esta é a nova sala de armas. Novas armas. Apenas novas armas. Pressione Enter. Sim, lá vamos nós. Então, como você pode ver, temos alguns níveis. Obviamente, precisamos ir para onde está, as configurações editáveis, e lá vamos nós. Então novas armas, picos. Vamos adicionar o nível do chefe, os olhos do covarde, o nível de saúde. A nova arma já está lá. O nível da loja, essas ravinas e os picos já estão aqui. Então, como você pode ver, temos agora quantos eles são? Certo, então seis níveis, 1234567. Então, sete níveis, uma tela de título e uma tela de vitória. E é isso que vamos acessar nos próximos vídeos, tentando ver como tudo funciona. Espero que você tenha gostado de cometer suas alterações e eu o vejo na próxima. 96. Como criar o Enemy: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, como você pode ver, temos algo um pouco diferente. Temos ondas, mas essas ondas não são apenas elementos regulares ou variáveis regulares. Eles têm as variáveis de amigos dentro delas. E podemos criar uma outra onda e outra onda. E como você pode ver, cada um deles tem seu próprio elemento. Então, bem-vindo à seção Avançado C-sharp. Não vamos perder mais tempo e vamos começar. Mas preciso de sua concentração total, sua atenção total e sua queda. Pacientes comigo. Então, vamos começar. Oh, ok, então agora que temos nossos níveis aleatórios, é hora de criar ondas NME aleatórias. Então, não vamos apenas ter os inimigos regulares aqui. Acabei de configurá-los no vídeo anterior para que saibamos qual é a ideia geral em cada nível e apenas tenhamos algumas diferenças entre eles. Mas neste vídeo vamos criar um criador inimigo. Então, vamos começar. A primeira coisa que vamos fazer é abrir os gerentes. E não temos gerentes aqui. Então, vamos para um desses que não tem um gerente e é isso. E o que vou fazer é entrar no pré-fabricado. Temos um gerente aqui e vou adicionar toda a pasta de gerentes para que possamos adicionar gerentes a qualquer cena que precisarmos. Então, vou para o nível de chefe que temos todos os gerentes aqui. Sim, nós fazemos. Os covardes. Não temos os gerentes ou gerentes pré-fabricados e os gerentes aqui. Lá vamos nós. Agora temos o nível do jogo e todo o seu gerente. E vamos voltar e ver. Então, os covardes, sim, salvam a saúde. Temos gerentes? Não, nós não temos. Então, novamente, vamos para os prefabs Prefabs Managers. E lá vamos nós. Adicionamos os gerentes à sala de saúde. Vamos ver o que mais temos o novo que temos gerentes no topo. Nós não fazemos novamente. Então encontre os gerentes nisso. E se você quiser, você pode simplesmente pular esta parte e ir direto para o, você tem aqui. Mas este não é o prefab, então vou excluir isso. Vou adicionar o prefab do gerente real deveria ter feito isso em um anterior. Também cenas, o que é essa loja? Esta Kelly está vendo, sem gerente. E os gerentes. E picos de cenas, salve gerentes. Lá vamos nós. Nível de chefe. Gerentes que queremos. Este não é o gerente que você está procurando. Então os covardes veem? Sim, sim. Sim, sim, sim. Certo, ótimo. Então, em todos os lugares, temos gerentes agora é hora de realmente criar um criador. E o melhor lugar que acredito para começar é nestes Kelly aqui. Então, neste caso, vá para o gerenciador de níveis e vamos em frente e adicione um componente aqui ou não, na verdade, vamos para os scripts. E onde vamos adicionar o criador de ondas? E vamos adicioná-lo dentro dos gerentes aqui, vamos criar um novo script C-sharp, que será o gerenciador de geradores de ondas. Pressione Enter, acabamos de adicionar o Gerenciador de nomes. Então, novamente, temos uma desculpa para outros gerentes de topo. Então, vou adiante e adicioná-lo ao gerenciador de níveis. E aqui vou abrir o roteiro. Então, o que queremos fazer aqui? Queremos criar outra classe. Por que queremos criar outra classe? Bem, porque antes de tudo, isso é avançado C-sharp. Em segundo lugar, queremos criar uma classe inteira diferente para as ondas porque as ondas nomearam as ondas têm inimigos, as ondas têm um equilíbrio de inimigos, o atraso entre cada vez que geramos um inimigo, e assim por diante e assim por diante. Então, aqui, vou seguir em frente e criar uma classe pública. E isso vai ser chamado de onda. E essa onda terá algumas coisas. Então, antes de tudo, ele terá um nome de String público. E, obviamente, não queremos tê-lo sempre como público, mas neste caso, só para que possamos economizar um pouco de tempo sem ter que criar todas as coisas extras. Vamos torná-los públicos. Então teremos um objeto de jogo público e uma série de inimigos. Que série de inimigos e eu somos. Lá vamos nós. Então teremos um público e a quantidade de inimigos que surgirão. E, finalmente, teremos um atraso de desova de flutuação pública. Lá vamos nós. Então, esses são todos os elementos, ou digamos que a parte da onda, todas as variáveis dentro da onda. Se você quiser chamar essa variável, porque esta é uma classe, é algo totalmente diferente. Mas essa não é a única coisa que precisamos fazer. Também precisamos ter certeza de dizer que aqui em cima, este é um ponto de sistema serializável. Então, salvamos isso. E o que significa serializável? Isso significa que agora, se eu abrir os scripts Unity aqui, você verá isso. Certo, nada aconteceu. Por que isso? Bem, porque também precisamos fazer mais uma coisa. E aqui vamos dizer que isso tem uma onda pública. Como você pode ver agora, temos uma classe totalmente nova, uma série de ondas. Então, salvamos isso. Agora, quando voltarmos à Unity, veremos que temos a opção de criar ondas. E se eu apenas adicionar uma onda aqui, você verá que eu tenho elementos diferentes para essa onda. E eu posso ter um objetivo, posso ter uma quantia, posso ter o atraso de desova e os inimigos que eu quero. E se eu adicionar outro elemento aqui, você notará que novamente, tenho um nome diferente, inimigos diferentes, quantidades diferentes e atrasos diferentes. Então, como você pode ver, é por isso que recriou ou se certificou de que este é um ponto do sistema serializável. Isso nos permitirá criar diferentes elementos disso e nos permitirá criar esses tipos de variáveis. Então, basicamente, criamos uma nova variável que tem diferentes variáveis dentro dela. Então, vamos continuar agora que temos tudo isso, a próxima coisa a fazer é obviamente ir em frente e começar a verificar onda após onda. Então, a primeira coisa que precisamos fazer é aqui, criaremos um fim privado e vamos manter a contagem da próxima onda. E, obviamente, começaremos em 0. Então, a primeira onda será 0. E toda vez que criamos uma nova onda com uma nova quantidade de inimigos, com os novos tipos diferentes de inimigos, iremos para a próxima onda aumentando-a em um. Em seguida, vamos criar um campo serializado onde vamos acompanhar o tempo entre as ondas. E vamos defini-lo em cinco F como padrão. E então também vamos acompanhar a contagem de ondas. Então, onda flutuante, eu digo contagem de ondas, eu quis dizer contagem regressiva. Certo, salve isso. E agora, quando começar, precisamos inicializar a contagem regressiva das ondas para ser o tempo entre as ondas. E então vamos fazer algo para mais tarde e estava pensando, mas agora queremos ter algo também como um extra. E acho que este é o lugar perfeito para criar algo ou algo que já cobrimos, que é um enum. E por que queremos criar um enum? Como as ondas estarão em três estados separados, teremos uma desova. Então é aqui que estamos gerando cada um, eu não sei o tempo ou o atraso entre os inimigos. Por exemplo, a cada dois segundos geramos um novo inimigo. Nós geramos um novo inimigo. Neste momento, não queremos fazer certas coisas com nosso controlador ou gerente de geradores de ondas. Quero dizer, então precisamos criar estados diferentes. Então, o que vou fazer é lançar um desafio. E seu desafio é criar um enum para os diferentes estados que teremos. Então, já cobrimos enums na seção de coleta. Então, antes de tudo, crie um E nada para os diferentes estados de desova que terão, precisará ter a desova, espera e contagem. E, finalmente, tudo o que você precisa fazer é criar uma variável desse tipo para que possamos usá-la como referência. Então, pause o vídeo agora mesmo e vá fazer cada um. Oh, ok, bem-vindo de volta. Então, como eu te disse, em uma das pickups, enquanto a pick-up pickup. Pickup pickup, uma bicamada? Não. Conta-gotas de item, droga. Onde estava? Onde estava? No oh, ok. Então, no item da loja, como você pode ver, criamos um enum para a restauração de saúde, atualização de saúde e a arma. E com base em cada um desses, temos uma instrução switch. Vamos fazer quase exatamente a mesma coisa. Então, aqui vou criar um enum privado e privado. E estes serão esses Estados batendo. E nós vamos ter o bombardeio, a espera e a contagem. E então vamos apenas criar uma variável desse tipo que será um estado e estados fundadores privados. Lá vamos nós, salve isso. E aqui no início, o que queremos começar? Bem, vamos começar com a contagem. O estado é igual à contagem de pontos dos estados de desova. Então, começamos com a contagem regressiva e , em seguida, começamos também precisamos ter certeza de que definimos. Oh, então já dissemos a contagem regressiva das ondas. Queremos atualizar, começar a contagem regressiva na onda. Então, se a contagem regressiva de ondas for menor ou igual a 0, então o que vamos fazer é verificar, primeiro lugar, se o estado em que estamos atualmente é diferente do estado de desova, desova de pontos. Então o que vamos fazer é começar desova enquanto o caso contrário não terminamos a contagem regressiva, então vamos obter a contagem regressiva e remover para o tempo de inscrição, hora delta. Então, o que está acontecendo aqui? Vamos fazer uma pequena recapitulação porque tudo isso é bastante novo. Primeiro de tudo, temos o gerente de geradores de ondas, que é anexado ao gerente de nível aqui. Certo. Aguarde que isso seja compilado a qualquer dia agora. Certo, obrigado. Então, o que temos? Temos uma onda e cada onda tem elementos diferentes ligados a ela. Então, o que decidimos fazer é criar uma classe pública totalmente nova apenas para representá-la. Poderíamos ter, se quisermos, criado uma classe separada apenas para esta, em um script separado, apenas para este, e não ter que seja um comportamento mono, apenas um tronco serializável e sistema meios serializáveis que nos permitem criar isso aqui. E isso nos permite mudar os diferentes elementos aqui sobre como sempre quisermos. Assim, pode nos dar a capacidade de mudar os objetos de valor muito mais fácil. Então criamos as ondas, acompanhamos a próxima onda que pode ser pública se você quiser apenas ter certeza de que vemos tudo de forma adequada, torná-lo público. Criamos o tempo entre as ondas, as ondas caem. Isso é bem simples. Em seguida, criamos um enum para os Estados de desova porque temos diferentes estados de desova. Primeiro de tudo, podemos estar desova, esperando ou podemos estar contando. E então criamos um para acompanhar tudo o que acontece, assim como tínhamos no item da loja. Mais tarde, teremos diferentes fora, caso eu diga, teremos diferentes métodos sendo executados e a atualização com base em se nós, em que estado estamos, teremos elementos diferentes, coisas diferentes. E este é o primeiro exemplo disso. Se estivermos em contagem regressiva, se terminarmos a contagem regressiva e não estivermos em um estado de desova, então começaremos a desova. Se não terminarmos a contagem regressiva, vamos remover da contagem regressiva o tempo, hora delta até ficar abaixo de 0. Em seguida, verificamos nossa resposta. Caso contrário, começaremos a desova no próximo vídeo, onde na verdade estaremos gerando inimigos. Então, espero que você goste. Sei que isso é um pouco complicado, mas é para isso que você se inscreveu. Você veio para a seção avançada C-sharp em bônus um. Então, espero que você goste. Espero que você esteja cometendo suas alterações e eu vejo no próximo vídeo. 97. Descreva vários tipos de Entrados: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, na verdade, começamos a gerar inimigos de forma inteligente. Então, agora, quando executamos o jogo, vamos aumentar isso para que você possa ver corretamente o que está acontecendo. Depois que o candidato terminar, o primeiro inimigo aparece, o segundo inimigo aparece, e eles ficam lá esperando que nós os matemos. Então, uma vez que os matamos, vamos tentar ir com eles. Certo. Na verdade, oh, ok, isso foi embaraçoso. Vamos reiniciar o nível. Espere por isso. Então, tornamos os inimigos tão bons que não podemos matá-los. Ok, então deixe-me tentar. Deixe-me chegar a uma certa distância para que não possamos mais. Então, uma vez que os chamamos, você pode ver que temos a onda completa. E, novamente, temos o inimigo surgindo porque fizemos a quantidade de inimigos e aqui também para esta onda. Então, não vamos perder mais tempo e vamos começar. Oh, caso. Então, vamos em frente e, na verdade, começamos a possuir inimigos. A primeira coisa que vamos fazer é obviamente criar aqui algum tipo de co-rotina ou podemos criar também um contador. Mas vamos ficar com o Coubertin e esse cortejo será chamado toda vez que tivermos esse atraso na geração. Então, essa equipe principal estará gerando os inimigos. De qualquer forma, vamos começar e veremos como tudo está funcionando. Então, vamos criar um enumerador de olhos aqui. E vai ser chamado de onda de desova. E a onda que queremos realmente gerar. Então acene para detectar. Então, já temos a onda que queremos abranger. Ele terá seus próprios inimigos, seu nome e a quantidade de inimigos que tem. Então, vamos criar um loop for. Neste loop for, vamos começar com um número inteiro I igual a 0. Vamos nos certificar que nunca ultrapassamos o peso para gerar, ou é a onda para gerar, a quantidade de inimigos? E também vamos aumentá-lo em um a cada vez. Então, aqui vamos criar um número inimigo aleatório. E vai ser o alcance aleatório. E esse intervalo será superior a 0. E a onda para gerar o comprimento do ponto dos inimigos. Então lá vamos nós e nos lembramos desses inimigos, e aqui está uma variedade de objetos de jogo. Então, queremos gastar um inimigo aleatório lá dentro. Então eu vou aqui onde diremos que algum tipo de método para gerar porque queremos tê-lo fora do, isso aqui mesmo. Esta será apenas a onda de desova. Este será o criador inimigo aqui. E o que faremos, e a forma como esse numerador funcionará à medida que vamos dar retorno novo, aguarde quatro segundos. E vai estar na onda. Responda. Não demora, atraso na geração de pontos. Então, o que está acontecendo aqui? Esta é a primeira vez que acredito que usamos o retorno de rendimento dentro de um loop for em um enumerador ou uma corrotina. Então, passamos por esse loop. Toda vez que escolhemos um número aleatório, geramos algum tipo de inimigo, e então esperamos quatro segundos. E, novamente, geramos um inimigo, geramos um inimigo. Então isso nos permitirá dar retorno e chamar isso várias vezes, essa onda gerada várias vezes. E depois que fizermos isso, também criaremos o método real que gerará o inimigo. Então gere o inimigo. E aqui vamos dizer que enviaremos objeto do jogo e o inimigo para gerar. E aqui vamos dizer log de pontos de depuração apenas para garantir que saibamos qual inimigo está sendo gerado e tudo está funcionando corretamente. Então, gerando o inimigo. E vamos dar a ele o inimigo para gerar. Mas o nome. Lá vamos nós. E estamos simplesmente vindo para instanciar. E então ela comeu o NMI. Muito pequeno. E vai ser, opa, com licença. Então, será toda a posição do ponto de transformação e transformamos a estação de linha. Então, qual é a transformação? qual transformação estamos falando? Então, como o gerador de ondas está ligado ao gerenciador de níveis, esta será a posição e a rotação do objeto de jogo do gerenciador de níveis em nossa cena. E mais tarde, estaremos criando vários pontos nos quais os inimigos serão gerados. Então, funcionará assim. Teremos algum tipo de matriz. Vamos lidar com isso mais tarde que agora está focado em instanciar esses inimigos. Então gere o inimigo, a onda para gerar inimigos na posição do número inimigo aleatório que acabamos de criar. Então, vou adicionar uma entrada aqui. O que estamos fazendo? Precisamos também chamar a corrotina e aqui, então antes de esquecermos, então co-rotina. Spawn, spawn, inimigos, onda. Sim, lá vamos nós. E de que maneira deveríamos estar gerando? Enquanto aqui vamos dizer que é a onda, ondas na posição próxima onda. Então, provavelmente será 0 agora porque a próxima onda, enquanto a próxima onda, começa em 0 aqui. Então, será a primeira onda que é por apenas experimentar por enquanto, que está focada no que isso faz. Portanto, uma co-rotina que começa se nos certivermos de que não estamos gerando a contagem regressiva é menor que 0, não estamos desova, estamos prontos para começar a desova. Então começamos o revestimento aqui, temos o loop que percorre a quantidade de inimigos na onda que recebemos. Como uma corrotina, criamos um número aleatório. Nós geramos um inimigo aleatório que só tem a depuração para nos dizer qual inimigo está sendo gerado provavelmente removerá isso mais tarde. E então instanciamos o inimigo real no gerente. E então o que acontece? Nós rendemos o retorno, esperamos quatro segundos e depois surgimos em outro inimigo. Então, antes que esse loop seja chamado novamente, temos que pesar o atraso de desova que é designado para nós. Então, vou salvar tudo isso. Vou voltar e unir. E vamos ver o que temos aqui como gerente de níveis. Espere que isso compile qualquer coisa. Ok, então vamos ao gerente de nível do gerente e o que temos aqui? Eu estava brincando, talvez eu não tenha feito isso no vídeo. Então, temos essa onda aqui. É a onda do esqueleto. Os inimigos que temos aqui são o inimigo esqueleto e o covarde voando alto. A quantidade de inimigos que queremos é responder a leigos será de dois segundos. Vou salvar isso. Onde está o gerente de níveis e o nosso mundo? Não está no 000. Vamos colocá-lo de volta em 0, então está bem na frente do nosso jogador. E vamos executar o jogo e ver como ele se parece. Então agora 12, devemos ver a contagem regressiva das ondas. Lá vamos nós e whoa, são inimigos demais. Vamos ver o que fizemos de errado aqui. Então, salvamos isso. O que está acontecendo aqui, estamos verificando se a contagem regressiva é menor que 0. Não estamos no estado de desova? Bem, vamos ver. Começamos com a contagem, então não estamos. Então, obviamente, precisamos mudar nossos estados aqui. Então, antes de criarmos o loop ou iniciar o loop, vamos dizer que estamos em um estado que é igual aos Estados de desova, mas desova. E então, quando terminarmos a desova, vamos entrar em um estado, que é a ponderação. Então, estamos esperando que os inimigos sejam gerados. Então, agora começamos antes de passarmos pelo loop, dissemos o estado. Então agora isso não será chamado toda vez e não teremos tantos inimigos. Vamos testar isso novamente. Execute o jogo. Podemos ver a contagem regressiva aqui. Eu o tornei público. Lá vamos nós. Então 0, pegamos o inimigo e ele começa a atirar. Então pegamos outro inimigo, e depois demos outro inimigo, e ele está sendo chamado a cada dois segundos. Então olhe para esses pequenos cowers aqui. Esta é uma mecânica de jogo muito legal, como você pode ver, cada dois segundos, 1212, e lá vamos nós. Então, como você pode ver, os inimigos estão sendo chamados a cada segundo. Mas agora você pode estar se perguntando, por que temos tantos inimigos, mesmo que tenhamos dito que a quantidade de inimigos deve ser apenas também. Bem. É porque aqui, na verdade, não temos a contagem regressiva das ondas reiniciando. Mais uma vez, algo com o qual lidaremos mais tarde. Mas vamos antes de tudo pensar em quando vamos realmente redefinir a onda e quando é que uma onda real? E assim podemos criar um tempo entre a onda. Então, digamos que a primeira onda e a segunda onda, haja um atraso entre elas. Ou podemos ter um mecânico muito legal e dar à nossa camada ou à pessoa que está jogando nosso jogo uma chance de ir em frente e matar todos os inimigos nesta onda antes que a próxima onda apareça. Então é isso que vamos fazer. E para fazer isso, vamos criar algum tipo de método que acompanhará se um inimigo morreu ou não. Então, vamos voltar aqui. E depois do inimigo da geração, vamos criar um privado. Haverá um booleano, e será o inimigo ou vivo. E isso retornará verdade se todos os inimigos estiverem vivos ou não. Ah, sim, se todos os inimigos estiverem vivos e falsos, se um deles ou nenhum deles estiver vivo. Então, aqui o que vou dizer, vou criar uma condição if. E vou ter o objeto final do tipo. E objetos do tipo realmente não encontram objetos, encontram objetos do tipo. E o controlador inimigo, estarei procurando o comprimento do ponto do controlador inimigo. E vai ser igual a 0. E se for, então vamos retornar falso. Tão falso, isso significa que todos os inimigos morreram. E então, se passarmos por este e não retornarmos falso, então retornaremos verdadeiros. Isso significa que os inimigos ainda estão vivos. Então, agora temos uma onda ou de garantir se nossos inimigos foram todos esgotados e poderemos usá-lo aqui como uma condição de alguma forma. Mas há um pequeno problema que está me incomodando. O achar objetos do tipo no controlador inimigo é, na verdade, uma operação muito complicada, digamos que no sistema. É preciso muitos recursos toda vez para passar por todos os objetos no controlador inimigo, o que às vezes não é muito necessário. Então, o que queremos fazer é que queremos ter algum tipo de temporizador nos inimigos estão vivos verificador. Então, na verdade, não verificamos cada quadro se todos os inimigos estão mortos. Mas em vez disso, temos isso sendo verificado a cada dois segundos. Então, vou lançá-lo para você como um desafio, e seu desafio é atrasar a verificação. Então, antes de tudo, você precisará criar uma variável para o tempo entre verificar se há inimigos. No método booleano, certifique-se de que não olhamos todos os inimigos, exceto quando o tempo terminar. Preste atenção em onde devemos redefinir este contador. Então, isso será muito importante. Então, com isso dito, pause o vídeo agora mesmo e vá fazer cada Shannon. Certo, bem-vindo de volta. Então, vou rolar para cima aqui. E vou criar um flutuador particular. O tempo entre a busca do inimigo, entre a busca do inimigo. E digamos que seja um F. Então 1 segundo. A cada 1 segundo, verificamos todos os inimigos da dívida. E então aqui vou dizer que o tempo entre a pesquisa está sendo reduzido pelo tempo. DeltaTime, cada quadro, e isso será chamado de cada quadro. E então aqui, vou verificar antes de verificarmos todos os objetos. Se o tempo entre a pesquisa for menor ou igual a 0, então estaremos pesquisando. Lá vamos nós. E então, quando realmente redefinimos isso? Assim que o tempo entre busca for menor ou igual a 0, começamos verificando se todos os inimigos morreram. E também podemos ir em frente e redefinir esse tempo entre as pesquisas. E vou defini-lo para 1.5 porque não acho que isso seja algo que você pode querer mudar no inspetor, o tempo entre as buscas inimigas, isso pode ser bastante padrão. Mas se você acha que talvez precise mudar essa variável, obviamente esta f não funcionará. Você precisa subir aqui, criar uma variável separada se você fez isso, parabéns, este é o melhor passo ou a melhor maneira de pensar, o melhor design de jogo talvez. Mas para mim, acredito que isso será algo muito constante, algo que não mudará. Acho que nunca teremos que mudar o tempo entre as buscas inimigas. Isso vai terminar? Vamos voltar aqui. E precisamos ter certeza de que nós, Onde está aqui e atualizamos. Vamos verificar se o estado é igual aos estados de desova ponto em espera. Então isso significa que estamos constantemente gerando inimigos e estamos à espera. Então, verificamos depois que obviamente terminamos esse loop for, verificamos que o estado está esperando. Então, se estiver aqui, vamos verificar se os inimigos estão vivos. E observe que adicionamos esse ponto de exclamação, que significa exatamente o oposto. Então, se todos os inimigos tiverem o Lloyd salvará o log de pontos de depuração, wave. Completo. Salve isso. E caso contrário, se não for, então vamos simplesmente retornar. E por que estamos fazendo isso? Por que estamos dizendo retornar? Dissemos que o retorno significa que não fazemos mais nada dentro do método, especialmente em atualização. Por quê? Porque uma vez que a onda esteja completa, não queremos voltar para a onda, agora podemos verificar se não estamos em desova, que não estaremos n porque estamos obviamente e a espera e iniciamos a gravação novamente e comece a criar os inimigos novamente. Assim que a onda estiver completa, queremos impedir que toda a atualização funcione. Então, vou salvar isso. Vou voltar ao meu ganho. E agora devemos ver isso quando executamos o jogo. Então conseguimos, depois de cinco segundos de Contagem Regressiva, obtemos a contagem do inimigo. Depois de dois segundos, outro podemos contar o inimigo. E lá vamos nós. Você pode ver que paramos tudo para que não tenhamos mais inimigos que precisamos. Então, vou tentar matá-los. Então, temos os dois. E como você pode ver, novamente, a onda foi completada e, em seguida, os inimigos começam a surgir novamente. Certo, ótimo. Então, com isso fora do caminho, certifique-se de confirmar suas alterações. Espero que você goste e te vejo no próximo vídeo, onde iremos gerar pontos para várias ondas e completar todas elas, matando todos os inimigos, completando todo o caminho, e talvez ter algum tipo de mensagem muito boa. Então, vejo você. 98. Concluir as ondas: Bem-vindo de volta, Meus desenvolvedores de jogos favoritos. Neste vídeo, na verdade, vamos completar a onda, iniciando novas ondas. Quando terminarmos todos eles, temos a opção de abrir as portas. Não os abra ainda, mas vamos. Infelizmente, porque isso pode ser muito divertido. Não vou demonstrar isso na introdução, mas sinta-se à vontade para assistir ao vídeo. Você verá que ele está realmente funcionando. Nós nos certificamos de que isso aconteça. Sempre nos certificamos de que isso aconteça. Certo. Então, acho que estamos em um bom ponto. Então, como você pode ver, você procurou os inimigos gerando aleatoriamente. O tempo terminou. Deixe-me bem. Então, a espinha na mesma posição que os chamamos, devemos ver no Inspetor que completamos todas as ondas, que significa que abriremos as portas. Então, não vamos perder mais tempo e vamos começar. Oh, tudo bem. Então, o que está acontecendo agora? Primeiro de tudo, esqueci de encenar todos os meus arquivos. Vou chamá-lo de instanciado, vários tipos de inimigos. Este foi o vídeo anterior, mas agora vamos nos concentrar no que está acontecendo no rendimento. Então você se lembra que no último, nós realmente começamos a completar ondas, mas não Branco tanto porque, mesmo que tenhamos terminado uma onda, você pode ter notado que Então, novamente, e isso significa começar desova. Por que isso? Bem, isso porque, obviamente a contagem regressiva das ondas ainda é menor que 0. Vamos voltar à desova. E bem, obviamente, desculpe, não vamos voltar à desova, então estamos sempre começando com a co-rotina novamente. Então, o que precisamos? Precisamos realmente, antes de tudo começar uma nova onda? E em segundo lugar, precisamos redefinir tudo isso e garantir que, no final, paramos todas as ondas. Terminamos todas as ondas. Podemos abrir a porta e assim por diante. Cara. Não só isso, nós também neste vídeo, queremos criar vários pontos dos quais os inimigos serão gerados. Então, temos nossas mãos cheias. Não vamos perder mais tempo. O que deveríamos estar fazendo aqui? Primeiro de tudo, vou rolar para baixo e criar um novo vazio, Start New Wave. E o que aconteceu? E aqui vou dizer que assim que quisermos iniciar uma nova onda, então vamos definir o estado para os estados de desova que contam. Então, aqui estamos contando para a próxima onda e a contagem regressiva das ondas será igual ao tempo entre as ondas. Pessoal, não o inimigo procura o tempo entre as ondas. E então aqui vamos verificar se a próxima onda mais 1 é igual às ondas têm comprimento. Então isso significa que estamos no último caminho, que a próxima onda como a última. Então vamos dizer que o log de pontos de depuração. E aqui diremos que completamos todas as ondas. E acabei de dizer algo em que acredito, isso não é verdade aqui? Primeiro de tudo, precisamos adicionar dois iguais, iguais para comparar quando adicionamos um igual, isso significa que estamos atribuindo dois iguais como quando comparamos. E eu disse aqui que a próxima onda é a última. Não, quando eu disse na próxima semana mais 1 é igual a onda desse comprimento, isso significa que a próxima onda aqui sem o mais um como o último índice. Então, a próxima onda mais 1 é o tamanho de toda a matriz, que é o comprimento do ponto das ondas. Isso significa que estamos atualmente no último, o que significa que o log de pontos de depuração diz que completamos todas as ondas. E vamos apenas adicionar um comentário aqui. Podemos abrir as portas, abrir portas, receber recompensas, etc Ok, e depois que terminarmos, então se não estivermos na última onda, o que vamos fazer? Bem, vamos dizer que a próxima onda, mais, mais, então mais, mais, mais, então aumentamos a próxima semana em uma. Então, agora tudo o que temos que fazer é quando verificarmos os inimigos e atualizarmos e a onda estiver completa, vamos começar uma nova renúncia. Então eu acredito que isso é tudo o que precisamos fazer. Então, vou voltar ao meu jogo aqui e vou dizer a qualquer dia agora, por favor. Então, no gerenciador de níveis, vamos ver, vamos nos certificar de que não temos nenhum problema. Vou mudar isso para o, onde estão os inimigos? Vamos torná-lo menor ou o inimigo é prefabs, inimigo? Ok, então temos o petróleo, vamos nos certificar de que a primeira onda só tem inimigos esqueleto. E vamos criar uma segunda onda aqui, que é a, vamos chamá-la de onda alta porque temos os olhos voadores e teremos os dois. Destes, seja o covarde. Então, saberemos quando estivermos na próxima onda. Então, vou salvar tudo isso. Vou verificar aqui, ok, tempo entre as ondas. Vamos executar o jogo e ver como isso parece. Então, vou executar o jogo e só devemos ver esqueletos. Esqueleto, lá vamos nós. Esqueleto, lá vamos nós. Então, agora, quando os matamos, só devemos ver corvos voadores após os cinco segundos. Lá vamos nós, O Corvo Voador, você pode vê-lo por trás desses dois, e eles me mataram, mas tudo parece estar funcionando perfeitamente bem. Como você pode ver, estamos redefinindo o tempo. Se rolarmos para baixo. Se você não entendeu completamente o que está acontecendo, deixe-me refazer uma vez. Assim que começamos uma nova onda, começamos a contar até chegarmos à próxima onda. Em seguida, a contagem regressiva de ondas é redefinida para o tempo entre as ondas. Então, uma atualização. E aqui vamos remover o tempo.DeltaTime cada quadro, o que significa que estamos iniciando a nova onda. Então verificamos, estamos na última onda? Se estivermos, isso significa que completamos todas as ondas e podemos abrir a porta. Infelizmente, nossos inimigos nos mataram antes que tivéssemos a chance de fazê-lo. Mas antes de testarmos isso e certificar-se de que ele está funcionando nessa condição aqui. Vamos antes de tudo, criar vários pontos dos quais os inimigos podem surgir. Porque, como você pode ver, nós realmente não gostamos de ter todos os inimigos amassados juntos e 1 e tê-los pequenos. Queremos ter algum tipo de diversidade. Então, para isso, o que vou fazer é lançar um desafio para criar pontos de desova para inimigos. Primeiro de tudo, você precisa criar uma matriz para gerar títulos. Portanto, esses pontos de geração, isso deve ser do tipo transformar essa matriz. Então você precisará criar os pontos em unidade e adicioná-los ao inspetor, obviamente no gerenciador de níveis. Finalmente, quando geramos um inimigo, escolha pontos de desova aleatórios e coloque-os lá. Então, vou te dizer para pausar o vídeo porque, por algum motivo meu punk não está apenas funcionando corretamente. Então eu vou te ver em um pouco. Ei, bem-vindo de volta. Então, como você se deu bem com isso? Então, se eu rolar para cima aqui e criar um campo serializado de transformação, que se torna uma matriz dos pontos de geração. Salve isso. E então eu role para baixo até o, vamos ver o que temos aqui. Oh, então onde estão respondendo os inimigos aqui, podemos simplesmente remover a depuração. Ele nem sequer usou uma vez. Então, aqui, o que devemos fazer? Bem, em primeiro lugar, criaremos uma transformação de obviamente uma variável do tipo transformar a transformação no objeto do jogo para este ponto de poder. E espero que este seja o último vídeo que eu tenho que dizer a palavra gerar, gerar, seja lá o que for. Então, entre esses pontos, e aqui vou dizer intervalo aleatório entre 0 e os pontos de geração sobre o comprimento. Então, estamos escolhendo um ponto de desova aleatório. E aqui, em vez de usar a transformação do objeto do jogo, usaremos o ponto de geração que o ponto de geração aleatória que obtivemos. Então eu acredito que é muito fácil se você não entendeu o que está acontecendo aqui. Criamos obviamente os pontos de geração que vamos adicionar uma nova unidade em apenas um pouco. Então, quando instanciamos um inimigo de antemão, usamos para colocá-lo imediatamente no objeto de jogo do gerenciador de níveis. Dissemos que não queremos fazer isso. Então, o que fazemos é usar o ponto de bomba de caixa de transformação. Criamos um aleatório usando a matriz que temos lá em cima, usando um intervalo de pontos aleatório de 0 a este ponto, pontos de comprimento de ponto. E então definimos o inimigo, instanciamos e respondemos à documentação pontual. Nós salvamos isso. Voltamos para Unity. Eu vou criar todo esse ponto de vínculo sob o gerente de nível, já que ele está lidando com todos os pontos de origem de desova. E vou criar um ponto de desova vazio, 1, 2, 3. Então, terei três pontos de desova. Vamos tornar a cena um pouco maior. E aqui, vamos ver, o primeiro estará aqui, o segundo estará aqui, e o terceiro estará aqui. Então salve tudo isso de volta no gerenciador de níveis. Vamos ver o que temos aqui, os pontos de desova. Vamos, opa, vamos trancar isso. Vamos arrastar, desculpe. Vamos arrastar os pontos de geração aqui. Dizemos, bem, que executamos o jogo. E agora devemos ver como estamos olhando, então 321, lá vamos nós. Então, geramos um aqui. Depois de dois segundos, um está lá em cima. Então, vou tentar matar todos eles. E vamos ver a segunda onda. Essa onda desce. Então temos um inimigo que está aqui em cima, um segundo inimigo que está aqui embaixo. E então vou tentar matá-los usando e a vista na cena para que eu possa pegá-los de uma distância muito distante. Então, a corrente, o inimigo morre. E agora temos uma contagem regressiva. Podemos ver aqui que todas as ondas foram concluídas. Se clicarmos duas vezes, onde está? É aqui onde vamos abrir as portas, obviamente. E o próximo vídeo e a criação também de portais que nos levarão a outra dimensão. Na verdade, é apenas outro nível. Mas, de qualquer forma, você entende o ponto. Vamos parar o jogo. Mas pare a unidade. Certifique-se de confirmar nossas alterações. E eu vou chamar isso de, o, agora nós realmente completamos o Waves. Começamos a confirmar essas alterações. E te vejo no próximo. E se você estiver gostando, isso está acima do final do curso. Certifique-se de deixar um comentário para ajudar muito. E eu vou te ver interessado. 99. Como escolher um quarto: Bem-vindo de volta meus colegas desenvolvedores de jogos para um novo vídeo longo. Não vamos perder tempo nenhum. E este vídeo, o que fazemos é quando matamos os inimigos, isso não é muito emocionante. Só vou te dizer, quando matarmos os inimigos, escolhemos dois números aleatórios. É isso. Isso é tudo o que fazemos. No próximo vídeo, você verá o porquê, mas é um conceito bastante complicado que aprendemos um novo tipo de loop. Aprendemos as tabelas de verdade. Então, vale muito, muito a pena. Então isso não é perder mais tempo e vamos começar. Oh, caso. Então agora estamos completando as ondas. É hora de sair da sala e ir para a próxima. Então, como vamos fazer isso? Vamos tirar um breve momento para falar sobre isso. Vamos para os quartos, as portas. E como você pode ver, temos duas portas com dois portais atrás delas. E isso é algo que será o mesmo em todos os níveis. Eu não queria adicionar muita coisa só para manter tudo menos complicado e compreensível. Então, o que temos aqui são os dois portais e as duas portas. Então, o que acontece quando matamos todas as ondas ou todos os inimigos na última onda, acenar, essas portas terão a capacidade de se abrir. Mas, como você viu no jogo Hades, sempre temos duas opções. Então, temos dois portais que podemos passar por 14, digamos o afiado, o outro para outro arena inimiga. E é isso que queremos também fazer. Queremos ter a opção de ir para um desses dois? Então, precisaremos definir esses dois portais antemão e essas duas portas também de antemão. Mais tarde, estaremos criando talvez algum tipo de nome que apareça quando estivermos ao lado da porta. Então, quando o abrimos, sabemos para onde estamos indo. Mas, por enquanto, vamos nos concentrar em realmente mudar o The, enquanto se clicarmos no Portal e desbloquearmos isso, você pode ver que temos o nível 2 vai ou o nível a ser carregado. Então, o que faremos é tentar mudá-los assim que matarmos os inimigos. Então, vamos começar. Vou voltar ao nosso código e a primeira coisa que vou fazer é entrar no nível de saída aqui. E em vez de usar uma string, vamos usar um número inteiro. Então, um número inteiro. Por que estamos trabalhando com números inteiros? Bem, porque aqui estaremos usando vários métodos no gerenciador de cenas que só podem usar um parâmetro inteiro com o qual podemos trabalhar. Então é por isso que estamos mudando isso para pôr em perigo. Mais tarde, você verá por que tudo isso está acontecendo. Vou me certificar de que isso seja comentado e mais tarde voltaremos e mudaremos. Mas, por enquanto, porque o nível de carregamento está tomando um número inteiro ou você sabe o que, vamos mantê-lo. E vamos mantê-lo. E vamos para o gerenciador de níveis. E no próximo nível de carregamento, em vez de uma string, vamos usar um número inteiro. Portanto, o próximo nível é um número inteiro, e a cena de carga pode realmente ter um número inteiro como parâmetro. Então, tudo está funcionando bem por enquanto. A próxima coisa que precisamos fazer é definir as duas portas ou as saídas de dois níveis. E porque já temos tudo configurado e sabemos que sempre haverá duas portas. Para simplificar, vou criar um nível público e de nível para sublinhar um. E então eu vou copiar isso e torná-lo o sublinhado dois. Então, isso é para o segundo nível. E então eu também vou criar uma saída de nível público. E este será o sublinhado de saída de nível um e o sublinhado de saída de nível dois. Então, agora temos a estratégia de saída de dois níveis e vamos seguir em frente e criar um seletor de níveis. Então, vou rolar para baixo, mas não muito, talvez aqui. E vou dizer que tenho um seletor público de nível vazio. E aqui vamos empregar algumas coisas. Então, o que queremos fazer é escolher um nível. Mas isso não é tão simples quanto você pode pensar, porque nós, digamos que estamos atualmente no nível do esqueleto. Este Kelly é. Certo. Digamos que tenhamos a opção de ir, por exemplo, à loja. Um deles será a loja. Vamos tentar escolher um nível aleatório. Então, temos a opção de ir para o topo na primeira porta, mas na segunda porta temos a opção de ir para o crânio é mas já estivemos no Skelly. Então, o que precisamos ter em mente é que toda vez que queremos ter a opção de escolher outro nível, ele tem que ser diferente do nível atual em que estamos. E não só isso, precisamos também ter o nível. Na porta esquerda diferente do nível na porta direita. Então, essencialmente, precisamos de três coisas para acompanhar. O nível em que estamos atualmente. O nível que irá para se passarmos pela primeira porta e o nível passará se passarmos pela segunda porta. Então, como vamos fazer isso? Como vamos implementar isso? Encontrando coisas enquanto ainda estamos no mesmo nível? É aqui que usaremos algo chamado loop while. Então deixe-me dizer o que é um loop while e você verá quão importante é nessa situação aqui. Então, antes de tudo, é semelhante ao for loops at executa um bloco de código várias vezes. Em vez de determinar o número de vezes antes da mão, esperamos até que uma determinada condição seja atendida. Então isso é perfeito para o nosso caso aqui, porque não sabemos quantas vezes temos passar procurando um nível, mas sabemos que continuaremos procurando enquanto o nível que queremos definir a primeira porta é diferente do nível atual. E também continuaremos procurando enquanto o segundo nível na segunda porta é diferente do primeiro, que já é diferente do nível em que estamos atualmente. Então deixe-me apenas levá-lo através da estrutura do loop for. Você pode ver aqui, nós temos o tempo. Abrimos os suportes, colocamos em uma condição. É exatamente o mesmo que a declaração if. E se for verdade, então faremos algo chamado executar e depois voltar à condição, mudança de condição. Se não tiver, voltamos. Portanto, certifique-se de tomar precauções sempre que usar loops while porque eles podem causar muitos problemas. Você pode acabar em um loop sem fim onde a condição não muda e seu Unity falhará. Confie em mim, isso acontece e acontece comigo o tempo todo sempre que estou usando loops while. Portanto, certifique-se de saber o problema. Certifique-se de sempre alterar a condição e sempre sair do loop while. De qualquer forma, com isso dito, vamos voltar para Unity. E aqui, quero dizer Visual Studio. E o que vamos fazer aqui? Vamos dizer que, enquanto o nível para ir para um é igual ao gerenciador de cena, ponto, ficar ativo, visto índice de pontos. Então vamos seguir em frente e criar um número aleatório aleatório que é igual a um intervalo de pontos aleatório de 0 ou, na verdade, de um. O que estamos usando um? Bem, porque sabemos que a cena no índice 0 não é algo para o qual gostaríamos de ir. Deixe-me mostrar o que quero dizer. Se eu voltar para o Arquivo, BuildSettings, o primeiro como tela de título, a nova arma espiga e tudo está disponível, exceto o 0, que, e o, obviamente, o último. Então, aqui, o aleatório começaremos em um. Então, de um para o gerenciador de cenas, a contagem de cenas em Configurações de compilação. E você pode ver aqui, esse é o número de cenas e as configurações de compilação. E vamos reduzi-lo em um, porque obviamente não queremos o último lá dentro. Então, agora que temos um número aleatório de nossas cenas, vou apenas ir em frente e imprimir esse número aleatório. Então imprima e digamos que o espaço para o número aleatório, número aleatório é e a primeira rodada. E então aqui vamos definir o nível para ir um para ser igual a rant. Ok, então o que está acontecendo aqui? Primeiro de tudo, dizemos que, embora o nível a seguir seja igual ao índice de compilação atual, então vamos inserir o loop while, número aleatório escolhido atribuído o número aleatório escolhido atribuído ao nível para ir se ainda for o mesmo, e, em seguida, verifique a condição aqui. Se ainda for o mesmo, então, novamente, criaremos outro número aleatório e o atribuiremos ao nível a seguir. E continuaremos fazendo isso. Enquanto o nível para ir 1 é igual ao gerenciador de cena ou ao índice de compilação da cena que está ativa no momento. Uma vez que não seja, uma vez que essa condição não seja mais atendida, continuaremos a definir as coisas. Antes de continuarmos. Obviamente, precisamos fazer algo que esteja definido o nível para ir um para ser igual ao gerenciador de cena. A cópia justa deste. Então, estamos apenas enviando no início como este só para que possamos entrar no loop e depois continuar. Então, vamos salvar isso. Vamos voltar ao nosso ganho e nós na verdade. Ainda não temos isso. Então, para chamar isso, onde deveríamos chamá-lo? Acredito que isso seja parte do seu desafio. Bem, acho que será parte do seu desafio. Então, infelizmente, não poderemos testá-lo. Mas, ou você sabe o que, vamos testá-lo. Então, se eu for para onde você pensa se quiser, você pode fazer disso um desafio. Mas, infelizmente, eu já mostrei a você. Então, aqui, quando dissemos a depuração, todas as ondas estão completas. Vamos apenas manter isso, remover o comum porque agora podemos realmente ir em frente e acessar o gerenciador de níveis. E acredito que seja uma instância. E acessaremos o seletor de níveis. E agora podemos realmente escolher um nível e também devemos garantir que as ondas estejam completas. E também precisamos ter certeza de que as ondas estão completas. Então, como vamos fazer isso? Isso é algo que deveríamos ter feito antes, mas não se preocupe. Vamos criar uma variável privada aqui e as ondas são concluídas. E vamos defini-lo como falso no início. Então privadas, oh, desculpe, ondas booleanas completas. E onde definimos isso como verdadeiro? Aqui embaixo depois de todas as ondas estarem completas. Então as ondas completas são iguais a verdadeiras. E onde isso afeta tudo? Bem, aqui em cima, se olharmos onde estamos gerando toda vez. Então, vou recuar isso usando a guia. E eu vou dizer se as ondas ainda não estão completas, então, certo? As ondas completas ainda não estão completas. Então, se este ainda é falso, o que não deve ser falso até que nos transformemos em verdade aqui. Então, como isso o mantém assim, acredito que isso funcionará, mas você sabe, vou adicionar as duas linhas rabugas, garantir que tudo esteja configurado corretamente. Então, agora, uma vez que destruímos ou terminamos todas as ondas, o Waves completo está pronto. Não estamos mais em contagem regressiva e escolhemos um nível. Então, vamos tentar ver como isso parece em nosso jogo. Então, corremos. E acredito que devemos remover o justo para torná-lo mais rápido. Então, vou atirar nos inimigos algumas vezes. Aguarde a segunda onda, que são os olhos covardes. Vou atirar nos olhos voadores covardes. E lá vamos nós. E ainda temos um aqui. Então, uma vez que o matamos, temos o número aleatório três. E vamos abrir o console e pausar o jogo. Então, se olharmos no console, temos o número aleatório é três. Então, obviamente, isso funciona pela primeira vez. Vamos ver qual é o índice de compilação 40s, Kelly é, seus dois. Então, três é o nível de chefe. Então, escolhemos outro nível. Excelente. Eu realmente quero que você veja o número aleatório sendo escolhido várias vezes, mas não se preocupe, teremos muitas oportunidades para essas coisas. Vou remover este aqui e a depuração aqui, porque já sabemos que tudo está funcionando perfeitamente bem. Mas, obviamente, ainda há o segundo nível que queremos definir. Então, vou emitir isso para você como um desafio. E seu desafio é definir o nível para ir, para que ele seja planejado. Então, depois de definir o primeiro nível para ir, precisamos definir o segundo. E o segundo deve ser diferente do primeiro nível. E o primeiro nível para ir e o que estamos atualmente. Então, você precisará se certificar de inicializá-lo. E vou te dar uma dica porque queremos ter certeza de que é diferente da primeira e diferente daquela em que estamos atualmente. Você precisará usar o OR para que a condição while pare. E ainda não mostrei o mar, então vou mostrá-lo para você aqui. Se você quiser, talvez, eu não sei, tirar uma captura de tela ou talvez voltar e ver todos os passos do desafio. Agora vou mostrar a da verdade e a tabela da verdade. Então, vamos começar com o fim. Então, o fim é uma tabela de verdade. Como isso funciona? Se tivermos várias condições, como eu disse agora, precisamos ter certeza de que é diferente do nível atual e diferente do primeiro que definimos. Portanto, tem que ser um loop while que verifica o uso de tudo, enquanto o nível dois que vamos definir é igual a amor e quer ir ou nível dois para ir, então precisaremos mudá-lo. Ele precisa ser diferente de ambos. Então deixe-me mostrar como funciona a verdadeira, a tabela da verdade. Se você tem dois verdadeiros, nós obtemos um verdadeiro. Se tivermos um falso e um verdadeiro, obtemos um falso. Se tivermos um falso e um falso, obtemos um falso, temos um verdadeiro e um falso, obtemos um falso. Mas quando se trata do OR, você verá que se tivermos um falso e um verdadeiro, então. A resposta será verdadeira, mas se ambos forem falsos, a resposta será falsa. Então, com essa informação, sei que é um pouco confuso agora, quando realmente temos a solução para o desafio, vou explicar tudo, mesmo que este vídeo esteja ficando muito longo, mas não se preocupe com isso. Pause o vídeo agora mesmo e faça o desafio. Certo, bem-vindo de volta. Como você se deu bem com isso? Então, no gerente de nível, sei que esse é um dos desafios mais difíceis, mas estamos no Desafio Avançado. Então aqui vou dizer que o selvagem e o nível 2, opa, o nível para ir é igual ao nível para ir um. Ou como são essas duas colunas, ou o nível para ir é igual ao índice de pontos do gerenciador de cena. Então, o atual. Então aqui vamos seguir em frente e fazer exatamente a mesma coisa. Copie isso, opa. Cole-o aqui. E o número aleatório 1, opa, desculpe. Agora, número 1 aleatório e número dois aleatório. E o nível para ir é igual a aleatório 2. E na Índia, vamos salvar que o nível para ir é igual à instância de ponto do gerenciador de cena. Ou podemos dizer esse nível para ir para igual ao nível para ir um. Mas você sabe, eu não quero arriscar que apenas mantenha as coisas seguras. Mas, opa, cole-o aqui, salve o que está acontecendo agora. Portanto, há um problema porque não podemos usar o nível de saída para, precisamos definir o nível para salvar isso. Então, o que está acontecendo aqui? Definimos o nível para ir, para ser exatamente como o gerenciador de cena ou o índice na cena atual. E aqui nós verificamos qual é a condição aqui, como dissemos, se voltarmos à nossa tabela de verdade, vamos mantê-la aqui e vamos ver como tudo está olhando. Então, começamos verificando como nível para ir para igual dois, nível para ir um. E, atualmente, o nível para ir ou nível sólido para ir um será diferente do gerenciador de cena atual. Portanto, essa condição é falsa, o que é bom. Isso significa que não entraremos no loop while. Mas, então, verificamos o nível para ir, é igual ao índice de compilação atual? É. Então temos uma condição verdadeira que está bem aqui, e uma condição falsa que está bem aqui. Então, se olharmos na tabela da verdade, temos uma condição verdadeira com uma condição falsa, isso significa que todo o conjunto de condições é verdadeiro. Isso significa que voltamos para o loop while, e é exatamente isso que queremos. Se tivermos 11 desses verdadeiros, queremos voltar e criar outro número aleatório e definir o número aleatório novamente. E continuaremos fazendo isso até que essa condição seja falsa. E essa condição é falsa, porque apenas duas condições falsas tornam um total falso. Então, de volta aqui, se o nível diferente do nível para ir um, e é diferente do atual. Só então, quando ambos são falsos, toda a condição é falsa e continuamos. Então, vamos voltar aqui. Vamos imprimi-los e executar o jogo e deixar você saber o que, vamos remover 11 gerente que removeu um dos caras assustadores. E vamos remover este também e executar o jogo porque queremos demonstrar isso muito rápido. Então, o inimigo aparecerá em um pouco para que tenhamos apenas um esqueleto para esqueletos, na verdade, uma vez que os matamos, devemos ver isso. Lá vamos nós. Então nós os chamamos, vamos ao console, pausamos o vídeo, pausamos o jogo. Quero dizer, e você pode ver que nós os executamos. número 1 é 3, o número aleatório 2 é 4. Ambos são diferentes. Escolhemos níveis, certifique-se de confirmar suas alterações e verei você na próxima. 100. Vai até o próximo nível: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, não fazemos muito, mas entendemos algo ou uma série de métodos e dissecções de cordas que são muito complicadas, mas extremamente necessárias para o nosso caso para continuar. Então, não vamos perder mais tempo e vamos começar. Esse é um dos vídeos mais técnicos, acredito, e toda a série em todo o curso. Então eu preciso de sua concentração total. O k. Então agora temos as ondas sendo concluídas. Temos os níveis ou os níveis potenciais que queremos ser configurados. Agora é hora de levá-lo para o próximo nível e obtê-lo, levá-lo para o próximo nível e realmente começar a exibir os nomes dos níveis para os quais podemos ir aqui nas portas. Então o que vou fazer é ir até a porta, vou clicar com o botão direito do mouse aqui e vou criar uma tela de interface do usuário para esta porta. Então, onde está a tela da interface do usuário? Lá vamos nós, a tela. E se eu abrir isso, esta será a tela de exibição de texto. E se eu entrar nessa tela e você ver o que a porta tem, ok, então, ótimo. E a tela aqui, vou selecionar o espaço mundial. E vou clicar duas vezes para ver a tela inteira. Vamos escalá-lo para 0,001 no x e no y. E vou redefinir a posição para ficar em 0, 0. Agora, quando clicamos duas vezes, é muito pequeno. Então, precisamos fazer este sem um 0 e este sem um 0. E ou talvez adicione um 0, mas faça este um a2. Oh, um cinco. Sim, parece bom. E este 15, talvez devêssemos fazer isso maior. Vamos fazer em um oito e este. E também, sim, então eu acho que é muito bom, muito sólido. Então, aqui, vamos adicionar os textos que queremos exibir. E o que esse TextView exibirá? Ele exibirá o nível para o qual você poderá ir depois de abrir essa porta em particular. Então, vou seguir em frente e aplicar as alterações. E quando eu aplicar as alterações para uma inferior, você notará que a porta para também tem seu próprio Canvas agora e todas as outras portas subseqüentes também devem ter esses campi. Então, vou continuar trabalhando aqui. Vou clicar com o botão direito do mouse e na tela da interface do usuário e vou adicionar um texto Mesh Pro. Então, um texto Mesh Pro, este será o nome do nível. Pressione Enter, e vamos em frente e torná-lo um pouco maior. Vamos colocá-lo aqui ou você sabe o quê? Vamos colocar o nome do nível em e duplicar este e adicioná-lo aqui. E isso simplesmente lerá para abrirmos a porta. E vamos mudar tudo. Bem, tudo o que estamos sempre fazendo, tamanho automático, máximo, nível, cor e, por algum motivo, não consigo vê-lo. Por que não consigo vê-lo? Não deveria ser o nome do nível, esse deve ser o texto aberto. Qual é o problema? Se eu movê-lo para cá, mas não está exibindo e aqui. E se eu abrir a camada de classificação Canvas, defina o player, então lá vamos nós. Então eu defini a camada de classificação para estar na camada e, como eu tenho a frente aqui, vou apenas torná-la uma para tornar tudo um pouco melhor. Certo? Então eu mudo a camada de classificação da tela real aqui você pode ver que eu a vendo para o jogador. E tenho dito desde o início, precisamos definir novas camadas. Eu não fiz isso. Talvez você tenha feito. Isso é melhor. Você está progredindo mais rápido que eu. Então pressione E para abrir a porta. E aqui este será o nível do texto, o nome do nível. E vamos mudar isso também. Venda-o para o tamanho em negrito, máx. E tudo bem, ótimo, então vamos salvar isso. Vamos até a porta e vamos aplicar as mudanças. E lá vamos nós. Então agora você pode ver que este também tem seu próprio nome de nível e pressione a tecla E para abrir a porta. Então, agora o que realmente vamos fazer? Queremos obter o nome do nível, que deve ser uma string e esta placa aqui. Mas como você se lembra. O nível de saída, onde é uma saída? Nós mudamos isso para um número inteiro. Então, como vamos realmente fazer isso aqui e começar? Vou criar o começo. E agora você precisa se concentrar muito, mas não se preocupe, tudo será explicado lenta, mas seguramente. Então, antes de tudo, vou criar uma variável de string que será o caminho da cena. E esse caminho será igual ao utilitário visto. Visto utilitário, mas obviamente não podemos usá-lo. Então, vou adicionar aqui a gerência sênior. E agora devemos ter acesso ao utilitário de cena. E então, a partir do mesmo utilitário, vou ver o caminho que pode ver aqui pelo índice de compilação. Então agora eu posso adicionar isso aqui, e posso dizer o nível para carregar. Salve isso. Então, o que isso nos dará? Vou apenas ir em frente e imprimir isso aqui. Então vou dizer que imprima o caminho da cena. E vamos ver o caminho concatenado. Salve isso. E antes de seguir em frente, há algo que provavelmente deveríamos ter feito e que está realmente usando o nível de saída um e o nível de saída para dois, atribuído o nível para ir. Então, gerenciador de níveis e onde estão as saídas de nível? Ondas? Nós geramos 0, então eles não estão aqui. E vou selecionar os portais. Então, o portal tem este. Então, qual deles tem o primeiro portal? Este e o segundo portal serão o segundo no gerenciador de níveis. Então lá vamos nós, salvamos isso. Então agora temos acesso a ambos os portais. E agora podemos voltar aqui, deslizar para baixo e o gerenciador de níveis. E depois de obtermos o nível de saída, um ponto na saída do nível, podemos atribuí-lo imediatamente, chamar esse público, ou podemos criar um pequeno método aqui, que diremos que é um público vazio. E vamos fazer com que ele defina o nível a ser carregado. E esta será a carga de nível dois. Ou vamos apenas torná-lo nivelado. Então, atalho. E aqui vamos dizer que o nível para baixo nível entrou em loop. Salve isso de volta no gerenciador de níveis que definiu o nível para carregar. E vai ser o nível 1. E então aqui vamos definir o nível de conjunto de pontos x2 para nível baixo para ir para dois. Excelente. Então agora devemos ter esse nível para carregar, exceto aqui. E vou mostrar a vocês o que vamos ser exibidos na tela. Então, quando executamos o jogo, devemos ver aqui no console, vamos pausar isso. E no console veremos a tela de estilo de cenas de ativos do caminho de cena. Então, obviamente, esse é o caminho que estamos recebendo e esse é o nível atual a ser carregado. E qual é o nível atual em que estamos? Ele está sendo definido como 0. Então 0, se olharmos nas configurações aqui, você pode ver que 0 é a tela de título, para que você possa ver como o caminho da cena estava sendo exibido. Portanto, nosso objetivo é remover tudo e apenas manter a tela de título e tê-la sendo exibida bem aqui sob o nome da porta. Então é isso que vamos fazer. Se eu voltar aqui, vamos remover a impressão. E agora esta é a parte assustadora. Vou dizer que o número inteiro é a última barra e é igual ao ponto do caminho da cena último índice de. E use essa barra para frente. Na verdade, está entre uma única cotação. Então, o que acontece aqui? Vamos imprimir novamente e, ou saber o quê. Vamos continuar e você entenderá facilmente o que isso significa. Então, o nome da string e será igual ao mesmo caminho substring última barra e mais 1, 0 mais 1. E vamos tentar imprimir o nome e ver o que obtemos. Então você pode ver a última substring de índice e, em seguida, vamos executar isso novamente para que possamos ver o que está acontecendo. Então, executamos o jogo e podemos ver que temos agora a tela de título. Então, o que está acontecendo aqui? Primeiro de tudo, vamos falar sobre a substring. Deixe-me mostrar o que é isso. Ok, então aqui você pode ver o método e a definição de substring de pontos de string e recupera uma substring dessa instância. E você pode ver que podemos usar um int 32, recupera uma substring, que obviamente será uma string. Então temos uma substring. substring começa em uma posição de caractere específica e continua até o final dessa string. Então é isso que está acontecendo aqui. Estamos recebendo o último índice em que temos essa barra direta. E então estamos usando uma substring disso. Portanto, lembre-se de como isso seria exibido anteriormente. Vou imprimir o caminho da cena aqui novamente para que você possa ver claramente como tudo isso está funcionando. Bem, estou tomando meu tempo para explicar tudo porque isso é um pouco confuso. Então, no console, vamos nós, Ativos, cenas e o último índice onde temos essa barra e, em seguida, uma tela de título. Temos o último índice, que é o número inteiro aqui. E então o nome é uma substring que começa na última barra mais uma. Então, começamos imediatamente após a visita aqui após a última barra. Agora, o passo final é remover também o ponto. Então, vou fazer isso. E aqui vou dizer que int dot é igual ao nome ponto último índice de. E então eu vou usar o pontinho. E, finalmente, vou imprimir. E provavelmente você deve fazer isso agora que sabe como tudo é feito. Substring de pontos de nome. E onde está entre 0 e o ponto. E essa também é outra forma da substring. Você pode vê-lo aqui, uma substring e 32 e 32. Portanto, quando fornecemos dois parâmetros, ele recupera uma substring dessa instância começa em uma posição de caractere especificada e tem um comprimento especificado. Vou voltar aqui. Vou salvar tudo isso e vou executar o jogo. E agora eles executam o jogo. E você verá no console que temos, primeiro lugar, tínhamos todo o caminho, depois o reduzimos. E, finalmente, temos acesso à tela de título. Então, como você pode ver, isso é muito poderoso e eu admito um pouco complicado, mas esta é a única maneira de realmente fazer isso pela única maneira que eu sei talvez haja outra maneira, mas para agora, é hora de um desafio. E seu desafio é definir o texto em um novo script para que o texto apareça e desapareça se o player estiver em uma determinada área ao lado da porta, obter um novo script e anexá-lo ao objeto da interface do usuário. Então, obviamente, você precisará criar um novo script adicionado aos elementos da interface do usuário ou tela da interface do usuário, ou talvez até mesmo a porta, se quiser imediatamente adicionado à porta, use o empreendedor entrar e sair semelhante aos itens da loja, use a tecla E para abrir as portas e garantir que não possamos ver a tela quando começamos o jogo. Para que essas informações, pause o vídeo agora mesmo e vá fazer o VJ sozinho. Certo, bem-vindo de volta. Então, esse vídeo está ficando muito longo. Já estamos a cerca de 15 minutos, e não quero fazer deste um vídeo enorme, então vou cortá-lo agora. Espero que você tenha feito o desafio. No próximo vídeo, continuaremos com tudo. Espero que você goste. Vejo você no próximo. Não faça, pela primeira vez, não confirme suas alterações porque faremos muitas coisas e a próxima. Então, vejo você. 101. Próximo de caminho adequado: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Veja o que acabamos de criar. Nós executamos o jogo. Veremos um dos inimigos aqui. E quando o matarmos, passaremos pelas portas. E você pode ver que temos o nível de chefe e temos a sala de saúde. Então, se eu abrir a porta, caminhei até o círculo aqui. Lá vamos nós. Vou para a sala de saúde. Posso pegar uma saúde e posso matar um inimigo quando ele morrer. Tenho algo diferente aqui. Precisaremos obviamente mudar tudo em todos os níveis. Mas, como você pode ver, agora, tudo funciona. Então, não vamos perder mais tempo e vamos começar. Certo. Então você pensou que eu te deixei, mas eu não o fiz. Espero que você tenha feito o desafio de criar a aparência real fora do nome. Então, vamos seguir em frente e fazer exatamente isso. Primeiro de tudo, vou entrar na porta e aqui, e vou ir em frente e adicionar outro colisor de caixa, que será o colisor de caixa 2D, que vai ser um gatilho e vou fazer um pouco um pouco maior. Então, vou torná-lo grande. Então está ao redor da porta. E vou seguir em frente e aplicar as alterações, aplicar as alterações. Agora devemos ver um colisor de caixa aqui, que também é um gatilho. Ambos são gatilhos. E agora vou até a porta ou realmente entrar nos roteiros aqui. Faça isso um pouco maior porque mal conseguimos ver nada. E onde devemos adicionar algum? Vamos seguir em frente e criar uma nova pasta para a porta. E, em seguida, abra-o e crie um novo script que vou chamar o nome de medo. Pressione Enter para que isso seja compilado. Hoje. Agora vamos clicar duas vezes aqui, abrir o script e começar a digitar algumas coisas. Então, a primeira coisa que vamos fazer é criar um campo serializado, que será o Mesh Pro de texto, então usando o TMP Pro. Então, aqui vamos salvar o texto. Malha. Bro GUDDAT GUI é o nome de nível UI. E então vamos criar um campo serializado do objeto do jogo, que é o nome de nível Canvas. E então criaremos um campo serializado que manterá o objeto do jogo, que é a porta a ser aberta. Então, vamos acompanhar a porta para abrir. E por que mantemos o controle das portas abertas mesmo que eu vou adicioná-las imediatamente à porta, posso dizer transformar ponto SAT ACT ou SAT não ativo. Isso é o que precisamos para porta. Mas talvez pudéssemos adicioná-lo em um lugar diferente, então eu queria mantê-lo aqui. Então, o que estamos fazendo? Vamos tornar este, o último público e você saberá por que e apenas levá-lo a zona de porta aberta. Portanto, isso garantirá que só possamos abrir quando estivermos na zona. Então, quando começarmos o jogo, vou dizer que o nome de nível Canvas dots está ativo como falso porque eu nunca quero vê-lo visível. Vou criar um método aqui que seja um vazio público. Defina o nome do nível, que levará uma variável de string, que chamaremos o nome do nível. E aqui vamos dizer que o nome do nível ponto txt, nome do arquivo, UI. Lá vamos nós. O texto é igual ao nome do nível que fomos enviados. Em seguida, uma atualização. O que vamos fazer? Vamos dizer que se o ponto de entrada baixar a tecla com um ponto de código de chave E. E nós estamos, e a zona de porta aberta, Zen. Zen, vamos Sue. Certo. Uma porta aberta, a porta para abrir, ponto-ponto-ponto, ativa para falsa. Salve isso. Agora, a próxima coisa que fazemos é no Trigger Enter to D e o gatilho armado sair para a saída de açúcar para D. E eu vou verificar se o parâmetro é realmente para a colisão. Então, se a tag de comparação de colisão, mesmo que provavelmente diremos que isso só pode interagir com o jogador. Mas eu só quero tomar minhas precauções por precaução, por precaução. Então aqui estão na verdade a porta. A porta tem alguma camada nela? Acho que não. Não há camada, então vamos ter em mente o jogador. Então, somente o jogador pode interagir com isso. E o que vamos fazer é obter o nome de nível do ponto Canvas ativo como verdadeiro. E uma zona de porta aberta é igual a tentar. E quando sairmos, copiarei isso, colarei em um novo conjunto, ativo, falso, e não estamos mais invejando zona de porta aberta. Então eu acredito que isso é tudo. Eu fiz isso um pouco rápido, então talvez eu tenha cometido um erro em algum lugar. Talvez devêssemos. Oh, há mais uma coisa que eu quero fazer. Se por algum motivo, digamos que o jogador abra a porta e então ele volta e queira abrir a segunda porta. Quero fechar esta porta de novo. Então, sempre que ele sair da zona, vou dizer que a porta para abrir, porta para abrir pensamentos, triste, ativa é verdadeira. Então, salve isso. Então talvez, ou talvez o jogador realmente entre pela porta e então ele não pode voltar quando estiver fora da área. Então isso significará que você precisa tomar uma decisão antes de passar. Então, com tudo isso fora do caminho, acredito que seja bem simples. Não há nada que possa ser complicado. Vou para o nível de saída. E em vez de ter tudo isso e começar, vou seguir em frente e clicar com o botão direito do mouse em ação rápida e refatoração. E vou extrair o método. E vou dizer que este é o nome impresso. Aplicar. E eu vou remover do início, não precisamos mais disso. E também aqui vou dizer que há um número inteiro que está sendo enviado com o índice de nível. Por que estou fazendo isso? Porque você vai ver em um pouco. Portanto, o nível a ser carregado seria igual ao nível e aos textos enviados. Então, agora o que podemos fazer é voltar e o gerenciador de níveis aqui em vez do nível de domingo para carregar, que está no nível de saída, podemos imprimir imediatamente nome da sala e eu posso remover esse método. Então imprima Exit, exit, este público sabe que é privado. Então, vou fazer público dizer isso aqui. E o nome da sala de impressão. Alugue um nome de quarto, salve isso. Como você pode ver, isso é um pouco melhor, um pouco mais rápido de lidar com as coisas. Vamos salvar tudo isso. Podemos realmente remover a impressão e, em vez disso, precisaremos ir em frente e enviá-la para o nome que aparece aqui. E vamos primeiro ver onde vamos adicionar o nome para aparecer. Vamos salvar isso. E vamos ver, vamos adicioná-lo às portas. Vamos adicioná-lo a dois ou um. E vamos aplicar as alterações. Então agora, debaixo de um, veremos tudo o que o bloqueou e adicionaremos alguns elementos aqui. Então, o nível, o nome, peso, este é o texto exibido, esta é a tela inteira. Então temos o nome do nível como o texto Mesh Pro e a porta para abrir, que é o atual. E na zona aberta, por que eu fiz isso público? Ainda não sei. Vamos para o nome aparecer e, assim, remover a classe, torná-la privada. Nem me lembro por que decidi tornar público. Talvez só para garantir que tudo funcione. Talvez, de qualquer forma, e se eu aplicar as mudanças, podemos ver isso na porta. Se eu rolar para baixo e tivermos todas essas opções e ela estiver realmente anexada à porta 1 e a exibição de texto também estiver anexada à porta, o que é muito ruim. E tudo estará nisso. Então, precisamos fazer tudo à mão aqui. Então, na tela, no nome do nível e vai para oh, não, não, não, não, não, não. Isso é porque temos esse bloqueio para baixo. Se eu clicar na porta real, veremos que fiquei tão confuso com isso porque sei que quando você aplica as mudanças na porta, você pode ver que apenas a porta está presa, mas a porta 2, você pode ver que o texto está bem aqui e o nome do nível é aquele que está bem aqui, que é o que queremos. Então este é o incrível trabalho dos prefabs. E fiquei muito confuso por um segundo lá porque eu tinha essa fechadura e cliquei na porta. Foi o mesmo. De qualquer forma, não se preocupe com isso. Agora que isso está fora do caminho, vamos salvar isso. E agora precisamos enviar de alguma forma, ou é o nível de saída que precisamos enviar esta substring de nome para o nome aparecer. Então vou dizer que aqui temos o campo serializado do objeto do jogo. A porta. E aqui temos o nome que aparece, qual nós onde o temos? Ok, então nome do subnível. Lá vamos nós. Então, vou remover essas duas partes. E então diga que a porta 0 que o componente Get, que é o nome, aparece o nome do nível definido. Vamos fechar isso e agora teremos tudo funcionando. Ok, então aqui no portal um, eu atribuí a porta um. Então, por algum motivo, temos as coisas um pouco estranhas. Talvez possamos mover o portal aqui, e o portal aqui, eu posso apenas dizer, mas assim o portal um terá a porta como porta. Então a porta 1 e a porta 1 e o portal normal terão a porta normal. Nós salvamos tudo isso. E agora há mais uma coisa que precisamos levar em consideração. E isso é algo que eu pensei todo o caminho ao criar isso. E isso é, na verdade, abrimos a porta imediatamente. Não sei se você notou isso. Por que isso? Bem, porque se entrarmos no onde está? Um dos componentes aqui, que é a sala, o gerente da sala que você pode ver aqui. Se clicarmos duas vezes no gerente da sala, você verá que na atualização temos se a contagem de inimigos for igual a 0, então definiremos todas as portas para agir. E o problema aqui é que os inimigos estão sempre faltando 0, então a porta é aberta imediatamente. Então, o que vou fazer aqui é apenas verificar para abrir os inimigos do Goldman. Isso é não, não isso. Eu só vou remover isso e podemos realmente adicionar essa mecânica e ao jogo. E talvez no spawner de ondas quando instanciamos os inimigos. Então, quando geramos os inimigos, podemos torná-los filhos da sala. Onde estão os inimigos aqui. Podemos torná-los filhos desses inimigos. Então podemos acabar com o gerente da sala. Em vez de apenas pegar os inimigos, verificar as sobreposições, coliders, desculpe, aqui e comece. Podemos fazer com uma atualização a cada dois segundos. Então certifique-se de que não abrimos a porta ou não verificamos isso até seguirmos em frente e matamos todos os inimigos. Tudo isso é possível. Mas por uma questão de simplicidade, por uma questão de passar por isso, vou apenas entrar no gerente da sala e apenas comentar isso, salvar isso de volta em nosso jogo, executar o jogo. E devemos ver agora que as portas estão todas fechadas. O nome do nível aqui e o nome do nível ou TI, isso é algo que queremos corrigir. Não queremos ser capazes de ver qual é o nível ou que ele seja exibido. Você pode ver aqui que está sendo destruído. Vou atirar no inimigo e veremos quando ele for morto. Então, quando ele morrer, agora quando eu chegar, você pode ver que agora temos o chefe de nível e temos a loja. Posso abrir isso se eu sair. Você pode ver que ele não fecha por algum motivo. Se eu for aqui, vou abrir isso, depois vou embora. Ele não fecha. Isso é algo que vamos consertar, mas de qualquer forma, esse era o nível de chefe. Vamos ver se vamos para o nível de chefe. Lá vamos nós. Como você pode ver, nós claramente vamos ao chefe. Amor. Quão legal é isso? Então agora que o chefe é que eu vou, lá vamos nós. Então o chefe morre. Vamos esperar que isso se abra. E, obviamente, precisamos mudar algumas coisas aqui. Então, antes de tudo, o nome do nível, frio no ano e o nível de saída no nome aparecem no início Canvas, estamos definindo toda a tela como false. Mas quando entramos, estamos definindo a tela como verdadeira e estaremos consertando tudo isso talvez no próximo vídeo. Mas a mecânica funciona, os níveis funcionam, e eu te vejo no próximo. Certifique-se de confirmar todas as suas alterações. 102. Padrão de singleton: Bem-vindo de volta, meus colegas desenvolvedores de jogos. Neste vídeo, quando executarmos o jogo, você verá que temos muitos erros. Nós não consertamos todos eles, mas consertamos a maioria deles. Então eu vou pegar a espingarda, pegar algumas moedas, ser atingido pelos picos, passar pela porta, passar por este portal. E lá vai você. Você pode ver que eu estou do outro lado era minha espingarda, era minha pistola com minha saúde, mas não é visível porque não ajustamos essas coisas. Mas se formos fazer o jogador rolar para baixo, você notará que tínhamos 500. Nós o cortamos pelos picos e são 490, mesmo que não tenhamos feito nada. Então, não vamos perder mais tempo e vamos começar. As coisas que aprendemos neste vídeo são muito importantes, um pouco complicadas, mas muito importantes. Então, vamos ficar pisados. O k. Então, atualmente, podemos ir de nível para nível. Temos opções em que escolhemos um dos níveis aleatórios que temos. Obviamente, há algumas coisas que precisaremos ajustar com a aparência da porta e o desaparecimento e assim por diante. Sinto que ainda há um pouco de ajustes, mas há um problema ainda maior. E isso é quando pegamos as moedas, a arma, e somos atingidos por essas motos ou algo assim. Deixe-me mostrar a você. Quando pegamos a espingarda, pegamos algum dinheiro, atingidos pelos picos. Lá vamos nós. Assim, podemos ver que nossa vida é de 9500, vamos para um nível numérico. Talvez isso seja, e você pode ver agora, enquanto o jogador, se eu olhar para o jogador D1, ele está desapegado. Ele não está lá. Então você pode ver que a vida dele está de volta aos 50. Se eu tentasse escolher a espingarda, não posso. E lá vai você. Você pode ver que as moedas são 0 e isso é algo que vamos querer mudar para garantir que nosso jogador realmente mantenha tudo com ele enquanto ele passa pelo nível. Então, vamos em frente e faça isso. Então, vou abrir meus scripts aqui e vou para o controlador do player, rolar para cima. E o que queremos é, obviamente, queremos manter nossas armas de nível para nível e a saúde do jogador. Então, para manter isso, precisamos ter certeza de que não destruímos o jogador. Podemos salvá-lo em algum outro objeto ou em algum lugar do projeto. Mas, obviamente, existe, o problema era carregar uma nova cena que redefine tudo. Então, o que vou fazer aqui vou criar um controlador de player estático público. E será a instância. E, no caso, vou criar um privado ou saber o que, vamos apenas escrever acordado. E aqui vou dizer que a instância é igual a isso. E então aqui eu não vou destruir em carga. E será isso. Então, se eu salvar isso e passar o mouse sobre não destruir a carga, você pode ver isso para não destruir o objeto alvo ao carregar uma nova cena. E isso é exatamente o que queremos. Então, o que acontecerá agora? O objeto ou o jogador e nosso caso, vamos manter tudo o que ele tinha com ele de cena em cena. Não será destruído, não será reinstanciado. Mas há o problema de que o início não será chamado de Gap. Portanto, não vamos configurar a câmera principal. Manteremos o animador do jogador, mas a câmera principal mudará. E você verá que isso produzirá muitos erros que resolveremos à medida que seguirmos em frente. Mas, por enquanto, entenda o não destrua a carga e o que ela faz. Agora, vou voltar aqui. E se você olhar para o, onde está, a sala, o portal, eu mudei o portal um, que é este, para ir para o nível quatro. Para que possamos ir para o covarde. E deixe-me ir às cenas porque eu estava tentando algo e desliguei o jogador de cúpula aqui. Então lá vamos nós. Isso o excita. Vamos salvar isso. Vamos voltar a esperar que isso seja carregado a qualquer dia agora, salve-o de volta para onde estamos servindo. O crânio é onde temos a de Kelly. Sim, éramos um esqueleto. Então, salve isso. E você notará na hierarquia agora, e unidade, a nova atualização, desculpe, é terrível. Então, na hierarquia, você notará que nós temos o não destruí-lo e ele tem o jogo da desgraça ou abaixo dele. Então eu vou pegar a espingarda, tornar-me os Bitcoins serem atingidos pelos picos, abrir a porta, passar para o nível 4. E lá vamos nós. E você pode ver que agora estou aqui, mas o problema é você pode ver um jogador para baixo e eu coloco em camadas aqui. Então, agora temos dois jogadores. Um deles tem uma espingarda, o outro não. E você pode ver que temos uma tonelada de erros e os contras. Então, vou abrir o console. Vou pausar o jogo. E antes de tudo, temos o jogador da condenação. E aqui esta é uma depuração que eu estava mostrando. Deixe-me excluir isso. Você verá o que quero dizer em apenas um pouco. Vou excluir isso. Em seguida. Nós teremos a, esta seta aqui, o que está tudo bem, então esses são os problemas. Consertaremos isso no vídeo posterior. Então, finalmente, temos o objeto do tipo de câmera foi destruído. Você ainda está tentando acessá-lo. Então, vou clicar duas vezes aqui e é a câmera principal, e é exatamente o que eu te falei. Então agora que sabemos que nosso jogador está em transição, e podemos ver aqui na cena, se eu clicar no jogador do condenado, que é o não destruir, temos que fazer jogador , então teremos que fazer o jogador, então teremos que conserte isso. Mas um deles ainda tem a espingarda. Então, tecnicamente, ele poderá se mover com essa espingarda. E eu olho para o tomb player, role para baixo até sua saúde e você pode ver que o, sua saúde atual também tem transição. Infelizmente, ainda há o problema dos bitcoins, mas vamos corrigir isso passo a passo. Vamos primeiro começar com o gerenciamento dos padrões de camada dupla. Portanto, isso é algo que precisaremos abordar. E como vamos ajustar isso? Bem, há um truque muito bacana que podemos usar, que é chamado de padrão singleton. Deixe-me mostrar-lhe usando código o que é isso e então explicaremos. Então, antes de tudo, aqui em acordado, em vez de definir imediatamente a instância, vou dizer que, se não tivermos uma instância, então a instância é amines é se já tivermos uma instância, portanto, é diferente do nulo, e a instância é diferente disso. Então o que vou fazer é destruir esse objeto do jogo. Então, o que estou fazendo exatamente aqui? Vou verificar assim que aguardarmos. A instância é diferente de nula. Então isso significa que se a instância não for nula, vou destruir o objeto do jogo. Mas há outra coisa se a instância for diferente disso. Então, o que estou fazendo aqui, quando estou iniciando o jogo, estou verificando se já temos uma instância ou se a instância é igual a esse objeto de jogo, vou destruir esse objeto do jogo. E isso garantirá que nós, em primeiro lugar, não criamos uma segunda instância desse objeto de jogo. E em segundo lugar, não duplicamos o objeto que já está aqui. Então, se formos a uma nova cena e descobrirmos que temos em um objeto de jogo, ele será destruído imediatamente. Mas caso contrário, no caso de não termos uma instância, então estamos iniciando o jogo de novo, ou quando iniciamos uma nova cena e não há nenhuma instância que seja igual a isso, então eu vou dizer que essa instância é igual a isso. Isso apenas criará uma nova instância. E isso garantirá que não temos duas instâncias ou que já haja uma disponível. Então, vou salvar isso e vou demonstrar como isso funcionará e se apertará porque teremos muitos erros. E eu estava testando isso para garantir que eu possa gerenciar tudo corretamente. Então eu pego as moedas, sou atingido por 90, abro a porta, e vou bater no portal, afastar dele. E lá vamos nós. Então você pode ver agora, eu não tenho um jogador de equipe. O segundo jogador foi destruído. Isso porque ele verificou e está acordado. Existe uma instância? A instância é diferente da nula? Sim, foi. E a instância é igual a isso? Sim, foi. Então, vamos ir em frente e destruir. Então, de volta aqui você verá que temos apenas 12 empregadores que tem uma espingarda. Ele pode atirar. Ele não pode apontar e não pode mudar sua arma, mas ele tem a espingarda. Ele está animando, tudo está funcionando e você notará que ele está na mesma posição em que estava na cena anterior. E isso é porque ele vai realmente manter isso com ele enquanto ele se move. Então você notará que quando entrei no portal, eu me afastei porque não queria ficar naquele portal. Então, com essa informação, afinal, vamos ver quais erros temos aqui. Então vou fazer uma pausa porque há muita coisa. Então, antes de tudo, você verá o problema com a câmera, que vamos corrigir em um pouco. Você verá que temos um problema com os inimigos covardes. Eles estão tentando encontrar o objeto que é o jogador, mas simplesmente não conseguem. Não só isso, está nos dizendo que a transformação do objeto foi destruída, mas você ainda está tentando acessá-la. O que eles querem dizer com isso? Bem, assim que eles vieram a este mundo, eles viram o pequeno jogador da condenação que estava aqui inicialmente. E então, quando a cena começou, ele foi destruído e eles ainda estavam tentando acessar. E se clicarmos duas vezes aqui, você notará que está bem aqui na perseguição do jogador. Então, todo o problema é com o jogador Chase. Obviamente, estaremos consertando isso também, a câmera será corrigida. E, finalmente, esse problema também está aqui e o objeto do jogo do jogador ativo e hierarquia. Então, tudo isso será corrigido e só um pouco. Então, vou despausar isso e vamos lidar com os problemas um de cada vez. Então pare com isso, abra isso, o jogo comece. Então abra os scripts. E o que faremos? Primeiro de tudo, primeiro acho que vamos lidar com o problema da câmera principal. Então, se formos ao controlador do jogador, onde usamos a câmera principal. Vamos clicar duas vezes na Câmera Principal e rolar para baixo, ver onde a usamos. Nós o usamos. Lá vamos nós, apontando a arma. Então, aqui estou simplesmente momento para verificar se a câmera principal é igual a nula. Isso significa que não temos uma câmera. Vou dizer que a câmera principal é igual ao ponto principal da câmera. E isso só acontecerá quando verificarmos que a câmera é nula. Isso significa que não temos uma referência. Se for, definiremos a câmera principal. Mais uma vez. Caso contrário, continuaremos regularmente, regularmente com o apontando uma arma no máximo. Então, de volta ao nosso jogo será executado. O jogo vai ocupar este, abrindo. Mais alguma coisa? Vamos passar por isso. E do outro lado, veremos na cena. Lá vamos nós. Você pode ver que eu sou capaz de apontar isso, mas obviamente há, a câmera no mundo do jogo não está focando no jogador. E isso é algo que obviamente precisaremos flexionar. Então, vamos começar a consertar. Vou entrar nos meus roteiros. E aqui, enquanto estivermos, vamos chamar isso, Onde devemos chamar isso? Vamos ver, onde colocamos a câmera de forma? Podemos saber? Não sabemos o quê? Vamos apenas entrar nos scripts e colocá-lo dentro dos gerentes. Gerentes, gerentes, gerentes. Não há gerentes. Certo. Então gerentes, por algum motivo, nossas câmeras. Lá vamos nós. Então, e as câmeras, vou criar um controle de câmera ou um controlador de campo de câmera. Pressione Enter, aguarde que ele seja compilado. Clique duas vezes aqui e vou fazer algumas coisas. Então, o quê? Estou sempre fazendo algumas coisas. Então, quais são as coisas que vamos fazer? Primeiro de tudo, o que queremos fazer aqui é sempre encontrar o alvo do jogador automaticamente. Então, anteriormente, o que costumávamos fazer é se entrássemos na câmera bem aqui e para o acampamento virtual, dissemos o jogador seguinte. E o problema é quando vamos para um novo mundo, deixe-me mostrar-lhe em detalhes, deveria ter mostrado antes. Então, se eu, por exemplo, aqui tenho o jogador, clico nele, ele está na hierarquia. Abri a porta, ligo para outro nível. Você notará agora mesmo se eu abrir as câmeras novamente, que são exatamente a mesma câmera virtual, você pode ver que o seguinte está faltando, então não há jogador. Por quê? Porque já definimos o jogador antes, mas agora ele foi destruído. Ele está desaparecido, então precisamos encontrá-los de novo. Então aqui eu vou abrir isso e vou criar uma variável que é o jogador a perseguir, que obviamente vai ser, vamos ver, a transformação ou nenhum atlas apenas fazer dele a camada de controlador de camada para olhar. E ele vai ser igual para encontrar um objeto do tipo. O jogador, oh, não, não, não, não aqui. Custos para baixo e começam. Vamos dizer que a camada a ser observada é igual a encontrar objetos do tipo, e será o controlador do jogador. Agora temos uma referência ao controlador do player que também cria uma câmera virtual. Então, então máquina de cinema, câmera virtual também herdar precisamos dobrar e C usando cin, uma máquina. Lá vamos nós, salve isso. Então máquina de cinema, câmera virtual de máquina de cinema, obrigado. Vai ser o verbo. Câmera virtual. E vamos colocá-lo aqui assim que começarmos. Então, será igual obter componente. E onde estamos engenheiros? Onde vamos anexar o controlador da câmera? Podemos querer anexá-lo na palestra. Vamos anexar às câmeras virtuais que possamos acessar imediatamente a mesma câmera virtual de máquina aqui. Então, obtenha o componente. E vai ser a câmera virtual da máquina de cinema. Lá vamos nós. E o que vamos fazer aqui? Bem, vamos definir a câmera virtual para cima para cima para ser igual à camada para olhar para a transformação de pontos. Então, isso será no início, mas uma atualização, precisaremos criar um loop while. Então, já cobrimos enquanto loops. E vai estar verificando se o jogador olhar enquanto ele é igual a nulo. Isso significa que ainda não encontramos um jogador. Vamos continuar procurando o jogador para olhar. Continue encontrando o controlador do jogador até finalmente encontrá-lo. Uma vez que os encontrarmos, se tivermos uma câmera virtual. Portanto, este é apenas um passo extra para evitar erros. A câmera virtual não segue. Será igual ao jogador. Vamos salvar isso. E vamos olhar novamente o que fizemos. Então, primeiro de tudo, criamos o controlador do player, que será, que é uma variável que vamos olhar para os jogadores para olhar, que é uma variável do controlador do player, uma câmera virtual. Estes são todos privados. Podemos nomear o privado. Só não tive tempo. Quer saber, vamos nos certificar que não temos confusões aqui. Tão privado, privado porque não precisaremos deles no inspetor. Podemos definir M se quisermos. Não precisamos. Em seguida, comece. Vamos encontrar o controlador do jogador. Isso é apenas por precaução. Começamos e temos o jogador na cena, depois encontramos a câmera, depois configuramos a câmera de seguimento para ser o jogador a olhar. Tenha apenas um jogador em qualquer cena, porque já nos certificamos disso aqui. E o padrão Singleton. Lá vamos nós. Isso é chamado de padrão singleton, tendo em mente, sempre que você contar a alguém, eles pensarão que você é muito inteligente. Confie em mim, mesmo sendo singleton significa um único objeto. Então, no caso de eles perguntarem o que é um padrão singleton? De qualquer forma, o ponto da câmera virtual segue, seguimos o único jogador que encontramos e em seguida, uma atualização caso isso seja para, digamos que o jogador que não destruído geralmente carrega antes de todos os outros objetos. Então, no caso de começarmos o jogo, não encontramos o jogador imediatamente que ele está desaparecido. Não podemos resolvê-lo da seguinte forma. Siga, em seguida, uma atualização que continuaremos em loop até descobrirmos que o jogador verificaria se temos uma câmera virtual. Este é apenas um passo extra. Eu não acho que vamos precisar disso mesmo, nem mesmo uma vez porque estaremos anexando o script à câmera virtual, mas apenas no caso de não haver uma câmera virtual, verificaremos a condição e depois nós irá definir o ponto da câmera virtual seguir, salve-o de volta aqui. Vamos em frente. E então as câmeras, vamos ver, agitar e agitar o controlador da câmera através da câmera virtual. E por algum motivo posso ver que isso não é um pré-fabricado. É isso no pré-fabricado isso. Então, quando a Universidade Prefabs, enquanto as armas você é um pobre para nivelar objetos aqui. Não. Certo. Então eu posso ver que não prefiro as câmeras por algum motivo que pensei ter feito. Mas, de qualquer forma, isso é apenas prefere os acampamentos e aqui. E você pode ver que a câmera virtual terá o controlador do acampamento. Então, salve isso. Deixe-me ir para o outro nível. Não vou fazer isso em todos os níveis. Eu só vou fazer isso com aqueles que estamos testando, consertei tudo e provavelmente será o mesmo. Então, câmeras e aqui eu vou excluí-lo. E vou voltar aos prefabs e me certificar de adicionar as câmeras aqui na hierarquia. Salve tudo isso. Abra isso, ok, parece, tudo parece ser bom. De volta às cenas. De volta ao crânio é salvar isso, executar o jogo. Vá para a porta, abra-a, vá para o próximo nível. E devemos ver, lá vamos nós. Então, novamente encontramos o jogador e agora as câmeras estão funcionando perfeitamente bem. Ótimo. Então, agora com isso fora do caminho, se olharmos para trás no console, ainda temos o problema de o jogador ser perseguido, não ser divertido. E como vejo que esse vídeo já está acontecendo o suficiente, vou postular aqui e depois continuaremos no próximo vídeo. Então, espero que você tenha gostado. Este é um assunto um pouco chato, eu sei, mas pelo menos você aprendeu o que é um padrão singleton. Você entendeu por que a câmera não estava indo. Estou tentando explicar o máximo possível, mesmo que seja muito chato. Mas eu quero que você entenda como tudo está se sentindo. No começo, eu também estava confuso, mas ao passar por tudo, entendi as coisas e queria passá-las para você. Então, com isso fora do caminho, obrigado por assistir e eu te vejo no próximo. 103. Tweaking finais: Bem-vindo de volta Meus desenvolvedores de jogos favoritos para o último vídeo e este vamos corrigir todos esses pequenos detalhes relacionados à exibição da interface do usuário, relacionados ao Bitcoin vindo de nível para nível e todos as outras coisas divertidas. Então, não vamos perder mais tempo e vamos começar. Oh, ok, então agora precisamos resolver o problema de nossos inimigos não encontrarem o jogador. Também queremos ter certeza de que temos o gerenciador de jogos como um padrão singleton porque obviamente queremos manter nossos bitcoins indo de nível para nível. Então, para isso, vou lançar um desafio, e seu desafio é encontrar o jogador e encontrá-lo. Então, antes de tudo, certifique-se de que os inimigos continuem procurando o jogador até encontrá-los. Portanto, isso precisará ser um loop while dentro da atualização e do controlador inimigo. É um pequeno ele. Queremos manter nossos Bitcoins de cena em cena. Então, faça do gerenciador de jogos um padrão único como fizemos com a camada. Certifique-se de fazer o mesmo pelo gerenciador de jogos. Ele aparece na hierarquia e o residente destrói? Então lembre-se quando fizemos a camada do aplicativo Aidan destruir, ela apareceu na hierarquia sob uma determinada guia, que é feita onDestroy. O gerenciador de jogos também aparecerá? Então teste porque precisamos ter certeza de que o gerenciador de jogos não é filho dos gerentes. Então, a única maneira de garantir que ele não seja destruído é garantir que ele não seja um filho de objetos do jogo gerentes tão bem que a informação. Pause o vídeo agora mesmo e faça isso sozinho. Oh, ok, bem-vindo de volta. Então, primeiro vamos entrar no controlador inimigo. Vamos rolar para cima para atualizar e atualizar aqui. Vou verificar se, enquanto o jogador a perseguir é igual a nulo, vamos seguir em frente e fazer com que o jogador persiga ou defina dipolar para perseguir para encontrar objetos do tipo. Objeto cinco, desculpe. E vai ser o controlador do jogador. E vai ser v dot transform porque declarado para perseguir, como lembramos, é um transporte. Então, acessamos a transformação depois de refinado o objeto que tem o controle do jogador nele. Então isso deve funcionar, mas enquanto estivermos aqui, vamos para onde está o gerenciador de jogos? Role para cima a instância. E aqui vou encontrar o controlador do jogador. E ele joga agora, ok, então controlador do jogador, está bem aqui. Vou copiar exatamente o mesmo código e colá-lo aqui e remover essa instância. Salve isso. Então agora temos um padrão singleton. Verificamos se há uma instância, nós a destruímos. Se a instância for diferente de nula, destruímos e definimos uma nova instância. Nós salvamos tudo isso. Vamos voltar ao nosso jogo e vamos ver o que precisamos fazer aqui. Então, a primeira coisa que precisamos fazer é abrir o gerenciador de jogos aqui, e precisamos remover o gerenciador de jogos daqui. Não, não me permitirá que vejamos no pré-fabricado se eu já tiver os gerentes de ganho. Então Gerente, o gerenciador de jogos. Então, vou abrir os gerentes e vou remover o gerenciador de jogos. Então, isso removerá o gerenciador de jogos de todas as outras cenas. E vou me certificar de que só tenho o gerenciador de jogos aqui. Então, nenhum outro gerente, um, desculpe por isso. Precisamos do gerenciador de jogos apenas na cena. Então agora temos o gerenciador de jogos, temos 0, mas moedas. Vamos salvar tudo isso. Faça isso um pouco maior. Vamos executá-lo novamente. E vamos ver o que acontece. Então pegamos a arma, tornamos um pouco moedas, somos atingidos uma vez. Vamos para o próximo nível. Vamos ver, vamos para o próximo nível. E lá vamos nós, Estamos no novo nível e podemos ver que, por algum motivo, temos os inimigos seguindo? Não, eles não estão seguindo. Há algo errado. E como você pode ver, obviamente os bitcoins e a saúde não foram atualizados. E isso porque se olharmos para o jogador, se olharmos para o não destruir o gerenciador de jogos, os Bitcoins também não foram. Então, se olharmos para o jogador, você notará que a saúde dele é 490, mas não está sendo enviada aqui. Por quê? Como só atualizamos, deixe-me ver e o gerente de saúde do jogador, só atualizamos a saúde do jogador quando somos atingidos e não quando realmente começamos. Então, precisaremos corrigir isso também. Mas antes de fazermos isso, há algo que não está certo com o MS. Então, vou pausar o jogo aqui e vamos ver qual é o problema. Então você pode ver que cada um de nossos inimigos não está sendo capaz de nos encontrar. Então, vou clicar duas vezes. E o problema é com o jogador Chase aqui. Então, vamos ver o que vamos fazer sobre isso. Oh, ok, então passei por algumas coisas e finalmente encontrei a solução. Então o problema aqui foi, e é muito simples, só precisamos mover isso enquanto loop aqui sobre tudo isso. E podemos querer extrair isso em algum tipo de método. Então, vou chamar esse método encontrar o jogador ou certificar-me de que temos o jogador. Então, por que o movemos para cá? Bem, porque se tentarmos chamar o movimento em direção, salve isso. Então, o que é todo o problema em todo o problema e a coisa toda que está causando isso é quando vamos para um novo nível antes da camada, que é a que não é destruída, chega ao próximo nível. Os inimigos já têm um alvo, que era o jogador anterior. Então, uma vez que o destruímos, não conseguimos mais encontrá-lo. Então, se tentarmos isso, digamos que os queríamos para o novo nível, temos todos os jogadores perseguição definida aqui no início e depois o destruímos. E então tentamos perseguir o jogador ou avançar em direção ao jogador, e é daí que o erro estava vindo. Então, aqui estamos tentando perseguir o jogador. E uma vez que haja um erro aqui, nada sob isso funciona. A atualização pára, tudo pára. É por isso que precisamos ter o jogador achador. A primeira coisa que fazemos uma atualização antes de continuarmos, enquanto talvez precisemos da declaração if aqui, acredito, mas vamos mantê-la também, caso demore um pouco de cinco. Então, com isso fora do caminho, se agora executarmos o jogo, devemos ver isso quando vamos para o próximo nível. Lá vamos nós, não temos erros. Abrimos isso e lá vamos nós. Os inimigos covardes estão fugindo e estão atirando. Então, o que isso fora do caminho, próxima coisa que precisamos fazer é obviamente que precisamos atualizar a interface do usuário do player. Então, vou entrar no UI Manager. Paramos o jogo. Sim, nós fizemos. De volta ao UI Manager. Aqui vou criar um método que será a interface do usuário da camada de atualização anulada pública. E vamos fazer algumas coisas aqui. Então, a primeira coisa que vamos fazer é criar um manipulador de saúde do jogador. saúde da camada profunda é colorida, e será igual a nula. E você verá o porquê daqui a pouco, porque vamos criar um loop while que verificará a saúde do jogador. E, embora seja nulo, continuaremos procurando que a saúde do jogador seja igual para encontrar objetos do tipo. E será o manipulador de saúde da camada. E assim que encontrarmos isso, podemos sair do loop while. E então aqui vamos seguir em frente e, em primeiro lugar obter o valor máximo do ponto de controle deslizante de saúde. E será igual ao ponto de saúde do jogador obter o valor máximo. Então, obviamente, precisamos criar algum tipo de maneira de acessar o máximo no manipulador de saúde do jogador. O que temos qualquer ano, Ok, então eles são campo serializado. Vamos seguir em frente e criar um público e obter a vida máxima da camada. E vamos devolver o V-max. Não tenho. Já temos um desses. Não, nós não temos. Vamos seguir em frente e criar a boa camada, saúde atual também, desde que estejamos aqui. Então, a saúde atual e o que mais precisamos daqui? Talvez precisemos do , não, acho que é tudo o que precisamos. Então, agora podemos obter o máximo de saúde. E então precisaremos definir o valor do ponto do controle deslizante de saúde para ser igual ao ponto de saúde da camada obter a saúde atual. Salve isso. O que mais precisamos fazer? Também precisamos encontrar uma maneira de atualizar nosso texto. Então eu vou dizer o, como se chamava? O texto Health, foi chamado de etapa da tecnologia de saúde? Lá vamos nós, e é público também. Ótimo. Então role aqui para baixo. Assim, o texto de ponto flexionado de saúde e saúde será igual ao ponto de saúde do jogador ficar atualizado. A saúde atual. E é mais a barra. E foi o máximo de saúde. Então o ponto de saúde do jogador GetMax self. Lá vamos nós. Então, tudo está pronto, mas vou fazer algo aqui. E isso mesmo, um log de pontos de depuração. E eu só quero acompanhar os mesmos atos Saúde. E deixe-me pegar este. E isso fará sentido em apenas um pouco. Então chateado este aqui. E você verá o porquê daqui a pouco. Então, vou salvar tudo isso. Vou voltar para a Unity. Vou executar o jogo. Vou escolher o apartamento se torna os Bitcoins. Seja atingido. Por favor, pegue. Certo, então lá vamos nós. Percorra o mundo, passe pelo portal, vá para o próximo nível, e você pode ver que está 100 aqui, mesmo que se eu pressionar a camada, seja para 90. Então, qual você acha que é o problema? Só vou te dar alguns segundos para pensar sobre isso. O problema era e eu vou te dizer qual é o problema. Primeiro de tudo, precisamos atualizar a saúde do jogador. Então atualize a integridade da camada ou a interface do usuário do player. Agora vamos em frente e testá-lo. Talvez você tenha visto no depurador. Acabei de notar que nem os chamamos de métodos. Então lá vai você. A depuração funciona, vou conseguir. Vá pela larva, vá pelo portal. E qual é a saúde? Portanto, a vida máxima é 50 e a saúde atual é 0. Qual você acha que é o problema? Bem, o problema é como dissemos no vídeo anterior, já tínhamos um jogador na cena e esse jogador foi destruído. Então, uma vez que quisermos definir essa barra da casa e o imposto, eles estão sendo definidos com base no jogador antigo. Então, para definir o novo jogador, o que você acha que devemos fazer? Embora existam muitas soluções para esse problema, mas descobri que a melhor é ter apenas uma maneira simples de converter isso de uma voz pública para uma arte pública e numerador. E então vamos dar retorno. Novo. Aguarde quatro segundos. E vamos esperar 0,1 e será o momento enquanto, não se esqueça, temos uma imagem desmaiada que desligamos apenas por acelerar o processo de teste. Então, agora o que acontecerá é que esperaremos 0,1 segundos e durante esse tempo o jogador mais velho será destruído, o novo jogador será encontrado e iremos imediatamente receber nossa atualização. Então, aqui, em vez de reprodutor de atualizações, vou iniciar uma co-rotina, que será a integridade da camada de atualização que você. Eu salvo isso de volta em nosso jogo. Nós executamos o jogo. Nós conseguimos. Saímos, passamos por este, e lá vamos nós. Podemos ver que nossa saúde foi atualizada e é muito perfeita. Então lá vamos nós, podemos ver que tudo está funcionando perfeitamente bem. E antes de tudo, também temos os Bitcoins, então precisamos consertar isso também aqui. E o que também queremos fazer é ter certeza de que geramos na posição correta. Então, atualmente, responda ao lado do portal, que não é útil. Nosso objetivo é chegar a esse portal e não apenas aparecer lá. Então eu vou, antes de tudo aqui, vamos ver o que precisamos fazer. Então, precisamos fazer, temos o texto Bitcoin, os efeitos BTC. Lá vamos nós. Então, texto BTC, o texto é igual a encontrar ou não, temos o gerenciador de jogos, o on instance. Obter, mas contínuo. Vamos, acredito que este devolve os bitcoins todos sabem disso como Bitcoin. Então, se eu for ao gerenciador de jogos para ter, obtenha Bitcoin atual, para que eu possa obter Bitcoin atual, salve isso. E isso deve estar funcionando, exceto porque não é porque você não pode converter implicitamente o tipo e duas strings. Então, as duas cordas, isso converte qualquer corda de reprodução, salve isso. Vamos testar isso um pouco do jogo. E agora pegamos uma moeda e vamos para o próximo nível. Ok, então agora devemos ver que temos aqui dez, lá vamos nós. Leva tempo, mas não será perceptível, especialmente quando tivermos a imagem do destino, mas agora precisamos gerar o jogador em um determinado momento. Então, vou entrar no gerente de nível e vou fazer isso no gerente de nível. E vou rolar para baixo aqui. E vou criar um novo método. Então, aqui, vamos criar um novo método que é um vazio público e sua camada spot e player de ponto e entrada no ponto, vamos obter a instância de ponto do controlador do jogador, ponto não instanciar, ponto dançar, tocar um controlador de bala. Ok, então instância do controlador de camada. E vamos usar a posição de transformação de pontos e ela será igual a algum tipo de ponto de geração, a posição. E agora vou copiar isso e criar um campo serializado aqui. Da transformação e será o ponto de desova. Role para baixo e veja como isso parece. Sim, lá vamos nós. Então, o que acontece aqui é que colocamos o jogador no ponto desde o início. Por onde ele começa? Aqui vamos colocar o ponto da camada. Nós salvamos tudo isso. E o que acontece aqui é assim que o gerente de nível começa, lembre-se de que não é um destruidor de toneladas, não é um único combate na posição de ponto da instância de ponto do controlador do jogador é colocada imediatamente no ponto local. Então, de volta aqui, já temos esses pontos de palma. Somos pontos de desova 1. Então, vou criar um novo aqui e ele vai ser camada na geração. E onde está e a cena. Vamos ver, e vai ser aqui. Poupe isso se formos para outro nível, podemos realmente ir em frente e substituir isso. Então, no gerente, substitua e você pode escolher o que deseja substituir? Tenha em mente que não queremos substituir os pontos de geração porque para cada nível haverá um ponto de geração diferente. Então, vou aplicar substituir o gerenciador de níveis do gerenciador pré-fabricado, talvez também aplique o gerente de preferência de substituição. Lá vamos nós. E aqui o jogador gera pontos. Vamos em frente e também aplicar o pré-fabricado ao todo preferir. Certo, ótimo. Portanto, certifique-se de não se inscrever. Tudo, salve tudo isso. E agora vou executar o jogo. Vou entrar em um novo nível. E nós deveríamos. Não, não o fizemos. Isso porque nós, oh, ok. Certo. Certo. Então o problema está aqui e 11 gerente, qual é o problema aqui? Se rolarmos até eles, geramos o ponto e o gerenciador de níveis. Qual parece ser o problema? Além disso, lá vamos nós, está aqui. Precisamos configurá-lo. E agora precisamos ir para os gerentes de nível e aplicar as alterações ao. Então, agora, quando corremos, devemos ver se vamos para o próximo nível. Não, ainda não está funcionando. Então, qual é o problema? A variável não foi atribuída. Então eu acho que há algo que não está rapidamente definido aqui. Portanto, aplique ao gerenciador de níveis pré-fabricados. E qual mais é o problema? Então eu acho que no outro nível, o ponto de desova não está sendo definido corretamente. Então, estou tentando aplicar as alterações. Talvez desta vez funcione. Não, ainda não acontece porque se formos para o gerente de nível do gerente, ponto de geração do jogador no gerente de nível, ele nem está definido. Então, o que você acha de um problema aqui é, eu acho que cometemos algum tipo de erro porque tudo aqui foi redefinido. Então você pode ver aqui que estes não estão sendo definidos. Então, vou aplicar tudo por enquanto. Esta não é a melhor ideia, mas não vamos nos preocupar com isso por enquanto. Vou para o próximo nível e me certificar de que finalmente surgirmos no ponto certo. Mas agora também teremos desova. E aqui, como você pode ver, mas não queremos isso porque cada nível terá seus próprios inimigos, terá seus próprios níveis, desculpe, ondas e assim por diante e assim por diante. Mas, como você pode ver, tudo funciona. O único problema ainda em nosso jogo é o fato de que quando vamos até a porta, isso aparece pela primeira vez e quando o abrimos, quando vamos embora, não vai. Quero dizer, as palavras não aparecem novamente e a porta não fecha novamente. Por quê? Porque na sala que você criou e isso foi um erro por mim. Desligamos a porta. Então, desligamos a porta, mas a exibição de texto está sempre na porta. Então vou deixar isso como um desafio final para você. Faça fora do reino das pontuações. Tudo o que você precisa fazer é remover esse texto exibido da porta e colocá-lo no portal aqui, e depois movê-lo aqui. Então o Canvas precisará ser derrubado na porta, ele terá que estar no portal e você precisará ligar e desligar a porta com base no texto, haverá algumas alterações no código. Mas acho que neste momento, você se tornou um desenvolvedor de jogos tão bom em um nível tão alto, com todos os vídeos longos e longos que eu te ensinei. Espero que você tenha gostado deste vídeo. Espero que você tenha gostado desse curso inteiro. Espero que você tenha aprendido muito. Espero que você aproveite a jornada e o processo. E espero que você não tenha ficado muito zangado quando cometi erros. Espero que você esteja gostando da transparência que estou lhe mostrando. E se você ainda não, é claro, me deixou um comentário, certifique-se de se juntar à discórdia e eu te vejo talvez não no próximo vídeo porque este, este é o último. Talvez algum dia no futuro, vamos manter contato. Não se preocupe com isso. Muito obrigado por assistir. Adeus.