No UE4 para iniciantes — como criar uma plataforma 2D com o Unreal Engine 4 | Dev Enabled | Skillshare

Velocidade de reprodução


1.0x


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

No UE4 para iniciantes — como criar uma plataforma 2D com o Unreal Engine 4

teacher avatar Dev Enabled

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      01 - introdução do curso

      2:22

    • 2.

      02 - Configuração do projeto

      9:39

    • 3.

      03 - entrada para jogadores

      18:05

    • 4.

      04 - texturas

      7:08

    • 5.

      05 - flipbooks

      13:27

    • 6.

      06 - TileSets

      6:22

    • 7.

      07 - TileMaps

      10:06

    • 8.

      08 - configuração de animação para jogadores

      14:37

    • 9.

      09 - Melhorias de animação de jogadores

      11:10

    • 10.

      10 - Health de jogadores

      10:39

    • 11.

      11 - Widget de saúde para jogadores

      16:30

    • 12.

      12- base inimizade

      8:28

    • 13.

      13- Enemy Bat

      9:01

    • 14.

      14 - Movimento de bat Enemy

      8:43

    • 15.

      15 - Mudança de direção do Enemy

      17:14

    • 16.

      16 - danos

      24:57

    • 17.

      17 - morte do jogador

      12:53

    • 18.

      18 - base interativa

      10:35

    • 19.

      19 - Saúde interativa

      9:07

    • 20.

      20 - mola interativa

      9:00

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

853

Estudantes

3

Projetos

Sobre este curso

Comece com o UE4 aprendendo para criar um jogo com um os gêneros clássicos, o plataforma 2D.

- aprenda como usar o sistema Paper2D integrado

- Veja alguns dos benefícios de alavancagem para jogos 2D

- Cobe os conceitos básicos de programação de personagem de jogadores, inimigos, pickups e muito mais.

Conheça seu professor

Teacher Profile Image

Dev Enabled

Professor
Level: Beginner

Nota do curso

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

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

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

Transcrições

