Fala, pessoal! Meu nome é Henrique Morato e bem-vindo a mais uma parte do curso de criação de um jogo de apocalipse zumbi com Unity. Vamos começar trabalhando em partes mais soltas, mas que vão melhorar o fluxo do jogo, como por exemplo a interface, que mostra quantos zumbis nosso jogador já matou, porque aí ele pode ver como está se saindo no jogo, e também fazer com que nossos zumbis deixem kits médicos quando morrem, para podermos recuperar vida.
Também vamos mexer com a morte do zumbi. Eles vão ter animações, caindo para baixo do cenário, o que torna o jogo mais bonito. Depois, vamos mexer no balanceamento, tentando aumentar a dificuldade gradativamente, baseado no tempo. Então, vamos trabalhar em um chefão para o jogo, o que faz o jogo ter um fluxo melhor, porque nosso jogador vai ter que trabalhar melhor no cenário.
Mas nosso chefe não é só um zumbi maior com um machado que dá dano. Iremos utilizar a parte de navmesh, que é uma mecha para navegação que faz com que o chefe seja mais esperto que os outros zumbis, porque ele consegue encontrar o melhor caminho entre ele e nosso jogador utilizando essa parte onde ele pode navegar.
Espero que vocês gostem do curso. Lembrem que se tiverem qualquer dúvida, postem no fórum, e mais uma vez, bem-vindos.
Vamos continuar a trabalhar no jogo do nosso curso. Primeiro, vamos ver o que fizemos até agora. Nossos zumbis ficam vagando até chegarmos perto, e eles vêm nos perseguir. O jogo como está hoje depende muito da habilidade do jogador. Se ele for melhor ou pior vai variar muito. Fica monótono. Talvez fosse legal incluir elementos aleatórios para melhorar o fluxo. O jogador pior pode usar esses elementos para fazer com que ele tenha um fluxo mais legal, e o jogador melhor pode utilizar para melhorar ainda mais.
Um desses elementos é que nosso jogo tem só uma chance. E se ele pudesse ganhar vida, com um elemento aleatório? Para fazer isso, temos que ter algo palpável. Tem um prefab bem interessante para isso que é o kit de primeiros socorros. Vou jogar para o nosso cenário e arrastar para perto do jogador. Não deixe longe do personagem quando produzir porque o jogador vai ter que sair andando para pegar. E sempre que você for testar algo, a melhor forma é que seja perto, a não ser que seja necessário estar longe.
No game, o kit é um pouco pequeno. Poderíamos aumentar. Agora, para fazer ele recuperar vida vamos usar script. Já vimos algumas formas de fazer isso com a bala. Seria exatamente o que vamos fazer aqui. Se eu encosto no objeto, eu destruo ele. Para o jogador, parece que ele pegou, mas nós sabemos que na verdade ele pegou e destruiu o objeto. Vamos precisar de uma colisão, para saber se estou tocando no objeto.
Se eu não marcar o trigger, quando o jogador for pegar o kit médico, vai parecer que é uma parede. Com o trigger, não tenho colisão física, mas ela é computada. É o que eu quero. Vou criar um novo script, marcar que vai ser do tipo C Sharp, e colocar o nome. Já crio adicionado ao objeto. Não gosto muito dessa forma porque o script fica fora da pasta, e o projeto acaba ficando bagunçado. Eu acho mais fácil sempre criar e arrastar para o objeto, para ficar organizado.
Já vimos que podemos usar o void com trigger, assim, quando o jogador tocar no kit médico, vai rodar o OnTriggerEnter, porque nosso objeto é um trigger. Se não for, você tem que usar o OnColisionEnter.
Se só o jogador vai poder ser curado pelo kit, vou perguntar se o objeto tem a tag jogador. Se tiver, vou destruir o kit médico. Mas ainda precisamos fazer com que o kit cure o personagem.
Mantendo o fluxo do que fizemos nos cursos passados, quando fomos no controlsJogador, criamos uma interface de Imatavel no nosso método de tomar dano. Podemos criar outra interface seguindo o fluxo de organização, que vai ser o Icurável, para curar vida. Vou definir uma assinatura, que vai ser do tipo void, e vou passar a variável de quanto de vida vamos curar. Lembrando que tem que ser public, porque vamos chamar o método em outros locais.
Esse método vai pegar a mesma coisa que o tomar dano e fazer exatamente o inverso. Vou pegar o statusJogador.Vida e somar com a quantidadeDeCura. Agora, no kit médico podemos dizer que o objetoDeColisao vale o jogador. Vou pegar esse objeto de colisão, um componente dele, que é o ControlaJogador, e vou chamar o método curarVida, passando um valor que podemos definir numa variável. Esse último é melhor definir como privado, porque não queremos que cada kit médico cure um valor. Se fizermos isso vai ser aleatoriamente.
Quando meu kit médico colide com o nosso jogador ele cura 15 de vida, e depois é destruído. Só que ainda temos que atualizar na interface.
Vamos continuar a trabalhar no nosso kit médico. Já notamos que quando estamos jogando, nossa barra de vida não é atualizada. Também queria que vocês notassem que nossa vida pode ultrapassar o valor máximo quando pegamos o kit médico. O valor máximo deveria ser nossa vida inicial. São algumas coisas que temos que consertar.
No controlaJogador, na parte de vida tenho que fazer nossa interface atualizar. Para isso, é basicamente fazer o que faço no script de tomar dano e começa a funcionar. Agora tenho que manter a vida no valor máximo dela.
Para isso, posso dar um se minha vida passar da vida inicial, tenho que dizer para manter a vida em um valor igual à inicial. Ou seja, suponhamos que estou com 90 de vida e pego o kit médico. Vou ficar com 105 de vida. Mas a vida é maior que a inicial, então tenho que manter em 100 e depois atualizar a interface. A ordem é bem importante.
Pelo fluxo do jogo, talvez não fizesse diferença se isso fosse rodado no update, mas como só acontece quando pego o kit médico faz diferença.
Também precisamos fazer o kit médico sair de algum lugar, como por exemplo dos zumbis. Vou aplicar o prefab no zumbi. Quando nosso zumbi morre, pode ter uma chance do kit médico ser criado. Para isso, podemos criar um novo método, que é VerificarGeracaoKitMedico. Como parâmetro, vou colocar uma porcentagem. Vamos supor que nosso zumbi tem 20% de chance de gerar o kit médico. Ele vai calcular.
Primeiro, precisamos saber quantos por cento de chance vou ter de gerar o kit médico, e a segunda é do próprio kit médico no script. Eu vou colocar 10% porque acho um valor legal que vai funcionar. Se você quiser, pode colocar mais. Coloco um f na frente do 0.1 para ele saber que é um float, senão ele acha que é outro tipo. E vou criar um GameObject que vai ser o kit médico.
Agora, a primeira coisa que devemos fazer é ver se tenho ou não que gerar o kit médico. Vamos pegar e gerar um número de 0 a 100%. Por exemplo, 25%. Só que 25% não está dentro dos 10% que nós tínhamos combinado. Só vou gerar kit médico se estiver de 10% para baixo.
Vou usar o random.value, que faz exatamente isso que eu quero. Se o número for menor ou igual minha porcentagemGeracao, devo gerar kit médico. Vou gerar no pé do zumbi, no pivô. Mas você poderia escolher onde. E a rotação vai ser zerada. Quando o zumbi morrer, vou verificar se tenho que gerar kit médico, passando a porcentagemGerarKitMedico.
Utilizando essa forma com o parâmetro que eu criei e a porcentagem com a variável, posso facilmente aumentar a porcentagem que eu quero.
Falta a gente preencher o kit médico na variável. Um truque legal é apertar o cadeado. Assim o lado direito fica travado e posso navegar sem problemas. Depois destravo e seleciono o que eu quero novamente.
Só que quando nosso jogador mata o zumbi e gera kit médico, ele pode deixar vários e pegar quando precisar. Isso não é legal, deixar o jogador acumular. Para evitar isso, vamos dizer que o kit médico vai ter um tempo de destruição. Ele vai ficar, por exemplo, 5 segundos vivo e depois vai se destruir. O Destroy tem uma forma legal que é para destruir o objeto ou passar um float com quem quero destruir e depois de quanto tempo.
Finalizamos essa parte de criar o kit médico e gerar um elemento aleatório no nosso jogo.
O curso Unity parte 3: criando um chefão e refinando o jogo possui 146 minutos de vídeos, em um total de 41 atividades. Gostou? Conheça nossos outros cursos de Jogos em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Acesso completo
durante 1 ano
Estude 24h/dia
onde e quando quiser
Novos cursos
todas as semanas