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.