1. 01 - introdução do curso: Todos, e bem-vindos a esta breve visão geral da seção de vídeos. O que vamos estar olhando para fazer um jogo de plataformas 2D dentro do Unreal Engine. Unreal é conhecido por ser um tipo muito poderoso, pesado, motor baseado em 3D, mas tem algumas características únicas e ferramentas muito poderosas que também nos permite fazer esses projetos 2D dentro do Unreal. Tenha um exemplo aqui de alguns em que projetos em até mesmo alguns projetos completos que foram feitos usando o Unreal Engine, ele usando o sistema de animação pré-construído e algumas das ferramentas de design de nível que vêm pré-empacotado com Unreal. Algumas das razões que você pode querer usar este tipo de motor focado em 3D para fazer um jogo como este que você pode ver em segundo plano. Unreal vem com alguma iluminação poderosa em direção a você pode definitivamente implementar os efeitos de iluminação, como você pode ver em alguns dos jogos têm a construção de coisas como normais e obter essa qualidade de superfície reflexiva normal que você estaria esperando para ver em outros jogos 3D. Você também tem coisas como o viajante ApiPath, que foi feito novamente dentro de Unreal. E isso é alavancar um pouco do melhor dos dois mundos e criar um jogo um tanto único que realmente não foi visto antes, onde é uma espécie de jogo 2.5 D onde o mundo é 3D, mas tudo está funcionando fora de 2D animações para se levantar raramente original sentimento JPEG, mas trazê-lo para uma espécie de público moderno e revitalizado aqui. Outros jogos estão usando 2.5 muito semelhante, o mundo 3D, mas animações 2D também. Tudo o que temos jogos como você viu, que um puramente 2D e nós vamos estar olhando neste curso como podemos começar a obter uma compreensão de como alavancar alguns desses sistemas para fazer jogos semelhantes. Para fazer isso, estaremos trabalhando a partir de um projeto vazio e estaremos levando até este tipo de abordagem completa estilo fatia vertical de um jogo de plataforma 2D, largura total, um jogador, animações de jogador algum inimigo básico AI, automatizado também. Teremos algumas diferentes classes intratáveis, como as molas e a coleta de saúde. Então nós temos um sistema de saúde completo e, em seguida, tudo isso será feito com um foco em código de blueprint limpo, estruturado e sustentável. E apenas criar este jogo de protótipos muito simples vai nos permitir olhar para todos os recursos que vão para os sistemas 2D, como o sistema de animação flip book, os conjuntos de toalhas e mapas de azulejos, que será um visão geral do sistema de pintura de nível embutido que vem com o Unreal Engine por padrão. Então espero que esses tópicos e interessante para você, e eu estou ansioso para vê-lo no resto desses vídeos. 2. 02 - Configuração do projeto: Para tentar poupar um pouco de tempo a todos, vou rever uma breve visão geral do que tenho aqui. Então eu criei um novo projeto. Não vou passar pelos nossos passos. Presumo que tenha alguma experiência com o Unreal Engine. Eu tenho coisas instaladas e lançar o seu projeto. Então o projeto que eu tenho aqui, porém, se você quiser acompanhar exatamente, é uma base de projeto, projeto completamente vazio, então nenhum conteúdo de estrelas será necessário aqui. As configurações de qualidade foram definidas para a área de trabalho, definidas para a mais alta qualidade. Portanto, deve ser muito bom, mesmo que estejamos trabalhando com os ativos 2D. E eu antes de entrar e fazer as coisas se moverem e conseguir a configuração da turma e trazer texturas e todas essas coisas boas para o jogo. Eu só queria passar por algumas etapas de limpeza que eu costumo tomar em qualquer novo projeto que eu criar. Então, vai haver algumas coisas que eu queria definir meu projeto para fazer apenas por conveniência e eu não queria auto-triagem do caso, você está acompanhando. Eu queria os mesmos resultados. Então a primeira coisa que eu costumo fazer é ver como se abrirmos um novo plano ou ativo por padrão, isso abrirá em uma espécie de janela flutuante que pode ficar um pouco irritante. Prefiro que tudo esteja ancorado aqui no topo da minha tela. Então ele tem esse resultado. Vou te mostrar o que temos no momento. Temos uma planta que podemos usar aqui, que é o arranha-céu. E você pode ver, na verdade, que não abriu uma ferramenta. Isto está na minha segunda janela em extrair esta idéia de a. E como eu disse, nós temos esta tela flutuante. Se quisermos isso, temos que arrastar isso para o topo e teremos que fazer isso para cada novo projeto ou ativo que quisermos abrir. Então, idealmente, eu gostaria que todos eles estocassem aqui por padrão. Então eu vou para Editar, Editar Preferências. E, em seguida, apenas aqui podemos ver o local aberto do editor de ativos alterar isso do padrão. E eles vão mudar isto para janela principal. Você tem um monte de opções diferentes aqui também, se você quiser. Mas eu prefiro que esta seja apenas a janela principal por padrão. Então isso significa que se não tivermos nada aberto uma ferramenta, podemos clicar nisso novamente e podemos ver que o plano do céu alimentado está agora aberto exatamente onde eu queria. Então essa vai ser a primeira coisa que eu costumo mudar. Em seguida, há apenas alguns outros pequenos problemas que eu encontrar com o projeto padrão. Então isso é um pouco difícil de ver na gravação. Eu sei que já tentei isso antes, mas você pode ver como eu zoom aqui, o chão parece estar indo de um tipo de cinza mais escuro para um cinza mais claro. E a mesma coisa acontece se pressionarmos Start e olharmos em volta. Podemos ver alguma adaptação acontecendo com a iluminação aqui. Agora esta é a exposição automática está tentando recriar o que os olhos geralmente fazem quando você está indo de um ambiente claro para um ambiente escuro ou vice-versa. E é uma coisa muito útil para ter, mas geralmente como algo que você vai querer controlar em um efeito pós-processo ou 30 câmeras diretamente. E o que isso pode levar é que você pode começar a criar algo na Odessa que você acha que parece muito legal. E, em seguida, quando você pressiona play, as cores vão olhar saturado e lavar a noite. Então, para evitar que isso aconteça, vamos ter basicamente o que vemos no editor ser exatamente o que vemos quando pressionamos Play também, menos que substituamos manualmente em algum sistema de pós-processo. Então é escolhe isso, podemos ir para Configurações do projeto, vamos para auto ou apenas procurar por exposição de todos os tempos. Então Auto III, vamos trazer isso à tona. Não há outros resultados aqui. Então a exposição automática é o que queremos desligar. E isso significa que se voltarmos lá, mesmo se você chegar muito perto, podemos ver que não estamos recebendo aquele chão de cor mais escura, pois não é isso que vamos ver no jogo. Então, se pressionarmos Play, que agora também será exatamente o mesmo que está no editor. Então agora sabemos que se queremos que o nosso mundo para Dhaka quando ele te tocar, atualize isso no nosso visor aqui mesmo. Em seguida, queremos apenas algumas das nossas configurações de estrutura de pastas. Então isso nos permitirá, se fizermos isso agora, podemos entrar e começar a adicionar plantas, trazer ativos, configurar materiais, e todas essas coisas boas como e quando precisarmos delas. E não precisamos nos preocupar com nossa estrutura de projeto. Porque geralmente sabemos que vamos ter uma estrutura muito semelhante para praticamente qualquer projeto que nós trabalhá-los. Então o que eu vou estar fazendo é na pasta de conteúdo, que é a nossa pasta raiz, eu vou criar uma nova pasta chamada ativos. Então, este será o lugar onde todas as nossas coisas externas, texturas, modais , qualquer coisa assim, que possamos trazer efeitos colaterais irão dentro desta pasta. Agora, para este conjunto de vídeos, eu sei que vamos precisar de alguns tipos de arquivos diferentes. Trabalharemos com texturas, sprites, flip books e diferentes ativos de mosaico. Então eu vou criar uma pasta para cada um deles. O atalho, por sinal, se você quiser pegar nova pasta é Control Shift e Enter quando você está selecionado dentro da pasta, você quer que isso seja um filho de. E isso deve bastar para os bens por enquanto. Se acabarmos adicionando qualquer outra coisa, podemos sempre voltar e adicionar novas pastas mais tarde. Em seguida, de volta dentro da pasta de conteúdo também terá uma pasta Blueprints. E novamente dentro da pasta de conteúdo, também podemos fazer com uma pasta de mapas. Agora que temos eu sou pasta de mapas, nós também podemos ir em frente e salvar isso em que apertado seria mapa podemos ver tem sem título e podemos pressionar Control ns, colocar isso dentro da pasta de mapas, e nós vamos chamar este Main . E este será o nosso mapa principal no qual trabalharemos para o resto do projeto. Isso também nos permite fazer outra coisa, que é definir alguns padrões do projeto. E vamos falar disso em um momento. Basicamente, queremos que este seja o mapa que carregamos assim que fecharmos e reabrirmos o projeto. Antes de fazer isso, também podemos definir alguns dos outros padrões como o personagem que estará controlando e Jogo, e também o Modo Jogo que está controlando os diferentes controladores, os personagens, e coisas assim, que será gerado em, e a lógica dentro do jogo que será tipo de rastreado se tivermos coisas como pickups, pontuação, ou qualquer tipo de sistema objetivo. Se você quisesse concretizar este projeto, eu o levaria mais longe sozinho. Então, para fazer isso, eu vou para a pasta Blueprints. Vamos criar um novo blueprint e como isso é feito clicando com o botão direito do mouse indo para Blueprint Class, encontrando a base do modo governo, que será a classe Game Mode. Queremos usar um nome, este, o ganho de sublinhado BP pode basear-se. Então, algo mais para notar nessas seleções de vídeos que eu estarei seguindo a convenção de nomenclatura irreal padrão. Então você pode ter certeza de que se você quiser colocar algo no mercado ou apenas trabalhar com outras pessoas familiarizadas com o ecossistema irreal, essa convenção de nomenclatura, deve ser uma boa maneira de começar. Então BP para blueprint, sublinhar o nome da classe. E apenas no caso de querermos fazer qualquer classe filho deste modo de jogo, vamos especificar que esta é a versão base ou pai das classes. E isso fará com que seja um pouco mais sentido quando entrarmos no resto dos vídeos, já que usaremos esse tipo de estrutura hierárquica um pouco mais tarde. Por agora, porém, podemos abrir isto. E o que queremos fazer aqui é definido para a cabeça de classe padrão que será controlar quando tivermos um personagem criado. Claro que ainda não temos esse personagem. Então eu vou voltar para a pasta Blueprints, clique com o mouse novamente, criar uma nova classe blueprint. E queríamos descobrir o tipo de personagem que podemos controlar. Então temos algumas das bases controláveis. Temos a atração ou o caráter. Agora nenhum deles é realmente criado especificamente para caracteres 2D e nós realmente temos uma classe pronta para isso dentro de Unreal. Então, se escrevermos papel, basicamente tudo estará usando é parte do sistema de papel 2D. Então nós temos flip books, que serão nossas animações, sprites. Se você quer algo que não seja animado, temos coisas como aplicativos Tom, editores treinados. E podemos ver aqui em baixo que temos um filho da pornografia é o personagem, que é apenas uma pornografia controlável com algumas coisas extras, como o colisor de cápsulas nele espera uma malha esquelética e coisas assim. E então temos a alternativa, que é o personagem de papel, que é o filho da classe de caracteres. Mas em vez de ter uma malha esquelética 3D, ela predefiniu algumas propriedades, como um flip book de papel 2D, que é exatamente o que queremos. Então nós vamos selecionar este, vamos chamar este um jogador base sublinhado BP. Então, novamente, se alguma vez tivermos algum tipo de versão alternativa do jogador que queremos potencialmente gerar, então podemos fazer deles um filho da nossa classe base. Toda a lógica básica que eu estarei em nossa classe base de jogadores, como as variáveis de saúde e movimento e coisas assim que podemos colocar aqui. Assim, com isso podemos dar uma olhada rápida e cabeça, mas não há muito que possamos ver no momento. Não temos nenhum sprites ou flip books que possamos atribuir. Como eu disse, isso vai ser controlando com a animação como eu. Mas o que temos é um colisor de cápsula e um componente de movimento de personagem, que vai nos permitir configurar muito facilmente o movimento para nossa classe de personagens. Então, o que não está pronto? Agora podemos voltar ao nosso modo de jogo. Nós vamos para a aula de pornografia padrão, e vamos mudar isso para a base de jogadores sublinhados da BP. Então isso não vai fazer nada no momento. Se pressionarmos Play e vermos que aqui ainda estava recebendo o governo pode basear. Então isso não está usando eu estava no momento, o que significa que também estamos recebendo o Pune padrão, que se você nunca viu isso antes, é a esfera cinza. Então, se você vir isso, este é o Pune padrão, que significa que se você não está esperando que isso seja usado, isso significa que você provavelmente perdeu um passo em algum lugar e você não selecionou sua classe personalizada para ser selecionada. E isso nos dá esse tipo de movimento de modo espectador. Então o que queremos fazer é ir para as configurações do projeto. Queremos definir o modo de jogo como padrão, o que criamos para ser o padrão para o projeto usar. Fazemos isso através da seção de mapas e modos. Vamos para a base do modo de jogo aqui. Mudamos isso de uma base de modo de jogo para base de modos de jogo não qualificados BP, que é nossa. Podemos ver que automaticamente sabe usar o nosso jogador como o jogador padrão. E agora, se entrarmos e pressionarmos Play, a diferença aqui é que não temos nenhum movimento porque para o lado direito, podemos ver que estamos usando o jogo não qualificado BP pode basear-se. E porque temos um jogador começa no mundo, ele criou a base de jogadores sublinhados da BP naquele local. Então eu estou apenas pressionando F8 teve que ejetar do jogador, que me permite voar ao redor. Podemos ver a mudança dele para possuir aqui. E podemos ver que temos a base de jogadores no início do nível. E a razão pela qual não podemos mover isso em torno de nós porque não colocamos nenhum código em nossa classe para dar a ela qualquer compreensão do que é movimento. Pode ver que tem coisas como a gravidade já processado cabelo embora. Então, se possuirmos, estaremos sempre no chão no momento, mas isso é um bom começo. Isso agora significa que quando fazemos isso adicionando esse código ao nosso jogo uma classe, o projeto sabe selecionar isso como a classe padrão para tentar possuir e executar a lógica através. 3. 03 - entrada para jogadores: Com toda essa configuração e fora do caminho, agora podemos entrar e começar a fornecer algum tipo de referência visual para nossa turma. Então, dentro da base de jogadores, como não temos os flip books, então as animações prontas sim, são importadas de nossas texturas. Eu só vou adicionar um simples cubo componentes começar com. Então, se formos para adicionar componentes, vá para o cubo. Isto vai ser apenas uma malha estática para pelo menos tipo de representar visualmente onde o jogador vai estar. E isso significa que podemos começar a olhar para a configuração da câmera também. Então eu, para a câmera, vou usar algo festival chamado “Spring on Component”. Isso vai ser como uma câmera. Boom é uma vara longa, essencialmente uma vara virtual planeja nossa câmera, ele vai descansar, podemos ver que está representado aqui. Então a corrente vai estar no fim do nosso bastão. E isso nos dá um pouco de flexibilidade com o quão longe a câmera será mantida. Ele tem alguma funcionalidade embutida para nós animá-lo ou diferentes tipos de câmera atrasada para obter um sistema de câmera sentimento um pouco mais dinâmico. Agora eu acabei de notar que eu ainda tenho meu cubo selecionado. Na verdade, quero que isto seja uma criança dos componentes da cápsula. Vou arrastar e soltar isso nos componentes de capital só para seguirmos a rotação da cápsula e não a correspondência estática. Se fizermos algo a isso, então com a primavera eu ainda sou selecionado. Eu vou para Adicionar Componente, encontrar a câmera, e então vamos colocar o componente da câmera em, a mola ligada. Então agora, sempre que tomarmos a mola, a câmera seguirá. Nós estávamos apertados isso ou movê-lo ao redor como a câmera está presa ao braço. Isso só significa que temos que fazer muito menos com a câmera também. Não vamos girar ou fazer coisas acidentalmente com a câmera que não queríamos. E eu, porque temos isso, podemos ver que está dentro do Unreal. X é sempre para a frente. X esquerda e direita. Por que é comida e compra? Então nós realmente queremos estar movendo esquerda e direita metade como obviamente em uma plataforma 2D sobre indo da esquerda para a direita, zed, para cima e para baixo. E como eu disse, Y4 para trás. Então isso significa que a câmera está olhando atualmente na direção errada no momento, estaria olhando a partir da parte de trás do personagem se o virado para essa seta quando trazemos o livro flip animado. Então o que vamos fazer nós podemos obter eu estava primavera em e esta é uma das primeiras coisas que vamos ver é bastante útil. Podemos girar o braço da mola a 90 graus. A câmera vai seguir isso. Eu estou olhando para o, o que seria o nosso Player Animation frontal. Agora, isso também vai ser um pouco claro. Imagino que se pressionarmos Play , será padrão usar essa imagem da câmera. E nós vamos estar olhando para muito, muito perto do nosso cubo. Então o que podemos fazer é pegar a primavera. Vou subir esta mola alvo. Tenho cerca de 600 metros de comprimento. E isso significa que quando pressionamos Jogar agora podemos ver um pouco mais do nível, bem como apenas o jogador que vamos ignorar por enquanto que os componentes da cápsula um pouco fora. Não usaremos essa malha estática por muito tempo, porque puramente para fins de demonstração quando entrarmos na parte base da configuração da câmera. Mas acho que isso vai ser bom para mim. Em seguida, vamos querer configurar nossas entradas de projeto para que as ligações amarrem teclados e gamepads para que possamos realmente obter nosso personagem se movendo. Para fazer isso, vamos para as configurações do nosso projeto. Vamos navegar para a seção de entrada. E aqui temos duas opções. Temos o mapeamento de ação e o mapeamento de eixos. Então, como uma visão geral rápida para aqueles de vocês novos no mecanismo, a diferença head que temos mapeamentos reais seriam coisas como entradas de imprensa simples, como jumping wolf, CMake, você pula uma vez, ou teclas de interação como pressione E para pegar seria um mapeamento real é algo que você pressionar e liberar. E geralmente como um tipo de interruptor liga-off. Em seguida, você tem mapeamentos de acesso, que fornecerão um valor retornado com base em se a entrada é pressionada ou não pressionada. Então, se nada for pressionado, ele está constantemente retornando 0. Se você tiver pressionado totalmente, como uma tecla está ligada, um teclado é pressionado e talvez nunca se você tiver a tecla Daniel retornando um ou menos um. E então nós também podemos trabalhar as coisas em como varas de descarga que têm um alcance. Então seria entre menos 11. Então, se você está apenas empurrando o envelope stick meio caminho para frente, então você estaria retornando um valor de como um arredondado por 0,5. Então, novamente, isso é um pouco, fazer um pouco mais de sentido. Quando entrarmos nisso em um momento, teremos apenas algumas entradas diferentes para este jogo. Vamos querer que o nosso personagem salte. Então vamos ter que saltar mapeamento de entrada. Vou querer que se movam para a frente e para trás ou para a esquerda e para a direita. Então vamos ter um mapeamento de eixo direito movimento. Então, se fizermos o mapeamento de ação, em primeiro lugar, vamos adicionar um novo mapeamento de ação aqui pressionando o ícone de adição vai cair desta vez. Eu vou nomear esta noite de salto para isso, nós vamos dizer salto vai ser, nós podemos adicionar um monte de botões diferentes, tem que gerenciar apenas uma única entrada. Então isso vai ser útil se você quiser fazer a sua própria posse um pouco mais flexível. Então, como um exemplo, poderíamos dizer para as pessoas que usam Ws e D, Poderíamos ter w como uma única opção para saltar. Para aqueles que ainda gostam de usar a seleção irlandesa, poderíamos usar a seta para cima no teclado. Também para saltar. Para pessoas familiarizadas com a barra de espaço, poderíamos usar espaço para saltar. E também podemos dizer que usaremos uma conta de vontade para gamepads também. Então vamos usar o gamepad e estes vão ser a face Watson, esquerda, direita, inferior e superior ser x, y, e B, ou triângulo, ciclina quadrada x por exemplo. Então, se você apenas visualizar onde eles estão no gamepad, eu vou usar o esquema do controle Xbox. Então nós vamos usar um e eu quero um para ser salto, que será botão inferior. Então esse será o gamepad. Então, agora podemos usar um como o salto gamepad também. Então é assim que uma entrada de salto. Então, se pressionarmos qualquer um destes e atribuirmos isso à funcionalidade de salto na classe de caracteres. Vamos colocar nosso personagem pulando em torno de Próximo. Então queremos permitir que o nosso personagem se mova. Então vamos adicionar um mapeamento de eixo. Então o mapeamento do eixo, como eu disse, vai retornar um valor. Então podemos ver a diferença aqui é que estas são apenas prensas simples. Podemos adicionar combinações, mas ele não retorna um valor, enquanto que para o Access estamos retornando um valor de eixo. Mas este, vou chamar isto de movimento, certo? E será, na verdade, apenas criar a função mover para a direita. E você vai ver o porquê em um momento. Então o que vamos fazer é para o movimento para a esquerda e para a direita do personagem, temos um valor positivo. Então vamos dizer que estávamos nos movendo em um, queremos que o personagem se mova diretamente através da tela, que será o nosso valor positivo. Vamos atribuir isso a D para a entrada WASD. Então vamos encontrar D no teclado. É assim que um movimento de direitos básicos aqui. Agora também queremos que eles sejam capazes de mover para a esquerda. Então vamos adicionar outra ligação de entrada, e vamos encontrar este como um. E uma vez que definimos a entrada a, queremos mudar essa escala para menos 1. Agora a razão é que nós vamos estar movendo em um valor positivo em toda a tela para mover para a direita. E queremos mover o valor negativo em toda a tela para mover para a esquerda. E é por isso que não precisamos nos mover para a direita. E eu vou para a esquerda, podemos apenas criar e mover para a direita, que será a tarefa positiva. E então é meio que tomado ou intuído que mover para a esquerda é o valor negativo. E então podemos fazer o mesmo que fizemos para o salto. Então nós podemos criar um número destes, pagar as teclas de seta I seta direita. Quando temos a seta certa, podemos novamente ter certeza de que é positivo. E depois foi embora. Vai ser o nosso menos um e podemos atribuir algum movimento negligenciado, bem como para o gamepad. Então cairia desta vez. E ainda temos o gamepad. Thumbstick é quando queremos usar no mundo do gamepad, x é esquerda e direita, y é para cima e para baixo. Portanto, queremos que o eixo x do manípulo esquerdo seja controlado pelo quadril. Agora lembre-se do que eu disse, que o valor do eixo está retornando um valor de menos 10 ou um ou entre esse intervalo. Agora, quando o stick analógico está inmovido no meio, e isso vai ser 0 se o usuário empurrá-lo para a direita e isso vai ser até um valor de um. E se eles movê-lo para a esquerda, e isso vai ser feito para um valor de menos um. Então esse cara aqui, na verdade, uma gentileza por tudo isso, dependendo da forma como o cliente está movendo o envelope. Então, isso é tudo pronto para a funcionalidade de movimento certo. Então, se nós movê-los de volta para a nossa base de jogadores, vai mover-se para o gráfico de eventos e podemos fazer um pouco de arrumação tem, então podemos precisar disso um pouco mais leve para o Begin Play. Podemos nos livrar de tudo o resto para nem fomos puro a sobreposição ou o tique-taque do evento no momento. E em vez de despejar todas as nossas ligações de entrada no gráfico geral de eventos, o que eu vou fazer é nestas sexualmente, mas sim, eu vou criar um novo gráfico. Vou dar um nome a esta entrada. E vamos colocar todas as nossas informações relacionadas aqui. Agora lembre-se dos nomes que você acabou de esfriar, você está enfatizando as mãos dele. Então temos que saltar e ir para a direita? Porque nós vamos estar resfriando e aqueles em apenas um segundo. Então, para levantar-se mover a função direita, vamos apenas digitar mover para a direita? E você pode ver que temos duas opções. Temos o eixo ou o evento. Então, se começarmos com os eventos e tal novamente para mim de direitos, e então obter o eixo apenas algo que pode confundir novas pessoas, contratar um pouco. Basicamente, o eixo é o valor retornado quando você está pressionando algumas coisas como eu mencionei, menos 10 ou um ou entre isso. E então o evento é a opção que nos dá o pino de execução. Então, podemos executar algumas funcionalidades fora disso. Então vamos fazer uma string de impressão rápida. Então o que isso está fazendo, e podemos imprimir o valor do eixo. Então, se eu entrar no componente, pressione Play, quando eu estou pressionando nada, podemos ver que isso está sendo executado constantemente, então é como uma função de atualização ou um tick de evento. Quando eu pressionar D, que é o meu movimento certo, então eu recebo um. Quando pressiono um, recebo menos um. Mesmo para a seta direita na esquerda e direita, podemos dizer, Bem atualizar, Eu não estou na forma mais simplista é alta. A ligação do eixo funciona. Então eu estou apenas conectando ao gamepad aqui. E agora estou me movendo para a esquerda no batom ligeiramente para a direita. E podemos ver que temos algum valor entre 01. E então se eu movê-lo para a esquerda, nós temos esse valor entre 0 e menos um. Então é assim que vamos conduzir o movimento do nosso personagem em um momento. O que eu queria demonstrar, a única diferença aqui, o valor do x é exatamente o mesmo o valor de retorno do valor de direitos GetMethod aqui, a única diferença entre os dois é se você precisa apenas do valor para um cálculo como esse, se você precisa dos eventos para o pino de execução chamar outra função. Então podemos ver que vou usar isso novamente e obtemos exatamente as mesmas opções ou respostas. Nós temos um quando eu pressiono D menos um quando eu pressiono a. e eu tenho o painel de controle novamente, e nós podemos ver que temos esse valor dependendo de qual maneira eu estou movendo o irrealista. Então exatamente a mesma coisa. Isto é apenas agradável e útil se você está usando um cálculo e você está tentando obter a velocidade multiplicada pela direção de algo e você não quer ter que arrefecer os eventos. Você pode apenas verificar o valor que está sendo retornado do mapeamento de entrada. Então, com isso feito, tipo de ter uma melhor compreensão do que isso está fazendo. O que podemos fazer agora é a partir disso, vamos esfriar nossa entrada de movimento adicionar. E isso é realmente tão difícil quanto é. Um personagem se mexendo. Isso está pegando algumas funcionalidades embutidas da classe de jogadores no Componente Movimento de Personagem. E basicamente só vai adicionar movimento em uma direção que lhe damos com base em uma escala. Então, se dissermos que a escala é definida para uma permanente, isso significa que vamos ser mesmo uma frase que se opõe ao valor constantemente. Então nós sabemos que queremos mover da esquerda para a direita e vamos dizer um no x porque lembre-se, nós já vimos que é o eixo x é este vermelho, e é assim que queremos estar se movendo. Então aqui, você seria para frente e para trás. Nós não queremos entrar e sair do fundo e disse que seria para cima e para baixo. Não queremos subir e descer a menos que saltemos. Então, se pressionarmos Play now, isso vai mover uma unidade e um valor positivo x, porque temos codificado isso para ser baseado em nossa direção multiplicada pela escala, vai estar se movendo constantemente nessa direção se não mudarmos Isso. Então a maneira como vamos alterar que você pode ter adivinhado já é baseada no valor do eixo. O que significa que se estamos a suprimir alguma coisa, estamos a multiplicar isso por 0, o que vai parar o nosso movimento. Se pressionarmos, D vai para a direita. Se pressionarmos um testamento mover para a esquerda. mesmo para os árabes, e novamente, mesmo para o bastão de destravamento. Então, é realmente tão difícil quanto é obter movimento acontecendo em um personagem. Agora isso é um pouco mágico porque há algumas coisas acontecendo no fundo aqui. Então você pode estar se perguntando por que um valor tão baixo como um está nos fazendo mover relativamente rápido com base na direção que queremos movê-lo. Agora, a razão é que não estamos realmente movendo uma unidade no Componente de Movimento de Personagem aqui, estamos realmente movendo 600 unidades. Então o que isso está fazendo de uma forma muito simplificada faz muito mais acontecendo na classe pai C plus. Mas para fazer o básico passar, o que está acontecendo é que estamos multiplicando a direção do mundo pela velocidade Eu vou andar. Então estamos realmente movendo 600 unidades multiplicadas pelo valor escalar. Então nós estamos tomando nosso valor de 600 e estamos dizendo que se você não está pressionando nada, então multiplique isso por 0, que é novamente vem para esse movimento. Se você está pressionando D ou seja lá o que foi atribuído, mova para a direita no valor positivo, então estamos multiplicando 600 por um. Então estamos movendo 600 unidades nessa direção. E se estamos segurando um valor negativo, então um ou esquerda, então estamos multiplicando 600 por menos 1. E isso nos fará mover em um valor negativo ou deixado em toda a tela. Então, só para que saibam que há muito para olhar por aqui se quiserem brincar com coisas diferentes e confirmar que é isso que está sendo controlado aqui. Se baixarmos isso para algo realmente lento, como 50, então podemos ver que o movimento é completamente prejudicado por essa mudança de velocidade. Então há muita coisa que você pode brincar com ela. Eu não vou passar por tudo isso. Eu acho que muito a nomeação é bastante tipo de senso comum. E se você olhar através dele, você pode ver pelo que ele é responsável. E isso seria definitivamente algo para brincar entre os vídeos e ter uma sensação melhor do que o Componente de Movimento de Personagens está fazendo. Você tem muita flexibilidade usando isso, você pode fazer coisas como mudar a aceleração para que você possa fazer isso demorar mais se você quiser, para ter como uma compilação até essa velocidade, 2048 é praticamente 0 para cheio velocidade. Se carregarmos isso para algo extremo como 512, então novamente, você verá uma grande mudança no tempo que demoramos para alcançar esse impulso máximo. Então você pode ter como um, eu suponho que seria o seu velho tipo de jogo Sonic. Você teria a animação de corrida que leva até a corrida, levando até a corrida quando você chegar a 2014 completo. Então essa é a aceleração máxima. Novamente, vou deixar o mesmo esta noite, mas você pode ajustar todos esses valores diferentes e realmente mudou a maneira que seu personagem sente para mim, certo? Agora, a última coisa para a entrada, então, é que vamos adicionar nossas entradas de salto. Mais uma vez, muito simples. Queremos esfriar o nome disso. Mapeamento de ação que fizemos anteriormente, simplesmente saltar. Você pode ver que é realmente um monte de retornos diferentes aqui para saltar. E isso porque há muita coisa na nossa classe de personagens que nos permitirá alterar como saltamos e como isso reage. Mas queremos que o nosso salto de evento de ação comece, com o que criamos nas ligações de entrada. E você pode ver novamente, isso é ligeiramente diferente do mapeamento do mapa do eixo. A principal diferença é que não estamos retornando um valor. Então, como eu disse, isso é pressionado ou não pressionado. Então, quando você pressionar W ou a seta para cima ou um no gamepad, isso será resfriado e quando você soltá-lo, isso será legal ver que você já tem esses dois estados. Agora, novamente, muito simplesmente, há toda essa função em que já está embutida. Vou puxar daqui. Vou chamar a função de salto. Temos uma função que o inferno saltaria. Isto é através da classe de personagem e tem novamente, algum tipo de magia de acontecendo sob o capô, mas é apenas aplicando força no eixo z para nós. Então, se eu entrar e pressionar W, então nós pulamos. E o mesmo para uma noite no gamepad porque isso tem algumas coisas prontas para nós tipo de manipular e brincar com. Podemos vir aqui até a base de jogadores, procurá-la, saltar para o painel de Detalhes aqui. E temos algumas coisas diferentes que podemos mudar. Então podemos mudar o salto. Podemos definir isto para um máximo de cinco. E podemos fazer isso fazendo um salto de tuplet sincronizado. Claro, se você só queria um salto duplo, nós temos que, você tem um salto duplo, então super fácil. Então já ter um salto duplo implementado. E então nós temos o máximo tempo de espera aqui também. Agora isso vai ser relevante para o próximo lugar, algo que queremos fazer se vamos usar a base construída em sistema de salto. Sempre que lançamos isso, também queremos chamar o stop jumping. Então isso irá atualizar que classe pai estava verificando tudo isso e ele irá atualizar o sistema para deixá-lo saber que o botão de salto foi liberado, que então vem para este salto segurar apertado. Então, se você já jogou jogos como os antigos jogos Sonic, jogos Mario, ou plataforma moderna e jogos também. Eles terão algo que muitos designers vão esfriar, altura de salto variável. Então, se você segurar o botão diagonal quatro, ou se você apenas tocar no botão uma vez que você atingiu o mínimo na altura do salto. Enquanto que se você segurá-lo por um certo período de tempo, você alcançará um pico ligeiramente mais alto em seu local de salto. Então, novamente, sistema muito flexível pronto para entrar no Unreal. Já temos isto contabilizado. No momento em que não temos aquela altura de salto variável. Nós vamos obter a mesma coisa independentemente de quanto tempo um help desk, porque nós temos o salto máximo antigo definido como 0. Agora, se eu colocar isso em algo extremo, como 55 é muito alto para isso. Mas se eu colocá-lo por tanto tempo como um todo até cinco segundos, força de salto está sendo aplicada aqui. E a maneira que nós usaríamos isso, então o jogador tem um pouco mais de controle é que assim que pressionarmos este lançamento e pararmos a função de salto, isso será acionado e nós vamos sair cedo e não alcançar esse pico . Então eu tenho até cinco segundos para segurar. Mas você pode ver se eu segurar por um segundo, então vamos começar a saltar, caindo de volta. Se eu segurá-lo por mais tempo do que até eu liberá-lo, nós vamos ter aquela altura de salto variável. Então lembre-se sempre por razões como esta, porque coisas estão sendo feitas sob o capô que você pode não ver. Você quer se lembrar de chamar sempre o seu stop jumping quando você está chamando uma função de salto, se você estiver usando a funcionalidade interna, agora desligue isso para algo um pouco mais baixo. Tipo, eu acho que algo como 0,25 geralmente funciona muito bem para o salto variável. Não vai ser uma grande diferença. Mas dá ao jogador um pouco dessa sensação de um pouco mais de controle sobre a forma como eles pulam e analisam para enfrentar diferentes tipos de obstáculos de maneiras diferentes. E eu acho que para este jogo, eu vou torná-lo um pouco mais difícil. Vamos baixar o salto máximo para um. Não acho que precisamos de um salto duplo para isso. Então, novamente, apenas venha e teste isso. Isso está trabalhando com todas as entradas e eu tenho o movimento para o gamepad saltar com um. E novamente, nós temos que VAB, nós saltamos altura se eu segurá-lo feito. Então enviei meus sistemas. Vamos começar com, é bastante claro o que estes estão fazendo, mas basta entrar nesse tipo de boa prática de programação. Podemos fazer alguns comentários, certo, bom. Então, se eu selecionar os nós, pressione C, então chegamos a um comentário. Este só diria que está controlando o movimento direcional. E faremos o mesmo de novo. Então vamos selecionar estes pressione C e vamos dizer que este está controlando o salto. Agora pode parecer óbvio, mas a maneira que os comentários o que é muito útil. Então, mesmo para coisas que são muito óbvias, quando você tem deslocado muito, você não vai ser capaz de ver o nome dos eventos, mas os comentários fazem escala com base no Zoom. Por isso, pode ser útil apenas para colocar comentários em como este, mesmo que o muito simples. Por isso, se alguma vez quiseste mergulhar directamente na secção de saltos, tens muitas noites por todo o lado. E apenas Herman, eu estou achando que o salto é muito, muito rápido. Então, com isso feito, podemos compilar e salvar isso. Isso é basicamente o básico do movimento do plano. 4. 04 - texturas: Com algumas das coisas divertidas já implementadas, podemos começar a trabalhar no visual para que possamos parar de trazer os ativos, especificamente as texturas para começar a mudar a classe para que possamos realmente ver um pouco mais e escalar como ele vai parecer e como ele vai ser representado na noite do jogo. Para isso, usarei um pacote de ativos gratuito que você pode obter de cada ponto io. Chama-se Pixel Adventure. Há também uma aventura pixel para, é feito por pixel sapo, e é completamente gratuito para baixar. Claro, se você gostou do pacote e queria apoiar esse trabalho, tenho certeza de que mais do que aprecia algumas doações pequenas e maiores, se você for capaz de fazer isso quando terminar de escrevê-las. Agora, eu também vou fornecer alguns dihalídeos que você pode obter a partir de baixo, que têm todos esses ativos ou alguns dos ativos, aqueles que vamos usar especificamente para esses vídeos, que foram reaproveitados, alterado com base na escala e outras coisas. E eu vou explicar isso em um momento por que eu fiz essas mudanças. Mas se você quiser destacar estes, eles vêm em um tamanho muito pequeno, que é parte de uma das classes. Um pouco do problema quando se trabalha em um motor como Unreal. Mas novamente, espero que você entenda o processo de baixar algo de cada um, se você quisesse obter todo o caminho como ele vem aqui. Caso contrário, parece que ele tem o download para os arquivos do projeto para acompanhar junto com os vídeos da mesma maneira exata. Então, o que eu fornecerei, nós vamos pegar o bastão, as alturas, duas formas de jogo, ou eles só estarão montando o sapo, a mola, e as peças de nível. Estes eu criei de uma maneira particular para que eu possa mostrar certas abordagens diferentes para extraí-los, animá-los e colocá-los em um projeto. E também estes foram redimensionados. Então esta é a maneira que você vai encontrar as coisas ou baixado se você obtê-lo a partir da página web. Então estes são os que não foram tocados. Podemos ver que eles são 32 por 32 pixels. Se olharmos para a animação de salto ou a animação de salto duplo, podemos ver que um pouco pequeno. E se você começar a tentar aumentar isso, então nós vamos ter esse efeito embaçado. Agora, aumentei o tamanho dos bens que usarei. Eu recomendo seguir junto com de uma forma que não faça isso, que é basicamente executá-lo através de um pacote 2D como Photoshop ou Krita. Eu escolhi aumentar a escala em 400 por cento e certificando-se que definimos o algoritmo para o vizinho mais próximo, que significa que você vai obter o vinco de escala com base na porcentagem de pixels e você não tem nenhum desse tipo de suavização ao redor das bordas, para que você ainda obtenha um tipo perfeito de imagem de pixel. Agora, a razão para isso, algumas coisas que eu queria mencionar. Bem, esta não é uma maneira muito otimizada de trazer as coisas para um motor como o Unreal. Porque o Unreal tentará comprimir as coisas. Ele irá comprimir os tamanhos de imagem para desempenho mais tarde somente se você fornecê-la em um poder de dois. Então isso é algo parecido com isso. Por que eu coloquei todos juntos em uma grande folha de estilo. Você pode ver como 1024 por 1024 dimensão, que é o poder de dois. Então 512 por 512, 256 por 256, e assim por diante. E eu, por causa disso, é capaz de pegar esses ativos com os quais eu fiz isso, e ele tentará compactá-los se eles estiverem nesse poder de dois. Então provavelmente foi fazer isso com isso. Mas como eu disse, isto é mais uma demonstração. Eu queria mostrar algumas maneiras diferentes para o caso de você conseguir, ser dado para nós como este não é o fim do mundo. Não vai quebrar o seu projeto. E será útil saber como extrair as coisas dessa maneira também. Então, essa é a primeira coisa que mudei foi a web ou a escola. Eu fiz deles um poder de duas folhas de sprite. Agora a outra coisa é, obviamente, o tamanho e a razão pela qual escolhi ir para o maior tamanho. Então, em vez de obter 32 pixels por 32 pixels, estamos trabalhando mais com 128 por 128 por espaço de grade, portanto, por imagem. E a razão é que isso evitará como a necessidade de substituir alguns dos padrões do projeto, como a navegação AI, volume de pesquisa. Se você considerar isso hoje em dia, estamos trabalhando com coisas como, ok, resoluções. Você terá imagens que cada imagem individual poderia ser estilo de vida da lei, e 24 até 2048 por si só para obter essas imagens de alta resolução. Então trabalhar com algo que é apenas uma imagem de 128 pixels ainda vai ser relativamente pequeno, definitivamente não vai ser inovador. Podemos ver que esta folha de sprite inteira tem apenas 31 kilobytes de tamanho. E isso significa que vai ser muito mais fácil trabalhar com ele. Não precisaremos mudar o tamanho do mundo. Nós ainda podemos trabalhar com um centímetro por centímetro tamanho de solda. Nós precisávamos sobrepor qualquer um dos sistemas de IA também. Então eu acho que neste caso, trabalhar com um conjunto de imagens um pouco maior vai tornar as coisas muito mais convenientes. Então, como eu mencionei, se você contar, eu definitivamente recomendo seguir junto com os ativos que eu fornecer aqui. Deixe estes, uma vez que você tem estes extraídos, voltar para o motor e nós estamos olhando para obter algumas dessas texturas para o motor e trabalhar. Então podemos fazer isso de várias maneiras. A coisa que vamos importar é uma textura. Então eu vou para a pasta de texturas. Você pode navegar até onde os encontra ou armazenou no seu sistema. Vá para Importar ativos de jogo, texturas, que vai ser o local, e você apenas encontrá-los e selecioná-los todos e escolher Abrir. E isso vai trazê-los. Outra maneira é ter a janela aberta aqui. Podemos arrastar, selecionar todos estes e simplesmente soltá-los em nosso projeto. Então eles estão olhando um pouco fora no momento, mas tudo bem. Estaremos consertando isso em um segundo. Sou o que queremos fazer. Na verdade, em primeiro lugar, se abrirmos um destes, podemos dar uma olhada em algumas das avaliações. Então, na maior parte, estes parecem bem, talvez um pouco confusos em torno das bordas. É difícil dizer, mas podemos fazer algo para melhorar isso em um momento. Então temos o Alfa que estamos prontos, você precisa. Então a primeira coisa é que esta é uma textura que significa que não podemos arrastá-la para o mundo que não pode ver isso no mundo no momento, precisamos de algo chamado sprite para ser capaz de fazer isso. Então eu vou voltar para o principal, aquela pasta Texturas. E o que eu quero fazer é pegar tudo isso. E basicamente queremos alterar os detalhes aqui e fazer com que ele atualize automaticamente isso para melhor se adequar ao nosso projeto. E podemos fazer isso selecionando todos eles. Então mude e selecione, clique com o botão direito do mouse em nossos ativos e vá para ações Sprite e aplique-o configurações de textura 2D em papel. E o que isso vai fazer, você pode ver que todos os Alfas foram contabilizados. Livrou-se daquele fundo preto. E só aqui podemos ver o que mudou é que isso costumava ser o padrão dx t um lado, é decidido que a interface do usuário seria Claire e eu acho que isso parece um pouco mais nítido. E então aqui em baixo, o importante é que mudou isso para ser pixels 2D. E isso funciona perfeitamente bem porque nós não estamos indo para aquele pintado à mão suave ou contatos deve tipo de olhar. A imagem de pixel perfeita é praticamente o que queremos aqui. E novamente, eu acho que isso começou com o mundo dele por padrão. Então, fazer isso em todos os nossos ativos nos economiza muito tempo de configurar isso manualmente. Agora a próxima coisa que queremos fazer é transformá-los em sprites que possamos realmente começar a extrair coisas deles. Antes de entrarmos nisso, eu só queria dar um exemplo rápido do que eu quis dizer com essa escala. Então, se eu começar com as cabanas, você não precisa seguir por aqui. E nós vamos fazer isso de uma maneira particular naquele momento, mas eu vou apenas extrair os sprites, deixá-los escolher qualquer opção de uma vez. Vamos abordar mais as opções no momento. E são os sprites, não as texturas, como mencionei, que podemos arrastar para o mundo. Então você pode ver que isso é realmente aproximadamente o mesmo tamanho que esta planta parou se pressionarmos Play não é muito longe do tamanho do nosso cubo. Então isso, como eu disse, já está se alinhando com as opções de escala mundial baseadas em centímetro. Por isso vou livrar-me deles para o NIH. E de uma maneira semelhante, vou me livrar dos ativos do sapo ninja. Nós não vamos precisar das versões menores, as que não vieram com as atualizações prontas incluídas. Vamos manter para NIH nossas texturas aqui. Agora, no momento, eu só vou me livrar dos gostos provavelmente vai fazer o mesmo processo em apenas um momento. Mas eu queria passar por um pouco mais de detalhes sobre como podemos extrair isso em nosso jogo. 5. 05 - flipbooks: Então a razão pela qual isso nos leva e tópico quando se trata de extrair coisas dessas texturas, é que há algumas maneiras diferentes de você fazer isso. E dependendo de como os ativos foram fornecidos para você, que dependendo da sua equipe ou do projeto em que você está trabalhando, pode nem sempre ser dado a você da maneira ideal ou da mesma maneira. Você pode ter alguns problemas com o ponto dinâmico altamente está funcionando, o que pode afetar sua animação. Não é um exemplo perfeito para isso. Se formos para o sapo jogador, quando queremos extrair todas as imagens individuais, vamos para, clique com o botão direito do mouse sobre as ações de sprite textura e extrair sprites. Agora é por isso que eu fiz muito rapidamente apenas um momento atrás sobre a textura quente aqui. E deixei-a escolher a extração automática. Então você pode ver a maneira como isso está funcionando. Temos a cor do contorno, que é o delineador e cada imagem que encontra com base na transparência em torno dele. Então ele vai encontrar cada pixel final e classe que é o botão. Isto irá extrair tudo isto. Então podemos fazer isso de novo. Se você quiser mudar o modelo de nomeação, você pode mudar este cabelo e, em seguida, cada um será nomeado algo como t sublinhado jogador sapo, sublinhado, sprites, etc Então nós podemos fazer isso. Podemos ver que aqui nomear convenções bastante útil porque adiciona os números. Então sabemos que temos 25 dessas imagens baseadas em uma matriz zero de imagens. E o que eu queria mostrar é basicamente, nós temos a animação ociosa, que é estes primeiros €2. Então temos a animação em execução. Temos a animação de salto e a animação de queda ou o contrário. Então o primeiro 11, então 0 a 10, a animação ociosa. Então, a maneira que fazemos a nossa animação a partir dos sprites é clicar com o botão direito do mouse em uma seleção de sprites que queremos construir a animação, certificando-se de que a numeração é nota I, este vai ser o início da animação até o fim . Então isso irá colocá-lo automaticamente na ordem certa para nós e, em seguida, criar um flip book a partir deste. Tão agradável e simples. Lembre-se que o flip book é a nossa animação. Os sprites são a imagem que podemos trazer para o mundo e as texturas constroem toda essa informação. Agora, se trouxermos esta animação, podemos ver imediatamente que há um pequeno problema. Então eu vou arrastar isso para cima, eu vou pressionar final. Então a chave final vai deixar isso cair no chão. E podemos ver que os pés estão pulando para cima e a cabeça está se movendo para baixo. E isso porque é baseado neste ponto central de pivô. Então parece que ele está meio flutuando um pouco. Idealmente, a forma como esta animação foi feita para funcionar é que os pés permaneçam perfeitamente quietos e tudo está se movendo para cima e para baixo em torno desse ponto de pivô. Então, se formos e aqui podemos ver de novo, isso não é muito ideal, não é muito alto. A animação era para ser executada. Então, podemos corrigir isso manualmente se quisermos, selecionando todos esses ativos. Então, novamente, 0 a 10, podemos clicar com o botão direito sobre isso e podemos ir para ações de ativos e, em seguida, editar em massa via Matrix de propriedades. O que isso vai nos deixar fazer é que podemos arrastar e selecionar todos estes, mudar e selecionar todos estes, ir para as opções de sprite. E lembre-se que eu disse que é porque o ponto de pivô é que eu coloquei que está quebrado porque isso está indo do centro e porque cada imagem não era do mesmo tamanho, foi baseado no tempo, pixels e não post-its vai mudar de imagem para imagem é meio confuso se é, então o que queremos fazer é mudar isso do centro, centro para centro inferior. Agora, se fizermos isso, podemos ver os pivôs saltarem aqui e isso é mais alto que a animação deveria olhar. Então essa é uma solução fácil se você nos pegar que é assim e essa é a maneira que você tem que trabalhar com as coisas, então está perfeitamente bem. Temos maneiras de consertar isso. Só para juntar outro exemplo, podemos mudar isso para algo como o canto superior esquerdo e isso irá quebrá-lo completamente. Animações e eu jogando no canto superior esquerdo dos sprites. Então tudo está se movendo para aquele ponto de pivô novamente. Então essa é uma maneira de resolvermos isso. Não, eu não vou ficar com isso porque eu realmente configurei isso de uma maneira específica. Então vou deletar esses finitos. Se você tem que fazer esse tipo de processo também, certifique-se de remover a coisa do mundo. Ainda temos o que é um ícone de uma referência nula a um ativo que não existe mais. Então vamos nos livrar de t para todos t do mundo. E o que vou fazer a seguir não é o mesmo processo, mas vou mostrar-lhe como pretendia que isto funcionasse. Então eu vou clicar com o botão direito do mouse no sapo jogador novamente. Vamos para ações de sprites, extrair sprites novamente. Mas desta vez, a razão de eu ter colocado isso em uma grade é que eu me certifiquei de configurar tudo que ela arrastou tudo a 128 unidades de cada última imagem. Então podemos mudar isso de auto para grade, e podemos ver que encontra a grade inteira. Não é bem o site onde as imagens estão. E podemos mudar a largura da célula de 1024, que é do tamanho completo para 12 oito. Então podemos ver que separamos aqueles fora e, em seguida, a altura para 128. E quando extraio tudo, é exatamente do mesmo tamanho. Então nós temos um pouco de espaço livre sobre estes, mas podemos ver que todos os pés estão sendo cortados no mesmo lugar. As animações em que a corrente deve estar. Sim, mais uma vez, isso é contabilizado com o mesmo tamanho do espaço da grade. O problema com isso vem que você obtém essas células extras, estas se tornarão sites e classificadas como um sprite. Podemos corrigir um pouco disso pelo número de células que queremos reduzir, que eu vou definir para seis, porque nós só temos esses seis que realmente queremos. Mas verá que também nos ajuda com a convenção de nomes. E podemos facilmente criar nossas animações usando isso. Então o que vou fazer é extrair isto. Então, agora temos, como eu disse, isso é muito bem separado. Sabemos que todos eles são ociosos até o primeiro espaço vazio. Todos estes são executados até o próximo espaço vazio. Então temos cheio e temos salto. Então o que vamos fazer, recriar aquele flip book. Vou clicar com o botão direito do mouse neste ótimo flip book. Agora eu vou manter este, então eu vou nomear apenas quero FB, flip book sublinhado completo ocioso ou jogador ocioso. Então, novamente, a convenção de nomenclatura para flip books é o nome de sublinhado FB do flip book, texturas, um nome de sublinhado t da textura, e assim por diante. Porque há tantos sprites tanto que você vai ficar um pouco preguiçoso e não mudar o nome deles. Eu só vou Shift selecionar todos esses e arrastar isso para a pasta sprites apenas para fazê-los direito da maneira que agora sabemos que podemos excluir esses sprites vazios também. E nós podemos simplesmente ir nessa ordem e isso torna o processo bastante indolor para nós. Agora você pode ver que porque isso tem o tamanho exato que ele sabe que cada imagem que realmente funcionou para nós corretamente para começar, não estamos recebendo essa animação indesejada caindo. Então, em seguida, podemos fazer o mesmo com a nossa corrida. Então, ele vai mudar, selecionar todos esses clique com o botão direito do mouse, criar, virar livro, claudicação. Quero o FBI sublinhar a corrida jogador. E temos a nossa animação de corrida. Agora eu acho que esta velocidade funciona muito bem. A primeira coisa que vem à mente aqui é que o ocioso parece um pouco intenso porque está animando tão rapidamente. E é realmente só para ser quando o jogador não está fazendo nada. Vou mudar os quadros por segundo de 15 para algo como oito. E isso parece-me um pouco melhor. Você pode mudar isso para o que quiser, mas isso é basicamente mudar a taxa de reprodução. Então, se você quer que eles sejam muito enérgicos, então nós temos algo mais alto. Ou como eu disse, algo um pouco mais detalhado, podemos ir um pouco mais baixo. Mais uma vez, vamos arrastar todos eles para a pasta sprites que não vamos usá-los novamente, mas é claro que referenciado nos flip books, então precisamos que eles ainda existam. Da mesma forma com as texturas, escusado será dizer que eu esperaria. E isso deixa esses dois. Então nós temos a animação caindo. Agora isso é bastante interessante quando você está trabalhando com algo assim, mesmo como um único quadro, ainda precisamos fazer isso um flip book porque é isso que nossos componentes na classe de caracteres 2D estão esperando. Então vamos chamar este um sublinhado FB completo e vamos chamar este, criar este, desculpe, e chamar este um f ser sublinhado salto. Agora, se abrirmos ambos, então eu estou apenas turnos selecionando e pressionando Enter. Podemos ver que isso ainda está acontecendo. Podemos economizar um pouco de memória, eu acho. Sim, tchau. É hora de 0. Então isso não vai fazer loop. Não foi realmente reproduzir a animação, mas este não é o tipo de ativo que precisamos para essas duas animações, como eles são tecnicamente animações. Então isso é todos os nossos jogadores flip books prontos para ir. Mais uma vez, podemos pegar esses sprites e vamos soltar isso na pasta sprites. E então podemos remover todas essas células vazias. Isso nos deixa com, eu vou virar livros para que possamos mover nossos livros de flip player para a pasta flip book. E isso é basicamente a configuração do projeto que estamos indo para com a estrutura. Agora a próxima coisa é o nosso jogador de máscaras. A razão pela qual eu tenho isso, eu só quero mostrar outro exemplo de West certas coisas foram. O que você precisa para pular no meio? Então, estes foram configurados exatamente da mesma maneira, um 128 unidades distantes um do outro. Mas por causa do tamanho deste jogador e da peça principal que ele tem, se entrarmos na opção de extrair sprites, novamente, o automático não funcionaria aqui na escola porque estes dois, os feitos estão realmente tocando a cabeça pedaço. Assim, estes sempre seriam extraídos juntos e quebrariam completamente a primeira configuração. Então novamente, embora para o sapo que era uma espécie de trabalho ao redor, para este, isso não seria uma solução alternativa. E você teria que saber a escala das grades. E novamente, separe isso por um 128 em cada. E você pode ver que corta apenas se o pé na parte da cabeça tipo de tocar um ao outro. Então eu tenho apenas uma coisa que eu percebi o que vai ser um exemplo útil. Como eu disse, não vou usar a máscara. Na verdade, vou me livrar desse NIH, mas só queria mostrar esse exemplo rápido. Da mesma forma, a mesma coisa acontece com o bot. Farei isso juntos. Vamos às extrações dos robôs e extraímos isto. Então, novamente, porque essas asas estão tocando nas aulas, esses dois como um único morcego e, em seguida, o resto deles estão funcionando perfeitamente bem. Então o que vamos fazer é mudar isto para uma grelha. Esta é uma largura completa de 1288 e temos imagens de morcegos do sul, então dividi-o por sete e teríamos uma cela com 184. É bom estar, sim. Então essa seria exatamente a quantia que precisamos cortar. Então podemos ver agora que eles não são do mesmo tamanho, mas isso é perfeitamente bom. Lembrem-se que temos essas substituições de pivô se precisarmos delas, mas esse é o meu corte de direitos entre essas duas asas que vão até o que nos liga o tamanho que precisamos. Está perfeitamente bem. Um 120 é pego o que é o máximo, todos eles. Então, novamente, vamos extrair estes. Vamos criar um flip book e para esta caixa não divulgada FB. E vamos apenas verificar se isso funcionou. E, de fato, não precisávamos fazer nenhum deslocamento de pivô. Como isso parece perfeito. Então, novamente, mova estes para os sprites. Podemos tecer isso no “flip book”. E nós basicamente vamos fazer isso para o resto deles. Assim, para as cabanas, como vimos anteriormente, isso realmente funciona se apenas fizermos o guia de extração de sprites para extrair sprites. E este vai realmente trabalhar com a extração automática. Então, podemos clicar com o botão direito sobre este livro Criar flip chamado FB sofrer hots. E apenas verifique se é. Postando do meio, que é o que queremos de qualquer maneira. Então, isso foi definido para perfeitamente bem. E no final, vou escolher a opção aqui que vamos para a primavera, vamos clicar com o botão direito do mouse novamente. Nós vamos para a opção de extração e que ela não se lembra se eu configurei isso para ser baseado em grade, então vamos dar uma olhada nisso eu acho que eu poderia ter feito. E, no entanto, podemos ver que todos estes no chão. Se você fizer uma grade de 128 por 128, significa que só precisamos nos livrar das células vazias. E então podemos selecionar todos os nossos pontos de animação de primavera. Grant flip book chamado este um FB primavera não revelado. E isso funciona perfeitamente para que fique aterrado e faça uma pequena animação de empurrar. Então, apenas para arrumar, novamente, virar livros em uma pasta flip book e sprites na pasta sprites. E você pode clicar em Controlar para desmarcar as coisas que você não deseja. Tecela-os e estamos tão bem, que significa que podemos fechar todas estas janelas. Nós meio que terminamos com eles a menos que você queira mudar a velocidade de reprodução. Agora podemos ir para a nossa classe base de jogadores. Dentro disso, queremos ir ao nosso sprite. E, de fato, antes de tudo, ele queria se livrar desse cubo. Então exclua o cubo, vamos para o sprite. E aqui, agora podemos mudar nosso flip book fonte padrão para nosso sublinhado FB, digamos jogador ocioso, que nos dá uma idéia do tamanho do jogador. Agora eu sei que nós vamos precisar mover isso um pouco para cima porque o ponto de pivô não está bem no meio da cápsula, então nós vamos mover o para cima apenas um pouco. E então podemos pegar nossa cápsula e vamos arrastar o jantar tamanho da cápsula. E queremos que isto seja provavelmente apenas dentro das proezas. Não queremos que pareça que o plano está pairando e vamos fazer a cápsula um pouco menor do que o jogador. Então, parece que está descansando muito bem no chão. E se tentarmos isso, isso deve cair no mundo. E então vamos, podemos ver que estamos nos movendo. Não parece tão pairando. E à medida que chegamos ao limite, isso parece certo? Então, obviamente, queremos começar a reproduzir animações diferentes quando nos movemos. Mas este é definitivamente um bom lugar para o porquê de precisarmos ser. Temos o sistema de animação 2D agora dentro, e podemos começar a ter uma idéia de como é estar no mundo. Então isso é como o que eu estava falando no trailer para esses vídeos. Temos o jogo até caminho viajante, que é um flip book 2D, essencialmente movendo-se no mundo 3D. Então poderíamos, se adicionarmos novas dimensões às mortes, ter um jogo muito semelhante usando essas animações 2D, mas tendo esse tipo de mundo 2.5 D ou 3D para interagir. Então, novamente, outro benefício de fazer tudo isso, embora não seja um motor que as pessoas realmente consideram ser uma espécie de 2D 3D ou 2D otimizado. Temos algumas características muito legais que podemos fazer com o Unreal Engine, com o tipo de híbrido 2D. Então, novamente, nesta fase, estamos chegando bastante longe e certifique-se de que você está salvando seu projeto enquanto avança para manter todas as atualizações que estamos fazendo. Quero dizer, outra coisa que acabei de lembrar, se você fechar e abrir o projeto, você provavelmente está sendo recebido com um novo mapa cada vez. Então o que podemos fazer para ignorar isso para o meu ir para a seção de mapas e modo, porque temos o nosso mapa principal salvo, podemos alterar o editor Startup Map. Você está recebendo o modelo padrão, que é apenas o mapa vazio semelhante ao que temos, mas não o que estamos trabalhando nele. Então o que podemos fazer é mudar isso para principal. Então agora toda vez que fecharmos e abrirmos o projeto, esse será o mapa a ser aberto. E da mesma forma, se você quiser dar isso a outra pessoa para jogar, podemos mudar o jogo no mapa padrão para Maine também. Então, novamente, será recebido com este mapa em que estamos trabalhando e vamos começar a fazer mudanças nisso em breve. Para tornar esta base mais 2D estará usando nosso mapa de azulejos pintados e vendo porão de que funciona. 6. 06 - TileSets: Antes de podermos começar a pintar coisas dentro de nossos mapas de azulejos, precisamos de algo chamado conjunto de azulejos. E para obtê-los, vamos mais uma vez redefinir nossas texturas. Então, a partir dos ativos e da pasta de texturas, a última coisa que não usamos, você deve ter notado é o terreno não revelado T. O que queremos fazer isso é algo um pouco mais único. Então, vamos clicar com o botão direito do mouse novamente. Anteriormente, temos extraído coisas como sprites individuais. O que queremos fazer se este é, vamos mudar isso para criar um conjunto de azulejos. Isso significa que você pode dizer que parece praticamente o mesmo no momento. Isso nos permite definir especificamente coisas como o tamanho de cada célula individual e, em seguida, dar essas células diferentes coisas como colisões a partir desta opção aqui em cima. Portanto, no momento, o tamanho padrão do bloco é 32 por 32. E para aqueles que prestam atenção com base no tamanho da textura, se vocês olharam para isso, isso não vai funcionar. Então cada um desses quatro, basicamente eu queria ser o que selecionamos. Então podemos ver que 32 por 32 é um pouco suave demais quando estamos pintando coisas, espera-se que vamos pintar coisas em blocos deste tamanho. Então, o que queremos fazer para conseguir isso é apenas subir para 64 por 64. E isso é muito importante que façamos essa mudança nove, pois isso tipo de transporte para o nosso mapa de mosaico quando criamos isso um pouco mais leve. Então vai nos poupar tempo e automatizar um pouco o processo. Então, com isso, isso significa que agora temos o tamanho correto da seleção, o que teremos nossas diferentes peças assim, então esse é o primeiro passo importante. Agora a próxima coisa a notar é que eu só vou estar trabalhando com esta seleção aqui em cima se você quiser fazer níveis diferentes e usar esses diferentes ativos que eu forneci, então você pode usar um desses, apenas seguir o mesmo processo que eu vou estar fazendo nesta seleção aqui em cima para os diferentes potes abaixo. E então você pode vir para cima com suas próprias criações para os níveis com esses botões. Agora a próxima coisa é que queremos considerá-los contratar estes serão usados no mundo. Então coisas como esta, eu vou classificar isso como um pouco de informação de fundo. Então coisas como a moagem traseira não vai precisar de qualquer colisão não vai interagir com o jogador ou qualquer outra coisa. De uma forma semelhante, temos pedaços no meio aqui. Então estes novamente, que provavelmente nunca vai entrar em contato com os jogadores. Então, provavelmente não precisaremos adicionar uma pequena colisão como esta, os pedaços ao redor do lado de fora. Obrigado. Então essas paredes e os pisos e outras coisas, eles terão potencial para interagir. Então, queremos adicionar colisão a esses blocos. Agora, a maneira como fazemos isso é um pouco de um processo repetitivo, mas vamos selecionar cada bloco individual e veremos que isso aparece aqui em cima. Agora, infelizmente, se selecionarmos várias coisas que desaparecem e não houver nenhum tipo de copiar colar que eu tenha visto. Então o que queremos fazer é selecionar cada bit que queremos ter uma colisão, ir para adicionar livros. E você pode ver aqui uma caixa branca é apenas um bloco em torno de nossa telha de colisão, que nos mostra onde a colisão está sendo ajustada. Se quiséssemos atualizar isso um pouco. Então talvez isso seja um pouco também, subindo um pouco longe demais, em um pouco alto demais, podemos mover a seta ao redor e isso mudaria o tamanho de uma caixa colidindo. Ou podemos estender isso se quisermos, passar a imagem visível. E eu ouvi falar desses, estes realmente funcionam muito bem se nós apenas deixarmos muito confortável em torno do tamanho da grade que temos aqui. Então eu vou apenas passar e basicamente selecionar cada bit e apertar a caixa Adicionar. Então esse é o primeiro feito. Basicamente, todos os lados lá fora. Quero todos os lados. Então estes tops e ciência e, em seguida, todos estes individualmente podem ter essa colisão também. Então eu vou colocar isso em uma espécie de montagem acelerada no fundo aqui. Então eu não tenho que assistir em tempo real e você pode acompanhar e puxá-lo se ele chegar em frente. Ok, Então tudo feito, Eu dei esses colisadores também porque estes não podem algum detalhe agradável em torno da borda dos níveis que você ainda pode saltar sobre ele apenas para quebrar a monotonia de apenas ver este 1-bit de Lund e da fronteira. Então, a última coisa é que uma vez que você tem toda a sua colisão, você acha que está configurado da maneira correta. Podemos ir para a opção de telhas colidindo aqui. E isso realmente mudará tudo para ser uma grade azul baseada no que tem colisão e, em seguida, o que não tem colisão. Então podemos ver que tudo o que eu disse precisaria de colisão tem um F. Acho que os jogadores nunca chegarão a isso. Então provavelmente não vale a pena fazer. Eles definitivamente não serão capazes de alcançar isso a menos que eles tenham ido um pouco de buggy. E da mesma forma, este é apenas um tipo de enchimento visual para que entre as diferentes grades quando a pintura para tornar as coisas um pouco mais interessante, estes todos vão precisar de colisão lá qualquer realmente vai ser usado como plataformas ou tijolos para saltar para cima deles. Então isso é praticamente perfeito. Agora, eu provavelmente não vou usar isso. Mas só para mostrar um exemplo final, temos essas dinâmicas. Então, se você quiser usar plataformas flutuantes ou algo assim, estas provavelmente não serão ideais para usar em um mapa de mosaico de qualquer maneira, porque se você quiser traçar quando normalmente queremos ser capazes de saltar através delas. E você não pode fazer isso muito facilmente com um mapa de mosaico. Você provavelmente quer fazer esse projeto de seu ferro em sua colisão de configuração de uma maneira diferente. Mas se por alguma razão quisesses usar isto, se quisesses que fossem como uma ponte sólida pela qual não podes saltar. Então, novamente, muito semelhante maneira, nós vamos apenas adicionar colisão aqui. Então, todos estes, e então é aqui que isso vem a calhar embora. Obviamente o Olá MOOC com este abridge é definitivamente muito grande do fundo aqui. Então nós vamos selecionar isso e nós podemos apenas arrastar isso para cima e talvez arrastá-lo para cima um pouco mais para que não haja uma ótima maneira de sobrepor isso. Podemos mudar a grelha da dinastia, algo como 1. Então nós temos menos esnobe e eu iria, nós podemos contornar o contorno perfeitamente e nós fizemos isso. Mas todos esses, então eu pensei que isso costumava atualizar. Parece ter apenas informações sobre todo o tamanho da grade. Eu estava esperando que ele iria representar visualmente isso aqui, mas eu não posso confirmar a partir de experimentos anteriores que no jogo vai levar a colisão deste tamanho livro aqui. Eu não sou necessariamente o que você vê aqui. Então isso significa que se você fizer isso dentro, o personagem não estará colidindo até que eles alcancem o fundo absoluto disso em vez de D, o espaço de pixel morto em torno dele. Isso é realmente tudo que você precisa fazer para obter uma configuração conjunto de toalhas que está pronto para ir as colisões como precisamos deles. E como eu disse, se você quiser tomar essa mesma abordagem, você pode fazer isso para todos os diferentes ativos. Você provavelmente já pode ver porque eu não vou fazer isso para todos os ativos aqui, para o bem dos tutoriais é que seria um pouco repetitivo. E isso será mais do que suficiente para mostrar as principais técnicas e princípios que vão para a criação do nosso mapa de azulejos. Então, agora podemos fechar o Taus que nós praticamente terminamos com isso para o resto do curso, eu vou deixar isso nos ativos de azulejos. Então, vamos ter apenas um conjunto de blocos em um mapa de mosaico. Portanto, provavelmente não vale a pena ter pastas separadas para eles. Então eu acabei de criar um tipo de abrangendo uma pasta de ativos de mosaico. 7. 07 - TileMaps: Com o nosso túnel instalado e pronto para ir, agora temos o ativo que precisamos para basear um mapa de toalhas. Tão semelhante a com nossas texturas, se clicarmos com o botão direito sobre isso, teremos uma opção sensível ao contexto. Então, agora podemos criar um mapa de mosaico a partir de nossos conjuntos de mosaicos. Então, podemos escolher esta opção. Novamente, isso criará um novo ativo aqui embaixo. Eu vou entrar nisso e podemos ver como isso funciona. A primeira coisa é que o conjunto de blocos ativo foi escolhido automaticamente daquele que criamos um pouco mais cedo. Se você tivesse mais de um, você poderia mudar isso aqui e ele está tomando algumas informações. Novamente, o importante para o lado direito, podemos ver que temos essas setas de desfazer e a largura e altura do túnel foram definidas para 64 por 64. Se tivéssemos isso por padrão, teria sido 32 por 32. E como eu disse, isso significaria que estava selecionando tamanhos incorretos da cabeça quando estamos tentando pintar coisas. Então, se entrarmos e selecionarmos isso, vamos pegar o pedaço errado, como podemos ver. Então é por isso que era importante que estivéssemos usando a largura e altura corretas da telha para começar quando selecionamos coisas de tinta de cobertura para o mundo. Então, agora que eu seleciono estes, você pode ver como ele está mudando o pincel e nós temos a opção aqui, pintar Ásia e preencher. Muito simples, mas você provavelmente está familiarizado com o que estes fazem. E então essa grade branca é como Canvas será o mundo em que estamos pintando. Então, a próxima coisa provavelmente seria mudar o quão grande queremos que isso seja no momento, se fôssemos, por exemplo, pegar todas as mortes, colocar isso dentro, que seria essencialmente o tamanho do nosso mundo. Então vamos ver como isso funciona. Podemos arrastar nosso mapa de azulejos conosco para o mundo, e isso é provavelmente um pouco pequeno demais para os planetas corrigirem. Então eu tenho alguma colisão fora da câmera, foi ensinado que um pouco mais tarde o que nós queremos fazer aqueles tornar isso maior possamos mudar isso com a largura do mapa e a altura. Então, cada cabeça de unidade de grade vai ser 64 por 64 como você esperaria. E se arrastarmos isso, podemos fazer isso muito maior. Mas você provavelmente não iria querer que isso fosse enorme, caso contrário você tem um espaço muito grande para preencher. Na verdade, acho que algo como 60 por 40 pode ser muito bom aqui. Talvez um pouco menor nos meus testes, acho que passei mais de 80 por 20. Então algo mais amplo feito é uma ferramenta. Nós só vamos fazer um tipo de nível horizontal. E então podemos começar pelo menos tipo de trabalhar fora como o sistema funciona. Então a primeira coisa é eu vou pegar a ferramenta de borracha e me livrar deles. E nós queremos nos concentrar tipo de como se você está familiarizado com Krita ou novamente, Photoshop, nós temos um último sistema muito flexível aqui. Então a camada um é aquela que não temos momento. Podemos adicionar novas camadas a isso porque algo bastante simples. Então eu vou criar um plano de fundo e um nível de primeiro plano. Então, o que está em cima vai realmente ser o primeiro plano. Esta é a camada mais frontal, e então temos oito camada de fundo. Eu só estou pressionando F2 para renomear estes e dado aqueles são nome rápido. Agora, como um exemplo rápido para mostrar como isso vai ser, eu vou obter esta cor preta aqui. Então, selecionando isso, selecione a ferramenta de preenchimento e no fundo, basta preencher essa vontade em preto. E então, para testar, temos o certo na frente. Vamos pegar um pouco de mudanças na colina para pintar. E, claro, qualquer coisa que você selecionar vai ser pintado aqui. E vamos nos certificar de que isso pinte sobre o fundo. Então é assim que vamos usar isso. Agora temos o nosso fundo está muito bem definido e pronto para ir. Então tudo atrás de nós vai ser muito. Cor preta pintada. E então podemos começar a desenhar em primeiro plano, que seria a parte com a qual o personagem com a torta vai interagir, com nossas peças colidindo. Então algumas coisas festival, estas foram dadas uma colisão por uma razão. Então eu vou adicionar estes como uma espécie de esboço para o nível. Então, idealmente, o que eu estava pensando é que teríamos uma espécie de cota em torno de tudo isso. E isto é para conter a câmera também. Então a câmera só vai ver esse tipo de contorno preto, que nível precisa ser mais largo porque a câmera pode ver muito longe horizontalmente, então precisamos de uma coisa boa. E algo como 16 unidades foi aproximadamente quando a câmera começava a ver que era espaço vazio em torno dela. Então vamos ter uma esquina por aqui. Estou apenas pressionando Zed para girar isso e x irá girá-lo horizontalmente. Então eu vou girar aquela direita, a direita mais ou menos lá. E podemos apagar esse e pegar um desses pedaços laterais. Lembre-se, queremos que os jogadores colidam com esta peça de pedra aqui. Então, de novo, eu só vou virar isso e nós podemos apenas pintar aquele restaurante por aqui. Você pode usar diferentes peças, se quiser. São todos da mesma maneira. Então eu vou virar isso para reutilizá-lo. E é basicamente assim que vamos elevar o nível. Então isso vai ser um monte de coisas virando, arrastando. Se você cometer um erro, então nós vamos para arrays que. Você também pode vir em selecionar e ferramenta de pintura largura. Desde que você tenha a ferramenta de pintura selecionada, Shift select, nós copiaremos isso. E mais uma vez, podemos virar isso e simplesmente colar estes nele. Novamente, certificando-se de que você tem aproximadamente uma distância de 16 pontos da borda aqui. E você deve ficar bem com a câmera não ver o espaço vazio que vamos ter no fundo. Porque lembre-se, nós ainda vamos ter tudo isso em volta dele em segundo plano. Podemos simplificar isso um pouco para o estilo artístico. Mas o principal é que você ainda não quer ver esse tipo de 200 obviamente que este não é o mundo inteiro. A próxima coisa, então isso é meio que as fronteiras feitas. Podemos selecionar isso também. E eu vou virar isso de novo usando Zed. Isso não é um pouco estúpido. A próxima coisa é que queremos a nossa colina. Então isso é basicamente apenas indo para bes e isso um pouco curto demais muitos para adicionar um pouco de altura extra para isso. Vamos ver como isso vai correr. Então, cole isto aqui em baixo. Então nós vamos querer que eles vão para o chão e você pode ver que ele tem um pouco de um contorno. Então tenha isso em mente que estes devem estar indo ao longo do chão enquanto você quiser que eles vão. E então isso será juntar-se com as outras peças, certificando-se de que a peça do meio lá por causa do contorno. E então, como eu disse, este é o pouco, este é apenas enchimento que o jogador foi vê-lo cedo o autista. Então eu vou ter ido chão é quando queremos uma nova borda apenas usando um tipo semelhante de configuração que podemos, em seguida, colar estes junto. E outra dica é se arrastarmos, selecionar esses dois para a direita e, em seguida, basta arrastar isso junto. Isso. E a paz será sempre arrastada até o fim. E assim você pode ver, ele só economiza um pouco de tempo lá de selecionar diferentes peças repetidamente. Faltou-nos flexibilidade, por isso posso colar isso. Não significa que precisamos disso para descer um pouco mais. E então podemos fazer algo como selecionar a ferramenta de preenchimento e preencher isso lá. Então, novamente, você provavelmente vai querer fazer algo um pouco mais criativo do que eu fiz. Então eu não vou manter isso funcionando e fazer a coisa toda com comentários. Então você tem a idéia base de que podemos arrastar e selecionar coisas diferentes para ter alguns olhares interessantes aqui, como disse, em vez de apenas ter uma peça constante nível de grama, é assim que você pode tipo de falsificar algum primeiro plano e com as diferentes conexões lá. E então a última coisa que eu vou fazer também é a área dentro deste tipo de ligação que eu fiz. Vou voltar para a área de fundo, pegar a borracha, e certificar-me de que levamos isto. Porque eu acho que essa cor não colide um pouco demais com o contorno do personagem. E eles podem parecer um pouco confusos, um pouco confusos. E é bom obter aquele belo sólido contorno preto do personagem. Então eu vou apagar tudo o que ele tinha osteo, alguma outra coisa que você vai me ver fazer? Para a próxima coisa que você vai ver é um desvanecimento para os resultados finais. Se você está no Reino Unido, uma espécie de pizza azul, aqui está uma que eu fiz antes. E aqui está um que fiz mais cedo. Então, como eu disse, é muito, muito simples. Limpei os antecedentes. Se eu fizesse algumas camadas diferentes de plataformas tinha alguma coisa sobreposta cabeças certeza de que você pode fazê-los olhar para o cruzamento que teria que é meio que contabilizado na maneira que os contornos sendo feito aqui. Fiz uma plataforma para saltarmos. Eu não fiz uso da plataforma de madeira, mas você pode adicionar isso se você quiser. E então só um tijolo aqui para nós brincarmos também. Então, é assim o resultado final, você pode obter algo muito, muito semelhante ao que se você quiser. A principal coisa como eu disse é que quando nós arrastamos isso para o mundo, isso vai explicar para o, o que a câmera podemos ver em qualquer ponto e quando ele não seria capaz de chegar mais alto ou mais baixo na câmera tipo ou campo de visão para o lado vertical não é tão alto quanto o plano horizontal. Então, se voltarmos para o mapa agora, podemos começar a ver alto, isso vai funcionar. Então vamos arrastar isso para o mundo. Podemos ver que é muito maior. Eu vou 0 este site nós podemos ir 000. E como o ponto de pivô está no canto superior esquerdo, gostaria apenas de arrastar isso para cima. E nós realmente queremos que isso se alinhe com os pontos de plástico. Vou arrastar isto para baixo do ponto dos planetas e podemos começar a nos livrar de coisas como se não precisássemos mais deste chão. Nós também fomos precisar da esfera de reflexão ou do povo, para que possamos nos livrar de algumas das coisas do contorno do mundo aqui. Agora, se pressionarmos Play, contanto que esteja em linha com o plástico para o jogador deve cair sobre essas grades e colidir. Então temos algo que podemos parecer aleatórios. Podemos ver que o plasma está a pairar, e é por isso que queríamos pôr isto bem cedo. Podemos voltar ao plano rapidamente, trazer o componente de captura para cima um pouco mais. E como eu disse, nós podemos fazer esse tipo de tamanho falso e tipo de ter aquele lado do pé um pouco lá para que quando estamos descansando, parece que estamos descansando no chão. E eu não sou um grande fã daqueles clientes realistas em um jogo de pixel art. Então o que eu vou fazer é para a esfera do céu, pequena dica aqui, eu vou fazer as cores determinadas pelo sol, não com base na clarabóia que temos. Então temos nossa fonte de luz. Nós também fomos precisar do re-cast malha suficiente. De volta ao arranha-céu. Vou ajustar o brilho da velocidade da luz e da opacidade do Clyde para 0 e o brilho da estrela. O que tudo isso não será relevante, o que agora nos dá um cara de classe. Acho que isso não é um pouco cegante e um pouco brilhante. Então parece que eu fui no céu ou algo assim. Então o que queremos fazer é mudar a cor do zênite para um mais escuro, talvez um cinza azulado mais escuro. Vou copiar isso porque vamos reutilizar esse valor hexadecimal em um momento. Vou mudar a cor do horizonte para a mesma cor. E isso nos dá um belo tipo de arranha-céus planos. Se você já quis os vegetais do céu apenas ser um tipo de cor plana mínima. Acho que funciona um pouco melhor. Não entra em conflito com os contornos. Assim, ainda podemos ver claramente os contornos que foram adicionados a todos os ativos, mas também não é muito brilhante. Não tem os Clyde. Parece um pouco mais adequado com o estilo. E só um teste podemos ver a câmera, não podemos ver mais fundo aqui. Não verei nada acima de nós. E não vamos ver nada para o lado direito, espero. Então isso parece muito bom. Estou a colidir com tudo o que esperávamos que colidissem. 8. 08 - configuração de animação para jogadores: Com nossos conjuntos de mapas de mosaico e prontos para ir. Agora temos algo cheio no jogador para correr. Então temos nosso lugar baseado, essencialmente, o que queremos fazer agora é retornado para a classe dos jogadores e vamos passar pelo movimento e pela configuração da animação. Então vamos criar esse sistema pode ser um pouco mais. Então, de volta para dentro da base de jogadores não divulgados da BP, queremos o tique-taque do evento novamente. Então, um possível, obviamente queremos tentar evitar o tique-taque evento arrefecimento de muitas funções constantemente, algumas coisas como a animação e verificação de certos estados, vamos querer ser praticamente atualizado constantemente para que obtenhamos que imediato feedback. Então vamos tirar isso do tique-taque do evento. Este é o tipo de coisa que vai ser sutil, leve para este Rooney não vai adicionar qualquer tipo de rolamento de desempenho aqui. Agora realmente o que queremos fazer, haverá duas coisas diferentes que queremos estar constantemente verificando e atualizando no tick do evento. Nós vamos querer controlar a animação com base no status atual do movimento se eles estão no ar, no chão, ociosos, movendo e assim por diante. Nós também vamos querer atualizar a animação dos jogadores com base na direção, no movimento ou na entrada que o planeta está pressionando. Então, para fazer isso, porque sabemos que temos as duas coisas principais que queríamos verificar. Dirijo este festival de uma sequência. Então eu basicamente vamos ter nossa seqüência de movimento e nossa seqüência de rotação. Podemos redirecionar metade da noite que quisermos. Às vezes é bom tipo de auto-documentar enquanto você vai junto. Então sabemos que quando voltarmos, deixaremos um comentário e diremos que esta será a nossa rotação. Então, meu simples comentário só para nos lembrar o que estamos fazendo é passar pela mentira do movimento, esta vai ser a animação baseada no movimento. Esta será a coisa um pouco mais complexa que eu vou percorrer isso em duas etapas, será florescer nesta fase, a implementação rudimentar muito básica que podemos entrar no evento carrapatos para que possamos muito rapidamente Visualize o que está acontecendo. Vou voltar um pouco mais tarde e vamos refinar isso com uma abordagem um pouco melhor. Mas eu queria mostrar ambas as abordagens para que possamos ver Y1 tipo de automatizar a força-tarefa um pouco. Então, para começar, o que queríamos fazer é começar a verificar todos os possíveis estados em que podemos estar, no quediz respeito a contratar o playa está se movendo ereto tão rápido que podemos executar isso fora de uma filial inicial. Então, para começar, o que queríamos fazer é começar a verificar todos os possíveis estados em que podemos estar, no que diz respeito a contratar o playa está se movendo ereto E isto vai verificar se estamos de castigo ou não. Então, o Componente Movimento de Personagem tem, novamente, todo esse tipo de flora do trato. E em vez de, do que moído direito, você vai verificar se estamos enganando, mesmo tipo de coisa, mas tipo de lógica inversa. Portanto, ele tem uma variável sendo rastreada, se o personagem está atualmente em um estado de queda. Então, se estamos no ar a qualquer momento, se estamos, o que queríamos fazer é pegar nosso sprite para nossa animação que temos e vamos definir o flip book. Mas queremos definir o flip book para certos estados, é claro, quando estamos enganando. Então, movendo-se no final de qualquer maneira, vamos começar assumindo que estamos pulando. Então nós mudamos isso para FB salto sublinhado, e nós vamos ligar isso aqui. Agora isso realmente vai causar um pouco de um problema porque nós essencialmente temos dois estados que queremos explicar. Se estamos nos movendo em um valor de vesícula positivo ou negativo. Então, se estamos atingindo o ápice do salto ou caindo para trás dele. Basicamente, qualquer coisa quando você não está no chão é classificado como enganador. Então este não é totalmente o que precisamos momento, mas este é um bom começo. Agora, como vamos reutilizar muito isso, vou pegá-lo do flip book e promover isso para uma variável. Vou nomear este salto não revelado do FB. E vamos precisar de tudo isso como variáveis à medida que passamos por isso como uma maneira agradável e fácil de configurar isso. Porque agora que temos esse conjunto em nosso slot, você verá que ele atribui automaticamente o valor de salto não revelado do FB à animação de salto. Então vamos passar por este passo a passo e isso vai tipo de carne fora algumas das variáveis que precisamos também. Ou quando voltarmos arrumando essa lógica, farei outra checagem aqui. E queremos descobrir se estamos no chão. Então agora assumindo que não estamos caindo ou subindo, e novamente, voltaremos a isso um pouco mais tarde, em carne e osso, o local fará as coisas do chão. Em primeiro lugar, não queríamos saber se estamos no chão e estamos nos movendo lado a lado ou se estamos completamente estacionados. Então, simplesmente, podemos usar o get speed cool aqui. Então podemos encontrar a velocidade em que o personagem está se movendo. E queríamos verificar se isto não é igual ou não. Então nós temos isso como um comprimento para ter certeza de que nós explicamos qualquer uma das direções. Então isso irá retornar o vetor essencialmente como um flutuador. Eu sou basicamente isso vai saber que se nós estamos movendo para a esquerda, direita para a frente , um backup, se houver retornos 0, então nós saberemos que não estamos nos movendo em nenhuma direção. Então podemos dizer que não é igual a. Então, se isso não for igual a 0, então sabemos que estamos nos movendo, então isso estará se movendo ou não se movendo. Então, novamente, o que queremos fazer a partir daqui, vamos ter que pegar nossos sprites e flip book. Então eu vou controlar W para copiar esta linha aqui. E farei isso de novo. Então Controle W como precisamos fazer isso pela terceira vez. E espero que você possa começar a ver por que essa não será a configuração mais ideal que precisamos para continuar resfriando essa função várias vezes. É uma espécie de lógica de replicação. E novamente, você verá como podemos consertar isso facilmente em apenas um momento. Mas antes de tudo, vamos fazer as coisas funcionarem visualmente. Podemos realmente começar a testar isso à medida que avançamos. Então, no momento, porque temos esse conjunto para nada, precisamos fazer mais alguns passos antes de podermos testar. Mas se saltarmos, podemos ver que conseguimos a animação de salto. Qualquer outra coisa vai tornar isto invisível. Então o que estamos dizendo é que se a velocidade não for igual a 0, então se estamos nos movendo, então vamos querer definir nosso flip book aqui para ser executado. Então vamos definir isso para ser o flip book em execução ou promover isso para uma variável novamente chamada este um FB e a corrida escolar. E vamos fazer algo muito parecido aqui em baixo. Então este é, claro, se não estamos nos movendo, então vamos definir isso para FB sublinhado ocioso, ou que é um jogador ocioso apenas uma noite quando o problema de nomeação não tem isso. Então eu posso voltar e consertar isso um pouco mais leve. Eu vou promover isso novamente para uma variável e que será FB sublinhado ocioso. Então agora temos algo que está preenchendo esses slots para que agora possamos testar isso. Então nós temos nossa animação ociosa, ele, nós não estamos fazendo nada pulando animação se estamos no ar e executando animação quando não estamos estacionários. Então, é claro que temos um tipo de rotação da verdade. Nós não contabilizamos o salto e a queda, mas eles estarão chegando muito em breve. Inclinação para o salto e queda. Agora vou apresentar-lhe a nota selecionada se você não viu isso antes. Basicamente o que queremos fazer, se sabemos que estamos em alguma forma de estar no, não sabemos se isso é uma velocidade positiva ou negativa que estamos nos movendo ainda no eixo z, o que vamos fazer é vai soltar o nosso salto sublinhado FB, e vamos selecionar um flip book dependendo de um determinado resultado. Então vamos selecionar nossos utilitários. Tomando em um curinga, podemos alterar isso para algumas variáveis diferentes por padrão. E queremos que seja o retorno de um booleano novamente. Então vamos fazer uma rápida verificação booleana. Nós podemos copiar, eu vou conseguir velocidade aqui em baixo. Vamos checar isso em um momento. Podemos dividir isso, não estamos interessados desta vez em um dos eixos, essa velocidade. Então vamos dividir o pino da estrutura. Queremos saber se estamos nos movendo em um valor positivo ou negativo no eixo z. Então, para cima e para baixo, basicamente, e o que vamos fazer é dizer que se isso for menor ou igual a certos vôos. Então vamos explicar o ponto exato de dados que atingimos o ápice, então vamos passar isso para o nosso curinga. Vou mudar isso para um booleano e agora temos um cheque para descobrir se estamos ou não nos movendo verticalmente em um valor positivo ou negativo. Bom, porque sabemos que isto é um booleano, mudamos isto para verdadeiro ou falso. Então, se isso for verdade, então se formos menores que iguais a 0, isso é verdade. Então sabemos que esta vai ser a nossa animação de queda. E esse nome é terrivelmente chamado. Eu vou voltar e consertar esses nove porque isso é pior do que eu esperava. Então FB sublinhado tolo deve ser brincalhão e salto xadrez FB. Ok, então isso vai tornar muito mais fácil não encontrar em uma boa ordem pela frente. Então, bem, eu estava dizendo é que se isso é menor ou igual a 0, se isso estiver correto, então nós sabemos que estamos enganando. Se for falso, então sabemos que temos um valor positivo e ainda estamos saltando, mas ainda não atingimos um ápice plano. Então podemos pressionar Play. Vamos verificar se isto funciona. Então temos pulando e caindo. E isso parece perfeito. Então ele só nos dá esse tipo de ideal de que maneira os jogadores se movem. Isso nos dá um pouco mais desse feedback visual e preenche um pouco mais polido imediatamente que sabemos em que direção estamos nos movendo verticalmente. Então eu vou ligar isso de volta ao Jump, promover este para uma nova variável. E estou feliz em entregar esses nomes porque estamos na classe. Isso é meio óbvio o que isso vai ser. A convenção de nomenclatura aqui é mais para que ela se alinhe de uma maneira agradável e precisa no Navegador de Conteúdo e é fácil de encontrar como você viu opções da lista, então que é o movimento configurado. Esta é a abordagem rápida e suja para fazer o movimento continuar. Nós temos agora tipo de apenas para praticamente tudo que não temos fluxo de animação. Então pulando, boliche, se movendo. E eu faço isso. Terei então pronto para ir. Para acabar com isso. Queremos abordar este comentário de rotação aqui em baixo. Então eu vou mover estes para cima apenas um pouco, apenas para nos dar um pouco de espaço e mover isso para baixo um pouco mais. Para a rotação, o que queremos é nosso sprite basicamente faz algumas maneiras diferentes de fazer isso. Podemos inserir o tamanho de nossos sprites. Então enfrentando direitos seria positivo na escala x aqui e menos um iria essencialmente nos fazer virar. Agora, se temos algo que está ligado ao nosso personagem, se algo tem como um ponto de projétil ou um PowerApp que queríamos lançar, isso pode ficar confuso porque os power-ups ainda vai estar aqui. Eu também precisaria explicar isso. E também poderia mudar a escala das coisas que estão sendo divididas. E então, geralmente, eu vou evitar fazer esse tipo de abordagem mais simples que eu suponho que em vez disso nós queríamos fazer é que nós estamos realmente apenas indo para girá-los completamente ao redor. E podemos ver com isso que queremos fazer isso no eixo z, estamos afetando a visão de nossa rotação de caracteres. Então eu vou definir isso de volta para 0 por padrão apenas para que nós temos como uma idéia agora do que estamos mirando e o que podemos fazer. Podemos fazer isso impulsionado por qualquer um dos nossos comentários. Então já sabemos que temos. Mover eixo de direitos. E podemos verificar se isso é mais ou menos do que 0. Se for mais do que 0, pressionando a direita, porque menos do que pressionando a esquerda. A questão disso é que se mudarmos isso sempre que o jogador pressiona um botão, ele pode ficar um pouco nervoso se a planta estiver pressionando constantemente. Então, em vez disso, vou tirar isso da velocidade de novo. Então vamos mudar isso de bom grado para combinar onde o personagem está se movendo no mundo. Algo como qual é a velocidade vertical? Podemos dividir isso porque só estamos interessados na velocidade de movimento que temos aqui. Vou tirar isso e vamos usar uma comparação. Então podemos obter os carros alegóricos comparar e isso será executado. Podemos rodar esse nó reescrito para manter isso arrumado de qualquer maneira, então nós temos uma boa linha tinha, na verdade, eu vou fazer o mesmo aqui em cima. Olá, estou ocupando um pouco de espaço. Então eu estou apenas clicando duas vezes que se você não está familiarizado com esse clique duplo em um fio vai te dar uma noite de redirecionamento. E o que queremos fazer é basicamente podemos verificar se isso é mais do que um certo valor. Então, se for um valor positivo, estamos nos movendo, certo? Então queremos que isso encare a comida. Se for um valor negativo, então, ao mover para a esquerda. Então, se é mais do que 0 ou menor que 0, que é o nosso composto com valor aqui, então estamos nos movendo em uma direção positiva ou negativa esquerda. Então, podemos definir a rotação do personagem nem a maneira mais segura de fazer isso porque o controlador da planta está rastreando um monte de nossas atualizações de rotação. Nós queremos pegar, eu vou jogar um controlador. E queremos definir a rotação de controle disso. Então isso significa que nós, porque nós já temos uma classe que é uma espécie de supervisionar e assistir a configuração de rotação da classe, em vez de ter qualquer tipo de lógica afligente contra isso, nós podemos apenas usar a informação que é já sendo rastreado em nosso controle de jogador e atualize isso. Eles vão dividir isso e ligar isso aqui. Agora, lembre-se que queríamos afetar a UE, a rotação Zed, os padrões estão se movendo para direita está correta como está. Então vou deixar isso às 0. Podemos copiar isto aqui em baixo, e podemos definir isto para 180 se o personagem estiver se movendo em direção à esquerda. Então podemos testar isso de novo. Então deixe-me escrever que está acontecendo como esperávamos. E à esquerda. Isso está virando absolutamente tudo. E isso é um problema com a câmera, mas isso não significa que nossa lógica esteja funcionando. Então eu vou voltar para a primavera. Basicamente isso está acontecendo porque como eu acabei de mencionar tudo isso como sendo verificações e atualizado no controlador. Eu não vou incluir também algumas das câmeras e mola, hum, configuração. Então, basicamente, o que está acontecendo se você não tem certeza de qual é o momento enquanto pressionamos Esquerda, todo o ator está sendo virado. As câmeras ainda viradas na mesma direção. Mas quando eu estou olhando para isso por trás do mapa de mosaico em vez de na frente. Então, para impedir que isso aconteça, vamos agarrar nossa primavera. Nós mudaríamos isso para usar a rotação de controle. Então, novamente, este é outro benefício de usar esta playa e fro rotação porque algumas coisas dentro de nossa própria classe serão capazes de fazer referência a isso. Então, agora queremos que eu estava primavera sobre para herdar a mesma rotação é o controlador está rastreando. E isso significa que não precisamos nos preocupar em herdar nenhum dos argumentos. Você vai acabar na linha. Então, basicamente, o que isso significa é se nós temos essas dicas sempre o componente que isso é colocado está sendo movido ao redor, girá-lo ou qualquer coisa. Então, como um exemplo rápido, se trouxermos isso para o mundo e eu pressionarei a cabeça F8. Então, usando Mochila para o, podemos ver como a câmera está herdando a rotação se movermos isso ao redor. Então não precisamos necessariamente. E isso também seria se você estivesse rolando um personagem. Se você tocar uma animação em algum momento, você é claro que não vai querer essa primavera. Siga a mesma rotação que o personagem está tomando em todas essas direções diferentes em potencial. Nós sempre queremos que isso seja virado para frente. Então o que vamos fazer é empreender tudo isso e garantir que ele segue que o Puna controla a irritação. Então isso significa que se pressionarmos Play, você pode ver que podemos virar e mover para a esquerda e para a direita. E a câmera ainda está voltada para a frente porque está atualizando corretamente através do controle do player. Temos toda a nossa animação está indo. Nós desejaríamos. Então a fonte da coisa só para arrumar o código, é que eu vou entrar, me livrar desse comentário. E o que eu acho que podemos fazer é colocar essas nove funções. Então, isso está ocupando um pouco de espaço e podemos potencialmente economizar um pouco de desempenho, colocando estes em funções também. Então vamos fazer uso disso. O que eu faria era pegar todas essas notas. Assim, em relação ao movimento e a animação irá clicar com o botão direito do mouse em um desses nós, irá recolher isso para uma função. E vamos chamar essa atualização de flip book como isso é realmente o que isso é responsável. Ok, Então isso é o que vai permitir uma lógica flip livro vai e podemos dizer que não nos salvou um monte de espaço e o gráfico de eventos. Da mesma forma, podemos fazer o mesmo e mudamos isso para atualizar a irritação do jogo, colapsando isso em uma função e nomeando que uma cavitação atualização. E novamente, apenas um pouco de arrumação para que isso seja agradável e fácil de ler. Provavelmente não precisaremos redirecionar as notas, então vou me livrar delas. E com isso feito, podemos ver que economizamos uma boa quantidade de espaço aqui. E eu ia ser muito fácil saltar para trás através nosso código se quisermos atualizar a animação é que vamos fazer em um momento, sabemos que precisamos olhar na função flip book. E se quisermos mudar a forma como a rotação está funcionando, podemos saltar diretamente para nossa seção de rotação. 9. 09 - Melhorias de animação de jogadores: Como eu mencionei, as atualizações de animação flip book não foi feito da maneira mais ideal. Este é muito tipo de manual em uma situação de base por ação. Temos de continuar a esfriar esta mesma função. E mais uma vez, isso também não é o ideal. Então o que vamos fazer é tentar automatizar um pouco desse processo com algo chamado enum ou numerador. Se você não ouviu esse termo antes, basicamente isso significa que podemos criar um valor diferente que pode ser rastreado representado por valores inteiros. É muito fácil de percorrer e teremos um estado de enumeração para cada um dos diferentes estados em que o jogador pode estar. Isso significa que podemos armazenar um estado para o jogador com base no que está acontecendo e definir a animação do flip book apenas uma vez, com base no estado em que estamos atualmente. Novamente, como acontece com qualquer coisa, se você não viu isso antes, vai fazer muito mais sentido à medida que formos e criarmos isso agradável. Então vamos voltar para a foto do nosso projeto. Este é essencialmente um tipo de blueprint. Encontramos isso clicando com o botão direito do mouse, indo para blueprints e enumeração. Vou chamar este e, aplicar um movimento. Observe aqui que não há sublinhado. A convenção de nomenclatura para enums é E sem sublinhado aqui. E então o nome do que eles estão representando, você poderia chamá-lo de algo como estados do movimento E, estados , o que você quiser. Eu acho que esse tipo de leva a idéia através. E como eu disse, basicamente queríamos vir aqui e vamos criar um novo estado de enumeração. Então você pode ver que é bem Berlim vazio. Finalmente, temos que, podemos pressionar o botão Novo algumas vezes e obter alguns enumeradores diferentes. Então isso só vai automaticamente nomear a si mesmos. Estes são apenas uma espécie de representação nomeada e nós vamos simplesmente criar um para cada um dos diferentes estados. Então eu vou renomear, precisa de ocioso, correr, saltar para o máximo. Ok? Então você vai notar que estes não estão associados a nada. Eles não estão fornecendo um certo flip book. Não vamos atribuir nada a estes. Estes são puramente uma representação para nos permitir atualizar facilmente o estado atual e convenientemente rastreá-los à medida que passamos pela nossa lógica. Nós damos descrições se quisermos, mas isso não é necessário. E algo que geralmente é uma boa prática para fazer também é fornecer um tipo de estado nulo ou padrão. Então eu vou adicionar mais um estado e nomear este um padrão. Geralmente, se temos uma batida no estado, então isso significa que algo deu errado. Então, isso pode ser como uma verificação de que algo não foi atualizado corretamente. Por alguma razão, este seria um, por exemplo, todos os nossos movimentos verificações de feltro e nós não retornamos que estavam em qualquer estado em tudo. Então isso significa que estamos em algum lugar entre a corrida ociosa, salto e a cheia, o que é algo que não contabilizamos. Então vamos definir isso como padrão, e eu vou apenas clicar nesta seta para mover isso para cima, porque geralmente este será o primeiro, hum, estado que fornecemos. Então, se isso for feito, podemos fechar isso. Agora temos nossa nova variável, e é isso que vamos usar isso como um tipo de variável em nossa classe de jogadores. Então, se descermos para a opção de variáveis, vamos clicar neste nome, este estado de movimento. E para o tipo de variável, queremos usar o menu suspenso, encontrar nossos movimentos E ou movimento plano E. Então, a coisa que acabamos de criar um nome nós mesmos, e podemos ver agora, se arrastarmos isso, obtemos nosso pino variável. E se fizermos algo como usar nossa nota selecionada que vimos algumas vezes 9, podemos ver que podemos selecionar coisas entre padrão, ocioso, correr, saltar e cheio. Também podemos definir isso como uma variável. Então, de novo, idealmente o que você quer fazer. Nós vamos entrar. Bebi isto ao lado do evento. Comece a jogar, mova isso um pouco, e nós vamos apenas garantir que quando o jogo começar, vamos definir isso para o estado padrão é tipo define padrões de qualquer maneira. Mas novamente, se tivermos um teste qualquer coisa, digamos que queríamos apenas testar o salto, então podemos esquecer de redefinir isso em algum momento. Portanto, é bom definir isso como um padrão para começar. Então, quando estivermos atualizando nosso flip book, vamos manter o controle disso e atualizá-lo com base no que o jogador está fazendo. Então, de volta para dentro das atualizações do flip book, eu vou me livrar deste finito, nós podemos mover isso de lado. Vamos reutilizar um pouco disto à medida que passarmos. Mas os ratos para a morte serão eviscerados e removidos em apenas um momento do flip book atualização, podemos definir o estado do movimento novamente. Novamente, se você não está familiarizado com isso, se nós apenas definir uma variável aqui, ele vai criar as canetas de execução entre mordidas destes. E nós basicamente queremos que isso seja o retorno de um conjunto de cheques. Então, vamos estar muito familiarizados até o final disso com nossa nota selecionada, pois isso pode fornecer algum código automatizado realmente útil e fácil de ler de maneiras diferentes. Então o que queremos fazer é definir isso para ser o retorno de um conjunto de lógica usando nosso nó select. Agora, a primeira coisa que podemos verificar, novamente, temos muito disso pronto para ir. Podemos começar por verificar se a praça está no chão. Então é assim que uma lógica moída. Então eu estou indo para o Controle X e Controle V. Então nós fomos precisar disso novamente, então nós podemos apenas reutilizá-lo. Então isso é bom é que se estamos no chão, isso é falso, claro que isso significa que estamos ociosos. Então vamos definir isso como falso. Então vamos assumir que não estamos nos movendo. Isso deixa-nos com mais alguma lógica que precisamos aqui. Então isso vai ser, esta variável verdadeira será baseada no retorno da próxima nota de seleção que usamos. Então, usamos outra nota de seleção aqui. Podemos ver que está passando pelos estados do movimento para todos esses. Então estes pinos estão todos esperando os estados do movimento. E o que queremos fazer agora é verificar se estamos caindo ou não. Então, se este não tem sido o caso, que significa que vamos puxar através e verificar a próxima nota de seleção. Agora queremos saber se estamos enganando ou não. Então, novamente, podemos controlar X e Control V para que saibamos o que estamos reutilizando e contabilizando todos os movimentos Estados que já examinamos em sobrecarga. Mais uma vez, se isso for verdade, estamos enganando. Estamos prontos, sabemos que queremos saber em que direção estamos dobrando. Então não podemos definir isso para saltar ou cheio porque isso pode ser duas opções. Então isso nos permite saber que esta é outra opção de seleção aqui ou outro cenário onde a seleção e eu só vou trabalhar e que vai ser o retorno desse idiota. Lembre-se que foi a nossa verificação positiva ou negativa oferece o movimento vertical. Então, novamente, Controle X, Controle V. Então agora temos todos os nossos cheques. Então sabemos que se isso retornar, não precisaremos de nenhum seleto metade. Isso significa que se isso retorna verdadeiro, então estamos enganando porque estamos recebendo um, um valor negativo apenas aqui. Então vamos dizer completo para verdadeiro e saltar para falso. Isso explica o nosso movimento de salto. As diferentes opções que podem vir disso, isso nos deixa com apenas uma opção aqui. Então, para esta seleção, sabemos que isso não está se movendo. Então nós temos Ídolo, isso significa que isso estaria se movendo, mas no chão, que significa que esta vai ser a nossa lógica de execução. Então vamos para o estado de movimento de R1. E então isso é que eu estava caindo na lógica. Então vamos estar no estado de movimento de salto ou cheio. Assim, podemos deixar alguns comentários apenas para que possamos facilmente voltar a este assunto um pouco mais tarde. Então eu vou dizer que este aqui está verificando o movimento especificamente. Acho que essa seria a velocidade em que estamos nos movendo falhando que sabemos que não estamos no ar, então vamos verificar o movimento do solo. Então deixe uma metade comum disso. E este aqui, se não estivermos nos movendo no ar ou no chão e então vamos voltar ocioso. Então alguns comentários agradáveis voltam. Então você apenas nos lembra o que eles estão fazendo e a melhor maneira de pensar sobre isso, se isso é novamente completamente novo para você, é que eles estão meio que enganando. Então, enquanto isso está sendo atualizado, o primeiro e isso vai fazer, vai selecionar o que os movimentos gostam de definir isso para. Então, se a velocidade não for igual a 0, então não vamos apenas retornar cabeça falsa, vamos verificar a próxima nota selecionada porque isso significaria que é verdade. Então vamos verificar essa lógica. Novamente. Se não for esse o caso, se for verdade, então vamos voltar e ver quais podem ser os nossos cheques finais e a ária. E isso vai nos dar algum tipo de movimento. Então isso já está funcionando se tivéssemos o estágio final, que vai ser avaliar nosso flip book, e espero que este seja o bit que tipo de solidifica por que isso pode ser tão útil. Então podemos desengatar tudo isso selecionado, apenas um desses ajustado para virar notas de livro aqui. Então Control X, Control V, idealmente capaz de crescer o sprite com isso também. Então vamos ligar este sprite a isto. Vamos ligar isto aqui e vamos usar esse nó útil de seleção mais uma vez. Então o que vamos fazer é selecionar o flip book que queremos exibir com base no nosso enum que temos traçado. Então ele vai puxar a partir daqui novamente e selecionar. Muito simplesmente. Isso vai ser realmente, novamente, muito interessante, eu acho que para aqueles de vocês que podem não ter visto isso antes, mas nós podemos controlar arrastar os estados de movimento para o índice. Então vamos obter o estado, e veremos que isso irá ler automaticamente quantos estados diferentes isso tem e fornecer um nó selecionado para cada um desses estados. Então isso significa que podemos viver definir este flip book apenas uma vez baseado no que está sendo devolvido aqui. Este vai ser um bom sinal de dizer novamente, então vamos deixar o padrão vazio, propositadamente deixando isso vazio. Então novamente, se alguma vez virmos que o nosso sprite não está tocando nada que sabemos que algo deu errado e que não atualizamos o estado. Caso contrário, podemos pegar todos esses valores que começamos aqui. Nós vamos ligar o ocioso em ocioso, o salto em Jump, correr em r1 e intervalo completo praticamente como você esperaria. E depois certifica-te de que os podemos ver. E isso é realmente a nossa máquina de estado tipo de configuração e pronto para ir. Você tinha que verificar o que fazer com a Animação do Player. Significa que não precisamos de toda essa lógica de ramificação. Podemos nos livrar de todas essas noites. Vamos chamar a função set flip book apenas uma vez e passar o resultado do que quer que aconteça com nossos estados de movimento e como isso é rastreado. Então nós também podemos ver isso em um pouco como eu vou adicionar uma sequência aqui, e você vai ver que isso está atualizando constantemente para que possamos imprimir string, apenas que nós podemos tipo de visualizar também. Oi, isso está operando. Nós podemos converter o estado enum para uma string e isso, quando nós tocamos isso, manter o controle disso para nós. Então não estamos passando nada, o que significa que estamos em estado ocioso. Se eu pular, então estamos pulando e depois enganando, pulando, dobrando e correndo. Então tudo isso está sendo rastreado com base exatamente em movimentos de destaque. Estado está sendo atualizado e baseado em praticamente as mesmas verificações que tínhamos anteriormente. Mas ao invés de ter verificações de ramificação indo em todos os lugares, agora temos apenas esse tipo de fluxo lógico de três estados completos com base no que está sendo selecionado e o cálculo sendo abstinente para selecionar nó. Então tudo isso está sendo finalizado definindo o flip book com base no estado atual do movimento. Mais uma vez, muito fácil de ler, muito fácil de gerenciar. E isso também significa que se quisermos adicionar algo mais, se adicionarmos coisas como um salto duplo ou um slide de lobo, tudo o que precisamos fazer, não precisamos adicionar declarações de ramificação extra. Normalmente, você precisaria interromper outro cheque em outro lugar. Pronta? Quebrar o tipo de fluxo da lógica que tínhamos sobrecarregando. Tudo o que precisamos fazer é retornar aos nossos movimentos. Eles acrescentariam duas coisas novas. Eu diria whoo, slide e salto duplo. Isso adicionaria imediatamente dois novos livros aqui. E então nós podemos apenas executar alguma outra lógica fora daqui. Então, novamente, se nós estamos no ar e nós também vamos deslizar, então nós teríamos outro seleto nós verificar para isso e iria retornar ou saltar cheio, quase como ou se nós estamos saltando e é a segunda vez que nós pressionamos com escrito outra pequena nota aqui que nós apenas momentaneamente em salto duplo, mudar esse estado de movimento. E novamente, isso será atualizado praticamente automaticamente para nós. E não havia um sistema automatizado real para isso. Mas eu acho que isso é meio que chegar a esse estado onde parece meio reutilizável e flexível como podemos fazê-lo para este tipo de projeto. Então, antes de encerrar isso, certifique-se de que vamos voltar. Não queremos correr constantemente. Se você já teve outra sequência, outra execução Ben da sequência, podemos clicar com o botão direito do mouse sobre isso e remover o pino de execução sete, Eu apenas fazendo o flip book e a atualização de rotação. E há sempre certificar-se de que compilamos e salvamos isso. Não precisaremos mais do movimento do jogador para estar aberto. E eu acho que isso nos coloca em um estado muito bom onde o jogador é praticamente lanterna. Temos eles fazendo tudo o que queremos da maneira mais robusta que eu posso pensar em fazê-lo para um pequeno projeto como este. Acho que o que podemos fazer agora é avançar para a interação com outras coisas para a casa, pickups e coisas para ter qualquer uso ou os inimigos para realmente fornecer qualquer tipo de perigo ou perigo para nós. Vamos precisar começar a implementar um recurso de saúde. 10. 10 - Health de jogadores: Então, com o movimento praticamente totalmente implementado no palco, eu acho que é um bom momento para começar a olhar para como podemos interagir com outras coisas no jogo que planejamos. Então os inimigos, os captadores, eles meio que nos preparam para ter esse conceito de saúde e dano. Então podemos começar adicionando um sistema de saúde ao nosso jogador, que é o que vamos fazer agora. E então vamos analisar como podemos visualizar isso e fazer com que isso se atualize com base no que está sendo interagido no mundo. Então vamos começar com a saúde é conceito muito simples. Vamos rastrear isso em carros alegóricos só porque eu sei que será mais fácil para nós implementar que com o sistema de widgets um pouco mais tarde, poderíamos representar isso como um valor inteiro, especialmente se você tiver um sistema de saúde onde é apenas como corações ou algo assim, você estaria tomando um caminho quente em um momento que seria perfeito como um int. Mas, por enquanto, vou criar duas novas variáveis do tipo flutuante, uma chamada de saúde padrão e outra chamada Saúde. Em seguida, podemos compilar isso para que tenhamos acesso a essas duas novas variáveis. E o que queremos fazer é definir a saúde padrão para um bom valor redondo de 100. Então vamos começar com 100 pontos de vida, e a própria saúde vai deixar 0 para começar. Agora no roteiro de construção, você poderia fazer é no evento começar a jogar também. Mas geralmente coisas como esta, as pessoas gostam de colocar no script de construção para que saibamos , mesmo antes de começarmos a jogar, vamos redefinir nossa saúde atual para o máximo de saúde que podemos ter ou o padrão saúde. Então nós vamos obter o padrão por arrastar controle e definir a saúde arrastando e simplesmente definir Saúde como saúde padrão. Agora que sabemos de novo, podemos fazer alguns testes se quisermos desengatar isso. Mas no jogo principal, no jogo completo, se onde quer que esteja jogando com as coisas aqui e queríamos testar rapidamente algo entre os widgets e definir isso para um valor diferente. Sabemos que quando paramos de jogar ou quando isso é atualizado e o construtor que estaremos definindo nosso principal valor de saúde de volta ao máximo que queremos que tenha. Para demonstrar isso novamente, se pressionarmos o Begin Play, vamos começar a depurar muito, eu acho que com strings de impressão, apenas para ter certeza de que as coisas estão fazendo sentido à medida que passamos. Então podemos apenas dizer que nossa saúde será impressa na tela e estamos começando com a saúde 100. Então esse é o meu filho simples, essa é a nossa atualização para ter saúde. Agora temos esse conceito. Claro que a seguir queremos ter o conceito de danos. Portanto, o dano é muito simples, e na verdade, estaremos usando um evento que vem pré-construído com qualquer classe de ator no jogo. E essa é uma função chamada qualquer dano. Então temos o evento qualquer dano, podemos ver que o alvo é um ator. E a melhor coisa sobre isso é que podemos meio que ignorar um pouco de elenco e saber exatamente com o que estamos nos comunicando quando se trata de sistemas de danos. Podemos realmente apenas dizer se algo tem uma função sobre ele que está esperando para ter danos manipulados, arrefecer A qualquer função de dano, passando algumas informações, geralmente as quantidades de dano e deixar esse treino classe e um manipular, essa lógica que ele está destinado a ser controlando. É um tipo de abordagem orientada a objetos para programação. Ele dissocia muitas referências, pode manter seus projetos na IDEO e mais fácil de manter e também economiza, em alguns casos no desempenho também. Então, o que vamos fazer sempre que uma quantidade de dano for passada, vamos definir a casa atual para um novo valor. Então vamos avaliar isso e queremos que seja a saúde atual. Então nós vamos obter a saúde atual menos um flutuador, que será o dano que está sendo passado. Então, se temos um 100 de saúde 20 é passado dentro. Vamos passar isso para o nosso valor de saúde aqui, e teríamos 80 de saúde. Agora, novamente, podemos fazer alguma depuração aqui. É sempre bom depurar as coisas à medida que passamos. Então eu vou criar um temporário e coloca, geralmente eu não criaria e coloca no gráfico de eventos ou mesmo fora das configurações do projeto. Mas como isso vai ser temporário, vou me lembrar de remover isso mais tarde. E digamos que vamos pressionar H. Então vamos encontrar a chave de ligação para H, H para fora. E sempre que pressionarmos isso, vamos chamar a dobra de qualquer dano ou aplicar dano. E a razão pela qual isso é chamado de dano se você não está familiarizado, é que temos tipos diferentes. Então podemos ligar isso ao ponto de evento dano, dano radial. Então, se usarmos qualquer dano, significa que independentemente do tipo de dano que está sendo passado para nós, isso será disparado e tirará a saúde. Então nós vamos apenas chamar a função de dano de aplicação padrão, o ator que queremos danificar. É um pouco estranho, mas isso vai ser o nosso eu. Então lembre-se que esta é apenas uma função de depuração aqui para que possamos verificar o nosso sistema de saúde está funcionando e os danos que queremos passar, digamos que 20 unidades de dano que mencionei há pouco. E se quiséssemos, se quiséssemos verificar coisas diferentes, como quem o dano foi causado ou instigado por também. Isso seria para coisas como se você tivesse diferentes compensações, quatro tipos de dano. Dano balístico versus dano explosivo e coisas assim. Você pode descobrir qual é a inicial. Então não era se você deveria aplicar a quantidade total de dano ou como uma versão modificada com base nisso. vez, vamos tentar um tipo muito simples de danos. Sim, 20 unidades de dano. E o que queremos fazer é sempre que isso for resfriado, eu vou fazer outra corda de impressão. E vamos imprimir o valor da nossa saúde atual. E isso vai ter alguns problemas que eu vou corrigir em um momento e você vai ver o que eles são enquanto estamos depurando. Então nós comprimimos H e podemos ver que o dano está sendo resfriado para 0. Então o plano não deveria estar morto? Se pressionarmos odiá-lo novamente mais algumas vezes, entraremos em valores negativos. Então o que queríamos fazer para impedir que qualquer estranheza como essa acontecesse onde poderíamos potencialmente matar o jogador depois que eles já tivessem sido mortos, íamos agrupar isso a um certo valor. Então vamos puxar daqui, vamos prender isso a um vôo, vamos garantir que o mínimo é 0. Portanto, agora não podemos ir além desse limite 0. E o máximo que eu vou definir para ser saúde padrão. Então, se nós temos um usado isso de uma maneira em que nós, uma coisa muito comum que você vai ver é que os sistemas de saúde podem basicamente estar passando em danos negativos. Então você pode passar menos 20 danos. Obviamente, um menos, menos e menos será um positivo, então você começa a adicionar em que forma de saúde para o seu jogador. Provavelmente não entraremos em nada tão confuso nesta lista de reprodução. Vamos apenas adicionar uma função AddHealth muito simples. Há problemas que vêm com tentar usar o sistema de dano como um sistema de cura também. Parte da lógica, especialmente se você começar a adicionar modificadores e tentar mudar as coisas como e ficar um pouco confuso. Mas para explicar isso, poderíamos ter certeza de que não permitiríamos que nada passasse um valor para Satis, essencialmente trapaceando, suponho que passou do nosso máximo no vale da saúde padrão. E o passo final que queremos acrescentar no conceito de morrer de verdade. Então, quando chegarmos a esse valor de vida 0, vamos verificar algumas coisas se os jogadores morreram e criar uma nova função pronta para isso. Então vamos criar um novo valor booleano aqui, e eu vou chamar este um B está morto. Então, pode ser útil para rastrear os estados dos jogadores parece um pouco óbvio, mas queremos novamente evitar coisas como se a planta é morta e, em seguida, pega, como podemos permitir que eles revivam? E se sim, e os danos novamente, eles podem morrer uma segunda vez? Então, para evitar algo estranho como isso, vai certificar-se de que este padrão é obviamente falso. Não queremos que comecem a morrer, mas depois... Chegamos a um certo valor, então vamos querer definir isso para ser verdade. Então o que vamos fazer é fazer uma verificação de filiais aqui. E vamos dizer que se a saúde atual, em vez de puxar deste alfinete, você poderia, se você quisesse. Eu gosto muito de ter a variável extra, como podemos controlar arrastar isso no meu mais caro ou qualquer coisa, e então podemos fazer uma comparação. Então, se isso é menor ou igual a, e novamente, algumas pessoas vão achar este programa um pouco estranho. Isto é que você quer, você pode dizer menor ou igual a se você quiser, porque nós temos este valor aglomerado temos que nunca deve ficar abaixo de 0. Mas novamente, isso pode mudar a qualquer momento e outra programação pode vir, descobrir que eles não querem que isso seja aglomerado. Mas é claro que você ainda provavelmente quer que algo menos que 0 esteja morto. Então, contabilizando essas coisas, eu só vou dizer menos ou igual a 0 para a saúde vai ser classificada como morta. Então isso não é um descuido de programação. É algo que eu gosto de fazer porque você nunca sabe como o projeto vai ser no futuro. Como eu disse, você poderia trabalhar com outra pessoa. Eles podem entrar e decidir que este grupo é irrelevante, não útil, ou eles querem usar o grampo de uma maneira diferente, caso em que você pode começar a entrar em números negativos e ainda não ter seu xadrez morrer. Então, se isso é verdade, então vamos dizer que este é um jogador morto. E novamente, apenas para essa segurança adicional, provavelmente não é algo que precisamos em um projeto tão simples, mas eu vou dizer que só podemos fazer isso se a saúde for menor ou igual a 0. E com ela num cheque booleano. E ainda não estamos mortos. Então podemos dizer, é que não é igual a verdade. E uma maneira fácil de dizer isso, desculpe, é apenas dizer que não é verdade, então NÃO booleano. Então, se ainda não estamos mortos e a saúde é menor ou igual a 0. Então, novamente, este é o tipo de cheques que você quer fazer apenas para ter certeza de que você pode ter coisas estranhas. E eu vi isso em alguns jogos onde eles não fizeram esses tipos de verificações. Do jeito que estou planejando fazer isso, acho que teremos um Mario ou animação de morte sônica. Então, quando você morrer, você será lançado no ar. Você terá a entrada removida do player. E você tipo de animar a tela do que eu vi em alguns jogos porque eles não fizeram uma verificação simples como esta, outro projétil vai atingi-los. Eu estou supondo que eles também não fizeram desigual para verificar ou verificação de aglomeração. E o que acontece é que a automação da morte continua tocando e essencialmente continua reentrando no ciclo da morte até que eles parem de ser atingidos por algo, mesmo que tecnicamente já tenham morrido uma vez. Então pode parecer um pouco exagerado, mas estes são apenas um pouco agradável, simples verificações no anúncio que a segurança. Eles não vão ter um jogo de aparência bogey onde você pode morrer várias vezes em uma única vida e isso é a pior coisa também. Especialmente se você tem um jogo baseado na vida, então isso pode começar a tirar a maioria das pessoas vidas, mesmo que você não tenha sequer respondido a esse estágio. Então, se isso é falso, não precisamos fazer nada como ferramenta. Claro, se isso for falso, nós ainda vamos estar correndo em torno do nível de fazer bem. Você poderia, se quisesse, aqui pode ser onde, se isso for falso, você sofreu algum dano. Você pode querer reproduzir um efeito de retrocesso ou uma animação piscando. Então, em algum tipo de tempo de invencibilidade, esse tipo de coisa que pode ser feita aqui. O que queremos considerar no entanto, se isso for verdade, vamos jogar uma nova função. Então vamos adicionar uma nova função aqui e vamos apenas chamar este jogador morreu. E agora, no momento em que não temos nada para colocar no cabelo, então eu vou adicionar outra corda de impressão. Isso será como eu sou tópico um pouco mais tarde. Mas novamente, só para que possamos testar isso vai estar funcionando. Faremos a função de iodeto. Esfrie isso e vamos tocar botões, imprimir cordas. Então, voltando novamente, comprima h até que a saúde tenha descido e possamos ver que outro jogador morreu, e isso foi rastreado corretamente. Então sabemos que tudo isso está funcionando como queríamos. E o importante novamente, para ter certeza de que aqueles que eu tenho valido a pena, podemos continuar pressionando H e não estamos recebendo várias chamadas de função de iodeto. Sabemos que não é seguro licenciado. Não somos capazes de continuar entrando em algum tipo de morte infinita. Então isso é tão complexo quanto nosso sistema de saúde precisa ser. Podemos voltar e fazer algumas melhorias mais tarde. Eu acho que a próxima coisa vai ser adicionar algum tipo de visualização para o sistema de saúde através do uso de widgets. Então isso é provavelmente tudo o que precisamos fazer ao meio. E agora podemos fechar a classe de jogadores. Eu novamente, certifique-se de compilar e salvar algum ponto. Parece que tenho um mapa de peças que sobrou para justiça. Eu só vou apagar o antigo e ter certeza de que temos é o correto aqui. Isso é perfeito. E isso significa que quando eu bom para ir em frente e criar nossos widgets para a saúde do jogador. 11. 11 - Widget de saúde para jogadores: Para começar com este processo, vamos apenas criar uma nova pasta, que eu vou legal UI estará colocando isso na base da pasta Blueprints. E, em seguida, dentro daqui seria apenas criar uma nova classe widget. Encontre-os, vamos clicar com o botão direito do mouse. Vamos para as opções de interface do usuário, então não sob Blueprints desta vez, eu vou para a opção Widget Blueprint aqui, a convenção de nomenclatura para essas classes será sublinhado WPP. Então Widget Blueprint sublinhado, e, em seguida, o nome da classe, Eu só vou chamar este que a saúde jogador. Dentro da turma. Se você não está familiarizado, vamos fazer uma breve visão geral aqui. Mas o que temos aqui no meio é uma tela. Então isso é como o espaço de trabalho no qual podemos adicionar nossos diferentes elementos para formar a interface. Neste caso, isso vai ser apenas um robô de saúde. Mas isso também pode inventar coisas como menus. Poderíamos adicionar botões, texto e muitas outras coisas. Então esta tela aqui, e podemos ver que ela é representada no lado esquerdo. Temos a nossa tela. E se arrastássemos as coisas para a tela, veremos que isso aparece dentro deste espaço de tela aqui. Desenhando o problema da saúde. O que vamos precisar é de uma barra de progresso. Então, isso é praticamente configurado perfeitamente. Temos controle sobre preencher isso. Então podemos preencher isto com um valor que neste caso vai representar a nossa saúde. Eu só vou arrastar isso para fazer isso um pouco mais longo. E eu acho que deve ser um tamanho bastante decente. Agora, a maneira que isso funciona é que temos neste valor percentual apenas aqui no lado direito quando temos este selecionado. E basicamente, enquanto arrastamos isso para cima e para baixo, temos controle sobre como isso é completo. Agora podemos ver que este é um valor normalizado entre 01. Então vamos precisar fazer um cálculo rápido um pouco mais tarde para levar em conta nosso valor de saúde e fazer isso exibir entre um valor de 01 com base na quantidade de vida que o jogador ainda tem. Agora outra coisa é se você já viu qualquer um dos meus outros conteúdos ou tutoriais, você pode estar familiarizado com o meu desdém para este tipo de votação gradiente de textura guarda-chuva aqui. Então o mais importante e a primeira coisa que vamos fazer é ir para os pais, vamos para a opção de estilo aqui. E queremos mudar a imagem de fundo e a imagem federal. Então nós não temos essa coisa de gradiente estranho acontecendo no topo aqui, e ele vai zoom nele também. Esta é uma boa maneira de pular dica e descobrir como atualizar e mudar o estilo de sua barra de saúde. Se você tivesse algo personalizado que você quisesse trazer para o motor para usá-la. Então eu não tenho nada feito para este. Eu geralmente sou fazer com estes apenas para fazê-los parecer um pouco mais moderno e ir para essa abordagem mínima é que nós vamos cair para baixo o festival de fundo. Idealmente, teríamos uma textura que trouxemos, especialmente para algo assim e eu meio que textura de pixel, seria muito bom já que não temos isso? E, claro, usar as imagens que temos não vai realmente molhar a tampa. O que eu vou fazer em vez disso é ir para estas opções de visualização aqui em baixo. Vou alterná-los para mostrar o conteúdo do motor. Vou procurar um quadrado branco. E podemos ver aqui, temos a textura quadrada branca e isso vai ficar perfeitamente bem. Realmente não importa o quão grande ele é porque isso é tudo dimensionado com base nessas opções apenas aqui, nós podemos vê-los. Eu só tenho uma textura branca lisa no fundo que ainda deixa esta cunha. Então uma coisa de gradiente para o preenchimento. Então, novamente, no estilo, eu vou apenas copiar isso, podemos clicar com o botão direito do mouse. Copie isto e, em seguida, cole isto na imagem federal aqui. E podemos ver que isso está sendo substituído também. Neste caso, por qualquer razão que não tenha funcionado corretamente. Então, se isso acontecer, então podemos apenas selecionar um dos outros e talvez selecionar de volta apenas para que estejamos usando a mesma textura em ambos. Então nós temos que puxar menos para dentro do conteúdo do motor dessa maneira. Então vamos usar os mesmos quadrados brancos extra em ambos os slots. Então nós podemos muito bem, isso parece imediatamente muito melhor do que ele fez e ainda funciona e exatamente da mesma maneira porque esse dimensionamento está acontecendo automatizado com base nas imagens que estão sendo transmitidas. Então, ainda temos a opção completa para alterar essa barra de porcentagem e que irá falhar ou esgotar completamente nossa saúde até agora, uma vez que você tenha dado esse passo, a próxima coisa que queremos fazer é ter certeza de que vamos voltar para o modo de exibição Opções e, em seguida, Mostrar conteúdo do mecanismo. Caso contrário, teremos muito mais informações nesta barra de pesquisa. Então nós queremos, geralmente, eu acho que coisas como a saúde têm uma cor bastante uniforme, que eu acho que a maioria das pessoas concordaria tão verde quanto eu vou mudar isso de azul e mudar isso para algum tipo de tom verde para amarelo aqui. E mais uma vez, acho que isso vai ser muito bom para o nosso sistema de saúde. Agora, outra coisa que você pode mudar se você nunca usou a barra de progresso antes, você também pode mudar. Isso vai atualizar a cor da saúde à medida que mudamos essa porcentagem mais leve. Se você quiser também mudar a cor de fundo, podemos dar ao nosso estilo a cor também. Então vamos mudar a tonalidade do fundo e podemos fazer isso algo mais escuro ou mais claro ou algo completamente diferente funcionar dependendo de como você queria que isso parecesse. E eu vou apenas para um fundo cinza simples e agradável. Deslize isto para um cinza ligeiramente mais escuro aqui. Talvez não totalmente preto, mas um cinza escuro com um bom bot verde brilhante saúde deve ficar muito bom. Então, para a porcentagem, podemos deixar isso porque vamos fazer tudo isso em código. Mas isso nos dá uma boa maneira de visualizar o que está acontecendo antes de começarmos o código. Agora o que eu queria fazer no momento, é claro, se formos em frente com isso, não teremos isso sendo resfriado. Não vamos ver isso no jogo. Então, antes de adicionarmos qualquer lógica aqui, e vamos voltar para a nossa classe de jogadores. E dentro da classe de jogadores, podemos começar a criar nosso orçamento de saúde e certificar-nos de que exibimos isso. Então é bem simples. Se você não trabalhou com widgets antes, o que queremos fazer é no Begin Play, queremos criar um widget. Então nós vamos apenas chamar a função criar widget. E a partir disso queremos passar o widget para criar, que vai ser a nossa saúde do jogador sublinhado WPP. E muitas pessoas podem pensar que isso estaria funcionando agora se você pressionar Play apenas para verificar se não está. E isso é porque criamos o objeto, mas não fizemos nada com ele. Então isso existe, mas não dissemos a ele para exibir ou como se comportar. Então o que queremos fazer é a partir do valor de retorno agora que temos isso, vamos promover isso para um festival variável porque vamos usar isso um pouco mais tarde. Vamos querer esfriar várias funções e atualizar valores em nosso sistema orçamentário mais tarde. Então vai ser útil ter uma referência a isso. Então vamos chamar isso de widgets de saúde, árbitro. Então temos uma referência e I2, o orçamento de saúde sempre que precisarmos fazer algo com isso de novo. E, em seguida, a partir daqui, estaremos chamando uma função específica do widget, que é Adicionar ao Viewport. Então nós temos a opção viewport e que simplesmente leva este objeto e vamos dizer ao sistema para exibi-lo na tela atual do player. Então isso significa que agora para vir, podemos ver que temos o nosso widget. Claro, algo aconteceu um pouco estranho lá. Mas podemos ver no canto superior esquerdo que temos nossa saúde, que está mostrando como esperado. Parece que em algum lugar ao longo da linha, a função de atualização flip book quebrou um pouco com a animação de salto. Então parece que eu não tenho nada preenchido no lote de saltos, apenas no caso de você ter o mesmo problema. Vou manter isto no vídeo. Isso deveria ter sido designado. Oh, sim, eu acho que isso estava funcionando antes, mas isso seria apenas cheques duplos. Agora podemos saltar antes dos andrógenos e tudo isso está perfeitamente bem, caso você esteja tendo o mesmo problema lá. A principal coisa foi o foco da saúde Bahasa, mas não ter a parte de saúde exibindo. Claro que podemos sofrer danos. Ainda temos nossa função de esfriar nossos danos, nosso tipo de depuração. Então, podemos ver que eu pressionei H várias vezes que temos na depuração para que o jogador morreu. Mas é claro que isso não está afundando com nossos widgets de saúde. Esse será o próximo passo. Então, de volta à classe widget, nós só precisamos adicionar alguma funcionalidade para registrar quando um valor de saúde foi atualizado. E eu queria mostrar a vocês antes de tudo, a maneira como eu ainda vejo muitas pessoas fazendo isso em tais tutoriais on-line. E é um hábito do qual eu meio que quero ajudar as pessoas a sair e é meio que má prática. E eu vou te mostrar o porquê enquanto passamos. Então vamos fazer o festival da maneira ruim só para que, você sabe, para evitar isso nas maneiras em torno disso, se você disser isso no futuro, e o que você pode ver é que as pessoas vão descer para o valor percentual aqui e nós temos um e combinamos isso com uma nova função. Então, se pressionarmos esse botão, isso está apenas nos levando do design alguns aqui para o gráfico se você. Então, o design dos anos em que adicionamos toda a nossa visualização, todos os nossos elementos, e desenvolvemos esse widget. E então o gráfico é como nosso gráfico de eventos essencialmente em qualquer outro projeto. Então, este é o lugar onde colocamos toda a nossa lógica e basicamente adicionando que vinculação é apenas criar automaticamente uma função para vincular o valor de retorno dessa função aos nossos elementos widgets. Então, neste caso, é um valor, valor flutuante porque este é vincular ao valor percentual reprovado. Agora, a razão pela qual isso é ruim, o que você vai encontrar as pessoas fazem é que eles vão pegar o poema do jogador. Então, usamos a funcionalidade padrão. E vamos dizer que eles vão apenas fazer algo simples como casting para ter certeza de que é a base de jogadores. Sabemos que dentro da base de jogadores temos nossos valores de saúde. Assim, eles podem então chegar ao valor Saúde. E então eles vão ligar isso, potencialmente ligar isso. Agora isso não vai funcionar porque aquele cálculo que eu mencionei que precisamos, para normalizar esse valor. Mas, de novo, não vamos ficar com isto. Isto é muito mau. Este é apenas um exemplo de como não fazê-lo para que você saiba o que evitar e então veremos o porquê. Então o que isso está fazendo agora estamos enrolando isso para a classe preta com casting e então verificando qual é o valor atual de saúde. Então, se pressionarmos Play, podemos ver que está atualizando agora. E eu vou precisar pressionar muito isso e então a Saúde vai descer para 0. Então sabemos que pelo menos temos a atualização. Mas vamos ver por que isso não é uma boa idéia. Então o que realmente está acontecendo aqui é que isso está funcionando um pouco como um evento de ticks. Então, se jogarmos fora cadeia de impressão aqui, e vamos apenas imprimir elemento não corresponde ao que isso está dizendo. E então pressione play. Mesmo quando a saúde não está sendo atualizada, mesmo quando estamos completamente ociosos e não fazendo nada uma ferramenta. Temos nossa funcionalidade vinculada aqui, apenas verificando constantemente em execução. E neste caso, não apenas correndo constantemente, mas constantemente lançando para outra classe, constantemente atualizando esse tipo de localização de memória e todas as variáveis que podem estar dentro dessa classe de ser passadas para ele de apenas para verificar novamente se o valor de integridade não foi alterado. Então esse era realmente o ponto inteiro desse lado tangente aqui é sempre que você vê as pessoas se você está caindo fora do conteúdo e eles recomendam usar uma ligação, tipo pular essa parte, Brady, nenhuma prática muito boa. E o que queremos fazer é desvincular isso, então vamos remover essa ligação. Realmente nunca use este botão. Eu acho que foi um legado tipo de transporte quatro. Testes que nunca foram removidos como realmente não foram feitos para fazer parte do pipeline de desenvolvimento. E enquanto elenco e eventos carrapatos não são completamente sacrilégio, eles podem ser usados em jogos perfeitamente bem se você imaginar que você tinha um widget inteiro e eu só quero botão Saúde Bot e amarrar que Amanda, todos vocês jogam um texto. Os ícones e tudo em torno de um tipo mais totalmente lanterna de widget. Stage, não apenas fazendo essa ligação e casting uma vez que você poderia estar fazendo isso cinco, 10, 15 vezes por widget apenas para verificar se nada aconteceu. Espero que isso faça sentido porque não vamos fazer isso. Então o que precisamos fazer para arrumar isso, vamos apenas excluir completamente isso, vamos nos livrar dessa função percentual. Podemos voltar também, e vamos mudar o nome do nosso bot de saúde da barra de progresso para jogar um bot de saúde. Só porque quando voltamos para a seção do gráfico que não mostra o nome e uma forma mais lógica sabemos exatamente o que estamos olhando. Então nós queremos outro funcionalmente, o que nós vamos fazer é colocar isso em uma função. Vamos nomear esta atualização de saúde. E isso é um pouco mais de uma abordagem manual que leva um pouco mais para fazer isso dessa maneira. Mas novamente, estamos economizando esse desempenho e nós já meio em total controle dentro do oval quando isso é resfriado. Então, em vez disso, o que vamos fazer é arrastar na saúde do jogador por referência os ativos que estão sendo usados no designer. Vamos arrancar dele. Vou esfriar com essa função de porcentagem definida, certo? Então a porcentagem, lembre-se é a coisa que podemos arrastar para cima e para baixo normalizada entre 01 e nós só queremos ligar isso. Então, sempre que essa função é resfriada, o que só deve ser feito quando a saúde está realmente mudando. Então, quando estamos recebendo um bônus de saúde ou quando estamos sofrendo danos, vamos então passar este pino para a função de saúde e podemos chamar isso através. Agora novamente, lembre-se que isso está esperando um número entre 01 e nossa saúde está atualmente entre 0100. Então, como vimos anteriormente, o que isso faz é no momento se continuarmos resfriando, isso só vai mudar quando for mais de um ou menos de um, que é no nosso caso vai ser quando atingir 0. Então não vamos ver o, o Health Bot se movendo para cima e para baixo. Em vez disso, o que queremos fazer para normalizar o valor é bastante simples. Nós vamos arrastar isso é porque nós não temos um valor de vôo chamado em porcentagem e nós vamos apenas mudar este para ser chamado de Saúde. E então simplesmente queremos outro valor, que é a saúde padrão ou máxima. Então eu vou adicionar outro valor aqui e mudar isso para um flutuador e nomear este um máximo de saúde. Basicamente, um valor normalizado será apenas nosso valor atual dividido pelo valor máximo. Então vamos tirar isso daqui. E vamos dividir nossa saúde pelo nosso máximo de saúde e plug-in esse valor normalizado. Então, isso sempre vai retornar um valor entre 01. Se isso não faz sentido, basta jogar uma string de impressão no final disso e fazer alguns testes e ver o que acontece quando passamos e chamar essa função em um momento. Mas, basicamente, se tivermos uma saúde de 50 e dividirmos isso por 100, é claro que teremos 0,5. Então é assim que estamos obtendo esse valor de 0 para um quando nunca vamos passar desse intervalo. Então a maneira que usamos isso, então esta é realmente a função de saúde pronta para ir para nós. Lembre-se que temos essa referência sobre a classe dos jogadores, então voltamos aqui. E o que queremos fazer é quando começarmos a jogar, vamos criar uma função que vamos chamar no Begin Play Festival chamado update health. Ok, e dentro da atualização de saúde, vamos ter nossa referência de widget. Vamos chamar essa função aqui, que foi novamente atualizar a saúde. E só queremos passar o que é a nossa saúde atual. E então lembre-se que vai ser dividido pelo máximo de saúde, que neste caso é a nossa saúde padrão. Porque lembre-se no script de construção com a definição da integridade como padrão Saúde. E também estamos no sistema de saúde, estamos nos certificando de que nunca ultrapassamos o máximo nunca será mais do que a saúde padrão. Então é por isso que nos configuramos assim. E então nós vamos meio que chegar juntos nove. E a razão pela qual eu estou fazendo isso no Begin Play é lembrar a maneira que nós podemos tipo de brincar com o widget aqui. Então, como eu disse, é muito bom que possamos entrar, verificar os diferentes estilos se quisermos verificar a cor do fundo da nossa barra de saúde, podemos sempre brincar com essa porcentagem por aqui. Podemos então entrar e jogar com cores diferentes fora algumas imagens diferentes. E podemos esquecer de redefinir isso para total ou mínimo. Então o que queremos fazer em nossa classe de jogadores é ter certeza de que temos controle total sobre isso. Então eu só vou começar a jogar uma vez que nós criamos os widgets. Nós também vamos apenas esfriar nossa atualização, nossa função, e vamos deixar isso fazer a sua. Agora. A próxima coisa é quando recebermos danos, também podemos fazer isso aqui embaixo. Entre o nosso brunch para verificar se morremos ou não. Novamente, sempre que tivermos a saúde sendo atualizada, vamos querer arrefecer essa atualização funções de saúde. Então vamos puxar dele, arrefecer a função de atualização aqui. E lembre-se, se você estiver fazendo isso entre dois pinos de execução, ele sempre preencherá esse emissário de execução do funil. Então agora o que deve acontecer é, embora não tenhamos atualizado ou alterado nosso widget aqui. No outro tipo de elemento visual disso, vamos chamar esse jogo de início funcional que descobrirá que temos saúde total para os trabalhos de saúde. E, em seguida, se nós jogar ao redor sem depurar sistema de saúde, modo que o botão Debug que tivemos o dano aplicado, então devemos ver o nosso widget para ser atualizado. Então aqui temos a imprensa de saúde completa H, e isso está diminuindo um pequeno percentual com base no que eu tenho aqui. Então 20%, que está olhando para os direitos de byte para esse valor normalizado. Se eu causar 50 danos, então metade da nossa saúde, então perderemos metade de um bar, e então a próxima metade nós morreremos. Então, novamente, podemos apenas verificar novamente se nossa boca está definitivamente fazendo a coisa certa. E digamos que 1909, deveríamos ter a menor lasca de Saúde. E podemos ver que temos praticamente uma casa e outra vez, mais uma vez e morremos. Portanto, sabemos que isso está funcionando corretamente. Esta é a coisa principal. É por isso que queremos que essas funções úteis de depuração em apenas para verificar quando estamos fazendo novos sistemas, que eles estão sendo implementados corretamente antes mesmo de termos inimigos e coisas assim, podemos facilmente testar coisas com esta noite. O que eu vou fazer é eu também, isso é um pouco difícil de encontrar. Eu só vou chamar essa depuração em um comentário e eu vou fazer isso vermelho. Portanto, nunca esquecerei que, em algum momento, provavelmente queremos remover isso. Não queremos que isto seja enviado porque é claro que não queremos que as plantas brinquem com o teclado e, de repente, tomem saúde. Então vamos voltar e lembrar de remover isso quando terminarmos completamente com o sistema de saúde. Então, de volta aos widgets, isso é praticamente tudo. Então, vamos checar novamente. Nós temos tudo isso, arrumamos tudo e temos realmente que vir aqui. Podemos ver Vamos apenas normalizar um valor, certificando-se de que não temos nossa ligação esperançosamente novamente, que faz sentido por que não ligamos nada a uma função widget, se isso é um botão, texto ACEF, progresso comprado e nada realmente precisa ser vinculado é melhor ter esse controle total. E você pode ver agora que esta função só está sendo resfriada nesses momentos específicos que pensamos que algo pode precisar ser atualizado sobre os planos de saúde, então no início do jogo. E no momento no sistema de danos deve ser o que precisamos fazer na classe widget e o jogador por um tempo. Então o que vamos fazer, de fato, vamos usar o jogador em apenas um momento para o dano inimigo. Então, podemos apenas fechar o widget classificar, certificar-se de que compilamos e salvamos todas as nossas atualizações. 12. 12- base inimizade: Então, antes de saltar para o sistema de saúde e danos do jogador ao interagir com os inimigos, tentando esfolar isso antes mesmo de termos algo para realmente testá-lo contra. Novamente, eu acho que a melhor coisa a fazer é realmente fazer uma pausa longe da classe de jogadores para este estágio. E vamos implementar a classe básica de anatomia para começar. E então eu voltei para a aula e nós podemos verificar isso contra o jogador quando eles interagem um com o outro. Então, por enquanto, vamos de fato fechar a classe jogador se você ainda tem o aberto e dentro de todos os blueprints foto OCR adicionar outra pasta novamente, isso nós vamos ter algumas classes aninhadas aqui. Oh legal, este é inimigo. E apesar de criarmos apenas um inimigo neste conjunto de vídeos, eu queria introduzir a ideia de herança e mostrar como podemos criar uma espécie de hierarquia, todos os diferentes tipos de entidades onde a classe base contabiliza muitas das funcionalidades e variáveis mais genéricas. Então vamos ser tomadas a abordagem e, em seguida, você pode facilmente estender isso para seus próprios outros inimigos, como personagens de cogumelos ou tipo estacionário de arte, inimigos ou qualquer coisa que você realmente queria adicionar em. Então, a partir de uma classe base, vamos clicar com o botão direito do mouse e agora vamos criar uma nova classe blueprint. E eu estou realmente indo para reutilizar a classe de caracteres 2D de papel novamente. Então, se descobrirmos que com caráter de papel, a razão é que se alguma vez fizemos um para adicionar um tipo detalhado de implementações de IA para isso e isso terá tudo pronto para ir naquele sistema de movimento de personagem, que irá automaticamente ser configurado para contabilizar volumes de navegação e alto para interagir com eles. Não só isso, isso também terá nossos flip books e tudo mais assim, que precisamos ir para animar e configurar as coisas e incluindo a gravidade que o cliente da cápsula é e tudo o que temos usado. Então, para este, esta vai ser a nossa classe base. Esta será a classe pai da qual todos os outros inimigos herdarão. Então vamos chamar isso de base inimiga BP. Agora, o que fazemos dentro da classe base, tentamos manter a lógica aqui o mais genérica possível. Então nós explicamos tudo o que cada criança desta classe pode precisar fazer. Então isso seria coisas como movimento intencionalmente, mas talvez até isso seja um pouco específico demais porque como eu já mencionei, uma das duas primeiras idéias que vieram à minha mente foram os cogumelos inimigos que precisariam de algum tipo de movimento muito provável. E então o segundo era o inimigo das tortas. Então eu já tive a idéia de um personagem que pode querer colocar em que não move uma ferramenta que poderia ser muito específica, mas eles só vão coisas como valores de saúde, uma vitória, perder tipo de estado de morte quando a planta e armadilhas com eles, talvez um estado danificado causando e coisas assim. Então isso é um pouco mais genérico que as aulas infantis provavelmente precisarão. Mas a outra coisa boa sobre usar este personagem de papel, nós também temos todas as outras coisas que as aulas infantis precisamos também. Então temos o nosso colisor de cápsulas. Então, novamente, nós já temos as propriedades de colisão de toda classe filho está configurado e pronto para ir. E também temos os componentes sprites. Então, novamente, todas as nossas classes infantis precisarão ser visualmente representadas de alguma forma, provavelmente com o sprite 2D de papel porque estamos usando um jogo de plataforma 2D tem, então novamente, isso tem alguns dos componentes já aqui que estamos vai precisar no futuro. E eu não vou preencher isso. A razão é que isso vai se certificar de que, se tivermos um esquece fornecer uma representação visual para o nosso filho ou classes herdadas. Então, deixando isso vazio, isso vai ser um indicador muito claro que na classe infantil nós cometemos um erro e esquecemos de fazer alguma coisa. O que precisaremos de inalação é de algumas variáveis. Então estes serão os nossos rastreadores de saúde. Isto vai ser muito parecido com a nossa peça, uma classe de personagem. Teremos um valor flutuante. O primeiro, vou nomear um Saúde padrão. E eu vou copiar isso. Então controle e w para copiar isso e vamos chamar isso de saúde. E da mesma forma, queremos que isso sempre defina a saúde no início como a Saúde padrão. E vamos definir o padrão dará a estes um padrão de 100 também. Podemos transformar isso em aulas infantis, como você verá um pouco mais tarde. Mas nós apenas assumimos que todos eles começam com um flat para 100, como o jogador faz. A próxima coisa que vamos querer fazer é adicionar um sistema danificado novamente, todas as nossas classes infantis, qualquer coisa que herda disso provavelmente vai precisar sofrer danos em algum momento. Podemos voltar para o gráfico de eventos aqui. Podemos remover as funções que não vamos precisar, o que deve ser praticamente tudo de naturalmente e entrar e adicionar o em qualquer dano. Então essa função que usamos antes, o evento qualquer dano, basicamente queríamos fazer os mesmos cálculos, tirar a saúde do que está sendo passado. E de fato, dizendo que nós podemos apenas saltar de volta para o nosso jogador e dentro daqui porque nós fizemos, se você fez a mesma coisa que eu nomeei tudo da mesma maneira, nós podemos realmente apenas beliscar isso, então vamos copiar isso de uma classe. Vai perceber que os nomes coincidem e podemos passar isto ao meio. Então eu diariamente nesta fase, novamente, estamos indo para um tipo de mínimo básico, MVP, mínimo de produtos viáveis para este projeto. Mas é aqui que você pode querer começar a olhar para coisas como componentes, componentes razoáveis como um componente de saúde, porque nós já meio que copiar lógica entre classes. Então isso significa que isso pode ser usado como um tipo de componente ou interface. Então não precisamos manter as leituras. Mas para isso de novo, só queremos que as coisas funcionem. E isso não é necessariamente uma má prática de codificação, mas também não queremos tirar centenas de vídeos apenas para que uma plataforma simples esteja funcionando. Então isso vai atualizar a saúde do inimigo sempre que sofrermos dano. E já temos a próxima parte da lógica pronta também aqui. Então não vamos mostrar nenhuma representação visual de saúde. Podemos pular essa parte, mas podemos muito bem ir em frente e verificar a saúde novamente para ter certeza de que estamos rastreando se ou não com isso, nós também podemos copiar isso e vamos nos certificar de que não copiamos a função do jogador morreu, mas estaremos implementando algo muito semelhante em nossa classe inimiga. Então nós copiamos tudo isso vai voltar para cá. Vamos colar isso no gráfico de eventos. Podemos ter um pequeno problema. E isso é que ainda não fizemos esse booleano. Mas se você conseguir isso, você pode ver que temos uma linha ligeiramente branca acima disso, que significa que esse valor não existe. Se pressionarmos compilar, temos agora agradável e fácil de corrigir isso. Podemos clicar com o botão direito do mouse em algum lugar perto da linha branca e podemos dizer a ela para criar a variável. É isso. Então, não temos essas extensões lá dentro, bem sem nenhum custo extra para nós. Então não estamos fazendo a mesma coisa para que não tenhamos a habilidade que não queríamos, mas o jogador onde não queremos morrer mais de uma vez, poderíamos ter algo onde o jogador salta continuamente sobre um inimigo e o coloca em um tipo constante de Loop da Morte. O que pode ser muito engraçado agora que eu digo isso, mas também pode parecer um pouco buggy. Não é bem a mecânica ou os resultados que você quer, mas estamos fazendo o mesmo cheque metade. Então, se a saúde for menor ou igual a 0, então estamos mortos. Novamente, estou totalmente ciente de que com agrupar isso, mas apenas para a prova de futuro nosso código, nós também vamos garantir que nada deslize através deste caso de uso e nós não temos um, um inimigo em algum momento com menos 50 saúde que ainda está viva. E também se não estiver morto, então não podemos matá-lo várias vezes, então vamos matar nosso inimigo. Certifique-se de que definimos, é isso para ser verdade. E então nós vamos fazer essa função novamente. E chamaremos este inimigo morto. Este vai ser um pouco diferente. Não vou colocar nenhuma lógica aqui. O que vou fazer, vou adicionar um branco reescrito, só para termos algo visual e um comentário na noite de reencaminhamento. Ok, então um comentário simples e agradável, apenas tipo de nos dizer o que esta função está fazendo. Então nós fizemos esta função que vai ser deixado completamente vazio na classe pai. E isso esperado para ser usado em completamente sobrescrito apenas nas classes filho. Agora podemos fazer algo aqui como arrefecimento da função de destruição. Mas na classe infantil é que podemos querer fazer algo como colocar o cabelo comum, reproduzir animações, partículas assinadas, e coisas assim. Então não queremos destruir a classe antes disso acontecer. E não podemos mudar a forma como as funções são chamadas. Então nós poderíamos Kuhn nossa função filho primeiro e depois herdar a função pai e destruir. Mas, novamente, pode haver alguns casos de uso em que nem queremos que ele seja destruído. Talvez tenhamos cadáveres espalhados pela arena. Talvez isso seja parte do mecânico onde eles precisam continuar existindo. Então, para evitar problemas como esse, geralmente não me importo. Destruir funções na função pai chama uma ferramenta quando as classes pai. Mas eu vou ter configurado a função estão prontos para que seja resfriado que a saúde fique presa e nós sabemos que o inimigo morreu. Isso nos poupa de implementar a mesma funcionalidade repetidamente em todas as nossas classes infantis. Mas temos essa liberdade e flexibilidade para adicionar às funções a lógica única e funcionalidade baseada na classe que está chamando essa função. Então, o que vamos fazer, vamos chamar isso. Nós ainda queremos que isso seja resfriado, mesmo que nada esteja acontecendo. Porque em qualquer criança desta classe e eu quando a saúde sendo rastreada e está sendo classificada como um inimigo morto. E isso ainda vai ser resfriado. Vamos ver em breve alto. Isso ainda pode ser utilizado na classe criança é se você não está familiarizado com isso, mas isso é praticamente ele. Então essa é a nossa classe inimiga base pronta para partir. Esse é o projeto, pelo menos as variáveis e funcionalidades que eu acho que serão as mais genéricas. As coisas que qualquer classe que eu pudesse imaginar acenar com a cabeça precisaria. E eles são definitivamente as únicas coisas que eu voltei para a aula vai precisar para evitar que implementemos isso manualmente nessa classe também. 13. 13- Enemy Bat: Então basta dar uma olhada no sistema de herança, como podemos obter classes diferentes para herdar funcionalidades, variáveis e propriedades de suas classes pais, agora podemos começar a criar nossos morcegos inimigos. E podemos fazer isso voltando para a pasta de inimigos. E aqui da base inimiga, vamos clicar com o botão direito sobre isso. E nós temos uma opção aqui para criar uma classe Child Blueprint. Então esta classe agora herda tudo o que acabamos de implementar em nossa classe base. Só vou dar o nome a este bastão inimigo sublinhado da BP. E podemos até ver aqui. Então, se você não estiver familiarizado com a estrutura irreal de herança de classe, podemos ver que a classe pai é a base inimiga. Podemos navegar até isto, que será apenas aqui. Podemos ver que as classes de pais base inimiga, o personagem de papel, que é o que escolhemos originalmente, clicamos sobre isso. Isso nos levará a uma classe C mais, que definiremos todas essas coisas. Então, basicamente, estamos herdando o componente de captura, componente sprite e tudo assim da nossa classe pai C Plus neste caso. Então vou me livrar da classe do planeta. Não precisaremos disso de novo dentro do inimigo. Mas o que queremos fazer, podemos começar a adicionar alguns dos visuais aqui, para que possamos adicionar nossos sprites neste. Então lembre-se, vamos nos livrar disso, minha versão pai. Isto foi deixado vazio de propósito. Então, podemos preencher isso com o animado, mas também queremos alterar o tamanho do Componente Cápsula para que possamos tornar este círculo mais perfeito. Então 34 e 34 parecem bem. Significa que não vamos ser atingidos pela envergadura. Mas eu acho que vai ser aceito era querer parecer velho demais neste tipo de jogo. E, em seguida, apenas para verificar algumas coisas como novamente, apenas para o caso de você não estar familiarizado. Dentro do festival de roteiro de construção, podemos ver que temos um legal ter script de construção normal, que é então resfriar o script de construção pai. Então o que isso está fazendo, se clicarmos nisso, isso nos levará para a classe pai. E podemos ver que basicamente a ordem de execução é que vamos esfriar nosso próprio festival de função que poderíamos fazer é adicionar algo como uma string de impressão aqui, que significa que nós no o que significa que nós noscript de construção imprime o que está indo estar na cadeia de impressão. E então nós iria arrefecer hora versão pai, que vai apenas definir a saúde. Sim, se nós o que faz as diferentes maneiras. Na verdade, vou mostrar isso só para passar esse ponto. Então, vamos dizer string de impressão. Vamos dizer que esta é a criança ROM. E, em seguida, na classe base vamos fazer uma string de impressão aqui também. E eles percebem que isso vai ser um pouco confuso porque a maneira como ele rola para baixo na tela, mas espero que isso faça sentido. Vamos dizer aparente. Então isso vai deixar claro se essas escolas estão vindo de nenhuma mudança esta para ser laranja. Só para que seja um pouco mais óbvio. E já podemos ver isso. Nós temos um monte de coisas diferentes que scripts de construção rodam praticamente constantemente sempre que você está mudando algo, compilando algo no editor. Então, se trouxermos apenas os pais iriam apenas obter o código da função pai. Estou movendo isso porque novamente, o roteiro de construção é resfriado sempre que movemos algo no outro conjunto. Então o que isso está fazendo é definir a saúde e, em seguida, resfriar essa cadeia de impressão. Em comparação, se trouxermos o bastão, podemos ver que isso está resfriando a criança. Ele rola para baixo para que possamos ver se eu deixo por um tempo. O primeiro deve ser azul, filho-pai filho. Então isso é chamar a função da criança primeiro, depois os pais. E tipo de loop que toda vez que você compra um certo número de unidades. Então este é o Oda, ele, meu, nós podemos mudar isso se eu ligar isso rápido e, em seguida, este eu cair no colete pai Construction Script. Não deveria ler um pai e depois um filho porque vamos esfriar nosso roteiro de construção no Festival dos pais e esfriar essa corda de impressão. E então vamos esfriar nossa cadeia de impressão na classe que estamos chamando diretamente. Então, novamente, eu só vou trazer os morcegos inimigos para dentro e é um pouco difícil de ver contra o nada. Senti a página, mas não vou fazer outra auditoria. Então temos pais e filhos e pais e filhos. Então podemos ver está indo na ordem certa lá. Então isso faz sentido como temos a estrutura da ordem em que as coisas são resfriadas quando você está herdando coisas de outras classes. Porque vamos fazer uso disso enquanto avançamos com a classe botão. E isso é exatamente o que eu quis dizer com nós podemos anular as coisas nos eventos de morte do inimigo. Poderíamos ter feito algo como colocar a função de destruição aqui. Só estou me certificando de que quando sobrescrevermos essa função, faremos o festival de versão da criança, que estará jogando os efeitos. E, em seguida, chamar a função pai, que iria lidar com a destruição da classe. Mas como eu mencionei, mesmo com esse tipo de sobreposição, pode haver situações em que não queremos que tudo seja destruído imediatamente, tendo coisas como esse tipo de permanente e o jogo pode ser muito bom com os corpos e ter diferentes interactable é quando os inimigos morreram. Então, por essa razão novamente, eu vou pular fazer isso e ter certeza de que fazemos todas as funcionalidades que queremos dentro da classe infantil. Então, a maneira como isso vai funcionar, nós podemos obter essa função que eu tenho o caminho para começar, então nós podemos realmente olhar para a sobreposição outra função que será o nosso inimigo morto substituto. Então aqui nas funções, em vez de recriar isso, podemos ver que temos algumas coisas que já foram definidas na base inimiga. Então podemos anular qualquer função de dano na base inimiga e podemos anular a função que ele morreu da base inimiga. Também temos um monte de funções que podemos substituir da classe de atores. Todos estes, novamente, já estão sendo feitos na Lei Geral para conjuntos de classe. Mas o que nos interessa é que o inimigo morreu. Então, como eu disse, vamos manter isso legal para o pai apenas no caso de alguma vez fazermos algo genérico que queremos acontecer na classe base neste exemplo simples, isso não vai acontecer, mas apenas no caso de nós fez, então vamos manter esse quadril. E você já viu como isso funciona com o script de construção teve que isso será chamado primeiro, que essencialmente vai entrar, não fazer nada raiz história, nó, e então vamos chamar nossa própria lógica aqui. Agora, contra tudo o que acabei de dizer, o que vamos fazer dentro da classe secundária inimiga é destruído a classe. Então, neste caso, nós não vamos entrar em vigor, diz muitos tutoriais sobre efeitos de partículas e efeitos colaterais e coisas assim. Só vou visualizar o personagem que está sendo removido. Assim, ela estará resfriando a função Destruir Ator sempre que o jogador saltar sobre o inimigo. Mas novamente, se você queria fazer algo como adicionar uma animação rápida, então você pode adicionar isso aqui, ter um ir fora da tela e, em seguida, depois de um segundo para, para destruí-lo dessa forma. Mas novamente, isso vai ser uma representação visual agradável, vai ver que nós pulamos na parte de trás e então ele vai desaparecer. Bem, isto parece que no momento, se entrarmos, podemos trazê-los ao mundo. Se tentarmos arrastá-lo para algum lugar no mapa de mosaico aqui, podemos vê-lo apenas descansar logo acima dele. Mas perto o suficiente, queremos definir isso como 0 e no eixo y. E para evitar que isso seja aconselhado, vamos ter certeza que ele não vá para o chão e podemos deixá-lo em algum lugar assim. Então ele se tornou o plano de impressionar I. Nós temos um pouco de um problema de streaming aqui que vai levar um segundo e, em seguida, isso deve se consertar. E já podemos ver que serão alguns problemas que eu esperava aqui. E isso é que podemos saltar sobre isso e vamos ser movidos, potencialmente ser empurrados para trás, que é o que eu esperava que acontecesse lá. Então, porque temos que especificar que a luz está interagindo uns com os outros, basicamente não sabe de que maneira resolver a colisão. E não podemos ter esse problema em que somos movidos para frente e para trás no eixo y. Assim que tivermos esse tipo de problema em mente, eu vou voltar para a classe dos jogadores e podemos resolver isso pode soar a classe dos jogadores nos movimentos dos personagens. Temos a opção aqui. Se procurarmos restrição ou apenas começar a digitar restrição, temos a restrição para reproduzir uma opção. Nós basicamente queremos que isso tenha um valor positivo no eixo y, que significa que não vamos permitir que ele mova qualquer direção no eixo y. Ainda temos movimento no X e no XIJ, que é da esquerda para a direita e para cima e para baixo. Mas o que isso deve fazer é se voltarmos e saltarmos sobre os morcegos novamente, podemos ver que apenas empurramos o olho esquerdo e direito. Então vai levar velocidade suficiente. E não devemos, o que ajuda isso quantas vezes quisermos sem nos preocuparmos em sermos empurrados para a frente ou para trás. Então essa é a primeira edição. Agora, a próxima coisa que você deve ter notado é a coisa Bernstein, um pouco acima, mas está sempre terminando no chão. Então, é claro que não vamos. Estou prestes a ser capaz de voar. E novamente, podemos facilmente fazer isso dentro do inimigo. De volta à aula desta vez, voltando ao movimento do personagem. E nós temos um monte de diferentes tipos de ácaros de movimento. Podemos definir o movimento de terra padrão estranhamente o suficiente para estar voando. Então, basicamente, quando isso é inicializado, ele irá definir o tipo de movimento padrão para Lund. E quando somos um tipo de padrão nesta terra, queremos que isto seja classificado como um movimento voador. Então, é meio que contradizendo a si mesmo isso, mas apenas esteja ciente. O principal é que este é o modo de movimento padrão, que é Lund. E não vamos voar da maneira que isso vai funcionar, porque se entrarmos e simularmos isso, podemos ver que isso tira a gravidade. E esta é a minha classe como um personagem voador, que possa mover-se lado a lado. Podemos ir para cima e para baixo. E vai ignorar completamente a gravidade a menos que a substituamos para ter algum tipo de animação borbulhante com alguma gravidade, uma espécie de forma. Mas caso contrário, isso vai ficar completamente no aplicativo. Mesmo que a possuamos , podemos subir e começar a pular na cama. Então, neste ponto, temos um bastante estacionário, mas a próxima coisa que vamos querer fazer é adicionar algum tipo de lógica de movimento a isso. Vou tornar isto muito simples. Vai voar da esquerda para a direita. Ele vai escolher aleatoriamente se ele quer se mover em uma determinada direção. E então ele vai ser um daqueles inimigos que quando ele bate em uma parede ou algo assim, colide com ele, enquanto em seu caminho ele vai apenas mudar de direção e voar para o outro lado. 14. 14 - Movimento de bat Enemy: O movimento real para esta classe deve ser bastante simples de implementar porque novamente, estamos usando o componente movimento de personagem aqui. Isso significa que, tal como acontece com a nossa classe de jogadores, apenas para recapitular o que estávamos fazendo, podemos realmente alavancar parte da lógica de movimento já disponível dentro do movimento do personagem fornecer uma direção que ele precisa mover. E essa será praticamente a lógica de que precisamos fazer isso. Então isso foi no movimento de entrada, e podemos ver que temos as entradas de movimento. Então vamos fazer algo muito, muito parecido. Na verdade, se você tiver a classe do jogador pronta aberta, podemos copiar esta nota. Vamos usar exatamente a mesma coisa, vamos voltar para o bastão inimigo para a classe. E a única diferença, é claro, é que porque não tínhamos um drive de entrada nesta sala. Vamos colar isto ao lado do tique-taque do evento, OK, este backup. E então tudo o que realmente precisamos fazer é descobrir como vamos obter esse valor de escala. Então, no momento temos o x, bem, a direção para se mover. Então, novamente, estamos nos movendo para a esquerda e para a direita. Não precisamos de nenhum movimento para a frente ou para trás ou vertical para nossos botões. Então, se nós realmente formos e tocarmos isso agora, isso estaria fazendo pelo menos o movimento muito básico que precisamos. Podemos simular esse cabelo. Podemos ver que algumas coisas são provavelmente um pouco. O primeiro é que o morcego está fluindo para trás. No segundo eu diria que ele está se movendo um pouco rápido demais. E a questão final é o principal tipo de ponto disso, que ele vai estar sempre indo nessa direção para a frente ou para a direita. Então o que vamos fazer é trabalhar esses diferentes passos enquanto passamos por essa aula. Então a primeira coisa vai ser a coisa mais fácil de se aproximar, que nós estaremos mudando a velocidade do movimento. Vimos novamente no passado que isso está no Componente Movimento de Personagens. Então, com este D selecionado, Lembre-se que estamos usando os movimentos padrão para voar, que significa que não vamos mudar com a velocidade de caminhada como fizemos com o jogador. Em vez disso, precisamos ir até a seção voadora e baixar isso. Então eu vou fazer esta rotunda metade na velocidade dos jogadores se movendo. Eu acho que os jogadores padrão para 600, então nós vamos fazer a velocidade máxima do vento em 300. Isso só significa que deve ser um pouco mais fácil para o jogador ou para nós, tipo de pegar e brincar com os inimigos para testes e também para jogos. Você normalmente quer que o jogador se sinta um pouco mais controlável e poderoso do que os inimigos. Então podemos ver e isso é fixo, a velocidade de movimento, que é o primeiro e tipo de passo simples a fazer aqui. Selecione a partir da direção do movimento. O que podemos fazer é puxar daqui e usar outro daqueles bilhetes de sono que estamos nos acostumando. Mais uma vez, eu vou para os utilitários selecionar porque eu gosto da maneira que isso irá imprimir o verdadeiro ou falso. Quando virarmos isso para um booleano. A partir daqui, eu vou apenas arrastar e criar ou promover isso para uma variável. E eu vou nomear este que B move, certo? Então, novamente, estamos assumindo o nome positivo disso, que os direitos de movimentação serão o tipo de padrão esperado. E o que podemos fazer é definir isso. Então, se isso for verdade, vamos definir isso para ser um. E se isso for falso, vamos definir isso para ser menos um. Muito semelhante ao que estamos fazendo com o eixo de entrada. Um vai ser positivo movendo-se para a direita menos um seria negativo mover para a esquerda. Lógica muito semelhante, apenas uma maneira diferente de conduzir isto a partir de um booleano. Agora, para testar isso, podemos simplesmente tirar o olho. Então vamos tornar isso público compilar. E vamos ver que isso será padrão para ser falso porque o índice aqui era falso. E isso significa que se pegarmos nosso bastão no editor, devemos ter controle total sobre a direção do movimento aqui, encontrando esse Booleano, temos o movimento certo Booleano aqui. Então esperaríamos se deixássemos isso desmarcado quando eu me mover para a esquerda. Ok, então primeiro teste feito. E se pegarmos isso, devemos mover os direitos. E podemos ver que agora temos controle sobre o bastão como esperado. Então essa vai ser a próxima parte da direção do movimento controlada. Então agora temos uma variável para controlar. Isto funciona. Agora boa maneira simples que podemos atualizar isso no início para que possamos tipo de aleatorizado a maneira que os morcegos estarão se movendo. Só vou remover a sobreposição de acesso. Não vamos precisar disso. O que podemos fazer é arrastar nossa variável, ligar isso, e podemos puxar daqui e usar uma função booleana aleatória. Então, simplesmente, isso terá 5050 de chance de escolher verdadeiro ou falso quando começarmos a jogar, não teríamos nenhum controle sobre isso. Vamos usar essas atribuições completamente aleatórias do valor booleano. E então, quando chegar ao tique-taque do evento, isso será levado em conta e nosso morcego estará se movendo em direções diferentes. Ok, então eu tentei algumas vezes e você pode realmente ver algum alto, nós fizemos exatamente uma divisão de 5050 da randomização que eu não estava esperando isso. Então, no entanto, para o que é e o que podemos fazer aqui é ter certeza de que vamos precisar estar testando isso mais para que possamos tornar isso privado novamente de C. Nós só não queremos muito para ser exposto se ele não precisa ser. E a última coisa para o tipo de implementação básica de movimento que eu diria é colocá-la na direção correta. Então, é claro que queremos que isto colida com a superfície no momento. Se deixarmos isto em movimento, então o que vai acontecer é colidir com aquela parede e voar indefinidamente para dentro daquela parede. Então, vamos levar isso para fora um pouco mais tarde para fazer o taco mudar de direção assim que bater em uma parede como esta. Mas, por enquanto, acho que podemos deixar o personagem virado para o caminho certo. Assim que mudarmos uma direção, podemos pegar essa variável direita de movimento que estamos rastreando. E podemos fazer com que pareça esquerda ou direita dependendo da forma como está se movendo. Então, novamente, para fazer isso, É muito simples, eu acho que neste caso, ao invés de tentar trabalhar fora irritações de controle e coisas assim. Esta é uma daquelas coisas onde você pode fazer de qualquer maneira. Não há um caminho certo ou errado. Especialmente se algo como um inimigo, sei que não teremos nada como um morcego. Cuspir fibras são coisas que não precisamos nos preocupar com a direção de rotação. Não estamos adicionando subcomponentes. Então eu queria mostrar a vocês a outra maneira que eu mencionei para fazer isso, que é usar a escala sprite. Então eu totalmente opcional, mas eu gostaria de mostrar a vocês tantas maneiras diferentes de fazer as coisas quanto possível para que você tenha essas opções em seu arsenal pronto para ir. Então o que vamos fazer é dependendo da direção em que estamos nos movendo, vamos obter nosso componente sprite. Você também pode fazer isso para todo o ator completamente até você como você gerencia isso para que você possa definir a escala do ator. Mas muito simplesmente, lembre-se que uma eu disse uma opção que poderíamos ter feito com nosso jogo um personagem, em vez de mudar a rotação, é simplesmente pegar nosso X gal, definir isso para menos um e estamos enfrentando o outra direção. Então é isso que vamos fazer. Uma abordagem simples e agradável aqui. E como eu disse, só mais uma opção que eu queria te mostrar. Então, para gerenciar isso, o que vamos fazer é primeiro obter a escala atual, pois precisaremos deste recálculo em apenas um momento. E podemos fazer isso com a escala mundial GET, o sprite. Podemos dividir o pino da estrutura. Então temos o x, y e zed. E então, da maneira semelhante, vamos então definir a escala com base nisso. Mais uma vez, podemos definir a escala mundial 3D para o nosso sprite. E novamente, nós vamos querer dividir o pino da estrutura só porque se você pensar sobre isso, nós não queremos que ele esteja girando o y ou o Zed. Então podemos ligar automaticamente estes para que estes nunca mudem. Você poderia codificá-los para um. Você pode esquecer a maneira de fazer isso. O principal é que queríamos calcular o cálculo com base no nosso valor x. Então a última coisa é que vamos puxar daqui, e vamos multiplicar isso por um carro alegórico. Flutuadores multiplicados por um flutuador. Valor de retorno será o que queríamos definir a escala deste para ser. E como sempre, vamos puxar a partir deste pino final e vamos usar uma nota selecionada. Mais uma vez, vamos para a opção de utilitários. Só para recapitular, não queremos que a ou B. Isso é um pouco ambíguo. E, claro, assim que transformamos isso para usar o valor booleano, obtemos o verdadeiro ou o falso. Então, de novo, é muito legível por humanos. Agora sabemos que se estamos indo para a direita, se isso for verdade, então queremos que isso seja escalado de uma maneira. Se for falso, então queremos que seja escalado para o outro. E como acabamos de ver, isso é realmente um pouco diferente por causa da forma como os ativos são desenhados. É certo, tipo de comum que os ativos, o jogador será desenhado virado para a direita, os inimigos retirados de frente para a esquerda é apenas algo que eu notei em 2D artistas cavar, que significa por padrão mover para a direita? Então nós realmente precisamos inverter isso. Por padrão é logo que o inimigo começa a se mover para a direita através do nível. Então, se isso for verdade, nós realmente queremos que isso seja um valor negativo. Então vamos definir isso para menos um. E se isso for falso, então se formos para a esquerda, então vamos definir isto para positivo. Com isso feito, podemos ligar isso aqui, arrumar isso um pouco, e isso será tão bom para testar este ite. Ok, e lá vamos nós. Então o bastão não está, eu estou virando na direção correta dependendo de qual maneira esse booleano aleatório é selecionado no início da jogada, se estamos movendo para a esquerda, então ele está voando fluido para a esquerda. E se estamos nos movendo para a direita, ele se vira e está se movendo ou madeira para a direita. 15. 15 - Mudança de direção do Enemy: Para obter os botões reagindo aos lobos, como nós meio que esperamos, haverá alguns tipos diferentes de regras e expectativas que eu vou colocar na lógica apenas para que saibamos que temos controle total sobre como o bumbum poderia potencialmente interagir com as diferentes partes dos níveis, tais como o chão do jogador, diferentes itens intratáveis como lobos e assim por diante, assim de volta para dentro do inimigo. Mas para a classe dentro do gráfico de eventos, a primeira coisa que queremos fazer é a maneira que nós vamos tipo de lidar com isso vai ser a partir dos eventos de colisão, como eu já mencionei, o esboço básico disso é quando o morcego bate algo, queremos que ele decida se deve ou não virar. Então já temos o componente principal que precisaremos para isso, que, claro, será o Componente Cápsula. No componente de captura, podemos rolar para baixo e podemos encontrar o componente hits eventos e podemos adicionar isso em. Agora vou passar pelo caminho que tenho este lago a morrer. Então você pode querer ter seu personagem inimigo interagindo de forma diferente com o mundo. Geralmente, porém, há alguns tipos de regras quando se trata da forma como o, Eu tipo de olhar para o design do jogo em um conceito mais e teoria baseado premissa do que apenas a mecânica tipo rural por trás dele. Então a primeira coisa que sempre se destaca para mim é que uma das coisas com que esse inimigo poderia colidir será a classe plantadora. Uma coisa que eu sempre acho muito casada quando isso acontece é quando o inimigo atinge a praia e então tem esse tipo automático de lógica acionado para fazê-lo girar e se mover na outra direção. Especialmente quando você quebrá-lo e pensar que o inimigo é meio cedo no nível apenas para caçar, jantar, encontrar ou interagir com a classe do jogador de alguma forma para causar dano. Especialmente como eu estou me aproximando disso como um jogo iônico ou Mario muito velha escola, não alguns dos mais recentes onde os inimigos podem passar e o tipo específico hub de montagem é onde eles jogam um soco do personagem, como um exemplo, estes são os que estão indo para fornecer puramente danos de contato. Então eu tenho a tendência de pensar que é um pouco estranho se a única coisa que o inimigo pretende fazer é entrar no jogo e causar danos e, em seguida, virar rodada. Então o que eu vou fazer é a primeira coisa que vamos sair daqui é sair do outro ato e descobrir o que atingimos. E só queremos fazer nossa verificação de colisão se não for igual ao Peão do Jogador. Então não precisamos fazer nenhum elenco ou algo assim. Como podemos literalmente verificar se a única coisa, o único jogador no jogo vai estar controlando se a coisa que atingimos não é igual a isso. Então, a outra pornografia ou o plasma vão verificar o brunch daqui. E se isso for verdade, então podemos ir em frente e fazer nossa lógica de mudança de direção. Esse é o primeiro passo feito para esse tipo de lógica. A próxima coisa vai ser encontrar. Então, se passamos por este critério, dessa forma queremos ser completamente apreciados e ignorar qualquer lógica futura. A próxima coisa que podemos olhar para fazer é verificar a superfície que atingimos ou interativa contra. E podemos fazer isso soltando o Pin de sucesso aqui. Isso fornece muito mais informações sobre a coisa que atingimos, como o tipo de material que ele pode ter seu nome se ele tiver um soquete de osso, a distância e você pode ver todas as canetas extras que temos aqui. Agora, o que vamos nos interessar é o normal. E isso pode nos dar uma idéia da direção em que o golpe foi tomado. A próxima coisa que eu queria explicar para isso como se algo vem de cima ou de baixo. Então teto ou chão, ou mesmo outro tipo de inimigo ou uma classe interativa. Todas estas coisas também devem ser ignoradas. Então podemos ver como isso parece. Se arrastarmos daqui, vou imprimir uma corda. E dentro da cadeia de impressão, podemos apenas conectar o hit. Normal vai ser aquele que queremos aqui. Então vamos apenas ter uma compilação rápida deste e podemos ver o que vai ser retornos dependendo se isso está sendo atingido. Ok, então se estamos atingindo uma superfície como esta em linha reta, podemos ver que estamos recebendo muitos retornos de acertos desta única colisão. Basicamente, enquanto isso estiver colidindo, como uma bagunça terrível, vamos retornar essa função de sucesso. Agora, o importante que podemos ver aqui é que isso está sendo atingido em um positivo no eixo x. Então esta não é realmente a posição de acertos do bumbum do SES vai ser menos um no lado de fora esquerdo, como já estamos cientes de, o que estamos realmente recebendo é a localização positiva da coisa que estamos atingindo, que está em um no eixo x desta regra. Então, invertendo isso, vou pausar isso assim que chegarmos naquele canto que, e de fato, o que eu vou fazer é voltar. Eu vou parar com isso porque isso não vai demorar o suficiente e nós podemos aumentar isso para algo muito alto. Então a primeira coisa que eu queria mostrar é o sucesso deste canto porque isso não é bem direto, mas não é abaixo. Podemos ver quando obtemos esses valores como 0.25.9 ou entre 0.8, podemos ver que isso nos dá uma idéia. E também não, desculpe, menos 0,2, porque isso está vindo do lado esquerdo desta pequena colina aqui. Mas isso também tipo de na esquina que é o topo das colinas têm um positivo no zed, principalmente positivo no zed dando-nos uma idéia de que este é um canto e um recorte do lado, ele apenas cabelo bem. Então, neste caso, o que eu faria é que eu vou tipo de pegar esses valores e nós podemos agrupar certos intervalos que nós vamos ignorar com base no que está sendo retornado. Então, se deixarmos isso ir um pouco mais longe, podemos ver uma coisa semelhante como nós atingimos isso, o que nós fomos atingidos de cima é a maneira que nós queríamos olhar para isso. Podemos ver quando estou recebendo um valor negativo no Zed porque é o fundo da plataforma em vez do topo desta colina. E novamente, no x estamos recebendo um valor negativo porque é do lado esquerdo dessa plataforma. E vamos esperar o mesmo tipo de coisa daquele tijolo e da parede. E é assim que podemos usar nosso hit Normal para obter algumas informações sobre a direção em que fomos atingidos. Então a primeira coisa que queremos fazer é ao invés de tornar nosso ânodo de um componente muito maior dividindo a caneta de estrutura. Porque lembre-se onde quer que você realmente interessado em um desses, que vai ser o eixo x. Então eu só vou recombinar isso só para mostrar a vocês que se continuarmos fazendo isso, vai ficar bem grande. Outra maneira de escrever isso como podemos tirar daqui. E se você não estiver familiarizado, podemos quebrar isso em uma noite separada. Então eles fazem a mesma coisa. Podemos quebrar esse vetor. Significa que teremos isso em um local um pouco mais separado. Nós já fizemos isso muito longo, então nós provavelmente podemos economizar um pouco de espaço apenas separando esse poder em uma luz diferente. Agora do X, eu vou ser bastante rigoroso com isso. Então, se isso não for igual a 0, então qualquer coisa que não seja 0 no eixo x será classificado como um resultado de acerto ao qual eu quero responder. Então, novamente, estamos ignorando que o vento é adicionar uma pequena falha e esse tipo de colisões de fundo de moagem total potencialmente será ignorado. E qualquer coisa que é maior ou menor do que Xerox, você pode ver onde retornar um ponto valores. Então, mesmo que seja como virar uma esquina, então vou dar aula a isso como uma razão para me virar. Então, como exemplo aqui, se fôssemos bater naquela esquina novamente, mesmo que seja como apontar é algo que ainda iríamos virar e mudar de direção. Agora você pode adicionar em intervalos sobre é entre menos 0,4 ou 0,4, então isso pode ser a parte inferior de um resultado de acerto no zed. E você pode não querer responder a esse tipo de coisa que depende completamente de você se você quiser adicionar esse nível de complexidade e espero que esteja fazendo sentido como podemos usar esse slide. Mas só para obter a maior parte da lógica e vamos manter isso agradável e simples por enquanto. Então o que queremos fazer agora, agora que temos esta condição verificando e vamos definir nossa direção em movimento certo. E nenhum truque aqui é que vamos pegar a corrente saindo na direção certa. E vamos definir isso para ser qualquer que seja a condição correta das correntes. Então vamos dizer mover para a direita é igual a não mover para a direita? E podemos usar a verificação NOT booleana aqui, passar isso, e é essencialmente apenas invertê-lo. Então isso vai dizer que se você estiver se movendo para a esquerda e para a direita, se você estiver se movendo para a direita, para a esquerda , em seguida, vamos querer virar a direção dos morcegos e já temos alguma lógica acima para fazer isso. Então, é claro que não queremos copiar este código. Em vez disso, o que vamos fazer é pegar isso como fizemos antes, clicar com o botão direito do mouse em qualquer um desses nós e recolhê-lo em uma função. Pelo nome disso, não estamos tecnicamente mudando a rotação. Em vez de chamá-lo de mudança de rotação ou rotação de atualização ou algo assim. Vou nomear este que o Togo está virado para a direção. Acho que é o descritivo mais preciso para o que estamos fazendo aqui. E então agora temos isso como uma função. Podemos agarrar isto e podemos desligar isto da nossa função aqui. Eu já sei que haverá alguns problemas aqui por causa da forma como as colisões estão funcionando. Isto dá-nos uma ideia do que pode estar a acontecer porque temos mais do que uma destas chamadas de função por colisão essencialmente antes de termos a oportunidade de girar, porque estamos a obter mais destes retornos por lesão do que podemos querer. Podemos ter algum confronto ou viragem acontecendo muito rápido. Então podemos apenas verificar o que está acontecendo para começar. Você pode ver que tentou girar e depois não se acalmou. E então temos alguns virados para trás aqui para que possa parecer um pouco nervoso. Então, queremos ter certeza de que temos um pouco mais de controle, especialmente neste tipo de locais apertados aqui. E para garantir que não temos muitas atualizações acontecendo de uma só vez. Então, para gerenciar isso, eu vou usar algo chamado de fazer uma vez conhecido como o nome indicaria que isso só vai nos permitir fazer algo naquela vez até que nós redefinamos algo. Isso é conhecido como um portão de controle de fluxo. Então vamos passar isso em het. Vamos fazer essa funcionalidade apenas uma vez depois disso, e eu coloquei isso no lugar errado. Queremos que tudo isso seja depois que eu fizesse uma vez. E nós, para este ramo volta como verdadeiro, então nós só queremos alternar tudo isso uma vez e mudar a direção mais uma vez, isso vai causar um problema porque isso não vai se redefinir automaticamente. Então, se batermos em algo agora, isso vai ser um longo caminho para verificá-lo, mas vamos bater nesta parede. E então, se chegarmos a este canto, devemos esperar ver você desse jeito ou fazer alguma coisa. Mas porque temos que fazer uma vez no lugar, isso significa que só vamos continuar avançando e essa funcionalidade nunca mais será verificada. Então, o que queremos fazer a seguir é, uma vez que isso aconteça, queremos atrasar. Não quero que isto seja reiniciado imediatamente. Lembre-se da bomba, o problema é que estamos tendo muitos golpes colidindo com a parede imediatamente até virarmos, certo? Então vamos adicionar um nó de atraso aqui. E o atraso pode ser algo muito, muito pequeno. Algo como 0,1 deve estar perfeitamente bem. E então, quando você vê outras pessoas usando isso muito, o tempo que eles apenas jogam em um nó reescrito aqui enquanto ele passa para o chapéu y e jogado para reverter nota. Tente tornar isso um pouco mais legível. Mostre uma maneira de contornar isso em um momento. Uma coisa muito simples de fazer e apenas manter o código mais legível, mas isso vai funcionar. Então, agora podemos ver que, à medida que entrarmos, vamos acertar este. Então vamos ter esse código. E então temos outro problema que podemos ver disse que vamos corrigir um pouco estes à medida que passamos. Mas o principal é que quando eu virar novamente e essa funcionalidade está sendo resfriada e verificada mais de uma vez, desde que tenhamos tido esse atraso de 0.1 segundo. E devemos ver isso acontecer de novo quando tivermos algo aqui. E isso é um bem-vindo Perfeito. Bem, tirando o fato de que o morcego está fluindo para trás como um perfeito de trabalho. Ok, então antes de finalizar e corrigir esse último problema, uma coisa novamente, nós estamos olhando bastante nesta série de vídeos um tipo de limpo longe para codificar espero. Então, enquanto temos algumas coisas agradáveis aninhadas em funções, tudo aqui é muito tipo de bloqueado para fazer suas próprias coisas. Eu sou uma das coisas que você tem bastante como um diminuído de plantas é alto. Você obtém o código de espaguete e pode ser difícil ler e manter sua base de código. E isso é verdade em definitivamente vir ser se nada é colocado em uma função, se tudo é colocado no gráfico de eventos, se você tem looping y's aqui, que pode tornar muito mais difícil descobrir o que escolaridade, o que quando você viu adicionar coisas diferentes em diferentes ramos e sequências saindo disso e tudo está girando de volta para aqueles que algum ponto vai ficar muito difícil de descobrir qual direção sua lógica está fluindo. Então, em vez disso, o que vamos fazer é remover isso e isso não é uma boa maneira de avançar. Vamos criar um evento personalizado aqui em baixo. Então eu sou legal, simples conserto, esfriar este. Reiniciar, direção, mudança de verificação. Então, lançá-lo redefine para a convenção de nomenclatura adequadamente ajuda a apenas bater. Sabemos que isso vai ser arrefecimento algum tipo de built-in reset funcionalidade bastante do tempo e Unreal, Neste caso, vai ser este portão de fluxo e que fazer uma noite. Então, claro, a partir daqui, vamos apenas puxar a partir do atraso e será arrefecimento e que redefine a verificação de mudança de direção. Então nada muito selvagem. A maioria de vocês provavelmente pulou para isso como o primeiro tipo de correção para esse tipo de função de loop. Agora vamos ver. Eu não sou apenas lê muito, muito mais claramente. A melhor coisa é que enquanto aqui, enquanto você está lendo isso, se você começar a adicionar código mais tarde, você meio que pisca luzes e expandindo essa lógica. E isso está ficando muito mais tempo indo para diferentes funções. O principal agora é que não temos que verificar se este Ys aleatório vai de uma parte do seu projeto para outra, clique duas vezes no nó, e ele vai levá-lo aqui e você pode ver o que isso vai esfriar. Tentando manter o código o mais limpo, legível e reutilizável possível. Então isso vai fazer a mesma coisa. Sabemos que ainda há um bug para corrigi-lo. E vou ser honesto, não sei por que o que estamos acontecendo é que o morcego ainda está voando para trás em algum momento. Então aconteceu isso, então eu estou pensando se nós jogamos em uma corda de impressão aqui, certificando-se de que nós estamos fazendo isso apenas uma vez. Ainda pode ser algum alto caindo por isso, talvez este não seja suficientemente longo. E pode ser que nós estamos alternando a maioria dos tempos limite de CPU, mas talvez não totalmente na direção de algo. Não tenho certeza do que está acontecendo, então vamos imprimir isso, ver o que está acontecendo. Como Ernie convidado vendo um olá retorna lá. Isso parece estar acontecendo muito mais nesta esquina. Eles só estão recebendo um também. Ok, então isso não está acontecendo, o que significa que eu faria uma vez que está funcionando corretamente. Então isso é uma coisa boa, pelo menos. E eu vou manter esse pouco e como um tipo de tutorial de depuração, isso não era destinado que às vezes, quero dizer, é assim que a programação funciona. O desenvolvimento geralmente não é muito direto para a frente. Então isso pode ser muito útil, esperançosamente, como um exemplo de aprendizagem. Então, a única outra coisa que estamos fazendo, estamos virando nosso cheque booleano, ei, nós não tivemos uma única vez que eu atrasei, o que sabemos que está funcionando. Então isso significa que isso vai ter que ser algo a ver com a lógica em nossa direção virada para alternar. Então vamos clicar duas vezes aqui e vamos dar uma olhada no que está acontecendo. Então, se entrarmos, estamos seguindo a direção atual e eu já posso ver o problema, ok? Então, porque temos esse tipo de estranheza que eu mencionei anteriormente, pelo menos eu acho que isso seria porque nós temos o inimigo potencialmente enfrentando a direção oposta. E quando nos movemos assim que começarmos a jogar, estamos potencialmente lançando isso. É que também faria sentido por que qualquer coisa acontece quando estamos nos movendo na direção direita. Porque já aplicamos o maior número de aplicativos com base na escala atual do sprite. Então, porque estamos levando isso para o contexto e lançando dessa maneira, bem, eu acho que estamos fazendo é que estamos multiplicando um negativo por negativo em alguns casos, que não está mudando a direção que precisamos ir. Então, se lançarmos em um pesadelo absoluto, então ainda queremos obter o valor, mas vamos ter certeza de que nós adivinhamos o valor absoluto retornado. Então isso significaria que nos casos em que isso está acontecendo, nós deveríamos estar recebendo um negativo multiplicado por um positivo e então ainda não virar na direção correta. Então, deixa-me ir. Podíamos ver que essa era a direção problemática antes. E depois vamos de novo. Então, basta verificar novamente mais algumas vezes. Vamos deixar que isto atinja todos os movimentos diferentes. Ok, então o tempo de atraso que foi talvez um pouco baixo demais porque fomos capazes de mudar rapidamente encanamento que fez parecer que eu estava interagindo com o nível muito organicamente de uma forma em que ele virou que eu estou virando direto para trás moer e continuou. Então acho que vou continuar a jogar. Esse pequeno atraso parecia funcionar muito bem, que um pouco de alternância, poderíamos ter tido, então é um pouco mais longo. Mas o principal era o valor absoluto apenas um problema agora. Então não era um problema para começar porque raramente tem uma regra de assobio. Mas uma vez que tenhamos invertido algumas vezes, queremos ter certeza de que estamos levando em conta a multiplicação correta aqui para a soma dos casos em que podemos estar levando isso já indo certo? Porque nós tivemos que inverter isso no início porque tecnicamente o sprite está enfrentando o caminho errado para avançar para começar, nós só queremos ter certeza de que isso é atualizado para levar em conta isso. E com isso, parece estar funcionando. Então vamos checar como isso funciona quando chegarmos ao útero distante. E então vamos com a esquerda em uma espécie de loop infinito. Eu acho que isso é mais de algo para nós para corrigir no design de nível aqui ou a colocação do bastão. Acho que parece melhor. Então aponte para atraso. Eu acho que pelo menos fazê-lo ir entre este ponto e este ponto parece melhor do que tê-lo virar e depois ir para cima e para cima e para cima. Idealmente, o que vamos fazer de qualquer maneira é que não vamos colocá-lo em algum lugar onde ele possa entrar nessa questão. Eu colocaria isso diretamente em linha com isso e eu mesmo que atinja isso, nós vamos entrar entre essas duas paredes. E, de fato, nós também poderíamos, nós poderíamos manter 1.5 e assim colocar um aqui em baixo. Então agora temos vários inimigos e o nível. E novamente, assim você pode ver que eu realmente não estou tendo esse problema. Eles vão estar batendo as coisas na cara. Então eu acho que vai ser uma boa correção com isso feito que nós estamos praticamente prontos para saltar para as situações de combate entre o jogador eo inimigo, A causa e receber dano entre as duas classes diferentes. A única coisa que se destaca é que já fizemos nossas substituições para a classe inimiga. Temos nossa funcionalidade de morte inimiga. E na classe de fundo da classe base, você só quer verificar se os morcegos inimigos também ajudaram. Então, novamente, nós definimos isso para um padrão 100 na classe base. Se você quiser alterar isso, você pode alterar isso para ser substituído em cada classe personalizada, cada classe filho cliente substituindo a saúde padrão. E lembre-se que deixamos a saúde em paz como isso será adivinhar definido na construção de script através do legal para a classe pai antes de realmente acabar jogar. Então, se você quisesse morcegos com saúde muito baixa ou algo assim, então você poderia mudar isso. Mas com isso feito, acho que estamos prontos para ir agora e começar a ver como podemos fazer o jogador e o inimigo interajam uns com os outros. 16. 16 - danos: Antes de saltar de volta para a classe do jogador para obter um pouco do dano entre o inimigo sobre o próprio jogador tipo de ligado e trabalhando. Eu percebi que eu meio que escovei sobre uma coisa que pode ter deixado alguns de vocês se perguntando por que nós estávamos fazendo uma certa coisa em nossa direção voltada. Então, dentro dessa função, acabamos de ver que precisávamos desse valor absoluto para multiplicar a escala atual, a escala que queremos que a escala alvo seja. Você pode ter pensado que isso foi um pouco mais complicando as coisas. E é, você provavelmente já viu que a coisa mais fácil que poderíamos ter feito é simplesmente conectar isso. Então, para mover para a direita, vamos definir a escala para ser uma coisa. E se nos movermos para a esquerda, vamos definir a escala para ser outra. O que eu meio que esqueci de mencionar há pouco é a razão pela qual eu faria isso. Bem, a razão pela qual eu fiz isso é se você imaginar um jogo como Mario, o que você pode ter um tipo de super poder que vai escalar você ou a maneira como o sistema de saúde funciona. Até você tem mini Mario e eu sou maior Mario. Podemos fazer isso simplesmente alterando o dimensionamento da entidade gráfica. Também podemos fazer coisas como animação. Se você não tinha os quadros drone para adicionar squash e alongamento, você pode estar fazendo algo onde você está animando a escala para comprimir quando você está pulando e tipo de esmagá-lo quando você está pousando. Então, a razão pela qual estou fazendo isso é que podemos levar em conta essas atualizações se o sprite estiver sendo alterado durante uma animação, durante um poder, não estamos forçando isso a ser um porque podemos ter dobrado a escala de nosso sprite. O que vamos fazer em vez disso é descobrir qual é a escala atual. Então, se nós dobramos de tamanho, então nós vamos multiplicar isso pelo 1, 1 negativo. Então ainda estamos recebendo essa escala aumentada ou diminuída de nossos sprites. Estamos levando isso em conta e multiplicando para inverter a escala. Então, é claro, se você sabe que isso é algo que você nunca vai fazer. Se você tem certeza de que você não vai estar brincando com a escala do sprite ou o que quer que seja que você está usando esta lógica, você pode muito seguramente, então basta conectar o retorno de sua nota selecionada no crânio e trabalhar dessa forma . Apenas uma coisa que eu queria mencionar, como eu acabei de perceber, que poderia ser um pouco confuso e deixar as pessoas se perguntando por que nós não estamos fazendo esse tipo de maneira manual e codificada com a linha de endereço. O que vamos fazer é saltar para a nossa classe de jogadores. Vamos começar a olhar para gravar a direção em que estamos batendo. As coisas terão sido atingidas. E dependendo de como isso é gravado no momento do impacto, vamos decidir se a placa está sofrendo danos ou causando danos. Agora, neste caso, para simplificar as coisas novamente, vou colocar tudo isso em uma única classe. Então nós vamos ter o jogador completamente no controle se o dano está sendo aplicado, recebeu a dúvida, novamente, em um projeto maior e mais completo, você pode querer ter algo como uma classe danificada em dano agora para disparar alguma comunicação entre as classes, mas vamos tentar manter toda a lógica em um só lugar neste caso. Então, a primeira coisa que precisamos fazer muito semelhante à nossa configuração de detecção. Vamos pegar o componente da cápsula, mas qualquer colisão que seja gravado nesta classe, vamos usar a batida sem compartimento, pois sabemos que estes estão se bloqueando. Portanto, estes serão eventos de sucesso, não eventos de sobreposição. E a primeira coisa que eu queria fazer é jogar contra a outra coisa que estamos atingindo e verificar se é um tipo de inimigo que atingimos. Então estamos fazendo isso usando o elenco para sublinhado BP. E eu vou usar a base inimiga em vez de inimigo. Mas novamente, se você tiver uma subclasses criadas da classe base, isso significa que isso irá explicar todos os diferentes tipos de inimigos herdados com este elenco verificado se isso é verdade. Então, se a coisa que atingimos é um inimigo, vamos precisar fazer algumas coisas, verificar algumas variáveis. Trabalhando com os dados baseados nessa classe enquanto passamos. Então eu não vou fazer é ao invés de colocar constantemente a partir deste pino ou este pino luz para, nós estamos indo apenas para promover isso para uma variável. E eu, isso também nos poupa o potencial de precisarmos reformular também. Vou dar um nome a este, vou chamar este “hit “e depois o “Href”. E, a partir daqui, queremos começar novamente a extrair algumas dessas informações de sucesso. Então vamos dividir a caneta da estrutura para o ataque. E queríamos encontrar algumas informações sobre a direção em que o golpe foi fornecido. Então, em vez de puxar para trás o hit Normal que usamos no passado. Vou mostrar-vos uma outra maneira que vocês possam ver que este tipo de cálculo feito é uma matemática vetorial muito simples para encontrar ou determinar qual direção um impacto de colisão foi detectado. Então é muito, muito simples. Tudo o que precisamos fazer é conseguir a localização de nós mesmos, ou, neste caso, a localização da coisa que atingimos e, em seguida, tirar da localização de nós mesmos. O valor retornado a partir desse cálculo vetorial será a direção em que o hit do código. Então temos essa informação aqui. Podemos ver o local do ataque. Então essa é a primeira parte do cálculo. E um puxão a partir disso e obter o vetor menos um vetor. E então, como mencionei, a segunda parte do cálculo é nossa própria localização. Então nós podemos puxar deste pin e podemos apenas procurar o get act no valor de retorno local. É agradável e simples. Então isso vai tirar a localização do mundo do que atingimos, tirar nossa localização disso. Claro, o valor de retorno a partir disso será a direção em que fomos atingidos. Agora vamos fazer outra depuração e vamos imprimir string isso porque isso não vai ser muito legível, suponho que seja muito fácil trabalhar com esse valor. Então, na cadeia de impressão, vamos apenas soltar isso aumentaria a duração aqui para que possamos ver por que isso pode não funcionar, porque queríamos encontrar a partir desta informação da direção em que fomos atingidos. E queremos um tipo de valor simples com o qual podemos sempre testar, que nunca estaremos dentro de um determinado intervalo. E basicamente nós vamos estar olhando para ver se o hit foi detectado de baixo do jogador ou foi detectado do lado do planeta. Se estiver abaixo do jogador dentro dessa tolerância, então sabemos que isso será classificado como causando dano ao inimigo. Então nós temos, novamente para esse tipo de Mario perguntar, saltar sobre algo que teve causará esse dano. E se ele entrar para o nosso lado, então isso será classificado como prejudicando a nós mesmos. E veremos quando testarmos isso, por que esse pode não ser o tipo de valor que queremos trabalhar imediatamente. Certo, então podemos ver algumas coisas. Provavelmente vendo o que está acontecendo em segundo plano é que estamos recebendo alguns números bem grandes retornados. O que realmente queríamos fazer é novamente, estamos ficando muito familiarizados com o trabalho com valores normalizados estão entre um intervalo de 01. Apenas o que eu estou tentando apontar aqui é que nós precisamos sempre lembrar o que 67 seria em relação ao eixo x vai ser 67 graus, estava trabalhando na escala de algumas coisas. Então o que vamos fazer é ir para a classe meio que o fundo disto como sendo 0. E então temos um grau de entre 01 para o lado, ou entre 0 e menos um para o outro lado. Como exemplo, isso é realmente o que vamos estar procurando fazer. Então a maneira que podemos fazer isso é em vez de usar o número diretamente, nós vamos puxar a partir desta estrutura aqui. E vamos apenas normalizar esse valor. Isso nos dará algo muito semelhante ao que tivemos com o hit normal sábio entre 01, dependendo da direção que está tendo essa informação fornecida. A principal diferença aqui é quando conectamos isso, eu vou dar a isso uma tolerância de 0. E a principal diferença que você verá aqui é que quando estamos fazendo o cálculo desta maneira será adivinhar o cálculo relativo ao ACTA. Então, a coisa que estamos controlando. É a direção da qual vamos ver a batida. Então devemos estar esperando para ver um número menos se estamos pulando em cima de algo e um número positivo, se ele está nos atingindo de cima, se saltarmos para dentro com nossa cabeça e vice-versa, então podemos dizer se Está nos atingindo da esquerda ou da direita muito, muito facilmente. Considerando que com o inimigo, mas o que estávamos fazendo é que esse golpe Normal estava realmente retornando a direção que os objetos que atingimos estavam enfrentando. Se você se lembrar disso. Eu vou saltar para trás em 90 pressione Play. Agora limpou as depurações. E este é um pouco alto demais para nós acertarmos, mas podemos ver que isso é o esperado. Nós batemos de baixo, então estamos recebendo um valor negativo no Zed. E nós acertamos que um de cima é um pouco difícil de se livrar destes trabalhando. Então podemos ver que temos outra coisa útil no chão, tenho que dizer é que estamos recebendo menos 0,15 quando ele está nos atingindo ligeiramente do lado do eixo z. E estamos ficando entre 0. Então, se deixarmos, somos nós da esquerda é quase menos um, então sabemos que é da esquerda. E se você for atingido pela direita, então estamos recebendo um quase positivo. Então o que queremos fazer é trabalhar esse tipo de tolerância onde podemos saltar sobre ele. Podemos ver que como eu pulei na cabeça do bastão que estamos ficando quase menos 1 ou apenas eu tenho exatamente menos um. Então, esse seria o ponto ideal para aplicar danos à classe e que tem sinal de odometria para o bot. Nós também queremos levar em conta com esses valores que podemos obter o meu, bem, queremos que o nosso alcance para receber danos seria também. Então podemos ver que estamos recebendo muitos valores diferentes aqui. Alguns deles podem ser apenas entre uma tomada e receber danos. Então é isso que vamos fazer nesta etapa. Então era isso que precisávamos fazer para obter nossa localização que agora temos as informações para trabalhar. O que vou fazer é promover isto para outra variável. E eu vou nomear essa nova variável direção hit. Mais uma vez, vamos precisar desses múltiplos cálculos completos à medida que chegarmos cada vez mais à direita das notas que mantêm as coisas agradáveis e arrumadas. semáforos iam a todo o lado Vamos promover estas duas variáveis à medida que avançarmos. Este aqui, eu vou colocar um comentário em torno só para nós lembrarmos o que isso está fazendo. Então é agradável e simples apenas para nos lembrar, isso está recebendo o cálculo de qual direção fomos atingidos. E o máximo é só pegar estes e mover isso um pouco para baixo. Como eu sei que nós vamos precisar de alguma lógica ramificada para decidir o que fazemos com o inimigo quando o golpe ou a planta quando os golpes, dependendo do valor que está sendo retornado para. Então a partir daqui, vamos fazer nossa checagem de filial e isso seria y. Primeiro dividimos a lógica para ver se estamos fornecendo ou recebendo dano. E a maneira como vamos fazer isso porque vamos ter nossa direção de sucesso, vai dividir o pino da estrutura. E a maneira mais fácil de verificar isso é que vamos basear a maior parte disso fora do eixo z. Veja um muito simples para começar. Vamos ajustar esse valor à medida que passarmos. Mas, por enquanto, vou verificar se isso é menor ou igual a exatamente 0. Então podemos deixar isso quando eu, isso pode precisar de alguns ajustes à medida que avançamos. Então, se obtivermos esse valor de volta, então o que vamos fazer isso seria classificado como o dano para a classe inimiga. Então podemos puxar daqui. Então, se isso for verdade e obtivermos esse valor retornado, isso seria classificado como o dano ao inimigo. Então eu estou indo muito simplesmente de sua piscina, do verdadeiro pino de execução tanto para o dano aplicado. Lembre-se, não precisamos saber a que classe isso está causando danos. E nós já temos no alvo piolhos ou o médico do dano neste caso será nosso inimigo atingido. O dano mental neste caso, vou garantir que mataremos o inimigo. Então eu vou tirar isso, eu vou procurar por obter saúde. Então, um pouco de uma maneira de trapaça para fazer isso, mas nós vamos apenas passar em qualquer que seja a vida atual dos inimigos como a quantidade de dano a aplicar. Este, pelo menos, dois. Vamos testar isso rapidamente e haverá algumas coisas que eu quero fazer além das mortes. Mas temos o sistema de morte instalado no inimigo. Então isso deve funcionar como nós passamos e testamos que temos. Temos um inimigo desaparecendo. E se acertarmos este de algum lugar acima, menor ou igual a, lembre-se, então temos um tipo muito amplo de alcance que então podemos ver que o dano está sendo aplicado ao inimigo e eles estão sendo destruídos Porque temos essa funcionalidade no inimigo, mas a classe aqui sobre o inimigo morreu. Agora, algumas coisas que eu quero fazer antes disso, e isso é um tipo de polimento e refinamento. Passo 2, o sistema de impacto que vamos ter. Novamente, quando você olha para coisas como Mario e Sonic vai continuar caindo para trás sobre estes bastante. Eles fazem algumas coisas simples, que é, eles vão tirar um tipo de impulso momentum momentum, talvez parar a entrada por um milissegundo muito pequeno, e isso vai aplicar impulso. Então parece que eu fico pulando, porque no momento, estamos passando por isso. E à medida que atravessamos o inimigo, não parece que muita coisa tenha acontecido. É apenas um tipo de preenchimento está apenas desaparecendo. E este é difícil saber se isso foi devido ao que estamos fazendo, se nós realmente interagimos com eles ou se eles simplesmente saíram da existência. Então, o que vamos fazer, há algumas coisas que queremos, então meio que flutua. Então a primeira coisa é que a velocidade está sempre sendo rastreada no movimento do personagem. E eu acho que porque isso não é baseado em física, isso pode não ser um problema, mas no caso de mudarmos alguma coisa no futuro, vamos chegar ao movimento do personagem e definir a velocidade para 0. Então, muito simplesmente percebendo como, por que a velocidade está sendo rastreada no movimento do personagem e o que quer que seja no momento, vamos definir isso como 0. Eu acho que a coisa mais importante para a maneira que temos arquivado para configurar é que vamos arrastar novamente do movimento do personagem e vamos parar o movimento imediatamente. Pegue a entrada que fornecemos atualmente, seja indo da esquerda para a direita, Sarah está fora da velocidade e interrompe qualquer forma de movimento sendo rastreada no atual componente de movimento Too. Então isso vai nos dar um congelamento momentâneo. E a última coisa antes de destruirmos o inimigo, eu disse que vamos adicionar algum impulso. Então, novamente, eu estou indo para Control W, o movimento do personagem como ele vai precisar disso novamente, eu vou puxar a partir daqui e chamar a função add impulso. Vou ligar estes no meio para garantir que isso faça algo que precisaremos para fazer a mudança de velocidade. E apenas para mostrar um tipo muito de resposta extrema a isso acontecendo, eu vou adicionar algo como 500 unidades auto-impulso a ser adicionado ao jogador quando ele se liga é fora do chapéu inimigo. Oh, lá vamos nós. Então eu meio que toquei no lugar errado, mas você viu que temos o impulso para cima, então tente este. E então nós temos, quero dizer, ela parece, hey, eu pensei que eu ia ser um pouco mais extremo 500 looks como eu poderia ser um bom valor para ir com isso. Então estamos parando esse impulso que temos. Estamos colocando o, o personagem momentaneamente e, em seguida, aplicando esse impulso para cima. E, na verdade, acho que parece muito bom. Eu ia fazer algo mais complexo com isso. Tomando na direção em que atingimos as coisas de adicionar um impulso ou bater para trás. Mas eu acho que por agora isso parece muito bom como uma resposta a saltar da cabeça do inimigo. Então, com isso, eu acho que esta é uma seção quase embrulhada. Então vamos colocar um comentário sobre isso apenas para novamente. É o que isto está a fazer. Muito simplesmente, vou dizer que esta é a lógica, contabilizando o que acontece quando danificamos o inimigo? Agora, algumas coisas vieram à mente aqui. Algo que podemos querer fazer semelhante ao nosso inimigo, mas vamos ao Festival, dar um devido uma vez por noite que alguém tem. Então eu fui sobre me certificar de que nós não estamos repetindo isso repetidamente. E outra coisa é que queremos ter certeza de que estamos rastreando isso menos ou igual a consulta aqui. Agora, no momento, estou meio que adivinhando. Com o que estamos trabalhando, uma coisa muito simples que poderíamos ter feito é deixada na cadeia de impressão. E cada vez que batemos em algo, quando estamos testando coisas diferentes, como podemos anotar o que parece certo, que teria classe faz algo que teríamos sentido como um tipo de indulgente para a classe Como o planeta esfria os danos , um, qual desses pode ter se sentido melhor para ser um dano recebido do inimigo. Então eu vou puxar a partir daqui e nós fazemos uma cadeia de impressão e muito semelhante a antes, eu vou apenas definir isso para ser muito maior para a duração para que possamos ler isso um pouco melhor. E o que eu vou fazer é eu vou puxar na direção do quadril mas o pino da estrutura e em vez de obter toda a informação, porque isso parece um pouco pesado na tela. Nós só estamos realmente interessados neste estágio no eixo z. Então vamos ligar isso ao ZED. E como eu disse, uma vez que fizermos isso, vamos nos certificar de que só faremos tudo isso uma vez. E eu não acho que nós sequer precisamos redefinir isso por enquanto, pelo menos por enquanto, quando estamos apenas testando, isso significa que só seremos capazes de testar contra um inimigo, mas isso é perfeitamente bom. Quero dizer, se você quisesse, nós poderíamos, embora não tenhamos tudo preparado e pronto para ir, nós sempre podemos tirar disso. Então, se isso for verdadeiro ou falso, este estágio sempre redefinirá isso e nós vamos apenas soltar isso mais tarde porque é claro que nunca queremos que este seja um tipo de código pronto para produção com o qual estaremos trabalhando. Então eu vou entrar aqui e podemos testar de novo. Sabemos que isso está funcionando, mas os 0, 1, 2 sentiram por ele, certo? Talvez um pouco branda. E, claro, 0,9 é definitivamente alto o suficiente que também combinou diretamente em cima da bunda. Agora, à medida que passamos, podemos testar isso, podemos ajustar e começar a ver. Então, digamos que o valor de menos 0,1 pode se sentir bem. Então, agora, se começarmos a fazer mais alguns testes com o dano do jogador e descobrirmos que isso não está sendo acionado quando sentirmos que será, então teremos algumas informações sendo alimentadas por cuidados com os quais podemos trabalhar. Então, para os danos, vamos fazer uma lógica muito semelhante. Vamos mais uma vez querer parar todos os movimentos. Então vamos entrar em contagem para a velocidade e o movimento do Componente de Movimento de Caracteres ao mesmo tempo e também aplicá-lo algum impulso. Então nós podemos realmente copiar e colar todas essas dinâmicas pressionando Control W novamente, para copiar todas essas, eu vou tirar isso daqui. Então precisamos realmente conectar isso, em apenas um momento. E, e o que queremos fazer, acho que isso vai ser exatamente o mesmo. Vamos querer fazer um pouco de cálculo para o impulso de que não queremos que isso vá direto para cima. O que queremos quando a planta está danificada. E especialmente porque o que foi definido para se mover constantemente em nossa direção. Não queremos que seja neste estado em que ter o movimento parado e ficaremos presos neste tipo de estado constantemente sendo atingidos pelo inimigo, o que obviamente vai ser bastante irritante para o plano. Eu só vou mover o bastão Dine como isso é muito difícil de testar contra. Então, se nós viermos para demonstrar como isso seria e os morcegos ficaram um pouco presos. Ok, estamos testando, é este, aquele. Então, já podemos ver que realmente isso é nesta fase. Temos aquela fase em que eu não olhei para os valores que eram. Mas sabemos que isso vai ser um pouco brando demais. Então eu não estava tentando matar uma das melhores facadas. Matou-o. Então 0,4. E, de fato, para o NIH, vamos pular os alunos completamente porque eu posso ver que isso causará alguns problemas. Então eu só vou me certificar de que os morcegos estão alinhados. E quero que este seja fácil de testar. Então eu vou colocá-lo aqui. Ok, então não queremos que o jogador vá direto para cima. Porque se formos diretos assim, podemos ver que ganhamos uma morte grátis depois de perder um pouco de Saúde. Vamos matar de graça o inimigo. Então não é um tipo ideal de resposta a isso. E o que vamos fazer é garantir que levemos em conta a direção em que fomos atingidos e vamos aplicá-la um pouco batida para nós. Então empurrá-lo o jogador para longe do inimigo, o que vai dar ao inimigo tipo de apanhar-nos e não nos colocar em um ciclo constante de perder a saúde e ser atingido pelo inimigo sem ter qualquer controle sobre o nosso jogador. Então, para fazer isso, eu vou puxar do impulso e fazer um vetor. A principal coisa que queremos mudar aqui vai ser o valor x que, que será aplicar uma força para. Então o que vamos fazer é pegar a direção da batida. Vamos dividir o pino da estrutura aqui, vamos puxar daqui e obter um flutuador multiplicado por um flutuador. E então nós vamos realmente precisar de outra multiplicação por flutuador. A razão é que queremos ter certeza de que estamos indo em uma versão negativa na direção oposta da qual fomos atingidos. Então vamos pegar o que quer que isso fosse, multiplicá-lo por menos um, e então multiplicar isso por um valor que eu acho que vai ser mais ou menos o mesmo que a nossa batida aqui atrás. Então, se definirmos isso para 500, ver como se sente, e podemos entrar e testar isso contra o bastão. Certo, então isso não vai funcionar porque estamos sendo empurrados pelo chão. Precisaremos de um pouco desse empurrão vertical também. Então vamos ser empurrados para cima e para trás para ter certeza de que podemos obter alguma velocidade sendo acumulada aqui. E isso é exatamente o que eu queria. Então você pode ver que lá como o SS tipo de cabeça, empurrar para trás e para cima, que nos dá a velocidade que precisamos para fugir e escapar do bastão. E isso significa que nós não vamos levar múltiplos sucessos constantemente e estar nesse tipo de estado de ficar preso com o inimigo. Então, queremos ter certeza que isso aconteça do outro lado também. Então, porque estamos invertendo esse impulso que está funcionando perfeitamente. E novamente, eu acho que esse é praticamente o tipo certo de força sendo aplicado em ambos os lados. Temos aquele belo golpe lá de cima. Então eu acho que o que podemos fazer, porque aqueles que trabalham, eu vou apenas promover isso para uma variável, os 500 que temos, e eu vou chamar isso de nossa volta para nós. Podemos mudar isso para casos diferentes, se quiser. Bem, eu acho que neste estado todos eles funcionam muito bem com o mesmo valor. Então eu também vou dividir a estrutura pino este em vez de usar estes números mágicos. Por que podemos esquecer o que isso realmente está fazendo. Podemos controlar dragão, espero que estes valores aqui, o que não me deixa fazer. E podemos ligar isso para sabermos que o que estamos fazendo é aplicar uma reversão para nós como um impulso para o personagem quando os inimigos estão sendo atingidos. Então, adicionar esses nomes de variáveis apenas mantém coisas que novamente, um pouco mais legíveis e fáceis de manter o código. Então, passo final, temos nosso impulso calculado. Agora, mais uma coisa que queríamos fazer, vamos voltar a controlar W, o dano. E como fizemos no passado com nosso teste para a saúde, lembre-se que tínhamos isso na entrada. Sabemos que podemos basicamente levar isso na verdade. Este seria um bom momento para cortar o código da base para Stein aqui, porque queremos aplicar danos a nós novamente com um certo valor. Então vamos dizer que é quando vai ficar perfeitamente bem. E como eu disse, não queremos que isso seja no jogo final, então vamos remover isso. E esse é o momento perfeito para ver lembrar de fazer isso. Para que possamos entrar. E se estamos sendo atingidos de lado, quando eu começo a perder saúde, mesmo se formos atingidos de cima, algo estranho aconteceu lá. Então vamos investigar isso em um momento. Mas que temos de lado, pelo menos estamos tirando esse dano. Se formos atingidos de 0, se os atingirmos de cima, então vamos tirar essa saúde. Vamos dar uma última olhada aqui. Vamos soltar este nove. Acho que vamos ligar o backup do V1 e precisamos encontrar um bom nome para o que isso está fazendo. E vamos chamar isso de ambos os, então queremos que ambos para redefinir que fazer uma vez que vai pós-civil definir um comentário em torno disso. Tão agradável e simples, lembre-nos que é por isso que os danos da planta estão sendo contabilizados. Isso é meio que fazer uma verificação de sucesso aqui. Então o que eu vou fazer, e na verdade, apenas para ter certeza de que isso não está sendo atualizado mais do que deveria. Eu só vou mudar a direção ou o lugar que foi, se eles fizerem uma vez esfriado. Se isso for bem sucedido, então só queremos definir a direção do golpe uma vez por inimigo que atingimos. E se for esse o caso, criaremos outros eventos personalizados. Vamos nomear este, redefinir, acertar cheque. Mais uma vez, é o que estamos fazendo. Estamos reavaliando a capacidade de verificar se atingimos algo reescrito, note que, e chamaremos essa função em ambos os casos aqui. E queríamos ter certeza de que fizéssemos isso no verdadeiro e no falso. Claro, se nos esquecermos de fazer isso uma vez, então podemos redefinir depois que os inimigos forem danificados. Mas se recebermos danos, então isso não vai ser reinicializado e nunca mais poderemos sofrer dano novamente. Certifique-se de que conectamos este backup, provavelmente pode pular a cadeia de impressão por enquanto. Eu acho que o que eu encontrei estava funcionando muito bem, em algum lugar entre menos 0,25. Se você pensar sobre por que isso é sobre o jogador, que vai ser quando nós assobiar, vagar em torno desta zona na Classe I de baixo para o nosso tipo de cantos do jogador. Isso vai ser um bom ponto para aplicar danos. Em qualquer outro lugar, esperaremos que os inimigos nos danifiquem. Que estamos sofrendo danos lá. E isso está se sentindo muito bem. Então acho que é assim que queremos que isto seja aplicado. Então isso me senti como um bom ponto tomar danos. Era eu encontrando eles. Um pouco demais de força aplicada lá. Pode haver algumas esquisitices com a força sendo aplicada a algo para você brincar e testar isso. Mas eu acho que, tanto quanto as respostas de resultado de sucesso vai, e onde estão os pontos doces para a aplicação e receber danos? Estou muito feliz com eles nesta fase. Novamente, tudo isso tem a intenção de apontar a direção de como você pode começar a procurar criar esses efeitos. Você já vai ser esperado para pegar isso e melhorar o que está sendo coberto aqui. Eu estou realmente fazendo seu próprio tipo de sistema de danos à saúde e os diferentes efeitos e coisas que estão sendo jogadas. Uma coisa que eu só vim à mente estava olhando isso é que isso ainda vai ser problemático. Isso não está fazendo nada. Então, apenas um retrocesso rápido, eu disse que vamos apagar a cabeça do Jack porque tudo isso está acontecendo tão rápido que, essencialmente, a menos que os inimigos morram, isso funcionaria com o inimigo morrendo Porque assim que isso aconteceu, perdemos nossa referência de qualquer maneira. E qualquer retorno falso, eu só vou redefinir isso para ser um valor nulo. Mas potencialmente ter a cabeça de jogo pode acontecer várias vezes porque isso está acontecendo em uma parte minuto do milissegundo. Essencialmente, o que queremos fazer é a partir disso, independentemente da resposta. Então, antes de entrarmos na checagem da filial, vamos lançar uma sequência. E a partir da sequência vamos permitir que ele execute suas lógicas, verificar o que está sendo atingido novamente. E então muito semelhante ao inimigo, volta ao que realmente queríamos fazer isso é um atraso. Então, certificando-se de que temos uma pequena piscina antes de outro cheque. E foi isso que a abordagem inicial. Então eu meio que negligenciado aqui momentaneamente não estava contabilizando para nós queremos esse tipo de atraso para que por um certo período de tempo nós não somos capazes tomar ou mesmo calcular novos resultados de sucesso. E depois vamos fazer a mesma coisa. E isso também significa que só precisamos fazer isso uma vez. Então, agora podemos fazer a nossa verificação de reinicialização aqui. E nós podemos fazer isso apenas uma vez, independentemente dos resultados aqui, eu estou indo de novo, nós podemos brincar e garantir que as coisas não estão acontecendo muito rápido para este 0.1 de segundo ser muito baixo. Mas acho que vai ficar tudo bem. Então eu meio que até fiz, você pode ver que pela insulina eles e que foi um atraso tão pequeno antes que isso seja reiniciado que nós ainda vamos bater segunda vez. Então acho que vai ficar tudo bem. O principal, como eu disse, este caso teria funcionado. Este caso não teria funcionado porque isso acontece tão rapidamente, está imediatamente redefinindo-o e ainda podemos obter esses múltiplos acertos sendo feitos por verificação de colisão aqui. 17. 17 - morte do jogador: Com o sistema danificado e eu totalmente implementado. Temos o inimigo de volta a receber dano e ser morto ou removido do mundo. Temos a maior parte dessa configuração e pronto para ir para o jogador. É claro que no momento em que a praça só recebia danos ainda iria chamar esta cadeia de impressão padrão, que é apenas nos lembrar na função de iodeto de jogo, então nada foi configurado. Então vamos pular para lá e podemos começar a trabalhar nisso. E vamos considerar o que precisa ser feito para o planeta morto no cenário e como podemos implementar isso. Certo, a primeira coisa é que sabemos que já estamos rastreando isso. B é o valor morto, o que vai ser muito importante para nós. Então vamos excluir a string de impressão para começar. Vamos atacar, o B está morto. E nós vamos ter certeza de definir isso para ser verdade. Por isso, mais uma vez, que sabemos que todos os nossos controlos ou se devemos ou não sofrer mais danos se baseiam nisso. Nós podemos realmente remover isso de, hey, nós não precisamos fazer isso duas vezes. Isso provavelmente caberia um pouco mais bem dentro da função lidar com a noite de iodo. Mas isso significa que isso agora é rastreado e nós fomos qualquer dano adicional e fomos jogar essa resposta que poderia configurar não mais de uma vez. Então dentro alicate morto, aplicar morreu. Vamos pôr o Booleano aqui. Isto é como eu mencionei, um pouco mais limpo. Agora a primeira coisa que eu acho que eu quero fazer é pegar a onda de entrada da praça. Nós não queremos que eles sejam capazes de continuar correndo em qualquer tipo de entrada final para isso. Então a primeira coisa que vamos fazer é chamar uma função no planeta, controlar isso. Então usamos o controlador get Planet e vamos chamar a função de entrada de desativação. Certifica-te de que isto está ligado ao sítio certo. Então o controlador do jogador vai ser o controle PI, o alvo, eo alvo real para a entrada a ser desativado é nós mesmos. Então, agora, quando morrermos, isso significa que se formos para frente, para trás ou algo assim, não seremos capazes de pular ou mover em qualquer direção. E novamente, isso é muito simples, apenas testável que eu vou fazer é voltar para o dano e irá promover isso para uma variável bem, o dano base para quando o jogador está danificado. Então, se promovermos isso para uma variável, podemos mudar isso de qualquer lugar, que tornará isso um pouco mais fácil para nós. E eu vou chamar este de aplicar um dano. Agora, idealmente, vamos mudar isso com base no que estamos atingindo. Mas novamente, projeto muito simples para começar as coisas indo. Isso pode ser facilmente alterado mais tarde, mas isso só nos permitirá NIH muito rapidamente mudou isso para um 100. E isso significa que quando estamos trabalhando dentro de nosso planeta morreu função. Se você quiser testar isso agora, podemos entrar direto no jogo, certo, atingido pelo inimigo. Podemos ver que morremos. Não vou continuar tentando me mover, pular, movimento, tudo isso está desativado. Então, a primeira verificação é feita aqui temos este bit funcionando. Então, se você se lembra anteriormente, Eu mencionei que eu queria replicar novamente que Mario ou retro sônico tipo de animação 2D onde você voa para o ar e fora da tela. Então, já temos algo muito parecido com trabalhar. Mas em vez de usar o impulso do movimento do personagem, desta vez eu vou mover a coisa toda. Então vamos pegar os componentes conceituais. E como estes são os componentes raiz, obviamente tudo está aninhado abaixo disso para movimento. Vamos agarrar isso e impulsionar isso. Nós também vamos ter que lembrar de desativar toda a colisão para nos permitir fundir através do chão. Então, se controlarmos o arrasto em nossos componentes de captura, nós podemos, antes de tudo. Para nos permitir fazer isso, precisamos definir o conjunto, simular a física como verdadeira. E nós vamos ligar esse backup de AVC. Se não fizermos isso, vamos receber um aviso quando tentarmos fazer algo como adicionar forças ou impulsos a algo que, por padrão, não tem a simulação física ativada. Podemos ver aqui, simular física é definido como falso, que significa que se você tentar fazer qualquer coisa física relacionada, nós recebemos um aviso ou uma mensagem de erro surgir. Vou pressionar o Controle W para pegar o Componente Cápsula de novo. E agora que temos isso no lugar, podemos puxar a partir daqui e vamos fazer o impulso de anúncio funcionar. Muito parecido com o que fizemos através do nosso movimento de personagens. Combine-os, podemos fazer a mesma coisa aqui. Vamos definir a mudança de velocidade para verdadeira, vamos dividir o pino da estrutura aqui. E o imita o impulso desta vez um pouco mais dramático. Então vamos configurar isso algo como 800 ou talvez 900. E por isso é claramente mais alto do que apenas ser atingido. Então, novamente, se entrarmos na imprensa Play, podemos testar isso. E não está funcionando. Lembre-se que mencionei que a outra coisa é a colisão, então acho que vai ser alta o suficiente. O problema é que fomos imediatamente tipo de socos para fora do ar porque ainda estamos captando nossas respostas de sucesso. Mas quero dizer, isso é bom termos alguns resultados engraçados fazendo isso. E estamos testando que as coisas estão funcionando e como elas estão respondendo à medida que avançamos. Então, estamos apenas correndo por aí. Não é bem a resposta que queremos, mas estamos nos aproximando. Agora, mais uma vez, queremos ter a certeza de que tudo isto ser contabilizado na direcção certa. Então a primeira coisa que queremos fazer, não queremos que todos eles sejam jogados potencialmente antes de desativarmos, eu colidiria. Então eu só fiz um pouco de espaço aqui. Vou para o Controle W, o componente de capital novamente. Novamente, isso é apenas para salvar y está indo de vários lugares. Isto começa a parecer um pouco confuso. Vou puxar daqui, vou definir a resposta à colisão. Podemos definir isso para todos os canais. Nós não vamos precisar nos preocupar com isso perdendo nada porque, claro, nesta fase com mortos, tudo o que sabemos é que queremos que isso ignore as respostas de colisão em todos os canais. Por canais. Se você não estiver familiarizado demais com as configurações de colisão, temos as Predefinições de Colisão. Estes são os canais que temos rastreando, sobreposição e bloqueio e as diferentes coisas que podemos rastrear, que seriam coisas como remoldar, verificar, lançar na água se você bateu em algo ou olhar em algo sobreposto para coisas que não bloqueiam os outros objetos, mas apenas detectam esse evento no mesmo espaço. E depois bloquear, que é o que estamos fazendo enquanto movemos fisicamente as coisas, o que potencialmente lhes atinge com uma resposta quase física. Então vamos definir tudo isso para ignorar. Então, nenhum desses bloqueará mais. Você pode ver que a maioria deles estão configurados para bloquear. Vamos definir isso para ignorar, o que significa que também vamos começar a fazer coisas como cair pelo chão. Nós nem vamos responder à resposta de colisão do chão, que é ideal porque lembre-se que eu disse que parte da configuração está nos fazendo cair fora do nível. Então, com saltar para cima e depois fluir pelo chão. Então isso é muito bom. Podemos ver novamente mais questões aqui. Então o que estamos tendo um problema com faca é que a câmera está colidindo com coisas com as quais não tivemos problemas antes. Então o que queríamos fazer, se você quisesse manter a câmera conectada e impedir que isso acontecesse. Vamos para a primavera e podemos ver que temos o teste de colisão ativado. E basicamente o que estava acontecendo quando estava cintilando, a primavera começou. Lembre-se que temos este braço longo aqui, está tentando se ajustar para fora do caminho se ele está enfrentando o mundo e detectando que há algo que podemos potencialmente estar colidindo. Então, como notar que quando eu cortar através disso e ele está tentando mover a câmera, que é por isso que parece um pouco GEC. Podemos parar isto realizando o teste de colisão do fazer. E novamente, vamos tentar novamente, ver os novos resultados. Então o que devemos ver agora é que ainda vamos fundir nos jogar, mas tudo bem. Podemos mudar o Y de alguma coisa se quisermos anular isso. Mas o principal é que não temos a câmera pulando por aí. Geralmente. Isto vai mostrar que não temos um nível inteiro à nossa volta. Isso não é o que você estaria acostumado nesses jogos da velha escola. Então o que vamos fazer em vez disso é apenas um fixo. A maneira que eu vou abordar isso é nós vamos pegar a mola Eu sou componente. Vamos tirar daqui e usaremos o desprendimento do compartimento. Pronto sabe a que componente ele está anexado, está anexado ao Componente Capsule, como você pode ver aqui na hierarquia. Mas isso vai levar a primavera. Ele vai se separar do que está anexado à alteração, indo para manter a localização e rotação, talvez seja necessário atualizá-los e ele vai ficar onde está no mundo. E isso é mais o que você está acostumado a dizer, é o jogador tipo de voar para cima e para fora da tela. Então isso é relativo. Não queremos que isso seja relativo porque é atualmente relativo ao Componente Capsule. Queremos que isto mantenha a sua posição no mundo. Então eu não tenho onde ele estava em relação aos seus próprios componentes. Se o braço da mola for movido para cá, queremos que ele fique aqui quando o jogador morrer porque você viu esse tipo de voar até o canto da tela. E agora vamos. Então agora temos o jogador pulando a câmera dizendo onde estava. E estamos evitando toda essa questão do recorte. Ainda podemos ver que o jogador está atravessando o chão. Mas, novamente, neste caso, não muito importante se você quiser. Quando isso acontece, você pode fazer algo tão simples quanto você pode adicionar um pequeno impulso no y. Então, se nós apenas adicionar um impulsivo como um ou algo, isso vai nos colocar um pouco à frente ou atrás do chão. Os inimigos desapareceram. Aquele não me matou. E eles vão muito pequeno impulso. E novamente, se você quisesse que eles voassem atrás do chão. E você pode ver que os diferentes tamanhos que ele caiu atrás da colina. E se você quisesse, você poderia ser um pouco criativo com isso. Você já viu como adicionar diferentes deslocamentos. Novamente, ele usando um seleto, você poderia adicionar algo como uma seleção booleana aleatória. E 50, 50% da chance que você poderia fazê-los voar para a frente com uma nota seletiva aqui. E o mesmo para o x. se você achar chato que eles estão sempre indo direto para cima e para baixo. Você poderia adicionar uma chance aleatória para eles voarem para a esquerda ou para a direita. E as últimas coisas que tenho feito todos esses testes quando ainda sou perfeito. Ainda assim. Se estamos nos movendo para trás, você pode ver algo estranho como isso acontece. Temos um pouco de força demais com forças diferentes sendo aplicadas umas às outras. Então eu acho que o que precisamos fazer antes de tudo isso acontecer, nós também vamos parar esse movimento. Então vamos desativar a entrada, parar o movimento que temos. E só para dizer, voltando a isso muito rapidamente, se você quisesse aplicar impulsos diferentes ao x e ao y e aplicar isso aleatoriamente. Então eu não vou passar por isso nesta fase, nós fizemos coisas muito parecidas. Na maioria das vezes, este seria um bom tipo de testes de aprendizagem via Sul entre tópicos. Basta dar os vídeos de puxadores e ver se você pode implementar isso sozinho. Tome alguns deste como noites que temos usado, alguns do chat aleatório pode juntá-los e você praticamente tem o resultado para alguns em impulsos aleatórios têm. Então, a próxima coisa com essa parada do impulso que já temos isso sendo feito, estamos prontos copiando código aqui, o que nunca é ideal. Então o que vamos fazer, provavelmente familiarizado com isso, não tão bem. Vamos selecionar dois desses. Vamos desmoronar isto para uma função, e vamos nomear a este o Movimento do Conselho. Claro que vamos apagar esses “Dine Metade”. Podemos arrastar os movimentos do conselho e ligamos isto ao falso alfinete. Então, fazer exatamente a mesma coisa pelo impulso é ligeiramente diferente. Poderíamos passar em diferentes substituições, se quiséssemos. Mas acho que, neste caso, estes dois são únicos o suficiente, não um deixando cair isso em uma função. E eu acho que isso seria um pouco mais de um obstáculo para o progresso do nosso código, então nos ajudaria. Mas neste caso podemos pegar o movimento do conselho mais uma vez, entrar em jogo iodeto, puxar daqui, descobrir que o movimento do conselho funciona e ligar estes entre os dois pinos de execução. E isso significa que agora, se tentarmos isso de novo, o que devemos ter é que o movimento foi cancelado. Podemos dizer que não é o caso. Então isso não é filosofia Up. Eu acho que o problema é que nós não estamos recebendo velocidade do movimento do personagem. Em vez disso, estamos a obter velocidade do componente da cápsula. Então nós podemos substituir ou apenas para um tipo de falha e 0 bugs, que é a opção que eu vou escolher. E o que queremos é que o componente de captura seja um nome ligeiramente diferente. É a velocidade linear. É a velha velocidade linear da física que estamos procurando. Então, a maneira mais fácil é apenas digitar linear, ligeiramente longo. Mas queremos definir toda a velocidade linear da física para 0. E então podemos tentar de novo. E acho que isso deve resolver tudo de bom. Então, se formos encontrar o taco, sim, lá vai você. Então vamos nos livrar de todo o movimento. A velocidade estava sendo calculada no componente de captura, não no movimento do personagem. Mas, novamente, pode haver casos em que haja mudanças sugerindo um caso que eu vou deixar isso em. Mas podemos ver que, independentemente de como estamos nos movendo, quando se trata disso, vou aplicar essa força o máximo que queríamos fazer, que é uma velocidade vertical para replicar a velha automação da morte da escola. Então isso é praticamente tudo o que você pode, como eu mencionei algumas vezes agora você pode entrar. Já parei de publicar isso. Outra coisa que você deve ter notado é que quando morremos, estamos apenas entrando nas animações de salto e queda porque é isso que está sendo rastreado. Não temos nada como animação de morte. Então, se você quiser importar um, você poderia trazer isso. E como eu mencionei, adicionar novos estados de animação deve ser tão simples quanto adicionar um novo movimento Estados, que são nossos enums que nós expusemos aqui, poderiam adicionar após o salto, antes que você possa ter uma animação de morte e, em seguida, adicionar isso para ser rastreado. Então, novamente, o simples como na funcionalidade flip book atualização jogador, verifique aqui e você pode até mesmo fazer outro ramo inteiramente. Então, em vez de adicionar coisas a este fluxo de lógica, poderia ser tão simples como se estivesse morto, então reproduzir a animação da morte ou parar toda a animação. Se não estiver morto, continue a verificar qual animação baseada em movimento devemos avaliar. E, em seguida, apenas adicionando aquele pino extra aqui para a animação da morte. Então, novamente, apenas para recapitular por que adotamos esse tipo de abordagem automatizada, não totalmente automatizada, mas você pode ver como é muito mais fácil conectar apenas um novo estado de movimento. E teria sido ter um conjunto extra de lógica ramificada para o lado. Então, entre os tópicos novamente, se você quiser pausar e fazer esse tipo de coisa só para esse tipo de polimento refinado, então sinta-se livre. Não é algo que vamos adicionar, nos tópicos. Mas isso significa que, nesta fase, quando eu terminar com os inimigos e o jogador, eles estão realmente interagindo praticamente como esperado. E como queríamos, agora podemos passar para o tópico final, que vai ser as aulas interativas, os captadores para reabastecer a saúde, e que os itens de primavera atuam como uma espécie de salto e fornecer um nível ligeiramente mais interessante para manobrar ao redor. 18. 18 - base interativa: Para movê-los para as classes interativas será olhar para isso de uma maneira muito semelhante às nossas classes inimigas. Então vamos ter alguns tipos diferentes de classes interativas no projeto. Portanto, podemos derivar uma grande parte da lógica geral de uma classe base que diz que vamos ter várias classes interativas onde só temos um inimigo. Temos o flip book pronto para o nosso hot and springs que sempre que tivermos duas aulas disponíveis, e é claro que você pode expandir isso para começar. Vamos apenas nos certificar de que mantemos a hierarquia do projeto, é agradável e arrumado. Então vamos criar uma nova pasta chamada interactives. Dentro disso, estaremos criando nossas classes principais. Então o primeiro vai ser a nossa classe base interativa. E, claro, o que realmente precisamos que isso faça é existir no mundo com o potencial de interagir com o jogador. Então, para qualquer pessoa familiarizada com Unreal, você provavelmente já está ciente de que, tanto quanto os caras da hierarquia de classes ou a estrutura de classes dentro do Unreal, o tipo mais básico de vidro que pode existir no mundo com um transformar e esse tipo de entidade física é uma classe de ator. Então nós vamos descer e criar uma nova classe de projeto do tipo Ator. E eu vou nomear este que BP sublinhar base interativa. Como eu disse dentro desta aula, é aqui que queremos levar essas considerações. Então, as coisas que serão genéricas entre as diferentes classes interativas potenciais para este projeto, eu só posso ver duas variações diferentes que teremos. E entre eles, há apenas duas coisas que eu posso ver que eles precisam fazer. Um deles vai ser mais um problema com a forma como os flip books são configurados. Então, meio que funciona em torno disso. E a segunda é a interação real que vamos precisar de algum tipo de colisão ou do jogador para fazer com que essa interação seja disparada. E a questão vem do fato de que os flip books são automaticamente configurados para jogar e esse loop. Então vamos precisar explicar isso porque o coração vai parecer muito bom em loop. Mas acho que na primavera, é claro, não queremos que isso jogue constantemente. Primeiro de tudo, se dissemos que são os componentes que vamos precisar para isso, tudo o que realmente precisamos é a representação visual para a animação e o ato colidindo. E eu vou separar estes dois Atos ou o componente colidindo. E eu vou separar ambos para que não precisamos nos preocupar fornecer uma animação de sprite no flip book animado. E isso seria alguns núcleos de desempenho potencialmente extras que não precisamos. O que vamos fazer é encapsular todo o flip book dentro de um planador cubo. Então, para que os componentes comecem, vou adicionar um novo componente de cena, apenas arrastando e soltando-o em cima do componente padrão ou o componente de aparência padrão. Isto é puramente para que tenhamos como um ponto de ancoragem e uma transformação para os outros componentes se sentarem. Mas não precisamos das representações esféricas do outdoor, então vamos nos livrar disso com um componente de cena. Em seguida, em cima do componente pecado vai colocar o nosso livro flip papel. Então esta será a animação para os diferentes sprites. E, em seguida, certificando-se de que temos o livro flip de papel selecionado. Podemos usar a lista de novo e encontrar um colisor de caixa. Então esta será a coisa com a qual o jogador irá potencialmente interagir. E vou dar a este o nome de colisor interativo. Isso só vai torná-lo muito mais fácil de atualizar novamente, voltar vai ser muito claro por que temos um livro flip papel é um jogo 2D. Precisamos dessa representação visual. Pode não ser tão claro o que o colisor está fazendo. Então, se nomearmos isso com precisão agora, vai tornar as coisas um pouco mais fáceis quando voltarmos para o projeto. Então a primeira coisa a ser contabilizada será esta configuração de colisão. Olhando para o livro de papel flip para começar, podemos ver que a colisão que o canal está programado para bloquear tudo. Então, se nós fôssemos adicionar um flip book e ele tivesse alguma informação de colisão, então isso poderia potencialmente, novamente, levando em conta coisas como o componente primavera quando tivemos os EUA dentro, que potencialmente bloquearia o personagem para se mover em vez de adicionar que impõe combiná-lo, impedi-lo de se mover ao redor do nível. O que faremos em vez disso é descartarmos essa caixa de opção Predefinições de Colisão e mudaremos isso para nenhuma colisão. Portanto, isso não colidirá com uma ferramenta que não forneceria nenhum custo de colisão. Eu também tenho certeza de que nós desmarcamos eventos sobrepostos caso alguma coisa mude. Então, uma das colisões vai ser feita isso do nosso planador interativo. Se olharmos para aqui, podemos ver que isto está definido para sobrepor toda dinâmica. E podemos fazer isso um pouco mais barato se considerarmos como vamos usar isso. Então, no momento, podemos ver que o tipo de objeto é um tipo dinâmico do mundo em si. Então isso significaria que, no momento, as outras classes interativas poderiam potencialmente sobrepor-se umas com as outras como fariam com veículos, qualquer coisa destrutiva. Poderia ser coisas como, eu acho que a classe inimiga é uma provavelmente bem dinâmica também. Então isso pode ser acionado por um inimigo. Então, o que queremos fazer é mudar isso para personalizado a partir do menu suspenso aqui. Vou pegar este botão aqui, o ignorar o de cima. Se você pegar a linha superior, ela mudará todas as opções abaixo. Então eu vou fazer isso ignorar tudo, exceto a piscina. Então a coisa que o jogador está controlando é a única coisa com a qual queremos que isso interaja. Portanto, isso significa que nem mais nada no mundo vai acionar essa funcionalidade vai tornar isso um pouco mais barato para ser executado. E também significa que não precisamos considerar tantas eventualidades diferentes com as colisões. Ok, então essa é a configuração dos nossos componentes. Agora podemos passar para o Gráfico de Eventos como fizemos no passado. Algumas coisas que podemos fazer aqui, podemos nos livrar das funções que sabemos que não usaremos, que serão essas duas. E nós só temos essas duas considerações que eu mencionei que queríamos fazer, ou um piso como uma funcionalidade genérica para toda a classe interativa potencial. Então o primeiro que eu acho que vai abordar é essa correção. Então, da maneira que isso funciona, vamos apenas saltar de volta para a janela de exibição rapidamente. Se você não está familiarizado com isso, se nós selecionamos um sprites para o nosso flip, nós temos os gostos e nós temos a primavera. Então, quando colocarmos isso no mundo, isso fará exatamente o que temos aqui. Isso vai tipo de postar e bombear com a caçada, que eu acho que parece muito legal no contexto de uma espécie de carne para fora do seu mundo. É muito bom ter esses flip books animados e sprites, tendo coisas como folhagem se movendo ao redor, os inimigos, andando para trás e para a frente os pickups tipo de animação neste tipo de postagem aqui traz seu nível e faz com que o laboratório já caiu animado e trazê-lo à vida. Então isso não é algo que eu queria juntar. No entanto, se considerarmos a primavera do FB, é claro, não queremos que isso surja constantemente nada enquanto apenas caminhamos por ela. Queremos que isto apenas reaja. Então isso vai ser muito reativo, é por isso que removemos o tique-taque do evento. E queremos que este só reaja ao reproduzir esta animação uma vez quando estiver realmente adicionando impulso ao jogador. Então esta será a primeira coisa que consertaremos. E eu vou desfazer isso como com os inimigos. Eu quero ter certeza de que se nós tivermos uma esquecer de mudar isso nas classes derivadas, é muito claro que nós não demos a este um flip book porque haverá, bem, eles foram estar mostrando qualquer coisa. Então o que vamos fazer é puxar o livro de papel que vai controlar, arrastar isso para dentro Vamos puxar daqui. Vou procurá-lo em loop. Então podemos fazer duas coisas bem, poderíamos ter apenas procurado, definido loop, ou podemos verificar se ele está looping. Tudo o que vamos fazer é imediatamente no Begin Play Set, quer queiramos ou não fazer loop. Conecte isso à caneta de execução desde o início do jogo, depois o novo loop, eu vou selecionar isso e vamos promover isso para uma variável. E eu vou apenas nomear este como reprodução automática. Eu vou tornar isso público bem e compilar isso e apenas certifique-se de que, por padrão, vamos supor que nós queremos que tudo para jogar automaticamente e então nós vamos entrar e nós vamos mudar este andar, a classe primavera. Então o que isso vai fazer é isso vai entrar e ele deve verificar se ele deve continuar loop indefinidamente ou se ele deve ser um tipo de jogá-lo uma vez tipo de Sprite. Nós tornamos isso público para que se quiséssemos substituir algo por qualquer motivo, talvez quiséssemos um tipo muito especial de calor para pegar. Se ele não se animar por algum motivo, então poderíamos facilmente mudar isso do World Outliner. Quando o deixarmos cair em nosso mundo, poderíamos selecionar sobrecarga que você viu, mas em outras propriedades públicas. Então essa é a primeira parte da lógica genérica que acho que precisamos fazer. A próxima coisa é que vamos precisar desta nova função, que será coisa que acontece quando interagirmos com o jogador. Vou criar uma nova função como fizemos com o inimigo Banks. Vou nomear este interagir. E muito semelhante à classe base inimiga. Na verdade, não vamos fazer nada aqui. Em vez disso, eu vou apenas definir um lembrete com um comentário simples dizendo que a funcionalidade se destina a ser substituída nas classes filho com seu próprio tipo de funcionalidade única. Mas uma coisa que, porque isso vai ser muito simples, você poderia estender isso se você quisesse. Alterando o colisor interativo configura, você poderia ter essas coisas interativas como inimigos. Então, se você quisesse implementar sistemas onde os inimigos poderiam usar as molas ou eles poderiam potencialmente pegar saúde e compartilhar esse tipo de conjunto de itens de saúde com os playoffs. Eu daria ao jogador algum tipo de desafio extra para ter certeza de que, ao danificar os inimigos, eles também não estão se lembrando de Saúde em outro lugar. Você pode facilmente mudar isso para ser contabilizado neste projeto, o que eu vou fazer é eu vou assumir que nós só vamos estar interagindo com o jogador. Então, para a entrada, para que tenhamos acesso a todas as informações de saúde e coisas assim. Vou criar uma nova entrada, ter uma mudança. O tipo de variável tinha que ser o objeto base do jogador não revelado BP. Então nós estamos indo para esta referência objeto. E eu vou nomear este que o jogador áspero. E vamos usar isso em um momento. Então, vamos nos certificar de que compilamos isso e salvar. E isso é praticamente tudo o que precisamos fazer para nossa função Interact de volta no gráfico de eventos, vamos obter o colisor interativo. E queríamos descer aqui. Lembre-se que estamos fazendo os eventos de sobreposição. Então, as sobreposições e não os sucessos. O ataque é o que estamos usando nas classes inimigas. A principal diferença é que os eventos do HIS agem como uma espécie de bloqueador. Então, se você se lembrar que a colisão precisava ser resolvida para o estágio onde o jogador foi empurrado para fora de sua linha no eixo y e ele foi empurrado para o fundo. Em comparação, quando você está fazendo sobreposições, você pode fazer duas coisas passarem uma à outra. Eles não vão parar fisicamente um ao outro. Mas podemos ter um evento acionado quando uma sobreposição é acionada ou notada e que está usando o componente on-line para começar a sobreposição. Agora não vamos precisar de todas as informações como tivemos no passado. Mas o que eu vou fazer é porque queremos esfriar nossa função Interact e queremos nossa referência de jogador, mesmo sabendo que a única coisa que devemos estar colidindo é a classe do jogador. Vou fazer um cheque extra aqui. Então vamos lançar isso para o tipo de jogador não revelado da BP. Veja que temos a base de jogadores BP sublinhado e dessa forma a função Interact quando eu só fui resfriado. Se isto é uma coisa bem sucedida de CAS, a coisa que acertamos é definitivamente o plano. E não só isso, mas podemos então passar a referência para a base de jogadores. O que significa novamente que quando se trata de adicionar Saúde, adicionar impulso, temos algumas informações que podemos usar sobre o jogador. E é isso mesmo. Então esta é a classe base feita. Esta é a funcionalidade genérica que as classes filho que estamos prestes a criar podem herdar e reutilizar de forma muito simples. 19. 19 - Saúde interativa: Na primeira aula com a qual começaremos, podemos deixar a classe base do Interact se você ainda tiver. O que podemos fazer agora é usar isso, podemos chegar a outra classe a partir disso como você viu com os inimigos. Então, vamos clicar com o botão direito do mouse na base interativa, selecione, Criar uma classe Child Blueprint a partir deste. E eu vou nomear este BP sublinhar saúde interativa. Poucas coisas que eu vejo que vamos precisar fazer festival é certificar-se de que os componentes estão configurados como precisamos que eles estejam dentro da classe infantil. E tudo o que realmente precisamos fazer é selecionar o flip book de papel e definir isso para ser a saúde do livro que já temos. E então precisamos ter certeza de que o interactivo colidir um se encaixa muito confortavelmente em torno da imagem. Pense na caixa de extensão de 25, um e 25. Deve funcionar muito bem nisso. Então não precisamos de nada no Y para ser através de profundidade. E é praticamente uma imagem quadrada. Então, no raio de 25, 25 parece encaixá-lo muito bem. Em seguida, não precisamos fazer nada. Lembre-se, podemos definir isso se quisermos que ele não seja reproduzido, podemos definir a reprodução automática como false. Isso entrará em vigor no evento começar a jogar. Se você queria que isso acontecesse mais cedo na classe dos pais, você sempre pode colocar isso no script de construção, mas eu acho que o Event Begin Play, deve estar perfeitamente bem por enquanto. A única coisa que realmente nos resta que precisamos fazer é adicionar funcionalidade ao jogador. E isso vai ser feito através da nossa função de sobreposição que deixamos isso para baixo e podemos encontrar a função Interact aqui. Bem, nós queríamos resolver algumas coisas que acontecem no evento Interact. Então isso vai ser disparado assim que a função da classe pai da sobreposição for acionada se acertarmos o jogador. Então nós temos a informação do jogador aqui que vamos precisar. E há algumas coisas a considerar, então você provavelmente pode ver como isso vai ser. Queremos adicionar saúde ao jogador e, em seguida, queremos destruir o coletor de saúde interativo para que ele não exista mais no mundo. E tire um momento antes de passarmos por isso juntos e consideremos qual é a ordem legal que você pode querer fazer isso. Então, vamos adicionar a destruição aqui. Sim, um, onde vamos chamar essa atualização de funcionalidade de saúde? Certo, claro que sabemos que a primeira coisa que vai acontecer é que podemos explicar tudo que acontece no pai legal se quisermos. Então, se adicionarmos o cool de destruição aqui, é claro que isso vai acontecer antes mesmo de podermos chamar a funcionalidade pai. Agora, neste caso, nada está realmente acontecendo sobre a funcionalidade. Então, podemos remover isto completamente ou simplesmente ligar isto e fazer tudo depois disto. Isso realmente não importa neste caso porque eu sei que nós não vamos voltar para a classe pai e adicionar qualquer funcionalidade básica. Então, neste caso, acho que o que podemos fazer é mostrar como podemos passar por esse processo sem sequer fazer uma chamada para a classe pai se não quisermos. Em seguida, temos a referência do jogador. E uma dica útil aqui. Se você não viu isso antes, porque esta é agora uma variável local por enquanto estamos dentro desta função, podemos procurar a variável com o mesmo nome. E ao invés de tirar isso de todos os lugares, como vimos no passado, queríamos realmente evitar que você estivesse indo em todos os lugares. Podemos apenas usar o Get play ou rref, nota, basta bater. É exatamente a mesma coisa. Isso significa que, independentemente de quantas vezes um, onde precisamos esfriar isso, podemos reutilizar essa variável muito, muito facilmente. E o que queremos fazer é ver se temos a configuração da funcionalidade de integridade. Então sabemos que esta é a base de jogadores sublinhados da BP. Procuramos saúde. Podemos ver que temos a função de atualização e podemos definir as variáveis de saúde manualmente. Agora nós nunca queremos. As variáveis de uma classe em outra. Isso pode tornar muito difícil rastrear onde as variáveis estão sendo definidas e atualizadas, especialmente se elas pararam de ser feitas fora da classe de jogadores como um exemplo. Então, o que realmente queremos fazer, idealmente, nós tornaríamos estes privados para que nós não pudéssemos sequer vê-los de outra classe. Mas, idealmente, sem isso, que está sendo tomada, queremos criar outra função na classe de jogadores semelhante à atualização de saúde. Mas vamos chamar isso de AddHealth. Vamos para a aula de jogadores. Lembre-se de que a saúde da atualização é simplesmente apenas encontrar o que é a saúde atual e atualizar isso para o widget. Então nós provavelmente poderíamos renomear isso para ser um pouco mais claro, na verdade. Então vamos fazer este widget de saúde atualização porque isso é realmente tudo o que ele está fazendo. O que queremos fazer é fornecer uma função que vamos criar uma nova função. Vamos nomear este AddHealth. E aqui nós só queremos fornecer uma entrada, que é a mente da saúde, que vai ser mantida por nossa caminhonete. Então vamos adicionar uma nova variável. Sim, vamos fazer disto um carro alegórico e vamos mudar o nome disto para curá-lo. Então eles podem nunca ser detidos. E muito parecido com o que estamos fazendo sobre os danos. Se pudermos encontrar isso aqui No único dano, vamos querer definir nossa saúde em vez de ser um menos aqui, vamos definir isso para ser um positivo para que possamos copiar muito disso. Eu só vou copiar e vamos colar isso na função AddHealth que vamos definir nossa saúde para ser saúde atual. E então, em vez de usar um menos dirá mais outra variável ou outro vôo, o plug que no valor, e que estará aqui. Então, qualquer que seja a saúde atualmente, além do nosso íon de hélio será a nossa nova saúde. E novamente, vamos nos certificar de agrupar isso para que não façamos nada tolo estendendo, tornando-o mais baixo do que 0. E nós fomos torná-lo mais alto do que o padrão de saúde. Então é agradável e simples. Copiar e colar foi perfeitamente bom. Nós já meio que vimos essa lógica, então nós realmente não precisávamos refazer isso muito. Agora, a última coisa é que podemos chamar nossos widgets de saúde de atualização. E se fizermos isso aqui, isso vai levar as variáveis que acabamos de mudar. E isso mostrará na tela a nova saúde pode estar comprando lá, agradável e simples, que não levou muito tempo uma ferramenta. E isso é todo o sistema de saúde agora implementado na classe da placa. E algumas coisas que notei com limpeza no entanto, é que temos várias variáveis ao mesmo tempo, meio separadas e ocupando muito mais espaço e elas precisam vir aqui. Então isso pode acontecer em algumas grandes classes. O que podemos fazer para contornar isso é que podemos realmente colocá-los em diferentes categorias. Esses um exemplo, eu vou selecionar o primeiro tipo de flip book, e eu vou colocar isso em uma categoria chamada FB. Para que possamos mostrá-lo e isto. E então podemos arrastar os outros flip books para isso. Bem, agora podemos usar a opção suspensa e alterar a categoria diferente que acabamos de criar. Podemos então soltar este diamante para que possamos ver que economizamos um pouco de espaço nos vários tipos de variáveis lá. E da mesma forma, farei o mesmo para os vôos. Então este é apenas um caso de criação de novos deflexões de nome de categoria, arrastando-os para dentro, e então nós podemos colapsar aqueles. Mas feito. Agora nós ainda temos alguns sobrando, mas eu acho que isso vai tornar as coisas muito mais fáceis de encontrar um eu e , em seguida, aqueles tipos únicos e não ocupar muito espaço. Antes de voltarmos para a classe de saúde, apenas certifique-se de que você compilar e salvar isso para ter certeza de que esta nova função será capaz de ser localizado na outra classe. Então vamos para a aula de saúde interativa. E, a partir daqui, temos agora a nossa referência. Estamos prontos usando, podemos puxar a partir disso e agora podemos encontrar que a nova função Adicionar Saúde. Então, espero que você possa ver por que isso vai ser um pouco mais seguro, mas agora não definir o valor de saúde fora da classe onde ele está sendo usado. que significa que dentro da classe do jogador, apenas como uma recapitulação, agora sabemos que esta função de saúde ou esta variável só está sendo atualizada na função AddHealth ou o dano é conexão do gráfico de eventos aqui, isso significa que se tivermos uma espécie de depuração através disso, sabemos onde procurar se algo estranho está acontecendo com a saúde. Considerando que se você começar a adicionar essas chamadas para definir variáveis de outras classes, ele começa a se tornar um pouco mais difícil de rastrear onde múltiplos de casa podem estar sendo alterados, algo em algum momento em seu projeto. A última coisa é que podemos definir isso para algo como dez para o hélio branco. E eu vou promover isso a uma variável. Vou dar um nome a este valor de saúde e largar isto e arrumar os Unites um pouco aqui. Nós também podemos fazer este hit público Compile. E a razão pela qual tornamos isso público é um olho quando arrastamos isso para a natureza. Então voltarei um pouco. Encontraremos nossa saúde interativa. Arraste isso para dentro, certifique-se de que ele está no eixo 0 e o valor y no eixo y. E se arrastarmos isso e adicionarmos alguns componentes de saúde diferentes, Lei , Saúde captação, desculpe, podemos alterar o valor na edição para ter tornando isso público. Então, novamente, podemos adicionar alguma variedade a estes. Então este pode valer 50. Este pode ficar com ele e deixaremos o primeiro às 10. Podemos entrar e testar isso? Então eu vou querer encontrar um inimigo para lidar com alguns danos. Nós preparamos o inimigo para completar o teste de neve assassino. Então, certifique-se de voltar para a classe de jogadores. Se você esqueceu de mudar isso de volta para algo um pouco mais gerenciável. Assim, o dano do jogador foi definido para um 100. Nós vamos querer colocar isso em algo como 20. Mais uma vez, capacite isso para que não morremos imediatamente. E isso nos dá algum tempo para testar o valor da casa. Está bem? Podemos ver que isto está a ser apanhado. Também podemos ver a única coisa que nos esquecemos de fazer isso na aula interativa. Ainda não terminamos completamente. Podemos verificar os diferentes valores estavam funcionando. Isso tudo parece muito bom para isso. A última coisa, é claro, é que uma vez que nós interagimos, uma vez que nós adicionamos como, como eu disse, nós só queremos destruir o ato de sermos interagidos são na verdade não, isso foi errado. Não destrua o gelo que está sendo interagido porque aquele com quem estamos interagindo seria o jogador. Obviamente, não queremos destruir a praia. Nós vamos nos destruir para que quando entrarmos, agora podemos adicionar alguma casa e podemos ver como sendo apanhados, sofrer um pouco de dano. E depois podemos vir e recolher os nossos captadores de saúde. Estamos sendo retidos que estão sendo destruídos. Então, temos uma pegada de saúde bastante padrão implementada. 20. 20 - mola interativa: A aula interativa final e a aula de funil que faremos nesta seleção de vídeos será a nossa primavera interativa. Na verdade, já temos muito do que precisamos para entrar aqui. E, de fato, temos tudo o que precisamos lidar. Então, o que eu vou fazer em vez de criar uma nova classe, lembre-se que esta, nossa classe de saúde aqui, já está herdando da base interativa, que é exatamente o que precisamos. Então o que eu vou fazer em vez disso, em vez recriar completamente a roda, eu vou para Control W, nossa saúde interativa. Nome, esta primavera interativa. Dentro de, hey, novamente, podemos ver que isso terá os mesmos valores padrão o lado da saúde que estamos derivendo da classe pai da base interativa, que é a principal coisa aqui temos uma variável. Então esta variável de vôo vai ser muito útil em um momento. Eu já podia imaginar o que vamos usar. E temos nossa função indireta também sendo capturada. Então, as principais coisas que vamos precisar ajustar metade, podemos retrabalhar isso um pouco. Não queremos destruir a primavera sempre que for usada. Nós não queríamos addHealth, mas vamos precisar de duas variáveis que vão ser a referência do jogador. Queremos fazer algo para isso e esse valor de saúde, vamos precisar mudar o nome, mas já o temos disponível. Nós realmente queríamos fazer quando a primavera fosse tocada. Nós vamos entrar aqui e vamos chamar a função do personagem de lançamento. Então, novamente, é por isso que é útil saber que estamos interagindo diretamente com o BPM School of plant based porque sabemos que é um tipo de personagem que foi um deixe-nos saber que podemos usar essa funcionalidade interna padrão no personagem classe para lançamento. E essencialmente apenas adicionar velocidade à nossa classe de personagens é como um salto, mas com algumas substituições diferentes. A razão pela qual queremos o nosso valor de voo, acabamos de nos mudar desta vez. Não queremos tomar nenhuma velocidade x ou y. Então vamos dividir o pino da estrutura aqui. E nós basicamente, podemos conectar isso no Zed como o lançamento, o personagem. No eixo z. Queremos anular estes, adicionar sobreposição. Então vamos considerar isso como verdade e podemos renomear isso para nosso fluxo de lançamento. Como vimos no passado, podemos deixar isso público. Então, novamente, em qualquer uma das diferentes molas que temos ao redor do nível, podemos facilmente atualizar e substituir quanta força vai ser aplicada. Eu acho que por padrão, 20 ou 10, até mesmo, até mesmo dilema vai ser bastante baixo. Então podemos começar com algo em torno de 500 e ter um bom pressentimento para um impulso de 500 e pode ser muito baixo. Podemos atualizar isso em um nível ao testar. Agora, a próxima coisa é lembrar a maneira como os visuais vão funcionar. Então, o festival visual, queremos mudar o livro de papel. Vamos mudar isto de quente para ser a nossa primavera. E se nós apenas pularmos para a janela de exibição, nós também podemos ver que eu iria colidir vai ser um pouco pequeno. Acho que tudo o que queria mudar era a largura destas coisas. Então eu vou para o colisor interativo, mudar a largura, que vai ser nosso x para justificar ajuste isso. E lembre-se que temos um co-anfitrião C9. Então isso nos permite a liberdade e flexibilidade para mudar a posição do flip book, ou neste caso, o colisor interativo, porque o colisor interativo é um filho do flip book. Claro, se movermos isso, o colisor se moverá com ele. Então o que nós queremos fazer é pegar este colisor e apenas mover desta vez mais ou menos para o fundo da primavera. Mas a idéia é que se isso não estava jogando, ele será procurado. Logo acima do topo da primavera para que pareça assim que chegarmos ao topo da primavera, vamos tocar esta animação. Então esse é o lado visual feito lá e atualizado. A última coisa está de volta na função Interact. Lembre-se que vamos definir isso para multiplicar para ser falso. Então não vamos estar jogando constantemente no nível. O que vamos querer fazer é, assim que interagirmos com isso, vamos definir isso para jogar do estoque. Fazemos isso pegando nosso livro de papel. Então controle arrastando o livro flip papel e eu estou encontrando o jogo da função parada. Nós apenas levamos isso de volta para cima e arrumamos a função um pouco. Eu não sou praticamente tudo o que a primavera interativa realmente precisa fazer. Se voltarmos ao nível, provavelmente teremos muitas molas. Então eu vou pegar um desses com a mola interativa selecionada. Podemos clicar com o botão direito no coração. E podemos escolher o ator Substituir selecionado com. E um dos aplicativos vai ser a primavera interativa porque nós selecionamos aqui. Então vamos substituí-lo por isso. Podemos ver que há pouca mudança dramática e podemos entrar aqui e mover isso. Agora, no editor olhando para ele, talvez isso seja um pouco irritante que tenhamos estes automatizando constantemente. Então, de volta à base interativa, o que eu vou fazer é pegar isso e colocar isso no roteiro de construção. Assim, espero que isso pare qualquer animação em loop. E agora vamos, podemos ver que a primavera é imediatamente interrompida de animação. Isso nos permite saber que isso está funcionando só vai mudar se movermos esse local. Mas isso é melhor do que tê-lo sempre a brotar. E vamos adicionar alguns destes também para que possamos usar um aqui. Quando passarmos por esta secção, podemos deslizar os planetas facilmente, saltar para cima e chegar a esta secção. Estes também vão funcionar como boas maneiras de tipo de teste diferentes velocidades e o impasto vai ser acrescentando. Tão perfeito que podemos ver que eu não animei antes de começarmos a tocar. Pule em cima. Isto vai animar uma vez, não vai voltar a fazer loop, precisamos matar o morcego. E podemos pular sobre isso de novo. Acho que o impulso está um pouco baixo demais. Então não parece que estamos sendo empurrados para cima tão alto quanto precisamos que possamos entrar e podemos mudar isso para talvez 800. E então espero que sim. Então parece que eu estava realmente subindo com a mola em vez de passar por ela. E isso está nos empurrando para cima a menos que distância. Então podemos ir brincar com valores diferentes. Nos outros que pudéssemos testar, talvez o que isso sentiria com um impulso das coxas e, de outra forma, muito bom. Mas a principal coisa que você pode ver é que estes estão reavaliando que a animação jogando constantemente e tudo está praticamente respondendo como esperaríamos, inesperado. Felizmente, você já viu o, o tipo de valores de adicionar essas propriedades públicas também. Então podemos facilmente entrar e mudar os valores da casa agora, os valores da primavera para que possamos adicionar algum fio dental de lançamento extra. E como eu disse, se realmente quiséssemos, poderíamos definir uma das molas por qualquer motivo para tocar automaticamente, uma das gostosas para não jogar. Então, quando entrarmos e jogarmos NIH, este vai continuar postando sem razão nenhuma. E o calor vai ser congelado no lugar. Então nós temos um pouco de flexibilidade em como nossa classe é um trabalho ou derivado do mesmo tipo de classe base, que significa que nós precisávamos programar. Eu amo isso apenas uma vez e podemos reutilizá-lo entre diferentes classes infantis herdadas. Agora, a única outra coisa que eu realmente não toquei é que nós estamos recebendo um monte de itens diferentes vindo aqui. Então você pode querer começar a renomear alguns desses, especialmente considerar a forma como mudamos uma das cabanas para ser um componente de primavera ou um ator de primavera. Ele ainda tem o nome padrão. Então podemos dizer que é um ato de primavera para ouvir, mas ainda é legal. Bp sublinham a saúde interativa. Então, qualquer coisa pode ser redigindo. Podemos mudar isso para primavera e isso vai tipo de atualização corretamente. E nós temos a mesma coisa para este porque era apenas uma cópia do original, o que era muito legal para a saúde. E outra coisa que você pode querer começar a fazer é criar grupos diferentes. Então você pode ter sub-pastas aqui. Então vamos nomear um inimigo, e vamos criar outro, e vamos nomear este interactivo. A principal razão é que podemos facilmente derrubar inimigos e inimigos em diretivas. Diretivas, e se tivermos um, esclarecer as coisas e apenas olhar para o nível, fazer um pouco mais de design de nível. Podemos esconder certas coisas. Claro, quando você pressionar play, todos eles vão voltar. Isso é apenas edições estão relacionadas. E é claro que isso significa também, você não vai ter este enorme centenas e centenas de itens cair para baixo em todos os momentos, especialmente se você só queria encontrar algo como a fonte de luz, mover algo ao redor, então vai tornar as coisas um pouco mais fáceis de navegar e podemos soltar esses diamantes. Trabalhei com eles sempre que necessário. Com tudo isso feito, agora temos o básico de um jogo de plataformas 2D configurado e trabalhando dentro do Unreal Engine. Esperemos que ao longo da série de vídeos, você tenha vindo a apreciar parte do poder que pode ser aproveitado do irreal. E embora existam alguns pequenos obstáculos com o sistema flip book, a forma como podemos automatizar alguns dos processos de trabalhar com eles realmente não é tão ruim. Ainda temos essa ferramenta de edição de pilha muito útil, muito compatível com colisões e coisas que eu nem mergulhei. Como se pudéssemos configurar materiais usando o padrão no editor momentaneamente para levar em coisas como o normal para que possamos adicionar iluminação e essencialmente replicar técnicas de iluminação 3D nesses sprites 2D. Se tivermos essa informação disponível, há muito, muito mais que você poderia fazer com isso. Mas novamente, isso é realmente apenas para trazer à tona um pouco mais do que isso. Este é definitivamente mais do que um motor 2D adequado, bem como 3D. O que já estamos fazendo no final do dia é tirado e o acesso a dois, novamente, irreal tem todas essas coisas onde podemos restringir coisas diferentes a diferentes eixos para nos permitir realmente trabalhar facilmente em um mundo 2D. Então, se você gostou deste conteúdo, não se esqueça de me seguir para obter mais conteúdo como este, estaremos olhando para fazer atualizações maiores e mais detalhadas para conteúdo semelhante no futuro. Então não se esqueça de me seguir aqui para conteúdo como esse. Se isso fosse algo útil, eu queria ver mais. Então eu espero que você tenha gostado desta série de vídeos. Se você chegou até aqui, então obrigado por seguir junto com tudo e passar por todo o processo comigo. Portanto, obrigado pelo seu tempo e paciência e estou ansioso para vê-lo no futuro.