Intensivo de Godot | Michael Mcguire | Skillshare

Velocidade de reprodução


1.0x


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

Assista a este curso e milhares de outros

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

Assista a este curso e milhares de outros

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

Aulas neste curso

    • 1.

      Introdução ao curso

      7:47

    • 2.

      Download e configuração

      8:55

    • 3.

      03 Impressão para saída de imagens adicionadas

      14:53

    • 4.

      04 Variáveis

      10:22

    • 5.

      05 cordas

      12:25

    • 6.

      06 Inteiros e Floats

      10:42

    • 7.

      07 Constantes e comentários

      7:29

    • 8.

      08 Listas

      10:22

    • 9.

      09 Adicionando e removendo

      10:28

    • 10.

      10 Empurrando e classificando

      6:58

    • 11.

      11 para Loop

      10:18

    • 12.

      Alcance 12

      5:40

    • 13.

      igualdade

      13:50

    • 14.

      14 if elif else

      11:02

    • 15.

      15 dicionários

      16:54

    • 16.

      Como obter inputs

      17:17

    • 17.

      Loops de 17 while

      8:03

    • 18.

      18 Funções e argumentos

      7:59

    • 19.

      19 Aliasado de função

      8:14

    • 20.

      20 Cursos

      12:46

    • 21.

      O que vamos fazer(espaço preenchido)

      2:01

    • 22.

      Criação do livro de histórias

      8:05

    • 23.

      Crie a interface

      12:35

    • 24.

      Selecionar história e motivar o jogador

      24:53

    • 25.

      Finalizando e jogando novamente

      16:07

    • 26.

      O que vamos fazer(espaço preenchido)

      2:01

    • 27.

      Tilemap x Nova Camada de Tilemap

      5:30

    • 28.

      Criando o fundo

      9:10

    • 29.

      Criando o jogador

      6:02

    • 30.

      Movimento do jogador

      20:07

    • 31.

      Criando os veículos

      25:47

    • 32.

      Morte e respawn do jogador

      23:33

    • 33.

      Água morta

      7:44

    • 34.

      Plataformas aquáticas

      21:56

    • 35.

      O espaço vencedor

      6:59

    • 36.

      Correção de vazamento de memória

      9:56

    • 37.

      Sistema de pontuação

      13:06

    • 38.

      Pontuação HUD de jogos

      8:19

    • 39.

      Vidas no jogo HUD

      15:25

    • 40.

      Cronômetro e bônus

      10:48

    • 41.

      Áudio do Frogger

      10:28

    • 42.

      Transição do trabalho em 2D para 3D

      6:03

    • 43.

      Como entender as diferenças do 2D e do 3D

      4:12

    • 44.

      Semelhanças entre 2D e 3D

      6:37

    • 45.

      Materiais

      14:48

    • 46.

      ILUMINAÇÃO

      17:15

    • 47.

      Ativos 3D

      4:33

    • 48.

      Mapas de grade

      15:53

    • 49.

      Criando o jogador

      7:10

    • 50.

      Movimento do jogador

      8:05

    • 51.

      Como criar veículo

      20:27

    • 52.

      Morte e respawn do jogador

      11:41

    • 53.

      Água morta

      7:04

    • 54.

      Plataformas aquáticas

      25:46

    • 55.

      Correção de vazamento de memória

      4:51

    • 56.

      Ganhe espaço

      9:36

    • 57.

      Partituração da GUI e cronômetro

      19:37

    • 58.

      O que é uma API

      4:04

    • 59.

      Como usar uma API

      5:07

    • 60.

      Configuração do roteiro

      6:44

    • 61.

      Como fazer chamadas de API

      15:10

    • 62.

      RapidAPI Python para GDScript

      19:14

    • 63.

      O que são WebSockets(espaço preenchido)

      4:53

    • 64.

      Estabelecimento de uma conexão

      14:20

    • 65.

      Enviando dados com WebSockets

      7:46

    • 66.

      Como o desenvolvimento de desktop é diferente

      4:32

    • 67.

      Anncoras

      5:36

    • 68.

      Layout de pesquisa

      10:52

    • 69.

      Layout de resultados

      8:02

    • 70.

      Pesquisa

      26:20

    • 71.

      Miniaturas, títulos, gêneros

      22:42

    • 72.

      AnimePage

      27:52

    • 73.

      Fontes

      8:42

    • 74.

      Temas personalizados

      14:53

    • 75.

      Várias janelas

      5:13

    • 76.

      Barras de menu

      18:08

    • 77.

      O que são partículas

      3:29

    • 78.

      Como criar um fogo em 2D

      15:50

    • 79.

      Criação de um fogo 3D

      14:15

    • 80.

      Como codificar qualquer mecânica

      3:53

    • 81.

      Gravidade e salto

      10:58

    • 82.

      Como salvar e carregar arquivos

      27:52

    • 83.

      Gatilhos e pedais

      6:35

    • 84.

      Vibração do controlador

      3:26

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

451

Estudantes

--

Projetos

Sobre este curso

Boas-vindas ao curso intensivo do Godot, onde você vai embarcar em uma jornada imersiva para dominar o desenvolvimento de jogos e criar um software desktop poderoso baseado em GUI usando o versátil mecanismo de jogos Godot. Quer você seja iniciante ou desenvolvedor experiente, este curso abrangente foi projetado para equipar você com as habilidades e o conhecimento necessários para se destacar no mundo da criação de software interativo.

O Godot é um mecanismo de jogos altamente conhecido por sua flexibilidade e recursos robustos. Neste curso intensivo, você vai se aprofundar nas capacidades do Godot, explorando técnicas de desenvolvimento de jogos 2D e 3D. Desde a criação de mecânicas de jogo cativantes até a implementação de efeitos visuais impressionantes, você vai aprender os detalhes do desenvolvimento de jogos usando o Godot.

Mas isso não é tudo: este curso intensivo vai além do desenvolvimento de jogos. Também vamos nos aventurar no reino dos softwares de desktop baseados em GUI. Você vai descobrir como criar interfaces de fácil uso, criar aplicativos interativos e aproveitar APIs e web sockets para redes em tempo real.

O que diferencia este curso intensivo é a abordagem prática e baseada em projetos. Ao longo do curso, você vai se envolver em questionários, projetos práticos e trabalho colaborativo de grupo, permitindo que você aplique seus conhecimentos recém-adquiridos e desenvolva um portfólio de projetos impressionantes.

Ao final deste curso intensivo, você terá dominado a linguagem de programação GDScript e obtido proficiência no uso do extenso conjunto de ferramentas do Godot. Quer você queira criar jogos independentes, seguir uma carreira em desenvolvimento de jogos ou construir aplicativos intuitivos para desktop, o curso intensivo do Godot vai capacitar você a transformar suas ideias em realidade.

O que você vai aprender:

  • O mecanismo de jogo Godot e aproveitar seus recursos para o desenvolvimento de jogos

  • Aprofundar o GDScript, a linguagem de script intuitiva do Godot, para criar mecânica e interações de jogos

  • Criar jogos 2D cativantes por meio de manipulação de sprite, animações e detecção de colisões

  • Explorar o reino do desenvolvimento de jogos 3D, incluindo criação de cenas, iluminação e controladores de personagens

  • Desenvolva um software de desktop poderoso baseado em GUI com interfaces intuitivas e elementos interativos

  • Utilizar APIs e web sockets para implementar recursos de rede em tempo real

  • Ganhar experiência prática por meio de questionários e projetos

  • Acessar uma grande variedade de recursos, tutoriais e uma comunidade de apoio de colegas estudantes


Quer você seja um jogador apaixonado, aspirante a desenvolvedor ou entusiasta de tecnologia, o Godot Bootcamp vai fornecer o conhecimento e as habilidades necessários para se destacar no campo dinâmico do desenvolvimento de jogos e criação de software baseado em GUI.

Inscreva-se agora e embarque em uma jornada emocionante para se tornar um desenvolvedor proficiente de Godot!


* Os ativos do frogger estão anexados à página do projeto
** Qualquer versão posterior ao Godot 4.0 deve funcionar

Conheça seu professor

Teacher Profile Image

Michael Mcguire

Author | Programmer

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. Introdução ao curso: Olá, e bem-vindo ao acampamento Got to Boot. Sou Mike Maguire e serei seu instrutor durante todo Em nosso primeiro vídeo aqui, abordaremos tudo o que abordaremos ao longo deste curso, que será principalmente sobre que abordaremos ao longo deste curso, o desenvolvimento de jogos dentro do motor de jogo GoTo No entanto, também abordaremos um pouco do desenvolvimento de software, em que você criará seus próprios aplicativos de desktop, além de se ramificar em coisas como APIs e sites, fazendo com que tudo se comunique entre si E todas essas coisas sempre podem ser repetidas e usadas nos próprios jogos, então ainda podemos considerar tudo parte do desenvolvimento do jogo no final do dia. Vamos dar uma olhada na visão geral do motor de jogo Goto Bem, o Goto é um motor de jogo poderoso e versátil que oferece uma ampla gama de recursos e ferramentas que são muito úteis para o desenvolvimento de jogos Agora, um exemplo disso é algo como física de tecidos, por exemplo. Digamos que você queira fazer uma capa em um personagem. No Goto, você poderia configurá-lo em cerca de um minuto, enquanto em outros motores, levaria muito mais tempo apenas para que a física do tecido funcionasse Então, esse é um benefício que teríamos se criássemos um jogo em três D que envolvesse coisas como capas, capas e qualquer outra coisa que precise de física de tecidos É um mecanismo de código aberto, o que significa que é ótimo de usar e tem uma grande comunidade de desenvolvedores contribuindo para seu crescimento. Agora, enfatizo a parte gratuita porque algumas pessoas dizem que a unidade é gratuita e, pelo menos no momento atual, não é gratuita. Existe uma versão pessoal que você pode usar até certo ponto, uma vez que tenha uma certa quantidade de receita ou, se quiser determinados recursos, terá que pagar. Portanto, eu não consideraria o Unity totalmente gratuito e outros mecanismos que as pessoas consideram, como irreais Eles recebem uma parte de seus royalties, então, embora você não esteja pagando adiantado, você está pagando a longo prazo E então temos outros mecanismos, como GameMaker, que acredito que agora estão em regime de assinatura Portanto, o GOTO é totalmente gratuito do começo ao fim. Você nunca precisa pagar por nada. O GOTO também suporta o desenvolvimento de jogos em dois D e três D. O que, obviamente, o torna adequado para uma ampla gama de projetos. Isso não vai limitar você no que você pode fazer ou tornar as coisas extremamente difíceis, por exemplo, novamente, com o GameMaker, é um motor TD E se você quiser fazer três D, seria uma grande dor de cabeça forçá-lo a fazer isso, porque não é para isso que serve GoTo é destinado tanto para TD quanto para três D, então você não terá problemas ao fazer isso Você só precisa se preocupar em como criar seus jogos, eu suponho. Tudo bem. Agora vamos ver os benefícios de usar o Gato. Bem, vamos explorar algumas das principais vantagens de usar o Goto em seus projetos de desenvolvimento de jogos GoTo tem uma interface amigável que facilita a navegação e o trabalho, mesmo para iniciantes oferece um editor visual que permite criar cenas de jogos manipular objetos e configurar a lógica do jogo sem precisar escrever muito código E é aí que entra o GD Script , que é muito amigável para iniciantes e bastante fácil de aprender sistema baseado em nós do Goto simplifica a criação e a organização de todos os objetos do seu jogo, tornando-o altamente intuitivo e eficiente Vamos dar uma olhada nas comunidades e recursos do Gatto. A comunidade de Gatos é vibrante e apoia desenvolvedores de todo o mundo, compartilhando seus conhecimentos e experiências Existem vários fóruns on-line, sites e grupos de mídia social onde você pode se conectar com outros usuários do Gato, fazer perguntas e encontrar inspiração. Um desses principais está no próprio site do Gato. Há um fórum específico para as pessoas fazerem perguntas e obterem ajuda com qualquer coisa em que estejam presas, seja uma pergunta para iniciantes ou algo mais avançado Além disso, o Gato tem uma extensa documentação e tutoriais que estão disponíveis praticamente em qualquer lugar neste momento, facilitando a localização de respostas para as perguntas que você está procurando e o ajudando a aprender novas técnicas Agora, o que você vai aprender neste curso, exatamente? Neste curso, abordaremos uma ampla variedade de tópicos para ajudar você a se tornar proficiente no uso do mecanismo Goto para criar aplicativos Você aprenderá a linguagem de programação GD Script, que é essencial para criar mecânicas e interações de jogo, e será nossa principal linguagem de script Agora, a razão pela qual vamos usar GD Script em vez de algo como o C Sharp é que o GD Script tem um suporte melhor no momento, embora o C Sharp também esteja ficando muito bom em seu suporte Mas o GDScript também tem uma compreensão mais estreita, eu acho que você poderia dizer, da própria API de motores, além de ser muito mais fácil para iniciantes aprenderem e usarem Exploraremos o desenvolvimento de jogos em dois D e três em D, incluindo a manipulação de sprites Obviamente, abordaremos as novações, detecção de colisões, trabalho com partículas e muito Você também ganha experiência na criação um software de desktop baseado em Goey ou interface gráfica de usuário usando o Goto e aprende a utilizar APIs e incorporar o uso de soquetes da web para Tudo bem. Parabéns por concluir a introdução ao mecanismo de jogo Goto no próximo vídeo Vamos nos aprofundar no script GD, a linguagem de script que usaremos no Goto, e aprenderemos um pouco de código Agora, lembre-se, a comunidade Gatto está sempre lá para apoiá-lo, e eu estou aqui para guiá-lo em cada etapa do processo Vamos mergulhar juntos no empolgante mundo do desenvolvimento de jogos. 2. Baixe e configure: Bem-vindo aos futuros desenvolvedores. Se vamos desenvolver coisas usando o mecanismo Goto, seja videogame ou software de desktop, primeira coisa que precisaremos é, bem, o mecanismo Goto Então, vamos dar uma olhada em como podemos fazer o download disso. Agora, a primeira coisa ou a primeira maneira de dizer que podemos fazer isso é baixando Gato do site oficial aqui. Basta acessar Goto engine.org, como vemos aqui, aqui mesmo na tela E uma vez aqui, você verá a seção de download na parte superior da tela. Além de dois botões de download no centro, temos o LTS, que tem três pontos X e o mais recente, que é 4.1 Usaremos a versão mais recente, que é 4.1. Não há nada de errado com a versão X de três pontos. Ele ainda está sendo desenvolvido e é o suporte de longo prazo. No entanto, se você fosse usá-la, essa versão enquanto acompanha, pode haver algumas funções ou coisas que escrevemos que podem ter nomes diferentes ou, potencialmente nem mesmo existir na versão antiga. Portanto, lembre-se disso e, por isso, recomendo que você use a versão 4.1 à medida que avançamos. Tudo bem, então esta é a versão estável 4.1 que acabou de sair. Assim, você pode clicar no botão Baixar mais recente ou na guia de download na parte superior. Ambos o levarão a esta tela aqui. Tudo bem, então, para fazer o download disso, tudo o que precisaremos, já que vamos usar a linguagem de programação GD Script Tudo o que precisamos é a versão padrão aqui com o botão azul. E a diferença entre esta e a versão.net é que a versão.net também suporta C E se você fosse usar isso , teria que rolar para baixo e também pegar o.net necessário para usá-lo, bem como, de preferência programas externos nos quais escrever seu código E são muitas coisas extras que não precisamos ao fazer este curso. Portanto, se você quiser obtê-lo no site, pode clicar no botão do motor Goto para 4.1 na versão padrão Agora, há uma segunda maneira de você conseguir isso, que seria do Steam. Você pode acessar o Steam e fazer o download de lá, se quiser. E isso nos dará a versão padrão por padrão. A versão Steam não tem a versão.net disponível. Mas você não precisa se preocupar com nenhuma confusão se prosseguir e obtê-lo no Steam. Tudo bem, então se você obtê-lo do Steam, pode clicar no botão Play Ou, se você o obtiver do site, obterá um arquivo zip e tudo o que você precisa fazer é extraí-lo e começar a executar o aplicativo. Tudo bem. Ao executá-lo, você se depara com uma tela como a que você vê aqui. E tudo o que vamos fazer, é claro, você não vai ter todos esses projetos e coisas do seu lado. Mas tudo o que vamos fazer é apertar o botão do novo projeto aqui. E isso deve lhe dar uma nova janela que aparece exatamente como você vê aqui E tudo o que você precisa fazer é decidir onde, acessando Browse, decidir onde deseja colocar o projeto aqui à medida que avançamos no curso e dar um nome a ele. Para isso, vou chamar isso de bootcamp de botas Para esse propósito, vou voltar e depois chamá-lo de Goto Boot Camp, e vou clicar em Criar pasta porque tem que estar em uma pasta vazia aqui E aí está. Vemos que temos um pequeno cheque verde aqui indicando que está tudo bem. Em seguida, temos três modos de renderização forward plus, mobile e compatibilidade. A compatibilidade é usada como OpenGL. Como você pode ver, a partir dos pontos aqui, cada versão tem seus prós e contras. Mas, na maioria das vezes, você trabalhará com o Board plus. A menos, é claro, que você esteja fazendo algo , crie uma versão móvel ou algo assim, é claro que você deve usar a opção móvel aqui. E se você estiver trabalhando em uma versão a ser implantada na web de sua ferramenta ou hardware antigo , você usaria a compatibilidade Então, vou seguir em frente e deixar a opção Avançar mais aqui selecionada, e podemos simplesmente clicar em Criar e Editar, e isso vai seguir em frente e criar o projeto e abri-lo Então, isso levará apenas um momento. Tudo bem. Em seguida, você verá a seguinte tela aqui, e agora estamos dentro do motor e prontos para começar a trabalhar aqui Agora, para dar um breve resumo, no canto inferior esquerdo, temos o sistema biliar, que é onde todos os nossos arquivos, scripts, ativos do jogo, etc., serão armazenados Continuando do lado esquerdo aqui, temos a aba de cena. É aqui que desenvolveríamos visualmente, bem, os visuais de nossos projetos Aqui está uma guia de importação. Portanto, se você precisar reimportar um objeto por qualquer motivo, poderá fazer isso a partir daí Indo para o lado direito, temos o inspetor, o que será muito importante Estaremos lá um pouco durante todo o curso. Temos a seção de nós, que nos permitirá conectar alguns sinais embutidos, e temos um histórico que podemos revisar. Tudo bem acima disso, temos alguns botões. Temos um botão play aqui, que é para executar o projeto. Isso percorrerá a cena padrão , como se estivesse sendo aberta por meio da execução do executável após a exportação do jogo Na maioria das vezes, você vai me ver fazendo essa aqui, como rodar a cena atual, e essa vai rodar a cena atual que eu selecionei em vez de executar o projeto inteiro Então, por exemplo, no meio, você tem essa guia que diz vazio. Se eu construísse, se eu construísse algo aqui, acessando a cena atual de execução, ele executará o que está sendo executado nesta guia, independentemente de quais minhas outras configurações estejam definidas No meio, você verá isso, onde temos nossos dois D ou três D, ou scripts, e a biblioteca Asset, onde você poderá entrar e encontrar ferramentas ou novas adições ao mecanismo, coisas assim que podem ajudá-lo no futuro ou tornar sua vida um pouco mais fácil Dependendo do que você está fazendo, lembre-se de que a biblioteca de ativos pode ser muito útil, muito útil. E, é claro, você sempre pode usá-lo apenas para ver código e tentar aprender com ele. Tudo bem? Nós baixamos o motor. Nós o temos funcionando. Eu diria que o temos instalado, mas não está realmente instalado, certo? Nós meio que abrimos o zíper e o abrimos. E temos um novo projeto criado e estamos prontos para começar a aprender sobre essa linguagem do GD Script 3. 03 Impressão para produção de imagens adicionadas: Tudo bem. Agora que criamos nosso projeto para dar uma olhada rápida na interface aqui. No lado esquerdo, por padrão, temos a hierarquia de cenas Então, essas são nossas cenas e a aparência da cena ou nível atual, como você pode ver, se você estiver desenvolvendo jogos, e abaixo disso, temos nosso sistema de arquivos, e essa é nossa estrutura de pastas e todos os arquivos que temos em nosso projeto. Então é aqui que vamos ver nossas cenas salvas, nossos scripts, quaisquer texturas ou outros recursos que temos em nosso projeto que serão mostrados aqui embaixo Na extrema direita, temos o inspetor, e é aqui que vamos ver as propriedades de cada item em nossa cena Na parte inferior, temos nosso editor de sombreamento. Temos nossa linha do tempo de animação, nosso barramento de áudio para fazer algumas mixagens Temos nosso depurador para corrigir os erros necessários e temos nosso console de saída que podemos dar uma olhada, e seremos muito úteis ao longo E, claro, bem no centro, temos nossa grande janela panorâmica E, por padrão, você pode ver que estamos colocando as três áreas D. E no topo, vamos passar para dois D porque é tudo o que precisamos para isso. Se apenas diminuirmos o zoom, você notará essa caixa azul. Esse é essencialmente o tamanho da nossa janela. Agora, se você quiser mudar isso, basta acessar as configurações do projeto. E parece que isso não é percebido. Vamos ver se consigo ativar isso. Lá vamos nós. Então, tudo o que vamos fazer aqui, se você quiser alterar o tamanho da sua janela, vamos descer e ver a largura e a altura da tela, da janela e largura e a altura da tela, da janela e Aqui está o que você pode mudar. E você vê que isso não tem muitas configurações aqui, mas se avançarmos demais, teremos muito mais opções que você poderá dar uma olhada, como uma alta taxa de atualização, e parece que o alto DPI está Eu sei que existe um alto DPI, modo de economia de energia. Portanto, há algumas opções aqui que você pode dar uma olhada. Mas, por enquanto, não precisamos realmente das configurações avançadas. Eu só queria destacar para você a largura e a altura aqui. Vou seguir em frente e vou mudar o meu para 12 80 por 720 apenas para obter um bom número redondo e padrão, e uma janela perfeita Não precisamos começar a minimizar, não precisamos começar a maximizar. E, no começo , nem valerá a pena prestar atenção nisso , nem valerá a pena . Para a primeira boa parte disso. Mas lá vamos nós. Vou definir um 12 80 por 720. E se você definir isso, poderá notar a mudança do retângulo azul. Talvez você não. E isso é só porque é uma mudança muito pequena e minuciosa. Mas sim, qualquer coisa dentro desse retângulo azul aparecerá na tela Então, para começar, vou seguir em frente e, na cena à esquerda, vou selecionar a interface do usuário, e isso nos dará um nó de controle por padrão. Se quiséssemos, poderíamos clicar em outro nó e ver todas as coisas diferentes que podemos adicionar e simplesmente selecionar o controle aqui. Podemos ver todos os nós da interface do usuário inerentes ao controle. Ele controla as âncoras, o deslocamento, a adaptação, a posição e o tamanho em relação ao seu pai Mas, em geral, podemos ver que o controle é usado para uma interface de usuário. E é isso que observaremos aqui, qualquer coisa relacionada à interface do usuário será colorida em verde. Tudo bem, então vamos selecionar isso e clicar em Criar ou clicar no botão da interface do usuário. De qualquer forma, você chegará à mesma tela ou ao mesmo resultado. E com isso, temos uma cena à qual podemos adicionar nosso script para que possamos realmente começar no código, uma cena que podemos reproduzir para que possamos ver nosso código ser executado e uma cena que precisamos salvar. Francamente, vou salvá-la . Ponto de controle C TSCM, tudo bem. Vá em frente e salve-o lá. E vou adicionar meu primeiro script. Agora vou chamar isso de impressão porque é isso que vamos ver aqui para começar. Imprimir. O idioma está no script GD, controle aprimorado, modelos sem padrão Poderíamos simplesmente usar vazio porque vamos excluir tudo nele de qualquer maneira, então vamos continuar com esse objeto vazio e criar. Tudo bem, então tudo o que vemos aqui no topo é estender o controle E isso está apenas dizendo que isso vem da nossa classe de controle, e o que quer que esteja se estendendo é o tipo de nó ao qual o script deve ser anexado Então, como está conectado a um nó de controle, ele precisa estender o controle. Então, vamos descer um pouco até lá. Vamos criar um e vamos digitar Bunk Underscore. Pronto? Eu coloquei um resfriador no final disso. Pressione Enter e digite a palavra pass. Agora podemos remover o erro que está aparecendo lá. Mas isso, o que acabamos digitar aqui é apenas um trecho de código que foi removido porque fizemos um script vazio E eu posso ir em frente e te mostrar isso aqui também. Então, se você fizer isso de outra maneira, eu vou excluir esse script, tirá-lo do controle. E se eu adicionar um script a ele, novamente, você pode simplesmente clicar no slide Controle e clicar no botão de script aqui no topo, ou clicar com o botão direito do mouse em Controle, e você poderá adicioná-lo. E estou percebendo que isso não está aparecendo lá. Isso é bom. Você pode saber o que é bom porque você pode, bem, você está vendo isso do seu lado. Mas se selecionássemos um nó padrão de dois pontos, o modelo, quando anexado em nosso script, espero que eu me lembre e coloque uma imagem aqui na tela, caso vocês estejam um pouco Você clica em Criar, você verá esta tela aqui, e tudo o que fizemos essencialmente quando criamos uma vazia foi excluir tudo isso e digitar nesta seção novamente Foi tudo o que fizemos. Agora, a razão pela qual vamos usar esse sublinhado pronto aqui é porque qualquer coisa dentro desse bloco aqui, que no momento, é apenas a passagem de palavras, será executada assim que o controle aqui entrar na cena, que já faz parte da cena, para começar Então, ele será executado assim que clicarmos no botão play. E o que você aprenderá aqui é que aprenderemos sobre as diferentes maneiras pelas quais podemos realmente imprimir no AR Console. E por que você pode querer fazer isso? Bem, você pode usar isso para se dar algumas informações. Você pode usar isso para ajudá-lo a tentar depurar alguns pequenos erros E, o mais importante, as coisas que você imprime aqui podem realmente ir para seus registros. Portanto, seus registros, é claro, se você já teve problemas com um jogo ou software no passado e publicou em um formulário, talvez perceba que as pessoas solicitam que você publique seu registro. Bem, isso é o que eles estão pedindo. Então, vamos começar a falar sobre isso. E a forma mais padrão ou simples de digitar a palavra imprimir, abrimos e fechamos um par de parênteses e, entre esses parênteses, podemos usar um par de Não importa, mas o que quer que comece, tem que terminar. Então, se tivermos aspas simples aqui, você não pode digitar a palavra não como você vê lá, porque estamos tendo um problema em que o T não está incluído e, basicamente, ele está parando aqui neste apóstrofo, a aspa simples, e continua após o Então, neste caso, se vamos ter algo assim lá, precisaríamos colocar aspas e continua após o Então, neste caso, se vamos ter algo assim lá, duplas para o início e o começo, não digite isso corretamente. Portanto, você pode usar qualquer um, mas dependendo do que você está escrevendo, isso pode limitar você. Então, a primeira coisa que vamos digitar aqui é Hello world. Agora, isso é fundamental ao aprender qualquer linguagem de programação que imprimimos no console Hello World Então, é como um rito de passagem. É algo que todo mundo faz quando experimenta um idioma pela primeira vez. Tudo bem. Então você pode vir aqui e apertar este botão play aqui no topo. Com o pequeno badalo, e isso reproduzirá a cena atual Ou você pode clicar neste botão de reprodução aqui na parte superior. Eu digo Run Project. E se você clicar na que diz Executar projeto, será exibida uma tela para selecionar sua cena principal, que, neste caso, usaremos a que já temos, então você pode simplesmente clicar na opção selecionar atual e ela será executada Você notará que uma janela se abrirá. Espero que sem problemas. E você verá no console aqui embaixo que imprimimos Hello world. Então, já aprendemos a imprimir no console. Então, no mínimo, agora você tem sua primeira inscrição Não é um aplicativo muito interessante, mas é algo que você criou que funciona. Agora, ao longo deste curso, se imprimirmos, é mais do que provável que esse seja o método que vou usar, mas há algumas outras coisas que vale a pena observar aqui. E um deles é impresso com dois Ts. E o que isso basicamente vai fazer é colocar uma aba entre os objetos. Então, se gostarmos disso e separarmos nossos objetos com uma vírgula e continuarmos jogando isso, você verá na saída agora é um espaço por tabulação entre nossas palavras Se tivermos dois objetos diferentes como esse, podemos imprimir no final, um T e um S, e isso só colocará um espaço entre cada objeto, exatamente como tínhamos inicialmente, onde tínhamos hello world como peça única. Agora, também temos impressora com TWors e isso é, na verdade, eu o chamo de impressora, mas é mais um erro de impressão E você notará quando executarmos isso que isso realmente aparece em nosso console em vermelho com um pequeno ponto vermelho lá Então, isso é algo que podemos usar se quisermos mostrar um erro no console. Há algo que podemos ver. E como é vermelho e o resto do nosso texto é branco, é algo para o qual podemos pular imediatamente. E isso nos deixa com uma última opção aqui, que é imprimir em bruto. Agora, se fizermos isso, você não verá nada aqui na saída do console. Mas o que isso faz é , na verdade ser impresso janela do console que está sendo exibida nos bastidores e ainda deve ser exibida em nossos registros. Isso deve cobrir a impressão, sendo possível fazer todos esses métodos de impressão aqui. Então, novamente, temos a impressão impressa como vemos aqui. Temos dois Ts impressos. Estrondo. Então, lá. E, para observar, você não precisa ter um espaço após a vírgula, mas tem uma aparência melhor É uma espécie de coisa normal que as pessoas acabam fazendo. Mas eu vou pegar impressões digitais com um S. E aí está. Vá em frente e digite bed in. O que mais temos? Temos impressora, que está imprimindo seus próprios erros. E tínhamos a impressão em bruto. Portanto, existem todas as maneiras diferentes de imprimir no console, é claro, menos imprimir em bruto, o que só seria útil para nós se acessássemos nosso registro Mas lá vamos nós. Há todas as maneiras diferentes de imprimir, e isso será suficiente nesta lição aqui. E na próxima, vamos seguir em frente e vamos entrar em algumas variáveis e/ou matemática. 4. 04 Variáveis: Tudo bem. E nesta lição, vamos seguir em frente e começar a falar sobre variáveis. E se tivermos tempo, entraremos na matemática. Então, variáveis. O que eles são? Bem, eles são algo que podemos usar para representar qualquer dado. Assim como antes, quando tínhamos um dado que era definido e assinava um par de aspas, podemos definir isso como uma variável, o que seria muito útil, por exemplo, se tivéssemos uma frase muito longa e pudéssemos digitar apenas uma palavra ou uma letra, e isso poderia significar exatamente a mesma coisa. Portanto, uma variável é um rótulo que você pode usar para armazenar dados, como os que imprimimos antes com o Hello world. Então, vamos adicionar isso em um script. Então, vamos criar um pouco de controle. Vou adicionar um script aqui. E eu vou continuar e chamar isso. Vamos continuar e chamaremos isso de variáveis. E clique em Criar. E a única que precisaremos aqui será nossa função pronta, é claro. E sim. Tudo bem, então vamos em frente e vamos colocar o Type Pass de volta lá E nossas variáveis vão ficar aqui no topo. Então, para criar uma variável, tudo o que precisamos fazer é digitar VAR VAR para variável. Coloque um espaço lá e podemos digitar sempre que quisermos aqui. E esse será o nome da nossa variável. Então, o que vamos colocar aí é vamos chamar isso de saudação, certo? E, no mínimo, isso é tudo o que precisamos fazer. Podemos atribuí-lo mais tarde, se quisermos. Bem, na verdade, vamos atribuí-lo aqui no topo. Então, vamos apenas dizer iguais. Então, vamos dizer saudação é igual, e podemos colocar nosso par de aspas, e você pode dizer olá, novo W. Agora, temos uma pequena frase aqui, mas podemos colocá-la onde quer que coloquemos a Então, se prosseguirmos e imprimirmos nossa saudação variável, e se prosseguirmos e executarmos isso, você verá aqui embaixo em nosso manual que obteremos a saudação que digitamos na parte superior obteremos a saudação que digitamos Agora, você pode digitar quando quiser aqui. Você pode fazer isso pelo tempo que quiser. E tudo isso será representado por essa palavra singular. E se quiséssemos ir mais longe, poderíamos simplesmente transformá-la em uma letra singular como G e fazer isso de novo. E, como você pode ver , uma letra representa tudo isso. Agora, para fins de uma variável, especialmente aquelas que estão no topo aqui, usar uma letra como essa é nomenclatura terrível porque alguém entra olha isso. Você pode ver que há uma variável chamada G, mas ela não diz o que é E uma variável deve dizer exatamente o que é e o mínimo de contexto possível. Então, vamos deixar isso como uma saudação porque é isso que está acontecendo aqui Temos uma saudação que está acontecendo, certo? Eu só controlo para salvar. Então, agora temos nosso primeiro programa em execução e agora estamos usando variáveis. Agora, parte de cada variável terá algum tipo de dado conectado a ela. Isso normalmente é chamado de valor. Agora, não importa que tipo de dados sejam esses. Eu sempre posso ser rotulado como um valor. Então, no nosso caso, greeting é o nome da variável e Hello New World é nosso valor Agora, um dos benefícios que temos com isso é que dá um pouco mais de trabalho. Mas digamos que viemos aqui e quiséssemos usar essa frase ou aquela saudação repetidamente , repetidamente, em todo o nosso código Você pode imaginar ter que vir aqui e editar todas essas coisas se quiser fazer uma alteração na sua saudação, depois vir aqui e editar todas elas uma por uma Bem, com a variável, podemos fazer isso aqui no topo. Então, em vez de olá, novo mundo, diremos olá e bem-vindos ao programa Mundial. E como estamos usando uma variável aqui, acabamos de alterar essa frase em todas essas linhas de código ao mesmo tempo. Agora, como eu disse, se fôssemos passar por isso um por um, seria extremamente chato Como mencionei anteriormente, podemos definir isso mais cedo ou podemos definir isso mais tarde e, na verdade, também podemos sobrescrever isso Então dizemos saudação, que é o nome da nossa variável, e diremos igual, direi que esse é meu Então, veremos que a grade superior será a que está colocada aqui na parte superior Mas depois disso, vamos mudar o que essa variável significa. Estamos alterando o valor disso e, em seguida, imprimiremos nosso novo valor. Se prosseguirmos e jogarmos isso, aí está. Você pode ver isso aí. Assim, podemos alterá-lo na parte superior, o que, idealmente, você deve fazer quando puder, ou você pode alterá-lo mais abaixo dentro do seu script em um momento posterior. Você pode alterá-lo ou assiná-lo para algo completamente diferente. Tudo bem Então, isso nos dá uma visão geral rápida aqui sobre variáveis. Então, o que vou deixar aqui é que existem alguns nomes, algumas regras que você deve tentar seguir quando se trata de nomear suas variáveis Agora, essas regras normalmente são um nome de variável. variável pode ser nomeada usando letras, números e sublinhados, que não podem usar espaços no nome da variável A linguagem simplesmente não permitirá que você faça isso, e você não pode iniciar o nome das variáveis com um número. Isso é algo para se ter em mente. Evite Você também deve evitar usar qualquer palavra-chave ou nome de função que já exista no idioma, ou você receberá um erro. E você aprenderá ao analisar o que é uma palavra-chave e o que não é. E uma palavra-chave seria algo como VAR there ou variable. Agora, você pode se perguntar quando algo assim pode surgir. Mas e se você quisesse que uma variável chamada pass representasse a senha, o que você viu ao criar o script que passa na verdade já é uma coisa, então não podemos fazer isso. E por último, o nome de uma variável deve ser curto, mas descritivo ao mesmo tempo do dado que ela contém Então, por exemplo, ter uma variável chamada comprimento do nome seria muito mais apropriado e aceitável do que algo como comprimento do meu nome. Agora, ambos transmitem a mesma informação, mas um deles é muito mais curto, é mais conciso e, é mais conciso e geral, será visto como um nome de variável melhor Ok, agora, algo que vale a pena notar também quando se trata nossos erros variáveis é observar como tudo isso está em minúsculas Se tivéssemos algo disso em algum ponto como maiúscula, como você vê, obteremos um erro lá de cima, e vemos na parte inferior do identificador que a classificação com G maiúsculo não é declarada no escopo atual Então, o que isso significa é parece que estamos tentando usar uma variável, mas essa variável não existe. Portanto, a capitalização será algo em que vale a pena prestar atenção, especialmente na codificação Tudo bem, então vou terminar aqui para dar uma olhada rápida nas variáveis E na próxima, começaremos a analisar alguns desses diferentes tipos de dados. Ou seja, começaremos a analisar as cordas. 5. 05 cordas: Tudo bem. Hoje, vamos dar uma olhada nas cordas. Strings é um tipo de dado. Então, vamos começar. Tudo o que fiz aqui foi criar um novo script, é claro, para que as sequências de caracteres pertençam especificamente a esta lição Agora, como programadores, nós dois definimos e reunimos alguns dados para armazenar, como você viu anteriormente com nossas variáveis, e isso ajuda se pudermos classificar os diferentes tipos de Agora, o tipo que estamos usando foi chamado de string. E uma string é qualquer coisa que entre um par de aspas, sejam as aspas duplas ou as aspas simples que mencionamos anteriormente Então, nosso olá, ou melhor nossa variável de saudação que estávamos usando estava contendo um dado, e esses dados podem ser classificados como uma string para seu tipo Tudo bem. Portanto, ao atribuir uma variável, é uma prática recomendada atribuir também o tipo de variável que ela é E se formos em frente e dermos uma olhada, se voltarmos e recebermos nossa má saudação, tornaremos isso igual a Hello New World, como tínhamos antes Na verdade, podemos definir isso de duas maneiras diferentes. Assim, podemos colocar dois pontos após o nome da nossa variável e digitar o tipo de dados estamos procurando, que pode ser uma string E você pode ver que essa é uma maneira classificá-la como uma string Agora, como alternativa, podemos usar o operador Walrus, que é dois pontos ao lado do sinal de igual Temos cólon igual. E o que isso vai fazer é pegar nossa nota e atribuí-la igual a esse dado E então, qualquer que seja esse tipo de dado , também é como vamos classificá-lo Então, vamos classificá-lo nesse dado de acordo o tipo desses dados e defini-lo como igual a esses dados Portanto, existem duas maneiras diferentes de fazer isso e é altamente recomendável que você faça isso. É claro que, nessa linguagem, você não precisa, mas especialmente em projetos muito maiores, isso vai ajudar um pouco no desempenho, sendo capaz de classificar todas as coisas de antemão Tudo bem, então o que podemos fazer aqui é cada classe, neste caso, uma string lá, como você viu quando eu digitei isso, e ela mudou para uma cor mais verde Tudo aqui tem um caso diferente. Então, vou criar uma nova variável, e vou chamá-la de nome com N maiúsculo porque todas as letras minúsculas já foram usadas. Então eu vou dizer que nome é igual, eu quero ir em frente e colocar meu nome E lembre-se, ainda queremos classificá-lo. Então, vou usar o operador Walrus aqui. Então, eu vou dizer que cólon é igual. Agora, tudo tem um conjunto de métodos. Então, se eu digitar meu nome aqui ou variável, e eu fizer um ponto final, você pode ver todas essas coisas diferentes aparecerem, todas elas relacionadas a uma string. E o que vamos ver especificamente agora é chamado de capitalizar Se entrarmos e apenas colocarmos o nome em maiúsculas, podemos ver isso concluído Agora é azul. Temos parênteses abertos e fechados, e nosso erro aqui desapareceu de onde esperávamos Agora, se colocarmos essa declaração impressa e reproduzirmos o que observaremos em nossa saída, tudo terá maiúsculas depois de cada espaço Então, mesmo que eu coloque tudo em minúsculas, como você vê aqui e a executemos novamente, você pode ver que ainda Agora, capitalizar é algo que você deve fazer para coisas como nomes e títulos, como seria de esperar Agora, com o nome maiúsculo, você pode ficar um pouco convencido de que isso transformará tudo em capital, mas isso não acontece E é aqui que o Python meio que faz isso melhor porque eles o chamam de título, o que eu acho mais apropriado Nesse caso. Mas de qualquer forma, você percebe que é assim que a capitalização funciona. Da mesma forma, podemos transformar tudo em maiúsculas e minúsculas Então, tudo o que precisamos fazer aqui é, em vez de chamar capitalize, você pode dizer que podemos fazer dois sublinhados E se executarmos isso, teremos todas as capitais. Está faltando um parêntese, que é o que nosso erro estava nos dizendo lá embaixo Agora, se dermos uma olhada, veremos que tudo está em maiúsculas. E se fizéssemos isso de outra forma, então se tivéssemos todas as letras maiúsculas e tivéssemos sublinhado mais baixo com nossos parênteses abertos e fechados, agora tudo estará Assim, podemos fazer com que as coisas sejam capitalizadas. Para coisas como títulos e nomes. Podemos transformar tudo em maiúsculas e podemos transformar tudo em minúsculas. Agora, com cadeias de caracteres, também podemos adicioná-las e usar algo chamado podemos usar o que é visto como um espaço reservado Então, por exemplo, voltamos aqui. Isso retornará o Controle Z ou o Controle Z até que tenhamos todas as letras minúsculas E digamos, por exemplo, que queremos imprimir uma saudação Queremos dizer Olá. Bem-vindo à programação, e queremos colocar o nome aqui. Mas também queremos incluir. Queremos que o nome seja dinâmico. Portanto, talvez não saibamos qual é o nome no momento em que chegarmos ou devemos saber qual é quando chegarmos a esse ponto. Mas talvez não saibamos o que é no início. Agora, isso pode ser porque nosso usuário não inseriu e não nos disse o que é. Ou é apenas algo que não temos e que podemos mudar mais tarde. Mas tudo o que vamos fazer é usar o sinal de porcentagem e a letra minúscula S. Agora, isso é um espaço reservado para uma string, e tudo o que precisamos fazer é fora das aspas, mas ainda dentro dos parênteses, fazemos uma porcentagem e podemos digitar o nome da nossa variável aqui, que é apenas o nome com N. E se executarmos isso, podemos ver que podemos onde essa porcentagem S está com qualquer que seja o valor do nome da nossa variável ou o valor da nossa variável. Agora, isso muda um pouco. Se você quiser usar várias variáveis , vamos continuar e dizer que crie outra. E diremos, vamos chamar isso de trabalho e definiremos isso como recurso, e diremos: Olá, bem-vindo à porcentagem de programação S. Você é uma porcentagem Agora, você pode pensar que poderíamos fazer outro como esse, ou você pode pensar que apenas fazemos outra porcentagem de trabalho lá. Mas, na verdade, o que fazemos é ter nosso sinal de porcentagem aqui e usar colchetes. Agora, aqui dentro, é aqui que podemos colocar todos os nossos nomes de variáveis aqui, separados por uma vírgula na ordem em que queremos que apareçam Então, se executarmos isso, podemos ver que tudo está preenchido, e você quer ter certeza de que preencheu isso incorretamente porque, novamente, a ordem em que você preenche aqui é a ordem que será preenchida na frase E, obviamente, isso não faz sentido. Bem-vindo ao professor do programa. Não parece certo. Então, tenha isso em mente. Observando também que, se você tem várias coisas aqui, como se fôssemos assim, certo? Se tivermos muitas variáveis listadas, tudo bem. Não vamos ter nenhum problema. A única vez que teremos um problema é se você não tiver o suficiente. É aí que nosso erro vai acontecer, suponho que eles não tenham mais nenhum erro aqui. O que você vê? Eu sei, aí está simplesmente não aparecendo como um erro. O que eu esperava. Mas aqui no console, em vez disso, ele diz que não há argumentos suficientes para formatar a string ou para formatar a string. Então, está nos dizendo que não temos argumentos suficientes aqui que realmente deveriam ter aparecido mais como um erro. Mas você pode ver que ele aparece. Basta colocá-los de volta na ordem correta. Portanto, se você estiver preenchendo informações, certifique-se de ter informações suficientes e preenchê-las na ordem correta. Agora, direi que, alternativamente, você poderia preencher isso de outra forma. No entanto, ocupa mais espaço, parece mais confuso, tártaro para ler E com isso, estamos falando sobre fazer basicamente essa adição. Tudo bem, então assim, boom, de novo, para que possamos fazer algo assim. E veja, você pode fazer isso dessa maneira, mas parecia um pouco mais problemático ou não tão bonito, mas você certamente pode fazer dessa maneira E estou perdendo um espaço entre lá e aqui. E você verá que, se imprimirmos isso, isso nos dará o mesmo resultado. Então, essas são duas maneiras diferentes usar suas variáveis dentro de suas strings. Tudo bem. Então, isso bastará para cordas. seguir, examinaremos alguns outros tipos de variáveis. 6. 06 Inteiros e floats: Tudo bem. Hoje, vamos dar uma olhada nos números, como você provavelmente pode ver pelo nome do meu script. Aí? Agora, os números na programação podem ser divididos em duas categorias diferentes. Agora, os números na programação, ou melhor, são usados na programação para todos os tipos de coisas, como marcar pontos, diferentes tipos de mecânica de jogo, algoritmos, visualizar dados diferentes, algumas das coisas que você viu são arte ou shaders que podem ter vindo apenas da matemática Agora, esses números serão chamados de número inteiro ou flutuante Agora, um flutuador também pode ser chamado de número real. Então, se você já ouviu alguém falar sobre números reais, provavelmente está falando sobre carros alegóricos Vamos começar com números inteiros. Os números inteiros são um número inteiro. Agora, a classe deles, se você quiser criar uma variável, digamos BInum, se você quiser criar uma variável para isso, um número inteiro, é apenas reduzida É isso mesmo. E um carro alegórico será classificado da mesma forma que um flutuador em letras minúsculas Tudo bem. Então, se você quiser criar uma variável, essas são as duas maneiras de fazer isso, e eu vou criar outra aqui só para tê-las aqui no topo. Então você sempre pode dar uma olhada nisso. Agora, quando estamos imprimindo coisas, podemos imprimir números. Então, se digitarmos cinco aqui e imprimirmos, podemos ver cinco aparecendo em nosso console. Agora, o que pode ser um pouco diferente é que podemos realmente fazer matemática aqui. Então, se dissermos cinco, são dez, e talvez queiramos colocar um espaço lá, torne-o um pouco mais legível Dê uma olhada. Isso vai imprimir nosso total aqui de 15. Portanto, podemos realmente realizar um subconjunto da matemática dentro desses. E podemos fazer isso com adição. Podemos fazer isso com a multiplicação. Podemos fazer isso com subtração. E, claro, podemos fazer isso com divisão, como você pode ver lá. E você vê que a divisão neste caso nos deu um depurador, nos deu um depurador, e isso é porque a divisão de números inteiros entra em O coração decimal será descartado. Portanto, isso não acontece de forma desigual. Na verdade, isso nos devolve um carro alegórico. E como estamos dividindo dois números inteiros, na verdade não divulgamos isso para Então, obtivemos zero, mas não obtivemos nada depois disso. E é isso que esse erro está nos dizendo lá no depurador E chegaremos a isso quando tocarmos em carros alegóricos aqui em um momento Mas o que também podemos fazer é apoiar expoentes e raízes quadradas Por exemplo, podemos fazer P, que nos dá um número elevado à potência, outra coisa ou um expoente. Então, se dissermos dois, colocamos um Tama. Como você pode ver, temos nosso número base seguido pelo nosso expoente. Se dissermos dois para a potência, vamos com cinco. Tudo bem? Vamos seguir as regras dos expoentes, teremos duas vezes duas vezes duas vezes duas vezes dois Então, isso nos daria duas vezes dois, que é quatro vezes dois, que é oito, vezes dois, que é 16, vezes dois é 32. Então, se executarmos isso, devemos obter 32 como resultado. Lá vamos nós. Então, vemos que eliminamos expoentes. Da mesma forma, também podemos obter a raiz quadrada de algo com SQRT e a mesma situação aqui Situação semelhante. Nós passamos em um número. Nesse caso, faremos com 32. E nós o repassamos. Vamos ver quais tempos em si nos darão 30 ou sim, quais tempos em si nos darão 32. Qual é a raiz quadrada disso? E vemos que isso nos dá uma boia aqui. 5.6 5685, 42, 4942, três, oito. Esse é um número longo, mas se você multiplicar esse número por si mesmo ou por ele mesmo, obterá 32 Como você pode ver, demos a ele um número inteiro e recuperamos um fluxo. E com a raiz quadrada, isso certamente é possível com expoentes, o que não acontecerá, a menos, é claro, que usemos um flutuador para começar E, como você pode ver, a raiz quadrada espera uma flutuação para o primeiro argumento isso que isso está essencialmente sendo convertido em um flutuador, que seria o mesmo que fazer 32.0 Nesse caso. Agora, você pode usar qualquer combinação de matemática que quiser aqui, então você pode usar qualquer combinação de usar todas elas juntas. Digamos, por exemplo, que temos cinco mais parênteses três elevado a 7/3 e depois subtraímos nove Agora, se estamos usando a cama Miss, bod Miss PEMDS, seja qual for a ordem de operação, examinaremos nossos colchetes ou parênteses Eles são parênteses. Não sei por que alguns lugares chamam os colchetes, mas sim parênteses Então, nesse caso, examinaremos primeiro o interior daqui. Em seguida, veremos os expoentes. Então, a primeira coisa que vamos fazer é nossa matemática aqui. Então, três elevado à potência de sete. E então temos que fazer o que está dentro dos parênteses. Então precisamos dividi-lo por três, certo? Porque o próximo passo é nossa multiplicação e divisão. Nesse caso, temos apenas divisão, então vamos dividir isso por três. Isso nos deixa agora com cinco mais nosso resultado aqui, e então subtrair nove e adicionar a subtração poderia ser feita ao mesmo tempo, apenas indo da esquerda para E se você fizer todas essas contas, obterá uma saída de 725 Tudo bem. Então, isso não importa. A ordem em que fazemos isso bem, a ordem em que digitamos. O pedido será feito da maneira correta, e podemos misturar e combinar todas as diferentes. Basicamente, você pode fazer qualquer fórmula matemática aqui Tudo bem, então agora, quando olhamos para carros alegóricos, eu disse que tínhamos cinco menos dez Então, se voltarmos aqui para essa situação, tivemos cinco menos dez, e fazemos isso e temos um pequeno depurador, desculpe, desculpe, E temos um pequeno depurador dizendo: Ei, esse é o float e tudo que está zerado está sendo deixado Bem, e se quisermos isso? Bem, temos que converter um desses em um flutuador Então, ou temos que fazer com que tenhamos um número sólido como esse. Podemos fazer 0,0 em um deles. E você vê agora que podemos realmente obter nosso número decimal. Ou o que podemos fazer é fazer pontos, e eles ainda têm isso? Não, eles não têm. Não aparece. Então, o que podemos fazer é simplesmente digitar a palavra lote e colocar um dos nossos números entre parênteses Isso vai converter nossos dez em um carro alegórico. Então, podemos fazer isso dessa maneira também. Se não soubermos necessariamente qual é o número que está sendo inserido, se isso faz sentido. Então, se você tem um usuário digitando números, você não sabe necessariamente se será um número inteiro ou flutuante que o usuário Então, podemos simplesmente convertê-lo no momento, certo? Então é assim que resolveríamos esse problema lá. Simplesmente convertemos um deles em um fluxo. Agora, no código, qualquer número que tenha um ponto decimal é chamado de fluxo E usamos esse termo na maioria, se não em todas, as linguagens de programação, como mencionei anteriormente, elas podem ser chamadas de números reais. E todos os idiomas devem ser cuidadosamente projetados para gerenciar adequadamente esses números decimais Como usuário, é claro, apenas usando o idioma, você não precisa se preocupar com a forma como o idioma está lidando com isso. Só saiba que está sendo tratado. E desde que a linguagem esteja lidando bem com isso, você só precisa se preocupar com isso. Agora, qualquer uma das expressões matemáticas que já vimos, também podemos fazer isso com flutuadores Eles não são exclusivos dos números inteiros. E como você viu aqui com nosso 5/10, e convertemos um em um flutuador, você pode usar números inteiros e flutuantes juntos ao mesmo tempo 7. 07 Constantes e comentários: Tudo bem. Agora, antes de prosseguirmos, quero falar sobre uma variável especial chamada constantes e quero falar sobre comentários Agora, esses são pequenos tópicos, então vou abordar os dois aqui em um único vídeo, e isso deve levar apenas alguns minutos. Uma constante difere de uma variável. Agora, você se lembra quando eu disse que poderíamos mudar o que é uma variável ou podemos mudar seu valor a qualquer momento. Bem, uma constante é uma variável especial, e essa variável especial não pode alterar seu valor depois de definida. Então, uma vez que esse valor é definido, ele nunca pode ser alterado, e é exatamente o que é. Portanto, se você tentar alterá-lo mais tarde, devemos encontrar um erro que aparece em nosso código. E podemos ir em frente e dar uma olhada nisso. E tudo o que precisamos fazer para criar algo chamado constante em vez de uma variável típica é fazer CONST em vez de VAR E como você pode ver, temos alguns pop-ups aparecendo lá embaixo. Não se preocupe com isso. Mas podemos ligar constantemente. E, novamente, se chamarmos isso de MOM, e ver, ainda temos um erro aqui porque ele espera que eu defina a constante para alguma coisa Então, se eu definir isso para, digamos, cinco, total é igual a cinco, veja, agora o erro desaparece, a constante foi Agora, o problema aqui não é realmente um problema, mas se chegarmos aqui, tentaremos definir meu número para um número diferente, vamos ver se o erro é, é. Aí está. Então você vê que não pode atribuir um novo valor a uma constante. É o que está aparecendo lá embaixo. E vemos isso na linha sete, caractere cinco. Um, dois, três, quatro, cinco, então no final do nome da nossa variável, porque estamos tentando defini-la no final do nome, o que faz sentido. É assim que você define as coisas aqui. Então, vamos inventar esse erro. Portanto, você só quer usar coisas com consentimento que não devem ser alteradas. Por exemplo, se você estiver criando um jogo ou aplicativo que tenha uma conexão on-line entre usuários, provavelmente definirá isso para uma quantidade máxima de usuários ou uma quantidade máxima de jogadores para cada um dos seus servidores. Portanto, você só quer usar constantes para coisas que nunca serão alteradas Passe o tubo de volta para lá novamente, limpe esses problemas . Agora, um comentário. Um comentário pode ser bom e ruim. Portanto, eles não são exclusivamente de uma forma ou de outra. Depende apenas quando você deve ou não usá-los. Agora, os comentários são como pequenas notas que você pode deixar para si mesmo para explicar o que está acontecendo no trecho de código, por que você fez algo de uma maneira específica ou o que mais precisar. Agora, um comentário está realmente na tela agora, e você o viu esse tempo todo. comentários podem ser úteis para qualquer desenvolvedor futuro que precise examinar um trecho de código que outra pessoa tenha feito, ou talvez você tenha trabalhado nele em algum momento e depois outra pessoa venha dar uma olhada. E um comentário, como eu disse, já está na tela, e tem isso você pode conhecê-lo como um símbolo de hashtag, ou se você for um pouco mais velho, você pode conhecê-lo como um símbolo de libra E configuramos logo acima onde temos nosso sublinhado pronto Temos essa hashtag e ela diz chamada quando o nó entra na árvore da cena pela primeira vez Agora, isso, como é prefixado com esse símbolo de hashtag, isso é um comentário nesse idioma Agora, em alguns idiomas, talvez seja necessário fazer a barra dupla, assim, para criar um comentário Mas no script GD, temos apenas nosso pequeno símbolo de hashtag lá Agora, você também pode usar isso para comentar uma linha de código. E a razão pela qual podemos fazer isso é porque qualquer coisa com um comentário que tenha sido comentada será ignorada quando o código Então, se tivermos uma impressão e imprimirmos, lembre-se de que, se tentarmos isso, ela será impressa conforme o esperado. Mas também podemos colocar essa pequena tag de hash aqui, e ela é comentada. Agora é só reclamar porque não temos nada depois de nossa função pronta aqui, então vou colocar o passe de volta lá E você vê que agora ele não é impresso porque é ignorado. Agora, se tivermos muito código Talvez estejamos tentando coisas. Não está funcionando. Quero experimentar alguns métodos diferentes, mas não queremos necessariamente nos livrar da tentativa que já tentamos. Bem, na verdade, podemos comentar grandes seções de código com uma tecla de atalho E para fazer isso, tudo o que precisamos fazer é destacar todas as partes que você deseja Digamos que queremos isso, queremos manter o final no começo. Tudo o que precisamos fazer é destacar essas peças e pressionar Control K. Agora, se você quiser voltar, isso pode ser Command K, eu sei que eles gostam de usar comando em vez de controle, eu acredito, para muitos de seus atalhos Em geral, o Controle K não funciona. Experimente o Command K. Mas isso é tudo o que temos que fazer, e isso é comentar toda a seção Agora, da mesma forma, se destacarmos todos eles e pressionarmos o Controle K novamente, podemos descomentar todos ao mesmo tempo E tudo bem, então há comentários e como eles funcionam. Posteriormente, falaremos sobre um código limpo mais perto ou mais perto do final deste curso, onde falaremos um pouco mais sobre quando você deve usar comentários e quando não deve. O que são bons comentários, o que são comentários ruins. Mas, por enquanto, é isso que os comentários são, e essas são as constantes Eu só queria que você soubesse sobre eles. E vamos seguir em frente. Nos vemos na próxima. 8. 08 Listas: Tudo bem. Vamos dar uma olhada em uma lista. Outro nome para eles também é array ARRAY, mas é mais comumente referido, pelo menos por minha experiência como lista. Então, o que é uma lista? Uma lista é um grupo coletado de itens que são colocados em uma ordem específica, e você pode criar uma lista que contenha qualquer tipo ou combinação de dados diferentes. Assim, podemos ter números inteiros, flutuantes e strings combinados em Agora, sua lista não precisa estar relacionada. Os elementos não precisam estar relacionados entre si. No entanto, faria sentido se fossem. Pense se tivéssemos diferentes tipos de pizzas, certo? E cada um desses diferentes tipos de pizza tinha uma lista de coberturas E então eles tinham um outro elemento aleatório lá. Eles tinham quem o fez ou quem fez esse tipo específico. Não está realmente relacionado, então você provavelmente existe uma maneira melhor de lidar com esse tipo de situação. Mas as listas são indicadas por seus colchetes, assim como quando estávamos usando nossas variáveis dentro de nossas cadeias de caracteres com esses espaços reservados, uma lista é cercada por E esses colchetes, cada item é separado por uma vírgula Então, vamos dar uma olhada em uma lista de mantimentos. Vamos fazer compras. Temos nossos colchetes e vamos aos tomates Ou, você sabe o que, vamos ser singulares. Vamos comer tomate, picles. Drop and pãezinhos. Tudo bem, então se imprimirmos isso, se imprimirmos esses mantimentos, você verá que teremos colchetes colchetes Você provavelmente não quer os colchetes. Você provavelmente não quer esse tipo de saída. Talvez você esteja procurando por um item individual. Bem, vamos dar uma olhada em como podemos acessar itens individuais dessa lista. Para acessar um elemento ou item na lista, basta informar ao GD Script a posição de índice do item que estamos procurando Então, se prosseguirmos e imprimirmos isso, se fizermos compras, colocaremos um par de colchetes depois disso, e agora podemos inserir E esses números realmente começarão em zero. Então, mesmo que contemos um, dois, três, quatro, um computador vai começar do zero. Então, tomate será zero, picles um, ketchup dois e Então, se fizermos compras zero e imprimirmos isso, veremos que vamos colocar tomate lá Se fizermos uma fileira, vamos pegar picles. Agora, se ficarmos fora de ordem, por exemplo, se escolhermos quatro porque contamos um, dois, três, quatro itens, pensamos: Ok, queremos o item número quatro, teremos um erro porque quatro seria na verdade o quinto item. Então, o que realmente queremos é três para colocar o último item lá, ou pãezinhos, se você estiver recebendo o item errado, apenas certifique-se de escolher o valor do índice e não o número do item. Já vi algumas pessoas ficarem confusas isso ou se confundirem com essa confusão. Agora, como nesse caso, são sequências de caracteres, podemos usar coisas que aprendemos antes Então, podemos usar duas maiúsculas, por exemplo, e obter uma maiúscula. Opa. Aqui vamos nós. Como você pode ver lá. Também podemos diminuir, capitalizar e tudo Vamos ver, uma vez que colocarmos isso aqui, obteremos uma boa lista Mas você pode ver todas as coisas normais que temos lá com todas as cordas. Assim, podemos fazer nossa capitalização superior ou inferior. Agora, e se você quiser manter tudo em um tipo definido? Então, definir isso para uma lista como essa seria o equivalente a fazer isso e configurá-la para uma matriz, o que é bom. Uma matriz pode conter todos os tipos diferentes de itens. Mas se você quiser restringi-lo ainda mais ou talvez apenas reduzir ou talvez apenas um pouco mais de desempenho, o que podemos fazer quando o declaramos como uma matriz é, na verdade, digitá-lo assim Colocamos os colchetes e, por dentro, declaramos qual tipo pode estar Então, neste caso, todos os meus são cordas. Então, vou usar uma corda para o interior. E o que isso significa aqui, o elemento de colchetes tight, e depois colchetes novamente, theta tight logo ao lado de nossa declaração de uma matriz diz ao nosso script ou código que somente uma string pode estar Então, se colocarmos um número, um inteiro, obteremos um erro Então, é assim que podemos restringir nossa lista a um tipo específico e extrair pouco mais de desempenho, um pouco mais Mas, novamente, a menos que você trabalhe em algo que seja mais um grande projeto, provavelmente não notará. Portanto, basta chamá-lo de um array normal ou usar o Walrus Agora, algo que eu não mencionei antes é que, quando olhamos para as cordas, podemos realmente obter o comprimento Então, se obtivermos luz, assim, obteremos o comprimento desse caractere ou daquele item. Então, neste caso, vamos para o índice três, que é pães. Queremos o comprimento, e isso nos dará quatro porque temos quatro caracteres, B, U e S. Agora, o que é diferente é uma string. Você também pode acessar o índice de uma string. Então, se entrássemos aqui e pedissemos o Índice um, dessa string, obteríamos a letra U porque cada caractere tem seu próprio índice dentro da string. Então B é zero, U é um, N é dois e S é três. Então, estamos acessando o terceiro elemento. Estamos entrando em nossas compras, obtendo o terceiro valor do índice e obtendo o terceiro valor do índice desse item Espero que isso faça sentido e não seja muito confuso. Mas se você quiser apenas a frente ou o verso de uma lista automaticamente, podemos obter o índice de menos um, e isso sempre nos dará o último item da lista, que neste caso, pãezinhos. Mas, como alternativa, também podemos, em nossa lista de compras, você pode simplesmente colocar um ponto na frente Você recebe o primeiro item, que seria tomate. Oh. Precisamos de mais um parêntese lá Podemos chamar dot front para tomate e podemos chamar dot Bat. Recebemos o último item da lista. Portanto, se você não quiser usar um índice, basta chamar dot front ou Dot Back se quiser obter o primeiro ou o último item. Agora, como nesse caso, são todas sequências de caracteres , lembre-se de que ainda podemos usá-las dentro de uma frase Então, vamos dizer, querida, ainda precisamos pegar alguns, e usaremos nossas porcentagens e, portanto, nosso jogador . Agora podemos inserir o que precisamos Então, podemos prosseguir e substituir o primeiro espaço reservado por mantimentos, e chamaremos Vamos usar o índice dois e, em seguida, podemos chamar Let's go with capitalize Agora, se imprimirmos isso, falta um parêntese no final Vá. Então, agora podemos ver nossa declaração aqui. Nosso item está sendo inserido e está sendo capitalizado Portanto, temos K maiúsculo para começar, o que funcionaria bem se tivéssemos uma lista de marcas, por exemplo. E, claro, você também pode fazer isso e preencher vários itens. Tudo bem, então isso serve para ser introduzido nas listas aqui. Continuaremos com mais alguns recursos no próximo vídeo. 9. 09 Adicionando e removendo: Tudo bem, continuaremos usando nosso mesmo script para este, já que ainda estamos falando sobre listas, e vamos falar sobre como podemos adicionar, vamos falar sobre como podemos adicionar itens à nossa lista Então, para fazer isso, estamos analisando isso, e a maioria das listas pode ser que a maioria das listas que criamos sejam dinâmicas, certo? O que significa que eles podem ser modificados. Estamos usando variáveis. Não fazemos isso de forma constante. Obviamente, uma constante não pode ser modificada. E a maioria dos que vamos criar serão para zivar, que serão dinâmicos, que significa que podemos adicionar e remover itens dessa lista Agora, você pode usar uma lista para acompanhar quais missões um jogador tem em um jogo, por exemplo Portanto, você precisa ser capaz de adicionar novos remover os que estiverem concluídos. Em termos de dados, podemos usar uma lista para usuários registrados. Agora, a maneira mais simples de adicionarmos a uma lista seria chamar o método append Então, se formos às compras, podemos chamar uma caneta para acrescentar pontos e, em seguida, tudo o que digitarmos aqui será adicionado à Então, se continuarmos e adicionarmos, vamos usar alguns Pringles, Nós digitamos isso. imprimir nossas compras antes e depois E podemos ver a diferença antes e depois de ser adicionada à lista. E você vê que uma caneta vai adicionar um item à lista e vai adicioná-lo ao final da lista. Então, isso terminará ou será adicionado ao final da lista. Agora, usar uma caneta nos permite adicionar itens de forma fácil e rápida a uma lista dinâmica, o que é fantástico. E isso significa que também podemos começar com uma lista vazia. Então, se entrarmos aqui, vou apenas comentar essa, possamos fazer a mesma coisa aqui. E vamos fazer disso uma lista vazia. Agora, se começarmos com esse Z, podemos começar com algo vazio e adicionar algo a ele. Isso também funcionará. É igualmente fácil. E criar uma lista como essa é comum, então nem sempre sabemos os dados que precisamos adicionar até que o programa esteja em execução. Às vezes, temos uma lista definida de opções e, outras vezes, talvez adicionemos a uma lista no futuro. Por isso, é sempre bom saber como podemos adicionar algo a isso. Agora, e se quisermos inserir em uma lista? Não queremos adicioná-lo ao final, mas queremos inseri-lo nele. Bem, em vez de adicionar um item em uma lista, talvez precisemos inserir um item em uma lista. E para inserir um item em uma lista , são necessários dois parâmetros. E isso significa apenas duas coisas que ignoramos. Então, quando fizemos uma caneta e colocamos um item aqui, isso seria um parâmetro. E quando inserimos um item, serão necessários dois desses parâmetros. Então, voltando à nossa lista antiga aqui novamente, basta confirmar isso. Lá vamos nós. E a posição da primeira é a primeira posição e a segunda o valor. Então, vamos prosseguir e chamar insert aqui, e podemos ver. A primeira coisa que colocamos é a posição. Então, digamos que queremos colocá-lo na posição dois, no índice dois. Então, agora, o índice dois é ketchup. Então, queremos colocar algo entre picles e ketchup Então, vamos comer picles, nosso novo item, e depois ketchup Então, depois de colocarmos nosso índice, colocamos um coma e inserimos nossa nova variável, desculpe, nosso novo item, que vou usar Pringles novamente E se imprimirmos isso, podemos ver pringles foi colocado entre os picles Fui inserido como índice número dois. Portanto, não só podemos adicionar ao final, mas podemos inserir um item em um ponto específico da nossa lista. Agora, quando um novo item é inserido em uma lista em nossa posição de caixa, um de nossos itens é colocado entre, bem, no nosso caso, dois e três, e temos um item totalmente novo. Fantástico. Agora, o fato de podermos adicionar à lista e inserir em uma lista é ótimo. Mas e se precisarmos remover um item da sua lista? Bem, podemos fazer isso facilmente. Tudo o que temos que fazer é chamar dot remove e, neste caso, com o novo sistema aqui, trata-se de remover em E vamos em frente e aprovamos o índice, certo? Então, se passarmos em dois agora, passaremos em dois. Isso vai remover o ketchup, então vamos comer apenas tomate, picles Isso é o que devemos ter quando executamos isso agora. Então aí está. Removemos o item no índice dois. Portanto, remover itens é bem simples, como você pode ver lá. Agora, haverá casos em que você desejará que você desejará obter um item e removê-lo ao mesmo tempo. E poderíamos fazer isso em várias linhas de código, mas não precisamos porque podemos realmente mostrar isso. E eu digo pop porque esse é o nome desses dois métodos que vamos aprender aqui, que são pop front e pop back. Então, se colocarmos Pop, underscore, front, e você ver quando imprimirmos mantimentos aqui novamente, o primeiro item vai faltar Mas isso, na verdade, não apenas o remove, como remover, remove o que acabamos de fazer. Mas isso também retorna o item frontal. Então, se armazenássemos isso em uma variável e chamássemos esse item, isso na verdade retornaria isso, e o primeiro item da nossa lista, que será nosso tomate que será removido, será atribuído ao item. Então, se imprimirmos o item depois, vamos pegar aquele tomate. E é o mesmo conceito. Se sairmos da parte de trás, pegaremos o último item, que serão pães. Portanto, os itens serão iguais aos pães. Tudo bem, então ele vai gritar com a gente lá Então, o que você gostaria que fizéssemos é porque isso não pode sugerir qual é o tipo, teríamos que declará-lo manualmente desta forma Portanto, há algumas situações em que você não conseguirá usar essa declaração inferida automática E você terá que fazer isso sozinho. Esse é um daqueles poucos casos em que você precisaria se optasse por seguir esse caminho, o que provavelmente deveria. Novamente, apenas algo para se acostumar. Dessa forma, você sempre pode obter o máximo desempenho possível. Dessa forma, se você reduzir a quantidade de otimização necessária posteriormente E a última coisa que vamos dar uma olhada neste vídeo é como podemos apagar um item, mesmo que não saibamos ou onde esse item está em nossa lista Se eu simplesmente voltarmos a imprimir nossas compras novamente, e não precisaremos mais dessa variável O que vamos fazer é chamar eras de pontos. E para isso, podemos simplesmente digitar o valor. Então, podemos entrar e dizer Keto. Agora, lembre-se de que isso diferencia maiúsculas de minúsculas quando se trata de molas. Portanto, um K minúsculo não será o mesmo que um Porém, para nós, parece o mesmo, ou nós o consideraríamos o mesmo. No código, há duas coisas completamente diferentes. Então, se chamarmos apagar e apenas passarmos o valor real, podemos entrar e ver que será apagado, não importa onde esteja em nossa linha Agora, você pode pensar: e se tivermos vários valores iguais e chamarmos de apagar Bem, ele só vai excluir ou apagar a primeira instância que encontrar, então vai passar e dizer: isso corresponde ao que estamos procurando Não. É isso, não. Isso é Sim e exclua. E isso vai parar por aí. Portanto, se você quisesse apagar vários, teria que continuar lendo no momento atual Aprenderemos uma maneira melhor se você quiser apagar todas as instâncias de um valor específico Mas, por enquanto, ele removerá apenas um item. Tudo bem, isso bastará para a aula de hoje ou para esta aula. Temos um pouco mais a aprender sobre as listas antes de prosseguirmos. Então, mais uma aula chegando. 10. 10. Empurrando e classificando: Agora, em nossa aula final sobre listas, veremos os métodos push e como podemos organizar nossa lista e obter o tamanho de nossa lista. O método push, existem dois deles. Eles nos permitem alterar o conteúdo da lista. Há empurrar para frente e empurrar para trás. Ambos aceitam um argumento e isso é um valor. Agora, ao usar push front, nosso valor é adicionado ao início da lista, como se você usasse insert no índice zero. Da mesma forma, quando usamos push back, nosso valor é adicionado ao final da lista, assim como quando usamos append Então, se dermos uma olhada nisso, podemos pegar nossas compras e usar o push front, e adicionaremos nossos Pringles E se dermos uma olhada nisso agora, teremos os pringles colocados no início da nossa lista Da mesma forma, poderíamos usar o push back para enviá-lo para o final da nossa lista. Agora, pessoalmente, geralmente acabo usando uma caneta quando quero no final da lista Mas temos a alternativa de empurrá-lo para trás, é claro, empurrar para frente em vez de inserir no deck zero Os métodos push são muito simples. Não é um conceito novo. São apenas mais dois métodos que você pode considerar uma forma alternativa de fazer isso. Agora, quando se trata de organizar nossa lista, você pode ver que, na maioria dos casos, nossas listas são criadas em uma ordem imprevisível medida que nosso programa é executado e à medida que adicionamos coisas a ele E nem sempre é possível controlar essa ordem, especialmente se o usuário inserir vários itens. E por causa disso, o problema se torna inevitável, na verdade. Mas estamos com sorte. Dentro do GD Script, podemos classificar nossa lista usando um método simples chamado SRT Agora, o SRT começará a classificar nossa lista em ordem alfabética, e isso também conta para números Vai ficar na ordem dos nossos números. Agora, vale a pena saber que os números são incluídos aqui em outros idiomas, ter números como uma lista que contém um, três e 025 ou 025 seria classificado na ordem de 1025 e três, enquanto na escrita GD aqui 025 e 25 são lidos exatamente como o mesmo número, permitindo que nossa classificação seja um pouco mais precisa do que Tudo bem, então vamos dar uma olhada se executamos o sort e depois imprimimos novamente. Depois, podemos dar uma olhada e ver a aparência normal, e então temos uma aparência ordenada que entra em ação aqui Agora, isso também ocorre com nossos números. Então, o que acontece se tivermos números como esse em execução e tentarmos classificar. Bem, veja, vamos encontrar o erro aqui. Porque não é realmente compatível com a classificação que resolvemos Então, o que precisaríamos nesse caso é que pudéssemos ter duas listas separadas aqui. Vamos chamar isso de numbs. Vamos fazer nosso um, 95, três, 287. E se resolvermos este, podemos ver que todos os nossos números serão classificados exatamente como esperaríamos em ordem Então, um, dois, três, 87, 95. Portanto, podemos classificar uma lista de números e podemos classificar uma lista de sequências, mas não podemos classificar uma lista que tenha números e cadeias Então, precisamos de uma lista que seja uma ou outra. Se temos uma lista que contém os dois, então temos um problema acontecendo. Só temos que aceitar o fato de que não somos capazes de classificá-lo, e talvez devêssemos voltar e repensar como estamos organizando nossas listas de que precisamos Agora, o que também temos aqui é que podemos dar uma olhada no tamanho de uma lista. Agora, comprimento quando obtemos o comprimento, isso na verdade nos fará retornar um número para nós. E quando se trata de uma lista, na verdade ela é chamada de tamanho. Então, se imprimirmos o tamanho aqui, veremos que obteremos um número. Neste caso, está nos dizendo cinco. Agora lembre-se, temos índice zero, um, dois, três, quatro, mas a quantidade de itens que temos é um, dois, três, quatro, cinco. E como isso é devolvido para nós, podemos realmente armazenar isso em uma variável e a chamaremos de List. Provavelmente deveríamos chamá-lo de tamanho da lista. Mas aqui vamos nós. E então, é claro, é como qualquer outra variável, e podemos prosseguir e simplesmente chamá-la. Se você precisar obter o tamanho de uma lista por qualquer motivo, e houver alguns motivos pelos quais você encontrará em sua jornada, você precisará em sua jornada, você precisará saber o tamanho da lista e, ao mesmo tempo, sua lista pode mudar dinamicamente, tudo bem, então isso abrange tudo o que vamos ver aqui com Então, agora terminamos com a lista e vamos seguir em frente. Ainda vamos usar nossas listas, mas abordaremos um tópico completamente diferente agora ou na próxima lição. Tudo bem. Cuide-se. E se você precisar voltar, revise isso. A seção da lista aqui tinha muitas coisas para analisar. 11. 11 for Loop: Agora que sabemos como criar nossa lista, editá-la, adicioná-la, removê-la e tirar itens específicos da nossa lista. Agora podemos dar uma olhada em outro conjunto de recursos, outro termo básico de codificação, vamos falar sobre o que é chamado de quatro loops Agora, muitas vezes você pode precisar realizar a mesma ação em todos os itens da sua lista Por exemplo, se quiséssemos listar todos os nossos itens, precisaríamos entrar e imprimir todas essas coisas, certo? Então, vamos em frente. Entre, compras, e vamos precisar do índice zero, e vamos copiar isso Um, dois, três, e podemos remover esse editor. Eles dirão índice um, índice dois e índice três. Então, normalmente, teríamos que fazer algo assim se quiséssemos listar todos eles. Agora, isso é cansativo. É desnecessário ou ocupa desnecessariamente muito espaço. No momento em que examinamos todos eles e, honestamente, analisando o código, não é um código muito atraente, vendo a mesma coisa acontecendo repetidamente Mas quando você deseja realizar a mesma ação em cada item dentro de uma lista, usamos o que é chamado de loop for. Então, olhando nossa lista de compras lá em cima, podemos ver que ela está cheia de itens e, se adicionarmos alguma coisa a ela, teremos que adicionar outra declaração impressa, outra, outra Sempre que o removermos, teremos que retirar ou excluir linhas de lá É um incômodo, é chato de manter. Mas somos capazes de automatizar esse processo dentro desses quatro ciclos Então, se quisermos imprimir as coisas exatamente como estamos vendo aqui, tudo o que precisamos fazer é comentar isso bem rápido. Como dizemos, ou, e você percebe que isso vai mudar cor. Temos uma palavra-chave aqui. E o próximo item aqui é que você pode usar muito bem qualquer variável que quiser usar aqui. Este é completamente novo. Se você quiser fazer algo para ajudá-lo a manter as coisas claras, você pode usar item, mas uma abreviatura popular é usar apenas I and I significa Agora, falamos sobre variáveis e como seu nome deve falar com a pessoa Você deve saber exatamente o que é ao olhar para ela. E tornou-se uma prática comum usar I para representar o item que, uma vez que você comece a codificar, você reconhecerá o que é isso Além disso, se uma variável for usada apenas em um ponto, como neste único loop, não há problema em encurtar sua variável dessa forma Mas continuando, então temos quatro, temos uma variável para representar nossos itens até quatro I ou quatro itens, dizemos N, mantimentos E o que isso quer dizer é que toda vez que analisarmos e fizermos qualquer bloco de código que escrevermos aqui, eu serei igual a tomate, depois serei igual a picles, depois serei ketchup e depois serei e depois serei Então, no final do nosso loop for, podemos colocar dois pontos, entrar com a cabeça e descer até a próxima linha Agora, você percebe como agora estamos recuados em dois níveis. É a primeira vez que precisamos indentar um novo nível, então certifique-se de que seu recuo Ao programar em algumas linguagens, eles usam colchetes, mas em linguagens como Python e GD script, eles usam colchetes, mas em linguagens como Python e GD script, usamos o método de indentação. E já vi algumas pessoas apresentarem erros ou me dizerem que algo não está funcionando quando o problema acaba sendo que elas não estão recuadas o suficiente ou ainda estão recuadas e depois voltam para trás e saem Então, fique de olho nisso. E vamos embora. Então, para itens em mantimentos Tudo o que queremos fazer é imprimir nossas compras, Só queremos imprimir esse item. E é isso. Isso é tudo que temos que fazer, imprimir, passar I para o item. Isso é tudo o que temos que fazer, e vamos obter o mesmo resultado que você vê aqui, agora, a diferença é que podemos seguir em frente e adicionar quantos itens quisermos a essa lista. Então, podemos entrar e sair assim. Novamente, você vê quantos itens que temos começam a ficar ridículos E isso acontece quando começamos a adicionar ou acrescentar mais itens à nossa lista E veja, eu não preciso mudar meu código, e todos eles são impressos. Não tem problema. O mesmo que se tivéssemos que deletar todos eles. E desça para dois de repente. Só temos esses dois impressos, não temos problemas. voltássemos com essa configuração de impressão, Se voltássemos com essa configuração de impressão, teremos problemas porque, neste momento, quando tínhamos todos esses itens lá, teríamos que entrar e criar um monte de mais declarações impressas ou o que quiséssemos fazer com cada entrada. E agora que estamos reduzidos a duas, teríamos que entrar e modificar nosso código e remover as duas últimas linhas aqui. Então, sempre que você quiser executar o mesmo código em vários itens dentro de uma lista, usaremos quatro loops para isso. Tudo bem Então, espero que esteja claro Dentro de nossos quatro loops, nosso primeiro item aqui é uma variável, comumente chamada de I, mas você pode fazer o que quiser. Suportes para itens. Então, para cada item na mercearia, vamos imprimir esse Então, eu vou ser igual ao tomate. E então, uma vez que o imprimimos, eu vou seguir em frente e virar picles, e então vamos imprimi-lo, e então ele passa para o próximo item e assim por diante . Apenas confirme isso aqui. Lá vamos nós. Agora, e se quisermos fazer alguma coisa após a conclusão desses quatro ciclos? Bem, vamos pressionar Enter para descer para a próxima linha. E você vê como ainda temos duas linhas recuadas. Bem, o que podemos fazer é segurar a tecla Shift e apertar a tecla tab para, eu acho, sair, certo? Voltamos um nível, ou você pode simplesmente apertar a tecla de volta à base uma vez e também devolveremos um. E agora você pode ver que o quilate aqui está alinhado com os quatro laços Isso significa que estamos fora disso. Então, podemos imprimir agora e dizer, quatro voltas concluídas, e veremos que isso só acontecerá depois que todo o resto tiver sido impresso. Então, se você quiser fazer algo fora dos quatro circuitos, certifique-se de puxar o recuo um pouco para trás Agora, para ajudá-lo a evitar erros, certifique-se de que tudo o que eu estava dizendo, como eu disse anteriormente, tenha certeza de que sua ortografia está correta para as coisas G maiúsculo para mantimentos e G minúsculo para mantimentos. Mas para nós, eles são a mesma coisa. Ambos são mantimentos. Eles são, no que diz respeito ao código, dois itens muito diferentes ou duas variáveis diferentes neste caso, e o mesmo acontece com o nosso I. Então, dizemos quatro I para I minúsculo, não podemos imprimir em maiúsculo I. Ele não vai saber o que E teremos erros a partir daí. E então, é claro, nossos níveis de indentação que acabamos de examinar. Tudo bem? Então, isso completa isso no que diz respeito aos quatro ciclos básicos e seus princípios Agora, você pode fazer a mesma coisa se tivéssemos um conjunto de números aqui. Se fôssemos entrar aqui, você pode entrar. Basta colocar um monte de números. Oh, esse mínimo. Então, agora, quando fazemos para I e mínimo, I representará os números três e depois 675 e depois 23 67 Então, como agora temos números, também podemos fazer matemática com isso, então podemos dizer I mais 100. Mantenha as coisas simples. E lá vamos nós. Agora podemos ver impressos 103, 775, 123 e 167 E, em seguida, nossa declaração impressa informando que os quatro ciclos foram concluídos. Então, se você não tem uma corda e tem algo parecido, você pode fazer algumas contas. Você tem números. Obviamente, com strings, se você realmente quiser, pode inseri-las em um espaço reservado, se for isso que você quiser fazer repetidamente Tudo bem Então, isso dá uma rápida olhada que é um loop de quatro e como podemos usá-lo. 12. Alcance 12: Algo com o qual podemos usar um loop de quatro. Normalmente, quando queremos fazer algo, talvez um determinado número de vezes, mas não precisamos de uma lista. Não queremos examinar um determinado número de listas ou itens, só queremos fazer algo uma determinada quantidade de vezes. Bem, é aqui que coisas como alcance entram em jogo. Agora podemos usar o intervalo para obter todos os números entre um conjunto de valores, se quisermos. E isso exigiria alguns argumentos apresentados. Se dermos uma olhada no alcance, podemos ver que, bem, neste caso, tem apenas três pontos no momento Mas o primeiro argumento será o número mais baixo. Então, se eu disser dez, então isso requer um segundo argumento, que seria o número mais alto, então digamos 20. Então, isso nos daria um intervalo 10 a 20, então vamos imprimir isso na forma de, digamos, 44, digamos , N para o número quatro N no intervalo E vamos imprimir N e ver o que obtemos. Bem, se olharmos para isso, vemos que temos dez, 11, 12, 13, 14, 15, 16, 17, 18 e 19. Então você não obtém o último número impresso aqui porque quando chegamos lá, se você pode imaginar, se N fosse igual a 20 e 20 não fosse 10-20 É 20. Portanto, ele não é impresso e os quatro laços terminam. Agora, da mesma forma, podemos entrar aqui e colocar um intervalo de e se colocarmos um intervalo de apenas 20? Nós imprimimos isso? O que obtemos? Bem, temos a mesma coisa. Só subimos até 19, mas estamos começando do zero. Então, se eu quisesse fazer algo 20 vezes, eu poderia colocar o número 20, e isso aconteceria. É só porque estamos começando com nosso índice em zero, começando a contar a partir de zero e não contando a partir de um. Então, usando isso, podemos percorrer um determinado intervalo de números de zero a um número ou todos os números entre um intervalo definido. Agora, você pode fazer isso se quiser repetir uma ação específica. Você pode fazer isso se quiser ou percorrê-lo com base no tamanho da sua lista, certo? Porque sabemos como obter o tamanho disso agora chamando size. Qualquer coisa que possa devolver um número, podemos conectá-la aqui. Na verdade, tudo o que o intervalo serve é nos dar todos os números dentro de um anel definido e, em seguida, o loop de quatro nos faz passar. Então, uma coisa que podemos fazer com isso é, por exemplo , dar uma olhada e imprimir, ou melhor, criar uma variável. Podemos criar uma lista totalmente nova aqui. Então, chamaremos esse quadrado e definiremos isso como uma lista vazia. E o que poderíamos fazer é então fazer caneta quadrada para que possamos adicionar à nossa lista. E o que vamos adicionar seria um valor exponencial Então, queremos adicionar todos os números quadrados. Então, os números de 0 a 20 estão todos ao quadrado. Então, colocaríamos isso em um Posh do expoents. Então eu vou dizer N para qualquer número que temos aqui. Com o poder de dois. E queremos imprimir o interior? Não, vamos imprimir do lado de fora. Vamos imprimir um quadrado. Tudo bem. Portanto, temos uma lista vazia para começar. Vamos examinar cada número de 0 a 20 e vamos para o quadrado Então, vamos dizer zero ao quadrado. O que quer que isso seja igual é o que vamos adicionar a essa Vai dizer que um quadrado, que é igual a entrar, dois quadrados entrarão, três ao quadrado e assim por diante Então, se dermos uma olhada em nossa lista agora, você pode ver que temos zero, um, quatro, nove , 16, 25, etc até 361 Portanto, o intervalo é uma forma de adicionar alguns números em uma lista ou criar uma lista com base em algo que já existe. Portanto, valor preexistente. Tudo bem. Então, isso é tudo o que podemos realmente fazer com isso. Portanto, há quatro loops e como podemos usá-los em uma lista com uma lista E há quatro loops e como os usamos com intervalo para repetir um conjunto de instruções ou um trecho de código por um determinado número de vezes 13. igualdade: Ah, o cerne de cada cheque. Portanto, uma parte muito importante aqui codificação será a declaração if E esse é o tipo de coisa que enfrentaríamos na vida cotidiana, onde verificamos se isso acontece e depois fazemos isso. Caso contrário, fazemos isso, certo? Então, por exemplo, basta usar seu computador lá. Se você estiver no editor, se pressionar K, colocamos K na tela. Certo? Se clicarmos em backspace, excluiremos o caractere anterior Essa é a ideia geral de como uma declaração if funciona. Agora, uma declaração if está sempre verificando se algo é verdadeiro, certo? Então, se pressionarmos K, o que fizemos, pressionamos, o que significa que agora é verdade. Então, sua resposta foi colocar K na tela. Então, para obter essas verificações, temos que usar declarações if com o que é chamado de verificação de igualdade. Agora, uma verificação de igualdade é basicamente verificar se dois itens são iguais. E podemos verificar se dois itens são iguais, com facilidade. Entramos e fazemos uma impressão. Podemos dizer que cinco é igual a cinco, certo? Podemos fazer isso e, se a imprimirmos, obteremos a palavra verdadeiro. Agora, lembre-se de que, quando fizermos uma verificação de igualdade, esse será um sinal de dois iguais, duplo de igualdade Então, se cinco é igual a cinco, então se cinco e cinco são iguais, vamos passar. Agora, se verificarmos se cinco é igual a seis, vamos ficar falsos porque cinco e seis não são a mesma coisa. São duas coisas diferentes. E isso também conta com a impressão. Isso remonta às nossas declarações anteriores. Então, se tivermos tomate com maiúscula e verificarmos se isso é equivalente a tomate com minúscula e imprimirmos isso, você verá que vamos ficar falsos porque, para nós, a mesma palavra porque um tem T maiúsculo e o outro é minúsculo, vê isso como duas vê isso como Então, ambos teriam que estar em maiúsculas para serem verdadeiros. Então, isso é tudo que a verificação de igualdade é. É verificar se isso é verdade ou se essas duas coisas são iguais, então podemos fazer alguma coisa. Então, vamos começar, certo? Podemos dizer se, e então você pode digitar. Então, se fizermos nossos tomates novamente, tomate. O dobro é igual a tomate. E então terminamos com dois pontos e entramos para ir para a próxima linha Então, agora estamos recuados em um bloco. Então, tudo o que colocarmos aqui vai acontecer se esses dois forem verdadeiros, certo? Se essa condição for verdadeira, nós fazemos isso. O que vamos fazer é imprimir uma string. Esses dois são verdadeiros. Então, se fôssemos imprimir isso, começaríamos e notamos que não é impresso porque, à medida que examinamos, T e T minúsculo fazem a diferença, então não são verdadeiros Mas se adicionarmos o apt T lá, esse bloco recuado será executado Como você vê, esses dois são verdadeiros agora estão impressos. Agora, além da verificação de igualdade, também podemos fazer uma verificação de desigualdade E no caso deste ano, que temos uma maiúscula e uma minúscula, lembre-se, podemos usar duas minúsculas lembre-se, podemos usar Então, neste caso, se quisermos ver se esses dois são iguais, podemos dizer que se tomate maiúsculo é igual a tomate minúsculo ponto maiúsculo ou verdadeiro, que seria porque coloca primeira letra em maiúscula, então esses dois voltarão Agora, alternativamente, o que essa alternativa, porém podemos fazer é usar a desigualdade E com isso, podemos fazer pontos de exclamação iguais. E isso significa que não é igual. Portanto, o ponto de exclamação significa que não. Então, se tomate, não tomate é igual, o que significa que estamos verificando se essas duas coisas são diferentes, então é verdade, e entramos e entramos em nosso trecho de código aqui, ou bloco recuado Agora, alternativamente, o que poderíamos fazer é digitar no início a palavra, não. Então, se não, tomate é igual a tomate. E isso nos daria a mesma coisa que dizer, eu tomate não é igual Portanto, você pode escrever a palavra ou usar o ponto de exclamação antes dos iguais, se quiser verificar Muitas vezes vamos verificar se duas coisas não são iguais uma à outra para conseguir coisas diferentes. Agora, analisamos isso um pouco com números. Mas o que podemos fazer é realmente avançar para, se você se lembra, na matemática, onde tínhamos mais e menos do que isso que precisávamos verificar e usar. Também podemos usar isso aqui no código. Então, podemos dizer, por exemplo, se voltarmos para nossos cinco iguais a seis e imprimirmos iguais? Cinco é igual a seis? Não, claro que não. Mas podemos perguntar se cinco é menor ou igual a seis. E então podemos obter nossa pílula bloqueadora, que obviamente diz igual, o que é verdade, que funciona para torná-la um pouco mais precisa, certo torná-la um pouco mais precisa, Então, se cinco for menor que seis, menor ou igual a. Observe isso. Então, poderia ser seis em comparação com seis, e ainda assim voltaria a ser verdade. Por outro lado, se tivéssemos apenas o sinal menor que, ele voltaria falso porque seis não é menor que seis, seis é seis. Portanto, podemos usar menor que, menor que ou igual a, maior que, leitor que ou igual a, igual a e não igual a. Eu sei que há muitos sinais e símbolos de igualdade para você lembrar, mas espero que você possa manter esse tipo de verificação na nuca E podemos usar o s para dizer, digamos que alguém vá à loja e queira comprar álcool. Digamos que seja 19 anos para quem tem idade para comprar álcool. E, obviamente, você vai ter que mostrar sua identidade, provar sua idade, certo? E se codificássemos esse cenário, o caixa examinaria o ID e realizaria uma verificação de igualdade Eles vão ver se a pessoa na frente deles tem 19 anos ou mais, maior ou igual a 19, então voltaremos como verdadeiros e realizaremos a venda. Se eles voltassem como se fossem menores, certo? Então, se esse cheque voltasse como falso, obviamente, você não o venderia para eles. E esse é o tipo de caminho que eu sei que alguns desses jogadores também seguiram com os videogames. Então, se um jogo é classificado como M para adultos, isso é, eu acredito, uma classificação de 17. E então vamos verificar se a pessoa tem 17 anos ou mais, maior ou igual a 17, vender o jogo, se não, recusar a venda. Então, esses são dois exemplos de como esse tipo de verificação de if e de igualdade se traduzem, tipo , na vida real nessas situações do mundo real. Então, agora que cobrimos uma, também podemos cobrir duas condições ao mesmo tempo. Então, podemos dizer que eu seis é menor que seis, e outra coisa a dizer, e cinco é maior que dois, então sabemos que um deles é verdadeiro, certo? Sabemos que seis não é menor que seis, mas sabemos que cinco é definitivamente maior que dois. Então, se imprimirmos isso, veremos que não volta a ser verdade, nada acontece. Não chegamos a esse quarteirão. E a razão para isso é porque essas duas afirmações precisam ser verdadeiras porque estamos usando e. Então essa peça precisa ser verdadeira, e essa peça precisa ser verdadeira. Então, se mudássemos isso para cinco, deveríamos dizer que se cinco é menor que seis e cinco é maior que dois, isso se torna verdadeiro. Portanto, você pode ter várias condições e não precisa parar em duas, certo? Você pode entrar e adicionar uma terceira condição, uma quarta condição, uma quinta condição. Você provavelmente não deveria, uma vez que temos tantas condições em andamento, mas a questão é que você poderia. Você pode ter quantas condições quiser. Agora, o que também podemos fazer é não precisar verificar se uma delas muda Baca seis, menos de seis, não precisamos verificar se ambas são verdadeiras Podemos usar o operador or. E isso verificará basicamente se isso é verdade ou isso é verdade. condição um é verdadeira ou a condição dois é verdadeira, então avançamos dentro do nosso bloco de código. Então, só precisamos que uma instância seja verdadeira quando usamos O. Precisamos que todas as instâncias sejam verdadeiras quando usamos e. Agora, o importante é que, se você não quiser escrever as palavras e, além disso, podemos usar dois canais verticais para representar ou podemos usar dois e comerciais para representar a palavra. Então, seja qual for o caminho que você seguir, novamente, será uma preferência pessoal, se você usar os sinais comerciais ou os canos ou os aprisands podemos usar dois canais verticais para representar ou podemos usar dois representar ou podemos usar e comerciais para representar a palavra. Então, seja qual for o caminho que você seguir, novamente, será uma preferência pessoal, novamente, será uma preferência pessoal, e canos ou apenas escrever as palavras e, além disso, podemos usar dois canais verticais para representar ou podemos usar dois e comerciais para representar a palavra. Então, seja qual for o caminho que você seguir, novamente, será uma preferência pessoal, se você usar os sinais comerciais ou os canos ou os aprisands e canos ou apenas escrevendo a palavra. Isso não vai mudar nada. E, até onde eu sei, isso não afeta o desempenho de forma alguma. São apenas duas opções de fazer a mesma coisa. Então, em última análise, eles retornam como verdadeiros ou falsos. Então, em última análise, é com isso que estamos lidando, certo? Então, estamos basicamente verificando se é verdade. Então, se isso for verdade, claro que imprimimos, certo? Em última análise, é isso que estamos fazendo. Mas quando estamos fazendo as verificações de desigualdade, estamos verificando se algo é falso, certo? Então, estamos dizendo que se não são, se não são iguais, então isso é verdade, e entramos em nosso blog. Tudo bem. Espero que isso tenha feito sentido lá. Havia muitas coisas para fazer malabarismos lá dentro Se você estiver um pouco confuso, volte e assista novamente. Mas isso bastará para nossas verificações de igualdade, verificações desigualdade Um booleano é apenas o resultado aqui, seja verdadeiro ou falso E vamos ver, isso abrange que também examinamos várias condições por e ou por meio do uso de ou. E comparamos números. Temos maior que menos que igual ou não igual a. Passamos muito por aqui. Então, farei isso nesta seção e prosseguiremos, continuando nossas declarações de I aqui. 14. 14 If Elif else: Tudo bem Então, abordamos brevemente as declarações se porque precisávamos, para usar as qualidades, verificações de igualdade, verificações de desigualdade e tudo Então, vamos nos aprofundar um pouco mais na declaração I. Agora, com as declarações I, você notará que na seção condicional que estávamos examinando, começamos nosso código com I, claro, porque queremos verificar se algo é verdadeiro Então, a declaração if diz: isso for verdade, continue e entre no meu bloco de código. Então, agora, essa é uma condicional que diz se algo é verdadeiro ou falso, essencialmente, e muito bem sempre segue ou é sempre seguido pela palavra-chave I. Acho que escrevi isso de forma um pouco estranha. Nosso cheque sempre vem depois da palavra-chave I. Assim como ao verificar se várias condições são verdadeiras, podemos usar isso em nossas declarações if, como verificamos com strings anteriormente. Mas uma das principais diferenças é que é um bloco de instruções if que pode ficar um pouco complicado quando temos várias verificações que são usadas, como você viu quando poderíamos colocar e, e poderíamos continuar adicionando mais e mais condicionais e poderíamos usar Os para continuar Praticamente, temos uma quantidade ilimitada de condições que podemos verificar. E podemos usar condição, qualquer condicional com declaração I. Então, se olharmos para a simples afirmação if, como fizemos antes, dissemos: Se tomate é igual a tomate, então diríamos que é verdade, certo Desde que ambos estivessem escritos exatamente da mesma forma com letras maiúsculas e tudo mais. Mas e se quisermos pegar tudo, certo? E se quisermos, vamos ver. Vamos criar uma variável chamada NUM. Vamos defini-lo igual a seis. Diremos que, se eu estiver pronto, diremos se num for maior ou igual a seis. Certo. Diga dois pontos e diremos, vá em frente e imprima lá Ha, é maior. E se prosseguirmos e imprimirmos isso , veremos: Ok, é ele que volta. É maior ou igual a seis. No entanto, se dissermos que é maior ou igual a sete, nada vai funcionar. Mas, em alguns casos, você pode querer que algo aconteça como resultado. E é aí que entra o bloco else . Eu só vou diminuir isso. Caso contrário, seguido por dois pontos, é tudo o que temos que colocar lá Estamos dizendo que se todas as verificações acima forem falsas, nenhuma delas for verdadeira, o bloco else cuidará disso. Então, podemos vir aqui e imprimir isso, eu tenho um espaço lá, digamos, isso não é maior. E podemos ir em frente e receber nossos cheques. Então, agora vamos realmente entender que isso não é maior ou obteremos a resposta. Isso é maior. Então, independentemente de ser verdadeiro ou falso, teremos algum tipo de resposta, algum tipo de ação e você pode ir em frente e pensar: Ok, bem, você pode simplesmente ir em frente, von down, fazer outro se, outro se e outro se, e você pode continuar fazendo todas essas verificações diferentes. Mas o problema é que, se tudo isso for verdade, por exemplo, se mudarmos isso para quatro, esse para três, esse um, dois, na verdade, se mudarmos isso, queremos ir para o outro lado. Se dissermos que se são sete, oito e nove, então se forem maiores que seis, já que são verificações de if, todas elas serão executadas como você vê aqui, elas foram executadas por um número, sete, oito, nove. Todos eles voltaram à realidade, então todos foram acionados. No entanto, e se precisarmos apenas de um desses? E se quisermos apenas que o primeiro seja verdadeiro para acioná-lo. E então, se isso for acionado, nenhuma das outras condições Bem, é aqui que outra palavra-chave entra em jogo aqui, e esse é o else if. Então, é uma espécie de combinação do I e do else juntos, e nós o chamamos de LF. Então, se entrarmos aqui e dissermos se é para esses. Estou dizendo que, se isso for verdade, então faremos isso. Caso contrário, verificamos se, se isso for verdade, fazemos isso, senão, se isso for verdade, senão, se isso for verdade, e se tudo isso falhar, ficaremos com apenas a declaração else. Então, se fôssemos fazer isso agora, você pode ver que o primeiro se torna verdadeiro aqui em cima, e então nunca chegamos a eles. E podemos dizer isso se entrarmos aqui e colocarmos vários pontos de exclamação para que possamos diferenciá-los Podemos ver que o primeiro é detectado como verdadeiro e depois ignoramos todos os outros porque não precisamos verificá-los. Portanto, não estamos verificando se todas essas coisas são verdadeiras individualmente. Portanto, pode haver certas situações em que você queira usar múltiplos, múltiplos se verificarem sozinhos Mas muitas vezes você provavelmente terá mais de um I else if ou if else. É uma espécie de cadeia acontecendo, como vemos aqui. Agora, isso pode realmente tornar as coisas um pouco complicadas às vezes quando abordamos isso. Então, se dermos uma olhada em um exemplo aqui, vamos lá. Tudo bem, então temos todos os nossos cheques em vigor aqui. Então, eu apenas seleciono um número aleatório para a idade de até 15 anos. Então, vamos verificar se a idade é menor que 13 anos. Tudo bem, vamos supor que talvez os preços dos cinemas, certo? Então, vamos dizer, se eu tiver 13 anos, será esse preço, se for 13-64, então é maior que 13, menor que 64, é esse preço, e se for maior que 64, nós fazemos esse preço E então temos um aqui dizendo que ele não é válido, o que é para o caso de pegar tudo. Nunca deveríamos ter uma situação como essa. Vamos. Então, temos 15. Nós podemos passar por nós mesmos. Diremos que não é menos do que 13. Então pule isso. Vamos para nosso segundo cheque. A idade é maior que 13 e menor que 64. Sim, 15 é. Portanto, devemos voltar, o preço é 14 50. Se você jogar isso, podemos ver que é exatamente o que obtemos. Portanto, há um exemplo de como fazer um tipo de cadeia if, else if e else acontecendo lá. Então, novamente, o exemplo seria algo como talvez um cinema com preços de ingressos diferentes com base na idade da pessoa que precisa de um ingresso. Agora, também podemos usar essas declarações if e mesclá-las com nossas quatro declarações ou 44 loops, e podemos conversar sobre coisas como , digamos que temos nossas compras Certo? Cereais. Ketchup. Leite No entanto, podemos verificar se há itens fora de estoque. Talvez você esteja desenvolvendo um aplicativo que monitora quais itens estão fora de estoque e em estoque. Quando um item estiver fora de estoque, ele aparecerá aqui. Então, vamos dizer que esta loja está sem estoque de leite, certo? Então, diremos que não temos leite, mas queremos verificar. Então, queremos ver nossa lista de compras. Então, queremos dizer por mim, certo? Para itens de mercearia, assim como fizemos anteriormente na seção de quatro Lucas E queremos ver se esse item está esgotado. Então, juntando tudo isso para que tenhamos um item nos mantimentos Queremos verificar se estou sem estoque. Então, usar aqui vai verificar se o item está lá. Então, se o cereal estiver nessa lista, faremos o próximo bloco de código E se não for, vamos continuar. Então, vamos dizer que vamos imprimir e estamos reunindo tudo aqui. Diremos que a porcentagem S está fora de estoque. E então passaremos a porcentagem I para passar nosso item para nossa string. Juntando tudo isso, vemos que a única coisa que o desencadeia é o leite, porque o leite está de fato dentro da nossa lista de produtos esgotados Assim, você pode ver com que rapidez estamos começando a juntar as coisas. Estamos imprimindo em nosso console, inserindo variáveis em nossas strings Estamos usando verificações de IP para ver se algo é verdade e estamos executando quatro ciclos para examinar tudo dentro de nossas compras Veja tudo dentro da nossa lista. Tudo bem, então isso deve abranger tudo aqui, incluindo as verificações if e if, else , if, else, bem como alguns exemplos para tornar as coisas um pouco mais claras e ver como tudo isso 15. 15 dicionários: R: Tudo bem. Pessoal, hoje vamos dar uma olhada nos dicionários Agora, obviamente não estamos falando sobre o tipo que você escolhe, esse tipo de palavra e uma definição associada a ela, mas você pode usar um dicionário para criar um dicionário. E um dicionário tem relação muito boa com o que um dicionário está codificando. A razão para isso é porque eles funcionam na função de ter um par de valores-chave. Então, em relação a um dicionário normal, teríamos a palavra como chave e, em seguida, a definição seria o valor. Portanto, os dicionários são um conjunto de dados que pode conter tipos de dados de qualquer tipo que discutimos até agora, incluindo outros dicionários Um dicionário pode manter um conjunto de informações relacionadas em um só lugar, como configurações do jogo ou do programa ou informações sobre personagens inimigos. Um dicionário pode ser facilmente identificado, pois todos os dados, todos os seus dados, serão colocados em um conjunto de colchetes versus uma lista que usa Então, vamos dar uma olhada em como esses dicionários são formatados Tudo bem. Então, indo aqui no topo, vamos criar uma nova variável. Vou chamá-lo de dicionário M. E, claro, vamos definir isso como igual a um par de colchetes. Agora, a forma como isso funciona é que podemos entrar para torná-lo mais agradável de ver E fazemos um par de valores-chave. Então, por exemplo, vamos dizer a chave um, depois fazemos dois pontos e depois o valor Então, vamos usar meu valor e, se você quiser inserir outro, colocamos uma vírgula e podemos inserir menu suspenso até a próxima linha, e podemos fazer a tecla dois Lá vamos nós. Esse é meu novo valor. E, assim por diante, em toda a lista. Agora, o nome do nosso dicionário pode ser o que você quiser, assim como uma variável normal. Mas quando entramos em nossos colchetes, você pode ver que temos uma corda, e essa primeira corda aqui é nossa chave Obviamente, você pode nomear isso como quiser, mas, assim como as variáveis, deve ficar claro a quais dados estão relacionados. Portanto, ele deve ter algum tipo de indicador do que o valor está relacionado. Por exemplo, isso pode estar dentro de talvez um dicionário meteorológico. Uma chave pode ser temperatura ou temperatura e, em seguida, o valor seria o número real Tudo bem. Então, um exemplo disso, se você estiver fazendo configurações, pode ser ter um dicionário de áudio e um dicionário gráfico. Agora, sua chave, como você pode ver , é seguida por dois pontos e depois seus dados Seus dados aqui são o que chamamos de valor e são tratados de forma semelhante a uma lista com um índice zero, se isso fizer sentido, sendo seu primeiro valor. Agora, poderíamos seguir em frente e chamar isso situações diferentes ou de algumas maneiras diferentes de chamá-lo. Você pode até, eu acho, ter diferentes tipos de dados lá. Poderíamos ter uma lista lá como um dos nossos valores. Então, se quisermos o índice zero aqui, forneceremos nosso nome, retornando com Jim e o Índice um, retornando sim. Estamos nos transformando em nossa saúde. Então, se tivéssemos, desculpe, um dicionário dentro de um dicionário, que podemos fazer aqui, certo? Então, vamos dizer que esse é o nome, e isso seria relatado como ele e no próximo teremos saúde, e diremos 100. Então, em uma situação como essa, é de onde vêm os índices Agora, é claro, não precisamos usar índices. Poderíamos simplesmente escrever nomes completos quando se trata dicionários, o que é sempre bom Lembre-se de que cada chave deve ser separada por sua própria vírgula, então vamos continuar e , aqui, para nossa leitura, dar uma olhada em como podemos acessar um dicionário Tudo bem? Então, quando acessarmos nosso dicionário, vamos imprimi-lo, é claro. E o que vamos ver é que vamos imprimir meu dicionário, é claro, e poderíamos simplesmente imprimir assim. Mas é claro que, se quisermos restringi-lo , vamos dar uma olhada. Então, a impressão é que pegamos a chave um e depois pegamos a chave dois, e então elas vão para dentro de outra cinta encaracolada para o outro Portanto, podemos obter a chave um ou a chave dois aqui. Agora, se quisermos obter a chave um, podemos simplesmente colocar colchetes bem ao lado dela, semelhante a uma matriz Só nós podemos ir em frente e digitar a chave 1. E como você pode ver aqui, obteremos o resultado, a chave 1 lá embaixo. E a mesma coisa. Se fizermos k dois, obteremos o novo dicionário que Kit está segurando. Agora, o que acontece se usarmos zero em nosso dicionário aqui? Tente acessar isso. Vamos nos deparar com essa situação porque estamos fora dos limites desse dicionário Portanto, existem situações diferentes para algo assim. Por exemplo, o que poderíamos fazer é ir ao meu dicionário, certo? Novamente, podemos fazer teclas de pontos e algo assim. Isso só vai pegar todas as nossas chaves e retorná-las como uma matriz, então essa será uma lista de todas as nossas chaves. E então podemos fazer nossos colchetes e colocar um zero lá Então, poderíamos fazer algo assim, e isso funcionaria, embora certamente seja muito mais longo do que o necessário. E eu sei que com três, ocasionalmente, isso também funcionaria. Você poderia simplesmente pontilhar a tecla um. Sim, aí está. Então você pode simplesmente fazer ponto e inserir o valor da chave aqui. Então, podemos fazer dois, e o K dois entra em outra lista própria, desculpe, em outro dicionário próprio. Então, poderíamos ir e fazer outro ponto. Então, podemos fazer meu dicionário.k2 dot, vou dizer Saúde. E, como você vê, nosso resultado é 100. Portanto, existem algumas maneiras diferentes de realmente acessar o conteúdo do nosso dicionário, seja usando o método de log obtendo uma lista de nossas chaves e inserindo um índice, apenas passando a chave que queremos como string ou usando um método de ponto como esse, semelhante a uma chamada de função ou uma chamada de método. Agora, quando temos dicionários dentro dos dicionários, você viu essencialmente o que faremos aqui com dotqt faremos aqui com Somente você pode acessá-lo por meio de nossos colchetes. Então, podemos fazer a chave dois. E então, logo ao lado , faremos outro conjunto de colchetes. Também podemos simplesmente escrevê-lo assim, que tem um ou dois pares de colchetes em cada tecla abaixada Então é assim que podemos acessar nossos dicionários e o lado dos dicionários Pode ser um pouco confuso, então espero que tenha ficado claro o suficiente, pelo menos se não a explicação com a demonstração real de como vê-la em uso aqui Agora, os dicionários podem armazenar todos os outros tipos de Então eles poderiam ter uma lista neles. Eles poderiam ter números, você sabe, números inteiros, números flutuantes, cadeias de caracteres, dicionários e lados dos dicionários Então, temos todo esse conjunto selvagem e, claro, acessá-los realmente se resumirá aos métodos que mostramos lá e, com base no tipo de dados, obviamente, se o valor for uma matriz, você acessará os valores lá como uma matriz. Agora, e se quisermos adicionar ao nosso dicionário, certo? Então, temos meu dicionário lá. Vamos criar um novo. Chamaremos isso de Colors, teremos a sequência de um dicionário vazio Me dê os erros de lá embaixo porque não preenchemos isso. Agora, o que fazemos para passar alguns dados aqui se quisermos adicionar uma nova entrada em nosso dicionário? Bem, podemos simplesmente usar nossas cores e passar uma chave como se estivéssemos tentando acessá-la. Então, chamaremos isso de “ vamos usar cores frias” ou “frias” e, em seguida, definimos isso como igual ao valor que queremos. Então, vamos usar um azul. Se imprimirmos nossas cores agora, veremos azul sendo o valor, sendo um valor de string aqui da chave cool. Então, devemos ver isso aqui dentro do nosso dicionário de cores. E lá vamos nós. Podemos ver isso ali mesmo. Então, é tão simples quanto isso, você adiciona a ele, e isso também deve funcionar para uma matriz. Então, se tivermos uma lista aqui e a imprimirmos, como você vê, ela funciona exatamente como você imagina que funciona da mesma forma, mesmo se estivermos fazendo um tipo diferente de conjunto de dados aqui. Então aí está. Fácil o suficiente para nós fazermos. Nós simplesmente o chamamos e depois definimos, e isso funciona da mesma maneira se você quiser redefinir ou alterar isso também. Então, se você quiser mudar a chave dentro dela, se você vier aqui e trocar esses livros. Então, primeiro, serão esses números, depois vamos mudá-los para vermelho e imprimi-los novamente. Como você pode ver, você pode adicionar chaves a ele e sobrescrever as chaves usando o mesmo formato Agora, o que fica um pouco complicado é quando você quer adicionar um dicionário ao dicionário. Vamos simplesmente retirar isso? E vamos ver se isso funciona agora, digitando isso. Então, vamos dizer que sou um. Tudo bem, vamos dizer valor aqui. E vamos ver se isso funciona. Tudo bem, legal. Assim, podemos criar dicionários dessa maneira com a mesma facilidade Incrível. Portanto, não preciso revisar nenhum tipo de solução alternativa para isso Perfeito. Tudo bem, então aí está. Veja como podemos adicionar ao nosso dicionário e sobrescrever as chaves Agora, podemos dar uma olhada em nossos dicionários Então, obviamente, os dicionários serão um pouco diferentes Então, vamos usar o Meu dicionário novamente e, na verdade, vamos executar quatro ciclos para que possamos examiná-lo. Então, o que queremos fazer é fazer quatro e, normalmente, vamos usar quatro teclas no meu dicionário. Então, neste ponto, vamos obter a chave um e a chave dois. É isso que vamos analisar. E se simplesmente imprimirmos isso, imprima P. Você pode ver que vamos imprimir as chaves um e dois para nós. Agora, se quisermos ir ainda mais longe nisso, podemos usar o valor, digamos, em Key, podemos imprimir o valor e ver o que obtemos lá em duas camadas mais profundas. Oh, vamos lá. Erro meu. Meu dicionário e cerque os mesmos colchetes encaracolados. Lá vamos nós. É isso que queremos fazer e imprimiremos o valor dessa forma. E lá vamos nós. Então, vemos a chave um, nome, saúde e chave dois. Agora, nessa situação, como temos uma string aqui, ela imprimiu todos os caracteres individualmente, que é o que você está vendo aqui com ela sendo vertical. E os caracteres incluem espaços. Isso é tudo o que temos lá. Como você pode ver, procuramos a chave e o dicionário , então obtivemos a chave um. E então, o que fazemos aqui, percorremos o valor e imprimimos todas essas letras individualmente e, em seguida, imprimimos o nome da chave. É por isso que temos isso e, em seguida, a chave 1. E então passamos para a chave dois e imprimimos a próxima. Então, nome e saúde, e depois imprimimos na chave dois. Assim, você pode ver como percorremos esses dicionários e você pode ir mais longe ou pode percorrer um conjunto específico de Então você pode ver como percorremos esses dicionários esses dicionários Tudo bem. Então, isso é tudo que você precisa saber para usar e acessar elementos do seu dicionário. Então, isso bastará por aqui. seguir, veremos como obter informações do usuário e entraremos em mais alguns loops 16. Como obter inputs: Tudo bem, então percebi que, aparentemente, faltam entradas na parte do idioma Então, vamos seguir em frente e eu vou mostrar como fazer isso bem rápido. Eu só vou fazer uma interface de usuário. Vou clicar em Controlar para minha nova cena. Vou seguir em frente e renomear isso. Eu vou ligar para ele. Vamos fazer o teste de entrada. Vou salvá-lo com Controls, insira o ponto de teste TSN. Isso é bom. E vou adicionar um script a ele. Ótimo. E vou fechar todas essas outras seções que não precisamos para isso, certo? Então, no meu caso, estou estendendo um controle, mas no seu caso, pode estar estendendo o corpo de um personagem dois D quando se trata de criar jogadores para jogos ou qualquer outra coisa, não importa muito o que ele esteja estendendo, porque você pode adicionar ou receber informações de muito bem qualquer tipo de Certo. Agora, o que eu vou fazer Sim, vamos apenas usar a impressão para reconhecer isso Portanto, há algumas maneiras de obtermos informações. E uma das principais maneiras pelas quais você verá muitas pessoas fazerem isso é entrar em um processo de sublinhado do funk ou no processo de física do funk Esses são dois pontos diferentes no quadro. O processo de física é onde você deve colocar qualquer coisa relacionada à física. Então, algo como mover seu player. Como você provavelmente terá que lidar com coisas como colisões e outras coisas baseadas na física, você provavelmente deveria fazer isso no processo de física no quadro E o processo aqui provavelmente é onde muitas outras coisas em seus projetos serão realizadas, mas você geralmente quer tentar deixar isso o mais claro possível. Agora, outra situação que você pode ver usada será outra função chamada input. E entrada não tratada, e a nossa última é a entrada de chave não tratada Agora, há algumas pequenas mudanças na forma como elas são tratadas e veja se eu apenas mantenho meu mouse aqui, dependendo da versão do Gudo que você tem, você pode ou não ver Se você não ver os pop-ups e sua versão, você deve ser capaz de manter o controle e clicar na função obter as mesmas informações. Você leu sobre algumas dessas diferenças aqui com entrada de tecla não manipulada, entrada não manipulada e assim por diante Mas esses três últimos aqui são especificamente para entrada. E aqui em cima é onde você terá coisas mais contínuas como segurar para frente para se mover, por exemplo. Tudo bem? Então, vou me livrar dos não manuseados. Não vamos precisar disso para isso. Eu só queria mostrar que essas são uma opção para usar aqui. Eu vou me livrar do Eu quero me livrar disso? Não. Vou esconder isso do meu exemplo. E vou me livrar do processo de física só porque não vou mover nenhum personagem ou fazer nada baseado em física. E eu vou te mostrar aqui. A maneira mais fácil de fazermos alguma entrada é if input, e essa classe de entrada contém todas as entradas que estão disponíveis incorporadas ou que você adiciona ao mapa de entrada Então, vamos dizer que eu insiro um ponto. Podemos dizer I e você pode ver aqui, qualquer coisa pressionada é semelhante a como você acessaria o menu principal e diria que pressionaria qualquer botão. Então, se você pressionar qualquer botão, isso vai disparar. Além do menu principal, não tenho certeza de onde você pode incorporar isso, mas se precisar, há alguma coisa pressionada? Existe alguma coisa para você? E vamos testá-lo. Então dizemos, se a entrada for qualquer coisa pressionada e tabulada nela, diremos que imprima algo se soubermos soletrar, às vezes é difícil soletrar, algo pressionado, algo pressionado, e eu vou clicar em Executar cena Veja, enquanto estamos sentados aqui, tire um segundo para correr. Lá vai. Se eu apertar qualquer botão no meu teclado, pressionarei J, pressionarei alguma coisa e ele será acionado cinco vezes, estando exatamente onde está no processo Se eu bater em L, lá vamos nós. Podemos ver esses números aumentando. Se eu me livrar da pilha, você pode ver que toda vez que eu pressiono os botões aqui, você pode ver nosso número aqui embaixo no canto Preenchendo, certo? Então, mesmo clicando nele, porque isso é entrada, isso é alguma coisa. Clique esquerdo, clique direito, qualquer um desses botões no teclado, certo? Sempre trabalhe. Todas essas coisas são acionadas porque qualquer coisa pode desencadear. É qualquer coisa pressionada. Agora, que outras opções temos? Nós temos é, e temos a ação que acabou de ser pressionada, ação recém-liberada, a ação pressionada. E então temos um pouco de alegria. Então, esses botões de alegria, é claro, serão seus controles, certo? Então, ele solicitará um dispositivo e, em seguida, solicitará um botão de alegria. Agora, eu não tenho um plugue de controle, mas isso é que você pode fazer algo específico para controladores, não é o que vamos fazer aqui, mas é algo a ser destacado para nós, assim como temos o rótulo da tecla, o pressionamento da tecla, a tecla física , o botão do mouse Então você pode ver, você tem uma série de coisas que você pode fazer aqui Então, vamos com o mais fácil, o simples. Vamos dizer, desculpe, apenas tome uma bebida. OK. Portanto, se a entrada for uma ação, basta pressionar. Agora, você obviamente não vai ter muitos desses. Você provavelmente verá muitos desses botões de interface de usuário aqui embaixo. Exceto algumas dessas interfaces de usuário, acredito que seja a tecla enter por padrão. E você vê que estamos transmitindo uma sequência de ações. Sim, então vamos colocar isso. E agora você verá que, quando eu o executo, lembre-se de que essa é a ação pressionada. Então, se eu pressionar o botão, estou segurando, ele só está sendo pressionado uma vez, certo? Só está aparecendo uma vez. Não tem problema. E eu desisto, nada acontece. Agora podemos ter outro sistema configurado, então podemos dizer que o ponto de entrada é ação, podemos dizer liberação. Vamos usar o mesmo botão aqui. Eu aceito, e vamos imprimir e vamos divulgar algo. Pressionamos e acabamos de soltar, e estamos usando a tecla enter para ambas. Então, se eu pressionar esse botão, ele diz que algo foi pressionado. Se eu mantiver pressionado, nada acontece. E assim que eu levanto a chave, algo é liberado. Então, dependendo do que você está fazendo, você pode querer que algo aconteça na imprensa, ou você pode querer que algo aconteça no lançamento. Agora, alternativamente, há outra opção que você viu lá. Será que se a entrada for pressionada com ação, então não apenas pressione, mas pressione. E eu vou dizer que aceito. Ótimo. Então, podemos ver a diferença aqui. Imprimir. Isso é o que vai ser acionado quando algo é pressionado. Então, algo se manteve. Então você vai ver, eu vou apertar. Vamos ver nosso algo pressionado. Vou mantê-lo pressionado por um momento, então veremos um spam nesse console de saída algo pressionado, algo retido. E então, quando eu lançar, veremos algo lançado. Certo? Eu fiz isso só por um momento lá. Eu pedi isso. Podemos ver algo pressionado e, em seguida, algo retido por todo esse tempo. E então algo se soltou quando eu tirei o botão Eles veem que você tem três situações diferentes que você pode usar aqui. E dependendo do tipo de sistema que você está fazendo, do tipo de entrada que você está fazendo, você pode usar qualquer um deles para sua finalidade Agora, eu mencionei que também tínhamos tecla pressionada. E então isso vai exigir um código-chave. Então, no nosso caso, com o que estávamos fazendo agora, será a tecla Enter, certo. E vamos seguir em frente e imprimir Enter, pressionar. E executamos isso, seguramos e podemos ver que entendemos isso. Portanto, não somos apenas pressionados e liberados quando se trata de teclas. Portanto, tenha isso em mente. Agora, se você quiser configurar suas próprias ações aqui, vou apenas confirmar isso. Mais. Lá vamos nós. Como eu aceito, como temos aqui. Vamos fazer isso na parte de jogos. Mas você simplesmente acessa as configurações do projeto, acessa o Mapa de Entrada e, em seguida, pode adicionar uma nova ação, certifique-se de estar na caixa certa aqui. Vou dizer que novo vamos prosseguir e chamar essa ação de teste. Clique no botão adicionar. Agora, se eu rolar para baixo até aqui na parte inferior, posso clicar nesse ícone de adição e colocar o botão que eu quiser. Então, digamos que eu coloque o botão K, certo? Eu cliquei em OK. E eu posso entrar aqui e dizer, ação acabou de pressionar, testar a ação. Agora eu executo isso. Agora, se eu apertar o botão K, temos aquela coisa pressionada sendo acionada. Então, adicionar novas entradas ao seu projeto é tão simples quanto isso E há algumas outras coisas nas quais você pode se aprofundar. Então, terão ou terão mais detalhes palavras de ação, coisas como força de ação Então, a força da ação é onde obteremos os números reais. Então, insira, obtenha a força de ação. E se dermos uma olhada, veremos se vamos levar um golpe Vamos recuperar um número de 0-1. E isso é o quanto ou com que força um botão está sendo pressionado. Então, em um teclado, é basicamente zero ou um, certo? Ou é imprensa ou não. No entanto, se você lida com controles, é aqui que você pode criar coisas como segurar um botão até a metade para mirar e pressioná-lo até o fim para atirar Por exemplo, havia alguns jogos antigos que tinham esse tipo de sistema com isso. Metal Gear Solid tinha onde você pressionava . Acho que era o botão quadrado dos jogos antigos. Você pressionaria para mirar e pressionaria até o fim ou soltaria para fazer o tiro. E obter força de ação é como realmente conseguiríamos isso. Tudo bem, então há muitas opções que você pode fazer para obter informações, mas eu mostrei todas as principais para lidar com isso E eu ainda tenho a entrada aqui configurada, e isso porque o evento de entrada de evento é qualquer coisa. Então, isso pode ser um clique do mouse, pode ser um clique do teclado. Pode ser apenas mover o mouse na tela porque o movimento do mouse é um evento de entrada, certo? Então, se eu fosse em frente e imprimisse o evento, aqui. E você dá uma olhada. Veja, quando eu acabo de mover isso, você pode ver que o movimento do mouse vem com muitas coisas. A posição é relativa, você tem caneta, pressão e inclinação, ou se quiser fazer suporte para tablet Você entendeu isso. Você tem a velocidade, que é a velocidade com que o mouse está se movendo Tudo bem. Deixe-me ver o índice do botão. Então, o clique esquerdo será o Índice um, clique direito será o Índice dois. Então, se você vai usar algo como entrada, você vai ter que restringi-la. Então, por exemplo, faríamos algo como VR digamos que o evento I seja um evento de entrada. Então, podemos dizer tecla se você quiser que seja um teclado, botões do JoyPad Se você quisesse que fosse um botão, ação de evento, mouse, botão do mouse, movimento do mouse, arrastamento da tela, toque na tela. Essas são coisas que você usaria para criar um botão de tela sensível ao toque, por exemplo. Evento de entrada, atalho. Então você tem todas essas coisas aqui, mas digamos apenas um evento de entrada. Vamos embora. Chave de evento de entrada. E então podemos dizer que ar EV é igual a evento como chave de entrada do evento E vamos imprimir EV, ver o que obtemos daqui. Vemos que nada está acontecendo aqui. E assim que eu aperto um botão no teclado, podemos ver agora que estamos recebendo botões, certo? Estamos recebendo códigos-chave. Estamos recebendo os mods, sejam eles físicos, a localização, se estão pressionados e, claro, o echo, que, é claro, o echo será verdadeiro se o botão for pressionado Então, temos essas chaves de eventos de entrada agora. Tudo bem. Então, agora podemos seguir em frente e podemos dizer que eu pressiono EV, certo? Então, se o botão estiver sendo pressionado, podemos usar a palavra aqui ou você pode usar dois e comerciais e apenas aprimorar Portanto, estamos verificando se as duas condições foram encontradas e se o código EVP é igual a P ED, E eu posso ir em frente e imprimir algo como D, E, pressione. Agora, se eu tivesse qualquer outro botão no teclado, nada aconteceria, mas assim que eu pressionar a tecla D, isso é reconhecido Agora, se você realmente quiser, você pode simplesmente entrar aqui e entrar na sua entrada, apenas dizer I insiro action press, Film. Você pode fazer tudo isso aqui. Mas quando estamos recebendo um evento, você também pode usá-lo, e esse é o tipo de situação que você pode fazer agora, se quiser usar o evento também, bem como a ação aqui. Tudo bem. Podemos dizer se o evento é a tecla de entrada do evento, se quisermos, e o evento é o pressionamento de ação , e agora podemos escolher algo que testamos. Eu realmente não me lembro qual foi a ação de teste. Eu não vou ter ideia sobre isso. Mas eu vou dizer Action Press. Não me lembro o que era isso. Acho que foi o KK. Espero que eu esteja certo. E eu apertei, e vemos a Action Press. Tudo bem. Então, vamos lá. Então, temos isso funcionando para nós. Tudo bem, então espero que isso lhe dê uma boa ideia de como podemos obter informações do jogador. Existem algumas outras formas pequenas. Por exemplo, se tivéssemos uma caixa de texto na tela, poderíamos extrair a propriedade de texto dela. E acredito que, se bem me lembro veremos isso em nosso primeiro projeto. Tudo bem, espero que isso esclareça qualquer confusão que possa haver, e espero que você possa entender algumas das maneiras pelas quais podemos obter informações do jogador 17. 17 Loops enquanto: Tudo bem, vamos dar uma olhada em while loops. Agora, já usamos um loop de quatro no passado, e agora temos um segundo tipo de loop. E em quatro voltas, como você se lembra, percorreremos um conjunto de itens que está dentro de outra coisa, seja dentro de um intervalo de números ou dentro de uma lista. Um loop Wile é algo que se repetirá para sempre, desde que uma determinada condição seja verdadeira Então, vamos dar uma olhada em como podemos usar um loop Wile Nesse caso, vamos usá-lo para fazer uma contagem regressiva. Tudo bem, então vamos criar Vou salvar myNum, definir isso como zero por padrão E vamos dizer que Wile biNum é menor ou igual a cinco Vamos apenas imprimir MyNum. E nesse ponto, se tentarmos isso, nosso loop ficará preso e todo o programa falhará. Vamos ficar presos na tela inicial. E, como você pode ver no console de saída lá embaixo, ele simplesmente não enviará spam porque isso é tudo que ele sabe fazer. E, na verdade, isso nem vai fechar, então eu tenho que apertar o botão de parada na parte superior. Portanto, com um laço selvagem, é perigoso ficar preso nele Você tem que ter uma maneira de sair o tempo todo. Se não houver nenhuma saída codificada, você falhará. Agora, há muitas maneiras de fazer uma saída e, nesse caso, estamos verificando se M NUM é menor ou igual a cinco, então a maneira mais fácil de corrigir isso seria criar essa declaração para se tornar falsa. Agora, podemos fazer isso simplesmente definindo M NUM agora igual a seis, o que o quebrará. Não vamos fazer a contagem regressiva , mas ela vai quebrar. Isso sairá do circuito. Mas o que preferimos já que estamos usando um loop curinga, podemos supor que queremos fazer uma contagem regressiva então vamos chamar myNum, digamos que mais é igual Agora, isso é exatamente a mesma coisa que dizer M NUM é igual a myNUM mais um É apenas uma forma mais curta de escrever isso fazendo mais é igual Então, agora, se o executarmos, veremos que ele conta a partir de zero, um, dois, três, quatro , cinco e, quando chegarmos a seis, isso não estará mais dentro da nossa condição. Então, isso fará com que nossa condição retorne como falsa e sairemos desse ciclo. Então, essa é uma maneira bastante sólida de romper isso. No entanto, essa não é a única maneira de avançar. Como você viu, quando tínhamos apenas um número impresso, causamos o acidente. Mas o que podemos fazer é usar uma palavra-chave aqui chamada freio E isso quebrará o loop, não importa o que aconteça, não importa se a condição é verdadeira ou falsa, ela simplesmente sairá desse loop, como você pode ver aqui. Mesmo que zero seja definitivamente menor que cinco, porque usamos essa palavra-chave, podemos sair desse loop, independentemente de a condição ser verdadeira ou falsa. Agora, podemos usar while loops com coisas como dicionários, listas e uma lista Então, vamos dar uma olhada. Então, vamos dizer que são novos usuários. E tudo isso significa que, desde haja usuários dentro dessa lista e ela não esteja vazia, ela será retornada como verdadeira. E quando a lista estiver vazia, ela retornará como falsa. Então, o que vamos fazer dentro desse loop é dizer que nosso usuário atual é igual ao ponto POP de nossos novos usuários e podemos aparecer na frente. E vamos continuar imprimindo lá. Verificando o usuário, podemos fazer nossa porcentagem S e simplesmente repassar nosso usuário atual Tudo bem. Então, agora, se prosseguirmos e executarmos isso, podemos ver que vamos passar. E uma vez que tudo tenha sido encerrado ou depois de você ter retirado todos os nomes, isso agora é falso e saímos desse ciclo E você pode ver na saída que imprimimos essa declaração para cada usuário que exibimos. Agora, se você quiser remover coisas de um loop, certamente também podemos fazer isso de uma maneira muito fácil. E, claro, isso não conta apenas para remover coisas, mas daremos uma olhada em nossos animais lá e veremos que temos lagartos lá dentro três vezes Então, o que podemos fazer para outra verificação de declaração aqui é que podemos dizer, se lagarto, lá vamos nós Ou lagarto selvagem em animais. Então, enquanto o lagarto for uma das chaves dentro dos animais de lá, isso continuará funcionando Se você se lembra do que eu disse antes ou anteriormente quando estávamos examinando listas, eu disse: se você tivesse vários itens em sua lista dos quais quisesse se livrar, digamos, duplicatas, teria que ligar para removê-los ou apagá-los constantemente até que todos desaparecessem Bem, agora que sabemos sobre o Woloops, podemos simplesmente verificar se o lagarto está dentro E embora exista um lagarto nos animais, vamos removê-lo Tão simples, vamos chamar Animals Dot. Remova-o, não remova-o. O que você chama de apagar Lezard. Veja aqui, vamos seguir em frente e imprimir animais depois. Toda vez que o removemos e damos uma olhada. E vemos que temos dois lagartos agora. Começamos com três. Em seguida, adicionamos um lagarto e depois não temos lagartos Então, você pode ver que essa é uma maneira fácil percorrer um loop e, por exemplo, remover todas as duplicatas Tudo bem, então vamos explicar o que são loops selvagens e como podemos usá-los em alguns cenários diferentes 18. Funções e argumentos: Vamos seguir em frente e entrar nas funções. Agora, funções, já vimos e usamos duas delas. usamos o processo e Até agora, usamos o processo e estamos prontos durante todo o curso. Mas você pode criar completamente suas próprias funções. E, como exemplo, podemos ter um que seria algo parecido com o seguinte que você vê aqui. Então, poderíamos ter uma chamada saudação que dá as boas-vindas a tudo o que estamos fazendo, certo? Livros, se pudermos soletrar isso corretamente. Agora, você notará algo em comum com tudo isso. Agora, apenas observando tudo isso, você verá algumas semelhanças e verá que essas têm sido a estrutura básica que usamos esse tempo todo, e elas compõem a estrutura básica de qualquer função que você já escreveu Na primeira linha, começamos com a palavra-chave Bunk FNC, que diz ao GDScript que queremos definir ou criar uma função E isso é seguido por outra palavra ou série de palavras, mas não podemos ter espaços nela. Que então é precedido por um par de parênteses, e isso Obviamente, temos que terminar com dois pontos e depois ir para a próxima linha e marcar uma Agora, a partir dessa segunda linha está o trecho de código que queremos escrever ou executar dentro de nossa função e, claro, só executaremos dentro de nossa função. Então, se fôssemos fazer isso agora , nada aconteceria. Mas o que podemos fazer é acessar nosso ready para que, quando esse script for carregado, possamos realmente chamar greeting à função que acabamos de criar E isso significa que a função será acionada sempre que o ready for acionado. Portanto, embora não precisemos escrever tudo dentro da função pronta, podemos organizar tudo em funções individuais separadas e chamá-las. Isso ajudará a manter nosso código mais limpo e com melhor aparência. E o nome da sua função deve seguir os mesmos padrões, suponho que você deva dizer como suas variáveis. Então, por exemplo, eu expliquei como suas variáveis deveriam ser preferencialmente mais curtas, bem definidas e dizer exatamente quais dados elas contêm. Bem, uma função também deve fazer exatamente isso. Uma função deve conter ou dizer exatamente o que está acontecendo dentro da função apenas lendo o nome. E não só isso, mas uma função só deve fazer uma coisa e apenas uma coisa. Essa função não deveria estar fazendo quatro coisas diferentes dentro dela. Agora, examinamos ou usamos algumas dessas funções que receberam argumentos ou parâmetros. Algumas delas, como remover isso e apagar onde precisamos adicionar outra informação Bem, também podemos fazer isso com nossas funções. Então, digamos que queremos criar um programa que dê as boas-vindas a alguém Já fizemos isso antes. Fizemos nossas porcentagens. Nós colocamos isso. Mas em vez de criar uma variável na parte superior, vamos criar uma dentro dos parênteses de nossas funções Agora, podemos deixar coisas assim e usar qualquer tipo de dados, mas também podemos declarar que tipo de dados devem ser Podemos até dar um passo adiante e podemos informá-lo ou declará-lo, bem como fornecer um parâmetro padrão Agora, quando algo tem um parâmetro padrão, isso significa que é opcional. Não precisamos colocar um argumento quando chamamos a função aqui e pronta. Não precisamos digitar nada aqui e, se não digitarmos nada, o parâmetro padrão será o que será atribuído a ele. No entanto, se digitarmos alguma coisa aqui, ela será sobrescrita Então, vamos seguir em frente e dar a ele o padrão de Bob. E podemos seguir em frente e adicionar uma porcentagem de usuários. Até, sabemos o que preencher. E você verá que, se ligarmos para cumprimentarmos e não colocarmos nada, recebemos Welcome Bob Mas se prosseguirmos e digitarmos algo aqui, vamos com Jim. E nós digitamos isso. Veja bem, somos bem-vindos. Jim Jim entra e sobrescreve o padrão predefinido de Bob Agora, o que acontece se tentarmos colocar algo que seja do tipo irrelevante? Então, vamos colocar isso em zero. O que examinamos, EC, imediatamente recebemos um erro e ele nos diz que deveria ser uma string, não um int. E esse é o benefício que você obterá ao declarar que tipo de variável ela deve ser Se não tivéssemos isso e simplesmente, Ei, o usuário fosse igual a Bob, agora poderíamos sobrescrevê-lo E dizemos, bem-vindo, zero , o que não faz sentido Quando você precisa de dados específicos em sua função, provavelmente também precisará que sejam de um tipo específico Então, assim como as variáveis, será uma boa ideia preencher exatamente o tipo de informação ou declarar o tipo de argumento Mesmo que você não queira definir um padrão, agora, também é importante notar que podemos ter vários argumentos aqui, e é aí que as posições começam a importar. Então, já fizemos isso antes, onde tínhamos indutor ou nome e trabalho Então, se fizermos uma vírgula aqui para separá-la, pudéssemos colocar job lá, e simplesmente colocarmos uma string E, novamente, podemos chamá-los em qualquer ordem quando se trata de preenchê-los em nossa impressão, como se fossem variáveis normais, e você provavelmente está percebendo esse erro aqui Agora, funcionalmente, não há nada de errado com o código aqui Mas o que está dizendo é algo que você deve ter em mente, seja, qualquer coisa com um parâmetro padrão ser colocada no final, porque todos os parâmetros opcionais devem estar no final da sua lista de argumentos. É do jeito que é no script GD. Portanto, você precisa colocar todas as obrigatórias no início e depois as opcionais no final Então, você vê que tudo o que fizemos foi trocar de emprego e usuário, e agora não temos nenhum erro, embora funcionalmente seja o mesmo Tudo bem, então isso bastará para nossa rápida introdução aqui sobre funções e argumentos, também conhecidos como parâmetros aqui para preenchermos, além de mostrar nossos padrões ou como atribuir padrões e a ordem em que todas essas coisas devem estar 19. 19 Função: Tudo bem, então vamos juntar tudo o que estamos fazendo neste momento Então, vamos continuar e eu vou abrir a entrada que fizemos antes apenas clicando duas vezes no script do meu sistema de arquivos. E eu vou pegar tudo o que eu tinha aqui pronto. E poderíamos colocá-lo pronto. Mas o que vamos fazer em vez disso é colocar tudo isso em uma função totalmente nova que vamos criar. E vou ligar para o meu texto de processo. Processar texto. Vamos lá embaixo, e lá vamos nós. E agora podemos dizer passe para dentro do nosso pronto. Tudo bem, agora temos nossa função dentro do texto do processo. E o que eu vou fazer, na verdade, minhas desculpas. Não vamos fazer isso lá. Isso estará dentro do nosso prontidão. Na verdade , o processo de texto será feito em um estágio separado, e isso exigirá um argumento que podemos chamar de novo texto e atribuiremos a ele um parâmetro padrão de nada. Tudo bem. Agora, vou apenas destacá-los, segurar Alt e usar a tecla de seta para cima para movê-los para cima. Tudo bem, então no texto em processo, o que vamos fazer é pegar esse texto como está inserido e podemos verificá-lo, semelhante ao que fizemos aqui no processo aqui Então, vou copiar o que tínhamos na entrada e movê-la aqui para o texto do nosso processo. Pegue-os e puxe-os para trás segurando a tecla Shift e pressionando a tecla tab Agora, o que vamos fazer é manter isso o mais rápido possível, mas vou alterá-lo para Q. Então, se meu texto for igual a Q, não precisaremos obter o campo de texto, porque usaremos nossa nova propriedade Então, agora vamos passar um pedaço de texto para nossa função de processo de texto. E vamos verificar se o novo texto é Q, então vamos chamar o Quit exatamente como fizemos em nossa entrada, e vamos criar uma variável chamada My Name, se não houver. E vamos atribuir isso a qualquer que seja o novo texto que passamos para esse argumento ou passamos para essa função como um argumento. E então podemos preenchê-lo novamente, assim como fizemos com nossa entrada. Não estou fazendo nada extravagante aqui. Vamos lá, precisamos obter nossa opinião. Então, vamos entrar em nosso processo e fazer nossa declaração if, então vamos dizer que a entrada I é actina e vamos continuar com apenas release E nós vamos com o Enter. Agora, se você colocar agora, se não tiver nenhuma ação aqui, poderá usar a interface do usuário, exceto que, acredito, é a padrão pois é espaço ou Enter ou a tecla enter. Mas se você não criou um antes na seção de entrada, basta acessar o projeto e as configurações do projeto, acessar a guia do mapa de entrada na parte superior adicionar uma nova ação chamada Mind Enter. E, ao lado dessa ação, depois de adicioná-la, você verá um botão de adição. Você pode clicar nisso e selecionar qualquer tecla ou botão que quiser. Então, tudo o que vamos fazer aqui quando liberarmos a entropia é chamar nosso processo de texto, e podemos realmente passar esse campo de texto que tínhamos Então, vamos pegar esse campo de texto e pegar a propriedade de texto de. Agora você verá que, quando chegarmos aqui, podemos digitar o que quisermos. E ele é preenchido exatamente como fizemos anteriormente na seção de entrada Então, tudo isso funciona da mesma e, fundamentalmente, é o mesmo Mas, como você pode ver, quando estamos escrevendo isso, é tudo o que precisamos agora. Temos a tecla I pressionada, execute esta função. É muito mais curto, é muito mais limpo e agradável de se ver E, acima de tudo, podemos usar essa função em qualquer lugar que precisemos, então não precisamos escrever o mesmo trecho de código repetidamente. Agora, se você tem um código longo, ou desculpe, não um código longo, um nome de função longo para o qual você simplesmente não consegue pensar em um nome melhor, o que podemos realmente fazer é criar um alias para esse nome Agora, um alias é como um substituto, certo? Então, podemos pegar esse nome curto e ele representará essa função. Então, vai representar esse nome longo, menos como uma variável faz. Temos um nome curto e ele representa esse grande dado. Então, esse será um nome de variável que representará uma função inteira. Tudo bem, então vamos em frente e aqui no topo do nosso script, podemos seguir em frente e criar uma variável Vou chamar esse pseudônimo. E o que você vai igualar é que podemos simplesmente definir isso com o nome da nossa função. Tudo bem, processe assim e funcionará. Então, se virmos até aqui e pressionarmos Enter, podemos seguir em frente e usar o alias dot, Paul, e dentro desses parênteses está o que queremos Então, esse seria nosso campo de texto e nossa propriedade de texto dele. Você vai ver se vamos em frente e executamos isso. Boom, tudo funciona exatamente como era antes. É um pouco mais curto e estamos usando um alias. Agora, como alternativa, se você quiser criar um alias para uma função que esteja dentro de um script diferente em uma nota completamente diferente, a alternativa será semelhante a essa Então, vou criar um alias também, chamado de callable E uma chamada é uma função psicológica, certo? Então, a única diferença é que quando o criamos como um chamável, na verdade temos que adicionar dois argumentos lá Então, o primeiro é onde está a função. Então, neste caso, está no mesmo script das vendas. Então, podemos dizer eu. No entanto, se isso estivesse em, digamos, nosso campo de texto, então faríamos nosso campo de texto em dólares, cel. Mas como isso está no mesmo script, podemos digitar self e, em seguida, é necessário um segundo argumento, que, como você vê, é um nome de método ou função na forma de uma string. Então, iríamos em frente e digitaríamos assim. E agora você pode ver que podemos fazer exatamente a mesma coisa que fizemos alias to.com e transmitir nossa arte Aí está. Então, essas são apenas duas maneiras de criar um alias para uma função 20. 20 aulas: O que é a aula e como podemos criar uma? Então, já usamos classes. Nós simplesmente não nos referimos a eles como classes. Nós os chamamos de objeto. E a linha de edição aqui, esta é uma classe, e todas as classes que existem estão na forma de nós aqui. Assim, você pode navegar e dar uma olhada em todas as diferentes classes. E há até mesmo algumas classes que não estão nessa lista, como JSON, que abordaremos quando falarmos sobre como salvar e carregar diferentes tipos de arquivos Mas é isso que fazemos, certo? Você chama uma classe e chama new para criar uma nova instância de qualquer que seja essa classe. Agora, no caso de uma edição de linha, temos algo gráfico, mas no caso de algo como JSON, em que não temos nada gráfico, mas temos coisas que podemos usar E veremos isso em nossa próxima seção, também examinaremos as expressões regulares. Então, vamos seguir em frente e nos dar uma ideia de como essas coisas funcionam. Vamos em frente e vamos criar nossa própria turma. Desta vez, vou clicar com o botão direito do mouse no meu sistema de arquivos e selecionar Novo script. Vamos herdar de, neste caso, sim, podemos herdar do node. Isso é bom. E vou chamá-la de minha aula de PET e jogar de graça. E agora vou encontrá-lo e clicar duas vezes nele para que possamos abri-lo. E vou deletar tudo nele , exceto nossas extensões na parte superior. Agora, para criar uma nova classe, na verdade não precisamos de nada do que tínhamos antes. O que vamos fazer é digitar nome do sublinhado da classe com um espaço e podemos colocar o que quisermos que seja o nome dessa classe Então, mantendo o nome do roteiro, vou chamá-lo de PET e essa será nossa aula de PET. Agora, você adicionará um segundo argumento aqui na forma de uma string, e isso seria um caminho para uma imagem dentro do seu projeto. Um ícone, e esse ícone realmente aparecerá aqui, semelhante a como o controle tem um pequeno círculo aqui, um círculo verde. Sua função substituirá esse ícone. Tudo bem Então, dentro do Pet, o que vamos fazer é criar algumas variáveis aqui, certo? Então, nome Savar, certo. E isso será igual a uma string vazia. Teremos nossa idade do nosso PET. E então ele será definido como zero por padrão, e podemos ter o tipo, que será definido como uma string. Agora, como essa será sua própria classe, seria bom se tivéssemos maneiras de mudar algumas dessas coisas. Então, podemos seguir em frente e criar uma função chamada nome. Vá. E vou definir isso com novos nomes para que possamos evitar conflitos. Isso e faremos essa função chamada change name. Nós vamos. Agora temos isso e podemos fazer o mesmo nossa idade e tudo mais. Assim, podemos entrar e criar nosso funk como um script normal ou como normalmente fazemos em um roteiro com uma idade diferente Vamos entrar em uma nova era e simplesmente definiremos Temos esses dois Blackbird Sim. Então, queremos igualar a idade à nova era. E podemos fazer a mesma coisa com o PET, com t você mudaria de tipo, o que realmente não faria sentido, a menos que você tivesse algum tipo de animal muito estranho que pudesse mudar o tipo de criatura, acho que algo parecido com o mesmo em Pokémon Então, vamos em frente e com um tipo igual ao novo tipo. E podemos determinar o que são. Vou dizer string, e string dessa forma, não temos problemas e estamos transmitindo coisas. E agora que temos isso, vou prosseguir com a classe de função de encerramento. Queremos adicionar um novo script a um controle aqui. Teste de classe. Tudo bem Agora, o que vamos fazer está dentro da nossa linda função. Agora podemos seguir em frente e criar uma nova variável chamada PET e podemos defini-la como PET dot new. E agora temos acesso a todas as nossas funções, então podemos dizer PET, fazer um ponto. E agora você pode ver que temos o nome da idade, a idade da mudança de tipo, a mudança de nome, o tipo de mudança e, em seguida, todas as coisas padrão que teríamos em um nó típico que estamos estendendo Então, se quisermos, agora podemos imprimir que esta é a porcentagem S. do meu animal de estimação . Ele é uma porcentagem S e é a porcentagem S O. E agora podemos facilmente preencher isso. O que temos aqui. Então, a primeira coisa do PET são os nomes. Eu vou dizer Etname alimentado por pet dot Type e pet dot H. Agora, isso está ficando um pouco longo Você percebe essas linhas claras aqui no editor e, em seguida, uma linha muito mais dura aqui. Tente não ultrapassar essas linhas quando possível. E o que podemos fazer é simplesmente pressionar Enter, ele não vai ver isso lá. Está no Oro? Então, o que podemos fazer é algo assim e manter tudo organizado em uma única linha. Podemos deixar tudo claro assim, e quando escrevermos ou inicializarmos isso, criaremos um novo animal de estimação, mas não vamos adicioná-lo à árvore porque não precisamos, nesse caso, porque só queremos acessar as propriedades dele, certo? E nós podemos criar. Este é meu PET. Temos essa frase e preenchemos com base nas informações que temos lá, que, nas informações que temos lá, os padrões estão todos vazios, exceto o zero Então, a frase ainda parece um pouco estranha. Mas o que podemos fazer é, antes de fazer essa impressão chamar Pet dot change Let's use Name, por exemplo, e podemos passar um nome. Então, vamos dizer Billy. E agora você pode ver isso preenchido aqui dentro do nosso console de saída E podemos fazer a mesma coisa com a idade e o tipo. No entanto, se vamos tornar algo assim obrigatório, será um pouco chato exigir que outro usuário faça isso de forma consistente Então, o que realmente fazemos lá é chamar uma função int, e isso é algo que está embutido em todas as classes. Então, o funk sublinha o INIT, abra e feche E é aqui que podemos ter uma lista definida de parâmetros que precisamos inserir. E essas são todas as coisas que serão definidas como padrão assim que nossa classe for criada. Então, vamos em frente e entraremos, vou dizer um novo nome. E então faremos nova era e nova, certo? E então tudo o que vamos fazer é dizer que o nome é igual ao novo nome. Vamos dizer que a idade é igual, igual à nova era, e o tipo é igual ao novo tipo. Agora, quando voltarmos ao nosso script de teste, você verá que temos um erro. Pelo menos devemos ter um erro que apareça. Aqui vamos nós. E isso é porque agora temos que ter discussões. Então, dentro do novo interior da nova chamada aqui, esses são todos os parâmetros que devemos preencher para nossa função int. Então, precisamos de um nome, uma idade e um tipo. E, novamente, podemos chamá-los pelos tipos de sua string e string que você vê quando chegamos aqui agora, precisaremos preencher isso, então vamos prosseguir para que possamos colocar um nome lá. Digamos morcegos. Nosso segundo argumento é nossa idade, que podemos colocar em duas. E então precisávamos de um tipo. Digamos que cachorro está bem. Vamos em frente. Nós podemos executar isso. E agora vemos tudo isso incorporado. Esta é minha bolsa de estimação. Ele tem um cachorro e tem 2 anos Agora, tudo isso é preenchido. Nós condensamos isso porque não precisamos fazer isso, não precisamos escrever três funções diferentes para alterar isso de nosso animal de estimação Em vez disso, simplesmente colocamos tudo dentro do nosso in it ou da nossa função inicializada que vem reconstruída em todas as classes Certo. Espero que isso lhe dê uma ideia do que são classes e como podemos criá-las e como podemos realmente usá-las dentro do nosso código. Uma classe pode ser acessada para qualquer script, ou melhor, você pode criar uma nova instância dessa classe a partir de qualquer script. E você pode criar uma classe apenas para ter alguns utilitários e economizar tempo Eu apenas o trago em um utilitário e chamo algumas funções específicas que você pode precisar em todos os lugares, ou você pode usá-lo para criar um objeto, como, neste caso, uma classe de animais de estimação ou, se você estiver criando um jogo, talvez uma classe inimiga, e então esse inimigo teria sua própria saúde seu próprio ataque e seu próprio conjunto de informações. 21. O que vamos fazer(espaço preenchido): Tudo bem, esta semana, vamos aumentar um pouco as coisas e, em vez de escrever apenas uma mensagem de texto, como fizemos na semana passada Nesta semana, vamos criar ou recriar um antigo jogo de dois D dos anos 80 chamado Agora, isso nos dará a chance de trabalhar com um controlador de dois reprodutores D. Colisões. Talvez entremos em algumas partículas. Podemos trabalhar com alguns geradores. E, como você vê, se você nunca jogou Frogger antes ou nunca ouviu falar dele, veja aqui, vamos trabalhar com a interface do usuário para heads-up display Temos pontos que precisaremos acompanhar. Encontre meu mouse lá por um segundo. Mas não só isso, mas também vamos ver se vai mostrar isso aqui? Ok, então temos uma certa quantidade de sapos por jogador. Obviamente, não precisamos colocar moedas. Mas esse é essencialmente o jogo aqui. Portanto, temos duas pequenas zonas seguras nesta pequena área roxa. Temos uma estrada no meio que tem cinco faixas de tráfego alternando para frente e para trás E se o sapo for atropelado por um desses carros, eles morrem e o jogador perde uma vida. Eles chegam ao topo. Eles podem pular nas tartarugas e nos troncos para entrar na zona segura Se eles pousarem na água, isso também é uma falha. que eu acho que agora que você pensa sobre isso, meio que não faz muito sentido, já que é um sapo Mas aí está. Essa é a ideia do que vamos criar, e é isso que Frogger é, se você nunca jogou ou ouviu falar dele 22. Criando o livro de histórias: Tudo bem, bem-vindos, pessoal. E hoje, vamos começar a criar nosso primeiro jogo. O que vamos criar hoje é, na verdade o livro de histórias do nosso MadisGame E esse livro de histórias conterá todas as nossas histórias , bem como as instruções que pediremos ao jogador Agora, se você quiser, pode ir em frente e criar isso em um projeto totalmente novo. Vou seguir em frente e excluir nossos pequenos exemplos aqui que estávamos usando. Quando você estava aprendendo o idioma aqui, basta selecioná-los e excluí-los. Dessa forma, posso começar do zero. E como vou manter todos os nossos projetos dentro desse único projeto aqui, vou criar uma nova pasta e chamá-la de MDLibs Novamente, eu recomendaria que você criasse um projeto totalmente novo Dessa forma, você pode exportar tudo individualmente. Tudo bem, então seguimos em frente e temos isso. Temos nosso MadIpsFolder, para o seu projeto. E eu vou seguir em frente e clicar na minha pasta. Se você estiver iniciando um novo projeto, basta clicar com o botão direito do mouse em um espaço vazio. E eu vou criar um novo script. Vou criar um roteiro aqui, e vou ligar para essa turma de contos e clicar em Preate Tudo bem Agora posso prosseguir e a minha não caiu na minha pasta porque cliquei do lado de fora, então vou clicar com o botão direito do mouse e movê-la para onde eu gostaria E eu o tenho dentro da minha pasta aqui, certo? Eu vou abrir isso. Podemos estender Não, tudo bem. Não precisaremos de nada disso porque essa aula só vai conter algumas informações para nós. Então, vou colocar um livro de histórias com o nome da classe, e precisaremos de extensões para isso Não, acho que não estamos. Então, vou seguir em frente e mudar tudo isso para que tenhamos um recomeço completo aqui. Tudo bem, então é aqui que vamos criar nossas histórias, e nossas histórias serão mantidas dentro de uma variável que é o tipo up dictionary Tudo bem, então eu vou criar uma variável chamada Histórias. E isso vai ser um dicionário. E como é um dicionário, vou usar Enter para abrir isso. Lembre-se de que o dicionário é indicado pelas chaves que cercam E para eles, posso apenas dizer a história um e dois pontos, essa será a nossa chave E agora precisamos de um valor para isso. E esse valor também será um dicionário porque precisaremos de duas informações aqui dentro da história. Vamos precisar da história real. A e isso será apenas uma string vazia por enquanto. E então também terá um para nossos adereços. E isso vai ser apenas uma matriz. Então, vamos ter colchetes aqui. E esse é o modelo que vamos usar para todas as nossas histórias. Então, vamos ter a história um, história dois, história três, história quatro, etc E tudo o que vamos fazer é seguir em frente e incorporar isso. Então, por exemplo, para a história , diremos: vamos ver o que queremos colocar aqui? Tudo bem, então eu fui em frente e criei minha pequena história aqui Então, um dia, a porcentagem S. Agora, porcentagem S é apenas um espaço reservado para qualquer string E podemos substituir isso mais tarde por qualquer coisa que o usuário insira. Então, esse percentual S, nesse caso, funcionará como nosso espaço em branco em nossa história. Então, um dia, o espaço em branco foi para o espaço em branco para receber uma missão. Essa missão era ir até Blank para recuperar Blank, certo? Então, temos essa pequena história aqui, e lá vamos nós. Se você quiser dividir a história em várias linhas, podemos facilmente fazer isso. Então, ao fazer isso colocando nossa barra aqui no final e depois na próxima linha, temos um sinal positivo Ele vai adicionar essa string a essa string, e agora podemos ter tudo junto em um só lugar. Mas não só isso, é muito mais fácil ver quando está tudo embutido ou em um site como este Agora, eu fui em frente e imprimi isso com um int apenas para fins de teste, apenas para ter certeza que não há problemas acontecendo, nem bugs estranhos Lá vamos nós. Estamos prontos. Agora, para nossos prompts, essas serão cadeias de caracteres dentro dessa matriz dentro dessa E à medida que avançamos, um dia, o espaço em branco. Então, esse espaço em branco faz sentido se for um substantivo, então podemos seguir em frente e simplesmente digitar o substantivo E o que vem a seguir? Fui para o espaço em branco, então este vai ser um lugar. Nosso próximo a receber uma missão. Essa missão era ir até o caminho para onde ir, e esse será outro lugar para recuperar algo Isso seria apenas mais um substantivo. Tudo bem? Então, é basicamente assim que vamos trabalhar com nossos prompts. Então, continuamos. Temos um substantivo, depois um lugar, depois outro lugar e depois um substantivo, e isso preenche todas as nossas opções aqui Isso nos dará coisas suficientes para preencher nossos espaços em branco. E tudo o que precisamos fazer agora para mais histórias é colocar uma vírgula aqui no final, ir para uma nova linha, colar uma cópia do que acabamos de ter, mudar a história um para a história dois E agora podemos seguir em frente e criar outra história com mais algumas instruções, e podemos simplesmente seguir em frente e fazer isso repetidamente Para termos um bom livro de histórias completo para usar. Tudo bem, então temos uma segunda pequena história aqui. Certa manhã, D Baker foi até Eu fui até Blank U na loja. Para sua surpresa, no entanto, havia um espaço em branco parando em branco. Agora, eu continuei com o verbo substantivo e Pronow, mas agora pensando nisso, pronome provavelmente não faz sentido, porque já dissemos que era Sua loja, sua surpresa. Então, vou mudar isso de volta para ser apenas um substantivo, então pare de ser Blaine E você pode simplesmente seguir em frente e fazer isso continuamente, criar máximo de pequenas histórias divertidas que puder e realmente preencher seu livro de histórias E depois de ter seu livro de histórias completamente criado e pronto, podemos passar para a próxima seção e começar a criar a interface com a qual nosso usuário interaja E então vamos realmente começar a criar o código e fazer com que tudo funcione. 23. Crie a interface: Tudo bem, então vamos começar a criar a interface de que precisaremos para nosso jogador realmente jogue o jogo Então, agora, temos apenas uma cena vazia aqui, e vamos precisar de uma nova. Então, vamos ver o que queremos? Bem, precisaremos que o player seja capaz digitar algum texto, acordo com as instruções fornecidas Obviamente, precisaremos exibir texto na tela para que o usuário saiba quais solicitações ele precisa, além de ler a história no final E podemos ir em frente e colocar um botão lá também. Dessa forma, se o usuário não quiser pressionar Enter, ele pode clicar no botão e ainda enviar o texto. Então, essas são três coisas que precisaremos , no mínimo, aqui. Então, vamos em frente. Podemos criar. Vou continuar e clicar em Interface do usuário aqui na seção criar nó raiz, no lado esquerdo, e isso nos dará um nó de controle para iniciarmos. Tudo bem. E vou renomear isso para Maine, pois essa será a principal fonte aqui do nosso jogo Vou apertar este pequeno botão de adição logo acima dele com a opção Principal selecionada, e isso vai me solicitar a criação de um novo nó. Agora, aqui você está apenas fazendo todos os objetos diferentes que poderíamos criar. E lembre-se de que também podemos fazer isso em código. Estamos apenas fazendo, por exemplo, que vamos entrar no Controle. E você sabe que eu vou seguir em frente e pesquisar. Estou procurando por isso. Então, o equivalente a selecionar isso e adicioná-lo aqui seria o mesmo que se tivéssemos um script em nosso script principal aqui, e apenas disséssemos edição de linha ponto novo e o adicionássemos à cena. É exatamente a mesma coisa que acabamos de fazer aqui, só que estamos fazendo as coisas visualmente, só porque isso será mais rápido no final do dia E se tivermos as ferramentas para acelerar a produção, podemos muito bem tirar proveito delas. Vou pegar a pequena alça laranja da laranja aqui e pequena alça laranja da laranja aqui esticá-la E eu vou continuar e, enquanto isso estiver selecionado, vou para o topo da minha tela. Clique. Lá vamos nós. Este pequeno ícone ao lado da âncora, e você verá um pop-up para predefinições de âncora E vou selecionar o que está no centro da minha tela. Lá vamos nós. Dessa forma, sei que meu campo de texto sempre estará bem no meio. Tudo bem. Então, agora esse objeto tem um monte de propriedades ou você também pode chamá-las de variáveis, certo, que estão nelas que podemos acessar. E um deles é o texto do espaço reservado. E podemos ver isso se dermos uma olhada no lado direito do inspetor Podemos ver o texto do espaço reservado aqui. Agora, podemos digitar aqui, e isso dará ao nosso usuário uma ideia do que ele deve digitar. Assim como você acessa um site e ele pode dizer e-mail no campo de e-mail e senha nesse campo. Então, vamos dizer enviar prompt, ponto, ponto, ponto. Dessa forma, nosso usuário sabe que é aqui que ele envia sua solicitação. E vou renomear minha edição de linha usuário que você deseja chamá-la de prompt de usuário Não, vamos chamá-lo de prompt, você quer ir para prompt de texto, campo de aviso. Envio imediato. Pronto, porque enviamos nossa fonte aqui ou não , desculpe Então, vou continuar com isso e ligar para o envio imediato. Agora, eu mencionei que queria um botão, então vou selecionar Principal novamente. Eu quero que esse seja o dono. Vou digitar o botão na parte superior. E agora eu tenho um botão, e vou definir o texto desse botão para dizer apenas: Ok. E eu vou fazer a mesma coisa com o botão selecionado, vou selecionar o botão na parte superior ao lado da âncora e selecionar o centro Dessa forma, ele pode ser centralizado. E eu vou segurá-la com um clique esquerdo, depois vou segurar a tecla Shift e deslizá-la para a direita se eu conseguir pegá-la aqui Aqui vamos nós. Assim mesmo. Lá vamos nós. Agora, acho que algumas histórias podem ficar um pouco longas. Então, vou pegar os dois, meu prompt e meu botão o. E para isso, eu simplesmente prossegui e você pode clicar com a tecla Shift ou Control Click. De qualquer forma, trabalharemos por aqui. Vou pegá-lo na minha interface de usuário e segurar a tecla Shift para que possamos mantê-lo em uma linha reta, e vou movê-lo um pouco para baixo para que tenhamos um pouco mais de espaço na parte superior, caso nossas histórias fiquem um pouco longas. OK. Então, essas âncoras mostram onde nosso objeto estará em relação a esse ponto na tela Portanto, essa âncora está no ponto morto da nossa tela. Portanto, independentemente do tamanho da janela, esse campo de texto, essa edição de linha e esse botão OK estarão sempre nessa distância, aproximadamente do centro. Então, isso quase atualizará automaticamente sua posição com base nas âncoras e no tamanho da janela O que é ótimo para nós, é porque nunca sabemos o tamanho de uma tela Vamos ver. Partindo daqui, o que mais precisamos? Bem, precisaremos exibir algum texto. Vamos ver. Poderíamos usar um rótulo para solicitar ou mostrar nossas informações. Também poderíamos usar um Rich Text, que eu acho que vamos usar um thad Então, vamos adicionar outro em nossa cena, e esse será um rótulo de rich text. E eu vou tirar essa caixa laranja, essa alça. E acho que vou colocar as âncoras no centro para que tudo fique relativo aqui Clique em segurar a tecla Shift e abra a tecla. E acho que isso bastará para muitas de nossas informações. Qual é o tamanho desse texto? Sim, acho que vai ficar bem. Tudo bem, vamos ver. Etiqueta Rich Text, vou renomeá-la para o meu texto de exibição Tudo bem. Então eu acho que isso é tudo que vamos precisar. Vou clicar em Controles e salvar minha cena. Aqui está dentro da minha pasta. E agora, se fôssemos executar isso, não teríamos problemas. Podemos ver que tudo funcionou perfeitamente bem aqui. Tudo parece bom. Podemos digitar dentro de nossos livros. E eu vou procurar a janela, para que eu possa te mostrar isso aqui. Agora, será importante que você veja a janela. Aí está. Você pode ver que podemos digitá-lo e excluir coisas dele. Incrível. Podemos apertar o botão OK. Fantástico. Agora, esse plano de fundo é um pouco insípido. É um pouco chato. Então, o que eu vou fazer é ir até o Google e ir em frente e pesquisar o Blackboard Aí está. Procure por quadro-negro, quadro-negro, o que você quiser procurar E vou seguir em frente e escolher uma imagem aleatoriamente e salvá-la. Agora eu só tenho que descobrir onde estão minhas pastas. Aqui. Salve, volte para Gato. E aí está. Podemos vê-lo salvo aqui. Dentro da minha pasta. Então, vou adicionar mais um objeto ao meu principal aqui na minha cena. E essa será uma textura reta que eu simplesmente renomearei E vou arrastar aqui a imagem do Blackboard que eu criei ou, desculpe, não criei e que encontrei no Google E com o fundo selecionado, a textura reta, vou arrastá-lo até o slot de textura no lado direito, dentro do inspetor, e soltá-lo E se precisar, você alterará o tamanho da expansão aqui e o alongamento, se necessário, para alterar o tamanho e ajustá-lo Por exemplo, se definirmos isso para manter o aspecto, ele não se moverá, mas se mudarmos nosso modo de expansão para ignorar o tamanho, por exemplo, vamos lá. Podemos ver que podemos continuar com isso. E se apenas mudarmos o aspecto de manutenção para a escala, vamos lá. Agora podemos ampliá-lo para atender às nossas necessidades. Agora, o importante é que você veja esse contorno azul aqui. Tudo dentro dessa caixa é o que poderemos ver dentro da nossa janela. Então, vou torná-la um pouco maior do que a nossa janela só para ter certeza de que está completamente coberta. E nossas âncoras no canto superior esquerdo. Agora, como pano de fundo, isso não vai funcionar. Então, vou ajustar minhas âncoras e selecionar a que está totalmente destruída E isso vai colocar um pino em cada canto. Isso garantirá que, independentemente do tamanho da nossa janela, esse plano de fundo sempre a preencherá. Tudo bem. Então, agora temos um problema. Nossa experiência está acima de tudo. Não podemos ver nosso botão ou qualquer coisa que fizemos antes. Bem, isso é apenas por causa das camadas, essencialmente. Se você trabalhou em algo como o Photoshop, você estará familiarizado com as camadas aqui Tudo o que precisamos fazer é pegar nosso plano de fundo e, na verdade, temos que separá-lo. Porque o que está no topo estará por trás de todo o resto na parte inferior. Eu sei que é o contrário no Photoshop. Na parte inferior geralmente está o que está por trás de tudo. Entre aqui, dê uma olhada, algo que você tem que lembrar. Mas lá vamos nós. Com isso, temos nosso visual todo configurado aqui e estamos prontos para começar a usar parte do código para fazer nossos botões e tudo mais funcionarem e começar nosso jogo 24. Selecione a história e dê inspiração para o jogador: Tudo bem, vamos começar a fazer parte do nosso código agora Vamos colocar nosso script em nosso nó principal aqui. Então, vou apenas adicionar um script. Vou deixar o meu chamado Min e clicar em Criar. Tudo bem, então vamos ver. O que precisamos fazer? Bem, precisamos acompanhar qual é a nossa história atual. Então, vamos criar uma variável para isso. História atual. Isso vai ser tudo. Vai ser uma matriz no nosso caso? Vamos selecionar uma história, e isso vai nos dar Não, isso vai nos devolver um dicionário. Mas podemos realmente esconder isso e transformá-lo em um dicionário. Lá vamos nós. Precisaremos acompanhar as palavras de nossos jogadores, certo? As palavras que eles enviaram. Então, vamos dizer as palavras dos jogadores, e essa será uma matriz à qual podemos adicionar. Agora, vamos usar uma palavra-chave aqui chamada de pronto. E na versão 4.1 aqui, na verdade, temos que usar isso no símbolo para usar essas palavras-chave. Coloque isso no símbolo e use quando estiver pronto. Então, podemos seguir em frente e criar nossa variável normalmente. E esse será o texto do nosso jogador. O que será igual ao nosso envio imediato que queremos receber Então, para obter esse nó, existem algumas maneiras de fazer isso. O mais fácil é usar esse cifrão, que significa simplesmente obter um nó. E a partir daqui, temos um acesso fácil ao nosso envio imediato. Como você vê, só precisamos descer um nível aqui. E se começarmos a digitar, veremos o preenchimento automático aparecer para nós e clicarmos nele, pronto Sempre que quisermos acessar esse objeto, podemos simplesmente digitar o texto do player. Agora, vamos fazer isso também para nosso texto de exibição e nosso botão. Então, vou dizer que o texto exibido é igual ao que acabei de chamar de texto exibido. Incrível. E teremos mais um para o nosso botão. Precisamos do botão? Não, na verdade não temos. Não vamos precisar de um para isso. Não vale a pena usar esse botão padrão aqui. OK. Então, vamos prosseguir e remover o processo de lá. Então, o que vamos precisar, vamos ver. Precisamos selecionar uma história, certo? Então, temos que atribuir nossa história atual e, para manter as coisas organizadas, vamos criar uma função para manter nossa história atual definida. É uma história atual ambientada no funk. É assim. E como essa é uma função separada, vou colocar duas linhas no meio. E como definimos como vamos definir essa história atual aqui? Bem, não retornaremos nada no final disso porque vamos atribuí-lo diretamente à nossa variável. Então, para conseguir isso, precisaremos obter um número aleatório ou selecionar uma história aleatória. Então, vou criar uma variável chamada Stories, e essa será uma matriz, que será igual à nossa classe de livro de histórias dot StresOH E olha, não podemos acessar isso. Então, vamos voltar para nossa aula de livros de histórias e, para evitar a criação de um novo objeto para isso, já que tudo o que precisamos é acessar as histórias que estão nela, usaremos a palavra-chave estática que mencionamos na primeira semana No momento, voltamos ao nosso script principal e podemos fazer Storybook dot STRS Não consigo atribuir um valor do tipo dicionário à variável, então queremos obter nossas E neste dicionário, vamos usar as chamadas teclas de ponto, parênteses abertos e fechados E o que isso fará com que essas teclas chamem aqui, que podemos chamar em um dicionário, ele retornará uma matriz ou uma lista da história um, história dois, história três, história quatro, etc Então, isso vai ter todos os nomes de nossas pequenas histórias aqui. Tudo bem. Agora, a partir daqui, temos que selecionar um aleatório. Então a questão é: qual deles queremos? Bem, vamos criar uma variável chamada história selecionada aqui. E, claro, isso vai ser apenas uma sequência porque todas as nossas histórias são cordas. Então, faz sentido. E vamos acessar nossas histórias aqui, certo, histórias de Ray. E na versão 4.1, podemos simplesmente selecionar uma escolha aleatória. Isso é tudo o que temos que fazer, e ele selecionará aleatoriamente uma história para nos devolver E isso é tudo o que precisamos fazer para isso. Agora, tudo o que precisamos fazer é seguir em frente e definir nossa história atual. Então, podemos contar a história atual. Vamos ver. Acabamos de configurá-lo para isso. Então isso deve nos dar um dicionário cheio. Ambos, isso deve ficar bem. Então, vamos apenas dizer que a história atual é igual à história selecionada. A força não pode ser atribuída a um tipo de variável. Ah, isso mesmo. Tenho que escrever isso de forma diferente. Storybook dot Storys e depois vou usar esses colchetes aqui porque queremos acessar a história que está dentro dele E a que queremos acessar é a história selecionada, certo? Então, novamente, vamos repassar isso. Estamos criando uma variável chamada histórias, que é uma matriz ou uma lista. E isso está sendo atribuído a todas as diferentes histórias, certo, às chaves do nosso dicionário. De todas as nossas histórias dentro do nosso livro de histórias. Então, agora as histórias contêm todos os nossos títulos de pequenas histórias. E então a história selecionada é uma sequência de caracteres que está sendo definida como uma história aleatória de lá, fora da nossa lista. E então estamos configurando a história atual que já criamos no topo, que é o dicionário. Estamos igualando isso à história que está dentro do nosso livro de histórias, a história que selecionamos. Tudo bem. E podemos ver isso funcionar facilmente se simplesmente subirmos até nosso bloco pronto aqui, e precisarmos realmente ligar e definir a história atual, porque obviamente você fará isso no início do jogo. E então eu vou continuar e imprimir nossa história atual. Dessa forma, podemos ver se está funcionando porque já está vazio por padrão. Então, se eu imprimir isso antes, definimos nossa história atual, devemos ser capazes de ver isso, e eu vou apenas interpretar essa cena. Vamos lá, para que possamos ver que está vazio na parte superior. E depois de prepararmos nosso serviço, temos a única manhã em que o padeiro ficou em branco para abrir sua loja, para sua surpresa, no entanto Parece que temos a primeira história. Vamos fazer isso de novo. E aqui vamos nós. Temos uma história completamente diferente aqui agora. O céu vazio era um lindo tom de branco, assim como o espaço em branco exibia o espaço em branco E podemos ver que também temos todas as nossas instruções aqui. Isso é fantástico. Estamos todos aparecendo aqui. Tudo está funcionando muito bem. Agora temos uma história com a qual trabalhar. Nós os selecionamos aleatoriamente. Agora temos que nos preocupar em como avisar o jogador, certo? Bem, não precisamos mais dessas declarações impressas porque sabemos que estão funcionando bem. Então, nossa história foi definida. Como podemos avisar nosso jogador? Bem, simples. Vamos descer criar uma nova função. Vamos chamá-lo de prompt player. E o que vamos fazer é ver. Vamos direto ao nosso texto de exibição. E queremos acessar a propriedade de texto disso para que possamos defini-la. E para remover qualquer confusão em potencial, vamos dizer: vamos usar mais iguais aqui e ver como isso se parece com a nossa E eu vou dizer, May, eu tenho o que vamos acrescentar a isso, que serão nossos bailes de formatura atuais E a solicitação que perguntaremos sobre como sabemos qual delas queremos será baseada nas palavras de nossos jogadores que criamos aqui em cima, certo? Palavras dos nossos jogadores. E vamos basear isso no tamanho porque lembre-se, quando estamos trabalhando com uma lista, começamos a contar em zero, um, dois, três, certo? Então, se o tamanho do nosso jogador for zero, isso significa que ainda não temos inscrições Então, vamos pegar o primeiro item dessa lista. Se um item do jogador tiver enviado uma palavra , receberemos o segundo item e assim por diante. Tudo bem, então podemos avisar o jogador dessa forma. E eu sei que está ficando um pouco longo desse lado , mas vamos ver. No momento, isso é tudo o que precisamos para alertar o jogador. Tudo bem. Então, o que vamos fazer a partir daqui, depois de selecionarmos a história atual, já voltando, podemos ligar para o prompt player a partir daí. E isso deve ser tudo o que precisamos. Então, vamos experimentar. Oh, parece que me deparei um problema aqui, e o que é isso? Vamos dar uma olhada. Ah, sim, eu vejo o erro aqui. Diga-me instruções não existem porque usei um P maiúsculo dentro do meu livro de histórias Então, se eu fizer disso um P maiúsculo, isso deve resolver meu problema. E lá vamos nós. Então está nos perguntando, posso ter um verbo E então eu posso ir em frente e digitar aqui. Você pode pressionar Ok, pressionar Enter. Nada vai mudar aqui no momento. Mas você percebe como eu tive que clicar nessa caixa quando começamos. Então, se eu simplesmente reiniciar isso, e agora eu tiver que vir até aqui, eu mesmo terei que clicar nele. Bem, por que não automatizamos isso? Vamos pegar o texto do jogador. E vamos chamar algo chamado Grab focus. Agora, quando executamos isso, pronto, já está lá, e podemos começar a digitar imediatamente Portanto, não precisamos perder tempo. Tudo bem. Então, para continuar alertando o jogador, temos que dar uma olhada em nossas palavras enviadas, certo? Na verdade, temos que enviar essas palavras. Então, para isso, teremos que conectar alguns sinais para sabermos quando as coisas estão acontecendo. Então, vou clicar no meu envio imediato na minha cena. Em seguida, vou passar para a direita e clicar na guia que diz node. E aqui podemos ver todos os sinais padrão que estão aqui. E o que estamos procurando é o texto enviado na seção de edição de linha. E, basicamente, sempre que pressionarmos a tecla enter, ele enviará qualquer pedaço de texto que o usuário tenha digitado Então, vou seguir em frente e clicar duas vezes nele. Tudo bem, então você deve ver uma tela como essa, e tudo isso é ótimo porque não temos nenhum script nelas, e essa é azul porque é disso que estamos tentando conectar o sinal. Então, vamos selecionar nosso principal porque tem nosso script nele, e vamos clicar em Conectar. Se você quiser renomear a função aqui, você pode, eu não vou Vou deixá-lo com o nome padrão aqui e vou clicar no botão Conectar. E você o verá adicionado aqui na parte inferior do nosso script. Vou apenas segurar a tecla Alt e usar a tecla de seta para cima para movê-la alguns espaços. Pronto, tire isso do caminho. Vá. Isso está fora do caminho. Mas lá vamos nós. Então, vemos no nome dessa função, que será acionada a partir desse sinal, ela executará esse bloco de código. Agora podemos ver que temos um novo texto, que é uma string que é passada para nós. Então, esse novo texto é o que foi digitado dentro dessa linha. Tudo bem. Então, quando um pedaço de texto é enviado, o que precisamos fazer é adicioná-lo às palavras do jogador. E como precisaremos fazer isso potencialmente várias vezes ou pelo menos em vários locais, vamos criar uma função para isso. Funk, pai, vamos ver como eu chamei isso? Adicione palavras ao jogador para que possamos manter as coisas limpas. Aqui vamos nós. E tudo o que vamos fazer dentro dessa função é acrescentar nossas palavras, certo Palavras dos jogadores. Anexar. Agora, anexe Essa chamada aqui só nos permite adicionar coisas à nossa matriz, adicionar itens à nossa lista. Então, tudo o que digitarmos aqui será adicionado e tudo o que adicionaremos é texto do jogador, texto com pontos Agora, poderíamos tornar isso possível de forma mais limpa, mas isso pode causar alguns problemas em potencial posteriormente. Quem sabe? Então, vamos fazer isso dessa maneira por enquanto. E o que seria bom é se ele exibir texto, se apagarmos isso da nossa tela, então o tornarmos uma string vazia e vazia, eu acho que você poderia dizer. Vamos dizer exibir ponto de texto. E vamos ligar de forma clara, e isso só vai esvaziar tudo. E o que isso vai fazer é remover o aviso que está na nossa tela, solicitando um verbo ou um substantivo ou qualquer outra coisa remover o aviso que está na nossa tela, solicitando um verbo ou um substantivo ou E para mostrar visualmente ao nosso player que nosso texto foi enviado, podemos seguir em frente e fazer isso com o texto do nosso player também. Vamos dar uma olhada em como isso está acontecendo agora. Temos que ligar de volta para cá antes que esqueçamos. Então, em nosso texto enviado, chamaremos adicionar palavras ao jogador. Tudo bem. Então, se prosseguirmos e executarmos isso e dermos uma olhada agora, você diz: “Posso ter um verbo” e diremos “correr” E eu apertei Enter. E você vê que nosso texto aqui embaixo foi esvaziado e nosso quadro no topo aqui também foi vazio Então isso é ótimo. Parece que nosso texto foi enviado e estamos prontos para atualizá-lo com uma nova solicitação. Fantástico. Tudo bem. Então, para continuar nossa solicitação, vamos configurar parcialmente o que precisaremos para configurar o final e reiniciar o Então, vamos deixar essa parte de fora e voltar para essa função no futuro. Então, agora, vamos usar isso apenas para verificar ou chamar de verificação das palavras do jogador Lang Então eu não quero que você se confunda com esse nome. Fará mais sentido quando adicionarmos quando estivermos verificando se o jogo acabou. Então, vou dar uma olhada nas palavras dos jogadores, Lang Tudo bem. Então, o que vamos fazer é a maneira como podemos expressar isso. Vamos ver. Podemos dizer se vamos usar uma declaração if aqui. Então, vou dizer se as palavras dos jogadores têm tamanho. E lembre-se, isso só vai nos dar a quantidade de itens que estão dentro das palavras do nosso jogador aqui. Então, a quantidade de palavras que já enviamos. E vamos dizer que isso é igual à nossa história atual, as instruções, os potes do baile Pronto, ponto avisa. Tamanho do ponto porque lembre-se de que nossas instruções são uma lista. E, claro, temos um erro aqui até colocarmos nosso cólon lá no final da linha Então, vamos dizer que se o jogador enviou a mesma quantidade de palavras que recebemos as instruções , podemos fazer alguma coisa Mas não queremos fazer isso, certo? Porque queremos dizer, se não, assim. Porque queremos dizer: Ah, se o jogador ainda não enviou palavras suficientes , precisamos avisá-lo novamente, e é exatamente isso que vamos fazer. Vamos ligar para o Prompt Player. Tudo bem. E quando chegar o próximo vídeo, voltaremos e reescreveremos essa função Mas, por enquanto, isso deve funcionar para nós. Vamos dar uma olhada. Então, posso ter um adjetivo? Claro. Vamos escolher bonita. Você pressiona Enter e a coisa é atualizada. Mas, na verdade, não estamos verificando tamanho do nosso player em nenhum lugar, então você vê por que isso é um problema. Então, vamos ver onde fazemos isso? Fazemos isso quando adicionamos palavras aos nossos jogadores. Então, depois de adicionarmos a palavra e realmente enviarmos essa palavra para nós, verificaremos o link e veremos se podemos continuar jogando e, em caso afirmativo, solicitaremos ao usuário a próxima. Vamos ver. Posso ter um verbo Sim, vamos com RN ou Run. Lá vamos nós. Posso ter um substantivo, cachorro Posso usar um adjetivo? Bonita. Posso ter advérbio. Sim, rapidamente. Posso ter um substantivo Espero que tenhamos muitas coisas aqui. Vermelho. Posso ter um verbo terminado em ING Roubando. E aí está, nossa coisa acabou. Estamos sem avisos. Ainda não temos nossa história, mas temos todas as nossas instruções acontecendo lá Agora, podemos ver que nosso texto exibido na verdade não foi apagado, o que é interessante. Então, em vez de chamar clear dentro de nossas palavras para adicionar ao player, vamos pegar a propriedade text e defini-la como uma string vazia. E vamos ver como isso funciona aqui. Eu tenho um verbo, correr. Lá vamos nós. Então, agora nós o atualizamos dessa forma. Não sei por que o clear não está funcionando. Talvez haja um bug lá agora. Eu não sei. Mas podemos simplesmente limpá-lo manualmente configurando-o para uma tela vazia. E se você quiser manter isso funcionando como um em cada linha, se quiser continuar assim, um em cada linha, tudo o que precisamos fazer é adicionar um mais igual igual e fazer esse back-end Ou é um atacante? Acho que é o atacante aqui, e essa será uma nova linha. Então, se dermos uma olhada dessa maneira, ela pode ter uma execução b, e na verdade não vai acontecer dessa maneira. Eu sempre misturo esses dois para saber em qual direção ele deveria ir. Adjetivo. Bonita. Lá vamos nós. Agora podemos ter um novo otorrinolaringologista em cada linha para perguntar a você. Então, se você preferir que seja assim, é assim que você pode fazer esse pequeno ajuste. Tenha um substantivo. Sim, cachorro terminando com ED. Estou desenhando um espaço em branco aqui agora. Não sei por que, mas você entendeu. Assim, podemos ter uma nova linha qual você pode esclarecer completamente na qual você pode esclarecer completamente a forma como deseja que seja apresentada. Tudo bem. E acho que isso é suficiente por hoje, porque acho que tudo o que precisamos agora é basicamente terminar nosso jogo, agora é basicamente terminar nosso jogo, seja terminá-lo completamente, contar nossa história, ver se o jogador quer jogar novamente e todas essas coisas divertidas. Então, uma nota rápida aqui antes de decolarmos. Em vez de avisar o jogador aqui no topo, o que podemos fazer agora é verificar o tamanho das palavras do jogador em nosso menu pronto, e isso deve nos configurar da mesma forma visual Sim, lá vamos nós. Tudo bem. Então aí está. Temos muitas das nossas configurações de jogo aqui. É simples em termos de videogames e oferece a chance de realmente usar as coisas que abordamos na primeira semana, independentemente de qual versão você fez as duas. Então, estamos trabalhando com variáveis, diferentes tipos de dados, certamente trabalhando com funções para manter tudo limpo e limpo. Estamos usando programação orientada a objetos aqui, com nosso livro de histórias, estamos incentivando nossos jogadores Você está aprendendo algumas coisas novas. Se você não usou a versão alternativa, você aprendeu sobre acrescentar Você aprendeu sobre o Grab focus. Independentemente de qual deles você já passou, você aprendeu sobre escolher aleatoriamente e teclas. Então, você aprendeu muitas coisas além do que aprendemos na primeira semana, seja qual for a versão pela qual você tenha passado, talvez tenha passado pelas Mas vou parar de divagar por aqui e nos vemos na próxima, onde encerraremos este jogo para que possamos ter uma versão totalmente jogável 25. Terminando e tocando novamente: Tudo bem, pessoal, vamos encerrar isso. Vamos terminar nosso jogo. Precisamos verificar se nossa história está pronta. Precisamos realmente contar nossa história, e vamos usar nosso botão OK para ter dois usos aqui. Portanto, funcionará tanto jogar novamente com uma nova história quanto enviar nosso texto. Então, vamos começar com isso com nosso botão aqui. Então, vou selecionar meu botão, e vou conectar o sinal, pressionar e novamente, vou conectá-lo à minha rede principal, e vou deixá-lo com o nome padrão aqui. E só para deixar as coisas um pouco claras, acho que quero aumentar um pouco e colocar meus dois espaços entre eles. Dessa forma, você pode ter meus dois sinais aqui um ao lado do outro. Tudo bem, então agora, quando nosso botão for pressionado, podemos usar apenas adicionar palavras ao jogador, e isso funcionará da mesma forma que se pressionássemos Enter no teclado Isso deve funcionar perfeitamente bem, exatamente da mesma forma. Então, verbo, Ron, clicamos em Ok, vamos agora, Dog, ok Tudo bem, então tudo está sendo enviado, tudo está funcionando bem. Excelente. Então, temos que saber quando nossa história termina. Dessa forma saberemos se é hora de contar nossa história e terminar nosso jogo, ou se você continua jogando e continua pedindo outra mensagem ao jogador. Bem, para fazer isso, vamos criar uma nova função, chamaremos de I story done. E todo o propósito dessa função é apenas nos dizer se ainda temos mais instruções para adivinhar Então, vamos retornar um valor aqui. E o que vamos retornar é se é verdadeiro ou falso. Serão palavras do jogador, o tamanho é igual às instruções da nossa história atual Lembre-se de que queremos usar dois iguais aqui porque estamos fazendo uma comparação E isso é tudo o que vamos fazer. Vamos apenas devolver isso, e isso vai ser verdadeiro ou falso. Tudo bem, agora, em nossa verificação do tamanho das palavras dos jogadores, em vez de escrevê-las assim, podemos realmente reformatar E podemos dizer, se eu terminar a história. E, por enquanto, estamos apenas digitando a palavra pass porque é quando terminaremos o jogo e adicionaremos um bloco else aqui Aqui vamos nós. Então, diremos que, se a história terminar, encerraremos nosso jogo quando escrevermos essa parte do nosso código. Caso contrário, avise o usuário novamente. Então, vamos ver o que acontece se fizermos isso agora. Entramos em adjetivo, prontos, apertamos o botão de pagamento Fantástico. Nosso texto ainda capta o aviso Tudo ainda está funcionando. Incrível. Ainda não quebramos nada. Isso é ótimo. Tudo bem, então como terminamos nosso jogo? Bem, se a história terminar, temos que terminar o jogo. Então, vamos criar uma nova função chamada final de jogo e observar como estamos criando uma função para tudo aqui, que possamos manter tudo organizado. E dizemos: Ok, bem, estamos tendo um problema quando o jogo termina, sabemos que devemos vir aqui e ver a função final do jogo. Ou talvez nossa história não esteja sendo mostrada no final e teremos que ir para a função que criaremos aqui em um segundo chamada Tell Story. Portanto, isso nos ajudará a restringir quaisquer bugs que possamos encontrar em nosso projeto. No futuro, sendo organizado e preparado agora. Tudo bem, então como terminamos nosso jogo? Bem, o que eu vou fazer é pegar nossa tela. Você quer usar nosso texto de exibição? Não. Queremos pegar meus envios imediatos, certo? Então, queremos obter o texto do jogador. E o que vamos fazer aqui é, na verdade, usar o quarto. E o que isso deve fazer é voltar à nossa cena aqui em dois D, é pegar essa linha e simplesmente excluí-la completamente da tela. Então, dessa forma, ele não existe mais. Isso é basicamente o que ele faz. Exclui completamente e remove da memória Então, isso libera essa memória, e é importante fazer isso, não necessariamente neste jogo, mas em outros jogos Digamos que você continue criando esses novos objetos, mas eles nunca sejam excluídos. Basicamente, você começará a chegar a um ponto em que criará vazamentos de memória Então você tem que se lembrar de liberar tudo o que não precisa mais E, neste momento, não precisamos mais do texto do nosso player. Tudo bem. Então, o que vamos fazer aqui a seguir é, na verdade, alterar o texto em nosso botão. Então, vou pegar nosso botão, aquele cifrão, lembrar daquele pequeno nó de obtenção, certo? Então, queremos obter o nó no nó que queremos obter é o nosso botão. E a razão pela qual estamos apenas escrevendo a palavra botão é porque é assim que ela é chamada aqui em nossa cena. Então, se eu renomear isso para outra coisa, precisaria ter certeza de que isso corresponde Então, neste botão, queremos obter a propriedade de texto dele, e vou configurá-la para dizer play novamente. E já que estamos nisso, devemos garantir que esteja escrito OK quando se trata de avisar nosso jogador. Tudo bem. Então, vou colocar isso dentro da nossa função de prompt player e definir o texto para dizer: Ok. Tudo bem, agora, a última coisa que temos que fazer em nosso final de jogo é contar uma história E isso vai nos dar um erro até criarmos isso, então vamos em frente e, pelo menos, criar esse nome, contar uma história, e isso agora é uma nova função. Para contar nossa história na tela, tudo o que precisamos fazer é esvaziar completamente o texto. Portanto, exibir texto com pontos é igual a uma string vazia. E vou colocar isso aqui na história de Side of Tell, caso você opte pela nova abordagem de linha ao convidar seu jogador para cá Então, caso você esteja fazendo isso, vou limpar o texto aqui também. E tudo o que fazemos agora é definir nosso texto de exibição e a propriedade de texto daquilo que podemos ver. E igualamos isso à nossa história atual. E queremos a propriedade da história. Vou me certificar de soletrar isso diretamente no meu livro de histórias, história com E temos que preencher todos esses espaços reservados. Então, a maneira de fazer isso é apenas fazer um sinal enviado e adicionar o que quisermos. Então, por exemplo, podemos usar banana, e isso preencherá nosso primeiro espaço em branco com banana. Agora, temos vários itens. Então, por causa disso, teríamos que fazer isso na forma de uma lista como essa e entrar em coma e fazer nosso próximo, certo, tomate e fazer o próximo e assim por diante. Mas nós já fizemos isso. Já temos nossa lista ou matriz de todas as nossas strings. Essas são as palavras para nossos jogadores que criamos e às quais adicionamos todos os nossos envios de texto Então, podemos simplesmente vir aqui e dizer as palavras dos jogadores. Tudo bem. Então, agora vamos verificar as palavras do jogador Link, dizemos que a história está concluída e vamos chamar Endgame Tudo bem. Agora, precisamos chamar isso para outro lugar? Não, mas precisaremos apertar nosso botão de reinicialização aqui em um momento, vamos continuar e garantir que isso funcione. Tudo bem. Então, pode ter um adjetivo. Sim, um substantivo bonito, rock, um verbo terminado em ED, Um advérbio, rapidamente, um substantivo plural floresce. E lá vamos nós. Podemos ver que nossa linha foi excluída. Nosso botão agora diz jogar novamente em vez de OK. E temos nosso prompt no topo. O lindo céu tinha um lindo tom de rocha enquanto os alunos se educavam rapidamente através das flores Agora, eu tenho dois Ss lá. Esse foi meu erro, possivelmente. Isso era algo que eu tinha na minha história? Também é possível. E não, parece que isso não estava na história, então a culpa foi totalmente minha. Devo ter atingido S duas vezes. Mas aí está. Essa é a nossa história, e nosso botão de jogar de novo não funciona aqui. E a razão para isso é que estamos tentando adicionar as palavras de nossos jogadores. Isso nos trouxe a essa função por nosso erro. E se olharmos para isso, parâmetro, novo texto nunca é usado, tudo bem. Mas o problema que isso está nos causando é que o texto do jogador não existe, certo? Não podemos usar as palavras do nosso jogador. Não consigo fazer nada disso. Bem, tudo bem. Nosso problema está na verdade, aqui com o pressionamento do botão. Porque, com base no fato de nosso jogo estar pronto ou não, determinaremos se você deseja ou não reiniciar o jogo ou avisar o usuário novamente, correto? Então, estou apenas preenchendo isso. Só não se importe comigo aqui. Se você está seguindo usando as setas porque quer, eu conto, vou devolver uma piscina porque estamos devolvendo alguma coisa, e isso nos dará uma ideia verdadeira ou falsa Todo o resto, estamos apenas retornando um vazio. Então, estou passando rapidamente por lá e preenchendo-os. E eu acho que são todos eles. Tenho todos eles, certo? Tudo bem, então quando nosso botão é pressionado, tudo o que precisamos fazer é verificar se nossa história está concluída Então, se eu terminar a história, e quisermos reiniciar o jogo. Caso contrário, agora toque nele. Vamos chamar adicionar palavras ao jogador. Então, como reiniciamos o jogo? Bem, para reiniciá-lo completamente, neste caso, tudo o que precisamos fazer é pegar uma árvore, e isso vai pegar toda a nossa árvore. E tudo o que precisamos fazer é chamar recarregar a cena atual, e será a mesma coisa como se tivéssemos acabado de clicar em Executar cena atual aqui no topo Se tivéssemos apertado aquele botão pela primeira vez. Então, quando a recarga da cena atual for interrompida, devemos estar nessa situação novamente. Então, adjetivo, então vou examinar isso para que possamos ver que temos algo completamente novo: advérbio educado . Certifique-se colocar apenas um lá desta vez, flores Lá vamos nós. OK. Isso é legal. E jogamos novamente. Posso ter um verbo. Substantivo ranqueado. Biscoito. Outro substantivo, Brownie Certa manhã, o Padeiro saiu correndo, deveria dizer Corra. Para sua surpresa, no entanto, havia um biscoito parando, oh, eu disse Brownie em vez de Brownie Eu coloquei um R no final. Meus dedos me traíram na ortografia hoje. Mas agora podemos jogar novamente e começar outra história. Então, agora podemos continuar jogando isso pelo tempo que quisermos. E esse jogo funciona totalmente para nós. E se você quiser adicionar uma história, podemos simplesmente acessar nosso livro de histórias e você pode continuar adicionando mais histórias e sugestões, e ele continuará funcionando Não precisamos ajustar nosso código por nenhum motivo. Acabamos de adicionar outra entrada, história cinco, história seis , história sete, e podemos continuar com quantas histórias quisermos incluir. Agora, se você está curioso sobre esse erro aqui que está em amarelo que você viu anteriormente, está apenas nos dizendo que o novo texto não está sendo usado para o sinal M, e tudo bem. Não precisamos nos preocupar com isso. É só um erro amarelo, que está apenas nos avisando. E poderíamos desligar isso. Há algumas coisas que podemos fazer, mas a mais fácil é colocar um sublinhado aqui no início. Isso é tudo. Agora, se prosseguirmos e executarmos isso, esse erro não aparecerá mais. Portanto, esse sublinhado no início do seu parâmetro apenas diz, ignore se não for usado, basicamente Mas aí está, agora estamos contando nossa história e temos o fim do nosso jogo. Estamos contando a história ou solicitando que o usuário continue jogando, e temos ou solicitando o usuário preencha mais espaços E temos um botão de jogar novamente, caso queiramos continuar. Tudo bem, então isso bastará para Mad Libs. Este é um jogo bastante curto pelo qual passamos. Provavelmente passamos cerca de uma hora para analisar isso, e você começou a montar funções, esses retornos. Se as declarações Else foram usadas algumas vezes, estamos usando booleanos Estamos usando dicionários, matrizes, classes. Estamos usando muitas coisas aqui, embora seja um jogo muito simples, eu diria. Bem, com isso, você o completou. Parabéns. Dê a si mesmo um tapinha nas costas E estou empolgada em ver as coisas que você criará no futuro e estou empolgada em seguir para o próximo projeto. 26. O que vamos fazer(espaço preenchido): Tudo bem, esta semana, vamos aumentar um pouco as coisas e, em vez de escrever apenas uma mensagem de texto, como fizemos na semana passada Nesta semana, vamos criar ou recriar um antigo jogo de dois D dos anos 80 chamado Agora, isso nos dará a chance de trabalhar com um controlador de dois reprodutores D. Colisões. Talvez entremos em algumas partículas. Podemos trabalhar com alguns geradores. E, como você vê, se você nunca jogou Frogger antes ou nunca ouviu falar dele, veja aqui, vamos trabalhar com a interface do usuário para heads-up display Temos pontos que precisaremos acompanhar. Encontre meu mouse lá por um segundo. Mas não só isso, mas também vamos ver se vai mostrar isso aqui? Ok, então temos uma certa quantidade de sapos por jogador. Obviamente, não precisamos colocar moedas. Mas esse é essencialmente o jogo aqui. Portanto, temos duas pequenas zonas seguras nesta pequena área roxa. Temos uma estrada no meio que tem cinco faixas de tráfego alternando para frente e para trás E se o sapo for atropelado por um desses carros, eles morrem e o jogador perde uma vida. Eles chegam ao topo. Eles podem pular nas tartarugas e nos troncos para entrar na zona segura Se eles pousarem na água, isso também é uma falha. que eu acho que agora que você pensa sobre isso, meio que não faz muito sentido, já que é um sapo Mas aí está. Essa é a ideia do que vamos criar, e é isso que Frogger é, se você nunca jogou ou ouviu falar dele 27. Tilemap vs nova camada de Tilemap: Tudo bem. Sou eu de novo aqui. E eu só queria intervir aqui antes de entrarmos no Frogger. Você notará que, se estiver usando uma nova versão, o Tao Map tem esse triângulo amarelo aqui, e isso nos dá uma notificação aqui de que esse nó será descontinuado, que significa que será removido do motor Portanto, dependendo de quando você está assistindo isso, o nó do mapa de blocos pode não existir mais. E se eu tiver que adivinhar, ele será removido em 5,0 de Gato. É só meu palpite. Não tenho ideia quando ele realmente será removido. Mas vou mostrar a alternativa que foi adicionada caso você queira começar a usar a alternativa. Agora, em vez do Tilemap, bem, se você estiver assistindo no futuro, você sabe o que usar para esclarecer qualquer confusão Agora, com o mapa de blocos, temos nosso conjunto de blocos configurado aqui, certo? E temos todos os nossos nós, desculpe, não nós, nossas texturas, nossa estrada, água, o canteiro central e nossa casa E você vê que vamos em frente e pintamos aqui, certo? Podemos entrar e simplesmente pintar na tela. E temos várias camadas aqui em uma lista suspensa no lado direito, que ainda está aqui na parte inferior. Agora, isso é o que é diferente. Essas camadas serão seus próprios nós agora, em vez de terem tudo dentro de um mapa de blocos. Então, tudo o que faríamos em vez desse mapa de blocos é adicionar uma camada de mapa de blocos, certo? Vá até nosso inspetor, conjunto de ladrilhos, abra esse conjunto de ladrilhos, certifique-se de que ladrilho esteja colocado aqui embaixo E podemos seguir em frente e adicionar nossa mediana. Podemos adicionar nossa estrada e podemos adicionar nossa água. Então, qualquer outra coisa seria exatamente a mesma, acho que não tocamos nada, como colisão ou qualquer coisa aqui Então você não deveria ter que fazer mais nada lá. E então, assim como no mapa de blocos, você pode entrar e pintar para poder seguir em frente e ter certeza de entrar, selecionar seu nó, selecionar o ladrilho que deseja usar. E, claro, você pode entrar e começar a pintar, assim como faz com o mapa de azulejos, certo? Para que possamos entrar. Podemos ir, bum, boom, colocá-lo, pegar nosso roxo. Troque meu ladrilho, pegue nossos roxos, apareça, preencha os pedaços da estrada Certo. Então você pode vir e tomar uma cerveja de neve normalmente Agora, o que temos em uma camada separada é essa seção inicial. Então, o que faríamos é ir até lá e adicionar uma segunda camada de mapa de mosaico agora. Pegue outro conjunto de ladrilhos, selecione o conjunto de ladrilhos na parte inferior e nós traremos aquele ladrilho inicial. E aí está. Agora, deixei que o meu seja meio que padrão aqui, de tamanho padrão, então eu provavelmente quero entrar e alterar o tamanho do ladrilho aqui especificamente para este. Mas dito isso, certo? Eu posso simplesmente entrar, pintar, mapear ladrilhos, selecionar tudo isso, e eu posso entrar e simplesmente pintar, certo? Eu apenas carimbo como fazia antes. Então, usar uma camada de mapa de mosaico e um Tilemap não é muito diferente. Você só precisa se lembrar de que cada camada terá seu próprio nó para baixo, em vez de apenas selecioná-la em um menu suspenso. E quando se trata do código real, se eu entrar e dermos uma olhada, damos uma olhada aqui. Normalmente, obtemos nosso mapa de blocos. Chamamos de Get Cell source ID. passamos o número da camada e Neste caso, passamos o número da camada e, em seguida, a posição do mapa, para que possamos ter uma ideia do que estamos em cima. Agora, essa função existe tanto na camada tilemap quanto na camada tilemap Vou selecionar Tilemap aqui e você pode ver aqui, o ID da fonte do Gell Vou usar a lupa para você aqui. Deixe-me ver isso. Obtenha o ID da fonte celular. A primeira é a camada, depois as coordenadas e, em seguida, temos uma bandeira opcional lá. Nós temos isso. Mas se você quiser usar a camada Tilemap, a camada mapa de mosaico tem exatamente a mesma coisa, exatamente as mesmas funções aqui A única diferença é que não passamos em uma camada. Nós apenas passamos as coordenadas. Então, se meu mapa de mosaicos aqui, meu mosaico fosse uma camada de mapa , neste caso, seria a camada zero que estamos usando. Então eu pegaria esse que tem minha linha mediana de água nele, e tudo que eu passaria é apenas a posição do mapa, e pronto Então, você só precisa se lembrar de que todas as camadas serão nós individuais da camada do mapa de mosaico no futuro. E qualquer função que solicite uma camada de mapa de mosaico, você simplesmente não coloca nada nela. Apenas pule essa discussão Tudo bem, espero que isso esclareça qualquer confusão que você possa ter dependendo de quando estiver E essa é a principal diferença com a qual estamos trabalhando. Tudo bem, cuide-se. Have yourself é uma boa opção, e espero que você goste do Frog 28. Criando o fundo: Tudo bem, então vamos começar a criar o Frogger E a primeira coisa que você vai fazer é baixar os ativos e mover a pasta de sprites para o seu projeto Novamente, acabei de criar uma pasta vazia, especificamente para o Frogger, mas eu recomendaria que você criasse um novo projeto para Dessa forma, você pode exportá-lo sem problemas no futuro. Tudo bem. Portanto, a primeira coisa que precisaremos fazer é, especialmente porque nossos spreads são muito pequenos, precisaremos reduzi-los ou não, mas reduzir nossa tela para um tamanho maior do tamanho do gabinete de fliperama maior do tamanho do gabinete de fliperama E para fazer isso, vamos simplesmente ir até projeto e entrar nas configurações do nosso projeto. Tudo bem E então eu deveria começar assim com as configurações avançadas desativadas. E você verá no lado esquerdo, vamos descer até a seção de exibição e entrar na janela. E vamos definir a largura 336 e a altura em 240 Tudo bem? Esse é o tamanho da tela de um gabinete de fliperama, a resolução da tela para isso, e será perfeita para nossos pequenos sprites Tudo bem. Depois de definir isso, você pode ir em frente e fechar, e verá que nossa pequena caixa azul ficou muito menor do que costumava ser. Tudo bem, então a primeira coisa que vamos fazer aqui é criar o plano de fundo Então, vamos criar toda a estrada, a água, a mediana roxa, que eles chamam, e a área de pontuação para a qual temos que levar nosso sapo Então, vamos configurar todas essas coisas. Dessa forma, podemos começar a configurar e executar nosso jogo e tudo mais. E os próximos vídeos a seguir. Tudo bem, então vamos precisar de uma cena em dois D aqui. Então, vamos clicar em dois D, e isso nos dará um nó dois D para nosso nó raiz. E se você quiser renomear isso, você pode. Você pode chamá-lo de Principal, se quiser. Gerente de jogos. Realmente não importa. Se você realmente quiser, pode simplesmente deixá-lo como nome padrão. Vou deixar o meu como padrão por enquanto. E para criar isso em nosso pequeno plano de fundo, vou criar um novo Tilemap Então, vou apertar o botão Mais. E vamos seguir em frente e selecionar o mapa de blocos no menu suspenso. S em nosso nó de criação. É como o Tilemap. Basta clicar duas vezes nele e selecioná-lo. Agora, eu tenho o meu configurado aqui. Vou prosseguir e excluir tudo isso. 1 segundo. Tudo bem, então você deve ficar assim quando tiver o Tilemap selecionado Se você não tiver selecionado, vá em frente e selecione-o. E o que vamos fazer é ir para o lado direito. E vamos ver o conjunto de peças aqui. Ele permanece vazio no momento. O que vamos fazer é clicar nele e ir para o novo conjunto de peças e , em seguida, clicar nesse conjunto de peças, e isso nos trará aqui. Agora, o que precisamos aqui é que precisaremos da pequena área da meta, da água, da estrada e da mediana Então, se entrarmos em nossos sprites e rolarmos para baixo, veremos a casa, o canteiro central, a estrada e a água Se você apenas segurar o controle, poderá selecionar todos eles de uma vez, desta forma, e arrastá-los para a nossa caixa de blocos. Tudo bem. Então, antes que possamos realmente usá-los aqui, como você pode ver, não podemos clicar em nada do que queremos fazer. Vou rolar até lá com minha roda de rolagem ou você pode adicionar um sinal de menos A primeira coisa que precisamos fazer é ter certeza de que estamos na guia de configuração aqui, selecionar nossa água e clicar nela, e agora temos essa caixa laranja ao redor dela. Isso significa que temos um bloco que agora podemos usar. E eu vou fazer a mesma coisa com Road, Median e meu irmão do outro lado Agora, a casa é um pouco maior. Então, acho que pode ser um brinquedo, não maior do que isso. Vamos ver. O que nós temos? Oh, 26 é muito grande. Como é isso? Acho que vai funcionar perfeitamente. Tudo bem Eles já foram? Eu tenho um 16 por 24 aqui para este azulejo. Tudo bem. Então, agora, se clicarmos no Tile Map na parte inferior da tela aqui embaixo, agora poderemos clicar e começar a desenhar nossos sprites Então clique na minha mediana, clique no meu ladrilho roxo aqui, arraste uma linha na parte inferior, vá para a minha estrada e temos cinco camadas de tráfego Então, precisamos de cinco linhas de nosso preto aqui, três, quatro e cinco. E se nos referirmos à nossa imagem, teremos outra camada roxa, cinco camadas de água. Um, dois, três, quatro, cinco, e então temos uma camada de água que vai por baixo da nossa casa Então, vamos fazer mais uma camada lá. Vamos pegar nossa casa e clicar em um sprite e clicar em um sprite arrastar o mouse para que você possa selecionar os três E vamos colocá-lo. Oh, olha isso. Parece que temos esse problema. Bem, o que está acontecendo? Bem, estamos substituindo nossos ladrilhos de água aqui. Nós não queremos fazer isso. Então, precisamos realmente desenhar isso em outra camada, e eu vou continuar enchendo isso com nossa água até o topo nas duas últimas linhas. Então, vou clicar em nossa seção inicial aqui e não queremos substituí-las. Queremos construí-lo no topo. Então, você notará aqui no lado direito dos nossos mapas de blocos, temos algo que diz camada zero, e se tivermos uma lista suspensa, não há mais nada lá. Então, o que queremos fazer é entrar em nosso inspetor do nosso mapa de blocos, abrir a seção de camadas, clicar em Adicionar novo elemento e agora temos uma segunda camada Então, de volta aos mapas de blocos com nossa linha inicial selecionada, podemos ir para a camada suspensa e clicar na camada um. E agora podemos realmente desenhar diretamente em cima dela sem afetar nosso final Aí está. Conseguimos transmitir isso a sete. E só para ter certeza de resolver nossas linhas um, dois, três, cinco, certo? Parece bom para mim. Se clicarmos novamente em nosso sem TD, então nada está ótimo. É com isso que estamos trabalhando. E se você se lembra quando analisamos a configuração do Alfoger, qual é a aparência Na verdade, temos nossa pontuação, e essa informação está configurada bem no topo aqui nesta área azul vazia, nesse espaço vazio de água. Temos nossos troncos, tartarugas que saltam e nos ajudam a pular aqui Dentro dessas pequenas áreas vazias em casa é onde podemos marcar pontos pegando nossos sapos O roxo é seguro, e nossa estrada preta é onde nossos carros vão aparecer Mas certo, agora temos nosso plano de fundo configurado. E, sem mais nem menos, é muito fácil começar. O novo mapa de blocos é muito bom para começar a usá-lo rapidamente. Não costumávamos ter camadas, e agora que temos, isso torna a configuração de coisas assim muito mais fácil. Tudo bem. Esse é o nosso histórico. Vamos seguir em frente e pular para a próxima parte. 29. Criando o jogador: Tudo bem, vamos criar nosso player, mas antes disso, vou salvá-lo Vou clicar em Control para entrar na minha pasta Froger e salvar minha cena bem rápido Tudo bem. Então, para nosso jogador, nosso jogador realmente terá sua própria cena que trazemos. Então, vamos clicar na guia de adição no topo aqui ou adicionar um novo SEM. Vamos para O. E como esse é um jogador sobre o qual precisamos ter controle, esse será o corpo dois de um personagem D. Isso costumava ser chamado de corpo cinemático, e em outros motores, e em outros motores, você pode ouvir as pessoas se referirem a ele como tal Mas aqui, agora é chamado de corpo de personagem dois D. Tudo bem. Agora, esse corpo de personagem, temos esse triângulo amarelo aqui que nos dá um pequeno aviso, e ele apenas nos diz que nosso nó não tem nenhuma forma. Não consigo colidir com nada. Não tem colisão. E, por enquanto, tudo bem. Pode flutuar lá. E o que vamos fazer é, na verdade adicionar outro nó aqui. E o que queremos adicionar é um sprite two D. Queremos adicionar um sprite animado Bem, queremos que nosso sprike seja animado. Temos duas molduras para isso. Então, vamos fazer um sprite animado dois D. E no lado direito do inspetor, vamos abrir a seção de animação onde diz Sprite Vamos clicar nele e criar novos quadros de sprites. E então vamos abrir esses quadros de sprites apenas clicando neles Tudo bem. Então, temos nossa animação padrão, que vou renomear para ficar inativa Em seguida, adicionaremos uma nova animação com esse pequeno ícone de adição aqui embaixo. E eu vou renomear isso para pular. Tudo bem. Então, com o Idol selecionado, vou trazer o Boger Idol E com o salto, podemos trazer Boger Idol e depois nosso ícone de salto, E agora devemos ser capazes de ir entre os dois. Sempre que quisermos jogar contra esses inimigos, tudo bem. Areo, veja se jogamos lá. Estamos pulando. Estamos fazendo nosso pequeno salto saltitante. E você pode notar que o sprite está um pouco embaçado aqui em nosso renderizador, mas aqui embaixo, podemos ver que ele deveria estar bonito e nítido Bem, para corrigir isso, podemos seguir em frente e podemos simplesmente selecionar todos os nossos sprites aqui ao mesmo tempo em nosso sistema de arquivos ir para o lado esquerdo da importação Na verdade, isso não vai ser uma importação. Você moveu isso. Então, deixe-me ir em frente e dizer onde está essa parte. Tudo bem. Então, se você entrar nas configurações do seu projeto, Whoo. Para onde eu fui? Acesse as configurações do seu projeto e localize a seção de renderização e textura aqui para ver as configurações avançadas Ou precisamos disso? Não, não precisamos dele ligado para isso. Queremos um filtro de textura padrão aqui. Mude-o de linear para o mais próximo e vá em frente e feche-o, e você verá seus sprites ficarem muito nítidos Então, se você vai fazer arte em pixels dessa forma, esse é o padrão que você deseja fazer nas configurações do seu projeto. E agora temos um bom broki afiado. Tudo bem. E, por enquanto, isso é tudo o que realmente precisamos. Não precisamos nos preocupar com a colisão detecção ou algo parecido por enquanto Vamos nos preocupar com isso quando chegarmos a essa parte, então vou passar o Control S para salvar isso, e vou ligar para esse jogador. Agora, se eu entrar na minha cena principal com meu nó dois D selecionado, posso clicar em No This plus para ver um novo nó, mas a cadeia ao lado dele. E isso nos permitirá exemplificar uma cena que já existe. E para nós, essa será a nossa cena de jogadores. E agora podemos ir em frente e pegá-lo e trazer esse garotinho para cá. E podemos colocar. E podemos fazer o que quisermos com esse garotinho. Vamos ver. Vamos transformar. Então, sabemos que isso está em valores de 16. Então, 172 não funcionaria. Seria 176 se estivéssemos em valores de 16. Eu só vou trazer meu sapinho para cá. Aqui vamos nós. Seja um pouco mais centrado nisso E agora eu tenho meu sapinho na minha cena principal com meu plano de fundo, e ele está pronto para começar Tudo bem, isso bastará para este. Temos nosso player configurado o quanto precisamos no momento. E com isso, passaremos para a próxima, onde abordaremos realização de alguns movimentos do jogador. 30. Movimento do jogador: Tudo bem, vamos em frente e vamos criar o movimento para que nosso sapinho possa se mover para cima e para baixo na extremidade esquerda, Então, para começar, precisaremos de algumas entradas. Agora, se você quiser usar as teclas de seta, então I up, UI down, UI left e UI right já existem. Mas eu quero usar o WASD. Vou entrar no meu projeto e acessar as configurações do meu projeto. E eu vou entrar no mapeador de entrada na parte superior. Adicione uma nova ação e eu vou digitar para cima, adicionar para a esquerda e para a direita. Agora, para cada uma dessas ações aqui, vou para o lado direito e aperto o botão de adição. E para cima, vou atingir o ponto positivo. Vou apenas pressionar W no meu teclado. E eu vou te mostrar o que isso parece. O que você verá a partir daí, vamos ver. Essa janela está aqui? E vou mencionar isso acima. Aí está. Então eu apenas apertei a tecla W, e temos que clicar em OK. Vamos para baixo, apertamos o sinal de mais, pressionamos a tecla. E novamente, A para a esquerda e D para a direita. Tudo bem, agora temos cima para baixo, esquerda e direita para nossos controles, e podemos sair daí Nosso jogador vai precisar de um roteiro, e eu vou fazer uma anotação aqui no meu sprite animado no Jump Eu não me livrei do primeiro sprite, então vou comer esse com as pernas abertas E eu coloquei um roteiro ao lado do corpo t2d do nosso personagem na cena de nossos jogadores E nós só temos um vazio, assim. Agora, o que vou fazer é criar uma função chamada movimento. Assim. E isso é só para que possamos manter tudo limpo e organizado e manter todo o nosso movimento em um único local. Tudo o que vamos fazer para obter informações aqui é usar a instrução if. A mesma declaração IF que estamos usando muito. Então, vamos se, e então queremos acessar o objeto de entrada ou a classe de entrada. Então, insira. E então pontilhe porque queremos verificar sua ação. E queremos continuar lançando este jogo. Ou apenas liberado ou apenas pressionado. Qualquer um deles funcionará especificamente para este jogo. Se continuarmos pressionando, ação é pressionada, isso é enquanto o botão é pressionado. Basta pressionar e soltar significa que você pressionará assim que o botão for ativado. Quando você pressioná-lo e soltá-lo, Quando você pressioná-lo e soltá-lo significa que o bloco de código será executado quando você levantar o dedo. Eu vou com J Press. Vamos tentar isso. E eu vou usar o botão, e essa é uma string que deveria ter aparecido automaticamente E isso com dois pontos, para que possamos entrar nele e criar o bloco de código E tudo o que vamos fazer é fazer duas coisas. Precisamos mover nosso pequeno sapo. Precisamos movê-lo para cima na tela, e vamos subir em um bloco, e tudo é dividido em 16 blocos ou 16 blocos ou 16 blocos. Então, neste caso, vamos mover nosso sapo 16 quarteirões para cima Então, vamos conseguir nossa posição. E se isso fizer um pouco mais de sentido para você, você pode dizer a posição do ponto automático porque você está se movendo ao qual esse script está anexado. E agora isso nos dará as coordenadas X e Y. Isso tem dois números associados a ele. Então, se clicarmos no corpo do nosso personagem e olharmos dentro do inspetor em transformação, você verá que temos um X e um Y. E eles correspondem à localização em que eles estão na tela Então, se clicarmos em nossa cena principal e formos até o corpo do nosso personagem, você verá que sua posição é 169 e 233, no meu Então é daí que estamos começando, e vamos adicionar ou subtrair isso do X ou do Y para obter nossos movimentos Então, como queremos subir ao pressionar para cima, afetaremos o número Y. Então, vamos dizer ponto de posição Y. Tudo bem, estamos em nós mesmos, queremos obter a propriedade de posição e, em seguida, queremos obter o número Y dela E para subir na tela, na verdade temos que subtrair. Então, vamos dizer menos é igual. Que possamos dizer que isso é igual à posição Y, o número é igual à posição Y menos o número da soma, que é o número da soma, neste caso, será 16 Então, se deixássemos as coisas assim e corrêssemos nossa corrida, pena que nosso sapinho não se mova Por que não se move? Espero que você entenda ou entenda isso antes de eu apertar Nunca ligamos para nenhum lugar para nosso movimento, então nunca estamos realmente verificando se há nada disso. E para isso, vamos simplesmente colocá-lo dentro da função de processo aqui. Movimento. E agora está sendo chamado. Opa, pelo menos seria se pudéssemos soletrar corretamente. Lá vamos nós. E se tentarmos executar isso agora, aperte o botão para cima, que para mim é W. Você pode ver que estamos avançando e movendo nossos 16 blocos por vez. Um dado que vencemos. Temos um pequeno sapo lá em cima. Agora, é claro, o problema é que ainda estamos nos movendo, mas não podemos retroceder Não temos animação nem nada. Então, vamos fazer nossa animação funcionar. Então, como reproduzimos nossa animação? Bem, se olharmos para a cena do nosso jogador, podemos ver em nosso script, podemos descer, podemos seguir essa linha facilmente, apenas um nível até o Sprite 2 animado D. Então, vamos pegar esse nó E da forma como mostrei que antes era usar esse cifrão, seria a maneira mais fácil. E assim que você começar a digitar Sprite animado, ele aparecerá E lembre-se, isso é apenas Sprite two D animado porque esse é o nome dele Então, se eu fosse dar um nome a essa banana e uma grafia muito ruim de banana, seria isso que eu teria que digitar aqui para acessar Vou apenas redefinir esse nome para o padrão. E tudo o que vamos fazer é chamá-lo de play. Então, não jogue. E você verá as animações que criamos aparecerem. Então, vamos usar o salto. E se tentarmos isso agora com apenas uma adição de nossos chicotes de linha, você tem que realmente jogar essa cena e não nosso jogador Aí está. Você pode ver que entramos em nosso salto, mas estamos meio presos em nosso salto agora. Então, isso é um pouco decepcionante. Então, como podemos consertar isso? Como podemos voltar ao normal? Bem, podemos configurá-lo para que, quando nossa animação for concluída, retornemos à nossa forma ociosa Então, para fazer isso, teremos que acessar o sprite animado do nosso player, ir para o lado direito até a guia do nó e conectar um sinal que diz que a animação terminou Então, se clicarmos duas vezes nele, veremos um pop-up para conectar um sinal aqui, selecionaremos o corpo do personagem TD no qual nosso script está ativado e apertaremos o botão Conectar. Vou aguentar tudo para usar minhas teclas de seta para trazê-lo à tona. Sim. Então, sempre que nossa animação terminar de ser reproduzida, esse bloco de código será executado agora E o que queremos que aconteça aqui é que queremos voltar ao nosso estado ocioso, onde nosso sapo está sentado lá Então, a mesma coisa, vamos comprar nosso Sprite two D. Vamos chamar play, e isso vai ficar inativo Se tentarmos isso agora, o que faremos? Novamente, se reproduzirmos a cena certa, como fazemos agora, vemos que agora temos isso, como um pequeno salto que aparece quando pulamos pela água. Isso é incrível. Agora, o problema é que nosso ídolo estará tocando constantemente neste momento, nosso ídolo toca, e depois termina, e porque termina, vai Então, embora isso não seja realmente um problema com este jogo, isso pode ser algo a se ter em mente daqui para frente. Então, para resolver esse problema, podemos realmente corrigir isso com uma escolha de TI. E, como você pode ver, na minha pequena saída, eu estava verificando as coisas e vou te mostrar como fazer isso. Vou limpar isso. Tudo o que precisamos fazer é verificar se o Animated Sprite grita Você quer o cifrão lá. Se animado, Sprite, dois pontos d. Ainda assim, animação. Não, não é assim que se chamava? Bem, se entrarmos em nosso Sprite Animado, a propósito, você pode acessá-lo, basta segurar a tecla Control e clicar no Sprite Animado dois D aqui em nosso código Em seguida, abrirei a página de documentação do. E aqui está o que estamos procurando aqui. Obtenha animação. Então, queremos obter animação. Como você vê, isso não estava aparecendo. Então, às vezes, é útil verificar a documentação de qualquer maneira. Queremos fazer I animated sprite tod dot get animation. E se formos dar uma olhada nisso, a animação atual, o recurso Sprite frames, o valor é alterado, o contador de quadros, o progresso do quadro ou o reset Mas o que queremos fazer é conseguir o que é essa animação. Então, isso basicamente retornará para nós qual animação está sendo reproduzida ou selecionada atualmente. Então, vamos usar o duplo igual porque queremos comparar o que é devolvido para E queremos escrever jump. E então, quando interpretamos nosso ídolo, vamos simplesmente colocá-lo em um para que ele possa estar dentro do nosso bloqueio I. E agora vamos basicamente verificar nossa corrente quando nossa animação terminar, se a atual for pular, então vamos jogar inativo Se executarmos isso, lá vamos nós. Temos nosso pequeno Bing e ele parece exatamente o mesmo, mas não vamos ficar reproduzindo constantemente a animação ociosa repetidamente É quando a animação ociosa é reproduzida, lembre-se de que ela é reproduzida uma vez e depois está pronta Não está girando. E se o seu, por exemplo, estiver em loop por qualquer motivo, vá em frente, selecione seu sprite animado e, se estiver em loop, você pode Isso porque está ativado, então basta clicar nele para desligá-lo. Então é branco assim. Se for azul, então está ligado, se for branco, está desligado. Então, agora, quando nossa animação terminar, depois de pularmos, vamos verificar se nossa animação atual é pular e, em caso afirmativo, jogaremos inativo E quando a inatividade terminar, essa afirmação if não será verdadeira porque, quando obtivermos a animação, ela ficará inativa, Então, como isso não é mais verdade, não vamos fazer mais nada, não vamos continuar repetindo inatividade dessa vez Portanto, é uma pequena diferença, uma daquelas coisas que estão no back-end que o jogador nunca notará. E, como eu disse, em um jogo pequeno como esse, não fará uma grande diferença, se houver, que seja perceptível. Mas é algo que vale a pena conhecer daqui para frente, mas quando você quiser criar jogos cada vez maiores. Tudo bem, então vamos em frente e agora podemos apertar nosso botão para baixo. Então, se apenas copiarmos e colarmos isso, podemos obter if em vez de I. Queremos nosso pressionado para baixo em vez de para cima, e queremos mais 16 em vez de -16 Porque se o menos está subindo, então o positivo vai nos derrubar, então agora podemos subir e podemos descer Agora, nosso sapinho não se vira de jeito nenhum, o que é um pouco decepcionante que é um pouco Mas podemos corrigir isso facilmente adicionando mais uma linha aqui, e podemos fazer isso falando sobre sua rotação. Então, antes de saltarmos, podemos obter a rotação automática de pontos. E se dermos uma olhada em nossos jogadores, voltaremos à cena do jogador, como no corpo de um personagem dentro do inspetor Se descermos, vemos que temos rotação aqui. E a rotação é em radianos em vez de graus. Então, o que podemos fazer é dizer que rotação é igual, e podemos usar essa função embutida chamada Dg two RAD, e que pode ter E parece que sim. Parece que foi renomeado aqui, então, deg two Agora tem os sublinhados. E então vamos usar um argumento na forma de graus. Então, se dissermos 180, isso vai ser uma reviravolta completa, certo? Porque se virarmos à direita, serão 90 graus. Se virarmos à esquerda, seremos -90. Então, de qualquer forma, temos que chegar a 180 positivos ou 180 negativos. Então, eu vou usar 180 graus aqui. E essa função vai converter esses 180 graus em brilho para que possa ser atribuída à nossa rotação aqui Agora, uma rotação completa em radianos é 3,14, e é daí que i vem Então, isso seria o mesmo aqui, 180, como se simplesmente copiássemos essa rotação igual a Pi dividido por quatro Então isso nos dará uma rotação. Então, se quisermos fazer Pi dividido por dois, isso nos dará metade da nossa rotação aqui em radianos Então, se eu fosse te mostrar que com Pi dividido por dois, Oh, nós nos dividimos de outras maneiras. Então, talvez seja um pouco mais do que dois. Agora, eu normalmente não uso radianos sozinho. Nós, podemos ver dividido por quatro, nós meio que temos esse pequeno ângulo estranho Como você vê, às vezes pode ser um pouco estranho lidar com radianos Então, qual é uma das razões pelas quais eu prefiro usar graus em radianos, só porque é algo que eu posso resolver um pouco mais rápido E como você vê, lá vamos nós. Nós viramos o rosto para baixo. Só que agora não estamos voltando para cima, então agora temos que corrigir isso dentro do nosso código. E faremos a mesma coisa quando pressionarmos para cima. Definimos nossa rotação para zero. E se fôssemos jogar agora. Lá vamos nós. Agora podemos pular para cima e podemos pular para baixo. E agora, e se quisermos pular para a esquerda e para a direita? Bem, podemos obtê-los com mais dois LCFs aqui. E vou espaçá-los para ficarem um pouco mais legíveis aqui Lá vamos nós. Então, começando com nosso segundo SIF aqui, vamos dizer que resta a ação I. E em vez de modificar o valor Y, vamos realmente modificar o X da nossa posição porque X está à esquerda e à direita E se formos para a esquerda, temos que -16 aqui E diplomas para ler. Bem, poderíamos definir isso para 270, apenas para ficar no lado positivo aqui, o que significa que nosso último Elsev aqui, quando pressionamos para a direita, vamos modificar a posição em vez do Y, vamos mais 16 E se estivermos nos movendo para a direita, vamos girar a 90 graus. Então, se tentarmos isso agora, veremos que agora podemos pular em todas as quatro direções. E podemos nos locomover. E se seu sapo for colocado no local correto, você poderá pousar em todas essas pequenas metas domésticas aqui Não tem problema sem passar por cima. Aí está. E agora nós meio que temos que manter nossa posição. E bem, na tela seria bom. Mas podemos nos preocupar com todas essas coisas mais tarde, por enquanto. Nós apenas temos nosso movimento circulando, e esse vídeo está ficando um pouco longo, então eu só queria manter o movimento em sua própria pequena seção aqui. Lá vamos nós. Podemos correr por aí como nosso próprio sapinho indo, vaiando, boando, vaiando Mas certo, e aí está. Agora podemos seguir em frente e passar para a próxima seção do nosso código. E acho que, em seguida, vamos criar nossos veículos e fazer com que eles comecem a atravessar a rua aqui. 31. Como criar os veículos: Tudo bem. Hoje, vamos seguir em frente e criar os veículos para atravessar. Agora temos alguns diferentes. Vamos ver quantos temos aqui dentro de nossos sprites. Temos cinco carros diferentes. Lá vamos nós. E alguns deles vão para a esquerda, alguns vão para a direita, e eles já estão voltados para a direção que querem. Então, isso é ótimo. Tudo o que precisamos fazer é criá-los e fazer com que eles se movam pela tela. Tudo bem, então vamos criar uma nova cena com nosso botão de adição aqui na parte superior de nossas guias Vamos para outro nodo e, assim como nosso jogador, vamos usar o corpo do personagem dois D aqui. E vamos dar a ele um sprite, neste caso, já que não temos animações para ele, vamos usar apenas um Sprite dois D normal, e podemos atribuir um de nossos sprites Agora, nesse caso, fui em frente e selecionei o pequeno caminhão. Mas é claro, você pode escolher o que quiser. Especificamente, estou usando um que está se movendo para esquerda no momento, então isso é digno de nota. E eu vou mudar esse nome de corpo de personagem para D para ser Truck e vou salvar isso como minha cena de caminhão. E eu vou precisar de um pouco mais. Agora, não vamos usar uma forma de colisão, embora possamos fazer com que algum tipo de colisão possa acontecer aqui porque, obviamente, nosso sapo precisa ser esmagado de alguma forma se conseguir Então, para me preparar para isso, vou criar uma área dois D. E isso vai praticamente me permitir ter uma área redefinida que eu possa verificar E para obter essa área com a área dois D selecionada, agora é onde posso trazer a forma de colisão Agora, a forma de colisão tem esse pequeno triângulo , nos dando um aviso Então, forma de colisão selecionada. Nós nos movemos para a direita até nossa seção de formas e criamos uma nova. E essa será apenas uma nova forma de retângulo. Agora, não usamos formas complicadas, como usar os ganchos poligonais Em vez disso, use polígono ou, desculpe, você usará formas com algumas dessas formas básicas aqui Como quanto melhor for sua forma, melhor será em termos de desempenho No entanto, quanto mais complicada for uma colisão, mais precisa ela será Portanto, é uma espécie de equilíbrio que você mesmo teria que encontrar. Mas neste caso, felizmente para nós, podemos simplesmente usar esses retângulos e isso será encontrado, especialmente porque estamos recriando um jogo antigo Tudo bem. Então, agora que temos nossa forma de colisão como essa, novamente, se você não percebeu isso, certifique-se de que seu retângulo esteja cobrindo tudo, todas as partes do caminhão E agora nosso caminhão realmente vai precisar de um roteiro nele. Vou adicionar um a ele. E em vez de chamá-lo de script de caminhão, vou chamá-lo de script de veículo. Agora, a razão pela qual vamos chamá-lo script do veículo é porque poderemos usar esse script em todos os nossos veículos. Agora, para fazer isso, Bruni exporta uma variável para nós. E o que isso vai fazer é que essa palavra-chave de exportação nos permitirá alterar isso dentro do inspetor Então, vamos usar a exportação com sinal de arroba e criaremos uma variável e chamaremos essa direção. Vai ser um número inteiro e, por padrão, podemos simplesmente defini-lo como zero ou, desculpe, podemos configurá-lo como um Realmente não importa nesse caso. E se você salvar isso e selecionar seu caminhão novamente, deverá ver a direção interna do inspetor no lado direito Agora, no nosso caso, precisaremos que seja menos um porque vamos nos mover para a esquerda, o que significa que estamos indo na direção negativa. Então eu fui em frente e configurei isso para menos um. E agora, na função de processo, precisaremos ter nosso personagem ou bem, personagem está correto, mas nosso caminhão se move. E então, para nos movermos, precisamos ter algo chamado mover e deslizar ou mover e colidir Qualquer um deles funcionará para que haja movimento aqui. No meu caso, vou usar mover e deslizar. Moving Collide também é bom. Isso basicamente define o que acontece quando dois corpos físicos colidem um com o outro, certo? Eles batem um no outro e ficam lá ou podem deslizar um ao lado do outro No nosso caso, isso realmente não importa pois vamos usar a área para determinar se nosso sapo foi atropelado pelo caminhão Então, agora temos o slide móvel. Não podemos simplesmente jogar agora porque ainda temos que controlar esse movimento. Então, eu vou ter outra variável aqui chamada velocidade, que também será um número inteiro E acho que vou definir isso. Vamos tentar oito por enquanto e veremos o quão rápido isso se move. Isso pode ser um pouco rápido demais. Então você sabe o que? Na verdade, vou tentar com dois agora que penso nisso. E tudo o que vamos fazer é mudar a velocidade e queremos mudar o número X. Assim como a posição, temos um X e um Y quando se trata de velocidade, e a velocidade controlará nosso objeto se movendo Então, vamos para a velocidade e, a partir de quatro, Interessante Talvez seja um V maiúsculo porque eu sei que há um embutido. Tenho certeza aqui. Oh, não, está baixo aí. Devo ter acabado de colocar um erro de digitação lá. Mas aí está, então podemos simplesmente fazer o ponto de velocidade X. E desta vez vamos dizer igual Não vamos dizer menos ou mais porque isso vai depender da nossa direção Então, vamos dizer velocidade vezes direção. Então, vamos nos mover ao longo do eixo X, então vamos nos mover para a esquerda e direita na taxa de velocidade, que é dois agora, vezes a direção. Então, agora estamos em menos um, então vai ser duas vezes menos um, e isso vai nos dar menos dois e deve nos mover Mas se entrássemos no inspetor e mudássemos para um positivo, então deveria ser duas vezes um, trazer dois positivos e fazer com que trazer dois positivos nos movêssemos na direção certa Então, vou colocar o meu de volta para menos um. E eu vou voltar para minha cena principal e trazer um caminhão para dar uma olhada nela. Vou colocá-la aqui, reproduzir essa cena e ver se ela se move. Podemos ver que está se movendo, mas está se movendo muito devagar. Então, vamos ter que ajustar essa velocidade. Então, vamos voltar para oito. Talvez oito fosse bom. Vamos tentar isso. Oito não é bom, mas é muito melhor. Então, vamos ver. Queremos nos mover em 16 pixels? 16 parece bom, embora pareça muito fácil, então talvez queiramos aumentar isso. E lembre-se de que sempre podemos voltar a isso. E como estamos usando a velocidade em todos os nossos veículos, podemos facilmente ajustá-la e ajustá-la quando, na verdade, tivermos todas as cinco faixas sendo usadas por Então, vamos ver que com 32, 32 está mais bonito aqui. Acho que 32 é onde vou deixá-lo e ajustá-lo mais tarde Talvez você queira ir para, tipo, 48, ou acho que não conseguiremos chegar a algo como 64, mas nunca se sabe, eu acho. Então, vou usar 32 como minha base. Tudo bem, então temos um caminhão se movendo em uma direção. E agora também podemos criar nossos outros veículos. Vamos ver. Temos mais dois que se movem para esquerda e dois que se movem para a direita. Vamos ver o que fazemos aqui e vamos para a esquerda. Então, vamos praticamente repetir esse processo e usar o script do veículo em todos eles. Tudo bem, então eu fui em frente e, como você pode ver, fiz minhas outras quatro cenas de carro aqui. Tudo o que fiz foi entrar, ajustar a forma da coleira, se necessário, substituir o sprite por outro de nossos carros E então, se necessário, envelheça a direção de menos um para positivo E isso controla todos os nossos carros. E eu fui em frente e os coloquei aproximadamente onde eles estariam aqui, só para que eu pudesse testar e dar uma olhada. E como você pode ver, enquanto o dirigimos, nossos carros seguem em frente e dirigem, atravessam a tela na direção apropriada e nunca colidem uns com os outros Incrível. Agora, tudo o que precisamos é de mais carros que apareçam, e não queremos colocá-los porque, se tivermos que colocá-los manualmente, precisamos ter uma lista enorme de carros e não temos ideia de quanto tempo demorará para que eles apareçam ou quanto tempo o jogador levará para ficar sem vidas ou completar o nível Então, o que vamos fazer é criar geradores para esses carros. Tudo bem. E esses geradores basicamente vão, em um horário definido, gerar E poderíamos ter cinco geradores diferentes se quisermos, um para cada pista E vamos ver. Acho que é isso que eu quero fazer. Acho que vou ter cinco palanetas diferentes dessa forma, todas elas podem ter seus próprios horários E se você quisesse, você poderia definir um limite de desova ou um limite de tempo para todos os veículos Isso também está perfeitamente bem. Vou seguir em frente e criar um, e esse será apenas um n2d básico Vou chamar esse observador. Queremos chamá-lo de SponTero? Aqui, sim. Vamos usar aquele patrocinador, e isso controlará meus principais spawns E, você sabe, eu acho que vou usar isso como sua localização base também. Eu só vou conseguir um bom lugar, e como esse é o caminhão, vou trazê-lo de volta para lá, e isso vai me mostrar que se o caminhão aparecer nessa posição, ele estará lá OK. Então, no meu spawner, vou criar um novo script Isso será apenas um script spawner dotGD. E mais uma vez, vamos usar isso muito bem em todos os nossos Swannas que criamos Então, o que precisamos fazer? Bem, precisamos esperar um determinado período de tempo. Vou deletar esse comentário de lá, bem como o que está aqui na linha nove. Opa. Yo. Tudo bem, então precisamos esperar um determinado período de tempo. Esse horário deve ser aleatório. E então, com base nisso, crie uma visão. Então, no nosso caso, vamos carregar o caminhão. Então, vou colocar uma variável aqui para o meu caminhão, que será uma pré-carga aqui. O que significa que vamos carregar a cena com antecedência Dessa forma, podemos usá-lo. Podemos instanciá-lo a qualquer momento. Então, vou pegar meu caminhão do meu sistema de arquivos e arrastá-lo para dentro. Dessa forma, temos a localização correta aqui para a cena. E com isso, vou mostrar a vocês o único veículo aqui, porque então só temos que entrar e podemos ajustar isso Eu vou te mostrar como podemos exportar isso também. Dessa forma, poderíamos realmente usar esse script em tudo em vez de criar vários scripts, apenas por causa da diferença de uma variável. Vou te mostrar isso. Mas primeiro, vamos colocar isso em funcionamento. E o que vamos fazer é que não vamos usar esse processo de forma alguma. Na verdade, vamos criar uma função chamada spawn vehicle E aqui, vamos para Aqui é onde precisamos de um número aleatório. Então, vamos continuar e ligar, tempo de espera. Basta chamar isso de tempo de espera. E vamos colocar isso à tona e definir isso igual a, vamos ver, e um número inteiro aleatório, sem engano, poderíamos simplesmente fazer algo assim e Não acho que precisemos usar o intervalo rand, embora eu possa estar incorreto nisso. Tudo bem, vamos lá E como eu quero verificar isso só por segurança, vou manter o controle, clicar em Randi, e isso vai me abrir para esta página E sim, eu fiz isso corretamente. Então, usando a porcentagem 20, neste caso, como você vê, vai nos dar um número inteiro de 0 cento 100 nos daria 0-99, e se fizermos por cento 100 mais um, isso nos daria um número de 1-100 Então, no meu caso, se eu fizer três, teremos um tempo de espera de zero, um, dois, vou adicionar um a isso. Agora temos que esperar pelo menos 1 segundo entre as aparições dos caminhões. Então, isso vai ser entre um, dois e três. E podemos ver como isso parece. Sempre poderíamos ajustar isso mais tarde. Agora, nosso tempo de espera, temos isso. Agora temos que realmente esperar esse período de tempo. Então, vamos dizer espere e temos que pegar a árvore para fazer isso E a palavra-chave await aqui significa que vamos apenas esperar por isso No nosso caso, será um cronômetro, mas também pode estar aguardando envio de um sinal Mas agora, vamos dizer espere, obtenha um cronômetro de criação de três pontos, e esse será nosso tempo de espera Nosso tempo de espera aleatório que temos. Temos tempos limite. Vamos esperar pelo sinal de tempo limite que será enviado quando nosso cronômetro terminar, que será baseado em um número aleatório, uma quantidade aleatória de segundos Tudo bem. Então, uma vez feito isso, podemos criar uma instância de nosso caminhão de digamos, VT para veículo ou VI para veículo Neste caso, vamos dizer caminhão, mas devemos alterá-la para mas devemos alterá-la Então, o Truck Dot instancia e, em seguida, vamos adicioná-lo ao nosso Então, vamos dizer self dot, add child para adicioná-lo à cena e VI. Tudo bem. Vamos ver como isso funciona agora. E não vai acontecer porque não ligamos para ele. Vamos entrar em nossa função REDI aqui e chamar nossa função de veículo de desova que criamos Vamos tentar agora. Lá vamos nós. Então, tivemos outro caminhão surgindo, e não teremos mais porque só o geramos uma vez. Então, o que podemos fazer a partir daí é depois adicionarmos uma criança, certo? Depois de adicionarmos o caminhão à nossa cena, faremos com que ele se chame recursivamente Então, isso vai causar um loop infinito. Ele vai gerar um veículo e não fazer nada, e então gerar um E quando terminar , gere outro veículo . Pronto, crie um veículo E sempre será um número aleatório toda vez que tivermos que esperar ou entre os spawns Então, se dermos uma olhada agora, podemos ver que eles são bastante consistentes em seu espaçamento, e então esse era um espaçamento muito maior E dissemos, Oh, temos um espaçamento muito próximo nesse Então, parece que por cento três mais um pode ser o menor que queremos fazer Mas aí está. Então, depende de você, se quiser , que haja muitas pessoas próximas umas das outras. Portanto, cabe a você decidir se quer twittar um pouco, brincar com isso e decidir como deseja que eles sejam distribuídos Agora, a razão pela qual não precisamos definir sua posição é porque adicionamos quando criança ao meu observador, e o observador está aqui Então, como o caminhão aqui está em 00 em sua posição, Opa. Este é o caminhão aqui em 00 em sua posição aqui. E podemos ver isso se formos transformar 00. Será exatamente o mesmo que seu pai, que neste caso, será o SpoNoro Então, onde está meu SponOro aqui, ele vai aparecer nesse local fora da tela o suficiente Agora, como podemos executar um script para poder usá-lo em qualquer um de nossos veículos? Bem, o que precisamos fazer para que isso funcione para todos os nossos criadores é que possamos ter o mínimo de trabalho possível Bem, primeiro, vou mudar nome da minha variável de caminhão para veículo, agora vamos usá-lo para mais de um veículo, não apenas para o caminhão. E isso significa que vou ter que alterá-lo aqui em nosso spawn de instanciação de ponto de caminhão para instanciação de ponto de veículo E queremos ter essa variável exposta dentro do nosso inspetor para que possamos ajustá-la por nó aqui, então vamos fazer o sinal de arroba com a exportação E agora, o que vamos exportar aqui? Bem, poderíamos simplesmente deixar como tal, e isso funcionará se olharmos para o interior do inspetor Mas se você quiser ser específico, isso é chamado de cena lotada. É assim que você exportaria isso. E então poderíamos até mesmo excluir a pré-carga aqui. Então, basta assinar exportar nosso veículo e declará-lo como uma cena de pacote Agora, se clicarmos em nosso gerador e em nossa cena aqui, podemos simplesmente abrir o veículo e dizer novo empacote-os ou podemos carregá-los Obviamente, gostaríamos de carregar, mas para economizar tempo, podemos simplesmente entrar em nosso sistema de arquivos, pegar nosso caminhão, arrastá-lo e soltá-lo E se fizermos isso, veremos nossos caminhões aparecerem exatamente como deveriam, assim como faziam antes Tudo bem? Perfeito. E se fôssemos pegar, digamos, vamos ver, o carro um também está indo para a esquerda. Então, vamos pegar um carro, substituir aquela cena lá dentro e dar uma olhada nela. E aí está. Nós o fizemos funcionar aqui com um veículo diferente. Então, tudo o que temos que fazer é mudar essa. E há muitos carros em fila lá. Então, novamente, isso pode depender de você ajustar as coisas. Mas aí está. Vou substituir este por um caminhão novamente e impedir que funcione. E agora eu posso seguir em frente e criar mais geradores. Opa. E nós fazemos uma incompatibilidade histórica Isso é interessante. Não estou fazendo nada com a história. Vou usar o Controle D lá. E este é patrocinado por dois. Então, desça e certifique-se de que está alinhado. Isso faz. E esse vai ser o carro três. Então, vou procurar as três cenas do meu carro e arrastá-lo para dentro. Vá em frente e dê uma olhada nisso. Lá vamos nós. Temos nossos caminhões e nosso carro surgindo em nossos diferentes intervalos Fantástico. E podemos fazer a mesma coisa com nossa bunda aqui. Então, vou duplicar isso mais uma vez. Estou apenas duplicando isso com Control D com spanor selecionado E eu vou puxar isso aqui para este veículo. E esse é só um carro. Então eu vou puxar o carro aqui. E damos uma olhada. E vemos que todos os nossos carros indo para a esquerda estão surgindo corretamente Fantástico. E agora só temos que colocar os dois à direita. E a mesma coisa, vou duplicar minha extensão aqui e arrastá-la para o lado esquerdo E então eu ajusto aqui para a posição, isso deve ser bom. E essa é a cena do carro quatro, minha cena do carro quatro, e a duplicamos mais uma vez e a juntamos aqui para meu carro dois sne. Tudo bem. Então, agora eu deveria ser capaz de vir aqui e deletar todos esses carros e caminhões temporários. E se o executarmos, ele deve estar funcionando perfeitamente bem, fazendo com que todos os nossos veículos estejam lá dentro Agora podemos correr por aí com nosso pequeno sapinho, digo, aqui. Aí está. E agora só precisamos de uma maneira pular por essa água para que possamos entrar lá. E, claro, uma forma de nosso sapinho ser esmagado Acho que vamos lidar com o esmagamento na próxima vez, então faremos com que o jogador morra 32. Morte e reaparecimento do jogador: Tudo bem, então como vamos fazer com que nosso pequeno sapinho pegue Gist se ele for atropelado Bem, a primeira coisa que fiz foi adicionar uma colisão em forma de dois D para cobrir o tamanho do meu sapo E vamos usar isso para determinar se ele foi atropelado por um carro em combinação com a Área dois D que está em nossos veículos. E dentro do meu sprite animado, eu criei uma nova animação chamada morte, e eu trouxe o sprite morto Frogger E agora que temos isso, que também precisamos em nosso veículo, teremos que adicionar uma conexão de sinal aqui, e a que queremos é inserir o corpo. E poderíamos passar por aqui e conectá-los um por um em todos os nossos veículos ou poderíamos economizar um pouco de nossos veículos ou poderíamos economizar tempo e conectá-los por meio de script, por meio do código. E acho que é isso que vou fazer aqui para economizar um pouco de tempo. Agora vamos dar uma olhada em como conectaríamos esse sinal por meio do código em vez da interface. A maneira mais fácil de configurarmos isso é, como você pode ver a seguir, dentro do bloco pronto aqui, e esse erro ocorre apenas porque ainda não criamos essa função. Então, vemos que pegamos nossa área dois D porque é isso que está enviando o sinal. Coloque pontos no nome do sinal, que é o corpo inserido. Você pode ver isso à direita, e vamos conectar esse sinal com a função de conexão. E então criamos o que é chamado chamável e passamos um nome, e esse nome será o nome da nossa função que queremos chamar Então, se um jogador acertar, um sapo bater, você pode continuar com Player Hit é o que vou chamar de meu. E agora tudo o que precisamos fazer é descer e criar uma nova função para ela, Bunk player hit Agora, essa função também passa uma parte dos dados. Se dermos uma olhada no sinal do corpo inserido aqui no lado direito, você pode ver que ele passa pelo corpo, e isso é um nó dois do tipo D. Então, será um nó de dois D de algum tipo. Então temos que passar esse argumento, então corpo, nó dois D. E assim, agora isso deve conectar o sinal para todos os nossos veículos, e para testar a célula, podemos ir em frente e imprimir o corpo, e veremos isso. E algo que eu também fiz foi mudar meu jogador. Eu renomeei meu jogador de personagem Body TD para camada E então eu tive que entrar na minha cena principal aqui e substituí-la para que o nome fosse atualizado. Agora, se prosseguirmos e executarmos isso, devemos imprimir uma carroceria toda vez que formos atropelados por um veículo, teste de corte na pista 1 Sim. Pista dois. Sim. Pista três, correto? Pista quatro e nossa última pista, o caminhão. Aqui vamos nós. Então, todos os nossos veículos estão detectando quando somos atropelados, e podemos ver que temos muitos veículos lá nesse momento Então, isso pode ser uma boa quantia, ou talvez você queira aumentar o intervalo mínimo entre eles. Novamente, depende totalmente de você e de como você deseja fazer isso. E o seu. Mas com isso, todos os nossos veículos já foram conectados e configurados para esmagar nosso sapinho Então, a razão pela qual eu disse que renomeei meu corpo de personagem para TD de jogador para jogador, e estou usando P maiúsculo é porque vamos usar esse nome na tela do nosso veículo Então, vamos dizer se e depois passar uma corda aqui, um jogador. Então, se o jogador N. Então queremos ver se essa string está dentro de outra string, e a string que queremos verificar é o nome do ponto do corpo. Agora lembre-se, corpo é qualquer objeto com o qual acabamos de colidir, qualquer corpo que acabou de entrar na área de nossos veículos, e a propriedade do nome dele nos dará qualquer nome que esteja aqui, que no nosso caso é camada Então, basicamente, se nosso nome for player e, em vez do nome do ponto no corpo, poderíamos fazer uma dupla igualdade se quisermos que seja um nome exato Depende totalmente de você. Nesse caso, isso não deve afetar nada. Enrole nossa instrução if com dois pontos, desça até a próxima linha e agora podemos executar nosso PC de código Então, o que queremos fazer quando nosso jogador conseguir? Bem, vamos chamar a função DF em nosso player. Agora, essa função ainda não existe, então vamos ter que criá-la, mas body dot death. E se você quiser ter um caso extra de segurança aqui, você pode dizer se body dot tem método e passar na sequência da morte, e então podemos inserir body dot death em mais uma. Nós podemos ir assim. E isso evitará um erro se prosseguirmos e executarmos isso. Veja, não vamos ter nenhum erro aqui porque estamos basicamente dizendo: Ok, estamos dizendo que se colidimos com o jogador aqui, então se esse jogador, se esse corpo tem essa função, então chame E, no momento, ele não tem essa função. Então, se você quiser colocar essa camada extra de segurança usando o método HAS, você certamente pode fazer isso. E eu vou entrar no meu player agora e criar essa função funk Dak . E isso não acontece Não estamos discutindo nada com isso. Então, o que vai acontecer quando nosso jogador morrer? Bem, precisamos reproduzir nossa animação de morte para que possamos corrigir nosso sprite Então, vamos seguir em frente e fazer isso. Sprite animado dois pontos d, la death. E vamos dar uma olhada nisso agora. O que acontece quando somos atropelados por um veículo? La Di Da, pobre sapinho atravessando a rua, em. Ok. Então, vemos você morrer, e então nós, um dos sprites, estamos no caminho errado Não está virado para cima do jeito que deveria. Então, vamos corrigir isso. Depois disso, vamos definir sua rotação. E já fizemos isso quando pressionamos. Então, vamos adicionar isso à nossa função de morte aqui. E damos uma olhada em que agora deve estar agindo corretamente, plana ou em posição. Incrível. Agora, o que você não pode ver é que estamos constantemente sendo colididos porque nossa forma de colisão continua atingindo E não só isso, também podemos continuar avançando. Então, vamos ser, e estamos vivos novamente. Então, temos um sapo impossível de matar. Sim. Tudo bem, então um adereço importa cada vez, vamos impedir que nossa colisão E podemos ver isso. E eu vou te mostrar que, se entrarmos em nosso player hit, eu vou imprimir um sapo esmagado E você pode ver que, apesar estarmos mortos, ainda estamos sendo esmagados Sapo esmagado, e continuaremos sendo esmagados, mesmo que já estejamos mortos. Não queremos que isso aconteça porque isso pode continuar subtraindo vidas de nós, dependendo da distância entre os spawns Então, vamos corrigir isso em nosso player. E para fazer isso, vamos pegar nossa forma de colisão que criamos, a forma de nossa forma de colisão que criamos, a forma colisão dois D, e adicionamos ao nosso player. E vamos usar algo chamado adiado nele E o que isso basicamente fará se dermos uma olhada é chamar o método no objeto durante o tempo ocioso Sempre retorna Nou, não o resultado do método. Então aí está. Nossa palavra-chave aqui é chamá-lo durante o tempo ocioso. Então, vai chamar isso de qualquer coisa que passemos. Quando tem a próxima chance que tem, basicamente, em vez de tentar ligar agora, quando talvez não consiga. E as funções Sum dirão que você deve fazer isso. Portanto, antes de chamarmos isso, você não precisa excluí-los. Eu só vou te mostrar aqui o erro. Então, se entrarmos aqui e eu disser, desativado é igual a verdadeiro, vamos ver se vamos encontrar um erro E isso não impede que nosso jogo rode, veja bem, fomos esmagados duas vezes, então nossa desativação não está funcionando E segundo, se entrarmos em nosso depurador e analisarmos os erros, isso nos dirá que não podemos mudar o estado ao limpar as consultas, use call deferred consultas Mas está nos dizendo especificamente que devemos usar isso. É por isso que estamos usando a chamada adiada aqui. Chamada adiada. E aqui vai estar uma sequência do que queremos fazer. E, nesse caso, ele será desativado. Se eu estiver desativado, será necessário um segundo argumento, e será para isso que vamos configurá-lo. No nosso caso, será definido como verdadeiro. E agora, se olharmos para isso, esse erro desaparecerá e só seremos eliminados uma E aí está. Não vai mais aparecer dentro do nosso código. E se você está preocupado com o adiamento da chamada quando somos atropelados por uma curta distância de veículos, então quando são três consecutivas, podemos dar uma olhada aqui, e ela já foi desativada antes mesmo do próximo veículo nos tocar Agora podemos realmente morrer aqui. Agora, o que temos que ver é como podemos nos recuperar, agora somos apenas um sapo que não pode ser morto porque não podemos colidir com nada, então temos que resolver isso com nossa morte, precisamos ter algum tipo de reaparecimento, precisamos ter certeza de que só podemos nos mover se estivermos mover se Opa. Eu excluo um pouco mais do que o pretendido lá. Tudo bem, então precisamos saber se nosso sapo está vivo ou está vivo E podemos fazer isso com uma função simples que apenas verifica se está vivo ou se está morto. E com base nessa variável, podemos nos mover ou não. E para isso, vamos usar um conjunto de estados, que será um ENOM como você pode ver aqui no exemplo aqui , podemos usar esses Enums para armazenar dados específicos, eu suponho que você poderia E é basicamente como uma lista de opções que podemos selecionar. E isso torna tudo mais fácil quando se trata de verificar as coisas. E você pode ver isso quando se trata da forma básica de uma máquina de estado, que é usada para caracteres. Por exemplo, se você jogou Grand Theft Ato cinco, por exemplo, você tem controles diferentes quando está a pé em comparação com quando está em um veículo. E isso porque você, com controles a pé, seria um estado. Nadar seria outro estado, e um carro seria um estado e uma aeronave seria outro estado, etc E vamos usar isso para saber quando estamos vivos e quando nosso sapo foi esmagado. Então, para criar isso, em vez de usar a palavra-chave var, usamos Enum, o nome do Enum, que, como vai funcionar como uma máquina de estado, vou chamá-lo E então, em vez de usar números iguais ou dois pontos, simplesmente pulamos direto para o colchete simplesmente pulamos direto para o E tradicionalmente, pelo que eu sempre vi, eles sempre estarão nas capitais, então eu vou viver e depois cair em coma para a próxima linha morta Então, esses são nossos dois estados vivos e mortos. Alive será o estado padrão aqui. E vamos criar uma nova variável chamada estado atual e vamos declarar isso como sendo um estado Então, será um dos nossos estados aqui. Tudo bem, agora com nosso movimento, tudo o que precisamos fazer é verificar se o estado atual é igual a dois iguais ao estado ativo e, em seguida, inserir nosso movimento Então, agora só podemos nos mover quando estamos vivos. Então, agora, quando morremos, temos que dizer que nosso estado atual agora está sendo definido como igual a deb. Então, se executarmos isso agora, não seremos capazes de nos mover depois de morrermos e sermos esmagados E aí está. Estamos todos presos e não podemos nos Então, agora tudo o que nos resta é seguir em frente e criar o respawn Vamos criar uma função de respawn, respawn. E uma vez que tenhamos vidas aqui, é aqui que vamos verificar. Se o jogador ainda tiver vidas, chamaremos isso. Tudo bem Então, vamos continuar, como respondemos? Bem, precisaremos fazer com que nossa colisão volte a funcionar Então, precisaremos chamar deferred em nossa forma de colisão E em vez de configurá-lo como desativado, precisamos defini-lo como falso para que ele não seja mais desativado. Precisamos mudar nossa posição, certo? Posição autodidata, e precisamos redefini-la para onde será nossa posição inicial. E, no momento, são 169 e 233. Vou copiar esse valor bem rápido. E dentro da minha cena principal, vou adicionar um let's see. Como eles o renomearam aqui? Ah, vamos lá. Foi renomeado para Marker two D. E me dê 1 segundo. Vou preparar isso para você. Aí está. Então, vamos usar um marcador dois D. E eu vou configurá-lo para transformar por enquanto Só vou colar o valor. Vou colocá-lo na mesma posição em que nosso sapo está começando E vou chamar esse jogador de local de desova. E agora, quando respondemos, podemos fazer com que a posição do ponto automático seja igual ao nosso jogador Isso não vai ser preenchido para nós, então eu só vou ter que digitá-lo em player, spawn, localização, posição do ponto E isso deve acontecer instantaneamente. Então, vamos seguir em frente e retomar nosso processo aqui. E vamos formar outra verificação estado atual de LI é igual ao estado ponto morto. Você pode chamar Respawn, e isso deve nos levar de volta ao início de onde começamos, se você for morto E parece que temos uma dica. O que é mito? Oh, isso é justo. local de desova dos jogadores, não podemos ter acesso a ele porque, na verdade, precisamos subir na árvore Lembre-se de que somos um jogador e o jogador não tem acesso direto a esse local do jogador aqui. Então, precisamos seguir essa linha e subir um, e então isso nos leva a esse número de D, e então nenhum outro D tem acesso ao spawn de nossos jogadores Então, temos que subir um. E a maneira como podemos fazer isso é de algumas maneiras. Podemos seguir em frente e pegar o pai, obter o nó. E esse nodo G é apenas uma forma longa de escrever esse cifrão. E então, dentro, haveria uma string para o caminho diretamente para a localização do espaço do jogador. Como alternativa, para manter isso um pouco curto, podemos simplesmente obter o node e transmitir algumas coisas. Podemos usar um ponto, que é igual a escrever self, ou podemos fazer dois pontos, que é igual ao get parent que acabamos de excluir E você pode ver isso como muito mais curto. Então, podemos fazer isso com G parents player spawn location. Tudo bem, e isso deve resolver isso. Agora, quando formos esmagados, deixe-me ver se voltamos ao início Só que ainda não podemos nos mover porque temos que definir nossa aposta atual. Lembre-se de que não podemos nos mover. O estado atual é igual a State Live. E não só isso, temos que fazer com que nossa animação volte a ser nosso ídolo Wops. Então, vamos pegar nosso sprite animado dot twoB e jogar nosso Idol Sprite, voltando ao normal E quando o executamos agora , só que agora, não podemos realmente dizer quando recebemos uma resposta Então, o que vou fazer é, primeiro de tudo, usar Caldeford e definir isso depois de todo o resto, porque percebo que depois de todo o resto estamos sendo esmagados duas vezes, então veremos se corrigimos apenas movendo essa linha Isso não acontece, ok. Não é um problema. Só precisamos ter um pequeno cronômetro, por exemplo, depois, o que é bom Tudo bem, então vamos ver o que precisamos? Precisamos. Nosso símbolo morto não está funcionando muito bem porque jantamos e reaparecemos instantaneamente Não podemos dizer nada do que está acontecendo. Então, o que vamos fazer é que, dentro desse renascimento, criaremos um await E faremos o que fizemos antes de usar Get Tree e criaremos esse cronômetro. E vamos configurá-lo para 1 segundo. Parece muito tempo e o sinal de tempo limite. Então, 1 segundo pode parecer muito tempo aqui em um jogo antigo como esse, splat e depois reaparecemos Incrível. Agora estamos sendo esmagados várias vezes lá, que é um Então, vou vir aqui e criar outro pequeno cronômetro para 0,5, e vou ver o que posso fazer ou quão pequeno posso reduzir isso por meio Ok, 0,5, podemos escapar impunes. Vou tentar 0,2. E eu posso escapar com 0,2, então talvez até consigamos escapar com 0,1. Tenho esse atraso muito pequeno aqui. Sim, lá vamos nós. Então, agora temos aquele 1 segundo em que nossa imagem de morte estará na tela de nossa pobre e esmagada Bronte E então a resposta acontece. Incrível. Agora, se você quiser, pode definir esse número em uma variável aqui para o cronômetro ou o tempo de resposta, e esse será o tempo entre as respostas Agora, para mim, acho que vou deixar tudo por uma vez. Isso não é um problema. Acho que nunca vou querer me ajustar Agora, se você notar aqui quando eu estava indo, se eu me sentar aqui, eu poderia ser esmagado pelo carro embaixo Não, estou bem. Oh, mas eu fui esmagado lá quando me virei para Então, talvez eu queira ajustar minha posição Y um pouco mais. Talvez eu queira ajustar minha posição Y um pouco mais lá, mas isso vai se resumir a apenas brincar com a posição e um pouco mais Mas sem problemas. Mas isso bastará para isso. Agora temos nosso sistema de morte e ressurgimento de jogadores acontecendo Não temos nenhuma vida acontecendo no momento, mas chegaremos a essas vidas quando chegarmos à nossa seção de interface do usuário. Mas com isso, tome cuidado. Essa foi uma grande quantidade de informações que examinamos. E eu espero que você esteja pronto. Estamos passando para a próxima seção do jogo, ou seja. 33. Morte por água: Tudo bem, então vamos fazer com que, quando pularmos na água, morremos e tenhamos que reaparecer Bem, para fazer isso, poderíamos fazer isso de algumas maneiras diferentes. Mas a maneira mais fácil de fazer isso, já que fazer isso, já estamos usando um mapa de blocos, é tirar proveito disso e usar o mapa de blocos para nos dizer em qual ladrilho estamos. Se estivermos na água, morreremos. Se não, ficaremos bem. Eu faço isso. Vamos ver o roteiro de nossos jogadores. Feche nas outras guias. Então, vamos ver o roteiro de nossos jogadores. E o que precisaremos é de uma nova variável para manter nosso mapa de blocos aqui. Agora, não precisamos definir isso no topo, mas também não precisamos configurá-lo constantemente em nossa função que vamos criar. Tudo bem, então vamos ver isso e vamos usar a palavra-chave on ready, e tudo isso significa que a variável que vamos criar seria a mesma que se a definíssemos aqui no ready Então, se disséssemos, por exemplo, número em dez é igual a dez, seria a mesma coisa que se criássemos um número e depois o definíssemos como criássemos um número e dez aqui dentro do bloco Tudo isso está pronto. E isso é útil quando queremos nos apossar de nós específicos que estão dentro de nossa cena E em nosso exemplo, queremos obter esse mapa de blocos aqui Então, vamos fazer var Tilemap. E vamos definir o nó igual ou parcial e, claro, atualmente ele é chamado apenas de Tilemap Agora, lembre-se do que eu disse, acho que foi no último vídeo. Em vez de usar getParent aqui, poderíamos encurtar isso e, em nosso get no, basta fazer uma barra de pontos e ter o mesmo equivalente de Acho que vou fazer isso apenas para manter as coisas novamente um pouco mais curtas. Tudo bem Então, agora temos nosso mapa de blocos. Agora, o que queremos fazer é verificar em qual ladrilho estamos de pé. Então, vou seguir em frente e criar uma nova função aqui. Vou ligar para esse cheque, ID do celular. Opa. Isso vai nos dar uma reviravolta vazia E o que isso vai fazer por nós é basicamente usá-lo para primeiro obter a posição da célula em que estamos. Então, vamos dizer pausa na barra, que será definida como nosso mapa de blocos local para MAP E então isso tomará uma posição, e essa posição será a posição do nosso jogador. Agora, o local to Map apenas nos devolverá uma posição, que será a posição da célula em que estamos. E as células seriam cada um desses quadrados alaranjados. Então, como estamos aqui, imediatamente quando o jogo começa, ele nos dirá essa célula aqui, a localização dessa célula. E então a próxima variável que vamos criar basicamente entrará lá e dirá: Ok, isso é feito com esse ladrilho. Agora, qual é essa identificação, e ela vai nos devolver uma. E para obter esse ID, criaremos uma variável aqui. E isso vai ser apenas o Tilemap. Aparência. Mapa de blocos. Ainda não. ID da fonte do Sell. E isso só vai exigir os dois argumentos. A primeira será a camada em que está , que é a camada zero. E a segunda será a posição, que já obtivemos da nossa variável de pausa no mapa aqui Então, agora esse ID agora deve ser o que estamos usando. Então, se entrarmos e imprimirmos essa identificação e executarmos a verificação da identificação da célula dentro do nosso processo, veremos imediatamente uma ser impressa para a mediana, duas para a estrada e três para a água Aqueles que executam isso, podemos dar uma olhada na saída. Vemos um ser impresso para nossa mediana, dois para nossa estrada E se eu conseguir chegar até a água aqui, podemos ter um para a mediana novamente, e depois três quando atingirmos a água Lá vamos nós. Agora sabemos que isso está funcionando perfeitamente, mesmo se viermos até aqui, porque verificaremos a camada zero. Então, vamos ter três que será nossa água, pois bem, sabemos disso agora. Então, o que vamos fazer é verificar se o ID I é igual a três, e é aqui que mataríamos nosso jogador. Tudo bem, então entramos chamamos nossa função de morte aqui. Agora, quando tocamos na água, devemos morrer. Lá vamos nós. Então, agora podemos morrer quando nosso jogador toca na água e espera pelo ressurgimento Agora, isso pode ser um pouco cansativo quando o verificamos constantemente dessa forma, não importa o que aconteça Então, a próxima melhor localização seria ligar para cá somente quando estivermos vivos, mas ainda melhor, é que podemos ligar sempre que realmente nos mudarmos. Então, vou adicionar isso ao final de todos os meus movimentos aqui. Agora, quando estou me movendo em qualquer direção, é a única vez que vamos verificar em vez de enviar spam Até agora, tudo bem. Pule, pai, espere o renascimento Agora, mova-se novamente. Tudo bem. Agora podemos afogar nosso sapo na água e deixar nosso sapo ser esmagado por um Tudo bem. Então, temos todas as nossas mortes sob controle agora. Tudo o que nos resta fazer é fazer nossas plataformas funcionarem e, em seguida, obter nossos pequenos pontos de vitória no final, pulando para os locais certos e, em seguida, configurando nosso heads-up display com nossa pontuação E então eu acho que estaremos quase terminando. Acho que não vamos perder nada depois disso. Pode estar errado, mas aí está. Agora podemos afogar nosso sapo na água, e agora você sabe como obter a identificação de qualquer ladrilho em que seu jogador esteja Tudo bem, fazer isso por este. R. Vejo vocês no próximo vídeo. 34. Plataformas de água: Tudo bem, vamos começar a configurar nossa plataforma. Depois de configurarmos nossa plataforma, a única coisa que podemos fazer ou a única coisa que nos resta para essas plataformas é basicamente trocar os sprites e torná-los cada vez mais curtos Então, para minha plataforma aqui, vou usar apenas uma configuração de três sprites aqui para que possamos usar o log para este exemplo, o final, o meio e a outra extremidade, direita, meio e início Então isso significa que estou usando três sprites aqui com minha cena principal, a raiz da minha cena aqui é o corpo de um personagem que eu renomeei Eu poderia renomeá-lo para um registro, se quisesse. E isso tem uma área dois D com uma nave de colisão que cobre meu registro aqui E eu conectei o sinal de entrada e saída do corpo Ok. Então, quando você tiver esses dois sinais conectados, o script em sua plataforma deve ter a seguinte aparência, e estamos prontos para adicionar informações ou adicionar tudo a ele. Então, da maneira como vamos fazer isso, também vamos adicionar coisas ao nosso script de jogador. E a maior parte desse trabalho, na verdade, estará no script do nosso player. Então, por enquanto, vamos ao nosso script de player e adicionar algumas variáveis que vamos usar. Primeiro, será uma plataforma, e isso será um booleano, e isso basicamente dirá ou informará nossa água se estamos seguros ou não porque estamos em uma plataforma ou se não estamos em uma plataforma, a chamada notificação de morte Vamos obter nossa plataforma var atual, que é o corpo de um personagem em dois D que passamos. Então, eventualmente, vamos configurá-lo . Por enquanto, vou enviá-lo para N e precisaremos de uma direção de plataforma, que é um padrão inteiro Vamos definir como zero, mesmo que isso não importe. Tudo bem Então, novamente, vamos usar a plataforma, a plataforma atual e a direção da plataforma como nossas três novas variáveis em nosso script de player. Vamos prosseguir e descer até nossa identificação de célula de verificação e adicionaremos à nossa declaração if. Então, vamos dizer se ID é igual a três e a plataforma é igual a false Dessa forma, diremos que se estivermos na água e não estivermos em uma plataforma , mataremos o jogador. Então, temos nossas condições definidas lá. Vamos ver. Para um jogador, também vamos verificar enquanto estamos vivos. Se nossa plataforma atual não for igual a null, o que não será, só será igual a ela por enquanto Terá um objeto atribuído a ele quando nosso jogador estiver em nosso registro. Então, digamos que a plataforma atual não seja igual a nula, então podemos seguir em frente e chamar nossa posição de ponto mais igual, vamos fazer um pouco nossa posição de ponto mais igual, vamos fazer um Precisamos abrir e fechar nossos parênteses aqui porque vamos usar a ordem das operações quando se trata de operações quando se trata Vamos dizer direção da plataforma. Vezes 16. Então, vamos usar isso como mais um ou menos um, assim como fizemos com nossos veículos, e multiplicamos por 16 Então, ou vamos mover 16 para a esquerda ou 16 para a direita, e vamos fazer isso ao longo do tempo. Então, vamos multiplicar isso por Delta. Dessa forma, não somos baseados em quadros, somos mais baseados no tempo. Tudo bem Então, a única coisa que nos resta fazer é definir a direção da nossa plataforma, e podemos fazer isso por meio de uma função. Divertido. Queremos seguir, vamos seguir a direção definida. E isso pegará um argumento de um número inteiro, não retornará nada E tudo o que isso vai fazer é definir a direção da nossa plataforma igual a ter. Tudo bem Então, agora podemos acessar nosso script de plataforma e não precisamos desse bloco pronto. Nós podemos deletar isso. E dentro do nosso processo, queremos que nosso registro no meu caso continue em andamento. Então, vou seguir em frente e posicionar o ponto X mais é igual a 16 vezes Isso o moverá constantemente para a direita. I quando entramos quando nosso jogador entra na área. Então, vamos definir a plataforma aqui como verdadeira e vamos definir nossa plataforma atual nosso log aqui, minha plataforma aqui. Então, vou pegar a plataforma body dot e definir isso como verdade, porque agora estamos na plataforma e, no corpo, acredito que era uma plataforma de meio-fio Sim, plataforma de freio é igual a isso. E quando o corpo sair, vamos fazer o oposto, então vamos definir Em vez de verdadeiro, vamos defini-lo como falso. Em vez de célula, defina-a como saber. Tudo bem? Então, o que estamos fazendo até agora é pular no tronco, que atualmente está se movendo para a direita o tempo todo Enquanto está fazendo isso, ok. Reinicie isso. Atualmente, nosso registro está se movendo para a direita 16 ao longo do tempo e não é baseado em cérebros Agora, quando nosso jogador entrar na área de nossa plataforma em que ele pode ficar, vamos definir a variável de plataforma em nosso jogador como verdadeira. Dessa forma, quando verificarmos o ID da célula para ver se estamos na água, plataforma será verdadeira e nosso jogador não será morto. E então estamos definindo a variável curva da plataforma do nosso jogador para a plataforma atual igual a self. Então, o corpo do personagem aqui que está se movendo representa nossa plataforma. E com base nisso, poderemos mover nosso personagem aqui. Portanto, a plataforma atual não é igual a nula. Então, se estivermos em uma plataforma atual, moveremos nosso sapo na mesma direção e na mesma velocidade Então, a última coisa que nos resta é realmente chamar essa função que criamos para definir a direção. Então, ponto do corpo ou direção definida, e isso leva um número inteiro, o que significa que vamos nos mover para a direita Usaremos um positivo. E agora, se adicionarmos a plataforma à nossa cena e a executarmos, como você vê, lá está nosso registro, e se pularmos nele, acabamos morrendo lá. Talvez seja necessário atualizar isso. Um momento lá. Traga um novo de volta. Vá até lá, dê outra chance ao papai. Ok, estou morrendo, então meus sinais talvez precisem ser reconectados Vou desconectar isso e reconectá-lo. E farei o mesmo com minha saída, desconectarei e reconectarei a saída do meu corpo E veremos se esse era o problema. Ok. Acho que vi o que perdi aqui, e estamos recebendo essas informações um pouco rápido demais. Então, antes de termos nossa instrução if dentro de nosso ID de célula de verificação, vou usar um peso e fazer o que fizemos antes com Get tree, criar um cronômetro, e vamos fazer uma pequena pausa de 0,1 e obter aquele sinal de tempo limite E isso deve resolver isso para nós. Aqui vamos nós. Agora podemos pular em nosso pequeno tronco e estamos bem. Podemos pular para frente e para trás e ficar bem, e estamos nos movendo. E assim que pularmos, podemos correr de volta para o outro lado, se quisermos. E ainda assim, se pularmos na água, opa, seguimos em frente e morremos Tudo bem, então como podemos tornar esse script um pouco mais? Acho que poderíamos dizer modular de uma forma, uma forma que seja mais amigável, para que possamos mudar constantemente se temos mudar constantemente se dois sprites, três sprites, um sprite, o tamanho da nossa forma de colisão, e ter tudo isso de qualquer maneira, bem como, eu acho, definir nossa direção para que possamos para a direita e alguns para a direita ou outros para a esquerda. Bem, vamos prosseguir e exportar a direção de um número inteiro Isso é zero por padrão. Oh, tenho a palavra bar aí. Lá vamos nós. Agora eu quero ir para minha plataforma. Eu posso mudar isso para um em vez de zero. Podemos pegar a direção e passá-la aqui quando chamamos a direção definida. E mais é igual, e poderíamos fazer a mesma coisa aqui, onde temos direção Whoops E podemos ir em frente e verificar se tudo ainda está funcionando. Não quebramos nada. Está bem? Os arqueólogos ainda estão se movendo Podemos pular nela e pronto. Está bem? Então, ainda não quebramos nada. Isso é ótimo. E vamos ver, o que mais precisamos? Bem, acho que seria isso. E podemos seguir em frente e definir ou criar todas as nossas plataformas diferentes agora usando o mesmo script. E então criamos um patrocinador para isso, assim como fizemos com nossos caminhões Eu volto em breve enquanto crio alguns desses. Tudo bem, então eu fui em frente e fiz cerca de três tartarugas longas também, e só faço algumas aqui na cena E como você vê, vá em frente e jogue este tronco, pule para as próximas tartarugas Na próxima, pule para a direita. Suba na minha tartaruga, espere, pule no tronco e estou pronto para pular no que seria nosso espaço eólico Tudo bem Portanto, nossas plataformas certamente estão funcionando bem agora. É ótimo. Quero observar que adicionei um await for 0.1 no corpo inserido antes de alterar a plataforma em nosso script de plataforma Então, eu quero tomar nota disso. E agora tudo o que precisamos agora são nossos criadores. Tudo bem, então vamos em frente e criá-los. E vamos efetivamente torná-los iguais aos nossos caminhões aqui. Em seguida, vamos pegar nós mesmos ou adicionar um D não dois, que chamaremos de gerador de plataforma. E vamos começar a alinhá-los. Então teremos um lá. Eu tinha ido lá. Tem um que parece estar lá. Ok. Esse visual até faz isso. Na verdade, um lugar um pouco estranho. Sim, vá lá. E então precisamos de um casal do outro lado para enfrentar nossos obstáculos Um agradecimento final e outro pelo nosso obstáculo Tudo bem Então, esses parecem bons pontos de desova Esses são um pouco próximos. Ajude a recuar um pouco esses. E teremos algo semelhante ao nosso gerador de caminhões, então vou copiar nosso gerador de caminhões. E vamos ver. Eles vão ter o mesmo nome diferente do veículo. Sim, praticamente. Então, provavelmente poderíamos nos safar usando nosso script de caminhão aqui. Nossas plataformas seriam chamadas de veículo. Mas acho que quero fazer uma diferente porque não gosto do tempo de espera. Não acho que isso seria bom para as plataformas. Eu só vou usar isso como minha base. Vou clicar no gerador da minha plataforma e adicionar um novo script E aqui, vou seguir em frente e colar os scripts do veículo. Vou chamar essas plataformas. Opa. Não era isso que queríamos. Vamos mudar isso para platform dot Instantiate PI para platform Instance, self at Child Tempo de espera. Veja, é aqui que o problema vai entrar. Então eu acho que vamos ver. Vamos de 1 a 2 e adicionaremos três a isso. Então, veremos como isso funciona. Em seguida, mudaremos isso de veículo de extensão para plataforma de desova Então, essa aqui será nossa cena de registro. Cena da plataforma. O próximo , novamente, será o mesmo. Vou prosseguir e simplesmente arrastar meu script para cima e anexá-lo a todos os meus poners de plataforma E a segunda é minha cena de registro. Três é a plataforma de madeira, e então quatro e cinco serão meu território. Tudo bem Então, se agora nos livrarmos dessas plataformas, mova meu player para baixo da coluna para que o sapo possa Vamos ver se está funcionando. Sim, sim, eu chego até o outro lado. Sim, aí estão minhas tartarugas. Bem, parece que precisamos mudar esses tempos de espera. Isso fará com que seja extremamente fácil para nosso jogador simplesmente atravessar. E é por isso que queríamos usar um script diferente do nosso caminhão, porque precisaremos de tempos de espera completamente diferentes para as plataformas. Tudo bem? Então, vamos tentar mais dez. Então, isso nos dará uma variação de 11 e 12 segundos. Oh, o que eu coloquei entre esses carros? R: Portanto, 11 e 12 segundos podem ser uma lacuna muito pequena neste caso. Então, neste momento, estamos apenas ajustando para ver o que se encaixa melhor aqui Mas talvez tentemos cinco e seis. E eu vou pular até o outro lado e veremos como é esse tipo de propagação. Mas, neste momento, você está praticamente ajustando seus números para ver o que parece bom para suas plataformas e o que parece bom para seus caminhões Eu só quero ter certeza de que eles não serão completamente consistentes o tempo todo, e parece que não estão, o que é ótimo. Como alternativa, se você quiser codificá-los um pouco mais ou torná-los diferentes especificamente, venha aqui e espere aqui e faremos com que seja um flutuador, não um apartamento Como alternativa, você pode fazer isso aqui e excluir essa linha completamente. Se você quisesse ter uma quantia específica. Você queria ter controle sobre a quantidade exata de tempo que esperou por respondente, você pode fazer isso dessa forma Vou continuar com esse pouco de randomização aqui. E você sabe o que? Eu vou com o Ted lá. E acho que isso bastará para nós, porque agora temos nossos patrocinadores Temos nossas plataformas. Então, tudo parece estar funcionando. Nós poderíamos atravessar. E acho que, a seguir, podemos fazer nossa vitória, nossa pequena vitória lá em cima quando pularmos para a zona correta. Vamos ver. Eu gosto desses números? E pulamos na água, morremos. Incrível. Acho que gosto desses números, pelo menos por enquanto. Tudo bem. Então, é isso. Terminamos de criar e montar nossa plataforma . Em seguida, cobriremos a área em que pulamos em nossa zona de vento e desovamos em nosso pequeno sapo doméstico Tudo bem. Te vejo na próxima. 35. O espaço de vitória: Tudo bem. Para a zona de vento, você pode ver que eu tenho uma nova cena aqui, que é apenas uma área dois D com forma de colisão e um sprite dois D que só tem meu sapo doméstico Como textura, e ela está desativada ou visível, é desativada por padrão. Você pode fazer isso clicando no pequeno globo ocular aqui. E o WindSpace tem um script, bem como um sinal inserido no corpo conectado a ele E para o script, simplesmente, o que vamos fazer é definir body dot Win Zone como verdadeiro. Win zone é uma nova variável que foi adicionada ao jogo. O estado atual do body dot é definido como body dot sta dot win. Então, temos um novo estado adicionado aqui, então agora temos Alive, Dad and Win. Então, tudo o que fazemos é pegar nosso sprite two D, pegar a propriedade visible e defini-la como verdadeira E para nosso player evitar problemas e corrigir um pequeno bug, eu usei aqui. O estado atual do LF é igual a stat dot dead. Coloquei nosso peso de 1 segundo aqui e o retirei da função de respawn Costumava estar aqui no topo. Acabei de retirá-lo e movê-lo para nosso estado e isso deve ser tudo o que temos que fazer. Agora podemos voltar à nossa cena principal e importar nossa zona de vento, nosso espaço eólico, e simplesmente encaixá-la em cada um de nossos pequenos espaços. E talvez você precise fazer alguns testes para garantir que seu sapo não o toque prematuramente para acionar Você? Então eu tenho o meu cobrindo todas as minhas áreas. E se você quiser verificar suas zonas de colisão e todas essas áreas de depuração, basta acessar o menu de depuração na parte superior e você terá a opção mostrar formas de colisão visíveis E se você fizer isso, ao executá-lo, verá que podemos ver todas as nossas pequenas caixas de colisão aqui Para tudo. Lá vamos nós. Portanto, se você o estiver acionando acidentalmente ou talvez esteja, habilite-o habilite-o Dê uma olhada você mesmo. E você verá quando subirmos. Deveríamos ter outro registro. Aí está. E podemos desencadear nossa vitória. Yo. E observe que não ficamos totalmente impressos em nosso console lá embaixo. E quando nosso estado é nosso estado atual em dot win, reaparecemos e, em seguida, retornamos a zona de vitória para falsa Agora, também estamos usando a zona de vitória abaixo em nossa ID de célula de verificação. Então, adicionamos outra condição aqui. Portanto, se o ID for igual a três e a plataforma for falsa. Então, se estamos na água, não estamos em uma plataforma e nossa zona de vitória não é verdadeira, ou você poderia dizer que a zona de vitória é igual a falsa. Essa seria outra forma de escrever. Então podemos chamar de morte. Então, se não estamos na zona do vento, não estamos na plataforma e estamos na água, então matamos nosso sapo. Caso contrário, nossa aposta de vento deve ser acionada e podemos simplesmente responder sem matar nosso jogador. Tudo bem O espaço eólico é muito simples, muito fácil de fazer lá. Agora, se você deixar o sapo aqui ativado, o tempo todo depende de você Se você quisesse, você poderia entrar e adicionar um nó temporizador. Você poderia vir aqui e adicionar um cronômetro. E então defina isso para, eu não sei, vamos dizer 5 segundos. Então, podemos entrar, ou melhor, podemos conectar sinal de tempo limite ao nosso espaço eólico e ao tempo limite Definiremos nosso sprite com dois D visíveis para Voss e, logo após transformá-lo em Tro, poderemos começar a Assim, podemos pegar o cronômetro e começar. Se fôssemos fazer dessa maneira , depende de você. É aqui que um pouco de design vai entrar. Quão autêntico você quer e quão personalizado você quer tornar seu jogo, etc Então minhas madeixas e aquelas começam a desovar. Vá lá. Ei, então eu posso vir aqui e esperar para atravessar. Então, se usarmos o cronômetro aqui, nosso sapinho, nosso sapinho caseiro aparecerá para vencer e, depois de alguns segundos, ele desaparecerá para que você possa vê-lo lá em cima e lá vai, ele Então, se você quiser que desapareça assim , é assim que você faria. Podemos simplesmente adicionar esse cronômetro ao seu espaço eólico configurá-lo no inspetor para o tamanho que você deseja Inicie o cronômetro depois definir o sprite para ficar visível E quando o cronômetro expirar, defina-o como falso. Tudo bem. Então, isso bastará para nosso espaço eólico, e só precisamos dar uma olhada em nosso heads-up display ou HUD ou Qu Wee e criar um sistema de pontuação Tudo bem. Então é isso, e nos vemos na próxima. Estamos quase terminando de criar um sapo ou um clone 36. Correção de vazamento de memória: Tudo bem, pessoal, hoje não vamos adicionar nenhum recurso Na verdade, vamos consertar o que seria um suporte crucial, especialmente em um jogo maior Agora, o que temos é um vazamento de memória em nosso jogo. E temos isso a partir de dois pontos. Quero dizer, tecnicamente mais de dez, mas vamos dar uma olhada Se continuarmos jogando isso, jogue esse jogo, e eu vou tirar isso aqui. É que vou ter que passar isso para vocês. Então você pode ver tudo surgindo fora tela, e eles vêm, eles vêm, e basta olhar para aqueles carros subindo para as plataformas no topo, e farão o mesmo Eles vão continuar e vão para sempre. Eles nunca vão parar. E isso é chamado de vazamento de memória. Tudo bem. Então, vou deixar isso aí para que possamos ver isso com mais facilidade. Mas se eu pausar isso e clicar na guia remota aqui no topo da nossa árvore de cenas, que só está disponível quando o programa está em execução E se usarmos o controle remoto, dê uma olhada em todos esses carros em apenas um gerador que ainda existe, mesmo que provavelmente não precisemos da maioria deles E o mesmo com todos os outros geradores. E nossos geradores de plataformas Nossos geradores de plataformas não são tão ruins porque têm uma taxa de rotação muito mais lenta do que os carros, mas durarão para sempre e nunca desaparecerão e nunca desaparecerão Eles nunca se livrarão da memória. Então, eventualmente, você terá esse pequeno jogo que pode ocupar 128 GB de memória apenas para continuar jogando Levaria muito tempo, mas eventualmente tudo se encaixaria. Então, vamos corrigir isso muito importante, eu acho, chamamos isso de bug, e é muito simples de fazer. Só precisamos colocar uma instrução if dentro desses dois scripts. Agora, os números que você escolher aqui, é claro, dependerão do seu projeto. Mas, pelo que testei e com base em nossa visualização da janela, tenho um conjunto de números que vou usar aqui. E o que vamos fazer agora é que eu estou dentro do meu script de plataforma e dentro do processo aqui. Vou apenas verificar se a posição global tem X, agora a diferença aqui entre posição e posição global é se entrarmos em nossas plataformas aqui, por exemplo, essa será nossa posição local, certo? Então, apenas a propriedade de posição. Mas quando estamos em nossa cena principal acima de tudo, isso será responsável por nossa posição global que vemos na tela, independentemente de quem seja o pai. Por exemplo, se dermos uma olhada em nosso espaço de vitórias aqui, podemos ver que sua posição na tela principal aqui é em 24 e 45. E esse será um espaço mais global, ao passo que, se entrarmos aqui, podemos ver nosso espaço eólico, nossa posição local aqui é 00. Então, esses são dois números diferentes. Então, espero que isso faça sentido para você sobre o motivo pelo qual estamos usando a posição global aqui E, claro, queremos a propriedade X porque ela controlará nossa esquerda e direita. Então, se nosso X for maior que 436, isso significa cerca de 100 pixels fora da tela à direita E com base na localização de nossos patrocinadores, isso ainda dá espaço suficiente para superar isso Portanto, se nosso ponto de posição global X for maior que 436 ou o ponto de posição global X for menor que menos 100 Então, estamos saindo cerca de 100 pixels da tela e na direção esquerda e direita. Então, se alguma dessas coisas for verdade, tudo o que vamos fazer é ficar livre de pontos Qu Tudo bem. Então, agora devemos ver as plataformas de personagens se desativando ou se excluindo de nossa memória E essa é apenas uma solução potencial. Para algo assim, outra solução, que se você depende do seu jogo, por exemplo, se estiver fazendo algo como um inferno de balas, você vai querer usar algo chamado agrupamento de objetos, e podemos falar sobre agrupamento de objetos em um vídeo especial, se você estiver certo, então vou até meu patrocinador, ponto GD, aqui, Meus Veículos E vamos ver. Qual deles estamos procurando aqui? No roteiro do nosso veículo. Lá vamos nós. Portanto, não estamos no roteiro de um veículo, e a mesma coisa, exceto no processo. Vou colar o mesmo código. Se o ponto X da posição global do sublinhado for maior que 436 ou a posição do sublinhado global X for menor que menos 100, o ponto próprio q E agora, se eu seguir em frente e executar isso opa, estamos na cena certa, nossa cena principal aqui Vou fazer uma pausa bem rápida, ir até nossa árvore remota E podemos dar uma olhada em nossas peças de reposição regulares aqui, onde os carros estarão aqui está minha janela de jogo para retirá-las E se eu continuar e deixar isso tocar, certo? Então, temos alguns carros localizados na rede aqui, e podemos ver isso aqui E eu vou apenas estender a janela para a direita. Meu erro aí. Parece que eu pego Goto em vez Vá. E aí está. Você pode ver que eles estão no controle remoto e também visualmente lá. Quando você vai longe o suficiente, eles estão se excluindo completamente Então, agora nossos objetos estão todos sendo gerenciados, e potencialmente só podemos ter alguns em nossa cena a qualquer momento. E você pode ver as plataformas na parte superior fazendo o mesmo. E as mesmas coisas acontecendo no lado esquerdo, fora da tela, o que não podemos ver agora. Então, vamos lá com aquela simples, tecnicamente duas linhas de código, consertamos nossa memória, nossa memória, oh, isso está saindo da minha mente agora Vazamento de memória. É engraçado, já que estamos falando sobre memória. Mas aí está. Com isso, corrigimos nosso problema de vazamento de memória. E eu vou te mostrar um problema aqui. Não é realmente um problema, mas só para mostrar mais um exemplo aqui. Nós vamos para a plataforma. Se usarmos a posição em vez da posição global, você verá um exemplo aqui. Se dermos uma olhada, você verá que, especialmente com as tartarugas, você verá as tartarugas desaparecerem desaparecerem Tudo bem. Observe-os, eles estão chegando. Então, quando estamos usando essa posição local, aí está. Você vê que eles estão desaparecendo muito cedo. Eles mal aparecem na tela, mal chegam aqui e desaparecem. É por isso que temos que usar a posição global. Tudo bem. Então, eu só queria demonstrar isso um pouco mais visualmente para você. Sem redesenhar. Gratuito. E são simplesmente, como eu disse, completos, destroem o objeto e o tiram da memória Tudo bem, então aí está. É assim que podemos consertar essa memória tarde. Tudo bem. Em seguida, podemos passar para a pontuação e o HUD, adicionando vidas de jogadores e tudo 37. Sistema de pontuação: R: Tudo bem. Então, no vídeo de hoje, vamos adicionar o sistema de pontos, como você pode ver aqui. Essas são as regras dez pontos para cada etapa, 50 pontos para cada sapo que entra e 1.000 pontos para cada vez que colocamos cinco sapos Então é isso que precisamos ter em mente quando fazemos isso. E vou começar criando um script global, também conhecido como Singleton ou script de carregamento automático E para isso, vou clicar com o botão direito do mouse no meu sistema de arquivos. E crie um novo script, e vou chamá-lo de meu . Vou simplificar e me tornar global. E para ativar isso, acessamos as configurações do nosso projeto. Vamos ver. Temos isso capturado agora? Nós não temos. Aqui vamos nós. Pode ser um pouco grande, mas vamos lá. E entramos na guia Carregamento automático. Clique em nosso botão de navegação e simplesmente fracasse e selecione nosso script global Vou receber o nome global por padrão. Você poderia alterá-lo, mas não vejo por que precisamos adicionar, e pronto. Agora podemos usar esse script em qualquer lugar do nosso código. E agora, acho que é aí que vamos manter nossa pontuação. É aí que vamos manter nossa pontuação. Então, se fecharmos isso, agora podemos abrir nosso script global clicando duas vezes nele e dar um exemplo aqui. Nós podemos vir até aqui. Criamos outra função aqui chamada Print SCORE. Eu tenho uma variável aqui chamada SCORE. É um número inteiro, digamos que você tenha 50. E o objetivo dessa função é apenas imprimir a escola. Então, sendo global, eu poderia entrar no script do meu player aqui e escrever o nome que tínhamos para o que eu deixei, chamado Global para o ponto G maiúsculo, e então poderíamos usar a função que e então poderíamos usar acabamos de criar, imprimir SCR. E então, quando executarmos isso, veremos essa pontuação impressa aqui em nossa saída. Portanto, um script global contém variáveis e funções que podemos alterar e usar em nosso jogo em qualquer script em qualquer momento. Então, vamos em frente e podemos remover todas essas coisas e definir a pontuação como zero por padrão. E vamos seguir em frente e ter uma função chamada pontuação de atualização. Tudo o que vamos fazer aqui é ir para onde vamos imprimir nossa partitura. E precisamos exibi-lo? Devemos exibi-lo na tela neste vídeo? Agora, salvaremos a exibição na tela quando começarmos a cobrir o HUD. Então, aqui, vamos imprimir a partitura. Quando isso acontecer, a pontuação de atualização levará o novo valor a ser adicionado. Pode ser uma pontuação de int to do plus é igual a uma nova quantia. E podemos fazer Bem, vamos primeiro garantir que essas coisas funcionem. Então, toda vez que pulamos, ganhamos dez pontos, certo? Então, teremos que adicionar isso ao nosso movimento em todas as nossas peças. Então, vamos usar global dot Updates it Update score? Porque ainda não o salvamos. Yo. Atualize a pontuação e passe em dez pontos. E vamos copiar isso em todos os nossos movimentos e entrar no jogo. E à medida que avançamos, devemos ver dez pontos adicionados constantemente. Lá vamos nós. Dez, 30, 40, 50, 60, 70, 80, 90, 100, um, dez, etc., então isso está funcionando Todos nós temos nossos botões, fantásticos. Podemos simplesmente aumentar nossos pontos assim. Então, os pontos aqui são incríveis. Eu simplesmente fui em frente e me livrei das outras impressões que estavam lá só para esclarecer isso, tornar tudo um pouco mais fácil para você. Então, à medida que avançamos e corremos até lá e damos voltas, você pode ver em nossa saída nosso número aumenta toda vez que nos movemos. Então, vamos lá. Está funcionando. Fantástico. Agora, também temos que acompanhar quantos sapos obtemos no total, caso sejamos total de sapos, não parece a quantidade que queremos blá, blá. Nós chamamos isso de combinação. Sapos em Um, eu não sei. Vamos chamá-lo de Multi Frog. Sapo múltiplo. Começa do zero. Toda vez que você adiciona ao multisapo, certo? Nós fazemos vários sapos mais é igual a um. Eu lembro que com cada combinação de cinco, ganhamos 1.000 pontos Então é aqui que vamos, eu multisapo, menos de cinco, então vou tocar nesta linha aqui Então, vamos marcar mais é igual a um novo valor. Caso contrário, marcamos mais é igual a 1.000. Obteremos 100 se colocarmos cinco neblinas , isso só acontecerá se entrarmos em uma área de pontuação, então não podemos realmente aumentar nosso sapo pi Então, para isso, realmente temos que ir ao nosso WindSpace e entrar em nosso próprio corpo inserido, e é aqui que vamos aumentar esse número Então, vamos fazer Global MultifrogPlus igual a um. Vou colocá-la diretamente dentro do nosso WindSpace. E então também vamos chamar nossa atualização pontuação global de atualização de pontos, e vamos passar de 50 porque temos um sapo E como já estávamos aumentando nosso Multi frog antes, atualizando nossa pontuação, certo Então, estamos atualizando nosso sapo múltiplo por um, depois verificaremos Basicamente, se esse for o nosso quinto sapo ou se esse não for o nosso quinto sapo, então faremos isso Vamos apenas adicionar esses 50. Caso contrário, adicionaremos 1.000 e, na verdade, precisaremos reduzir o multi frog para zero porque ele precisa ser redefinido reduzir o multi frog para zero porque ele precisa ser redefinido Então, vamos ver se isso funciona. Tudo bem Estamos até aqui. Vamos em frente e entrar na zona. Divertido. Ei, estamos no registro. Agora vamos esperar que essas tartarugas cheguem. Muito bem, pequena tartaruga. A tartaruga. O sapo e a tartaruga Então, vamos ter 290. Então, devemos pular aqui. Agora, quando entrarmos na Zona, devemos pular para 340 E oh, subimos para 350 nesse caso porque também nos mudamos ao mesmo tempo. Tenho que lembrar disso. Hum, nós temos nossos dez pontos. Esse sapo funciona dessa maneira? Na verdade, já faz muito tempo que não jogo, então não tenho 100% de certeza disso. Se for esse o caso, então, para resolver esse problema, é claro, podemos simplesmente adicionar 40, e então contaremos isso mais dez a partir do nosso salto até lá. Então, se fôssemos em frente e entrássemos nisso agora, pareceria um torque de mais 50. Como eu disse, não tenho certeza se isso conta esse salto real ou não no jogo real. Talvez seja algo que possamos dar uma olhada. Talvez você possa simplesmente deixar isso para uma escolha pessoal sobre se deseja ou não permitir que isso conte efetivamente. Oh, meu sapo morreu. Triste. Oh, parece que sim, Rod Froggy Aqui vamos nós. Parece que se meteu em um pequeno inseto ao pular em um lugar estranho Lá vamos nós. E agora meu pequeno Fracki está E isso nos coloca em 5:50, então o próximo salto nos colocará em 600 Então aí está. Depende de você se você quer fazer 40 ou 50 aqui, o que basicamente se resume a se você quer ou não contar isso como principal ou contar esses dez como principal. E eu só lembro que provavelmente deveríamos colocar cinco sapos lá para realmente testar isso Então, eu poderia seguir em frente e seguir em frente. Aqui está o vídeo desta parte, só para que possamos inserir cinco. Eu estou bem. Eu já passei por isso. Eu fiz minha volta várias vezes com cinco sapos e continuei, obtivemos 4.800 pontos Incrível. Parece estar funcionando perfeitamente bem. Um sistema de pontuação funciona. Temos nossos mais 40 ou mais 50, dependendo de como você configurou o seu se você vai ou não contar a etapa extra como parte de seus 50 ou se você deseja fazer um adicional de 50. Temos nossos dez pontos por etapa aqui e temos nossos mais 1.000 toda vez que obtemos cinco sapos múltiplos Toda vez que resgatamos cinco desses gases de sapo. Tudo bem Então, configuramos nossa pontuação. E acho que, a seguir, podemos dar uma olhada em como exibir isso e começar a nosso heads-up display ou Hud ou Gooey 38. Pontuação HUD de jogos: Tudo bem. Vamos começar a criar o jogo Hud for our Well, game Hoje, vamos seguir em frente e colocar a pontuação aqui na nossa tela. E para isso, fui ao MNTD e adicionei uma camada de Canvas Se eu pudesse entrar aqui, a camada Canvas é o que estamos procurando, não o Canvas grow. E a camada Canvas basicamente será tudo o que está no topo do nosso jogo, não importa onde esteja em nossa cena. Então, como você imagina, é onde vão todos os seus elementos quentes. Então, se você estiver jogando como Dark Souls, é aqui que seus quatro quadrantes estão no canto inferior esquerdo, por exemplo, se você estiver jogando Sky Rim, seus três pontos de vida, resistência e Wallaby matabar na parte inferior, e assim por E para nós, basta fazer a partitura aqui, na minha camada Canvas, que eu renomeei para Gooey Significa interface gráfica do usuário. Fui em frente e adicionei dois rótulos, dois rótulos apenas normais aqui. E eu o chamei de rótulo de pontuação, que contém apenas a palavra pontuação, e texto de pontuação, que tem apenas cinco zeros Agora, os textos de ambos eram grandes demais para este projeto. Então, em ambos, fui até o inspetor até o tamanho do Monte dos Filmes, e minha partitura está no tamanho dez, e a etiqueta da partitura está Agora, você pode notar que eu tenho uma barra preta extra na parte inferior. Entrei nas configurações do projeto e na janela de exibição. Fui em frente e atualizei a altura da minha janela de visualização 240-256. Aí está. Você pode ver isso lá. Então eu adicionei mais 16 pixels, para que eu pudesse adicionar o preto na parte inferior, porque é aí que nossa barra de saúde vai acabar ou nossa barra de vidas. No próximo vídeo. Tudo bem. Então, uma vez que temos nossos dois rótulos aqui em nossa camada Canvas para a partitura, e você não consegue descobrir onde alterar o texto para isso, basta selecionar seu rótulo e entrar no inspetor na parte superior Você verá a seção lá para ver o texto. Basta digitar a pontuação de um e colocar cinco zeros. Para o outro. Isso nos dará uma boa ideia da quantidade de espaço que precisaremos. Tudo bem, agora para fazer isso funcionar, tudo o que precisamos fazer é adicionar uma linha ao nosso script global aqui. E fora do nosso eu e do nosso quarteirão. Portanto, fora de ambos, independentemente da quantidade de pontos que adicionamos, precisamos obter nosso rótulo de texto de pontuação e configurar o texto para realmente exibir nossa escola. Então, como estamos vindo do nosso script global, se eu prosseguir e executar isso por um momento e depois pausar, mudar para remoto, mudar para remoto, você pode ver que o Global está aqui Ele não tem acesso a nada. Então, temos que realmente subir na árvore uma vez para criar raízes e depois descer até nosso número dois D e depois descer até nosso Dewey E então, a partir daí, podemos pegar nosso texto de pontuação. Então, como temos que subir e depois descer, podemos seguir em frente e usar get node. E lembre-se de que isso usa uma string como argumento. E, como você pode ver, poderíamos simplesmente escrever o caminho inteiro, ShrootGlobal, slash root, slash node two Mas mesmo assim, como subimos apenas um nível, ainda é mais rápido se fizermos dois pontos apenas para subir um, e depois descermos ao nosso nó dois D. E, a partir daí, acessamos nosso GY A partir daí, obtemos nosso texto de pontuação. E se você está se perguntando, estamos apenas seguindo essa linha branca para baixo. Então, do nosso global aqui, onde estamos escrevendo esse código, temos nossos dois pontos, que são o mesmo que escrever, get parent, então subimos um até a raiz E então somos apenas tapinhas seguindo cada parada, como esta linha branca Vemos essa linha branca descendo e depois entrando, apontando para não duas D. Isso é o que escrevemos lá. Em seguida, seguimos a linha novamente, paramos e apontamos para o GY. Escrevemos isso para a próxima parada, depois descemos e finalmente apontamos para o nosso texto quadrado e terminamos aí. Então, sempre que tiver dúvidas, clique no Node que você está procurando e siga a linha branca para seu caminho. Tudo bem. Então, neste texto de pontuação, à direita, nesse objeto do tipo rótulo , acessaremos a propriedade de texto dele e deixe-me tirar o jogo da tela. Eu apenas olhei e vi que estava coberto. Novamente, usamos dois pontos, mesmo que get parent, que nos leva até o nó raiz, e simplesmente seguimos essa linha branca que desce, aponta para e simplesmente seguimos essa linha branca que desce, o nó dois D, desce, aponta Guy, depois desce e aponta para o texto quadrado, e estamos apenas seguindo esse caminho aqui até o E nós queremos a propriedade de texto dela, e vamos definir isso. Vamos ajustá-lo à nossa pontuação. No entanto, se fizermos isso, todos esses zeros desaparecerão E, como você vê, não podemos realmente fazer muito com a pontuação nesse aspecto. Então, o que vamos fazer é transformá-la em uma string com STR e, em seguida, dois parênteses, e podemos escrever nossa partitura E essa pontuação agora será tratada como uma string em vez de um número inteiro Então, agora podemos fazer ponto, adicionar e preencher com zeros E passamos o número cinco, teremos cinco dígitos, como vemos aqui, um, dois, três, quatro, cinco Então, vamos ter esses 50 slots. E nossa pontuação vai mudar, mas mesmo que diga apenas dez, ainda teremos todos esses cinco slots disponíveis para nós. Então, visualmente, ficará exatamente como seria em um fliperama e em um sistema de pontuação típico Então, se continuarmos jogando isso agora, podemos ver nossa pontuação lá no topo. E se dermos uma volta, veremos nossa pontuação aumentando como deveria. Há muitos carros lá em cima. Ooh. Lá vamos nós. Vamos acompanhar isso por muito tempo. Aqui vamos nós. Vamos pegar alguns pontos. Monte no tronco, monte nas tartarugas, monte no tronco. E podemos montar nas tartarugas, montar no tronco e pular para casa livres Mas tudo bem, então nosso sistema de pontuação parece estar funcionando perfeitamente bem. Está sendo exibido com precisão. É fantástico. Tudo bem. Então, a última coisa devemos fazer neste momento é, neste vídeo, nada, mas no próximo vídeo, vamos seguir em frente e configurar nossas vidas de forma que, quando morrermos, perderemos uma vida, e isso será refletido visualmente na tela, mostrando quantas vidas realmente nos restam. 39. Vidas com HUD em jogos: Tudo bem, vamos continuar e acrescentar nossas vidas. Agora, nossas vidas terão no máximo seis vidas aqui. E vamos entrar em nossa camada de tela Goey. Vamos adicionar um novo nó. E eu sei que isso não é visível, apenas 2 segundos aí está. E vamos pesquisar a palavra textura. Estamos procurando a barra de progresso da textura. Tudo bem, vou renomear o meu para o bar Lives. Vou passar para a seção de texturas no inspetor E para o progresso, vou mover o Healthbr dot PNG para esse slot Defina o valor máximo, novamente, no inspetor para seis Vou definir meu valor atual para seis, e agora você deve vê-los. Vou pegar essa pequena alça laranja e puxá-la para cima para que ela ocupe apenas o espaço que precisamos, e vou trazê-la direto para o fundo, para aquele espaço preto vazio. Yo. E essas vão funcionar como nossas vidas. Então, você verá que, à medida que ajustamos os valores de 6 a 5, divididos uniformemente, para que possamos determinar facilmente quantas vidas ainda temos O seis, é claro, será nosso padrão, e precisaremos ajustá-lo toda vez que realmente morrermos Então, no meu mundo global, novamente, talvez um nome de gerente de jogo fizesse mais sentido, mas, por enquanto, vamos sair com isso. Vamos para o Livest, por padrão, seis. Vou criar outra função, atualizar o Lives à toa. E vamos seguir o caminho do Sad. Só que em vez de um Scortex, obteremos a barra do Live e acessaremos a propriedade value aqui que podemos ver no inspetor E vamos dizer que mais é igual a quantidade. Um valor será um parâmetro que passaremos, que será um fim, certo? Então, quando perdemos uma vida, vamos adicionar menos um a ela, que fará com que ela caia para cinco. E também nos dá a capacidade de adicionar vidas no futuro simplesmente colocando uma vida positiva para ganhar uma vida. Mas também atualizando isso, na verdade também temos que atualizar nossas vidas, a mesma coisa mais igual E agora podemos ir até nosso jogador. Podemos procurar nossa morte. Aí está. Sobre a morte. Também precisamos acessar nosso script global, atualizar Lives e passar um negativo, e isso deve bastar. Coisa muito simples e pequena de se fazer. E agora, quando morremos na tela, devemos perder uma vida, e devemos ver nossa guerra de vida lá embaixo, cair para cinco. E eu preciso puxar isso para cima porque vocês não conseguem ver o fundo lá embaixo. Aí está. E vamos ver se caímos para cinco. Lá vamos nós. Nós respingamos. Eu corri para a traseira daquele carro. Além disso, eu estava vendo e você só ganha pontos quando avança em Frogger, e perdemos vidas quando entramos na água também Assim, podemos prosseguir e atualizar isso, se você desejar. Se você quiser que seja um pouco mais preciso. Só vamos atualizar a pontuação quando pressionarmos para cima. Abaixo, para a esquerda e para a direita, não nos darão nenhum pino. A única pressão para frente, o que faz sentido, porque muitos pontos que você pode ganhar rapidamente. Dom, d d, d m. Onde estão meus registros? Onde eles estão? Aí estão eles. Indo. Agora, nós os montamos com as tartarugas Doi, doomy, doom. Salte sobre a tartaruga. Eu ia pegar o tronco, mas senti que ia perdê-lo, então fiquei, pulei no tronco aqui. Então não pule sobre essas tartarugas e chegaremos em casa livres neste tronco Nós somos bons. Vá bem. Incrível. Lá vamos nós. E, novamente, podemos perder calor vivo. Legal. Portanto, nosso sistema ao vivo funciona. Ele é atualizado visualmente na tela e temos a capacidade de adicionar algo em nossas vidas no futuro. Tudo bem Então, acho que isso bastará para esta seção, a menos que você queira adicionar ao vivo quando começarmos a estudar. Você quer fazer isso? Tudo bem Então, se você quiser ganhar vidas extras ao atingir uma determinada quantidade de pontos, aqui está o que vamos fazer. Vamos criar uma variável chamada multiplicador. E dentro da nossa pontuação de atualização, vamos realizar um novo I check aqui. Então, vamos dizer que eu pontuo dividido pela pontuação dividido por, podemos dizer 10.000, você quer? Vezes que nosso multiplicador é maior ou igual a um. Então é aqui que vamos adicionar algo às nossas vidas. Então, precisaríamos viver vidas. E normalmente diríamos que mais é igual a um, mas como queremos tocar em seis, o que realmente vamos fazer é dizer vidas iguais e vamos usar uma função chamada Agora, o grampo permite que você tenha três argumentos aqui. O primeiro argumento é o que você acrescentaria. Então, em vez de mais igual a um, nosso primeiro argumento aqui será E então, o próximo argumento , será o mínimo e o máximo que esse valor pode ser. Então, o mínimo, pode ser zero, então nossas vidas nunca ficarão abaixo de zero aqui. E o número máximo que podemos ter é seis, então nunca será um número maior do que seis. E é assim que a fixação funciona. Aqui podemos chamar Update Lives com um, certo? Então, teremos um mais um para adicionar a isso. Hum, você sabe o que? Na verdade, podemos simplesmente mover nossa pinça até aqui dentro de nossas vidas de atualização e substituir uma por uma quantidade E então provavelmente podemos escapar sem ter nada lá dentro, sem instalá-lo lá, mas apenas prendê-lo lá embaixo Então, atualize vidas uma. E então vamos querer aumentar nosso multiplicador, mais igual E a razão pela qual queremos fazer isso é porque, se não o fizermos, ganharemos constantemente uma vida, porque nossa pontuação sempre será divisível. Uma vez que ganharmos uma vida, toda vez que nos mudarmos, continuaremos ganhando Então, queremos mudar isso para se obtivermos uma vida a cada 10.000 pontos, obteremos 10.000 10.000 vezes uma ainda será 10.000. E na próxima vez, serão 10.000 vezes dois. Então, precisaremos de 20.000 pontos para ter uma nova vida, e então serão 30.000, 40, etc Então, se fôssemos correr isso agora com apenas isso, podemos ver se entramos, perdemos uma vida, talvez até perdemos duas. E agora só temos que subir passar por todo esse tráfego. Vá, vá até este tronco. Então podemos montar nas tartarugas, tronco de tartaruga, novamente, transferir para Espere que esse registro chegue até aqui, e então, se nossa pontuação fosse alta o suficiente, deveríamos obter 10.000, W eu não a alterei. Agora, eu pensei sobre isso? Então, isso é um pouco decepcionante. Mas podemos verificar isso rapidamente apenas indo ao nosso espaço eólico e diremos: Ei, ganhamos 20.000 Agora, se fôssemos verificar se ganhamos pontos cada 10.000, esses 20 não deveriam fazer nada. Eu deveria nos dar a única vida. O que é bom? Porque você nunca deveria ter como 20.001 de qualquer maneira. O máximo que você deve obter de uma vez será 10.000. O que você vê à medida que avançamos? Bum, bum. Estamos quase lá. Devemos ver nossas vidas na base aumentarem mais uma. E lá vamos nós. Então, nossas vidas aumentaram. Tudo bem, então nossas vidas agora estão funcionando. Então, vou prosseguir e redefinir isso para 40 pontos. E queremos ter certeza de que podemos acabar com o jogo. Mas acho que isso acontecerá em nosso sistema global , Update Lives. E vamos seguir em frente e ver, isso nos permitirá ter menos um, uma chance? Não, não será. Isso é perfeito. Não precisamos nos preocupar com isso. E podemos dizer que eu vivo menos do que realmente, não precisaríamos. Já estamos configurando isso aqui. Então, verificamos com antecedência. Então dizemos que I lives é menor que zero, na verdade já sou zero. Digamos que não temos mais vidas e depois morremos. Estamos ultrapassando outro negativo. Estamos dizendo que se nossas vidas já são zero, então teremos, digamos, jogo, mas vamos apenas recarregar a cena em um jogo totalmente novo Se nossas vidas ainda não são zero, então vamos vir até aqui e vamos subtrair nossa vida E para isso, usamos apenas Get three reload current scene, e isso será o mesmo que se tivéssemos acabado de começar a cena assim Então, se escrevermos em Nossas vidas não estão sendo reiniciadas. Provavelmente porque eles não são reinicializados no Global. Vamos descobrir. Vamos entrar em nossa preparação e dar uma olhada em como depuramos isso, vou dizer imprimir Vidas. E veremos se isso é reiniciado. Estamos sendo esmagados. Na verdade, nunca estamos nos preparando de volta. Ele se reinicializa constantemente, certo? Então, em vez de estar pronto, vamos imprimi-lo aqui. Tente descobrir por que terminamos constantemente? A. Ele reinicia depois de duas. Como vamos 6-0 Tudo bem. Não sei por que, mas a pinça parece ser o que estava causando a quebra, o que é interessante porque não há nenhuma razão real para que eu pudesse dizer que ela deveria ter saltado de seis vidas para se decompor para Mas tudo bem. Acabei de mudar volta para Lives plus equals amount. E agora, se rodarmos o jogo, veja se podemos enfrentar ou voltar a perder vidas, uma de cada vez. E quando descemos, reduzimos para três vidas, duas, uma. Opa, O. Vamos lá. E na água. Bem, estamos sem vida. Então, na próxima vez que formos atingidos , o jogo terminará e nosso jogo será reiniciado. E aqui vamos nós. Recebemos uma reinicialização do nosso jogo, encontramos rapidamente e podemos voltar a perder vidas novamente. Mas aí está. Nós temos essa reinicialização. Agora perdemos vidas e exibimos na tela forma adequada quando nossas vidas estão muito baixas Reiniciamos completamente o jogo e começamos de novo, além de ganharmos vidas toda vez que recebemos 10.000 moedas 40. Cronômetro e bônus: Tudo bem, vamos ligar nosso cronômetro agora. Então, em nossa interface gráfica, acabei de adicionar outro rótulo aqui embaixo com a palavra hora com um tamanho de fonte de substituição definido como 12 Em seguida, tenho uma barra de produtos de textura, assim como fizemos com nossas vidas aqui Eu mudei o modo de filme da direita para a esquerda em vez da esquerda para a direita. Também vou renomeá-la aqui para barra de cronômetro. Meu valor máximo é 30, meu valor atual é 30. Todo o resto permanece o mesmo. Apliquei nove remendos para poder esticar essa barra para ter a forma e o comprimento que eu quiser. Estou apenas usando o cronômetro PNG de pontos que tenho aqui. Eu apenas o arrasto como barra de progresso ou textura de progresso. E aí está. Eu apenas estico e coloco lá embaixo para algo que pareça bom. Eu também tenho um cronômetro que adicionei aqui com um script no meu Guy e o sinal de tempo limite aqui conectado a ele Então é isso que estamos vendo aqui. E o que precisamos fazer toda vez que esse cronômetro expirar por padrão, o cronômetro está configurado para 1 segundo, o que é bom É isso que queremos. O que queremos fazer se quisermos obter nossa barra de cronômetro e precisarmos subtrair uma do valor Então, podemos ir em frente e pegá-lo com nosso cifrão aqui. Você entendeu? Como isso vem de Mark Bouie, valor menos é igual a um E agora, se fôssemos dar uma olhada e executar isso, agora veríamos nosso cronômetro passando , o que é lindo Isso é exatamente o que queremos. E agora temos que verificar. Precisamos verificar se nosso cronômetro, o valor da barra do cronômetro, atingiu zero e, em caso afirmativo, infelizmente, nosso pequeno sapo tem que morrer. É assim que acontece quando nosso cronômetro acaba. Então, vamos pegar nosso pequeno sapo get node. E lembre-se, estamos no nosso ie aqui, então teremos que subir um para o número dois D e depois voltar para baixo. Então, coloque uma camada de ponto e barra, e vamos ativar nossa função de morte Opa, e isso deve ser dois iguais porque é uma comparação Sim. Então, se fôssemos executá-lo agora, quando nosso cronômetro acabar, nosso sapinho simplesmente espirra e perdemos uma vida em e perdemos uma vida Sabe, espere um minuto para o cronômetro funcionar. Agora, tendo esse tempo, você está aqui em 30 segundos. Vejo que minhas plataformas superiores precisam ser um pouco mais rápidas ou, pelo menos, um pouco menores de atraso. Mas acho que a velocidade pode ser a melhor opção em vez de alterar o atraso. Mas lá vamos nós. Meu sapinho morreu e continua morrendo. Isso não é ótimo. Precisamos realmente redefinir isso agora. Então, quando chegar a zero e nosso sapo morrer, vamos reiniciar nossa barra de cronômetro Então, vamos pegar a barra do cronômetro e definir seu valor volta para 30 para que possamos preencher uma nova barra Agora, esse não é o único momento em que ele precisa ser reiniciado. Ele também precisa ser reiniciado quando atingirmos a meta. Então, vamos pegar o node, subir um, pegar nosso Guy, pegar nossa barra de cronômetro e definir o valor de volta para 30. Tudo bem. Agora, antes de testar isso, vou entrar na minha plataforma aqui e vou mudar isso para 32 e dobrar essa velocidade. E isso significa que eu tenho que ir até o meu player e ajustar isso. Bem, lá em cima. É quando estamos aqui, 32. Vá. Então, agora eles devem pelo menos se mover mais rápido, e espero que eu possa continuar sem errar Ok, aí estão as tartarugas. Precisamos de alguns registros. Obrigada. Registro. Não sei se vou fazer. Eu não vou sobreviver. Vou perder meu sapo. Adeus sapo. Eu mal conhecia você. Vejo que isso vai ser um pouco difícil. Oh, nosso tempo recomeça ou não quando respingamos? Isso não acontece. Então, precisamos definir isso também. Então, no nosso player? Onde é que morremos? Aí está nossa morte, e nós reaparecemos. Sim. OK. E, sim, vamos nos aprofundar aqui. Então, novamente, vamos subir e depois voltar para a voltar barra do cronômetro e definir o valor de volta para 30 Dessa forma, quando morremos, isso se reinicia. E acho que vou alterar ou reduzir o respawn, o valor do patrocinador, a chave inglesa da plataforma e removerei o sinal de mais seis, para ver como fica agora, já que temos OK. Está tudo bem. Talvez possamos realmente fazer isso agora. Lá vamos nós. Nós reiniciamos nosso cronômetro e, quando morremos, nossos cronômetros também são reiniciados Fantástico. E eu posso ver que ainda preciso de um pouco de impulso, meu mínimo. Então, vou fazer 3 segundos só porque vi uma grande sobreposição quando passei por lá Mas vimos que o cronômetro está funcionando perfeitamente bem agora. Eu sei que sim, ou pelo menos você deveria receber um bônus no que diz respeito aos pontos , com base em quanto tempo resta para marcar. Então, vamos seguir em frente e implementar isso. Além disso, eu só tenho que me reativar com o que é o multiplicador Eu sei que é algo vezes a quantidade de tempo que resta. Então me dê 1 segundo lá. Tudo bem. É dez vezes o tempo restante que resta. Então, vamos ver. Quando chegarmos ao nosso espaço eólico antes de reiniciarmos , precisamos atualizar a pontuação aqui novamente porque vamos adicionar 40, mas também vamos adicionar o que sobrar aqui. Nós vamos dizer, na verdade, você sabe o que? Vamos colocar isso em sua própria variável aqui. Chamamos isso de bônus, não de bônus de dez, em bônus. Claro que é um int. Quero configurá-lo para esse valor vezes dez antes de reiniciarmos. Agora, em nossa segunda pontuação de atualização aqui, cumprimos a pena. Tudo bem. Então, agora devemos ter nosso bônus de tempo lá. Então, quanto mais rápido chegarmos lá, maior será o bônus que receberemos até máximo mais 300 pontos Hipoteticamente, quero dizer, você não vai chegar lá aos 300 ou 30 segundos restantes porque começa aos Oh, talvez eu nem chegue lá. Talvez eu esteja perto. Ah, entendi. Mas você pode ver que eu tenho 190 pontos nessa. Tudo bem. Então, vamos lá. Temos o cronômetro lá, bem como as mortes quando o cronômetro acaba e o bônus de pontuação quando ainda temos o cronômetro restante, e chegamos ao fim Tudo bem, então é isso. Acho que pode ser isso ou Frogger. Acho que não estou esquecendo nada aqui. E se esse é o fim de Frogger, parabéns. Você chegou até o fim. Isso é incrível. Espero que vocês tenham aprendido muito. Analisamos muitas coisas ao longo deste projeto. Variáveis, os globais, trabalhando com muitos scripts diferentes Mas recriamos completamente esse jogo antigo dos anos 80 E o que é ótimo nesses jogos antigos eles têm um conceito bastante simples. Mas, especialmente se você é novato em programação, há muito que você pode aprender com esses jogos. Tudo bem. Cuide-se. Tenha um bom dia, e nos vemos na próxima semana. Em que estamos entrando? É a quarta semana agora? Oh, cara, a quarta semana vai ser divertida. Temos muitas coisas sobre as quais conversar. 41. Áudio do Frogger: Tudo bem, vamos continuar e adicionar o áudio para nós Então, isso vai contar nossos saltos quando nos movemos, a música de fundo e os sons da morte em arco Tudo bem. Então, para nossa música de fundo, podemos simplesmente entrar em nossa cena principal aqui, selecionar nosso nó raiz, que é o número dois D. Vá em frente e aperte o sinal positivo ou adicione um novo nó. E o que vamos adicionar é esse reprodutor de tela de áudio aqui. E então vamos entrar na nossa pasta de sons, pegar a música.p3 e arrastá-la para lá Certifique-se de ativar a Reprodução Automática. Dessa forma, não precisamos desperdiçar um script e escrever qualquer código para jogar. E ele começará sozinho. Agora, aviso, isso pode estar um pouco alto ao iniciar. Portanto, se você quiser ajustar o áudio apenas para a música aqui, altere o volume DB aqui. Quanto mais baixo você colocar, mais silencioso será. Zero é o padrão para todos eles. No entanto, se você quiser diminuir a música de todo o áudio de uma vez, clique na pequena guia de áudio na parte inferior, e aqui está todo o seu barramento de áudio. Agora temos o mestre aqui, que se você alterou as configurações de áudio e os jogos antes, percebe que tem o controle deslizante principal Isso é o que está aqui, e podemos mudar o volume disso para o que quisermos. Se você quiser adicionar um barramento de áudio diferente, para poder personalizar seus efeitos sonoros da música separadamente, basta clicar no barramento de adição aqui e renomear isso para música E agora, com nosso reprodutor de streaming de áudio selecionado, você notará na seção de ônibus aqui em seu inspetor que agora temos uma peça musical aqui no menu suspenso, e agora essa música virá primeiro por essa peça de áudio e depois será enviada para o master, como seria de esperar Tudo bem, então depende de você o que você quer fazer. Vou seguir em frente e baixar minha música para talvez 0,6. Não tenho certeza. Vou me certificar de que vocês sejam realmente capazes de ouvir isso. Espero que isso não machuque os ouvidos de ninguém. Vou clicar em play e descobrir. Tudo bem, então parece que é mais silencioso do que eu. Então, vou assumir que está tudo bem. Mas se você quiser, você sempre pode baixá-lo um pouco mais. Acho que vou escolher menos dez aqui. E agora o resto do nosso som realmente estará no nosso player, nosso player morrerá. Nosso jogador tem a chance de pular. Nosso jogador tem outro efeito sonoro que é a morte, certo? O molho, o mole e o calor. Então, vamos passar para nossa cena de jogadores. adicionaremos um reprodutor de streaming de áudio para eles. E não vamos tocar em mais nada no inspetor, a menos que você queira adicionar um barramento de áudio para efeitos sonoros e depois alterar o barramento especificamente Isso depende de você. E, novamente, uma preferência pessoal. Mas depois de adicionar um reprodutor de streaming de áudio à cena do player, podemos acessar o script do player. E o que precisaremos fazer é definir o fluxo de áudio carregando o arquivo de áudio e, em seguida, reproduzi-lo. Então, o que eu vou fazer é acessar nossa função Deth primeiro, e ela vai ter um ID passado para ela Obviamente, o ID será um número inteiro porque obteremos dois ou três Então, vou chamar um departamento de TI e, por padrão, defini-lo como igual a dois. E a razão pela qual estou usando dois é que, se voltarmos ao nosso mapa de blocos e dermos uma olhada nele, nosso caminho é ID dois. Então, por padrão, deve ser nossa estrada, então deve ser um pouco confuso. Então, o que vou fazer aqui é se vamos comprar nosso reprodutor de streaming de áudio. Portanto, queremos essa propriedade de fluxo de pontos do player AudioStream queremos essa propriedade de fluxo de pontos do player AudioStream Você está no nosso player, certo? Aquele stream aqui. E vamos defini-lo igual a, e vamos chamar load, parênteses abertos e fechados e dentro daqui estará o caminho para o Então, dois será nosso padrão, então esse será nosso squish, então eu vou pegar squash dot Wav, squash dot wave da nossa pasta de sons e arrastá-la para lá da nossa pasta de sons e Dessa forma, eu não preciso escrevê-lo. E agora o que faremos é, na próxima linha, dizer que I ID é igual a três. Então, três, lembre-se de ser nossa água. Então, se estivermos morrendo e estiver na água, faremos a mesma coisa que fizemos na linha anterior e configuraremos nosso stream e carregaremos em um novo arquivo. Desta vez, configuramos o squash, vamos carregar em plunk e, fora dessa instrução if, tudo o que vamos fazer é reproduzir nossa transmissão Então, vamos dizer reprodutor de stream de áudio dot play. Exatamente desse jeito. Agora, se seguirmos em frente e nos colocarmos na estrada, devemos ter um efeito sonoro, e se formos pular na água, devemos ter Ok. Por enquanto, vou continuar e desligar a reprodução automática da música para que possamos ouvir Está bem? Se pularmos na água. Ok. E se formos atropelados por um carro? Ok, temos o mesmo áudio tocando em ambos. Bem, isso é um pouco interessante. Por que isso? Bem, aparentemente, não estamos passando nenhuma identificação para três, então nunca serão três. E a razão para isso, lembre-se, temos que descer e verificar a identificação do celular, na verdade estamos verificando se nosso sapo está se afogando Então é isso que temos que passar três para a nossa morte. Agora, não saiu do ar porque dissemos que, se não passarmos nada para dentro, usamos dois por padrão, mas como queremos especificamente um ID de três sempre que estivermos na água, precisamos nos certificar de passá-lo aqui em nossa função de verificação de ID da célula. Então, agora, se fôssemos fazer isso, deveríamos mergulhar na água, certo, certo E esmagado na estrada. Aqui vamos nós. Então, sabemos que está funcionando perfeitamente bem. E a única coisa que nos resta é fazer nossas compras. E, para isso, isso estará em nosso movimento, onde podemos verificar nosso fluxo de áudio e configurá-lo. Então, o fluxo de pontos do player de streaming de áudio é igual a carga, e vamos pegar nosso efeito de som pop e arrastá-lo Vá. E na próxima linha, podemos simplesmente reproduzir nosso áudio. É um reprodutor de streaming de áudio. Vá jogar. E podemos copiar isso em cada botão pressionado aqui. Então, se estiver inativo, podemos fazer isso. Boom, é para a esquerda e se for para a direita. Agora, se jogarmos, devemos ser capazes de pular. Opa Vamos entrar em nossa cena principal. E tente isso. Para baixo. Nós podemos pular para baixo. Então seja esmagado. Para baixo. Bem como no chão na água. Para baixo, para baixo, para baixo, para baixo, para baixo, para baixo, para baixo, para baixo, para baixo. Para baixo, incrível. Agora, tudo o que precisamos fazer é ligar a música novamente. Então, em nossa cena principal, reprodutor de streaming de áudio, reprodução automática, ligue novamente E assim, temos o jogo Frogger completo com nosso áudio e Obrigado Obrigado, fui atropelado pela traseira do carro, mas aí está. Adicionamos som a ele e agora nosso jogo parece muito mais completo. R, não há mais nada que possamos realmente fazer aqui. Você pode se sentir à vontade para adicionar mais informações. Você pode tentar adicionar captadores. Você pode encontrar novos sons e substituí-los. Talvez, se você quiser criar seus próprios sprites e usá-los para alterá-los um pouco, torne-os um pouco mais personalizados para você Ou se você quiser mantê-lo como seu próprio pequeno remake de arcade, isso também é incrível Mas isso bastará para este. Então, cuide-se e tenha uma boa noite, tapinhas nas costas com um sapo completo e, na próxima semana, acho que começaremos a falar sobre algumas das diferenças e semelhanças entre dois D e três D e três D e 42. Transição do trabalho em 2D para 3D: Tudo bem. Sejam bem-vindos a todos nesta semana, onde falaremos sobre nossa transição de dois D para três D. Portanto, como desenvolvedores de jogos, é importante entender os desafios e oportunidades únicos que surgem quando trabalha em um espaço tridimensional, vez de em duas dimensões. Para ilustrar isso, desculpe, vamos voltar em um momento. Ao fazer a transição do desenvolvimento de dois D para três D, há vários aspectos importantes a Vamos falar sobre a diferença fundamental de perspectiva. Em dois D, trabalhamos com objetos e camadas planas. Como você pode ver no nosso exemplo, no lado esquerdo aqui, tudo é realmente plano. É só uma questão do que está na frente ou do que é renderizado na frente do quê, certo? Assim, podemos obter camadas diferentes, como quando você está trabalhando em algo como o Photoshop, algum tipo de manipulador de imagens ou editor de imagens I Bem, em três D, os da direita, introduzimos profundidade e relações espaciais entre objetos. Então você pode ver completamente que temos essa terceira dimensão nos dois lados D. Não podemos ver o chão aqui. Só temos a lateral dessa barragem ou ponte ou o que quer que seja em que ele esteja. Bem, em três D, podemos ver essa profundidade atravessando o topo. Vemos a profundidade desse braço vindo direto em nossa direção com aquela extremidade pontiaguda versus nos aquela extremidade pontiaguda versus nos dois D, onde ele está claramente se movendo para baixo na tela E, novamente, com profundidade, você pode ver na parte superior onde você pode tentar simular esse tipo de sensação com duas dimensões No entanto, em três D, você pode obviamente dizer que simplesmente não há comparação. É óbvio qual deles realmente tem profundidade e qual não quando analisamos o exemplo principal. Para ilustrar essa transição, novamente, você pode dar uma olhada em nossos exemplos aqui, duas capturas de tela, uma das duas versões D e outra das três versões D. Nesse caso, estamos usando Mega Man, que é um jogo de plataforma lateral. E aqui isso o ajudará a imaginar transformar esse jogo de dois D em três D. Você pode ver exatamente o tipo de diferença que isso Só de decidir se devo usar dois D ou três D, os estilos de arte são completamente diferentes e se destacam de forma única Agora, com esse ambiente The D, precisaríamos criar três modelos D para os personagens, as plataformas e todos os outros objetos na cena, o que poderia consumir muito mais tempo do que, é claro, se optássemos pela opção de dois D. Com dois D, nós meio que desenhamos e estamos bem. Nós terminamos. Já em três D, nós meio que temos que pegar esses modelos, e então temos que desembrulhar o modelo, e então temos que criar as texturas para o modelo, e então temos que criar o material para o Então, temos todas essas etapas antes mesmo de podermos colocá-lo no jogo mais cedo para teste ou implementação, coisas assim. E também temos que introduzir uma câmera que normalmente em três D, quando não é apenas algo estacionário, como o que parece ser uma luta de chefe na parte inferior, ela tem uma câmera que se move com o jogador, seja se movendo em um espaço completo de 360 graus, que poderia acontecer nessas três versões D. Ou se eles simplesmente permanecerem mais estacionários na lateral para nos dar mais dessa sensação de rolagem lateral, como estamos vendo claramente aqui Agora, como você pode ver, a transição de dois D para três D requer uma mudança na forma como pensamos sobre o desenvolvimento de jogos Precisamos considerar as dimensões espaciais, percepção de profundidade, o movimento das câmeras e a modelagem de objetos. Isso abre um novo mundo de possibilidades para a criação jogos envolventes e visualmente impressionantes, embora algumas pessoas prefiram dois D a três D na maioria das vezes Portanto, lembre-se de que o tipo de jogo que você está criando pode ser melhor ou funcionar melhor, seja para a visão ou mecanicamente, seja o que for, em dois D do que três D ou pode funcionar melhor em três D do que em dois D. Então, aí está com a transição de dois D para três D, precisamos entender essas diferenças e desafios surja durante esse processo de transição e você estará bem preparado para embarcar em três projetos empolgantes de jogos em 3D Lembre-se de praticar e sempre experimentar várias técnicas para ajudá-lo a ganhar confiança para trabalhar nessa nova dimensão do desenvolvimento de jogos. Tudo bem. A seguir, na próxima lição, falaremos e ajudaremos você a entender algumas das diferenças entre dois D e três D. E depois falaremos sobre as semelhanças entre dois D e três 43. Entendendo as diferenças entre 2D e 3D: Tudo bem. Neste exemplo, hoje temos um Mortal Combat mostrado aqui, tanto o mitology side scroller quanto dois D, quase um pseudo três D, bem como as três iterações D que vieram depois, ambas com um menu em três D e um modo de armazenamento em três D que permitia que você corresse e modo de armazenamento em três D que permitia que você explorasse Agora, no vídeo de hoje, na lição de hoje, vamos falar sobre algumas das diferenças entre dois D e três D aqui. E é importante que você entenda essas diferenças, pois elas podem ser cruciais quando se trata de criar jogos de forma eficaz para ajudá-lo a utilizar os pontos fortes de cada dimensão Portanto, a principal diferença entre o desenvolvimento de jogos em dois D e três em D está na representação visual. Como você pode ver aqui, a mecânica de jogo é bastante óbvia. Em dois D, trabalhamos com duas dimensões, apenas a largura e a altura. Onde os objetos são retratados em uma superfície plana. Em contraste, três D introduzem a terceira dimensão de profundidade, como podemos ver aqui, permitindo experiência uma experiência mais imersiva e realista Então, vamos examinar algumas diferenças importantes em dois jogos D em um jogo de dois D. A jogabilidade normalmente ocorre em um único plano. Enquanto em três D, os objetos podem se mover em três dimensões para cima, para baixo, para esquerda, para a direita, para frente e para trás. Permitindo interações e explorações complexas, é por isso que temos algo como o modo de conquista no canto superior esquerdo, porque você é incentivado a sair, não apenas seguir a história, mas a explorar e fazer algumas coisas secundárias para ajudar ou desvendar alguns segredos, personagens ocultos e coisas assim, que você realmente não conseguiria em um jogo de TD E se você pudesse incluir isso, não seria a mesma experiência geral Além disso, em dois D, detecção de colisão geralmente é mais simples, pois envolve principalmente verificar se dois objetos estão Em três D, a detecção de colisões se torna mais complexa, exigindo a consideração dos limites do objeto e da superfície E, como você pode ver, entender as diferenças entre o desenvolvimento de jogos em dois D e três em D nos ajudará a fazer escolhas informadas de design e utilizar técnicas apropriadas, seja no estilo visual, mecânica de jogo ou na experiência do usuário. Adotar as qualidades únicas de cada dimensão aprimora cada qualidade de cada dimensão, Adotar as qualidades únicas de aprimora as diferenças entre o desenvolvimento de jogos em dois D e três em D nos ajudará a fazer escolhas informadas de design e utilizar técnicas apropriadas, seja no estilo visual, na mecânica de jogo ou na experiência do usuário. Adotar as qualidades únicas de cada dimensão aprimora cada qualidade de cada dimensão, aprimora a experiência geral de jogo. Portanto, lembre-se de que, se você vai usar dois D ou três D, aproveite os pontos fortes dessa dimensão Então, aqui estão brevemente as diferenças entre o desenvolvimento de jogos em dois D e três D. Ao reconhecer essas diferenças, você estará mais preparado para criar jogos que aproveitem esses pontos fortes dessas dimensões E lembre-se, é claro, experimentar várias técnicas e criativo no design do seu jogo. Tudo bem. Na próxima lição, falaremos sobre algumas das semelhanças entre dois D e três 44. Semelhanças entre 2D e 3D: Tudo bem, vamos falar sobre algumas das semelhanças entre o desenvolvimento de dois D e três D. Agora, apesar de suas características únicas, ambas as dimensões compartilham certos princípios e técnicas fundamentais. Vamos entrar e dar uma olhada. Embora o desenvolvimento de jogos em dois D e três tenham suas características e pontos fortes distintos, eles também têm várias semelhanças Em primeiro lugar, é claro, ambas as dimensões dependem conceitos-chave de programação, como variáveis, funções e lógica. Quer sejam dois D ou três D, esses princípios fundamentais de programação permanecerão inalterados Então, se você tem, por exemplo, um personagem pega um item Bem, esse personagem, você vai até o item e tocará nele ou interagirá com ele. E a lógica permanecerá a mesma, porque você a pegará, fará com que ela desapareça e , no código, você a adicionará ao inventário do jogador ou à contagem de itens colecionáveis ou o que quer que você faça com isso Essa lógica permanece completamente a mesma, sejam dois D ou três D, só será escrita de forma um pouco diferente. Em segundo lugar, a importância dos princípios de design de jogos vale para ambas as dimensões. Conceitos como interação do jogador, design de níveis e balanceamento da mecânica de jogo são elementos cruciais que impactam a experiência do jogador, independentemente de serem dois D ou três D. Então, se você é ruim em design de jogos em dois D, provavelmente ainda será ruim em design de jogos em três D. Não fará diferença em qual dimensão você está trabalhando Se você é ruim, você é ruim e tudo o que você realmente pode fazer é praticar suas habilidades, talvez pegue alguns livros e aprimore sua habilidade de design de jogos por meio da prática. Além disso, o desenvolvimento de jogos em dois D e três D envolve o uso de ativos, sejam sprites em dois D ou modelos em três D para dar vida ao mundo do jogo Seja um modelo Sprite de dois personagens ou três D, o processo de criação e integração de ativos no jogo segue princípios semelhantes de design e implementação Novamente, observe que eu disse algo semelhante, não o mesmo. Além disso, a importância da otimização se aplicará a dois jogos D e três D. Independentemente, novamente, da dimensão, os desenvolvedores precisam considerar o os desenvolvedores precisam considerar desempenho, o gerenciamento de memória algoritmos eficientes para garantir jogabilidade suave e o uso ideal dos recursos. Por exemplo, mencionei que quando analisamos Boger e corrigimos nosso problema de vazamento de memória, mencionei o agrupamento de objetos Isso é uma coisa muito importante. Isso pode ajudar no gerenciamento de nossos recursos e no gerenciamento de memória. E dependendo do jogo que você está criando, essa pode ser uma ótima maneira abordar uma situação. Então, como você pode ver, embora o desenvolvimento de jogos em dois D e três em D tenham seus aspectos únicos, eles ainda compartilham os princípios e técnicas fundamentais. E ao entender essas semelhanças, os desenvolvedores podem aproveitar seu conhecimento em todas as dimensões e criar jogos cativantes E o que é ainda mais louco é que você pode misturar os dois no mesmo jogo Talvez você possa criar o mesmo jogo duas vezes em certo sentido e dar ao jogador a capacidade escolher se quer jogar em dois D ou três D. Isso é algo que pode ser exclusivo seu jogo, especificamente, ou ter algum tipo de mecânica em que você pula entre dois D e três D. Você pode usar as multidimensões como mecânica de jogo ou apenas parte da experiência. E aí está, as semelhanças entre o desenvolvimento de dois jogos D e três D. E ao reconhecer essas semelhanças, você pode aplicar suas habilidades e conhecimentos em diferentes dimensões, tornando-o um desenvolvedor de jogos versátil Lembre-se de aprender e experimentar continuamente para aprimorar seus recursos de desenvolvimento de jogos E embora sejam semelhantes, quero observar aqui que, pessoalmente, prefiro trabalhar em dois D, prefiro trabalhar em dois D, mesmo que as semelhanças existam, e muita dessa lógica e tudo ainda seja transferido e funcione Em todas as dimensões ou dimensionalmente. É uma maneira meio estranha de expressar isso. Mas, por minha própria preferência, achei que gostaria de três D. Mas acontece que, na verdade, gosto de criar dois D. Então você pode descobrir que acaba depois de experimentar três D. Você pode descobrir que também prefere dois estilos D, ou talvez prefira três estilos D. Ou trabalhar em três D, vez de criar qualquer coisa em dois D. Portanto, não há problema em ter essa preferência, mas também é bom saber que você tem o conhecimento e as capacidades técnicas para ir entre dois D e três D a qualquer momento e reconhecer todas as semelhanças, as habilidades, a lógica e tudo o que é transferido entre as dimensões Oito. Tudo bem, vamos continuar com a próxima lição e ver algumas coisas que são um pouco mais exclusivas do três D que você realmente não consegue contornar 45. Materiais: Tudo bem, pessoal. Bem vindo de volta. Hoje, vamos falar sobre algo que é exclusivo ou, não devo dizer, tecnicamente exclusivo dos três D, que serão materiais Então, vamos explicar o que são materiais. Aqui no Goto Inge, os materiais desempenham um papel crucial na definição da aparência visual de um objeto em seu jogo, e vamos nos aprofundar nos materiais e, pelo menos, discutir os diferentes tipos de mapas de textura que estão disponíveis ao criar e aplicar materiais aos objetos Os materiais são usados para controlar como a luz interage com os objetos e como eles são renderizados Eles definem propriedades como cor, transparência, refletividade e muito mais Um dos principais aspectos dos materiais é o mapeamento de texturas, que nos permite aplicar imagens ou padrões a objetos para dar a eles aparências realistas ou estilizadas Então, vou continuar e revelar isso que você herdou Mega Man aqui e que acabei de encontrar online E antes que alguém pergunte, não, não posso compartilhar isso. Mas se você procurar na internet, provavelmente encontrará. Vou apenas selecionar o Objeto quatro aqui. E se eu abri-la, encontrarei essa especificamente como superfície zero, então ela tem apenas uma superfície. Então, um material. Se eu abrir isso, um momento, tenho que torná-lo único, para que eu possa pelo menos ajustá-lo para mostrar alguns exemplos e torná-lo único Tudo bem. Tudo bem, então, à medida que examinamos o mapa de Albedo, que está aqui Também é conhecido como mapa difuso. Por que existem vários nomes para a mesma coisa? Não sei, mas existem, então lembre-se disso se alguém disser albedo e você receber um mapa difuso Eles são a mesma coisa. E esse mapa de textura define a cor base de um objeto. Ele fornece a aparência visual primária da superfície. E como você pode ver aqui, é aqui que a textura principal é aplicada. Agora, isso afeta a cor. Então, eu sempre posso entrar aqui e mudar a cor real que está sendo aplicada sobre essa textura. Então, se eu quiser, posso vir aqui e ter um mega homem verde. Talvez eu queira mais de um mega homem roxo. Ou rosa realmente não é muito rosa lá. Podemos conseguir um mega homem vermelho. Você entendeu a ideia neste momento, certo? Portanto, o albedo é a textura e a cor básicas , que podem ser ajustadas nele Mapas normais. Vamos ver, onde eles estão aqui? Mapa normal. Aqui estamos. Agora, aqui no Gatto, você precisa realmente ativá-lo antes de aplicar uma textura E um mapa normal adiciona a ilusão de detalhes da superfície modificando os cálculos de iluminação ou cria a impressão de solavancos, amassados e rugas em uma superfície lisa sem aumentar Então, é uma espécie de isca a geometria, manipulando a luz e como ela afeta Agora, eu não sei se Mega Man pode não ter muita coisa aqui, mas se continuarmos e jogarmos com a escala, você pode ver isso aqui acontecendo, especialmente aqui na parte inferior do corpo. Voltamos à escala padrão e depois a ajustamos Você pode ver como isso está realmente afetando a forma como a luz é refletida no topo aqui O mapa de rugosidade. Agora, você também pode obter isso na forma de um mapa de suavidade, e suavidade e rugosidade Portanto, se você tem um mapa de suavidade e precisa de um mapa de rugosidade, basta invertê-lo e tudo ficará bem e vice-versa Agora, neste caso, esse mega homem, tem uma textura colorida aqui, e está usando especificamente o canal verde para isso, em vez do cinza padrão, tudo bem. Agora, o mapa de rugosidade, esse mapa de textura controla a rugosidade ou suavidade da superfície de um objeto e afeta a forma como a luz se dispersa e reflete na superfície, criando variações na criando variações Agora, eu sei que isso vai afetar um pouco o capacete, então eu vou vir aqui para mostrar isso a vocês Então, se eu fosse reduzir a rugosidade e suavizá-la, veja Isso é, tipo, super macio, recém-saído da fábrica. Isso é uma beleza ali mesmo. Esse é um capacete totalmente novo, é o que é. E, como você vê, quando começamos a voltar à rugosidade, todas essas luzes meio que se dissipam quando a atingem, em vez de refletirem nela E isso funcionou de mãos dadas com nosso mapa metálico aqui. Este mapa de textura e, novamente, eles estão usando a mesma textura para isso, mas estão usando o canal azul. E o mapa metálico aqui ou as propriedades não metálicas de um objeto e ele transforma a luz ou o nível de refletividade e brilho Então, se tivéssemos uma superfície super lisa, como você pode ver, com nosso metal totalmente levantado, parece uma bela peça de metal brilhante No entanto, se começarmos a reduzir esse metal, podemos ver que começamos a usar outros materiais, talvez como um plástico brilhante ou brilhante, Até chegarmos a um ponto em que não temos metal, o que não é realista Cada objeto tem pelo menos um pouco de metal. E meio que especular acontece com isso. Você pode ver isso lá. Então, especular pode ser algo que usamos talvez nos olhos quando queremos ter um pouco mais de brilho neles, por exemplo Ou se você tiver um objeto molhado, isso também pode ser bom lá dentro. Então, basta aumentar o metal novamente e a rugosidade voltar ao padrão E oclusão ambiental, esse modelo tem reclusão ambiental? Isso não acontece. Portanto, a oclusão do ambiente é como uma textura de sombra que você pode colocar para adicionar um pouco mais de detalhes, digamos, ao redor das bordas aqui para ter a aparência de um capacete colocado no topo da E funciona assim por dentro de todos esses pequenos vincos e fendas que seriam um pouco difíceis de entrar Mas, em geral, é isso que está fazendo. Basicamente, simula o efeito de sombreamento causado pela presença de objetos próximos ou pela oclusão da iluminação indireta e, no geral, apenas adiciona pouco de profundidade e realismo Agora, mais um mapa que eu quero examinar está localizado aqui, emissão. Agora, no mapa de emissão, há uma textura aqui, e você pode ver que está quase completamente vazio, mas há alguns objetos lá. E o que o mapa de emissão faz é que o mapa de emissão brilha. Basicamente do seu objeto. Então, se você tivesse, digamos, um personagem com um olho robótico e quisesse que esse olho brilhasse, especialmente no escuro, aqui que você faria um mapa de emissão Agora, você pode não ser capaz de dizer muito, mas é esse pequeno ponto dentro do canhão e a luz aqui Esses são os dois pontos principais que vamos observar. E se eu apenas aumentar esse multiplicador de energia, veja isso, você pode realmente ver isso agora lá e especialmente dentro do canhão Você pode ver esse brilho vermelho acontecendo quando começamos a nos aproximar de olhar diretamente, e podemos ver esse ajuste aqui quando eu o diminuo E, como você pode ver à primeira vista, é assim que a textura parece normal. E então, quando você adiciona essa textura de emissão, tudo se ilumina. Então, se você tem luzes em um objeto ou precisa de um pouco de brilho ou qualquer coisa, o mapa de emissão é o que você vai querer usar para isso Agora, temos várias outras pequenas coisas aqui que podem ser adicionadas a pequenos detalhes, como refração da iluminação, um pouco de luz de fundo, alguma dispersão no subsolo, que é como se eu não estivesse enganado, luz, a maneira como ela interage com, tipo, a Temos altura aqui. Se você quisesse mexer com coisas como essas, que eu não sei, eu não mexi com a altura Eu sei que costumávamos ter um mapa de profundidade. Temos cartazes, crescemos, transformamos. Temos todas essas coisas novas aqui que vieram com quatro. E vou mencionar algo que anda de mãos dadas com o desvanecimento da proximidade aqui Aros. Então, se aumentássemos um pouco, poderíamos ver tudo isso , vemos essas distâncias aqui e todas as coisas serão afetadas com base na proximidade de um objeto. Como você pode ver aqui, isso é algo que ajudaria desempenho, por exemplo. Dessa forma, quando você pode configurar para que, quando estiver longe o suficiente, ele simplesmente desapareça completamente Talvez algo assim, zero, dois, eu não esteja entendendo, mas você entendeu, certo? Então, você pode contornar melhor todo esse tipo de coisa acontecendo, e se você continuar, eles têm o segundo passe aqui? lado disso amadurece um pouco com tudo aberto aqui E eu não vejo a segunda passagem, o que é interessante. Mas aqui vamos nós. Temos sombras que você pode desativar, independentemente de receberem sombras ou não Temos UV um e dois, que podem ser usados porque diferentes têm coisas diferentes aqui. Próximo passe. Assim, você pode adicionar outro material diretamente sobre este. Por exemplo, essa é uma maneira de colocar uma linha negra em volta de um personagem para dar uma aparência mais animada Há algumas coisas que você poderia fazer e colocar o esboço em uma segunda passagem Aqui vamos nós. A faixa de visibilidade, isso é mais o que eu estava vendo, eu acredito. Então, diremos um mínimo de um e, em seguida, diremos que termina em dez. Então aí está. Então, à medida que nos aproximamos, o objeto entra e você sai, e o objeto não é mais renderizado, ou pelo menos essa parte do objeto não é mais renderizada Portanto, você pode ter isso em mente quando se trata de alguma otimização, especialmente se você tiver um objeto que possa estar realmente prejudicando seu desempenho Essa é a faixa de visibilidade disso. Mas isso deve envolver os materiais e os diferentes tipos de mapas de textura. Oh, devo mencionar mais uma coisa dentro dos materiais aqui é que eles os mudaram. Tudo bem. Então, agora temos todas essas opções extras, como coloração de vértices, sombreamento, transparência e todas essas coisas Então, se você quiser ter transparência em um objeto, digamos que esteja usando uma imagem PNG para sua textura, então você realmente terá que ajustar isso e configurá-lo como, acredito que Alpha, e isso não funciona com essa textura Mas, em vez de usar desabilitações, você realmente precisa ativar a transparência se quiser ter partes transparentes de sua textura ou malha, seja o que for Tudo bem, então isso abrange os materiais aqui. E espero que isso lhe dê uma melhor compreensão do que são os materiais e dos principais mapas de textura que você encontrará e que usará ao criar três jogos D. E lembre-se sempre, é claro, de experimentar, combinar mapas diferentes e ver que tipo de efeitos visuais e visuais diferentes você pode obter. Talvez você encontre algo de que goste e que tenha sido completamente criado apenas com brincadeiras Tudo bem, isso serve para esta seção ou pelo menos para este vídeo, e espero que você aprenda um pouco sobre os materiais e o que eles são 46. ILUMINAÇÃO: Tudo bem. Saudações E hoje, vamos dar uma olhada no mundo, o mundo da iluminação, e vamos falar sobre a configuração básica de três pontos que é usada quando se trata de iluminação. Agora, obviamente, quando se trata de iluminar uma cena, há muito mais envolvido. Você tem que dar uma olhada em coisas como a intensidade da luz para cada coisa individual que vai emitir luz Quantas luzes você quer incorporar nessa cena? Isso afetará seu desempenho e assim por diante. Mas, por enquanto, vamos dar uma olhada em como iluminação é um elemento crítico que pode melhorar muito a qualidade visual ou afetar a atmosfera do seu jogo. Tudo bem, a iluminação I Goto desempenha um papel vital na criação ambientes realistas e imersivos, o que pode ser dito sobre qualquer jogo E o importante é que você pode ter algo com texturas fotorrealistas e todos os seus mapas fotorrealistas prontos lá Mas se não puder ser renderizada bem o suficiente ou se sua iluminação não for boa o suficiente, mesmo sendo fotorrealista, talvez ainda não pareça realista Portanto, a iluminação é tão crucial para seus materiais e sua cena geral quanto, digamos, o sombreamento em um desenho Eu posso transformar completamente o que você está vendo. iluminação também ajuda a definir o clima, enfatizar os elementos importantes e dar vida ao mundo do jogo. Agora, ao trabalhar com iluminação, há vários aspectos importantes a serem considerados, como as fontes de luz, as sombras e as propriedades da luz Uma técnica popular é a configuração de iluminação de três pontos, que envolve o uso três luzes colocadas estrategicamente ao redor do objeto para obter uma iluminação equilibrada e visualmente atraente Agora, aqui nesta cena que estamos vendo, eu só tenho um mega homem aqui da seção de materiais. Mais uma vez, acabei de entrar na Internet e acabei de encontrar esse modelo. Apenas online, ele estava gratuito para download. E você pode ver, mesmo que ele não esteja aceso, temos as partes vermelhas acesas. Temos esse bar iluminado e o interior desse pequeno canhão aqui, todo iluminado E esses são dos mapas de emissão que são meio que, eu acho que você poderia dizer, iluminando aquela parte que não tem nada a ver com nossa iluminação. Tudo isso é textura. Tudo bem, então vamos dividir essas três luzes que você usa em uma configuração de três pontos A primeira luz será sua luz principal. E enquanto estamos fazendo isso, vou clicar na minha câmera e clicar neste botão de perspectiva aqui. Isso me permitirá ver o que a câmera vê aqui. Portanto, a primeira luz será a luz principal, e a luz principal é a fonte de luz primária e fornece a iluminação principal sobre o objeto Tudo bem. Ele cria os destaques e sombras primários que definem a forma geral e a forma do objeto Agora, observe que, se você quiser sombras em sua luz, você realmente precisa entrar nas propriedades de sua luz e ativar suas sombras E então, é claro, você pode ajustar algumas de suas configurações lá, o que dependerá de você Em seguida, temos nossa luz de preenchimento, geralmente é posicionada na posição oposta à luz principal para equilibrar a iluminação, e sua finalidade é suavizar as sombras criadas pela Isso ajuda a reduzir o contraste entre áreas claras e escuras, o que resulta em uma iluminação mais uniforme e agradável Então, se dermos uma olhada, digamos, ao redor do capacete aqui, eu sei que não podemos realmente ampliar essa seção, mas eu só quero ter certeza de que não estava movendo o modelo Vamos em frente e damos uma olhada aqui. Só estou olhando de frente. Podemos ver o quão dura é essa escuridão aqui no capacete E isso ao lado aqui, dependendo do brilho do seu monitor, pode estar bem escuro, especialmente considerando que nossas fontes de luz vêm do canto superior esquerdo aqui e descem. E se descêssemos novamente e olhássemos mais para os pés, também veríamos esse forte contraste que temos nos pés e nas pernas. Tudo bem. E se ativarmos nossa luz de preenchimento, podemos ver todas essas partes acesas, mas elas ficam muito mais suaves, sem um contraste tão forte aqui E, obviamente, isso virá do ajuste de sua energia aqui E, geralmente, você quer que a energia seja menor do que a luz de preenchimento, porque lembre-se de que a luz principal é sua principal fonte de energia aqui. E, dependendo da situação, você pode usar a luz de preenchimento para esfriar ou aquecer e ter uma luz que complemente a luz E a última luz em uma configuração de três pontos é a luz de fundo, e a luz de fundo, também conhecida como luz de aro ou luz de cabelo, é colocada atrás do objeto , normalmente em uma posição mais alta e adiciona uma sensação de profundidade e separação e destaca as bordas do objeto, criando essa sensação de profundidade e dimensão, se eu prosseguir e habilite isso, podemos ver que temos alguma iluminação nas bordas aqui em cima. E, novamente, poderíamos entrar e ajustar, brincar com esses números, encontrar algo que funcionasse brincar com esses números, para nós Mas você vê como a luz do aro está realmente destacando essas bordas aqui Nesta luz de fundo ou usando essa luz de fundo. Então, vou apenas ajustar isso de volta aos números padrão aqui Mas você pode ver aqui o antes e o depois, quando não vemos nenhuma luz aqui versus apenas uma configuração muito básica de três pontos. Isso já parece muito melhor, e nem estamos levando em consideração outras coisas, como a iluminação mundial ou a iluminação do ambiente que está ao nosso redor ou qualquer coisa. E já temos uma bela versão aprimorada do que começamos. Então, espero que isso ajude a ilustrar a configuração de iluminação de três pontos Vou sair da pré-visualização da câmera aqui. Então, se dermos uma olhada, podemos ver que temos nossa luz principal aqui, novamente, naquele ângulo vindo sobre nós. Se virmos de cima, temos nossa configuração de três pontos e ela se parece com um triângulo. Então, temos nossa luz principal aqui se opondo ao oposto Será nossa luz de preenchimento, e então nossa luz de fundo estará sempre diretamente atrás de nosso personagem. Agora, nisso, estou apenas usando holofotes. Mas é claro que, se estivermos do lado de fora, podemos usar coisas como uma luz direcional, por exemplo, ou você pode usar holofotes, dependendo da cena Então, essas são coisas que você pode levar em consideração. O terceiro tipo de luz que temos é chamado de luz omni, e basicamente emite luz em uma área completa de 360 graus. Então, isso seria mais para coisas como lâmpadas, velas, coisas assim Agora, não consigo terminar de falar sobre o retorno à prévia da câmera. Iluminação sem ao menos mencionar um ambiente. Agora, uma câmera pode ter um ambiente, ou você pode ter um ambiente relacionado à cena em si. Então, para mim, vou apenas adicionar um ambiente mundial à minha cena aqui. E é importante que você pelo menos saiba como criar uma causa básica do céu com o Goto four Você não vai ter um céu de nenhum tipo. Só está mais sendo capturado. Não é. Vá. Então, como podemos ver, temos apenas esse fundo cinza, e isso não é muito bom quando você está falando sobre Ampeily. Se você está fora do mundo, você meio que quer pelo menos um céu, Então, você vai ver como criar pelo menos um céu básico aqui, então vamos ao meio ambiente e ao nosso ambiente mundial. Criamos um novo ambiente. E clique nele para abri-lo . Então temos nosso histórico. Temos uma cor clara, mas o que podemos fazer é criar uma cor personalizada, tela, feed de câmera, se você quiser. Mas o mais importante é que vamos escolher um céu aqui. E então, dentro da nossa seção do céu, podemos clicar em Novo Céu, abri-lo para o material do céu. Podemos dizer que temos um céu panorâmico, um céu processual e um céu físico E com nosso céu físico aqui, você pode ver que tem uma cor de fundo aqui, e nossa cor está parecendo um pouco escura. Parece que pode ter havido um problema lá. Deixe-me voltar para dentro. E vamos usar um céu processual. Aqui vamos nós. Isso é algo mais normal do que você veria. Agora, o importante aqui é essa clarabóia também pode afetar seu modelo Então isso é o que eu estava dizendo. Estávamos apenas vendo a configuração de três pontos, mas seu céu pode entrar em vigor. Então, digamos que estamos sentados aqui em um Let's go with a, sei lá, um pôr do sol, certo? Então, nosso terreno, talvez estejamos mais do lado verde, realmente não importa muito bem nisso. Para o nosso Sky, nossa cor superior será mais roxa, certo? E então o horizonte é onde vamos pegar nossa laranja. Certo. Agora, pode parecer que não estamos tendo muito impacto aqui, mas estamos sofrendo um pouco, como você pode ver na iluminação aqui, do outro lado do nariz, por exemplo. Então, se eu pegar isso, vou copiar essa cor. Se entrarmos, aí está, você pode ver como isso está afetando nosso modelo aqui. Eu só vou colocar isso de volta lá. E dentro desse ambiente é onde também podemos obter outros recursos que podem afetar nosso mundo, como o brilho E, claro, suas opções de onde você vai prosseguir com essa floração. Então, isso vai acabar com sua desculpa por um segundo, o pós-processamento. É isso que vamos fazer? Então, sua floração, sua força de todas essas coisas, a intensidade. Então você tem todas essas coisas com as quais pode brincar, mas ao desligá-las, você tem neblina que pode afetar sua iluminação E também temos neblina volumétrica, que pode afetar Então, temos todas as coisas diferentes aqui para levar em consideração. E o mais importante, SDFGI aqui. Isso terá um impacto no desempenho do seu jogo, mas também teremos uma simulação de luz mais realista com nosso personagem. Aqui vamos nós. E, claro, você sempre pode ajustar quaisquer pequenos efeitos que possamos ter aqui e criar algo que você goste Obviamente, a densidade é um pouco insana. Oh, isso é ok, meu erro. Cliquei no errado, SDFGI. Aqui vamos nós. Então, isso é calcular todos os nossos saltos de luz E lá vamos nós. Agora podemos ter algo que será um pouco mais realista e mais dinâmico. Por exemplo, nossos pés saltitantes aqui. Você pode ajustar com isso. Cascatas Isso vai de um a oito Quanto menor o número, maior será o desempenho. Então você pode vê-lo calculando esses saltos à medida que obtemos uma pequena alteração e, em seguida, subindo para oito Então veja, calculamos em mais algumas dessas sombras, como aqui com o pescoço e depois nas pequenas, não é uma palmada nas Acho que seriam armadilhas para nossos meninos Trap Zoids canta sempre sem trapézio. É tipo, espere um minuto, isso não soou bem. Mas você entendeu a ideia. Com isso, podemos criar um céu básico que pode afetar nosso personagem, assim como eu mostrei como fazer uma configuração básica de três pontos. Então você vai ter um triângulo. Luzes traseiras sempre diretamente atrás. Onde quer que esteja sua luz principal ou sua luz principal. A luz de preenchimento estará do outro lado com um nível de energia mais baixo apenas para que as sombras não sejam tão fortes Obviamente, digite ambiente, crie um novo ambiente, céu para o modo, crie um novo céu e você usará o material celeste processual Tudo bem. Espero ter lhe dado uma boa ideia sobre o quão bem a luz pode realmente afetar seu objeto no final do dia e o quão importante a iluminação pode ser Vou continuar e mostrar algumas comparações aqui no final das coisas sem iluminação e depois de estarem bem, então aqui na tela, você está dizendo a janela errada Mas aqui você está vendo um antes e depois quando se trata iluminação e realmente ajudando a definir essa atmosfera, especialmente com uma imagem como essa, você pode ver o quão importante é realmente ser bom em iluminação e o quanto você pode realmente afetar ou ver. Estou partindo de algo que talvez pareça antigo ou simplesmente normal para algo mais novo, talvez um pouco mais realista E se talvez opte por uma atmosfera mais assustadora, isso te dá uma boa ideia Então, antes e depois quando se trata de iluminação. Portanto, não se incline quando se trata de iluminação. É muito importante, especialmente se você vai trabalhar sozinho e quiser fazer algo em 380 como esse. Com certeza dedicamos tempo e atenção ao aprendizado real da iluminação. E há pessoas por aí que se concentram puramente na iluminação ambientes e cenas e coisas assim como seu trabalho, eu diria, certo? Agora, eles também podem fazer outras coisas, mas se concentram em todas as pequenas coisas que você pode não notar como jogador de um jogo, por exemplo, ou se estiver levando em consideração a iluminação ao iluminar uma cena, talvez para fazer alguns efeitos visuais. Mas aí está. Eu não vou mais reclamar Eu só queria que você soubesse quão importante será a iluminação quando se trata de três D em vez de dois D, além de mostrar como você pode pelo menos criar um céu básico e mostrar visualmente a enorme diferença, algo que até mesmo uma configuração básica de iluminação de três pontos pode fazer. 47. Ativos 3D: Tudo bem, bem-vindo, 1º de abril. E nesta seção, vamos seguir em frente e vamos criar o Frogger novamente Só que desta vez vamos criá-lo em três D. Dessa forma, você terá uma comparação justa, eu acho, poderia dizer, de trabalhar em dois D versus três D, e isso deve lhe dar uma ideia das semelhanças e das diferenças, e talvez dar uma ideia do seu próprio tipo de preferência pessoal que você gostaria de irritar Tudo bem, então eu vou usar cubos básicos, apenas malhas básicas quando eu for criá-los, mas se você quiser usar três modelos D em seu programa, você pode ir em frente e fazer isso se quiser criá-los, enlouqueça Se você já tem alguns, isso é ótimo. Mas se você quiser usar cerca de três modelos D e não tiver nenhum disponível, acesse a Internet e encontre três modelos D por toda parte. Por exemplo, esse lugar aqui é o Sketchfab, e eles têm modelos gratuitos e pagos Tudo o que você precisa fazer é prosseguir e fazer sua pesquisa aqui no topo. Clique em baixável para que todos os seus resultados possam ser baixados E dessa forma, elimina qualquer situação em que alguém talvez esteja apenas exibindo algo. E agora, se você não quiser gastar dinheiro, existem muitas opções gratuitas disponíveis. E esses aqui com o dólar inscrito no canto superior direito. Oh, eu não consigo ver esse. Então, vamos vir aqui com o cifrão, no canto superior direito aqui. Aqui. Esses são aqueles que vão custar dinheiro, mas aqueles que não têm aquele cifrão. E isso levará apenas um segundo para carregar. E você pode seguir em frente. Você pode dar uma olhada nisso. Você pode vê-lo, o que é ótimo sobre fabuloso. Você pode prosseguir e clicar no botão de download aqui no seu Moth gratuito Obviamente, se você está disposto a gastar dinheiro , primeiro precisa passar por todo o processo de colocar no carrinho, finalizar a compra e tudo mais. Mas isso é só se você quiser. Eu encontrei alguns sapos grátis aqui que você poderia usar. Não sei se algum deles vem com animações ou não. Você teria que verificar individualmente. E para isso, você acessaria mais informações sobre o modelo aqui e, em seguida, poderia obter todas as informações, todos os diferentes tipos de modelos e GLB, GLTF e FBX, bem como OBJ, funcionarão No entanto, OBJ, posso garantir que você não tem animações como OBJ apenas para um objeto estático. E você pode realmente descer. Você pode ver o PBR. São todos os seus materiais. Ele tem quatro texturas específicas para o produto. Então, se não se aplicasse automaticamente, você teria que entrar nos materiais e colocar essas texturas, como vimos na seção de transição E à medida que descemos, podemos ver que, neste caso, este não tem animações e não está manipulado Portanto, você teria que montá-lo antes de animá-lo, se quisesse fazer sua própria E não há animações que o acompanhem, obviamente, ele não é manipulado Como alternativa, também temos alguns registros aqui que você pode obter aqui está um caminhão aqui, perfeitamente gratuito. Então, se você quiser obter modelos, pode ir até um lugar como o Sketchfab aqui e dar uma olhada em alguns modelos gratuitos e Se você quiser usar apenas as formas básicas como cubos, como vou usar para isso , também está tudo bem, porque não estamos trabalhando com três modelos D. Não estamos fazendo nada sofisticado ou específico. Estamos basicamente movendo coisas na tela. Não precisamos de animações sofisticadas para fazer nada disso funcionar Tudo bem, depende de você qual rota você quer seguir, se você quer fazer algumas, encontrar algumas gratuitas e baixá-las, ou se você quer apenas usar as formas básicas que vêm com o motor Depende de você. Agora, faça isso por este. Depende de você pensar nisso. E se você quiser usar três unidades D, vá em frente e passe seu tempo agora coletando-as e juntando-as. Se você quiser importá-los, basta arrastá-los para a pasta do projeto com seus outros ativos. Tudo bem, vamos começar. 48. Mapas de grade: Tudo bem, pessoal. Assim como nas duas versões D, começaremos criando o plano de fundo para isso. E para fazer isso, precisaremos de algumas coisas. Primeiro de tudo, precisaremos de uma câmera aqui apontada para baixo para que possamos realmente ver o que está acontecendo aqui. Então vá em frente e pregue uma cena de três D, o que seria apenas um número três D para sua raiz Eu renomeei o meu para dizer Main. Adicione uma câmera três D aqui, e você pode ir em frente e adicionar um mapa de grade. O mapa de grade é a versão em três D de um mapa de blocos. E com sua câmera três D, você pode ir em frente e definir sua posição Y abaixo da seção de transformação para 25 e sua rotação do X para menos 90. Dessa forma, você pode olhar diretamente para baixo. Agora, se você fosse executar essa cena, você verá uma caixa cinza. Fantástico, mas pelo menos sabemos que as câmeras funcionam ou pelo menos fecham por padrão. Se você está paranóico com isso, pode ir em frente e marcar a corrente dentro do Mas como temos apenas uma câmera, essa deve ser a única que ativa no momento um mapa em grade O NRT é um mapa em grade. Devemos ter nosso conjunto de azulejos, certo? A arte é um mapa de azulejos. Precisamos de um conjunto de azulejos. Bem, para um mapa em grade, precisamos de uma biblioteca de malha. E podemos criar um novo, mas ele não tem nenhum recurso. Então, o que precisamos fazer, na verdade, é criar essa biblioteca. Então, para fazer isso, vamos criar uma nova cena, e você pode simplesmente criar um nó três D como seu nó raiz novamente para nossa cena. E, novamente, essa é apenas uma nova cena em três D, e você terá uma. E tudo o que estou fazendo pela estrada, pela água e pela mediana é apenas trazer as texturas dos dois D Frogger, trazer os sprites e usá-los como a usá-los E estou apenas deixando posição padrão deles no meio. Então eu vou te mostrar como eu faço isso. Então eu entrei e criei uma instância de malha três D. Eu vou em frente e a renomeio Este será meu bloco de latão para minha malha, eu abro isso e seleciono uma caixa de malha Agora, se você tivesse uma malha personalizada, um modelo personalizado aqui, se você quisesse trazer especificamente para este bloco, você poderia ir em frente e arrastar a malha para esse local específico. Essa malha, esse objeto. É aqui que você faria isso. Agora, apenas para esses blocos e para o mapa em grade, você não precisa, a menos que esteja trazendo suas próprias malhas personalizadas para cada um dos seus blocos Agora, esse bloco é completamente branco aqui, e você notará que é muito menor. Vou apenas esconder os outros aqui para que possamos nos concentrar neste . Tudo bem. Então, a primeira coisa é que temos que ir para a escala e definir XY e Z até duas vezes em sua escala. E a razão pela qual estamos fazendo isso é para que ele caiba em um bloco inteiro do nosso mapa de grade, em vez de ficar na borda ou na lateral em alguma posição estranha É mais fácil seguir frente e fazer isso, apenas o dobro. Tudo bem, então temos nosso pequeno cubo aqui. Agora, o que precisamos é de uma textura nela. Então, o que vamos fazer é abrir a substituição do material da superfície E a razão pela qual vamos fazer isso. Oh, não, essa bagunça vem com isso. Então, podemos simplesmente abrir a seção de malha e aí está o material. E nós apenas adicionamos um material padrão e o abrimos. E aqui está nossa textura de albedo. E é aqui que entraríamos em nossos sprites Frogger. E para o meu gramado aqui, poderíamos ir em frente e trazer para casa, se quiséssemos. Poderíamos fazer isso, mas não parece muito bom. É meio estranho. E, pessoalmente, não sou muito fã disso. Então, pessoalmente, o que estou fazendo com isso é pegar a textura mediana e colocá-la lá E então, apenas por preferência pessoal, vou passar para o U V, especificamente, e vou definir minha escala aqui de meus UVs para dois Acho que pelo menos parece um pouco melhor. Agora, o problema é que isso se parece exatamente com a nossa mediana, e não seríamos capazes de dizer a diferença Então é aqui que vou usar a próxima passagem aqui dentro do nosso material, e vou adicionar outro material padrão aqui. Agora, quando eu abrir isso, vou configurar o albedo para ser um belo verde semitransparente Vou até a seção de transparência e definirei a transparência como Alpha. E lá vamos nós. Temos, tipo, uma versão verde da mediana, então ela se destaca e é diferente o suficiente Agora, você só teria que fazer isso com o bloco de grama se estivesse me copiando com isso. E a mediana, basta usar, é claro, a textura mediana, o dobro do tamanho, água Você pode fazer a mesma coisa e a mesma coisa com a estrada. E uma vez que você tenha isso, eu recomendaria salvar isso, então Control S. Ou, é claro, vá até seu CN e salve e salve isso como sua biblioteca de malha , biblioteca de malha E isso será apenas no caso de você querer voltar e editar isso no futuro, o que provavelmente faremos em algum momento, apenas para avisar. E depois de fazer isso, podemos ir até SN e ir para Exportar como, e você verá a biblioteca de malha como uma opção. Eu sei que você não pode ver isso na minha tela agora, mas apenas exportar SN como Mesh Library. E quando você fizer isso, você verá essa tela. Não é grande. Aí está. E só por segurança, vou garantir que a instância Fly Meshed nos transforme, mesmo que estejamos bem E salve-o em algum lugar. Acabei de chamar Min MAP e uso a extensão mesh lib apenas para manter as coisas organizadas, porque não quero que tudo se Res ou Trez, por exemplo Gosto de manter as coisas nomeadas corretamente , então mesclar lib ou material, shader, coisas assim Gosto de mantê-los mantendo as extensões relevantes para o que são. Então, uma vez que você tenha isso, vá em frente e diga isso e aperte o botão Salvar. Se você já tiver um criado no futuro e voltar e editá-lo, pode prosseguir, basta sobrescrevê-lo. Você vai ficar bem. E de volta à nossa cena principal, podemos realmente acessar nosso mapa de grade. E você descobre onde salvou sua biblioteca de malha, pode arrastá-la para a seção da biblioteca de malha do seu mapa de grade e pronto Você tem todas as suas peças lá. Agora, eu fui em frente e tenho Grass block e grass end só por causa da minha nomenclatura, e fui em frente e coloquei meu conjunto para adicionar em vez de sobrescrever, o que vou fazer é simplesmente voltar e ir para a biblioteca de malha de exportação E eu vou dizer que vou desmarcar, mesclar com Dessa forma, eu simplesmente o sobrescrevo completamente e o substituo. E agora, quando venho aqui, tenho meus bloqueios normais. Incrível. Tudo bem. Agora, para o projeto, estou usando a mesma resolução que uso no Frogger em r2d3 E se eu seguir em frente e executar isso, vou ter mais facilidade quando se trata de colocar meus blocos. Tudo bem. Agora, você verá enquanto temos o bloco cinza lá, ou parece que não temos nada em nossa janela. Você verá que se colocarmos alguma coisa, ela aparecerá. E é assim que vamos determinar onde estão nossos limites . Isso é o que vamos fazer. Vamos delinear nossos limites se eu vier até aqui. Essa é a parte superior, o que significa que eu deveria estar olhando dessa maneira na minha câmera. Vamos ver. Isso ainda está na tela. Isso é um pouco longe demais. OK. Então esse vai ser esse bloco. Você pode passar por cima de um. E eu vou chamá-lo de lá naquele quarteirão. E agora, é só uma questão de encontrar os outros cantos, que se você contar os espaços da grade, você deve ser capaz de achar fácil Esse deve ser o meu canto lá. E então nossa esquina deveria estar aqui, mais uma? Sim. Tudo bem, então aí está o canto de todas as nossas posições. Agora, se você quiser colocá-lo, clique com o botão esquerdo, se você não sabe como excluí-lo, você não descobriu. É um clique com o botão direito. E agora podemos começar a colocar nossos objetos. Portanto, nossa mediana é nossa segunda linha aqui. Pegamos a estrada na primeira fila. Estávamos na terceira, quarta, quinta, sexta e sétima. Então tivemos a mediana novamente. Atravessamos, tínhamos mais cinco fileiras de água. Um, ganchos dois, três, quatro e cinco Vamos ver o que temos a seguir? Tivemos nossa zona de vento. Então, para esses, vou dobrar aqui nas pontas. Isso porque, opa, é um número ímpar aqui. E teremos duplas, assim. Três ossos, um, dois, três, para baixo, um, dois, três, para baixo, um, dois e três para baixo. Vou preencher esses espaços vazios com água. E então tínhamos a fila de trás, que era apenas água, onde estava parte da nossa interface de usuário. Agora, vamos preencher isso novamente. E aí está. Usamos a câmera para garantir que preenchêssemos toda a nossa área visível aqui Agora, isso é meio escuro, como você pode ver, e isso é porque não temos nenhuma iluminação. Então, vou clicar na minha nota principal aqui e vou adicionar uma luz. E, especificamente, vamos adicionar uma luz direcional apenas para que possamos emular um sol se pondo. Vou levantá-lo acima, ampliar para que eu possa ver para qual ângulo ele está apontando e apontar para baixo. Aqui vamos nós. Agora temos alguma luz brilhando em nosso conjunto de blocos ou mapa de grade que podemos ver e realmente ver o que está acontecendo aqui Tudo bem. Então isso é tudo o que precisamos fazer aqui. Neste vídeo. Agora, vou observar que estamos no andar zero aqui. No entanto, se você quiser cair para menos um, verá que vamos descer um espaço aqui. Se você quiser descer um, certamente pode fazer isso apenas para que se estabilize de forma que 00, zero fique em cima de nossos objetos, ou para que possamos ter, digamos, um sapo sentado em zero, zero e fique no topo do solo em vez de ter que levantá-lo, que eu acho que vou examinar e fazer bem rápido aqui Tudo bem, então fui em frente e diminuí a mente um pouco, e como você pode ver na câmera, agora estou um pouco errado com meus números Então, podemos subir e preencher esses espaços extras. Basta decifrar um mais largo. E isso vai resolver isso. Estrondo. Estrondo. Solução simples. Fácil de fazer rs. Sabe, acho que vou colocar mais água nas bordas. Tudo bem. Então, vamos lá. Aí está. Preciso de mais uma estrada na parte inferior para cobrir a grade inferior. Aqui vamos nós. Tudo bem? Se a tela cair novamente, mude meu piso para negativo. Então, agora, quando nos sentarmos às 00, estaremos diretamente em cima dela. E lá vamos nós. Temos nosso mapa de grade configurado. Temos nossa câmera apontada para baixo em nosso mapa de grade para que possamos vê-la do ponto de vista de um pássaro. E isso bastará para este aqui. Agora, você pode ver que é muito fácil, além de ter que criar nossa própria biblioteca de malha, que quero dizer, para ser justo, se você está em dois D e está trabalhando com conjuntos de blocos ou mapas de blocos, você meio que precisa criar seu próprio conjunto de blocos, Portanto, não é uma grande diferença ir de dois D para três D até agora. Tivemos que adicionar uma câmera e adicionar uma luz. Fora isso, nosso processo tem sido, na maior parte, praticamente o mesmo. Quero dizer, com uma biblioteca de malha, tivemos que exportá-la para configurá-la. Era um conjunto de ladrilhos, tivemos que mexer com uma seção especial de ladrilhos aqui embaixo Havia pequenas diferenças, mas muitas delas eram iguais. Não é muito diferente lá. Tudo bem? Depois de definir seu mapa, deitar no chão que você quer, com a câmera configurada, podemos seguir em frente e passar para a próxima seção. Esqueci o que fizemos em segundo lugar, então vou ter que voltar e dar uma olhada. 49. Criando o jogador: Tudo bem, então aqui vamos criar nosso player, e eu vou te mostrar se eu vou parar com isso bem rápido Vou mostrar se você optou por usar três ativos D aqui e talvez tenha baixado alguns ou criado alguns. Veja, eu tenho um GLB para você aqui. Com três texturas aqui. Agora, isso deve ser aplicado automaticamente, e eu vou clicar com o botão direito sobre ele e selecionar uma nova cena herdada Eu sei que você não pode ver isso, mas vou selecionar uma nova cena herdada E você verá que agora tenho meu novo sapo como sua própria cena, e ele deve ter todas as suas texturas completamente aplicadas para mim e ele deve ter todas as suas texturas completamente aplicadas Agora, se você quiser usar o modelo, por favor , vá em frente. Se seu modelo tiver animações, você verá um reprodutor de animação dentro do cenário E se é isso que você deseja usar como jogador, você pode salvá-lo como jogador. Agora, este é, neste caso, um Node três D. Então, teríamos que mudar isso. O que você faz, clica com o botão direito do mouse e altera, você tem a opção de alteração lá? Agora, se eu clicar duas vezes no meu sapo aqui antes de abrirmos a cena, mudar para C, eu não tenho uma opção para isso É interessante. Vamos ver se eu tenho uma opção se eu vou aqui. Ok, então você clica duas vezes na cena. Vamos pegar o importador para três sapos D. E podemos simplesmente entrar no tipo raiz aqui. Clique nele e selecione o corpo do personagem três D. Não há razão para eu capturar. É a mesma coisa que criar um novo nó, na mesma tela. Eu posso simplesmente clicar no corpo do personagem três D, clicar em Criar. E agora que eu vou ter um corpo de personagem ou ele deveria apertar o botão de reimportação aqui embaixo Feche aquela cena antiga, clique com o botão direito do mouse e faça a cena herdada Eu posso ver que meu novo sapo aqui tem um corpo tendemático. Então, se você quiser usar três D, você pode ir em frente e fazer isso. Faça de você um sapinho feliz, ande de um lado para o outro. Como eu disse, este não tem animações. Então ele estaria apenas pulando. Bem, eu diria pulando, mas não pulando de verdade, Ele estaria apenas se movendo um espaço por vez. E se você quiser usar apenas o básico, a versão básica, talvez você não seja super instantâneo em três D, mas, você sabe, você tem que pelo menos aprender um pouco , mergulhar os dedos dos pés um O que vamos fazer é dar crédito a uma nova cena, ir para o outro nó, fazer um corpo de personagem três D. E também adicionaremos uma instância de malha A instância de malha em que você pode simplesmente usar uma caixa e, para mantê-la alinhada com todo o resto, definiremos a escala para dois. Vou adicionar um material padrão. E como ele é meu sapinho , vou usar esse verde amarelado E isso é tudo o que realmente precisamos fazer. Agora, se você quiser, pode entrar e ajustar alguns de seus outros controles deslizantes Veja, temos uma espécie de sapo brilhante acontecendo aqui agora. As especulações estão subindo, e sapos não são supermetal, então coloque um pouco de metal lá dentro E você poderia simplesmente fazer isso com um sapinho. Agora, se você planeja ter apenas a aparência de cima para baixo, e não tem em nenhum momento, planeje mover a câmera talvez até aqui. Mas se você movê-lo para cá, sugiro adicionar uma segunda camada ao vento, a área do vento no mapa da grade, apenas para que apareça do chão. Mas se você planeja ir de cima para baixo , o que estamos procurando Material. O que você poderia fazer é entrar em seu sapo ou sprites. Ei, você pode trazer o sapinho lá para a textura, e oh, ele não está muito bonito, então talvez não queiramos fazer isso Hmm. Bem, espero que seja um pouco diferente. Mas acho que não. Mas acho que podemos seguir em frente e usar essa textura para a cor sapo, se quisermos, ou você pode simplesmente torná-la verde, ou novamente, você pode trazer seu próprio modelo de três D, certificando-se de que seu nó raiz aqui é um corpo de personagem dois D. Qualquer que seja o caminho que você quiser seguir, dependerá inteiramente Eu disse no início que vou usar as formas básicas que já estão aqui, em vez de procurar e encontrar um monte de três modelos D. Mas se você quiser fazer isso, deixe sua aparência ainda mais bonita. Fantástico. Eu encorajo você. Ok, então vou continuar com isso e renomear corpo do meu personagem para Frog, ou queremos jogar? Vou renomear meu player e, na verdade, não preciso de mais nada além disso no momento Vou seguir em frente e salvar minha cena como cena do jogador. Eu posso ir para o Maine e podemos trazer nosso jogador. Desde o início. Como temos todo esse encaixe com a grade, perfeitamente alinhado. Ele está bem no meio. Tudo bem. Então, vamos ver. realmente se alinharia com isso? Perfeito. Tudo bem Então, com isso, seja qual for a rota de jogador que você decidir seguir, ou eu trarei nosso amiguinho Você. Tudo bem, com isso Escolha qualquer sapo ou cubo, textura, o que quiser com seu Depois de fazer isso, vá em frente e salve-o. Faça isso agora mesmo. E nos vemos na próxima , onde começaremos a fazer pequenos movimentos. 50. Movimento do jogador: Tudo bem, vamos criar o movimento básico do jogador para nosso pequeno sapo Então, acabei de ir à nossa cena de jogador aqui e colocar o roteiro em seu roteiro Nosso sapinho e dentro do nosso roteiro, estamos prontos para começar Podemos ir direto para nossa função de processo. Agora, como estamos trabalhando com três D, devo dizer que qualquer coisa que tenha a ver no futuro com detecção de colisões e corpos físicos, seria melhor colocar coisas que tenham a ver especificamente com eles, como movimento, em um processo físico Em vez do processo normal, esses são dois momentos diferentes em um quadro. E, novamente, para este jogo, não deveria ser tão importante, mas achei melhor avisar para o futuro, se você decidir continuar desenvolvendo jogos tridimensionais, se você decidir continuar que qualquer coisa relacionada à física, como movimento, deveria estar sob o processo físico em vez de apenas um processo normal Tudo bem, então eu vou seguir em frente e vamos criar nossa função de movimento. Então, esse movimento não retornará nada. Agora, eu já tenho minhas funções ou não, desculpe. Meu movimento ainda está configurado, pois estou no mesmo projeto. Lembre-se de acessar as configurações do projeto. Vá para o seu mapa de entrada. E a partir daí, você pode ir em frente e configurar suas entradas. Se você não tiver isso configurado por qualquer motivo, talvez esteja fazendo isso em seu próprio projeto separado, o que, novamente, seria bom. Mas sim, eu só queria ter uma configuração ainda minha, assim como a do froger Two D. Tudo bem Então, dentro de um movimento. Tudo o que precisamos fazer, é claro, é verificar se o ponto de entrada é pressionado com a ação. Digamos que acabou de ser pressionado porque não queremos enviar spam. A ação que queremos verificar será executada. Isso é o que eu chamei de ação. E para mover nosso pequeno sapo, eu me lembro antes, o que fizemos foi mudar a posição do ponto automático Então, neste caso, estamos em três dimensões. Temos que usar um eixo z ou z aqui. E vamos ver o que acontece se fizermos isso. Opa, ovo na minha cara. Eu nunca estava chamando movimento. É por isso que não funciona. Então, você tem a posição de chamar as coisas. Temos a forma básica transformada de chamar as coisas, e isso nos dirá que não podemos usar um único número. Temos que usar um vetor três, e isso é para um tópico muito mais avançado quando começamos a abordar coisas como matrizes, matrizes e coisas assim Portanto, transform dot origin dot z seria o outro simples que você poderia usar. Você pode ver, para nós, que eles estão trabalhando de forma idêntica. Porém, dependendo da sua situação e do seu jogo, talvez você precise usar ou prefira usar um em vez do outro. É uma daquelas coisas que podem ser situacionais. Agora, se você quiser manter as coisas o mais próximo possível da versão do Tut, você pode escolher a posição D, a posição DZ Eu vou usar o transform.org só porque é algo que normalmente queremos usar quando se trata de três D, eu diria Muitas vezes, isso é o que você verá no back-end. Você está vendo o código de outras pessoas, pelo menos por meio de minhas experiências quando vejo outras pessoas. Então, neste caso, você pode ir em frente e eu acho que usar o que quiser usar aqui, e podemos deixar isso para a preferência pessoal Eu vou escrever a coisa toda. Isso depende de você. E podemos seguir em frente e preencher as outras, essas três últimas com nossa mão esquerda ascendente. Tudo bem, então agora seus eixos foram alterados para baixo, para a esquerda, para a direita, e são todas as Agora, se para cima vai ser negativo, então para baixo vai ser positivo. Agora, a esquerda vai ser negativa, mas não vai estar no eixo z. Vai ser no X. E se for negativo no X, então o certo será positivo no X. Então, podemos ir em frente e tentar isso. E lá vamos nós. Devemos nos mover em todas as nossas direções, pois precisamos e nos encaixamos em todas as nossas zonas de vento. Lá vamos nós. Incrível. Tudo bem, até agora tudo bem. Agora, e se você quiser girar um pouco de Froggi? Especialmente, talvez se você estiver usando um modelo de três D trazido, talvez queira girá-lo novamente enquanto ele se move, assim como fizemos com nossos dois sapos D. Bem, aqui vamos seguir em frente e obter graus de autorrotação Y, acredito que estará aqui. E eu vou configurá-lo para zero e, para baixo, vai ser 180. A esquerda é, eu acredito que é 90, e então a direita é menos 90. Vamos verificar isso. E toda vez que nos movemos, lá vamos nós, nosso pequeno sapo gira na posição em que precisam estar Agora, novamente, isso dependerá totalmente de você se quiser configurá-lo dessa forma. E, novamente, se você realmente quiser, pode entrar e usar um s para voltar a olhar para frente em olhar para frente sua rotação, de modo que, quando você se move, possa ver que não, não estamos dando aquela reviravolta instantânea, como esperaríamos em dois D. Então teríamos que entrar e fazer uma pequena pausa nisso não estamos dando aquela reviravolta instantânea, como esperaríamos em dois D. Então teríamos que entrar e fazer uma pequena pausa Eu mesmo não me importo. Pode ser só porque eu estou fazendo o cubo, mas eu simplesmente não vou ter aquele bloco S lá dentro Mas com isso, temos nosso movimento básico e podemos começar a fazer coisas como carros, sermos esmagados por nossos carros e, em seguida, fazer com que nossas plataformas saltem sobre a morte pela água, zona do vento e configurar nosso pegajoso novamente E a menos que eu esteja esquecendo alguma coisa, teremos nossa versão em três D configurada Oh, bem, a resposta não será parte da morte, sim, então vamos lá. Tudo bem, então aqui estão os controles. que estamos comprando para nossos três corretores D, lembre-se de chamar sua função de movimento dentro do processo E lembre-se, no futuro, se você continuar fazendo três jogos D, qualquer coisa relacionada à física, como movimento, porque tenho certeza de que haverá colisões De preferência, você preferirá seguir o processo físico em vez do processo Mas certo. Aí está. Aí está o movimento do nosso jogador. E vamos em frente e pulemos para a próxima. 51. Criando o veículo: Tudo bem, então vamos construir nossos pequenos veículos que podemos usar para entrar no jogo Agora, é claro, novamente, se você comprar cerca de três modelos D para veículos, e então, assim como o sapo, podemos ir em frente e trazê-los Certifique-se de que eles estejam voltados para a direção certa, que deve ser óbvio o que deve ser óbvio quando chegarmos ao fim, quando você os vê se movendo. O que? Vá em frente e faça com que eles apareçam ou crie um item a partir dessa cena. Salve-o como seu veículo. E se você estiver fazendo os blocos básicos comigo, siga em frente, vamos em frente e criaremos nós mesmos. Vamos fazer um pequeno caminhão. Vou usar as duas versões D o mais próximo possível e criaremos o corpo do nosso personagem. É chamado esse caminhão. E, claro, isso precisa de uma malha versus a adição aqui. E eu vou adicionar uma caixa. Vá. Agora, para continuar com nossos dois por dois, vou aumentar a escala aqui em dois e vou aumentá-la. Tudo bem, então isso deve estar no mesmo nível do personagem do nosso jogador. Vou me certificar de que tudo isso esteja nivelado posição plana e uniforme Agora, você, é claro, não precisa citar nada disso, mas essa será a aba, vou criar outra bagunça aqui, e esse será meu trailer A escala de transformação vai até dois. Isso também vai ser uma caixa, posição, uma no Y. Vou puxá-la de volta para duas no X. E vamos ver. Vou seguir em frente e dar uma cor diferente. E não temos visibilidade. Nós modulamos. Então, vou adicionar um material a essa malha. Esse vai ser meu trailer. Digamos que material padrão. Abra isso e vá até o meu albedo, e eu vou dar uma cor a ele Eu vou escolher algo na tonalidade laranja. E agora, se eu quiser, posso mudar e ajustar algumas dessas válvulas, eu possa ajustar meu X para dois, e agora está mais longo, o que agora vai parecer um pouco mais com um trailer Recoloque minha posição na minha transformação três para que ela se alinhe um pouco melhor. E, em essência, vista de cima para baixo, esse será o nosso caminhão Agora, se você quiser ir mais longe, pode ir em frente e trazer outra bagunça. Se quiser pode usar como exemplo aqui, vamos para cilindros Então, podemos trazer isso e você pode ver como estamos do nosso lado. E então podemos ir e você pode ajustar o tamanho de tudo isso Digamos que você reduza nossa altura para um, 0,5. Estamos chegando lá, talvez 0,25. E lá teríamos uma roda lateral. Então, se você quiser ir mais longe e usar outra malha para criar suas rodas, dê a elas um sombreador e uma cor É assim. Você certamente pode fazer isso. E então, nesse caso, eu diria para mover a malha inteira um pouco mais para cima, para que as rodas sejam o que vai ficar no chão aqui. Então, se você quiser fazer isso, por favor, vá em frente. Enlouqueça. Se você quiser novamente, traga seu próprio caminhão, você pode. E quando você usa essas formas e cria seu próprio caminhão, vá em frente, volte e terminaremos a próxima peça que adicionaremos ao caminhão, e então criaremos nossos spinners e escreveremos nossos roteiros Tudo bem, então eu fui em frente. Eu adicionei algumas rodas a ele e acabei de levantar tudo apenas selecionando todas as nossas malhas e levantando-as Vou clicar em Escape para poder desmarcar tudo. E aí está meu caminhão simples. Agora, se você quiser, pode seguir em frente e seguir em frente, é claro, e criar mais veículos. Eu só vou com esse caminhão fácil aqui. E continuar com os dois aspectos D para essa comparação justa lado a lado. Dessa forma, você pode ter uma ideia fácil ou melhor da transição de como é trabalhar em dois D versus três D. Vamos continuar fazendo isso com a detecção de área. Então, vamos adicionar uma área três D, assim como fizemos em duas D. E nessa área, vamos seguir em frente e adicionar uma forma de colisão aqui Você pode ver aqui que eu tive uma área três D e uma forma de colisão Essa forma de colisão, é claro, será uma caixa Não há razão para não fazê-lo. E então certifique-se de que sua caixa cubra todo o veículo. Mas não há erro quando seu pobre sapinho é esmagado. Pegando essas alças alaranjadas e puxando-as para fora. Em algum lugar perto do meio do meu caminhão. Lá vamos nós. Agora, não há erro. Se meu sapo for atingido , ele pega. Vou reduzi-las daqui a pouco. Sim, porque temos muita base na lateral. Tudo bem, por enquanto, acho que está tudo bem. Se quiser, você sempre pode voltar e ajustar isso mais tarde. Tudo bem? Então, vou salvar isso. Minha forrageadora de três D diz caminhão ponto C. E agora precisamos que nosso caminhão tenha um roteiro, certo? Porque eles precisam estar em constante movimento. E vamos ver. Vamos nos mover na linha vermelha, então ela estará no eixo X do outro lado. Isso é fantástico. adicionar um script. Obtenha nosso roteiro de caminhão. E, novamente, vamos manter as coisas o mais parecidas possível para nossos três D, assim como fazemos com dois D. E não precisamos nos preocupar com nada disso. Se você tem tudo isso, vá em frente e exclua essas partes. São para um tipo de jogo completamente diferente e completamente diferente. Sim, o que aconteceria se você não prestasse atenção e simplesmente clicasse nele como eu fiz lá, e não tivesse um script vazio ou não padrão Era um controlador de personagem. E o controle de personagem normalmente tem esses aspectos, eu acho, mais parecidos com um jogo de tiro em primeira pessoa ou uma plataforma ou coisas mais parecidas em termos de P&D, Pará pode correr, correr e pular No nosso caso, nosso caminhão não precisa de nada disso. Então, vamos em frente. L a mesma coisa que fizemos antes, como exportar nossa variável de direção. Que era um número inteiro, e usamos o padrão como uma última vez Em seguida, tínhamos uma variável para velocidade, que também era um número inteiro que tínhamos em 32 Isso pode ser super rápido, agora, mas acho que vamos descobrir. Então, acho que, por enquanto, vou configurá-lo para um. Eu posso mudar isso mais tarde. Dentro do nosso processo. Vamos seguir em frente. Temos nossa velocidade Obtivemos a propriedade X dela e a definimos como igual à nossa velocidade vezes a direção. E, claro, precisamos mover um slide, caso contrário, nossa velocidade não fará nada Vamos para nossa cena principal, trazer nosso caminhão e ver se funciona exatamente como esperamos. Vou colocá-lo lá e executá-lo. Ok, estamos em uma velocidade de um, e ela está indo na direção oposta para nós. Mas tudo bem. Neste caminhão, isso significa que nossa direção é menos um porque queremos ir para a esquerda E lá vamos nós. Podemos ver nosso caminhão atravessando. Incrível. E, claro, podemos nos deparar com isso agora porque não temos nenhuma cena de morte para o sapinho ser espremido Mas nosso caminhão está se movendo Agora, vamos em frente e agora que sabemos que está funcionando da maneira certa, vamos rodar, ver se 32 é muito rápido ou se ainda está bom. Para mim, parece que pode ser um pouco rápido demais. Para você, talvez você goste dessa velocidade. Então eu coloquei pela metade até 16. Isso também pode ser um pouco rápido para mim , mas talvez queira ir com oito da minha velocidade e tentar novamente. Ok, acho que vou escolher oito, pelo menos por enquanto, novamente, você sempre pode voltar e alterá-lo mais tarde. E agora vamos criar nossas panelas aqui. Tudo bem? Então, eu não tenho veículos indo na direção oposta, e seria chato ter todos nós indo na mesma direção Então, eu só vou ter esse caminhão, e eu vou fazer com que ele vá em, você sabe, uma direção diferente. Vamos fazer com que alguns vão para a esquerda, outros para a direita para isso. Obviamente, se você tem vários veículos, de qualquer forma, tem um veículo diferente para cada patrocinador, então vamos entrar em nossa cena principal e adicionar a mesma coisa que fizemos em Tot, vamos adicionar um marcador D e essa será nossa chave Acredito que usamos um marcador ou usamos um nó? Acho que usamos um nodo. Deixe-me seguir em frente e clicar com o botão direito do mouse em Alterar tipo e mudar para Não altere para uma chave inglesa de plotagem agora E qual é a posição desse caminhão? Puxe um pouco para cá. Então, podemos dizer 32 e 12. Sim, isso parece bom. Então, chave, transforme a posição, 32 no X, 12 no z. E é aí que vamos localizar esses veículos, certo? Vamos adicionar um script para nosso spawner. E, novamente, mantendo-nos o mais próximo possível da versão TD. Teremos nossa variável de caminhão, que mais tarde chamamos de veículo. Você sabe o que? Vamos chamar um veículo agora. Por que não, caso vocês tenham veículos extras. Eu vou igualar uma recarga, certo? Do nosso caminhão. Mas é claro que você pode querer definir isso separadamente. Dessa forma, podemos usar o mesmo script em tudo. Lá vamos nós. Nós simplesmente avançamos e o exportamos para uma cena lotada. E neste caso, é claro, eu só vou para dentro do meu veículo. E inspetor, eu só vou arrastar meu caminhão na minha cena de caminhão. Lá vamos nós. E pronto, tudo o que precisamos fazer é chamar nossa função que vamos criar aqui de spawn vehicle Ok. Avalie esse período de funk. Veículo. E podemos fazer o que fizemos novamente, anteriormente, onde podemos obter um tempo de espera aleatório aqui. E isso é um número inteiro aleatório. E usamos por cento três ou pelo menos eu uso por cento três mais um. Então, lembre-se, esse percentual três vai nos dar zero, um, dois, e adicionar um que nos dará um número inteiro aleatório de um, dois, três Então, um desses. E como estamos usando isso como segundos, isso nos dará de um a 3 segundos entre cada carro. Parece uma árvore, como fizemos antes, crie nosso cronômetro, ultrapassaremos nosso tempo de espera e esgotaremos nosso tempo Então, depois de esperarmos tanto tempo, criaremos uma instância do nosso caminhão ou veículo VI é igual ao ponto do veículo, instanciar. E precisamos adicionar à cena o self dot ad Child, nosso veículo. E como esse patrocinador está do lado direito, você precisa ir para a esquerda Agora, como estou apenas trabalhando com esse único veículo, preciso de uma maneira de esse veículo ser configurado por padrão, ou melhor, por padrão, quando ele se estende para que eu os tenha em ambos os lados Porque se eu não fizer isso, vai voltar ao espaço aqui por um segundo. E quando isso for feito, vamos chamá-lo de Curt Span. Então, se prosseguirmos e dermos uma olhada nisso agora, quais são os três D. Faça esse caminhão, exclua-o. Se o gerarmos agora, vamos lá. Tem um caminhão. É outro caminhão. Aqui vamos nós. Veja, eu acho que é uma velocidade decente para isso. Mas você pode ver aqui que todos os meus caminhões obviamente vão para a esquerda. Então, se você vai usar um veículo como eu, apenas para ajudar no aprendizado aqui , você pode ir em frente e definir um parâmetro extra, especificamente para o seu spinner E esse parâmetro aqui, vou exportar vou chamá-lo de VD para direção do veículo Isso será um número inteiro e, por padrão, definiremos isso como um E especificamente esse observador, vamos configurá-lo para água negativa, obviamente, porque ele precisa ir para a esquerda Então, tudo o que eu faria aqui é apenas fazer direção do ponto V, certo? Foi assim que o chamamos. Sim. Direção. É igual a BD. Tudo bem Então, agora, se eu vier até o caminhão, se viermos aqui e se eu definir minha direção padrão de volta para positiva, salve isso. Então, agora ainda se mova na direção negativa, porque meu patrocinador deveria estar definindo essa direção para nós Aqui vamos nós. Então aí está chegando o caminhão. Então, agora eu posso usar o mesmo script se eu for usar o mesmo veículo. Agora posso simplesmente defini-lo entre menos um ou positivo ou direção. Tudo bem Agora, se fôssemos fazer a mesma coisa com mais veículos, bem, se tivéssemos a mesma coisa, cada veículo indo em direções diferentes, obviamente usaríamos essa variável. Mas vamos fazer com que nossos outros patrocinadores se estabeleçam aqui bem rápido Tudo bem, tenha todos os meus patrocinadores aqui. Então, o patrocinador quatro terá, já que estou usando um veículo, vou configurar um VD configurado para um O patrocinador dois também será um. E, claro, três e meu filho original serão todos menos um porque estão do outro lado E agora, se fôssemos dar uma olhada, deveríamos ter algo seguindo, e isso seria muito tráfego para nosso pobre sapinho Então, novamente, você pode vir aqui, você pode ajustar coisas como o tempo de espera Oh, cara, essa é um pouco bagunçada. Mas, sim, aí está. Você pode entrar e ajustar isso Parece que talvez consigamos colocar outro caminhão no topo . Aí está. Isso é muito perigoso para nosso pobre sapinho. Isso está muito Temos que ver nos testes se talvez esteja um pouco perto demais e, em caso afirmativo, basta excluir essa linha. Ou seja, parece que pode estar tocando nosso sapo. Tudo bem? Aí está. É o mais próximo possível de nossa versão em três D. Em relação aos nossos dois D, então temos nossos pobres spinners prontos. Temos nossa rocha que tem nossa área três D e uma forma de colisão, então podemos detectá-la quando se trata de esmagar nosso sapo e Temos nossos veículos configurados. Novamente, se você tiver outros veículos, vá por todos os meios, traga-os, dê uma olhada neles, use-os, configure outros diferentes para direções diferentes. E nos vemos na próxima. E o que faremos a seguir? Depois desses veículos, damos uma olhada na morte de resposta de nosso jogador. Então, a seguir, vamos esmagar nosso sapo. 52. Morte e reaparecimento do jogador: Tudo bem, vamos fazer com que nosso jogador morra e reapareça, tudo Vamos até nosso script, e podemos seguir em frente e conectar nosso sinal para nosso caminhão agora, nosso sinal será conectado por meio de script, novamente, mantenha-o como TD. Porém, normalmente, você sempre pode entrar, selecionar sua área, ir até a guia não na parte superior e ir em frente, descer e dar uma olhada no sinal que deseja conectar. Mas é bom que você saiba como conectá-los por meio de código, só porque, no futuro, você provavelmente terá que lidar com a criação seus próprios sinais em algum momento, e então terá que conectá-los, e é melhor se tudo estiver em um só lugar, como dentro do código a ser examinado, especialmente se outra pessoa precisar examinar seu código ou talvez você precise volte e veja seu código no futuro. Mas vamos em frente. Vamos fazer com que nossos nós obtenham nossa área três D. E vamos conectar o sinal inserido pelo corpo, o corpo inserido pelo ponto. Conecte-se e nos conectaremos a um chamável. E, assim como em Tutti, vamos chamá-lo de player hit Isso tem um corpo. Vamos criar um nodo apertado. Esqueci o E no final da palavra chamável. Lá vamos nós. Então, tivemos um pequeno erro de ortografia. Não tem problema. Tudo bem, então devemos estar em uma situação muito familiar agora , assim como quando o criamos em dois D. Então, vamos verificar se o jogador. Agora, novamente, mantenha minhas maiúsculas em minúsculas. Se eu olhar para o meu principal, vejo o jogador. Eu escrevi aqui com P maiúsculo. Então se o nome do jogador e do corpo Eu diria que, se body dot tiver um método e o nome na forma de uma string, vamos chamá-lo de morte, assim como anteriormente. E vamos dizer body dot death, então vamos chamá-lo. E lá vamos nós. Até agora, esse lado é exatamente o mesmo que em dois D, exceto que usamos três D em vez de dois D para a área. Todo o resto é idêntico. Tudo bem, agora nosso player, não temos essa função de profundidade. Não existe, então nunca será chamado. Então, vamos ligar para nós. E tudo o que vai acontecer é que precisamos desativar a forma que foi usada para colidir com o caminhão E então certifique-se de que está voltado para a direção certa ou um pouco sapo, caso você esteja usando um modelo de três D e depois reapareça em uma posição diferente Então, vamos em frente e podemos fazer isso. Então, nosso jogador, precisamos abrir essa cena e dar ao nosso jogador uma forma de colisão Que nos livremos desse triângulo de advertência que nosso jogador teve todo esse tempo. Nossa forma de colisão será uma caixa para você. Talvez você queira usar uma forma diferente. Talvez você queira ir com uma caixa. Depende de você. Posso vir aqui e isso para caber no tamanho perfeito. Agora que nosso jogador tem uma ficha de colisão, ele pode ser detectado ao ser atropelado pelo caminhão E quando somos atropelados pelo caminhão, queremos chamar nossa função que chamamos de morte. E na morte, queremos definir nossa rotação, assim como fazemos quando subimos, então vou definir minha rotação para zero. Agora, se seu modelo estiver voltado na direção oposta , obviamente sua subida seria 180 e sua descida, seria ajustada para zero em seu movimento, e isso seria refletido em profundidade. Então, seja qual for o seu desejo, é o mesmo grau em que você está se dedicando à morte. Queremos desativar nossa forma de colisão para que só possamos ser atingidos uma vez Tudo bem Vamos continuar e fazer a chamada adiada Então, vamos adiar nossa forma de colisão e nossa chamada. E isso é muita coisa pela qual passar. Vou começar a digitar a configuração desativada. O segundo argumento será verdadeiro porque é isso que queremos definir, queremos definir como desativado como verdadeiro. Tudo bem A próxima coisa que faremos , se bem me lembro, foi subir e criar nossos estados de vida e morte. Adicionei isso a isso. Então, vamos seguir em frente e criar nossos estados até que tenhamos nosso estado Enum, e tivéssemos vivos e mortos, e mais tarde, adicionamos outro Vamos criar outra variável aqui chamada estado atual. E o tipo que vamos declarar é um estado. Tudo bem Agora, podemos seguir em frente e definir estado atual de nossa morte. Digamos que o estado atual seja igual, certo? Cão estadual morto. E vamos continuar e configurar nosso respawn. Então, o funk respawn. E assim, vamos definir nossa forma de colisão e nosso estado atual Tudo bem Então, queremos fazer isso, vamos movê-lo primeiro. Diremos que definido como desativado , está definido como falso. Obviamente, nosso estado mudará de morto para vivo, e precisamos realmente mudar nossa posição aqui. Então, para isso, precisamos obter uma posição de jogador aqui. Vou adicionar um novo nó. Você já viu tudo isso antes. Podemos seguir em frente e usar marcador a nó, o que você quiser Vou usar o marcador três D. E vamos ver qual é a minha posição aqui? Um, um, 15, então vou colocar a mesma coisa no meu marcador, então vou desovar no mesmo lugar em que estou começando Um, 115. Aqui vamos nós. Então, onde eu começo no início do meu jogo é onde eu deveria começar quando eu renascer. E vamos chamá-lo de player, spawn, location. E vamos definir nossa posição. Ponto próprio. A posição é igual e precisamos fazer com que o Node de um jogador apareça Agora lembre-se, nosso script está no nosso player, então temos que subir um. Então, podemos escrever Get parent ou podemos apenas dizer get node. E para o caminho aqui, podemos pontuar e barra como uma forma abreviada de G parent e, em seguida, digitar o node aqui, jogador Bond Jason Got position Got Tudo bem, agora, quando formos atropelados por um caminhão, devemos ser capazes de responder E espero que esse caminhão não esteja muito perto. E opa. Temos uma coisa aqui. Na verdade, não teremos uma resposta aqui em nosso processo. Precisamos mudar isso, então dizemos que precisamos verificar se nossa rocha está viva. Quase esqueci isso. E em dois D, também tínhamos um cronômetro em nosso respawn, mas tudo Então, vamos em frente e acabemos. Então, estamos prontos lá em cima. Eu digo que se o estado atual é igual ao estado ponto vivo. Nós podemos fazer nosso movimento. LFOs que é um W, estado atual de LF é igual ao estado de ponto morto. Ponto R. Tudo bem Agora vamos tentar. Tudo bem, podemos seguir em frente, para a esquerda e para a direita. E sim, aquele caminhão está muito perto. Ok, então parece que vou ter que remover um dos meus patrocinadores ou ajustá-lo um pouco. Mas acho que, por mim mesma, vou me livrar completamente disso. Vou apenas removê-lo. Isso não é um problema. E agora devemos estar bem. Devemos ter um pouco de espaço na parte superior e inferior. Meu sapo não vai ficar mole, e você pode ver pela aparência estávamos nos Assim que fomos atropelados por um caminhão, respondemos. Esperança. Ok, então não temos muito espaço de manobra, então talvez eu queira entrar e ajustar minhas caixas de colisão em meus Hyloiss vai ser bem difícil, apimentado com essa boca cheia Mas isso só acontece depois de fazer alguns ajustes. Eu vou seguir em frente e fazer isso. Não vou manter vocês aqui. Mas lá vamos nós. Temos um Death and Respan trabalhando aqui na parte rodoviária E a próxima coisa é que podemos dar uma olhada em morrer na água, criando nossas plataformas de água. 53. Morte por água: Tudo bem, então, assim como as duas versões D. Vamos determinar se estamos na água obtendo o ID do nosso mapa de grade neste caso, porque estamos em três D. Era o conjunto de blocos, o mapa de blocos em dois D. Então, primeiro de tudo, assim como em Tut, vamos começar com uma variável pronta, que, novamente, basicamente define a variável dentro da função pronta Em outras palavras, essa variável não é cuspida até que o jogo já esteja em execução E como somos os jogadores, temos que subir um até nossos pais e depois descer para pegar nosso mapa de grade. Então, nós o configuramos para o nó G e temos nossa barra de pontos, e temos nossa barra de pontos nosso equivalente a Get parent e grid Map E então descemos e temos nosso cheque Bell ID aqui embaixo. Função, pronta para usar, pronta para codificar aqui. E isso vai ser muito parecido com a nossa versão TD. Agora, para nossa versão TD, tínhamos uma variável para pausa no MAP, que era nossa grade. A tradução do Maps seria gridmp dot Local TMAP e esse mapa assumiu Foi preciso, desculpe, uma discussão. E essa foi a posição do nosso jogador que ultrapassamos. E também tínhamos uma variável para ID, que era equivalente ao nosso mapa de grade. No entanto, vendemos o ID da fonte. Mas, em vez do ID de origem, o que estamos fazendo é comprar um item de venda quando lidamos com mapas de grade. E isso não requer dois parâmetros. Eu só tenho uma, e essa será a nossa posição no mapa. Portanto, não precisamos passar nenhuma camada nem nada. Agora, no final, é isso, e isso é tudo o que precisávamos, e diríamos se nosso ID, no nosso caso, fosse igual a três, porque três era o ID do mapa de blocos, o conjunto de blocos. Nesse caso, se eu prosseguir e olhar meu mapa de grade e abrir a biblioteca de malha, posso ver que a água está associada à ID aqui. Então, eu vou dizer se ID é igual a um, e é aqui que ligaríamos E então verificamos a identificação do celular praticamente toda vez que nos movemos. Boom, mas um boom. Mas um boom. E vou retirá-lo do processo por enquanto, para não enviarmos spam Agora, vamos executá-lo e veremos um problema. Veja, nada está realmente acontecendo aqui, ok? Mas não estamos imprimindo nada. Basta colocar uma mentira lá. E quando eu piso na água, você esperava que eu morresse aqui, e eu morro. Agora, é porque eu esqueci de fazer isso? Então eu esqueci de reiniciar meu player aqui, e é por isso que funcionou Agora, normalmente, seu jogador, novamente, deve estar acima do mapa , e você verá aqui, vou apressar que não funciona. E a razão para isso é que, bem, a razão pela qual você viu que meu jogador estava afundado lá embaixo, estamos verificando muito alto. Então, na posição que estamos verificando, é zero. Então, na verdade, precisamos passar em uma posição mais baixa do que a que estamos usando aqui. Então, acabei de criar uma nova variável chamada cur pause para nossa posição atual E este será um vetor três, especificamente, ele quer um três I. Então, vamos seguir em frente e passar isso para dentro. E para isso, usaremos apenas nossa autodeposição X ou nosso Y, podemos usar menos um Isso será baixo o suficiente, e autodeposição Z para o terceiro argumento Então, em vez de passar em nossa posição própria para o mapa local, passamos na pausa atual, à direita, na curva Dessa forma, podemos obter nossa posição, mas um quarteirão abaixo, o que deve nos dar a localização de onde está nosso ID de celular, certo? Onde está o mapa da grade. Então, agora, quando atingimos a água, aí está. Vamos em frente e morremos, e nosso respawn não estraga tudo porque estamos verificando um bloco abaixo do jogador Tudo bem. Então, temos nossa profundidade de água toda configurada agora. Tudo o que precisamos fazer é colocar nossas plataformas aquáticas em nossa zona de vento, configurar nosso sistema de pontuação e o I. Em seguida, se quisermos, talvez possamos configurar uma câmera alternativa que fique atrás do sapo para que tenhamos uma experiência mais gananciosa. Tudo bem. Mas é isso. Temos nossa profundidade de água funcionando. Então você pode ver que é basicamente o mesmo, exceto nesta linha, onde só temos que marcar um bloco abaixo do nosso player. Mas a maior parte disso, novamente, é a mesma coisa. Então, se você gosta de trabalhar em dois D e é solicitado a fazer algo em três D, você pode ver que, até agora, já fizemos muita coisa aqui E mantendo as coisas basicamente da mesma forma que faríamos quando fizemos isso em dois D, você pode ver que a maioria de tudo é transferido. Tivemos que escrever nossa posição. Escrevemos nossa posição em Little different e nossa rotação. Eu fui escrito um pouco diferente, mas quero dizer, ainda faz sentido. Não é muito diferente. E tivemos que adicionar uma linha aqui para marcar uma abaixo nosso player, em vez da linha completa do nosso player. Portanto, se você prefere dois D e precisa fazer algo em três D, não se sinta intimidado Quase tudo o que você aprendeu em dois D será transferido para três D. Só precisamos lembrar que, ao definir a posição atual aqui, temos essa terceira dimensão para trabalhar com X, Y e Z ou X Y e Z. Tudo bem. Então, isso vai funcionar a partir daqui. Em seguida, vamos entrar nas plataformas. 54. Plataformas de água: Tudo bem, vamos configurar todas as nossas plataformas. Agora, fui em frente e criei meu registro aqui. É apenas um cilindro com um material na instância da malha, e eu pintei o albedo, o marrom Também tem uma área três D com uma forma de colisão, e essa forma de colisão é apenas uma forma de caixa, e eu estou apenas cobrindo a parte central dela para que não haja problemas quando se trata de pular dela, e o jogo de alguma forma pensa que talvez ainda estejamos nela só porque mal estamos tocando Então eu escolhi a vantagem média. Quando pulamos nela, devemos estar no meio de qualquer maneira. Então, vou seguir em frente e fazer isso. E eu também conectei dois sinais, o sinal de entrada e saída do corpo , ao meu script de registro E, assim como nas duas versões D, temos uma direção de exportação E em nosso processo, temos apenas o ponto de posição X mais igual a uma vez Delta. E se formos dar uma olhada nisso em três D, você pode ver com a escala, lembre-se dos troncos porque tem que coincidir com todos os nossos blocos. Eu o escalei para uma escala de dois em vez de um. E você verá em qual posição o ponto X. Veja a distância com esse ponto Eu acredito que um é o que estamos usando, correto? Sim. 10 vezes Delta. Essa é a rapidez com que nossos registros estão se movendo. Você pode mudar isso se quiser fazer duas vezes Delta, três vezes Delta, o que achar necessário para você. Para mim, vou deixá-lo ligado uma vez no Delta por enquanto, apenas para testar. E então, assim como meus caminhões, posso voltar e ajustar as coisas mais tarde Tudo bem. Então, se você quiser ir em frente e parar um pouco, certifique-se de que seus registros foram criados. Você tem suas áreas configuradas. E se você quiser, vá em frente e coloque perfeitamente cinco deles desse jeito. Vá em frente. Você pode. Vá em frente e pause o vídeo, vá em frente e faça isso E quando você estiver pronto, vamos continuar, e terminaremos a parte real da plataforma, porque, como você vê, se pularmos nela, nada acontece, nós meio morremos na água Mas, como eu disse, o primeiro na seção Tut, é meio estranho, considerando que somos um sapo, não deveríamos morrer na água, não deveríamos estar nos afogando Mas lá vamos nós. Temos nossos registros. Temos nosso sapo, agora a pergunta é: como vamos superá-lo Bem, vamos encarar isso como nossos dois D, certo? Nosso corpo entrou e saiu do nosso player, temos nossa nova plataforma de três variáveis, que é um booleano, definido como falso por padrão plataforma atual, que é um corpo de caractere três D desta vez em vez de dois D, definida como nula por padrão, e uma direção da plataforma, que é um int, um inteiro, e isso é definido apenas como um por padrão, e essa nos colocará indo para a direita Tudo bem. Então, aqui, não precisamos fazer nada necessariamente no momento. Embora pudéssemos seguir em frente e Y, vamos em frente. Vou definir nosso ID aqui ou não ID, mas nosso segundo parâmetro, nossa segunda condição, em vez disso, se ID for igual a um. Então, se estamos em um bloco de água e nossa plataforma atual é igual a nula, certo? Então, basicamente, não estamos na plataforma. Na verdade, mudamos isso. Usamos plataformas em desuso. Então, dissemos que a plataforma era falsa. Então, essa é apenas uma maneira mais curta de fazer tudo aqui. Então, se estivermos em um bloco de água e não estivermos em uma plataforma, morreremos. Bem, como sabemos quando estamos na plataforma? Bem, quando entramos em nosso registro, que eu deveria renomear, é apenas uma plataforma Faça GD em vez de registrar. Então, me dê um momento lá. Tudo bem? Tudo parece funcionar, e eu fui em frente e renomeei a plataforma Dessa forma, se eu quiser criar pequenos discos para representar minhas tartarugas, que não são sapos , posso continuar e continuar usando o Então, o que estamos fazendo é que, enquanto estávamos indo até aqui, descobrimos que uma plataforma é falsa morreremos se estivermos na água. Então, temos que mudar a plataforma para True. Então, uma vez que nosso Brogi entre nessa área, vamos seguir em frente e transformar a plataforma em realidade Opa, eu matei aquela parte. É uma plataforma corporal. Então, você quer acessar a variável de plataforma que está no corpo que a toca, que, obviamente, será nossa jogadora E, novamente, se você quiser ser mais cuidadoso aqui, pode dizer player no nome do ponto do corpo e marcar tudo com a tecla Tab . Isso ficaria bem aqui. Para a plataforma incorporada é igual a verdade. Tudo bem? E o que mais temos? Bem, vamos ver. Plataforma atual. Bem, se olharmos para nossas duas versões D se nosso sapo estiver vivo durante nossa seção de processo , também verificaremos se há plataformas de curva I diferentes de null E então movemos nosso sapo, certo? Então, mudaríamos nossa posição, ponto X é igual, e então tínhamos um pouco de matemática aqui Nós tínhamos nossa direção de plataforma. Multiplicamos nossa velocidade, que vou usar apenas uma para que possamos combinar nossos registros, e podemos voltar e alterá-la mais tarde. E então multiplicamos isso por Delta. Está bem? Então, se nossa plataforma atual não for nula, quero dizer, devemos estar em uma plataforma, certo? Então vamos nos mudar. Devemos nos mover com a plataforma. Está bem? Então, vamos entrar em nosso diário e, quando o corpo entrar, vamos dizer body dot her platform. Certifique-se de que eu escrevi isso corretamente. Por plataforma, sim. E o que tornou isso igual a si mesmo. Agora, lembre-se do seu registro. Seu registro aqui deve ser corpo de um personagem três D. Vou prosseguir e reabrir o meu aqui Eu não mudei nada. Interessante. Deve ser necessário reiniciar o projeto. Meu registro é o corpo de um personagem três D. E, claro, o íon vê o tronco e a área três D, que está despertando nossa lágrima Ok, então vamos ver o que acontece. É só nosso diário. Vamos seguir em frente e jogar o jogo de pneus aqui. Vamos correr e pegar esses troncos, vemos que eles estão se movendo, subimos e morremos. Bem, isso é interessante. Por que isso aconteceu? Bem, isso aconteceu porque, na verdade, estamos nos movendo muito rápido. Oh, esses são os dois D que estão ativos por algum motivo. Sim, desça, e isso é porque nossa morte está acontecendo muito rápido. Precisamos fazer uma pequena pausa para que haja tempo suficiente para que coisas como nossa plataforma, que mudem no meio Então, basta esperar, pegar a árvore, um ótimo cronômetro e 0,2 deve ser tudo o que precisamos Sei que usamos 0,1 em dois D, mas foi 0,1 que tentei e não foi suficiente. Então, vamos usar 0,2. E se prosseguirmos e tentarmos isso agora, devemos ser capazes de fazer Ooh. O que aconteceu lá? Oh, é porque eu enviei a posição ponto X igual à intenção a mais é igual Aqui vamos nós. Agora vamos entrar neste registro. Eu posso ir em frente e atravessá-los. Fantástico. E assim que eu descer, bem, se eu pular neste lugar aqui, Oh. Bem, não estamos seguros porque nunca calculamos sair da plataforma. Isso significa que também estamos sempre movendo permanentemente para a direita, então vamos resolver isso. Quando saímos da plataforma, obviamente precisamos revertê-los. Então, plataformas falsas e nossa plataforma atual, ela voltará a ser nula E só uma mudança para resolver essa corrida. Ah. E acabamos de morrer lá. A, bem, isso não é. Isso não é ótimo. Vamos descobrir o porquê. Bem, se você se lembra, nas duas versões D, tínhamos Bem, mais duas coisas que faltavam nisso. O primeiro, quando nosso corpo entra, na verdade tínhamos outro cronômetro, que está configurado para 0,1, o que é bom Agora, quando entramos, subimos. Lá vamos nós. E podemos atravessar sem sermos mortos. E assim que pulamos na água, que seria nossa zona de vento, morremos. Pule para o outro lado e, na água, morreremos. E isso ainda acontece quando somos atropelados por nossos caminhões. Fantástico. Então, tudo ainda está funcionando bem. Essa camada é suficiente para corrigir aquele pequeno bug que temos Ótimo. E a única coisa que nos resta é que acredito que criamos uma função para definir a direção aqui. Então, isso dependeria muito de se estamos indo para a esquerda ou para a direita, o que estamos definindo como ótimo. E essa seria a direção pela qual podemos passar. O que para este registro é zero agora, mas seria um. E nesse caso, em nosso script de player, podemos seguir em frente e criar essa função, direção funet, e você pega um ID, que é um int, e você só tem a direção da nossa plataforma igual a ID, nós a chamamos de IDA, acho que a chamamos de DR, então vamos mantê-la lá DR. E então, em nossa plataforma, podemos seguir em frente e definir a direção do corpo e passar podemos seguir em frente e criar essa função, direção funet, e você pega um ID, que é um int, e você só tem a direção da nossa plataforma igual a ID, nós a chamamos de IDA, acho que a chamamos de DR, então vamos mantê-la lá DR. E então, em nossa plataforma, podemos seguir em frente e definir a direção do corpo e passar em nosso direção. Tudo bem, então agora, não importaria em nosso jogo se viéssemos aqui e mudássemos a direção da plataforma para, aí está, 8.967 Não faria nenhuma diferença, porque isso será definido quando entrarmos em um registro real aqui. Lá vamos nós. Então, se nossos troncos estavam indo na outra direção, então vamos para a direita e continuamos terminando. Como isso continua acontecendo? Então vamos lá. Então, se definirmos isso como menos um, isso também seria menos um na nossa velocidade aqui. Então, poderíamos mudar isso completamente e dizer direção vezes Delta no momento, mas podemos ver que o log está se movendo na direção oposta. E a única razão é que alteramos um registro especificamente. Por exemplo, podemos entrar aqui e definir esse como negativo também. Agora temos dois troncos indo na outra direção. Bem, nós deveríamos. Por que essa não mudou? Eu consegui o registro certo. Isso é negativo. Mamãe. Hmm. Vamos ter que ir em frente e ler, veja. Isso é bom. Vimos que os troncos estão se movendo completamente na outra direção? E vamos definir isso para o nosso registro principal aqui. E podemos ver que eles estão indo nessa direção, subimos e estamos nos movendo nessa direção. Tudo bem, então tudo o que precisamos agora é que, se você quiser, crie pequenos discos em uma escala de dois para representar seus pequenos obstáculos ou lírios ou o que você quiser fazer E, basicamente, basta usar esse script e definir a direção. Aí está. Essas são nossas pequenas plataformas que estão lá. Para nossos registros. E esses patrocinadores, podemos seguir em frente. Basta ligar para definir essas posições aqui. Então lembre-se, vamos alternar em cada lado. Esquerda. E depois para a direita. Tudo bem? Agora, tudo o que precisamos é de um reprodutor. Configurar. E para isso, vamos ver. Podemos usar nossos scripts de spinner? Bem, esses são veículos, então realmente não faria sentido em termos desse código. Mas o resto, parece que faria sentido. É isso que estamos nomeando aqui, direção certa. Sim. Então, poderíamos usar o mesmo código giratório e simplesmente criar mais desses spinners E isso é perfeito. Acho que fazemos isso. Vá em frente e crie esse gerador. É SponnorFive, limpe seu veículo, encontre meu diário, traga isso E talvez tenhamos que configurar, vou executar isso bem rápido. Acho que também temos que definir a rotação do nosso registro. Onde está meu registro? Estou meio confuso aqui. Sim, ok, então aí está o registro. Está ficando completamente vertical. Então, precisaríamos configurar isso. Tudo bem, então vamos criar um novo script e depois um gerador de plataforma, já que temos que ajustar algumas coisas Então, seguimos em frente e basicamente temos as mesmas coisas aqui, embora tenhamos plataforma e plataforma de geração, instância da plataforma PI Oh, isso parece bom. Deixe-me ir até meu patrocinador e ver a cena do registro Novamente, plataforma. Yo. E agora temos que dar uma olhada em nossos registros aqui. Qual é a rotação que eu configurei? Y é definido como menos nove. Está bem? Então, temos que ter certeza de definir isso. Então, digamos rotação de pontos pi. Podemos fazer isso, certo. É uma rotação R Y igual a menos 90. E vamos ver se esse patrocinador está trabalhando. Lembre-se daquele esponjista aqui embaixo. Matt, em um próximo, digite int. Então eu acabei de ter a ideia. Agora, primeiro de tudo, eu errei completamente. Eu estava tentando carregar a cena de registro errada. Eu estava tentando carregar a partir dos dois D em vez dos três D, então isso é parte do motivo pelo qual eu estava recebendo alguns erros. Mas então, em nossa plataforma aqui, podemos seguir em frente e dentro do nosso pronto aqui, ir em frente e definir nossos graus de rotação aqui. Se você quisesse fazer isso, você poderia. Espero que isso não afete nenhuma das outras plataformas que você criar posteriormente Mas, muito bem, evite isso. Na verdade, acho que eu realmente não evitaria isso porque vai surgir a mesma situação. Ele vai aparecer e ser girado. Eu só vou seguir em frente e perder um. Vou colocá-lo aqui no meu lugar, então estamos pegando plataforma de BI instantânea e definindo os graus de rotação, e eu a configurando para um vetor três, que são apenas três dados, certo? X, Y e Z, ou em cores, seria como RGB, certo? Então zero, menos 90 e zero, e isso agora o posiciona corretamente na orientação, eu diria. Então, agora só precisamos fazer com que nossos registros se movam na direção correta. Eu, bem como o poço, a direção correta, bem como a posição do patrocinador Então, para isso, vou apenas dar uma olhada em onde meus registros estão definidos. Por exemplo, essa, a transformação aqui, menos 29 e menos um. Isso é bom o suficiente. Posição, menos 29 e menos um. Agora esse registro, eu posso excluir completamente e podemos ter outro patrocinador com essa transformação, que seria menos cinco e menos 29 também Isso é menos 29 e menos cinco. Aqui vamos nós. Agora, esse registro deve poder ser excluído, e ainda devemos ter nossos dois patrocinadores do registro à direita, indo para a esquerda Exceto que minha direção está errada, então, na verdade, estamos saindo da tela continuamente para a esquerda. Ok, então vamos em frente e você não precisa fazer essa parte, é claro, porque se você estiver criando plataformas diferentes, suas tartarugas vão para a esquerda, seus troncos vão seus troncos vão Então, isso vai ficar perfeitamente bem. Mas como vou usar os registros aqui em vez de criar várias coisas agora, vou criar uma variável para orientação. Por padrão, vamos definir isso como um. E quando eu os gerar, vou dizer que é diconolrecon Eu configurei esses dois para geradores de menos um bloqueio, eles devem ir para o agora mesmo Então, como desova , espero que eles estejam desovando aqui. espero que eles estejam desovando aqui Aí estão eles. Não. Tudo bem, então onde estão meus registros? Não, o registro está aqui. A direção é menos um, então deve estar indo na outra direção. Oh, eu coloquei os registros dessa forma. Opa, isso foi um erro meu na época. E é melhor defini-los todos em um negativo por padrão, então. E temos esse tempo de plataforma aqui, o que é um pouco chato, mas aí Meus registros estão indo nessa direção. E eu posso simplesmente colocar três do outro lado e ter menos um como direção. Então eu vou fazer isso mano. Tudo bem, então eu coloquei meus patrocinadores do outro lado, para que possamos seguir em frente e rodar o jogo, aparecer Estamos todos bem. E esperamos que esses troncos apareçam e veremos se podemos pular até o outro lado, mesmo morrendo quando chegarmos ao lado porque ainda não temos nossa condição de vento. Então, nesse ritmo, sim, acho que gostaria de acelerar meus registros agora, com certeza. E eu tenho que redefinir essas direções para três, quatro, cinco. Eu acredito que três, quatro, cinco, isso é um positivo. To deveria ser negativo agora. Incrível. E eu disse que queria mudar o roteiro, digamos, horários de direção. Vamos fazer três. Vamos ver o quão rápido isso é muito rápido, vamos reduzir para dois. A parte superior do outro lado. Vamos ver o que três nos darão. Registros. Onde você está? Ok, três não é tão ruim. Podemos ir em frente e subir lá. E agora, meu sapo também não está se movendo, não está se movendo rápido Estou meio que pulando por aqui. Mantenha-se atualizado. Temos que consertar isso. Aqui vamos nós. Conseguiríamos atravessar, e isso seria uma vitória teórica. Então, no meu player. Vou mudar esse um , dois ou três, porque acho que vou ficar com três. Experimente mais uma vez. Só para ter certeza de que tudo está indo bem. Traga-me meu diário. Aqui vamos nós. E agora nossa velocidade aumenta. Eu posso pular para o próximo tronco. Cocô de cocô. Aqui vamos nós. Tudo bem, então podemos atravessar até o outro lado. Excelente. E tudo está dando certo. Temos nossas plataformas funcionando, e agora tudo o que você precisa fazer se quiser criar suas tartarugas, faça a mesma coisa Você pode simplesmente criar sua pequena lança ao longo dos anos, certo? Use seus pequenos cilindros e aperte-os até formar pequenos discos, e então tenha uma área exatamente como essa, apenas o ponto que cobre o meio E assim, você terá uma nova plataforma totalmente configurada. Tudo bem, então isso vale para nossas plataformas de água. E a seguir, acredito que temos nosso winspace. 55. Correção de vazamento de memória: Tudo bem Então, antes de entrarmos em nossa condição de vento, agora que nossos veículos e plataformas estão prontos, vamos voltar novamente a esse vazamento de memória, onde temos plataformas e veículos infinitos que estão constantemente se movendo no vazio e constantemente ocupando Vamos nos livrar deles quando não precisarmos mais deles. Tudo bem, então vamos abrir nosso script de plataforma e nosso script de caminhão ou veículo. E vamos resolver isso exatamente da mesma maneira, muito simples. Dentro do nosso processo aqui para nosso caminhão, vamos seguir em frente e vamos fazer isso se nosso ponto X de posição global for maior que 436 ou qualquer outra largura, certo? Por mais larga que seja sua janela, direi que mais 100 é o espaço que estamos dando ou a posição global, ponto X menor que menos 100, sem pontos próprios, e faremos a mesma coisa com nossas plataformas. E vamos executar isso e ver se temos algum problema aqui. Ok. Não estamos encontrando nenhum. E vamos ver em que ponto eles desovam em nós? Ok. Agora, lembre-se de que 100 de desconto será muito diferente do que em dois D. Então, provavelmente deveríamos recusar isso de 100 para trabalhar com Então, vamos tentar dez. Então, digamos 346. Temos uma plataforma testada e feia lá. Mas vamos copiar isso para o nosso caminhão. Isso mesmo. Veja nossos caminhões surgindo. Por outro lado, isso não é espaço suficiente. Nós meio que podemos ver nossos caminhões e plataformas falhando lá fora. Portanto, eles claramente precisam de mais espaço do que isso para menos dez aqui. Então, vamos com menos 20 e ver se isso é espaço suficiente para eles. Não é suficiente para nossos caminhões. Parece que não é suficiente para plataformas, mas não. Então, agora estamos apenas ligando. Então, esses 100 negativos pareciam meio ridículos, no entanto? Vamos tentar menos 50. Nós vamos meio que discar isso. Veja se nossas plataformas são capazes de aparecer. E nossos caminhões vão mais rápido, no entanto. Então, vamos ver se eles podem desaparecer na tela aqui. Se abrirmos isso para que possamos ver o exterior. Ok, então os caminhões percorrem uma distância mais justa. Veja, eles desaparecem por aqui. É aqui que nossas plataformas também deveriam estar desaparecendo E do outro lado, eles simplesmente continuam indo, indo e indo. Ok, então vamos adicionar 50 que estamos desse lado, 346. Como está 336? 336 precisa estar bem Os caminhões desaparecerão? Eles desaparecerão em algum momento, isso é o que importa. Mas se você quiser entrar e discar desse lado para baixo agora, certamente, vá em frente e faça isso. Mas o importante é que excluamos nossos objetos, então estamos liberando a memória com os objetos que não precisamos mais Então, com isso, corrigimos o problema de memória que tínhamos nas duas versões D, que agora tínhamos três versões d. Eu não esqueci disso. Eu estava apenas adiando e estamos colocando nossos componentes principais primeiro. Tudo bem, vamos passar para essa única condição. 56. Ganhe espaço: Tudo bem, vamos criar o espaço eólico para o nosso jogador. Eu meio que limpo todas essas áreas à medida que avançamos. Então, vamos precisar do nosso script de jogador, e eu tenho um winspace aqui que eu criei É apenas uma área três D, e vou renomeá-la para ganhar espaço Ele também tem uma forma de colisão três D que eu adicionei. Seu formato é uma caixa e, para combinar com todo o resto, atribuímos a ela uma escala de dois em nossos três eixos. Então, agora devemos nos encaixar em qualquer lugar em que o colocarmos. Vamos adicionar um script a isso, nosso script de espaço eólico. E isso também terá alguns sinais conectados a ele. Será nosso corpo inserido. E eu acredito que isso é realmente tudo o que vamos precisar aqui. E em nosso jogador, foi aqui que adicionamos nosso novo estado, nosso estado de vitória, que significa que temos outra condição da LSF aqui embaixo, estado atual da LF é igual ao estado, vitória e, assim, faríamos nosso respot e depois definiríamos a zona de vitória, acredito que é assim que Vá em frente e adicione nossa nova variável, nossa zona de vitórias e ganhos. Isso é um touro prestes a cair por padrão. E vamos ver, em nossa morte, dizemos que se o ID é um , a plataforma é falsa e a zona de vento é falsa, então não estamos vencendo. Então, não estamos no espaço eólico. Não estamos na plataforma e estamos na água, então acabamos chamando isso de morte. Excelente. E vamos ver. Em nosso espaço eólico, chamamos duas coisas. Precisamos obter nossa zona de vento e pontos corporais. É igual a verdadeiro. E então nosso segundo ponto é definir o ponto do corpo do estado atual, estado atual é igual a vitória estatística e garantir que eu digite corretamente Estado atual, acredito que sim, mas vou copiar e colar apenas salvar o estado do identificador não declarado como escopo atual, certo? Body Stay Doot Win. Lá vamos nós. E, por enquanto, isso deveria fazer o que realmente não deveria fazer nada. Então, em nossa morte, digamos que você vai dizer “impresso morto”. Então, vamos garantir que tudo esteja sendo acionado da maneira que deveria Responder Imprima a palavra responder. E em nosso winspace Bem, também precisamos colocar a zona de vento de volta em Walls Mas também imprima o Win. E podemos ir em frente e testá-lo. Podemos ir para nossa cena principal agora. Main, por exemplo, com esse pequeno ícone de corrente, lembra? E vá em frente e faça uma busca pelo seu winspace. Traga-o aqui. Ganchos. Aqui está o meu. Faça backup. Serão dois espaços eólicos para essas zonas. Para caber em tudo. Incrível. E agora nós apenas o duplicamos. Segundo slot. E eu vou continuar até o fim. Preencha todas as minhas zonas. Tudo bem. Então, eu posicionei todos os meus pequenos espaços eólicos Vamos verificar se nosso texto está sendo impresso corretamente em nosso console. Deixe-me consertar esse jogo agora. Estou de volta a uma coisa pequena. Aqui vamos nós. Tudo bem, então vamos ver Passamos por um carro. Morremos e respondemos. Excelente. Ok, pulamos na água, morremos e respondemos Nós pulamos no tronco. Estamos bem. Pad, e estamos bem. Tartaruga, tronco, almofada, tronco. E nós entramos. Conseguimos uma vitória. Eu vejo uma vitória, um renascimento, um morto, um renascimento. Isso não soa como deveria ser. Vamos voltar para cima. Vá em frente e faça uma pausa aqui. Para que eu possa esclarecer o que está acontecendo lá. E continue com isso. S. Ok, até agora tudo bem. Nós entramos. Temos uma vitória, um respawn, um morto e um Ok, então isso não é ótimo. Isso significa que temos um bug lá dentro. Deveríamos ter conseguido uma vitória e um renascimento. Não deveríamos ter morrido. Acho que nosso respawn ainda não aconteceu. Isso não mudou nossa posição nem nada disso. Devemos definir nossa colisão primeiro. Sim. Relembrando a morte. Então, a única coisa que consigo pensar no momento é possivelmente algo aqui. Mas vamos tentar desabilitar isso mais cedo. Veja se isso funciona. Nós vamos descobrir. Meus registros, vamos. Essa é provavelmente a única coisa que eu mais não gosto nos testes Está constantemente fazendo a mesma coisa repetidamente. E esperamos por um registro. Lá vai. Quando respawn, temos um morto e respawn. OK. Então, vou tentar algumas coisas e ver qual delas resolve o problema. Talvez seja, talvez eu volte em 2 segundos. E vamos ver onde está a fonte aqui. Tudo bem, tive que analisar os dois D versus, ver o que poderíamos ter feito para resolver isso E eu estava apenas um pouco atrasado aqui no topo da identificação. Tivemos um pequeno cronômetro de 0,1 antes de conseguirmos nossa posição e tudo mais aqui Então aí está. Não é grande coisa. Mas com isso, você verá que agora podemos ir em frente e pular por toda a tela. Desfrute de ser um pouco sapinho. Vá lá. Traga os troncos. Vamos embora. Aqui vamos nós. Nós pulamos no tronco. Esperamos por pequenas tartarugas ou lírios, o que você quiser que sejam o tronco, o próximo bloco, o tronco e a zona de vento Aqui vamos nós. Conseguimos uma vitória e respondemos, sem morte. Oh, eu me deparei com aquele caminhão. E Z, ainda morremos se pularmos na água. Tudo bem. Então, vamos lá. Agora temos nosso espaço eólico pronto e a última coisa que devemos fazer. Devo configurar um sistema de pontuação e nossa cabana novamente. E então teremos nossa versão em três D totalmente configurada. 57. GUI de partitura e temporizador: Tudo bem, então aqui vamos configurar a pontuação, as vidas e nosso Hud, e isso será muito mais fácil porque podemos reutilizar o HUD que criamos nas duas versões Então, a principal coisa que vamos fazer é reutilizar nosso global Em seguida, usamos um pouco do TD. E teremos que renomear parte do nosso caminho aqui, e podemos fazer isso funcionar com as duas versões D e três versões D, se você quiser Mas basicamente vamos usar o mesmo script. Portanto, se você tiver três versões D e duas versões D em dois projetos diferentes, você pode copiar esse script e, em seguida, acessar as configurações do projeto e configurá-lo como um carregamento automático. Tudo Então, para fazer isso funcionar em três D para global. Agora você percebe que o meu diz main para o nó raiz da minha cena principal de três D aqui, que é um nó três D, e em dois D, era um nó dois D. Então, vou renomeá-lo para Min porque é assim que sou chamado, e vou substituí-lo em Update Lives, bem como na pontuação de atualização Tudo bem. E para o nosso cara, vou passar para a versão em dois D abri-la novamente. E vou clicar com o botão direito para não precisar recriar o Cara novamente, pois será exatamente o mesmo Vou clicar com o botão direito do mouse e selecionar a opção. Onde está? Salve a ramificação conforme vista. E quando você faz isso, você deve ter uma opção. Você deve fazer com que essa tela apareça aqui e você pode salvá-la. Vou entrar na minha cena de sapo ou três D aqui e resalvar a cena de Gooey Tudo bem. E isso é tudo que precisamos dos dois D. E, claro, você não precisa fazer isso. Você pode ir em frente e recriá-lo. Basta adicionar a camada de tela, o progresso da textura, os rótulos e tudo mais. Se é isso que você queria fazer. Vou adicionar isso agora , adicionar minha cena de Guy. E observe que não podemos ver isso aqui. Se você estiver recriando seu Guy do zero, você terá que clicar na opção de dois D aqui, dar uma olhada e recriá-la dessa forma, porque a camada de tela é um objeto de dois D, Algo renderizado na tela acima de todo o resto, mas é dois D, independentemente de o resto dos componentes serem dois D ou três Então, se fôssemos executar isso agora, podemos ver que tudo está no topo e como deveria estar. Portanto, lembre-se de que, se você mesmo estiver criando isso , tenha isso em mente. Se você quiser recriar isso, talvez seja necessário executar o jogo para ter uma boa estimativa de onde as coisas estão E o bom é que, se eu quisesse entrar aqui e editar alguns desses componentes, eu poderia entrar e mover as coisas, como você pudesse ver a atualização ao vivo no jogo. Assim, você sempre pode ter certeza de que tem as coisas em posição adequada. Vou parar de rodar o jogo lá. Então, se você recriar o Cara, vou mostrá-lo aqui novamente. Passe essa camada na parte superior. Aos rótulos do rótulo e do texto da partitura. Nossa barra de vidas é um progresso de textura, e temos aquelas texturas de vidas de Frogger que você pode usar como textura de progresso se abrirmos as texturas aqui para Temos uma barra de cronômetro, que, novamente, é a mesma coisa É apenas uma barra de progresso de textura e tem o retângulo quadrado verde, qualquer um que eu tenha criado, apenas para usar como barra aqui apenas para usar como Temos um rótulo que diz apenas hora para que o usuário saiba o que é, e temos um nó temporizador com o tempo de espera padrão de uma inicialização automática ativado, e o sinal de tempo limite é conectado ao nosso cara que Nosso script Guy está simplesmente no tempo limite. O valor da barra do cronômetro é menos igual a um. Então, isso fará com que nossa barra caia continuamente. E então, se o valor for zero, colocamos nosso nó de jogador chamado morte nele e, em seguida, redefinimos a barra para 30. Tudo bem. Espero que, com isso, você tenha tido tempo suficiente para salvar sua interface gráfica enquanto estava em cena, trazê-la de volta ou recriá-la E vou observar aqui que na barra Lives, nosso modo de filme é da esquerda para a direita, e em nossa barra de cronômetro, é da direita para a esquerda. Tudo bem. Mas depois de configurar essas duas coisas , lembre-se de que, em nosso Global, temos que mudar isso de nenhum TD para o principal. E isso é só porque o meu é rotulado como principal. Poderíamos simplesmente rotulá-lo como “não D. Seria confuso, mas poderia Ou se você o deixasse como padrão , em vez de principal aqui, você escreveria não para três D. Tudo bem. Então, quais são as coisas que temos que mudar? Bem, isso vai ser no nosso player aqui e no nosso WindSpace Mas vamos começar com o jogador. Isso será lembrado toda vez que subirmos, isso estará em nosso movimento aqui. É quando subimos, ganhamos pontos, certo? Então acessamos nosso mesmo global ou, se você o copiou, atualizamos a pontuação e, nos dois D, ganhamos dez pontos Então, na morte, seguimos em frente e temos que atualizar nossas vidas. Então, a atualização global Lives. E isso foi definido para menos um. E a última coisa que atualizamos no DEF é nossa barra de cronômetro. Então, com isso, teríamos que obter o node, certo? E teríamos que lembrar que nossos jogadores vão até o nível de pais, vamos até nível de pais, e então podemos descer até nosso cara, pegar um nível de pai e depois pegar nosso cara E então, a partir daí, podemos pegar nossa barra de cronômetro aqui. Barra de cronômetro. Apenas certifique-se de que eu escrevo isso corretamente. T maiúsculo, B maiúsculo, valor do ponto da barra do cronômetro é igual Tudo bem, então isso será reiniciado. E agora só temos que ir ao nosso Winspace aqui. E em nosso espaço eólico, só precisamos passar algumas semanas baratas aqui. Portanto, precisamos atualizar nosso valor de vários sapos. Portanto, nosso multisapo mais é igual a um. Você se lembra que, em nosso mundo, da forma como o Frogger funciona, aumentamos nosso multisapo e, quando chegamos a cinco sapos múltiplos, recebemos um bônus de 1.000 quadrados e, em seguida, nosso sapo múltiplo O espaço eólico, certo? Então, adicionamos ao nosso multiplicador lá. Adicionamos pontos à nossa pontuação global de atualização do SOE, e vamos somar 40 pontos aqui E então lembre-se de que também tínhamos o bônus de cronômetro. Então, com base na quantidade de tempo restante, adicionamos pontos adicionais à nossa pontuação. Então, vamos em frente e ganhe o bônus de tempo. Isso era VR e acabamos de chamá-lo de bônus de tempo. Era um número inteiro, dissemos que era igual a um nó e tínhamos que subir um, pegar nosso pai, certo, e então ele nos levaria até nosso nó principal no topo Então podemos pegar nosso cara e pegar a barra do cronômetro. E queremos que o valor disso multiplicado por dez seja o que estamos usando Isso nos dá um bônus máximo teórico de 300 pontos, mas pressupõe que você chegue lá em menos de um segundo, o que não vai acontecer E isso nos dá um bônus mínimo, supondo que você tenha 1 segundo restante de dez pontos Então, novamente, isso é bastante decente no bônus, algo em torno de 10-300 Embora, realisticamente, provavelmente será mais de 10 a 200 Tudo bem. E agora que temos nossos pontos de bônus, podemos prosseguir e atualizar, chamar a atualização de nossa pontuação novamente, pontuação atualização global de pontos e usar nosso bônus de tempo. Agora, passando por isso de novo, é claro, poderíamos simplesmente dar um bônus de tempo mais nossos 40 pela pontuação da atualização. Se você quiser combinar tudo em um, em vez de chamar nossa pontuação de atualização duas vezes. Você sabe, preferência pessoal, e isso é algo que você pode fazer sozinho. Quando falamos sobre código limpo e sobre como dar a você a capacidade de voltar e resumir o código do ator e limpar áreas que você acha que talvez estejam um pouco confusas Então você terá essa opção mais tarde. E a última coisa que precisamos fazer é redefinir nossa barra do cronômetro para 30 Então, vamos colocar o node, em nosso pai, no Gooey, pegar a barra do cronômetro e pegar o valor Vou apenas copiá-lo para lá e redefini-lo para 30. Tudo bem. E assim, nosso jogo deve funcionar com nossos antigos scripts globais e Goey e conferir Toda vez que eu avanço, eu ganho um ponto. Eu morro, eu perco uma vida. T foi reiniciado. Veja se conseguimos atravessar, embrulhar em nosso tronco ou sair, de uma vez por todas. Começamos a pular. E entramos na nossa zona de vento, vamos ver o que vamos ter. Passou de 180 para 320. Então, recebemos um bônus muito bom em nosso tempo. O tempo recomeçou e recuperamos uma de nossas vidas. Então isso é fantástico. Tudo parece estar funcionando perfeitamente bem com a transferência de nossa sacola. Então, novamente, Guy, isso é uma camada de tela. Com uma etiqueta com uma etiqueta de pontuação, uma etiqueta com um texto de pontuação. Nossa barra de vidas é um progresso de textura, e definimos a textura de progresso para a textura de nossas vidas, deixe-me obter o nome exato do ponto PNG da barra de saúde. A barra do cronômetro, acabei de chamar de Tr dot PNG. É outra barra de progresso de textura, e a textura de progresso é definida por meio do PNG de pontos do cronômetro Em seguida, temos um rótulo com a palavra hora ao lado. Temos um nó de cronômetro com o início automático ativado com um tempo de peso padrão de 1 segundo Ele tem o sinal de tempo limite conectado ao script Boy. No tempo limite em nosso script Gooey, subtraímos um do valor da nossa barra de E se nossa barra de cronômetro for zero, chamamos o jogador de morte e reiniciamos para 30 Em nosso player on death, chamamos Update Lives em nosso global que estávamos usando dos dois D é menos um, vida subtraída Também temos nossa barra de cronômetro, então subimos uma e pegamos os pais. Em seguida, passamos pela nossa GUI até a barra do cronômetro, acessamos a propriedade value Definimos 30 e, quando subimos e somente quando subimos, acessamos nosso global novamente, atualizamos a função SCOR e passamos dez pontos E nosso script global examinará isso novamente, caso você não consiga encontrá-lo sozinho por qualquer motivo. Aqui está. Portanto, temos algumas variáveis as melhores pontuações: um inteiro definido como zero por padrão, vários sapos, um inteiro, vivo, você define como seis por padrão, novamente, outro número inteiro, e o multiplicador é um número inteiro definido como um, nossa pontuação de atualização de função usa um parâmetro de nova quantidade, que E fazemos com que nosso ILS verifique se vários sapos são menores que cinco, basta marcar mais é igual Então, basta adicionar o novo valor à nossa pontuação se não tivermos os cinco multiprogs Então, a única outra maneira que poderíamos ter aqui é se tivermos cinco ou mais, em vez de adicionar a nova quantidade, adicionamos 1.000 pontos e reassentamos o Multi frog E então verificamos se a pontuação dividida por 10.000 vezes nosso multiplicador é maior ou igual a Em seguida, atualizamos nossas vidas, chamamos isso de função de atualização de vida e adicionamos uma a ela, e definimos nosso multiplicador, mais igual OK. Agora, depois disso, fora desses blocos FL, obtemos nosso texto de pontuação e simplesmente atualizamos o texto com nossa nova pontuação, convertemos nossa pontuação em uma string, chamamos PAD zeros e adicionamos cinco deles Isso nos dará nosso acolchoamento aqui no topo. Certifique-se de que sempre tenhamos todos esses cinco zeros, mesmo que nossa pontuação seja de apenas um dígito Em seguida, nossa função de atualização Lives, temos um valor como parâmetro, que é um número inteiro Se as vidas forem zero, vamos pegar Tree e recarregar a cena atual, reiniciando o jogo de forma eficaz Caso contrário, vamos fazer Vidas mais igual a quantidade, e vamos pegar o nó, subir nosso pai, descer nosso nó principal, descer nosso Hoey, até nossa barra de Vidas, obter o valor e adicionar mais igual à quantidade pela qual estamos atualizando nossas vidas obter o valor e adicionar mais igual à quantidade pela qual estamos Tudo bem. Então esse é o nosso script global. Novamente, se você não o pegou ou não conseguiu encontrá-lo, alguma forma o perdeu. Aí está. Aqui está novamente, uma análise rápida, bem como o roteiro de Goey e a configuração de Gooey na cena, como você pode ver Como as pequenas mudanças que adicionamos ao nosso player para que tudo funcionasse. E se, por algum motivo, você estiver lutando para habilitar seu global, se você o reescreveu e o trouxe, deixe-me ver se consigo capturar isso rapidamente Então você vai até o seu projeto, acessa as configurações do seu projeto. Não carregue automaticamente, aperte este pequeno botão aqui e você poderá selecionar seu script global no pop-up O nome do nó que será preenchido automaticamente aqui será o nome do seu script, que seria global E basta clicar no botão do anúncio e ele aparecerá aqui embaixo. Apenas certifique-se de ativá-lo e se o nome é como você o acessa. É por isso que podemos digitar a palavra Global e ter acesso ao script. Mas aí está. Há nosso sistema de pontuação, o bônus do cronômetro e o Gei, todos adicionados ao nosso jogo E agora podemos seguir em frente e jogar Ride Boger. E não teremos problemas à medida que avançamos. Tudo bem. Então é isso. Cuide-se, tenha uma boa noite, e podemos passar para a próxima semana Se você quiser adicionar áudio , é a mesma coisa. Basta adicionar um reprodutor de stream e carregar o que são todos eles MP threes ou algumas ondas vv Arquivos. Sim, os dois P três e os arquivos. Então você pode ir em frente e usá-los exatamente da mesma forma que os dois D. Basta adicionar um reprodutor de stream de áudio à cena principal e ao plano de fundo e o tema principal da música de fundo será enviado para reprodução automática E para o seu player, você pode adicionar um stream de áudio, carregar as fontes de áudio e tocar conforme necessário, desde squish, punk e Exatamente o mesmo que acontece com os dois D. Então, se você quiser acrescentar que esqueceu, pode voltar lá Semana três, dê uma olhada. Mas acho que isso vai acabar nesta semana. Agora temos uma versão em três D do nosso pequeno jogo Frogger aqui, para que possamos atravessar a pequena estrada e chegar à nossa pequena zona de vento, pular por nossas pequenas plataformas e, com sorte, não sermos esmagados pelos caminhões 58. O que é uma API: Tudo bem. Olá, pessoal. E hoje, vamos embarcar em uma empolgante jornada pelo mundo das APIs Se você já se perguntou como diferentes aplicativos de software se comunicarão e trocarão informações, este é o lugar perfeito para começar Agora, imagine que você está em um restaurante e quer pedir seu prato favorito. Bem, no mundo da programação, esse processo é semelhante ao funcionamento das APIs Vamos mergulhar e explorar esse conceito fascinante juntos. Primeiro, vamos entender o que uma API ou o que significa API. API significa interface de programação de aplicativos. Pense nisso como um menu ou um conjunto de instruções que permite que dois sistemas de software conversem entre si e compartilhem dados. Assim como você pede uma refeição um garçom e um garçom leva uma solicitação para a cozinha, a API serve como intermediária que facilita a comunicação entre os a um garçom e um garçom leva uma solicitação para a cozinha, a API serve como intermediária que facilita a comunicação entre os diferentes componentes do software. Então, para tornar esse conceito ainda mais claro, vamos usar a analogia do restaurante, que você vê na tela Então você, o cliente, representa o aplicativo de software, e a cozinha representa outro. Agora, essa pode ser sua própria ferramenta que você cria e deseja que o outro aplicativo, a cozinha, talvez seja o Spotify, por exemplo, ou o Twitter ou talvez um banco de dados do Aime, algo com o qual você queira conversar e obter informações Bem, você quer pedir uma refeição deliciosa, obter as informações, mas não tem acesso direto à cozinha. Então, em vez disso, você comunica seu pedido ao garçom que atua como a API nesse cenário O garçom entende seu pedido, leva para a cozinha, o outro aplicativo de software em seu nome A cozinha prepara sua refeição de acordo com sua solicitação e a devolve ao garçom O garçom, atuando como API , traz um prato recém-preparado de volta No mundo da programação, APIs funcionam de forma semelhante Eles definem um conjunto de regras e protocolos que permitem que diferentes aplicativos de software solicitem e troquem dados sem problemas APIs podem ser usadas para acessar dados de servidores web, integrar serviços de terceiros ou até mesmo interagir com dispositivos de hardware Então, digamos que você entre em um restaurante, certo? Você se senta no computador, o que está fazendo. Você está usando seu aplicativo e, em seguida, informa ao garçom ou à API o que deseja formatando os dados corretamente A API ou o Witter então volta para o aplicativo de software de terceiros, banco de dados, seja ele qual for, obtém essas informações e as traz de volta para você. Então você tem as informações para fazer o que quiser. Então, em resumo, as APIs são como intermediários que facilitam a comunicação entre diferentes sistemas de software Assim como um garçom leva o pedido para a cozinha e para um restaurante, eles permitem que os aplicativos conversem entre si, compartilhem dados e realizem várias tarefas sem precisar entender o funcionamento interno uns dos outros. Tudo bem. Aí está. Uma rápida introdução às APIs usando a analogia clássica do restaurante Espero que a analogia ajude você a entender o conceito fundamental de APIs e seu papel no desenvolvimento de APIs e seu papel Lembre-se de que as APIs são ferramentas poderosas que permitem integração e colaboração perfeitas entre vários componentes de software 59. Como usar uma API: Tudo bem, pessoal. Ei, vamos dar uma olhada em onde obter uma API e como é se podemos usá-la e, como é se podemos usá-la especificamente, aquela que vamos usar em nosso exemplo de código para ajudar no aprendizado, será a API de clima aberto aqui. Portanto, se você vier aqui para abrir o clima, poderá se inscrever em uma conta e poderá perceber que talvez precise preços e selecionar um plano aqui, mas eles têm um plano gratuito que oferece 1 milhão de ligações por mês, 60 chamadas por minuto. E podemos ver o clima atual e isso será o mais importante aqui. Agora, todas essas outras informações todas essas chamadas e tudo mais, é claro, você sempre pode se sentir à vontade para fazer isso, mas essas APIs são muito caras Você recebe muitos recursos e muito mais chamadas por minuto e por mês. Obviamente, você realmente não vai conseguir nada perto disso. A menos que você tenha um aplicativo lançado publicamente que seja bastante popular. Portanto, para aprender , especialmente se for um dos primeiros aplicativos que você está lançando, o nível gratuito provavelmente é muito mais do que suficiente do que você precisará. Então, se você precisar, vá em frente e assine isso. Eu já tenho o meu, que, como você vê, diz , pegue o APIK Agora, como é que realmente usamos essas APIs? Bem, se dermos uma olhada no topo, vemos que temos um guia aqui. E clique nele, espere um segundo para ver também. Lá vamos nós. Nós estamos aqui. E é interessante que eles o chamem de Got here. Na maioria dos lugares, chamaremos isso de documentação. E é aqui que devemos ir em frente e usar o comando come down here e damos uma olhada, ver se podemos encontrar o segundo exato para usá-lo. Especificamente, a torção em clima aberto. Por chamada. Então, vamos lá. Então, agora estamos na página aqui para obter a documentação específica sobre o clima aqui. E podemos ver o conceito do produto. Temos nossa previsão atual sobre dados meteorológicos como começar . Temos nossa chamada de API aqui, vejo que precisaremos de uma chave de API para esta. Temos todos os parâmetros listados aqui, quais são obrigatórios, quais são opcionais. E então temos um exemplo de uma chamada de API aqui. E um exemplo do tipo de resposta que receberíamos. Agora, quando recebemos uma resposta como essa, estamos recebendo uma resposta JSON E se você olhar de perto, podemos ver que são muitos pares de valores-chave. Assim, podemos tratar essa resposta e obter informações dela da mesma forma como se fosse um dicionário. E você pode ver todas as diferentes informações que estamos obtendo disso. O que é muita informação para analisarmos. Então, depois de se inscrever em uma conta, você pode ir até seu usuário no canto superior direito, acessar minhas chaves de API e ver uma chave lá. Caso contrário, você pode gerar uma e manter isso em mente ou manter esta página aberta, porque teremos que voltar aqui e pegar sua chave de API daqui para frente. Tudo bem. Então, vamos em frente. Mais uma coisa que mencionarei é que, se você estiver procurando por APIs gratuitas para usar APIs gratuitas e abertas, basta fazer uma simples pesquisa no Google e descobrir que há lugares que têm uma lista completa de todos os tipos diferentes que você ou de diferentes tipos existentes, com links para todos eles Portanto, fique à vontade para, é claro, sempre praticar e conferir algumas das outras, ver como talvez a API de uma empresa opere de forma um pouco diferente da outra. Mas é isso aí, vamos seguir em frente e entrar no Goto na próxima Manter nossa chave de API ativa? Oh, eu escondo isso um pouco, então nós realmente não vemos isso na maior parte do nosso código. E bem, vamos começar a partir daí. 60. Configuração do script: Tudo bem Novamente, você pode ir em frente e criar um novo projeto, se quiser. Acabei de criar uma nova pasta para a seção API e websocket aqui E, obviamente, para que as coisas funcionem, precisaremos de algum tipo de cena rodando aqui. Então, vou criar uma interface de usuário, o que, obviamente, nos dará algum controle para começarmos aqui, chamaremos essa demonstração de API ou sabe o que? Essa API. Isso é bom. Depois vou salvá-lo, manter o mesmo nome e armazená-lo na minha pasta. Eu tenho uma cena chamada API. E, claro, isso vai precisar de um roteiro. Agora, a cena real aqui não importa, a menos que você queira o usuário possa inserir informações aqui, como, é claro, uma caixa de texto ou uma rota de edição de linha, devo dizer, para que o usuário digite as informações relevantes, e então talvez você tenha um botão que captura todo o texto dessas caixas Mas, na maioria das vezes, não precisamos de nada lá, mas precisaremos mais uma parte dessa cena aqui, que será uma solicitação HTTP, para possamos adicionar uma delas à nossa cena. Eu e uma solicitação HTTP é na verdade, o que nos permitirá fazer uma chamada para uma API, para um site ou serviço web de algum tipo. E então, quando isso é concluído, algumas informações são enviadas de volta para nós e, com base nessas informações, podemos analisá-las para obter os dados que estamos procurando ou podemos pegar essas informações para obter os dados que estamos procurando ou podemos pegar essas informações e talvez atribuí-las a algumas variáveis para enviar outra solicitação para uma seção diferente porque algumas APIs exigirão dados extras a forma de algo chamado cabeçalhos, mas por isso, sendo uma API simples, não é muito difícil acompanhar Tudo o que precisamos fazer é fazer uma solicitação e recuperaremos os dados JSON Tudo bem, então em nosso APM, vou adicionar um script E vamos ter algumas variáveis aqui. Então, variável, eu vou ter a chave de API, que eu direi que você deve ter sua chave de API. Deveria estar escondido. Ele nunca deve ser carregado em nenhum lugar. Isso é algo que você deve manter o secreto e oculto possível. Então, chave de API, isso vai ser apenas uma string. E você pode obter isso novamente no site. Eu posso simplesmente copiar e então você pode ir em frente e colar lá. Agora, você pode ver este. Ou ele ficará desfocado para o vídeo ou eu posso simplesmente desativá-lo para que não funcione mais Depois de gravar isso, não é grande coisa no momento, mas lembre-se de que isso é algo que você deve manter secreto possível. Ok, de que outras informações vamos precisar? Bem, se voltarmos e dermos uma olhada nos dados, desculpe este. Vamos ver o que é necessário. Vamos precisar de muita coisa, então uma latitude e uma longitude ID do aplicativo, essa será nossa chave de API. Nós temos isso. Excluir é opcional e todo o resto é opcional. Ok, então podemos simplesmente colocá-lo em latitude e longitude para isso Tudo o que estamos fazendo é examinar a documentação desse Davar Long, que será flutuante e também precisaremos de uma para Lap, Sauce Float precisaremos de uma para Lap, Sauce E essas são as informações mínimas de que precisaremos. Agora, se fôssemos dar uma olhada na chamada da API, como faríamos isso, isso, copiaríamos, trocaríamos outra variável aqui pela string de URL, e aí vamos uma string bem longa. Portanto, temos HTTPS colon slash slash gmther ou este é o exemplo de chamada Então você vê que vamos colocar a latitude aqui, a longitude aqui, excluindo, vimos que isso é completamente opcional E como não temos informações adicionais aqui no momento, vou excluir essa parte e o ID do aplicativo, que é para onde nossa API vai. Ok. Então, o que vamos fazer é usar um espaço reservado que é uma porcentagem em um S minúsculo e vamos usar isso para nos livrar desses colchetes encaracolados e do que está dentro Então, teremos a latitude, longitude e chave de API, então essas são três coisas que precisamos lembrar Então, a primeira coisa que quero fazer é que precisaremos de uma latitude e longitude, que, por enquanto, podemos dar a ela um zero, zero padrão E dentro de nossa função ready, para fazer essa chamada de API, precisamos prosseguir e receber nossa solicitação HTCP, mas chamaremos isso apenas de parte de configuração Vamos dividir isso no próximo. Então, acessaremos nosso HTCPRquest e, na verdade, conectaremos o sinal de solicitação concluída à API E você verá que obtemos um resultado, um código de resposta, alguns cabeçalhos e o corpo O corpo será a peça importante aqui. Vou salvar isso, fechar todas as outras guias. Tudo bem, então eu vou terminar esse vídeo aqui, então podemos dividir isso aqui a seguir E no próximo vídeo, prosseguiremos com a próxima palestra. Vamos fazer a chamada real da API e analisar os dados que recebemos de volta para que possamos realmente usá-los e ver o que temos 61. Como fazer chamadas API: Tudo bem. Então, eu quero fazer uma anotação: aqui está uma que estamos vendo para uma ligação. Portanto, o URL é um pouco diferente. São dados de corte de api.weathermap.org . Em seguida, corte 2,5 e corte WE Question Mark. E então é aí que temos nossos parâmetros para Lat Long e App ID Portanto, é um pouco diferente o URL aqui agora. Para esta versão, ele gritou comigo quando eu estava testando, mas uma ligação era ter que assinar um serviço diferente Então, é um pouco estranho tentar encontrar a documentação sobre isso, mas vamos em frente e pegamos nosso nó de solicitação HTTP e chamamos a função de solicitação Passamos o URL e, para preencher esses espaços reservados, fazemos um sinal de porcentagem E então temos um par de colchetes como uma matriz, e passamos nossas variáveis lat, on e nossa chave de API Agora, você notará que, se tentarmos apenas imprimir o corpo aqui, temos muitos dados aqui. Nada disso realmente faz sentido para nós, mas estamos recebendo algo em troca, o que é ótimo. Agora, geralmente, você provavelmente gostaria de fazer uma verificação F aqui com um código de resposta para ter certeza que o que está sendo devolvido indica que não estamos tendo nenhum erro. Então, se apenas imprimirmos o código de resposta, você verá que obtemos o código 200, o que significa que tudo correu bem para ser examinado. Agora, se obtivermos um erro 400, então, bem, eu acabei de estragar , é um erro Então isso significa que algo deu errado, algo não está funcionando. Os dados não voltaram, o serviço está inativo, a solicitação não está formatada corretamente, informações incorretas, seja o que for, há um erro Assim, poderíamos verificar se código de resposta é 200 apenas por segurança. Se o código de resposta for igual a 200, certo? Então, podemos dizer que se tudo correu bem, agora, como obtemos esses dados? Porque vimos que era uma matriz, mas uma matriz de apenas um monte de números aleatórios. Bem, temos que analisar isso. Então, a primeira coisa que vamos fazer é criar uma nova variável para nossa resposta, que será definida para o nosso corpo, mas da qual queremos obter os dados. Então, dizemos ponto e, se digitarmos UTF oito, veremos a sequência de UTF oito com um sublinhado entre cada uma delas Então, agora, se prosseguirmos e imprimirmos nossa resposta, vamos ver o que acontece. Ok, bem, temos informações. No entanto, em muitos casos, você dará um passo extra aqui, Anine Vou apenas criar minha variável temporária aqui, TD para dados temporários. E para isso, chamamos nossa string de análise JSON e podemos passar nossa resposta para E agora vamos dar uma olhada no que recebemos de volta depois de analisarmos a string Aí está, algo que é um pouco mais fácil de ver, espaçado um pouco melhor Temos comas no meio, tudo. É mais agradável de ver, mas sempre pode tornar ainda mais agradável realmente querer apenas olhar para as Mas na base, no momento, TD agora representa todas as informações que precisamos ou precisaríamos. Certo. Se isso foi difícil para você ver e ler, eu entendo. Tudo bem, mas podemos melhorá-lo um pouco só para facilitar a visualização. E aqui vamos chamar a classe JCN e podemos chamar o methicon stringify, passar nossos dados, passar nossos dados, TD e um segundo argumento de uma string que contém apenas um espaço E se analisássemos o resultado agora, tudo seria muito mais fácil de acompanhar a leitura. Então, se é disso que você precisa, fantástico. É assim que você pode torná-lo bonito e limpo. Tudo bem. Então, agora saberíamos que, se entrássemos aqui, poderíamos imprimir o TD e obter uma informação daqui, como ver se Maine é o que estamos procurando. Então, podemos pegar o Maine e imprimir isso. E vemos aqui embaixo, se eu apenas comentar isso, comente a linha com Controle K para que não possamos confundir as informações antigas Podemos ver aqui a temperatura. Aqui está a sensação. Tempman Max, pressão, umidade, nível do mar e nível do solo Agora, eu mencionei antes que precisamos de latitude e longitude Então, um lugar onde podemos ir para fazer isso, se eu voltar para a captura de tela aqui. Este site aqui se chama latlondt net. E, como você pode ver, basta clicar em qualquer lugar do mundo e obter uma posição de latitude e longitude Então, por exemplo, se fôssemos descer , eu escolheria Vancouver aqui e clicaria lá. 409-25-6791 Vou copiar isso e configurá-lo para minha operação aqui. Então, o primeiro é em. Eles estão aqui e minha longitude está aqui. Faz s. Então você pode ir em frente e chegar a qualquer lugar do mundo aqui, obter sua latitude e longitude Como você vê, você também pode simplesmente digitar um lugar aqui e ele deve aparecer para você. Tudo bem. Então, com essas informações inseridas, vamos prosseguir e executar isso. Veja o que obtemos agora, a temperatura 288,11 parece 288,14. Agora, obviamente, esses números parecem bem altos. Então, a pergunta seria : por que isso? Bem, é aqui que entram em jogo os dados que estamos obtendo. Aqui está. Acabei de nos levar aos campos em nossa resposta da ATI aqui na documentação. Eu entro aqui, podemos ver onde estamos aqui? Ponta aqui. Portanto, a temperatura dentro do Maine, a unidade padrão é Kelvin É por isso que é tão alto para nós o número que estamos vendo em 200 e algo assim. Lembre-se, opcionalmente, você tinha a opção de inserir métricas ou imperiais dentro do nosso opcional se formos até as unidades aqui, certo? Veja, podemos colocar uma métrica imperial padrão. E as unidades padrão serão aplicadas por padrão. Então, o padrão seria nosso Kelvin, e então temos nosso imperial mexicano, certo? Então, como os adicionaríamos para obter informações? Bem, simplesmente, como você vê aqui, se seguirmos o padrão, temos apenas o e comercial, o parâmetro é igual e, em seguida, o que estamos procurando Então, se quisermos adicionar unidades, então devemos apenas fazer com que as unidades de ampersand sejam iguais, e eu acredito que é preciso uma mola Então, vamos em frente e voltemos. E vamos adicionar unidades ou unidades. E, como eu disse, acredito que será apenas uma primavera. E para nós, vamos para algo como poderia ir para Celsius E eu acho que é isso que eu vou fazer. Não é Celsius. Precisamos ir com o México ou o Imperial. Vamos seguir em frente e digitar a métrica. E eu só estou entendendo isso examinando a API. Eu vejo uma métrica em letras minúsculas, assim como em Tempio, então presumo que tudo esteja em minúsculas Então, precisamos adicionar isso ao nosso URL. Então, vou seguir em frente e depois da minha longitude, mas antes do ID do meu aplicativo, vou colocar a unidade Ampersand igual E então teremos nosso espaço reservado aqui novamente. Agora, na minha solicitação, temos latitude, longitude e, antes da chave de API, posso passar unidades E se dermos uma olhada agora, você verá que recuperamos 14,85 E a mesma coisa se substituíssemos a métrica pela imperial, agora deveríamos obter o equivalente em Fahrenheit agora deveríamos obter o equivalente em Fahrenheit de 58,44. Tudo bem. Então é assim que podemos obter essas informações. E agora você pode definir o texto de, digamos, um rótulo na tela, ou você pode ter imagens diferentes dentro do seu aplicativo e você pode alterar ou exibir a imagem com base tipo de clima , certo? Assim, podemos ver a temperatura, a pressão, a umidade. Mas lembre-se, isso é tudo, não é toda a informação que temos, certo? Podemos dar uma olhada na temperatura do ponto principal do clima? Talvez eu esteja errado, espero que não, mas se sim, acho que teremos um erro em nossa impressão Sim, temos um erro lá dentro. Vou apenas dar uma olhada em descomentar minha sequência de informações precisas para que eu possa dar uma olhada Vento, clima. Ok, então parece que é só o clima. Sem principal. Então, TD e eu vamos extrair o atributo climático disso. Limpe isso. E, na verdade, o ID é de 81 nuvens principais. Descrição, algumas nuvens. Então você vê, agora nós podemos ver, ok? O clima principal aqui é considerado nuvens, então seria nublado Então, agora eu poderia exibir talvez uma imagem nublada na tela para acompanhar isso ou alterar o plano de fundo do aplicativo para ficar nublado Como você pode ver, há um ícone aqui também nesses dados. Não tenho certeza de onde vem esse ícone. Mas se você soubesse onde e eles lhe dessem um link ou um ID ou algo para uma imagem, é possível que você acesse e busque essa imagem na Internet, para e busque essa imagem na Internet, que você pudesse usá-la, o que seria mais ideal Mas, novamente, não sei de onde vem esse ícone. Portanto, não tenho 100% de certeza de onde vincular o dínamo gar para fazer isso Mas esse é o básico fazer essas solicitações simples de API E algumas solicitações se tornarão mais complicadas do que isso e exigirão que você realmente se sente e examine a documentação que elas podem exigir autorização, certas permissões concedidas. Talvez seja necessário esperar que o usuário se autentique. Talvez você precise colocar várias informações em seus cabeçalhos, que viriam após a solicitação Então, temos a URL aqui. Teríamos apenas uma vírgula e , em seguida, nossos cabeçalhos personalizados, que teriam a forma, acredito, de uma matriz Isso você pode passar , e então podemos obter outras informações, como G, postar o método que queremos usar. E G é simplesmente o padrão, que é o que estamos fazendo aqui. Estamos solicitando à API informações do banco de dados, e publicar seria como enviar informações para o banco de dados, como uma tabela de classificação. Por exemplo, se você tem algum tipo de configuração de tabela de classificação que trabalha com uma API, pode enviar informações para lá usando o método post post em vez do método get here pode enviar informações para lá usando o método post post em vez do método get Mas aí está. É assim que os fazemos Esse é essencialmente o núcleo de fazer uma chamada de API. Qualquer coisa além disso é apenas uma questão de fazer chamadas para obter informações para você usar como cabeçalhos para obter os dados que deseja Mas no CR VIT, é isso que você fará. E se for simples, isso é tudo que você precisa. Se for mais complexo, como o Twitch, por exemplo, você terá que ler a documentação, mas a documentação do Twitch não é Então, você provavelmente terá dor de cabeça e problemas ao tentar passar pelas fases de documentação do Twitch Mas aí está. Essas são as noções básicas de como fazemos chamadas de API. 62. RapidAPI Python para GDScript: Tudo bem, pessoal. Você pode ignorar o erro que está na tela. Isso é só porque as variáveis ainda não existem. Mas eu queria falar sobre isso e vou usar Eu tenho uma cena separada aberta para isso. É idêntico ao primeiro. Ele só tem um script dk, e isso vai entrar em um banco de dados de anime Eu escolhi este só porque o anime é popular. Tão popular quanto o anime e a quantidade de programas que existem. Se vocês estão assistindo, provavelmente é uma boa chance de gostarem anime ou pelo menos terem experimentado em algum momento. Mas esse é o tópico real aqui, é relevante? Acontece que é o que estou usando aqui como meu exemplo. Agora, quero falar com você sobre o uso de APIs on-line e quando você estiver pesquisando, porque você não encontrará nada para o script Goto ou GD A coisa mais próxima que você vai encontrar é algo como Python, que é bem Então, vou mostrar como podemos pegar o exemplo do Python que ele nos dá e usá-lo no Agora, o que estamos usando aqui é da API rápida. E a Rapid API tem muitas APIs gratuitas que são, bem, ambas gratuitas Este, como você vê, é premium. Então, se analisarmos os preços, temos várias opções aqui. O básico é gratuito, que é o que estou usando aqui. E veja, eu posso fazer 100 solicitações por dia e apenas duas solicitações por segundo. Então, obviamente, isso não seria ótimo para um aplicativo implantado, porque você pode receber mais de duas solicitações por segundo e, se começar a obter alguma popularidade ou tiver um usuário muito pesado, poderá facilmente ultrapassar essas 100 por dia Então, obviamente, lá em cima, se você vai fazer alguma coisa e aprová-la ou ela vai desmaiar. E, você sabe, os $5 ou $10. Pareciam alguns planos muito bons. Então, $10 são totalmente ilimitados, e os $5 são 5.000 por dia Mas você percebe que não temos nenhum. Você não tem um limite de quantas solicitações por segundo. Também escolho esse porque a latência é de apenas 591 milissegundos, ou seja, aproximadamente cinco ou 6 segundos desde a solicitação até o momento em que obtemos nosso banco Popularidade, 9,8 em cada dez, então é muito popular Foi atualizado há dois meses, então ainda está atualizado. Os níveis de serviço foram de 100%. Portanto, há muitos motivos pelos quais essa API é uma boa opção para nosso exemplo aqui. Tudo bem Então, tudo o que você pode fazer é acessar a API Rapid , se inscrever em uma conta e entrar e pesquisar o que estiver procurando. No meu caso, novamente, eu venho e procuro anime, e então temos todas essas APIs aqui Alguns deles podem ser dinheiro obrigatório, alguns podem ser totalmente gratuitos e alguns podem ser premium, como eu mostrei com o outro. Agora, o primeiro resultado aqui é o que estamos usando, e vemos se eu ajudo a função, mas podemos obter informações por ID. Podemos obter tudo, podemos obter gêneros. Então, há algumas coisas que podemos fazer e essa aqui chamada A Animation, podemos obter algo sobre um presente ou namorada, você quiser pronunciá-la, uma imagem, informação essa que não é demais para nós Nesse caso, começa a ultrapassar um pouco o escopo aqui, mas você pode ver que eles não são todos iguais. Todos eles oferecem serviços diferentes aqui. Isso é o que você pode obter. E veja, quando estou aparecendo, alguns deles dizem premium, outros dizem grátis Você pode receber um prêmio em algum lugar onde seja pago apenas, eu não sei, mas não parece. Parece que todos são gratuitos ou premium, pelo menos no primeiro pagier Então, vou seguir em frente e clicar em um deles apenas para mostrar um exemplo. Então, depois de decidir o que quer fazer, o que deseja obter, você notará no lado direito essas são todas as coisas que podemos usar. Então, digamos que quiséssemos um papel de parede aleatório. Clicaríamos nele e colocaríamos nossas informações aqui ao lado com nosso exemplo. E você realmente não consegue ver nada disso. Então, vou reajustar isso agora. Então, um momento. Por enquanto, isso servirá para nós. Mas você vê no lado direito, acho que esses são todos os diferentes serviços ou informações que você pode obter de sua API. E apenas clicando em um deles, você vê as informações mudando no lado direito e no meio. Então, é basicamente assim que eles vão funcionar. E você pode ver que todos eles estão prontos, mas alguns deles podem ser uma postagem, dependendo do que você está tentando fazer. E esse é o método que mencionei no final do último vídeo, em que muitas vezes usaremos get para obter informações, mas pode haver ocasiões em que você precise publicar e enviar informações. E se você decidir que este é o que você quer, basta clicar no botão Inscrever-se para testar aqui. E isso deve levar você à página de preços da fase de preços. Você também pode simplesmente vir até aqui e selecionar o plano que deseja assinar. E tudo isso tem um limite rígido aqui, como podemos ver. E você quer ter cuidado. Alguns deles não são um limite rígido, como você pode ver aqui, no caso deste, você será cobrado, que irá para sua conta Você será cobrado e terá que pagar. Esses 1,5 centavos um para o outro. Cada solicitação adicional, certo? Isso está de acordo com aquele e $0,03 neste. E isso, claro, no mega. Obviamente, eles aumentam à medida que você avança, mas o plano básico tem apenas um limite rígido. Portanto, esteja ciente de que alguns têm ou ultrapassam um determinado limite ao custo de você realmente pagá-los, mesmo que seja um plano gratuito. Tudo bem, vamos pular para o Whoops, essa é a API rápida. Não queremos esse. Só vou voltar aqui. Volte para o banco de dados de anime que estamos usando. E vou reposicionar isso melhor para nós. Então, só por isso, vou usar get all do lado direito, ou desculpe, o lado esquerdo aqui. Então esse é o que eu vou usar. Agora vou simplesmente deslizar a tela para ver melhor as coisas para nosso uso. Lá vamos nós. Tudo bem Então, para isso, o que vamos usar, e eu disse Python E, especificamente, se abrirmos isso, podemos ver exemplos de todas essas linguagens diferentes. E Python é o que queremos. E veremos o cliente HTTB bem como a biblioteca de solicitações Agora, em Python, você pode fazer isso de qualquer maneira, mas para nós, precisamos fazer esse tipo de análise das duas versões, para nos dar uma ideia E você vê aqui, temos cabeçalhos. Vou apenas copiar os cabeçalhos de lá. E se voltarmos ao Goto aqui, podemos seguir em frente e criar nossos cabeçalhos variáveis Agora, o deles tem colchetes e é um dicionário. O nosso tem que ser uma matriz para nossos cabeçalhos. Esses são colchetes. Eu só vou colar isso. Agora vamos ter um erro. Simplesmente porque, bem, temos pares de valores-chave. Não é assim que uma matriz funciona. O que vou fazer é ir para o meio, destacar esta citação, o destacar esta citação, espaço de dois pontos e a outra citação aqui E eu vou simplesmente deletar esse espaço de dois pontos Então, estamos basicamente removendo as aspas ao redor dela, tornando-as uma única string E você vê no final, ao devolver, você copia os dois. Já separamos isso por uma vírgula e faremos a mesma coisa aqui no meio Exclua, carvão no espaço. Então, temos dois pedaços de cordas aqui, e esses serão nossos cabeçalhos E eu entendi que você deve conseguir isso da solicitação ou do cliente HTTP do Python Ambos serão exatamente os mesmos aqui para esta informação . E vou seguir em frente e ampliar isso ainda mais, só porque essa é a única informação na qual realmente deveríamos nos concentrar aqui. Tudo bem. Então, novamente, os cabeçalhos aqui. Eu fui em frente e apenas copiei as informações aqui. E isso é essencialmente o que diz aqui, nosso host e chave de API. Que vamos usar especificamente para API rápida aqui. E isso vai mudar à medida que meu cérebro faz uma pausa por banco de dados, por API Então, isso sempre será diferente. Agora, a URL que queremos, bem, podemos ver as conexões animadas db.p.rapidpi.com E então, no pedido deles, temos toda essa grande coisa aqui. Bem, isso não vai funcionar para nós. Então, vamos descer e ir até o Python Quest, e esse será nosso URL base Se apenas copiarmos isso e dermos uma olhada aqui. Podemos criar var URL. E esse é o nosso URL base. Agora, eu disse que vamos usar get all, e é daí que vem essa última variável. Só estou criando isso aí. E é aqui que você precisa ser um pouco atento ao combinar as coisas, porque você pode mesclar tudo em um URL, e então você pode fazer uma fusão do get all go around, do gênero, etc., mas o que eu vou fazer aqui é que vamos, vamos voltar aqui, e podemos ver que isso termina com slash N, rapid api.com slash anime combinar as coisas, porque você pode mesclar tudo em um URL, e então você pode fazer uma fusão do get all go around, do gênero, etc., mas o que eu vou fazer aqui é que vamos, vamos voltar aqui, e podemos ver que isso termina com slash N, rapid api.com slash anime Portanto, precisamos ter isso em mente. Vamos voltar ao cliente HTTP Python. E podemos ver aqui embaixo, temos slash anime, ponto de interrogação, página um, etc., Então, vamos ignorar o anime slash e pegar tudo depois disso E vamos voltar para Goto . E lá vamos nós. Então, podemos ver as pesquisas, full metal, gênero, fantasia, classificação cinco, ordem de classificação crescente, aí está. Nós temos tudo isso. Então, agora podemos simplesmente mesclar nosso URL base com o que temos aqui Então, como outro exemplo, se eu fosse até o anime G one. G one anime, por classificação. Tudo bem E eu volto aqui só para te mostrar aqui, e vou para o cliente HTV Wills anime, mas aqui mesmo , o Ranking B corta um. Isso seria um exemplo. Leia outra variável aqui. Certo? Diremos que obtenha a classificação. Isso é uma corda. E nós poderíamos fazer isso. Então, agora podemos simplesmente trocar isso por obter a classificação que queremos ou colocamos de volta É por isso que eu gosto de me separar aqui, então eu posso simplesmente mudar especificamente o que eu quero lá E, claro, se você fosse implementar resultados de pesquisa e coisas assim aqui, eu vejo a pesquisa aqui, o gênero e tudo mais. Você pode colocar isso como espaços reservados, como fizemos aqui atrás com o clima, certo Com isso, temos isso, e então podemos ver o que precisamos obter? Bem, se dermos uma olhada, vai voltar para o Get All here. Se olharmos aqui embaixo no cliente HTTP, vemos a resposta G, e estamos vendo tudo isso, e vemos aqui embaixo, tudo o que eles estão fazendo é decodificar UTF h. Então, tudo isso é complicado. que eles estão fazendo é decodificar UTF h. Então, tudo isso é complicado Tudo o que eles estão fazendo é decodificar UTF oito. Então, isso deve ser tudo o que precisamos fazer para essa API. Agora, se você estiver trabalhando com uma API diferente, talvez seja necessário fazer a análise completa do JSON, como fizemos no clima aberto Então, aqui, temos apenas nossa resposta e tudo o que estamos fazendo é obter a string do UTF H. Agora, se imprimirmos a resposta aqui, executamos isso e, lembre-se, estamos recebendo tudo Temos que esperar alguns segundos. E aqui vamos nós. Temos uma lista completa, então podemos ver o episódio 16 de comédia e fantasia que tem o episódio classificado como verdadeiro. Podemos ver a imagem aqui no WebP. Temos um link que vai diretamente para ele. Assim, você pode pegar esse link e fornecer esse link aos seus usuários. Se é isso que você quer, mas você pode ver que tudo está aqui como seus dados. E podemos acessar tudo isso individualmente. E só para mostrar que temos aparelhos ondulados aqui no início Se entrarmos aqui, apenas obtemos dados, eles estão chegando da maneira certa. Portanto, teríamos que encontrar uma maneira de realmente classificar as informações que estamos procurando. Então, neste caso, já que não vamos recuperar Jason, isso é um pouco chato, eu acho Mas, como você pode ver aqui, já que precisamos dar um passo extra, mesmo que a API ou a página nos digam, tudo o que precisamos fazer é analisar o UTFA. Isso é bom. Mas como queremos obter os dados extras, analisamos a string usando a classe JCN E como você pode ver, agora eu posso obter esses dados, o primeiro item, porque os dados eram uma matriz de itens. E então eu posso pegar o título desse primeiro, que é, eu acredito que seria o primeiro episódio, certo? Pelo menos o resultado. E se mudarmos isso para o segundo item, devemos ter um nome diferente lá embaixo. Sim. Então, temos a Irmandade. Eu vou para a próxima. o conquistador de Shambala, seja lá o que for Eu nunca vi isso. Mas aí está. Veja bem, não é muito difícil trabalhar com esse Python ou converter o exemplo do Python Então, nossas matrizes, nós as copiamos e as colocamos no script GD aqui como uma matriz em vez de um dicionário Excluímos as aspas no meio. Assim, nossa chave de API é uma string longa e nosso host de API é uma string longa. Alternamos entre a solicitação HTTP e o cliente http dot e a biblioteca de solicitações para as duas opções do Python aqui para obter nossa URL base aqui, bem como as diferentes pesquisas que podemos realmente fazer aqui E tudo o que fazemos na solicitação, passamos nossa URL e, nesse caso, vou adicionar mais meu G A e os cabeçalhos Agora, se você tem mais do que isso, por exemplo, se você tem um em que diz que você precisa empurrar, certo? Você precisa postar em vez de G. É aqui que entram esses padrões, certo? Portanto, podemos simplesmente entrar no método de cliente HTTP em Square Post. Agora, o padrão é G. É por isso que não colocamos nada lá. Mas se você precisar postar, em vez de G, é assim que você faria. Você simplesmente o adicionaria após os cabeçalhos. Tudo bem, então aí está. Veja como fazer. Há uma grande coleção de APIs com as quais você pode procurar trabalhar e praticar E se é isso que você quer fazer, forneça coisas para seu cliente. Além de como você usa seus exemplos em Python e os converte para que possamos usá-los no script GD Então, agora você tem uma coleção mais ampla com a qual você pode trabalhar. Agora você sabe como trabalhar com cabeçalhos aqui. E eu te mostrei como fazer uma postagem em vez de G. Agora isso vai ao ar porque nós não publicamos. Nós compramos por esses. Sim? E isso deve nos completar para a parte da API. Em seguida, vamos dar uma olhada no que são soquetes web, por que são úteis, como podemos usá-los e por que talvez queiramos usá-los. 63. O que são WebSockets(espaço preenchido): Olá, pessoal. Bem-vindo. E hoje, vamos falar sobre o que são web sockets O que eles são? O que eles são pobres? Bem, se você conhecia a programação, que provavelmente está aqui, você já deve ter ouvido esse termo antes, mas o que exatamente eles são? O que são websckets e como eles funcionam? Bem, ao final desta lição, espero que você tenha uma autocompreensão do que são os soquetes da web e da mágica que eles podem nos fornecer Simplificando, os soquetes da web são um protocolo de comunicação que permite a transferência de dados bidirecionais ou bidirecionais em tempo real dados bidirecionais ou entre um navegador da web e um Você pode pensar nisso como uma conexão virtual persistente que permanece aberta, permitindo a comunicação instantânea entre as duas extremidades. Para entender isso melhor, vamos imaginar que você está conversando com um amigo em um aplicativo de mensagens. Quando você envia uma mensagem, seu amigo a recebe instantaneamente, certo? Isso porque o aplicativo de mensagens tem um conceito semelhante. Ele estabelece uma conexão entre seus dispositivos, permitindo a comunicação em tempo real Agora, como funcionam os soquetes web? Bem, quando uma página da Web que suporta soquetes da Web é carregada no seu navegador, ela envia uma solicitação HTTP especial ao servidor solicitando o estabelecimento de uma conexão de soquete da Web Depois que o servidor aprova a solicitação, a conexão persistente é criada e o navegador e o servidor podem enviar dados um para o outro em tempo real A magia dos soquetes web está em sua capacidade de lidar com a comunicação bidirecional Isso significa que não só o servidor pode enviar dados para o navegador instantaneamente, mas o navegador também pode enviar dados de volta ao servidor em tempo real. É como ter uma conversa ao vivo entre o navegador e o servidor. soquetes da Web são incrivelmente úteis para criar aplicativos que exigem atualizações em tempo real, como bate-papos ao vivo, jogos on-line, indicadores do mercado de ações e Eles eliminam a necessidade atualização e extração constantes de páginas, tornando seus aplicativos web mais eficientes e Então, se você precisar de outro tipo de explicação para ajudar a entender isso, você pode pensar nisso como se fossem duas pessoas se encontrando, possivelmente pela primeira vez, pessoa A, cliente, pessoa B, servidor, elas se encontram, apertam as mãos. E eles tentam estabelecer uma conexão, certo? Eles se encontram, apertam as mãos e determinam a partir desse ponto se querem manter essa conexão e trocar informações, conversar um com o outro ou se afastar. Se eles não quiserem conversar , podemos dizer que a conexão está fechada e eles seguem caminhos separados. No entanto, se eles decidirem continuar a conversa , a conexão foi aceita entre os dois membros, ambas as partes, e agora eles podem trocar informações ao vivo em tempo real. Espero que um desses três exemplos do Sho ajude você a entender exatamente como eles funcionam E embora você tenha, essa é uma introdução simples ao websocket: o que eles são, como podem ser usados E eles são uma ferramenta essencial quando se trata de muita programação moderna e, novamente, isso vai realmente depender do tipo de campo que você quer entrar com suas habilidades de desenvolvimento. Mas eles ajudam a permitir essa comunicação em tempo real entre seu aplicativo e o servidor. E à medida que você se aprofunda na programação, descobrirá que os web sockets uma ferramenta poderosa e versátil Crie aplicativos interativos e envolventes. Mas lembre-se de que eles não funcionam apenas com servidores que estão em outro lugar. Existem alguns aplicativos existentes que usam websockets com os quais você pode criar suas próprias ferramentas para trabalhar Vamos dar uma olhada nisso no próximo vídeo. 64. Estabelecendo uma conexão: Tudo bem, então vamos dar uma olhada em como configuraríamos uma conexão de web socket com nós mesmos aqui e como poderíamos nos conectar a algo E a coisa à qual vamos nos conectar será o OBS. Agora, se quiser, você pode ir em frente e procurar o plug-in do servidor websocket, o plug-in websocket do OBS Studio, se quiser acompanhar isso e apenas executar isso e apenas Eu só deveria te levar um minuto ou dois. E o que você verá é se você acessar Ferramentas no OBS, verá uma opção de configurações do servidor de soquete web E ao clicar nisso, você terá essa janela aqui Popo Verifique se o servidor websocket está ligado. E tudo o que precisamos é de um pouco de informação aqui. Então, se mostrarmos Connect Info, o que aparecerá será o IP do seu servidor e a porta. E o IP é a principal coisa que queremos com isso, porque já podemos ver a porta aqui nesta janela. Agora, aqui embaixo, você verá quando ou quantas pessoas se conectam a isso. E, como você pode ver, você também terá a opção de expulsar um usuário daqui. Então é aqui que vamos obter nossas informações, só para que você saiba. E, novamente, vamos querer o IP e as portas do servidor aqui. Então você pode ir em frente e pegar essa informação, lembrá-la e deixá-la de lado. E vamos começar aqui. Tudo bem Então, a primeira coisa que precisamos fazer é ter um nó de controle aqui, minha cena, nada grande do que algo com o qual possamos trabalhar. E vou adicionar um script a ele e apenas chamar um cliente de websocket. Realmente não importa. E agora estamos prontos para criar essa conexão. Tudo bem, então como fazemos isso? Bem, vamos precisar de um novo soquete, certo, para começar Assim, podemos criar uma variável chamada soquete. E isso é igual a um soquete web por ponto no. Queremos criar um novo item, certo? Um novo objeto, esse soquete web. E eu vou prosseguir e inserir URL do soquete aqui também Basta armazenar isso como uma variável. Soquete RL. E esse será o seu endereço IP. Mas não de qualquer forma. Teremos WSS, CLONAs e depois nosso IP, e não consigo colá-lo, então terei que digitá-lo 100 ponto zero ponto 19 Este é Não sei se falha, então vamos dar uma olhada no outro. Então, dentro do nosso pronto, é aqui que vamos fazer nossa conexão. Então, o ponto do soquete se conecta ao URL e nós apenas passaremos nosso URL do soquete Agora, isso pode ter parâmetros opcionais, mas nós não. Isso não é algo que devemos colocar aqui. Em seguida, isso nos dá nossa função de processo aqui. E a coisa que você precisará fazer é completa. E isso é que, basicamente constantemente, você pode pensar nisso constantemente como uma troca de uma quantidade muito, muito pequena de informações apenas para manter a conexão dos dois lados Caso contrário, se nada for recebido, a conexão será interrompida e você será desconectado desse soquete da web, certo Você será desconectado desse servidor. Eu e ninguém gostamos disso. Tudo bem, agora, para usá-los, precisamos decidir o que vamos fazer, e podemos determinar isso com base no estado em que nosso soquete está E os estados que ele obtém nos permitem saber se está aberto, fechando, fechado ou se ainda está se conectando. Então, vamos continuar e armazenar isso. O estado da barra é igual ao estado de preparação do ponto do soquete. E agora esse estado poderá nos dizer o que é. Agora podemos dizer se o estado é igual a websocket aqui, t e aqui estão todos os Então, diremos que o estado está aberto. E eu vou passar por lá por um momento. E vamos criar nossos outros aqui também. Vamos dizer se o estado é igual ao fechamento do estado. E isso deixa nosso último a ser fechado. Agora, poderíamos ter um para nos conectar também, mas não há um quadro de pontos real. Agora, quando o estado está fechando, não precisamos fazer nada aqui. Só precisamos ter certeza de que ainda estamos fazendo a votação neste momento para que possamos realmente fechar corretamente E vamos ver, vamos começar. Vamos continuar e fazer isso quando nosso estado estiver aberto. Bem, aqui vamos ter um loop selvagem, e é aqui que vamos obter informações do pacote que estão sendo fornecidas para nós Portanto, podemos dizer que o soquete Wil está disponível na conta do Pack. Embora haja dados sendo enviados para nós, certo? Então, temos pacotes. Vamos seguir em frente e vamos imprimir o que é isso, então vamos dizer pacote Base. E então, para o segundo argumento, vamos passar o que quer que seja esse pacote, certo? Soquete Sim. Pacote. Tudo bem E isso é tudo o que precisamos fazer enquanto está aberto. Vamos dar uma olhada aqui embaixo onde nosso soquete será fechado E informações sobre barras, podemos seguir em frente e criar código de barras, e isso será capaz de encaixar e fechar o código Dessa forma, podemos ter algumas informações quando nos desconectamos sobre o motivo ou talvez nossa conexão falhe Então, ele tenta se conectar e, em seguida, fecha imediatamente Podemos descobrir novamente o porquê para que possamos nos devolver algumas informações. E por falar em motivo, esse será o nosso próximo aqui, será o soquete Get close Reason Podemos então seguir em frente e imprimir nossas opções aqui. E isso será apenas um websocket fechado com código, espaço reservado, motivo, espaço reservado, espaço reservado limpo Vá. Aí está. Você pode ver isso lá, teias fechadas, código, razão, limpeza. Um extra lá na ponta. E vamos preenchê-los com código, razão e, em seguida, código não igual a menos Tudo o que nos deixa uma última coisa a fazer é interromper a pesquisa, e podemos fazer isso simplesmente chamando set process false Então, quando você define isso como falso, o que quer que esteja aqui, essa função de processo não será mais executada até que você a defina novamente como verdadeira. Tudo bem Então, com isso, devemos ser capazes de nos conectar ao nosso, devemos ser capazes de nos conectar ao OVS lá dentro Então, se nós apenas abrirmos nossa janela? Acho que nossa janela está fechada. Vá em frente e abra isso. Aí está. Tudo bem, então eu vou seguir em frente e clicar em Executar aqui Mas vou me certificar de que possamos ver esse lado quando eu fizer isso. Eu vou seguir em frente e executar isso. Espere um segundo e veremos que não temos nenhuma conexão. Agora, a parte séria será o porquê. Bem, vamos dar uma olhada. Bem, a razão pela qual não está se conectando é porque não fizemos nada com a porta. Agora, a porta pode ser, se você criar seu próprio aplicativo , pode ser praticamente o que você quiser. Quase desde que ainda não esteja sendo usado. E a forma como adicionamos uma porta ao final do nosso URL aqui são apenas dois pontos E então a porta que estava disponível na configuração do serviço, que é quatro, quatro, cinco, cinco, exceto isso. E se olharmos para trás e o executarmos, espere um segundo aqui. Lá vamos nós. Podemos ver se estamos conectados. Podemos ver por quanto tempo estamos conectados, as mensagens de entrada e saída identificadas não foram identificadas porque não estamos usando nenhuma senha aqui e nossas informações, e temos a opção de acessá-la Agora, se dermos uma olhada no lado do Goto aqui, podemos ver que aqui está nosso pacote de informações Parece uma matriz de números, mas tem dados lá dentro. Confie em mim Nós simplesmente não conseguimos ver exatamente o que é. Então, vamos corrigir isso aqui em apenas um momento. E abaixo disso, você pode ver onde, quando expulsamos o usuário, que será nosso cliente aqui, podemos ver que o websocket fechou e fechou com o código 40 11 O motivo da sessão foi invalidado. Porque nossa sessão foi invalidada e foi um encerramento limpo, o que é bom Mas como obtemos dados de todo esse pacote aqui, pacote de Bem, socket dot Obtenha o pacote. Isso está em uma matriz pull by. Então, obtivemos isso no formato UTF oito, então precisamos tirar o texto dele Então, depois de fazermos socket dot Get packet aqui, vamos chamar Yet string do UTF E salve-o. E quando o executamos novamente, quando ele se conecta, podemos ver que obtivemos os dados reais que estavam dentro dele. Assim, podemos ver a versão que obtivemos e a versão RPC E essa informação que estamos usando aqui que eu obtive aqui com a versão atual do servidor que estou usando. O seu pode ser diferente porque presumo que você o comprará totalmente novo Eu tenho isso instalado há um bom tempo. Eu vou parar de correr aqui. E você vê que não recebemos nenhuma mensagem de chute lá. Mas se eu executá-lo aqui e apertar o botão de chute, veja, aí está nossa mensagem de chute. Tudo bem, então, infelizmente, eu realmente não posso te ajudar a superar esse ponto. Além disso, como você pode obter uma conexão aqui já que obter informações ou enviar informações de uma forma específica dependerá que você está conectado e de como eles querem seus dados, eu acho que você poderia dizer estruturados, e de como eles enviam dados de volta para você, você pode ou não ter que obter dados de maneiras diferentes, mas daqui para dados de maneiras diferentes, mas frente, o que você pode fazer é, se mantivermos o controle, podemos clicar em websocket Peer E se descermos, podemos ver aqui todas as nossas propriedades, nossos métodos, e todas as nossas informações têm a ver com essa coisa específica aqui e como usar tudo aqui. Então você pode seguir em frente, dar uma olhada nisso e acho que cruzar isso com documentação ou qualquer coisa com a qual você esteja tentando se integrar. E nesse momento, acho que é meio que boa sorte. meio chato dizer isso, mas nós conectamos você, cabe a você ler sua documentação e descobrir como trocar essas informações 65. Enviando dados com WebSockets: Tudo bem, então eu tenho um botão e uma linha de edição aqui adicionados à minha cena apenas para alguns visuais E o botão tem o sinal de pressão conectado ao meu cliente de soquete web E vou mostrar pelo menos a ideia de como enviar, digamos, uma mensagem por esse websocket Agora, o nosso está bem, eu vou te mostrar. Na verdade, você pode vê-lo lá embaixo, mas vamos vê-lo aqui em um minuto. Então, na prensa, teremos uma tela de mensagem para essa variável, será definida como nosso texto de edição de linha. Texto. Pare com o preenchimento automático. Pare com isso. Então nós temos isso. E agora precisamos realmente enviar isso. Agora, você poderia colocar essa parte de envio em sua própria função, o que provavelmente seria uma ideia inteligente , pois então você poderia simplesmente chamar send sempre que precisar enviar dados. Mas é assim que a enviaríamos. Então dizemos “meia”, “arrume”, e então temos que colocar nossa mensagem No entanto, não podemos simplesmente colocar nossa mensagem dessa forma. Isso não vai funcionar. Mas poderíamos entrar com nosso buffer UTFA, por exemplo, e isso vai codificá-lo Então, se prosseguirmos e executarmos isso, agora isso ainda está se conectando ao OBS aqui. Se digitarmos, digamos, olá, enviar, podemos ver que nosso soquete de limpeza foi fechado porque a codificação foi enviada para Jason, mas uma mensagem binária Então você pode ver que estamos enviando o tipo errado de dados. Então é aqui que o tipo de informação precisa estar ou se baseia em seu projeto. É baseado no que você está conectado e motivo pelo qual precisa consultar a documentação. Como alternativa, fazer isso dessa maneira também é uma mensagem JSON dot StringFio E então podemos codificar isso para UTF oito, assim, e isso nos dará o mesmo resultado nesta instância Nosso soquete vai fechar. E, claro, quando você está enviando, você provavelmente quer ter certeza de que o estado é aberto aqui. Mas aí está. Existe a ideia de como você enviaria dados por esse soquete da web Agora, como eu disse, realmente não funcionou. Fomos fechados porque enviamos o tipo errado de dados, então perdemos nossa conexão. Mas você só precisará ler a documentação de tudo o que está tentando se conectar e qualquer programa com o qual está tentando conversar. Certo? Então, se vocês têm o Python instalado, sinta-se à vontade para dar uma olhada nisso e copiar esse código para criar seu próprio pequeno servidor de web socket em Python para Mas, em última análise, estamos usando Async e web sockets, é claro, web sockets teriam que E tudo o que estamos fazendo aqui é criar uma função assíncrona, basicamente iniciando nosso servidor para nós, ou desculpe, aqui embaixo, iniciaremos nosso Mas aqui dentro do nosso servidor, estamos vendo quatro mensagens no soquete da web, então, certo, toda vez que enviarmos uma mensagem aqui, nossa mensagem será decodificada do UTF Opa. E então vamos imprimir a mensagem que recebemos do cliente. Então, se fosse, digamos, um aplicativo de bate-papo, você pegaria isso e o enviaria para quem estivesse falando, certo? Com base na identidade deles ou qualquer outra coisa. E aqui esperamos um momento e enviamos a mensagem de volta. Estamos enviando a mensagem de volta para o GOTO aqui para que possamos dar uma olhada e ver que podemos enviar e receber dados, diretamente, de um lado para o outro E então estamos apenas iniciando o servidor no host local, que no GoTo , se você não soubesse, o endereço IP tem um host local É 127,0 0,0 0,1. Também estamos usando a porta 5.000 para isso. Que estamos apenas imprimindo em nosso console, na parte inferior, aqui embaixo, que o servidor foi iniciado e, em seguida, nossos dois loops aqui são basicamente fazer com que nosso servidor funcione continuamente Tudo bem. Então, se eu entrasse e executasse isso, podemos ver o servidor iniciado aqui. E eu vou prosseguir e executar isso no lado do gatto para que possamos obter essa boa conexão Ah, e não podemos ver isso agora por causa dessa camada. Isso é bom. Vou abaixá-lo para isso. OK. Então aí está. E você verá que vou digitar aqui, dizer, olá, nova pessoa. Bem-vindo ao chat. E estou super animada. Vou apertar meu botão Enviar, e aí está. Podemos ver a mensagem do nosso cliente. Assim, podemos ver que recebemos dados em nosso servidor de soquete web aqui E se escondermos isso, podemos vê-lo em nossa versão GTO aqui. O pacote que recebemos de volta, certo, foi uma mensagem que o servidor nos enviou dizendo: Recebi sua mensagem e repetiu qual era a nossa mensagem Então você pode ver que isso funciona, é só uma questão de ter ou formatar o que você está enviando, certo? Você envia uma mensagem corretamente com base no que quer que esteja se conectando. Então você vê que esse método aqui funciona ou essa configuração aqui funciona com um servidor de soquete web simples e Python aqui , mas esse formato não funciona ao conectar ou enviar dados para Então é aí que entra parte dessa leitura, mas eu queria mostrar que queria mostrar soquetes da web em funcionamento com um servidor E você vê que o que temos aqui é nosso conjunto básico criar um bot de bate-papo ou criar uma sala de bate-papo que já fizemos aqui, apenas com nosso servidor e cliente. Você só precisa diferenciar qual cliente é quem e para quem eles estão enviando cada mensagem Quero dizer, você meio que configurou um bate-papo, pelo menos entre um servidor e um cliente. Mas antes de começar a apostar, aí está. Acho que há alguma prova de que o envio desses dados funciona. Depende apenas de como está formatado e ao que você está conectado. Tudo bem. Vou colocar isso lá em cima novamente. Então, se você quiser pausar o vídeo e copiá-lo, se quiser E você tem o Python instalado no seu computador. Se você quiser fazer isso e criar seu próprio servidor, vá em frente. Com isso, cuide de ter uma boa vida, e é assim que nos conectamos e usamos websockets 66. Como o desenvolvimento de desktop é diferente: Tudo bem, todos bem-vindos de volta, e vamos mergulhar na seção de desenvolvimento de software aqui. Agora, o que torna o desenvolvimento de software diferente do desenvolvimento de jogos? Bem, vamos discutir isso. O desenvolvimento de software ou aplicativos de desktop envolvem a criação de programas que são executados diretamente no computador do usuário. Esses aplicativos atendem a uma ampla variedade de propósitos, desde ferramentas de produtividade até software criativo e tudo mais. Como desenvolvedor de aplicativos de desktop, seu foco será projetar interfaces de usuário intuitivas e criar soluções eficientes para atender às necessidades dos usuários Uma das principais diferenças entre o desenvolvimento de jogos e o desenvolvimento aplicativos de desktop está na finalidade pretendida. Enquanto os jogos são projetados para entretenimento e interatividade, os aplicativos de desktop são desenvolvidos para resolver um problema específico ou melhorar a produtividade No mundo do desenvolvimento de software, você encontrará uma grande variedade de aplicativos, como processadores de texto, ferramentas de planilhas, editores de imagens, reprodutores de vídeo As possibilidades são ilimitadas e você tem o poder de criar ferramentas que podem impactar positivamente a vida das pessoas Além disso, como desenvolvedor de aplicativos de desktop, você poderá trabalhar com diferentes linguagens de programação. Algumas dessas opções populares seriam Python ou C SHARP, que você poderia usar junto com o GDScrp para aprimorar ou trazer mais recursos ao seu aplicativo que você Obviamente, isso é opcional, mas a habilidade estaria lá para você. Outro aspecto fundamental do desenvolvimento de software para aplicativos de desktop é a experiência do usuário. Ao contrário dos jogos em que a imersão e a jogabilidade ocupam o centro das atenções, aplicativos de desktop priorizam a usabilidade Você se esforça para criar interfaces intuitivas que tornam as tarefas dos usuários mais simples e agradáveis Agora, uma coisa que também será muito importante quando se trata de desenvolvimento de software é a aparência geral de tudo, a forma como você apresentou seu aplicativo. Se seu aplicativo parecer ter sido criado na época do Windows 95, ele parecerá antigo, desatualizado e não será atraente em comparação com outro aplicativo, mesmo que o seu seja muito superior. Se não parecer tão bom, poucas pessoas vão experimentá-lo. É apenas a infeliz realidade do mundo. Você não precisa apenas criar um programa que funcione excepcionalmente bem, ele também precisa ter uma boa aparência Portanto, não fará mal fazer um curso sobre experiência de usuário ou interface de posteriormente, aprimorar suas habilidades de design de interface de usuário, se isso fizer sentido. E isso, é claro, somente se você optar por seguir a rota do software daqui para frente. Mas aí está uma introdução simples ao desenvolvimento de software para aplicativos de desktop. À medida que nos aprofundamos nesta seção, exploraremos algumas de nossas ferramentas essenciais, acho que podemos chamá-las usando o TDScript E algumas coisas eu posso ajudá-lo com alguns de seus princípios de design para ajudar a criar um aplicativo de desktop fácil de usar. 67. chncoras: Olá, pessoal. E antes de começarmos a realmente criar qualquer coisa, precisamos falar sobre âncoras. O que são âncoras Bem, as âncoras são ferramentas poderosas que ajudam você a criar interfaces de usuário responsivas e flexíveis para seus jogos e aplicativos de software As âncoras são usadas com eficácia para adaptar seu elemento de interface de usuário a diferentes tamanhos de tela e proporções Vamos mergulhar nisso. No Goto, as âncoras são amarras invisíveis que conectam elementos da interface do usuário às bordas do contêiner ou da tela principal Eles definem como o elemento de interface do usuário deve ser dimensionado e se posicionar quando o contêiner principal ou a tela são redimensionados Isso garante que sua interface de usuário permaneça consistente e fácil de usar em vários dispositivos e resoluções Para entender melhor as âncoras, vamos imaginar que você tenha um botão de interface no menu principal do seu jogo Você deseja que o botão permaneça no canto inferior direito da tela, independentemente do tamanho ou da proporção da tela. Para fazer isso, você ancoraria a posição do botão no canto inferior direito do contêiner principal ou da tela Então, para isso, pegaríamos nosso botão, e esses pequenos pinos verdes são nossas âncoras Então, se movermos todos eles para o canto inferior direito e dermos uma olhada na cena aqui, não importa o tamanho que fizermos, ela sempre permanecerá nesse canto inferior direito de forma consistente, enquanto se a deixássemos no padrão, que seria no canto superior direito, desculpe, no canto superior esquerdo. E nós definimos isso. E se fizéssemos isso agora, você verá que ele permanece nessa posição em relação ao canto superior esquerdo, independentemente de onde esteja o canto inferior. E como você pode ver, a parte inferior não importa e podemos removê-la completamente da tela apenas fazendo uma pequena. No entanto, se nossas âncoras estivessem no canto superior esquerdo e no canto inferior esquerdo, e fôssemos dar uma olhada nisso , ela permaneceria nessa posição, mas também se estenderia na parte inferior, porque ficaria muito perto da parte inferior e tão próxima da parte superior em direção ao outro canto E ainda podemos, é claro, ultrapassar. Assim, você pode ver como as âncoras podem afetar a aparência da sua interface no final do dia Então, se quisermos isso no canto inferior direito, vamos colocar nossas âncoras no canto inferior direito E agora essa parte da nossa interface sempre permanecerá nessa posição em relação a esse canto. Agora, quando você executa o jogo em dispositivos diferentes ou redimensiona a janela como você está vendo lá, o botão ajusta automaticamente sua posição com base nas âncoras, garantindo que ele permaneça sempre no canto inferior direito Agora, no goto, você pode usar as predefinições de âncora para definir o comportamento desejado dos elementos da interface do usuário Essas predefinições incluem superior, esquerda, direita e inferior. As âncoras são elementos nas bordas especificadas de seu contêiner ou tela principal centro vertical, o centro horizontal, ancora os elementos no centro vertical ou horizontal do contêiner principal ou da tela e preenchendo nossa última opção aqui, ancora o elemento nas quatro bordas, fazendo com que ele se estique e escale com o contêiner ou tela principal Então, se você quisesse, digamos, uma imagem para sempre preencher o verso, por exemplo, se entrássemos e fizéssemos um retângulo colorido aqui e preenchêssemos a tela Nós entramos. Temos essa bela cor escura. Temos um marrom escuro aqui. Talvez queiramos usar um verde escuro sutil como plano de fundo. E se não tocarmos nas âncoras, deixamos tudo padrão, e você pode ver que temos um problema aqui No entanto, se usarmos neste caso, podemos simplesmente usar a predefinição to bull wreck para colocar nossos pinos nos quatro cantos. Agora, sempre teremos nossa tela totalmente coberta com totalmente coberta No nosso caso, nossa cor. Portanto, ao usar predefinições de âncora e personalizar seus valores, você tem controle total sobre como elementos da interface do usuário respondem às mudanças no tamanho da tela e na proporção da tela Tudo bem, aí está uma introdução às âncoras em Gato Ao aproveitar o poder das âncoras, você pode criar interfaces de usuário responsivas e adaptáveis para seus Agora, para jogos, é claro, isso geralmente se aplica apenas ao seu heads-up display, garantindo uma experiência de usuário perfeita em diferentes dispositivos 68. Layout de pesquisa: Tudo bem. A primeira coisa que vamos fazer é criar, vamos criar primeiro nossa barra de pesquisa e o que vamos criar aqui. É que vamos criar nosso próprio pequeno aplicativo de desktop que nos permitirá pesquisar um anime e nos dará uma lista de resultados. Ele terá todas as imagens de todos os resultados de cada anime individual. Eu terei o título. Eu terei os gêneros. E se clicarmos em um, ele abrirá. Isso nos dará uma sinopse. Ele terá uma versão maior da imagem. E se quisermos dar uma olhada, dar uma olhada mais adiante, podemos clicar em um link externo para nos abrir em nosso aplicativo padrão, que seria seu navegador padrão se você estivesse no PC. E abra a página do anime para isso. E a primeira coisa que vamos fazer neste vídeo aqui é criar a barra de pesquisa e o botão enviado para você. Mas vamos começar colocando um plano de fundo aqui porque isso é meio chato, certo? Abrimos e temos essa imagem cinza chata. Aqui vamos nós. Temos essa caixa cinza chata Não é muito empolgante. E mesmo se colocarmos uma linha no meio, não vai ser tão atraente Parece meio M, certo? Então, a primeira coisa que vou fazer é colocar minha nova cena aqui. Claro, eu o chamei de Main. É uma cena de interface do usuário. Então, meu nó raiz é um controle. E eu vou continuar e adicionar uma textura reta aqui. Vou renomear isso como meu plano de fundo. E para a textura, acabei Internet e encontrei um fundo de anime porque é um fundo de anime adequado para Anime. Então eu fui em frente e encontrei um, o trouxe. Agora, isso obviamente é muito grande para minha inscrição aqui. Então você notará que, se agarrarmos a alça, não podemos alterá-la, mas podemos torná-la maior, mas não podemos diminuí-la. Então, vou entrar no modo de expansão no inspetor do lado direito e alterá-lo de manter tamanho para, digamos, ignorar tamanho, ajustar com porção, ajustar altura Vou usar o tamanho Ignore e reduzi-lo até que o PS cubra todos os nossos lados Algo parecido. E então eu vou seguir em frente e colocar suas âncoras em Bull Wreck. Aqui vamos nós. Isso vai definir. Agora, isso vai ficar muito claro para exibirmos qualquer coisa. Então, na verdade, vou entrar seção de visibilidade do Min Spector Eu vou entrar no módulo. Na verdade, vou me automodular desta vez. Nesse caso, não importaria. Mas se você usar modulate, isso também afetaria todos os seus filhos Sendo esse o plano de fundo, ele não terá filhos Então, tudo bem, mas se você quiser afetar apenas esse nó, você vai usar a automodulação, e eu vou escurecê-lo porque o meu é bem claro Acho que algo por lá provavelmente será bom. Então, se eu seguir em frente e executar isso tudo bem? Essa é minha janela. Isso não é tão ruim. Não é muito claro para tirar nada, embora tenhamos muitos brancos no meu caso Tudo bem. Então essa será minha formação. Agora, e a busca real? Bem, na busca real, vamos colocá-la dentro de um contêiner. E isso será colocado dentro do que é chamado de contêiner VBox E isso é um contêiner vertical, certo? Então, tudo o que você colocar dentro dele será colocado igualmente espaçado verticalmente Então, se eu for em frente e trouxer uma textura, digamos que essa textura está aqui, certo? Use isso como exemplo. Então, como você vê, vamos continuar assim da seguinte maneira. Então aí está. Agora, obviamente, não vamos ter tudo isso lá, mas você entendeu a ideia aqui. E só para dar uma olhada aqui, se tivéssemos um controle lá dentro, não faria nenhuma diferença. Tudo isso permaneceria o mesmo. Eu excluo todos aqueles que vão. Agora, isso é porque nosso controle, por padrão, tem um tamanho de zero. Coloque-o em layouts. Aí está. É transformar. Assim, você pode ver nossos tamanhos Y completamente zero neste caso. E podemos ver que nossa transformação é, na verdade, maior, então não podemos controlá-la. Então, o que faríamos é ter nosso próprio contêiner dentro do certificado. Então, no nosso caso, vamos em frente e, embora os contêineres possam ser bons, acho que vamos usar uma configuração do Mrvust, suponho que Então, vamos usar uma linha para o nosso SRT agora, posso ver que meu plano de fundo realmente se esconde, então vou ajustar Escureça um pouco mais para que minha frase realmente se destaque um pouco Texto reservado, pesquise anime aqui. E vamos adicionar um botão com isso também. E o texto sobre isso dirá apenas, senhor. Isso é um pouco mais amplo. Aqui vamos nós. Agora, você pode ver que temos cinza sobre preto. Vai ser. É um pouco difícil de ver. No entanto, a única coisa que podemos realmente fazer sobre isso no momento seria ir na direção oposta e seguir uma abordagem mais leve, o que é perfeitamente normal se é isso que você queria fazer, algo assim, talvez. Obviamente, isso vai depender do seu histórico, mas isso é algo que pode ser corrigido quando chegarmos à próxima seção, quando realmente falarmos sobre personalizar Então, nada parece muito padrão e tudo parece muito mais profissional, eu diria. Agora, como uma pequena dica aqui, quando se trata de fazer interface de usuário, se você realmente chegar ao topo aqui, temos dois ímãs Um vai ser fácil aqui. Como você pode ver, temos algumas fotos inteligentes acontecendo, e a outra vai nos dar uma boa grade que podemos montar. E é isso que vai ajudar a fazer com que as coisas pareçam bonitas. Vemos que isso vai até o meio. Vamos construir isso em relação ao topo central. E eu vou fazer a mesma coisa com meu botão aqui. R: OK. E agora, em relação a isso, eu obviamente vou estar um pouco drogado. Como você vai se sentir? Vamos ver se eu executo isso. Dê uma olhada. OK. Acho que talvez eu traga isso para lá e o estenda para que possamos preencher nossa caixa completa aqui. Em seguida, abaixamos nosso botão de pesquisa. pequenos quanto pudermos, então talvez façamos assim com uma caixa no meio. Se conseguirmos algo assim, acho que está tudo bem para o que estamos fazendo aqui. Pelo menos, na minha opinião, não sou especialista em interface do usuário, mas pelo menos tudo está alinhado com a grade. Então, começamos bem. Agora, observe como meu botão e minha linha também têm a mesma altura. Essa é apenas outra coisa que vai fazer com que pareça um pouco mais coesa e dar a aparência de ser mais bonita do que talvez seja Tudo bem, então vou dar um nome a eles, então vou chamar isso de minha barra de pesquisa, e esse vai ser meu botão de busca, certo? Isso vai ocupar o topo aqui. E há mais alguma coisa para abordarmos neste livro? Vou revisar a pesquisa. Eu acredito que é isso, e então teremos nossos resultados de pesquisa. Faremos nossos resultados de pesquisa em um vídeo separado. Tudo bem. Então, aqui está nossa busca básica. Agora podemos entrar e começar a digitar coisas . Nós temos um. Attack on Titan é popular e podemos clicar no botão de busca Agora, obviamente, ele não faz nada agora. Mas você entendeu a ideia, certo? Agora, certifique-se de que está bonito. Então, sabemos onde está a linha central aqui. Então, um, dois, três, quatro, dessa forma, um, dois, três, quatro, então você percebe isso. Estamos a quatro quarteirões à esquerda e quatro quarteirões à direita, então também mantemos esse equilíbrio nas imagens Pensei ter mencionado isso também bem rápido. Portanto, temos uma expansão do mesmo tamanho, então estamos nos mantendo relativamente equilibrados. Além desse espaço vazio, estamos bem equilibrados visualmente nas duas extremidades. Tudo bem. Isso é tudo para a busca. No próximo vídeo, vamos configurar a seção para mostrar nossos resultados. 69. Layout dos resultados: Tudo bem, vamos prosseguir e configurar nossa área de resultados de pesquisa E eu só quero anotar aqui algo depois. Também teremos um botão de opção aqui. E isso será para nossos gêneros, para os quais teremos uma seleção suspensa E vou renomear meu botão de opção para gênero Optas e você notará que eu apenas movo minha pesquisa, meu botão mais para a direita e o alinhei um pouco mais à esquerda, e tenho que definir as âncoras para o meu botão de opção Eu acredito que isso foi centrado. É assim. Agora podemos entrar e eu posso redimensionar isso e ficar bem. Teste. Agora, se quisermos, podemos seguir em frente e nos basear completamente no topo. Isso também seria bom. Tudo bem. Então, vamos continuar e configurar nossa seção de resultados. Então, para isso, vou adicionar um contêiner de rolagem aqui. E o que isso vai fazer é permitir ou permitir que possamos usar a roda do mouse e ter a barra de rolagem na lateral, como vemos aqui. Certo? E isso acontecerá sempre que tivermos algo dentro, se estenda por mais tempo ou mais do que a caixa que estamos usando aqui. Então, para nós, acho que vamos ficar bem nisso, e isso vai ser muito nosso. Lá. Agora, acho que até isso será um pouco demais para as informações que teremos aqui. Mas quem sabe? Talvez possamos fazer isso funcionar. Então, vou renomear meu contêiner de rolagem para contêiner de sais. Tudo bem, então com nosso contêiner de rolagem, podemos ver que temos esse pequeno triângulo aqui. E se passássemos o mouse sobre o mouse, isso nos diria que um contêiner de rolagem foi projetado para funcionar com um único controle infantil Isso seria como uma caixa V ou uma caixa H, etc. No nosso caso, vamos usar uma caixa V. Então, será um contêiner de caixa vertical. E isso nos permitirá continuar adicionando itens verticalmente, e poderemos rolar diretamente para baixo quando excedermos Então, vamos adicionar esse contêiner VBox aqui E nós realmente não podemos fazer nada a partir daí. Então, o que faremos é entrar em uma nova cena. Vou selecionar outro nó aqui para poder criar um contêiner H box como meu telhado. Vou criar dois blocos I e vamos ver, dois ou seis. Vamos usar apenas seis de largura por enquanto. Agora, tudo isso vai depender de como você deseja classificar o seu, é claro. Agora, meu alinhamento será do início, o que significa começar da esquerda e empilhar a pilha para a Se começarmos do final , nossos itens começarão do final. Então, veja, uma vez que eu adicione uma textura rect aqui, vou dar a ela o ícone goto como padrão Então você vê que a partir do final, vai começar desse lado. Comece do começo. Vou começar pela esquerda e começar pelo centro. Vou construir a partir do meio. Tudo bem, então eu vou usá-lo para começar do começo. Dessa forma, nossa imagem do nosso anime sempre estará à esquerda. E isso vai ser miniatura de anime, imagem de anime, imagem de anime Chame esse anime de resultado, eu suponho, do meu contêiner. E agora eu quero que eu pense diretamente ao lado da imagem aqui. Acho que queremos ter o título no topo e, logo abaixo dele, ter todos os nossos gêneros Então, se prosseguirmos e fizermos isso, obviamente precisaremos de uma caixa V porque precisamos ocupar um slot dentro da nossa caixa H, certo? Caso contrário, você pode entrar e podemos adicionar algum texto aqui e adicionar outro rótulo, que ficará diretamente ao lado dele, assim. Mas nós o queremos diretamente abaixo dele, certo ? Queremos ir para a vertical. Então, se eu deixar assim, por exemplo, e adicionar a caixa, você vê que quando adicionamos esses dois rótulos dentro dessa VBox, ela se torna uma pilha vertical como Certo? Então, vamos fazer isso. Mas vamos definir o alinhamento aqui para estar no centro E definiremos que o primeiro rótulo será um título de anime. O segundo rótulo será, se eu puder renomeá-lo, gêneros de anime. E chamaremos esse contêiner de Anime Info. Agora, eu não gosto do quão perto isso está dessa área, então vou até minha caixa H aqui. E dentro do inspetor, eu vou para o Mvides Marque a caixa de separação e posso adicionar uma quantidade personalizada aqui. 20 pixels. 30 pixels, quem sabe, certo? Depende totalmente de você dar uma olhada, testar e ver do que você gosta. Vou deixar no 30 por enquanto. E vou salvar o resultado do anime da minha cena. Isso é bom. Agora, quando eu voltar para a cena principal do nosso contêiner de resultados, clique no contêiner VBox Agora, quando eu entrar , posso inserir instantaneamente resultado do meu anime você verá se eu uso o Control D e simplesmente o duplico Temos um monte lá. E quando o executamos, é o que parece, e podemos percorrer todos os nossos resultados graças ao contêiner de rolagem. Tudo bem. Agora, assim como na oitava caixa, como podemos ter uma separação personalizada lá Também podemos ter uma separação personalizada com nossa caixa V. No entanto, não quero tocar nisso até depois de colocarmos nossas miniaturas e isso lá, e então talvez eu volte e as ajuste Mas com isso, temos nossa configuração de tela de resultados. Tudo o que precisamos fazer é apenas instanciar um resultado para cada resultado que temos e preencher suas informações. Então, por enquanto, selecione todos os meus resultados aqui e eu simplesmente excluirei. OK. E isso bastará para esta parte. seguir, vamos dar uma olhada em como realmente fazer uma pesquisa para criar um certificado. Podemos preencher nossas ondas também na próxima 70. Fazendo uma pesquisa: Oh, garoto. Tudo bem, vamos dar uma olhada em nossos resultados Agora, para os resultados, vamos usar esse banco de dados de anime. Se você voltar e dar uma olhada na seção API quando falarmos sobre API rápida e como converter do Python para o script GD, usaremos esse banco de dados E, como tal, acabei de copiar o código dessa palestra. Então você não fez isso, ou precisa voltar e dar uma olhada para lembrar como fazer isso ou para ver qual banco de dados é, vá em frente e faça isso. Prepare-se. Vou apenas colocar um script no meu nó principal aqui. A e eu vamos colar todas as minhas variáveis. Então, temos nossos cabeçalhos que examinamos. Como configurar. Eu tenho meu URL base aqui e meus três pontos aqui, certo? Isso nos permitiu obter. Acho que nos permite quatro diferentes, temos, dois deles, três deles, desculpe. Temos que pegar tudo, obter gêneros e classificação. Agora, acho que só precisaremos obter tudo isso em vez de obter gêneros Mas quem sabe, talvez? Talvez possamos. Ah, não, precisaremos obter gêneros para preencher nosso menu suspenso Então, acho que a classificação é a que não precisaremos. Vamos apenas pegar tudo e obter gêneros. Eu vou me livrar do primeiro lugar. E então temos o texto da nossa barra de pesquisa ou pesquisa aqui, nosso gênero que vamos pesquisar, e EXT representa a extensão da imagem que vamos obter agora, vamos ver o que mais precisaremos aqui? Precisamos de mais alguma coisa por padrão? Acho que não precisamos de nada até. Então, vamos em frente e acho que a primeira coisa que vamos fazer é pegar nossos gêneros e preencher nosso botão de opção Vamos fazer isso. Vamos precisar de uma solicitação HTTP. Então, vou adicionar um à cena. E vou nomear isso como meu pedido de gênero. Assim mesmo. Além disso, vou conectar meu sinal para isso, o sinal de solicitação concluída ao meu script principal aqui, processo de exclusão. Nós não precisamos disso. Então, agora, em nossa função writy aqui, posso prosseguir e obter nossa solicitação de gênero, e podemos fazer essa solicitação HTTP, certo? E esse será nosso URL mais nossos gêneros et. E podemos passar nossos cabeçalhos como segundo argumento. Agora, quando recuperarmos esses dados, lembre-se de que precisamos analisá-los, então vamos dizer que vamos criar uma nova variável chamada resposta Vamos definir isso igual a body, string do TFight e veremos o que acontece se apenas imprimirmos a resposta e vermos o que recebemos de volta OK. Assim, podemos ver todos esses pequenos ditários individuais de uma chave e um valor, e parece que todos os nossos gêneros são valores do ID de sublinhado chave Está bem? Então, dentro da nossa resposta aqui, precisamos realmente ter esse Jsonificado corretamente, porque temos apenas uma string longa no momento, tecnicamente Então, podemos chamar isso de nossos gêneros, se eu puder soletrar, string JSON e colocar em nosso lugar Nenhum erro é bom. E agora podemos entrar e imprimir, digamos , a resposta. Podemos dizer quatro gêneros e gêneros impressos, e queremos lembrar a chave para sublinhado, I minúsculo, D minúsculo. Então, se tocarmos isso agora, devemos ter Aí está tudo impresso para nós aqui, premiado suspense de ação para Etti Avant Garde, esportes, fantasia sobrenatural, gourmet, drama, comédia Nós entendemos. Então, podemos ver todos os gêneros aqui agora Fantástico. Então, agora precisamos realmente adicioná-los ao menu de opções que temos, certo? Ou leilões de gênero. Então, nós os imprimimos. O que precisamos fazer é adicioná-los. Eles dirão: gênero, leilão, precisamos realmente nos apossar disso Opções de gênero. No item. E agora vamos adicionar esse ID de gênero que estamos imprimindo. E agora que jogamos agora, podemos dar uma olhada, e aqui estão todos os nossos itens. Agora, vemos que isso é um pouco maior do que era. Então, está meio que esbarrando na nossa barra de pesquisa. Então, neste caso, talvez eu queira dar uma olhada e talvez deslizar para cima, agora que sei o quão grande é. Como encontrar um equilíbrio em algum lugar lá dentro. Isso parece? Eu acho que parece bom. Quando estamos realmente do lado do nosso projeto agora. Aqui vamos nós. Agora temos todas as nossas opções aqui. Sempre dê uma olhada em todas as nossas opções. Fantástico. Então, temos nosso conjunto de gêneros e podemos digitar o que quisermos lá. Agora, queremos ter um substantivo frequentemente no topo. Então, na verdade, vou adicionar um item antes mesmo de começarmos. Então, está pronto, e eu vou definir isso como. Não, eu gosto disso. E isso deve ser selecionado automaticamente por padrão. Não estou enganado? Sim. Aí está. E em vez de nenhum, se você quisesse, você poderia fazer com que ele selecionasse o gênero, se quisesse. A questão é que, se tivermos isso selecionado, não vamos introduzir nenhum gênero, certo? Vai ficar vazio em nossa busca. Mas lá vamos nós. Temos a parte do gênero preenchida e pronta para criar nossas pesquisas. E agora precisamos da busca real para obter todas as nossas informações, certo? E você pode ver aqui, estou recebendo uma página, mas meu tamanho é de 1.000 itens por página. Então, isso pode ser mais do que suficiente para preencher qualquer um desses. Então, vamos usar get all em nossa próxima solicitação aqui. Então, vamos adicionar mais uma solicitação de PTP aqui. E esse será o nosso nome de busca de anime. E também conectaremos esse sinal de solicitação concluída. E assim como os dois primeiros aqui, vamos analisar o corpo, certo, pegar a string do UTFA e então temos uma variável, não gêneros, mas E agora teremos uma lista de todos os nossos animes. Então, se fôssemos imprimi-los e continuarmos, acho que podemos fazer isso hipoteticamente por enquanto Na verdade, vamos configurar nosso botão. Até agora, nosso botão de pesquisa, quando pressionado, conecte esse sinal de pressão. E é aqui que está nossa solicitação Então, obteremos nossa missão de busca de anime, teríamos URL mais G all e passaríamos o segundo argumento de nossos cabeçalhos E antes disso, precisamos realmente preencher parte da célula. Nossos gêneros, se tivermos algum, precisamos preencher. Você os construiu lá. OK. Então, diremos que pegue tudo. Então, na verdade, vou colocar parênteses ao redor da variável or get all porque aqui é onde vamos adicionar espaços reservados Então, porcentagem e depois um par de colchetes. E isso envolve a busca pelo primeiro, espaço reservado e gênero ou gêneros pelo segundo Tudo bem, então vamos com o que temos que comprar? Temos que obter nosso texto de pesquisa. Portanto, nosso texto de pesquisa será o que estiver dentro da nossa barra de pesquisa. Então, vamos dizer que a pesquisa é igual à nossa barra de pesquisa, texto. E então limparemos nossa barra de pesquisa. Ou, na verdade, não precisamos neste caso, já que estamos fazendo uma pesquisa real. E garantiremos pesquisa não seja igual a uma string vazia. Dessa forma, você precisa fazer uma pesquisa real e, dessa forma, recuperamos os resultados, não importa o que aconteça. Não importa se não temos gênero. Só importa se tivermos uma busca. Agora, não temos as partes do gênero configuradas, mas vamos continuar e garantir que possamos obter resultados aqui. Então, entraremos aqui e diremos adeus à busca de Titãs. E lá vamos nós. Temos muitas informações e, como você vê, a saída transborda, imprime menos texto Portanto, temos muito mais informações do que a saída deseja nos permitir, o que está perfeitamente correto. Mas podemos ver que o importante é que podemos ver todas essas informações nossa pesquisa para que saibamos que nossa pesquisa está pelo menos funcionando. Tudo bem. Então, e as nossas opções aqui? Bem, para opções de gênero, selecionamos nosso menu de opções. Vamos conectar o item de sinal selecionado. Conecte isso ao nosso script principal aqui. E vamos criar uma variável temporária aqui. E vamos chamar esse gênero de texto, é igual às opções de gênero, nossa barra de opções. No entanto, o texto do item e passamos o índice que é automaticamente passado para nossa função com nosso sinal, certo? Então, obtemos nosso índice. Quando clicamos em algo da nossa barra suspensa, obtemos o texto desse item, que será definido como o texto do nosso gênero aqui. E agora vamos dizer, de forma simples, que podemos usar um fósforo aqui, se quisermos. Diga que corresponda ao texto do gênero. E se corresponder ao que colocamos, fale, que estamos usando um gênero selecionado. Agora, se você não estiver usando nenhum, então você não colocaria nenhum lá. Se corresponder a isso, os gêneros equivalem a uma string vazia E usaremos esse sublinhado para agir como um curinga. Então, se não forem gêneros selecionados, diremos que gêneros são iguais Certo. Agora, se quisermos testar isso, podemos ir em frente e voltar e simplesmente imprimir gêneros toda vez que selecionarmos uma nova opção Então, veremos abaixo em nossa produção toda vez que selecionarmos algo, esportes, comédia. Então, vemos que tudo está funcionando bem. E se selecionarmos o gênero selecionado aqui na parte superior, nada será impresso porque é uma string vazia. Então aí está. Temos nossos gêneros funcionando, e temos nosso texto de pesquisa. Agora, a última coisa que precisamos fazer quando obtemos nosso resultado é saber quantos resultados temos E com base nisso, podemos adicionar nossos itens de resultado, certo? Então, se entrarmos aqui, faremos uma busca aqui. Na verdade, quero deixar isso um pouco mais bonito de se ver Então, vou usar animes JSON Spring Pi. Dessa forma, seria um pouco mais fácil dizer o que estamos vendo. Vou fazer Attack on Titan novamente, fazer uma busca e, sim, não vou imprimi-la. Lá vamos nós. Tudo bem, então eu adiciono Titan para ter uma visão melhor do que estamos vendo aqui Não era assim que eu queria que chegássemos ao topo. Então, vemos que tudo estará dentro dos dados. OK. Então, vamos imprimir animes e entrar na seção de dados E vamos verificar isso. De volta a Titan, faça uma busca E é inválido o índice de obtenção do. Está bem? O que eu fiz de errado aqui? Apenas pense, oh, isso não vai nos dar nada. Isso realmente nos deu algumas coisas. Isso é interessante. Oh, é um D minúsculo, é por isso. Eu tinha questões de capitalização de capital. Vamos usar os dados. Faça a pesquisa, dê uma olhada. E vou rolar até o topo. OK. Então, agora temos tudo isso. Então, para cada resultado dentro dos dados, podemos criar algo novo, certo? Então, podemos dizer que podemos configurar nossos animes agora novamente, então vamos dizer que animes são iguais aos dados de anime Dessa forma, agora ele contém apenas os dados, em vez de ter que passar por essa chave extra sem motivo. Agora podemos ir em frente e verificar. Podemos dizer quatro animes e animes. Anim vai escrever aqui por um segundo, não temos uma instância ou não temos nada carregado a partir do qual criar uma instância Então, eu vou dizer que o resultado da barra é igual ao resultado do anime aqui. E vamos carregar esse G. E voltar para animes e animes. Vamos fazer RI para resultado, instância, resultado, instanciar Oh, porque estamos fazendo com que seja passado para lá. Tudo bem. Então, diga o resultado do anime. Sim, longe porque temos uma confusão aqui. Ele está tentando pegá-lo da função aqui, então está pensando que é um número inteiro. Então, vamos chamar essa mudança de instanciação de ponto de resultado de anime Tudo bem. Agora, obteremos um VBox que está dentro do nosso contêiner de resultados E criança. E estamos no RI, certo? Então, agora, se executarmos isso e fizermos uma pesquisa, isso deve preencher completamente nosso resultado, ataque à busca de Titã. Lá vamos nós. E veja a quantidade de resultados de pesquisa que temos para Attack on Titan Isso aqui, busca no ensino médio. E temos muito mais. Então, o que realmente precisamos fazer é esclarecer isso porque, embora você não possa ver, nossos resultados estão empilhados uns sobre os outros, adicionando nossos novos resultados aos antigos. Portanto, antes de pesquisarmos tudo isso, precisamos acessar nosso contêiner VBox E vamos ver. Temos uma clara ou algo assim ? Tudo bem. Não vejo nenhuma maneira de simplesmente limpá-lo, então também podemos percorrer outro loop antes de entrarmos nele. Então, podemos fazer um loop while ou for. Então, como queremos dizer enquanto R vBox container dot Children Isso vai nos devolver um número inteiro? Pais em uma variedade de referências. Ok, isso vai chegar a isso. Então, queremos contar crianças. Portanto, a contagem de Wilchild é maior que zero. Vamos obter nosso contêiner VBox e, ainda assim, o índice infantil zero, mesmo se tivermos um filho que ainda terá um índice zero Então, vamos basicamente remover constantemente a parte superior até que não tenhamos mais nada nem um quarto. Coloque um pequeno espaçador lá. Agora veja se entramos, clique em Piton , pesquise e temos o L preenchido. E se olharmos para o contêiner Rsults remoto ou o VBox, temos tudo isso aqui Então, o que é agora, o que vamos fazer quando realizarmos outra pesquisa, vamos pegar a primeira aqui e excluí-la. Vai verificar. Sim, ainda temos pelo menos uma criança aqui. Pegue o próximo, que será movido para cá, exclua-o e assim por diante. Se eu entrar agora e se você ficar de olho aqui, se você se lembrar de quão pequeno ficou, você entra, faz a mesma busca, busca no ensino médio, e vemos que não ficou muito menor quando fizemos isso Embora demore um pouco para examiná-los e excluí-los todos, o que é um pouco problemático. Portanto, pode ser mais fácil excluir completamente o VBox inteiro Ok, então vamos tentar excluir o VBox inteiro e criar um novo quando precisarmos, então diremos que obteremos nosso contêiner VBox E então vamos adicionar outro. S V NubX é igual ao contêiner VBox, NuGet nosso contêiner de resultados, adicione o Neubox filho, certo ? Então, vamos ver como isso funciona agora. Espero que seja muito mais rápido, já que não estamos analisando potencialmente 1.000 resultados agora Então, a mesma coisa, ataque Titan Search. Tudo bem. Tínhamos uma opção de valor nulo, então entramos e dizemos o que aconteceu aqui Contêiner de resultados, e diremos que sempre obteremos a criança zero BRVBx Tudo bem, vamos tentar isso. Tudo bem, então resolvemos o problema alterando em vez de obter o VBox diretamente, pois ele está sempre mudando e tem um nome diferente Claro, poderíamos simplesmente chamá-la de nossa nova caixa aqui, e isso provavelmente também teria resolvido o problema. Mas, em vez disso, vamos apenas alterá-lo para ainda criança zero. E também fazemos isso aqui em cima quando não temos sinal. E como parece que estamos tentando fazer as duas coisas ao mesmo tempo, remover e adicionar, ligo e esperei 0,1 segundo, o que é bom. É um décimo de segundo. Isso não vai te matar. Então, se prosseguirmos e executá-lo agora, podemos prosseguir e fazer um ataque de busca na busca de Titan Espere um segundo. Aí está. Vemos o tamanho do nosso bar aqui ao lado. Quando digitamos no ensino médio ou em qualquer anime que apareça com isso, e pesquisamos, notamos que a barra fica menor porque vai gerar mais resultados E notamos que a coisa toda vai piscar, o que está completamente limpo. Aí está. E você vê que temos essa pequena barganha. E então, para mostrar que não está acumulando resultados, podemos voltar a esse ataque agora devemos fazer nossa maior barganha Aí está. Tudo bem, então no próximo vídeo, vamos ver Miniatura, faremos nossas miniaturas e nossas Então, os títulos e os gêneros. Preencheremos essas informações a seguir. 71. Miniaturas, títulos, gêneros: Tudo bem, vamos preencher todas as miniaturas, títulos e gêneros aqui Basta espaçar um pouco, para tornar as coisas um pouco mais agradáveis de ver aqui Vá. Tudo bem? Então, obviamente, isso vai estar dentro do nosso anime aqui. Então, vamos adicionar está bem. E vamos ver. Precisamos obter nosso , então vamos em frente e começamos dando uma olhada em nosso resultado. Veja, temos que descer para animar Info e depois para o título do anime Então, vamos dizer RI e podemos dizer get child, get node. Tudo bem. Vamos usar apenas get node aqui. E a partir daqui, podemos ver que descemos para animar Info. Meu caso, e aí dentro, podemos obter o texto do título do anime. E podemos definir isso como anime. Acho que é chamado de título em nossos resultados. Descubra bem rápido, pois eu acabei de testar nossa cena principal e realizar uma busca em Titan, E não é uma função inexistente, está sendo anulada. Eu me engano, erro de digitação, tudo bem, então agora temos todos os nossos títulos configurados Então, agora a questão é: onde esses gêneros estão localizados E, por isso, eu sinceramente não sei nada sobre isso. Mas o que vou fazer é imprimir JSON, stringificar, animes e Eu gostaria que isso fosse mais fácil de ver. Então, vou adicionar um espaço aqui como meu segundo resultado à sequência de Pi e vou executá-lo novamente. E isso vai ser muito mais limpo de se ver aqui embaixo. Sinopse da classificação de status. Realmente, gênero não é nada. Não tem nenhum. Isso é muito interessante. Sim, parece que se chama apenas de gêneros. Muito parecido com o título. Vamos pegar nosso nó e obter essa propriedade de texto dele. E esse foi chamado de gêneros de anime. E isso é igual aos gêneros de anime? Sim. Tudo bem. Então, se dermos uma olhada nisso agora, vamos ver a tag no Titan SERT E não. Invalido? Sim. Ah, porque, como resultado, obteve uma matriz. Ok, então teremos que transformar isso em uma string. Vamos dar uma olhada. Então, se acessarmos a ajuda da Pesquisa e acessarmos o array, daremos uma olhada? Vamos ver. A matriz tem duas strings Acho que não. Não, parece que não. Então, tudo bem. Podemos simplesmente convertê-lo em uma string, inserir STR e envolvê-lo com um par de parênteses No entanto, acredito que não obteremos o resultado desejado aqui. Então, se prosseguirmos e concluirmos essa pesquisa, você pode ver que estamos recebendo esses colchetes e isso ainda está envolvido Então, o que devemos fazer em vez disso é executar um loop aqui. Eu vou dizer quatro gêneros em gêneros de anime. Então, digamos que texto mais é igual gênero, mais vou colocar uma vírgula a gênero, mais vou colocar uma vírgula no espaço. Você sabe o que? Acho que faremos isso separadamente apenas para evitar qualquer problema. Então, teremos duas linhas aqui. Então, se tivermos mais gêneros lá, adicionaremos uma vírgula com o espaço e, em seguida, adicionaremos o Dessa forma, não acabamos com um espaço de vírgula no final da nossa lista Agora só estamos adicionando gêneros quando temos gêneros para Portanto, nosso primeiro resultado não será apenas um par de colchetes. Vai ficar vazio. Ah, bem, nesse caso, será totalmente nossa coisa padrão, mas podemos ver drama de ação, ação premiada, bateria, suspense, bateria ação, suspense Muito drama de ação. Alguns desses, vamos lá. Fantasia de comédia de aventura. Nosso imposto padrão precisa ser eliminado de lá. Eu estou, então está tudo bem. Podemos esclarecer isso aqui, certo? Ou podemos simplesmente ir em frente e limpá-lo aqui. De qualquer forma, está perfeitamente bem. E acho que vou limpar a minha ali mesmo. Não tem problema. Então, se o executarmos agora, devemos estar prontos para começar. E aí Embora tenhamos o coma no início, é um pouco lamentável Deve ser uma solução fácil. Eu deveria ser uma solução rápida. Não tem problema. Quando terminarmos com tudo isso, eu deveria poder simplesmente ligar para Oops Na verdade, sim, texto com pontos. Tudo bem. Então, acabamos de cortar o prefixo dela Então, fora do nosso loop frontal, quando terminamos, pegamos nossa propriedade de texto e a definimos igual a qualquer que seja nosso texto em nossa estela de gênero E chamamos de prefixo trim, e estamos apenas cortando esse Tudo bem. Então aí está. Isso deve resolver isso completamente. Então, se formos em frente e formarmos uma pesquisa agora, optamos por restringir a pesquisa. Aqui vamos nós. Vemos tudo aparecendo que Justin deveria. É ótimo. Então, agora temos que ver nossa imagem. Como obtemos essa imagem para cada uma de nossas coisas? Bem, vamos precisar de outro HTTP aqui. E vamos chamar isso de missão de imagem. E você adivinhou, vamos conectar o sinal de solicitação concluída a ele ao nosso script principal aqui E eu vou aumentar isso. E acho que vou colocá-lo aqui com o resto de nossas coisas e separá-las. Tudo bem. Então, agora, quando obtemos isso, temos o que teríamos : nossas imagens aqui. Portanto, precisaríamos formar nossa pesquisa aqui. Estamos recebendo muito disso. Então, em nossa solicitação de pesquisa de anime, acima do nosso loop for, queremos fazer isso acima. Vamos ver. Vamos fazer isso aqui em cima. Assim que tivermos nossos dados de anime , faremos nossa solicitação. Eles dirão imagem, ponto de missão. Missão. E colocaremos nossa URL, que será animes. E eu acredito que se chama apenas Imagem E para verificar isso, podemos prosseguir e imprimir Gotcha, com certeza E não precisamos do nosso JC Five Fact, podemos realmente verificá-lo aqui antes de começarmos a imprimi-lo Sim, a imagem é exatamente o que precisamos. Perfeito. Veja, agora vamos fazer uma busca. Oh, a matriz Get Image on Base é inválida. É uma cidade pequena, certo? Como é em uma matriz Bs? Vamos ver. Tudo bem, então vamos prosseguir e solicitar imagens de animes. E então, dentro do nosso circuito dianteiro aqui. Vamos não, aqui embaixo, onde recebemos nosso pedido. Podemos fazer isso, podemos criar nossa tecnologia, salvar nossa imagem de imagem nova. E podemos combinar aqui, dependendo do tipo de extensão. Então, vamos combinar EXT com a extensão. Isso vai eliminar nosso erro por enquanto? OK. Então, teremos que colocar nossa extensão aqui antes de podermos fazer qualquer coisa. Então, digamos, XT pouco antes de obtermos nosso resultado. EXT é igual à imagem do Anime. Ainda extensão. E isso nos dará o final do URL, nos dará PNG, JPEG, web P, TGA E dessa forma, quando combinamos a extensão, podemos combinar EG. Podemos combinar JPEG ou JPEG. Poderíamos combinar web P, ou poderíamos combinar TGA E, como de costume, nada disso coincide Vamos colocar um curinga e imprimir sistemas dizendo: “Não consigo imaginar E dentro de tudo isso, seguiremos em frente. Faremos a imagem, carregaremos e carregaremos do buffer, então carregue E e G do buffer E esse será o nosso corpo. Este é o nosso corpo, e estamos fazendo a mesma coisa em Ali, apenas de tipos diferentes. Carregue do JPEG do buffer, carregue P do buffer e carregue TGA e carregue TGA Tudo bem. Então isso vai nos dar nossa imagem. Podemos seguir em frente e depois disso eu quero fazer Du. Tudo bem. Então, vamos seguir em frente e obter uma nova variável, textura Imagem, textura nova. Nós fazemos o conjunto de pontos de textura Image. E passamos What do you Oh, porque ainda estamos dentro da bateria. Esse turno e essa aba. Sim. Então, defina a imagem, e o que vamos colocar lá será nossa imagem variável. E então vamos devolver a textura para nós. Dessa forma, podemos usá-lo em outro lugar, o que significa que quando fazemos nossa solicitação aqui, digamos, nossa miniatura é igual ao valor de retorno de nossa Eu sei soletrar corretamente. Agora, aqui dentro, é claro, antes de terminarmos, precisamos realmente colocar nossa miniatura aqui, que é nossa imagem de anime Dot get node, Anime. Vamos adicionar Manco Não. Nós não temos. Tudo bem. Então, quais coisas. Aqui está uma imagem de anime que está com API, eu acredito. Imagem de anime. Faça. Textura é igual a textura. Na verdade, miniatura. Como está aqui? Tudo bem, e parece que estou apontando um vazio aqui, então precisamos terminar de corrigir Talvez volte na textura da imagem. E isso é só se você tiver as setas apontando, certo? Então, se você tem essas setas aqui, apontando para void, dizendo que retornam void em sua solicitação HTTP para a solicitação de imagem, você precisa ir até lá e alterá-la para a Nós apontamos isso porque é para onde você está se voltando aqui, o fim. E eu mostraria isso funcionando agora, mas na verdade eu uso todas as minhas solicitações por dia. Então, vou ter que colocar isso em pausa e jogá-lo logo no final deste vídeo ou voltar na próxima vez e mostrar que está funcionando Acho que isso bastará por enquanto já que não tenho mais solicitações de EPI Eu atingi meu limite diário. Então, isso bastará aqui e nos vemos na próxima seção. Tudo bem, então eu não precisei fazer um pequeno trocador. Fiz com que as informações que tínhamos na parte superior da nossa solicitação de pesquisa do Animate fossem concluídas Eu os tenho. Movi essas três linhas para baixo e adicionei em uma espera. Então, estamos atribuindo nossa extensão logo após o loop de quatro para, é claro, animar e, em seguida, extensão de ponto de imagem, para que saibamos que tipo de imagem Em seguida, recebemos nossa solicitação de imagem e executamos a solicitação de URL, certo? Imagem de anime. E provavelmente deveríamos estar passando nossos cabeçalhos também lá. Em seguida, aguardamos. E dessa vez, no passado, sempre criamos um cronômetro para esperar um determinado período de tempo Desta vez, estamos usando um sinal de espera para aguardar nossa solicitação de imagem, solicitação concluída, então estamos esperando até que já tenhamos recebido as informações de que precisamos. E então estamos definindo a textura da nossa imagem de anime para nossa textura variável, e foi aqui que fiz um pequeno ajuste Eu mudei a textura para ser apenas uma variável global aqui. Bem, global na forma de estar no topo do nosso roteiro. E se eu rolar para baixo, onde está aqui, prossegui e estamos fazendo a mesma coisa aqui. Simplesmente não estamos devolvendo a textura. Acabei de criar a textura como uma variável externa, o que significa que tive que voltar aqui e colar de uma textura perdida de volta para o vazio Agora, a razão pela qual eu fiz isso é porque, por qualquer motivo, isso estava voltando como um número inteiro em vez dos dados Então, eu apenas mudei dessa forma para que possamos definir os dados aqui, aqui, mas a variável existe fora dessa função É por isso que não precisamos voltar. E também para evitar problemas, eu realmente tenho problemas, mas aqui há limites de API. Fui em frente e mudei meu tamanho para três para obter apenas três resultados porque estamos fazendo uma chamada de API para cada resultado que obtemos, certo? Ou não é realmente uma chamada de API, mas estamos fazendo uma chamada de UR, é por isso que não precisamos dos cabeçalhos aqui. O que eu estou pensando? Não é para a imagem? Então, se você quisesse manter isso mais alto, você poderia. Não vai doer nada. Só três vai ser muito mais rápido. Se entrarmos no padrão, que é 100, e abrirmos aquele que já foi capturado, já dizemos ataque a Titan, antigo SERT Isso é o que devemos ver aqui. E vemos que temos nosso nome, temos nosso anime e temos todos os nossos gêneros por baixo Certo? Então aí está. blá, blá, Sam, e nós SERT, bum. Lá vamos nós. Vemos que tudo está funcionando perfeitamente bem. E se você quisesse, se estivesse fazendo 1.000, como o que eu tinha lá em cima, só vai demorar um pouco mais. Não sei por que pensei que usaria minhas chamadas extras de API lá, mas acho que foi minhas chamadas extras de API lá, uma pequena perda de pensamento. Podemos entrar e você pode ver que chegamos algum lugar onde acho que o ensino médio teve ainda mais resultados, certo? Entramos, saímos desse jeito, e você pode ver, olhar aquele bar. Continue bem pequeno, continue funcionando, continue funcionando, porque temos que tirar todas essas imagens e elas finalmente pararam. E você pode ver que temos todas as imagens, todas essas. Não falta nada. Mas aí está. Então isso funciona. Basicamente, precisávamos mover nossa variável de textura para a parte superior do script, em vez de retorná-la. E eu posso deixar de comentar aqueles que podemos considerar nossos gêneros agora. E basicamente movi nossa solicitação de extensão e imagem para baixo depois nossa. Essas são as únicas alterações que fiz lá, certo? Antes de começar e adicionar demais, acho que vou adicionar isso ao vídeo anterior Tudo bem, aí está. Portanto , funciona perfeitamente bem. E a seguir, daremos uma olhada na abertura de nossa página com a sinopse da história e outras informações como o link externo e 72. AnimePage: Tudo bem Então, vamos mostrar nosso painel que aparecerá com os detalhes do nosso programa, como nossa sinopse, e teremos uma visão clara da E se quisermos, podemos colocar o título e as tags lá também, se quisermos. Agora, o que fiz foi prosseguir com meus resultados e adicionar apenas um botão que diz visualizar. Agora, há uma variedade de maneiras de fazer isso, mas eu só tenho uma que diz visualização. E na minha cena principal, eu adicionei uma janela. Eu só tenho um texto direto lá dentro. E observe que você não pode mover a janela em si porque não consegue segurá-la Então você terá que ir até o inspetor, ir até o layout e transformar Lá está na janela e na posição. E então, quando você quiser mover as coisas de dentro que são filhos dela, como minha miniatura aqui, que é apenas uma textura, certo Eu tenho que ir até o layout Transform e brincar com meus números aqui para mover as coisas. Por exemplo, a posição aqui, se eu quiser movê-la, tenho que ir assim para colocá-la. Mas estou lembrando que, no lado esquerdo, está minha miniatura Também vou adicionar um rótulo, e esse será o fim de um título. Vou colocar algumas palavras aqui para ter uma ideia de onde essa etiqueta está colocada. Vou para o layout Transform e encontrarei um bom local para posicioná-lo, digamos: E se ultrapassarmos 300? Isso pode ser um pouco excessivo, 203 20. Ah, isso mesmo. Estamos no centro. Eu acredito. Vamos ver. Eu coloquei isso em 200, o que seria bem aqui em cima, na verdade. Isso é interessante. Então, talvez eu queira apoiar um pouco mais, reduzir 50. Tudo bem, eu vou com 160 e talvez diminua em dez. Então eu posso tirá-lo da borda. Então esse será o nosso título. E eu vou continuar e duplicar isso apenas com a seleção de títulos de anime D. Chame isso de nossas tags de anime, certo E é aqui que teremos drama, ação, fantasia, etc Então, isso vai ser baixo. Nosso título. Então, venha aqui, faça o layout, transforme e reduziremos RY para 30, 30 pode ser o correto. Talvez 40. Só para esclarecer um pouco. E agora precisamos de algo para o texto. Então, o que queremos colocar lá? Poderíamos fazer com que o rótulo ficasse um pouco prolixo. Poderíamos criar um rótulo de texto rico. Bem, acho que é isso que faremos. Eu tinha uma etiqueta de texto escrito, como você vê aqui, ao lado Agora, a desvantagem é que não podemos realmente ver nada. Vou colocar um monte de texto aqui para que possamos ter uma boa ideia do nosso tamanho e aqui para que possamos simplesmente enviar um pouco de spam para lá, acessar nosso layout e transformar. Tamanho. Isso é 100. Acho que 300 provavelmente é bom lá. Talvez 400 lá. E vamos ver essa posição. Agora, onde exatamente eu vou querer isso? Queremos isso diretamente abaixo. Pode ser a melhor opção para isso. Nesse caso, quais são os X para eles? 179. Você tem algum Oops Esse é o tamanho. Posição W 160. E então eu vou reduzi-lo em cerca de 100, e essa será a nossa história. Para onde vai uma sinopse. Então, vamos dizer sinopse de anime Tudo bem, então é assim que minha janela vai ficar. Talvez eu precise ajustar isso depois de ver a miniatura ser inserida Mas, por enquanto, vou ficar feliz com isso. E eu vou voltar ao meu resultado de anime. Vou adicionar um script ao resultado do meu anime e vou conectar o sinal pressionado. Vou reconectar isso aqui. Desconecte, basta conectá-lo novamente. Tudo bem E precisaremos de algumas coisas personalizadas na parte superior. Então, teremos um sinal personalizado aqui e ele mostrará detalhes. E vamos ter uma variável personalizada aqui chamada sinopse, que será apenas uma string E teremos nossa função pronta aqui. E quando estiver pronto, quando esse objeto for carregado em nossa cena, vamos conectá-lo com nosso sinal personalizado ao nosso nó principal aqui com seu script nele. Então, vamos fazer self dot connect, mostrar detalhes que podem ser chamados e lembrar que o primeiro argumento é ao qual você deseja conectá-lo, então queremos que três pais subam, digamos get node e faça dot dot slash dot slash dot slash dot slash Isso nos levará três pais. E o segundo argumento será o nome da função. Então eu vou chamá-lo de Mostrar janela. E eu coloco isso na parte interna do nó G em vez de na parte externa. Aqui vamos nós. E vou seguir em frente e fazer essa função antes que eu esqueça na minha janela principal de exibição de scripts. Agora, quando nosso botão for pressionado, emitiremos o sinal, emitiremos nosso sinal personalizado, mostraremos E vamos fazer uma vírgula porque vamos passar alguns detalhes adicionais ou informações adicionais com ela, certo? Então, vamos passar uma textura, então vou criar uma nova classificação de variável. Então, miniatura, isso vai ser igual à textura da nossa imagem de anime Então, essa será a miniatura desse objeto específico E estamos pegando essa textura e vamos enviá-la com nossos sinais. Enviaremos esses dados e também precisaremos enviar nossa sinopse Nosso título e gêneros. Isso é muita informação aqui. E nós vamos ter que fazer isso também. Então, vamos ver. Aqui embaixo, vamos ver que nosso título é igual. E obtemos isso do título de anime aqui. Título do anime. E tudo isso é coisa que já definimos como texto. E isso vai nos dizer que os gêneros não estão definidos. Gêneros iguais ao texto de gêneros de anime. E a sinopse já está definida na parte superior. Incrível. Tudo bem Então, agora estamos enviando todas as nossas informações. Agora, vou copiar todos esses argumentos para colocá-los na ordem correta. Volte para o meu script principal, minha função show window, e eu vou colar meus argumentos. Então, o que vamos fazer com isso é, bem, primeiro de tudo, precisamos realmente mostrar nossa janela. Então, vou colocar minha janela lá embaixo e vou chamar o Pop up centralizado para que ele apareça diretamente na tela central Em seguida, vou pegar minha miniatura aqui, a textura destruída dentro da janela e definir sua textura como miniatura, os dados que Precisamos definir o título do anime. O texto do título do anime é igual ao título, livros de anime, tags, texto é igual a gêneros, e A sinopse do anime faz. Texto. Adicione texto com um rótulo de rich text, adicione texto e sinopse Agora, no momento, não passamos nenhuma sinopse para nossos objetos Então, precisaremos dar uma olhada e ver como isso está estruturado. Então, vou descomentar meu arquivo JCN stringify aqui. Dessa forma, posso dar uma olhada no nome da sinopse Tenho certeza de que se chama apenas sinopse, mas quero ter Vou seguir em frente, fazer isso e fazer uma pesquisa. Eles atacam Titã novamente. E sim, sim, sim, tudo bem. Isso não precisa estar lá. Vocês não deveriam ter isso aí. Eu esqueci de deletar isso mais cedo. Mas obtivemos a saída, e essa é a principal coisa que eu estava procurando. E sim, é chamado apenas de sinopses. Tudo bem Então, vamos ver. Quando inserimos, transformamos em nossos gêneros um texto na extensão e na miniatura Definimos a textura, definimos o texto. E pouco antes de adicioná-lo, adicionar nosso objeto, certo, nossa instância de resultado, vamos prosseguir e precisamos definir a sinopse Então eu não faço sinopse. Claro que eu escrevi isso corretamente. Sim, sim, todas as letras minúsculas são iguais à sinopse do anime. Tudo bem. Vou seguir em frente e fazer isso de novo. Diga “Attack on Titan Search”. Vou passar. Não temos problemas. Fantástico. Agora nossa visão está meio que em todo lugar, o que é um pouco lamentável Mas tenho certeza de que podemos corrigir isso apenas definindo manualmente o tamanho. Mas vou continuar e clicar em Exibir, então devemos pegar essa miniatura Bem, vamos pegar um que tenha duas tags e gêneros E como você pode ver, eu preciso mudar tudo para a direita. E é para isso que serve esse teste, certo? Então, vamos ver o inspetor de títulos, então vou deixá-lo rodando aqui E vamos tentar que 2025250 tenha uma aparência melhor. E eu vou fazer a mesma coisa com nossas tags, 250, e nossa sinopse 250 Então, tudo foi mudado. E vamos ver, podemos rolar para baixo em nossa sinopse se precisarmos Tudo bem O reg. Nós temos isso configurado. Agora, não podemos realmente fechar nossa janela, então precisamos corrigir isso por nós mesmos aqui. Então, vamos prosseguir e fechar isso. E para isso, teremos que ir até nossa janela e conectar o sinal fechado solicitado. Vamos nos conectar à nossa rede principal, e eu vou seguir em frente e aumentá-la. Vá. Então, quando recebermos uma solicitação para fechar, isso acontecerá sempre que clicarmos no X no canto. Tudo o que vamos fazer é esconder a janela. Então, vamos abrir nossa janela e vamos ligar para Hide. Tão simples quanto isso. E vamos ver. O que podemos fazer com nossa caixa aqui? Bem, poderíamos ampliá-lo. E o nosso título de anime? Acredito que podemos simplesmente configurá-lo para clicar. Tudo bem Agora, quais são especificamente esses modos de embalagem automática? Como não se tratava de força herbácea, digamos que o texto é dividido arbitrariamente dentro do retângulo que delimita o nariz , permitindo linhas quebradas. Tudo bem, isso soa bem. Quebra suave, não. Tudo bem, então vou usar o Word Smart Ah. Talvez não usemos isso. Isso acabou completamente com tudo . Arbitrário. Não. Palavra pode ir com palavra, mas isso simplesmente não está acontecendo. Então, certo, o que eu vou fazer é clicar em Clip text. Eu não gosto que tenha subido um pouco. Esse tamanho só foi para um. Você não é assim. Então, o que podemos fazer aqui? Então, o que vou fazer para corrigir isso é que eu só quero meu botão esteja dentro da minha caixa de informações animadas aqui Dessa forma, está apenas de acordo com nosso gênero de título e depois com nosso botão. E eu configurei meu botão para Não sou um botão. Eu coloquei minha caixa de informações de anime aqui. Eu defino a horizontal para preencher e giro para expandir. E agora o que vou fazer é definir o título do anime, o alinhamento horizontal para estar no centro e no centro vertical E eu vou fazer a mesma coisa com os gêneros aqui, no centro E então, para o texto do botão, o texto do botão deve estar centralizado, embora isso deva ser bom Então, vamos abrir isso, ver como está agora. Digamos, ataque a Piton, tudo bem, então vamos lá. Então, ele se estende por toda parte. Oh, esse foi um pouco longe demais. Mas isso pode ser um problema meu. Pode definir alguma coisa, fazer asneiras. Talvez tenha sido isso aí. Vamos tentar novamente e ter certeza de que foi apenas algo que eu deixei em Ok, então isso está se estendendo até o fim, porque temos um título ou algo em andamento . Tudo bem Bem, você pode ver, é só uma questão de brincar com essas coisas agora e conseguir algo que você goste. Então, talvez eu volte às minhas informações sobre anime e talvez eu simplesmente desligue isso. Talvez eu simplesmente desligue o Phil. Eu apenas volto e dou uma olhada. Veja, está tudo bem agora. Novamente, nossos botões não têm quase o mesmo tamanho, então é só uma questão de brincar com e encontrar algo que você goste visualmente depois disso. Mas o importante é que podemos descer e escolher um, bum, e aí está, infelizmente, escolhemos um sem etiquetas na SEC. Embora já tenhamos selecionado um, podemos selecionar outro, e isso não afeta nada. Ainda temos as tags de título, e eu posso ver todo o texto padrão lá. Precisamos esclarecer isso. Então, vamos ver. Estará em nosso roteiro principal. Vamos ver antes de definirmos esse texto. Onde está? Bem, se eu apagar isso por culpa, ainda teremos? Essa é a pergunta. Vamos ver. Sinopse, exclua tudo isso E vamos ver se isso funciona, ou se ainda temos uma sinopse antiga Certo, e vamos continuar com isso de novo. Engraçado, eu nunca assisti isso de verdade. Então, vamos ver. Em seu primeiro dia do ensino médio. Em seu primeiro dia de Junior. Ok, então, sim, ainda temos um texto antigo lá. Portanto, precisamos ter certeza de apagar isso quando definimos a sinopse do título em um texto Então, antes de fazermos isso, vamos pegar nosso ponto de sinopse do anime A etiqueta de texto grande tem uma função clara. E eu deveria resolver isso. Agora, vamos dar uma olhada. Primeiro no primeiro dia do ensino médio, segundo, Gabby Braun e O próximo, Aaron Yeager. Provavelmente pronunciou isso errado. Há séculos atrás, matança de animais em Van. Não se sinta ameaçado pelos Titãs. Aí está. Então, nós o atualizamos completamente agora e ele está recebendo o texto certo. Tudo bem Portanto, cabe a você decidir como deseja fazer essa aparência visual. Mas é isso que vamos fazer. É assim que estamos fazendo e o que temos feito. Alternativamente, se você quisesse. Vou te mostrar uma maneira alternativa fazer isso se você não quiser usar um botão lá. E para manter isso, em vez de usar uma destruição de textura aqui, poderíamos entrar e eu simplesmente clicar com o botão direito do mouse e clicar em Alterar tipo e mudar isso para um botão de textura E então eu posso simplesmente arrastar isso para o normal. E agora temos esse botão. Vamos ver se precisamos ajustar algum texto. Acho que não o faríamos, mas, na verdade, talvez fosse o texto, talvez precisemos especificar que ele vai para o normal. Vamos com Narrato desta vez. E sim, tudo bem. Então isso o quebraria. Portanto, teríamos que especificar especificamente que era o normal. Vou dar uma olhada aqui. Informações sobre anime. Isso. E vai ser textura, sublinhado, normal. Ok. Então isso seria apenas uma pequena idade. Então, onde definimos nossa textura de imagem animada, faça textura de pontos, sublinhado, normal, assim E isso deve ser apenas uma mudança de linha. E isso funciona corretamente, certo? Colocamos nossas miniaturas lá e elas pareciam exatamente iguais E como agora é um botão que tem nossa textura, poderíamos configurá-lo, de forma que, ao clicarmos nele, em vez de clicarmos no botão de visualização, certo? Assim, podemos levar a imagem animada para lá. Vou copiar a mesma cópia. Então, em nossa imagem animada, clico em Pressionar e vou garantir que elas tenham a mesma função E agora você vai ver W we in? Posso clicar na miniatura, pegar nosso Windows e sublinhar Mudança. Mas essas são duas linhas de textura que tivemos que mudar. Se você quiser seguir esse caminho, o botão, então podemos clicar nele, aí está. E isso pode ser um pouco mais natural ou um pouco melhor para você, e então você pode simplesmente remover completamente esse botão juntos. Então, vou escondê-lo da vista para que você possa vê-lo dessa maneira. E então você pode ter lá. Então aí está. Veja como você pode fazer isso com nossos botões lá. E então, se você quiser se livrar disso, basta fazer com que a miniatura real seja clicável para abrir nossa janela Isso é tudo que você precisa fazer. Conecte um sinal de pressão, altere-o de um registro de textura para um botão de textura e, em seguida, altere toda a textura de pontos da imagem animada para a textura de pontos da imagem animada sublinhado normal E aí está. Então, resolvemos tudo isso, vou comentar que está sendo impresso aqui novamente. Mais uma vez, não precisamos mais disso. Aqui vamos nós. Então, agora podemos pesquisar animes, obter uma sinopse, ver as tags, obter títulos e percorrer uma grande lista antiga de 1.000 ou 2000 ou quantas quisermos E será uma chamada de API por pesquisa. Hum, na verdade, serão duas APIs inicialmente, porque temos que adicionar nossos gêneros lá Vou simplesmente descomentar isso. Coloque isso de volta lá. Vocês não deveriam ter comentado isso. Acabei de desligar isso apenas para economizar em algumas chamadas de API enquanto testava algumas coisas, certo? Agora podemos entrar e fazer, tipo, busca sobrenatural e congelada Não congelado. É congelante o que eu estava procurando. Congelando. Não procure nada por sobrenatural. Que tal fantasia? Interessante Então, não estamos conseguindo nada lá. Se formos para No gender, há brisa. Ficção científica. Isso é o que poderia ter sido o que eu estava procurando. Ação Di Pi. Vibração intensa. Eu gostaria. Então, eu estava completamente desvendado meu segredo só para ter certeza de que funcionava, certo? Vamos para a pesquisa de ações. E aí está. Só temos uma ação. Então, se tivermos tudo isso, se formos ao drama, teremos ainda menos. Podemos ver que podemos filtrá-lo cada vez mais se quisermos usar os gêneros Temos que preencher uma pesquisa, mas os gêneros são leiloados Tudo bem, então aí está. Aí está. Temos nossos pequenos pop-ups. Nós temos nossas informações. Temos nossas buscas. Então aí está. Agora você tem um aplicativo de desktop que pode ser usado para talvez se encontrar samatam Talvez encontre algo para assistir quando estiver entediado. E eu encorajaria você a seguir em frente e adicionar mais recursos a isso. Talvez adicione uma lista de favoritos, se quiser, ou uma lista de observação ou algo assim. Dessa forma, você tem algo que pode acompanhar. Tudo bem. Isso é tudo para esta seção. E continuaremos com a próxima semana, onde falaremos sobre algumas das personalizações mais avançadas para falaremos sobre algumas das personalizações mais realmente fazer com que seus programas pareçam mais exclusivos e com uma aparência mais profissional 73. Fontes: Tudo bem, então uma das coisas que podemos fazer para que nosso aplicativo ou jogos se destaquem e sejam mais exclusivos ou tenham uma aparência mais profissional Bem, uma dessas coisas são as fontes. Agora, as fontes podem ser muito examinadas, especialmente por desenvolvedores mais novos, mas as fontes podem mudar todo o campo do seu jogo ou software E é como quando você tem uma fonte para, digamos, um restaurante, certo? Se você tem uma fonte que tem apenas um pouco de inclinação para a direita e seus caracteres, temos a impressão, quer percebamos ou não que é algo gordo, certo? Temos a sensação de que essas letras se movem rapidamente com elas se inclinando desse jeito, especialmente se estiverem inclinadas para a direita Então, com essa impressão, podemos assumir internamente que este é um restaurante de fast food E temos tudo isso sem nem mesmo saber o nome do lugar ou que tipo de lugar é, quão grande é, que tipo de comida serve. Não sabemos nada, exceto que as letras em sua placa estão inclinadas. Isso mostra o quão poderosas as fontes podem ser. Pense se você estivesse jogando say dead so Oh, not dead souls. Almas negras. Dead souls é uma coisa completamente diferente, mas imagine que você estivesse jogando dark souls e tivéssemos essa fonte alegre Há por todo o lugar. Não seria, não se encaixaria porque não teria o mesmo tipo de vibração Certo? Eu me sentiria mal colocado Isso o distrairia da sensação do jogo ou diminuiria a seriedade do jogo e os tons sérios que ele emite Portanto, as fontes podem ser muito poderosas quando usadas. Portanto, é importante não ignorar essas coisas. Então, vou ver nossos resultados de anime e vou usar nosso título aqui para que possamos ter uma boa visão dele. Agora, sem tocar em nenhuma personalização real, vou entrar e ir para a seção do moide dentro do inspetor com meu título selecionado E você já pode ver que temos cores para a fonte, a sombra e o contorno Então, se eu definir a fonte como branca, talvez defina a sombra como um pouco mais transparente. Está bem? Temos algo acontecendo aqui. Podemos passar para a próxima seção, que são constantes. Podemos dar um deslocamento à sombra. OK. Então, agora temos o texto saindo da página. Podemos dar a isso um tamanho de contorno que realmente torne nosso texto muito mais visível Sombra no contorno. Nós poderíamos fazer isso também. Isso realmente vai melhorar nossas sombras lá embaixo. E poderíamos adicionar um espaçamento entre linhas. Podemos reduzir os tamanhos de fonte, e poderíamos, vamos até 23. E nesse caso, todas as opções que realmente temos aqui, mas vamos aumentar um pouco mais o deslocamento aqui, e um pouco mais o deslocamento aqui, talvez mudemos a sombra para ficar um pouco mais púrpura. Ok, que possamos ter mais desses tons frios E agora vamos em frente e se executarmos nossa cena principal, eu vou seguir em frente. Faremos nosso ataque usual em HTonfmersearch. E você já pode ver que, embora não tenhamos feito muita coisa, na verdade, apenas adicionar esse contorno a esse texto padrão aqui já fez com que esse texto se destacasse e se destacasse muito mais para você E quase não fizemos nada. Assim, você pode ver o quão importante até mesmo pequenos ajustes suas fontes podem ser Agora, você está preso a essas fontes padrão, é claro. Porque, na verdade, podemos usar algumas fontes personalizadas. Vá em frente e desligue tudo isso. Se entrarmos na seção de fontes, podemos usar uma fonte personalizada aqui. Não quer desligar lá. Tudo bem. Vou abrir o menu suspenso aqui e selecionar um novo arquivo de fonte. Tudo bem. E eu vou abrir isso sem conseguir visualizar a fonte. Opa. Tudo bem. Ele aparece em quatro pontos. Não precisamos selecionar nenhuma opção como costumávamos fazer em três pontos X. Então, acabei de baixar um arquivo de fonte aqui Está no formato TTF, e vou arrastá-lo para a seção de fontes, e você pode ver, desse jeito, que temos uma nova fonte Agora, não temos muitas opções definidas, mas, como você pode ver, mas, como você pode ver, ainda podemos voltar aqui e ajustar nossos lados e tudo o que está do lado de fora aqui e ainda ter os mesmos controles que tínhamos antes E como eu disse, até mesmo colocando um esboço. Isso. Até mesmo colocar um esboço realmente fará com que isso se destaque. Basta adicionar um pequeno fator a ele. Tudo bem. Agora, no Goto four aqui, parece que podemos adicionar variações completas Então, podemos ter nosso vínculo básico. Você pode configurar alguns títulos alternativos por precaução. E você pode definir diferentes características: forro, figuras de estilo antigo, conjuntos estilísticos Então você pode realmente vir aqui e começar a personalizar detalhes muito específicos em suas fontes Assim, você pode ir quase tão detalhadamente quanto quiser. Mas o que é ótimo é o fato de podermos controlar o tamanho da fonte, mesmo que não tenhamos uma fonte personalizada em bind no momento Isso nos permite ter pelo menos um pouco mais de controle sobre a aparência geral, e sempre podemos escolher uma fonte posteriormente, o que, novamente, é ótimo para prototipagem, possamos publicar algo rapidamente Mas lá vamos nós. Se pudermos usar fontes personalizadas e você ver se eu reiniciei isso, Oh, a fonte desapareceu. Aqui vamos nós. Aí você vê. Você pode ter fontes completamente novas simplesmente arrastando nosso arquivo, ele usa TTF, e acredito que você também pode usá-lo em um arquivo OTF Mas é tão simples quanto arrastar o arquivo até a seção de fontes dos thmovides E podemos ver se continuarmos repetidamente, faremos isso bem rápido novamente e diremos que não restringiremos a pesquisa E aí você dá uma olhada nisso. Linda. Agora, isso obviamente é um pouco grande demais para alguns de nossos títulos aqui, mas você entendeu. Agora, você teria que entrar e alterar cada parte da sua interface de usuário, e isso pode ser extremamente irritante ou levar muito tempo para acabar sendo feito E há uma maneira rápida de seguir em frente e fazer algo assim E fazer isso nos levaria ao próximo vídeo, onde começaremos a falar sobre temas. H. 74. Temas personalizados: Tudo bem. Agora, eu disse que haveria uma maneira mais fácil aplicar sua fonte a tudo, e essa maneira mais fácil será por meio do que chamamos de fontes ou temas. Então, podemos entrar e eu vou dar um zoom aqui , e um tema se aplicará aos nós ativados, bem como a tudo o que tem a ver com ele. Então, se o colocarmos em nosso nó principal aqui, tudo em nossa cena terá esse tema aplicado a ele. Então é assim que você faria um tema escuro e um tema claro. dois exemplos, basta trocar arquivo do tema e tudo mudará Então, se viermos aqui com nosso nó principal selecionado, que é nosso nó de controle de nossa cena, vá até nosso inspetor, desça até o tema, vá até o menu suspenso e selecione um novo tema E você notará, na parte inferior, agora temos essa guia de tema e, ao abri-la, podemos ver todas as nossas opções. E essas são nossas prévias de todos os nossos botões, controles deslizantes, como você vê aqui Assim, podemos brincar e basicamente ver como tudo vai ficar, mesmo que não tenhamos coisas em cena. Tudo bem, então essa prévia é fantástica para nós aqui. Agora, temos um novo tema e podemos incluir nossa fonte. Vou pegar nossa fonte e, como você vê no lado direito, lado daqui, temos uma fonte padrão. Se eu simplesmente arrastá-lo, agora tudo compartilha essa fonte tão rápido. Tudo é compartilhado. O que é fantástico, claro. Mas e todo o resto, certo? E se quisermos tornar as coisas mais únicas, com uma aparência mais especial? Bem, podemos seguir em frente e continuar gerenciando os itens. E com isso, isso abrirá uma nova cena que espero capturar aqui Isso não foi capturado. Um momento. Experimente o Windows 7. Lá vamos nós. Tudo bem, então temos nosso gerente aqui, e eu vou para Importar itens. E no tema Editor, vou clicar em Selecionar tudo na parte inferior. Importação selecionada. E lá vamos nós. Eu posso ir em frente e sair daqui quando tudo estiver pronto. E agora eu tenho todos os meus itens. Agora, eu posso controlar tudo do inspetor aqui. Você pode ver todas as coisas diferentes, desde caixa giratória, barras de progresso, todos os meus pop-ups, painéis, botão de opção, botões de menu, rótulos, edições de linha, à direita, meus controles deslizantes, contêineres e toneladas e toneladas de coisas que não usamos em nossa caixa de seleção butts Tudo pode ser modificado aqui no lado direito, certo? Então, podemos usar as cores dos nossos botões aqui, certo? E vemos que a cor da fonte é branca, e você pode ver que ela mudou para branco em nossa cena, bem como em nossa prévia. Podemos dizer foco da fonte ou cor de foco da fonte, certo? Talvez seja mais vermelho. Então, algo parecido. Incrível. Agora, quando eu passo o mouse sobre o botão, você pode ver, agora podemos visualmente quando nosso mouse está passando o mouse sobre ele. Da nossa prévia porque, obviamente, não podemos fazer isso aqui porque não está rodando, mas podemos testá-la em nossa prévia aqui. E, como eu disse, se você não quiser passar por tudo no inspetor, você pode realmente fazer isso aqui na seção do gerenciador de temas, aqui na guia Então, estamos editando nosso botão, então vou abri-lo, e você verá uma lista enorme aqui. E me dê um momento para isso. Vou te mostrar isso. Tudo bem. Então, como eu estava dizendo, tudo o que você vê ao lado aqui será mostrado quando abrirmos isso, para que você possa ver tudo aqui, todas as partes que adicionamos para edição. Então, estávamos editando o botão. Então, se eu abrir isso, podemos ver todas as mesmas propriedades estão aqui, mas não só isso, elas também estão organizadas maneira que você imagina que sejam. E você também pode vir aqui e renomeá-los. Se você não gosta do tamanho do contorno, pode renomeá-lo como quiser Aqui estão todas as nossas cores. Portanto, é muito fácil para nós fazer isso. Entramos na fonte. Não, tenho aquele tamanho do contorno, tamanho da fonte, isso. Então, vamos dar uma olhada aqui, esses pequenos não temas, mas o estilo. Então, vamos ao normal, um normal, mas aqui. Eu vou fazer um estilo de caixa plana. Só espere um segundo. Os temas parecem ter um pequeno problema . Mas tudo bem. Abra isso. E você vê essa abertura aqui no inspetor, então você pode querer usar o inspetor de qualquer maneira, mas não precisa E veja, agora entre, eu posso adicionar bordas aqui. Assim, podemos adicionar essa largura de borda em nossos botões, bem como, é claro, selecionar a cor de nossas bordas. Podemos usar verde brilhante e começar a adicioná-los. Então, podemos fazer algo assim, se quisermos. Mas o que podemos fazer é entrar aqui e simplesmente adicionar cantos. Podemos arredondar nossos cantos. E agora, sem precisar fazer nada complicado, temos esses belos botões arredondados e, como coisas como o botão de opção vêm do botão base, tudo isso também está sendo arredondado. E se você quisesse ser muito mais extremo, por exemplo, pronto. Estamos chegando mais perto de criar um botão cada vez mais redondo aqui e cada vez mais perto apenas criar um botão circular Veja, isso só vai nos permitir ir até certo ponto com esses botões reais, então tenha isso em mente. Mesmo assim, temos pelo menos, na minha opinião, botões bonitos que parecem mais bonitos do que aqueles retângulos quadrados pontiagudos. Cantos arredondados sempre parecem mais bonitos para mim. Talvez você prefira os pontos, mas eu sempre prefiro sete apenas um canto ligeiramente arredondado, certo? Então, mesmo que entremos com, tipo, três, certo? Em nossos cantos, para mim, isso ainda pareceria pelo menos um pouco melhor do que ter esses pontos Mas você pode vir aqui e alterá-los completamente o quanto quiser. E então, sempre que estiver satisfeito em modificar todos os diferentes aspectos do seu tema, basta acessar o menu suspenso aqui e salvar seu tema E você pode fazer isso algumas vezes e sempre que estiver pronto sempre que quiser ter a opção de alterar temas diferentes, tudo o que você precisa fazer é carregar o tema e colocá-lo na propriedade do tema aqui. E você pode fazer isso em código, certo? Basta acessar a propriedade do tema e carregar seu arquivo de tema nela. E aí está. Você aplicou seu tema. Você tem diferentes opções de tema inseridas. Tudo bem, então se você quiser depois de configurar alguns temas, agora você pode obviamente configurá-lo com um botão de alternância claro e escuro Então, se eu voltasse para Hootie aqui por um segundo. Se prosseguirmos e definirmos isso para, vamos ver. Não é um botão de alternância. É um botão de verificação do botão de entrada e pesquisa. É assim que eles são chamados aqui. Vou seguir em frente e trazer isso para cá. Isso realmente não vai importar. E o estilo é a razão pela qual temos essa experiência. Tudo bem por enquanto. Então, digamos que temos esse botão de verificação. Vou seguir em frente e apertar o sinal de pressão alternado anexá-lo ao meu script principal E tudo o que vou fazer é porque esse tipo de coisa surgiu, porque eu não sei, os temas parecem fazer com que as coisas parem , pelo menos do meu lado, o tempo todo Então, se eu vier até aqui e, com base em se está pressionado ou não, certo, podemos carregar temas diferentes. Então, vou dizer se o botão for pressionado porque esse é o argumento que está sendo transmitido, logo quando o ativamos, se o botão for pressionado Então, se for verdade, se estiver ativado, vamos configurá-lo para o tema dois. Caso contrário, entraremos e o definiremos como tema um, guarde isso. E tudo o que estamos fazendo é obter o nó em que está, certo? Portanto, não precisamos digitar self, mas eu gosto de fazer isso de qualquer maneira, obtendo a propriedade do tema e apenas carregando nosso arquivo de tema. É tudo o que estamos fazendo. Agora é quando eu executo isso. Eu posso simplesmente clicar nesse botão E assim, podemos alternar entre o modo claro e o escuro Portanto, é tão simples quanto isso: se você quiser trocar temas, será demorado e criar criar e criar todos os temas diferentes que deseja ter Embora o lado positivo seja que, se você quiser apenas ter um tema claro e escuro e, claro, continuando, se quiser criar vários outros temas, você pode manter esses arquivos de tema pois os salvamos como um tema, certo? Você pode pegá-los e trazê-los para outros projetos no futuro, e você pode simplesmente se inscrever, e agora você só tem um tema claro e um escuro pronto para tudo, certo? Todos os seus projetos futuros. Mas é tão simples quanto isso. É uma linha de código para mudar o tema. É tão simples quanto isso. Defina a propriedade do tema igual para carregar seu arquivo de tema. Tudo bem. Portanto, os temas são poderosos. Eles podem ser mesmo se você quiser definir sua fonte para todos os diferentes tipos de nós. Em vez de perder tempo, basta criar um tema, colocar sua fonte lá e pronto Tudo bem. Agora, farei mais uma anotação aqui se você quiser remover algo do seu tema. Reserve esse momento porque , obviamente, isso vai ficar bloqueado por um segundo por causa temas, por qualquer motivo, certo? Então, digamos que queremos remover algo do nosso tema porque talvez não precisemos dele ou isso não afete nosso projeto, seja o que for. Tudo bem. Podemos simplesmente acessar o botão Gerenciar itens aqui e abrir isso e clicar novamente, certo? Podemos simplesmente editar itens. Podemos encontrar algo como editor, editor trolls pop-up, predefinição de cores, mas, editando o cinto, aí mesmo, a ajuda no Então, todas essas coisas que estão aqui em cima que não importam. Eles não nos afetam, então podemos vir aqui e podemos simplesmente começar a excluir todas essas coisas que não importam Dessa forma, também começa a parecer um pouco mais limpo. Claro, você não precisava trazer isso aqui para começar. Você só pode trazer itens selecionados se quiser. Mas se você vai criar um tema, acho melhor fazer isso para todos eles de qualquer maneira. Dessa forma, você pode, como eu disse, simplesmente incluir o tema em qualquer projeto e estar pronto para começar imediatamente. Aí está. Veja como você pode remover coisas que talvez não queira mais fazer parte do seu tema. Aí está. Temas muito poderosos, muito úteis, dão ao seu programa uma aparência mais profissional, fazem com que pareça menos padrão, especialmente entre outros desenvolvedores do Goto e permitem que você tenha mais personalização para seus usuários, clientes, clientes, etc Agora, obviamente, isso vai funcionar um pouco mais no lado do software do que no lado da dívida do jogo, mas talvez você possa pensar algo único que possa fazer no lado da jogabilidade Tudo bem, isso bastará para este. seguir, falaremos sobre como fazer com que nossas janelas realmente se abram e façam parte do sistema operacional controlado. E o que quero dizer com isso é que, quando chegamos, sei que isso é difícil de ver agora porque mexemos com temas Vou me livrar deles por padrão, aqui mesmo. Essa janela que temos todo tipo de bagunçada agora Não podemos movê-lo, certo? Tipo, vai ficar preso dentro dessa janela. Então, vamos fazer isso em sua própria janela e ser controlados pelo sistema operacional. 75. Várias janelas: Tudo bem, vamos falar sobre ter janelas controladas pelo sistema operacional E o que quero dizer com isso é que você vê como essa janela aqui é sua própria janela controlada pelo sistema operacional. Não podemos nos mover Não necessariamente o movemos para qualquer lugar. Está meio que lá. Espere um pouco. Isso será muito mais fácil. Um momento. Tudo bem, se eu chegar ao modo de exibição aqui e dermos uma olhada Podemos ver que esta é sua própria janela independente que pode ser movida em qualquer ponto. Não está preso dentro do editor principal aqui, certo? No entanto, Oh, isso é um pouco grande demais. No entanto, se entrássemos e, novamente, realizássemos nossa busca, digamos que Titã Isso tem sido uma coisa do tempo. Tudo bem, desça, sempre que encontrarmos um programa, clique nele. E agora em nossas janelas você pode ver como está preso aqui, certo? Não é grátis. E a razão disso é porque ele está embutido na nossa janela principal aqui. Então não vai ser , não é grátis, certo? Não é controlado pelo nosso sistema operacional. Então é isso que eu vou te mostrar como fazer. Dessa forma, você pode ter sua própria janela. Então, por exemplo, você abre uma janela de configurações, um painel de configurações, um painel de preferências ao criar um software. Você pode pegar isso e mover a janela. Não precisa ficar preso em nenhum aplicativo. Correndo. E isso é praticamente uma coisa padrão. Portanto, seria bom que soubéssemos como fazer isso. Então, se desligarmos isso bem rápido, basta entrar em nosso script e podemos corrigir isso com uma linha de código e pronto. Então, obtemos uma janela de visualização, e ela obterá a janela de visualização da nossa janela atual, certo A janela principal do nosso programa. E tudo o que vamos fazer é Goey incorporar subjanelas e definir essa propriedade É isso mesmo. Agora, se executarmos isso, podemos ver que isso ainda funciona exatamente da mesma forma o tempo todo. E se prosseguirmos e fizermos nossa busca. Plastic Attack Titan, seja o que for, analisamos nossos resultados Não importa. Blá. Vamos escolher isso? Agora é sua própria janela. Podemos movê-lo, ter seu próprio título de janela e ele é criado e gerenciado pelo próprio sistema operacional. Três tamanhos e podemos fazer tudo o que pudermos , assim como nossas outras janelas. Portanto, é tão simples quanto isso adicionar esse pequeno recurso. Seria muito útil. Outro exemplo disso é se você quisesse ter , digamos, uma guia como essa, para poder despontar, assim como você pode fazer aqui Nós apenas o retiramos. Tudo bem. Aqui vamos nós. Então, abrimos a configuração aqui e podemos simplesmente dizer fazer flutuar. E agora é sua própria janela, certo? E é gerenciado pela operação. Então isso está funcionando da mesma forma que acabamos de fazer com os subventos embutidos de Dewey O que temos que fazer é fechá-lo e isso pode voltar para lá. E você pode fazer isso com qualquer um aqui. Então, por exemplo, você pode fazer isso com o script aqui. Você pode simplesmente clicar nesse botão aqui, e agora a janela do script é própria. E se você tiver dois monitores, agora você pode simplesmente colocá-los no segundo monitor sozinho, e você pode se concentrar na cena real em uma tela e seu código no. Então, você pode ver como janelas flutuantes como essa seria útil apenas durante desenvolvimento e, dependendo do seu aplicativo, seria mais produtivo para o usuário final, o que , é claro, significa que seu produto será mais apreciado , mais aproveitado e se tornará uma preferência, e aquele pequeno recurso, que uma linha de código poderia aumente a base de usuários do seu programa, seu aplicativo. Claro, seu programa tem que ser bom para começar, mas sim. Mas aí está. Isso é tudo o que precisamos fazer para criar essas janelas flutuantes e ter nossas janelas controladas pelo nosso sistema operacional em vez de ficarem presas dentro do nosso sistema principal. 76. Barras de menu: Então, vamos falar sobre como podemos criar uma barra de menu. Agora, por barras de menu, estou me referindo ao que você vê na parte superior da maioria dos aplicativos com coisas como arquivo, edição, visualização, talvez efeitos de camada e assim por diante. Tudo bem. Agora, como podemos ir em frente e fazer isso? Bem, eu tenho uma nova cena aqui usando uma barra de menu como meu nó raiz aqui. E eu apenas coloco uma cor reta no fundo porque, sem ela, você realmente não tem nada lá atrás e não pode realmente diferenciá-la do resto do seu programa Agora, dependendo do seu design e da aparência que você deseja que suas coisas fiquem, você pode querer isso. Outras vezes, você pode querer algo para diferenciar, mesmo que seja apenas uma tonalidade ligeiramente diferente plano de fundo padrão com o qual você está trabalhando Então, para mim, eu só quero usar esse vermelho escuro, meio marrom E se você estiver curioso, a cor hexadecimal é 391715 OK. Agora, o que podemos fazer? Como podemos adicionar barras e brincos Se continuarmos jogando isso, terei que capturar isso para você aqui em apenas um momento. Oh, não, isso captura automaticamente. Fantástico. É um pouco grande. Então, vou diminuir um pouco. Mas, como você pode ver, é claro que não há nada em que possamos clicar. É só um bar. Nada acontece. Então, não é muito interessante. Então, como podemos realmente adicionar itens a essas barras de menu, é claro, podemos fazer isso por meio de código. Mas, na verdade, podemos nos livrar de parte disso usando outro nó. E se você realmente quiser , se tiver apenas itens de menu simples, essa também seria a maneira mais rápida de fazer isso Tudo bem, então vamos entrar na barra de menu e, se apenas pesquisarmos o menu dentro do nó de criação de novo , caso já tenha passado algum tempo e você não tenha visto isso por algum motivo, vá em frente e apareça novamente, ali mesmo Vamos prosseguir e pesquisar no menu, e obtemos a barra de menu, mas o que queremos é o botão de menu neste momento. E agora, com esse botão de menu, podemos prosseguir e chamá-lo de botão Bo, por exemplo, dar a ele um bom nome como esse. O texto, é claro, seria File, Bio, não Bilk. Tudo bem, vamos lá. E eu só vou me certificar de que é de bom tamanho, preencha. E este é o ponto em que agora podemos entrar, abrir nossa cena e executá-la. E você verá se clicarmos nele. Nós meio que temos esse pequeno pop-up aqui, mas não há nada lá dentro. Agora, a maneira mais fácil de adicionar coisas a ele seria dentro do nosso botão de menu. Temos essa seção chamada itens. Podemos dizer Adicionar elemento, certo? Então, podemos dizer como novo arquivo, adicionar elemento aberto, adicionar novo. Talvez tenhamos salvado, e vamos adicionar mais um para ser rápido. E está tudo bem aí no inspetor. Então, se isso é tudo que você precisa para cada um dos botões do menu , pronto. Você tem isso. Agora você pode clicar nele e só precisa fornecer um pouco de código para criá-los. Claro, isso também significa que podemos simplesmente duplicar nosso botão, deslizá-lo, é claro, alterar as opções que você quiser e temos um segundo botão de menu Agora, eu só vou ter um deles configurado aqui só para te mostrar. Mas se você só precisa menus simples como esses, isso é tudo que você precisa fazer. Agora, se você quiser ter um menu que se destaque um pouco em termos de passar o mouse sobre ele, certo, e então ele abre outro menu, se você quiser fazer algo assim, teremos que entrar no código para acessá-lo Agora, eu tenho meu script na minha barra de menu. Você pode configurá-los nos botões do menu, se quiser. Dessa forma, cada botão pode se controlar, que provavelmente seria a maneira melhor e mais inteligente fazer isso se você estivesse criando um produto real Então, para mim, como eu só tenho um botão de menu aqui, não é grande coisa. Mas, novamente, se você tivesse, talvez, cinco botões diferentes, talvez alguns deles tivessem vários menus diferentes, então você provavelmente vai querer pelo menos dividi-los em cada botão dessa forma. Tudo bem. Então, a primeira coisa que vou fazer é mostrar como podemos adicionar esses botões. Com esse botão do meu menu, vou excluir um novo arquivo, abrir, salvar e sair. Portanto, não tenho itens aqui no inspetor e vou mostrar como podemos adicioná-los por meio do Código Tudo bem, então eu vou criar uma variável. Vamos prepará-lo. Bar, vamos chamá-lo de botão Bile. E esse será, claro, nosso botão de arquivo. A classe em que podemos convertê-lo é um botão de menu. Tudo bem. Então, temos controle disso Agora podemos usar Flebuton Dot. E nós apenas dizemos adicionar item, acredito que é para nós aqui. Oh, não, erro meu. Na verdade, precisamos acessar o pop-up porque é um menu pop-up que aparece sozinho Então, queremos que apareça um pop-up. Agora podemos criar uma variável aqui, por exemplo, podemos dizer arquivo, podemos chamá-lo de menu Arquivo, que é, obviamente, um menu pop-up. Lá vamos nós. Agora podemos defini-lo como igual ao botão de arquivo dot Get pop-up. E tudo o que temos que fazer agora é bilemnu dot, e podemos adicionar mensagens instantâneas E podemos ver o item do ícone do anúncio, o que significa que podemos ter uma imagem exibida lá. Então, se você quiser ter, tipo, um pequeno disquete exibido ao lado do botão Salvar, você pode fazer isso Também temos itens de cheque. Então, se você quer ser algo que você pode simplesmente ativar e desativar, você pode fazer isso dessa forma. A verificação do rádio, que é apenas o botão circular. E então temos novamente o item de verificação e a verificação de rádio e tudo isso sem os ícones, e o submenu que entraremos em breve E o que é esse item multiestadual? Bem, vamos dar uma olhada nisso. Vou segurar a tecla Control e clicar em. E ele adiciona um novo item de vários estados com rótulo de texto. O rótulo é uma string, depois maxmun of state, o estado padrão, ND, Excel, vamos ver Ao contrário dos itens binários normais, os multistatoms podem ter mais de dois estados conforme definido pelo Cada pressão ativa o item, mas aumenta o estado em um. O valor padrão é definido pelos estados padrão. Então, parece que obtemos um aumento ou podemos ter vários estados. Então, toda vez que clicamos no botão, talvez ele mude de modo. Vamos dar uma olhada nisso. Vamos mudar para definir o estado como modo e definiremos o máximo de estados como três. Tudo bem, então vamos continuar e fazer isso. Vamos dar uma olhada nesse estado múltiplo. Nós clicamos nele? Bem, podemos clicar nele e não vemos nada acontecendo. Mas se dermos uma olhada , se dermos uma olhada nisso, poderíamos fazer com que os estados afetassem poderíamos fazer com que os estados afetassem o que está acontecendo em nosso projeto agora, como você vê aqui, verdade, ele não vai fazer nada sozinho, certo? É algo que exigirá coisas adicionais para nos ajudar. Já algo como um item de cheque, certo? Ligações me verificam. E se fôssemos executar isso, mesmo que não tenhamos nada aqui, podemos clicar nela, e você pode ver que temos essa pequena caixa de seleção e teríamos que configurar a obtenção desse item e definir a capacidade de verificação nele ou na propriedade de verificação Tudo bem, então como podemos fazer isso? Vamos dar uma olhada em como podemos adicionar nossos itens novamente. Podemos simplesmente dizer adicionar item, e dessa forma podemos colocá-lo em uma string e fazer nosso novo arquivo, eu acho, é como o chamamos. E neste ponto, podemos seguir em frente e podemos simplesmente copiar e colar essas informações. Então, podemos dizer que um novo arquivo está aberto. Acredito que nos salvamos aqui e depois desistimos. Tudo bem. Então, se fôssemos executar isso e dar uma olhada em nosso menu, você veria que todas essas opções estão aqui agora, assim como fizemos quando fizemos isso por meio do inspetor Então, se você preferir fazer isso em código, você pode. Mas se você só precisa de um menu simples como esse, passar pelo inspetor seria a maneira mais fácil ou rápida de adicionar novos itens ao seu Agora, eu disse que poderíamos ter novos ou arquivos que se abririam em outros menus. E fazer isso, é um pouco mais complicado. Nesse caso, na verdade, precisamos criar um novo menu pop-up para isso. Então, eu vou salvar New pop. E isso será um menu pop-up que será igual a um novo menu pop-up, menu pop-up, ponto novo. E eu vou diminuir um pouco isso. Novo ponto do menu pop-up. Então, temos que ir até que possamos adicionar um novo item para que possamos realmente vê-lo. Então, vamos dizer newpop dot add item. Diremos que este é meu novo item. Tudo bem. E agora, para criar isso ou adicioná-lo seu próprio pequeno menu que está dentro do nosso pop-up original, basta ir em frente e pegar o menu We get That File. E adicionamos um item de submenu. Agora, a primeira coisa será uma corda. Então, vamos dar uma olhada. Vamos chamar isso de meu item de submenu. E o que vem a seguir? Em seguida, será o submenu real Esse será o novo menu pop-up que criamos, que eu chamo de novo Pop. E isso é tudo que temos que colocar. Não precisamos colocar, não precisamos colocar uma identificação. Ele será automaticamente adicionado ao final da nossa lista, assim como acontece aqui. Então, se eu quisesse, poderíamos ir em frente e definir isso. Ah, isso mesmo. Isso deveria ser uma string, que deveria ser chamada de menu pop-up, mas vou seguir em frente e garantir que não tenhamos problemas com isso no futuro. Nós iríamos em frente e criaríamos um nome de ponto pop-up e daríamos um nome a ele, certo? Altere essa propriedade. Então, vamos chamar esse novo nome pop. Opa, isso deveria ser uma string. Lá vamos nós. E mudamos isso para a variante de string. Lá vamos nós. É isso que ele vai procurar. Agora, se fôssemos executá-lo, quando chegamos aqui? Como nome de índice na string de tipo. A que você está se referindo aqui? Vamos ver. Tudo bem, veja o problema. Isso mesmo. E o nome GB Script tem letras minúsculas. Eu estava trabalhando com a C Sharp recentemente, então misturei um pouco. E o outro problema é que , na verdade, precisamos incluir isso como parte do nosso menu. Então, vamos ao menu Arquivo, adicionamos Child e adicionamos nosso novo menu pop-up. Lá vamos nós. Agora, quando o executamos, você pode ver, temos nosso arquivo e o abrimos. E agora temos esse item chamado item de submenu, e ele tem uma seta apontando para a direita, indicando que ele se abre, e há nosso novo item lá. Este é meu novo item. Vá em frente e vamos chamar tudo isso de nossa configuração. E vamos ao nosso menu final, eu acredito, certo? E podemos nos conectar. E podemos conectar um sinal. Qual sinal? Bem, isso não está claro. Então, vamos dar uma olhada no menu pop-up. Métodos. Não estamos analisando essas propriedades, constantes, fontes, tamanhos de fonte, ícones, estilos e sinais do tema constantes, fontes, tamanhos de fonte, ícones, estilos e sinais Aqui vamos nós. Foco de ID, pressão de ID, pressão de índice e alteração de menu. Esses são todos os sinais que podemos dar uma olhada e, pensando imediatamente nisso, imagino que vamos analisar a identificação ou a impressora de índice. Emitir quando um item de algum índice é pressionado ou seu acelerador é ativado O acelerador tem a ver com o multi, o multiestado E vamos dar uma olhada no ID press, emitido quando um item de algum ID é pressionado ou está acelerado Não, o ID I é negativo, explicitamente ou devido ao estouro. Em vez disso, ele retornará ao índice correspondente Então, a questão é: qual deles queremos ver? Bem, acho que vou usar o índice para isso. Então, vou conectar minha impressora indexadora. Entre, conecte a prensa indexadora. Será uma maleável conectada ao Self. E diremos que chamaremos esse item. Vou chamá-lo de item selecionado e criarei uma nova função para ele. Bem, estou assumindo que isso é indexadora, vamos ter um índice aqui Essa é minha suposição, então vou descobrir. Vou continuar imprimindo o índice e veremos se isso funciona. Caso contrário, teremos que voltar dar uma olhada no sinal novamente. Arquivo. Se eu clicar em sair, obtenho o Índice três, novo arquivo, índice zero. Ok, então isso está funcionando exatamente como eu imagino. E, claro, se eu entrar no novo menu, este é meu novo item aqui, clique nele. Não vou receber nada porque isso terá seu próprio sinal que você precisaria conectar. Fizemos o índice funcionar. Incrível. O que podemos fazer agora? Bem, podemos dar uma olhada em nosso menu de biografia e ver quais são nossas opções. Oh, espero que isso não tenha aparecido o tempo todo. Então, os itens selecionados são indexados, e nosso item será apenas o menu de arquivo, pegue o texto do item e passe no índice. E então vamos fazer uma declaração de partida aqui. Então, combine o item, e vamos combinar esse texto se for igual a novo arquivo, abrir, salvar e sair, e faremos o bloco de código correspondente. Agora, para sair, vamos fazer Get tree dot quit. Então, se executássemos isso e selecionássemos sair do nosso menu, nosso programa deveria fechar. E isso acontece. Então é assim que você configuraria isso para fazer tudo o que você precisa fazer. Obviamente, suas opções serão diferentes e variarão de acordo com seu aplicativo. Mas é assim que você configura esses itens para que funcionem. Então você tem que conectar um sinal. No meu caso, estou usando o sinal de pressão do índice em vez de um ID. E então eu estou apenas passando o índice para que eu possa obter o texto dos itens. E então eu apenas combino o texto e executo a seção apropriada do código. Tudo bem. Espero que tenha ficado claro. Espero não ter bloqueado nada que fosse muito importante enquanto passávamos por isso Mas é assim que você cria alguns menus para seus aplicativos, se seguir a rota do software. Obviamente, nem todos os programas precisam das barras de menu, mas os que precisam, será bom saber como fazer isso. 77. O que são partículas: Tudo bem, pessoal, bem-vindos de volta. E vamos continuar falando sobre partículas hoje. Agora, as partículas são um mundo totalmente fascinante envolve as partículas e sistemas de partículas e seu papel crucial no desenvolvimento de jogos Os sistemas de partículas são uma ferramenta poderosa que nos permite criar efeitos visuais fascinantes adicionando um toque de magia e realismo O que exatamente são sistemas de partículas? Bem, imagine pequenas entidades dinâmicas que poderiam surgir, se mover e interagir com o mundo de maneira caótica, mas controlada Os sistemas de partículas são uma coleção dessas pequenas entidades conhecidas como partículas, e todas elas se juntam para formar efeitos impressionantes, como fumaça, fogo, faíscas, feitiços mágicos e até coisas que você nem imaginaria, como talvez morcegos voando rapidamente para fora de uma caverna Essas podem ser partículas. A magia dos sistemas de partículas está em sua capacidade de criar a ilusão de fenômenos complexos usando elementos individuais simples, seja criando um céu noturno estrelado ou uma Os sistemas de partículas nos dão a flexibilidade de criar experiências imersivas e de cura visual para nossos jogadores Agora, você pode fazer isso em dois D ou três D. E os sistemas, na maioria das vezes, funcionarão da mesma forma. Pode haver algumas pequenas diferenças. Uma delas, é claro, é aquela dimensão extra com a qual temos que nos preocupar, o que é natural quando passamos de dois D para vermelho. E é muito fácil criar partículas no motor Gatto aqui Como você pode ver aqui, acabei de adicionar algumas partículas de GPU na minha cena Estou apenas usando o ícone como minha textura. Tudo o que vou fazer é processar o material e selecionar o material de processamento de partículas E assim, você pode ver que já temos partículas trabalhando no motor. Agora, tudo se resume a ajustar e alterar vários valores diferentes para fazer as coisas acontecerem Eale apenas aumentaria a vida útil disso. E olha isso. Isso é aumentar esses talvez 50% na quantidade. E aí está. Temos isso simples, mas tecnicamente, é um sistema de partículas apenas do ícone E quando você entra em coisas como três D, pode usar esse sistema de partículas para criar coisas adicionais, como efeitos climáticos como chuva e neve. Tudo bem Espero que isso tenha feito você saber exatamente o que são as partículas, diferentes maneiras pelas quais elas podem ser usadas, e espero que tenha deixado você um pouco animado para começar a brincar com o sistema de partículas sozinho 78. Criando um fogo em 2D: Tudo bem. Tudo o que tenho aqui são minhas partículas de GPU (dois D) adicionadas em uma cena E a partir daqui, vamos seguir em frente e criar um efeito de fogo de dois D. Agora, você pode seguir em frente e, claro, experimentar mais, aumentar seu fogo, torná-lo algo um pouco mais exclusivo para você. Se você quiser, hum, vamos entrar. Agora, eu vou usar um cigarro. O que é isso? Textura de fumaça. E você pode encontrá-los em toda a Internet. Este vem especificamente do Kenny Particle Pack ou do Kenny's Particle Pack E você pode descobrir que acredito que está no Kenny dot NL. Tem muitos ativos gratuitos para você brincar. E então eu vou pegar aquela fumaça e trazê-la para minha textura. Para minhas partículas aqui. E agora vou processar o material aqui, clicar na seta aqui e selecionar um novo material de processamento de partículas Tudo bem. E isso é o que eu tenho. Agora, isso é bem grande. Então, a primeira coisa que eu quero fazer é ajustar essa escala. E eu vou descer até a seção de escala aqui dentro do meu material. Vá até a curva de escala e selecione uma nova textura de curva, abra-a, abra minha curva. E só porque eu já sei o que vou colocar aqui, vou descer para cerca de 0,34 para o lado esquerdo e o lado direito virá totalmente para baixo E é com isso que vou trabalhar. Agora, eu poderia voltar e ajustar isso mais tarde, mas é isso que estou começando Tudo bem, então vamos começar do início, aleatoriedade temporal, tudo bem Encontro. Nós podemos fazer uma observação. Em certas situações, use uma esfera e você pode contornar isso, mas vou usar apenas um ponto. Bandeiras de partículas. Não precisamos de nenhum desses. Direção. Bem, não queremos ir a lugar nenhum no X, mas queremos ir para algum lugar no Y. Agora queremos ir menos um, na direção do Y, porque queremos subir Gravidade, podemos simplesmente remover se quisermos. E a velocidade inicial, vou seguir em frente e dizer 32 Eu quero dar uma olhada. Isso realmente não vai a lugar nenhum. Estamos aumentando um pouco esse jogo com isso, para que possamos ver que está subindo. E se eu simplesmente aumentar minha vida útil para 2 segundos? Então, podemos ver que está começando a tomar forma. Então, vou continuar e brincar com alguns deles aqui. Vou reduzir meu spread talvez até 16. Agora, não temos muitas partículas. Estamos trabalhando apenas com oito, então é por isso que está do jeito que está. Mas e se chegarmos ao valor no topo aqui e talvez até mesmo chegarmos a 50? Ok, então isso é olhar um pouco mais perto de um incêndio. E se eu mudar minha vida volta para uma, como isso parece? Parece que está tudo bem. Acho que vou ajustar um pouco a minha escala aqui no começo No momento, estou com 0,19 no início. Vamos ver como isso vai acontecer. E, claro, com uma fogueira, precisaremos de um pouco de cor. Faça dentro da seção de cores, eu vou para minha rampa de cores E, do menu suspenso, é como uma nova textura gradiente. Para onde foi isso? Aí está. Então, vou clicar na minha rampa de cores agora, clicar na minha textura gradiente. E agora vou clicar na seção preta. Vou transformar isso em amarelo. Vou clicar na minha seção branca, puxá-la talvez até a metade e vou transformá-la em vermelha ou laranja Vou clicar na minha textura em uma posição aleatória para adicionar outro slot. E com isso, vou diminuir totalmente a opacidade Agora, meio que temos aquele desvanecimento que você está vendo aqui no topo E eu vou adivinhar isso um pouco. Agora, vamos ver. Você pode dizer a diferença se formos assim? Nós não podemos. Ok, então eu vou te mostrar esse pequeno truque mais tarde. Tudo bem. Portanto, temos nosso amarelo, nosso laranja e uma seção transparente dentro da minha rampa de cores Agora, para fazer com que pareça mais com fogo e não com essa nuvem que estamos vendo, vou rolar até o material abaixo do item Canvas. Vou clicar no menu suspenso. É como material de item de tela. E para o modo de mesclagem, vou apenas definir isso para adicionar. Tudo bem. Agora, com essa única mudança de opção, já temos algo que se parece muito mais com um incêndio Agora, se você quiser ter aquele centro branco em seu fogo, então tudo que você precisa fazer é pegar sua cor e ver como eu tenho Oh, você não pode ver lá. Tudo bem. Um momento. Tudo bem. Vou abrir aquela captura de tela para você lá. Você vê como eu tenho minha cor aqui na borda? Bem, se você quiser aquele centro branco, o centro branco quente, tudo o que você precisa fazer é se afastar um pouco da borda e ver que quanto mais perto você a puxa, maior será a área branca quente , então há uma pequena dica que você pode fazer para a cor original. Vou afastá-lo um pouco, talvez me aproximar um pouco mais da laranja. Não queremos ir até a laranja, certo, porque não queremos que a laranja se transforme em laranja Vou escolher uma bela laranja amarela, uma laranja dourada e me afastar do centro da parte para obter aquele lindo centro branco quente. Tudo bem. E com isso, basicamente temos uma fogueira toda acesa aqui. Agora, dependendo do que você está procurando, a quantidade, certo, pode variar. Então, se formos para 12, podemos obter algo assim, que perdemos aquele centro branco quente, mas isso pode ser algo mais próximo do que você está procurando. Oito era o padrão. Portanto, dependendo do visual artístico que você está procurando, você pode ajustar a quantidade aqui para o que for adequado para você e o que você deseja E é por isso que quando você está vendo um incêndio, por exemplo, em um jogo, se você tem uma máquina de especificações mais baixas, você pode perder vários quadros ao olhar para o fogo E então, quando você desvia o olhar, suas molduras voltam a subir porque fogo pode conter uma tonelada de partículas. Especialmente se estivermos falando mais em três D. Eu suponho, mas é por isso que as partículas podem ter, digamos, 1.000 partes, e então cada uma dessas partes e então cada uma dessas partes terá sua própria textura. Então, é quase como adicionar 1.000 sprites à sua tela, certo? De repente. Bem, com isso, temos uma fogueira. Vou reduzir o meu para 50 porque eu realmente não sinto que precisamos de 100. E poderíamos entrar e brincar com algo como variação de matiz aqui, que vai ajustar a tonalidade, que vai se parecer com a Então, se disséssemos, aumente o mínimo para talvez 0,2 e depois altere o máximo para 0,6, ou, você sabe o que? Vamos aumentar o máximo até o fim. E olha isso. Agora, em vez disso, temos esse fogo mágico. Que estamos chegando. Agora, poderíamos usar isso, já que está na forma vertical, podemos usar isso para algo como uma fogueira Agora, se fosse para D, obviamente, provavelmente tuitaríamos a escala e tornaríamos as coisas ainda menores, ainda menores do que isso. Mas é claro que isso vai depender do tamanho da textura que você está usando para começar. Então você pode ver com isso, podemos ter essas duas variações e ter mais desse visual mágico. E, assim como outras seções, podemos adicionar uma curva se quisermos fazer isso para nossa variação. E podemos brincar com eles, e isso afetaria a base de. Embora a minha não esteja mudando. Isso é um pouco interessante. O valor mínimo que tínhamos lá é zero. Muito interessante. Não está afetando. Talvez seja um pequeno bug com essa curva ou algo assim no momento. Eu não sei Mas você pode ver como a variação de matiz pode instantaneamente adicionar aquela sensação mágica a ela com todas essas cores Se você quiser, talvez você possa ajustar o ângulo ou a velocidade se quiser, isso terá a ver com virar, certo Seu Texas entregando isso, então você vê que se virarmos isso até o fim, isso é realmente girar em mais uma bola Eu só vou abaixar isso de volta. O orbital será como você vê, tudo vai girar em uma órbita ao redor do seu ponto aqui no meio Agora, com isso lá em cima, obviamente, isso não vai fazer diferença, mas aqui está para ver algumas filmagens. Agora, você pode obter diferentes tipos de efeitos, e são todos esses pequenos efeitos que nós meio que juntamos juntamos para criar esses incríveis efeitos visuais dentro dos jogos Mas acho que isso é tudo o que precisamos abordar aqui, fornecer uma boa base para partir? Obviamente, a vida útil quanto tempo esse incêndio vai durar. Você vê a razão pela qual damos uma pequena tragada lá. E isso porque os outros incêndios ainda existem. E dissemos que tantos, 50 podem existir ao mesmo tempo. Eles duram 200 segundos, então eles vão viver por um bom tempo. Mas você vê que em 1 segundo, obviamente, eles morrem rápido, então eles continuarão reaparecendo Um tiro significa que vai acontecer apenas uma vez, apenas uma popa rápida Então isso é algo que você usaria para algo como uma explosão. A corrente está sendo emitida novamente aqui no topo. E podemos adaptar isso facilmente. Então, se dissermos zero na direção ali e você puder ver um no X ali e ver se aumentamos a vida útil ou algo assim, você pode ver imediatamente como podemos sair de uma fogueira E então, com alguns pequenos ajustes, agora podemos modificá-lo para talvez um ataque de lança-chamas ou um sopro de fogo consistente para um dragão ou algo assim ou um sopro de fogo consistente para um dragão ou E tudo o que precisamos fazer é fazer talvez três pequenos ajustes Mas, certo, vou evitar que eu continue divagando. Vou seguir em frente e deixar isso aí. Aí está. Seguimos em frente e criamos um fogo em dois D para o nosso mundo. Então, se você quisesse adicionar algo como fumaça, você simplesmente adicionaria isso como uma partícula secundária, certo? Então, como um show rápido, temos apenas outra partícula. Queremos que a partícula esteja por trás do nosso fogo. Vou puxar minha textura de fumaça de volta. Em um material de processamento de partículas, mude minha escala com uma nova curva E tudo o que estamos fazendo é seguir as mesmas etapas que fizemos anteriormente. Como fizemos antes. Mas nós fomos com lá. Eu vou usar cores em vez de uma rampa. Vou usar um cinza escuro na minha cor aqui. Vamos definir nossa direção. Menos um no Y. Dê-nos alguma velocidade inicial Gravidade ajustada para zero. Minha propagação é semelhante à fumaça. Também vou adicionar um material a isso. Um item do Canvas apenas para que eu possa adicioná-lo como aditivo. Nós pegamos algo um pouco mais fumegante, como você vê lá. E, como você vê, apenas fazendo esses poucos ajustes, quase temos a aparência que queremos A quantidade aqui e oito, talvez adicionemos algumas para 12, e tudo o que temos é que não está durando muito. Vou seguir em frente e a velocidade aumentar um pouco. Lá vamos nós. Vou mover isso de volta. Você pode ver agora que temos essa fumaça saindo do nosso fogo. Certo. Então aí está. Vou abaixar isso, aumentar minha fumaça um pouco mais. Mas eles têm essa simplicidade e aquelas poucas reviravoltas desde o início E você vê que nós adicionamos uma fumaça em nosso fogo. Tudo bem. Então, com isso, temos um incêndio. Temos fumaça com ela. Isso bastará para este. Em seguida, vamos dar uma olhada em como criar um incêndio usando partículas em três D. Dessa forma, você pode ter uma ideia de quão semelhantes e diferentes dois D e três D são ao criar partículas e quanto do seu conhecimento será transferido de um para o outro. 79. Criando um fogo 3D: Tudo bem, pessoal, vamos criar um efeito de fogo novamente, mas desta vez em três D. Então eu só tenho uma cena em três D aqui, e vou adicionar um grito Basta adicionar partículas GP três D em nossa cena de três D. Agora, a princípio, você pode estar um pouco confuso porque, de qualquer forma, não vê uma textura em nenhum lugar. Bem, para criar esse fogo, o que precisamos fazer, já que estamos usando dois sprites D vamos usar nossos passes de entrega. Vá passar um. E no menu suspenso, vá em frente e selecione uma malha simples. Abra isso. Agora, você vê que está apontado para cima. Obviamente, isso não vai funcionar porque vamos ver isso, você sabe, de um lado assim, certo? Então, precisamos que ele fique de frente para nós em vez de ficar de frente para o céu. Então, dentro da nossa passagem um, dentro da nossa malha plana, olhamos para baixo. Vemos a orientação e podemos mudá-la para essas direções diferentes. E se você ver configurado para X, podemos ver que ele estará voltado para nós, o que é ótimo. Agora, o outro problema que temos é que, obviamente, se virarmos, o fogo, certo, o avião desaparece porque a parte traseira não está renderizada Olhamos de lado, não podemos realmente ver, então só podemos ver de um lado. Isso não é ótimo. Precisamos fazer o que é chamado de outdoor Mas eu adiciono este outdoor a nós para que possamos sempre olhar para Vamos adicionar material aqui logo abaixo nossa orientação e apenas adicionar um material padrão. E lá dentro, se entrarmos e rolarmos para baixo, veremos uma seção chamada Billboard Agora, se abrirmos isso e configurarmos o molde como ativado. Bem, parece que simplesmente desapareceu de nós. Então, vamos tentar o porquê do outdoor. Bem, isso também não está funcionando. Que tal um cartaz de partículas. Agora você deve estar se perguntando por que nenhuma dessas opções funciona em cartazes E para nós, porque estamos usando partículas aqui, na verdade temos que definir isso de uma maneira diferente. Então, nenhuma dessas opções de outdoor realmente funcionará para nós Então, para divulgar isso adequadamente, temos que ir até nosso material de processo e, é claro, adicionar esse processo de partículas E então, no desenho, você vê, ainda é da mesma forma, nada mudou. Vamos até a linha do transformador e a enviamos para Z ou Z, outdoor, e ok, nada Vamos passar para a próxima, ampla até a velocidade. Dê uma olhada. OK. Ok, parece que nada está realmente funcionando aqui. Bem, isso é interessante. Agora, você pode estar um pouco confuso. Por que nada está acontecendo? Por que nada está acontecendo? E é por isso que é importante que eu também queira examinar essa seção de três D, em vez de apenas chamá-la de partículas e dizer: Ei, sua transferência de conhecimento em dois D acabou, porque três D pode ser um pouco confuso quando você não trabalhou nela Então, com as linhas do transformador definidas como cartazes Z ou Z, precisamos também descer até nossa orientação e mudá-la para a face Z ou para a face Z. E agora podemos ver. E à medida que giramos, sempre podemos ver isso. Sempre ficará de frente para a câmera. Tudo bem, então isso é incrível. Então, agora podemos realmente começar a trabalhar na criação desse comprador para nós. Bem, vamos entrar no nosso material em nosso avião, certo? Então, a gota passa por um, nosso avião, dentro de lá, material lido sob orientação. E dentro do Albedo, assim como nos três D normais, tudo parece o Vamos usar textura, e eu vou trazer minha fumaça para dentro. E você verá que tem um fundo preto. Bem, isso não é legal. Isso não é realmente o que planejamos. Eu pensei, bem, o que esperávamos. Então, o que fazemos para isso é ir até a seção de transparência e defini-la como Alpha. E você tem outras opções aqui: tesoura Alpha, hash Alpha e profundidade de Agora, dependendo do que você está fazendo, isso pode ter efeitos diferentes. Mas para nós, o único que queremos especificamente é o Alpha aqui. E para o modo de mesclagem, vamos configurá-lo para adicionar, assim como fizemos em dois D, quando adicionamos aquele item de tela, material. Ok, agora estamos chegando mais perto do que estamos acostumados . A ligação realmente não importa. Podemos deixá-lo no verso para que não renderize o outro lado, já que, de qualquer forma, nunca vemos o outro lado. E isso é o que significa ligar. Então, se colocarmos na frente, ela ainda está lá, mas não está renderizando na frente Está sendo renderizado na parte de trás, mas como a frente está sempre voltada nós, nunca a veremos Então, vamos configurá-lo ou deixá-lo no padrão de voltar, porque nunca vemos o verso. Nós só vemos a frente. E isso também ajudará no desempenho de seus jogos, se você estiver fazendo algo em três D. Dessa forma, você basicamente não está renderizando o que não pode ver Agora, para sombreado, se girarmos, você verá que fica escuro aqui E, obviamente, se for um incêndio, ele tem sua própria luz, então não faz sentido que o fogo seja escuro de um lado e brilhante do outro. Então, vamos entrar na seção de sombreamento do nosso material e, a partir de por pixel, vamos defini-la como não Agora, a última coisa que precisamos fazer dentro desse material é, sob o sombreador de vértice, ativar o uso como E se não usarmos isso, não poderemos usar a cor em nossa partícula ou a variação de matiz ou a rampa de cores Não poderemos usar nada disso. Só ficará branco liso com isso desligado. Temos que usar a cor aqui em Albedo, e pronto. Agora, obviamente, não queremos isso. Queremos realmente usar a rampa de cores nisso, então é por isso que vamos usar esse albedo e ativá-lo sob a cor do vértice Tudo bem, então empate e passe. Podemos minimizar completamente essa seção e pronto. Podemos simplesmente entrar especificamente no material do processo ou em nossas partículas. Agora, assim como antes, temos nosso tempo, nossa forma de emissão e tudo mais. Agora, como estamos em três D, vou realmente mudar nossa forma de emissão para uma esfera e vou definir meu rtus para 0,4 Agora, basicamente, isso nos dará um pouco mais de profundidade para que não pareça tão plano Sinalizadores de artigos, não precisamos nos preocupar com essa direção Bem, queremos ir na outra direção, certo? Então, temos nosso conjunto Y, é negativo Y aqui? Bem, temos a gravidade nos puxando para baixo. E se a baixa for negativa, então queremos ser positivos. Então, vou apenas dizer gravidade como zero e definir nosso Y como positivo com uma direção. Velocidade inicial, vou configurá-la para quatro. E a razão pela qual estou indo tão baixo, você pode ver que quatro é na verdade um número muito alto, enquanto que em dois D, quando olhamos para pixels, é um número muito, muito pequeno. Agora, podemos vê-lo saindo nessa enorme área direcional, e isso é porque nosso spread é 45, então vamos reduzir isso para algo como 12 Agora podemos ter algo um pouco mais razoável para um incêndio. Nós vamos. E mesmo assim, talvez você queira baixá-lo ainda mais do que isso. 12 parece que seria muito bom para fumar. E eu vou entrar e, assim como fizemos antes, adicionar uma nova textura curva à minha escala. E vou reduzir isso para começar e depois reduzi-lo começar e depois reduzi-lo até o final e meio que encontrar algo aqui que funcione E sim, acho que ir de um a zero desse jeito com o tempo, acho que vai ficar bem. Minha cor, vou usar uma rampa de cores, uma nova textura gradiente. E, assim como antes, vou usar algum tipo de amarelo aqui no início. Eu vou jogar laranja em algum lugar lá dentro. No final, seremos transparentes. Se eu simplesmente mudar isso, pegue algo parecido, e acho que vou jogar mais um taco laranja do outro lado Só para realmente afetar muita coisa lá. Eu não jogo preto no feijão. Só para obter um maior gradiente de fogo, mas, como você vê, está perfeitamente bem aqui Vou jogar outro preto neste lado. Tudo bem. Então, desse jeito, estamos recebendo uma boa fogueira aqui. E, claro, dependendo da quantidade de partículas que você deseja colocar aqui, talvez 200, como você vê, isso fará uma grande diferença na aparência visual. Então, obviamente, oito não é o número que queremos usar com isso. 50 que estávamos usando em dois D é bastante decente. Portanto, você provavelmente poderia usar 50 para desempenho em vez de algo como 200, mas sempre poderia escolher 200 se quisesse. Mas, na maioria das vezes, seguimos em frente e recriamos nossos dois fogos D aqui em vermelho. E, claro, podemos entrar e brincar com o Q para que possamos ter um fogo mágico, criar nossa variação Que. Agora, vamos em frente e podemos ver o rádio linear de velocidade angular Você pode jogar com todas essas coisas se quiser. Ângulo é o ângulo em que a textura vai aparecer Então, se você quiser brincar com isso, poderia. Então, se eu subir, digamos, até 45 graus, isso vai dar um pouco mais de variação e, com sorte, fazer com que pareça menos copiar e colar, faça com que pareça um pouco mais bonito Mas, no geral, é isso. Todo o resto será exatamente igual a dois D aqui. Pequena configuração segura que tivemos que fazer no início. E você verá essa esfera, se você mudar o raio da lança Quanto maior fizermos isso, basicamente, maior será o fogo. Eu só vou adiar isso. D 0,4, apenas para olhar. Sim, aí está Nós temos isso. Então, algo que vou mencionar aqui é que, como você está em três D, você terá um ambiente mundial, é claro, e se quiser adicionar uma fumaça, será exatamente o mesmo que fizemos em dois D, sem fumaça, faça a configuração como fizemos em três D aqui e meio que coloque-a dentro do fogo. Mas você vai ter um ambiente mundial em três D em algum momento. Se você estiver fazendo praticamente qualquer jogo de três D, especialmente se quiser ter algum tipo de pós-processamento. Então, com o ambiente mundial aqui, acabei de adicionar um à cena. E eu vou para um novo ambiente, e é aqui que, claro, você entra, e acho que já falei sobre isso em algum momento. Nós vamos entrar e criar um céu. Isso é vir ao céu, criar um novo céu. Eu digo céu rural assim. E podemos preparar nossos céus para um jogo de três D. Mas o que você também pode fazer neste ambiente mundial é que, se descermos para brilhar, ativá-lo Veja, nosso fogo tem um pequeno brilho laranja ao redor e o que é bom, especialmente com fogo aqui, no modo de mistura, se o definirmos como aditivo, dê uma olhada nisso aditivo, dê uma olhada Agora temos aquela aparência ardente saindo dela, como uma flor, certo? E podemos ajustar a floração aqui. Se quisermos, eu posso ficar louco muito rápido. É aí que estaria sua opção de floração , se você quisesse. E seu limite de HDR, você pode realmente entrar e ajustar todas essas coisas, e você pode ver exatamente como isso afetaria algo como nosso Veja, nós até temos aquela cintilação circulando. Eu só queria mostrar como suas três partículas D podem ser afetadas pelo ambiente mundial, por opções como sua floração, seu modo de mesclagem, ter brilho ativado e coisas assim Mas agora eu vou fazer isso aqui para três partículas D. 80. Como codificar qualquer mecânico: Tudo bem, então vamos dar uma olhada em como podemos codificar praticamente qualquer mecânica que possamos imaginar Então, neste exemplo, vamos criar um salto duplo para nossa pequena plataforma ou personagem. E se pensarmos bem, temos que saber que vamos pular do chão e pular uma vez no ar. Agora, para acompanhar essas duas vezes, precisamos saber quantas vezes pulamos para saber se podemos ou não Então, para isso, vou me concentrar nas variáveis aqui para acompanhar isso, certo? Por padrão, a contagem de saltos é zero. Tudo bem. E quando pulamos do chão, obviamente, nossa contagem de saltos tem que aumentar em um mais igual Legal. Agora, e quando não estamos no chão? Mas quando não estamos no chão, podemos fazer a mesma coisa que estamos fazendo aqui, onde verificamos se pressionamos nosso botão de pular, e aqui podemos dizer que contagem de saltos é menor que dois. Tudo bem, então isso significa que podemos pular quando temos zero e podemos pular quando temos um em nosso balcão. Isso nos dá dois saltos, certo? Zero e um. E tudo o que vamos fazer aqui é a mesma coisa que fazemos quando normalmente pulamos, certo? Subimos e aumentamos nossa contagem de saltos. Agora, você notará um problema aqui. Vamos pular uma vez no chão, outra no ar, certo? Temos nosso salto duplo. Mas se tentarmos novamente, não funcionará. Estamos de volta a um único salto. Agora, por que você acha que é isso? Bem, é porque nossa contagem nunca reinicia em nenhum momento, certo? Começa do zero, certo? Vamos dar uma olhada nisso. Começamos do zero e pulamos. Isso é um, dois, três, quatro, cinco, seis. Então, depois de darmos o salto duplo inicial, já estamos em dois ou mais. Portanto, essa afirmação nunca será verdadeira, então nunca poderemos dar aquele salto no ar novamente. O que significa que temos que redefinir essa contagem de saltos em algum momento. Então, quando reiniciaremos essa contagem? Quando deixaremos o jogador dar seu salto duplo de volta? Bem, normalmente, você permite que eles saltem duas vezes para trás depois pousarem de volta no chão. Está bem? Bem, como sabemos quando estamos no chão? Bem, já temos esse cheque, se estivermos no chão. Então, se estivermos no chão, a contagem de saltos é igual a zero, certo Acabamos de reiniciá-lo. E agora temos aquele salto duplo. Aqui vamos nós. Então, tudo o que você precisa fazer é diminuir a velocidade, pensar no problema e no que você está tentando fazer. Pense nisso logicamente e divida-o em cada etapa E se você fizer isso, poderá virtualmente criar qualquer mecânica que você possa imaginar. Tudo bem Então, veja como você pode criar muito bem qualquer mecânica que você possa imaginar para seus jogos E isso também pode funcionar da mesma forma com criação do seu software. É claro, não dando saltos, mas talvez implementando um recurso ou implementando uma ferramenta, uma ação ou algo assim 81. Gravidade e salto: Tudo bem, então aqui vamos falar sobre como podemos adicionar gravidade e criar um salto em nosso jogo E eu estou fazendo isso aqui na seção de bônus deles porque realmente não se encaixa com Roger, por si só Embora você possa voltar se quiser, você pode tentar adicionar isso em três versões D. Mas loucura, porque se você estiver fazendo dois jogos D ou três jogos D, provavelmente precisará ser capaz de pular ou trabalhar com a gravidade em algum momento Então, eu vou jogar isso aqui de qualquer maneira. Então, o que temos aqui primeiro, vou explicar, são os três tipos de corpos físicos. O corpo estático, que está aqui embaixo, está funcionando como nosso piso, e o corpo estático é algo que não se move, não importa o que aconteça com ele. Então você pode pensar nisso como o chão, uma árvore, um prédio, certo? É algo que não vai se mover e não vai ter nenhum impacto. O corpo rígido de dois D aqui, que está do lado direito, na nossa foto já está por padrão Configure para que a física seja aplicada a ele. Então, isso é algo com o qual apenas interagimos, trocamos com o qual apenas interagimos, por algo como talvez uma bola futebol, certo Correndo pelo campo, chutando. Ou se você já jogou Sky Rim, toda a bagunça, a comida, as rodinhas de queijo que voam por todo lugar quando você corre ou usa barulho para Da, Esses são todos corpos rígidos. É algo que age quando algo interage com ele ou a força é aplicada a ele Agora, se fizéssemos isso, você veria que o corpo rígido cai diretamente por causa da física natural, e o corpo estático não se move, então é por isso que o usamos como piso E, claro, outras coisas, como edifícios e outras coisas. Agora, não importa que tipo de corpo físico usemos aqui, você tem uma forma de colisão, e isso define a forma desse corpo físico específico E todos eles têm sprites apenas para que possamos ver visualmente o que está acontecendo aqui E o corpo do nosso personagem, como você sabe, de Froger, é o que usamos quando o jogador tem o controle do personagem definido e ele recebe contribuições Agora, existem raras ocasiões em que você pode usar um corpo rígido, mas isso será muito específico e especializado nesse momento Vamos dar uma olhada no corpo do nosso personagem. Eu tenho duas variáveis aqui, uma para nossa gravidade, outra para nossa altura. Tudo bem. E dentro do nosso processo aqui. Agora, novamente, isso provavelmente deveria estar sob o processo de física apenas porque está relacionado ao movimento de nossos corpos físicos. Mas, neste exemplo, está tudo bem. Agora, para usá-los em vez de movimento, vamos usar a velocidade, e um corpo de personagem já tem uma propriedade de velocidade por padrão como um X de quatro pontos. Então, para usar essa propriedade de velocidade, temos que usar mover e deslizar ou mover e colidir Vou usar mover e deslizar aqui. Agora, vamos pensar sobre isso. Quando queremos que a gravidade se aplique? Bem, só queremos que seja aplicado quando nosso personagem estiver no ar , para que ele possa ser trazido de volta à terra, à direita, de volta ao solo. Ok, bem, como podemos dizer se o personagem não está no chão, então adicionar gravidade a ele. Bem, podemos fazer exatamente isso. Goto tem uma função embutida chamada is on the floor, que realiza essa verificação para vermos se estamos no chão, que, por padrão, a direção de cima está na direção Y negativa, então isso significa positivo Y. Quando colidimos com algo abaixo de nós, isso será considerado Então, podemos dizer se e dissemos não está no chão. E precisamos adicionar nossa gravidade a isso, certo? Então, pegamos nossa velocidade e estamos em dois D e será o mesmo em três D. Acessamos nosso eixo Y. E definimos isso com nossa gravidade. Agora, não definimos isso como igual à nossa gravidade porque queremos que nossa gravidade nos puxe para baixo, certo? E à medida que você cai, você ganha impulso e se move cada vez mais rápido É assim que as coisas funcionam, e se o positivo está caindo, precisamos adicionar mais igual Tudo bem? Então, se continuarmos jogando isso, veremos agora que o corpo do nosso personagem cai exatamente como nosso corpo rígido. Jogue isso de novo. Certo? Portanto, nosso corpo de personagem pode cair um pouco mais rápido do que nosso corpo gelado, mas você vê que eles funcionam da mesma forma Então é assim que você aplicaria a gravidade a um personagem em algum tipo de corpo físico. Tudo bem. Então, agora, que tal pular Bem, eu tenho uma variável lá em cima para a minha altura de salto, e isso vai representar a velocidade que temos subindo no ar Bem, quando podemos pular? Bem, só podemos pular quando estamos no chão, certo? Então, em vez de verificar quando não estamos no chão, queremos verificar se estamos no chão. Está no chão. E podemos adicionar isso como um segundo argumento e apenas dizer, pressionando nosso botão de pular, ou podemos tê-lo como um recuo separado aqui, se isso fizer sentido para você, que for mais fácil Seria mais limpo ter as duas declarações em uma linha aqui. Mas, novamente, depende de você. Você só quer tentar evitar muitas declarações aninhadas sempre que puder Então, diremos se a entrada é ação e não queremos dizer pressionada porque vamos ficar sentados pulando como um Então, você quer dizer que acabou de pressionar ou acabou de soltar. Então, sempre que nosso dedo desce ou quando nosso dedo sobe, quando vamos dar um salto. E isso é preferência pessoal. Eu prefiro me exercitar, e vou colocar isso no meu emprego. Como vamos subir Bem, fazemos o oposto da gravidade, certo? Se a gravidade está nos puxando para baixo, fazemos o oposto para subir. Então, vamos obter nossa velocidade em nosso eixo Y. E se o positivo nos puxa para baixo, vamos o negativo subir, então menos é igual à nossa Você vê que estamos no chão e podemos ir em frente e podemos pular. Então, desse jeito, já criamos uma mecânica de salto simples para nós E você notará que não podemos pular quando estamos no ar. Se eu apertar o botão, só podemos pular quando atingirmos o chão. E se você quiser se movimentar, trabalhe à esquerda e à direita com sua velocidade como na maioria dos jogos, você o fará Vai funcionar da mesma forma que nosso salto aqui. Então, se prosseguirmos e verificarmos, vou desistir do meu “se”, então vou me certificar de que ainda estamos no chão. Eu vou dizer que minha contribuição é ação. E é aqui que eu vou dizer descanse enquanto estivermos segurando para a esquerda ou para a direita, queremos nos mover. Eu vou dizer que está certo. Em seguida, vamos verificar nossa velocidade e, desta vez, vamos no eixo X porque estamos nos movendo para a esquerda e para a direita Agora, se você estiver em três D, trabalhará com o eixo X e o eixo Z, e isso obviamente terá mais dependência Mas para nós, eu vou apenas ir aqui. Só precisamos do ponto de velocidade X para este exemplo. E se formos para a direita, isso será positivo. E podemos ir em frente e definir isso para algo como dez, e eu copiarei isso para o outro lado ou para a esquerda, e se ficarmos à esquerda, isso significa que é menos igual Eu vou fazer isso de outra forma se. Então, se pressionarmos para cima, pulamos e, em seguida, temos uma segunda cadeia de ondas separada aqui. Se pressionarmos para a direita, vamos para um X positivo, caso contrário, se pressionarmos para a esquerda, vamos para menos X. Se dermos uma olhada, vamos lá Oh, lá vamos nós. Deslizando para frente e para trás. Então, se você não quiser ganhar essa velocidade, basta configurá-la para uma velocidade de X igual, e isso fará com que você vá tão Agora, como você pode ver, estamos indo um pouco devagar aqui. Então, vamos ver o que acontece se aumentarmos para 100. Tudo bem, então aí está. E ainda podemos pular esse tempo todo. Agora, temos um problema aqui, neste caso, veja se eu parar de pressionar para a esquerda ou para a direita, M E continuará indo nessa direção porque isso nunca é definido. E é por isso que a cadeia If tem que ser um bloco separado. Então, se pressionarmos para a direita, se pressionarmos para a esquerda, podemos terminar essa cadeia com um s de Velocidade X igual E isso é tudo que temos que fazer. E agora ele vai parar de se mover quando pararmos de pressionar nosso botão. E aí está o nosso salto. Aqui vamos nós. Tudo bem, então aí está. Veja como podemos trabalhar criando um salto, bem como aplicando a gravidade em seus jogos. E suponho que seja uma rápida demonstração de como você usaria a velocidade em vez da posição ou algo parecido Tudo bem. Então, para esta apresentação rápida, basta mostrar como usar a gravidade e criar um salto, porque é algo que você provavelmente precisará saber quando estiver criando alguns shows para si 82. Salvando e carregando arquivos: Tudo bem, vamos falar sobre como podemos salvar arquivos e os diferentes tipos de arquivos. Então, vamos começar com o arquivo de texto, arquivo texto clássico aqui. Então, vamos em frente e podemos criar nossa função de salvamento aqui. Eu tenho uma cena aleatória aqui. Aquele roteiro nele. Não é grande coisa. Realmente não importa, está salvo só para que eu possa executá-lo. E vou criar minha função, salvar texto. Tudo bem. Então, o que precisamos fazer? Bem, pense nisso logicamente. Precisamos abrir um arquivo em algum lugar. Precisamos ter as permissões de escrita, certo? Porque queremos escrever um arquivo, salvá-lo. E queremos poder modificar o conteúdo desse arquivo. Então, a linha Goto quatro com D descreve dois aqui, podemos realmente fazer a maior parte disso em uma Então, vou salvar var F para ser meu arquivo aqui. E podemos fazer isso forma limpa só porque só será usado aqui nesta única função Não é algo que será usado em todos os lugares. Então, ele só vai usar talvez uma ou duas linhas, certo? Então, vamos obter a classe de acesso ao arquivo, e isso é o que chamamos de aberto. Agora, mesmo que o arquivo não exista, ainda precisamos abri-lo nesse local. Como corda, vou passar Rs. Juntando o slosh, devemos colocá-lo em nosso lado da pasta do projeto aqui E vou dar um nome a ele e dizer que vou chamá-lo de ponto de teste de texto TXT Então, o segundo argumento será o modo que damos a ele. O que depende do que estamos fazendo. Agora, estamos salvando um pedaço de texto. Então, como eu disse, queremos gravar nesse arquivo. Então, vamos usar o ponto de acesso ao arquivo. E neste momento, temos um arquivo. Temos um arquivo que foi aberto ou meu diretório específico com permissões para escrever para esse arquivo. Tudo bem. Então, o que precisamos fazer a seguir? Bem, precisamos realmente armazenar uma informação. Bem, para fazer isso, precisamos ter uma informação para armazenar. Então, estou entregando o A MipSum downp com texto que usamos Então, vou criar minha variável aqui na parte superior e chamá-la de não texto. Não quero confundir. Vamos chamar isso de talvez uma história, certo? Talvez tenhamos um aplicativo de história ou aplicativo de redação, temos todo esse texto aqui que vamos armazenar. Agora, realmente não importa o que seja , mas vamos fazer isso, para que possamos acessar a F dot Store. E o que podemos fazer é dizer store string, store R, store line. Todas essas opções diferentes aqui. No momento, vou dizer linha da loja e vou contar história da loja. Todo o texto que está na história. Mas minha função pronta, vou seguir em frente e chamar essa função de salvar animais de estimação. E quando eu executo isso, veja, inicial, parece que nada aconteceu. Vamos fechar e dar uma olhada em nossos arquivos. Vemos testes de texto, TXT aqui, e há todo o conteúdo dentro deles OK. Então, como podemos realmente carregar essas informações? Vou prosseguir e deletar tudo que está lá. Então, podemos ver que a história é um D. Quando começamos isso? E vamos dar uma olhada em como carregaríamos um pedaço de texto ou carregaríamos informações desse arquivo de texto. Carregar texto. Agora, começando do mesmo jeito, temos que abrir nosso arquivo. Só que desta vez, queremos ter as permissões de leitura porque queremos ler o conteúdo que está nele. Então leia em vez de escrever. E se usássemos a string de armazenamento, agora podemos obter como texto o que podemos chamar em nosso arquivo. Agora, no nosso caso, podemos seguir em frente e atribuiríamos uma história igual a qualquer que seja esse texto nessa situação. Então, se carregarmos texto, podemos então colocar o preenchimento automático nele e imprimir a história. Se dermos uma olhada na saída. Podemos ver que nossa história foi impressa, mas nossa história começou vazia. Obviamente, ele foi carregado perfeitamente e retiramos todos os nossos dados dele. Então essa parte é fantástica. Tudo bem, então vou mostrar a vocês a loja VR, se você quiser escolher isso em vez da linha da loja Você precisa armazenar suas variáveis individualmente, uma por uma, assim. E se formos dar uma olhada no arquivo depois, veremos que não podemos realmente ver nada. Na verdade, não podemos ver as informações que estão aqui. E pode haver uma coisa boa ou ruim dependendo de você, eu suponho. Mas então, para carregar essas informações, temos que usar o Get Navar, e temos que fazer isso continuamente para quantas variáveis armazenamos lá, e elas voltarão na mesma ordem em que foram salvas Portanto, você precisaria se certificar de carregá-los exatamente na mesma ordem para salvá-los. Então, sempre que você salvar o arquivo, você também precisará acessar sua função de carregamento e editá-la todas as vezes. Então você poderia fazer isso dessa maneira, e há algumas pessoas que fazem isso pessoalmente. Eu não gosto disso. Se eu quiser armazenar vários trechos de código como esse, ou vários dados, devo dizer. Existem maneiras melhores, na minha opinião. E um deles seria apenas um arquivo JSON. E, claro, com isso, basta salvá-lo e carregá-lo. Não importa se adicionaremos dados a ele mais tarde no futuro ou não. Então, vamos dar uma olhada nisso. Vou seguir em frente e colocar tudo isso lá embaixo. E vamos criar uma função aqui, certo? Então, vamos dizer funk, salve Jason. E como salvaríamos o arquivo JCN? Bem, muito parecido com o que fizemos anteriormente. Precisamos ter um arquivo com permissões de escrita. Obviamente, não vai ser uma mensagem de texto. Vai ser um JSON. E tudo o que temos que fazer é armazenar a linha aqui também. Então, podemos dizer ou não a linha de lojas Var FDA. E a forma como armazenamos isso seria json dot springify e passaríamos no dicionário de informações Então, vou seguir em frente e criar esse dicionário com as mesmas três informações aqui. Tudo bem, então vamos em frente e começamos com isso. Temos esse salvamento configurado, certo? Armazene, filtre, stringifique e compre dados, o que, obviamente, é o nosso dicionário que temos aqui E chamamos nossa função de Salvar Jason, então vamos executar isso. OK. Isso deve ser longo o suficiente, feche-o e daremos uma olhada em nossos arquivos, e temos o JCNFle aqui Aí está. Então, essa é a aparência do nosso JSON five agora. E agora podemos analisar e atribuir informações individuais, para que possamos dizer que experiência é igual e, em seguida, extrair a experiência disso, por exemplo, ou podemos simplesmente pegar extrair a experiência disso, por exemplo, a coisa toda e dizer que meus dados são iguais aos nossos dados temporários depois de realmente os carregarmos Então você pode ver como isso funcionaria muito melhor, e há até, é claro, o bar da loja, certo? mesmo se armazenássemos VR, teríamos vários conjuntos de dicionários, certo? Portanto, temos várias JC Bile ou JSON Lies lá. Mas vamos dar uma olhada em como carregaríamos essas informações. Então, vou prosseguir e apagar tudo dos meus dados Por enquanto. Na verdade, não aceite isso. Eu só vou comentar isso para que não exista. Portanto, é a mesma coisa como se fosse um dicionário vazio neste momento. E vamos dar uma olhada em como carregar um arquivo JSN. Criamos uma função, carregamos Jason e, assim como tudo antes, precisamos ter um arquivo aberto com as permissões corretas Então, vamos ler em vez de escrever. Então, o que fazemos de diferente? Bem, para isso, na verdade precisaremos um objeto JSON porque não podemos chamar a função de que precisamos sem criar uma instância real dela Então, vou dizer que var J é igual a JSON. Novo. Tudo bem. E queremos analisá-lo ou verificar se há algum erro ao analisá-lo, então vamos dizer que erro de análise é igual a Serão J dot pars onde passaremos nosso texto Val, certo? Ponto F como texto. E agora podemos verificar. Então, vamos dizer que eu pars error. É igual a zero, certo? Então, o dobro é igual aqui. E se for zero, isso significa que não tivemos problemas quando se tratou de analisar nossas informações O que significa que é seguro usar esses dados. Dessa forma, podemos prosseguir e assinar meus dados. É igual a J porque, lembre-se, analisamos para que as informações sejam armazenadas dentro desse objeto JSON Dados do JG. E se viéssemos até aqui, poderíamos seguir em frente e até fazer tudo antes, certo? Então, imprimimos, por dados, vemos que está vazio. Vá em frente e carregue nosso arquivo JCN, imprima seus dados novamente depois. Veja aquela corrida. Veja, tínhamos um dicionário vazio e depois carregamos tudo. Então aí está. E não importa em que ordem essas coisas estejam, pois são pares de valores-chave. Pode ser uma ordem alfabética, pode ser uma ordem pode ser uma Desde que a chave e o valor ainda correspondam, não faria nenhuma diferença. Mas aí está. É assim que você faria algo para arquivos JSON E, pessoalmente, eu costumava odiá-los e evitá-los a todo custo. Eu estava sendo teimoso na época e preferia, na época, ter usado dez arquivos de texto aleatórios em vez de apenas um arquivo JSON Era um hábito muito ruim na época, mas agora eu uso arquivos JSON, e essa é a minha forma preferida de armazenar todas as minhas variáveis pessoalmente, pelo menos Então, se você tem várias variáveis que deseja armazenar, aí está. Você pode ir em frente e definir isso. E mesmo que você quisesse , mesmo que você apenas crie um dicionário temporário, apenas para armazenar tudo. Mas esses não são os únicos dados que podemos obter. Há mais dados. E, o mais importante, aquele que realmente será importante para desenvolvedores de software aqui, especialmente para desenvolvedores de jogos em que você deseja organizar coisas como suas opções de áudio e opções de exibição, usaremos o que é chamado de arquivo de configuração Agora, um arquivo de configuração tem uma aparência muito profissional. E se você modificou o sky room, toque no arquivo INI e saberá exatamente como será . Parecem. Esses arquivos de configuração ou arquivos de I&I são arquivos de configuração. E eles nos permitem manter todas as nossas informações ainda mais limpas e organizadas do que algo como um arquivo JSON, por exemplo Tudo bem, então eu vou empurrá-los para o lado, e vamos dizer funk, save config E, ao contrário dos JSNFles, isso será salvo de forma bem diferente E também precisaremos de um dicionário para isso. Só essa, vou chamar isso de minhas configurações. Então entramos e teríamos, digamos, as configurações de exibição aqui, certo? E isso seria definido como seu próprio dicionário. Vou excluí-los. Dentro dessa tela, não sei, talvez tenhamos um gráfico parecido. Bem, obviamente, será capturado que predefinimos. Talvez o usuário tenha média por padrão. E, novamente, talvez essa seja a opção índice dois, você sabe, o que quer que você vá armazenar o Alright, nós descemos Podemos fazer outra opção, diremos que há um lucian e eu vou continuar e encher completamente o sabonete para nós com alguns exemplos de informações Certo? Então, eu só tenho um exemplo de algumas configurações aqui de uma tela, um pouco de áudio e, claro , você pode continuar , adicionar quantas informações quiser, adicionar categorias, diríamos. Então, este é o dicionário que vamos usar ao salvar e carregar para configuração A primeira coisa que precisamos fazer em nossa função de salvamento é ter uma configuração, então vou criar um novo objeto de arquivo de configuração Arquivo de configuração. Novo. E agora usamos cerca de quatro loops. Vou dizer quatro seções em configurações, configurações de teclas, teclas de pontos. OK. Então, para todas as nossas seções, haverá exibição e áudio. Então, temos duas seções aqui. Então, para cada um deles, e depois para P na seção de configurações, vamos dizer tela interna e vamos dizer que, para cada uma dessas resoluções HDR predefinidas, faça o próximo bloco de código Então, dentro do áudio, vamos fazer esse mesmo bloco de código para a próxima coleção de chaves dentro dessa seção. E o que vamos fazer aqui é definir alguns valores. valor definido por pontos C e o valor definido exigem alguns argumentos. Vai pegar nossa seção, seguir nossa chave. E, em seguida, seção de configurações e tecla. Eu tenho um erro de digitação em algum lugar, não é? Sim, estou usando todas as letras minúsculas. Eles devem estar em maiúsculas. Aqui vamos nós. Tudo bem, então definimos alguns valores dentro desse arquivo de conflito. E observe que ainda não abrimos nosso arquivo nem nada. Então, fora desse loop duplo de quatro, agora chamamos C dot save e o local que queremos salvar. Então, no nosso caso, res, collash por isso. Então, quero observar aqui que o local de salvamento em todos os dispositivos será o local do usuário, e isso será diferente com base em cada plataforma, certo? Então, o Mac vai ser diferente do Windows, que é diferente do Linux, vai ser diferente do Android. Mas cada local terá uma localização de usuário e usuário. Então, estou usando o bred apenas para que possamos vê-lo facilmente no sistema de arquivos sem precisar fazer várias capturas e tentar descobrir isso E vou salvar isso como meu arquivo INI de ponto de configuração. Então, se eu salvar essa configuração agora e a executarmos, será tempo suficiente Nós damos uma olhada em nossos sistemas de arquivos, e você pode ver aqui, eu tenho um arquivo INI de configurações. Se eu abrir isso, você pode ver como tudo está bem organizado em categorias para tudo Assim, você pode ver como os arquivos de configuração podem parecer muito profissionais e organizacionais E ainda usando apenas um dicionário. Tecnicamente, estamos usando dicionários e outros dicionários para conseguir E as configurações seriam minha maior preferência, como afirmei lá, qualquer coisa relacionada às configurações ou preferências em um jogo ou aplicativo Tudo bem. Então, como economizaríamos e não salvaríamos. Como carregaríamos o CIFo? Bem, vamos dar uma olhada no carregamento de uma configuração. Carregar configuração. E, claro, precisaremos de um novo objeto de configuração para usar E vamos verificar se há erros como a primeira coisa que fazemos. Então, vamos salvar o erro c dot load e vamos procurar esse arquivo de configuração. Provavelmente vai ficar perto do fundo, pessoal. Eu só vou tocar no meu teclado. Tem T e minhas configurações, eu e eu. Tudo bem. Então, agora saberemos se temos algum erro ao carregar isso. Então, podemos dizer, se Opa. Erro, não é igual. OK. Então, se tivermos um erro ao carregar por qualquer motivo, podemos prosseguir e simplesmente imprimir outra coisa com falha no carregamento e, na verdade, temos um código de erro, esse também. Assim, podemos dizer código de erro e fazer nossas porcentagens. Podemos simplesmente começar com o erro. Agora, se eu mantivesse o controle e clicasse em OK, você pode ver que isso nos leva a esta seção aqui. Ok é zero. Mas se eu rolar para baixo, podemos ver todos os diferentes códigos de erro aqui. Não consigo escrever, não consigo abrir, já está em uso, sem permissão, caminho incorreto, não encontrado, corrompido, não é possível criar, tempo limite não é possível se conectar, método não encontrado, link não encontrado, erro de análise Portanto, você pode ver todos os nossos códigos de erro aqui. Então, se você receber um código de erro, tudo o que você precisa fazer é entrar aqui e pesquisá-lo e você poderá ver exatamente qual era o problema. Tudo bem, agora, supondo que não tivemos um erro, podemos seguir em frente e começar a executar nossos quatro loops, e eu vou copiar os mesmos dois Portanto, temos quatro seções nas teclas de configurações, quatro teclas e na seção de configurações. E dentro do loop desta vez, vamos em frente e vemos. Definimos nossa seção de configurações eu possa escrever isso corretamente Definimos isso igual às informações que obtemos do valor conf C dot t. E literalmente será a mesma coisa aqui, seção de configuração. Vai ser escrito de forma um pouco diferente. Nós apenas passamos a seção E. E então nosso último argumento, nós apenas o colocamos em nulo, que deve ser o padrão Mas coloque isso de qualquer maneira. E agora você percebe se subirmos. Observe como nosso mestre é caneta aqui, certo? Para áudio. E vamos saber se isso funciona. Então, eu vou melhorar isso. Vou entrar nas minhas configurações no INI e alterar Master 10-100, salvá-lo Agora vamos executar a configuração de carregamento. Vou ver um conjunto de dez impresso aqui para o Master. Vamos pegar a centena depois de carregarmos. Dê uma olhada no Audiosecon Master 100, para que saibamos que foi carregado com sucesso. Aí está. Veja como podemos salvar e carregar arquivos de configuração, arquivos JSON e arquivos de texto Agora, cabe a você determinar qual tipo de arquivo será melhor para sua situação. Mas há como você pode fazer todos os três. 83. Gatilhos e pedais: Tudo bem, então vamos falar sobre ter suporte para os gatilhos em um controlador, como, você sabe, gatilho esquerdo, gatilho direito, L dois, R dois, o que é? ZL ou ZL e Z Z, ZR. Eu realmente não dou uma olhada nos botões da Nintendo, mas acho que são esses. Agora, infelizmente, basta clicar no interruptor do controlador , então eles não são realmente gatilhos Eles não têm esse tempo de viagem, esse caminho de viagem. Ou estão pressionados ou não. Então, infelizmente, para mim, não posso usá-los para mostrar isso aqui. Então, o que vou usar é meu stick analógico para simular isso para Mas você pode usar isso para esses gatilhos. Você pode usar isso para um manípulo analógico, por exemplo, quando você avança, caminha e, quando pressiona até o fim, seu personagem está correndo, isso seria seu personagem está correndo, isso seria outra utilidade para o que vou mostrar aqui E outro uso, que eu acho legal, é que você pode usar esse conceito para apoiar volantes e pedais se quiser, se estiver criando um jogo de corrida, por exemplo Porque você tem aquele tempo de viagem que funcionará para girar o volante, até onde ele está girado para a esquerda e para a direita, o quanto o pedal do acelerador está pressionado, o quanto a embreagem está pressionada , o quanto o freio está pressionado quanto o freio Portanto, você pode usar isso para uma ampla variedade de controladores, como você pode ver E você pode pensar em muitos usos diferentes para isso. Um dos usos antigos é pressionar o botão de atirar em parte do caminho, eles miram, você pressiona até o fim e eles atiram. Então, o que eu fiz foi criar um botão de disparo nas configurações do meu projeto. E, como eu disse, vou usar meu stick analógico para simular isso porque meus gatilhos Eles não funcionam assim. Este é um controle Super Nintendo que foi modernizado, então eu não tenho o tipo certo de gatilho para mostrar Então, novamente, vou usar meu stick analógico para emular o que você pode esperar Então, aqui na função de processo, vou imprimi-la para nós. Só para que você possa ver, esse será o ponto de entrada. E vamos dizer: obtenha força de ação. Agora, você vê força e força brutas e pode se perguntar qual é a diferença. A força bruta ignorará a zona morta do seu controle. Obter força de ação levará em consideração a zona morta, certo? Então, eu vou usar a força, e vou usar o tiro para mostrar isso a vocês. Então, se prosseguirmos e executarmos isso, você pode ignorar isso. Nada disso importa. E podemos simplesmente olhar aqui embaixo na saída, e você verá que, quando eu começo a me mover, fico para a direita, que você pode imaginar novamente, está se movendo para bloquear ou para acionar Como você vê, estou na minha zona morta. E quando eu saio da zona morta, aí está. Então você pode ver até que ponto meu manípulo está sendo pressionado aqui até chegarmos até o fim, o que no meu caso é cerca de 0,98 E você pode usar isso como eu estava situando ou sugerindo suas diferentes situações Então agora eu posso ir em frente e mostrar isso. E, às vezes, usando meu manípulo analógico, vou usá-lo para caminhar e correr Então, diríamos que, se a entrada Dot obtiver machado e força, ela diz atirar, o que você pode imaginar apenas andando ou avançando ou qualquer outra coisa. Se a intensidade da ação for maior que, digamos, 0,9, vamos imprimir correndo ou fotografando e então podemos ter outra, se ou então, se alguma delas funcionar aqui. E teremos quase a mesma situação aqui se entrarmos, obtermos a força de ação e atirarmos. É maior que, e vamos dizer 0,01. Então, dessa forma, basicamente, estamos na zona morta e sabemos que estamos nos movendo. Tudo o que vamos fazer é imprimir, e vamos dizer: caminhar ou mirar, tudo bem Então, agora você verá aqui embaixo. À medida que avançamos, se tivermos nosso prigger pressionado parcialmente ou se nossa pilha analógica se mover apenas parcialmente, estamos andando ou mirando com nossa arma parcialmente ou se nossa pilha analógica se mover apenas parcialmente, estamos andando ou mirando com nossa arma. E quando formos até o fim e a mantivermos lá, estaremos correndo ou nossos gatilhos pressionados até o fim, vamos atirar Bam. Aí está. Então você pode ver como isso é útil. Então você pode transformar isso em série em termos de pedal de acelerador, certo Quão rápido ou qual será sua velocidade , certo? Então você terá, talvez, sua velocidade multiplicada pela sua força de ação, e isso mostrará o quão rápido você está indo e a mesma coisa com a parada, certo? Se você está pressionando o pedal do freio, você tem a rapidez com que vai reduzir a velocidade Você vai pegar isso e multiplicar pela força do pedal do freio E agora, quanto mais você pressiona , mais rápido você vai parar Tudo bem Então é assim que você pode usar algo como força de ação, que é algo que é meio que exclusivo dos controladores Você também pode usá-lo no PC. O problema é com coisas como teclados e geralmente um botão é pressionado ou um muco, então pode ser zero ou um, e é por isso que nos jogos para PC, geralmente temos um botão alternativo, certo Você tem um botão de caminhada ou uma alavanca de caminhada que você usaria, enquanto no controle, você apenas move o manípulo analógico parcialmente em vez de totalmente. 84. Vibração do controlador: Tudo bem Então, aqui, vou mostrar como você pode adicionar vibração ao seu jogo. E estamos falando sobre coisas como seus controladores. Agora, eu não tenho um controle que suporte vibração, então não consigo usar o controle no microfone ou na mesa ou qualquer coisa e deixar você ouvir. Então, vou ter que acreditar na minha palavra sobre isso. E se você não acredita, pode ler documentação, pesquisá-la, pesquisar e descobrirá que receberá a mesma resposta do que vou lhe dizer aqui. Então, sempre que você quiser criar vibração, agora, por exemplo, eu poderia colocar isso aqui, certo? Eu posso colocá-la aqui ou aqui em cima, você sabe, onde eu quiser que essa vibração ocorra. E normalmente você terá isso em um ataque forte ou quando o jogador for atingido, por exemplo, sempre que quiser que essa vibração ocorra. Então, para que isso aconteça, basta pegar nossa classe de entrada, então o ponto de entrada inicia a vibração Joy. E isso requer quatro argumentos. O primeiro é o dispositivo, e esse é o ID do dispositivo aqui. E para o primeiro jogador, seu primeiro controle, geralmente será o dispositivo zero. Tudo bem Em seguida, teremos a magnitude de nossos motores fracos. Agora, os motores fracos geralmente localizados na parte superior do controle e, obviamente, não são tão fortes quanto a parte inferior, porque só querem tremer, alguns chocalhando lá E a razão pela qual eles são mais fracos na parte superior é porque você tem uma empunhadura mais firme na parte inferior do controle do que na parte superior Eles só querem sacudir isso. Eles não querem dificultar o aperto dos botões ou fazer você errar. Então, podemos dizer 0,5 string. O terceiro argumento será o mesmo, mas nossos motores fortes. Os motores fortes estão localizados na parte inferior do controlador. Geralmente, você pode encontrar isso praticamente onde estão as palmas das mãos Então, vai ficar bem embrulhado lá dentro. E observe que essas magnitudes estão em uma escala de zero a um. Então, podemos dizer 0,5 aqui também. Então, neste ponto, todo o controlador está tremendo com metade de sua força, tanto na metade superior superior quanto na inferior E a última coisa aqui é a duração, e essa é a quantidade de tempo em segundos de quanto tempo ela vibrará. Se colocarmos cinco, ela vibrará por 5 Então, se você tem esse avião com uma animação ou um ataque e sabe quanto tempo vai demorar, você pode ir em frente e colocá-lo lá. E como eu tenho isso na função pronta, se eu jogasse isso e tivesse um controle que suportasse vibração, meu controle começaria a vibrar imediatamente por 5 segundos assim que meu jogo estivesse bem, é tão simples quanto adicionar vibração ao seu Você pega aquela linha de código e a coloca onde quiser que haja vibração.