Desenvolvimento de jogos para dispositivos móveis Unity | Mario Korov | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


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

Desenvolvimento de jogos para dispositivos móveis Unity

teacher avatar Mario Korov, Game Developer | Teacher | Mathematician

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.

      Introdução

      1:59

    • 2.

      Crie um projeto e escolha configurações

      2:12

    • 3.

      Simulador de dispositivo

      1:15

    • 4.

      Importação de sprite e editor de sprite

      3:23

    • 5.

      Fundo de rolagem

      7:31

    • 6.

      Nova configuração de sistema de entrada

      1:43

    • 7.

      Fundamentos de toque aprimorados

      4:43

    • 8.

      Mova o jogador com toque

      7:07

    • 9.

      Restrições de movimento do jogador

      4:48

    • 10.

      Limites da câmera

      5:34

    • 11.

      Atualização dos controles de toque [Não pule]

      4:47

    • 12.

      Contagem de toques

      1:44

    • 13.

      Joystick virtual

      6:36

    • 14.

      Conceito de inimigo

      5:38

    • 15.

      Pré-fabricada de meteoro

      7:17

    • 16.

      Matriz de colisão

      2:57

    • 17.

      Spawner de meteoro

      7:30

    • 18.

      Rotação de objeto

      1:24

    • 19.

      Tiro no jogador

      8:47

    • 20.

      PlayerStats e sistema de danos

      3:15

    • 21.

      Fundamentos da interface do usuário

      4:19

    • 22.

      Barra de saúde

      7:09

    • 23.

      Ajudante de área segura

      2:58

    • 24.

      Animação de explosão

      5:36

    • 25.

      Animação e transição de danos

      6:18

    • 26.

      Tiro no inimigo

      12:49

    • 27.

      Inimigo verde

      1:45

    • 28.

      Spawner inimigo

      3:40

    • 29.

      Condição de vitória

      4:05

    • 30.

      Controlador de painel de UI- Text Mesh Pro

      5:13

    • 31.

      Gerenciador de jogos

      8:39

    • 32.

      Padrão Singleton

      3:02

    • 33.

      Níveis de mudança/cenas

      8:41

    • 34.

      Desvanece-se entre as cenas

      9:05

    • 35.

      Tela de carregamento

      5:55

    • 36.

      Efeito de melhoramento/correção de desvanecimento

      2:32

    • 37.

      Criação de fonte

      2:17

    • 38.

      Sistema de pontuação

      6:09

    • 39.

      Sintaxe de Playerprefs

      2:32

    • 40.

      Salvar e carregar pontuação/alta pontuação

      7:37

    • 41.

      Preparação de cena

      3:49

    • 42.

      Tela inicial (menu)

      4:21

    • 43.

      Configuração de interface de usuário

      5:54

    • 44.

      Seleção e desbloqueio de nível

      7:55

    • 45.

      Como criar níveis facilmente

      2:22

    • 46.

      Construção de telefone Android para teste

      3:26

    • 47.

      Construção de telefone iOS para teste

      6:14

    • 48.

      Spawner de objetos scriptable

      6:15

    • 49.

      Saúde no poder

      4:39

    • 50.

      Protetor de energia

      9:22

    • 51.

      Shield UI

      5:42

    • 52.

      Poder de tiro

      8:34

    • 53.

      Atualização de Power Ups

      0:38

    • 54.

      Conceito e preparações de chefe

      2:25

    • 55.

      Estados chefes e controlador

      4:23

    • 56.

      Entre no estado

      6:02

    • 57.

      Estados de teste

      2:21

    • 58.

      Chefe de fogo

      7:47

    • 59.

      Ataque especial

      12:33

    • 60.

      Estatísticas de chefe e morte

      8:22

    • 61.

      Spawn Boss

      4:32

    • 62.

      Som de fundo

      2:26

    • 63.

      Efeito de som de tiro

      5:07

    • 64.

      Configuração de anúncios

      9:00

    • 65.

      UPDATE: Unity Cloud

      1:15

    • 66.

      Anúncios de banner

      6:53

    • 67.

      Anúncios ignoráveis

      10:03

    • 68.

      Anúncios recompensados [1]

      3:41

    • 69.

      Anúncios recompensados [2]

      16:32

    • 70.

      Notificações no Android

      9:38

    • 71.

      Notificações no iOS

      7:03

    • 72.

      Profiler

      5:14

    • 73.

      Agrupamento de objetos

      12:32

    • 74.

      Build para Android para publicação

      5:18

    • 75.

      Política de Privacidade

      2:41

    • 76.

      Formulários do Google Play

      8:07

    • 77.

      Teste e publicação interna do Google Play

      3:46

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

114

Estudantes

--

Projeto

Sobre este curso

Este curso foi feito com a versão Unity 2022. As aulas são editadas, concisas e fáceis de seguir. Não há perda de tempo. Para seguir o rumo, você vai precisar de algum conhecimento básico de C# (variáveis, funções, instruções "if" etc.) e precisa estar familiarizado com o editor Unity.

O jogo para celular Space Shooter foi projetado para guiá-lo passo a passo nos desafios que podem ocorrer no desenvolvimento de jogos para celular. Você vai aprender a tornar seu jogo compatível com todas as resoluções de tela e dispositivos (ajustes automáticos da câmera, dimensionamento e posicionamento de elementos de interface de usuário e muito mais).

Alguns destaques deste realce

  • Novo sistema de entrada

  • Monetização

  • Notificações

  • Otimização

  • Compatibilidade e testes de dispositivos

  • Luta contra chefe

  • Processo de publicação

No final deste curso, você terá conhecimento geral de como desenvolver e publicar jogos para celular.

(*por favor, note que o processo de publicação é coberto apenas para Android, no Google Play Store, o resto do campo abrange ambos, Android e iOS)

Eu respondo a todas as mensagens se você ficar preso em qualquer lugar ou precisar de ajuda.

Você também pode se juntar à comunidade no servidor do Discord e se conectar com outros estudantes inscritos.

(Link para o servidor do Discord está no arquivo de Resources)

Obrigado pelo seu tempo e nos vemos nas aulas.

Conheça seu professor

Teacher Profile Image

Mario Korov

Game Developer | Teacher | Mathematician

Professor

You can find more tutorials on my YouTube channel: RootGames

Hello everyone, my name is Mario and I'm a self-taught game developer with a Bachelor's degree in Mathematics from the Department of Mathematics, Osijek.

For almost a decade of freelancing, finding quality and short tutorials was my major stepping stone, so I decided to put all my knowledge and passion into unique, straight-to-the-point videos to help other developers. You will save so much time, learn faster, and in the end make a game faster.

To sum up, all my love and passion are in Unity courses with the goal to help you in your game developer path. Thank you and see you in the lessons.

I'm really looking forward to this journey.

Visualizar o perfil completo

Level: All Levels

Nota do curso

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

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

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

Transcrições

