Bem-vindo de volta, Meus desenvolvedores de jogos favoritos.
Como você pode ver agora, temos três inimigos, x2, muito assustadores.
Deixe-me maximizar o jogo.
E temos um erro em não só ter portas,
como também temos inimigos,
que são três esqueletos.
Esses esqueletos são os caras que precisamos matar para abrir as portas.
Mas, por enquanto, o que fazemos é pegá-los no ato usando uma lista.
Então eu maximizei no jogo,
não deveria ter feito isso.
Agora vou correr de novo.
Se eu olhar para os quartos e hoje agora,
posso ver que tenho os inimigos aqui e tenho as duas portas,
mas a magia é que os pegamos sem adicioná-los manualmente.
Você pode ver que isso acontece automaticamente usando filtros de contato,
usando listas, usando muitas coisas legais.
Então, não vamos perder mais tempo e vamos começar.
Oh, caso.
Então agora temos as portas fechando.
É hora de começar a abri-los.
Como abrimos as portas?
A maneira como vamos permitir que eles abram é quando nos livrarmos
de todos os inimigos que temos no mapa atual.
Então, o que vamos fazer é criar
uma variável que antes de tudo garantirá que todas as
portas se abram quando todos os inimigos forem mortos.
Talvez apenas o nível que você criou não tenha que matar todos os inimigos.
Talvez seja um nível para a loja,
por exemplo, assim como tínhamos no Hades.
É por isso que adicionaremos essa variável.
Então, vamos começar.
Então, aqui temos o controlador inimigo.
Como você pode ver, organizei tudo.
De qualquer forma, não vamos perder tempo porque no gerente errado,
vamos adicionar o volume aqui.
E isso é abrir ou abrir portas.
Quando e eu estamos dy.
Lá vai você. Nós salvamos isso.
Voltaremos aqui e vamos nos certificar de definir esta, esta
sala em particular para ser aberta quando os inimigos morrerem.
Certo, ótimo.
A próxima coisa que precisamos fazer é obter uma referência de todos os inimigos.
Bem, como fazemos isso?
Obviamente teremos vários inimigos.
Isso significa que provavelmente teremos que obter algum tipo de array.
Mas por que não queremos usar uma matriz?
Porque quando temos uma matriz,
como vou demonstrar isso?
Então, por exemplo, você pode ver aqui,
se eu clicar em um desses arrays aqui,
e se eu usar o menos,
isso simplesmente removerá a porta do nosso jogo.
Na verdade, ele não exclui todo o elemento.
Então ainda temos duas portas aqui,
mas uma delas está faltando.
Agora, quando se trata da porta,
isso não é um problema enorme porque já sabemos que teremos apenas duas portas.
Não vamos contá-los.
Não vamos nos livrar deles.
Eles estão lá, são estáticos,
não estão se movendo.
Mas quando se trata dos inimigos,
o que queremos é que queremos obter uma referência a todos os inimigos no mapa.
E então, à medida que os matamos lentamente, um por um,
vamos contá-los.
E se descobrirmos que todos eles desapareceram ,
abriremos a porta.
E isso causará um problema quando estivermos usando uma taxa.
É por isso que vamos usar algo um pouco melhor,
que é a lista.
Então, uma lista é como uma matriz.
Ela representa uma lista de objetos fortemente digitada.
E a propósito, essas são as documentações da Microsoft para o C-sharp,
não a documentação Unity,
mas é praticamente a mesma coisa.
Você pode encontrar exemplos,
você pode encontrar o que quer e lista
a grande coisa sobre eles, pois eles são muito melhores na classificação,
eles são muito melhores em classificar e manipular.
Então, o que podemos fazer é que cada inimigo morre,
podemos removê-lo da lista sem nos preocupar com qualquer tipo de erro,
a lista se ajustará.
Então isso explicou, vou permitir que você encontre a lista,
a classe, encontre a documentação disso.
E vou lançar o desafio de novo, assim como o último desafio que conheço.
Tão irritante quando você tem que fazer algo sozinho sem ver o que eu fiz primeiro.
Mas é hora de crescer,
hora de se tornar verdadeiros desenvolvedores de jogos,
procurar problemas e fazer coisas que nunca encontramos antes.
Essa é a beleza disso.
Veja a documentação e descubra como podemos instanciar um novo.
Vamos criar uma lista de campos serializados.
Queremos ver a lista no inspetor.
Mais tarde, obviamente precisamos torná-lo privado,
mas queremos verificar se tudo está funcionando.
E, finalmente, o tipo da lista será um colisor para D. Então encontre a documentação,
passe por ela, crie uma nova lista,
que é a lista de inimigos do tipo collider 2D.
Vejo você em um pouco.
Certo, bem-vindo de volta.
Então, como você entrou nisso?
Espero que não esteja muito zangado comigo.
De qualquer forma, vamos seguir em frente e criar um campo serializado.
E isso vai ser uma lista.
E como você pode ver, bem,
você viu no exemplo,
vamos apenas verificar novamente e ver como ele é criado.
Então você pode ver que ele precisa das coleções de pontos dos sistemas,
que está bem aqui.
Opa, desculpe, que está aqui que nos permite criar listas.
Vamos ver o que temos aqui.
Digamos que eu esteja rolando para baixo,
como você cria listas, por favor?
Como crio uma lista?
Onde está isso? Onde está isso?
Ok, então lá vai você.
É assim que você cria uma lista.
Então, precisamos digitar o tipo disso que temos dentro desses dois não naturais,
o que eles são chamados e dizer que é igual a uma nova lista.
Então, de volta aqui,
o tipo collider 2D,
eu já te disse isso.
E você verá por que é um collider 2D em apenas um pouco.
Então inimigos, e é igual a
uma nova lista de Collider para os inimigos e nós a fechamos com esses dois parênteses.
Agora, obviamente, você levou um pouco mais de tempo para encontrar tudo,
talvez olhar pela documentação, mas isso é bom.
Agora você pode dizer que orgulhosamente esse sapato olha através
da documentação descobriu por si mesmo como as listas são criadas,
e isso lhe dará muito mais confiança
medida que você percorre sua jornada de desenvolvimento de jogos.
Nem sempre estarei aqui.
Às vezes não vou ser às vezes, não tenho tempo para responder.
Portanto, este é um ótimo exercício.
Adoro esses exercícios.
Espero que você não esteja muito zangado.
Vamos continuar. O que precisamos fazer agora?
Precisamos entrar nos quartos aqui
e vamos criar um novo objeto de jogo vazio,
que será o inimigo.
E isso vai conter todos os inimigos que temos.
O inimigo esqueleto aqui que C ele precisa de alguma coisa?
Também o campo de tiro.
Vamos torná-lo um pouco menor para que não queremos que os inimigos atirem em nós.
Sabemos que tudo funciona.
Isso é bom e vamos fazer a saúde deles.
Mas menor, talvez três.
Então ele leva três hits, aplique as alterações.
E vou movê-lo para os inimigos.
Também vou entrar nos Prefabs e adicionar alguns inimigos.
E aqui, então o inimigo,
o esqueleto adicionará outro.
Aqui. Outro, tão bom.
Agora temos três esqueletos andando por aí que vão perseguir e atirar no jogador.
Vamos salvar isso.
Certo, ótimo.
Agora, a próxima coisa que queremos fazer é que queremos obter o,
uma referência a todos esses inimigos e poder contá-los.
Agora, o que podemos fazer, obviamente,
como podemos seguir em frente,
selecione esses três e arraste-os para cá e defina-os manualmente.
Isso seria bom,
isso estaria funcionando.
Mas queremos ter uma maneira mais dinâmica de acessar esses inimigos.
Uma dessas formas dinâmicas é usar objetos de tipo find,
onde passamos por todos os objetos e encontramos todos eles.
Isso também é uma boa ideia,
mas é muito taxante para o sistema.
Você tem que passar por todos os elementos,
começando pela câmera e para baixo até encontrar
todos esses inimigos do tipo ou objeto do tipo.
Não vamos fazer isso.
Em vez disso, vamos fazer algo muito mais complicado no início,
mas muito mais eficaz e menos taxativo sobre o sistema.
E é uma ótima maneira de aprender algo muito novo.
E já temos o,
digamos que a infraestrutura para isso estabelecida por ter
os coliders dos inimigos e o colisor da sala.
Então, do que estou falando?
Você acabou de ver.
É o colisor, colisor de sobreposição 2D.
O que isso faz?
É preciso um filtro de contato,
que veremos em apenas um pouco.
E isso nos dá os resultados de todos os objetos 2D collider.
Então, um filtro de contato usado para filtrar os resultados de forma diferente.
O que queremos dizer com isso?
Queremos dizer que temos o colisor da sala aqui.
Então, temos o colisor,
temos todos os objetos dentro.
Não queremos pegar o jogador,
por exemplo, estamos interessados apenas nos esqueletos.
Então, precisamos adicionar esse filtro de contato que entenderá como ele é usado.
Mas vamos continuar.
Então, filtro de contato e o resultado,
esse resultado, é o array.
Para receber os resultados.
Podemos usar uma matriz,
podemos usar também uma lista.
Não se preocupe com isso.
Vamos continuar um.
Do que precisamos?
Portanto, ele retorna o número de resultados se quisermos um retorno e,
em seguida, vamos verificar o que é um filtro de contato.
Então, estou lhe dando todas as formas de como criamos.
Então, honestamente, não fazia ideia do que era um filtro de contato.
Esta é a primeira vez que encontrei quando eu estava criando este jogo,
mesmo tendo tido muita experiência em desenvolvimento de jogos,
esta é realmente a primeira vez que eu o usei no,
então fui e procurei por ele.
Ok, então olhe, temos muitas propriedades.
E se você voltar,
podemos ver aqui os resultados de forma diferente.
E o que mais temos?
Temos algo chamado máscara de camada bi.
Eu sei o que é máscara de camada,
então eu tenho que olhar e encontrar.
Definir máscara de camada, excelente.
Isso define a máscara de camada com base em algum tipo de parâmetro fornecido ou algo assim.
Ótimo. Eu clico nele,
vejo filtro de contato, máscara de camada.
Eu dou uma máscara de camada.
Eu sei qual é a máscara de camada e mostrarei como vamos usá-la.
Mas, de qualquer forma, esses são os passos que até eu às vezes tomo.
Então não pense que NOVO,
não se lembre de tudo e você deve saber,
não, você deve fazer sua própria pesquisa.
Sempre olhe a documentação e agora vamos em frente e comece.
Então eu vou voltar aqui e vou criar, em primeiro lugar,
um colisor particular 2D,
e este será o colisor de sala.
Salve isso.
E então um outro contato privado
filtrado para D e será o filtro de contato para D.
Vou manter o nome como está.
Então agora e comece,
o que vamos fazer?
Bem, antes de tudo, precisamos de uma referência ao colisor da sala.
Então o colisor de sala é igual a obter componentes.
E vai ser o collider 2D.
Ótimo, então agora temos uma referência ao colisor na sala.
A próxima coisa que queremos fazer é obter o filtro de contato 2D.
E vamos definir a máscara de camada como vimos.
E o que dissemos que precisamos dentro do conjunto Layer Mask,
precisamos da máscara de camada.
Como obtemos a máscara de camada?
Bem, sabemos qual camada é,
mas qual é a máscara?
A máscara é uma maneira de nos dizer para converter,
para entender quais são as camadas.
Então, o que podemos fazer?
Podemos usar algo chamado máscara de camada.
E podemos usar um método aqui que diz para obter a máscara.
E como conseguimos a máscara?
Podemos obtê-lo realmente comprar o nome das camadas.
Ótimo, então agora temos acesso ao nome da camada.
E o que faz a camada, é o inimigo.
E como esta é uma referência de string,
certifique-se de que o sapato tenha sido colocado corretamente,
vá até copiá-lo se for necessário.
Mas o que está acontecendo aqui,
temos o nome da camada.
Usamos a máscara get,
que é um método disponível na biblioteca de máscaras de camada.
Usamos essa máscara de camada inteira e definimos a máscara de camada no filtro de contato.
Complicado, eu sei.
E agora usamos o colisor de sala, pensamento sobreposição colisor.
E aqui, o que precisávamos?
Precisamos do filtro compacto para o,
quais são os resultados?
Onde queremos lançar nossos resultados?
E você pode ver aqui a seta,
se você clicar nela, lá vai você.
Você pode adicioná-lo a uma lista ou podemos adicioná-lo a um collider 2D com base no que lhe damos.
Então, se dermos uma matriz aqui,
esse resultado será um array.
Mas como estamos dando a ele atualmente uma lista,
isso será como uma lista, salve esse registro.
Então, novamente, vamos passar por isso mais uma vez.
Criamos um filtro de contato.
Entendemos quais filtros de contato são através das documentações da unidade.
Adicionamos um collider 2D.
Isso é muito simples.
Temos uma referência usando o componente get.
Já sabemos como fazemos isso.
Acessamos o filtro de contato.
Usamos um método chamado Definir máscara de camada.
Este conjunto de máscara de camada requer um,
algo chamado máscara de camada,
não apenas uma camada, uma máscara de camada.
Então, o que fazemos,
procuramos obter máscara de camada.
E isso realmente será um desafio visual para você.
Vá procurar Layer Mask,
obtenha Layer Mask e defina como encontramos esse método.
Portanto, esse é um processo totalmente diferente.
Usamos a máscara de camada get,
que faz parte da máscara de camada e da máscara de camada do mecanismo Unity,
e usamos o nome da camada inimiga.
Então, agora o que acontece assim que esse gerente de sala começar?
Primeiro de tudo, no Trigger Enter, ele encontra o inimigo.
Em segundo lugar, ele olha todos os inimigos que já estão aqui.
E como eu disse, existem muitas maneiras de pegar os inimigos.
Há objetos encontrados do tipo.
Podemos ter usado o empreendedor entrar,
mas achei que essa é uma ótima oportunidade para aprender sobre listas.
Saiba mais sobre o filtro de contato em nunca saber quando.
Às vezes, você pode se encontrar em uma situação e
programação em que você simplesmente não pode fazê-lo sem um filtro de contato.
Então, salve tudo isso.
Voltamos para a Unity e vamos olhar para nossos inimigos agora, assim que corremos,
devemos ver os três inimigos aqui.
Espero que execute o jogo.
Lá vamos nós. Excelente.
E você pode ver que temos todos os colliders do esqueleto um,
esqueleto para e esqueleto três,
ou como você quer chamá-lo.
Excelente, temos uma referência a eles.
Então, agora o próximo passo é matar todos eles
e abrir as portas com azul que no próximo vídeo,
certifique-se de concluir suas alterações.
Certifique-se de deixar um comentário e verei você no próximo vídeo.