1. SKILLSHARE DE CURSO: Olá a todos e bem-vindos ao curso Unity Mobile Game Development. Como você pode ver, aprenderemos este exemplo de jogo Space Shooter que foi criado com o novo sistema de entrada. Mas antes de entrar em detalhes, observe que com este curso você também obterá alguns conhecimentos e técnicas gerais que podem ser aplicados a outros tipos de jogos para celular. Por exemplo, aprenderemos como implementar três tipos de anúncios. Um exemplo são os anúncios premiados. Quando um jogador perde o jogo, ele pode assistir a um anúncio que não pode ser ignorado e continuar jogando. Outro exemplo são os anúncios ignoráveis que podem ser exibidos entre os níveis. E controlamos a frequência com que eles aparecerão. Também aprenderemos como enviar notificações para dispositivos Android e iOS. Há uma seleção de níveis com um sistema de desbloqueio simples. Quando o jogador vence um nível, o próximo será desbloqueado. Para cada nível, monitoramos as pontuações e as pontuações mais altas. Aprendemos como criar uma tela de carregamento, que obviamente você pode usar em qualquer tipo de jogo. Todos os níveis têm planos de fundo de rolagem e geradores que podem gerar diferentes tipos de inimigos. O jogador pode obter alguns power-ups como melhorias no escudo e no tiro. É possível perder a atualização de tiro ao sofrer danos. Não seria divertido sem uma luta contra chefes. Então, implementamos o Boss no final de um nível. A otimização é uma parte importante. Então, aprenderemos um pouco sobre objetos Scriptable, como usar o Profiler para detectar possíveis problemas e usaremos o novo sistema de pesquisa de objetos do Unity. Aprendemos a testar jogos em telefones, tanto Android quanto iPhone. No final, preenchemos todos os formulários no Google Play e passamos pelo processo de publicação. Há muito conteúdo que eu não consegui mencionar nesta breve introdução. Mas se você achar algo interessante, matricule-se hoje e nos vemos no curso. 2. Crie um projeto e escolha configurações: Olá a todos. Bem-vindo ao curso de tiro espacial móvel. Para começar com o curso, vamos escolher as configurações ideais do projeto. Então, primeiro abra seu Unity Hub e vá para a instância. Aqui você encontra todas as versões do Unity instaladas em seu PC. Vou usar a unidade na versão 2022 para este curso. Portanto, a melhor maneira de seguir este curso é usar qualquer versão de 2022 ou mais recente. Além disso, verifique se você tem módulos Android ou iOS instalados. Para instalar módulos para a versão Unity, você precisa clicar no botão Configurações e adicionar módulos, depois escolher Android ou iOS ou ambos e continuar com a instalação. Como você pode ver, eu já tenho módulos para a versão 2022. Agora vá para os projetos. Novos projetos. Primeiro, selecione a versão Unity. Depois, você pode ver alguns modelos de projetos. Você pode ver que existem modelos móveis 2D e 3D. Esses modelos vêm com vários pacotes necessários para jogos para celular, mas geralmente você não usa todos eles. Então, em vez disso, prefiro criar projetos 2D ou 3D básicos e, em seguida, inserir manualmente pacotes que tenho certeza de que usarei. Este é um jogo 2D. Portanto, selecione o modelo básico 2D e escolha um nome e um local. Depois, podemos criar um projeto. Você deveria ver algo assim. A primeira coisa que precisamos fazer é mudar a plataforma de destino para Android ou iOS. Então, vá para as configurações de criação de arquivos. Por padrão, a plataforma de destino é Windows, Mac e Linux. Este é um jogo para celular, então vou selecionar Android e clicar em Switch Platform. Espere um momento até que a Unity faça o trabalho. Bom. Essa é uma configuração básica do projeto. No próximo vídeo, exploraremos um recurso muito útil: o Device Simulator. Nos vemos na próxima palestra. 3. Simulador de dispositivo: Olá a todos. Depois da configuração básica do projeto, vamos explorar outro recurso interessante que nos ajudará a desenvolver um jogo para celular. É um simulador de dispositivos. Para abri-lo, selecione a janela do jogo, expanda a lista e aqui você pode alternar para a janela do simulador. Você também pode encontrá-lo acessando Windows general e o simulador de dispositivos, o simulador mostrará como o jogo ficará em um determinado dispositivo e você poderá testar a jogabilidade com o mouse. Se você expandir a lista de dispositivos, poderá ver alguns dispositivos que podem ser selecionados. Eu recomendo que você instale dispositivos adicionais. Isso lhe dará muito mais opções para escolher. Claro, você pode jogar com algumas configurações. Você pode dimensionar a exibição ou escolher o ajuste à tela. Você pode girar a tela. E essa área segura é para a navegação dos elementos da interface do usuário. Sinta-se à vontade para escolher o dispositivo que você deseja. Eu vou escolher o Samsung Galaxy S 105 G. Agora, quando tudo estiver pronto, no próximo vídeo, vamos importar os ativos do projeto e cortar alguns sprites. Nos vemos lá. 4. Editor de importação e sprite: Olá a todos. Vamos continuar com o curso e inserir alguns sprites. A organização no espaço de trabalho é muito importante. Então, vamos criar uma nova pasta para sprites. Certifique-se de selecionar a pasta de ativos. Clique com o botão direito em Criar pasta. Vou chamá-lo de sprites. Abra isso. Agora, você pode baixar esse preço nos recursos. Use algumas ferramentas, como quando há dois arquivos de extração. Como você pode ver, os sprites são organizados em pastas. Selecione-os e arraste-os para o projeto. Sinta-se à vontade para explorar os sprites. Por enquanto, vamos selecionar o sprite do jogador. Na janela do inspetor, podemos ver as configurações do sprite. Vamos expandir essa parte na parte inferior para obter uma melhor visualização do sprite selecionado. Para a maioria dos sprites que codificam essas configurações padrão são boas. Não precisamos mudar nada. Podemos selecionar a visualização da cena e jogar o sprite no jogo. No entanto, alguns sprites precisam de mudanças, por exemplo na pasta de inimigos, temos dois inimigos em um sprite. Precisamos de uma maneira de dividir esse sprite em duas partes. Então selecione o sprite, altere o modo de sprite de único para múltiplo. Em seguida, vá para o Sprite Editor e aplique as alterações. No Sprite Editor. Nesse caso, os sprites podem parecer um pouco desfocados, mas não se preocupe, porque eles foram aprimorados para pré-visualização, porque é um jogo para celular. Normalmente, as dimensões são tão pequenas quanto possível para otimizar o desempenho. Para fatiar, os sprites vão para a fatia, escolha a grade por tamanho da célula. Eu sei que o tamanho de uma célula para esse sprite é de 128 pixels. Como eu sei que neste projeto, cada spread tem dimensões incluídas no nome, por exemplo, esse sprite é chamado de inimigos 128. Portanto, se você criar seus próprios sprites ou contratar alguns artistas, certifique-se de conhecer as dimensões precisas do sprite e da grade. Gosto de colocar dimensões em nomes. Ok, defina o tamanho do pixel como 128 para x e y. Clique em Slice. Você pode ver duas células separadas, cada uma contendo um inimigo. Aplique as alterações e saia do Sprite Editor. Podemos excluir o objeto anterior. Agora, quando você expande o sprite, podemos usar cada inimigo separadamente. Outro exemplo é esse efeito de explosão. Precisamos cortá-lo em fatias. Também no Inspetor, você pode ler o tamanho completo do sprite, que às vezes é importante saber. Agora, repita o processo. O tamanho da célula é o mesmo. Esse efeito de explosão será usado posteriormente para animação. Aí vem seu primeiro mini desafio. Você pode usar outros sprites que precisam ser fatiados. Slice, apenas os sprites que têm vários objetos colocados se integram. Você não precisa de sprites simples em fatias. Depois de terminar, nos vemos na próxima palestra. 6. Novo sistema de entrada: Olá a todos. Neste vídeo, inserimos um novo sistema de entrada e ajustamos algumas configurações. A primeira coisa que precisamos fazer é acessar Gerenciador de Pacotes do Windows. Por padrão, você deve ver todos os pacotes que já estão no projeto para mostrar todos os pacotes disponíveis do Unity, vá para pacotes e selecione Unity Registry. Registro do Unity, podemos pesquisar o sistema de entrada, selecioná-lo e clicar no botão Instalar. Para finalizar o processo de instalação, a unidade será reiniciada. Depois da morte. Se você acessar os pacotes do projeto, verá que temos o novo sistema de entrada na lista. Saia do gerenciador de pacotes para verificar se ele está instalado corretamente Podemos acessar Editar configurações do projeto, selecionar o player e expandir outras configurações. Role para baixo. Estamos procurando um tratamento ativo de insumos. Você pode ver o sistema antigo, o novo sistema e as duas opções. Certifique-se de que o novo sistema ou ambos estejam selecionados. Vou selecionar os dois. Bom. Temos mais uma coisa a fazer para simular o toque na tela com o mouse. Precisamos ir para a Análise de Janelas. Entrada, depurador. Vá para as opções e ative e simule a entrada de toque do mouse ou da caneta. Agora, podemos usar o mouse com o simulador, e pronto para os preparativos básicos. Nos vemos na próxima palestra. 7. Fundamentos de toque aprimorados: Oi pessoal. Vamos explorar o novo sistema de entrada. O novo sistema de entrada é super flexível e pode ser usado de várias maneiras. Na Unity, podemos ver que o suporte ao toque é dividido em baixo nível de suporte na classe de tela sensível ao toque e suporte de alto nível na classe Touch aprimorada. A classe Touch aprimorada tem mais opções e o controle foi projetado para ativar a função de atualização e a Unity recomenda usá-la. Portanto, para este projeto, usaremos a classe de estatísticas aprimoradas para controlar a entrada. Depois de conhecer a sintaxe e a teoria por trás disso, controle por toque se torna muito fácil. Primeiro, precisamos ativar o toque aprimorado. Normalmente, fazemos isso em sua própria função ativada. Além disso, precisamos desativá-lo em sua própria função desativada, uma sintaxe bem simples. Em seguida, o toque aprimorado fornece acesso a informações em duas dimensões, por dedo e por toque. Então, como definimos um dedo e um toque, cada dedo é definido como o enésimo contato em uma tela sensível ao toque. Por exemplo, tocamos na tela sensível ao toque com um dedo, não importa qual seja o primeiro contato. E algumas informações são armazenadas no dedo zero. Se tocarmos na tela com dois dedos, as informações serão armazenadas para ambos os dedos. Variáveis dos dedos zero e dedo um. Os dedos que estão tocando a tela são armazenados na matriz de dedos de atividade. Então, para obter as informações, usamos a seguinte sintaxe. Toque nos dedos ativos. Como essa é uma matriz para obter as informações do primeiro dedo que está tocando a tela, usamos o índice zero para obter o segundo dedo ativo. Se existir, usamos o índice um e assim por diante. Ok, há mais uma matriz que usamos, que é a matriz dos dedos. Observe que não há nenhuma palavra-chave ativa. É a matriz de todos os dedos possíveis. Eles podem tocar na tela ao mesmo tempo. Normalmente, essa matriz tem dez elementos para dez dedos, mas pode estar completa dependendo do hardware e do software. Para usar essa matriz, devemos verificar se há uma condição adicional. Precisamos verificar se o dedo dessa matriz está ativo. Se isso for verdade, então podemos usá-lo. No próximo exemplo, demonstrarei a diferença entre essas duas matrizes. Isso é muito importante. Portanto, reserve um tempo para entender isso. Digamos que tocamos na tela com dois dedos. Isso representará a matriz de dedos ativa e representará a matriz de dedos. Agora precisamos obter alguns dados, talvez a posição deles ou outra coisa. Digamos que esse seja o primeiro dedo que tocou a tela. Portanto, ele tem índice zero para ambas as matrizes. Isso significa que esse dedo tem um indicador. Agora, se, por exemplo, levantarmos um dedo com índice zero na matriz de dedos ativos, o dedo que tinha o indicador um se torna o dedo com índice zero. No entanto, nos dedos, matriz, os índices permaneceram os mesmos. Mas esse dedo é zero, não está mais ativo. Quando levantamos todos os dedos da tela, tudo reinicia. Para concluir, é importante de qual matriz e de qual índice obtemos dados. Agora, vamos dar uma olhada no toque. Quando você toca na tela com uma unidade de dedo, eles armazenam algumas informações na estrutura de toque. A estrutura é mais fácil de explicar usando as fases. Cada toque começou e encerrou as fases. A fase inicial acontece no primeiro quadro quando um dedo toca a tela. A fase final acontece quando deixamos o dedo da tela. Entre essas duas fases, também podemos tê-las em fases movidas e estacionárias. Obviamente, a fase é quando movemos o dedo na tela sensível ao toque. E a fase estacionária é quando não movemos o dedo. Há mais uma fase chamada cancelada. Isso acontece quando damos um toque e afastamos o foco do aplicativo. Afastar-se ou perder o foco acontece quando minimizamos a aplicação. Essas fases são muito úteis e as usaremos no curso. Além disso, há uma matriz de toques ativos que podemos usar para obter toques ativos semelhantes à matriz de dedos. Ok, isso foi um pouco de teoria sobre a classe Touch aprimorada. Vamos usá-lo na próxima aula para criar o movimento do jogador. 8. Mover o jogador com toque: Olá a todos. Nesta palestra, aprenderemos como mover o player usando o novo sistema de entrada e controles de toque. Para começar, vá para a pasta de scripts, crie um script C-sharp. Vou chamá-lo de controles do jogador. Abra isso. A primeira etapa é adicionar o namespace tocado aprimorado do sistema de entrada. Como dissemos na palestra anterior, precisamos ativar o toque aprimorado. Fazemos isso em sua própria função de habilitação. Lembre-se de que essa função é chamada sempre que o objeto é ativado, então nós a desativamos em sua própria função desativada. Isso acontece quando o objeto é desativado, destruído e assim por diante. Em seguida, precisamos receber entradas na função de atualização. Para este jogo, precisamos de apenas um dedo. A melhor opção é receber entradas apenas com o primeiro dedo que toca a tela. Não importa qual deles fisicamente, apenas que seja o primeiro. Portanto, na declaração if, escrevemos dedos de ponto de toque com índice zero. índice zero encontra o primeiro dedo, você notará um erro. Isso ocorre porque essa estrutura pode ser usada para vários namespaces. Portanto, precisamos especificar qual namespace usar. Podemos clicar com o botão direito do mouse no toque e abrir ações rápidas. Você pode ver que podemos usar dois namespaces, mecanismo Unity com esse toque e mecanismo Unity com o toque aprimorado. Precisamos usar o toque aprimorado. Agora, na parte superior do script, você deve ver que toda vez que usamos o toque, ele vem do namespace de toque aprimorado. Agora, podemos continuar com a declaração if. Precisamos verificar se o primeiro dedo está ativo, o que significa que ele toca a tela. Em seguida, podemos usar o toque para obter o primeiro toque ativo da matriz de toques ativos. Sabemos que esse toque ativo virá do primeiro dedo na tela. Por causa da declaração if do toque ativo, precisamos obter uma posição. Primeiro, usamos o vetor três para armazenar a posição do toque na tela. Como essa é uma posição na tela, precisamos convertê-la em nossa posição. A posição da tela é uma posição na tela. É diferente da posição mundial. A posição mundial é a posição real na cena e no jogo. É disso que precisamos. Para conversão. Usamos a câmera principal. A câmera principal tem a tela de função para votar. Então, atribuímos a ela uma posição da tela convertida em uma posição mundial e a armazenamos novamente na variável de posição de toque. Também podemos armazenar a câmera principal em uma variável para melhor desempenho. Vamos criar uma nova variável de câmera. No início, digamos que a câmera principal tenha duas câmeras no domínio de pontos. Agora podemos usar a variável principal da câmera no código. Depois, podemos definir a posição do jogador usando o novo vetor três. Para x, usamos a posição de toque que x e a posição de toque y para a posição y, posição no eixo z não importa. Só precisa estar na frente da câmera. Vou colocá-lo em zero. Vamos tentar isso. Em Unity. Selecione o player e adicione o script do controlador do player. Pressione Play. Eu posso clicar na nave espacial e movê-la pela tela. No entanto, se eu clicar em algum lugar na tela, a nave espacial se teletransportará para essa posição. Esse não é o comportamento de que precisamos. A ideia é que o jogador não precise clicar na nave espacial para movê-la. O jogador deve ser capaz de clicar em qualquer lugar na tela e mover a nave espacial de sua posição. Dessa forma, o jogador tem mais visibilidade e controle sobre a tela. Por exemplo, se eu clicar aqui e a nave espacial estiver aqui, e eu cortei o dedo para baixo, quero que a nave espacial também desça de sua posição. Para implementar esse comportamento, precisamos calcular a distância entre a posição de toque e a nave espacial. Vamos voltar ao roteiro. Crie um vetor de três deslocamentos que usaremos como uma distância do toque até a nave espacial. Como você sabe da palestra anterior, o toque tem fases. Se apenas tocarmos na tela nesse quadro, fase de toque será iniciada. Então, vamos verificar se a fase do primeiro toque ativo foi iniciada. Observe que há um erro. Também precisamos especificar o namespace para a fase de desanexação. Usamos o sistema de entrada que usa o namespace touch pay. Então, para calcular valores de compensação, um pouco de matemática vetorial. deslocamento é igual à posição de toque menos a posição da nave espacial, e isso transforma essa posição. Isso nos dará a distância que precisamos. Então, podemos verificar se a fase é igual a se mover. Isso significa que se o jogador mover o dedo na tela, é claro, precisamos mover a nave espacial. Portanto, podemos usar esse código com uma modificação. Subtraia o deslocamento X da coordenada x e o deslocamento y da coordenada y. Há uma fase em que o jogador está tocando na tela e não está movendo o dedo. Então, se a fase estiver estacionária, faça a mesma coisa. Defina a posição com offset. E isso é tudo o que precisamos para codificar. Vamos tentar. Primeiro. Vamos tentar clicar na nave espacial. Isso funciona bem. Em seguida, clique em qualquer lugar na tela e tente mover a nave espacial. Você pode ver que a nave espacial segue o toque corretamente. Isso é o que queríamos. Obviamente, existe a possibilidade de sair da tela. Na próxima palestra, abordaremos essa situação. Nos vemos lá. 9. Restrições de movimento de jogador: Olá de novo. Vamos fazer algumas restrições de movimento para o jogador para que ele não saia da tela. A ideia é usar uma janela de visualização. Vamos dar uma olhada na tela do celular. O espaço da janela de visualização é normalizado e em relação à câmera. O que isso significa é que os valores vão de 0 a 1, por exemplo, as coordenadas ou o canto inferior esquerdo são zero. O primeiro número é para o valor x e o segundo número é quatro, o valor y, as coordenadas do canto superior direito, R11, as coordenadas inferior direita são 10 e a parte superior esquerda 01, o ponto central é 0,50, 0,5. Usaremos essas coordenadas e as converteremos em espaço virtual. Em seguida, diga ao jogador que ele não consegue ultrapassar essas coordenadas. Ok, agora que conhecemos a ideia, vamos começar a abrir o script do controlador do player. Primeiro, precisamos de valores flutuantes privados para o máximo de pontos à esquerda, à direita, para baixo e para cima. No início. Podemos atribuir esses valores usando a função viewport to world point. Assim, a maxila esquerda obtém um valor da câmera principal, dessa janela de visualização para o ponto mundial. Como eu disse, convertemos a porta de visualização em ponto mundial. Agora precisamos equilibrar as coordenadas da janela de visualização. Então, usamos o novo vetor dois. Como essa é a posição máxima esquerda para o valor x, vamos tentar com 0,15. E para o y, podemos usar zero. Você verá um erro porque essa função retorna o vetor três e nós o estamos armazenando em valor flutuante. Mas só precisamos de um valor x do vetor. Então, no final, certo, esse x é o máximo, certo? O processo é o mesmo. Basta alterar o valor de x para torná-lo simétrico. Um -0,15 é 0,85. Para o valor de mixagem, o processo é semelhante. Agora, a coordenada X é zero e a coordenada y pode ser um número pequeno, por exemplo, 0,05. No final, escolhemos o valor y com o ponto y. O valor máximo do APP será 0,6 porque eu não quero que o jogador se mova até o topo da tela. Ok, agora que sabemos as coordenadas de restrição, vamos aplicá-las. Vá para a função de atualização. Vou reduzir um pouco o zoom porque essa será uma longa linha de código. Agora, dentro da declaração IF principal na parte inferior, substitua a posição pela transformação dessa posição (novo vetor três). Para restringir valores, usamos o mito F, aquela função de fixação. Primeiro escrevemos o valor que queremos restringir, que é a posição x do jogador. Em seguida, escrevemos o valor mínimo, nesse caso, que é o lado esquerdo da tela. Então, a posição máxima esquerda, então escrevemos o valor máximo que é o lado direito da tela, neste caso max, certo? Para as coordenadas y, queremos transformar essa posição ponto y. O valor mínimo é max down e o valor máximo é max up. Para o eixo z, podemos simplesmente escrever zero. Acho que isso é tudo o que precisamos para codificar. Vamos tentar. Você pode ver que agora o jogador não consegue sair da tela. Talvez possamos aumentar um pouco as coordenadas inferiores. Você também pode ver que não consigo me mover acima de 0,6 da tela. Obviamente, você pode acessar o script e aumentar o valor máximo máximo. Agora, eu posso me mover até o topo. Sinta-se à vontade para experimentar os valores e encontrar o melhor para seu jogo. Isso funcionará para qualquer tamanho de tela em qualquer dispositivo. Você pode experimentá-lo em outros dispositivos no simulador. Ótimo, isso é tudo para esta palestra. Nos vemos na próxima. 10. Fronteiras para câmera: Olá a todos. Nesta palestra, ajustaremos nossa câmera para todos os tipos e tamanhos de telas. Neste ponto, o tamanho da câmera é bom, mas em um dispositivo móvel diferente, talvez ela seja muito grande ou muito pequena. Para resolver esse problema, usamos uma máquina pecadora e uma câmera virtual. Então, vamos importar o pacote da máquina de cinema. Vá para o Gerenciador de Pacotes e selecione Unity Registry, encontre a máquina central e instale-a. Agora, vamos criar uma câmera virtual. Você pode redefinir o componente de transformação e definir o eixo z como um valor negativo. Dessa forma, garantimos que os objetos estejam na frente da câmera. Observe que agora controlamos o tamanho da câmera nessa câmera virtual. A ideia é criar dois objetos vazios nas bordas laterais da tela e, em seguida, garantir que esses dois objetos representem as bordas do KMer, independentemente do dispositivo. Portanto, eles sempre precisam estar dentro da visão da câmera e agir da mesma forma que os limites. Vamos criar um novo objeto de jogo vazio. Vou chamá-lo de ponto final esquerdo. Podemos dar a ele um ícone. Em seguida, redefina o componente de transformação mova o objeto para a esquerda. Acho que menos quatro é um bom valor. Não vá até a borda. Em seguida, duplique o objeto. Esse será o ponto certo do valor de x e precisa ser simétrico, então é quatro. Agora precisamos de um novo objeto de jogo vazio. Chame isso de grupo-alvo, redefina a posição. Em seguida, podemos adicionar o script do pacote da máquina da cidade ao script do grupo alvo da máquina de cena. Você pode ver que podemos adicionar objetos de destino à lista. Precisamos de alvos. Um é o ponto esquerdo e o outro é o ponto direito. Ótimo. Agora selecione Virtual k-mer. Arraste o grupo-alvo para o outono e veja os campos. Como estamos usando um grupo de objetos como objetivo, selecione o compositor de grupos, precisamos alterar algumas opções. O primeiro é o tamanho do enquadramento do grupo. Ele define quanto espaço na tela é ocupado pela caixa delimitadora dos alvos. Precisamos configurá-lo como um para que as bordas da tela fiquem exatamente nos pontos esquerdo e direito. Em seguida, defina o amortecimento da estrutura para zero. Quanto menor o valor, a câmera Fester se ajustará ao tamanho correto quando o nível começar. Agora, você pode experimentá-lo no simulador, trocar os dispositivos e ver a aparência do jogo. Deve ficar bem. No entanto, há um problema oculto. Observe que as restrições de movimento não estão mais funcionando corretamente. O motivo é que definimos restrições na função de início, mas o cinema não teve tempo de configurar a câmera corretamente no início do nível. Portanto, a porta de visualização da qual obtemos as coordenadas, sensação de dados errados. A solução é bem simples. Podemos usar Coroutine com função de queratina. Podemos atrasar a execução do código. A sintaxe é um pouco diferente. Precisamos criar a função numeradora. Na função, o código é meio que separado em duas partes. Na primeira parte, fazemos algo ou nada, dependendo do que precisamos. Nesse caso, nada. Em seguida, adicionamos atraso de tempo. Escrevemos o rendimento, retornamos o novo e, em seguida, escolhemos quanto tempo durará o atraso. Por exemplo, podemos esperar pelo final de um quadro. Podemos esperar por uma certa quantidade de segundos e assim por diante. Vamos esperar 0,2 s. Depois que o tempo passa, executamos a segunda parte do código. Nesse caso, precisamos dele para obter valores de restrição. Esses 0,2 s são tempo suficiente antes de ver uma máquina ajustar a câmera e, em seguida, obtemos os dados corretos da porta de visualização. Na verdade, vamos usar um peso no final de uma moldura. Neste exemplo, esperamos que um quadro seja tempo suficiente para ajustar a câmera. A última coisa que precisamos chamar essa função com start corroutine. Use start corroutine no início e chame a função definir limites. Vamos tentar. Agora. Tudo funciona bem. Observe que, às vezes, uma máquina precisa de mais tempo para ajustar a câmera, por exemplo, em todos os seus dispositivos móveis. Então, talvez seja mais inteligente ter mais tempo de atraso. É isso. Espero que você tenha entendido tudo e nos vemos na próxima palestra. 11. Toque em Controles de Update [não salte]: Olá a todos. Essa é uma atualização rápida. Parece que a unidade é um novo sistema de entrada e alguns dispositivos Samsung têm problemas de compatibilidade. Não se preocupe, eu vou te mostrar como consertá-los. Talvez até mesmo quando você assista isso, Unity e a Samsung já tenham resolvido esse problema. Nesse caso, você não precisa fazer nenhuma alteração. Vamos ver o problema. Por algum motivo, os dispositivos Samsung não registram essa linha de código. Acho que eles têm problemas com a disposição dos dedos ou algo parecido. Mas, na verdade, eles o registram, mas somente quando usam uma caneta stylus Eles não registrarão o dedo nu, o que é muito estranho. Outros dispositivos Android e iPhones não têm esse problema. Então, vamos substituir essa linha de código. Podemos usar a classe de toque para contar os toques ativos. Então, certo, toque nos toques ativos que contam. A contagem precisa ser maior que zero. Isso significa que temos um ou mais toques ativos na tela. Vamos experimentar. Aqui eu tenho um dispositivo Samsung e tudo funciona. No entanto, o jogador pode abusar do comportamento de movimento usando o multitoque Observe que se eu usar mais dedos e viver o primeiro dedo que move a nave espacial, a espaçonave se teletransportará para a posição do segundo posição do Para evitar isso, precisamos de outra declaração if. Vamos usar o primeiro toque ativo. Tem índice zero. Então vamos usar o dedo e o indicador ao redor desse toque. O indicador desse dedo deve ser igual a zero. Isso significa que usamos apenas o primeiro dedo que toca a tela. Em seguida, mova o código para dentro da instrução if. Vamos experimentar. Como você pode ver, agora, tudo funciona. Eu sugiro que você use essa abordagem, pois ela funciona em todos os dispositivos. Espero que a Unity e a Samsung resolvam seus problemas. Enquanto isso, certifique-se de testar seu código no maior número possível de telefones Mas ainda não terminamos. Outro bug pode aparecer no editor Unity. O bug que estou prestes a mostrar só acontece no editor Unity. Isso não afetará seu jogo publicado em telefones celulares, mas pode ser irritante quando você testa seu jogo no Unity Claro, eu tenho a solução. Primeiro, deixe-me mostrar o bug. Eu posso controlar a nave normalmente enquanto meu mouse está na tela. Mas se eu clicar fora da tela, receberei esse erro. O mesmo acontece quando você segura o botão esquerdo do mouse e arrasta o mouse para fora da tela. Basicamente, isso acontece toda vez que você pressiona fora da tela do celular. Quando você cria seu jogo no telefone, não pode pressionar fora da tela. A tela é a única coisa que você pode usar. Portanto, não sei por que o editor Unity registra as posições da tela fora da tela, mas sei como corrigi-lo para que esse erro não o incomode Você pode observar que os valores da posição da tela r infinitos para x e infinito negativo para o Podemos usar essas informações. Vá para o script do controlador do player aqui abaixo da posição de três toques do vetor. Vamos escrever hash, se for Unity Editor, e depois escrever hash E se agora tudo o que temos entre essas linhas for compilado apenas no editor Unity. Ele não será compilado quando você criar seu jogo para telefones. Aqui, podemos verificar se a posição de toque em x é igual ao infinito. Se isso for verdade, retorne e não execute o código abaixo. Portanto, no editor do Unity, quando pressionamos fora da tela, o código para aqui e isso evita erros. Vamos experimentar. Vou arrastar o mouse para fora da tela e nada acontece. Posso clicar em qualquer lugar e não tenho erros. Bom. Espero que o Unity resolva esses erros em versões mais recentes, e isso é tudo neste vídeo Nos vemos na próxima. 12. Toque em Contagem: Olá a todos. Nesta palestra, aprenderemos como contar etapas. Esta palestra é opcional. Não usaremos etapas neste projeto mais curto, mas talvez seja útil para seus jogos e projetos. Você expandirá seu conhecimento sobre controles de toque. Se você abrir a documentação, o link estará nos recursos. Em seguida, na classe Touch, você pode ver todas as propriedades que podemos usar. Alguns deles já vimos e usamos, por exemplo, fases e posição da tela para contar quantos tipos o player usou, precisamos da propriedade de contagem de fitas. Vamos abrir o script do controlador do player. Por exemplo, digamos que precisamos registrar um toque duplo. Precisamos de uma declaração if. Em seguida, usamos a classe de toque, no nosso caso, meu toque é uma variável. Então, meu toque, esse tipo, conta. Se a contagem for dois, então podemos fazer alguma coisa. E é isso. É simples assim. Vamos tentar. Vou simular um toque duplo com um clique duplo. Você pode ver no console que temos o registro de depuração. Bom. Obviamente, você pode alterar o número de fitas, por exemplo, podemos verificar se há uma fita. Tudo isso é para esta palestra. Espero que você tenha aprendido mais sobre controles de toque e nos vemos na próxima. 13. Joystick virtual: Olá a todos. Nesta palestra, adicionaremos um joystick virtual que podemos usar para mover a nave espacial. Como você pode ver, eu posso mover a nave espacial movendo esse joystick virtual. Observe que isso é opcional. Não usaremos essa abordagem durante o curso. Vou usar controles de toque para o resto do curso. Você ainda pode seguir o curso com essa opção de joystick. Mas o principal motivo dessa palestra é mostrar como é fácil implementar um joystick virtual. Talvez você o use em seus jogos e projetos futuros. Ok, vamos começar. Como eu disse, usaremos um novo sistema de entrada. Vou repetir o processo de importação caso você tenha pulado essa parte. Primeiro, precisamos ir ao Gerenciador de Pacotes. Certifique-se de selecionar o Unity Registry , pesquisar o sistema de entrada, selecioná-lo e clicar no botão Instalar. Eu já fiz isso. Em seguida, clique com o botão direito na janela do projeto para criar a ação de entrada. Vou chamar isso de controles. Clique no botão Editar. Isso abrirá uma nova guia. Clique no botão Mais para criar um novo mapa de ação. Este mapa de ação será para o jogador, então chame-o de jogador. Então temos ações. As ações podem ser, por exemplo , tiro, movimento e assim por diante. Cada ação tem uma ou mais vinculações. As ligações são como gatilhos. Determinamos qual botão pressionar para ativar a ação. Vou apenas excluir essa ação para mostrar o processo. Para criar uma nova ação, clique nesse botão de adição. Essa ação será para movimento, então chame isso de movimentos. Você pode ver as propriedades da ação aqui. Precisamos mudar o tipo de ação. Para o joystick. Não precisamos de um botão, precisamos usar um valor. Além disso. Precisamos definir o tipo de controle para qualquer valor ou usar um vetor para. Em seguida, selecione a encadernação e abra, abra o gamepad e selecione uma vida em jogo. Agora, quando terminarmos, é importante salvar o ativo. Se você fizer algumas alterações, lembre-se de salvá-las. Em seguida, selecione o player. Precisamos adicionar um componente de entrada do player. Em seguida, arraste os controles de ativos que criamos. Agora vamos criar a interface do usuário para o joystick. Precisamos de uma imagem. Eu chamo isso de manípulo esquerdo. Vá para a vista da cena. Selecione a imagem. Vou ampliar um pouco. Se você quiser ter um joystick no canto inferior esquerdo, precisamos mudar a âncora , a predefinição e o ponto de articulação para o canto inferior esquerdo, segurar Shift e Alt e escolher o canto inferior esquerdo. Podemos mudar um pouco a posição. Em seguida, vamos adicionar o próprio componente Screen Stick. Para o animal de estimação de controle. Escolha o mesmo ritmo que fizemos em nossos controles, e esse é o controle esquerdo. Vamos testar isso. Você pode ver que a imagem está se comportando como um joystick, mas nada acontece. O jogador não está se movendo. Antes de lidarmos com isso, vamos ajustar um pouco o joystick, movê-lo mais para o canto. Então vamos mudar a imagem. Verifique o link nos recursos para obter mais imagens gratuitas do joystick virtual. Também podemos aumentar um pouco a escala. Isso parece melhor. Observe que existe a variável de organização do movimento. Ele determina a distância entre o joystick e o centro. Vamos aumentá-lo para 100. Isso é muito melhor. Além disso, para tornar a interface de usuário compatível e escalável para todos os dispositivos, precisamos selecionar o Canvas. Em seguida, altere o modo de escala para dimensionar com o tamanho da tela. Em seguida, defina uma resolução de referência. Vamos combinar largura e altura igualmente. Então, defina isso como 0,5. Tudo o que precisamos fazer agora é conectar o joystick ao movimento do jogador. Vamos selecionar o jogador. Eu tenho o script do controlador do player. Vamos abri-lo. Para fazer o joystick funcionar. Primeiro, precisamos criar uma referência de ação de entrada. De volta ao Unity. Expanda o conjunto de controles. Você pode ver a ação, movê-la, arrastá-la para o campo vazio. Volte para o roteiro. Precisaremos de uma velocidade variável flutuante. Então, na atualização, vamos usar vetor para a direção. Obteremos os valores de direção da referência da ação de entrada. Portanto, use a ação de movimentação para usar aquela ação que lê o valor. Os bastões nos gamepads têm dois valores vetoriais. Isso significa que lemos o vetor de valor dois. Para realmente mover o jogador, use a transformação que traduz. Multiplicamos o vetor de direção do movimento pela variável de velocidade e depois multiplicamos tudo com o tempo, tempo delta para um movimento suave. Isso é tudo o que precisamos para voltar ao Unity. Não se esqueça de definir a velocidade. Vamos tentar. Agora você pode ver que, enquanto eu movo o joystick, o jogador se move. Bom. Isso é tudo para este tutorial e até o próximo. 14. Conceito inimigo: Oi pessoal. Nesta palestra, aprenderemos como criar inimigos usando o conceito de herança. A melhor prática para usar a herança é quando você tem um grupo de objetos que têm muitas funcionalidades comuns, por exemplo, um grupo de inimigos. O conceito é muito simples. Criamos uma classe mãe, também conhecida como classe base. Em seguida, criamos aulas para crianças. As classes secundárias herdarão variáveis e funções da classe principal. Além disso, os lugares infantis podem ter suas próprias variáveis e funções. Deixe-me mostrar um exemplo. Primeiro, para se manter organizado, selecione a pasta de scripts e crie uma nova para os scripts inimigos. Então, vamos criar o novo script C-sharp. Chame isso de NME. Será nossa classe base. Abra isso. Ok. Todos os inimigos precisavam ter uma saúde comum a todos eles. Portanto, crie uma variável de saúde pública flutuante. Agora, podemos criar uma classe infantil, por exemplo, Meteor. Abra-o para transformar isso em uma aula infantil, substitua o comportamento motor pela classe inimiga. Por enquanto, deixe o lugar da criança assim, sem variáveis ou funções além de iniciar e atualizar. No Unity, podemos criar um novo objeto de jogo vazio, o script meteoro. E podemos ver a variável saúde. A variável de saúde é herdada da classe inimiga e podemos usá-la na classe Meteor. Vamos para a classe inimiga. Normalmente, podemos usar variáveis protegidas em vez de variáveis públicas. Variáveis protegidas são algo entre o privado e o público. Eles são visíveis apenas nas classes de pais e filhos. Outros lugares podem vê-los ou alterá-los diretamente. Isso também significa que não podemos vê-los no inspetor por padrão. Para isso, usamos campo serializado. Bom. Vamos dar uma olhada na estrutura um pouco mais. Temos uma classe parental, uma classe meteoros para crianças inimigas e podemos, por exemplo criar uma classe infantil para naves espaciais. Portanto, tanto o meteoro quanto a nave espacial precisam ter saúde. Eles precisam ter um corpo rígido, provavelmente no animador para animações e assim por diante. Tudo isso que é comum acontece na classe dos pais. Além disso, todos os inimigos podem sofrer danos. Assim, podemos criar a função de receber danos na classe principal. As classes infantis herdarão essas variáveis e funções. Como eu disse, além disso, podemos ter funções específicas apenas para aulas infantis. A classe de meteoros pode ter, por exemplo, função de rotação e a nave espacial pode ter uma função deveria. E essa é a lógica básica da herança. Agora, vamos usar o script do inimigo e criar a função de receber dano. Garante que seja público porque chamaremos essa função de outras classes. Além disso. Ele precisa usar um parâmetro danificado pela flutuação. Nesta função, diminuiremos a saúde com o valor do dano. Em seguida, podemos adicionar alguma animação de danos. Depois da dívida, podemos verificar se a saúde é menor ou igual a zero. Então talvez possamos reproduzir uma animação de destruição. Posteriormente, escreveremos o código real da dívida. Agora, vou te mostrar um truque avançado com funções virtuais. As funções virtuais funcionam muito bem com o padrão de herança. Então, criamos uma função virtual em uma classe principal. Todas as classes infantis podem usar essa função virtual, mas também podem substituí-la. Isso significa adicionar algum código e funcionalidade. Digamos que a sintaxe. Criamos uma função pública de vazio virtual. Observe a palavra-chave virtual. Vamos chamar isso de sequência de dor. E também podemos criar essa sequência. Agora, substitua comentários por funções. Quando o inimigo tira a imagem, a sequência do rebanho acontece. Essa sequência acontece quando a saúde é menor ou igual a zero. Podemos adicionar algumas funcionalidades às funções virtuais, se necessário. Nesse caso, não precisamos disso. Vamos ver o roteiro do meteoro. Como essa classe é uma classe infantil, podemos substituir as funções virtuais. Observe a substituição da palavra-chave. Por padrão, o código da classe base será chamado. Então, se você tem algo aqui na função virtual que será chamado, mas lembre-se de que não precisamos chamá-lo, é uma opção. Então, podemos simplesmente excluir essa linha de código. Podemos fazer algo diferente e único para essa classe infantil. Dessa forma, cada classe infantil pode ter ferimentos diferentes e essas sequências e comportamentos, por exemplo, um tipo de inimigo podem explodir nessa sequência. Outro tipo de inimigo pode, por exemplo explodir e também gerar mais inimigos. As possibilidades são infinitas. Ok, essa é toda teoria que precisamos saber. Durante o curso. Vamos adicionar mais coisas ao inimigo da classe base. Na próxima palestra, aplicaremos esse conhecimento e criaremos o primeiro inimigo. Então nos vemos lá. 15. Meteoro Prefab: Oi pessoal. Nesta palestra, criaremos materiais preferenciais que podem destruir o jogador. Primeiro, podemos excluir os objetos do medidor da aula anterior. Depois, podemos ir até os sprites inimigos e arrastar 1 m para a cena. Podemos renomeá-lo para garantir que os inimigos estejam visíveis na frente do plano de fundo, aumentando a ordem em uma camada. Observe que o player é muito grande. Seria muito difícil evitar os mesmos projéteis de meteoros. Podemos mudar a escala talvez para 0,6. Ótimo. Agora selecione imaturo para colocar esse objeto sob a influência do motor físico e das forças no componente 2D do corpo rígido. Veremos que você está usando esse componente no script. Observe que existem algumas configurações, como gravidade. Se pressionarmos Play, o objeto cairá. Para realmente colidir com outros objetos, precisamos de um colisor, neste caso, o colisor circular 2D. Vamos ampliar para ver melhor. Vou diminuir o raio um pouco perfeitamente. Também precisamos adicionar um corpo rígido e componentes do colisor ao player. Ed, corpo rígido 2D. Para o jogador, podemos definir a gravidade como zero. O jogador tem um sprite mais complexo. Portanto, podemos adicionar o colisor de polígonos 2D. Para aumentar o desempenho, podemos remover algumas linhas do colisor no botão de edição do colisor. Agora, segure o controle e clique na linha quando se tornar direita para removê-la. Também podemos mover alguns vértices. Vou acelerar um pouco. Você pode editar o colisor como quiser. Não precisa ser igual ao meu. Podemos sair do modo de edição. Agora selecione o meteoro. Para evitar selecionar o plano de fundo, podemos desativar a seleção, mover o medidor para o meio. Agora, podemos sentir o gosto da colisão no modo de jogo. Como você pode ver, objetos colidem. A próxima etapa é ativar a opção East Trigger no colisor de meteoros. Agora, os objetos não colidirão, mas a colisão é detectada e podemos usá-la no script. Em seguida, altere seu corpo rígido tipo dois cinemático. Agora, outros objetos e forças não podem afetar esse objeto, o que significa que nada pode empurrar ou puxar esse meteoro. Só podemos controlar o movimento por meio do script. Além disso, lembre-se de qualquer objeto que tenha um colisor e que você pretenda mover, destruir ou mudar. Ele precisa ter um componente RigidBody2D. Podemos adicionar o script do meteoro e movê-lo para cima no inspetor. Abra isso. Antes de começarmos a programar aqui, vamos para a classe de inimigos principais. Todos os inimigos terão um componente 2D de corpo rígido. Assim, podemos criar uma variável protegida, RB. No Unity, você pode arrastar o componente do corpo rígido para o campo vazio. Agora volte ao roteiro do meteoro. Quero criar materiais com velocidades aleatórias finais diferentes. Portanto, crie variáveis flutuantes que podemos ver no Inspetor. Uma é a velocidade mínima e a outra é a velocidade máxima. E também precisamos de uma velocidade de nuvem privada na função de início, podemos definir a velocidade. A velocidade obterá o valor aleatoriamente nesse intervalo. Portanto, o valor passará da velocidade mínima para a velocidade máxima, que definimos no inspetor. Agora, precisamos adicionar velocidade ao adulto. Então, usamos o corpo rígido RB, essa velocidade e o definimos como vetor para baixo, o que significa um valor negativo. No eixo y, é menos um. O medidor se moverá para baixo e só precisamos multiplicar a direção pela velocidade. No Unity, defina valores mínimo e máximo. Vamos testá-lo. Bom. Agora, vamos detectar uma colisão entre o meteoro e a nave espacial. Usamos a função On Trigger Enter to d. Essa função será chamada quando algo entrar no gatilho que temos no Meteor. Você pode ver que a função tem um parâmetro 2D do colisor. Vamos renomeá-lo para outro colisor. Posteriormente, teremos um sistema danificado e danificaríamos o jogador. Mas, por enquanto, vamos destruir o jogador. Usamos a função destruir e queremos destruir outro colisor, aquele objeto do jogo. Então esse é o objeto com o qual o imaturo colidiu. Vamos ver isso. Bom. No entanto, o meteoro pode tocar em outros objetos. Então, queremos especificar apenas para destruir o jogador. Há muitas maneiras de fazer isso. Usaremos tags, selecionaremos o player e acessaremos o menu suspenso. Selecione o tag player. Obviamente, você pode criar uma nova tag aqui. Basta clicar no botão de adição. Eu não vou fazer isso agora. Apenas certifique-se de que o técnico ou o que você usa esteja selecionado. Primeiro, queremos verificar se o objeto tem o player com a função de comparação. Se isso for verdade, então destruído. Ótimo. Agora precisamos criar um pré-fabricado a partir do detonador que seja como uma cópia do objeto com todos os seus componentes. Primeiro, vamos criar uma nova pasta, prefabs. Em seguida, arraste e solte os objetos do medidor da hierarquia. Agora, podemos criar facilmente cópias desse objeto na cena. Usaremos esse pré-fabricado como chave inglesa no futuro. Se você for até os sprites inimigos, verá mais dois meteoros. Seu pequeno desafio é criar pré-fabricados a partir desses sprites. A solução é muito simples. Você pode repetir o processo para lembrar tudo o que fizemos, mas há uma maneira fácil de fazer isso. Podemos selecionar o prefab na hierarquia, substituir o sprite, renomeá-lo e arrastar o prefab para a pasta Prefabs. Queremos criar um novo pré-fabricado original. Em seguida, faça o mesmo para criar um terceiro Prefab. E isso é tudo para esta palestra. Te vejo na próxima. 16. Matriz de colisão: Olá a todos. Antes de criarmos um spammer pré-fabricado de quatro metros, mostrarei um truque útil sobre colisões entre objetos. Exploraremos a matriz de colisão usando as métricas de colisão, decidimos entre quais camadas a colisão será detectada. Então, primeiro, precisamos criar mais camadas. Selecione o player e vá para o canto superior direito do inspetor. Lembre-se aqui de nossas camadas para colisões. Já temos algumas camadas padrão, mas vamos criar novas. Vá para adicionar camadas. Vamos criar o player de camadas. Também podemos criar um para inimigos. Agora selecione o player e atribua a camada que criamos. Em seguida, podemos selecionar o meteoro pré-fabricado na hierarquia. O material deve estar na camada Inimigo. Para pré-fabricados, é importante substituir as alterações se você quiser aplicá-las às outras instâncias do mesmo prefab. Agora, se você for para a pasta Prefabs, selecione meteoro três e verá que ele já está na camada Inimigo por causa da substituição que aplicamos. Agora selecione os outros 2 m e mude o inimigo da camada dois. Como fizemos as alterações diretamente nos ativos, não precisamos substituir nada. Você faz substituições apenas ao fazer alterações nos prefabs na hierarquia. Agora, vá para Editar configurações do projeto e selecione Física 2D. Vá para a matriz de colisão de camadas. Aqui você pode ver todas as camadas de colisão e as relações entre elas. Por padrão, uma colisão entre todas as camadas está ativada. Você também pode ver as camadas que criamos para desativar a colisão entre as camadas, basta desmarcar a caixa. Nesse caso, desativamos a colisão entre as camadas padrão e NME para que possamos continuar desativando colisão até chegarmos ao player de camadas. Precisamos de uma colisão entre o jogador e os inimigos. Então deixe isso marcado. Próximo. Não precisamos de colisão entre inimigos. Para a camada, o jogador também desativou outras colisões. Só para mostrar que, se você estiver desativando as colisões entre o inimigo e o jogador, o meteoro que atravessaremos o jogador e a colisão não serão detectados. Portanto, certifique-se de que a colisão esteja ativada. Essa é uma boa maneira de controlar o que colidirá e o que não colidirá. Você definitivamente deve usar isso em seus projetos. Posteriormente no curso, adicionaremos mais camadas e modificaremos essa matriz. Isso é tudo para esta palestra. Nos vemos na próxima. 17. Meteoro Spawner: Oi pessoal. Nesta palestra, criaremos um spammer para meteoros. Também garantimos que os meteoros sejam encontrados fora da tela e dentro dos limites das bordas esquerda e direita. Primeiro, vamos criar um novo GameObject vazio. Aqui haverá um parceiro de meteoros. Podemos redefinir o componente de transformação. Em seguida, precisamos criar um novo script C-sharp. Chame isso de matures pounder, o script do objeto do jogo e abra-o. Agora, vamos criar algumas variáveis. Precisamos de uma variedade de objetos do jogo. Essa matriz conterá os meteoros pré-fabricados. Então, precisamos da variável de tempo de desova. Essa variável determinará quando os meteoros serão expostos. Precisamos de um cronômetro para acompanhar o tempo. E a variável inteira I é um índice para a matriz. Em seguida, precisamos de uma referência à câmera principal. Obviamente, precisamos de variáveis na maxila esquerda e no máximo à direita para as bordas da tela. E, nesse caso, também precisamos de uma variável de posição y que estará fora da tela para garantir que o medidor esteja na posição correta. Na função de início, vamos configurar uma referência para a câmera principal da mesma forma que fizemos no script do controlador do player. Também podemos acessar o script do controlador do player. Aqui podemos copiar a função de limites definidos. Vamos colá-lo no script do spawner. Podemos excluir as marcas abaixo e as variáveis superiores máximas. Usamos as variáveis maxila esquerda e máxima direita. Sinta-se à vontade para ajustar esses números, se necessário. Precisamos adicionar uma variável, e é por isso que posição. Essa posição precisa estar fora da tela. Então, para o valor y, use algo maior que um. Vou usar 1.1. Em seguida, chame essa função no início com start corroutine. Agora, vamos criar a lógica principal do gerador, o tempo calculado e os meteoros. Por padrão, o cronômetro é zero, mas podemos ter certeza e configurá-lo como zero. Em seguida, aumentamos o cronômetro por time.deltaTime. Time.deltaTime é o tempo entre dois quadros, se atualizarmos os quadros, o tempo aumentará. Em seguida, verificamos se esse cronômetro é maior que o nosso tempo. Se isso for verdade, precisamos gastar um dos pré-fabricados de três metros. Definimos o índice I para aleatoriamente esse intervalo, que vai de zero a metro desse comprimento. Nesse caso, o índice será o número 01 ou dois. Agora, quando temos um número de índice, podemos gerar um medidor pré-fabricado a partir da matriz para criar objetos. Em tempo de execução, usamos a função Instantiate. Primeiro, escrevemos o objeto que precisamos gerar. Nesse caso, isso é um meteoro pré-fabricado da matriz com índice i. Em seguida, escolhemos essa posição delimitadora. Precisamos de um novo vetor três. Para o valor x, usamos esse intervalo aleatório. Vai da maxila esquerda ao máximo, à direita. Isso vai expor meteoros dentro das bordas da tela. Para o valor y, usamos a posição y. Lembre-se de que o valor está acima da parte superior da tela. Para o eixo z, se você usar qualquer número que coloque o objeto na frente da câmera. Eu acho que nossa câmera é menos dez, então podemos ir menos cinco, por exemplo , em seguida, precisamos definir a rotação do objeto para escolher a rotação padrão, podemos usar apenas quaternião, essa identidade. Mas para melhorar a aparência, vamos usar a rotação aleatória. Defina a rotação usando quaterniões em que os valores de Euler, x e y precisam ser zero. E para rotação no eixo z, usamos um aleatório que varia de 0 a 360. Em seguida, precisamos redefinir o cronômetro para zero. Ótimo. Vamos para a unidade. Podemos escolher o tempo de desova, por exemplo, I. Vou configurá-lo para cada 2 s. Em seguida, podemos adicionar prefabs do Meteor à matriz. Adorei o inspetor e vá até a pasta Prefabs, selecione meteoros e arraste-os para a matriz. Certifique-se de usar pré-fabricados dos ativos. Não use prefabs da hierarquia. Vamos tentar. Ótimo, tudo funciona. No entanto, precisamos resolver um problema. Vou aumentar o tempo de desova e jogar um pouco o jogo. Você pode ver na hierarquia que temos muitos objetos. Esses são metros que evitamos em sua queda no infinito. Para resolver isso, vamos ao script Demeter. Usaremos a função em ficar invisível. Essa função será chamada quando o objeto não estiver mais visível para a câmera. Em outras palavras, quando o objeto sai da tela, basta chamar a função de destruição e destruir esse objeto do jogo. Vamos testá-lo. Agora, você pode ver que os meteoros são destruídos quando saem da tela. Bom. Para tornar esse limite ainda melhor, podemos randomizar o tamanho dos meteoros e responder. No script do spawner, vamos armazenar o objeto encontrado na variável do objeto do jogo. Em seguida, podemos criar uma variável aleatória para o tamanho dos meteoros. Vou definir um intervalo muito pequeno. Você pode aumentar a diferença se quiser. Em seguida, mudamos a escala local do meteoro. Para x e y, use o tamanho variável. Ótimo, isso é tudo o que precisamos para codificar aqui. Nos vemos na próxima palestra. 18. Rotação de objetos: Olá a todos. Antes de adicionarmos a habilidade de tiro ao jogador, decidi dar uma olhada nesta palestra sobre rotação de meteoros. Isso é opcional, mas acho que a mídia Roseville fica melhor se girar. O objetivo é girar meteoros em z, x está no roteiro. Vamos excluir esse script pré-fabricado do script Demeter aberto da hierarquia. Primeiro, precisamos da variável de flutuação, rotação, velocidade. Em seguida, na função de atualização, precisamos girar o objeto a cada quadro. Usamos a função Transform Rotate. Para os eixos x e y. Não precisamos da rotação. E para o eixo Z, use a velocidade de rotação e multiplique-a pelo tempo, tempo delta. Usamos o Time.deltaTime para que a rotação pareça bonita e suave. Isso é tudo o que precisamos para codificar no Unity. Selecione um meteoro pré-fabricado e defina uma velocidade de rotação. Vamos tentar. Bom. Eu acho que isso parece muito melhor. Isso é tudo para esta palestra. Nos vemos na próxima. 19. Tiro para jogadores: Oi, de novo. Vamos adicionar a habilidade de tiro ao jogador. Nesta palestra, criaremos filmagens básicas a partir de um ponto de filmagem. Atualizações e disparos para ganhar mais pontos são feitos posteriormente no curso. Primeiro, precisamos de uma posição a partir da qual atiraremos. Então clique com o botão direito do mouse no jogador e crie um objeto de jogo vazio. Este objeto é um objeto secundário do jogador. Vou chamá-lo de ponto de tiro básico. Precisamos nos mover para fotografar um pouco sobre a nave espacial. Em seguida, crie um novo script C-sharp. Vou chamar isso de tiro ao jogador. Abra isso. Como sempre. Primeiro, vamos criar as variáveis de que precisamos. Precisamos de uma variável de objeto de jogo para o pré-fabricado de bala laser. Precisamos de um ponto de transformação a partir do qual fotografamos. Então, precisamos da variável de intervalo de disparo. Além disso, vamos criar uma variável flutuante para que possamos redefinir o intervalo. Esse valor do intervalo de disparo em unidade no Inspetor. E então, na função de início, podemos armazenar esse valor na variável de redefinição de intervalo. A seguir, há muitas maneiras de criar temporizadores. Já fizemos um para esse canhão, mas, nesse caso, vamos criar um cronômetro diminuindo o valor. A cada quadro, diminuímos intervalo de disparo por tempo.deltaTime. Se esse intervalo de disparo for menor ou igual a zero, então podemos mostrar 21 balas de laser. Antes de criarmos uma função para encurtar, vamos redefinir o intervalo definindo-o com o valor padrão. Em seguida, crie uma função para abranger objetos que usamos para instanciar, se você se lembra, primeiro escrevemos o pré-fabricado que precisamos esmagar e é uma bala laser. Precisamos gastá-lo na posição básica do ponto de vista. Podemos usar a rotação padrão e usar o ponto quaterniônico e. A entidade. Em seguida, chame a função quando o intervalo for menor ou igual a zero. No Unity, selecione o player e adicione o script. Você pode ver que precisamos configurar algumas referências. Por enquanto. Não temos um laser boy na pré-fabricação, mas temos um ponto de filmagem. Arraste o argumento que fizemos no início da palestra. Também podemos definir o intervalo de disparo para 0,3 s. Agora, vamos criar uma bala laser pré-fabricada. Vá para o jogador de sprites. E aqui você pode ver o sprite do projétil. Vamos arrastá-lo para a cena. Renomeie isso. É um pouco grande demais. Portanto, defina a escala para 0,5. Em seguida, adicione o componente 2D do corpo rígido. Escolha o tipo de corpo cinemático. Em seguida, precisamos de um colisor. Vou usar o colisor de cápsulas 2D. Vamos ajustar um pouco o colisor. Precisa ser menor. Em seguida, ative a opção Is Trigger. Agora, vamos criar uma nova camada de colisão para projéteis. Vá para Adicionar camada. Vou chamá-lo de projétil do jogador. Selecione o objeto e escolha a camada do projétil do jogador. Lembre-se de que, quando criamos uma nova camada, precisamos modificar a matriz de colisão para um melhor controle da colisão. Eu quero que o projétil colida apenas com os inimigos, então desativei outras colisões. Finalmente, podemos criar um script para a bala laser. O script para o objeto. Abra isso. Vamos criar variáveis. Primeiro, precisamos da velocidade da bala. Então, precisamos da variável de dano. Essa variável determinará quanto dano a bala causará. Também precisamos da variável 2D de corpo rígido. Na função de partida, definimos a velocidade para transformá-la multiplicada pela velocidade. Transforme essa direção para cima e ela é representada pelo eixo verde na cena. Isso fará com que a bala suba. Não precisamos da função de atualização para detectar a colisão com a bala que usamos no Trigger Enter to D, então não precisamos verificar o que colidiu com a bala por causa da matriz de colisão. Sabemos que apenas inimigos colidem com a bala. Então, a partir da colisão, obtemos o componente inimigo. Lembre-se de que a classe inimiga é a classe mãe de todos os tipos de inimigos. Portanto, cada tipo de inimigo, conforme o script do inimigo, é uma classe principal. No script do inimigo, temos a função de dano técnico que função de receber dano danificará o inimigo. Agora, quando obtemos o componente, podemos chamar a função de inimiga que capta a imagem. A função requer um argumento que é o dano que causaremos ao inimigo. Então destrua a bala. No entanto, há casos em que as balas perdem os inimigos, então precisamos destruí-las. Assim como os meteoros, vídeos que não se tornam invisíveis funcionam quando a bala sai da tela destruída. Agora vá para Unity, conecte o componente rígido do corpo. Defina a velocidade e os danos. Vou definir a imagem como uma. Agora, arraste o marcador para a pasta Prefabs. Exclua este da parte superior aqui. Selecione o player e arraste a bala pré-fabricada dos ativos. Vamos tentar. Como você pode ver, a colisão é detectada, mas não destruímos meteoros. Uma explicação simples para isso. Selecione um dos principais pré-fabricados. Você pode ver que a saúde de 0,1 bala deve ser suficiente para destruí-la. Vamos ao medidor ou ao script. Estamos procurando a função de sequência de mortes. Lembre-se de que essa função é chamada na função de dano ao tanque quando a saúde é zero ou menor. E chamamos a função de dano espesso quando um inimigo colide com uma bala. Então, tudo está conectado corretamente, mas essa sequência não está fazendo nada. Está vazio. Só precisamos destruir o meteoro na sequência da morte. No Unity, selecione todos os prefabs do Meteor. Se você quiser que o meteoro seja destruído com uma bala, coloque Saúde em um, eu escolherei duas, o que significa duas balas para destruí-lo. Vamos tentar. Ótimo, tudo funciona. Nos vemos na próxima palestra. 20. PlayerStats e sistema de danos: Olá a todos. Vamos criar um sistema de saúde e danos para o jogador. Durante o curso, operaremos o sistema com animações, gerenciador de jogos, lógica e outras coisas. Mas a funcionalidade principal é feita nesta palestra. Primeiro, precisamos de um novo script C-sharp. Vou chamá-los de estados anteriores. O roteiro para o jogador. Abra isso. Vamos criar algumas variáveis. Precisamos de uma variável de saúde simulada e flutuante. Essa será a saúde máxima do jogador, que determinamos no Inspetor. Então, precisamos de uma variável privada, saúde que representará a saúde atual do jogador na função de início Vamos definir a saúde atual, a saúde máxima. Não precisamos da função de atualização. Agora, vamos criar uma função para que o jogador possa tirar a imagem. Vou chamá-lo de jogador que sofre dano e ele exige um parâmetro, dano. Como você pode ver, o sistema de danos é semelhante ao sistema de danos do inimigo. Aqui, diminuímos essa saúde pela quantidade de dano. Em seguida, verifique se a saúde é menor ou igual a zero. Se isso for verdade, então podemos destruir o jogador. No futuro. Haverá muito mais lógica aqui, animações abrangendo explosões, mostrando a cena da morte e assim por diante. Agora vá para Unity. Vou definir o máximo de saúde 23. Vá para o script do inimigo. Todos os inimigos causarão dano. Portanto, faz sentido criar uma variável danificada na classe principal. No Unity, selecione um meteoro pré-fabricado e observe que há uma variável de dano no Inspetor. Vou ajustar o dano para um. Em seguida, abra o roteiro do material. Se você se lembra, quando um meteoro colide com o jogador, nós imediatamente destruímos o jogador. Podemos comentar essa linha de código. A ideia é prejudicar o jogador. Agora, podemos obter o componente de estatísticas do jogador. A partir das estatísticas do jogador, chamamos o jogador de pegar a função de imagem. A função usa a variável de dano que criamos nas argilas inimigas. Vamos também destruir o meteoro. Agora, podemos tentar. O jogador deve ser destruído após acertos de três metros, já que a saúde é três e o dano é 112,3, está funcionando. Claro, seria bom ver quanta saúde o jogador tem. Então, nas próximas palestras, criaremos uma barra de saúde para o jogador. 21. Fundamentos de IU: Olá a todos. Nesta palestra, aprenderemos sobre os fundamentos da interface do usuário. Faça com que o correto seja configurar um Canvas, como posicionar adequadamente seus elementos em mais para criar um auxiliar e menus principais, é necessário conhecer coisas fundamentais. Primeiro, vamos clicar com o botão direito do mouse na parte superior aqui. E aqui você pode ver todos os elementos da interface do usuário. O mais comum, nossa imagem, texto e botão. Vamos criar uma imagem. Isso criará automaticamente um sistema de imagens e eventos em tela. Antes de começarmos a trabalhar com a imagem, vamos selecionar o sistema de eventos. Como estamos usando um novo sistema de entrada, precisamos substituir esse módulo. Isso permitirá a interação com botões e outros elementos interativos no futuro. Agora, clique duas vezes na tela para ver em tamanho real. Por padrão, o Canvas tem o mesmo tamanho de tela. Vamos selecionar nossa imagem. Mude a posição para zero zero. Agora, a imagem está no meio da tela. Se você for ao simulador, deverá ver a imagem. A primeira coisa que precisamos mudar é escalar os elementos da interface de usuário de acordo com o dispositivo. Isso significa que, em dispositivos menores, os elementos da interface do usuário precisam ser cada vez maiores e dispositivos maiores, por exemplo, eu mudará para um dispositivo maior. Observe que o tamanho da imagem é o mesmo. Não é disso que precisamos para alterar o tamanho, selecione Canvas. Você deve ver o componente escalar da tela. Em seguida, altere a escala para dimensionar com o tamanho da tela. Observe que a imagem é maior. A próxima etapa é escolher uma resolução de referência. Como este jogo é para a perspectiva de retratos, vamos definir a resolução para uma proporção de nove para 16. E queremos a mesma largura e altura da imagem. Então, defina a imagem para 0,5. Agora, quando você muda de dispositivo, o tamanho deve mudar corretamente. Talvez seja difícil ver neste quadrado, mas a forma como os sprites reais, a mudança, seria mais visível. Agora, vamos passar para o erro mais comum que vejo as pessoas cometerem. Digamos que precisamos criar uma largura de barra de saúde, essa imagem. A barra de saúde precisa estar no canto superior. Vamos selecionar a imagem e movê-la para o canto superior esquerdo. Você pode ver que, no simulador, a posição é boa. No entanto, vamos escolher um dispositivo menor. Agora você pode ver que a imagem é da tela. Por que isso está acontecendo? A resposta é a posição da âncora. Selecione a imagem e abra as Predefinições de ancoragem. Por padrão, a posição da âncora está no meio da tela. Você pode ver a posição da âncora na tela. Como funcionam as âncoras? Na verdade, eles são muito simples. A distância entre a posição da âncora e o objeto é sempre a mesma. Portanto, essa distância será aplicada a todos os dispositivos. Em dispositivos menores, essa distância é muito grande, então a imagem é da tela. Outro exemplo, digamos que este seja nosso dispositivo de teste e a distância. Se escolhermos um dispositivo maior, a imagem não estaria no canto. Estará mais perto do meio, então deveria estar. A solução é escolher outra posição de ancoragem. No nosso caso, a âncora precisa estar no canto superior esquerdo. Agora, usamos essa distância da âncora superior esquerda até a imagem. Isso funcionará para todos os dispositivos. Agora, vamos escolher a predefinição de âncora superior esquerda. Também podemos segurar a mudança para definir o ponto de articulação nesse canto. Agora, troque de dispositivo no simulador e veja se a imagem está na posição correta. Ok, agora precisamos posicionar corretamente os elementos da interface do usuário em todos os dispositivos, o que significa que estamos prontos para criar uma barra de saúde. Nos vemos na próxima palestra. 22. Bar de saúde: Nesta palestra, criaremos um ajudante para o jogador. Para começar do zero. Vamos excluir a imagem da aula anterior. Agora vamos criar uma nova imagem. Vou chamá-lo de formato de barra de saúde. Temos um sprite para essa imagem e a arrastamos para o campo da imagem de origem. Se aumentarmos o zoom, podemos ver que a forma parece deformada. Então clique no botão Definir tamanho nativo. Agora, a imagem tem dimensões idênticas às do sprite. No entanto, se tentarmos alterar a altura e a largura, a forma se deformará. Para corrigi-lo, selecione o Sprite Sprite Editor. Usaremos a técnica dos nove slides. É chamado de nove slides porque dividimos o sprite em nove partes. Procure o quadrado verde, então você pode puxar a linha verde para baixo, certifique-se de que ela esteja abaixo dos cantos. O objetivo é separar os cantos dos lados. Para esta linha, certifique-se de que ela esteja acima dos cantos. Então, temos um alinhamento à esquerda e à direita. Você pode ver que o sprite está dividido em nove partes. Os cantos não se esticarão na forma, apenas os lados se esticarão. Aplique as alterações. Em seguida, selecione a imagem e altere o tipo para fatiar. Você pode ver a diferença quando mudamos as dimensões, a forma não se deforma. Bom. Vamos clicar com o botão direito na tela e criar um novo objeto de jogo vazio. Vou chamá-lo de bar. A barra será um objeto principal do formato da barra de saúde. Vamos selecionar a forma. Vá até Anchor Presets e amplie-a. Segure Alt e clique no botão de alongamento. Quando alteramos as dimensões da barra de saúde, que é um objeto principal, a forma se ajusta. Vamos criar um novo objeto de imagem infantil. Vou chamar isso de histórico de saúde. Vou usar o quadrado do Sprite. Vamos mudar a cor. Em seguida, vá para Anchor Presets e estique-o. Mova-o para cima em um lugar na hierarquia para que a forma fique visível na frente. Quando ampliamos uma imagem letal porque temos bordas arredondadas, a imagem de fundo fica visível fora das bordas. Se você escolher outra cor, ela ficará mais visível. Para corrigir isso, vamos apenas mudar as dimensões. Então. Podemos criar uma imagem infantil do plano de fundo. Vou chamá-lo de campo da saúde. Também podemos usar o sprite quadrado e esticá-lo. Agora, mude a cor. Eu escolherei amarelo, depois mudarei a imagem e selecionarei o campo. Podemos ver algumas configurações. A ideia é alterar esse valor de preenchimento à medida que mudamos a saúde. Primeiro, vamos mudar o método de preenchimento de rádio para horizontal. Isso nos dará o comportamento desejado. Observe que a quantidade de preenchimento tem valores de 0 a 1. Vamos reduzir o zoom, selecionar o auxiliar e mudar as âncoras para o canto superior esquerdo. Segure para também definir a posição. Ajuste um pouco a posição. Talvez possamos mudar a cor da forma para tornar as bordas mais grossas. Vamos aumentar um pouco o tamanho. Agora, isso parece bom. Vamos ver como fica no simulador. Ótimo. Vamos ver o script de estatísticas do jogador. Primeiro, para obter acesso aos elementos da interface do usuário, precisamos incluir o namespace da interface. Em seguida, podemos criar uma variável de imagem. Vou chamá-lo de help fill. A ideia é alterar a quantidade de preenchimento toda vez que o jogador sofrer dano. Além disso, é uma boa ideia definir o valor total quando o jogo começar. Então, na função inicial, ajudamos a preencher essa quantidade de preenchimento igual à saúde. Mas, como eu disse, o valor deve ser 0-1. Então dividimos a saúde pela saúde máxima. Podemos copiar e colar esse código no player, usar a função de imagem, e isso é tudo o que precisamos codificar. Em Unity. Arraste a imagem do campo de saúde até o slot da imagem. Vamos tentar. Como você pode ver, temos saúde total. Vamos sofrer danos. Bom. O Health Bar reage. Vou adicionar mais elementos à barra de saúde apenas para melhorar a aparência. Não é essencial. Então, vou criar uma imagem infantil da forma. Use o sprite baseado em ícones e mude de cor. A âncora precisa ser chamada no meio esquerdo para também definir a posição e redimensionar um pouco a imagem. Vai para a esquerda. Vou chamar esse ícone de segurá-la. Em seguida, crie uma imagem infantil do suporte. Use o ícone de ajuda sprite e redimensione-o. As predefinições de âncora são relativas ao pai. Então, isso precisa estar no meio, exatamente como está. Agora. Podemos selecionar a barra de saúde e colocá-la na posição correta. Bem. Talvez as bordas devessem ser um pouco mais grossas. Podemos aumentar um pouco o tamanho. Você pode jogar com as configurações que quiser, cada jogo é diferente. Isso é tudo. E até a próxima palestra. 23. Ajudante de área segura: Oi pessoal. Nesta palestra, exploramos um recurso gratuito que nos ajudará a ajustar seus elementos para todos os dispositivos, por exemplo, cada dispositivo tem uma área segura na qual é garantido que os elementos sejam exibidos corretamente. Você pode clicar no botão da área segura para ver a área segura deste dispositivo. Cada dispositivo tem um design diferente e uma zona segura diferente. Vamos trocar o dispositivo. Por exemplo, mostra o XR de abril. Observe que, devido aos diferentes designs, a barra não está totalmente visível. Portanto, a ideia é colocar a barra do calcanhar e outros elementos da interface do usuário dentro da área segura de cada dispositivo. Felizmente, há um chamado ativo na Unity Asset Store. Você pode usar o Google Safe Area Helper. Deve ser a primeira opção. Isso é o que parece. É grátis. Então clique em Adicionar aos meus ativos. Obviamente, você precisa fazer login com seu ID Unity. Se você não fez isso. Depois disso, clique em Abrir no Unity ou qualquer outra opção. Na unidade, o gerenciador de pacotes deve abrir. Você pode ver que o gerenciador de pacotes tem a opção meus ativos na lista devem ser o auxiliar da área segura. Em seguida, você precisa baixá-lo. Eu já fiz isso. Então, eu tenho um botão de download. Depois de baixar os ativos, clique no botão Importar. Não precisamos da cena de demonstração. Se você quiser ver esse exemplo, sinta-se à vontade para incluí-lo, mas precisamos apenas desse script de área segura. No projeto. Você deveria ver o roteiro. Agora clique com o botão direito na tela e crie um objeto de jogo vazio. Vamos chamá-la de área segura. Em seguida, precisamos esticá-lo pela tela. O objeto da área segura precisa ser o pai da barra de saúde e outros elementos da interface do usuário que precisamos controlar. Em seguida, adicione o script da área segura. Certifique-se de que as formas x e y estejam habilitadas. Agora, se pressionarmos Play, a barra de saúde estará na área segura. Podemos testá-lo em outros dispositivos. Ótimo, funciona perfeitamente. Então, por exemplo, se tivermos a barra **** no canto superior direito, sem esse ativo, ela não estará nem um pouco visível. Mas com o ativo, parece exatamente como deveria. Isso é tudo para esta palestra. Nos vemos na próxima. 24. Animação de explosão: Nesta palestra, aprenderemos como criar animações, por exemplo, quando objetos são destruídos, usamos animação de explosão. Para se manter organizado. Vamos criar uma nova pasta para animações. Primeiro, precisamos encontrar os sprites que usaremos. Na pasta de inimigos. Podemos ver a explosão de Sprites. Vamos usar o primeiro na cena, renomeá-lo para explosão. Não podemos vê-la na cena por causa da ordem na camada, precisamos aumentá-la. Eu quero que essa explosão seja visível na frente de tudo. Acho que o jogador pediu dez e um fundo transparente é 12. É bom anotar essas coisas. Então, precisamos ir mais alto do que isso. Vamos configurá-lo para 20. Em jogos maiores e mais complexos, recomendo criar e usar mais camadas de classificação. Agora, vamos abrir algumas abas de animação. Vá para Window Animation e abra a guia Animação. Vamos também abrir a guia do animador. Usamos a guia animador para transições de animação na próxima aula. Em seguida, certifique-se de selecionar o objeto que você deseja animar. Para criar animação, clique no botão Criar. Selecione a pasta Animações que criamos. Vou chamar isso de exemplo de explosão de animação. Se você der uma olhada no objeto, agora temos o componente animador, que tem um controlador. Esses são componentes necessários para animações. Vá para a pasta Animações. Aqui você pode ver o controlador e o exemplo de animação que criamos. Em seguida, selecione o objeto de explosão e arraste todos os Sprites da explosão para a linha do tempo. Vamos ver como fica. Animação, mas ainda é rápida. Precisamos diminuir a velocidade. Selecione a explosão, expanda as opções e escolha Mostrar taxa de amostragem. Agora você pode definir os quadros por segundo para essa animação. Por padrão, é 60, vamos configurá-lo como 12. Parece muito melhor. No entanto, você pode ver que a animação se repete. Precisamos ir até a pasta Animações e selecionar nosso exemplo de animação de explosão. Precisamos desativar o tempo de loop. Bom. É uma boa ideia destruir o objeto após o término da animação. Então, vamos criar um novo C sharps. Vou chamar isso de explosão. O script para o objeto. Abra isso. Não precisamos da função de atualização. No início. Vamos destruir o objeto com um atraso de 2 s. Vamos testá-lo. A animação é executada uma vez e após 2 s, o objeto é destruído e podemos vê-lo na hierarquia. Agora, podemos criar um pré-fabricado. Exclua o objeto da cena. A ideia é gerar esse pré-fabricado quando meteoros ou o jogador forem destruídos. Como o valor de todos os inimigos é essa explosão pré-fabricada, vá para o script inimigo. Vamos criar uma variável de objeto de jogo. Agora, vá para a métrica do script. Nessa sequência antes de destruirmos o meteoro, vamos delimitar a explosão pré-fabricada. Podemos usar a posição e a rotação do ouvido médio. Vamos também criá-lo. Quando o medidor colide com o jogador. Em seguida, vá para o script de estatísticas do jogador. Precisamos dessa explosão de limite pré-fabricada quando o jogador morre. Isso é tudo o que precisamos para codificar. Vamos conectar as coisas no Unity. Selecione o player e vá para a pasta Prefabs. Arraste a explosão pré-fabricada para o slot vazio. Faça o mesmo por 3 m. Vamos tentar. Com isso, lance spam de meteoros e explosões. O mesmo acontece quando destruímos a nave espacial. Ótimo. Na próxima palestra, criaremos animações para a nave espacial e transições entre elas. 25. Animação e transição: Olá a todos. Nesta palestra, criamos essa animação piscando quando o jogador tira a imagem. Primeiro, vá para a pasta Animações, crie uma nova pasta para o player. Animações. Selecione o player. Em seguida, crie a animação, verifique se ela está na pasta correta. A animação será chamada de inativa. O sprite que precisamos está na pasta sprites. Normalmente, em animações inativas, há algum movimento do objeto que animamos, mas, nesse caso, usaremos apenas um sprite padrão. A animação inativa será um sprite estético. Então selecione o jogador, jogue o sprite no início. E vou colocar o mesmo sprite em 1 s na linha do tempo. Agora, vamos criar mais uma animação. Vou chamar isso de dano. Em seguida, use o sprite branco. Vou mudar a taxa de amostragem para 30. Então, novamente, use o mesmo sprite, coloque-o em 0,06 na linha do tempo. Como a taxa de amostragem é, a duração será um pouco maior. Você pode expandir a distância entre os quadros para aumentar a duração, se necessário. Agora, você pode ver a animação, apenas um sprite branco. Normalmente, para pré-visualizar a animação, você pode usar os botões de pré-visualização e reprodução. Em seguida, precisamos desativar o loop para a animação de danos. Em seguida, vá para o animador, selecione o player. Agora você pode ver os estados de inatividade e dano. Precisamos criar as transições entre eles. O estado das laranjas é a animação padrão. o botão direito do mouse no estado inativo e crie uma transição para o estado danificado. Faça o mesmo na direção oposta. Clique na seta de transição para ver algumas configurações. Para fazer a transição de um estado para outro, usamos o tempo ou as condições de saída. Para essa transição, usaremos as condições. Então, precisamos criar parâmetros, abra a guia Parâmetros. Em seguida, podemos adicionar quatro tipos. Nesse caso, precisamos de um gatilho. Vamos chamar isso de dano. Ativaremos esse gatilho por meio de um script. Agora podemos desativar o horário de saída. Precisamos de uma transição imediata. Então, defina isso como zero ou condição. Vamos usar o gatilho. Nós fizemos. Observe que você pode ter mais parâmetros e usá-los como condições. Agora, ambas as condições precisam ser estabelecidas para que a transição aconteça. Claro, precisamos apenas do gatilho. Portanto, exclua esse exemplo e selecione a transição de dano para Idle. Aqui, usaremos o horário de saída em vez das condições. Se definirmos o horário de saída para um, isso significa que a transição acontecerá quando a animação do dano for concluída. Se, por exemplo, você definir o tempo de saída para 0,5 , a transição acontecerá quando 50% da animação for concluída. Defina isso como um. A duração da transição precisa ser zero, por exemplo, mudança. Agora, quando concluímos as configurações do script, precisamos ativar o gatilho prejudicial quando um jogador tira a imagem. Abra o script de estatísticas do jogador. Primeiro, precisamos criar um componente Animator na função de danos técnicos para ativar o gatilho. Usamos qualquer gatilho de conjunto de dados. Entre parênteses, escrevemos o nome do parâmetro. Certifique-se de soletrar corretamente. Vamos tentar. Não se esqueça de designar o animador. Tiramos a imagem e podemos ver a animação do dano. No entanto, se você tomá-los várias vezes em um curto período de tempo, podemos simular isso no momento. Mas em uma situação várias balas atingiam a nave espacial, a animação entraria no modo de spam. A nave espacial estaria na animação de danos o tempo todo. Então, vamos evitar isso no script em uma variável de parafuso e definir o valor como verdadeiro. Em seguida, primeiro verificamos se essa variável é verdadeira. Em seguida, ative a animação. E aqui também precisamos adicionar uma função anti-spam. Vamos criar um enumerador anti-spam. Aqui, definimos a variável bola como falsa para que possamos ativar a animação. Em seguida, esperamos um certo tempo. Vou definir o tempo de espera para 0,15. Em seguida, redefina a variável da bola. Para chamar essa função, usamos start corroutine. Agora, quando o jogador tirar a imagem várias vezes em um intervalo de 0,15, a animação será chamada apenas uma vez. Você pode aumentar o intervalo, se quiser. E é isso, para esta palestra, temos transições de animação. 26. Tiro em inimigo: Olá a todos. Nesta palestra, criamos um inimigo atirador. Esta é uma ótima oportunidade para implementar o conhecimento de palestras anteriores, como movimento, filmagem e animações. Mas também aprenderemos algumas coisas novas. Então, será uma palestra um pouco mais longa. Vamos começar. Primeiro, para atirar em inimigos, usamos uma nave espacial roxa. Mude o nome e defina a camada como inimiga. Aumente a ordem na camada de classificação. Lembre-se de que todos os inimigos vão para a ordem cinco. Em seguida, vamos adicionar componentes, corpo rígido 2D e configurá-lo como cinemático. Em vez de usar o colisor de polígonos 2D, usaremos dois colisores de livros e depois os mesclaremos. Então, adicione um colisor de caixas 2D. Clique no botão editar colisor. Vamos mudar a forma. Em seguida, adicione outro box collider 2D. Novamente, mude a forma. Isso não é muito preciso, mas seu desempenho é eficiente e funcionará muito bem. Para mesclar colisores, usamos o colisor composto 2D select usado pelo composto para cada colisor. Observe que temos um colisor. Não há linhas que se cruzem. Em seguida, selecione a opção Is Trigger no colisor composto. Agora, vamos criar pontos de tiro. Vou chamar isso de Canaã esquerda. Mova o objeto para a posição de tiro. Em seguida, duplique-o e renomeie-o para escrever Canaan. Coloque-o do outro lado. Vamos criar um script. Vou chamá-lo de inimigo roxo. Selecione o inimigo e adicione o script. Abra isso. Primeiro. Essa classe precisa ser uma classe infantil da classe inimiga. Só para lembrar, a classe inimiga tem algumas variáveis e funções que serão herdadas por todas as classes infantis, incluindo a classe inimiga roxa. Na escrita roxa do inimigo. Vamos criar variáveis adicionais. Primeiro, precisamos de uma velocidade variável flutuante. Então, precisamos de um dímero, dímero e um intervalo de filmagem. Vamos criar as variáveis de transformação para as posições de disparo. Em seguida, crie uma variável de objeto de jogo para o bullet prefab. Vamos usar todas as variáveis de que precisamos para mover o inimigo. Vamos usar a variável de corpo rígido que herdamos da classe mãe. Defina o vetor de velocidade para baixo multiplicado pela velocidade. Para fotografar, precisamos criar um cronômetro na função de atualização. Primeiro, aumentamos o cronômetro por tempo. DeltaTime a cada quadro. Em seguida, verificamos se esse cronômetro é maior ou igual ao intervalo de filmagem. Se isso for verdade, então podemos atirar. É claro que usamos a função Instantiate. Instancie a bala pré-fabricada na lata esquerda e posicione, use a identidade quaterniônica para rotação. Depois, podemos copiar e colar esse código. Basta substituir a Canaã esquerda pela Canaã direita. Após a morte, só precisamos reiniciar, caso o cronômetro chegue a zero. Agora, o inimigo pode se mover e atirar. Em seguida, vamos resolver quando o inimigo colide com o jogador. Como estamos usando um gatilho, precisamos do On Trigger Enter para a função. Primeiro, verificamos se o objeto está no jogador usando a função de comparação. Então, por meio dos estados do jogador, podemos chamar a função de receber dano do jogador. Use a variável de dano, que é herdada da classe principal. Em seguida, instanciamos o pré-fabricado de explosão. Depois da dívida. Nós destruímos o inimigo. Então, tudo o que fizemos no roteiro é conhecido em palestras anteriores. É por isso que eu vou um pouco mais rápido. Agora, vamos substituir as funções virtuais feridas e, posteriormente, adicionaremos animação na sequência do rebanho. Por enquanto, na sequência da morte, na sequência da morte, que é chamada quando a saúde do inimigo está abaixo de zero, instanciaremos a explosão pré-fabricada. Em seguida, destrua o inimigo. Obviamente, os inimigos não podem colidir com o jogador ou o jogador não o destrói. Isso significa que o inimigo sairá da tela para destruir objetos que saem da tela, usamos a própria função que se tornou invisível. Vamos salvar isso e ir para a união. Na unidade, precisamos definir variáveis. Vou ajustar a Saúde para três. Então precisamos de um corpo rígido. Os danos na colisão podem ser um. Em seguida, use o pré-fabricado de explosão que fizemos. Defina a velocidade, por exemplo para cinco e o intervalo de disparo para um, que significa 1 s. Vamos conectar os pontos de disparo esquerdo e direito. Em seguida, precisamos criar uma bala pré-fabricada. Então, vamos aos sprites. Nós temos esse Bullet Sprite. Renomeie isso. É muito grande. Então, vamos diminuir a escala. Eu acho que isso é bom. Vamos mudar a ordem na camada. Em seguida, vamos criar uma nova camada para colisões. Vou chamá-lo de projéteis inimigos. Defina a camada para projéteis inimigos. Vamos para a matriz de colisão. Os projéteis inimigos precisam colidir com o jogador, ignorar outras colisões. Agora, vamos adicionar um corpo rígido 2D e mudar o tipo para cinemático. Em seguida, adicione o colisor circular 2D. Podemos diminuir um pouco o raio. Precisamos criar um script chamado Purple bullet. O roteiro da bala. Abra isso. Precisamos de variáveis de dano e velocidade. Também precisamos de uma variável 2D de corpo rígido. Na função de partida, vamos obter o componente 2D do corpo rígido. A bala precisa cair. Portanto, defina o vetor de velocidade para baixo multiplicado pela velocidade. Não precisamos da função de atualização. Vamos causar dano ao jogador quando ele colide com uma bala. Usamos o On Trigger Enter para a função. Acho que no Unity esqueci de configurar o colider como um gatilho. Faremos isso mais tarde. Aqui, como de costume, verificamos o jogador , chamamos o jogador de receber dano e destruímos a bala. Também usamos a própria função de tornar-se invisível para destruir a bala quando ela sai da tela. Isso é tudo para o roteiro do bullet. Em Unity, definir dano e velocidade também habilita a opção Is Trigger. Podemos criar uma bala pré-fabricada. Exclua um da cena. Agora selecione o inimigo e use a bala pré-fabricada. Vamos tentar. Movimente o inimigo e pressione play. Funciona bem. Agora, precisamos criar animações para o inimigo. Precisaremos dessa janela de animação. Selecione o inimigo e crie uma animação. Vou chamá-lo de inimigo inativo. Use o sprite inimigo roxo. Vamos criar mais uma animação e chamá-la de dano inimigo. Use o sprite branco. Defina as amostras para 30 e, novamente, use o sprite branco. Vá para a pasta Animações, selecione os danos do inimigo e desative o tempo de loop. Agora vá para a guia do animador. Essa é uma boa prática para transições de animação que abordamos em palestras anteriores. Vamos criar duas transições. Em seguida, crie um dano de parâmetro. Selecione a transição do ídolo para o dano. Usar o parâmetro é uma condição. A duração deve ser zero e desabilite o tempo de saída para outra transição, deixe o horário e apenas altere a duração da transição para zero. Vá para o script roxo do inimigo. Na verdade, vamos ao roteiro do inimigo. Normalmente, todos os inimigos usam um animador. Então, vamos criar um componente de animador. Em seguida, volte para a sequência do rebanho, ative a transição com o gatilho. Em Unity, selecione NME. Precisamos designar o animador. Role para baixo e você verá. Expanda isso e use o animador. Vamos tentar. Está funcionando bem. Também podemos criar uma função anti-spam para o inimigo, assim como fizemos para o jogador. Mas vou te mostrar uma abordagem diferente. Na guia do emissor abaixo das camadas, você pode ver a camada base, seu índice é zero e nós o usaremos no script. Em seguida, selecione o estado de dano do inimigo. No Inspetor, você deve ver o campo da tag. Use a tag IMG. De volta ao roteiro. Primeiro, verificamos se a animação já está sendo executada. Usamos a função para obter o estado atual dos animadores com o índice da camada base. Em seguida, verifique se essa animação tem uma tag. Neste caso, o mg. Se isso for verdade, significa que a animação está sendo executada no momento. Então, basta retornar, não o ative mais uma vez. Essa é uma abordagem um pouco diferente para a mesma coisa. Isso é tudo o que precisamos para codificar. Só há mais uma coisa a fazer. Precisamos criar um inimigo roxo pré-fabricado. E agora terminamos. Temos um inimigo atirador. Nos vemos na próxima palestra. 27. Inimigo verde: Olá a todos, bem-vindos ao desafio do inimigo. Seu desafio é criar uma segunda nave espacial inimiga. A espaçonave precisa ter um comportamento semelhante ao dos metros, só que um pouco mais rápida e com largura para danificar a animação. Essa é uma boa prática para lembrar tudo o que aprendemos nas palestras anteriores. Ok, vou selecionar o pré-fabricado inimigo verde. Você pode ver que ele precisa estar na camada Inimigo. A ordem de classificação precisa ser cinco. Talvez se você quiser ter certeza de que naves espaciais estão na frente dos meteoros, você pode aumentá-la ou diminuir os meteoros para quatro. Você pode ver que temos o script verde do inimigo. Temos um corpo cinemático e rígido. Estamos aqui para colisores e um colisor composto. E temos um estimador para animações. Agora abra o script. Primeiro. O inimigo precisa ser uma classe parental. Usamos uma velocidade variável, como de costume. Definimos a velocidade na função de partida. Para colisões. Usamos o On Trigger Enter para a função, depois usamos a ferida e isso são sequências. Basicamente, é um código de copiar e colar da aula anterior. Acabei de deletar o tiroteio. No final das contas, temos a própria função que se tornou invisível no Unity Vamos ver as transições de animação. Temos duas animações e transições, assim como na aula anterior, as configurações são as mesmas. Agora, quando tivermos dois tipos de inimigos, vamos criar uma chave inglesa inimiga na próxima aula. Te vejo lá. 28. Spawner inimigo: Olá a todos. Agora, quando tivermos alguma peça pré-fabricada, vamos criar uma chave inglesa. Primeiro, vamos criar um objeto de jogo vazio. Redefina o componente de transformação. Em seguida, vamos criar o script do gerador de inimigos. O script para o objeto. Abra isso. Como se trata de um spammer, podemos usar algum código do parceiro meteoros. Lembre-se de que, primeiro, precisamos garantir que os objetos passem para fora da tela. Então vá até o parceiro de medidores. Vamos copiar essa parte que usamos para posições de desova. Eles também precisam copiar e colar a função definir limites. Bom. Para organizar o script, vamos usar o cabeçalho do atributo e chamá-lo de pré-fabricado inimigo. Vamos usar uma variedade de objetos de jogo para pré-fabricados inimigos. Então, precisamos de um cronômetro inimigo flutuante. Em seguida, use o espaço do atributo para criar espaço entre as variáveis. Precisamos de uma variável flutuante, o tempo de spam do inimigo. Então, vamos criar uma função que gerará inimigos. Primeiro, vamos aumentar o cronômetro por tempo, tempo delta. Se esse cronômetro for maior ou igual ao tempo de interresposta, precisamos gerar inimigos. Como temos dois inimigos, vamos escolher aleatoriamente um. Use aleatoriamente que variam entre zero e o comprimento do inimigo. Isso garantirá que o código funcione com qualquer número de pré-fabricados inimigos. Em seguida, instancie o inimigo usando o índice de seleção aleatória. Para posição, usamos a nova coordenada x do vetor 34. Use aleatoriamente que se organizem entre as posições da maxila esquerda e máxima direita. Para a coordenada y, vamos usar a posição y. E para o eixo z, podemos usar zero. Esse é o mesmo procedimento de antes. Para rotação, podemos usar quaternião dessa identidade. Depois da dívida, reiniciamos o cronômetro. Chame essa função na atualização. Isso é tudo o que precisamos para codificar. Vamos para a unidade. Vamos atribuir prefabricações inimigas. Então, podemos gastar um inimigo a cada 2 s. Vamos tentar. Podemos ver o inimigo roxo. E podemos ver o inimigo verde. Bom. Isso é tudo. Nos vemos na próxima palestra. 29. Condição de vitória: Oi pessoal. Nesta palestra, criamos condições de vitória. A ideia é que o jogador sobreviva por um certo tempo e, após a morte, o jogo termine. Primeiro, vamos criar um novo objeto de jogo. Em seguida, podemos criar um script. Vou chamar isso de condição de vitória. O script para o objeto e abra-o. Precisamos de um dímero flutuante. Então, precisamos de uma flutuação possível quando o tempo é variável. Também precisamos de uma variedade de objetos de jogo que usaremos para geradores na função de atualização. E vamos aumentar o cronômetro por tempo. DeltaTime a cada quadro. Em seguida, verifique se esse cronômetro é maior ou igual ao possível quando houver tempo. Se isso for verdade, isso significa que o jogador sobreviveu e podemos desativar os geradores. Usamos o contador for loop. I é zero. Percorremos o ciclo enquanto I é menor do que comprimento original e aumentamos em um a cada etapa. No loop, desativamos esse parceiro com o índice i. Quanto mais explicado esse loop, digamos que temos dois spammers na matriz. Os índices são 0,1. O comprimento da matriz é dois. Portanto, o contador I será zero no início. Em seguida, verificamos se zero é menor que o comprimento da matriz, que é dois. Em nosso exemplo, isso é verdade. Então, desativamos o spammer com índice zero. Então, aumentar I em 11 é menor que dois. Desativamos esse parceiro com o índice um, aumentamos I em um. Agora dois não é menos do que dois. Saímos do circuito. Depois de desativarmos os spammers, alguns dos inimigos ainda estão na tela porque esses inimigos ainda podem destruir o jogador. Eu chamo isso de possível quando está na hora. Precisamos criar uma função que verifique se o jogador está vivo após todos os inimigos saírem da tela ou serem destruídos , para que possamos mostrar uma tela de vitória ou derrota. Tudo isso faremos por meio do gerenciador de jogos. Eu escrevo esse código nos comentários para lembrar a você e a mim o que precisa ser feito em outro script e depois o chamo aqui. Na próxima palestra, criaremos um controlador de painel que gerenciará telas de vitória ou perda. Por enquanto, vá para Unity. Digamos que o possível quando o tempo é de 10 s, então precisamos adicionar spammers à matriz. Temos inimigos e meteoros, caçadores. Vou organizar um pouco a parte superior aqui. Vamos testá-lo. Sobreviva 10 s e então os inimigos devem parar de gastar. Vou tentar não morrer. Grade. Você pode ver que o limite está interrompido. O próximo passo é criar painéis de ganhar e perder, o que faremos na próxima palestra. Te vejo lá. 30. Controlador de painel da UI Mesh Pro: Oi pessoal. Vamos criar telas de ganhar e perder e um script que terá funções para ativar essas telas. Primeiro, vamos criar uma nova imagem. Vou chamá-lo de painel. Observe que essa imagem não vai para a área segura. Em seguida, podemos usar o quadrado como uma imagem de origem. Então precisamos esticá-lo. Em seguida, mude a cor. Vou usar o Blake. E vamos torná-lo um pouco transparente. Então, vamos criar uma nova imagem. Ele precisa ser um objeto secundário do painel. Vou chamá-la de tela de vitória. Para a imagem de origem, usaremos esse sprite de painel grande. Note que eu já fiz nove fatias. Confira a palestra do Health Bar para obter mais informações sobre os nove slides. Vamos usar o sprite garantir que o tipo de imagem seja cortado. Então, podemos mudar as dimensões. A imagem precisa estar no meio da tela. Vamos ver como fica no simulador. Isso é bom. Você pode alterá-lo como quiser. Agora, vamos adicionar texto à tela da veia. Selecione o texto Mesh Pro. Esta é a primeira vez que usamos texto, então precisamos importar texto Mesh Pro. Vamos renomeá-lo para quando envia mensagens de texto. Então, vamos ajustar o momento certo. Essa não é a aparência final do para-brisa, é apenas um esboço e um espaço reservado. Por enquanto, é uma questão de funcionalidade. Mais tarde, adicionaremos mais textos com três botões e outros elementos da interface do usuário. Então vamos duplicar o pára-brisa. Chamou isso de tela solta. Altere o texto para falhar. Ok, agora temos telas básicas de ganhar e perder. Vamos selecionar o painel e agora adicionar o componente de grupo de telas. O grupo Canvas tem algumas opções interessantes que podemos controlar. Por exemplo, podemos alterar as configurações do Alpha para todos os objetos do grupo. Essas telas terão botões. Portanto, para pressioná-los e interagir com eles, precisamos ativar as transmissões de raios em bloco interativas ao vivo. Podemos definir o Alfa como zero. Então, vamos também desativar as telas de ganhar e perder. Vamos criar um novo objeto de jogo vazio. Vou chamá-lo de controlador de painel. Em seguida, vamos criar uma pasta para scripts de interface de usuário. Crie um novo script. Controlador de painel. O script para o objeto e abra-o. Primeiro, precisamos da variável de grupo canvas. Em seguida, precisamos jogar variáveis de objetos. Um para pára-brisas e outro para tela Louis. Não precisamos da função de atualização. Vamos criar uma função que ativará o para-brisa. Primeiro, definimos o valor alfa como um. Em seguida, ativamos o para-brisa. Vamos também criar uma função que ativará a tela. É um procedimento similar. Por enquanto. Isso é tudo o que precisamos para codificar no Unity. Vamos conectar componentes e objetos com o script. Precisamos do componente de grupo de telas do objeto do painel e, em seguida, conectamos as telas. Agora, a questão é quando e como chamar as funções que ativarão essas telas. Talvez você esteja pensando: vamos conectar o controlador do painel e quando estiver em condições. Não faça isso, em vez de fazer uma conexão direta entre eles, criaremos um gerenciador de jogos. É uma espécie de palestra preparatória. No próximo vídeo, conectamos tudo isso por meio do gerenciador de jogos. Nos vemos lá. 31. Gerente de jogos: Olá a todos. Nesta palestra, criamos um gerenciador de jogos. Novamente, Manager é um script que controla aspectos importantes do jogo e é usado em muitos outros scripts para ajudar a executar o jogo corretamente. Primeiro, vamos organizar um pouco a parte superior aqui. Vamos criar um novo objeto de jogo vazio. Vou ligar para os gerentes de TI, pois teremos gerentes diferentes no jogo. Em seguida, novamente, crie um novo objeto de jogo vazio. Vou chamá-lo de End Game Manager. Esse gerente, como seu nome diz, será responsável por controlar funcionalidade quando o nível terminar ou o jogador morrer. Vamos também criar uma pasta de gerenciador para scripts. Crie um novo script e chame-o de End Game Manager. O script para o objeto e abra-o. Como esse gerenciador de jogos será usado em muitos scripts, precisamos criar uma instância estática dessa classe. Então, escrevemos public static, o nome da classe, que é um gerenciador no jogo. Em seguida, escolhemos um nome para essa instância, eu a chamarei de gerente final. Isso é apenas uma variável vazia. Agora, precisamos atribuir um valor na função de despertar, que é chamada antes da função de início. Definimos a instância e o gerenciador para essa classe. Agora, tudo o que essa classe contém variáveis, funções e assim por diante. Podemos usá-lo com a instância do gerenciador final. Observe que a palavra-chave static nos dá acesso fácil a outros scripts. O que significa acesso fácil? Vou te mostrar um exemplo muito simples. Vamos criar um fim de jogo variável de bola pública. Agora vamos ao script de estatísticas do jogador. Quando o valor da saúde do jogador é menor ou igual a zero, isso significa que o jogo acabou. Então, podemos simplesmente escrever End Game Manager, esse gerenciador final, aquele GameOver e definir a variável como true. Observe que não há conexão direta entre os estados dos jogadores e os scripts do GameManager. Não preciso usar o componente get ou conectar nada no Unity. Isso funcionará como está. Agora. Vamos adicionar funcionalidade ao gerenciador final do jogo. Precisamos funcionar quando jogamos e perdemos o jogo , para garantir que sejam públicos. Então, podemos chamá-los em outros scripts. Se precisarmos deles. Na função do jogo, precisamos ativar a tela, desbloquear o próximo nível, salvar a pontuação e assim por diante. Por enquanto, vamos apenas ativar a tela. Vamos ver o script do controlador do painel. Lembre-se de que, no script do controlador do painel, criamos funções que ativarão as telas. Portanto, precisamos de uma maneira de usá-los no script do gerenciador de jogos. Agora, vou te mostrar a estrutura que estamos construindo. Você sabe que na cena temos o End Game Manager e o controlador do painel. O controlador tem algumas funções que controlam os elementos da interface do usuário. Também temos o objeto da condição da veia na cena. No script de condição de vitória, precisamos chamar funções que ativarão os elementos da interface do usuário. Também temos um jogador na cena e também precisamos ativar elementos de interface do usuário do script de teste do jogador. Poderíamos conectar diretamente o controlador do player a esses objetos no inspetor Unity ou usar o componente getc. Mas queremos evitar isso. Não é prático. E como despesa do jogo, haverá mais e mais objetos e tudo estará diretamente conectado a tudo. É uma bagunça. Só precisamos conectar os controladores, no nosso caso, o controlador do painel ao gerenciador de jogos. E como o gerenciador é estático, ele tem acesso fácil a todos os scripts. Perceba a vantagem, tudo passa por um canal e esse é o gerenciador do jogo. O truque é conectar com eficiência o gerenciador e os controladores. Em vez de o gerente procurar o controlador, o controlador se registrará no gerente. Então, no script do gerenciador, vamos criar a variável do controlador do painel. Em seguida, podemos criar uma função pública para registro, registrar o controlador do painel. Será necessário um parâmetro, controlador de painel na função, defina a variável do controlador do painel para PC. Agora vá para o script do controlador do painel. A função de início, vamos chamar a função de registro que criamos. Para a função, passaremos essa classe. Observe como isso é fácil porque o gerenciador é uma classe estática. Agora, no gerenciador, podemos usar a variável do controlador do painel para ativar os elementos da interface do usuário. Agora, vamos criar a função de resultado do jogo. Se o fim do jogo for falso, então podemos encerrar o jogo da vitória ou então podemos chamar o jogo de Lewis. Agora vá para a condição da veia. Quando o tempo expirar, desativamos esses marcadores e poderíamos chamar diretamente a função de resultado do jogo. Isso funcionaria corretamente. Não há nenhum erro aqui, mas temos um pequeno problema. Quando chamamos a função de resolução do jogo, há uma chance de que ainda haja alguns inimigos na tela. Esses inimigos poderiam destruir o jogador. Portanto, precisamos introduzir algum atraso entre a ativação desses parceiros e chamada da função resultante do jogo volta ao script do gerenciador. Caso contrário, usamos funções corrotineiras. Vamos criar a função de sequência de resolução do enumerador ocular . Podemos esperar, por exemplo, 2 s. Em seguida, encerraremos o jogo do resultado. Agora, crie uma função pública de início e resolução de sequência. Aqui, usamos start correlate para chamar a função de enumerador ocular. Essa é a função que chamaremos no script de condições de vento. Observe que depois que o cronômetro atingir o momento em que essa condição será atendida, cada quadro, ele executará constantemente esse código. Então, nós apenas desativamos esse objeto do jogo após a primeira execução. Ótimo, vamos tentar. Precisamos sobreviver 10 segundos para que os nervos espinhais se ativem. E depois disso, temos dois segundos extras antes de ganhar ou perder a tela aparecer. Depende. Sobrevivemos a esses dois segundos extras? Como você pode ver, funciona. Agora, vamos ao script de estatísticas do jogador. Depois que o jogador for destruído, também precisamos chamar a sequência inicial de resultados. Para evitar várias chamadas de scripts diferentes. Antes de abrirmos a cortina, vamos parar a corrente. Se já estiver ativo, use stop carótida. Precisamos passar uma string, mas podemos usar um nome de n, escolher resolver, sequência. Vamos tentar destruir o jogador. E devemos ver uma tela solta. Ótimo, isso é tudo para esta palestra. Nos vemos na próxima. 32. Padrão de singleton: Olá a todos. Vamos atualizar o script final do gerenciador de jogos com o padrão Singleton. Um padrão de termo único significa que só pode ser um objeto do mesmo tipo em todo o jogo. Isso significa que devemos ter apenas um gerente final de jogo em todo o jogo. Isso é muito útil para classes estáticas pois precisamos ter cuidado com o desempenho. Neste ponto, temos uma cena. Vamos chamá-lo de nível um. Agora, duplique-o e chame-o de nível dois. Quando passamos de uma cena para outra, todos os objetos da sequência anterior são destruídos. Por exemplo, vamos do nível um para o nível dois. Todos os objetos do nível um são destruídos e unidos, embora sejam novos objetos que se comportam em um nível para conectar todas essas coisas. Nós ganhamos um jogo. Quando um jogador joga o jogo várias vezes, ele pode iniciá-lo em diferentes níveis. A ideia é, de alguma forma, preservar o técnico do nível em que os jogadores começaram. Por padrão, temos alguns objetos em cada cena e cada pecado tem o objetivo final do gerenciador de jogo. Então, vamos ver o script final do gerenciador de jogos na função despertar. Primeiro, verificamos se a instância é nula. Em seguida, defina a instância para essa classe. Em seguida, usamos essa função de não destruir o onload. Não queremos destruir esse objeto do jogo. Só para te mostrar, eu vou rodar o jogo. Clique no botão de pausa e você verá que o gerente final do jogo é colocado em outra cena chamada don't destroy onload. Digamos que comecemos pelo jogo. No primeiro nível. Subimos o nível de todos os objetos, exceto que o gerenciador final do jogo será destruído por causa da função não destrua no carregamento. Esse gerente passará para o nível dois. Mas agora temos dois gerenciadores de jogo, um do primeiro nível e outro dia em que estava por padrão no segundo nível, precisamos destruir um do segundo nível no script. Use else, o que significa que a instância do gerenciador final não é nula. Em seguida, destrua este objeto do jogo. Portanto, o GameManager do nível dois executará a função de despertar e a instância do gerenciador final não será nula porque a detectará do gerenciador que veio do nível um. Então, em nosso exemplo, o gerente do nível dois, executaremos essa parte do código e destruiremos a si mesmos. E é isso. Criamos um padrão de singleton. Nas próximas palestras, aprenderemos como alternar entre elas, já que nos vemos lá. 33. Alterar níveis/cenas: Olá a todos. Vamos ver como podemos mudar, pois usando botões para organizar a hierarquia, vamos criar um novo objeto de jogo vazio. Chame isso de controladores. Podemos colocar o controlador do painel embaixo dele. Agora vamos criar um novo objeto e chamá-lo de controlador de botão. Em seguida, crie um novo script C-sharp. Vou chamá-lo também de botão Controller no script do objeto. E abra. Primeiro, para mudar, já que precisamos usar esse namespace de gerenciamento, podemos excluir as funções padrão. Agora, vamos criar uma função pública de agitação do nível de carga. É necessário um parâmetro de string. Vou chamá-lo de nome de nível. Para carregar outra cena, usamos o Gerenciador de Cenas que carrega a cena. E então colaremos a string, que será o nome do nível. Também podemos carregar novas cenas usando números inteiros e criar índices. Então, vamos criar uma função pública int de nível de carga que usa um índice de nível de parâmetro. Certifique-se de que as funções sejam públicas. Aqui. Também usamos o Scene Manager que carrega, mas pagamos pelo índice do nível inteiro. Onde encontrar índices de construção para níveis. Vá para o arquivo Unity e crie as configurações. Aqui você encontra, já que isso será incluído no jogo, nosso nível um está incluído. E aqui você pode ver que o índice de construção é zero. Podemos ir até a pasta Scenes e adicionar um nível dois ao cinto. Você pode ver que o índice dele é um. Então, para carregar o nível por índice, passaríamos um desses números. Ótimo. Agora vamos criar botões para que possamos chamar as funções que criamos. Primeiro, vamos selecionar o painel e aumentar o Alpha para que possamos ver o que estamos fazendo. Em seguida, clique com o botão direito do mouse no para-brisa e crie um botão. Vou chamá-lo de botão home. Podemos deletar o texto. Vamos mudar a imagem de origem do botão. Use o ícone inicial sprite. Clique no botão Definir tamanho nativo. E vamos mudar a predefinição da âncora. Escolha a parte inferior central. Podemos movê-lo um pouco para baixo. Isso parece bom por enquanto. Você pode ver que o botão tem um evento onclick. Isso é chamado quando clicamos no botão. Vamos adicionar um novo evento. A ideia é chamar funções do controlador de botão. Então, vamos arrastar o controlador do botão. Em seguida, escolhemos uma função para chamar a partir do script do controlador de botão. Vamos usar o nível de carga da função string. Agora podemos escrever o nome da cena que queremos carregar. Mais tarde. Esse botão levará ao seletor de nível principal, que não temos agora. Portanto, use o nível dois. Você também pode usar a função sozinha, nivelar int e escrever o índice de construção. Mas neste projeto, usaremos principalmente a opção string. Usaremos um carregamento com a fatura, o índice, apenas para reiniciar o nível. Eu só queria te mostrar as duas opções. Em seguida, vamos ativar uma tela perdedora e criar dois botões. Primeiro, também seremos o botão home. Mude a posição. Duplique-o e chame esse botão para tentar novamente. Mude o ícone. Agora podemos adicionar o evento onclick aos botões, ao botão home. Vamos adicionar um nível de carga da função string. Por enquanto, deixe-o vazio. Vamos mudar isso mais tarde. Use a mesma função para o botão de repetição. Aqui você pode escrever o nome da cena atual, mas não quer escrever sequências para cada botão de repetição em cada nível. É muito trabalhoso. Então, vamos ao script do controlador de botões. Crie um nível de função de reinicialização pública. Usamos o Scene Manager para carregar a cena. E então usamos para construir o índice do pecado atualmente ativo. Então, certo, Scene Manager que é visto ativamente, parênteses, aquele índice construído. Isso reiniciará qualquer nível em que o jogador esteja. Portanto, para o botão de tentar novamente, use o nível de reinicialização da função. Ainda não terminamos, mas vamos tentar ver possíveis bugs, desativar as telas e alterar o valor alfa para zero. Vamos tentar vencer. Vou acelerar um pouco o tempo. Você pode ver o para-brisa e o botão. Pressione e estaremos no nível dois. Funciona bem. Vamos sair do modo de jogo e iniciá-lo novamente. Agora, vamos tentar destruir o jogador. Nós temos a tela de Lewis. Vamos reiniciar o nível. Vou clicar no botão de pausa para mostrar um problema. Você pode ver que a variável game over ainda é verdadeira mesmo quando reiniciamos o nível deles. É porque o gerenciador final do jogo é estético Singleton e todas as variáveis mantiveram seus valores. Então, agora, se continuarmos jogando e chegarmos ao final do nível, ainda teremos a tela errada. Felizmente, existe uma solução simples para isso. Vá para as estatísticas do jogador. Na função start, definimos o valor como false. Agora, toda vez que permitimos níveis, a variável é definida como falsa. Podemos fazer mais uma coisa no roteiro de condições de vento. Na função de atualização, podemos verificar se a variável game over é verdadeira. Depois, basta retornar e não executar o código abaixo. Isso significa que o cronômetro parará quando o jogador for destruído. Vamos tentar agora. Destruiu o jogador. Reinicie o nível. Tentei vencer após o reinício. E nós temos o pára-brisas. Agora tudo funciona. Obviamente, não queremos uma transição instantânea entre os níveis. Precisamos de algum tipo de efeito de desvanecimento que criaremos na próxima aula. Te vejo lá. 34. Desvanecer entre cenas: Oi pessoal. Vamos criar um bom efeito de desvanecimento entre o carregamento. Pois vou criar esse efeito em uma tela separada e também ler o padrão Singleton. Então, vamos criar uma nova tela e chamá-la de Canvas fader. Altere-o para dimensionar com o tamanho da tela. Também podemos mudar a referência, a resolução. Então, vamos criar uma imagem. Vou chamá-lo de plano de fundo ou imagem de origem. Podemos usar o quadrado, esticá-lo e mudar de cor para preto para garantir que essas imagens pretas sejam visíveis na frente de outros elementos de outra tela. Precisamos aumentar a ordem de classificação dessa tela. Em seguida, selecione a imagem e adicione o componente do grupo de telas. A ideia é alterar o valor Alpha para criar o efeito de desvanecimento. Obviamente, aqui não temos botões e outros elementos interativos. Assim, podemos desmarcar as opções interativas e de retransmissão para alterar o valor do Alpha Podemos usar animação, mas para dispositivos móveis, animar elementos da interface do usuário é caro e não é bom para o desempenho. Portanto, a melhor opção é usar scripts e alterar o valor por meio do código. Vamos criar um novo script C-sharp. Vou chamá-la de tela desbotada. Adicione o script ao fader do Canvas e abra-o. Primeiro. Vamos criar uma instância pública estática paga do Canvas. Então, vamos criar um padrão único, assim como fizemos com o GameManager. Essa é uma boa prática para repetir algumas coisas. Agora, precisamos de variáveis. No primeiro minuto, um grupo de telas. Então, precisamos de uma flutuação, uma mudança, um valor. Flutue, espere, hora. E ousado, o desvanecimento começou. Essas são todas as variáveis de que precisamos. Podemos excluir a função de atualização. Para criar efeitos de desvanecimento. Usaremos corrotinas. Vamos criar a função de fade in do enumerador ocular. Esta função tornará a tela preta transparente. Primeiro, vamos fazer com que o fade comece a forçar. Essa variável será verdadeira somente quando usarmos o efeito fade out. Em seguida, usamos o loop while. Embora o valor alfa seja maior que zero, precisamos diminuí-lo. Então, vamos diminuir o valor alfa com a variável de alteração do valor. Então, precisamos definir a velocidade da mudança. Depois de cada alteração, vamos usar a função wait 4 s e a variável de tempo de espera. Podemos chamar essa função no início. Vamos ver o que fizemos no Unity. Use o grupo Canvas na imagem de fundo. A variável do valor de alteração precisa ser um número pequeno. Vou configurá-lo para 0,04. Espere, o tempo pode ser 0,01. Vamos tentar. Você pode ver que temos um bom efeito de desbotamento. Se você quiser prolongar, podemos diminuir o valor da alteração ou aumentar com o tempo. Você verá que o efeito dura mais, talvez por muito tempo. Então, vou torná-lo mais curto. De volta ao roteiro. Agora, vamos criar o efeito oposto. A imagem deve passar de transparente para preta. Crie uma nova função de enumerador ocular, fade-out string, que usa um parâmetro de string. Agora, a variável fé iniciada se tornará verdadeira. Agora, embora o valor alfa seja menor que um, precisamos aumentá-lo. Em seguida, também usamos wait 4 s. Sairemos da inclinação quando o alfa for um e a imagem estiver preta. Então, precisamos de um nível alto. Vamos incluir esse namespace de gerenciamento de cenas. Em seguida, podemos usar uma cena de carregamento e pagar o nome do nível da string. Depois disso, iniciamos novamente o efeito de desvanecimento na nova cena e a imagem de fundo volta a ficar transparente. Podemos adicionar algum tempo de espera entre o carregamento e o efeito de desvanecimento. Lembre-se de que esse objeto é estético único, portanto não será destruído ao mudar de cena. Para garantir que não recebamos várias chamadas, podemos verificar se o fade começou. Se isso for verdade, use a quebra de rendimento. Agora vamos criar uma função pública bather load string. Aqui começaremos o efeito de desvanecimento. Em seguida, vá para o controlador de botões que fizemos na aula anterior. Lembre-se de que, quando pressionamos os botões, essa função é chamada para carregar um novo nível. Em vez de flutuar, já que diretamente, vamos usar a função do Faith Canvas. Em Unity. Basta verificar se o botão home está usando a função do controlador do banheiro. Fizemos isso na palestra anterior. Antes de tentarmos, vamos duplicar esse nível um. Portanto, temos os mesmos componentes. Exclua o nível antigo para renomear a duplicata para o nível dois. Mais tarde, quando criarmos todos os objetos necessários que precisam estar em cada cena, teremos um modelo, pecado e os prefabricados a partir dos quais todos os pecados podem ser criados. Para. Agora, copiamos e colamos cenas para testá-las. Vamos tentar. Devemos ver o efeito de desvanecimento. Tente passar desse nível. Então, devemos ver o efeito de desvanecimento e depois desaparecer. Novamente. Funciona. Agora eu tenho um desafio de um minuto para você. Tente criar uma função de fade-out que use um parâmetro int em vez de uma string. A solução é bem simples. Podemos simplesmente copiar, colar o código e definir que a cena de carregamento tenha um índice de nível. Também precisamos criar uma função pública para chamar a versão inteira. O script do controlador de botões. Usamos essa função para reiniciar o nível. Novamente, em vez de chamá-la diretamente, vamos usar a função do fader. Não usamos essa função em nenhum lugar, mas vamos mudá-la. Talvez você o use em algum lugar do seu jogo. Ele precisa usar a versão inteira do fader. Vamos tentar reiniciar o nível. Podemos ver os efeitos. Isso é tudo para esta lição. Na próxima palestra, criaremos uma tela de carregamento. 35. Tela de carregamento: Oi pessoal. Nesta palestra, criamos uma tela de carregamento. Vamos clicar com o botão direito do mouse no fader da tela e criar uma imagem. Vou chamá-lo de plano de fundo de carregamento. Precisamos esticá-lo e depois mudar a cor. Agora, precisamos encontrar a barra **** porque vamos copiar e colar alguns elementos. A barra de saúde, e torne-a um objeto secundário da página Canvas. Vamos excluir alguns elementos extras. Não precisamos do porta-ícones. Agora, podemos colocar a barra de carregamento no meio da tela. Vamos aumentar um pouco o tamanho. Ele precisa ser um objeto secundário do plano de fundo de carregamento. Isso parece bom. Vamos ao script do fader. Primeiro, vamos incluir o namespace da interface do usuário. Então, precisamos de uma variável de objeto do jogo chamada tela de carregamento. Então precisamos de uma imagem, a barra de carregamento. Agora encontre a função fade-out. Podemos comentar esse código porque usaremos a cooperação assíncrona para carregar os níveis. A operação assíncrona nos dá a opção de o nível de carregamento um processo em segundo plano e podemos continuar acompanhando o progresso. Por meio da cooperação assíncrona, temos acesso ao progresso que vai de 0 a 1. Quando o nível está totalmente carregado, o progresso não é, na verdade, um é 0,9. Essa diferença de 0,1 é reservada para a variável bull, permite a ativação do pecado. Podemos controlar essa variável. E se definirmos como false, mesmo que o próximo nível esteja totalmente carregado em segundo plano, o valor do progresso não poderá ultrapassar 0,9 e não poderemos ir para o próximo nível. Quando definimos essa variável verdadeira e o nível está totalmente carregado, o valor é um e podemos ir para um novo nível. Temos outra variável importante concluída. Essa variável é verdadeira quando a barra de progresso é uma, o que significa um nível totalmente carregado com ativação de pecado permitida e sua força. Em qualquer outro caso. Usaremos essas variáveis para criar uma barra de carregamento. Primeiro, criamos uma variável de operação assíncrona que obteremos o valor por meio Scene Manager que permitiu o seen Async. Isso carregará uma nova cena em segundo plano. Em seguida, definimos a ativação do pecado como falsa. Portanto, temos o controle. Precisamos ativar a tela de carregamento. E podemos definir a quantidade de preenchimento da barra de carregamento como zero. Agora usamos um loop while. Enquanto a operação assíncrona é feita, é igual a false, que significa que o nível não está totalmente carregado ou a ativação está definida como false. Definimos o valor total para o progresso da cooperação assíncrona. Como o valor vai para 0,9, precisamos dividi-lo por 0,9. Aqui não precisamos usar uma espera de 4 s. Podemos simplesmente retornar null entre essas linhas de código. Podemos verificar se o progresso é de 0,9. Novamente, isso significa que o nível está totalmente carregado em segundo plano. Então permitimos a ativação do pecado. Nesse momento, a variável se tornará verdadeira e saímos do loop while. Podemos excluir essa linha de código. Agora, podemos copiar o código. Em outra função de desvanecimento, cole o código. Apenas para substituir o nome do nível pelo índice do nível. Precisamos fazer mais uma coisa na função fade-in, precisamos desativar a tela de carregamento. Agora volte para Unity. Antes de conectarmos objetos ao script, vamos renomeá-los para não confundi-los com a barra real. Em seguida, use o plano de fundo carregamento como objeto da tela de carregamento. Para a imagem da barra de carregamento. Vamos usar um carregamento. Vamos tentar. Quando esse nível. Em seguida, vá para a próxima. Observe que, como o nível é muito pequeno e estamos testando no PC, o carregamento é para colar e podemos vê-lo. Mas em um dispositivo móvel, você veria o progresso na barra de carregamento. Mais um truque: se o fader Canvas estiver cobrindo sua visão na cena, você pode ocultá-la com este botão. E isso é tudo para esta palestra. Nos vemos na próxima. 36. Efeito de desvanecimento / atualização: Olá a todos. Este é o Mario do futuro. Mais tarde no curso, notei um bug no sistema de desvanecimento. É muito específico, mas precisamos abordá-lo e corrigi-lo com apenas duas linhas de código. Se você ver algo no Unity ou no código que ainda não fizemos. Não se preocupe. Isso porque gravei esse vídeo depois alguns episódios e decidi colocá-lo aqui no curso. Eu vou te mostrar rapidamente o bug. Aqui eu coloquei para depurar registros, um para desvanecer e outro para efeito de desvanecimento. Selecione o Canvas Fader. Agora, vou prolongar o efeito de desvanecimento. Será mais fácil replicar o bug. Além disso, vou usar, já que o que faremos no futuro, será mais fácil de entender. Vi uma etiqueta com oscilações. Esse botão inicia o efeito de desvanecimento e leva a um novo nível. No começo, você pode ver que tudo funciona. Mas há um caso em que, se eu pressionar o botão e ativar a função fade-out enquanto o fade in ainda estiver em execução, dois loops inteiros lutarão entre si. Vamos pressionar o botão enquanto o efeito de desvanecimento ainda está ativo, você pode vê-lo no console. Ao mesmo tempo, estamos diminuindo e aumentando o valor alfa. Por causa disso, podemos passar para o próximo nível porque a tela nunca ficará preta. Podemos consertá-lo de várias maneiras. Meu jeito é ir para a função fade-in. No loop while, podemos verificar se a variável iniciada pelo Fed é verdadeira. Isso significa que ativamos o fade out, depois quebramos e saímos do loop. Isso é tudo que precisamos fazer. Agora, se eu pressionar o botão, o efeito de desvanecimento será interrompido e o efeito de desvanecimento assumirá o controle. Se você quiser um comportamento diferente, por exemplo, esse efeito de desvanecimento deve terminar. Em seguida, você pode verificar o valor alfa na função fade-out. Se não for zero, interrompa e saia dessa função. Agora podemos pressionar o botão, mas nada acontecerá até que o desbotamento termine. Cabe a você escolher a melhor opção para o seu jogo. Obrigado por assistir e até a próxima palestra. 37. Criação de fontes: Oi pessoal. Nesta palestra, analisamos o processo de criação de recursos de fonte para nossos textos mesclam texto orgulhoso. Vou arrastar a pasta de fontes da outra tela. Você pode encontrar o link para a página de download na pasta de recursos. Você pode usar a mesma fonte ou qualquer outra que desejar. Agora, vamos clicar com o botão direito na tela e criar um texto. Vou renomeá-lo rapidamente. Você pode ver que essa é a fonte padrão. Podemos tentar mudar isso diretamente, mas nada acontecerá. Precisamos criar um ativo de fonte para substituir a fonte. Vá para Window, Text mesh Pro e abra o criador de ativos de fonte. Como arquivo de fonte de origem, use a fonte desejada. Você pode ver algumas configurações, podemos deixar as padrão. Talvez a configuração mais importante seja o modo renderizado. Para essa fonte, a configuração padrão é boa. Se você usa fontes pixelizadas, parar ou mover é melhor. Portanto, isso depende das visualizações da fonte. Você pode experimentar opções diferentes. Em seguida, clique no botão Gerar Atlas de Fontes. Em seguida, podemos salvar o ativo da fonte. Agora, arraste o ativo criado por Ve para o campo do ativo da fonte. E você pode ver a nova fonte. Você pode jogar com algumas configurações para exportar o pacote de texto do Mesh Pro. Também podemos substituir a fonte que usamos nas telas de vitória e derrota. Exclua o texto do teste. Depois de habilitar todos os objetos e definir o Canvas alpha como um, você pode ver o resultado. Bom. Isso é tudo para esta palestra. 38. Sistema de pontuação: Oi pessoal. Vamos criar um sistema de pontuação no qual um jogador ganha pontos toda vez que destrói inimigos. Mostraremos a pontuação no canto superior direito. Portanto, ele precisa ir para a área segura. Clique com o botão direito na área segura e crie o texto. Vamos mudar a predefinição da âncora para o canto superior direito. Segure Alt e Shift e clique. Vamos mudar um pouco a posição. Podemos expandir um pouco a área de texto. Podemos mudar a fonte. Esse recurso de fonte que criamos na aula anterior. Vamos mudar o alinhamento. Eu escolherei o meio, mas talvez você possa deixar o alinhamento esquerdo. Isso também vai para o meio. Agora, vamos escrever uma pontuação de 1.000. Observe como o texto vai para o próximo alinhamento. Para evitar isso, precisamos desativar a sobreposição. Vamos expandir um pouco mais a área de texto. Obviamente, você pode alterar o tamanho da fonte, se quiser. Vou deixar como está. Vamos ao final do roteiro do gerenciador de jogos. Usaremos a malha de texto por componentes do pacote no script Precisamos incluir o namespace DNS. Em seguida, vamos criar uma variável de componente de texto. Agora precisamos de uma referência para este texto. Vamos criar uma função pública para registrar o texto da partitura. Agora podemos ir para a unidade para criar um novo script C-sharp. Vou chamar isso de registro de pontuação. O script do texto que criamos antes. Não precisamos da função de atualização, precisamos do namespace DNS. No início. Vamos criar um componente de texto. Como o script está no objeto que tem um componente fiscal, podemos usar o componente Get. Em seguida, podemos registrar o texto no gerenciador final do jogo. É uma boa ideia definir o valor do texto como padrão com pontuação zero. Volte para o script do gerenciador de jogos. Agora, podemos criar uma pontuação variável int. Vamos criar uma função que aumente a pontuação e atualize o texto. Ele precisa usar um parâmetro int. Primeiro, aumentamos a pontuação. Em seguida, atualizamos o texto. Como a pontuação é um número inteiro, precisamos convertê-la em uma string. Ótimo. A ideia é chamar essa função toda vez que o inimigo for destruído Vamos ao script do inimigo. No script do inimigo na função de sequência de dívidas, que é chamada toda vez que o inimigo morre, chamamos o texto da pontuação de atualização. Obviamente, precisamos passar uma variável para a função. Então, vamos criar um valor de pontuação variável int. Esse valor aumentará a pontuação. Observe que tudo isso é feito na classe inimiga principal. Precisamos atualizar as aulas para crianças. Vamos começar com o roteiro do meteoro. Quando substituímos essa sequência, precisamos chamar a base dessa sequência. É isso que chamaremos de tudo da classe base. Vamos fazer o mesmo com os inimigos roxos e verdes. Vá para a unidade. Na pasta prefabs, selecione NME prefabs e escolha o valor da pontuação para cada um deles. Eu escolho dez para todos eles, mas você pode escolher valores diferentes. Vamos tentar. À medida que destruímos os inimigos, a pontuação aumenta em dez. Ótimo. Obviamente, eu gostaria mostrar a pontuação e a maior pontuação nas telas de vitória ou derrota. Também precisamos redefinir a pontuação. Depois disso, vá para o script final do gerenciador de jogo. Se você se lembra, temos as funções de ganhar e perder. Aqui eu mencionei que precisamos fazer algo sobre o placar. Precisamos mostrar a pontuação, verificar a pontuação mais alta para esse nível e, em seguida, redefinir a pontuação. Para fazer tudo isso, precisamos saber algo sobre como salvar e carregar dados, o que aprenderemos nas próximas palestras. Te vejo lá. 39. Sintaxe do Playerprefs: Olá a todos. Este é um vídeo rápido que explica a sintaxe das preferências do player. Usando exemplos simples, veremos como salvar e carregar dados básicos. Eu criei um exemplo de script. Você não precisa escrever isso. Basta seguir e tentar lembrar a sintaxe. Aqui eu tenho três variáveis que eu quero salvar. Observe que usei três tipos de dados que podemos salvar com as preferências do player. E esses são integer, float e string. Então, para salvar dados, usamos PlayerPrefs, esse conjunto e depois escolhemos o tipo. No primeiro exemplo, usamos set int entre parênteses. Primeiro, escrevemos a chave da string, que conterá o valor que salvamos. Você pode nomeá-lo como quiser. Eu escolhi int k, então escrevemos o valor a ser salvo, neste caso, exemplo int. A mesma lógica se aplica ao salvar valores flutuantes e de string. Então, como carregar valores salvos? Usaremos esse estojo. Também criei variáveis nas quais carregaremos os valores salvos. Para carregar os valores, usamos PlayerPrefs que obtêm, é claro, que podemos obter números inteiros, float ou string. Entre parênteses, escrevemos a chave para carregar valores. Portanto, a chave carregará o exemplo de valor int que salvamos. Apenas certifique-se de escrever o K corretamente . Se você perder alguns isqueiros ou algo assim, isso não funcionará. A segunda parte entre parênteses é opcional. Ele determina o valor padrão se não tivermos armazenado nada anteriormente. Nesse caso, pode ser qualquer valor que você quiser. Acabei de definir como zero e nada. Para excluir valores salvos. Usamos a função de tecla Delete entre parênteses, escrevemos a chave de string que precisamos excluir. Além disso, existe a opção de excluir todos os dados salvos com a função excluir tudo. Obviamente, ao testar, excluir todos os dados salvos do código pode ser impraticável. Então, no Unity, podemos ir para Editar. E aqui temos o comando clear all player prefs. Isso é tudo para esta palestra. Agora que conhecemos a sintaxe, podemos criar um sistema de pontuação máxima. 40. Salvar e carregar pontuação/pontuação alta: Olá a todos. Agora que conhecemos a sintaxe pref do player, podemos criar um sistema de salvar e carregar. O objetivo desta palestra é salvar a pontuação de cada nível e determinar uma pontuação alta. Vamos ao final do roteiro do gerenciador de jogos. Precisamos criar uma função que salve a pontuação e atualize a pontuação mais alta, se necessário. Então, crie a função de conjunto de pontuação. Vamos usar o player prefs set int. A chave será a pontuação combinada com o nome da cena atual. Dessa forma, cada nível terá uma chave diferente, e é isso que queremos, porque cada nível tem sua própria pontuação. O valor que economizamos é, obviamente, pontuação. Em seguida, vamos criar um em uma pontuação máxima variável. Usamos o valor get int. A chave será a pontuação máxima combinada com o nome da cena. O valor padrão precisa ser zero. Em seguida, verificamos se a pontuação é maior do que a pontuação mais alta. Isso é verdade, então a pontuação é uma nova pontuação alta e podemos salvá-la. Use a chave de pontuação mais alta e salve o valor da pontuação dessa chave. A última coisa que precisamos é redefinir a pontuação. Agora, precisamos chamar essa função nas funções de ganhar e perder. Apenas certifique-se de ligar para ele antes de ativarmos as telas. Isso é muito importante para a próxima etapa. Isso é tudo o que precisamos fazer no gerenciador de jogos Unity. Quero exibir a pontuação e a maior pontuação nas telas de vitória e derrota. Vamos selecionar o painel e aumentar o alfa para um para que possamos ver o que estamos fazendo ativando o para-brisa. Precisamos organizar essa tela e adicionar alguns componentes de texto. Vamos mudar a cor e colocar a âncora na parte superior central. Podemos adicionar efeitos extras a esse texto. Ativou a base. Vou usar a cor branca com menor opacidade. Agora você pode jogar com as configurações e alterar o offset. Eu acho que isso parece bom. Agora precisamos do texto para pontuação e pontuação máxima. Duplique esse texto e renomeie-o. Precisamos mudar as âncoras para o meio. Ajuste um pouco a área do texto. É claro que precisamos de uma fonte menor. Altere o texto para que tenhamos uma melhor visualização. O alinhamento precisa ser deixado. Também podemos desativar a sobreposição, se necessário. Vamos movê-lo para baixo. Em seguida, duplique-o. Esse será o placar. Mude a cor e renomeie-a. Seu pequeno desafio é fazer o mesmo com a tela de Lewis. Esse é o resultado final. Como você pode ver, mudei a cor dessa tela. Vamos desativá-los e retornar alfa para zero. Vamos criar um novo script C-sharp que será responsável pela exibição da pontuação nas telas de vitória e derrota. E abra. Exclua as funções padrão. Precisamos incluir os namespaces TM pro en scene management. Em seguida, crie duas variáveis de texto, uma para a pontuação e outra para a pontuação mais alta. Em seguida, usamos a própria função de habilitação. Isso significa que o código será executado toda vez que ativarmos o objeto, e esse script ganhará e perderá objetos na tela. Primeiro, criamos uma pontuação variável local na qual carregamos o valor da pontuação. Use a função get. A maneira mais segura de escrever a chave corretamente é copiá-la, colá-la, ir até o gerenciador final do jogo e copiar a chave de pontuação. O valor padrão pode ser zero. Agora vamos atualizar o texto com essa variável. Faça o mesmo com a pontuação mais alta. Apenas certifique-se de copiar a chave correta. Isso é tudo o que precisamos para codificar. Vamos para o Unity. Adicione o script às telas de ganhar e perder. Agora precisamos configurar uma referência para as variáveis de texto. Use a pontuação mais alta e o texto da pontuação que criamos anteriormente. E é isso que podemos tentar. Você pode ver a pontuação e a maior pontuação. Agora. É então, vamos jogar de novo. Você pode ver os valores atualizados. Talvez as telas sejam muito pequenas, então fique à vontade para alterar as dimensões. Nos vemos no próximo vídeo. 41. Preparação para cenas: Oi pessoal. Nesta palestra, preparamos pecados para que possamos criar facilmente uma cena de abertura, uma camada de cenas de seleções e novos níveis. Isso é apenas uma preparação, nada de especial, mas precisamos fazer isso para que possamos ser mais rápidos e eficientes nas próximas palestras. Primeiro, precisamos criar Prefabs, selecionar os gerentes e os geradores nos controladores. Podemos selecionar a condição de vitória Canvas e o jogador arrastá-la para a pasta Prefabs. Salve esta cena com Control S. Vá para a pasta Cenas. Estamos no nível um, então duplique-o, renomeie-o para a tela inicial e abra-o. Essa será a primeira cena que o jogador verá ao entrar no jogo. Podemos deletar alguns objetos. Vamos excluir spammers, caneta ou controlador quando necessário, tudo o que está conectado à câmera virtual. Em seguida, o jogador em uma câmera virtual. Vamos também remover o componente cerebral da máquina de cinema da câmera principal. Vou usar um texto do Canvas. Esse será o vencedor. Graças ao uso, precisamos desembalar o pré-fabricado. Agora estou arrastando o texto para baixo da área segura. Podemos deletar o painel. Também podemos excluir a pontuação e a barra de saúde. Vamos renomear o texto. Esse será o nome do jogo. Expanda a área do texto, aumente a fonte e altere a predefinição de âncora para a parte superior central. Esta é uma boa posição, pois não estamos usando moedas e máquinas em câmeras virtuais. Vamos selecionar a câmera principal e definir o tamanho para cinco. Vamos ver como fica. Nada mal. Vamos mudar a cor do texto. A cor do vértice precisa ser branca. Agora habilitado o gradiente de cores. Vou usar um gradiente horizontal. A primeira cor será amarela, a segunda cor será laranja. Ótimo. Vamos salvar a cena e duplicá-la. Liguei para a nova seleção do nível do mar e a abri. Vou apenas mudar o texto para que possamos reconhecê-lo. Esse é um nível de seleção. Obviamente, aprimoraremos e adicionaremos recursos a essas coisas nas próximas palestras. Lembre-se de que isso é apenas uma pequena preparação. Salve a cena e abra as configurações de construção. Agora, vamos adicionar coisas novas à construção. Altere a ordem para que a visão inicial seja a primeira, depois a seleção de nível e depois os níveis. Ok, isso é tudo por enquanto. Na próxima palestra, terminamos de começar a ver. 42. Tela inicial (menu): Oi pessoal. Nesta palestra, implementamos a mecânica do toque para jogar no início do pecado. Portanto, certifique-se de abrir a estrela para ver e, em seguida, clique com o botão direito na tela e crie uma imagem. Chame-o de toque para jogar o gatilho. Precisamos esticá-lo. Em seguida, defina o valor alfa como zero. Agora vamos adicionar o componente de gatilho do evento. Nós o usamos para criar um novo tipo de evento. Você pode ver alguns eventos, por exemplo, ponteiro para baixo é quando pressionamos na tela, mais precisamente na imagem transparente que criamos. Obviamente, o ponteiro para cima é quando levantamos o dedo. Use-o. Crie um novo evento. Agora precisamos arrastar o objeto de controle do botão. Usaremos o nível de carga da função string. Em seguida, carregue o nível do nível de seleção. Ótimo. Quando tocamos na tela e no dedo, devemos acionar o evento. Certo. Clique em qualquer lugar na tela. Funciona. Agora, vamos adicionar alguns elementos visuais a essa cena para torná-la melhor na área segura Vamos criar um novo texto. Mude a âncora para a parte inferior central. Coloque-o assim. Podemos mudar a fonte, expandir a área do texto, alterar o alinhamento. A entrada de texto deve ser tocada para reproduzir. Altere o tamanho da fonte. Para torná-lo mais interessante, eu queria criar esse efeito de piscar. Devemos criar um roteiro, mas vou usar animação para este texto. Importante, como eu disse, animar elementos da interface do usuário é caro em termos de desempenho e você deve evitar isso normalmente. Mas, para isso, comece a ver que tem muito poucos elementos e estamos nele por apenas alguns segundos, podemos nos safar de qualquer encontro com um elemento. Então, vamos criar uma animação. Vou chamar isso de animação por toque. Aperte o botão de gravação e anime o valor alfa. Vamos ver a prévia. É um pouco rápido demais. Vamos definir o tamanho da amostra para 30. Isso parece bom. Vamos tentar. Toque na tela. Ótimo. Também podemos adicionar o sprite da nave espacial a esse nível. Defina a posição como 00 e aumente a ordem em uma camada. Diminua um pouco o tamanho. E terminamos. Nos vemos na próxima palestra. 43. Configuração de IU: Olá a todos. Nesta palestra, criamos elementos de interface do usuário para seleção de níveis. Como você pode ver, construímos um bom sistema de rolagem. Para começar, vamos nos certificar abrir o nível de seleção de níveis, explicar a tela e , na área segura, criar um botão. Vamos mudar a imagem de origem. Use o ícone de nível sprite, defina um tamanho nativo. Agora vamos alterar as configurações de texto. A cor precisa ser branca, certo? Qualquer número, não importa. Eles serão atribuídos automaticamente. Podemos aumentar o tamanho da fonte. Vou mudar um pouco a área do texto. Podemos mudar a fonte. Essa fonte é um pouco maior. Talvez você possa desativar o rap ou simplesmente diminuir um pouco o tamanho. Talvez seja muito pequeno, vou configurá-lo para 39. Podemos escrever facilmente números de três dígitos com esse tamanho de fonte. Agora, selecione o botão. Precisamos adicionar um evento de clique. O botão precisa usar o controlador de botão. E precisamos do nível de carga da função string. Esse botão levará ao nível um. Este é apenas um botão de modelo. Agora podemos criar a Área de Rolagem, clicar com o botão direito na área segura e criar um objeto de jogo vazio. Vou chamá-lo de base de nível. Agora, vamos mudar as dimensões. Estamos definindo os limites da área de rolagem. Em seguida, clique com o botão direito na base do nível e crie uma imagem. Vou chamá-lo de plano de fundo da janela de visualização. Estique-o. Para a imagem de origem, use o sprite de painel grande. Certifique-se de que o tipo de imagem esteja cortado. Vou apenas mudar a cor. Agora, clique com o botão direito na janela de exibição e crie um objeto de jogo vazio. Chame isso de conteúdo em grade. Defina as predefinições de âncora na parte superior central. Agora vamos adicionar o componente do grupo de layout da grade. Esse componente organizará os botões em uma grade. Precisamos de mais um componente chamado filtro de tamanho de conteúdo. Isso expandirá as dimensões desse objeto se adicionarmos botões, definirmos o ajuste horizontal e vertical para o tamanho preferido. Vamos arrastar o botão abaixo do conteúdo da grade. Agora, podemos duplicar o botão. E você pode notar que devido ao componente de layout da grade, eles são organizados de forma integrada. Vamos mudar algumas configurações. O tamanho da célula pode ser 200. Podemos definir um número de coluna fixo. Vamos usar três. Podemos adicionar espaçamento entre os botões e um pouco de preenchimento na parte superior e inferior. Além disso, vamos definir o alinhamento com o centro superior. Como você pode ver, podemos criar facilmente uma grade de botões. Vamos adicionar mais botões. Observe um problema. Os botões são visíveis fora do plano de fundo. Temos uma solução fácil. Selecione o plano de fundo da janela de exibição adicione máscara direta ao componente. Isso parece melhor. Só precisamos ajustar o preenchimento. Observe como os botões se sobrepõem à borda. Defina o preenchimento inferior e superior para 15. Ótimo. Finalmente, podemos selecionar o objeto base do nível e adicionar o componente de rolagem ereta ou o conteúdo. Vamos usar o conteúdo da grade. Podemos desativar a rolagem na direção horizontal. Só precisamos da vertical. Para a janela de exibição, use o objeto de fundo da janela de exibição. Vamos tentar. Parece bom. Podemos rolar para cima e para baixo. Obviamente, você pode alterar as configurações e o comportamento da rolagem. Eu gosto de definir essa taxa de desaceleração para zero. Agora temos a interface de usuário configurada para a seleção de nível. Na próxima aula, adicionaremos a funcionalidade e o desbloqueio de níveis. Nos vemos lá. 44. Seleção de nível e desbloqueio: Olá a todos. Nesta palestra, criamos um sistema de seleção e desbloqueio de níveis totalmente funcional. Quando o jogador vencer o primeiro nível, o segundo será desbloqueado e assim por diante. Precisamos ir até o final do roteiro do game manager. Como você pode ver, mencionei antes, na função de videogame, precisamos desbloquear o próximo nível. Mas primeiro, vamos criar uma variável. Este será um desbloqueio público no nível String. Não queremos mudar essa sequência de caracteres, então vamos escondê-la no inspetor. Essa string será usada como uma chave para salvar e carregar dados. Quando passamos de um nível, precisamos obter o número do índice do próximo. Então, vamos criar uma variável inteira de próximo nível. O valor será o nível atual do índice de construção aumentado em um. Em seguida, verificamos se o índice do próximo nível é maior do que o valor que armazenamos na chave de desbloqueio de nível. Defina o valor padrão como zero. Se isso for verdade, salvamos o índice do próximo nível na chave de desbloqueio de nível. A chave é que teremos o maior índice de nível desbloqueado. Isso é tudo o que precisamos codificar no gerenciador de jogos. No Unity, crie um novo script C-sharp. Vou chamá-lo de ícones de botões. O script para esse objeto base de nível e abra-o. Precisamos usar o namespace UI. Então, vamos criar algumas variáveis. Precisamos de uma variedade de botões. Em seguida, precisamos de sprites para botões, um para botões desbloqueados e outro para botões bloqueados. Também precisamos do número do índice construído de primeiro nível. Qual é esse número? Se você der uma olhada nas configurações de compilação, verá que o primeiro nível em nosso caso começa com o índice construído dois. Ok, agora precisamos da função de despertar. Ele é chamado apenas uma vez antes da função de início. Primeiro, precisamos obter um índice do nível desbloqueado da lista. Portanto, o nível desbloqueado obterá um valor da chave de string que criamos no gerenciador final do jogo. É importante definir o valor padrão para o índice criado de primeiro nível. Em seguida, vamos criar um loop for para percorrer a matriz de botões. Para cada botão, verificamos se o I mais o índice do primeiro nível é menor ou igual à variável de nível desbloqueada. Eu começo do zero. Portanto, precisamos adicionar esse valor de índice de primeiro nível. Lembre-se de que a variável de nível desbloqueado é o índice do nível mais alto desbloqueado. Isso significa que cada nível com um índice mais baixo precisa ser desbloqueado. Então, primeiro, definimos o botão com o índice I como interativo e, em seguida, definimos o sprite do bastão como ícone desbloqueado. Agora precisamos acessar o texto. Precisamos incluir o namespace pro. Crie uma variável de texto, use o botão e obtenha um componente na função children. Lembre-se de que o texto é um objeto secundário do botão. Em seguida, precisamos definir o valor do texto. Depois disso, apenas certifique-se de que o texto esteja habilitado. Em outros casos, os níveis estão bloqueados. Portanto, precisamos definir a variável interativa do botão como false. Defina o sprite para o ícone bloqueado. Além disso, precisamos desativar o componente de texto. Isso é tudo o que precisamos para codificar. Vá para ícones unitários, atribuídos, desbloqueados e bloqueados. Vamos verificar novamente o primeiro nível, o índice de construção. O índice do primeiro nível é dois. Em seguida, adicione botões à matriz. Nesse ponto, cada botão levará ao nível um. Precisamos selecionar os botões um por um e alterar os valores. Esse botão levará a um nível para o próximo, para o nível três e assim por diante. Essa é a única coisa que precisamos fazer manualmente. É um trabalho de cinco a dez minutos, dependendo do número de botões. Há maneiras de fazer isso automaticamente com scripts, mas isso está além do escopo deste curso. Por enquanto, você não precisa mudar todos os botões. Só precisamos de botões para duas ou três camadas para testar. Antes de testá-lo, vamos para o primeiro nível. Aqui precisamos ajustar alguns botões. O botão home na veia e as telas mais baixas precisam levar à seleção do nível. Agora podemos testá-lo. Começamos o jogo. Vá para a seleção de nível. Como é a primeira vez que jogamos, apenas o primeiro nível é desbloqueado e os outros são bloqueados. Vamos tentar passar do nível pessoal. Agora, podemos ver que o nível dois foi desbloqueado. Ótimo. Na próxima palestra, mostrarei como criar facilmente novos níveis. Depois, você pode conectar todas as batalhas com os níveis criados. Nos vemos lá. 45. Como criar níveis facilmente: Olá a todos. Nesta palestra, mostrarei como criar facilmente novos níveis. Podemos excluir o nível dois. É uma cópia antiga. Por enquanto, temos tudo o que precisamos no nível um Você pode ver todos os gerenciadores, controladores e outros pré-fabricados nesse nível. Agora duplique essa cena e chame-a de string modelo. Abra isso. Essa cena contém todos os objetos necessários para criar um nível funcional básico. Agora, podemos duplicar esse modelo visto. Isso pode ser o nível dois. Abra isso. Agora é fácil adicionar ou remover pré-fabricados, por exemplo, podemos excluir o parceiro de medidores neste nível. Também podemos alterar os números, por exemplo, nesta hora da libra. Se precisar de inimigos diferentes, você pode substituir os pré-fabricados. Selecione a condição de vitória e atualize essa matriz. Não temos parceiros de medidores, então exclua o campo vazio. Também podemos alterar o cronômetro de vento. Agora temos um nível completamente diferente. Vamos criar um nível três. duplicação desse modelo é vista. Nesse nível. Você pode definir variáveis com valores diferentes. Isso é só um exemplo. Então, vou configurá-los aleatoriamente, sem testes. Obviamente, se você tiver outros Spanner Prefabs ou qualquer outra coisa para esse nível, basta arrastá-los para essa coisa. Apenas certifique-se de atualizar as configurações de compilação. E é assim que você pode criar facilmente níveis. Para testar. Basta criar dois ou três níveis. Não crie demais, pois precisaremos atualizar o modelo exibido com o novo conteúdo posteriormente no curso. Eu só queria mostrar o processo, mas ele precisa ser feito quando você tem todas as coisas conectadas entre os objetos. Posteriormente, criamos aplicativos EDS e Power que precisam estar conectados ao player. Tenha isso em mente e até a próxima palestra. 46. Build para testes: Oi pessoal. Nesta palestra, para fins de teste, criaremos o jogo em nosso dispositivo Android. Temos conteúdo suficiente para experimentar o jogo e ver como ele se sente em um dispositivo móvel. Antes de começarmos, verifique se você tem o módulo Android instalado para a versão do Unity que você usa. Em seguida, vá para Configurações de compilação e certifique-se de usar a plataforma Android. Fizemos tudo isso no início do curso, mas eu só queria repetir caso você tenha perdido alguma coisa. Agora, vá para as configurações do player. Aqui você encontra algumas opções como nome da empresa e do jogo, versão e ícones para testes. Não precisamos alterá-los, talvez apenas o nome da empresa. Vamos à resolução e à apresentação. Por padrão, a rotação externa é selecionada com todas as orientações. Vamos limitar isso ao modo retrato. Em seguida, vá para outras configurações. Para a versão de publicação, precisaremos alterar mais configurações. Mas, para testar, vamos simplesmente desativar essa substituição de identificador de pacote. E para o nível de API de destino, escolha aquele com o maior número. Agora, precisamos conectar nosso dispositivo móvel ao nosso PC. Em um dispositivo móvel, precisamos ativar o modo de depuração, vá para as configurações. O próximo procedimento pode ser um pouco diferente para você. Depende do dispositivo, mas geralmente precisamos saber mais sobre o telefone. Em seguida, abra as informações do software. Agora, digite algumas vezes o número da compilação. Você deve ver um pop-up informando que o modo de desenvolvedor foi ativado. Agora, volte para as configurações. Role para baixo e você verá a opção de desenvolvedor. Certifique-se de que esteja ligado. Em seguida, encontre a depuração USB, ative-a e pronto. No Unity, você pode pressionar Atualizar e deverá ver seu dispositivo. Se você não o encontrar reconectado, verifique se o compartilhamento de arquivos via USB está ativado. Depois, podemos pressionar, construir e executar, criar uma nova pasta para a construção. O nome do arquivo será Space Shooter. Clique em Salvar e aguarde alguns instantes ao fazer isso Na primeira vez, demora um pouco mais. A fatura deve aparecer no seu PC e no seu dispositivo móvel. Além disso, ele deve iniciar automaticamente o jogo em seu dispositivo móvel. Agora você pode saborear o jogo e ter uma sensação melhor. Como você pode ver, tudo funciona como deveria. Bom. Além disso, quando você faz algumas alterações no Unity e deseja testar a versão atualizada, ative o desenvolvimento, a criação e clique em pitch and run. Ótimo. Agora você já sabe como testar seu jogo em um dispositivo móvel. Nos vemos na próxima palestra. 47. Build para testes: Oi pessoal. Nesta palestra, para fins de teste, criaremos o jogo em nosso dispositivo iOS. Temos conteúdo suficiente para experimentar o jogo e ver como ele se sente em um dispositivo móvel. Observe que estou usando o Windows, mas para criar o jogo no iOS, precisaremos de um computador com microfone posteriormente no processo. Antes de começarmos, verifique se você tem o módulo iOS instalado para a versão do Unity que você usa. Em seguida, vá para Configurações de compilação e certifique-se de usar a plataforma iOS. Agora vá para as configurações do player. Aqui, você pode encontrar algumas opções, como companhia na aversão a nomes de jogos e ícones para testes. Não precisamos alterá-los, talvez apenas o nome da empresa e remover espaços do nome do produto. Vamos à resolução e à apresentação. Por padrão, a rotação externa é selecionada com todas as orientações. Vamos limitar isso ao modo retrato e depois ir para outras configurações. Na versão de publicação, precisaremos alterar mais configurações. Mas, para testar, vamos simplesmente desativar essa substituição de identificador de pacote. Volte para Configurações de compilação. Agora precisamos criar uma compilação, criar uma nova pasta e, em seguida, iniciar o processo. Pode levar algum tempo para terminar. Aqui está a pasta com todos os dados. Agora, precisamos transferir essa pasta para criar o computador. Deixe-me mudar para fazer. Como você pode ver aqui, eu tenho a pasta Build no Mac. Dentro da pasta, você deve encontrar o projeto Xcode. Se você não tiver o aplicativo Xcode, basta ir até a App Store, pesquisar o Xcode e instalá-lo. É totalmente gratuito, mas só está disponível no microfone. Abra o projeto Xcode. Selecione o iPhone Unity e você verá algumas configurações. A maioria deles será da Unity. Se algo estiver faltando, você poderá editar rapidamente. Novamente. Isso é apenas para uma versão de teste, então você não precisa entrar em detalhes. O importante é ir até a seção de assinatura. Aqui, precisamos ativar a assinatura automática. Agora precisamos adicionar uma conta de equipe que pode ser só você. Para criá-lo, acesse o Xcode, preferências de contas e clique no botão de adição. Use seu ID Apple para fazer login. Depois disso, você precisa adicionar um certificado de desenvolvimento. Acesse Gerenciar certificados. Clique no botão de adição e adicione o certificado de desenvolvimento do APL. Volte para a seção de assinatura. Agora podemos escolher uma conta de equipe que criamos. Agora, você precisa conectar seu iPhone ao Mac. No seu telefone. Vá para Configurações, encontre privacidade e segurança. Na parte inferior, você deve ver o modo de desenvolvedor. Às vezes, para ver essa opção, o Xcode deve estar aberto, caso contrário você não o verá. Vamos ativar o modo de desenvolvedor. Seu telefone será reiniciado. Depois da morte no Mac. Certifique-se de selecionar seu iPhone. Para começar a construir o jogo. Clique no botão play. Isso levará algum tempo. Se você receber algum erro, tente abrir seu projeto Unity no Windows com uma versão diferente. Na verdade, recebi um erro estranho que não consegui resolver com todas as correções possíveis. Acontece que é por causa da versão Unity 22. Algo está errado. Tenho certeza de que eles o consertarão no futuro. Talvez você não tenha erros com a versão mais recente. Mas eu precisava abrir meu projeto no Windows na versão Unity 21, construí-lo e transferir arquivos no Mac e repetir todo esse processo, então tudo estava bem sem erros. Se você receber essa mensagem pop-up, basta digitar a senha que você usa para entrar no seu Mac e clicar em sempre permitir. Quando a construção estiver concluída, você verá esta mensagem. O jogo não pôde abrir no seu iPhone porque precisamos confiar no desenvolvedor. No telefone. Vá para Configurações. Gerenciamento geral de dispositivos. Aqui você verá que o aplicativo do desenvolvedor o abriu, então você precisa confiar no desenvolvedor. Agora você pode encontrar o jogo e testá-lo. Vamos jogar um pouco para ver se tudo funciona. Ótimo, está tudo bem. É assim que você testa seu jogo no iPhone. Tenha um bom dia e até a próxima palestra. 48. Spawner de objetos com script: Olá a todos. Nesta palestra, criamos objetos programáveis que nos ajudarão a enviar spam para Power Apps. O objeto duplo de script é um contêiner de dados independente das instâncias da classe, algo como um ativo. Eles são muito úteis para economizar memória porque são muito pequenos, leves e otimizados. Vamos ver como podemos criar objetos programáveis. Primeiro, vamos criar uma pasta. Em seguida, crie um script. Vou chamá-lo de exemplo de objetos programáveis e abri-lo. Exclua todas as funções. E em vez do comportamento mono, vamos herdar do objeto programável. Esses objetos programáveis conterão uma referência aos prefabs do Power App. Então, vamos criar uma série de objetos do jogo. Em seguida, vamos criar uma função que foi encontrada em um dos Power Apps. Ele precisa ser público e precisa de um vetor, três parâmetros para essa posição em libra. Vamos obter um índice aleatório. Então, podemos usar a função Instantiate. Spam, o aumento desse índice aleatório. Use a posição e a rotação do spawn. Para criar um script de um objeto como ativo, precisamos usar o atributo do menu Create Asset. Em seguida, podemos usar um nome de menu que será um objeto programável. Parceiro Power Apps. Eu vou te mostrar qual é o nome desse menu em um segundo. Primeiro, vamos adicionar um nome padrão ao objeto que criaremos. Vou chamá-lo de criador. Não importa. Vamos mudar isso de qualquer maneira. Vá para a unidade. Clique com o botão direito do mouse, vá para Criar. E agora você deve ver objetos programáveis ativarem o spammer, esse é o nome do menu que escolhemos. Então, vamos criar um parceiro do Power Apps. Como você pode ver, o nome padrão é Spawner. Vou alterá-lo para ativar o spam ou o básico. Agora você deve ver a matriz de Power Apps no inspetor. Aqui, adicionaremos os Prefabs que precisamos triturar. Observe como é fácil criar outros objetos programáveis que podem ter diferentes prefabricações. Precisamos de apenas um. Então, exclua este. Vamos adicionar um pouco de aleatoriedade ao jorrar. Primeiro, precisamos de um limite de amplitude de número inteiro. Então, na função, podemos obter um número aleatório de 0 a 99. Lembre-se de que o último número não está incluído. Depois da morte. Verificamos se o número de chance aleatória é maior que esse limite. Se isso for verdade, precisamos instanciar um Power App. Vamos para a unidade. Podemos definir esse limite para 80. Então, quando obtivermos um número maior, abordaremos um dos Power Apps. As chances giram em torno de 20%, precisamente em 19%, já que o número máximo é 99. Então, no Power Apps, minha ideia é divulgá-los quando o jogador destrói meteoros, mas você também pode encontrá-los facilmente se um determinado inimigo for destruído. E digamos que a versão do medidor, vá para o script do meteoro. Na sequência de morte, precisamos chamar uma função que expandirá o Power Apps. Mas primeiro, precisamos de um script de uma variável de objeto. Vou chamar isso de power up como fundador. É uma boa ideia verificar se esse parâmetro não é nulo. Então, podemos chamar a função a partir dos objetos programáveis. A função paga a posição do meteoro. Isso é tudo o que precisamos para codificar. Em Unity. Selecione meteoros pré-fabricados. Precisamos configurar uma referência para os objetos programáveis. Arraste os objetos programáveis para o vazio que não teve um sabor brilhante. Podemos selecionar os objetos programáveis e arrastar qualquer pré-fabricado para a matriz. Vou usar o pré-fabricado Grid Enemy. Também vou modificar esse nível, uma libra a mais de meteoros. Basta excluir a chave inimiga e diminuir o tempo de desova para obter mais meteoros. Obviamente, precisamos selecionar a condição de vitória e modificar o tamanho da matriz. Vamos tentar. Quando o destruímos, um meteoro, o inimigo pode expor. Ótimo. Nas próximas duas palestras, criaremos power-ups para o triturador de objetos programáveis. Nos vemos lá. 49. Energia em saúde: Oi pessoal. Vamos ver como podemos criar itens colecionáveis e aplicativos poderosos. Nesta palestra, criamos um Power App que curará o jogador. Primeiro, precisamos de um aplicativo Power, sprite. Use o amarelo. Aumente a ordem de classificação para quatro. Agora vamos adicionar alguns componentes. Corpo rígido 2D. Não precisamos mudar nenhuma opção. Na verdade, queremos gravidade neste caso. Agora, vamos adicionar o box collider 2D. Precisa ser um gatilho. Então, podemos ajustar o tamanho do colisor. Isso parece bom. Vamos criar uma camada para itens colecionáveis. Precisamos mudar a matriz de colisão. A camada de colecionáveis precisa colidir apenas com o jogador. Agora, podemos criar uma nova pasta e script. Vou chamar isso de power up here. Adicione o script ao objeto. Vamos abri-lo. Primeiro. Precisamos de uma variável inteira aqui, valor. Em seguida, podemos usar o On Trigger Enter para a função. Por causa de suas métricas de camada, eu sei que esse objeto colidirá até o jogador, mas talvez você precise desse power up para colidir com mais objetos. Depois, podemos verificar se o objeto tem o tag player. Aqui, vamos curar o jogador. Precisamos criar uma função no script de estatísticas do jogador. Vamos abri-lo. Nos estados dos jogadores, crie uma nova função pública. Chame isso de adicionar saúde. Ele usa um parâmetro int. Aqui, aumentamos a largura variável de saúde, a quantidade do calcanhar. Em seguida, verifique se a saúde atual é maior que a saúde máxima. Se isso for verdade, vamos definir a saúde para o valor máximo. Dessa forma, não podemos ter mais saudável do que o valor máximo. Também precisamos atualizar a barra de saúde. Vamos voltar ao Power App Script. Aqui, precisamos obter o componente de estatísticas do jogador da colisão. Em seguida, chame a função Adicionar saúde. Após a morte destruiu o objeto de powerup. Isso é tudo o que precisamos para codificar. Volte para Unity. Vamos sentar no calcanhar. Em seguida, crie um pré-fabricado. Podemos excluir um da cena. Agora, vá para os objetos programáveis que criamos na aula anterior. Esse inimigo verde era apenas para testar. Vamos substituí-lo pelo calcanhar pré-fabricado que fizemos. Em seguida, certifique-se de que os meteoros usem os objetos programáveis. Fizemos isso na palestra anterior, mas caso você perca alguma coisa, podemos tentar agora. Vamos danificar o jogador, depois destruir os medidores e o Power App deve se estender. Ótimo, tudo funciona. Nos vemos na próxima palestra. 50. Escudo de energia: Olá a todos. Nesta palestra, criamos um Shield Power App que protegerá o jogador. Primeiro, vamos usar um sprite de escudo. Altere o nome e a ordem na camada 25. Observe uma coisa estranha. A planilha parece estar em blocos e muito ruim. Esse sprite tem algum gradiente e causa esse problema de renderização. Para corrigi-lo, vamos selecionar o sprite do escudo. Precisamos substituir algumas configurações para Android e iOS. Ative a substituição para iOS. Em seguida, altere o formato para isso. Aplique as mudanças e você verá melhorias. Parece muito melhor. Agora selecione Configurações do Android e faça a mesma coisa. Não se esqueça de mudar o formato. Vou colocar um link para a lista de formatos e configurações suportados para que você possa encontrar as melhores opções para o seu jogo. Agora, vamos arrastar o escudo para baixo do pré-fabricado do player. Ajuste um pouco a posição. Em seguida, precisamos adicionar o colisor de polígonos 2D. Precisa ser um gatilho. Também podemos editar o colisor chamado Controle e clicar nas linhas para apagar alguns vértices, menos vértices, melhor desempenho. Isso é bom. Você pode dedicar mais tempo a isso, se desejar. Vamos criar uma nova camada para o escudo. Chame isso de escudo. Precisamos ir para a matriz de colisão. O escudo precisa colidir apenas com inimigos e projéteis inimigos. Depois, podemos criar um novo script. Vou chamá-lo de escudo. O script para o objeto de escudo e abra-o. Vamos excluir as funções padrão. O escudo não aguentará, ele apenas contará os acertos para criar uma variável de acertos para destruir, vou definir o valor como três. Precisamos de uma proteção variável de livro público. Quando ativamos o escudo, garantimos que temos três golpes para destruir e que a proteção seja verdadeira. Agora, crie uma função que danifique o escudo. Diminuímos os acertos para destruí-lo em um. Em seguida, verifique se os acertos são menores ou iguais a zero. Em seguida, defina a proteção como falsa e desative o escudo. Também podemos aumentar o poder do escudo enquanto já temos um escudo. Então vamos consertar o escudo. Defina acertos para destruí-lo com o valor padrão. Agora precisamos do próprio Trigger Enter para a função. Sabemos que o xisto colide um pouco, inimigos e projéteis inimigos. Assim, podemos tentar obter o componente inimigo. Essa linha de código tentará obter os componentes da colisão e armazená-los nessa variável. Então precisamos destruir o inimigo. Podemos usar uma quantidade insana de danos para garantir que a destruição seja destruída. Em seguida, danifique o escudo. O escudo colidiu com o projétil, depois destruiu o projétil e danificou o escudo. Em seguida, vá para o script de estatísticas do jogador. Aqui, precisamos de uma referência ao escudo. Então, precisamos evitar a imagem enquanto o escudo estiver ativo. Portanto, na função de danos técnicos, se a proteção do escudo for verdadeira, retorne e não execute o código abaixo. Unidade para saboreá-la, vamos ativar a proteção. Em seguida, selecione o jogador e configure uma referência ou o escudo. Vamos tentar. Temos um escudo que deve nos proteger de três golpes. 123. Ótimo. Apenas uma pequena digressão para garantir que as balas estejam visíveis na frente do escudo, podemos aumentar a ordem de classificação. Agora vamos criar outro script. Vou chamá-lo de ativador do escudo do jogador. Selecione o player e adicione o script, abra-o e exclua as funções padrão. Precisamos de uma referência ao escudo. Então, vamos criar um escudo de função de ativação pública. Essa função será chamada quando pegarmos um power-up. Depois verificamos se a nave já está ativa. Se não, vamos ativá-lo. Se estiver ativo, repare o escudo. Volte para Unity. Arraste o escudo para o campo vazio. Agora selecione o escudo e a proteção desativada. Também desativou o objeto de prateleira. Selecione o player e aplique substituições. Agora, precisamos realmente criar um objeto PowerApp. Vá até a pasta Prefabs e arraste a energia da colina até a cena. Criaremos outro pré-fabricado ajustando este. Dessa forma, estamos economizando tempo. Primeiro, vamos mudar o sprite. Depois, podemos remover o script e alterar o nome. Agora, podemos criar um novo pré-fabricado. A última coisa que precisamos fazer é criar um novo script. Chame isso de power up, shield. Selecione o powerup e adicione o script. Abra isso. Precisamos do On Trigger Enter para a função. Primeiro, garantimos que a colisão tenha acontecido com o jogador. Colisão. Precisamos chegar ao ativador do escudo. Em seguida, chame a função de ativação do escudo e destrua o objeto PowerApp. Salve-o e vá para Unity. Não se esqueça de ignorar as alterações. Podemos excluir o pré-fabricado da cena e, em seguida, acessar os objetos programáveis. Precisamos adicionar um novo pré-fabricado à matriz. Escolha o escudo pré-fabricado. Vamos tentar. Precisamos obter um escudo reforçado. Agora, estamos protegidos por três golpes. Ótimo. Na próxima aula, criaremos ícones de interface de usuário para que possamos ver o status do escudo. Nos vemos lá. 51. UI do protetor: Oi pessoal. Nesta palestra, criamos uma interface de usuário para o shell ser ativado. A interface do usuário mostrará o status do escudo. Vamos expandir o Canvas e clicar com o botão direito na área segura. Precisamos criar uma imagem. Vou chamá-lo de ícone base de escudo. Vamos mudar a imagem de origem. Use o sprite base do ícone. Nós podemos mudar a cor. Em seguida, crie outra imagem. Ele precisa ser um objeto secundário do ícone da base do escudo. Este será o ícone do escudo. Mude o sprite. Clique no botão Definir tamanho nativo. Vamos diminuir o zoom. Selecione o objeto do ícone base e altere a Predefinição de âncora para o canto superior esquerdo. Agora, podemos mudar a posição. Ele precisa estar abaixo da barra de saúde. Talvez a base seja um pouco grande demais, então vamos mudar a largura e a altura. Isso parece bom. Agora podemos duplicá-lo. Mova a duplicata para a direita e repita o processo. Precisávamos de três ícones porque a proteção do escudo é de três golpes. Agora selecione todos os ícones baseados e desative-os. Selecione a tela pré-fabricada. Em substituições, selecione o ícone de escudo e clique no botão Aplicar para selecionar esse botão. Agora, em todos os níveis, esse pré-fabricado terá ícones de escudo. A próxima etapa é acessar o script do escudo. Aqui precisamos de uma variedade de objetos do jogo. Vou chamá-la de base de escudo. Isso será uma referência aos ícones do escudo. Quando ativamos o escudo, podemos usar o loop for para ativar todos os ícones. Em seguida, precisávamos criar uma função que atualizasse os ícones quando o escudo capturasse a imagem. Então, vamos criar a função de atualização da interface do usuário. Usaremos a função switch. Verificamos os acertos para destruir a variável. No caso zero, isso significa que a variável de acertos para destruir é zero. Em seguida, precisamos desativar todos os ícones. No final do caso, usamos break para sair da função switch. No primeiro caso, precisamos ativar o primeiro ícone e desativar os outros. No caso dois, habilitamos dois ícones. No caso três, ativamos todos os ícones na função danificada. Vamos garantir que a variável de acertos para destruir seja zero quando o escudo for destruído. Também nesta função, atualizamos a interface do usuário. Também precisávamos atualizar se você está na função de reparo. Vamos fazer mais uma coisa. Nessa função de fala, podemos ter uma maiúscula padrão. Isso acontecerá quando a variável que estamos verificando e que é atingida para destruir tiver um valor diferente de qualquer caso. Não temos outros casos além de 012.3, mas podemos colocar um log de depuração. Então, se isso acontecer, algo está errado. Vamos voltar para Unity. Precisamos arrastar os ícones para a matriz. Vamos tentar. Precisamos fortalecer o escudo. Agora, use-os como um escudo para que possamos ver se os ícones serão atualizados. Como você pode ver, funciona. Ainda não terminamos. Isso é importante. Você precisa atualizar as referências no modelo sin e outros níveis que criamos para testes. Observe que, se usarmos a substituição para o jogador e passarmos para outro nível, não teremos referências. Os pré-fabricados não conseguem se lembrar referências a outros Prefabs ou objetos. Repito: no final do curso, terminaremos a cena temporária e, em seguida, você poderá simplesmente duplicá-la para criar níveis. Depois de atualizar seus níveis, vamos para a próxima aula. 52. Atirando o Power Up: Oi pessoal. Nesta palestra, criamos um aplicativo de tiro Power. À medida que o pegamos, obtemos mais pontos de tiro. E quando tiramos a foto, perdemos pontos de disparo. Primeiro, vamos criar pontos de tiro. Selecione o que já temos e altere o ícone. Agora, podemos duplicá-lo e renomeá-lo. Em seguida, ajuste a posição, duplique-a novamente e mude de posição. Precisamos de mais um. Este ponto terá alguma rotação. Então mude o nome. Agora, vamos duplicar pontos e colocá-los no lado direito da nave espacial. Remova o sinal de menos do valor x para torná-los simétricos. Para o último, também precisamos mudar uma rotação. Agora, vamos ao roteiro de filmagem do jogador. Vamos fazer algumas mudanças e organizar o roteiro. Vou apenas mover esse ponto de disparo abaixo do intervalo de disparo. Em seguida, podemos adicionar um atributo de cabeçalho. Em seguida, vamos criar um cabeçalho para pontos de atualização. Agora precisamos de referências a quatro pontos de transformação. Em seguida, vamos criar um cabeçalho para os dois últimos pontos. Com a rotação, precisamos transformar pontos. Então, precisamos de um nível de atualização de variável inteira. Agora, precisamos modificar a função de filmagem. Vou comentar essa linha por um segundo. Usaremos a função switch. Ele verificará a variável do nível de atualização. No caso zero, devemos apenas partir de um ponto. No caso um, devemos afirmar dois pontos, esquerdo e direito. Mudar o básico deve apontar para a esquerda, não pode se posicionar. Em seguida, duplique-o e posicione o canhão correto. No caso dois, disparamos a partir de três pontos a partir dos pontos básicos de tiro esquerdo e direito. No caso três, devemos afirmar cinco pontos de tiro. Use a segunda posição de Canaã que chegou e a segunda posição direita do canhão. No caso quatro, mostramos todos os pontos de tiro, incluindo os pontos com rotação. É importante usar a rotação dos pontos em vez da identidade quaterniônica. Também podemos adicionar o caso padrão, que não fará nada em um registro de depuração, se você desejar. Observe que usamos muito a função Instantiate, criando e destruindo muitos objetos. Nesse caso, os marcadores às vezes podem afetar o desempenho em dispositivos móveis. Então, no final do curso, veja a seção de otimização e como atualizamos isso. A próxima etapa é criar uma função pública que aumentará a variável do nível de atualização. Depois de aumentarmos o nível, precisamos verificar se ele é maior que quatro, que é nosso máximo. Em seguida, basta configurá-lo para quatro. Vá para Unity, conecte ou atire pontos com o script. Em seguida, podemos aplicar substituições ao pré-fabricado. Agora, vamos criar um PowerApp. Use o power-up de saúde pré-fabricado. Vamos ajustá-lo e criar um novo. Altere o nome, o sprite e remova o script. E vamos criar um novo script. Vou chamar isso de power up shooting. O roteiro do pré-fabricado. Use o botão On Trigger, Enter para a função. Verifique se a colisão aconteceu com o jogador. Em seguida, precisamos obter o componente de tiro do jogador chamado função de aumento de atualização. Vou codificar para aumentar a atualização em um, mas você pode criar uma variável e colá-la aqui. Se você quiser. Em seguida, destrua o Power App. Vamos voltar para Unity. Crie um pré-fabricado do PowerApp, exclua um da cena. Em seguida, precisamos encontrar nossos objetos programáveis no pré-fabricado da matriz. Para facilitar o teste, sempre podemos vincular esse aplicativo Power. Vamos tentar. Como você pode ver, funciona. Vamos fazer com que o jogador perca um nível atualizado ao sofrer dano no script de tiro do jogador, crie a função de diminuição de atualização. Diminua o nível em um. E também certifique-se de que ele possa ficar abaixo de zero. Acesse o script de estatísticas do jogador. Precisamos de uma referência ao roteiro de tiro do jogador. No início, use o componente Get. Então, quando o jogador tirar a imagem, vamos chamar a função de diminuição de atualização. Isso é tudo o que precisamos para codificar. Vamos tentar pegar um Power App, depois sofrer danos e o nível de atualização deve diminuir. É bom ter um bom dia e ver você na próxima palestra. 53. Power Ups Update: Olá a todos. Vamos atualizar rapidamente os scripts do Power Apps. Há um caso em que um jogador não pega os Power Apps, esses power-ups cairiam no infinito. Então, precisamos usar a propriedade que se tornou invisível. Essa é a mesma função que usamos para balas e meteoros e tudo o que pode sair da tela. Aqui, precisamos destruir o Power App GameObject, copiar esse código em cada script do Power Apps. E é isso. Obrigado por assistir e até a próxima palestra. 54. Conceito e preparações: Olá a todos. Vamos ver o conceito que aplicaremos para criar o chefe inimigo. A ideia é criar estados. Cada estado será responsável por um tipo de comportamento. Por exemplo, a interestadual será responsável, fazendo com que o chefe inimigo apareça. Então, podemos ter um estado de filmagem, um estado de educação especial e assim por diante. No estado, haverá uma crise infantil dos funcionários do estado base. Cada estado herda a função de estado de execução, que conterá lógica para esse estado. Também teremos um script de controlador chefe. O controlador terá a função de mudança de estado que será responsável pela alteração dos estados. Por exemplo, depois de executarmos algum estado e ele terminar, chamamos a função de mudança de estado para alterar o estado. Essa é a lógica que usaremos. Obviamente, passaremos o chefe no final do nosso nível. Agora, vamos criar nosso chefe GameObject. Vá até os sprites inimigos, use o grande roxo, mude a ordem na camada e mude o nome. Vamos adicionar alguns componentes. Precisamos de um componente 2D de corpo rígido. Torne-o cinemático. Em seguida, vamos adicionar um colisor de caixas 2D. Clique no botão Editar e ajuste o tamanho. Precisaremos de mais um colisor. Ajuste também o tamanho. Saia do modo de edição e adicione o colisor composto 2D. O colisor de caixas precisa ser usado como composto. Além disso, vamos ativar a opção Is Trigger. Precisamos mudar a camada, selecionar o inimigo para evitar alguns erros. Por enquanto, precisamos desativar os colisores. Agora que terminamos as coisas básicas na próxima aula, criaremos um estado base e os dois scripts do controlador. Nos vemos lá. 55. Chefes de Estado e controlador: Olá a todos. Nesta palestra, criamos uma base para que o sistema estadual e o controlador se mantenham organizados em scripts. Vamos criar uma pasta de caixa roxa. Agora podemos criar dois scripts. O primeiro será o estado base e o segundo serão os dois controladores. Os roteiros de Purple Boss. Vou apenas movê-los para o estado de base aberta do inspetor . Aqui, podemos excluir a função de atualização. Agora precisamos de variáveis e limites do KMer. Mas em vez de escrevê-las, posso acessar os controles do player e copiá-las. Não precisamos dessa variável de compensação. Essa é uma classe base. Portanto, as aulas para crianças talvez precisem de uma dessas variáveis. É por isso que precisamos alterar os modificadores de acesso para protegê-lo. Na função de despertar, set Main chegou à nossa câmera principal. Vamos aos controles do jogador. Role para baixo e copie esta parte. Quando definimos variáveis, coloque-as no início. Podemos mudar um pouco os números porque o ônibus é um pouco maior e ele precisa estar na metade superior da tela. Além disso, start precisa ser uma função virtual protegida. Em seguida, vamos criar uma função pública de estado de execução virtual. Deixe-o vazio e crie outro público. Nossa função estatal foi interrompida. Ou nos dois estados, usaremos corrotinas e essa função de estado de parada valoriza as cortinas Stop Paul. Agora vamos para o controlador de ônibus. Não precisamos da função de atualização. Fora da aula. Vamos criar enumerações. Usaremos enums para identificar os dois estados. Portanto, enumeração pública, ambas estaduais. E agora escrevemos os estados que teremos. Precisamos de uma rodovia quando o chefe aparecer. Precisamos de uma mensagem de texto dizendo que eu chamo fogo. Precisamos de um estado de ataque especial. E nesse estado, você pode adicionar quantos estados quiser. Então, vamos criar uma função pública de mudança de estado. Ele tomará os dois estados como parâmetro. Usaremos essa função para mudar os estados. Vamos usar a função switch para verificar o estado. Se o estado for enter, então há alguma coisa. Podemos copiar essa parte do código e colá-la em cada estado que temos. Agora, basta verificar os diferentes estados. Ótimo, temos o suficiente para começar a criar estados. Na próxima palestra, criaremos a interestadual. Nos vemos lá. 56. Entrar no Estado: Olá a todos. Nesta palestra, criamos a entrada estadual para o chefe. A interestadual definirá se o ônibus aparecerá. E minha ideia é fazer com que ele vá até um determinado ponto na tela. Em seguida, mude o estado. Vamos criar um novo script. Vou chamar de ambos. Insira o script para o chefe e abra-o. Primeiro. Em vez do comportamento moderno, vamos herdar de ambos os estados básicos. Lembre-se de que, na classe principal, temos duas funções virtuais que podemos substituir. Além disso, podemos substituir a função de início. Vamos criar uma variável vetorial de dois, chamá-la de ponto de entrada. A esse vetor, atribuiremos uma posição e o ônibus voará até essa posição. Em seguida, precisamos de uma variável de velocidade. Vamos substituir a função de início. Podemos usar o Bayes start para definir variáveis para os limites da tela. Em seguida, precisamos escolher um ponto em que as duas Sevilha apareçam. Vou usar 0,5 no eixo x e 0,7 no eixo y. Podemos excluir a função de atualização. Como eu disse, valorizamos as funções de raiz quadrada para definir comportamentos de estado. O enumerador ocular executa a função interestadual. Em seguida, usamos o loop while. Portanto, embora a distância entre o chefe e ponto de entrada seja maior do que um número muito pequeno. Precisamos mover o ônibus até esse ponto usando a função move em direção. Primeiro, escrevemos a posição do ônibus e depois a posição que precisamos alcançar. E então escolhemos a velocidade que é multiplicada pelo tempo.deltaTime. Em seguida, aguardamos o final de um quadro. Repetimos isso até satisfazermos essa condição. Depois de sairmos do loop while, precisamos mudar o estado. Então, vamos para a aula de pais. Ambos estados básicos. Crie uma variável protegida de ambos os controladores na função awake. E vamos pegar o componente. Lembre-se de que, no script do controlador de barramento, temos a função de mudança de estado que estamos procurando. No ônibus, digite o script. Podemos usar o controlador e chamar a função de mudança de estado. Depois da rodovia, vamos para o estado do fogo. Agora precisamos chamar essa função de substituir o estado aleatório. Aqui, você começa a corrigir. Vamos ignorar o estado de parada. Podemos apenas usar a função base. Para lembrar você, essa função interromperá a queratina. Agora, vá para os dois controladores. Crie uma referência para o ônibus interestadual. Na função switch. Quando estamos na interestadual, usamos o estado de execução para testar estados. Vamos criar um teste variável de uma bola. E o estado do teste de enumeração. No início. Se o teste for verdadeiro, mudamos para o estado do teste. Vamos para a unidade. Arraste o script boss enter para o campo vazio. Aqui você pode escolher o estado. Claro, precisamos do Enter. Vamos mover o chefe para fora da tela. Quando começarmos o jogo, o chefe deve ir até nosso ponto de entrada. Claro, não se esqueça de definir a velocidade. Como você pode ver, o ônibus aparecerá. Se sairmos do modo de jogo, podemos ver a mensagem de depuração. Vamos clicar duas vezes nele. Você pode ver que é uma depuração da linha 33. Esse é o estado do fogo. E se você se lembrar, no final da nossa rodovia, mudamos o estado para fogo. Então, tudo funciona. Na próxima palestra, vamos criar o estado do fogo. 57. Estados de teste: Olá a todos. Esta é uma palestra rápida que decidi colocar aqui. Eu queria mostrar como testar adequadamente os estados e discutir as duas restrições de movimento. Antes de começarmos, você pode remover o script de estado base do chefe do chefe, caso ainda não tenha feito isso. Essa é uma classe base e não precisa estar no objeto. Só um erro tolo. Não vai quebrar nada, só que não é necessário. Vamos abrir o script do estado base do chefe. Como você pode ver na função de início virtual, temos restrições de movimento. Isso funcionará bem porque geralmente respondemos ao ônibus no final de um nível. No entanto, durante o teste, nós o giramos no início e essas restrições não são definidas corretamente devido ao pecado de uma máquina. Se você se lembra, nos controles do jogador, usamos uma cortina para definir limites para o jogador. Você pode ver que esperamos um pouco antes de definir as restrições. Expliquei por que fazemos isso na palestra sobre limites de câmeras por causa da máquina de cinema. Então, se formos para os dois enter, você pode ver que eles usam a função inicial básica para definir restrições. Lembre-se de que essa classe é uma classe infantil de ambos os estados espaciais. Portanto, se ultrapassarmos o chefe no início de um nível, podemos obter os limites errados. Dito isso , para testar adequadamente o ônibus, definimos os limites corretamente, devemos fazer o seguinte. Certifique-se de que a variável de teste seja verdadeira e escolha o estado do sabor. Em seguida, desativou o objeto chefe. Vá para o simulador. Eu escolhi jogar na janela, iniciar o jogo e depois habilitar o chefe. Dessa forma, as restrições de movimento do ônibus são definidas corretamente. Lembre-se de que tudo isso é apenas para testar em um jogo real com Pound the bus no final de um nível. Portanto, não temos esse problema. E isso é tudo para esta palestra. Obrigado por assistir e até breve. 58. Fogo chefe: Oi pessoal. Nesta palestra, criamos um estado de filmagem para o ônibus. Como você pode ver, o ônibus começará a disparar depois que ele terminar a rodovia que fizemos na palestra anterior. Primeiro, vamos criar pontos de tiro. Eles precisam ser filhos, objetos do chefe. Precisamos de pontos de tiro, colocá-los na frente dos canhões. Em seguida, vamos criar um novo script. Chame os dois, envie o roteiro para o chefe e abra-o. Essa classe precisa ser uma classe infantil de ambos os estados base. Podemos excluir as funções padrão. Então, precisamos de algumas variáveis. Precisamos de uma velocidade variável flutuante. Então flutue, dispare a taxa. Precisamos de uma variável de objeto de jogo para o pré-fabricado do bullet. Para organizar o script, vamos usar o cabeçalho. Agora precisamos de uma matriz de transformação para armazenar pontos de tiro. Podemos criar a função de enumerador ocular em torno de um estado de incêndio. Precisamos de um flutuador, um cronômetro de disparo, um cronômetro de estado de fogo flutuante e um horário de saída do estado de fogo flutuante. E isso obterá um valor aleatório, 5 a 10 s. Acho que é uma boa ideia randomizar a duração desse estado de incêndio. Então, vamos usar o vetor para a posição alvo. O ônibus precisará se mover para essa posição, que estava aleatoriamente entre nossos limites máximos. Vamos usar um loop inteiro. Enquanto o temporizador do estado de fogo é menor ou igual ao tempo de saída do estado de fogo. O chefe precisa se mover para a posição alvo e disparar balas. Se a distância entre o chefe e a posição alvo for maior do que um número muito pequeno. Em seguida, continue se movendo. Senão. Isso significa que atingimos o ponto alvo. Em seguida, escolhemos outra posição, novamente, que estava aleatoriamente entre nossos limites máximos. Lembre-se de que definimos essas variáveis na classe base. É claro que, enquanto o ônibus está em movimento, ele precisa disparar balas. Vamos aumentar o cronômetro por time.deltaTime. Se deveria, o cronômetro é maior ou igual à taxa de disparo. Em seguida, filmamos a partir de pontos de tiro. Use um loop for para percorrer todos os pontos. Em seguida, reinicie o cronômetro. Em seguida, aguardamos o final de um quadro. Em seguida, aumente o dímero do estado do comprador por time.deltaTime. Depois de tempo suficiente, sairemos do loop completo. Agora, vamos substituir a função de estado de execução. Use start corroutine para iniciar o estado de incêndio. Em seguida, substitua o estado de parada e use a função base. Assim como antes. Vamos ver o script do controlador de barramento. Crie uma referência para os dois fogos. Nesta função de fala embaixo da caixa de incêndio, use o ônibus que dispara em torno de uma função de estado. Vá para Unity. Vamos definir a velocidade. Em seguida, defina a taxa de tiro para um, que significa que a cada segundo ou a bala pré-fabricada, podemos usar a mesma que usamos para inimigos roxos. Em seguida, vamos arrastar os pontos de tiro que criamos. A última coisa, arraste o roteiro de boast fire. Podemos deixar a interestadual como estado de teste, pois no final dela, o chefe deve mudar o estado para atirar. Vamos tentar. Vemos a rodovia e passamos para o estado de incêndio. Observe que depois que o estado de incêndio terminar as paradas de ônibus, precisamos repetir o estado de incêndio ou alterá-lo para algum outro estado, por exemplo, o estado ético especial. Volte para o roteiro de demissão do chefe. Na função de enumerador ocular. Fora do loop while, chamamos a função de mudança de estado. Mude-o para o estado espacial. Se quiser, você pode adicionar alguma aleatoriedade. Podemos obter um número aleatório. Isso pode ser zero ou um. Se o número for igual a zero, repita o estado de fogo. Caso contrário, mude-o de forma muito especial. Para facilitar o teste, eu sempre o mudarei para o estado especial. E é isso. Na próxima palestra, criaremos o estado de ataque especial. Nos vemos lá. 59. Ataque especial: Oi pessoal. Vamos criar uma tecnologia educacional especial para o chefe. O chefe disparará um grande projétil lento que pode causar danos ao jogador. O projétil também explodirá depois de algum tempo e enviará projéteis menores em uma direção circular. Primeiro, vamos criar outro objeto de jogo infantil. Vou chamá-lo de um ponto especial, porque a partir desse ponto, o ônibus lançará um ataque espacial. Vamos movê-lo para a frente da Canaã principal. Então, vamos criar um novo script. Isso será ao mesmo tempo espacial. Adicione o script ao chefe e abra-o. Precisamos herdar da classe estadual base do chefe. Então, vamos criar variáveis. Precisamos de uma variável de velocidade de flutuação. Em seguida, um tempo de espera flutuante. Essa variável determinará quanto tempo o ônibus aguardará após o ataque especial. Em seguida, fizemos um marcador especial para GameObject. Claro, precisamos de um ponto de tiro. Então, precisamos de um vetor para ponto alvo para a primeira posição. Vamos substituir a função de início. Não precisamos usar a função base. Basta definir o ponto alvo. Se usarmos uma janela de visualização para o ponto mundial para determinar de qual ponto o chefe disparará o Special Ed Tech. Vou usar 0,5 em x e 0,9 em porquê. Talvez você possa ir um pouco mais baixo. Agora, vamos criar a função de estado espacial de execução do enumerador ocular . Primeiro, o ônibus precisa se mover até o ponto alvo. Usamos um loop de tempo e verificamos a distância entre o chefe e a posição do alvo. Embora a distância seja maior que 0,01, precisamos mover o chefe. Usamos a função move towards da mesma forma que antes. Em seguida, aguardamos o final de um quadro fora do loop de tempo, o que significa que o chefe está na posição alvo. Instanciamos uma bala especial. Então esperamos um pouco e depois mudamos o estado para fogo. Agora, precisamos substituir as funções de estado de execução e de estado de parada. Use iniciar a carótida. Vá para o script do controlador de barramento. Aqui precisamos de uma referência ao chefe especial. Em seguida, na função de mudança de estado, use o estado de execução espacial do ônibus. Vá para Unity. E vamos definir variáveis. Velocidade. Também pode ser. Podemos esperar 5 s. Ainda não temos a bala espacial pré-fabricada, mas podemos conectar o ponto de tiro que criamos anteriormente. Agora, vamos criar uma bala pré-fabricada especial. Vá até os sprites inimigos. Use o big bullet sprite. Mude o nome, ou eles estão em uma camada. Em seguida, defina a camada de colisão para projéteis inimigos. Podemos torná-lo um pouco menor. Isso é bom. Adicione um componente 2D de corpo rígido, torne-o cinemático. Então precisamos de um colisor circular 2D. Precisa ser um gatilho. Podemos ajustar o tamanho, diminuir um pouco o raio. Como eu disse, esta bala vai estourar e muitas balas em uma direção circular. Por exemplo, eu quero gastar balas de seis minutos, então vou dividir 360 por seis. O resultado é 60. Lembra disso? E então vamos criar um objeto secundário da bala espacial. Vou chamá-lo de ponto de desova. A ideia é mudar a rotação no eixo z. Vamos duplicar esse ponto de libra. Mude a rotação para 60, depois duplique-a novamente e aumente a rotação em 60. Isso significa que será um e vinte. Repita o processo até o último ponto de extensão, a rotação tem um valor de 300. Você deve ter seis pontos. Observe como o eixo verde muda à medida que mudamos a rotação. Isso é importante. Agora, vamos criar um novo script. Bala espacial. Adicione o script ao objeto e abra-o. Primeiro, precisamos de algumas variáveis. Precisamos de uma velocidade de flutuação, dano, velocidade e rotação porque essa bala girará. Também precisamos de uma referência 2D de corpo rígido. Também precisamos de uma referência ao pré-fabricado Minute Bullet. A última coisa, precisamos de uma matriz de pontos. No início, vamos definir a velocidade para o vetor dois para baixo multiplicado pela velocidade na função de atualização. E vamos girar a bala com uma transformação que gira. Gire a bala no eixo z. Use a velocidade de rotação multiplicada por Time.deltaTime. Então, vamos criar a função de explosão do enumerador ocular. Aqui, precisamos destruir a bala espacial e instanciar muitas balas. Primeiro, vamos definir o tempo de explosão aleatória. Então, esperamos esse tempo aleatório. Use um loop for para percorrer todos os pontos de exposição. Instanciamos uma bala minúscula na posição do ponto de desova. E agora isso é importante. Usamos a rotação desse ponto limite. Em seguida, destruímos o objeto espacial da bala. Na função de partida, chamamos a função de explosão com corrotina inicial. Obviamente, essa bala também pode prejudicar o jogador. Então, vamos criar seu próprio Trigger. Entre na função. Verificamos o técnico depois danificamos o jogador. Depois disso, destruiu a bala. Nesse caso, não respondemos a balas minuciosas. Assim como antes. Vamos usar um que se tornou invisível. Volte para Unity. Defina o dano. A velocidade precisa ser amarela. Em seguida, defina a velocidade de rotação. Arraste o corpo rígido 2D. não temos muitos marcadores, mas podemos arrastar pontos de exposição para a matriz. Para acelerar o processo de criação de muitos marcadores, podemos usar a bala roxa pré-fabricada. Este é o que usamos para inimigos roxos. Altere o nome, remova o script e crie um novo. Chame isso de mini bala. O script do objeto mini bullet. E abra-o novamente para acelerar o processo, vamos copiar o código do script com marcador roxo. Se você não o tiver aberto, poderá encontrá-lo por meio do Solution Explorer. Vamos copiar o roteiro inteiro. Faremos duas mudanças. Cole isso. Primeiro, vou apenas adicionar um campo serializado e remover a parte do componente do portão. Então, a parte importante, substitua o vetor dois para baixo por transformá-lo para cima. Se você observar a descrição, esse é o eixo verde da transformação. Lembre-se de que, quando giramos objetos, o x verde também é girado. Então, a pequena bala se moverá nessa direção. Volte para Unity. Vamos definir o dano e a velocidade. Não se esqueça do corpo rígido. Agora crie um novo pré-fabricado. Exclua um da cena. Selecione o marcador espacial. Arraste a mini bala pré-fabricada. Agora vamos criar um pré-fabricado de balas especial. Exclua um da cena. Selecione o chefe. Arraste o marcador espacial pré-fabricado e arraste os dois estados espaciais para o campo vazio. Vamos testá-lo. Vou começar o teste na interestadual. Podemos ver a rodovia, depois o estado do fogo. E devemos ver o estado espacial. Depois de esperar algum tempo, o ônibus entra em estado de incêndio. De novo. Muito bom. Obrigado por assistir e até a próxima palestra. 60. Estatísticas e morte: Olá a todos. Nesta palestra, descobrimos como danificar e destruir o ônibus. Antes de começarmos a codificar qualquer coisa, vamos criar animações rapidamente. Você sabe, o procedimento é o mesmo que para outros inimigos. Selecione o ônibus e vá até a Janela de Animação, crie uma nova animação. Ambos usarão o sprite padrão. Então, vamos criar outra animação que será ao mesmo tempo a imagem. Defina a taxa de amostragem para 30 e use o sprite branco. Observe que, no final da palestra, substituiremos esse sprite amplo por outra coisa. Ficará melhor. Vá para a pasta Animações. Selecione a imagem e desative um tempo de loop, abra o animador e selecione o chefe. Crie transições. Precisamos de um dano no parâmetro de gatilho. Assim como outras animações, de inativo a danificado, desativou o tempo de saída. E use o parâmetro. Em seguida, de danos, use o tempo de saída com o valor de um. A última coisa, selecione a imagem e adicione uma tag. Será o mg. Agora podemos criar um novo script. Chame isso de ambas estatísticas. Esse script será herdado da classe inimiga. Só para lembrar que, na classe inimiga, temos muitas variáveis e funções que todos os inimigos usam. Agora precisamos de uma referência ao controlador de barramento. Podemos excluir as funções padrão. Vamos anular a sequência ouvida. Aqui, iniciaremos a animação de danos e desativaremos o acionamento se ela já estiver em execução. Já usamos essa técnica no curso, então eu vou um pouco mais rápido. Em seguida, precisamos substituir essa sequência. Aqui, precisamos mudar o estado para morte e instanciar a explosão pré-fabricada. Vou apenas definir uma rotação aleatória para a explosão. Além disso, o jogador precisa tirar a imagem se colidir com o chefe, use o On Trigger Enter para a função. Esse é o mesmo procedimento de antes. Vá para a unidade, o roteiro para o chefe. Em seguida, precisamos definir algumas variáveis. Isso é dano de contato. Use o animador desse objeto. Não se esqueça de arrastar os dois controles. Agora vamos criar outro script. Chame isso de morte e abra-o. Precisamos herdar de ambas as funções de exclusão do estado base. Agora vamos substituir o estado de execução. Quando o chefe morre, usamos o End Game Manager e iniciamos a sequência de resolução. Em seguida, vamos desativar o objeto do jogo boss. Agora vá para os dois controladores. Quando o chefe está morto , precisamos parar todos os outros estados. Portanto, use o estado interrompido para cada estado. Então, como sempre, precisamos criar uma referência. Dívida do chefe. Nesse caso. Na função switch, use ambos os estados de execução da dívida. Vamos para a unidade, o ônibus, aquele roteiro para o chefe. Agora podemos ativar os colisores e arrastar a morte do chefe para o campo vazio. Vamos tentar. Como você pode ver, podemos danificar e destruir o chefe. Mas acho que a disseminação é um pouco demais. Então, vamos mudar a animação. Selecione o chefe, vá para a animação e abra a animação da imagem. Substitua o generalizado pelo padrão, depois aperte o botão de gravação e mude a cor. Você pode experimentar e ver o que ficará melhor. Vamos tentar com um pouco de amarelo e um valor Alfa menor. Vamos ver como fica. Eu acho que é melhor. A explosão é um pouco pequena, então vamos criar uma maior. Use o pré-fabricado, nós temos. Renomeie e altere o tamanho. Em seguida, crie um novo pré-fabricado. Selecione o chefe e substitua o pré-fabricado. Podemos excluir um da cena. Bom. A próxima coisa que precisamos resolver é uma colisão entre o chefe e o escudo. Nesse ponto, o escudo destruirá instantaneamente o chefe. Vamos mudar isso. Selecione o chefe, crie uma nova tag. Vou chamá-lo de chefe. Use-o para o objeto do ônibus. Em seguida, precisamos abrir o script do shell. Como você pode ver, o escudo causará muitos danos porque foi projetado para destruir instantaneamente inimigos menores. Agora, podemos verificar se a colisão aconteceu com um objeto que tem o chefão. Você escolhe, o que vai acontecer? Vou destruir o escudo em vez do chefe. Portanto, defina os golpes para destruí-lo para zero e danificar o escudo. Em seguida, retorne e não execute o código abaixo. Mas vamos tentar. Bom. Funciona. Nos vemos na próxima palestra. 61. Spears Boss: Olá a todos. Nesta palestra, mostrarei como atravessar o ônibus no final de um nível, selecionar o chefe. Em seguida, podemos desmarcar a variável de teste. Abra o script do controlador de barramento na função de início e vamos definir o estado a ser inserido. Volte para Unity e selecione uma condição de vitória. Aqui temos a duração do nível e as referências aos geradores. Abra o script. Precisamos de uma variável de bola, seu chefe. Na função de atualização, depois que o tempo expirar, usaremos a sequência inicial resolvida para determinar o resultado do nível. Vamos fazer isso somente se não houver chefe no nível. Verificamos a variável bull. Se tiver ambos for falso, inicie a sequência. Observe que sempre desativamos os criadores. Essa é a parte importante. Volte para Unity. Este nível tem o chefe. Então, vamos definir a variável como verdadeira. A ideia é atacar o chefe quando a chave inimiga estiver desativada. Então, salte a chave inglesa inimiga e abra o roteiro. Vamos criar uma variável de objeto de jogo para o prefab Boss. Vamos usar a própria função desativada, que é chamada quando o objeto, neste caso, Spanner, está desativado. Primeiro, verificamos se o pré-fabricado Boss não é nulo. Fazemos isso porque em outros níveis e talvez não tenhamos um chefe. Portanto, isso evitará erros. Mas se tivermos isso , vamos criar um vetor para a posição da libra. Garante que seja encontrado fora de uma tela. Para o eixo y, use um número maior que um. Em seguida, instancie o pré-fabricado Boss nessa posição. No entanto, quando desativado também é chamado quando passamos para outro nível ou reiniciamos a exposição de objetos enquanto alterávamos, pois pode causar erros. Para corrigi-lo, precisamos adicionar mais uma condição. Vá para a condição de vitória, crie um bool público, pode expor o chefe e definir false como o valor padrão quando o cronômetro expirar. E temos um chefe no nível que é o caso, então o conjunto pode se estender até verdadeiro. Precisamos saber esse valor antes que os geradores sejam desativados. Portanto, mova a instrução if else para cima antes de desativarmos os geradores. Em Enemy Spawner. Crie uma referência para quando condição. Na função não desativada. Verifique se a condição do vento pode expor que o chefe é falso. Em seguida, devolva e não execute. O código abaixo. Isso é tudo o que precisamos para codificar. Volte para o Unity, crie um pré-fabricado Boss roxo. Exclua uma dessa cena, selecione a chave inimiga e arraste a prefabricada Boss. Também arrastando o objeto da condição de vitória. Agora, vou selecionar uma condição de vitória para o teste. Vamos definir a duração desse nível para 5 s. Depois de 5 s, os spammers serão desativados e o chefe aparecerá. Vamos tentar. Sobreviva 5 s. E você pode ver o chefe. Vamos destruí-lo. Agora, devemos ver o pára-brisa. Ótimo, funciona. Nos vemos na próxima palestra. 62. Som de fundo: Oi pessoal. Ainda não mencionamos som e música. Então, nesta palestra, mostrarei como tocar música de fundo. Não vamos nos aprofundar muito nas configurações e técnicas de som. Mostrarei exemplos simples isso na próxima palestra. Assim, você tem uma ideia básica de como o som funciona. Primeiro, vou importar a pasta de som. Você pode encontrá-lo nos recursos. Aqui temos alguns clipes de som que usaremos. Para começar, vamos organizar a hierarquia, criar um novo objeto de jogo, renomeá-lo e redefinir o componente de transformação. Então, vamos criar outro objeto de jogo. Chame isso de som de fundo ou música. Redefina o componente de transformação. Agora precisamos adicionar o componente da fonte de áudio ao objeto. A fonte de áudio tem uma referência ao clipe que precisamos reproduzir em algumas configurações. Vamos arrastar o clipe de música de fundo para o campo vazio. Certifique-se de que o play on awake esteja ativado. Isso garantirá que o clipe de áudio comece a ser reproduzido quando a cena for carregada. Como se trata de música de fundo, precisamos ativar a opção de loop. Eu sei que essa música está um pouco alta, então vou diminuir o volume para 0,3. Antes de tentarmos selecionar a câmera principal e garantir que ela tenha um ouvinte de áudio. Deveria estar lá. Por padrão. Esse ouvinte de áudio ouvirá sons de fontes de áudio e os reproduzirá nos alto-falantes. Em seguida, selecione o simulador, altere-o para ganhar uma janela. Em seguida, verifique se o áudio está ativado. Volte ao simulador e comece o jogo. Você deve ouvir música assim que o nível começar. Bom. Você pode baixar mais músicas para diferentes jogadores e repetir esse processo. Na próxima palestra, adicionaremos efeitos sonoros de filmagem e explosão. Te vejo lá. 63. Efeito de som: Olá a todos. Vamos criar alguns efeitos sonoros. O primeiro será o som de gravação. Selecione o player. Adicione o componente da fonte de áudio. Use o clipe da pistola laser. Desative, Play on awake porque começaremos com esse som por meio de um script. Vou apenas diminuir o volume. Em seguida, vá para o roteiro de tiro do jogador. Crie uma referência de fonte de áudio. Vou chamá-la de fonte. Em seguida, vá para a função de filmagem. Aqui usamos a fonte que reproduz. Isso reproduzirá o efeito sonoro quando um jogador disparar balas de laser. Volte para Unity. Arraste o componente da fonte de áudio. Não se esqueça de substituir as configurações no pré-fabricado. Vamos tentar. Como você pode ouvir, funciona. A próxima coisa, vamos criar um efeito sonoro de explosão. Vá para os pré-fabricados. Selecione a explosão. O componente da fonte de áudio. Use o Explosion AudioClip. Garante que o play on awake esteja ativado. Esse efeito também é muito alto, então vou ajustar o volume para 0,3. Toda vez que a explosão ocorre, devemos ouvir os efeitos sonoros. Ótimo. Agora vamos criar um aplicativo Power, efeitos sonoros. Aqui temos uma situação diferente. Eu vou te mostrar o porquê. Vamos adicionar a fonte de áudio a qualquer aplicativo de energia Prefab. Em seguida, abra o script. Precisamos reproduzir o efeito sonoro quando um jogador coleta esse Power App, que estaria aqui. Mas se tentarmos reproduzir o efeito sonoro usando a fonte de áudio que pertence a esse objeto, nada acontecerá porque destruímos esse objeto. Na próxima linha de código , destruímos o objeto. A fonte de áudio também será destruída. Portanto, precisamos de uma abordagem diferente. Podemos criar algum tipo de gerenciador de som e contornar isso. Mas também temos uma solução simples com opções limitadas. Vamos usar uma abordagem simples. Volte para Unity. Podemos remover essa fonte de áudio. Em seguida, volte ao roteiro. Agora, precisamos de uma referência para o clipe disponível. Vou chamá-lo de clipe para reproduzir. Para reproduzir o clipe, usamos a classe de fonte de áudio em vez de uma instância, chamamos a fonte de áudio com a maiúsculo e usamos play clip at point. Primeiro, escolha o clipe e depois a posição. E também podemos escolher o volume. Este clipe está um pouco silencioso, então vou escolher o volume máximo. Deixe-me explicar como isso funcionará. Nesta classe de fonte de áudio, criaremos um novo objeto com o componente de fonte de áudio. O novo objeto, tocaremos o som e ele se destruirá depois de ser minimizado. Salve isso e vá para Unity. Escolha o clipe do Power App. Você pode repetir o processo para outros Power Apps. Então vamos tentar. Você pode ouvir o efeito sonoro do Power App. Se você conseguir pausar o jogo logo após iniciá-lo, poderá ver que alguém atirou no objeto do jogo. Esse objeto é criado com o componente de fonte de áudio e reproduz o efeito sonoro. Como eu disse, esta é uma solução simples com opções limitadas. Nós realmente não temos controle sobre essas opções , exceto o volume. Portanto, tenha isso em mente. Se você precisar usar mixers de áudio e alguns efeitos avançados, escolha as opções do gerenciador de som. Para este projeto, usamos uma abordagem simples. Tudo isso é para esta palestra. Nos vemos na próxima. 64. Configuração de anúncios: Olá a todos. Vamos importar anúncios para o nosso projeto. Antes de entrar em detalhes, precisamos fazer uma configuração básica. Observe que estou na cena inicial, que é nossa primeira cena no jogo. Vá para o Gerenciador de Pacotes do Windows, verifique se o Registro do Unity está selecionado e pesquise por anúncios Como você pode ver no momento da gravação deste vídeo, o nome é Advertisement Legacy Isso ocorre porque o Unity está no meio da transição para uma nova forma de adicionar implementação. Mas, no momento, a documentação é muito ruim e não há exemplos. Não se preocupe, esse pacote estará disponível por algum tempo. Além disso, haverá uma atualização neste curso quando o pacote de anúncios não for Por enquanto, meu conselho é usá-lo o máximo que puder até obtermos mais documentação e exemplos para a nova implementação. Dito isso, clique no botão de instalação. A Unity perguntará se você quer usar o pacote novo ou antigo? Vamos usar o pacote legado. Agora, precisamos vincular nosso projeto Unity a um ID de projeto do Unity Services. Você pode clicar no link que leva ao do Unity ou apenas ao painel do Google Unity. Você precisará fazer login com seu ID Unity. Continuaremos com isso em um momento. Por enquanto, vamos voltar para o Unity, ir para Configurações do projeto, selecionar serviços. Então, precisamos escolher uma organização. Se você não tiver, provavelmente terá um botão para criá-lo. Ou ao entrar na sua conta Unity, encontre organizações e você terá um botão para criar uma nova na Unity. Selecione sua organização. Vou testar o jogo, desenvolver e criar um ID de projeto. Podemos dizer que este jogo não terá como alvo principal crianças menores de 13 anos. Em seguida, selecione anúncios em versões mais recentes, Unity removeu a guia D. Não está visível. Se você não vê, não se preocupe. Basta acompanhar a palestra. Conectamos IDs de jogos por meio de código. Aqui você pode ver os IDs de jogos para Android e IOS. Precisamos obtê-los por meio de serviços de jogos. Agora vamos voltar ao painel do Unity. Depois de entrar, verifique se você selecionou a organização certa. As organizações têm projetos, precisamos escolher o projeto móvel Space Shooter Vá para Unitização. Clique em Começar. Eu só pretendo usar anúncios da Unity. Escolha um novo começo. Nosso aplicativo ainda não está ativo. Então, podemos criar um projeto de monetização. Você pode ver os IDs de jogos para IOS e Android. Vá para blocos de anúncios. Aqui você pode ver três tipos de anúncios para IOS e Android. Podemos usar banners recompensados e anúncios intersticiais mais sobre eles Nas próximas palestras, volte para Unity Você deve ver os IDs do jogo aqui, caso não os veja. Reinicie o Unity. Ótimo para usar anúncios, passamos por três etapas. Precisamos inicializar anúncios, carregar anúncios e, em seguida, exibir anúncios Vamos fazer a primeira etapa, inicialização para fins organizacionais. Vamos criar um objeto de jogo vazio, Ds. Então, vamos criar um novo objeto de jogo. Eu o chamo de controlador de anúncios. Crie uma nova pasta para scripts. O primeiro script será add, initializer, adicionar o script ao objeto e abri-lo Também fornecerei um link para a documentação. Aqui está a parte de inicialização. Você pode copiar e colar o script inteiro, se quiser. Vou criá-lo passo a passo e adicionar uma modificação no final. Primeiro, vamos limpar o que não precisamos. Em seguida, precisamos incluir o anúncio do motor Unity. Depois de precisarmos de uma interface chamada Unity como ouvinte de inicialização , precisamos implementar essa Isso criará a própria função completa de inicialização Isso é chamado quando o processo é concluído e uma função quando ele não é concluído. Vamos usar os registros da bagagem para sabermos o que acontece. Vou copiar e colar esse saco D do script de exemplo. Vamos criar algumas variáveis. Precisamos de IDs de jogos em sequência, um para Android e outro para IOS. Então, precisamos de um modo de teste de variável de touro. O último é o ID do jogo de caracteres que precisamos atribuir. Vamos criar uma função pública inicializada como pública, porque talvez você a chame em outra classe Aqui, precisamos atribuir o ID do jogo ao Android ou IOS. Usarei uma versão curta da declaração if entre parênteses Verificamos se o aplicativo dessa plataforma é igual à plataforma de tempo de execução e, seguida, escrevemos um ponto de interrogação. Se estivermos no iPhone, use o ID do jogo IOS. Em seguida, escreva dois pontos. Se não estivermos usando o telefone, use o ID do jogo Android. Agora podemos usar a função de inicialização do anúncio. Use o ID do jogo que definimos. Em seguida, escolha o modo de teste. Precisamos passar o ouvinte de inicialização, que é esse objeto Agora vamos criar a função de ativação. Aqui, chamamos de inicializar anúncios. Precisamos fazer a inicialização apenas uma vez no jogo. A melhor hora para fazer isso geralmente é quando começamos o jogo. Observe que você não precisa ter esse objeto em todas as cenas. Faça isso quando estiver pronto para ir. No entanto, se a inicialização falhar e você quiser experimentá-la em outras cenas , é uma boa ideia verificar se a inicialização já foi feita e retornar E não tente novamente. Volte para o Unity. Aqui, precisamos definir IDs. Você pode copiá-los do painel do Unity ou acessar as Configurações do projeto e copiar e colar os valores. Tenha cuidado para não misturá-los , pois estamos testando, vamos ativar o modo de teste. Não se esqueça de desativar isso antes de criar a versão de publicação do jogo. Vamos experimentá-lo. Você pode ver no console a inicialização foi concluída Tudo isso é para o primeiro passo. Na próxima palestra, abordaremos anúncios em banner. Nos vemos lá. 65. UPDATE: Unity Cloud: Olá pessoal. Esta é uma atualização rápida sobre serviços de jogos Unity ou agora sobre o Unity Cloud. Se você tiver problemas para encontrar monetização de auxílios Unity na nova nuvem Unity, este vídeo o ajudará Você precisa fazer login na Você verá o novo painel aqui. Você encontrará seus projetos. Você também pode criar novos. Mas precisamos do Space Shooter Mobile. Vamos abri-lo. Depois, você pode clicar no botão Shortcuts Plus, pesquisar por Aids e escolher Unity Aids Monetization Aqui você tem todas as fitas de que precisamos, incluindo blocos de anúncios Outra forma de encontrar a seção de monetização é abrir produtos, pesquisar anúncios da Unity e abrir a Bom, agora você pode continuar com a monetização do curso. Nos vemos na próxima palestra. 66. Anúncios de banner: Olá de novo. Nesta palestra, criamos anúncios em banner. Vamos preparar algumas coisas. Podemos copiar um objeto vazio, ir até o nível em que você deseja ativar o banner. Eu farei isso no nível das oscilações. Tin, cole o objeto vazio, crie um novo objeto vazio, chame-o de banner oito. Em seguida, podemos criar um novo script. O nome também será um banner, o script do objeto. Agora, se você abrir o link que pode encontrar nos recursos, há uma seção para anúncios em banner. Há um exemplo de script sobre como implementar anúncios de banner com botões. Usaremos uma abordagem diferente. Então, podemos simplesmente copiar e colar o código, como na aula anterior. Usaremos algumas peças. Ao implementar ajudas. Precisamos conhecer os Ed IDs para Android e iOS. Então, como podemos conseguir alguns? Vá até seu painel, selecione monetização e unidades abertas. Aqui temos todos os tipos. Podemos selecionar anúncios em banner. Você pode ver o nome e o ID do anúncio. Temos um para Android e outro para iOS. Também podemos criar novos blocos de anúncios. Escolha um nome e uma empresa candidata. Em seguida, você pode escolher o tipo de unidade. Agora você deve ver sua unidade de edição na lista. Só para mostrar, você pode editar as configurações. Aqui, se necessário, você pode alterar algumas configurações. Não usaremos esse banner publicitário. Eu só queria te mostrar o processo. Vamos enviá-lo para o arquivo. Usaremos os padrões. Lembre-se de que é importante rever os IDs no script. O objetivo é carregar e mostrar o anúncio do banner. Primeiro, precisamos incluir o namespace dos anúncios. Em seguida, vamos criar duas variáveis de cadeia de caracteres de identificação, uma para Android e outra para iOS. Podemos definir valores padrão. Observe que é melhor copiar e colar para não cometer erros. Então precisamos de uma string, um ID de unidade. Em seguida, podemos criar variáveis de posição do banner para que possamos escolher onde mostrar o anúncio. No início, vamos definir um ID de unidade. Usamos hash se Unity, iOS, o que significa que estamos usando um dispositivo iOS, depois definimos o ID do bloco de anúncios do IRS e, em seguida, um hash L se o Unity Android. Obviamente, aqui usamos o ID do bloco de anúncios do Android. Feche isso com hash. E se não precisarmos da função de atualização, crie um vazio público, carregue o anúncio do banner. Primeiro, vamos definir a posição. Em seguida, crie opções de carregamento do banner. Aqui, usamos um retorno de chamada de carregamento que acionará sua própria função de carregamento de banner. Vamos criá-lo em um momento, usar uma vírgula e criar um retorno de chamada de erro que acionará sua própria função de erro de banner. Vamos criar essas duas funções. O erro do próprio banner acontecerá quando algo estiver errado. Então, podemos usar apenas o bug Datalog. carregamento do próprio banner será acionado quando a Terra terminar de carregar. Antes de fazermos qualquer coisa aqui, precisamos realmente chamar a função load. Então, aqui, depois das opções que fizemos, usamos o banner publicitário que permitia e colamos o ID com as opções. Então, quando o anúncio do banner estiver carregado e pronto, nós o mostramos usando a função show. Claro, precisamos passar um documento de identidade. Agora, só precisamos chamar isso de anúncio de banner de carregamento em algum lugar. Depende do jogo e da sua escolha. Vou chamar essa função no início. Então, quando começarmos o nível, devemos ver o banner. Em Unity. Garante que as ideias estejam corretas e escolha a posição do banner. Vamos tentar. No editor Unity. É difícil ver isso. Em um jogo real. Será maior. Deixe-me ampliar um pouco. Você pode ver isso aqui. Se você ver algum erro, verifique se a etapa de inicialização foi concluída. Portanto, tente testá-lo iniciando o jogo desde a primeira cena. Aqui fazemos a inicialização, vamos para Seleção de nível e o banner está aqui. Agora você pode criar um pré-fabricado. Você pode colocar esse pré-fabricado em qualquer unidade de nível. Você pode colocá-lo em vários níveis e tudo funcionará bem. Vamos criar uma, uma medida de segurança no script antes de carregarmos e mostrarmos o anúncio Vamos verificar se o anúncio foi inicializado. Bom. Observe que tudo o que fizemos nesse script, você pode fazer isso no script de inicialização. Eu só queria separar o conteúdo para que fosse mais fácil de entender. Obrigado por assistir e até a próxima palestra. 67. Anúncios com salto: Olá de novo. Nesta palestra, criamos anúncios intersticiais. Esses são anúncios dos quais um jogador pode escapar. A ideia é criar um anúncio que aparecerá depois de jogar alguns níveis, por exemplo, jogamos um nível quando reiniciamos ou vamos para outro nível, uma edição intersticial é reproduzida. Obviamente, você pode escolher com que frequência um anúncio será exibido. Agora, podemos começar com a implementação. Ainda estamos na equipe de soluções de níveis. Vamos criar um novo objeto de jogo. Eu chamo isso de ajuda intersticial. Em seguida, crie um novo script. Também o chame de intersticial, adicione o objeto do script e abra-o. Também temos documentação para implementar anúncios intersticiais. Há muito conteúdo aqui. Vou copiar uma parte e depois modificá-la e seguir passo a passo. Vamos copiar essa parte que inclui o ID do auxílio. Apenas certifique-se de que seus IDs correspondam aos da monetização do Unity. Se você optar pela monetização, poderá selecionar intersticial. E aqui você pode ver IDs para Android e iOS. Se quiser, você pode criar novos blocos de anúncios aqui, mas vou usar os predefinidos. Agora, vamos dar uma olhada na função de despertar. Atribuímos um ID verificando se estamos usando um dispositivo iPhone ou Android. Você precisa ter cuidado com uma coisa. No editor Unity, isso sempre usará Android ID, ID, mesmo se você escolher iOS construído, o ID será para Android. Porque não estamos usando o iPhone. Estamos no Mac ou PC. Repito, isso é apenas no editor Unity. Em um jogo real, ele funcionará bem, mas isso dificulta o teste de anúncios de iPhones no editor. Então, se você quiser testar o Ed's para dispositivos iOS no editor Unity, você precisa usar um método que usamos em Banner Ads. Vamos copiar e colar essa parte. Em seguida, comente essa parte. Claro, você não precisa fazer isso. Esta é apenas uma pequena digressão para testes. Vamos continuar. Precisamos do namespace dos anúncios. Aqui precisamos de duas interfaces. O primeiro é permitido no LA Center, e o segundo é o cenário Chablis. Vamos implementar funções. Temos uma função que é chamada quando a carga é concluída e outra quando não é concluída. Vamos implementar funções para o ouvinte. Este é quando clicamos no botão Adicionar. Este é chamado quando o auxílio é concluído. Então, quando a aparecer e quando a cabeça começar a aparecer, modificaremos algumas delas posteriormente. Vou apenas mover essas funções para baixo. Agora, vamos criar uma função pública de carregamento vazio. Verificamos se o anúncio foi inicializado. Se isso for verdade, carregue o ED com o ID do ED. E isso permitiu o ouvinte. Em seguida, crie uma função pública void show Ed. Aqui usamos a função show, colamos o ID e esse show listener. Vamos usar uma cama carregada em um despertador. Você pode escolher quando mostrar o ED. Vou mostrá-lo imediatamente após o carregamento ser concluído. Vamos tentar. Começamos o teste desde a primeira cena porque aqui inicializamos Eds, vamos para Seleção de Nível. E você pode ver o final. No entanto, precisamos resolver três problemas. Primeiro, o jogo ainda está rodando em segundo plano. Precisamos parar com isso. A segunda coisa, precisamos esconder o banner. A última coisa que precisamos escolher frequência isso aparecerá. Você não quer que ele jogue toda vez que o jogador troca de trabalhador. Para facilitar o teste desde o início , vamos criar o controlador de auxílios. O controlador pré-fabricado é responsável pela inicialização. Vá para um nível de seleção. Reproduz o pré-fabricado na cena. Se você testá-lo diretamente da Seleção de Nível, o auxílio ainda não funcionará. Também não temos o banner publicitário. Isso ocorre porque fazemos a inicialização, carregamento e a exibição ao mesmo tempo no modo de ativação ou inicialização. A inicialização leva algum tempo para ser concluída e o carregamento é chamado antes que a industrialização seja concluída. É por isso que geralmente não inicializamos na primeira cena. Portanto, tenha isso em mente. Precisamos criar o intersticial, um pré-fabricado. Então, podemos copiá-lo. Objetos, vá para o nível um e cole-os para colocar esses três objetos em todas as cenas em que você deseja anúncios. Vamos testá-lo. Comece com o seletor de nível. Vá para o primeiro nível. Você pode ver. Observe que você pode ouvir disparos em segundo plano. Agora precisamos abordar as três questões que mencionei. No intersticial, um script encontrado em Unity auxilia, show start. Quando começarmos o ED, vamos parar o tempo. E ao definir a escala de tempo como zero, isso impedirá que o jogo seja executado em segundo plano enquanto o AED estiver sendo jogado. Quando o AED é concluído, redefinimos a escala de tempo para um. Então, vamos desativar o banner. Quando iniciamos o AED, use propaganda, aquele banner que se esconde. Mostre novamente, precisamos de uma referência à classe de banners. Em seguida, em Mostrar completo, use um anúncio de banner de carregamento. Vá para a unidade, selecione o vermelho intersticial e arraste o anúncio do banner. Em seguida, experimente desde o nível de seleção até o primeiro nível. Observe que não há nenhum anúncio em banner. Além disso. Você não consegue ouvir tiros. Por algum motivo, o lugar da música de fundo, mas isso é um bug no editor Unity. Vamos pular o anúncio. E agora você pode ver o banner. Bom. Por último, não queremos mostrar anúncios intersticiais após cada nível de mudança. Então, vamos criar um tempo inteiro para pular e definir o valor padrão como um. Esse número determinará quantas vezes podemos recarregar ou alterar o nível antes de mostrar o anúncio. Em seguida, em awake, crie um número inteiro, pule o número e use as preferências do jogador, entrar no k será intersticial. O valor padrão é a hora de ignorar o número. Em seguida, verifique se o número é diferente de zero. Se isso for verdade, diminua em um. Em seguida, salve esse número. Senão. Isso significa que o número do salto é zero. Em seguida, precisamos carregar e mostrar o ED. Em seguida, redefina o valor da chave intersticial. Vamos tentar. Desde o início, vamos para a Seleção de Nível. Normalmente, tínhamos a cabeça aqui, mas o número do salto era um. Agora está reduzido a zero. Então, após o próximo carregamento, veremos os anúncios passarem para o nível um e teremos anúncios. Agora, vamos destruir o jogador. Devemos recarregar sem ajuda porque o número do salto foi redefinido para um. Se perdermos o jogo novamente e o reiniciarmos, nós o veremos. Bom. Tudo funciona. Observe que você pode ajustar a hora para pular o número no Unity ou no script. Isso é tudo para esta palestra e até a próxima. 68. Anúncios recompensados [1]: Olá a todos. Vamos criar um acréscimo de recompensa que dará a opção de continuar o jogo depois que o jogador for destruído. Parece assim. Vamos perder o jogo. Recebemos um painel com o botão Play. Assistimos um, Ed, e depois podemos continuar jogando. Obviamente, limitaremos quantas vezes um jogador pode fazer isso. Vamos começar a criar um novo objeto de jogo vazio. Vou chamar isso de “ed recompensado”. Em seguida, crie um novo script com o mesmo nome. O script para o objeto e abra-o. Também podemos abrir a documentação do Unity. O link está nos recursos. Há um exemplo de script. Vamos mudar um pouco a implementação. Portanto, não basta copiar e colar todo o script. Podemos copiar esta parte para o Aid ID. Basta excluir a peça com o botão. Agora, certifique-se de que eles estejam corretos. Acesse a monetização do painel, selecione anúncios premiados e você poderá ver os IDs para Android e iOS. Obviamente, você pode criar unidades de ajuda personalizadas. Aqui. Usaremos os padrões no script. Para usar o namespace de anúncios. Também precisamos de interfaces load listener e show listener. Como antes, vamos implementar funções a partir de interfaces. Vamos limpá-lo primeiro. Se desejar, você pode usar o backlog nas funções. Vou pular isso desta vez. Vamos mover essas funções para a parte inferior do script. Bom. Agora, vamos criar um público. Carga, uma função. É público porque talvez você precise chamá-lo em algum lugar fora do roteiro. Em seguida, podemos usar a carga de anúncios com um ID e esse ouvinte permitido. Antes de carregar, vamos verificar se o anúncio foi inicializado. Podemos chamá-lo de acordado. Então, vamos criar um show público, a função. Aqui, usamos anúncios que aparecem com um ID e esse ouvinte do programa. Agora precisamos escolher quando chamaremos essa função show Ed e o que acontecerá, então. Parte da lógica estará nas funções show start e show complete. Na função show complete, damos uma recompensa ao jogador. No nosso caso, reviveremos o jogador e ele continuará jogando. Cada jogo é diferente, então cada implementação é diferente. É por isso que decidi fazer a implementação real em uma palestra separada. Este é apenas um modelo e preparações básicas. Então, nos vemos na próxima aula em que implementaremos a lógica principal. 69. Anúncios recompensados [2]: Olá a todos, bem-vindos à segunda parte da implementação de anúncios gratificantes. Agora que temos uma base sólida, podemos realmente criar um domínio, uma lógica. A ideia é ter a possibilidade de assistir a um anúncio em um anúncio ignorável depois o jogador for destruído e depois continuar o jogo. Esta palestra será um pouco mais longa porque precisamos abordar muitas coisas, não apenas o DE. Portanto, concentração máxima para este. Primeiro, precisaremos de uma referência ao player e ao banner. Quando começamos a mostrar um anúncio gratificante, precisamos esconder o banner. Também defina a escala de tempo como zero para congelar o tempo. Então, vamos escolher o que acontece quando a ajuda gratificante for concluída. Usamos a declaração if e usamos esse ID de posicionamento para verificar o ID ou o ED. Por isso, garantimos que trabalhamos com a recompensa correta. Em seguida, verificamos o estado de conclusão, que é o status do anúncio. Use os auxílios Unity, mostre o estado de conclusão. Como você pode ver, podemos verificar o script concluído ou o estado desconhecido. Precisamos ser concluídos. Essa condição garantirá que executemos o código somente se a recompensa correta for concluída. Em seguida, retome o tempo definindo a escala de tempo como um. Então, podemos ativar o player. Observe que precisaremos alterar o código nas estatísticas do jogador para não destruirmos o objeto do jogador. Em vez de destruí-lo, nós o desativaremos e o habilitaremos. Aqui. Precisamos, novamente, carregar e mostrar o ID do banner. Em seguida, podemos preparar e permitir a próxima, recompensando-a. No Unity, arrastar o banner para o anúncio e o player. Depois, podemos acessar as estatísticas dos jogadores. Como eu disse, aqui, não queremos destruir o jogador. Então, comente destrua. Vamos desativar o player. Obviamente, precisamos resolver como redefinir as variáveis toda vez que ativamos o jogador, por exemplo, precisamos redefinir a saúde, barra de saúde e assim por diante. É por isso que substituímos start por ONE enable. Basta mover o jogador que está atirando, obter o componente na função de início. Vamos para a unidade. Agora, vamos criar uma tela que terá um botão. A tela aparecerá quando desativarmos o player. Vá para o Canvas, selecione o painel e altere o alfa para um. Em seguida, selecione Tela e duplique-a. Renomeie isso. Em seguida, ative-o. Clique duas vezes no painel e amplie. Vamos criar um novo botão. Eu vou ligar, jogar. Exclua o texto, não precisamos dele. Então, podemos mudar o sprite. Vá para os sprites. Você escolhe esse botão laranja de reprodução e o arrasta para o campo da imagem de origem. Clique em Definir tamanho nativo. O tamanho é bom. Agora precisamos organizar os elementos. Vamos expandir um pouco o plano de fundo. Mova a pontuação e a pontuação máxima para baixo e mova o botão de adição para cima. Isso parece bom. Agora vamos abrir o script do controlador do painel, que controla as telas de vitória e derrota. Precisamos adicionar a tela vermelha que criamos. Portanto, precisamos de outra variável de objeto do jogo. Eu chamo isso de tela solta. Como antes, vamos criar uma função pública que a ativará. Defina Canvas alpha como um e ative o objeto do jogo. Nesse caso, precisamos de mais uma função que desative a tela. Defina alfa como zero e desative o objeto do jogo. De volta ao Unity. Não se esqueça de arrastar a tela de Ed Lewis para o script do controlador do painel. Agora selecione o botão play. Precisamos adicionar funções a esse botão, Criar para eventos onclick. Para a primeira, arraste o controlador do painel. Aqui, precisamos desativá-lo, perder. Então, quando pressionarmos esse botão, desativaremos essa tela. Em seguida, arraste o objeto Ed recompensado chamado The Show add function. Podemos desativar a tela. Agora. Selecione o painel e retorne alfa para zero. Vamos usar o script final do gerenciador de jogos para implementar mais lógica. Role para baixo e crie uma nova função pública, o jogo Ed Lewis. Aqui usamos o controlador do painel e ativamos a tela de edição. Precisamos ter cuidado porque um jogador pode decidir não assistir e reiniciar o jogo ou sair do menu principal. Portanto, precisamos usar a função de conjunto de pontuação que salvará a pontuação no highscore. Mas também redefinirá a variável de pontuação para zero. Isso causará problemas se um jogador decidir assistir a um anúncio e continuar jogando. I have n é uma solução para isso. Vamos mudar o modificador de acesso da variável de pontuação, torná-la pública. Então vá para a cama recompensada. Quando a cabeça começa, podemos carregar a pontuação. Use PlayerPrefs para obter int. A melhor ideia é copiar e colar a chave. Então, aqui salvamos a pontuação antes de apagá-la. Vamos copiar a chave e colá-la aqui. Ok, ainda não terminamos, mas podemos testar isso. No End Game Manager. Quando perdemos um jogo, vamos chamar a função de jogo auxiliar de Louis. Observe que alteraremos essa declaração, se não for o caso, em um momento. Isso é apenas para testar. Vamos começar pelo nível de seleção. Vá para o nível um e vamos perder o jogo. Você pode ver essa pontuação, a pontuação mais alta e o botão Adicionar. Vamos clicar nele. Assistimos a um anúncio e, quando ele terminar, podemos continuar o jogo com um pouco de saúde. Observe que a pontuação continua aumentando, não é zero. No entanto, neste momento, podemos assistir ao anúncio toda vez que perdermos o jogo. Não é isso que queremos. Precisamos limitar essa opção. Precisa aparecer talvez apenas uma ou duas vezes. Só quero uma pequena digressão. Às vezes, se você tentar testar isso diretamente do nível um, receberá um erro porque, na função End Game Manager, instância End Game Manager ainda não foi criada e tentamos usá-la para resolver isso. Vá para Configurações do projeto. Em seguida, execução do script, ordem. No final, o script do gerenciador de jogos para a lista e, em seguida, mova-o acima do horário padrão. Deve ter um valor negativo. Agora, o script será executado antes de outros scripts. Isso significa que a instância será criada antes de tentarmos chamá-la em sua própria função de ativação. Você pode ver que não há erros agora. Ótimo. Antes de continuarmos com outras coisas, vamos adicionar algum tempo de proteção ao player. Quando o ajudante terminar, vá para os estados dos jogadores e crie um público. Bool, pode tomá-los como variáveis, defina o valor padrão como verdadeiro. Então, vamos criar uma função de enumerador de olhos. O conjunto pode ser danificado até falso. Então esperamos um pouco. Vou usar 1,5 s. Depois disso, definimos que o dano pode ser verdadeiro. Na função danificada da etiqueta do jogador, verificamos se a opção pode sofrer dano é falsa. Em seguida, retorne e não prejudique o jogador. Na própria função de ativação. Use start coroutine para chamar a função de proteção contra danos. Bom. Agora, quero dar proteção adicional ao jogador quando mostramos o para-brisa. No End Game Manager, vamos criar a variável de estados do jogador, que eu chamo de jogador. Em seguida, vamos criar uma função para registrar as estatísticas dos jogadores. Esse é o mesmo procedimento para outras funções de registro. Defina dois estados para o jogador, jogador, depois vá para os estados do jogador. E na função de início, vamos registrar as estatísticas desse jogador no gerente. Em End Game, Manager. No jogo, um conjunto de funções pode ser danificado como falso. Quando mostramos o para-brisa, nada pode acontecer com o jogador. Agora, precisamos atualizar esta declaração, caso contrário, com algumas condições. Só para lembrar você, isso é importante para esse conceito. Quando derrotamos o chefe ou atingimos o cronômetro. Primeiro, esperamos um pouco antes de resolver o jogo. É por causa de balas e inimigos que ainda podem estar na tela. Agora, quando implementamos ajudas, há um caso em que o chefe e jogador podem ser destruídos ao mesmo tempo. Além disso, o jogador pode ser destruído no final de um nível abaixo desses 2,5 s. Estamos no final de um nível. Não queremos aparecer na tela. Precisamos mostrar uma tela solta. Nesse caso. É por isso que introduzimos uma nova variável. Vamos criar uma variável pública de bool, possível vento. Então, como usamos essa variável? Vamos ver o roteiro de condições de vento. Quando o cronômetro expirar e não tivermos um chefe, defina possível quando como verdadeiro. Quando temos um chefe , precisamos ir até o chefe dele nesse estado. Quando destruímos o chefe, definimos o possível, quando o verdadeiro volta para o gerente. Quando possível, quando é verdade? Isso significa que derrotamos o chefe ou o cronômetro expirou, e o GameOver é falso, que significa que não, eles ativam o jogador, então queremos o jogo. Próximo caso. contrário, se possível, quando é falso, que significa que não estamos no final de um nível, mas desativamos os jogadores porque o fim do jogo é verdadeiro, então queremos mostrar uma tela. Precisamos de outro. Se sim, se possível, quando é verdade e o fim do jogo é verdadeiro. Isso significa que o jogador é ativado no final de um nível. Então não use uma tela, apenas uma tela solta. Vou apenas colocar comentários para que seja mais fácil de entender. Desde o final, o gerente de jogo é estético único. Precisamos redefinir a variável when possível em outro script. Podemos acessar as estatísticas dos jogadores. No início. Podemos defini-lo como falso. Então, toda vez que iniciarmos um nível, ele será falso. Agora, precisamos limitar o número de anúncios. Vamos criar uma referência para anúncios premiados. Em seguida, crie uma função para registrá-la. Eu chamo isso de registro recompensado em. O procedimento é o mesmo de antes. Acesse o roteiro do anúncio premiado. Na função de início, vamos registrar esse objeto. Em seguida, vamos criar um número int público. Por padrão, ele pode ser um. Isso significa que só podemos assistir a um, recompensado. Back to End Game Manager. Na função do jogo Ed Lewis, verificamos o número de anúncios. Se for maior que zero, mostre a tela do anúncio e diminua o número em um. Senão. Não temos mais nada. Portanto, use o controlador do painel para ativar a tela perdida. Agora podemos experimentá-lo. Eu terei apenas um anúncio. Vamos jogar o jogo e perdê-lo. Uma vez. Assista ao anúncio. Em seguida, continue jogando e perca novamente. Não temos mais nada. Então, vemos a tela de Louis. Bom. Você pode criar um pré-fabricado gratificante. Além disso, não se esqueça de substituir as alterações na tela. E terminamos. Se precisar, você pode adicionar um pouco de lógica quando o auxílio não mostrar que isso é específico para cada jogo, mas agora você tem uma ideia do que precisa fazer. Coisas para assistir e ver você na próxima palestra. 70. Notificações Android: Olá a todos. Vamos ver como podemos criar notificações para dispositivos Android. Primeiro, certifique-se de usar a plataforma Android. Em seguida, vá para o Gerenciador de Pacotes, selecione Unity Registry e pesquise notificações, selecione notificações móveis e clique em Instalar. Agora, vamos criar um novo objeto de jogo vazio. Vou chamá-la de notificação de Android. Em seguida, precisamos criar um script. Para se manter organizado. Vou criar uma nova pasta de notificações, criar um novo script e chamá-lo de exemplo de notificação de Android. O script para o objeto e abra-o. Primeiro, precisamos da unidade no namespace de notificação do Android. Agora, vamos criar algumas variáveis. Precisamos de um ID de notificação inteiro e um exemplo de ID de canal de sequência de caracteres. Em seguida, vamos criar uma função de exemplo de notificação pública de anulação. Será necessário um parâmetro, data e hora. Com a data e hora, podemos manipular a hora e determinar quando enviar uma notificação. Para entendê-lo melhor, podemos depurá-lo. Posso dizer, por exemplo, aquela vez. Agora, o que me dará a data e a hora atuais. Basta convertê-lo em uma string para que possamos vê-lo. Comece o jogo. E no console, você deve ver a data e a hora atuais como uma string. Bom. Então, precisamos fazer duas etapas. A primeira é criar um canal de notificação e a segunda é criar uma notificação real. Vamos começar com o canal de notificação. Use o canal de notificação do Android e crie uma nova instância. Primeiro, definimos o ID do canal. Aqui. Podemos colar a variável de exemplo do id do canal que criamos. Então, podemos dar um nome ao canal. Em seguida, podemos ter uma descrição. Não é realmente importante para o que fazemos. Então, podemos definir a importância. A importância da notificação é usada para determinar o quanto a notificação deve interromper o usuário. Você pode ver o que cada opção faz. Eu vou usar o padrão. Depois de criarmos um canal de notificação, precisamos registrá-lo. Portanto, use a central de notificações do Android, esse canal de notificação registrado paga o canal que criamos. A segunda etapa é criar uma notificação para Android. Crie uma nova instância. Primeiro, podemos definir o título e depois o texto da notificação. Também podemos escolher ícones pequenos e grandes. Para a notificação. Vou usar o ícone padrão, que é o logotipo unitário. Então, como mudá-los? Acesse Unity, configurações do projeto e notificações móveis. Aqui você pode adicionar suporte ao ícone de notificação para Android. Você pode escolher ícones pequenos para ampliar, e cada ícone tem um identificador de sequência de caracteres. Então, por exemplo, se você definir um pequeno ícone com o identificador de exemplo, então você digitaria esse identificador no script. A última coisa que precisamos é de uma hora de fogo. Essa é a data e hora em que a notificação será enviada. Aqui usamos o parâmetro time to fire. A notificação está concluída. Agora precisamos dispará-lo. Usamos a central de notificações do Android que enviou uma notificação, colamos o ID do canal de notificação. Agora, precisamos determinar quando e como agendar a notificação. Para nosso propósito, usaremos o foco no aplicativo. Sua própria função de foco de aplicação tem um foco de parâmetro de parafuso. Essa função é chamada quando o aplicativo perde ou ganha foco. Isso significa que, quando minimizarmos a aplicação, o foco do parâmetro será falso. Quando maximizarmos ou inserirmos o aplicativo, foco se tornará realidade. Portanto, nossa ideia é agendar a notificação quando o player minimizar o aplicativo. Depois de algum tempo, diremos ao jogador que volte e jogue. Então, se o foco for falso, podemos usar data, hora, configurá-la para a hora atual e, em seguida, podemos adicionar hora. Como você pode ver, podemos adicionar dias, horas, minutos, segundos e assim por diante. Vamos adicionar um dia a partir da hora atual, que será quando o player minimizará o aplicativo. Em seguida, chamamos de exemplo de notificação e os pagamentos foram disparados na data e hora. Se o jogador retornar e abrir o aplicativo antes do envio da notificação , precisaremos cancelar a notificação agendada. Podemos cancelá-lo com uma central de notificação vermelha que pode vender todas as notificações agendadas. E, novamente, quando um jogador minimiza o aplicativo, adicionamos tempo e agendamos outra notificação. Observe que isso cancelará todas as notificações agendadas. Eu vou te mostrar como cancelar apenas essa notificação aqui. Quando enviamos a notificação, podemos usar enviar notificação com ID explícito e colar o ID do canal de notificação. Em seguida, precisamos colar o ID da notificação. Se você se lembra, criamos uma variável para isso. Então paga o ID de notificação. Então, em vez de cancelar todas as notificações agendadas, podemos usar a notificação agendada e pagar o ID da notificação. Ótimo. Para fins de teste. Não vamos usar isso. Em vez disso, basta adicionar 10 s. Ainda não terminamos. Temos uma coisa importante a fazer porque criaremos este jogo para Android e iOS. Esse código nos causará erros ao criar para iOS. Para resolver esse problema, precisamos compilar o script somente se estivermos usando o Android. Então, primeiro, vamos resolver o namespace de notificação do Android. Usamos if Unity Android e o fechamos com hash. E se. Agora essa linha de código será compilada apenas para dispositivos Android, também precisamos fazer o mesmo dentro da classe. Não precisamos da massa que registra antes da função de exemplo de notificação. Se o Unity for Android , feche-o após a própria função de foco do aplicativo. Agora terminamos. Se quiser, você pode criar variáveis com valores padrão e colá-las na função. No Unity, você pode mudar valores , criar um pré-fabricado e colocá-lo em cada pecado que desejar. Vamos criar o aplicativo no telefone para testá-lo. Construir para o telefone é abordado em palestras anteriores. Então, verifique se você não fez isso. Ok, agora estamos no telefone e vamos abrir o jogo. Vá para o nível de pecado de seleção. Então, podemos minimizá-lo. E em 10 s, devemos ver a notificação. Como você pode ver, está aqui. Clique nele e estamos de volta ao jogo. Você pode usar esse conhecimento para criar diferentes tipos de notificações. E isso é tudo para esta palestra. Obrigado por assistir e até a próxima. 71. Notificações iOS: Olá a todos. Vamos criar notificações para dispositivos iOS. A lógica será a mesma dos dispositivos Android. Apenas a sintaxe é diferente. Se você não assistiu à palestra de notificação do Android, sugiro que faça isso antes de assistir a esta. Nota. Apenas uma coisa importante para testar as notificações no seu iPhone. Você precisa ter uma conta de desenvolvedor da Apple. Custou $99 por ano. Portanto, tenha isso em mente. Ok, primeiro, vamos mudar a plataforma para RS. Em seguida, vá para o Gerenciador de Pacotes , selecione Unity Registry, procure o pacote de notificações móveis e instale-o. Se você não fez isso. Fizemos isso na palestra anterior. Em seguida, vá para Configurações do projeto, selecione Notificação móvel e vá para iOS. Habilite a autorização de solicitação por lançamento. Isso abrirá uma janela pop-up de diálogo quando um jogador entrar no jogo pela primeira vez e, em seguida, um jogador poderá permitir notificações. Isso nos poupará muito trabalho. Caso contrário, precisaríamos fazer isso sozinhos no código. Agora, vamos criar um novo objeto de jogo e chamá-lo de notificação do iOS. Em seguida, crie um novo script, que chamarei de exemplo de notificação do iOS. Eles escreveram o objeto e o abriram. A ideia é criar uma notificação que convide um jogador a voltar e jogar o jogo depois de algum tempo. Primeiro, vamos usar a unidade na notificação, namespace iOS. Não precisamos de funções padrão. Vamos criar uma variável de string, ID de notificação. Em seguida, crie um exemplo de notificação pública de anulação. Aqui, criamos uma instância de notificação do iOS. A primeira coisa que atribuímos é o identificador, cole o ID da notificação. Em seguida, podemos definir o título da nossa notificação. Também temos o subtítulo. Então temos o corpo. Este será um texto para a notificação. A próxima propriedade é mostrada em primeiro plano. Se definido como verdadeiro, ele mostrará uma notificação. Mesmo que o aplicativo esteja aberto, nossa notificação convidará um jogador a voltar e jogar. Portanto, precisamos configurá-lo como falso. Só para mostrar se você planeja fazer outro tipo de notificação e definiu essa variável como verdadeira, então você pode escolher a opção de apresentação em primeiro plano. Se você for o tipo de opção de apresentação, poderá ver alerta, emblema, nenhum e som. Basicamente, você escolhe que tipo de notificação será. Você também pode usar combinações. Assim, você pode, por exemplo, escolher Alerta e, em seguida, escrever um alinhamento vertical. Usamos dois deles para OR lógica, mas aqui escrevemos apenas um. Então eu também posso usar o som. A próxima propriedade é identificador de categoria. Você pode agrupar as notificações em categorias e, em seguida, realizar algumas operações que afetarão todas as notificações do mesmo grupo. Não é tão importante no nosso caso, então defina-o para a categoria a. A próxima coisa é o identificador de thread. Além disso, não é importante para o que estamos fazendo. Então, vamos seguir a documentação. Será o primeiro tópico. Então temos uma propriedade importante. É gatilho. Ele determina quando enviaremos a notificação. Então, vamos criar um novo gatilho de intervalo de tempo de notificação para iOS . Em seguida, defina o intervalo de tempo para o novo sistema, esse intervalo de tempo. Aqui, podemos escolher adicionar dias, horas, minutos, segundos e assim por diante. Para escolher um dia, mudamos isso para um. Mas, para fins de teste, vamos usar 10 s. Depois, precisamos definir as repetições como falsas para não repeti-las. Essa notificação a cada 10 s. Depois de criarmos a notificação, vamos agendá-la. Use a central de notificações do iOS que agende notificação e cola a notificação. Em seguida, usaremos a própria função de foco do aplicativo. Para obter mais detalhes sobre essa função, confira a palestra de notificações do Android. Mas, essencialmente, esse parâmetro de foco se torna falso quando minimizamos o jogo. E é verdade quando maximizamos o jogo. Quando minimizamos o jogo, queremos chamar o exemplo de notificação que agendará a notificação. Se o jogador retornar ao jogo antes do envio da notificação , precisaremos removê-la. Você remove a notificação agendada e paga o ID da notificação. Estamos quase terminando. Se quiser, você pode criar as variáveis e depois colá-las na notificação. A última coisa que precisamos fazer para evitar erros é compilar esse script somente se estivermos criando para iOS. Primeiro, vamos resolver o namespace. Usamos hash no Unity iOS e o fechamos com dinheiro. E se. Agora essa linha será compilada apenas para dispositivos iOS, precisamos fazer o mesmo dentro da classe. Vá para a unidade. Podemos definir as variáveis no Inspetor, depois criar um pré-fabricado e colocá-lo em todas as cenas que você desejar. Como eu disse a essas notificações para iOS, precisamos ter uma conta de desenvolvedor da Apple, que eu não tenho atualmente. Se você tiver uma, você pode criar o jogo no telefone e testar. A construção por telefone foi abordada em palestras anteriores do curso. Isso é tudo para esta palestra. Nos vemos na próxima. 72. Perfis: Olá a todos. Nesta palestra, veremos como usar o profiler e detectar possíveis problemas de desempenho. Também aprenderemos como usar o profiler diretamente com seu telefone. Vamos começar com o Window Analysis and Profiler. Deveríamos ver algo assim. Primeiro, verifique se o botão de gravação está ligado. Em seguida, habilite a criação de perfil. Perfilamento profundo ativado. O criador de perfil analisará cada parte do seu código de script e gravará todas as chamadas de função. Depois, podemos escolher como queremos ver a hierarquia de seleção de dados. Em seguida, coloque essa guia em algum lugar abaixo, assim. E podemos estendê-lo. Quando pressionamos o botão Play, devemos ver alguns dados no gráfico. Os dados são medidos quadro a quadro. Se pressionarmos qualquer quadro, o jogo posará e poderemos ver detalhes sobre esse quadro específico. Você deve procurar picos pois eles indicam uma queda no desempenho. Lembre-se de que os picos são normais ao carregar e alterar os níveis. Coisas que você deve procurar para nossa coleta de lixo e tempo em milissegundos. Observe que você pode ignorar o loop do editor. Isso é do editor Unity. Ele não existirá quando você criar o jogo. Podemos até mesmo remover esses dados do gráfico desativando outros. Observe que todos os dados são apresentados por uma cor, por exemplo, scripts ou azul escuro. Além disso, você pode ficar de olho no FPS no lado esquerdo. Agora, sobre os dados, estamos interessados no player loop. Então expandido para obter mais detalhes. Aqui você pode ver dados de todos os tipos de scripts e pacotes. Podemos encontrar os roteiros que fizemos. Vá para atualizar esse script, executar comportamento, atualização de comportamento. Apenas observe que não temos nenhum problema aqui. Não há coleta de lixo e o tempo é muito curto. Você pode ver as chamadas de atualização em nossos scripts. Por exemplo, aqui está uma atualização do meteoros pounder. Existem controles de jogadores e assim por diante. Obviamente, você pode expandi-lo para obter mais detalhes. Lembre-se de que é importante comentar, excluir depurar registros antes de criar e publicar o jogo. Para mostrar por que eu criei um objeto com o script, me encontre. Ele só tem o bug log n update. Vamos rodar o jogo. Selecione qualquer quadro, encontre o script. Você pode ver que a lista de pendências cria um pouco de lixo e leva 0,13 milissegundos para descartá-lo. Tenha isso em mente. No entanto, estamos fazendo um jogo para telefones. Portanto, testar em um PC não fornecerá a imagem real, especialmente se você tiver um PC muito bom. Eu vou te mostrar como usar o profiler com dispositivos Android. Para o iPhone, é um pouco diferente. Então, vou colocar o link para a documentação para usar o criador de perfil com seu telefone, acessar Arquivo, Criar configurações, conectar seu telefone e selecioná-lo como dispositivo. Tenho um velho que está fora para fazer testes. Em seguida, habilite o desenvolvimento desenvolvido a partir do Connect Profiler e a criação de um perfil profundo do suporte. Depois, você pode clicar em Construir e correr ou lançar e correr. Espere até que tudo esteja pronto. O jogo deve ser executado em seu telefone e o criador de perfil deve ser executado automaticamente. Se você não vê nenhum dado, expanda o modo de exibição, acesse dispositivos locais e escolha seu telefone. Se o jogo estiver rodando, você deverá ver os dados. Observe que esses dados são do seu jogo no telefone. Esperamos alguns picos e quedas no desempenho ao passar de um nível para outro e esse tipo de coisa. Isso é normal. Selecione qualquer quadro e defina o script. Onde está o registro de pontos de depuração? Você pode ver o registro de atualização e depuração. Ele cria lixo e desce o jogo no telefone. Portanto, não se esqueça de excluir os registros de depuração. É uma boa ideia testar o jogo em mais telefones. Então, convide seus amigos e veja como se sente em diferentes dispositivos Quanto mais telefones, melhor. O objetivo é detectar a coleta de lixo e outros problemas. Se você os encontrar, precisará pensar em como melhorar e otimizar scripts. Às vezes é possível e às vezes não. Cada jogo é diferente. Isso é tudo para esta palestra. Nos vemos na próxima. 73. Pooling de objetos: Olá a todos. Vamos otimizar um pouco o jogo. Como você sabe, quando atiramos, muitas balas são criadas e destruídas. Isso pode ser um pequeno problema para dispositivos mais antigos, então precisamos resolvê-lo. A ideia é criar a extração de objetos. Imagine que temos uma piscina com objetos do jogo, neste caso balas. Eles são instanciados , mas inativos. Quando atiramos, pegamos uma bala da piscina e a ativamos. Então não destruímos balas. Nós os devolvemos à piscina e os reutilizamos. Vamos ver como podemos aplicar isso em nosso jogo. Selecione o jogador e escolha o jogador que está atirando. Usaremos a unidade embutida no método de extração de objetos. É relativamente novo. Usamos o namespace do pool de mecanismos Unity. Precisamos substituir esse tipo de objeto de jogo pelo script usado pelas balas, que é uma bala laser. Lembre-se do nome dessa variável, blazer bullet. Próximo. Para criar uma variável de pool de objetos. Dentro de colchetes pontiagudos, escolhemos o tipo desse poste. Por exemplo, você pode ter um conjunto de objetos de jogo, mas precisamos de um conjunto de balas de laser. Vou chamá-lo de pólo. Em seguida, precisamos criar uma nova instância desse pool. Na função de despertar, use um novo poste de objeto e um tipo de bala laser entre os colchetes pontiagudos. Em seguida, abra e feche o parêntese. Você notará que temos um erro porque precisamos criar algumas funções para o pool e pagá-las entre parênteses. Portanto, a primeira função é na qual instanciamos o objeto de que precisamos. A segunda função é usada para pegar o objeto que criamos. Chamamos isso escrevendo o nome da enquete, que é polo no nosso caso , e a terceira função é usada para retornar o objeto ao pólo e a chamamos com Paul nessa liberação. Vamos criar a primeira função que criará objetos para a pesquisa. Essa função precisa retornar o mesmo tipo do tipo de pesquisa, que é bala laser. Eu chamo isso de criar um objeto de pesquisa. Aqui. Um exemplo da bala laser. Portanto, instancie a bala laser com a posição e rotação do jogador ao criar um objeto. A posição e a rotação não são importantes em nosso caso, porque as alteramos posteriormente. Às vezes, pode ser importante e é uma boa ideia criar objetos fora da tela. Portanto, tenha isso em mente. Então devolvemos a bala. Cole essa função no pool dentro de parênteses. Agora, vamos criar uma função que extrairá objetos da pesquisa. Eu chamo isso, receba uma bala de Paul. Precisa ter um parâmetro, bala laser. Quando pegamos uma bala , vamos ativá-la. Aqui. Às vezes, você pode definir a posição da bala, mas como usaremos várias posições, deixe assim. Em seguida, vamos criar uma função que retornará objetos para a pesquisa. Eu chamo isso de uma bala de retorno de Paul. Além disso, tem um parâmetro, bala laser. Aqui, precisamos desativar a bala. Agora, cole essas funções no poste. Em seguida, precisamos dizer aos marcadores que usem essa enquete. Então, vá para o roteiro das balas de laser. Agora, não destruímos balas, então podemos comentar sobre destruir. Aqui. Também precisamos do namespace polar. Crie uma variável polar de balas de laser. Eu chamo isso de pólo de referência. Precisamos conectar essa variável de pool com a instância de polo que criamos no script de tiro do jogador. Para criar uma função pública de pesquisa de conjuntos de vazios que tomará como um conjunto de parâmetros de balas de laser. Em seguida, defina um pool de referência para agrupar o roteiro de tiro do jogador. Quando criamos uma bala laser, vamos usar uma bala que diz Paul e paga a piscina a partir desse roteiro. Agora, cada bala tem uma referência à enquete. Vamos ver como atirar e tirar as balas da enquete. Não precisamos instanciar. Aqui nós apenas usamos pull that gate. Isso ativará a função. Pegue uma bala da piscina, que ativará a bala. Agora precisamos definir a posição de filmagem. Podemos apenas dizer que transformar, essa posição é igual a duas posições básicas do ponto de tiro. Então, ativamos a bala e colocamos na posição desejada. Por enquanto, vamos ignorar outros casos. Vamos voltar ao roteiro das balas de laser. Agora precisamos implementar a ativação das balas e devolvê-las ao poste. Em vez de destruir, use o polo de referência que libera. E queremos liberar esse objeto. Isso acionará uma bala de retorno da piscina, que desativará a bala. É claro que precisamos repetir isso na própria função que se tornou invisível. Aqui precisamos ter cuidado porque não queremos chamar a função ou o objeto que já foi liberado. Por exemplo, quando a bala é ativada, aqui, ela se torna invisível e chamamos uma liberação novamente. Aqui. Isso nos causará um erro. Para evitar isso. Primeiro, vamos verificar se a bala está ativa. Agora, quando o desativarmos aqui, isso não será chamado. Mas quando a bala sai da tela, ela ainda está ativa. Em seguida, eles o ativam. Então, tudo deve funcionar. Vamos tentar. Isso. Apenas certifique-se de que você tenha o pré-fabricado da bala laser atribuído. Como você pode ver, podemos gastar balas, mas há um problema. Quando criamos marcadores pela primeira vez. Eles têm velocidade, mas quando reutilizamos essas balas, elas não se movem. Vamos consertar isso. Vá para o script de balas de laser. Substitua, comece com UMA ativação. Isso é chamado toda vez que ativamos a bala, vamos tentar agora. Como você pode ver, reutilizamos as mesmas balas e elas se movem. Se todos os marcadores criados estiverem ativos, eles criarão um novo. Bom. Vamos adicionar mais funções para a enquete. Também podemos definir uma função que será chamada quando precisarmos destruir uma bala do poste e isso pode acontecer. Eu vou te mostrar um exemplo em um momento. Crie o objeto OnDestroy Paul que usa o parâmetro laser bullets. Aqui. Vamos destruir o objeto do jogo de balas. Cole essa função no poste. Em seguida, podemos escolher verdadeiro ou falso para a variável de verificação da coleção. Se definido como verdadeiro, o pool verificará as chamadas de liberação dupla que eu mencionei. Deixa eu te mostrar. Podemos comentar essa linha de código e testá-la. Esperamos que os erros apareçam devido a chamadas de liberação dupla. Jogue um pouco e você verá o erro. Tentando liberar um objeto que já foi lançado no poste. É por isso que temos essa condição. Mais tarde, descobri que, se uma bala atingir mais inimigos ao mesmo tempo , esse lançamento também pode causar erros. Portanto, reproduz a mesma declaração if aqui. Eu farei isso mais tarde. Depois, podemos escolher a capacidade padrão e o tamanho máximo da pesquisa. Vamos usar dez como padrão e 30 como máximo. O valor padrão determina a quantidade de memória que queremos reservar. Reserve memória para dez objetos do poste. E o máximo que podemos reservar é 30. É importante entender que, se usarmos todos os três objetos e precisarmos de mais um, esse objeto será criado com essa função. Mas quando o devolvermos à piscina, ele será destruído com essa função. Assim, você pode ter mais objetos do que seu valor máximo, mas eles serão destruídos. Você precisa encontrar o equilíbrio certo entre o padrão e o valor máximo do seu jogo. Agora, vamos terminar a função curta. Substitua instanciate por Paul, que usa as mesmas posições da Instanciate Canaan, e escreva as posições dos canhões. Vou acelerar esse processo até o último caso. No último caso, precisamos de uma abordagem diferente para que a lista instancie funções. Uma vez que também precisamos mudar a rotação. Salvamos a instância em uma variável quando a obtivermos do pólo. Em seguida, definiremos a posição. E depois rotação. Depois de mudarmos a rotação, precisamos definir a velocidade e a direção de uma bala. Então, vá para o roteiro das balas de laser. Aqui, criamos um conjunto público, direcionamos e aceleramos a função. Repita o código da própria função de ativação. Para balas de laser que tenham algum tipo de rotação em Enable, serão chamadas, mas são chamadas antes de definirmos a rotação. Portanto, precisamos chamar essa função depois que a rotação for definida. Aqui, usamos a bala 1 que define a direção e a velocidade. Para repetir o processo para a segunda rotação, 0,1. Por último, precisamos redefinir a rotação das balas. Use ao desativar. Aqui, acabamos de definir uma rotação para zero. Antes de terminarmos, vou apenas colocar outra declaração if que mencionei anteriormente. Vamos tentar. Ao jogar, você pode ver que as balas se tornam ativas e inativas. Nós não os destruímos, apenas os desativamos e os habilitamos. Não temos erros. Tudo funciona muito bem. Você pode usar esse objeto puxando o método em outros lugares do seu projeto. Por exemplo, se você gasta muitos meteoros, pode ir até metros de libra e criar uma pesquisa para meteoros. Isso é tudo para esta palestra. Obrigado por assistir. 74. Build para publicação no Android: Olá a todos. Depois de terminar o jogo, é hora de publicá-lo. A primeira etapa é criar uma versão para Android que possamos enviar para a Google Play Store. Vamos começar. Vá para Arquivo, Configurações de compilação. Certifique-se de usar a plataforma Android. Não se esqueça de adicionar as cenas que você deseja que estejam no jogo. Em seguida, abra as configurações do player. Aqui você pode definir o nome da sua empresa. O nome do produto será o título do seu jogo. Vamos transformá-lo em espaço. Curso mais curto. Podemos ignorar a versão por enquanto. Aqui você precisa adicionar um ícone padrão. Se você acessar ícones, poderá ver níveis específicos de API e substituições para o ícone. Expanda um deles e você verá os tamanhos do seu ícone. Vamos à resolução e apresentação. Aqui, você pode escolher a orientação para o seu jogo. Neste jogo, precisamos de um retrato. Em seguida, vá para a imagem inicial. Aqui você pode adicionar seu logotipo. Quando o jogo começa. Basta clicar no botão de adição e adicionar o sprite. Eu vou te mostrar rapidamente como isso parece. Bom. Há muitas opções. Você pode alterar a cor de fundo, você pode alterar a duração. Além disso, você pode mostrar logotipos um por um e assim por diante. É assim que fica o logotipo, um por um. Em seguida, vá para outras configurações. Aqui temos muitas opções importantes. Role para baixo e encontre a subseção de identificação. Primeiro, precisávamos ter certeza de que temos o formato correto do nome do pacote. Normalmente é assim. Com dot o nome da sua empresa, esse nome do seu jogo. Está correto. Você pode ver apenas um aviso de que personagens inválidos foram removidos, que são espaços no nome do jogo. Você também pode substituir o nome do pacote padrão, se desejar. Vou deixar assim. Então temos a versão. Se o jogo estiver concluído, use 1.0 ou se for uma versão beta, você poderá usar o ponto zero. Algum número. A versão do pacote deve ser uma. Agora, isso é importante quando você planeja atualizar seu jogo. Você precisa alterar a versão, por exemplo, para 1.1 ou algo assim. Só precisa ser diferente do anterior. E você também precisa aumentar a versão do pacote em um. Se você não alterar os números, não poderá publicar uma atualização no Google Play. Tenha isso em mente. Em seguida, você escolhe o nível mínimo de API que seu jogo suportará. Vou deixar a API mínima como está. Em seguida, você tem a opção de nível de API de destino. O Google Play tem um nível mínimo de API alvo. Isso muda com o tempo. Você pode conferir online, basta pesquisar no Google. O objetivo de criar essa palestra é o que diz o Google. A melhor abordagem é escolher a API de mais alto nível possível. O próximo requisito para o Google Play é que os aplicativos precisem ter a arquitetura de destino ARM 64. Como você pode ver, podemos habilitá-lo. Então, altere o back-end do script e agora ele está habilitado. Em seguida, vamos para Configurações de publicação. Precisamos criar um KeyStore. E chave. A chave é algum tipo de certificado de que você é o proprietário do aplicativo. Clique em gerenciador de armazenamento de chaves, depois em KeyStore, Criar novo. E eu vou escolher em qualquer lugar, escolher um nome para a estrela K. Agora, adicionamos uma nova chave, criamos uma senha e escolhemos alias. É algum tipo de identificação para o k. Então você pode usar a mesma senha. Clique em Adicionar. Kay. Ótimo. Vamos voltar às configurações de compilação. Precisamos verificar o pacote construído , o Google Play. Agora clicamos em Construir, escolhemos sua localização e nome do arquivo. Isso levará algum tempo, especialmente se você estiver fazendo isso pela primeira vez. Quando a construção estiver concluída, você terá um arquivo AAB. Nós o usamos para publicar o jogo no Google Play que será abordado nas próximas palestras. Então nos vemos lá. 75. Política de privacidade: Olá a todos. Antes de começarmos a palestra de publicação, vamos criar uma política de privacidade para nosso jogo. Se você planeja ter anúncios em seu jogo ou se seu público-alvo é composto por crianças menores de 13 anos, o Google Play exige que você tenha uma política de privacidade. Existem muitos sites geradores de políticas. Vou te mostrar um exemplo. O link estará nos recursos. Primeiro, você colocará o nome do seu aplicativo. Então, seu e-mail é uma informação de contato. Em seguida, você pode colocar diretamente as informações coletadas para o nosso jogo. Não estamos coletando nada, mas estamos coletando serviços de terceiros, que resolveremos na próxima seção deste gerador. Então, vou deixar isso vazio. Escolha seu tipo de aplicativo e, em seguida, escolha sua plataforma de destino. Este jogo é para Android. Em seguida, você escolhe se é um indivíduo ou uma empresa e insere seu nome ou nome da empresa. Clique no botão Avançar aqui. Você deve ver a lista de serviços de terceiros. Se você usar alguns deles, basta marcar as caixas. Usamos o Unity. Clique em Avançar. Agora você deve ver os termos e condições e o gerador de documentos de política de privacidade. Precisamos da política de privacidade. Então esse é o texto da nossa política. Observe que um link para seus serviços de terceiros e suas políticas estão incluídos. Precisamos publicar essa política. Então, vamos copiar o texto inteiro. Pesquise o Google Sites. Novamente, o link estará nos recursos. Crie um novo espaço em branco, cite. O título pode ser política de privacidade. O nome do site pode ser o nome do seu aplicativo. Em seguida, cole o texto. Verifique se tudo está aqui e clique em Publicar. Escolha seu endereço da web e conclua o processo. Agora, podemos ver esta página. Ótimo, temos uma política de privacidade para o nosso jogo. É uma boa ideia criar um botão em seu jogo que abra esse link e leve o jogador a este site. Mas isso é outro assunto. Nos vemos na próxima palestra. 76. Formulários do Google Play: Olá a todos. Nesta palestra, preenchemos e acessamos os fóruns do Google Play. Essa é uma etapa necessária no processo de publicação. Então, primeiro, você precisa acessar o console do Google Play. Parece algo parecido com isso. Acesse o Play console. Você precisará criar uma conta de desenvolvedor. Custa $25 e é um pagamento único. Depois de criar sua conta, você será direcionado para esta página. Clique em Criar aplicativo. Em seguida, insira o nome do seu aplicativo e escolha o idioma padrão. Precisamos selecionar o jogo. É gratuito ou pago? É grátis. Em seguida, aceite os termos e clique em Criar. Você será redirecionado para o painel. Aqui você tem três seções principais: degustação, configuração e lançamento. Primeiro, vamos passar pela seção de configuração. Examinaremos passo a passo essa lista de marcadores. Observe que vou inserir as informações com base no jogo que fizemos no curso. Cada jogo é específico, então algumas opções e informações podem ser diferentes para seu jogo. Vamos começar com a política de privacidade. Instruções. Digamos que devemos adicionar uma política de privacidade. Se nosso público-alvo incluir crianças menores de 13 anos, eu não vou público-alvo. Mas ao usar o EDS, ainda precisamos fazer isso. Então, na palestra anterior, fizemos uma política de privacidade, copiamos o link para essa página. Em seguida, clique em Salvar. Volte para o painel. Você pode notar a marca de seleção verde quando a etapa for concluída. Vamos para o próximo acesso IP. Os usuários não precisam criar uma conta para jogar. Não temos nenhum modelo de assinatura ou algo assim. Portanto, escolha que todas as funcionalidades estejam disponíveis sem restrições de acesso. Salve-o e volte ao painel. A seguir está a seção EDS. Sim, nosso aplicativo contém Ed's. Alguns desses formulários são muito curtos e outros um pouco mais longos. O mais complicado é a segurança dos dados. Então não perca isso. Vamos para a classificação do conteúdo. Essa é uma tarefa um pouco mais longa. Além disso, insira seu e-mail e escolha uma categoria. Em seguida, clique em Avançar. Agora, precisamos responder algumas perguntas. Isso é específico para cada jogo em nosso jogo. Se não tivermos nenhuma violência ou sangue. Não há fator medo. Agora, sexualidade e jogos de azar, basicamente, todas essas respostas seriam não. Clique em Avançar. E envie. Vá para Público-alvo. Escolha faixas etárias. Observe que, para este jogo, podemos incluir crianças menores de 13 anos, mas certifique-se de que, na unidade que está na seção, você escolha a opção certa. A seguir, este jogo será atraente para crianças menores de 13 anos. Digamos que não, isso é um pouco questionável, mas tudo bem. O Google a analisará e você poderá alterar sua resposta em seguida e salvá-la. Este não é um aplicativo de notícias. Então COVID-19, não temos nada com isso. Agora vamos para a Segurança de Dados. Sim, coletamos e compartilhamos dados por meio de serviços de terceiros. Esses dados são criptografados. Sim, os usuários podem solicitar sua exclusão. Todo auxílio à imunidade tem esse ícone em um dos cantos. Se os usuários clicarem nele, poderão solicitar que a UNITAID exclua dados e algumas outras opções. Em seguida, aqui precisamos selecionar todos os dados coletados. Como sabemos que, se você usar as ajudas unitárias , podemos dar uma olhada na documentação do Unity. Esta é a seção de segurança de dados do Google Play para anúncios Unity. Vou colocar o link nos recursos. Nesta página, você pode ver quais tipos de dados são coletados. Por exemplo, vamos dar uma olhada nesta seção de localização. Coletamos localizações aproximadas e não coletamos localizações precisas. De volta ao Google Play Console. Selecione a localização aproximada. A seguir está a seção de informações pessoais. Acesse a documentação do Unity. Veja a tabela de informações pessoais. Os únicos dados coletados são os identificadores pessoais do usuário. Portanto, selecione IDs de usuário. Agora basta seguir as tabelas da documentação do Unity e você conseguirá selecionar as opções corretas. Observe que, se você usar outros serviços de terceiros, deverá encontrar tabelas e dados semelhantes em seus sites. Assim, você pode preencher corretamente este formulário. Depois de terminar isso, clique em Avançar. Agora estamos na seção de uso de dados no tratamento. Para cada opção que selecionamos, precisamos fornecer mais informações. Por exemplo, vamos começar com a localização. De novo. Nós olhamos para a mesa. A localização é coletada e compartilhada. Não é necessária nenhuma coleta de dados e você pode ver o propósito dessa coleta de dados. Portanto, marque as duas caixas. Isso é agora e isso é sim. Em seguida, marque os propósitos e selecione as caixas que correspondam à tabela. Salve isso. Você pode prosseguir com outros dados, acessar informações pessoais, encontrar a tabela e repetir o processo. Depois de terminar, clique em Avançar e enviar. Este não é um aplicativo governamental. As próximas duas tarefas são para apresentar seu aplicativo no Google Play. Vá para o primeiro. Isso é, novamente, escolher sua categoria. Nosso jogo entraria na categoria de ação. Acho que sim. Aqui você pode adicionar tags. Eu vou pular isso. Em seguida, insira seus dados de contato. Você também pode adicionar seu site. Salve isso. Abra a última tarefa. Aqui você tem o nome, descrições curtas e completas que aparecerão na Google Play Store. Em seguida, você precisa fazer o upload do seu ícone. Esse ícone deve corresponder ao ícone que você definiu na unidade. Também precisamos fazer o upload da imagem da capa. Observe que você pode ver as dimensões corretas de cada imagem na parte inferior. Se você tiver um vídeo do YouTube sobre o jogo, você pode colocar o link aqui. Em seguida, você precisa colocar capturas de tela ou telefones e tablets. Vou acelerar isso, salvá-lo e terminaremos com os fóruns. Na próxima palestra, aprenderemos como configurar testes internos para nosso jogo e ajudar a realmente publicá-lo na loja. Te vejo lá. 77. Teste interno e publicação: Oi pessoal. Nesta palestra, aprenderemos como adicionar provadores para que eles possam baixar o jogo antes de outras pessoas e, claro, testá-lo. Em seguida, aprenderemos como publicar o jogo. Ok, primeiro, vá para o teste interno. Selecione a etapa de degustação. Vamos criar uma nova lista de e-mail, um nome para a lista. Depois, você pode adicionar os e-mails dos seus testadores. Você pode adicionar o seu, é claro. Salve as alterações. Em seguida, vá para os lançamentos. Crie uma nova versão. Aqui, precisamos fazer o upload do arquivo AAB que criamos na aula anterior e arrastá-lo para dentro. Isso vai levar algum tempo. Quando estiver terminado. Certifique-se de que o nome mais antigo tenha os números corretos. Você pode escrever algumas notas de lançamento e fornecer informações sobre essa versão. Em seguida, clique em Avançar. Você notará um erro. Precisamos completar mais uma declaração. Se você usar a unidade EDS, isso deve ser sim. Em seguida, selecione essas três opções e salve-as. Volte aos testes internos. Não temos nenhum erro, então podemos iniciar um teste interno. Mais uma vez, vá aos degustadores. Aqui embaixo, você deve copiar o link. Este é o link que você deve enviar aos seus testadores. Usando esse link, os testadores podem baixar seu jogo e testá-lo. Para publicar o jogo. Vá para a produção. Abra a guia Países. Vá para Editar países. Aqui você pode selecionar em quais países deseja publicar seu jogo. Vamos selecionar todos eles. Em seguida, vá para a guia de liberação. Crie uma nova versão. Como já fizemos o upload do pacote de aplicativos, não precisamos fazer isso novamente. Clique em Adicionar da biblioteca. Escolha o pacote que enviamos para testes internos. Certifique-se de que todas as informações estejam corretas. Clique em Avançar e, em seguida, inicie a distribuição para produção. Confirme o lançamento aqui. Eu não vou fazer isso porque eu não vou realmente publicar este jogo. Mas quando você pressiona esse botão, está pronto. Então você espera alguns dias. E se tudo estiver bem, o jogo será publicado na Google Play Store. Se você quiser publicar o jogo em uma data específica, acesse a visão geral da publicação. Aqui. Ative a publicação gerenciada. Nesse caso, depois que o Google aprovar seu jogo, ele não será publicado automaticamente. Você precisará publicá-lo manualmente. E é isso aí, pessoal. Você sabe como publicar um jogo no Google Play. Copia criará jogos incríveis e verá que esse curso ajudou você. Obrigado por assistir e tenha um bom dia.