Conjunto de 5 Blueprints para motor: Inventário de RPG para multijogadores (2023) | Pixel Helmet | Skillshare

Velocidade de reprodução


1.0x


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

Conjunto de 5 Blueprints para motor: Inventário de RPG para multijogadores (2023)

teacher avatar Pixel Helmet, Game Developer & Publisher

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.

      1.01 Introdução

      1:20

    • 2.

      1.02 Baixando o projeto

      2:13

    • 3.

      1.03 Motor Unreal 5 Visão geral

      14:59

    • 4.

      1.04 O que o projeto já contém

      3:33

    • 5.

      2.01 Introdução aos Blueprints de Widget

      5:03

    • 6.

      2.02 Projetando a IU principal

      10:55

    • 7.

      2.03 Projetando os botões da categoria de inventário

      7:06

    • 8.

      2.04 Projetando as fendas de inventário

      6:17

    • 9.

      2.05 Projetando o inventário

      8:38

    • 10.

      3.01 Exibindo a IU principal

      7:11

    • 11.

      3.02 O que é a replicação de eventos

      4:50

    • 12.

      3.03 Chave obrigatória para o inventário aberto

      3:52

    • 13.

      3.04 Introdução à Enumeração

      2:18

    • 14.

      3.05 Criar um evento aberto e próximo ao Widget

      12:38

    • 15.

      3.06 Introdução à comunicação Blueprint

      3:30

    • 16.

      3.07 Interfaces com Blueprint

      6:52

    • 17.

      3.08 Exibindo o inventário

      3:00

    • 18.

      4.01 Criar o Blueprint para item base

      5:09

    • 19.

      4.02 Introdução aos Blueprints infantis

      3:43

    • 20.

      4.03 Criar os itens

      5:20

    • 21.

      4.04 Introdução às estruturas

      3:16

    • 22.

      4.05 Estrutura

      3:52

    • 23.

      4.06 Introdução às tabelas de dados

      2:40

    • 24.

      4.07 Tabela de dados

      9:55

    • 25.

      4.08 Informação para o item Função da biblioteca

      7:14

    • 26.

      5.01 Criar o componente de inventário

      1:19

    • 27.

      5.02 Estrutura de fenda por inventário

      1:58

    • 28.

      5.03 Estrutura e tabela de dados para categorias de inventário

      5:58

    • 29.

      5.04 Criar as variáveis de inventário

      4:01

    • 30.

      5.05 Redimensionando as variáveis da categoria de inventário

      3:25

    • 31.

      5.06 Exibindo as categorias de inventário

      11:20

    • 32.

      5.07 Exibindo os Slots de inventário

      8:39

    • 33.

      5.08 Definir categoria de inventário selecionado

      14:22

    • 34.

      5.09 Readicionar itens existentes para array

      7:51

    • 35.

      5.10 Exibindo item no inventário

      7:51

    • 36.

      6.01 Interagindo com os itens

      5:36

    • 37.

      6.02 Adicionar inicial à lógica de inventário

      6:39

    • 38.

      6.03 Adicionando item ao inventário

      6:25

    • 39.

      6.04 Criar um novo item pilha

      37:16

    • 40.

      6.05 Encontrar uma pilha parcial

      17:48

    • 41.

      6.06 Otimização do inventário

      13:05

    • 42.

      7.01 Adicionando operação de arrasto e soltar

      5:37

    • 43.

      7.02 Item de abandono do inventário

      14:37

    • 44.

      7.03 Habilitar a física de armas

      3:37

    • 45.

      8.01 obtendo informações sobre slot

      4:10

    • 46.

      8.02 Atualizar informações sobre slot

      3:49

    • 47.

      8.03 Artigo de quedas no entalhe de inventário

      5:46

    • 48.

      8.04 Atualizando as fendas de inventário

      9:10

    • 49.

      8.05 Adicionando efeitos sonoros

      6:45

    • 50.

      8.06 Testando o produto final

      3:24

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

159

Estudantes

1

Projetos

Sobre este curso

Sobre este curso

Se você não tiver certeza de como criar um sistema de inventário multijogador para seu jogo, este curso é para você. Você aprenderá a fazer um sistema de inventário pronto para vários jogadores do zero sem escrever uma única linha de código usando Blueprints do Unreal Engine 5. Nenhuma experiência necessária! Você verá como é fácil criar um sistema de inventário semelhante ao em jogos populares.

Você aprenderá a projetar o inventário, bem como programar a sua funcionalidade, incluindo itens empilháveis, consumíveis, quantidade e muito mais. Você será capaz de criar categorias de inventário e classificar os itens adequadamente. Por último, mas não menos importante, você aprenderá a criar itens lootable que serão adicionados ao seu inventário, bem como deixá-los em outros jogadores.

Tudo o acima será ensinado usando melhores práticas de codificação por meio de acompanhamento aprofundado ao longo de vídeos. Também fornecerei a você o projeto concluído para que você possa inspecioná-lo como quiser enquanto segue o curso.

Junte-se à nossa comunidade de apoio

O desenvolvimento de jogos pode ser frustrante de vez em quando. Você pode perder uma caixa desmarcada em algum lugar, o que deixa você na floresta por horas. Ou você pode precisar de apoio moral e ideias de desenvolvedores aspirantes como você. Estamos aqui para você sempre que você precisa. Junte-se à nossa comunidade do Discord, site e mídia social listados na descrição do perfil.

Desejo a você o melhor,

Moustafa Nafei

Conheça seu professor

Teacher Profile Image

Pixel Helmet

Game Developer & Publisher

Professor

Pixel Helmet is a video game developer and publisher based in Denmark. We have recently released our first game Farmtale on the Steam platform.

We decided to get on Skillshare to create high-quality courses and share our knowledge with the game development community. Learning can be tedious at times and we aim to create a fun learning experience.

We offer to create courses within Modeling, Texturing, Unreal Engine, Blueprints, C++, Game Design, and much more. If you need any help during a course, please let us know through Skillshare or connect with us on Discord, Twitter, or LinkedIn.

Visualizar o perfil completo

Level: All Levels

Nota do curso

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

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

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

Transcrições

1. 1.01 Introdução: Neste curso, aprenderemos como desenvolver um sistema de inventário de RPG multijogador usando plantas no arquivo Unreal Engine Começaremos do zero e abordaremos design da interface e a programação do inventário. Este curso abordará como criar a interface do usuário para o inventário. Como criar categorias de inventário, como criar espaços de inventário, como saquear itens para o inventário, como exibir o item mencionado em seu inventário com ícone e texto. Como retirar itens do inventário para arrastar itens do inventário para fora e trocar de espaço de estoque, dois itens e como adicionar efeitos sonoros ao inventário. No final deste curso, você poderá criar com confiança seu próprio sistema de inventário de RPG multijogador para implementar em seus projetos de jogos atuais ou futuros. Eu desenvolvi este curso para qualquer pessoa interessada em criar um sistema de inventário para seu jogo e para o Unreal Engine Five, usando as melhores práticas de codificação e código otimizado. Espero que você se junte a mim neste curso. E lembre-se de que estou sempre aqui durante todo o curso para ajudá-lo. E espero ver você em breve. 2. 1.02 Baixando o projeto: Agora vamos fazer o download dos materiais do curso. Você pode encontrar os materiais de custo no site ou no e-mail ao comprar o curso. Portanto, verifique o site ou o e-mail. Vamos abrir os materiais do curso. E aqui dentro temos esse projeto chamado inventário de RPG. Agora, normalmente, se você já fez meus cursos anteriores, gosto de começar com um projeto em branco do Unreal Engine porque quero ensinar tudo do zero e deixá-lo confiante com o desenvolvimento de jogos. No entanto, como estamos fazendo um inventário, precisamos de um jogo que já esteja funcionando. Este é apenas um jogo muito, muito básico. Eu não fiz muita coisa. Vamos arrastar essa pasta de inventário de RPG para a área de trabalho porque precisamos extraí-la. Essa é uma pasta zip, então precisamos extrair o conteúdo. Isso vai levar algum tempo. Vou esperar que acabe aqui. Tudo bem, agora que está pronto, posso clicar duas vezes nele. E dentro desta pasta você pode ver que este é o projeto Unreal Engine com o qual trabalharemos. Agora vamos fechá-lo e vamos para Documentos. E em vez de documentos, temos algo chamado pasta de projetos irreais. E é aqui que estão todos os seus projetos anteriores do Unreal Engine. Se você nunca fez nenhum projeto antes, isso ficará vazio. Então, dentro de Documents, Unreal Engine ou Unreal Projects, vamos clicar e arrastar nossa pasta de inventário de RPG para dentro daqui. E quando você faz isso, ao abrir o lançador da Epic Games agora e entrar na biblioteca, aqui você pode ver que aparece o projeto de inventário de RPG que acabamos de extrair na pasta Unreal Projects. Agora estou usando o Unreal Engine 5.1, 0.1. Mas se você tiver 5.1, 0.2 ou três, ou 5.2, e assim por diante. Nas versões mais recentes, isso realmente não importa. Você também pode acompanhar. Vamos clicar duas vezes nesse projeto de inventário de RPG e abri-lo. Este é o projeto com o qual trabalharemos. E antes de começarmos a próxima lição, vamos dar uma olhada em uma rápida visão geral do Unreal Engine cinco. 3. 1.03 Unreal Engine 5 Visão geral: Antes de começarmos a desenvolver o inventário, vamos dar uma visão geral rápida do Unreal Engine cinco. Se você fez meus cursos anteriores e já conhece o Unreal Engine cinco, você pode simplesmente pular esta lição e pular para a próxima. Mas se você é novo aqui, vamos dar uma olhada rápida em como Unreal Engine cinco é construído. Aqui no meio está a coisa mais importante. Na minha opinião, essa é a janela de visualização. E na janela de visualização você pode ver a aparência do jogo. Então, dentro daqui, você pode segurar o botão direito do mouse e dar uma olhada no interior da janela de visualização e ver como ela fica. Portanto, este é o nível de nível simples criado para isso, para esta lição aqui, você também pode se mover segurando o botão direito do mouse e clicando em W para avançar, clicando em S para retroceder, clicando em D para mover para a direita e clicando em a para mover para a esquerda. Agora, novamente, lembre-se de segurar o botão direito do mouse enquanto clica em W, D, S e a para se movimentar. E é assim que eu navego principalmente pelo interior da janela de visualização. Eu apenas mantenho pressionado o botão direito do mouse e pressiono essas teclas aqui para me movimentar. Você também pode segurar o botão direito do mouse e clicar em e para subir ou clicar no taco para descer. Mas você também pode segurar o botão esquerdo do mouse. E quando você faz isso, você pode se mover assim. Normalmente não uso isso e talvez às vezes no meu laptop, mas geralmente não. Você também pode segurar o botão esquerdo do mouse e o botão direito do mouse ao mesmo tempo. E você também pode se movimentar assim. A última coisa é que você pode aumentar e diminuir o zoom usando a roda de rolagem do mouse. Então, ampliando e diminuindo o zoom. Você também pode novamente, basta segurar o botão direito do mouse, clicar em W para ir até esse item ou clicar em S para se afastar do item. Então, novamente, é principalmente assim que eu navego dentro da janela de visualização, mas você pode simplesmente dar uma olhada na lateral desses níveis. Pegue o jeito de se mover por aqui e veja o que é melhor para você. Em vez da janela de visualização, temos botões diferentes. Então, aqui em cima, não é muito importante para este curso. Por exemplo, temos a visão em perspectiva agora, estamos na visão em perspectiva. Você pode ver o jogo da vista superior. Então, se você diminuir o zoom, aumentar e diminuir usando o botão da roda do mouse, você pode ver que essa é a aparência do jogo de cima. Novamente, você pode simplesmente clicar aqui voltar ao modo de perspectiva. muito importante para este curso, mas é bom saber que temos esses botões para que possamos ver o jogo em diferentes modos de visualização, por exemplo, se eu não iluminasse esse mapa, estaria muito escuro. E é por isso que às vezes eu clico aqui e vou para o modo sem iluminação. Agora eu posso ver meu nível mesmo sem iluminação. E quando eu acendo meu jogo, clico aqui e volto para o modo ao vivo. Muito, muito importante. Temos ferramentas diferentes aqui em cima. Portanto, a primeira é a ferramenta de seleção. Ao clicar nele, você pode selecionar itens diferentes dentro da porta de visualização. Aqui ao lado, temos a Ferramenta Move clicando nela. Agora, ao clicar em um item, você pode ver esses pontos de articulação. O vermelho é o eixo x. E se você clicar nele, poderá mover esse item no eixo x. O verde é o eixo y e o azul é o eixo z. Esses são os pontos de articulação. Você pode mover os itens quando Ferramenta de Mover estiver selecionada. Você também pode movê-los em duas direções, segurando-os aqui perto do meio. E esta, e essa caixa aqui, movendo-a para o eixo de uma só vez, se eu clicar em Controle Z para desfazer meu movimento aqui, e só para poder voltar aqui, também temos a ferramenta de rotação clicando nela. Você pode girar um item em três graus diferentes, assim. Você também pode escalá-los clicando na ferramenta de escala. E você pode escalá-lo. Vou clicar em Control Z para colocá-lo aqui novamente, para que fique claro. Você pode escalá-lo nesses três eixos diferentes. Agora, se você quiser dimensioná-lo uniformemente, você pode clicar nessa caixa branca no meio. E quando você escala, isso será dimensionado uniformemente. Ok, clique em Control Z novamente. Agora é muito importante saber que temos atalhos para essas ferramentas porque levaria muito tempo se você tivesse que clicar aqui, mover este item, clicar aqui novamente para girá-lo e assim por diante. Então, se você clicar em Q no seu teclado, você tem a ferramenta Selecionar. Você clica em W, você tem a Ferramenta Move. Se você clicar em E, terá a ferramenta de rotação. E se você clicar em are, você tem a ferramenta de escala, por exemplo, para este registro aqui, eu posso clicar em W para movê-lo. Eu posso clicar em E para girá-lo. E talvez eu queira que seja assim, como aqui. E eu posso clicar em W para movê-lo para cima, como em R2, talvez aumentá-lo assim, movê-lo para cima e assim por diante. Então você pode ver que é muito mais rápido trabalhar dessa maneira, em vez de simplesmente clicar aqui o tempo todo trabalhando no Controle Z. Para colocar isso de volta, também temos ferramentas de encaixe. Então, aqui você pode ver quando eu movo meu item, se eu apenas mover esta caneta, por exemplo, você pode ver que ela se encaixa em uma grade. E isso é porque você tem isso ativado aqui. Então, se você clicar nele e movê-lo, poderá ver que ele se move suavemente. E se eu clicar nele novamente, você pode ver agora que está preso novamente. Você também pode clicar nesse número e aumentar o encaixe. Agora você pode ver que, quando eu o arrasto, ele se encaixa em uma grade muito maior e você pode diminuí-lo novamente, se desejar. Então, essas são as ferramentas de encaixe ou o movimento, ou a escala ou a rotação e também para o dimensionamento. Assim, você pode ver se eu vou até minha ferramenta de rotação clicando em E no teclado. Eu posso girá-lo e ele se rompe a cada dez graus. Eu posso clicar nele aqui para desativá-lo. E agora eu posso, posso girá-lo suavemente assim. E clicando em Control Z novamente. Então, essas são as ferramentas de encaixe para a ferramenta de movimentação, a ferramenta de rotação e a ferramenta de escala. última coisa que temos é a velocidade da câmera, e essa é a velocidade dessa câmera agora, dentro dessa janela de visualização, você pode clicar nela e diminuir a velocidade. E agora você pode ver que é muito lento. Isso geralmente é usado quando você deseja focar objetos muito pequenos dentro do nível para que a câmera não se mova muito rápido. Se você tem um nível grande deseja viajar, pode aumentar a velocidade da câmera. E agora você pode ver que eu me movo muito mais rápido no meu nível. Vou colocá-lo de volta na velocidade da câmera de quatro. Aqui em cima temos a barra de ferramentas. Não é realmente muito importante no momento. Mas o mais importante é que podemos clicar neste botão Jogar para jogar nosso jogo, ou clicando em jogar aqui, você pode ver que agora estou jogando meu jogo. Eu posso me movimentar com as teclas W, S, a e D. Assim, eu posso me mover e olhar ao redor com o mouse. Essa é a coisa mais importante que você precisa saber agora, aqui em cima. Clicando em Escape para parar de jogar e clicando nesses três botões, você pode escolher como deseja jogar. Então, geralmente, ele começa por essa janela de visualização selecionada. Então, se eu jogar meu jogo assim, eu jogava dentro da janela de visualização. O que eu gosto no modo multijogador. Gosto de jogar na nova janela do editor porque tenho duas janelas abertas para o modo multijogador, então gosto de ver as coisas assim. Vamos fechá-lo por enquanto. E o material multijogador está aqui embaixo. Então, vamos nos preocupar com isso mais tarde, nas aulas posteriores. Às vezes, seu motor pode parecer ruim e você pode tentar, dê uma olhada aqui nas configurações, você tem algo chamado configurações de escalabilidade dos motores. No momento, os meus estão prontos para serem épicos porque meu computador é rápido. Mas se você tiver um computador mais lento, poderá alterá-lo para qualidade baixa ou média e assim por diante. muito bom saber que É muito bom saber que está lá à direita, aqui temos o esboço e o esboço são simplesmente itens que você tem dentro de seus níveis. Então, todos esses itens que você vê aqui estão dentro desse nível atual. E se eu selecionar, por exemplo , este banquinho aqui, se eu clicar nele, você poderá ver que ele também seleciona selecioná-lo aqui no esboço. Então, o que quer que você selecione no nível, você pode vê-lo aqui no esboço. Você também pode selecionar coisas simplesmente clicando nelas aqui. Agora você pode ver que quando eu clico neles aqui, ele também os seleciona dentro do meu nível. Agora, isso é útil quando você deseja encontrar algo específico, por exemplo, você pode pesquisar aqui. Quero encontrar minhas fezes, por exemplo, e é essa aqui embaixo. Para esta ferramenta, eu a encontrei aqui, posso clicar nela. E esse é o único. Quando você tem um nível muito grande e não consegue encontrar itens, você pode procurá-los aqui. Digamos que você não soubesse onde estava. Como se você tivesse um nível muito grande que selecionou e não conseguisse realmente vê-lo. Você pode clicar em F no teclado e ele o levará até lá automaticamente. Além disso, esqueci de dizer que se você quiser dobrar ou duplicar este item, você pode segurar Alt no teclado e arrastar aqui. Então, segurando Alt no teclado, arrastando, isso copiará o item. Às vezes, é muito útil quando você quer projetar o nível. que você não precise arrastar esse item repetidamente, clicando nele clicando em Excluir para removê-los, vou clicar no X aqui para poder ver todos os itens novamente. Se você quiser organizar seus itens aqui no esboço, você sempre pode clicar no ícone dessa pasta. Isso criará pastas e você pode simplesmente clicar, arrastar e soltar esses itens dentro das pastas. E você pode organizar seu esboço. Vou arrastá-lo novamente e remover este aqui. Em seguida, temos o painel Detalhes. E os painéis de detalhes simplesmente mostram detalhes sobre o item selecionado na janela de exibição. Então, se eu selecionar essa caneta aqui, você pode ver, eu posso ver detalhes diferentes sobre essa caneta. Eu posso ver a localização dela e do mundo. Eu posso ver a rotação dela, a escala. Eu posso ver qual malha estática ele está usando. Uma sensação, por exemplo , clique neste ícone aqui. Você pode encontrá-lo dentro do navegador de conteúdo. E eu posso ver, é esse. Eu posso ver quais materiais ele está usando. Informações sobre a física, a colisão e assim por diante. E é diferente para cada item que você seleciona. Portanto, se eu selecionar este, posso ver detalhes diferentes sobre esse item, detalhes diferentes sobre esse item e assim por diante. Muito importante, o painel de detalhes é algo que você usa o tempo todo no motor. Se eu clicar nisso, ei, por exemplo, eu posso definir a localização para ele se eu clicar e arrastar aqui. Então, em vez de usar a ferramenta Move como essa, posso clicar e arrastar também posso clicar e arrastar nessas caixas, se desejar. Então, às vezes você só quer se mover assim, e às vezes você quer números específicos. Então você pode simplesmente clicar aqui e escrever, por exemplo , 1.400, a localização X. E você pode ver que passou por aqui. E também está certo, acho que é -1.400. Estará por aqui. Então, -1.400. Você pode ver que voltou para aqui. Agora, se você tem números específicos que deseja escrever, pode escrevê-los aqui em vez de tentar observá-los aqui. E, finalmente, temos o Content Browser. Então, geralmente isso não está disponível ou não é exibido quando você abre o Unreal Engine cinco pela primeira vez. Então, posso clicar com o botão direito do mouse e podemos fechar. E isso é o que geralmente parece quando você abre o Unreal Engine cinco, pela primeira vez, você desenha o conteúdo em vez do navegador de conteúdo. Ao clicar nela, você pode ver mesma guia que vimos antes, mas a linha de conteúdo desaparece toda vez que você clica dentro dessa janela de visualização. Então, clicando no conteúdo ROA, se eu quiser clicar em algo aqui, você pode ver que desaparece e eu acho isso um pouco chato porque estou acostumado com o Unreal Engine 4, onde ele está ativo o tempo todo. Então, o que você pode fazer é clicar no ROA desse conteúdo e clicar em inserir o layout. E isso vai ficar ativo o tempo todo. E muito, muito simples. O navegador de conteúdo contém apenas todos os arquivos que você tem para o jogo. Então, por exemplo, para os ativos, essas são, na verdade, as pastas que eu criei para criar esse nível. Então, por exemplo, aqui nos itens, vamos usar isso mais tarde para criar itens para o inventário. E você pode simplesmente clicar e arrastar isso para o nível. E você pode ver como eles se parecem. Cancelado, clique duas vezes neles e veja-os também dentro desse visualizador. Então, esses são todos os arquivos que você tem, essas são todas as animações. Vamos excluir todos aqueles que criam pastas aqui, podemos clicar com o botão direito do mouse e criar uma nova pasta. Você também pode alterar a cor de uma pasta clicando nela, clicando botão direito do mouse e indo para definir cor. Isso é muito legal para quando você quer organizar seus arquivos e quer vê-los rapidamente. Você pode simplesmente dar-lhes cores. Eu só vou deletar este por enquanto. Para adicionar itens dentro do navegador de conteúdo, você pode clicar com o botão direito do mouse aqui ou clicar no botão Adicionar. Eu normalmente clico, clique com o botão direito aqui e você pode adicionar plantas. Faremos muito isso para programar nosso inventário. Também usaremos a interface do usuário para criar a interface do usuário para o inventário. E você tem, por exemplo , animação, você pode criar um novo nível, ler uma nova pasta também. Aqui, você pode ver que podemos criar muitas coisas e isso parece avassalador. Mas você provavelmente não usará muitas dessas coisas para começar. Então você realmente não precisa saber tudo aqui dentro. Concentre-se no que é muito importante. Então, neste curso, estamos focados apenas em criar um inventário por enquanto. Ao criar o inventário, vamos usar muitas dessas coisas. Vamos usar muitos dos nós blueprints, azuis e Blueprint. E vamos usar a interface do usuário. Vamos usar os sons para efeitos sonoros e assim por diante. Então, neste curso, você aprenderá muitas dessas coisas aqui. Portanto, não se preocupe com isso por enquanto e dê uma olhada rápida por aqui. Neste mecanismo, você pode simplesmente se mover, clicar nas coisas, movê-las. Não é realmente muito importante se você destruir coisas dentro desse nível. E às vezes, quando diz que você tem uma iluminação que precisa ser reconstruída, você pode clicar nela, construir e construir todos os níveis, e isso criará automaticamente toda a iluminação para você. Agora, pode levar algum tempo se o computador estiver muito lento, mas você pode ver o progresso aqui embaixo. E quando terminar de construir a iluminação, você pode ir em frente e fechá-la. E vamos clicar em Arquivo e Salvar tudo. E vamos passar para a próxima lição. 4. 1.04 Qual o projeto já contém: Antes de começarmos, vamos dar uma olhada no que esse projeto já contém. Agora eu criei esse jogo rápido para você e ele realmente não contém muito, mas precisávamos de algo para começar a programar o inventário. Então, aqui na pasta de ativos, eu tenho alguns itens. Usaremos esses itens para criar itens que podemos perder nosso estoque e colocá-los dentro de nosso inventário. Agora vamos excluí-lo por enquanto. Eu vou te ensinar como fazer itens e olhá-los também. E o jogador, temos as diferentes animações e você pode ver se clica em jogar para o jogo, e já temos um conjunto de planos de animação. E para o terreno, eu só tenho as texturas para esse terreno. Também incluí efeitos sonoros para você que podemos usar quando aludimos itens, abrimos o inventário e assim por diante. E nas plantas, muito básico. Eu criei um modo de jogo. O modo está vazio e, geralmente, essa visualização aparece se você não tiver nada dentro da classe blueprint. Então você precisa clicar aqui para abrir o editor de plantas completo. E isso é o que parece. Vazio, eu realmente não toquei em nada. Eu só, mas o controle do jogador e a classe de peão padrão e a abertura do controle do jogador também estão vazios. Temos o jogador, o jogador aqui em vez do jogador. Muito básico. Acabei de adicionar o novo sistema de movimentos para este jogador. Então, basta se mover para frente e para trás e olhar ao redor com o mouse. Então, não há realmente nada de louco acontecendo aqui. Em seguida, temos o plano animação da animação para o jogador. E, novamente, temos aqui o movimento de caminhar para frente, para trás, para a esquerda e para a direita. E nós temos os mapas. Este é o mapa em que estamos atualmente. Temos alguns itens do Marketplace. Eu uso esse fantástico pacote de vila. Você pode encontrá-lo no mercado gratuitamente. E isso é usado apenas para projetar esse nível. Temos o céu de mercadorias, que é esse cara aqui em cima. Acabei de adicionar neblina para que não possamos realmente vê-la apenas para tornar esse nível um pouco mais interessante. E então temos esses personagens. Você também pode encontrá-los no mercado. Coisas muito, muito legais. Às vezes também os uso para criar protótipos de alguns dos meus outros jogos. Então, se eu estou fazendo um jogo de tiro e assim por diante, então vamos deletar este por enquanto. Então isso é o que eu tenho aqui dentro. E a última é a interface do usuário. Vamos usar isso para projetar nosso inventário. Temos alguns botões aqui. A propósito, se você tem uma visão muito grande como essa, eu tenho um garfo, um menor, então ele aparece muito grande assim. Você pode clicar em Configurações e tamanho da miniatura. Eu posso torná-lo pequeno, por exemplo, e ficará assim. Eu só vou usar a mídia para que você possa vê-la melhor neste curso. Eu também incluí uma fonte aqui, então você pode usá-la para a interface do usuário. Tenho alguns ícones que podemos usar quando eluímos a banana, por exemplo, podemos adicionar esse ícone ao inventário. E então temos as imagens, que são basicamente o espaço do inventário. Então, esses são todos os itens. Jogo muito básico, podemos simplesmente andar por aí, essa é a única coisa que podemos fazer agora. E olhe ao redor. E você pode imaginar se você comprou esse jogo de um amigo ou de alguém que você encontrou no Reddit ou em outro lugar. E ele só pede que você coloque um inventário em seu jogo. Então é isso que vamos fazer. 5. 2.01 Introdução aos Blueprints de widgets: Antes de começarmos a criar a interface do usuário, vamos dar uma olhada no que é um Widget Blueprint. Então, vamos até a pasta UI. Vamos clicar com o botão direito aqui. E vamos para a interface do usuário. Esses são todos os itens da interface do usuário. Aqui podemos selecionar o Widget Blueprint. Vamos criar um aqui. Selecione os widgets do usuário e vá em frente e chame-os, eu costumo chamá-los de wb ou você usaria um modelo como prefixo? E então vamos chamar isso de principal. Portanto, a interface principal, esta será exibida como nossa interface principal. Mais tarde. Vamos clicar duas vezes nele. E aqui você vê que essa é a aparência de um Widget Blueprint. Então, Widget Blueprint, você pode criar a interface do usuário aqui. Você tem um designer e depois um gráfico. Então, no designer, você projeta a interface do usuário. E no gráfico, você programa a funcionalidade da interface de usuário que você projetou. Dentro daqui, você pode ver que tem uma pastilha e, em vez da paleta, pode adicionar coisas diferentes à sua planta, por exemplo, você pode adicionar um botão. Você pode clicar e arrastá-lo até aqui. Agora você pode ver que o botão é enorme, e isso é porque vou clicar em Conjuntos de controle. E isso ocorre porque geralmente adicionamos uma tela para começar. Então, se você pesquisar por Canvas e este nós realmente adicionarmos, antes de adicionarmos qualquer coisa ao Canvas, você pode arrastá-lo para dentro daqui ou clicar, arrastá-lo e soltá-lo aqui. Então, se eu simplesmente excluir este aqui, posso clicar e arrastá-lo para aqui. Então você pode arrastá-los aqui, aqui. Então, vamos voltar e pegar o botão, por exemplo você pode adicioná-lo à tela, ou você pode adicionar o botão novamente assim, onde você o arrasta para baixo na hierarquia, algo assim. E você pode ver que foi adicionado aqui. E você sempre pode clicar nele e arrastá-lo pela tela. Você também pode alterar a posição como antes de termos um painel de detalhes. Lembre-se de que eu disse antes, se você clicar em itens em sua janela de visualização, terá um painel de detalhes. Você também tem isso dentro do Widget Blueprint. Então você tem detalhes sobre esse botão. Você pode ver a posição. Você também pode mudar a posição aqui. Ou você pode arrastá-lo. Se você quiser arrastá-lo, talvez queira colocar algo, um número específico, por exemplo, podemos escrever 1800 e talvez seja disso que gostamos. Você também pode clicar nele e redimensioná-lo. De novo. Você também pode redimensioná-lo aqui, se desejar. Todos os detalhes do botão. Novamente, se você adicionar outros itens, verá que eles têm detalhes diferentes. Então, por exemplo, se eu pegar o texto aqui, você pode ver no texto que eu posso editar a cor do texto. Eu posso editar a fonte. Então, qual fonte eu vou usar? Eu incluí uma fonte para você. Lembre-se de que, na pasta UI, fontes, incluí essa fonte para você. Portanto, você também pode selecioná-lo aqui na família de fontes. Aqui embaixo temos animação de interface de usuário. Talvez entremos nisso. Não tenho certeza, mas não é muito importante agora. Então, vou clicar com o botão direito do mouse aqui e clicar em Fechar porque realmente não precisamos disso. E a última coisa importante aqui é que você pode clicar em compilar. Diz que o sujo precisa ser recompilado. E o que isso faz é apenas verificar se você tem algum erro no seu código. E, no momento, não temos realmente nenhum código, então tudo ficará limpo aqui. Mas se o fizéssemos, isso lhe daria um aviso e lhe diria que algo está errado. Então você pode tentar brincar aqui e tentar tirar uma imagem, por exemplo, coloque-a aqui, você pode redimensioná-la. Você pode ver quais detalhes você tem de uma imagem, por exemplo, o pincel. Você pode ouvir na imagem, você pode mudar a imagem, por exemplo, este hambúrguer aqui. E agora você pode ver que pode alterar o tamanho dele. E você também pode alterar o tamanho aqui Clicar nessas pequenas setas significa apenas que você queria redefinir para o valor padrão. Então, clicando nele. E o valor padrão é 15150. E você pode ver que quando eu mudo o tamanho aqui, ele realmente não é afetado. E isso é porque você está, na verdade, redimensionando toda a imagem dessa forma. Você precisa clicar em Dimensionar o conteúdo se quiser que ele entre em vigor aqui. Então, analisando nossa redefinição para o valor padrão, esse é o tamanho do valor padrão para este hambúrguer. Sim, e foi isso. Isso é muito, muito simples. Então, o designer projetará a interface do usuário na próxima lição. E no gráfico, codificamos a funcionalidade da interface do usuário. Mas, por enquanto, vamos nos concentrar em projetar a interface do usuário. Então, antes de terminarmos esta lição, vou excluir todas essas coisas, incluindo o Canvas. Vamos compilar, vamos salvar, salvar tudo aqui e fechá-lo. E vamos passar para a próxima lição. 6. 2.02 Projetando a interface principal: Tudo bem, agora estamos prontos para criar a interface principal, caso você ainda não tenha seguido a lição anterior. Vá em frente. Na pasta UI, você pode clicar com o botão direito do mouse na interface do usuário e criar um Widget Blueprint. E este é o Widget Blueprint para a interface de usuário principal que já criamos. Vamos clicar duas vezes nele. E antes de começarmos, quero mostrar o que vamos fazer. Por isso, é sempre bom ver o que vamos fazer antes de você fazer isso. Então, podemos visualizá-lo. Aqui no menu I. Só teremos esse botão. Este é o botão de inventário que pode ser clicado e você abre o inventário. Então, muito, muito simples. Isso é o que estamos tentando fazer. Então, vamos voltar à nossa visão aqui. E como eu disse antes, temos que adicionar um Canvas antes de adicionar qualquer coisa. Então, aqui em cima, se você pesquisar o painel de tela, você pode arrastá-lo para a hierarquia aqui embaixo. E agora adicionamos o painel de tela para o botão, para o botão de inventário. Obviamente, precisamos do botão UI aqui para que possamos arrastá-lo para aqui. Mas, como você viu antes, precisamos de um ícone na parte superior do botão. E é por isso que usamos algo chamado sobreposição. Se você pesquisar por Overlay, você também pode encontrá-los aqui embaixo. Assim, você pode clicar nessas setas para encontrar itens que podem ser adicionados ao seu Canvas. Então, este é o que queremos adicionar agora chamado de sobreposição, ou você pode procurá-lo aqui. Então, se você não sabe todas essas coisas, pode ser difícil de entender, mas faça isso apenas uma, duas ou três vezes. E é muito fácil porque você faz isso o tempo todo. Então, como precisamos de um botão e um ícone em cima dele, precisamos de algo chamado sobreposição. Então, deixe-me excluir esse botão novamente. E eu vou arrastar essa sobreposição para a tela. E geralmente eles são adicionados aqui. E para este agora, vamos adicionar um botão. E depois adicionamos uma imagem. Este é o ícone que estará no topo do botão. Agora, deixe-me arrastá-lo até aqui para que possamos ver como é. Então, agora, vamos clicar no botão e projetá-lo. Se você quiser. Você pode desativar a imagem por enquanto. Então você pode clicar nesse olho aqui. Isso apenas destaca a imagem por enquanto. Vamos clicar no botão e no estilo aqui, vamos mudar sua aparência. No final, incluí para você os botões na pasta de botões da interface do usuário. Eu incluí botões para você que podemos usar. No normal. Vamos mudar a imagem para esse único botão, raiz quadrada azul. Para o tamanho, podemos clicar nessa seta para redimensioná-la para o normal. Agora você pode ver que estou ampliado mais sete. Portanto, é muito importante saber isso. Estou ampliado mais sete, então não é isso que vai parecer quando eu jogar o jogo. Vai ficar assim. Então, se eu diminuir o zoom, é assim que vai ficar. Então, um para um aqui. Agora, geralmente quando você faz um botão, a cor é cinza por algum motivo. Eu não sei por quê. Então, clicando nessa tonalidade aqui, vamos mudá-la para branco. Então, a cor verdadeira está aparecendo aqui. E em vez de fazer uma caixa redonda em torno de dólares, dê uma vantagem estranha ao redor do botão e eu não quero isso. Eu quero ir aqui, clicar em dólares em vez disso. E você pode ver que, ao redimensionar a imagem, ela parece muito estranha. Mas se você usar uma caixa e definir a margem para 0,5, poderá redimensioná-la sem perder os detalhes desse botão. Então você pode ver que eu posso redimensioná-lo. E parece bom. Se você não usou a margem de 0,5 , ficará assim. Então, dê uma margem de 0,5 e tudo ficará bem. Ok, então clicando aqui, vamos até o Hubbard e vamos selecionar o botão, quadrado azul pairado. E para este, na verdade, o que você pode fazer é algo muito rápido. Eu uso isso quando desenvolvo meu jogo. Eu posso mudar e clicar com o botão direito aqui em cima, ou você pode simplesmente clicar com o botão direito do mouse e clicar em Copiar. Normalmente, apenas pressiono Shift e o botão direito do mouse. Então, desloque o botão direito do mouse para copiar isso. E você pode mover o botão esquerdo do mouse para colá-lo em cima daqui. E ainda por cima, você pode ver que é muito rápido. Então você tem todas as informações. E então lembre-se de trocar esses dois. Aqui. Restam 12. Novamente, lembre-se de alterar o tamanho aqui. Acho que, para este, vou usar algo como 90. Este é o padrão, então o padrão é 68 e esse 190. Vou clicar com o botão direito novamente. Vou segurar a tecla Shift e clicar com o botão direito aqui novamente para copiá-la e segurar tecla Shift e clicar com o botão esquerdo para colá-la sobre esses tamanhos de imagem. Agora, você pode se perguntar por que não dimensioná-la aqui no x. E isso ocorre porque ela será dimensionada automaticamente em pouco tempo quando adicionarmos a imagem. Por enquanto, vamos apenas compilar e deixar esse botão. Vamos até a imagem. Então, clicando na imagem, clicando nesse ícone para ver a imagem. E para a imagem, precisamos encontrar o ícone da mochila. Então é isso aqui, ou você pode procurá-lo aqui, selecionando o ícone da mochila. E quando projetei a interface, vi que 100 por 100 era um ótimo tamanho para isso. Vou mudar esse para 100 por 100 e o tamanho da imagem. Você pode ver se eu clicar nesse botão padrão, o padrão é 150. Vou reduzi-lo para 100 por 100. E em vez de fazer essa sobreposição dessa forma, em vez de redimensioná-la dessa forma, vou clicar em Dimensionar para conteúdo. Portanto, essa sobreposição agora está dimensionada para qualquer conteúdo que esteja dentro dela. Então, esse botão aqui, em vez de tê-lo aqui neste canto, vou alinhá-lo horizontalmente. Então, vai preencher toda a sobreposição. Esse botão agora está preenchendo toda a sobreposição. Isso é o que isso significa. E eu vou alinhá-lo aqui, verticalmente, na parte inferior. Então, está na parte inferior da imagem. Vou apenas alinhá-lo ao centro do botão. Clicando na imagem, clicando no alinhamento central para a vertical e a horizontal. Então, está bem no meio dessa sobreposição. Agora precisamos empurrar essa imagem para cima. Você pode usar a tradução aqui embaixo na transformação, ou eu vou usar o preenchimento aqui em cima. Então, para o preenchimento na parte inferior, isso significa que você está empurrando a imagem de baixo para cima. Então, vou empurrá-lo em 15 pixels. E você pode ver que eu coloco a imagem aqui e ela está ótima agora. Vou empurrá-lo pela 12ª para a esquerda e pela 12ª para a direita. Então, damos mais espaço aqui para esse botão, então ele está muito melhor agora. Agora, a última coisa que precisamos fazer, então, em vez de ter esse botão aqui no meio, o que podemos fazer é colocá-lo aqui embaixo. Então, o que você pode fazer aqui é ver se você definir a posição como 00 aqui, você vê que ela se encaixa neste canto aqui em cima, mas eu quero que ela esteja aqui embaixo na minha tela. Não quero que meus botões apareçam aqui. Quero que meu botão esteja aqui embaixo. O que você pode fazer aqui é alterar o ponto de ancoragem. Então, clicando em sua sobreposição, você tem algo chamado âncoras. Clicando aqui. E você pode mudar o ponto de ancoragem para aqui embaixo. O ponto de ancoragem significa que, digamos que você tenha arrastado esse botão até aqui dessa forma, e ele parece bom. E você não está mudando o ponto de ancoragem. Então, o que isso significa é quando a janela do jogo fica menor. Então, vamos pegar isso aqui. E digamos que o botão esteja aqui. Se a janela do jogo ficar menor assim, se alguém redimensionar seu jogo, o botão voará para cima até este canto. Então, se sua tela for muito pequena assim, o botão está realmente aqui em cima e não aqui embaixo. Portanto, não parece correto. E isso é o que significa ancoragem. Você está apenas dizendo ao jogo onde seu botão está inicialmente. Vou ancorá-lo aqui em vez de colocar uma posição em 00. Você pode ver que agora está fora da tela. E para entrar na tela, você precisa usar isso chamado alinhamento. E você pode ver que é zero ou um. Você pode ver se eu escrever um aqui, 0,5, é no meio. Esse é o x, esse é o y. E 0,2 e assim por diante. Então você pode ver se eu escrevo um, eu coloco aqui. E, novamente, o alinhamento para o y, você também precisa colocá-lo em um para empurrá-lo dentro desta janela para que você possa brincar com o alinhamento. Normalmente usamos 00.5 para colocá-lo no meio ou em um. Nós o colocamos aqui assim. Ok, então, em vez de colocá-lo diretamente aqui na tela, quero dar a ele um pouco mais de espaço para sites. Então, vou clicar na posição de sobreposição para o x -35 e posicionado para o y -35. Agora, temos um pouco mais de espaço aqui ao lado, então são porcas que se fixam diretamente aqui na tela. Tudo bem, vamos compilar. E a última coisa que você pode fazer, uma prática muito boa. Você pode ver se você for até o gráfico, você pode ver que se chama botão e imagem. Essas são as variáveis que foram criadas porque você projetou essa interface de usuário aqui. E você pode ver que esses são os nomes deles. Eles também estão aparecendo como variáveis em seu código. No entanto, é uma prática muito ruim deixá-los assim porque se você tiver vários botões como esse, por exemplo, não sei realmente qual é qual. Por exemplo, se você tem um botão para inventário, um botão para suas habilidades, estatísticas e qualquer outra coisa, você realmente não sabe o que é se eles são chamados assim. Então, deixe-me deletar tudo isso. E, a propósito, se você quiser saber como eu dupliquei, basta clicar com o botão direito do mouse e clicar em Duplicar ou clicar em Controle D. Ok, então vamos mudar o nome aqui. Você pode clicar em F2 no seu teclado clicando nesta aparência F2. E eu vou chamá-lo de btn para botão. E vamos chamá-lo de inventário. mesmo vale para a imagem, o inventário de imagens e a sobreposição. Ove para Overlay, e chame isso de inventário. Ok, agora terminamos com a interface principal. Vou ir um pouco mais rápido nos outros projetos de widgets. Mas agora você sabe o básico e como criar algo muito simples. Vamos salvar tudo, encerrar isso e passar para a próxima lição. 7. 2.03 Projetando os botões de categoria de inventário: Agora vamos criar o botão da categoria de inventário aqui na pasta UI. Novamente, vamos clicar com o botão direito do mouse na interface do usuário. Crie um novo Widget Blueprint. Use ou selecione o widget do usuário. E vamos chamar isso de uma categoria de inventário, assim. Agora vamos entrar nisso aqui. E assim como antes, lembre-se de que precisamos adicionar um Canvas antes de fazer qualquer coisa dentro daqui. Então, vamos arrastar esse painel de tela e editar. E agora podemos começar a criar a categoria. Então, para a categoria, novamente, quero mostrar o que vamos fazer. Nós vamos fazer isso. Vamos criar esse botão aqui. Esse ícone será alterado dependendo da categoria que temos, mas é assim que parece. Muito, muito simples. Novamente, vamos voltar aqui. Vamos adicionar uma sobreposição. Assim como antes, precisamos de um botão com um ícone em cima. E eu vou apenas adicionar uma sobreposição dentro desta. E eu vou te mostrar o porquê daqui a pouco. É um pouco confuso agora. Então, vamos procurar o botão novamente e adicioná-lo a essa sobreposição aqui. E vamos pesquisar a imagem e adicioná-la à sobreposição. Assim como antes. A coisa extra é que temos essa sobreposição aqui e eu vou te mostrar o porquê. Portanto, para os botões de categoria, não precisamos realmente da tela inteira, assim como fizemos com a interface principal. Então, lembre-se de que, para o menu, eu estava usando todo esse Canvas e estamos adicionando esse botão aqui embaixo, quem está jogando o menu ou a interface principal. Então você pode imaginar que, se estivesse jogando, o botão está aqui embaixo, mas em qual categoria realmente não precisamos de todo o Canvas. Então, podemos clicar na tela aqui, ou simplesmente ir até aqui e na tela de preenchimento e selecionar essa chamada desejada. Nós realmente não precisamos de todo o espaço. Só precisamos do que projetamos aqui embaixo. Então, clicando no botão novamente, vamos alterar essas configurações. Mas você pode ir para a interface principal se quiser clicar nesse botão. E, novamente, segure Shift e clique com o botão direito para copiar. E segure Shift e clique com o botão esquerdo para colar. Então, vou colar essas informações. E para esse tamanho aqui, vou fazer um para um. Veja por um e vinte, esse é o tamanho que eu quero. E você pode ver que não está realmente mudando no y aqui. seja, lembre-se de antes de eu dizer que você pode clicar nessa sobreposição e clicar em Dimensionar o conteúdo, forma a dimensionar de acordo com o tamanho do conteúdo. E para este eu vou fazer com que seja 12120. Basta prestar atenção novamente ao zoom aqui. Isso é o que parece, um por um. É assim que vamos parecer, não assim. Ok, então vamos copiar o tamanho da imagem colada aqui embaixo. E clicando nessa imagem, quero alinhá-la no centro desse botão. Então, clicando nesses alinhamentos central, horizontal e vertical. E para a imagem, vou usar a mochila novamente. Realmente não importa o que você está usando aqui, porque você mudará essa imagem dependendo da categoria que você tem. Mais tarde, por exemplo, criaremos uma categoria para categoria de consumíveis de qualidade alimentar e criaremos uma categoria ou armas. Então, dependendo da categoria, vamos mudar essa imagem para que não importe realmente o que você selecionou aqui. Eu só vou fazer o tamanho da imagem 85, 80. Assim como antes. Lembre-se de que pressionamos o ícone aqui no menu. Então, vamos fazer a mesma coisa com o fundo. Eu só vou escrever seis aqui. Você pode simplesmente testá-lo. Você pode escrever 1018. Veja o que funciona para você, mas seis funcionaram para mim e para a esquerda e para a direita, vou escrever novamente 12 por 12, assim. Então, caso o botão fique muito pequeno, ainda tenho algum espaço aqui. Então eu acho que foi isso. Então, vamos entender que temos tudo e tudo parece bem. Vamos compilar e salvar tudo. A última coisa que você precisa mudar é antes que a esqueçamos, está aqui na visibilidade, na visibilidade. O que é isso. Agora, quando você joga e quer clicar nesse botão atrás dessa imagem, essa imagem bloqueará seu botão e você não conseguirá pressioná-la. Isso ocorre porque a visibilidade está definida como Visível para essa imagem. Então, o que você precisa mudar para é que nenhum sucesso seja testável. O que diz aqui na descrição da dica de ferramenta é visível, mas não testável, o que significa que não pode interagir com o cursor. E isso é o que queremos, é apenas uma imagem para mostrar que esse é o botão para a categoria, ou neste caso para o inventário aqui no menu I. Então temos que fazer a mesma coisa aqui. Então, clicando na interface principal, alterando a divisibilidade para festival sem sucesso. Agora podemos clicar nessa imagem e apertar o botão mesmo que essa imagem esteja na frente dela. Então, vamos compilar. Lembre-se de salvar tudo. Assim como antes. Vamos mudar os nomes aqui, botão, categoria e categoria de imagem e sobrepor aqui, categoria. Ok, então a razão pela qual eu adicionei essa sobreposição aqui, primeiro, vamos mudar o ponto de ancoragem para o meio. Então, vou mudar o ponto de ancoragem para o meio. E lembre-se de que, se você escrever zeros, zero para a posição, você pode ver que ela se ancora assim. Se você se lembrar da lição anterior, precisará alterar o alinhamento. Então eu te disse antes de usarmos 00,5 ou 1,0. 0,5 é o correto se quisermos que fique no meio. Então, 0,50, 0,5, e você pode ver minha posição 00. Agora, o botão aqui está no meio dessa sobreposição. motivo pelo qual criei dois deles é porque agora, aqui na segunda sobreposição, posso usar esse preenchimento se você não precisar sobrepor. Imagine que, se você só tiver esse, provavelmente não tem acolchoamento. Se isso não for como uma criança. Você pode ver que essa sobreposição é filha dessa sobreposição. E para crianças, podemos usar esse acolchoamento aqui. E estamos fazendo esse estofamento. Vamos escrever cinco por enquanto, eu vou escrever cinco. E isso só dá cinco na esquerda, na parte superior, direita e inferior. Então, a razão pela qual eu faço isso é mais tarde, quando criamos as categorias dinamicamente, há algum espaçamento entre as categorias. Por exemplo, imagine se você tivesse cinco categorias aqui embaixo. Há algum espaçamento aqui entre os botões. Se você não tivesse o espaçamento, eles ficariam um em cima do outro. Se você quiser remover essas linhas tracejadas, a propósito, um truque rápido , basta clicar aqui e ver como fica sem todas essas linhas. Ok, vamos guardar tudo o que era para aqui. Vamos fechá-lo, salvar tudo e passar para a próxima lição. 8. 2.04 Projetando as fendas de inventário: Vamos agora projetar os slots de inventário. Então, vamos clicar na interface do usuário. Vamos clicar com o botão direito do mouse aqui na interface do usuário e criar um esquema de widget, como o widget do usuário. Então, o mesmo que temos feito até agora. Bem, este, slots de inventário. Portanto, esses são os slots em que os itens serão exibidos ao clicar nesse slot de inventário. Assim como antes, você precisa ter um Canvas antes de podermos fazer qualquer coisa. Então, adicionando uma tela subindo aqui e a tela de preenchimento, selecionando o desejado, exatamente como fizemos para a categoria. Então, aqui dentro, agora podemos adicionar uma sobreposição, e eu vou adicionar outra sobreposição dentro dela para que possamos colocar um pouco de preenchimento como o que fizemos para a categoria. E eu vou adicionar um botão, na verdade apenas uma imagem. Nós realmente não precisamos de um botão aqui. Vou adicionar uma imagem dentro dessa sobreposição. E essa imagem vai ser o lodo. Então, se formos até aqui, temos esse chamado slots de inventário, ou esse slot de inventário. Vou ouvir no sorteio selecionar dólares e escrever a margem para 0,5, só para que possamos aumentá-la e não parecer estranho. Então, se você tiver a imagem como padrão, verá que perderá qualidade. Estamos mudando para a escrita de Bach com 0,5 na margem, podemos redimensioná-la sem perder a qualidade. Vou clicar nessa sobreposição aqui e novamente, selecionar o tamanho do conteúdo. E para esta imagem aqui, para o compartimento de inventário, vou fazer com que ela seja de 90 por 90 no tamanho. Então, parece assim. E para o alinhamento em vez de alinhamento, isso realmente não importa neste caso, mas para que fique mais limpo, vou alinhar horizontal e verticalmente. Então, a coisa toda aqui para essa sobreposição, eu quero que ela fique no centro. Então, novamente, o ponto de ancoragem para o centro, alinhamento 0,50, 0,5 e o tamanho ou posição em zero. Por zero. Ele fica no centro. E eu vou aqui na sobreposição novamente, dê um pouco de preenchimento. E, assim como antes, vou dar um par de cinco. Portanto, temos espaços entre os slots de inventário. E isso ficará muito mais claro quando realmente criarmos o inventário geral. E você pode ver o espaço entre os slots. Agora precisamos ter um item dentro desses espaços de inventário. Vou adicionar outra imagem a essa sobreposição. Vou centralizá-lo aqui. Vamos selecionar um ícone aleatório. Isso realmente não importa. Estamos mudando isso dinamicamente no jogo. Então, vou selecionar esse ícone para encontrar, vamos fazer isso de 160 por 60. E nós realmente não precisamos transformá-la em uma caixa porque é apenas uma imagem, um ícone. E a última coisa que queremos fazer é texto aqui embaixo, como um número. Se você tem que conhecer , precisa mostrar um número de cinco. Então, vamos pesquisar o texto aqui em cima e arrastá-lo até a sobreposição, como este texto. Alinhe-o à parte inferior aqui verticalmente e à direita horizontalmente, para que fique aqui embaixo. E deixe-me escrever um número, por exemplo, 23. Por enquanto, como espaço reservado para a família de fontes, vou selecionar, vamos ver, talvez o em negrito, o espelho e o negrito. Vou fazer o tamanho para 18. E eu vou apenas dar um esboço. Então, clicando aqui, você pode dar um esboço e ver o esboço aparecer aqui se você escrever 23456 e assim por diante. Então, escrevendo talvez dois, e aqui para a cor do contorno. Então, clique na cor do contorno e selecione uma cor aleatória aqui. Talvez algo assim, algo que se encaixe com o plano de fundo. Você também pode usar o seletor de cores. Escolha essa cor de fundo, clique nela novamente aqui e volte para a cor do contorno e deixe-a um pouco mais escura, algo assim. Parece bom. Clicando em Ok, um pequeno efeito que parece legal. Então, aqui na sombra, se você apenas criar o, dê um pouco de sombra, por exemplo, 1,2 no y. No momento, ele não está aparecendo porque seu alfa não está definido como zero, então defina-o como um e você poderá ver as sombras realmente aparecendo atrás do texto. Vou definir este para 1,2. E um efeito interessante é que, se você tornar essa cor de sombra igual à cor do contorno, obterá um efeito 3D interessante. Então, basta clicar nela, copiar a cor linear hexadecimal, indo para a cor da sombra, colando-a aqui embaixo. Você pode ver que isso dá aquele efeito de sombra 3D, que parece muito legal. Agora, quanto à posição, você pode ver que está aqui na borda. Eu só vou, em vez de usar o preenchimento, vou até aqui e a tradução, se eu conseguir encontrá-la aqui embaixo. E no x, eu vou simplesmente apertar , algo assim. Talvez se eu diminuir o zoom para 11 aqui para que eu possa ver como realmente é. Talvez algo assim esteja bem. Se eu escrever apenas cinco, por exemplo, se tivermos cinco encontros, é assim que vai parecer. Novamente, você pode clicar nesse botão para remover os traços e ver sua aparência. E eu acho que parece legal. Então, podemos usar isso. Vamos compilar, salvar tudo. Novamente, lembre-se de renomear seus itens aqui. Então, este é um espaço de inventário de imagens. Este é um item de inventário de imagens. E esta é, você pode chamá-la de item uma cidade. Talvez em vez de chamar de item de inventário, eu possa simplesmente chamá-lo de item qualquer coisa. E para essa sobreposição, vou deixar que eles não sejam muito importantes agora. Ok. Então foi isso. E lembre-se novamente, talvez precisemos mudar isso para gostar da visibilidade para não ser testável novamente para não sermos afetados. Mas eu não tenho certeza por enquanto. Vamos deixar como está e podemos mudar isso mais tarde. Vá para Arquivo, salve tudo e vamos para a próxima lição. 9. 2.05 Projetando o inventário: Vamos agora criar o inventário. Para o inventário, o que vai ficar é algo assim. Então, projetamos o compartimento de inventário, e é isso que eu quis dizer sobre o espaçamento entre os slots de inventário. É por isso que adicionamos preenchimento à sobreposição. Portanto, temos uma pequena distância entre esses espaços de inventário. Então, isso é o que vai parecer. As categorias estão aqui ao lado. Então, vamos projetar isso. Então, vamos clicar com o botão direito do mouse novamente na interface do usuário, no esquema do widget. Vamos chamar isso de inventário único. Então, dentro daqui, novamente, como antes, vamos adicionar uma tela. E para o inventário, você precisa visualizar o que está tentando fazer. Então, para qualquer interface de usuário que você esteja tentando fazer. Então, aqui o que estamos tentando fazer é colocar as categorias aqui ao lado e, em seguida, temos o inventário. Então, precisamos de algo chamado caixa horizontal. Portanto, precisamos que as categorias estejam ao lado do inventário. E aqui vamos usar algo chamado caixa horizontal. E você pode simplesmente adicionar elementos para ver o que está fazendo. Então, se você apenas pesquisar um botão, por exemplo, e adicioná-lo à caixa horizontal. Se você apenas Controlar D para duplicá-lo, poderá ver quais elementos se relacionam horizontalmente entre si. Então, vamos deletar esses botões. A caixa horizontal conterá uma caixa vertical na qual os botões da categoria serão alinhados verticalmente. E então teremos uma sobreposição onde temos nosso inventário. Simples assim. Temos na caixa horizontal, os bugs verticais para as categorias. Vamos renomeá-lo por enquanto. Vou deixar vb para caixa vertical e vou chamá-la de x inquéritos. E para a sobreposição, vamos chamá-la de inventário assim. Portanto, a sobreposição do inventário consiste em uma imagem. Precisamos do plano de fundo para o inventário. Então, adicionar uma imagem a ela e essa imagem, em vez de definir um tamanho para ela, ela será preenchida horizontal e verticalmente. Você pode ver que não está sendo preenchido horizontalmente. E isso ocorre porque essa sobreposição, que é a mãe dessa imagem, também não está preenchendo. Então, em vez de automático aqui, vamos clicar em Preencher e ele preencherá tudo. Então, o que quer que eu decida mudar a caixa horizontal de tamanho dois, ela preencherá esse espaço aqui. Agora, clicando de volta na imagem, vamos mudar esta para o botão quadrado azul. Eu também uso isso como plano de fundo. Parece bom. Agora, na verdade, apenas para os botões e desenhe como uma caixa, cinco na margem, para não perdermos qualidade. Então, agora temos o plano de fundo para o inventário. E agora o que precisamos fazer é ter um texto aqui que diga inventário. E então precisamos das preguiças do inventário aqui embaixo. Então você pode imaginar que precisamos de uma caixa vertical. Vamos procurar uma caixa vertical adicionada à sobreposição. Deixe-me alinhar essa caixa vertical, apenas preencher a coisa toda. E precisamos de um pouco de espaçamento porque, em vez de desenhar nas bordas desse inventário, vou adicionar um pouco de preenchimento a ele. Então, talvez algo como 30. Só vamos adicionar coisas aqui para não atingirmos as bordas do plano de fundo na parte superior. E talvez eu só vá escrever 25, assim. E agora vamos adicionar um texto. Este texto só vai dizer inventário. Vamos alinhar esse texto ao meio. Vamos mudar a fonte aqui. E eu vou selecionar esse mais ousado. E vamos mudar o tamanho. Talvez deixe que seja assim. Na verdade, é bom. Se você tiver apenas esse zoom para um por um. Você pode ver como é. Para este, vamos deixar que diga inventário, inventário, e podemos adicionar um pouco de sombra a ele. Eu só vou fazer com que seja 23,4, o Alpha 0.3. Agora você pode ver que temos uma sombra sutil abaixo desse texto, o que faz com que ele pareça muito melhor e não tão plano. Em seguida, vamos adicionar os slots de inventário. Então, para fazer isso, precisamos de algo chamado painel de grade. Então, se procurarmos apenas por uma grade, teremos esse ótimo painel. Vamos adicioná-lo a essa caixa vertical aqui no grande painel. Basta ir até aqui e pesquisar o inventário. Agora você pode ver os esquemas de widgets que você criou aqui. Então, temos a categoria e temos os slots. Então, pegando esse slot e adicionando-o ao painel da grade, você pode ver sua aparência. Clique neste, clique em Controle D para duplicá-lo. Em seguida, altere a linha para uma. E agora podemos ver como é. Então, duplique isso novamente e escreva um aqui na coluna. Eu só queria ver como seria. Vou copiar isso de novo, certo, dois na coluna. E isso é o que parece. Você pode ver isso. Obviamente, não parece correto. Então, temos que descobrir o que está errado. Agora podemos clicar nessa sobreposição aqui e tudo parece correto. Temos que clicar nessa caixa horizontal e você verá que parece correta se eu redimensioná-la. E em vez de deixar isso para a esquerda, podemos clicar nesse alinhamento intermediário. Então, o sabor está sempre no meio. No entanto, essa caixa horizontal está bem, parece boa agora. Em vez disso, podemos clicar em Tamanho do conteúdo. Portanto, o tamanho do estoque está indo para, ou o plano de fundo do inventário. Será do mesmo tamanho qualquer conteúdo para o inventário. Tudo bem, então a mesma coisa para os dólares verticais. Então, se você for até aqui e pesquisar inventário, pegue essa categoria e arraste-a até a caixa vertical que fizemos antes. Vou clicar no Controle D apenas para copiá-lo para que eu possa ver sua aparência. Você pode fazer isso dessa maneira ou alinhá-lo ao meio. Então, se eu apenas duplicar isso e aumentá-lo, para que eu possa ver como fica. A propósito, vamos excluí-los, vamos adicionar tudo isso dinamicamente, dependendo dos itens que saqueamos e não deste aqui, temos apenas três categorias. Então, em vez de deixar assim, vou clicar na caixa vertical e alinhá-la ao centro aqui e talvez alinhá-la horizontalmente aqui à esquerda. E para o preenchimento, vou adicionar um pouco de preenchimento à direita porque quero um pouco mais de espaçamento entre esses dois. Clicando na caixa vertical, adicionando, adicionando à direita, talvez dez, assim. E acho que ficou bom novamente e podemos clicar nesse inventário. há realmente nenhuma razão não termos botões ao redor. Mas caso você tenha um botão em algum lugar aqui, altere a visibilidade do texto para nenhum clique testável porque realmente não precisamos interagir com ele com o cursor do mouse. Ok, agora vamos compilar e salvar tudo. E isso é, na verdade, o que vai parecer. Assim, podemos excluir todos esses espaços de inventário. Por enquanto, podemos excluir todas as categorias, porque vamos adicioná-las dinamicamente durante o jogo. Então, agora o que você pode fazer é simplesmente mudar o nome de todas elas. Então, na verdade, parece bom e você sabe o que, é. Ótimo painel. Estas são as grades, o inventário. Exatamente assim. Vamos renomear tudo. E às vezes algumas coisas não são muito importantes para mudar o nome, pois essa é o inventário de imagens, talvez a imagem de fundo ou o plano de fundo. Esta é apenas a caixa horizontal. Agora precisamos alinhá-lo aqui. Então, a âncora é, eu vou desenhar o inventário aqui embaixo. Então, clicando na âncora, emprestando-a para aqui embaixo. E se você escrever a posição como zero, novamente, como antes, ela está realmente fora da tela. Então, assim como antes, você precisa ajustar o alinhamento um por um. E vou dar um pouco mais de espaço para os sites. Então, escrevendo a posição para -35 -35. Agora temos um pouco mais de espaço. Então era isso para o inventário. Vamos salvar tudo, vamos fechá-lo e passar para a próxima lição. 10. 3.01 Exibindo a interface principal: Agora é hora de exibir a interface principal na tela. Essa é a interface principal que estamos criando. E consiste apenas em um botão, que é o botão para abrir o inventário. Agora, o que queremos fazer geralmente é trabalhar com a interface do usuário dentro do controlador do player. Já temos um controlador de jogador neste jogo. Se você acessar os planos, temos este chamado PC. Este é o controlador do player. Vamos clicar duas vezes nela e essa visualização será aberta quando a perda do blueprint estiver vazia. Então, temos que clicar em Abrir, abrir o editor de plantas completo. Então, eu não fiz nada aqui dentro, embora esteja totalmente vazio e novo. E o que podemos fazer aqui é simplesmente excluir tudo por enquanto. Mas estamos tentando usar esse chamado se você clicar com o botão direito do mouse aqui neste editor e escrever cria widgets. Lembre-se de que estamos trabalhando com esquemas de widgets. Então, isso é o que criamos aqui, um Widget Blueprint. Então, se você simplesmente clicar com o botão direito do mouse aqui, à direita, criar widgets, você encontrará esse nó aqui. Essa função aqui criará nosso widget. Então, vamos selecionar o que queremos criar. Queremos criar a interface principal, esta, a principal do WB. Vamos clicar nisso. E agora vamos clicar com o botão direito do mouse e promover isso para uma variável que eu escrevo, eu gosto de ter minha interface de usuário em variáveis, vou promover isso para uma variável. E digamos que não seria principal novamente. Ok, agora nós o temos e, para exibi-lo na tela, agora você pode clicar em compilar. Eu costumo fazer isso se você me vê fazendo isso o tempo todo. É só verificar se você tem algum bug em seu código. Se fizer isso, te dará um ingresso, significa que está limpo. Então, está tudo bem até agora. Ok, então o que podemos fazer aqui é arrastar essa variável. E se você não criou uma variável, você pode simplesmente arrastar a partir daqui. Então arraste daqui e diga Adicionar à janela de visualização. Fazendo isso. Ok, agora fizemos o Add to Viewport. E se você clicar em Jogar agora, se você já conhece os planos, isso não acontecerá. Então, se você clicar em Jogar e ver que nada realmente acontece. Nada como se não houvesse um botão na nossa tela, certo? Agora. Se você já conhece os blueprints, sabe que precisamos de um evento para executar o código. Portanto, no Blueprint, você sempre precisa de um evento para executar o código. Você não pode executar código sem eventos. Então, se você clicar com o botão direito do mouse aqui e pesquisar por começar a jogar, temos algo chamado um evento chamado um porco pode jogar. Clique neste. Se quiser ver outros eventos, você sempre pode clicar com o botão direito do mouse e pesquisar. Você pode simplesmente pesquisar eventos e ver todos os eventos que você pode escolher. Por exemplo, não é destruído o evento no tick, que ocorre 60 vezes por segundo. E talvez qualquer dano usado quando a camada foi danificada e assim por diante. Então, vamos excluir isso por enquanto. Por que precisamos agora de algo muito básico chamado Begin Play. Portanto, esse evento apenas mostra o que acontece quando você começa a jogar. E vamos conectá-lo aqui. Ok? Então, quando começarmos a jogar, queremos criar esse widget e adicioná-lo à janela de exibição. Mas vamos compilar, vamos salvar tudo o que eles podem jogar. E agora você pode ver o botão está aparecendo aqui na tela. Ok? Então, tudo está funcionando. E se eu minimizar isso por enquanto, clique nesses três pontos, número de jogadores, vou mudar para dois. E para o modo net, por enquanto, vou clicar em jogar como servidor escutado. Vou clicar em jogar. E na verdade está no meu segundo monitor, que está aqui. Então agora temos dois jogadores. E você pode ver que os dois têm esse botão. Ok, Nice. E agora você pode ver que temos um bug aqui. E está dizendo que X não está tentando ler a propriedade feita pelo WB, que é essa. Não sabe o que isso realmente é. O que x não é significa, significa que essa variável está vazia. Eu não sei o que é. E isso é porque estamos trabalhando no modo multijogador. Você não pode fazer isso. Isso é bom para um jogador, mas para o modo multijogador, você não pode fazer isso diretamente. No modo multijogador, temos algo chamado cliente e temos algo chamado servidor. Alguns cliques em Jogar. Você pode ver aqui que diz servidor. E aqui diz que cliente terá o cliente e o servidor. Ok, então geralmente a interface do usuário é executada apenas no cliente, nunca no servidor. Na próxima lição, explicarei mais detalhadamente o servidor e o cliente. Mas, por enquanto, saiba que a interface precisa ser executada pelo cliente. Você não pode executar a interface do usuário por meio do servidor. Então, o que temos que fazer é simplesmente desconectar isso. E para desconectá-lo rapidamente, você pode clicar em Alt no teclado e clicar nele. Isso desconectará os pinos. E o que você quer fazer é clicar com o botão direito aqui e escrever eventos personalizados. Truque rápido para fazer isso também. Você pode escrever em um ponto e isso aparecerá rapidamente. Então, criando esses eventos personalizados, vamos chamá-lo de widgets de inicialização. Simples assim. E lembre-se de clicar neste evento nas réplicas, clicar em executar por proprietário, cliente e confiável. Vou explicar para você na próxima lição o que isso significa. Mas, por enquanto, certifique-se de que ele seja executado no cliente e seja confiável e você o conecte aqui. Portanto, estamos nos certificando de que a interface do usuário seja executada com o cliente. E agora os esquemas novamente, lembre-se, quando você clica em Jogar, nada acontece. Isso ocorre porque você sempre precisa contar a ele os planos de quando realizará este evento. Porque seu código realmente não sabe ou seu jogo realmente não sabe quando realizar esse evento. Então, quando começamos a jogar, quero chamar esse evento de inicialização de widgets. Ok, então vamos compilar. Eles podem jogar agora. Agora podemos ver que aparece na tela ou isso aqui e neste ano. E se eu sair do jogo, você pode ver que não tenho caixa. Agora isso não me dá nenhum erro. E isso é porque, porque está sendo executado corretamente agora. Agora, toda a interface do usuário é executada pelo cliente como deveria. E lembre-se de compilar, clique em Salvar tudo. E vou passar para a próxima lição onde explico mais detalhadamente o servidor e o cliente. 11. 3.02 O que é a replicação de eventos: Tudo bem, então antes de continuarmos, eu só quero explicar rapidamente para você o servidor e o cliente no Unreal Engine. Então, novamente, como você viu antes, quando clicamos em Jogar, temos o servidor e depois temos algo chamado cliente. Mas o que você precisa entender no Unreal Engine o servidor é a autoridade do jogo, então o servidor é o verdadeiro jogo. E o que isso significa? Isso significa que, para o servidor, você vê tudo corretamente. Então, por exemplo, se eu deveria ter acessado meu servidor aqui e se eu atirar com uma arma , a arma disparou perfeitamente bem. Se eu atirar no cliente e o servidor não der autoridade ao cliente para disparar essa arma, isso nunca acontecerá. Então, o que quer que você faça no cliente, ele sempre verifica com o servidor. Então, o servidor verifica. O cliente está fazendo algo legal ou algo parecido é considerado trapaça. Então, todos os clientes se conectaram a você, então digamos que você criou um servidor Counter-Strike ou um servidor de quinze dias ou qualquer outra coisa. E todos os seus amigos estão conectados a você ou aos seus amigos ou aos clientes, a você ou ao servidor. Então, se um de seus amigos está trapaceando, por exemplo, ele está atirando com uma arma sem balas. Ele sempre verificará isso com o servidor. E se o servidor perceber que esse jogador não tem balas , isso nunca será fechado. Portanto, o servidor sempre verifica quais são os clientes, e esse é um bom. Se você puder pesquisar no Google UE o compêndio de rede, ele lhe dirá tudo sobre o modo multijogador. Mas eu só quero tornar isso muito fácil para você , porque é um documento longo. E eu só quero mostrar esses círculos, assim como fizemos na lição anterior. Executamos os widgets no cliente. Então você pode ver aqui que os widgets são sempre executados no cliente. Os controladores do player são executados no servidor e nos clientes para que eles possam se comunicar com o servidor e o cliente. E o modo de jogo só funciona no servidor. Portanto, se você tiver algum código escrito dentro do modo de jogo e quiser acessá-lo por meio do cliente. Isso é impossível porque o modo de jogo só existe no servidor. E o controlador do player, novamente, existe tanto no servidor quanto no cliente para que você possa se comunicar com ambos. Então, o que fizemos em nosso jogo até agora foi trabalhar dentro do cliente. Então, se eu voltar para o meu jogo aqui dentro, se eu voltar para os planos, lembre-se de que fizemos esse código aqui dentro do controle do jogador. E o controlador do player existe tanto no servidor quanto no cliente. Então, temos que especificar aqui, estamos trabalhando com o servidor ou estamos trabalhando com o cliente? Se estivermos trabalhando com o servidor, precisamos replicar para rodar no servidor. Mas como você sempre é tratado por meio do cliente, precisamos executar o cliente e, em seguida, criar a interface do usuário, trabalhar com a interface do usuário. Então, é muito, muito importante entender. A interface de usuário é sempre gerenciada pelo cliente. E se você não os passar pelos clientes, como vimos antes, se você simplesmente executá-los diretamente dessa forma, você receberá dólares. Agora, além da interface do usuário, por exemplo , algumas das mecânicas de jogo , digamos que mais tarde , vamos criar itens. Então, aqui nos itens, vamos criar itens. E digamos que o jogador vai extrair essa manipulação do chão e adicioná-la ao inventário. Então o jogador vai até o jogador caminha até essa poção. E quando o jogador pressiona E, por exemplo, para saquear a poção , ela será executada nos servidores. Vamos fazer eventos personalizados serem executados no servidor. Em seguida, o servidor lidará com a lógica, então o servidor a verificará. Na verdade, esse jogador pressiona E. Esse jogador está realmente próximo dessa poção para poder diluí-la. Se você não verificar essas coisas, cliente deles pode trapacear. E é por isso que verificamos isso com o servidor. Então, digamos que o cliente esteja aqui e você só possa carregar para essa pessoa quando estiver aqui. Mas se você não verificar isso com o servidor e o cliente versus E aqui, eles estão trapaceando. Eles podem facilmente perder essa poção. Então, temos que rodar no servidor, verificar se a camada está realmente interagindo com essa poção. Se o jogador tiver ***** o suficiente no inventário para carregar esta poção e assim por diante. Então, vamos examinar o servidor mais tarde, então verifique essas coisas. Mas para a interface do usuário, estamos executando isso no cliente. 12. 3.03 Chave obrigatória para o inventário aberto: Vamos agora vincular a chave I para abrir o inventário. Você também pode vincular a tecla B, que às vezes é usada para mochila. Então, vamos para as plantas novamente, pasta Blueprints. E dentro do player, eu já criei esse chamado contexto de mapeamento de entrada e ação de entrada. Este é o novo sistema de movimento e o Unreal Engine. Se você não sabe nada sobre isso, você sempre pode ir ao meu youtube e conferir o tutorial que eu fiz para ele. Agora você pode clicar duas vezes nesse aqui, o contexto do mapeamento. E se você abrir, verá que eu já criei o movimento. E quando você olha com o mouse , precisamos criar um novo, ou você quer abrir seu inventário? Vamos clicar com o botão direito aqui. E vamos para as entradas e para a ação de entrada. Vamos chamar isso de IA para ação de entrada e chamá-lo de inventário aberto. Agora, o que podemos fazer é salvar tudo. E dentro do contexto do mapeamento, agora podemos clicar no botão Mais aqui, clicar aqui e selecionar o inventário aberto que acabamos de criar. Em seguida, você pode selecionar uma chave para isso. Você pode selecionar o olho ou selecionar B. Você pode simplesmente clicar neste ícone aqui e escrever V no seu teclado, por exemplo, você também pode encontrá-lo aqui, se desejar, olhando no teclado e encontrando a tecla. Então, eu também posso adicionar dois botões. Eu posso simplesmente clicar neste botão de adição e na tecla. Agora você pode abrir o inventário usando o bico e a chave do olho. Ok? Então, agora há um pequeno erro até agora. No momento, funciona com carrapato. E eu vou te mostrar daqui a pouco. Se você acessar o nome real do controlador do player, vamos voltar ao player aqui. É aqui que lidamos com as entradas. Então, aqui dentro, se você clicar com o botão direito do mouse e agora pesquisar o inventário aberto de IA que acabamos de criar. Você encontra esse evento aqui e acaba de perceber isso, esse ícone significa que este é um evento clicando nele. E agora temos esse que acabamos de criar. Agora, basta arrastar do acionador e escrever uma string de impressão apenas para ver o que está acontecendo. E isso apenas escreverá textos na tela. Agora, basta clicar em Jogar, Jogar. E aqui eu vou clicar no botão I. E você pode ver que ele imprime olá muitas vezes e não é isso que queremos. Só queremos abrir o inventário uma vez ao clicarmos, é só enviar spam para o inventário neste momento. Se você clicar em AI. Então, vamos voltar aqui. Volte para o contexto do mapeamento. E aqui no inventário aberto do peaky e do ikea, lembre-se de pressionar esta pequena seta para abri-los aqui. O que queremos fazer aqui é, para acionar os gatilhos, clicar no botão de adição e selecionar pressionado. E o que diz? Trigger dispara apenas uma vez, e é isso que queremos fazer. Então clique aqui. E a mesma coisa para os olhos. Só queremos acioná-lo uma vez quando clicamos no botão, vamos salvá-lo. Vamos voltar. Clique em Jogar. E agora vou apertar a tecla I. E você vê isso apenas uma vez quando eu pressiono. E mesmo que eu segure como agora, estou apenas pressionando várias vezes. Mas mesmo que eu segure um, agora vou segurar o botão. Você pode ver que ele dispara apenas uma vez e isso também é o que queremos. Tudo bem, agora é hora de exibir o inventário na tela quando clicamos no botão. Mas vamos passar para a próxima lição. Você precisa aprender mais sobre algo chamado enumeração. Então, salve tudo e vamos seguir em frente. 13. 3.04 Introdução à enumeração: O que é uma enumeração, é apenas uma lista de todos os itens que você deseja que seja. Então, vamos ver as plantas. Aqui. Vamos clicar com o botão direito do mouse, criar uma nova pasta e chamá-la de enums. Então, essas são as enumerações que estarão dentro daqui. Agora clique com o botão direito aqui, vá para plantas e você verá que temos algo chamado enumeração. Então, vamos criar um e ver o que é. Eu geralmente dou a eles o prefixo E ou enumeração. E para este, basta chamá-lo de widgets de jogos. Vamos fazer uma lista de widgets de jogos. Vamos entrar aqui. E agora você pode ver que é muito simples. Não temos muita coisa aqui dentro. Você pode clicar em Adicionar enumerador. E dentro daqui, você obtém esse nome de exibição e pode dar a ele um nome e uma descrição. Então, o que é uma enumeração, é apenas uma lista. Isso é simplesmente o que é. É apenas uma lista e pode ser uma lista de qualquer coisa, por exemplo, esta é chamada de jatos Gameboy. Então, eu só quero fazer uma lista de jogos. Até agora, queremos abrir o inventário. Um widget que temos até agora é o inventário. Também temos a interface principal, mas eu realmente não preciso dela aqui. Agora que temos o inventário até agora , na verdade não temos mais. Mas poderíamos, por exemplo, ter algo como um menu de habilidades. Digamos que temos um jogo maior. Temos um menu de artesanato. Poderíamos ter um menu de pausa, por exemplo, poderíamos ter muitos widgets aqui, dependendo do que você deseja adicionar. Vou excluir tudo isso clicando neste ícone. Mas você também pode fazer uma lista de qualquer outra coisa, por exemplo, itens de criação. Talvez você precise de uma barra de ouro. É assim. Talvez você precise de pele de vaca ou algo assim. Portanto, pode ser uma lista de qualquer coisa. Mas agora vamos apenas criar, só queríamos listar os widgets de jogos que temos agora, são apenas o inventário. Então, isso foi muito fácil e a enumeração é apenas uma lista de qualquer coisa. E vamos usar essa lista na próxima lição para exibir o inventário. 14. 3.05 Criando o evento aberto e fechado do widget: Ok, agora nos planos dentro da pasta enums, agora criamos nossa enumeração de widgets do jogo. E a única coisa que temos agora é apenas o inventário que podemos fechar e abrir como interface de usuário. Então, vamos tentar criar eventos de abertura e fechamento do widget para que ele possa realmente abrir e fechar widgets. E geralmente, novamente, trabalhamos com a interface do usuário dentro do controlador do player. Então, vamos voltar às plantas. Vamos abrir nosso controlador de player. E aqui, até agora, criamos essa interface de usuário principal, que adicionamos à janela de visualização. Agora, o que eu quero que você faça é clicar com o botão direito aqui e criar eventos personalizados. Para esse evento, vamos chamá-lo de widgets de abertura e fechamento. Então, estamos usando esse evento para abrir e fechar widgets, por exemplo, você abre e fecha o inventário, ou você abre e fecha o menu de pausa, ou você abre e fecha qualquer coisa, por exemplo, um Sharp que você abre para comprar armas e assim por diante. Então, por enquanto, abrimos e fechamos o inventário. Então, este evento aqui, novamente, lembre-se, falamos sobre a necessidade de a interface do usuário ser executada no cliente. Então, temos que fazer um novo evento, um novo evento personalizado, e chamá-lo de C L para clientes. E vamos chamar isso de widgets de baixa abertura. E geralmente, para o cliente, eu costumo chamá-los de Cl como prefixo. E, na verdade, eu deveria ter feito isso aqui também , apenas para me manter consistente. E eu vou chamá-lo de CL aqui também. Ok, então, para este, vamos lembrar nas réplicas, executá-lo com clientes próprios e também de forma confiável. E a partir desse primeiro evento de fantasias, vamos nos lembrar de executar outro código. Isso nunca vai funcionar. Portanto, essa iniciativa Cl não foi inicializada com apenas um widget de abertura e fechamento. Então, agora também executamos esse código. Ok, você pode compilar. Basicamente, o que eu quero com esse widget é que precisamos selecionar qual widget queremos abrir. E então temos que selecionar se queremos abri-lo ou fechá-lo. Então, para selecionar qual widget queremos abrir, lembre-se de que fizemos essa enumeração chamada widgets do jogo E. Então, aqui para esse widget de abrir e fechar, vamos agora clicar no sinal de adição aqui. Então, estamos adicionando uma variável a esse evento. E vamos selecionar aqui o tipo de variável. Vamos pesquisar widgets de jogos eletrônicos. Essa que acabamos de fazer, essa é a enumeração. Então, vamos clicar nele. E eu vou chamá-lo de widgets. E você pode ver aqui agora, agora precisamos conectar essa enumeração com a do cliente. Então, aqui, eu vou realmente criar o mesmo clique no Plus. Já está configurado para os widgets do jogo. Vou chamá-lo de Widget novamente. E agora podemos conectá-lo aqui assim. Ok? Então, precisamos de outra variável. Precisamos especificar se realmente queremos abrir ou fechar esse widget. Então, precisamos adicionar um booleano. Vamos clicar no sinal positivo aqui em cima. Selecione um booleano como o tipo de variável e chame este de aberto. Novamente. Vamos fazer isso aqui embaixo. Clique no link adicional Collatz open e vamos conectá-los aqui. Ok, então, por exemplo apenas para mostrar isso para você rapidamente. Então, aqui no início do jogo, digamos que eu arraste daqui e diga widget open lows, este sem o cliente, então esse aqui. Então, agora eu posso especificar qual widget eu quero abrir? Isso ocorre porque adicionamos essa variável aqui embaixo, especificando, por exemplo eu quero abrir o inventário e lembrar marcar esse booleano porque você deseja abri-lo. Se você não quiser abri-lo assim, isso significa fechá-lo, fechá-lo. Clicando aqui. Isso significa que você quer abri-lo. Ele vai passar por esse evento e os resultados estarão aqui. Ok, então eu vou deletar este por enquanto. Então, aqui embaixo, o que precisamos fazer aqui agora, precisamos verificar. Você quer abrir ou fechar o widget? Então, arrastar desse booleano, escrever B e selecionar essa ramificação para esse booleano é apenas para se manter consistente. Eu costumo escrever B como um prefixo, e isso é feito em C plus plus para encontrar booleanos mais rapidamente. Então você pode ver que, embora eu escreva um b, ele não aparece aqui, então é um pequeno Segredos, escrevendo-o antes dos nomes booleanos, booleanos. Eu costumo fazer isso. Ok, vamos voltar aqui. Então, fazendo um galho aqui, à direita V, e faça um galho. Agora estamos perguntando: esse booleano é verdadeiro ou falso? Se for verdade, queremos abrir o widget. Se for falso, queremos fechar o widget. Mas vamos fazer duas funções aqui, clicando nesse botão de adição, vamos chamar essa. Widgets, e vamos criar o segundo e chamá-lo de widgets de fluxos. Vamos voltar ao gráfico de eventos. Vamos arrastá-los até aqui. E agora vamos conectá-los. Então, se for verdade, queremos abrir o widget. Se for falso. Se a abertura for definida como falsa, queremos fechar o widget. Agora precisa especificar de quais widgets você está falando. Então, novamente, na entrada, vou clicar no sinal de adição e selecionar o widget do jogo EA e chamá-lo aqui de widgets. E fazendo a mesma coisa com o widget de fechamento, clique no sinal de adição. E então você precisa conectar esse widget a aqui. E agora temos o fluxo total. Então, o que está essencialmente acontecendo agora é se você chamar esse widget de abertura e fechamento, novamente aqui em cima, por exemplo, você diz widget de abertura e fechamento. Você quer abrir o inventário assim. Agora, vai descer até aqui. Quando você chama o código assim, ele vai parar aqui. Ele sabe que você configurou esse widget para inventário. Então, vai abrir porque isso é verdade. Então, vai ficar aqui embaixo. É verdade. E sabe que o valor é estoque. Então, ele abrirá o inventário de widgets, então ainda não os criamos. Então, vamos até aqui. Esta é a função de widget aberto aqui. Então, aqui, você pode arrastar a partir dessa enumeração. E temos algo chamado switch on enumeration. Então, ligue-o se você clicar nele agora. Agora, o que é o interruptor ligado? Ele pode reproduzir valores diferentes dependendo do que você selecionou como valor para essa enumeração. No momento, temos apenas o inventário como um valor, mas se você tivesse vários valores, teria vários pinos aqui. Assim, você pode executar uma ação dependendo do que você selecionou como enumeração. Então, aqui para o inventário, lembre-se que estamos dentro do widget aberto. Então, vamos prosseguir aqui e dizer Criar widgets e selecionar este aqui. E queremos criar o widget de inventário. Queremos abrir o inventário. Ótimo inventário de widgets. E então vou clicar com o botão direito do mouse remotamente em uma variável porque gosto de tê-las em variáveis e chamar isso de inventário WB. Ok, agora eu tenho essa variável e quero adicionar às suas portas assim. Mas agora, na verdade, estamos adicionando-o à janela de exibição. Apenas uma verificação rápida antes de realmente fazermos isso, você pode, novamente, lembrar que podemos segurar a tecla Alt e clicar nela aqui também, desconectados rapidamente. Antes de fazermos isso, deixe-me pegar essa variável de inventário. Você pode segurar Control e arrastar. Se você segurar Control e arrastar, você pegará esse valor variável. Se você segurar Alt e arrastar, você define essa variável segurando controle e arrastando essa variável, você a tira daqui. E agora podemos clicar com o botão direito do mouse nessa variável e convertê-la em um get validado. E o que isso faz é que você está realmente verificando antes de fazer isso. Você está verificando se isso já foi criado ou não porque realmente não precisamos criar isso e, em seguida, definir a variável se ela já estiver definida anteriormente. Então é isso que estamos realmente fazendo. Então, se não for válido, se essa variável não contiver nada, significa que ainda não a criamos. Se não for válido, queremos criar essa variável. No entanto, se essa variável for válida, que significa que já executamos esse código antes, queremos apenas adicioná-lo à janela de exibição desse jeito. Portanto, não precisamos criá-lo repetidamente se já o criamos antes, certo, então foi isso para o widget aberto. O widget de fechamento é muito mais simples. Então, aqui novamente, arraste daqui e diga para ativar a enumeração. Portanto, dependendo do que queremos fechar, por exemplo, queremos fechar o inventário. Então, vamos pegar o inventário aqui novamente, clicar com o botão direito do mouse e converter para validar o resultado. E se tivermos isso aberto, o que significa que, se for válido, significa que o inventário está aberto. Queremos sair daqui e dizer Remover dos pais. E é assim que eu removo a interface do usuário das janelas de visualização. Tudo bem, agora terminamos e apenas uma explicação rápida antes de eu realmente terminar isso, só para não ficarmos muito confusos sobre isso. Então, deixe-me remover isso por enquanto. Então, agora fizemos isso, esse evento personalizado aqui e está sendo executado no cliente. Por exemplo, eu quero abrir o jogo inicial aqui. Eu quero abrir o inventário, digamos, abrir todos os widgets. Então, estamos chamando esse evento aqui que fizemos. Estamos selecionando como widget o inventário, porque lembre-se de que, dentro de nossa enumeração, não temos mais valores. Digamos que eu adicionei outro valor mais tarde, chamei de loja de armas, por exemplo, I. Clique em Salvar, salve tudo. Agora posso ver aqui dentro do meu controle de jogador, agora posso selecionar a arma afiada. E digamos que passe por aqui e pelo widget aberto. Agora você pode ver que eu posso fazer outra coisa com eles em uma loja de armas. Eu poderia ter criado outro widget para a arma sharp e exibir na janela de visualização, ver como é útil ter enumerações. Deixe-me deletar este por enquanto e deixe-me voltar. Então, no gráfico de eventos, digamos que eu ligo, na verdade, basta mudar isso de volta para inventário. Então, aqui eu chamo de inventário aberto-fechado. Eu selecionei o inventário como entrada para o widget. E eu o seleciono aberto assim. E isso significa que vai passar por aqui. Ele sabe que esse booleano é verdadeiro, o que significa que ele vai até aqui e abre meu widget, e sabe o que é porque eu o configurei aqui. Agora, ele vai até aqui e adicionará a interface do inventário à minha janela de visualização. Então, está adicionando essa interface de usuário aqui, inventário WB à janela de visualização. E esse é o inventário. Não parece bom porque ainda não o terminamos, porque também precisamos programá-lo. Mas isso é o que essencialmente acontece. Se isso estiver definido como falso. Vai ser falso aqui embaixo. E isso removerá o inventário da tela. Tudo bem, então agora vamos deletar isso aqui. Não queremos abrir o inventário quando começarmos a jogar. No entanto, o que queremos fazer é agora fechar tudo aqui. Vamos voltar ao player de blueprints e ao nosso reprodutor de bp aqui. Então, o que queremos fazer é quando clicamos em Abrir inventário, na verdade queremos executar esse código aqui em nosso controlador chamado widgets de abertura e fechamento. E queremos abrir o inventário, pressione o botão de abrir inventário. No entanto, lembre-se de que nosso código está dentro do controlador do player e agora estamos dentro do player. Então, como podemos fazer com que esse evento, que está dentro do controle do jogador, possa ser jogado aqui e o jogador. Agora, se você fez meus cursos anteriores, você pode tentar fazer isso sozinho. Você provavelmente deveria ser capaz. No entanto, se você é novo aqui ou eu não me lembro, vamos falar sobre a próxima lição, porque agora precisamos falar sobre a comunicação do Blueprint, na falar sobre a comunicação do Blueprint, qual nos comunicamos entre dois planos diferentes. 15. 3.06 Introdução à comunicação de black: Olá e bem vindo de volta. Então, agora vamos falar sobre a comunicação do Blueprint. E o que é a comunicação do Blueprint. Estamos simplesmente nos comunicando entre diferentes classes de blueprint. Então, neste caso, queremos abrir o inventário. O que é um evento de widget de abertura e fechamento está dentro do controlador do player. Então, como obtemos as informações de outra classe de Blueprint aqui do jogador? Então, o que essencialmente precisamos fazer primeiro obter a referência para esse controlador de player. Vou deletar essa string de impressão Olá, que apenas a imprime na tela. Agora, o que precisamos fazer é clicar com o botão direito aqui e escrever get controller. E o que isso faz é retornar o controlador para esse ator. Então está ficando, você obtém este controlador para exibição aqui. Agora precisamos especificar de qual controlador você está falando. Este é apenas um controlador geral. Lembre-se de que fizemos nosso personalizado aqui. Agora precisamos dizer ao mecanismo que, na verdade, estamos falando especificamente sobre um controlador de disco. Então é aqui que a comunicação entra. É algo chamado custo de dirigir daqui e dizer “jogado para lá”. E agora precisamos escrever o nome da planta aqui do controlador. Então, digamos, PC town. Então esse aqui custou para o PC4 na parte alta da cidade e o acionador, vamos conectá-lo aqui. Agora, como esse controlador está aqui, eu posso realmente acessar tudo dentro desse controlador de player, incluindo essas variáveis também. Então, além dessas funções aqui. Então é isso que comunicação do Blueprint é muito, muito simples. Você pega o controlador. Essa é apenas a referência geral. E então especificamos qual controlador você está falando especificamente? Estou falando desse PC mais ou menos como este. Agora podemos dizer que eu quero executar este evento chamado Open close widget. O player que eu posso arrastar daqui e dizer open close widget, este aqui. Agora eu posso realmente fazer isso. Então, por exemplo, para o inventário, quero abri-lo. E se eu compilar e clicar em Reproduzir, agora posso clicar em I no teclado e você poderá ver nossos inventários realmente abertos. Agora podemos clicar em I novamente porque ele não vai fechar. Ainda temos que programar essa lógica. Então, vamos fechá-lo. Então, essa é basicamente a comunicação do Blueprint, muito, muito fácil. No entanto, há um pequeno problema com a fundição. O casting faz referências concretas e como as referências rígidas precisam ser carregadas sempre que o jogo carrega. Então, isso tornará seu jogo mais lento. Às vezes, você vê que os jogos ficam muito, muito lentos quando carregam o jogo. E pode ser porque eles passaram isso para muitas coisas em seu jogo. Imagine que seu jogo pode ser muito, muito grande quando você termina o jogo. E talvez você tenha cerca de 100, 100 itens que você está custando dois ou 100 plantas que você está custando dois. E tudo isso está criando referências concretas, o que torna seu jogo mais lento. Não estou dizendo que você nunca deve usar isso, mas deve evitar usá-lo sempre que puder. E, nesse caso, podemos realmente evitá-lo usando algo chamado Blueprint Interfaces. Então, vamos prosseguir com a próxima lição e falar sobre Blueprint Interfaces. 16. 3.07 interfaces de black: Agora que falamos sobre custos, vamos agora falar sobre as interfaces Blueprint. Portanto, esse tópico geralmente é um pouco difícil para iniciantes, mas tentarei explicá-lo da melhor maneira possível. Mas agora vamos fechar tudo aqui e aqui e a pasta Blueprints Vamos clicar com o botão direito do mouse e ir até blueprints e criar essa chamada de Blueprint Interface. E geralmente eu dou para int como prefixo. E para este, vamos chamá-lo do nome do projeto ao qual quero me referir. Portanto, quero fazer referência a esse controlador preto para obter meu evento de widget de abertura e fechamento. Então, vamos chamar isso de controlador de uma camada. Agora também vou clicar com o botão direito do mouse e criar uma nova pasta chamada Interfaces apenas para permanecer consistente aqui e arrastá-la para esta pasta. E deixe-me ir até a pasta, abrir minha interface Blueprint. Então, que interface de Blueprint você pode ver aqui. Muito, muito simples. Eu realmente não posso fazer nada neste gráfico. Não consigo mover nada nem fazer nada. E nós realmente não deveríamos trabalhar aqui. O que devemos fazer aqui à direita, podemos criar funções. Então, nesta primeira função, você pode clicar nela. Você pode clicar em F2 no teclado para renomeá-lo. E vou chamá-la de referência do controlador de layout do get porque é isso que estou tentando fazer. Aqui na saída. Vamos clicar sobre isso e definir uma variável aqui. Agora, você precisa selecionar o que deseja referenciar. Quero me referir ao meu controlador de player chamado EC Hook Town. Então, selecione-o aqui. E agora vamos chamá-lo apenas de controlador de jogador. Ok, então é isso mesmo por enquanto. Então, agora criamos essa função obter controle de camada ou referência, ou tentamos obter a referência para esse termo popular controlador de player para PC. Ok, agora vamos fechar essa interface e voltar aos planos. E precisamos entrar nesse controlador de player e adicionar nossa interface que acabamos de criar. E fazemos isso clicando nas últimas configurações. E aqui nas interfaces, vamos clicar aqui e procurar o controlador de camada final, esse é o que acabamos de criar. Então, clicando nele aqui. Agora, vamos compilar. Se você fizer isso agora, podemos ver aqui que temos uma guia chamada interfaces. E se você clicar na seta, você verá sua interface. Um erro muito pequeno que muitas pessoas cometem aqui. Se você voltar à interface, lembre-se de clicar em compilar. Caso contrário, você não verá isso aqui ao adicionar sua interface. Então lembre-se de clicar em compilar. É muito, muito importante sempre compilar seu código. Agora, aqui na interface, agora podemos clicar duas vezes nela. Para isso, para isso aqui, para essa referência dessa variável, podemos arrastar daqui e escrever self. Basicamente, o que isso está pedindo, essa variável é que precisamos especificar o que é essa variável de cidade EC ****, o que é isso? E o que estamos basicamente fazendo aqui é nos arrastar até aqui e dizer nós mesmos. Porque lembre-se de que já estamos nesse modelo, o controlador do player ao qual estamos tentando nos referir. Então, basicamente, estamos dizendo que essa referência de variável é self, seja, o que quer que estejamos dentro de nós agora, que é essa classe de modelo aqui. Agora o que podemos fazer é voltar aos blueprints, ao player e ao reprodutor de bp. Então, vamos voltar aqui. Em vez de fundir, vamos deletar essa parte. Aqui temos o controlador geral. Então, em vez de traje, agora podemos arrastar e dizer que obtém sua referência de controlador, porque isso é o que realmente criamos nesta função aqui. Então arraste aqui e diga que é player, referência do controlador e tem que dizer mensagem no final, o que significa que vem de uma interface Blueprint. Portanto, esta é uma função da Blueprint Interface, clicando nela aqui. E agora podemos conectá-lo aqui e daqui, assim como antes, agora podemos acessar tudo dentro desse controlador de camada. E agora podemos dizer um widget Open lows como este. E agora está funcionando totalmente. Você pode ver se eu clicar em jogar e clicar em I no meu teclado, isso abre o inventário como antes, e estamos evitando o jejum que criou uma referência rígida, o que pode desacelerar nosso jogo. Então, isso é muito melhor de fazer. Então, vou abordar isso rapidamente porque sei que é um assunto confuso para alguns e também era confuso para mim há algum tempo, quando eu comecei. Então, vamos voltar aqui. Criamos uma interface Blueprint. Dentro daqui. E dentro dessa interface Blueprint, acabamos de criar uma função chamada getline Controller reference, onde adicionamos qualquer referência de controlador de player à qual queremos fazer referência. E queremos nos referir a este especificamente. Agora, o que fizemos foi acessar esse controlador e adicionar a interface e as configurações de classe. Nós o adicionamos aqui. Isso fez com que essa função de interface aparecesse. E o que fizemos aqui, agora tivemos que especificar se eu simplesmente desconectei isso aqui, essa variável do controlador municipal **** do PC. Se você não fizer isso, ele simplesmente não sabe do que você está falando. Isso. Lembre-se de que, se você colocar assim, significa que essa variável está vazia. E o que quer que você tente fazer aqui, vai te dar um erro. Então, se eu clicar em jogar aqui e clicar em I, no meu teclado, nada acontece. E se eu sair, haverá um erro dizendo que x é nenhum acesso nenhum, apenas significa que essa variável está vazia. Eu não sei o que você está tentando acessar ou o que você está tentando fazer é essa variável, ela está vazia. Eu não tenho nenhuma informação. É por isso que você precisa dizer eu, porque basicamente estamos definindo essa variável. Estamos dizendo que esse controlador de jogador do estamos falando é próprio, o que significa esse modelo. Seja qual for o modelo em que estejamos, essa autorreferência é essa. Então, o fator PC, é assim que estamos referenciando o controlador do player. E agora, dentro do player, agora podemos usar essa função de interface Blueprint. E sabemos qual é a variável porque fizemos essa autorreferência aqui. E a partir daí, agora podemos acessar tudo dentro desses controladores de camada para que possamos até mesmo acessar esse WB feito, se quisermos. Você pode ver aqui, se eu arrastar daqui e disser WB main, eu também posso obter essa variável. Tudo bem, então era isso para a planta e as superfícies. Agora podemos abrir o inventário. Mas vamos prosseguir com a próxima lição e realmente finalizar isso, porque também precisamos fechar o inventário. 17. 3.08 Exibindo o inventário: Ok, então a etapa final para abrir e fechar o inventário. No momento, o problema é que quando clicamos em I no teclado, ele continua abrindo o inventário, então precisamos fechá-lo também. Vou voltar para o controle do player. E dentro daqui, vamos criar uma nova variável, um booleano chamado is, vamos chamá-la de inventário aberto. Agora vamos controlar a abertura, fechando por esse booleano aqui. Então, aqui no widget aberto, vamos entrar aqui. Então, por que não abrimos o inventário e o adicionamos à janela de exibição? Vamos pegar isso aqui. E lembre-se de que você pode segurar Alt, arrastá-lo e configurá-lo aqui para definir a variável. Sim, então se você quiser arrastá-lo e selecionar Definir aqui também. Então, vamos definir esse booleano como verdadeiro. Então, o inventário está aberto, isso é verdade. E quando fecharmos o inventário, se você voltar ao Gráfico de Eventos e clicar no widget Fechar, definiremos isso como falso. Ok, então agora é falso. E vamos voltar para o jogador aqui. Então, dependendo se é verdadeiro ou falso, essa, essa variável aqui , queremos abrir ou fechar o inventário. Lembre-se de que já estamos fazendo essa comunicação da interface Blueprint com o controlador do player para que possamos acessar o que está dentro desse controlador preto, incluindo essa variável que acabamos de criar. Agora podemos dirigir daqui e dizer É, os estoques estão abertos aqui? Podemos selecionar o booleano aqui para que possamos obter o valor disso. E agora podemos fazer uma filial. Então, ramo direito. Portanto, se o inventário estiver aberto, queremos prosseguir e fechá-lo. Vamos copiar e colar esse aqui. E se o inventário não estiver aberto aqui, abriremos o inventário. Vamos arrastá-los até aqui, conectar isso aos alvos. E se você quiser torná-lo muito melhor, basta clicar duas vezes na linha aqui e torná-la mais organizada. Ok, então o que está essencialmente acontecendo aqui é que estamos perguntando: o inventário está aberto? Se ele já estiver aberto quando clicamos no botão, queremos fechá-lo. Se clicarmos no botão e o inventário não estiver aberto, então, na verdade, queremos abrir o inventário. E vamos salvar tudo. Vamos clicar em Jogar. E agora vamos clicar em I para abrir o inventário. E eu vou clicar em I novamente, e você pode ver que ele fecha. Então, clicar no olho o abre. Podemos novamente, isso o fecha. Lembre-se de que também achei a tecla be se você pressionar a tecla B. E isso só está aqui na camada de plantas. Aqui, se você clicar nos contextos de mapeamento, se você também disse o BQ para o inventário, dependendo das teclas que você definiu, você pode pressionar essas teclas aqui e o jogador para abrir o inventário. Então, agora está funcionando como deveria. 18. 4.01 Criando o modelo de item base: Agora estamos prontos para entrar nos itens. E a razão pela qual criamos os itens inicializáveis antes de realmente codificarmos o inventário é porque, na verdade, precisamos de itens que precisam entrar nos espaços do inventário. Então, vamos criar os itens antes de continuarmos com o inventário na pasta blueprint. Agora vamos clicar com o botão direito do mouse aqui e criar uma nova pasta. Vamos chamar isso de um item. E dentro daqui, vamos clicar com o botão direito do mouse. Vá para a aula Blueprint. E você pode criar um ator aqui porque os itens são apenas atores estáticos dentro do nível. Por exemplo, esta planta poderia ter sido um item. Essa ferramenta poderia ter sido um item. Então, esses são apenas atores. Se você ler aqui, diz que um ator é um objeto que pode ser colocado ou responder no mundo. Então, vamos selecionar o ator e chamá-lo de base de itens da BP. Então, geralmente eu crio uma classe base se eu quiser criar várias da mesma coisa. Então, se eu quiser criar vários itens, estou criando uma classe base. E então, a partir dessa classe base, posso criar os itens. Isso é chamado de plantas infantis, mas falaremos sobre isso na próxima lição. Por enquanto, quero que você entre na base de itens. E dentro daqui, vamos adicionar um componente. E vamos procurar uma malha estática. E uma malha estática serve apenas para que possamos adicionar nossos itens que temos em nossa pasta. E vamos chamar isso de um item. Ok? E você pode ver aqui para a malha estática, podemos adicionar uma malha, por exemplo, podemos adicionar a banana como um item e assim por diante. Mas agora você está na classe base e nós realmente não queremos atribuir nada aqui. Vamos fazer isso mais tarde. Eu só queria criar este item, componentes de malha estática. Então, vamos adicionar outro, clicando neste item. E então vamos adicionar, e vamos adicionar uma colisão. Vamos adicionar uma esfera de colisão, esfera de colisão selecionada. Vou chamá-la de esfera de colisão. E a razão pela qual estou adicionando este é porque precisamos interagir com o item. Então imagine se formos para itens de ativos, imagine se esse item está no mundo, então precisamos de uma esfera de colisão. Porque precisamos saber quando o jogador está realmente colidindo com esse item para que possamos perdê-lo ou não. Vamos deletar esse por enquanto. E para o item, vamos voltar aqui. Vamos voltar à colisão aqui. Então, para a colisão, para este item, eu não quero que ele tenha colisão, então vamos remover a geração de eventos de sobreposição. Vamos remover esse. E digamos que aqui na predefinição de colisão, sem colisão. Vamos compilar. Vamos agora voltar para a esfera de colisão. Agora, para a esfera de colisão no topo, vou apenas aumentar o raio para 100s. Então você pode olhar e ver aqui se você voltar para os itens e colocar o item baseado no nível, você pode ver que esse é o raio no qual o jogador pode interagir com o item. Então, se você aumentá-lo, esse jogador poderá interagir com o item quando o jogador estiver dentro dessa esfera. Assim, você pode simplesmente ajustar o raio conforme desejar para o seu jogo. Eu só queria colocá-lo em 100 agora. Vou deletar este do nível e novamente descer para a colisão. E aqui dentro, queremos gerar eventos de sobreposição, então isso está correto. Este também está correto. E aqui na predefinição de colisão, eu só quero que meu jogador interaja com essa esfera. Eu não quero que nada mais faça isso. Então, vamos dizer, digamos, o cliente aqui em cima e a predefinição de colisão. Vou ignorar tudo, exceto meu lago, que é minha camada. Vamos compilar. E antes que esqueçamos, vamos até aqui na base de itens da BP nos padrões da classe. E aqui em cima, se você rolar para cima, você precisa clicar neste, porque lembre-se de que estamos no modo multijogador e replicamos significa que, novamente, como antes, você replica as informações para o cliente. Porque aqui, quando você joga como servidor e aqui temos o cliente. Portanto, se você não replicar o projeto , o cliente não poderá vê-lo. Só o servidor, que é esse cara aqui. O servidor poderá ver o item, mas os clientes, todos os clientes que o conectarem a esse servidor, não poderão ver o item. Isso é o que significam réplicas. É replicar informações do servidor e enviá-las aos clientes que eles possam ver essas informações. Agora, queremos que os clientes vejam esse item. Então, vamos clicar nas réplicas e também replicar o movimento do item caso o item se mova. E isso foi tudo para a base de itens. Então, vamos encerrar isso e passar para a próxima lição. 19. 4.02 Introdução aos modelos infantis: Agora que criamos nossa base de itens, vamos agora falar sobre plantas infantis. Então, vamos para a pasta Blueprints novamente e ir para os itens. Agora, para esta base de itens aqui, a razão pela qual eu criei uma classe Blueprint de itens básicos é porque queremos criar plantas para crianças a partir desta. E eu vou explicar o que é isso tão bem, neste você pode clicar com o botão direito aqui em cima, você pode ver algo chamado classe Create Child Blueprint. Então, clicando neste, vou chamá-lo de algo aleatório. Agora temos uma classe Child Blueprint e você pode passar o mouse sobre ela e ela diz que a classe principal é a base do item BP. Então, o que isso significa? Isso significa que, se eu fizer alguma edição na base do item, ela herdará essas edições e as aplicará a todas as crianças. Então, deixe-me clicar com o botão direito do mouse novamente e criar outra classe infantil do Blueprint. Apenas certifique-se de que é baseado no item em que você está fazendo isso. Então, fazendo isso aqui, vou chamar de algo aleatório novamente, clique com o botão direito do mouse na taxa básica do item para outra criança e chamando-a de algo novamente, ok? Agora temos três filhos. Temos esse, esse e esse. E eles são filhos da base de itens. Agora, se eu entrar em uma das classes do Child Blueprint, você pode ver que ela já herda o item Static Mesh Component que criamos na base do item e também herda a esfera de colisão. Lembre-se de que esses são componentes que criamos dentro da base do item. Agora, com base em itens, se eu criar alguma coisa, por exemplo, eu quero criar uma variável e dizer, essa bolha de Troy ou qualquer outra coisa, algo aleatório? Este é Troy Abel e eu clico em compilar. Agora, se eu clicar em qualquer uma das plantas infantis, agora você pode ver nos últimos padrões. Agora eu posso ver que essa variável é capaz de ser destruída, mesmo que eu não tenha nenhuma variável dentro daqui. Isso ocorre porque ele está herdando todas as coisas que você cria dentro da base do item. Então, agora eu posso realmente dizer se está destruído ou maluco. E isso é muito útil porque agora todas as classes do Child Blueprint têm a mesma funcionalidade. Eu posso configurá-los para destruir bolhas ou nozes. Por isso, fazemos isso para acelerar a velocidade do desenvolvimento do seu jogo. Então, em vez de entrar em cada um e transformar um booleano duplo destruído aqui, making é destruído como booleano. Então, em vez de fazer isso 100 vezes, podemos fazer isso apenas uma vez dentro da planta principal aqui. E então todas as crianças herdarão essas configurações. O mesmo vale para personagens. Digamos que você esteja criando muitas skins, muitas skins de jogadores. Obviamente, você deseja criar uma classe principal, como uma pai/mãe, uma classe de modelo para a skin e, em seguida, criar aulas de modelo para crianças a partir dessa classe básica de pais de skins. A razão pela qual você faz isso novamente, se quiser alterar uma configuração específica para todas as 100 capas que você criou, basta fazer isso uma vez na classe principal do Blueprint, a base aqui, e ela a herdará, todos esses filhos também a herdarão. Ok. Então foi isso. Muito, muito básico. Então, deixe-me ir em frente e excluí-los aqui. E com esse conhecimento, agora estamos prontos para criar todos os itens. 20. 4.03 Criando os itens: Ok, vamos em frente e criar todos os itens. Deixe-me clicar com o botão direito na base do item. Criou a classe Child Blueprint. E para a primeira, vou chamá-la de banana BP. E nos itens que vamos fazer novamente, você pode clicar nos ativos aqui em cima, itens e visualizá-los aqui. Esses são todos os itens que queremos fazer para que possamos saquear e ter em nosso inventário. Deixe-me voltar aos itens. Clique com o botão direito do mouse na base do item novamente e vamos criar o sabor BP. com o botão direito do mouse novamente com outra criança, faca EP , outra, e vamos chamar essa maneira de BP de oceano. Outra nuvem de projeto. Apenas certifique-se de que a classe principal seja a base do item. Certifique-se de não clicar em nada errado aqui. Portanto, a taxa básica do item, plano, a pressão arterial se encontram, e a última são as poções de resistência. Então, aqui intitulado VP stamina ocean. Tudo bem, agora que temos todos os itens, vamos abrir todos eles aqui. Então, a alavanca da banana, manipulação da faca, a carne e a resistência, as poções. Mas vamos primeiro até a banana, clique no item. E aqui na malha estática você tem que atribuir a malha estática a ela. Então, vou pesquisar aqui a banana selecionada aqui, e aqui está. Bem, agora ele foi adicionado aqui como o item. Ok, vamos compilar. Vamos até o cutelo como se fosse um item. Vá em frente e selecione o cutelo. Basta procurá-lo, compilar. Agora, pegue o item da faca e procure a faca. Esses são o mesmo processo repetidamente. Vamos até o item de ação da menopausa, procurar por uma poção senhorial e compilar. Vá para o próximo. item encontra a compilação e a última, poções de resistência e clique no item Static Mesh. Vá em frente e procure por resistência e selecione esse movimento de resistência. Agora, vamos clicar em Arquivo e Salvar tudo, por precaução. Ok, então foi isso. E antes de acabarmos com isso, eu realmente quero fazer mais uma coisa. Vamos fechar tudo. Eu quero criar uma variável chamada nome do item e vamos usá-la mais tarde. Não vamos usar isso agora. Mas, novamente, lembre-se de que você não precisa entrar em cada uma dessas classes do Child Blueprint e criar uma variável chamada name. Você pode simplesmente ir até a base do item. E, na verdade, vamos deletar esse por causa disso, nós também fizemos isso para ver a herança. Então, vamos criar outra variável agora. Vamos chamá-lo de nome do item. E para o nome do item, o tipo de variável, vamos transformá-lo em uma string. Clique em compilar. E como você sabe, uma string é apenas uma linha de texto, então podemos realmente dar a ela um nome de item. E talvez se você esqueceu, por que não escolhemos textos em vez de uma sequência de caracteres? A razão pela qual escolhemos uma string é, lembre-se, um texto é a mesma coisa, exceto que você pode ver essa bandeira aparecer ao escolher o texto. E isso ocorre porque o texto é localizável e isso significa que você pode traduzir o que você escreve aqui para outros idiomas aqui no Unreal Engine. Então, na janela, eu acredito que é, ou na verdade está nas ferramentas. Aqui você pode ver que temos algo chamado painel de localização. E aqui você pode traduzir seu jogo para diferentes idiomas, por exemplo, alemão, japonês, chinês, árabe, qualquer coisa. Você pode traduzir essas variáveis de texto. No entanto, se você escolher uma sequência de caracteres e quiser traduzir seu jogo mais tarde, não poderá fazer isso. Você precisa selecionar textos para traduzir o texto que você deseja escrever aqui. Então, eu não quero traduzir nada. Na verdade, esse nome de string será usado apenas como um ID. Então, vamos salvar tudo. Eu só queria ser uma corda. Agora, criamos esse nome de item dentro da base do item. Então, agora cada criança aqui tem esse item chamado variáveis. Então, eu vou abrir todos eles. No primeiro. Você pode ver aqui, diz o nome do item. E se eu simplesmente abrir o editor de plantas completo para mostrá-lo a você, e os padrões da classe para esse filho do blueprint, você poderá ver a variável do nome do item em pares. Agora, para o nome do item aqui, podemos escrever banana. Esta é a compilação da banana e, para o caule e uma poção, vamos chamá-la de resistência, oceano. Assim como para a carne, vamos chamar de macarrão. E para a menopausa, na verdade, a porção de estímulos aqui. E para os homens e a poção, vamos chamá-la de meio oceano. E para a faca, clique nos padrões da classe, certo? Knife, compile. E para o cutelo, vamos escrever a alavanca. Ok, e lembre-se de que essa visualização aparece com este botão aqui em cima. Isso ocorre porque a classe The Blueprint está vazia e é por isso que está sendo exibida assim. Ok, agora atribuímos todos os nomes. Não vamos usá-lo agora, mas vamos usá-lo muito, muito em breve e você verá por que eu criei essa variável de nome. Vamos encerrar tudo agora e passar para a próxima lição. 21. 4.04 Introdução às estruturas: Tudo bem, agora que criamos todos os itens, estamos realmente prontos para criar as informações dos itens. Então, o nome do item, a miniatura, a imagem que aparece dentro do inventário quando você alude ao item, à categoria do item e assim por diante. Até todas as informações de um único item, precisamos definir todas as informações. Então, antes de fazermos isso, podemos realmente fazer isso dentro de estruturas. Vamos às plantas. E aqui Vamos clicar com o botão direito do mouse e criar uma nova pasta. Vamos chamá-lo. Você pode chamar as estruturas, mas eu geralmente chamo isso de estruturas. Isso depende de você. Dentro daqui. Vamos clicar com o botão direito do mouse. Vá para plantas e selecione esta chamada estrutura ou esta. Eu geralmente uso S t como prefixo para estruturas. E vamos chamá-la de informações do item porque queremos criar as informações para o item. Clique duas vezes nele e você verá que essa é a aparência da minha estrutura. Portanto, uma estrutura é apenas uma coleção de variáveis. Então, em vez de ir até os itens e, por exemplo, aqui na base do item. Em vez de ir aqui e criar variáveis, por exemplo, se o item for empilhável, ou talvez você queira ter a miniatura do item, ou talvez você queira ter a categoria para os olhos que você pode ver. , ele aborda muitas Aqui, ele aborda muitas variáveis e às vezes fica confuso, então geralmente não fazemos isso. Deixe-me excluí-los aqui. Mas você pode fazer isso: você pode criar uma estrutura dentro daqui. Você pode criar todas as variáveis. Por exemplo, eu queria o nome do item, quero, por exemplo o valor da moeda deste item se eu quiser vendê-lo e você pode escolher o tipo dessa variável, por exemplo , para as moedas, posso selecionar um flutuador e, para o nome, posso selecionar talvez um texto porque quero traduzi-lo mais tarde. Agora temos todas essas variáveis dentro de uma estrutura. Então, o legal agora é que, se eu for para o item baseado em itens, por exemplo eu posso criar uma nova variável aqui como o tipo de variável. Eu posso digitar o nome da estrutura. Então, SC, informações do item e eu posso selecioná-las aqui e salvar. E agora você pode ver se eu clico na minha variável. Agora eu tenho todas as informações aqui para este item. Assim, posso ter as informações do item dentro dessa estrutura. E se eu clicar em uma das plantas do meu filho, posso ver aqui os padrões da classe. Agora você pode ver todas essas informações, o nome do item, o valor da moeda e quaisquer variáveis adicionadas. Então, muito legal. As estruturas são apenas uma coleção de variáveis que você define aqui dentro. Ok, então vamos excluir tudo isso por enquanto, e vamos excluí-lo aqui do item baseado em itens, porque vamos criar algo muito mais legal do que isso. Deixe-me salvar tudo. Agora que você sabe o que é uma estrutura, vamos criar a estrutura de informações do item. 22. 4.05 Estrutura de informações de item: Tudo bem, então vamos criar a estrutura de informações do item. Vamos clicar nas estruturas. Agora vamos abrir a estrutura de informações do item. E dentro daqui o que queremos é o nome do item. Vamos criar uma nova variável. Queremos uma miniatura para a imagem que aparece dentro do inventário quando aludimos a Dyson. E o tipo aqui é uma textura 2D, o que significa apenas uma imagem. E selecione-o aqui, referência do objeto. E vamos criar uma nova variável. E queremos, por exemplo , uma descrição do item. Você não precisa. Depende do jogo que você está criando. Alguns jogos não têm uma descrição, mas vamos adicioná-la aqui. Não sei se precisamos ou não, mas talvez precisemos. Então, vamos criar uma descrição para o item. Podemos definir a categoria do item. Então, vamos escolher esse como o tipo de variável. Na verdade, estou verificando se esqueci aqui. Então, nas enumerações, ainda não o criamos. Portanto, na enumeração, você pode realmente criá-la, se quiser. Como exercício na enumeração, eu quero uma enumeração com as categorias do item. Portanto, temos a categoria armas, alimentos e poções que podem prosseguir , criá-la e adicioná-la à estrutura, se desejar. Agora vamos tentar fazer isso juntos agora, vou clicar com o botão direito do mouse aqui, acessar as plantas e selecionar a enumeração. Esta é uma categoria de item. Eu vou abri-lo e entrar nesta lista. Portanto, lembre-se de que uma enumeração é apenas uma lista de itens. Então, aqui eu quero uma lista de categorias. Eu vou dizer armas. O próximo que vou adicionar é comida, e o terceiro é oceanos. Portanto, temos essas três categorias de itens. E vamos voltar às informações do item agora para a categoria, vou selecioná-la aqui e dizer categoria do item E. Então, como você chama a enumeração selecionada aqui. Na próxima, vou dizer que enviaria uma aula. E a classe do item serve apenas para que possamos gerar o item no mundo se o retirarmos do inventário. Então, vamos selecioná-lo aqui e pesquisar a base do item. Lembre-se de que criamos a base do item. Agora, esta é a classe do item selecionada aqui e selecione a referência da classe. Muito importante. A referência de classe, diferente da referência do objeto, é que a referência de classe é usada quando você gera coisas. Então, queremos gerar o item quando o retiramos do inventário, então precisamos da classe dele. Agora vamos adicionar outro e chamá-lo de está em summable. Então, podemos beber ou comer esse item? E booleano, isso é apenas uma pergunta de sim ou não. Então, é um booleano e o outro é empilhável, então é esse item empilhável em nosso inventário, podemos ter dois itens e o mesmo slot, três itens e assim por diante. E o último, vou dizer o tamanho máximo da pilha. Então, quantos itens podemos ter em um espaço de inventário, por exemplo, podemos ter 99 bananas antes de criar outra, outra pilha. Então, todo esse tamanho do Max Stack é que é apenas um número inteiro. Tudo bem, agora terminamos com as informações do item. E em vez de adicionar as informações do item ao gelo e à base como uma variável, na verdade vou fazer isso por meio de uma tabela de dados. Então você pode ver aqui, eu não estou me escondendo com o conhecimento. Na verdade, estou tentando mostrar como faríamos isso profissionalmente em um jogo. Eu não quero fazer isso da maneira mais fácil. Na verdade, vamos aprender sobre tabelas de dados e mostrarei uma maneira muito legal de como adicionar a estrutura. 23. 4.06 Introdução às tabelas de dados: Tudo bem, agora vamos falar sobre tabelas de dados. Então, na pasta Blueprints, vamos clicar com o botão direito do mouse, criar uma nova pasta e chamá-la de tabelas de dados. Dentro daqui, vamos clicar com o botão direito do mouse, ir para diversos. E aqui podemos selecionar algo chamado tabela de dados. Você pode ver aqui uma importante tabela de planilhas que também é chamada. Então você pode clicar aqui. E agora temos que selecionar qual estrutura você deseja usar. Portanto, você precisa de uma estrutura antes de podermos criar uma tabela de dados. Lembre-se de que já fizemos nossa estrutura na lição anterior. Então, agora podemos seguir em frente e selecionar nossa estrutura de informações do item. E agora podemos clicar em OK. Para essa tabela de dados, podemos chamá-la d t informações do item, tabela de dados, informações do item. Agora vamos abrir essa tabela de dados. E isso é o que parece, muito, muito simples. Está apenas mostrando informações para você. Você pode ver todas as variáveis que você criou dentro da sua estrutura aparecerem aqui. E agora está vazio. Assim, você pode clicar em Adicionar se quiser e ver o que acontece quando você clica em adicionar. Um item será adicionado à tabela de dados aqui. Então você pode ver se eu continuar adicionando itens, vou continuar adicionando itens aqui embaixo. O que você pode fazer aqui, clicando no primeiro, por exemplo, você pode ver cada item do seu jogo, você pode definir o nome dele, a miniatura dele. Podemos definir a descrição do item, a categoria do item, o copo, por exemplo, é a banana e assim por diante. Assim, você pode ver que você pode definir informações para cada item e tê-las de uma forma bem estruturada dentro de uma tabela de dados. Agora, isso é basicamente, isso é o que é uma mesa. Ele contém apenas informações. Então, temos a estrutura. E com essa estrutura, criamos uma tabela de dados para que, para cada item, possamos realmente especificar as informações aqui. E vamos fazer isso de uma forma muito mais fácil. Normalmente não o usamos dentro daqui. Então, em vez de tabelas Delta, geralmente não entramos aqui e escrevemos o nome, então gostamos da miniatura e assim por diante. Vou te mostrar uma maneira mais completa de fazer isso. Então, vamos seguir em frente e clicar em Excluir para cada um deles aqui, remover, remover, remover. Então agora está vazio novamente. E vamos salvar tudo. Vamos encerrá-lo e passar para a próxima lição e mostrarei como podemos adicionar as informações para o item. 24. 4.07 Tabela de dados: Ok, então agora eu quero que você entre no Google Drive. Se você não tiver uma, crie uma conta. Ou você pode usar o Excel se tiver o Excel, mas geralmente é a maneira mais fácil de usá-lo aqui dentro, que o Google Sheets, quando você tem uma conta aqui no Google, vá para o Google Drive, o que você pode fazer aqui. E, na verdade, aqui em cima. E você pode selecionar Drive. Quando você estiver dentro do Google Drive, basta clicar com o botão direito aqui e criar um novo Google Sheets. E as planilhas do Google, vou chamá-las de tabelas de inventário de RPG, caso tenhamos um múltiplo. Agora temos esse aqui, e eu vou deixá-lo um pouco mais bonito. Depende de você como você deseja criar o seu. Tudo bem, então agora eu estilizei o meu. Eu só uso este no centro. Eu uso esse e uso esse aqui. Ok? Então, outra coisa muito importante, depende de você como você quer projetá-la. Agora, aqui em cima, queremos escrever um documento de identidade. Então, aqui em cima eu vou fazer todos eles fugirem. Temos um ID e agora você realmente precisa escrever cada variável que você escreveu aqui nas informações do item de estrutura. Então, nós temos um ID, você precisa ter isso para começar. E então temos o nome, depois temos a miniatura, temos a descrição. E lembre-se de escrevê-las exatamente como você as escreveu aqui em sua estrutura. Por exemplo, se você tem um espaço aqui, precisa ter um espaço aqui também. Portanto, escreva-os exatamente como você os escreveu na categoria de estrutura. Temos a perda do item, o está no celular e temos o que é empilhável e o último, o tamanho máximo da pilha. Ok, então agora temos todos eles aqui. E para o ID, a razão pela qual precisamos um ID é porque, mais tarde, no jogo, dizemos ao motor que fornecemos um ID aqui e o ID, se você voltar à sua base de itens, lembre-se de que na base do item, você criou essa variável de nome do item. Então, isso realmente será RID aqui. A partir disso, vamos realmente diferenciar o motor. Então, por exemplo, para esta banana, vamos dizer ao motor de qual linha vamos pegar essas informações. Então, por exemplo, se você tem a ideia de banana, ela vai levar essa informação aqui. Ele sabe que precisa olhar para essa linha em que as ideias se espalham. E ele conhece a miniatura da banana, a descrição e assim por diante. É por isso que criamos o nome desse item e escrevemos o nome do item em todas as plantas infantis. Tudo bem, então, na verdade, precisamos adicionar cada item aqui para que eu não me lembre exatamente. Então, deixe-me minimizar isso e abrir a planilha do Google assim. E agora podemos escrever uma alavanca de banana. próxima é Knife, Maneira, Oceano e Carne e Resistência, Oceano. E lembre-se de escrever o ID exatamente como você escreveu o nome do item aqui para cada um dos seus itens. Então lembre-se de escrever a mesma coisa aqui. Portanto, ele realmente sabe quais informações deve extrair. Então, de qual linha ele deve extrair. Vou copiar tudo isso e colá-lo. Aqui está a miniatura. Você pode acessar a interface do usuário e os ícones. Eu incluí algumas das miniaturas para você. Então, para a banana, você pode clicar com o botão direito do mouse ir para Copiar referência. E agora você pode ir aqui e colar essa referência. Então, isso é o que parece. Parece estranho, mas agora o mecanismo sabe onde está esse ícone banana porque você especificou a localização dele. Eu farei a mesma coisa com o cutelo. Você pode clicar com o botão direito do mouse na referência inteligente da API. E agora eu posso colá-lo aqui. Mas a referência da faca cole aqui. E eu só vou clicar em Não para este. E para o oceano da menopausa, sua referência e também para a carne. E para o oceano de resistência. Tudo bem, vou preencher o primeiro aqui e depois você pode fazer o resto, senão vai levar uma eternidade. Para essa descrição, você pode simplesmente adicionar uma descrição para seus itens, por exemplo, para a banana, eu posso escrever uma banana deliciosa ou algo parecido. Para a categoria, Lembre-se, na categoria de itens de enumeração, temos a categoria de armas, alimentos e poções. E isso também é o que você tem nas informações do item. Lembre-se de que, para a categoria, você usa essa enumeração. Portanto, pode ser um desses três agora. Se voltarmos, por exemplo, a banana é a, é comida, por exemplo, da mesma forma que a poção é poção. Lembre-se de escrevê-lo exatamente como você o escreveu aqui. E para a classe do item, a maneira de obter essa referência não é acessando aqui e os itens, clicando com o botão direito do mouse e dizendo copiar referência. Porque se você fizer isso, na verdade não é uma classe de item. Este é um ator de itens. Então, vamos excluí-lo daqui. A maneira como eu costumo fazer isso é acessando uma tabela de dados aqui. E eu vou fazer um item aleatório aqui. E vamos selecionar uma classe de item, por exemplo, a banana. Vou clicar com o botão direito do mouse aqui e clicar em Copiar. Agora posso voltar às minhas planilhas do Google e colá-las aqui. E essa é a correta para classes de itens. Então, aqui para a última referência aqui, correta é se você ver a classe gerada pelo blueprint , esta é a correta. Ok, agora temos a banana aqui e o que você pode fazer é copiar isso, colá-lo aqui embaixo, e você pode simplesmente mudar o nome da banana para cutelo. E esse aqui também. Então, duas vezes alavanca, alavanca. Ele pode fazer isso porque o resto é consumível. É só um sim ou não. O que eu costumo fazer nas Planilhas do Google é acessar Formatar e fazer a formatação condicional. E em vez de aqui, eu seleciono para a regra de formato, eu seleciono o texto que está exatamente aqui. Podemos dizer falso. E apontará para vermelho, ou a cor será vermelha se for falsa. E vou adicionar outra regra e mudá-la para verdadeira. E depois mude a cor para verde, se for verdade, assim. Agora eu posso ver se eu escrevo falso aqui , fica vermelho, pirita, verdadeiro, fica verde. E isso é para booleanos aqui. Sempre que você pega um booleano, ele diz verdadeiro, assim. Sempre que você o desmarca, ele diz falso. Então, isso é muito legal. Agora, deixe-me excluir isso e, em vez disso, vou clicar em Inserir e marcar uma caixa de seleção. Eu posso ver nesta caixa de seleção que, se estiver desmarcada, está vermelha. Se estiver marcado, o que é verdade. Na verdade, é assim, verde. Na minha opinião, é muito mais legal . Você pode simplesmente arrastar isso em todos os seus itens desse jeito. Na verdade, deixe-me transformar em falso antes de fazer isso, arrastando-o para todos os itens desse jeito. E eu acho que isso é muito mais limpo. Ok. Agora que você preencheu todas as informações de cada item, clique em Arquivo e clique em Baixar e baixá-lo como um arquivo CSV. Agora vou clicar aqui e mostrar na pasta aqui na minha pasta Downloads. Agora eu posso renomeá-lo e você pode renomeá-lo com o mesmo nome exato que você deu à sua tabela de dados. Então, chamamos as informações do item DT. E agora eu posso abrir meu motor e aqui vou fechar tudo. Vou até minha tabela de dados. E aqui o que eu quero que você faça é importar é que ele seja capaz de acessar seu motor. Então, o que você pode fazer é clicar e arrastar isso para essa tabela de dados. E agora vai dizer Importar. Está tudo bem, legal. Vamos clicar aqui e ver se temos algum erro. Agora posso ver uma maneira muito legal de preencher todas as informações. Agora temos, por exemplo, para a banana, o nome, a miniatura, a descrição, a categoria, a classe do item. Se for consumível e empilhável e do tamanho máximo da pilha, então os temos para cada item. Essa é a maneira mais fácil de fazer isso aqui na tabela de dados. E o motivo também é se você tem não programadores em sua equipe, por exemplo, designers de jogos e qualquer outra coisa. É muito mais fácil para eles simplesmente alterar as informações das planilhas de dados e baixá-las aqui e simplesmente importá-las para o jogo. Dessa forma, eles alteram automaticamente todas as informações dos itens. Então, muito legal. Se você tem um designer de jogos que não sabe nada sobre programação, pode simplesmente fazer essa alteração nas informações, por exemplo, você pode ter algo como o valor da moeda e quanto custa definir quanto custa comprar esses itens na loja. E as pessoas podem simplesmente mudar os valores aqui. Informações importantes, e elas serão alteradas automaticamente aqui. Tudo bem, agora que isso foi feito, vamos criar uma função de biblioteca onde mostrarei como extrair informações de cada linha. 25. 4.08 Item Info Função de biblioteca: Tudo bem, então vamos clicar na pasta de abertura azul. Vamos clicar com o botão direito do mouse e criar uma nova pasta chamada bibliotecas. E dentro daqui, vamos clicar com o botão direito. Vá para blueprints e selecione aquela chamada, Vamos ver aqui, biblioteca de funções de blueprint, uma biblioteca aqui e chame-a de biblioteca de funções PP, porque só podemos ter uma. A biblioteca de funções, se você abri-la. É basicamente uma biblioteca de funções, então podemos ouvir que você pode simplesmente adicionar novas funções. Basicamente, tem uma biblioteca de funções que você cria aqui. O legal de uma biblioteca é que você pode usá-la globalmente. Então, por exemplo, aqui, digamos, haha, eu não sei. Vamos apenas chamar essa função hahaha. E agora no player, podemos simplesmente ir aqui até o jogador agora, clicar com o botão direito do mouse e dizer, hahaha. E agora podemos ver que podemos realmente chamar essa função da biblioteca de funções e podemos usá-la aqui. Portanto, tudo o que criamos é uma biblioteca de funções que podemos usar globalmente em qualquer projeto que desejarmos. Então, só para você saber, seu jogo pode ficar muito lento se você tiver centenas de funções aqui. Portanto, é uma má prática simplesmente criar funções aqui em vez de seus respectivos planos, se você não precisar delas. Mas para as informações do item, as informações do item, na verdade precisamos delas em vários modelos. Então é assim que você precisa usar bibliotecas de funções. Você precisa pensar quantas vezes você vai usar essa função se for usá-la no player e no controlador do player, talvez você a use em outra classe de Blueprint. Se você for usá-lo várias vezes, é muito melhor simplesmente colocá-lo na biblioteca de funções. Portanto, você não precisa fazer isso repetidamente em todas as aulas do Blueprint. Por aqui, vamos criar uma nova função. Vamos clicar em F2 para mudar o nome. Vou chamá-lo de obter informações do item. Para obter informações sobre o item, o que eu quero fazer é clicar com o botão direito do mouse aqui e dizer obtém uma linha da tabela, linha tabela de dados. Ok? Então, para esta aqui, temos que selecionar de qual tabela de dados estamos falando? Estou falando sobre as informações do item do DDT. E qual é o item ou qual é o nome da linha. Agora você pode ver aqui, quando selecionamos um nome de linha, por exemplo, a faca, e executamos essa função. Ele sabe que precisa obter informações da fileira de facas aqui. Então, se eu abrir meu Google Drive novamente, ele obterá informações desse ID, que é a faca aqui. E então ele conhece todas essas informações que aparecem aqui. Porque se você pegar aqui e dizer pausa, então você divide essas informações em todas essas variáveis que você criou. Então, se selecionarmos o nome da linha faca, agora ele saberá qual é a miniatura da faca, a descrição dela, a categoria, porque você definiu todas elas aqui dentro da sua tabela de dados no Google Drive. E a razão pela qual ele sabe qual nome de item de linha você tem é porque em cada item, lembre-se de que em cada item, você definiu essa variável chamada nome do item. Então, para a carne , por exemplo , vai pegar isso que você escreveu aqui e o nome do item se encontrar. Vamos passar por aqui. Lembre-se de que essa é uma variável de string. Você vai para a mesma base. Criamos isso como uma variável de string aqui. E as informações do item, vou apenas fazer uma entrada de string que podemos usar posteriormente para colocá-la aqui. E vamos chamá-lo de nome do item. Ok, então nós temos esse. E agora, se você for até a tabela de dados, haverá um pequeno erro se não fizermos isso. Então, na tabela de dados, você vê aqui que o id não tem espaços. Então, mesmo que você coloque um espaço no seu Google Drive ou no Google Sheets, você pode ver aqui que você tem um espaço, você tem um espaço, mas o espaço é automaticamente removido aqui. Então, por exemplo, para a poção, se eu for até o item poções de resistência e ver aqui que você escreveu um espaço. Mas para as tabelas de dados, elas não podem ter espaços no ID. Dessa forma, precisamos realmente fazer algo porque todos os seus itens têm espaço. Esta é a tabela de dados, não tem espaços e vai te dar um dinheirinho e você não sabe do que está falando. Então, precisamos remover os espaços de todas essas maneiras de fazer isso aqui na função, basta sair daqui e dizer substituir. Então, vamos pegar o item do nome. Vamos substituir, basta escrever como espaço aqui na frente. Só um espaço. E foi isso. Então, ele substituirá todos os espaços por nada, que significa que ele remove essa base. E então ele vai receber o nome da linha. Dessa forma, podemos remover todos os espaços que criamos dessa forma. E vamos deletar esse aqui por enquanto e dizer nó de retorno. E arraste isso para o retorno agora para criar automaticamente uma saída aqui com as informações do item. E vamos chamar isso de informação de um item. Então essa era a função que precisamos para criar, compilar e salvar tudo. Então, o legal está aqui, por exemplo no player, agora podemos dizer obter informações do item. Essa é a função que acabamos de criar. E você pode ver aqui que realmente não precisamos conectar pinos a partir daqui, porque no Blueprint geralmente você os conecta aqui porque está configurando informações. Mas esses, esses verdes, como você pode ver aqui, eles não têm isso e isso é porque eles estão apenas obtendo informações. Eles não estão definindo nenhuma informação. Mas não precisamos passar por isso. Então, para obter informações aqui, vamos voltar para a biblioteca de funções. Eles podem obter informações do item, clicar em puro e agora compilar. E vamos voltar para o jogador. Agora podemos dizer obter informações sobre o item. E você pode ver que aqui está, em vez disso, ele o transforma em uma função get. Então é por isso que você pressiona puro. Ok, agora podemos obter as informações desse item. Depois, basta especificar qual item estamos falando. Vamos fazer isso mais tarde. Então, vamos fazer isso dinamicamente por meio do inventário dependendo do item que você selecionar ou saquear do chão. Então, ele vai lhe dar o item, por exemplo aludimos ao caule em uma poção do solo. Ok, vai passar por isso aqui. Vai colocar o nome do papel aqui, poções de resistência. E agora ele já sabe de quais informações você está falando , porque você definiu todas essas informações aqui. Então, na saída aqui, se você arrastar e disser break, agora ele conhece a resistência, as poções, categoria de descrição em miniatura e assim por diante. Então, coisas muito, muito legais. Te vejo na próxima aula. 26. 5.01 Criando o componente de inventário: Para criar o componente de inventário, vamos para a pasta Blueprints. E dentro daqui, vamos clicar com o botão direito do mouse e criar uma nova pasta, e eu vou chamá-la de componentes. Dentro desta pasta, vamos clicar com o botão direito do mouse e clicar na classe Blueprint. Então, aqui o que vamos criar é esse componente de ator é basicamente o componente de inventário que estamos criando. Então, vamos clicar nele. E eu vou dar a ele um prefixo de AAC para o componente do ator e chamá-lo de inventário. Tudo bem, então, se você clicar duas vezes nele, terá a aparência de uma planta comum , como você está acostumado agora. Então, por enquanto, não vamos trabalhar aqui dentro deste. Vamos ver os planos e realmente encontrar o jogador. Então, dentro da pasta do jogador e do player, e dentro do player, agora podemos adicionar os componentes do inventário. Então, aqui nos componentes, clique em Adicionar e pesquise o inventário de AAC que você acabou de criar. E aqui está. Agora temos o inventário. Mas, no momento, não podemos realmente fazer muita coisa com isso. Então foi isso para esta lição, apenas adicionando, criando e adicionando esses componentes de inventário. Então, vamos seguir em frente. 27. 5.02 Estrutura de fenda de inventário: Antes que possamos continuar trabalhando com o componente de inventário, é criado. Vamos seguir em frente e criar mais duas estruturas. Estamos perdendo essa última estrutura na estrutura da categoria. Então, vamos para a pasta Strokes. Aqui criamos as informações do item. Agora vamos clicar com o botão direito do mouse aqui novamente e ir para plantas e selecionar a estrutura. A este chamaremos de slots de inventário. E vamos entrar aqui, saber qual é a estrutura dos slots do inventário. Basicamente, ele contém informações sobre o que está dentro desse espaço de inventário específico. Lembre-se de que aqui na interface do usuário criamos esse slot de inventário. Então, basicamente, temos uma estrutura que contém informações sobre o que o slot específico no inventário contém. Então, primeiro, ele contém o item. Então, o que quer que tenhamos carregado e o item, se você clicar aqui, lembre-se de que criamos uma estrutura chamada informações do item. Portanto, ele contém esse item dentro dos slides. Em segundo lugar, ele também contém a quantidade de itens desse item, e isso é apenas um valor numérico inteiro. Em seguida, ele contém o próprio widget. Então, vou chamá-lo de slot de inventário. Em seguida, selecionando a interface do usuário, criamos o slot de inventário WB, para que ele contenha a própria variável do slot de inventário. E como última coisa, quero adicionar um índice de slots, que podemos usar mais tarde. Não se preocupe com isso por enquanto. Mas o índice de slots é exatamente de qual slot de inventário estamos falando? Porque lembre-se, quando você faz um inventário, você tem muitos, muitos espaços no inventário. Portanto, é sempre bom fornecer a eles um índice que você possa usar posteriormente, se necessário. E foi isso para o espaço de inventário. Então, vamos passar para a próxima lição. 28. 5.03 Estrutura e tabela de dados de categoria de inventário: Vamos agora criar a estrutura para as categorias. Então, voltando para a pasta de estruturas, clique com o botão direito novamente e vá para a estrutura de esquemas. E vamos chamar isso de uma categoria de inventário. Vamos abrir esse aqui em cima. Esse é muito simples. Ele simplesmente conterá que categoria estamos falando. E, novamente, temos essa enumeração chamada categoria do item, esta aqui, categoria do item. E a segunda coisa que precisamos é do ícone da categoria. Então, qual é a aparência? Oh, ícone da categoria. E temos alguns ícones para a categoria. Agora, esse tipo aqui é uma textura 2D. Textura 2D, simplesmente uma imagem. Essa única textura 2D aqui nos ativos, na verdade, aqui embaixo na interface do usuário, temos ícones e ícones para as categorias. Então, por exemplo, a categoria de armas é essa faca aqui temos a categoria e o próprio ícone. Em seguida, precisamos criar uma tabela de dados para ela, assim como fizemos antes. Então eu vou abrir isso aqui. Esta é a tabela de dados de informações do item. E, na verdade, aqui embaixo eu vou chamá-lo de informações do item DT. Vou criar um novo clicando no sinal de adição aqui embaixo. Vou chamar isso de uma categoria de inventário DT. Eu só vou arrastar essas mesas. Esses campos são um pouco mais amplos aqui? Simples assim. Ok, então, como antes , aqui temos um id. E lembre-se, pela estrutura que você criou, temos a categoria e depois o ícone da categoria. Eu vou torná-los ousados aqui. Então, para o ID, basta escrever o nome da categoria. Lembre-se de que temos armas, temos comida e temos quocientes. Vou copiar isso de volta aqui. Novamente, lembre-se de escrever isso exatamente como você escreveu aqui na enumeração, caso contrário não funcionará. Portanto, na categoria de item de enumeração do numerador, essas são suas categorias. Portanto, lembre-se de que, na tabela de dados, precisamos especificá-los exatamente assim. Agora, para o ícone da categoria, precisamos copiar as referências. Então, vou voltar aqui na interface e nos ícones. Agora, para a categoria desta arma, eu tenho esta. Então, clique com o botão direito, como antes de fazermos com os itens, clique com o botão direito, copie uma referência, volte aqui. Agora, quanto à comida, vamos ver qual era. Era essa única categoria de comida. Clique com o botão direito na sua referência, provei. E para as poções aqui, consumíveis, oceanos. Clique com o botão direito, copie sua referência e cole-a aqui. Agora, basicamente, terminamos com este. Então, vamos clicar em Arquivo, baixar como um arquivo CSV, vou renomear esse arquivo CSV aqui para a categoria de inventário DT. E antes de fazermos qualquer coisa, vamos voltar ao motor. Vá para Tabelas de dados, clique com o botão direito do mouse aqui, vá para diversos e selecione Tabela de dados. Agora temos que selecionar de qual estrutura estamos falando? Estamos falando sobre a estrutura da categoria de estoque, por exemplo, e chamamos isso de uma categoria de inventário DT. Agora, o que você pode fazer é, novamente, ir para a pasta de download. Podemos arrastar isso para cima dessa tabela de dados e ela importará tudo automaticamente. Agora vamos abri-lo e ver se tudo está correto e verificar tudo o que você pode ver, pois importou tudo corretamente. E agora vamos salvar tudo. A última coisa que precisamos fazer novamente criar uma função de biblioteca. Então, vamos para a biblioteca de funções da biblioteca. E aqui, como antes, vamos criar uma nova chamada Obter informações da categoria. Ou talvez seja melhor chamá-lo de obter informações da categoria de inventário. Portanto, somos específicos sobre o que estamos falando. Aqui, novamente, vou adicionar uma entrada de string como antes. E vamos chamar isso de nome de uma categoria. E, como antes, vou entrar nas informações do item e simplesmente copiar e colar isso aqui. Lembre-se de que a única coisa que fizemos foi escrever um espaço aqui para remover todos os espaços. Estamos substituindo-os por nada. Então, vou para a categoria de inventário, colando-a aqui, conectando a string de origem. E a partir daqui podemos dizer a linha Obter tabela de dados. Assim como antes, selecionamos nossa categoria de inventário DT. E quanto ao nome , fica aqui. E para a saída que agora podemos, podemos obter um nó de retorno em um nó de retorno. E, novamente, como antes, arraste-a para o retorno agora para criar automaticamente uma variável aqui e chamá-la de informações de categoria. Ok, agora podemos usá-lo como antes. Agora podemos ir a qualquer lugar em qualquer Blueprint e obter essas informações. Então, por exemplo, eu posso ir até o player e aqui podemos dizer Informações da categoria. E como você pode ver novamente, essa é uma função definida, então precisamos voltar à nossa biblioteca antes que eu esqueça, clicar nas informações da categoria e defini-las como puras. E agora você pode ver que é puro. É só obter informações. Então, precisamos, não precisamos configurá-lo. Então, aqui precisamos escrever o nome da categoria. Isso será definido automaticamente posteriormente. Então é isso que temos feito até agora. Criamos uma estrutura de inventário. E aqui, criamos uma tabela de dados no Google Sheets e o importante está aqui. E então criamos uma função de biblioteca chamada obter informações da categoria de inventário, que apenas obterá informações sobre qualquer nome de linha que inserirmos aqui posteriormente. E podemos obter essas informações. 29. 5.04 Criando as variáveis de inventário: Vamos seguir em frente e criar as variáveis para o inventário. Então, vamos voltar para a pasta de componentes dentro do componente de inventário que criamos anteriormente. Vamos abrir o editor de plantas completo. Dentro daqui, precisamos criar algumas variáveis. Primeiramente, precisamos criar uma variável chamada quantidade de slots. Então, precisamos definir quantos slots nosso inventário tem? E o tipo é um número inteiro porque é apenas um valor numérico, como você pode ver aqui. E a próxima coisa que precisamos adicionar é a categoria de inventário selecionada. Então, mais tarde, precisamos definir qual categoria selecionamos. Essa é a categoria iGEM, assim como esta. Posteriormente, podemos definir qual categoria selecionamos dependendo do botão da categoria que estamos pressionando. Por enquanto, podemos deixar que seja assim. Em seguida, precisamos criar as categorias que temos. Portanto, precisamos ter todos os itens que eluímos do solo dentro das variáveis que podemos conter. Então, primeiro temos a categoria de armas, depois temos a categoria de alimentos e, em seguida, temos os oceanos como uma consulta. E lembre-se da categoria aqui nas estruturas em que criamos esses slots de inventário. Esse espaço de inventário contém o item, a quantidade, o próprio espaço de inventário, o próprio widget e o índice do slide. Então, essas são, na verdade , as categorias. Então, vamos clicar aqui e dizer slots de inventário e selecionar essa estrutura aqui. Agora, se você compilá-lo, verá que tem esse slot aqui. No entanto, para uma categoria, temos vários slots. Então, para cada categoria, temos 16 ou quantos slots, neste caso, para este jogo, vamos com 16 slots. Para as categorias. Eles não contêm apenas um item. Lembre-se de que, para cada categoria, eles contêm a quantidade de vagas que definimos aqui. Então, por exemplo, se tivermos 16 vagas, categoria de armas tem 16 vagas, a categoria de alimentos tem 16 vagas e assim por diante. Então, em vez de tê-la como uma variável normal, precisamos mudar o tipo de variável para uma matriz. Uma matriz é simplesmente um contêiner onde temos várias dessas estruturas. Então, clicando em uma matriz e compilando, e agora vou compilar. Você pode ver aqui se eu clicar no sinal de adição, agora temos esse slot singular dentro dessas categorias. Então, aqui neste slot, ele contém um item e a quantidade. E se eu clicar em Mais novamente, ele contém outro item e a quantidade e assim por diante. Então você pode imaginar que, para uma categoria, temos 16 itens aqui, abaixo da linha aqui. Agora você pode ver que faz sentido que precisemos ter uma matriz porque ela não contém apenas um compartimento de inventário. Ele contém vários slots de inventário. Vou deletar todos esses slots aqui. Vamos adicioná-los dinamicamente no jogo. Precisamos fazer a mesma coisa aqui para a categoria de alimentos, pesquisar lotes de estoques. E aqui novamente, faça o inventário dos slots e lembre-se de transformá-los em uma matriz. Então essa também ou uma matriz e os oceanos aqui embaixo até uma matriz e vá em frente e clique em compilar e salvar tudo. E agora isso é o que temos até agora. Então, vamos definir a quantidade de slots. Na verdade, vamos voltar para o jogador. O jogador o abrindo. E se você clicar no componente de inventário, agora poderá ver que temos essas variáveis que podemos jogar com a quantidade de slides. Na verdade, vou definir 16 porque este é meu inventário e tenho 16 vagas. Se você quiser mais slots, você pode ir em frente e adicionar mais slots ao seu jogo. E para o inventário selecionado, vamos configurá-lo dinamicamente no jogo, dependendo da categoria em que estamos pressionando. O mesmo acontece com as categorias: também as definimos dinamicamente no jogo. Então foi isso por enquanto. Lembre-se de definir a quantidade de lodo para seu inventário e vamos seguir em frente. 30. 5.05 Dimensionando as variáveis da categoria de inventário: Aqui estamos dentro do componente de inventário. E antes de podermos usar essas matrizes aqui, precisamos redimensioná-las. Então, quando você cria uma matriz e uma variável de um tipo de matriz, você precisa redimensionar a matriz antes que possamos realmente usá-la. E para essa matriz, na verdade, vamos redimensioná-la dependendo da quantidade de vagas para o inventário que temos. Vou excluir isso aqui, botão direito do mouse e dizer eventos personalizados. E vamos chamar isso de inventário de inicialização porque vamos executá-lo como a primeira coisa. Aqui embaixo. Vamos analisar isso com os clientes. Então, CL, inicialize o inventário para que a replicação seja executada no cliente proprietário e confiável. E lembre-se de executar o cliente aqui em cima e os eventos personalizados normais desse jeito. Então, muito, muito simples. Vamos pegar uma das variáveis aqui. E para a matriz, se você quiser saber quais funções você pode criar para uma matriz, basta escrever uma matriz. E então você pode realmente ver que tudo isso é para a matriz e você pode jogar com eles como quiser. Mas, por enquanto, vamos dizer redimensionar, que estamos redimensionando essa matriz. O tamanho é apenas a quantidade de slots que criamos aqui. Então, ele vai redimensioná-la, essa matriz para ter 16 slots. Portanto, lembre-se de que no player, no bp player aqui, se você clicar no componente de inventário, dependendo de quantos slots você selecionou aqui. Então, aqui para este jogo, estou apenas criando 16 slots. Então, ele também vai redimensionar essa matriz para ter 16 slots. Vamos fazer isso para a comida também a partir daqui e dizer redimensionar e também para a poção, arraste aqui e diga redimensionar. Agora conecte tudo. E você também pode arrastar essa quantidade de slots e se conectar aqui. Se você quiser ser mais organizado, novamente, você pode clicar duas vezes nos nós de espera e redirecionar. E só para que você possa selecionar tudo e pressionar Q e a palavra-chave que tornará tudo correto assim. E lembre-se de que você precisa executar esse evento em algum lugar para que ele seja executado, porque, no momento, não executamos esse evento em nenhum lugar do nosso código. Então, vamos colocá-lo aqui para o jogador sempre que ele aparecer. Então, aqui no início do jogo, vamos executá-lo aqui e podemos derivar desse inventário do AAC. Lembre-se de que esse AC inventa nosso inventário, então podemos chamar esses eventos, então podemos chamar de inicializar inventário e podemos fazer isso aqui no início. Se você quiser ver se isso está funcionando, porque agora, se você clicar em Jogar, você realmente não consegue ver nada porque está apenas redimensionando aqui. Mas às vezes é muito bom usar nós de impressão. Então, quando cordas e aqui, talvez você possa simplesmente pegar esta, por exemplo, e dizer comprimento. Qual é o comprimento dessa matriz aqui? Então, vamos conectá-lo a essa string de impressão. E agora vamos compilar. Clique em jogar. E aqui em cima você pode ver que diz 16. Eu posso fazer isso mais longo para você ver. E deixe-me fazer a cor vermelha. Então, se eu clicar em Jogar, você pode ver no canto superior esquerdo da tela que diz 16. Portanto, o tamanho das matrizes está correto. Agora, agora vamos clicar em compilar, salvar tudo e seguir em frente. 31. 5.06 Exibindo as categorias de inventário: Agora vamos exibir os widgets da categoria de inventário. Então, vamos voltar para a pasta Blueprints e ir para o controle do player. Lembre-se de que, no controle do player, estamos trabalhando com widgets. Dentro daqui, quero que você vá até o gráfico de eventos botão direito do mouse e vamos criar eventos personalizados. Então, para esse evento personalizado, vamos chamá-lo de inventário de tarifas, widgets de categoria. E lembre-se também de copiar o nome e vamos fazer um para o cliente. Porque, novamente, a interface do usuário é feita por meio dos clientes. Então, clique com o botão direito do mouse, crie um novo evento personalizado e este será executado no cliente. Portanto, para as réplicas, vamos alterá-lo para ser executado em um cliente de clonagem e confiável. Agora vamos executar esse cliente com um dos mais comuns. Então, executamos o código e temos a seguinte aparência. Então, para os widgets de categoria de inventário, se voltarmos à nossa interface de usuário e dentro do inventário, aqui, criamos uma caixa vertical chamada categorias. Então, essa é a caixa vertical e queremos adicionar as categorias a essa caixa vertical. Agora, para fazer isso primeiro, clique nessa caixa vertical e precisamos configurá-la como variável. Então, podemos realmente usar essa variável e adicionar itens dentro dela. Agora, quando é variável, vamos voltar ao controle do player e agora precisamos acessá-lo. Portanto, lembre-se de que está no inventário do WB e você já criou uma variável a partir dele antes. Então, vamos arrastá-lo até aqui e obter essa variável. Agora podemos arrastar e escrever o nome da caixa de vegetais. Então, categorias VB. Antes de fazermos qualquer coisa, arraste-se daqui e diga claramente, crianças. Como vamos redesenhar widgets de cada categoria e slots de categorias quando criarmos, criá-los mais tarde, quando redesenharmos, teremos que remover os antigos. Por exemplo, ao carregar um item, você precisa redesenhar tudo para atualizar a interface do usuário. Portanto, temos que limpar os antigos antes de fazer qualquer coisa. Então, vamos esclarecer essas crianças antes de adicioná-las novamente. E para adicionar as categorias, vamos arrastar daqui agora e dizer que uma linha de tabela nomeia. Mas isso acontece, é entrar em nossa tabela de dados para a categoria de inventário. Aqui, ele pegará cada uma das linhas e podemos imprimi-las na tela. Então, aqui estão todos os nomes. Então, aqui o que eu quero que você faça é arrastar daqui e dizer para cada loop. Então, vamos percorrer cada linha. Vamos voltar aqui apenas para mostrar os planos, as tabelas de dados e a categoria de inventário. Dentro daqui, temos três nomes de linhas. Então, as armas, a comida e as poções. E isso é o que vai acontecer aqui. Vai ser repetido para cada um desses nomes aqui. Então, três vezes para cada um deles. Lembre-se de que criamos uma função dentro da biblioteca de funções, dizendo obtém informações da categoria. Então, vamos obter nossa função de informações de categoria aqui. E agora vamos inserir esse nome nessa string e ela converterá automaticamente a variável de nome em uma string. Então, agora estamos recebendo as informações da categoria. E se você não se lembra do que isso, do que era, você pode clicar duas vezes nele e ele o levará à função e à biblioteca da função. E você pode ver o que faz simplesmente obtém o nome e, em seguida, obtém as informações da linha da tabela de dados e as exibe aqui. Então, podemos realmente usá-lo no controlador do player. Então, aqui você pode clicar com o botão direito do mouse pino Split Struct e obter as informações ou arrastar e dizer break, isso é o que eu costumo fazer. E aqui você também pode obter as informações. Então, o que estamos tentando fazer é, para cada uma dessas categorias de inventário, criar um widget e adicioná-lo a essa caixa vertical. Agora vamos arrastar a partir daqui e dizer Criar widget. Então, já conhecemos essa função. Então, vamos criar um widget. E o widget que vamos criar é esse widget de categoria de inventário que criamos anteriormente. Lembre-se de que, na interface do usuário, se formos para a categoria de inventário da categoria, esse é o widget que criamos. Então, esse é o que estamos criando. E estamos criando e para cada um desses nomes de linha. Então, vamos criá-lo três vezes. Portanto, é muito legal trabalhar com tabelas de dados. Se você decidir adicionar uma quarta categoria, ela será automaticamente considerada aqui e adicionada automaticamente ao inventário. muito legal fazer isso dinamicamente assim , porque ficará muito mais fácil para você mais tarde. Ok, então aqui, quando criamos o widget, queremos dizer a ele qual é a categoria. E também queremos inserir esse ícone, porque lembre-se de que temos esse ícone estático e queremos alterá-lo dependendo da categoria. Então, vamos voltar para a categoria de inventário. Aqui, vá para o gráfico. E agora vamos clicar no sinal de mais aqui para ver as variáveis. A primeira variável que vamos criar são as categorias. Então, vamos atribuir a categoria a ele. E, em seguida, temos o ícone da categoria. E esta vai ser de textura 2D. Agora, o que vamos fazer é clicar na primeira e depois clicar em Instância editável e expor no spawn. E você pode fazer isso em ambos. Portanto, o ícone da categoria também pode ser editado por instância e exposto no spawn. O que isso faz é se você voltar ao controlador do player agora, clicar no arquivo e atualizar todos os nós. Você pode ver que os expusemos aqui para que possamos realmente inserir informações a eles. Então, vamos arrastar essa categoria e atribuí-la aqui. E vamos arrastar esse ícone e atribuí-lo também. Agora criamos um widget, então ele vai criar três widgets. Então, até agora, o que estamos fazendo é limpar as crianças para que essa caixa vertical fique limpa. Depois disso, obteremos todos os nomes de nossas linhas, que têm todos esses três aqui. O que estamos dizendo é que, para cada uma dessas linhas, vamos pegar o nome, vamos pegar as informações da categoria do inventário. E a partir daqui, estamos pegando o ícone e a categoria e conectando-os a essa função de criação de widget. Então, agora estamos criando três widgets, no entanto, lembre-se, estamos apenas criando eles aqui. Precisamos adicioná-los também à caixa vertical. Então, vou copiar isso aqui, as variáveis de inventário e caixa vertical. E agora o que podemos fazer é arrastar a partir dessa caixa vertical. E podemos dizer adicionar criança à caixa vertical. E vamos conectá-lo agora. E qual criança devemos adicionar? Simplesmente esse widget que acabamos de criar. Agora, o que você pode fazer é clicar duas vezes nessas linhas para fazer anotações ferroviárias e organizar seu código um pouco melhor. E agora vamos compilar. Então, agora, se clicarmos em Jogar, nada acontecerá. E a razão pela qual isso não acrescenta. Então, se você clicar em I para abrir o inventário, nada acontecerá. Lembre-se de que você não executou esse código em nenhum lugar, então precisa escrevê-lo em algum lugar. Portanto, crie widgets de categoria de inventário. Na verdade, vamos executá-lo para o jogador. Então, se você voltar aos planos e formos para o jogador B, jogador aqui no início do jogo, vamos agora dizer Get Controller. E vamos pegar o controle para esse player. Então, podemos dizer: lembre-se de que aqui criamos uma interface chamada int player controller. Portanto, temos a referência do controlador do player. Portanto, podemos dizer que é layout, controle ou referência porque essa é a interface que criamos anteriormente. Agora, como controlador do jogador, porque lembre-se, estamos trabalhando no controlador do jogador, então precisamos da referência e agora podemos chamar widgets da categoria de inventário de taxas. Então, dentro daqui, digamos que crie widgets de categoria de inventário. E isso deve funcionar. Então, vamos compilar e salvar tudo. Agora isso vai nos dar um bug. Então, se clicarmos em jogar e eu clicar no olho, você verá que nada acontece. E se eu sair daqui, isso vai nos dar um bug. E o motivo é que, se voltarmos ao controlador do player, você está obtendo informações dessa variável de inventário do WB. No entanto, antes de clicarmos no olho, lembre-se que você o executa instantaneamente quando o jogador está surgindo. No entanto, essa variável ainda não foi criada. Essa variável só é criada sempre que você clica no botão I , porque então você abre o widget aqui e cria essa variável. Então, se você puder copiar isso aqui, criamos um widget para o inventário e você volta ao gráfico de eventos. E aqui na inicialização dos widgets, vou adicionar o inventário, porque os também vou adicionar o inventário, porque os widgets India Sheila is são executados automaticamente quando começamos a jogar. Então, na verdade, ele é criado imediatamente e também podemos usá-lo aqui no início do jogo para o jogador. E a razão pela qual ele é criado mais rapidamente no controle é porque o controlador do player é criado antes da criação do player. É assim que é. Então, agora vamos clicar em jogar. E quando clicamos em IA, você pode ver, agora podemos ver as informações aqui. Podemos ver todos os três widgets. No entanto, os ícones não foram alterados. E porque essa é a etapa final que estamos perdendo. Então, vamos voltar aqui. Vamos para a categoria de inventário do WB. Aqui. Vamos excluí-los e manter a construção do evento. Para a construção do evento, isso é exatamente o mesmo que a jogada inicial. O que precisamos fazer é escolher essa categoria de imagem, porque lembre-se, se você clicar nela, isso é o que você chamou aqui. Então esse é meu ícone, minha imagem. Então, eu preciso pegar essa variável aqui e dizer, define o pincel a partir da textura. E agora podemos escolher a textura para configurá-la. A textura é simplesmente esse ícone de categoria que acabamos de definir. Porque lembre-se, no controle do player, toda vez que criamos a categoria, atribuímos o respectivo ícone de categoria a ela. Na verdade, já temos essa variável pronta e podemos conectá-la à textura. Agora vamos compilar e clicar em play. E se eu clicar nele agora, você poderá ver que todos os ícones da categoria são atribuídos automaticamente. Então, apenas uma rápida olhada. Se voltarmos aqui, criamos esses widgets de categoria de inventário de crédito. E nós o executamos por meio do cliente porque os widgets são executados no cliente. Em seguida, removemos ou limpamos as crianças aqui apenas para garantir que elas estejam vazias e, em seguida, obtemos todos os nomes das linhas da tabela de dados. E para cada um desses nomes que estão recebendo suas informações. E com essas informações, podemos conectá-las ao widget de criação. Então, estamos criando os widgets um por um por meio disso para cada loop. E estamos inserindo as informações. Também os estamos adicionando um por um com a inclinação. Então, agora criamos as categorias e as adicionamos ao nosso inventário. Então, vamos passar para os slots de inventário. 32. 5.07 Exibindo as fendas de inventário: Os slots de inventário, vamos voltar ao controle do jogador. E assim como antes, as categorias, vamos até aqui e criar um novo evento personalizado. E vamos chamar isso de widgets personalizados de slots de inventário com taxa de eventos . Novamente, vamos copiar esse nome porque precisamos passar um para os clientes. Então, vamos fazer eventos personalizados e executá-los por meio do cliente. Lembre-se de clicar nele. Funciona com um cliente próprio e confiável. E para o cliente ou para o normal, temos que administrar o cliente. Lembre-se de que são os widgets de caça-níqueis, não a categoria. Então, selecionando os widgets do slot. Então, o que queremos fazer com esses widgets, se voltarmos à interface do usuário e clicarmos no inventário. Então, lembre-se de que, para o inventário, criamos essa grade de variáveis de inventário. Então, para esse inventário de grade, o que precisamos fazer novamente, você precisa clicar aqui é uma variável caso contrário, não podemos usar essa variável. Então, se eu não fizer isso, clique em é variável. Você pode ver aqui se eu obtenho meu inventário e, como uma grade, simplesmente não podemos ver essa variável. Mas se eu for aqui e clicar na variável S para esse inventário de grade, agora posso arrastar daqui e dizer grade. E você pode vê-la como uma variável e podemos usá-la como antes. Vamos limpar as crianças e garantir que não haja espaços de inventário dentro delas toda vez que aludirmos um item posteriormente ou o retirarmos do inventário Precisamos redesenhar todos os espaços para atualizar o inventário. Temos que garantir que os antigos estejam limpos antes de adicionarmos os novos. Então, vamos limpar as crianças e garantir que estejam vazias e limpas. Agora vamos fazer um loop. Então, saia daqui e diga para loop, e selecione este. Então, novamente, lembre-se de que, quanto à quantidade de vagas, já temos uma variável no inventário. Então, se voltarmos ao componente de inventário aqui, criamos esse chamado quantidade de slots. Precisamos de uma referência para esse inventário. Então, aqui em cima, vou clicar no sinal de adição e depois encontrar minha variável de inventário do AAC. E vamos chamá-lo de inventário. E então vamos fazer a mesma coisa aqui embaixo. Deixe-me clicar no Plus, selecionar a variável de inventário AAC e chamá-la de inventário. Então, agora o que podemos fazer é conectá-lo aqui. E para este, crie widgets de slots de inventário. Vamos até o player e clicar no player DP. E dentro dele, novamente, vamos executá-lo no Begin Play. Podemos extraí-lo aqui do controlador, assim como antes do que fazíamos com as categorias de inventário. Então, vamos sair daqui e dizer para criar widgets de slots de inventário. Então, selecionando este aqui e precisamos inserir o inventário. Lembre-se de que você pode simplesmente arrastar a partir daqui porque você já tem o inventário. E você também definiu quantos slots você tem em seu inventário. Então agora você pode ter esse número, esse 16 aqui que escrevemos. Então, se voltarmos ao controle do player, precisaremos repeti-lo quantas vezes você escreveu aqui para a quantidade de slots, porque essa é a quantidade de slots que queremos criar. Então, arrastando daqui e dizendo a quantidade de vagas, essa aqui. Agora, para loops, eles partem do índice de zero e não de um. Se simplesmente os conectarmos aqui, isso criará 17 espaços de inventário e não 16. Temos que pegar esse e dizer menos. Então, subtraia e subtraia por um e, em seguida, conecte-o ao último índice. Então, o que vamos fazer 16 vezes? Vamos simplesmente criar widgets. E o que você deseja criar, queremos criar slots de inventário WB. E, como uma coisa boa mais tarde, precisamos ter o índice do slot. Então, vamos voltar para a interface do usuário e abrir o espaço de inventário. Vou acessar o gráfico e criar uma nova variável chamada índice de slots e, em seguida, selecionar o número inteiro e compilar. E, assim como antes, vamos selecionar a instância editável e expor no spawn. Volte para o controlador do player como registrado e atualize todos os nós. Agora podemos pegar isso e inserir isso no índice do slot. É sempre bom ter esse índice porque, mais tarde, você pode precisar dele quando estiver programando e de um slot específico. Tudo bem, então, como a última coisa agora, assim como antes de criarmos o widget, agora precisamos adicioná-lo à grade que temos. Então, pegando isso aqui, o inventário WB e, em seguida, a variável de inventário da grade. E agora vamos arrastar daqui e dizer Adicionar criança à grade e menos conectada. Então, para a grade, temos as linhas e as colunas aqui. Agora, antes de fazermos isso, o conteúdo que queremos adicionar é simplesmente esse widget que acabamos de criar. E você pode clicar duas vezes aqui novamente para criar um nó de redirecionamento. Agora, para as linhas e as colunas, é muito, muito simples. Você pode arrastar daqui e dizer dividido por quatro. Porque o que eu quero que você faça é que o inventário tenha quatro vagas à força, muitas perdas florestais em quatro vagas. E isso é o que você pode fazer. Portanto, temos 16 slots divididos por quatro, o que nos dará quatro na coluna. E também dividido por quatro não é dividido, mas módulo quatro e então nos dará quatro por quatro. Então, se arrastarmos daqui novamente e dissermos módulo e selecionarmos isso aqui, e depois quatro novamente. Agora podemos pegar isso e conectá-lo à linha, pegar isso e conectá-lo à coluna. Portanto, você sempre pode alterar esses números. É porque eu quero ter meus slots quatro por quatro. Mas talvez você queira que seus slides tenham oito por oito para poder alterar esses números dependendo da aparência do seu inventário . Agora vamos clicar em compilar e vamos clicar em uma forma de ver o que acontece. Se eu clicar em, posso ver meu inventário está sendo adicionado à minha tela. Então, isso é o que parece. É muito grande agora, e eu preciso reduzir o tamanho. Mas, na verdade, vamos remover todos os ícones para começar por padrão, porque eu não quero ver todos os ícones aparecendo como padrão. Então, vou clicar no compartimento do inventário, voltar para o designer. E aqui você pode clicar no ícone e ir até aqui na visibilidade e configurá-lo como oculto. A mesma coisa com o número, clique nele, volte para a visibilidade e também defina este como oculto. Agora, se eu clicar em Jogar novamente e clicar no olho, você verá que tudo está oculto e é melhor assim, porque podemos mostrar os ícones mais tarde , se realmente tivermos um item e não esse ícone padrão para o tamanho, ele pode parecer ideal para você. Se eu voltar aqui, você pode ver aqui que estou projetando em 12 80 por 720. Então, esta é minha tela de design padrão aqui. É para isso que eu o estou projetando. Pessoas com monitores menores verão isso normalmente assim. Você pode ver que não é, não é enorme assim. Se eu clicar em jogar e clicar aqui, você pode ver que é muito grande aqui. E realmente não parece assim por aqui. Isso ocorre porque temos algo chamado escala de DPI. Agora estou trabalhando nesta resolução. No entanto, se você clicar aqui porque eu tenho um garfo, um monitor, acho que algo em torno de 3.000 aqui, 3.800. Então, clicando neste pequeno ícone, você pode ver aqui que ele está ampliando minha interface de usuário, dependendo da minha tela. Então, agora eu estou projetando isso para uma tela aqui. Na verdade, esse aqui. No entanto, minha tela está em algum lugar por aqui. Então, na verdade, você pode ver que a escala é para realmente escalá-la quatro vezes ou 3,5 vezes. O que você pode fazer é simplesmente selecionar essa e depois reduzir a escala para que ela não seja tão escalável. Clicar aqui e apenas configurá-lo como dois, por exemplo, e isso é somente se acontecer com você. Portanto, geralmente é quando você deseja redimensionar a interface de dois monitores diferentes e fazer com que pareçam bons para monitores diferentes. Pode ser 2,5 e o tamanho clicando em Jogar, eu posso clicar no olho. Você pode ver que é muito menor agora e eu gosto mais desse jeito. Tudo bem, agora adicionamos os slots de inventário. Vamos salvar tudo e seguir em frente. 33. 5.08 Set Select Inventory Categoria: Precisamos fazer agora que, quando clicamos em um botão de categoria para o inventário, ele precisa configurá-lo para a categoria selecionada. Então, vamos prosseguir com os planos e criar essa lógica dentro do componente de inventário. Vamos até aqui e criar novos eventos personalizados. E esta chamaremos de definir a categoria de inventário selecionada. E, novamente, estamos trabalhando com a interface do usuário. Então, vou copiar isso e criar um novo evento personalizado e executá-lo por meio do cliente. Então, funcionando, possuindo clientes e confiável. Então, o que precisamos fazer aqui para essa categoria de inventário selecionada? Lembre-se de que fizemos essa enumeração, a categoria de item E, conjunto, a categoria de estoque selecionada. Vamos arrastá-lo daqui. E enquanto segura a tecla Alt, você pode soltá-la e ela automaticamente fica assim. Então, estamos simplesmente definindo essa variável e eu vou arrastá-la e soltá-la no evento. Isso criará automaticamente uma entrada aqui. Você pode criá-lo manualmente ou simplesmente clicar, arrastar e soltar. E isso o criará para você. Agora vamos chamar o cliente de “ Definir categoria de inventário selecionada”. Vou clicar e arrastar isso novamente aqui, para que ele execute todo o processo. Agora, precisamos realizar esse evento sempre que clicarmos em um botão ou nas categorias. Então, vamos voltar à interface do usuário e clicar na categoria de inventário. Agora, vamos clicar nesse botão, categoria do botão, e deixe-me descer. E depois no evento OnClick. Então, o que deve acontecer quando eu clico nesse botão? Eu simplesmente quero chamar esse conjunto de categoria de inventário selecionada. Então, como podemos conseguir esse evento? Estamos dentro do inventário e agora estamos dentro da interface do usuário. Isso pode ser uma prática para você tentar descobrir como você realmente chega lá, como chegar a esse inventário. Agora, vamos fazer isso juntos para que você possa fazer uma pausa se quiser fazer isso sozinho. Então, aqui, o que queremos fazer é que haja uma função na qual você possa obter a camada que possui essa interface de usuário. Portanto, toda interface de usuário gerada para um jogador é de propriedade do jogador. Então, agora, podemos clicar com o botão direito do mouse e dizer Get Owning layer on. Então, ele está tentando encontrar a camada que possui essa interface de usuário. E aqui, na verdade, precisamos de uma referência ao jogador, mas ainda não fizemos uma. Lembre-se dos planos quando acessamos as interfaces. Aqui temos apenas uma interface para o controlador, onde temos o controle de camada get, nossa referência. Então, na verdade, também precisamos fazer um para o jogador. Então, vou voltar aqui para as interfaces, clique com o botão direito do mouse em Blueprint, Blueprint Interface. Vamos chamá-lo de int layer. Clique duas vezes nele. E aqui para a função, vamos chamá-la de referência de camada de get. E agora, aqui embaixo, lembre-se de que você precisa selecionar a variável à qual deseja se referir. Então, eu quero fazer referência à camada BP, e vamos chamá-la de camada aqui embaixo. Vamos compilar. Lembre-se, é muito importante compilar aqui. Agora vamos até o player e adicionar a interface. Então, bp player. Os padrões da classe são, na verdade, as configurações da classe. E aqui, para as interfaces, vamos clicar nela e pesquisar a compilação da camada int. E agora você verá aqui nas interfaces obter a referência de Blair. Assim como antes, precisamos definir quem é o jogador. Estamos dentro dos jogadores B2B. Então você pode apenas tentar, pode dizer a si mesmo. Portanto, essa é a referência do layout. Ok, agora temos isso e agora podemos voltar à nossa interface de usuário de categoria de inventário. Então, adquira o peão do jogador proprietário. Agora diz: de qual jogador você está falando especificamente? Estou falando especificamente sobre o bp player. Então, podemos dizer que agora obtém referência do jogador que acabamos de fazer. E é uma mensagem porque é de uma interface Blueprint. Agora temos a referência do jogador e agora, como jogador, agora podemos obter o inventário porque todo o processo aqui era obter o inventário. Assim, podemos chamar a categoria de inventário selecionada. Então, aqui na interface do usuário da categoria de inventário, vamos arrastar daqui e dizer AAC, inventário. E vamos descer e encontrar a variável. As variáveis estão sempre no final aqui. Agora, como inventário, podemos chamar definir a categoria de inventário selecionada. E qual é a categoria? Quer configurá-lo como? Lembre-se de que, no controle do player , se eu voltar agora, será um pouco confuso agora, porque estamos indo e voltando o que estou tentando explicar da melhor maneira possível. Lembre-se, no controlador do player quando criamos as categorias para cada um dos nomes de linha aqui em nossa tabela de dados. Pegamos a categoria e a inserimos no botão criado aqui. Então aqui no botão ele já sabe qual é a categoria. Então você pode simplesmente clicar e arrastar isso e conectá-lo aqui. Portanto, cada botão terá sua própria categoria, na qual ele fará login aqui. E as informações corretas serão definidas aqui. Ok, então é muito importante. Toda vez que definimos a categoria, queremos redesenhar todos esses botões. Então, aqui nos slots de inventário, queremos redesenhar todos esses slots porque estamos mudando de categoria. Portanto, não queremos ver os slots antigos da categoria antiga. Agora, o que precisamos fazer, e é por isso que declaramos filhos, porque queremos remover os botões antigos ou os compartimentos de inventário antigos antes de adicionar os novos. Ótimos widgets de slots de inventário. Temos que chamá-lo no ano que definimos a categoria inteira selecionada. E agora precisamos de uma referência ao controlador do jogador desse inventário. Então, como fazemos isso? Do jeito que fazemos isso primeiro, precisamos pegar o jogador. Portanto, não podemos realmente obter o controlador do player diretamente desse componente. Mas lembre-se, esse componente está dentro do player. Então, o que podemos fazer é clicar com o botão direito do mouse e dizer, o proprietário, que ficará com o jogador. E, novamente, assim como antes de termos que dizer isso especificamente, somos onerosos ou do que estamos falando. Estamos falando especificamente sobre esse tocador de bp. Então, podemos dizer que obtém a referência de camada que acabamos de criar. E agora podemos conectar esse. E aqui podemos obter o controlador. Então você pode rastrear aqui e dizer Get Controller. No entanto, você pode dizer get controller e então você pode dizer Get layer, a referência do controlador. E dessa forma, você pode realmente chamar a criação, criar espaços de inventário, widgets. Você pode fazer assim. No entanto, está ficando muito longo temos que fazer isso todas as vezes. Então, em vez disso, vamos voltar para o jogador. E em vez de fazer isso get controller, vamos realmente criá-lo em uma variável. Então, aqui no início do jogo, vez de fazer isso, vamos pegar o controlador e, digamos, obter a referência do controlador de camada. E agora podemos clicar com o botão direito aqui e promover isso para uma variável e chamá-la de controlador de layout. Mas agora temos o controlador do player e não precisamos fazer isso toda vez dentro daqui. Então, quando tivermos o controle da placa, vamos realmente excluir esse custo. Como agora temos essa interface Blueprint, podemos excluí-la de vez em quando podemos simplesmente conectá-la aqui em vez de conectá-la. E vamos arrastar tudo para mais perto. E agora esse controlador de fluxo também pode ser usado aqui. Não precisamos chamar esse controlador de jogador. Novamente. Vamos excluí-lo e conectá-los aqui. Agora, o alvo aqui novamente é o controlador de jogadores da plataforma. Então, vamos pegar essa variável de controlador de layout que acabamos de criar. E vamos conectá-lo aqui. Em seguida, subimos aqui e você pode ver que está muito mais limpo do que antes. Em vez de ligar para a referência do controlador do player todas as vezes, podemos simplesmente fazer isso. Vou organizá-lo um pouco melhor, para que não fique muito confuso aqui. Tudo bem, agora temos esse controlador e está ótimo. E podemos realmente fazer isso aqui também. Para torná-lo mais limpo, podemos pegar o controle do player e login aqui. Na verdade, isso está errado. Então, vamos pegar aqui, basta chamá-lo aqui, e podemos conectá-lo manualmente desta forma. E podemos excluir esse controlador preto. Então, agora é muito mais fácil ver isso. E deixe-me aproximá-los. Portanto, o código é muito mais limpo aqui. E se voltarmos ao inventário do AAC, agora, em vez de chamar isso, acabamos tendo a variável do controlador do jogador. Então, isso é muito mais limpo. E podemos conectá-lo aqui e chamar os widgets de criação de espaço de inventário. E o inventário, novamente, podemos pegar do jogador e chamar a Variável do inventário AAC, descer até o final, encontrar a Variável do inventário e conectar aqui. Tudo bem, então isso está realmente terminado agora. Então, aqui, quando estou no jogo e clico no olho, é realmente impossível clicar no botão porque, no momento , não temos um mouse que você possa ver ou podemos contornar isso. Nós realmente não temos um mouse. Então, vamos corrigir isso. No momento, recebo uma caixa porque x é nove tentando ler a propriedade e está falando sobre você obter um subsistema de nível local, o contexto de mapeamento. Então, na verdade, temos que voltar para o jogador aqui. O contexto do mapeamento não gosta disso. Serão quatro. Na verdade, nós o configuramos e conectamos. Vamos arrastar do controlador dividido e dizer que é válido. Apenas certifique-se de que seja válido antes de realmente ser executado. Esse código é válido. E se for válido, você pode seguir em frente e executar o código. Agora você pode clicar duas vezes nele para torná-lo mais agradável. E vamos clicar em Jogar e ver se ele falha novamente. Correndo por aí. Se eu também executar o cliente, posso removê-lo e você pode ver que não temos mais o Box. Então, certifique-se de que seja válido antes de fazermos isso. Tudo bem, então, para o mouse, vamos para o controle do player. Aqui nos padrões da classe. Você tem que mostrar o mouse, o cursor. Agora vamos clicar aqui e clicar em Jogar. E agora você pode ver, eu posso ver o mouse e não consigo mais olhar em volta. Realmente não é importante, pois este curso não é sobre movimentos, então eu realmente não me importo, mas você pode segurar o mouse e virar o jogador e olhar em volta. Mas não é muito importante por enquanto, não se preocupe com o movimento ou com a correção. Vamos nos concentrar apenas no inventário. Portanto, clicar no inventário não funciona porque nós realmente não o configuramos. Temos que consertar isso também. Quando passo o mouse sobre os botões de categoria, também não consigo pressioná-los. Então, vamos ver o que está acontecendo com isso. Então, vamos encerrar isso. Vamos voltar à categoria de inventário e ir até o designer. Então, olhando para o botão, posso ver que ele está totalmente configurado para quadrado azul. E isso está errado. Não, para o Hubbard, precisamos mudá-lo para Hubbard. E para os oprimidos, precisamos mudar para descansar. E lembre-se de copiar o tamanho da imagem porque os botões foram alterados. Então, clique com o botão direito do mouse aqui e clique com o botão esquerdo para colá-los aqui para a imagem, apenas certificando-se de que a visibilidade não seja testável, para que não bloqueie o botão. E agora, se formos para o menu I, agora precisamos que esse botão funcione também quando clicamos nele. Então, se eu descer aqui e selecionar essa opção como curtida, ela precisa abrir o inventário. Então, se eu apenas compilar e voltar para o player. Então, aqui, quando abrimos o inventário, o que podemos fazer é criar outro evento personalizado e vinculá-lo a aqui. Então funciona para o botão. Bem, vamos clicar com o botão direito aqui e personalizar o evento e, digamos, abrir o inventário. Conecte isso aqui. Então, isso só é acionado sempre que nosso botão está sendo pressionado, abra o inventário. Então, vamos voltar à interface principal. E aqui está esse botão novamente, como antes, clique com o botão direito do mouse e diga Get Owning, camada. Então, estamos adquirindo o jogador porque é aqui que está nossa lógica , seu jogador proprietário após referência de camada. E agora vamos conectá-los. E aqui agora podemos dizer inventário aberto. Então, agora deve funcionar. Vamos compilar tudo. Vamos clicar em Jogar. E se eu clicar na interface do usuário aqui, você pode ver que o inventário é aberto. E se eu clicar no olho, ele também abre. Então é, Oh, está funcionando corretamente. E passar o mouse sobre os botões também funciona. Agora você não pode ver se estamos mudando categoria porque não temos nenhum item. Então, é muito difícil de ver. Então, se você quiser ver isso rapidamente, você pode acessar o controle do jogador aqui onde você adiciona seus slots de inventário. Um método muito bom para ver as coisas é usar a string de impressão daqui no loop ao criar os widgets Vamos arrastar daqui e salvar a string de aluguel. Agora, o que queremos imprimir na tela, vamos imprimir todos os widgets que estamos criando. Então, a partir daqui, conecte-se aqui, e ele criará esse nome de exibição para obter. Então, ele mostrará o nome de exibição desses widgets. Agora vamos clicar em jogar. E você pode ver que ele cria os widgets para ambos os jogadores. Quando você clica em AI e depois em Categoria, cria widgets. Se você clicar em outro, verá que o número dos widgets aumenta , mas estamos lembrando de limpar as crianças. Portanto, não é porque existem 79 deles gerados. Só esses são gerados agora. Isso está funcionando corretamente. Toda vez que clico em uma categoria, ela cria novos widgets. Então, a única coisa que precisamos agora é realmente trabalhar com os itens também. Então, vamos compilar tudo, salvar tudo e passar para a próxima lição. 34. 5.09 readicionar itens existentes para arrancar: Tudo bem, agora o que queremos fazer é adicionar itens existentes ao inventário. Então, no momento, não temos realmente nenhum item alusivo ou algo parecido. Mas o que podemos fazer se acessarmos o controle do jogador, agora, estamos apenas adicionando os widgets do slot de inventário. Nós os estamos criando e depois os adicionamos a essa grade aqui. Mas quando trocamos, quando limpamos as crianças, trocamos categorias e redesenhamos os widgets dos slots. Também precisamos redesenhar todos os itens, então, exibindo os itens, podemos fazer isso mesmo não tenhamos itens saqueados no momento. Então, antes de adicionarmos os widgets aqui às crianças ou ao inventário da grade. Agora vamos pegar isso e eu vou empurrar isso aqui apenas um pouco para que possamos adicionar mais algumas coisas aqui dentro. Então, o que queremos fazer é apagar o inventário. Então, se voltarmos ao inventário, apenas como lembrete, vamos para o inventário de componentes. Aqui criamos as três categorias. Por isso, entrou na categoria de armas e é uma matriz do compartimento do inventário. Portanto, se clicarmos no Plus, você verá que ele consiste em um item e, em seguida, na quantidade do item, no slot do inventário e no índice. E se clicarmos no sinal de mais novamente, teremos outro item. Então agora eu tenho dois itens. E sem mais nem menos. Portanto, dependendo de todos os itens que temos, precisamos desenhá-los também aqui para não perdê-los durante o redesenho aqui. Agora vamos primeiro pegar todos esses três. Apague aqui. Então, vamos sair do inventário. E, digamos, categoria de armas. Mais uma vez, diga Alimentos ou categoria de alimentos. E vamos escrever a categoria de poções. Então, agora temos todas essas três categorias. Agora vamos arrastá-lo para cá. E o que queremos fazer é arrastar de um e dizer conjuntos de elementos da matriz. Queremos definir o elemento da matriz, queremos definir o índice do item que já está dentro daqui. E para fazer isso podemos simplesmente arrastar daqui e dizer definir elementos da matriz, porque também precisamos fazer isso para eles. Portanto, isso realmente depende da categoria de inventário que selecionamos. Apesar. selecionarmos a comida , precisamos fazer isso pela comida. Selecionamos uma das poções, então precisaríamos fazer isso com as poções. Então, aqui, arraste novamente do inventário e vamos obter a categoria selecionada, categoria de inventário aqui. Agora, em vez de fazer aqui, deixe-me clicar em Alt e clicar aqui para desconectá-lo. Então, deixe-me arrastar daqui e usar um nó chamado Selecionar. Então, deixando este, então qual é a seleção, inicialmente basta selecionar uma opção. Portanto, depende do que você conectou aqui. Se você conectar um número, ele selecionará um número. Se você inserir, por exemplo essa enumeração, você a conecta aqui, você pode ver que ela está selecionada entre os itens dentro dessa enumeração. Então, vamos conectá-los. Então, as armas com as armas, comida e as poções. Então, isso vai funcionar aqui. Ele ocupará a categoria de inventário selecionada. Ele vai dar uma olhada em qual depende esse valor. Aqui. Se você se lembrar, se você voltar para a categoria de inventário da interface do usuário. E aqui, quando clicamos na categoria, ela define a categoria e depois redesenhamos. Aqui. Diz a categoria. E então redesenhamos todos esses widgets de caça-níqueis. Portanto, dependendo dessa categoria selecionada aqui no controlador do player, ela selecionará esse valor. Então, se você selecionou a categoria de poções, ela pegará essa categoria de poções e , em seguida, registrará essa categoria de poções dentro daqui. No momento, é ótimo. Eu não sei por quê. Está um pouco cheio de bugs. Deixe-me desconectá-lo aqui e conectá-lo novamente aqui. Então, funciona apenas para ter essa cor. Ok, então, por exemplo, se selecionarmos a categoria de alimentos, ela pegará essa categoria de alimentos aqui e a removerá daqui. E agora é a categoria de alimentos. Então, qual é o item aqui? O item é que podemos simplesmente comprar, pegue este aqui e diga ainda. E podemos pegar um item da matriz e selecionar esse chamado cópia. Qual item queremos comprar? Qual item dentro dessa matriz queremos obter? Simplesmente, queremos apenas obter o índice do slot. Lembre-se de que estamos examinando seus widgets de caça-níqueis. Estamos fazendo um loop de 0 a 15, então criamos 16 slots. E para cada um desses slots, queremos obter o item de cada um desses slots. E então queremos colocá-los dentro daqui. Então, para o índice de slots, novamente, basta aqui e adicione-o aqui. Então esse é o índice. Lembre-se de que ele vai rodar 16 vezes. Então, ele vai definir o índice. Então, o primeiro será zero, depois um, depois 2345 e assim por diante, até 15, então ele cria 16. Agora, para o item, podemos pegar este item aqui e dizer pausa. E agora, para essa matriz aqui, esse slot de inventário. Mas podemos derivar daqui e dizer criar um espaço de inventário. Então, arrastando esse item até aqui, vamos redefinir o item dentro dessa matriz. Não queremos perder nosso item. Portanto, dependendo do slot que temos, por exemplo, o primeiro slot está no índice zero. Vamos pegar esse item e conectá-lo aqui. Mesmo que esteja vazio , não importa. Estamos apenas obtendo todas essas informações e reconectando-as aqui. Também estamos pegando a quantidade, inserindo-a aqui apenas para garantir que não percamos nenhuma informação. E para o espaço de inventário, lembre-se de que estamos criando espaços de inventário, então eu vou arrastá-lo aqui, faça o login aqui. E para o índice de slots, novamente, basta arrastar daqui e conectá-lo aqui porque nós realmente não queremos usar o slot de inventário antigo. Esse é o slot que será limpo. Quando dizemos crianças claras, não queremos mais usar isso , assim como o índice de slots, estamos limpando tudo aqui. Então, vamos usar o novo índice de slots e, em seguida, fazer inventário do widget de slots e apenas esconder essas canetas, porque eu não acho que elas pareçam boas. Você pode clicar nele e clicar em Ocultar pinos desconectados, e ele ficará muito melhor agora. E foi isso, na verdade. Então, vamos usar essa lógica aqui. Vamos adicionar novamente nossa interface de usuário à grade aqui. E para isso, esses são os widgets. Assim, você pode clicar e arrastar a partir deste e adicionar novamente os widgets aqui. E tudo parece perfeito. Agora, no momento, não podemos realmente ver a diferença porque não estamos realmente atualizando a interface do usuário. Portanto, nos slots de inventário, não estávamos realmente definindo a imagem do item aqui muito visível ou algo assim. Faremos isso na próxima lição. Mas antes de fazermos isso, vamos organizar tudo aqui. Então, vou seguir em frente e mostrarei como eu o organizei. Ok. Então, muito rapidamente, fui em frente e organizei tudo. Posso ver se eles estão tendo todas as notas de redirecionamento, então certifique-se de clicar duas vezes em todas elas. Você também pode selecionar alguns elementos e clicar em Q no teclado. Isso endireitará os elementos. Então, vou me certificar de organizar seu código que você possa entendê-lo melhor. Vamos compilar tudo por enquanto e passar para a próxima lição. 35. 5.10 Mostrando um item no inventário: Ok, então vamos agora atualizar a interface de usuário do slot de inventário. Quando perdemos um item. Aqui, para os espaços de inventário, vamos ao gráfico e vamos excluir tudo aqui. Agora vamos criar um evento personalizado. E esta, vou chamar de interface de usuário do slot de atualização de inventário. O que queremos fazer é simplesmente definir essa imagem aqui dependendo do item que saqueamos e também da quantidade dele. Então, clicando aqui, vamos adicionar duas variáveis diferentes. O primeiro é o item, assim como as informações do item. Esse é o item, vamos chamá-lo de item. E a segunda é a quantidade desse item. Vamos transformá-lo em um número inteiro e compilar. Então, para este item aqui, vamos tirar da quantidade e dizer, é igual a zero? Porque se o item for igual a zero, significa que não há nenhum item nesse espaço de inventário. Nós realmente não queremos exibir o ícone do item ou esse texto aqui, porque realmente não temos um item nesse slot. Então, se a quantidade for igual a zero, vamos pegar essa imagem aqui e ilustrar daqui e dizer que defina essa habilidade. E vamos definir a visibilidade como oculta se não tivermos nenhum item. E vamos fazer isso também com o texto. E você pode ver que eu não tenho uma variável para o texto. Vamos voltar ao Designer. Clique no texto e defina-o essa variável para que possamos vê-la como uma variável. Alice, agora pegue aquela mensagem, vamos ver se conseguimos encontrá-la. E eu não consigo encontrá-lo. E, na verdade, é chamado de quantidades de itens de imagem. Deveria ser um texto. Então, vamos transformar isso em texto. Volte para o gráfico, e é este. Então, vamos arrastá-lo até aqui e dizer definir a visibilidade como oculta também. Ok, então agora ambos estão definidos como ocultos se a quantidade for zero. No entanto, se a quantidade não for zero, queremos definir essa imagem. Então, vamos pegar esse ícone aqui, a imagem aqui. E digamos que defina o pincel a partir da textura. E vamos definir esse ícone. Então, se for falso, se na verdade, se não for zero, na verdade temos um item lá. Vamos definir o ícone dessa imagem aqui em nosso inventário. Então, qual é a imagem para isso? Lembre-se de que temos o item e vamos arrastar daqui e dizer pausa. Então, eu posso ver as informações sobre esse item aqui. E vamos arrastar essa miniatura. Temos a miniatura, então podemos usá-la como liga de textura, pinos não ocultos e desconectados se você quiser ocultar o resto das informações. Agora lembre-se de definir a visibilidade como visível, porque agora ela está oculta. Eu posso simplesmente copiar isso aqui e conectá-lo. E agora podemos definir a visibilidade não muito visível, mas para nenhum sucesso testável. Lembre-se de que, se você o definir como muito visível , estará bloqueando esses slots de inventário. Você, se você definir como nenhum, é testável. Isso significa que você não pode interagir com esse ícone. E não acredito que precisemos interagir com nada sobre esse ícone, então vou configurá-lo como nenhum sucesso testável por enquanto. A mesma coisa para o texto. Precisamos definir a quantidade. Então, vamos pegar o texto aqui e arrastar e dizer texto definido. E vamos definir o texto para o valor aqui. Então arraste esse login de quantidade para aqui, e ele criará automaticamente essa função de dois textos para você. Agora vamos clicar duas vezes para organizá-lo um pouco melhor. E agora, para esses textos, definimos a quantidade. Agora, no meu inventário, o que eu gosto de fazer é que, se esse valor for um não quero mostrar esse número, então ele ficará oculto assim. No entanto, se a quantidade for dois, ele mostrará o número. Então, se for um, eu realmente não quero mostrar o número um. Agora vamos ver o gráfico aqui. E o que podemos dizer é que podemos arrastar a quantidade novamente e dizer que, se for maior que um, queremos exibir essa ramificação. Se for maior que um, então queremos pegar esse texto. Então, deixe-me copiar isso aqui, o texto. E queremos dizer que nenhum sucesso pode ser testado. Então, eu quero mostrar esse texto se for, se o número for maior que um, desse jeito. No entanto, se o número não for maior que um, vamos copiar isso. Então eu quero colocar este como oculto. Então, se tivermos apenas um item, ele não exibirá esse texto. Se tivermos dois ou mais itens, ele exibirá esse texto e pronto, na verdade. Então, deixe-me clicar duas vezes e fazer com que isso pareça melhor também. Certifique-se de que seu código esteja organizado. Pode ficar confuso muito rápido e levará muito tempo para você organizar tudo. Então foi isso. Vamos compilar. E agora temos que chamar essa função. Nós realmente não o guardamos em lugar nenhum. Então, agora vamos voltar ao controle do player. Dentro do controle do jogador, aqui estamos adicionando o item a essa matriz e, em seguida, adicionando as crianças. E agora também precisamos atualizar a interface do usuário porque sim, o item está sendo adicionado. No entanto, não estamos vendo nenhuma alteração porque não estamos atualizando a interface do usuário aqui , atualizamos a interface do usuário, estamos dentro do slot de inventário do WB. Portanto, lembre-se de que no controlador do player de cada um dos slots em que você está criando esse widget, você está criando o slot de inventário WB aqui. Então, podemos realmente usar isso. Podemos arrastar a partir desse espaço de inventário e podemos dizer atualizações, interface de usuário do slot de inventário. Esse é o evento que acabamos de criar. Agora vamos clicar duas vezes, fazer anotações de redirecionamento. Vou levar isso um pouco até aqui. Portanto, não está acima da minha função, não está dentro da minha função, assim. E agora precisamos conectar o item a quantidade e o item. Lembre-se, lembre-se de que você já disse isso aqui, chegamos ao item. O item aqui, bloqueie-o, a quantidade também, conecte-o. Vamos clicar duas vezes e fazer com que pareça um pouco melhor. E assim, vamos compilar e salvar. Agora não podemos realmente testá-lo com os itens porque não temos um sistema de saque. Mas o que podemos fazer é acessar os componentes do inventário e entrar no inventário, e apenas para pegar as armas, por exemplo você pode simplesmente clicar no sinal de adição e adicionar um item aleatório. Aqui. Nos itens, vamos apenas adicionar algo, por exemplo, isso, eu não conheço essa alavanca aqui. E podemos dizer que isso realmente não importa, trabalho, seja o que for. E agora vamos definir a quantidade para um. E o índice de caça-níqueis, tudo o que é, realmente não importa. Então, lembre-se, apenas certifique-se de ter o ícone e a quantidade. Então, vamos clicar em Jogar e ver se isso funciona. Então, clicando no inventário, posso ver minha inteligência. Se eu mudar a categoria, você verá que eu posso vê-la. Eu volto para as armas. Eu posso ver meu cutelo. Então, isso está funcionando corretamente. Agora, também podemos testá-lo aqui nas poções. Vamos adicionar uma poção. Vamos clicar no item. E agora vamos aqui, selecione uma das poções, por exemplo, poção dessa maneira, defina a quantidade para cinco, por exemplo, que possamos ver se o texto aparece. E se clicarmos em Jogar, clique em AI e clique nas poções. Você pode ver, eu posso ver que tenho cinco quocientes. Se eu clicar nas armas, posso ver a comida da minha arma. Não temos comida. E agora você pode ver que está funcionando corretamente. Ok, então vamos excluir este que acabamos de criar, e as armas e os quocientes. E agora vamos compilar tudo, salvar tudo e seguir em frente. 36. 6.01 Interagindo com os itens: Vamos agora começar a interagir com os itens. Então, primeiro, vamos às plantas e ao player. E vamos criar uma nova ação de entrada na qual podemos clicar em um botão e carregar os itens. Então, vamos clicar com o botão direito do mouse, acessar as entradas e a proteção. E vamos chamar isso de um saque ou você pode chamá-lo de interação. Isso depende de você. Vamos aos contextos de mapeamento. E dentro daqui, vamos clicar na nova vantagem aqui nos mapeamentos. Vamos minimizar tudo isso aqui para o novo, vamos adicionar o alaúde, alaúde. E eu vou pressionar aqui e pressionar meu botão EE no teclado. Vou apenas usar o IPA e os itens de soluto. E para o gatilho, clique no sinal de mais. E aqui, defina-o como pressionado e pressionado, apenas certifique-se de que você não possa enviar spam para este botão e. Então, se você segurá-lo, ele não funciona o tempo todo. Então, pressionar significa apenas executá-lo uma vez quando eu clico em E. Ok, então isso é feito aqui. Agora vamos fechá-lo. Vá até o player. E aqui no player, deixe-me explicar um pouco isso . E aqui embaixo, eu posso dizer que IA é muito grande e ter esse evento aqui. Agora, o que podemos fazer é o que alude que precisamos para executá-lo no servidor. Até agora, trabalhamos com um cliente porque tudo isso era UI. Porém, ao saquear itens, certifique-se de executá-los no servidor, pois você deseja verificar se os clientes podem realmente perder os itens. É assim que você evita fraudes. Então, quando você joga aqui e joga como servidor, então esse, esse aqui é o servidor. Esse aqui é o cliente. Digamos que os clientes sejam os clientes conectaram seus amigos ao seu servidor. Eles vão pressionar E. Mesmo que não haja itens aqui. Precisamos verificar. Quando você clica em E aqui como cliente, essas informações vão para o servidor. O servidor verifica se essa linha está em um item ou não e, em seguida, enviará essas informações de volta ao cliente no momento. Não estou em nenhum item. Vou clicar em E. Essa informação precisa ser enviada para o servidor. O servidor dirá: Não, você não está em cima de nenhum item, você não vai perder nada. Mas essas informações serão enviadas de volta ao cliente. Isso dirá ao cliente que você não está usando nenhum item e eu não vou perder nada aqui. Sempre pegando o código, verificando com este servidor e apenas certificando-se de que os clientes não estão trapaceando e enviando essas informações de volta para o cliente. Então, até agora, trabalhamos com os clientes porque era interface de usuário, mas agora é na verdade lógica do jogo. Então, aqui, em vez de apenas escrever o código diretamente daqui, porque se você simplesmente escrever uma string de impressão aqui, novamente, é muito bom escrever uma string impressa para ver o que acontece se eu clicar em play. E aqui eu clico em e como servidor, diz Olá. Se eu for até o cliente e clicar em E como cliente, ele diz Olá. Assim, o cliente e o servidor podem executar esse evento. Quero executar o código somente pelo servidor, então não vou escrever o código aqui. No entanto, vamos criar um novo evento personalizado chamado server loot. E este vai rodar em um servidor confiável. E então eu vou executar o evento do servidor aqui em cima. Então, quando o cliente curtir o E, ele também será executado no servidor. Então, para os itens, deixe-me colocar um item aqui. Então, para os itens, vamos colocar, sei lá, essa banana aqui, algo aleatório. E vamos colocar esse cutelo. Vou colocá-los um em cima do outro, para que isso me diga quantos itens estou em cima. E eu vou colocar um item sozinho aqui, assim como este, para que possamos testá-lo. Então, o que podemos fazer aqui para o saque é mouse e dizer que está sobreposto. Atores, só estou procurando por quantos atores estamos sobrepondo? E agora ele vai te perguntar: quais atores você quer que sejam? Quero que seja a base de itens que criamos anteriormente. Então, vamos pegar os atores sobrepostos do GED quando você estava de pé sobre os itens, para verificar quantos atores estamos sobrepondo. Vou pegar isso e dizer comprimento e depois perguntar se isso está acima de zero. Então, eu só quero executar esse código sempre que estou realmente em cima de um item, porque se o comprimento da atriz sobreposta for zero, então não estamos em cima nada e eu não quero executar meu código. Então, se estiver acima de zero, eu realmente quero executar meu código. É isso para este vídeo. Vamos clicar na corda laranja aqui e ver se tudo está funcionando corretamente. E o que eu quero imprimir, vamos imprimir o tamanho dos atores olímpicos, o que significa quantos atores estamos realmente sobrepondo? Então, clicando na peça. E aqui como servidor, eu vou até esses dois itens clicando no IE, você pode dizer que se chover também, eu estou na verdade em dois itens agora, se eu entrar aqui e clicar em e, nada acontece porque lembre-se que só estamos imprimindo quando está acima de zero. Se eu for até lá e silenciar isso aqui, diz um item, então está funcionando corretamente. E se eu fizer isso também como cliente, você pode ver que o servidor imprime as informações, que é muito bom porque só queremos executar esse código no servidor e tudo está funcionando corretamente. Então, vamos deletar isso e continuar no próximo vídeo. 37. 6.02 Adicionar inicial à lógica de inventário: Ok, então foi aqui que paramos e agora vamos adicionar a lógica inicial para adicionar o item. Então, vamos voltar aos componentes e ao interior do componente de inventário. E aqui precisamos criar um evento personalizado chamado adicionar ao inventário. Então, vamos clicar com o botão direito do mouse em um evento personalizado para adicionar ao inventário. E este, podemos percorrer o cliente porque já o executamos no servidor e estamos interagindo com um item. E agora vamos analisá-lo no cliente porque na verdade é uma interface de usuário e precisamos adicionar o ícone ao inventário. Adicione ao inventário executado pelo cliente e o servidor está executando o cliente proprietário, desculpe e é confiável. Agora vamos analisá-lo até aqui. Cl, adicione ao inventário. E o que precisamos adicionar é apenas o item. Então, clicando aqui, clicando no botão Mais, vamos encontrar a base do item como o tipo de variável porque queremos adicionar esse item específico ou uma alusão. Agora podemos arrastar isso e adicioná-lo aqui também. E vamos compilar. E agora, para o jogador, agora podemos pegar esse inventário e dizer adicionar ao inventário, assim. E de qual item estamos falando? Estamos falando sobre esse item específico que estamos sobrepondo. Então, vamos arrastar aqui, criar algum espaço. Agora, o que queremos aludir é que você pode fazer isso com dois métodos, você pode fazer isso com dois métodos dependendo do jogo que você está criando. Então, aqui, quando você clica em E e quer perder um item, você pode saquear todos os itens de uma vez. Você pode fazer isso assim. Então você pode pegar aqui e dizer Para cada loop, e você pode, para cada um desses itens, adicioná-los ao inventário. No entanto, para o meu jogo, eu só quero saquear um item por vez. Então, vou sair daqui e dizer que obtém uma cópia. Então, eu não vou repetir isso. Eu só vou pegar o primeiro item. Não precisamos de um plugin aqui. Então, vou pegar o primeiro item com o qual estamos sobrepondo e depois adicioná-lo ao inventário. Então, pegando esse item aqui, agora, não podemos realmente conectá-lo diretamente porque este é um objeto ator. E se o conectarmos aqui, não funcionará porque este é uma referência de objeto base de item da BP. Então, duas coisas diferentes. Então, agora sabemos que isso é baseado em itens. Nós, nós fizemos isso aqui no filtro. Filtramos que a única coisa com a qual interagiremos aqui é com base no item para ouvir. E eles entendem, podemos arrastar a partir daqui, e podemos obter a referência do item. Agora, novamente, criamos apenas interfaces para o player e para o controlador do player. Então, vamos fazer um novo. Vamos clicar com o botão direito do mouse em blueprints e em Blueprint Interface. Vamos fazer um para a base do item. E aqui vamos clicar duas vezes e, para a função, obter a referência do item. E agora estão as saídas. Lembre-se de que aqui você escreve o plano ao qual deseja se referir. Quero fazer referência à minha base de itens e vou chamá-la de item. Agora vamos até a base do item e adicionar essa interface. Vá para itens, itens baseados aqui nas Configurações da Classe e aqui na base do item da interface compile aqui na interface, clique duas vezes aqui e defina a referência como autorreferência porque estamos dentro da base do item. Agora vamos voltar para o jogador. E aqui podemos arrastar agora e dizer obter referência do item. Agora temos essa referência de item e agora podemos conectá-la aqui e adicioná-la ao inventário. Vamos juntá-los aqui, fazer com que pareça um pouco melhor, algo assim aqui, você pode até mesmo clicar duas vezes aqui e fazer com que fique assim. Estamos recebendo o primeiro item , sobrepondo a largura e obtendo essa referência e depois adicionando-o ao inventário novamente, se você quiser saquear cada item em que está com apenas um clique. Você tem que pegar isso, digamos, para cada loop. E então, para cada loop, obtenha a referência do item. E então você pode conectar cada um aqui. Então, vai passar por isso até que não haja mais itens para saquear e depois vai parar. Então, eu só quero saquear um item por vez. Estou satisfeito com isso, com tudo, e deixe-me voltar ao inventário agora. Então, aqui, agora temos um item ao qual estamos nos referindo. Então, se você clicar em Imprimir e se conectar aqui, conecte isso com isso aqui. Então você pode realmente ver o que, o que está acontecendo. Então, vamos clicar em Jogar. Agora. Aqui está o servidor. Eu vou fazer isso aqui, como em E e vai dizer carne. Então, ele sabe qual item está perdendo. Estou agora com dois itens, ele vai perder. O primeiro está sobreposto com. Se eu clicar nele, vai dizer Cleaver. Se eu for até aqui para o lado e só interagir com a banana, vai dizer banana. Incrível. Então, tudo está funcionando. Então, aqui o que eu quero fazer é clicar com o botão direito do mouse e promover isso para uma variável e chamá-la de item para adicionar. E para este, eu também quero obter as informações do item e transformá-las em uma variável. Haverá muito mais limpeza para nós mais tarde. Portanto, lembre-se de que obtivemos informações do item, mas precisamos de um nome. E lembre-se novamente, na base do item, já criamos esse nome de item, essa variável aqui. E quando fizemos isso na base do item ou de cada uma dessas crianças solteiras, tivemos que escrever o nome do item aqui. Então, se eu abrir normalmente assim, lembre-se de que quando você cria uma variável na classe de projeto principal, baseada em itens, todos os filhos herdarão essa variável. E agora você pode inserir aqui os padrões da classe e colocar os nomes de todos eles aqui. Então, na verdade, já temos esse nome. Então, vamos para o componente de inventário. E agora vamos derivar do item e obter a variável do nome do item. E agora podemos conectá-lo aqui e obter as informações desse item. Só para este, vou clicar com o botão direito do mouse em promover uma variável e chamá-la de item para adicionar informações. Então, temos as informações do item que queremos adicionar, e foi isso por enquanto. Então, vamos compilar tudo e passar para a próxima lição. 38. 6.03 Adicionando item ao inventário: Ok, agora precisamos de alguma lógica para adicionar o item ao inventário. Então, aqui fizemos esse acréscimo ao inventário. Depois desta lição, verificaremos se esse item é empilhável ou não. Se não for empilhável, criaremos uma nova pilha no inventário e adicionaremos esse item. Se o item for empilhável, vamos verificar se já temos esse item no inventário e adicioná-lo à pilha. Se não, vamos fazer uma nova pilha. Vamos fazer isso e o próximo, no entanto, por apenas dois, vamos entrar em um fluxo melhor. Precisamos criar uma função primeiro antes de podermos fazer tudo isso. Então, vamos criar uma nova função aqui, chamá-la de adicionar item ao inventário. Então, esta função aqui é a etapa final. Então, quando criamos uma nova pilha, ou encontramos uma pilha parcial e adicionamos esse item, essa função será implementada. Então, digamos que criamos uma nova pilha com sucesso. Em seguida, adicionaremos esse item ao inventário depois de criarmos uma nova pilha. Portanto, essa é a etapa final. Vamos fazer isso antes de fazer todo o resto, porque isso tornará as coisas muito mais fáceis. Vamos adicionar o inventário do Item dois. Aqui, para a entrada, vamos fazer uma referência às informações do item. Portanto, o item que queremos adicionar e também a quantidade do item. Então isso é um número inteiro e vamos chamá-lo de quantidade. E lembre-se de que, para os itens, também temos os slots de inventário. Então, se voltarmos para o controle do jogador e aqui, para cada item, também temos o ISM, temos a quantidade do item, também temos o slot do inventário e o índice do inventário, então podemos usá-lo aqui também. Então, vamos voltar ao componente aqui e quatro aqui. Vamos alterá-lo para slots de inventário. Vamos selecionar essa referência do Widget Blueprint e chamá-la de slots de inventário. E esse, vamos chamá-lo de índice de slots. E também estou fazendo um novo. E precisamos saber a qual inventário o estamos adicionando? Estamos adicionando isso à categoria de armas? Estamos adicionando-o a essa categoria de alimentos ou a essa categoria de poções? Então, vamos fazer um novo aqui também. E vamos procurar por espaços de inventário. Porque esses são os tipos de estruturas de slots de inventário. Então, espaço de inventário, vamos transformá-lo em uma matriz, e vamos chamá-lo de inventário único. Portanto, depende da categoria de inventário em que estamos. Queremos adicionar esse item dentro dessa categoria. Ok, então vamos fazer esse inventário agora e definir o elemento da matriz. Agora, fora dessa função, será decidido a qual dessas três ela será adicionada. Vamos pegar essas informações e definir o elemento da matriz. Agora, qual é o índice? O índice é simplesmente esse índice de slots. Muito simples. Agora, para este item, novamente, como antes, vamos pegar isso e escrever make. Agora, para este item, queremos adicioná-lo aqui. Queremos adicionar essa quantidade, queremos adicionar esse espaço de inventário e queremos adicionar esse índice de slots. Portanto, esse é o item que estamos adicionando ao inventário. E, na verdade, é tão simples quanto isso, essa função está concluída. Há um detalhe muito pequeno. E imagine se já estivéssemos dentro dessa categoria. Então, digamos que eu esteja saqueando uma arma, estou carregando tudo que acontece. E eu já estou dentro disso. Como se eu já tivesse minhas categorias de inventário de armas selecionadas. Então, quando eu carrego uma arma, ela deve atualizar instantaneamente meu inventário. Então, eu posso realmente ver que coloquei a arma aqui apenas para ter certeza de que o inventário foi atualizado. Então, o inventário em que eu já estou, então, se eu perder uma arma e já estiver dentro da categoria de armas, queremos ter certeza de que a interface do usuário esteja atualizada eu possa ver essa mudança na interface. Então, o que queremos fazer pegar esse item e vamos explicar isso aqui. E eu quero pegar a categoria desse item que estou carregando. Agora eu quero ver se esse item que estou carregando tem a mesma categoria que eu selecionei. Aparentemente. Se tiver, quero atualizar a interface do usuário. Caso contrário, não quero atualizar a interface do usuário. E a razão pela qual eu não quero atualizar a interface é porque, lembre-se, se eu simplesmente colocar essa comida aqui e ela for carregada aqui, eu selecionei a categoria de armas. Nós realmente não precisamos atualizar essa interface de usuário porque ela foi adicionada à comida e eu estou dentro das armas , então não precisamos realmente atualizar nada agora. Lembre-se de que, ao clicar em novas categorias aqui, atualizarão automaticamente todos os slots que já estamos atualizando quando clicamos nas categorias de inventário. No entanto, só queremos atualizar se já estivermos dentro dessa categoria, pois ela não está sendo atualizada em nenhum lugar instantaneamente. Então, aqui vou verificar se essa categoria de item aludida é igual aqui, igual a enum, se é igual à categoria selecionada que eu tenho agora. E se for, vamos pegar uma filial aqui. Se for igual, lembre-se de que, no widget do slot de inventário, criamos nosso telefone, criamos nosso evento chamado atualizações, interface do usuário do slot de inventário. E o item que temos que conectá-lo, ou seja, esse item e essa quantidade. Então, agora ele vai atualizar essa interface de usuário sempre que eu carregar meu item. Então, se eu já estiver dentro dessa categoria selecionada e esse item for adicionado à categoria de inventário selecionada. Ele atualizará instantaneamente minha interface de usuário para que eu possa realmente ver a mudança, certo? Agora eu criei alguns nós de redirecionamento e isso é o que parece, um pouco mais organizado, organize-os antes, apenas certifique-se de que seu código esteja mais organizado. E agora, quando você estiver satisfeito com o resultado, vamos agora compilar, salvar tudo e seguir em frente. 40. 6.05 Encontrando uma pilha parcial: Tudo bem, bem-vindo de volta. Agora vamos para a segunda parte, onde vamos criar uma macro para encontrar uma pilha parcial que já existe no inventário. Até agora, o que fizemos foi tentar ver se o item é empilhável ou maluco. E se não for empilhável, estamos criando uma nova pilha e adicionando esse item ao inventário. Agora, se o item for empilhável, vamos tentar descobrir no inventário se já temos esse item. Agora, o que podemos fazer como antes aqui, onde temos o inventário. Na verdade, vamos copiar tudo isso aqui. E eu vou copiar esse loop também. Basta copiar isso, voltar e colar. Então, basicamente, assim como antes, vamos usar essa categoria para este item. Em seguida, vamos selecionar a categoria. Porque, dependendo da categoria do item, queremos dar uma olhada nesse inventário específico, por exemplo, se estivermos fazendo alusão a uma poção, selecionaremos a poção e percorreremos o inventário em busca das poções para ver se já temos o item que estamos carregando. Então, se isso for verdade, vamos nos conectar aqui ao plano de execução e para descobrir se temos esse item específico ao qual estamos nos referindo, podemos derivar disso e quebrá-lo. E aqui neste item, vamos quebrá-lo novamente. E lembre-se que aqui temos um nome para o item. Então, vou arrastar daqui e dizer igual e selecionar este para que o texto seja igual exatamente. Agora, se o nome for exatamente igual a esse nome do item, inclusive, eu vou pegar isso, dividir isso também e conectar o nome aqui. Esconda também os pinos não conectados deste. E vamos fazer um galho também. Então, agora o que estamos fazendo é vasculhar o inventário, por exemplo, poções. Então, para carregar uma poção e, em seguida, para cada item dentro dela, estamos verificando se esse nome existe para o item. Estamos fazendo alusão. Se o nome existir, isso significa que o item já está no inventário e encontramos uma pilha parcial aqui. A segunda coisa que precisamos fazer é ter certeza de que agora estamos apenas verificando se o item está no inventário. Mas e se o item já tiver atingido o tamanho máximo da pilha? Então, por exemplo, poções, digamos que eu possa perder cinco poções de saúde. E se? E se, sim, eu tiver o item em meu inventário, então encontrei uma pilha parcial. No entanto, eu já tenho uma pilha completa sobre isso, sobre aquele cambaleador que eu tenho. Digamos que não apenas verifique o nome, mas também verifique o valor que temos no inventário. Então, aqui, vamos clicar nesse item e mostrar a quantidade de itens desse item dentro do nosso inventário. E a quantidade desse item precisa ser menor do que o tamanho máximo da pilha desse item aqui. Então, vamos mostrar o tamanho do Max Stack e conectá-lo aqui. Portanto, para encontrar uma pilha parcial no inventário, ela precisa ter exatamente o mesmo nome do item dentro do nosso estoque. E o item dentro do nosso estoque precisa ser menor que o tamanho máximo da pilha do item. Caso contrário, precisamos encontrar uma nova pilha e adicionar edição a um novo espaço de inventário. Vamos clicar aqui, apenas oculte os pinos conectados a este também. Aqui, vamos arrastar e dizer end Boolean. Então, usamos esse e o booleano. Portanto, se o nome for exatamente o mesmo e a quantidade for menor que o tamanho máximo da pilha, podemos dizer que encontramos uma pilha parcial. Então, vamos criar um novo booleano. E esse que eu vou chamar tem que criar uma pilha. Vou definir isso como falso aqui porque agora encontramos uma pilha parcial e a quantidade, não é a quantidade, não é maior do que o tamanho máximo da pilha. É menor do que o tamanho máximo da pilha, o que significa que podemos realmente adicionar itens no topo da pilha. Portanto, ele precisa criar uma pilha definida como falsa e podemos prosseguir e editar o item. Então, antes de fazer isso, assim como antes, vamos selecionar tudo isso aqui. Vamos clicar com o botão direito do mouse e transformá-lo em uma macro. E essa macro, chamaremos de encontrar pilha parcial, como esta aqui. E para a saída novamente, preciso adicionar um item de inventário. Então, arrastando este ano. Então, para a saída, eu preciso de tudo isso. Novamente, assim como fiz com a nova pilha de criação. Então, vamos clicar em Encontrar pilha parcial. Vamos adicionar algumas variáveis aqui. O primeiro está balanceado, então encontramos um item e este é um pino de execução aqui. E vamos deixar isso de lado por enquanto. Então, item encontrado aqui na pilha parcial, novamente, como antes, item a ser adicionado. E então temos a quantidade. Para adicionar, temos o índice do slot e o último aqui temos a variável de inventário. O primeiro item é a informação do item. Esse é o item que queremos adicionar. Essa quantidade é apenas um número inteiro. O índice do slot também é apenas um número inteiro. E o compartimento do inventário, na verdade, esqueci de adicionar. Deixe-me adicionar o slot de inventário, que é o Widget Blueprint. Portanto, faça o inventário dos slots e a seleção desses planos de widget. Colocando aqui, vou colocá-lo acima do índice do slot aqui. O inventário são os slots de inventário e, em seguida, selecione-o como uma matriz. E este, vou citar como não encontrado. Então, se não encontrarmos um item, e esta é uma caneta de execução. E também quero fazer um novo loop completo, como antes, com o qual podemos fazer algo aqui. Portanto, o loop é concluído, não encontrado. Vamos compilar e salvar tudo. Tudo bem, então vamos voltar aqui e reorganizar um pouco as coisas dentro dessa macro. Então isso é o que você tem até agora. E se não precisarmos criar uma pilha, podemos adicionar isso ao inventário. Então, o que queremos adicionar? O que queremos acrescentar? Este item está aqui, item, item para adicionar informações. Vamos copiar e colar aqui, a quantidade do item. Vamos arrastar esse item para adicionar como antes e dizer quantidade. Pegue isso, obtenha a quantidade do item e adicione-o aqui. Para o slot de inventário. Temos esse inventário aqui para que possamos usar o slot e o índice do inventário. Vamos arrastá-los para aqui também. Então temos o inventário novamente. É esse aqui. Vamos arrastá-lo e conectá-lo. Ok, então aqui estamos verificando se a quantidade de itens no inventário é menor do que o tamanho máximo da pilha para o item saqueado ou para o item mencionado aqui. E se for, encontramos um item e não precisamos criar uma pilha. Então, deixe-me sair aqui agora, antes de fazermos qualquer coisa aqui, deixe-me adicionar outra lógica para ter certeza. Então, aqui, agora, há algo que não estamos verificando. Se eu pegar essa quantidade para adicionar o item e precisar perguntar, ela é menor ou igual ao ano? Deixe-me pegar o item para adicionar informações, dividi-las e obter o tamanho máximo da pilha conectada aqui. Agora, antes de verificarmos o item do inventário, agora, estou verificando a quantidade que estou aprendendo agora. É mais do que eu posso colocar dentro dessa pilha? Ou posso colocar toda essa quantidade na pilha que acabei de encontrar? Então, apenas me certificando de que não vou criar outra pilha aqui. Então, deixe-me conectá-lo. Portanto, se essa quantidade a ser adicionada for menor ou igual ao tamanho máximo da pilha, não criaremos nenhuma pilha. Então, deixe-me adicioná-lo aqui também. E deixe-me, na verdade, adicionar o item primeiro. E então diga que tem que criar a pilha está definido como falso. E deixe-me ir em frente e quebrá-lo. Então, no momento, não temos nenhum pino de execução de quebra, então deixe-me clicar nele e vamos criar outro chamado break loop. Agora vamos nos conectar ao circuito de freio. E aqui embaixo, se for verdade, como a quantidade de itens que precisamos adicionar, se na verdade não for menor que o tamanho máximo da pilha, que significa que realmente precisamos criar outra pilha. Então, vamos adicionar tudo o que temos nessa pilha atual. E então vamos criar outra pilha. Então, novamente, assim como antes, lembre-se aqui e na nova pilha de Craig, você calculou o que restou aqui. Então, na verdade, precisamos fazer a mesma coisa. Vamos copiar e colar isso. Então, vou copiar tudo isso aqui, indo para o gráfico de eventos aqui. E podemos colá-lo aqui. É isso que precisamos adicionar ao inventário novamente, assim como antes, precisamos adicionar a quantidade é o tamanho máximo da pilha para este item aqui. E vamos conectar o item. Vamos conectar o slot do inventário, o índice do slot e o inventário. E então vamos definir esse booleano como verdadeiro. Portanto, temos que criar uma nova pilha para adicionar essa quantidade restante de itens. Então, vamos definir isso como verdadeiro. E então eu vou arrastá-lo e conectá-lo aqui porque isso remonta a esse loop de interrupção. Vamos clicar duas vezes aqui. Vamos limpá-lo. Então, agora vamos voltar a essa bela pilha parcial e vamos fazer algo aqui na íntegra. E lembre-se também de fazer essa pausa aqui dentro. Então, estamos nos certificando de que estamos realmente quebrando o ciclo ao máximo. Vamos pegar nossas mãos para criar uma pilha e fazer um galho. Então, agora estamos perguntando, temos que fazer uma pilha ou nozes? O que configuramos durante esse ciclo? Se tivermos que criar uma pilha, queremos definir isso como item não encontrado, porque precisamos criar uma nova pilha. Se não precisarmos criar uma nova pilha , o loop estará concluído, assim. Vamos colocá-lo aqui, desse jeito. Então, se tivermos que criar uma nova pilha, isso significa que o item não foi encontrado. E se o item não for encontrado, vamos arrastá-lo até aqui e criar uma nova pilha. Então, agora o item não foi encontrado. Temos que criar uma nova pilha. Ok, então se o item não for encontrado, criaremos uma nova pilha e o loop estará completo, ou seja, se já encontrarmos a pilha e não precisarmos fazer nada para que possamos tocar um som ou o que quisermos. Então, agora vamos voltar para a pilha parcial fina. Estamos perdendo uma etapa final aqui. Digamos que dissemos aqui que temos uma pilha igual ao nome do item que aludimos e que a quantidade do item dentro desse inventário é menor do que o tamanho máximo da pilha para o item que estamos nos referindo. Se isso for falso, precisamos fazer algo como antes. Vamos fazer esse loop aqui e dizer mais, mais. Então, vamos incrementar em um. E, assim como antes, estamos nos certificando de que isso aqui seja menor do que a quantidade de slots que temos em nosso inventário. Vamos fazer um galho. E se isso for verdade, se for menor do que a quantidade, na verdade , vamos inserir aqui. E se for realmente menor do que a quantidade de vagas, vamos seguir em frente e novamente, basta dar uma volta aqui e encontrar um item no próximo índice, certo? Então, eu o organizei um pouco. Então, agora é maior do que a quantidade de slots que temos. Então, consideraremos que isso deve criar uma pilha para ser definida como verdadeira, porque não conseguimos encontrar nenhum item ao qual possamos adicionar esse item aqui também que esteja fazendo alusão. Então, temos que criar uma nova pilha e arrastar a partir e ir em frente e conectá-la ao intervalo. Porque agora temos que quebrar o ciclo. E agora, quando formos adiante e quebrarmos o ciclo, lembre-se de que quando ele estiver concluído, ele diz: sim, você precisa criar uma pilha e ela vai até o item não encontrado, que então passa e cria uma nova pilha. Ok, então vamos ter certeza de que isso realmente funciona e ver se temos algum bug como antes. Vamos salvar tudo. Agora, as bananas têm o valor empilhável definido como verdadeiro, então podemos experimentá-las com as bananas. E vamos definir isso aqui também. Na verdade, vamos verificar o que dissemos sobre as bananas. Então, indo para as informações do item que a banana tem, se a maximizarmos, ela terá o tamanho máximo, tamanho da pilha de dez. Então, vamos duplicar essa banana aqui e segurando Alt e arrastando, vou duplicá-la aqui. Então, para este, vou definir a quantidade do item para cinco. E para este, vou configurá-lo para quatro. E então vamos copiá-lo novamente. E vamos definir esse um para cinco novamente. Vamos salvar tudo. Vamos tentar jogar para o servidor. Se eu clicar em AI, clico em E aqui. Foi adicionado à comida aqui. Sim, temos cinco bananas. Eu clico nele aqui. Diz: “Pois há algo com a quantidade”. Estamos configurando isso de forma errada aqui. E se eu clicar na orelha, está configurada para cinco, então há algo errado. É só definir a quantidade aqui. Vamos voltar. E, claro, vejo o bug imediatamente aqui na busca de pilhas parciais. Na verdade, não estou adicionando aqui a quantidade. Então, deixe-me deletar isso, na verdade, deixe como está. O que precisamos fazer é pegar quantidade desse item e depois editá-lo com o que já está dentro do inventário, é claro. Então, pegando isso aqui e pegando dizendo adicionar, então mais perda, o valor que já está dentro do inventário. Então, deixe-me conectá-lo aqui. E deixe-me conectar isso ao T2 ed e compilar. E pouco antes de experimentarmos o jogo, então aqui no ciclo, conclua vamos destruir o item como antes, porque o estamos adicionando ao inventário. Deixe-me afastar tudo isso um pouco daqui. Deixe-me colar isso. E para completar o ciclo, vamos destruir os itens. Então, deixe-me redimensionar isso para você. Deixe-me clicar em E aqui. Agora estamos perdendo cinco ou carregando nove. Agora deveria dizer dez e por apenas 10,5. E eu suspeito que, na verdade isso está correto agora, mas suspeito que temos um problema novamente com um atraso, assim como fizemos aqui com a criação de uma nova pilha. E atrasamos o código. Se eu puder encontrá-lo aqui, atrasamos o código. Vamos fazer a mesma coisa porque eu suspeito que está realmente fazendo a mesma coisa aqui. Então, quando o item não for encontrado e criando uma nova pilha, vamos atrasá-la em 0,03, como antes. Vamos tentar antes de reorganizar tudo, vamos clicar em Jogar. E eu vou dar uma olhada nisso. Vou voltar aqui, vou fazer isso, vou carregar isso também. Então, agora diz cinco, ainda está funcionando. E se eu tentar aumentar o atraso? E eu tento isso de novo? Agora, está funcionando perfeitamente. Então, na verdade, é esse atraso. Precisamos corrigir esse atraso aqui, talvez algo em 0,05. Não sou fã de colocar isso muito alto porque você pode realmente sentir isso no jogo se colocar muito alto. Só estou tentando fazer com que funcione muito bem. Então, 0,05 funciona bem, você pode fazer dessa forma, talvez 0,04 semanas também. Mas agora funciona perfeitamente. Então, agora, na verdade, estamos adicionando esses. Então, se clicarmos em jogar, eu simplesmente amei os que têm cinco. Então, este, eu vou deixar este também, que tem cinco. Agora, se eu carregar este, ele também será adicionado ao inventário. E se eu mencionei isso e isso, eu os coloquei no meu inventário. Porque lembre-se de que tínhamos duas facas e dois cutelos, essa precisa ser aumentada com o atraso. Então, talvez 0,05 seja um número melhor. Vamos mudar isso aqui também na pilha de criação de uma nova pilha, só para não entendermos esse bug. E como teste final, vamos rodar o jogo novamente. Deixe-me colocar isso aqui, dá cinco. Deixe-me carregar esse meio. Isso é 2.2. Isso está correto. Isso engula isso, e tudo isso está correto. Agora, incrível. Então foi isso para criar uma pilha parcial. Então, vamos tornar isso mais organizado para esse atraso, aqui estão apenas, vamos colocá-lo aqui embaixo. Então, o que estamos fazendo aqui, agora criamos uma nova pilha e também estamos encontrando uma pilha parcial se já a tivermos no inventário e o item for empilhável, caso contrário, se não for encontrado. Portanto, já temos uma pilha completa. Vamos criar uma nova pilha para isso. E aqui no ciclo completo, você pode destruir o item. Você pode até reproduzir um efeito sonoro, e faremos isso mais tarde. Então, organize seu código apenas para que ele pareça melhor, e pronto seu código apenas para que ele pareça melhor, por enquanto, salve seu trabalho e vamos seguir em frente. 41. 6.06 Otimizando o inventário: Olá e bem vindo de volta. Então, agora eu quero otimizar o inventário antes de continuarmos. Portanto, há um pequeno bug. Agora, se eu aludir a essa aqui e a essa aqui, é quatro mais cinco, deveria ser nove bananas. E isso está correto. No entanto, se eu clicar em Jogar novamente e aludir a eles sem abrir o inventário, ele diz nenhum corretamente. Se eu perder o último e ele disser dez, o primeiro baralho, e para a próxima pilha, não aparece dessa forma. Mostra apenas quatro. Deve ser 10.4. Portanto, há um bug aqui. Isso ocorre porque não estamos criando todos esses widgets, a menos que tenhamos aberto o inventário. Então você pode ver se eu apertei o play novamente. E se eu abrir o inventário, incluo em todas as categorias, fecho o inventário e aludo a tudo aqui. Você pode ver que quando eu abro o inventário, ele realmente funciona. Portanto, a razão pela qual está com problemas desde o início é porque não estamos abrindo o inventário. E isso porque também não estamos exibindo todos ou criando todos esses slots, a menos que tenhamos aberto o inventário. Esse é um pequeno bug que queremos corrigir. E também quero corrigir e otimizar o inventário porque sei que o código pode ser melhor e vamos fazer isso da melhor maneira. Mas vamos até o controle do player. Vamos para o PC **** aqui embaixo. E até agora temos esse chamado Criar, widgets de slots de inventário. Eu quero separar a criação aqui. Então, o que precisamos fazer em vez de criá-lo apenas para a categoria de inventário selecionada. Precisamos criar isso para todas as categorias, mesmo que não tenhamos aberto o inventário. E então eu quero um evento separado em que exibamos os widgets do slot de inventário. Então, na verdade, criamos tudo isso desde o início. Então, quando abrimos o inventário e clicamos em categorias diferentes, não continuamos criando novas. Não precisamos, só precisamos criar isso uma vez aqui e adicioná-los à matriz. E então, apenas exibimos os slots já criados quando clicamos nas categorias. Então, há essa otimização que podemos fazer. Então, deixe-me clicar com o botão direito do mouse, acessar eventos personalizados e criar um chamado widgets de exibição, inventário e slot. E vamos fazer um novo aqui, atendendo aos clientes. Portanto, trabalhe com um cliente confiável. Então, para este, queremos apenas exibir os widgets. Então, na verdade, é essa última parte do código. Deixe-me copiar isso aqui. Vou clicar em Control X para recortá-lo e colá-lo aqui. Agora precisamos de uma referência ao inventário aqui. Então, vou clicar aqui e pesquisar inventário, inventário AAC e chamá-lo de inventário. E essa, clara, as crianças também precisam estar aqui, porque esta serve apenas para exibir os espaços do inventário. Então, esta é uma palavra específica exibida, e eu vou adicioná-la aqui. E também precisamos desse loop aqui. Também precisamos dele aqui em cima. Então, vou copiá-lo e colá-lo aqui porque precisamos percorrer todos os widgets e exibi-los. Então, precisamos disso também. E eu também preciso dessa categoria selecionada. Vou copiá-lo e colá-lo aqui embaixo. E vamos conectar o inventário. Agora, para essas linhas e colunas, lembre-se que acabamos de dizer aqui dividido por quatro. Vamos recortar isso aqui, colar aqui embaixo, conectá-los assim e também conectar o índice a este ano. E aqui, para esse inventário, o que podemos fazer é simplesmente derivar disso e dizer, obtém, o que obtemos? Acabamos de obter esse índice aqui. E vamos pegar isso e fazer uma pausa. E agora, para o item que queremos atualizar aqui para o inventário, vamos arrastá-lo e conectá-lo. A quantidade também é exatamente essa. Agora, para esse conteúdo aqui, lembre-se antes do conteúdo ou da criança para grade aqui, o conteúdo é esse widget que criamos. No entanto, lembre-se desse widget, estamos salvando-o dentro dessa matriz no slot de inventário e no índice do slot aqui e no slot de inventário. Deixe-me deletar isso aqui. E eu posso arrastar do compartimento de inventário e adicioná-lo aqui ao conteúdo, além de atualizar a interface do usuário do slot de inventário. Este índice de slides aqui. Então, deixe-me conectá-lo e adicionar alguns nós de redirecionamento. Então, é bom dar uma olhada. Ok, então aqui eu adicionei nós de redirecionamento. Então, o que estamos fazendo exatamente como antes, estamos limpando as crianças e depois examinando todos os widgets que criamos. Estamos obtendo esse índice dependendo do inventário que queremos analisar no momento. E então estamos pegando a quantidade desses itens, fazendo login, atualizando a interface do usuário e também exibindo todos esses widgets de lote de inventários. Então, agora, com este evento, só precisamos criar todos os widgets. Porque agora, quando clicamos na categoria de inventário, widgets. Na verdade, estamos apenas exibindo-os sem criá-los o tempo todo. Então, aqui, nós também queremos corrigir isso, porque no momento ele não está criando todos os widgets. Você pode ver aqui. Ele está criando apenas o widget para a categoria de inventário selecionada. Então, o que podemos fazer aqui, podemos nos arrastar assim. E exatamente o que fizemos aqui com as categorias, acabamos de obter todas as categorias. Vamos copiar este. Obtém um nome de linha da tabela para todas as categorias. Então, essas são as três categorias que temos. E vamos ver o tamanho das categorias. Então, agora ele vai imprimir três porque temos três categorias. Deixe-me clicar com o botão direito aqui, ser promovido a uma variável e chamá-la de uma série de categorias. E essa é a quantia que vamos multiplicar. Então, vamos repetir essas quantias para criar todos os widgets. Então, deixe-me criá-lo. Portanto, não é muito confuso. E quanto ao tamanho da quantidade de categorias, na verdade vou arrastar daqui e dizer menos um porque vamos repeti-las começando do zero. Então 01.2, então não precisamos que isso diga três l, então vamos alugar quatro vezes. Portanto, temos três categorias. Estamos começando a imprimir do zero. Então 01.2, é por isso que estou subtraindo por um. E deixe-me criar outra variável aqui chamada contador temporário. Então, vamos usar esse para saber quantas vezes vamos fazer um loop. Então, se essa quantidade de categorias, vamos pegar esse contador temporário, configurá-lo como um número inteiro, digamos, recortar aqui. Portanto, se o contador temporário for menor ou igual à quantidade de categorias, lembre-se de que o contador temporário começa do zero, o padrão é zero. Então, se for menor ou igual, a quantidade de categorias, que é duas, então podemos seguir em frente e percorrer as categorias. Por aqui. Vamos conectá-lo e percorrer aqui e embaixo, em vez de usar a categoria de inventário selecionada, vou excluí-la e em vez disso, usar nosso contador temporário. Você pode clicar com o botão direito do mouse aqui, clicar em Alterar tipo de pino e alterá-lo para um número inteiro. Agora estamos usando um número inteiro e vamos conectar isso aqui. Então, como você pode ver aqui, deixe-me arrastar isso para longe. Deixe-me deletar tudo isso. Arraste isso aqui, e também desconecte isso por enquanto. Então, o que vai acontecer é que vamos começar com zero porque o valor padrão das contas temporárias é zero. Vamos selecionar essa opção aqui, as armas. E agora vai perguntar, se a conta temporária é menor ou igual, a quantidade de categorias, que é duas nesse caso. Então, primeiro ele vai repetir o primeiro, depois vamos adicionar um a esse contador, então diz um. E então ele vai passar por isso, depois vai passar por isso. E quando chegar a três, quando chegar a três, essa será realmente maior do que a quantidade de categorias, que é duas. E então não vai mais rodar. Então é isso que estamos fazendo. Então, vamos conectar esse inventário a essas três categorias. E aqui, vamos reconectar isso à matriz. E também vamos reconectar isso às coisas que estão aqui. Vamos compilar. Agora, quando concluirmos o ciclo do primeiro, vamos pegar o contador temporário, dragão e dizer mais, mais. Então, estamos adicionando um ao contador. E então vamos analisar isso novamente. Então, vamos começar a partir daqui, criar widgets de slots de inventário. Crie widgets de slots de inventário. E temos que configurar o inventário novamente. Podemos simplesmente arrastar este e conectá-lo aqui. Então, agora está funcionando. E se dermos uma olhada aqui, não queremos essa, então vamos excluí-las aqui e eu vou criar algumas notas de redirecionamento, então é melhor dar uma olhada nisso. Agora eu o organizei aqui, como você pode ver, para que você possa ver o código aqui. Então, primeiro, estamos obtendo quantas categorias temos? E estamos subtraindo por um porque o contador temporário começa em zero. Portanto, temos três categorias no total a partir de 01.2. Então, essas três categorias, vamos analisá-las aqui. E cada um deles vamos percorrer a categoria. Vamos criar widgets. E vamos adicionar, assim como antes, as categorias ou os espaços de inventário à matriz de categorias que selecionamos. E, novamente, agora estamos selecionando um contador temporário. E quando terminamos o ciclo do primeiro. Então, quando terminamos o ciclo da categoria de armas, vamos aqui para a versão completa, vamos adicionar uma ao contador temporário. Então começa do zero, depois chega a um. E então estamos recriando widgets do slot de inventário aqui. Então, ele vai executar isso de novo. E agora o contador temporário é igual a um. E então, ele realmente criará todos os widgets para a categoria de alimentos. E então, quando terminar, ele vai configurá-lo para dois. E então ele vai criar para as poções. E quando chegar a três aqui, então vai dizer falso. E o que podemos fazer aqui no final, quando criamos todos os widgets aqui, podemos exibir o inventário, então podemos chamá-lo Exibir inventário, widgets de slots. Então, deixe-me ligar para o cliente aqui antes que eu esqueça a exibição aqui. E o inventário para o qual podemos arrastá-lo até aqui. E vamos chamá-lo aqui quando estiver dobrado. Quando criamos todos os widgets, digamos widgets de exibição, inventário e slot. E para o inventário, vamos colocá-lo aqui, conectá-lo aqui com os nós de redirecionamento e compilar e salvar tudo. Portanto, também temos essa lógica para o jogador. Então, na verdade, não vamos aqui, vamos para o player de plantas. E aqui dentro, lembre-se que no começo dissemos inicializar o inventário. Estamos redimensionando sua raça. Isso é bom. E aqui estamos criando os widgets de categoria que é bom. E os slots de inventário também. Então, isso está correto. Agora vamos voltar ao inventário. Acho que temos alguma lógica que precisamos mudar aí. No inventário de componentes. Temos esse quando clicamos em uma categoria no inventário. E, na verdade, posso voltar apenas para esclarecer. Para a categoria de inventário quando a pressionamos, lembre-se de que, ao pressioná-la, definimos a categoria do inventário. E se você clicar duas vezes aqui, é esse código aqui. Estamos criando os widgets de slots de inventário. Agora, otimizamos o inventário, então vamos excluí-lo e, em vez disso, vamos simplesmente exibir widgets de slots de inventário. Agora podemos simplesmente exibi-los e o inventário é otimizado. Não precisamos, não precisamos criar esses widgets repetidamente. Tudo bem, então vamos testá-lo antes de fazermos qualquer outra coisa. E acho que temos tudo. Tudo parece bom. Vamos compilar, vamos salvar. Vamos clicar em Jogar e ver se temos algum bug. Então, deixe-me saquear tudo como antes e ver se consigo realmente carregá-los agora. Então, se eu clicar em Eu abri meu inventário, eles estão sendo carregados corretamente. A mesma coisa para esses aqui. Agora, quando você alterna a categoria do inventário, na verdade, está apenas exibindo o que já criamos. Então, isso é muito para otimizar agora. É muito otimizado com o bug de inventário corrigido e com o inventário otimizado. Vamos passar para a próxima lição. 42. 7.01 Adicionando a operação de arrasto e solta: Tudo bem, agora estamos prontos para arrastar itens do inventário. Então, vamos até a interface do usuário e ir para o espaço de inventário. Então, o que vamos fazer agora é retirar do inventário. Então, se eu clicar em Jogar, eu quero, se eu tiver um item aqui, quero arrastar esse item e soltá-lo no chão. Então é isso que estamos tentando fazer. Vá para dentro do compartimento do inventário. Vamos ao gráfico. E dentro desse gráfico, vamos às funções e clique no botão Substituir. Agora, aqui estamos descendo e vamos ver aqui, vamos escolher este chamado botão do mouse para baixo. E isso cria essa função aqui. E aqui o que queremos fazer é simplesmente arrastar daqui e dizer seita, arraste se pressionada. Então você tem que fazer isso para que ele possa detectar o botão do mouse e clicar aqui e eu vou clicar no botão esquerdo do mouse, ou você pode simplesmente encontrá-lo aqui. E para o evento do mouse, vamos conectá-lo aos eventos do ponteiro. E para o valor de retorno, vamos conectá-los aqui. Tudo bem, vamos compilar agora. E, novamente, nas funções aqui em cima, clique na substituição novamente. E vamos pesquisar por nenhum arrasto detectado. Então, está aqui quando detectado o arrasto. Selecione este aqui. E aqui, vamos imprimir uma string e você pode ver o que está acontecendo. Então, eu só vou dizer olá. Vamos compilar e clicar em reproduzir. E se eu abrir meu inventário e clicar aqui, você verá que diz Olá. Se eu clicar e arrastar, agora ele realmente detecta que estou arrastando. E aqui diz baixo. Então, agora podemos adicionar algum código dentro daqui. Então, antes de fazer qualquer coisa, vamos fazer uma referência ao player e ao controlador do player. Então, novamente, estamos dentro de uma interface de usuário e, para nós você pode dizer Get Owning layer. Isso lhe dará o controle do player. E se você usar get Owning Player Pawn, isso fará com que você, o personagem do jogador que está recebendo este aqui, faça com o controlador do jogador se arraste dele dizendo que obtém controlador de camada. E, novamente, isso é da interface Blueprint que podemos usar. Vamos clicar com o botão direito do mouse em promovido para uma variável e chamá-la de controlador de layout. E, novamente, clique com o botão direito do mouse dizendo Get Owning layer neste momento. Então, podemos pegar o jogador e, a partir daqui dizer que fica a camada Eric no topo. Este recebe sua referência. E, obtendo a referência do jogador, podemos clicar com o botão direito do mouse, promover sua variável e salvar a camada. Ok, então o que estamos tentando fazer aqui agora quando clicamos em jogar. Então, o que eu quero que você faça é o que eu tenho neste item. Eu só quero obter as informações dentro deste item porque, quando arrasto aqui, quero exibir o ícone que estou arrastando do peão do jogador. Vamos pegar o inventário novamente, inventário. Vamos rolar para baixo e selecionar esse inventário. E, assim como antes, precisamos de todas as categorias. Então, se você escrever categoria, você pode obter a categoria de armas e a categoria de alimentos e, em seguida, a categoria de poção. E, assim como antes, precisamos do inventário selecionado porque precisamos saber qual inventário selecionamos atualmente. Então, como antes, vamos clicar com o botão direito do mouse e escolher a função de seleção aqui, selecionar nó, pescoço e selecionar inventário. E, novamente, basta conectar todos esses inventários. Então, dependendo do que selecionamos aqui, vamos arrastar e dizer que obtém. E agora ele perguntará qual índice de slots de inventário você deseja obter. Lembre-se de que estamos no compartimento do inventário. Então você já tem esse índice de slot variável. Então, vamos conectá-lo aqui. Então, agora estamos obtendo o índice em que estamos clicando. Agora, antes de executarmos o código de detecção de arrasto, vamos nos certificar de que temos um item porque eu não quero que o arraste funcione pois os espaços de inventário estão vazios. Então, venha aqui para dizer pausa. Portanto, para a quantidade desse item, ela não é igual. Então, podemos escrever isso. Se não for igual a zero, quero que o código continue sendo executado. No entanto, se for zero, não queremos que o código seja executado porque o compartimento do inventário está vazio. Mas agora o mais importante, essa é a função que é muito importante. Vamos clicar com o botão direito do mouse e criar a operação de arrastar e soltar. Então, este arrastará o ícone e perguntará qual é o visual de arrastar padrão, que é o ícone que estamos arrastando. Lembre-se novamente de que estamos dentro do compartimento do inventário. Então, podemos pegar este aqui, o inventário de imagens ou, na verdade, o item de imagem aqui. Conecte-o aqui. E agora temos o item conectado, apenas certificando-se de que o slot do qual estamos arrastando não esteja vazio. Então, na verdade, temos um ícone que estamos arrastando. Tudo bem, então foi isso. Agora estamos conectados aqui. E para a operação, vamos conectá-lo assim. Você pode clicar aqui, clicar na altura da pinça desconectada apenas para deixá-la mais limpa e vamos experimentá-la. Então, vamos compilar, vamos clicar em Jogar. E se eu arrasto assim, nada acontece. Se eu for até lá e carregar isso, eu arrasto. Agora você pode ver que estou arrastando o ícone. Está ótimo. Se eu fizer isso com a banana, por exemplo e eu arrasto, agora, estou arrastando a banana. Agora você pode ver que está funcionando. Mas agora precisamos que o código funcione onde realmente colocamos o item. 43. 7.02 item de queda do inventário: Ok, agora queremos descartar o item e, para fazer isso, vamos para a interface principal aqui. E dentro daqui, vamos ao gráfico. E, novamente, como antes, e as funções clicam na substituição. E vamos selecionar esse chamado on drop. Porque inicialmente, quando você está jogando o jogo aqui e pegando um item e o retirando do inventário, na verdade está colocando-o em cima da sua interface principal. Vamos escrever esse código aqui dentro. Agora, antes que funcione, você pode ver aqui se eu imprimir uma string no UNDRIP para a interface principal, ela precisa de olá. Então você pode ver que o código está funcionando. No entanto, no momento, não é arrastando e soltando. Você pode dizer que não é dizer olá. O código que estamos escrevendo aqui na verdade não está funcionando. Então, para fazer isso funcionar, você pode ir para o slot de inventário. E aqui dentro, no gráfico aqui, para detectar o arrasto, você precisa pegar o controle do player. Já fizemos essa referência. Pegue o controlador do player, use a variável principal da interface do usuário. E você realmente precisa definir a visibilidade do Canvas. momento, se você clicar na tela, verá que a visibilidade não pode ser testada e, na verdade, precisa estar visível aqui para que funcione. Mas não queremos alterá-lo por padrão porque visível significa que ele bloqueia o mouse quando você brinca. Portanto, só queremos alterá-lo sempre que soltarmos o item. Então, vamos voltar ao espaço do inventário. E aqui, vamos pegar isso e dizer definir visibilidade. E queremos definir a visibilidade como visível. Então isso está correto. Vamos pegá-lo aqui e soltá-lo logo antes de terminarmos a operação. Estamos tornando esse menu visível. E vamos criar alguns nós de redirecionamento e conectá-los da seguinte forma. Tudo bem, então vamos compilar e voltar à interface principal. E agora, se tentarmos desistir, vamos dizer olá. Então, vamos jogar aqui. Vamos até esse Cleaver. Vamos arrastar e soltar. E você pode ver que diz Olá. Então, agora o código está funcionando aqui na função Andhra para a interface de usuário principal. Então, aqui, antes de começarmos, assim como antes, quero uma referência ao meu jogador. Então, vamos clicar com o botão direito do mouse e dizer Get Owning layer upon, vamos arrastar e dizer Get Player Reference. E vamos conectá-lo. E vamos clicar com o botão direito do mouse e promover isso para uma variável e dizer camada sobre. Agora, o que deve acontecer quando eu coloco o ícone aqui no nível é que ele precisa gerar o item novamente. Então, agora eu preciso gerar o item. Precisamos de alguma lógica de desova. Normalmente, na desova, fazemos isso no controlador do jogador. Então, vamos até o controle do player. E no controle do player, aliás, você pode ver que eu criei comentários para tudo só para você quando eu te forneço todo o código. Então é muito bom ver e criar comentários. Se você não sabe, você pode simplesmente passar por cima de alguns dos elementos e clicar em C no teclado, e isso cria comentários. É muito bom estar organizado assim. Tudo bem, então vamos até aqui e vamos clicar com o botão direito do mouse e criar um novo evento personalizado. E vamos chamar isso de item único. E para soltar o item, precisamos colocá-lo no nível. Então arraste aqui e diga spawn actor from plus. E agora precisamos do último item que estamos gerando. Vamos arrastar isso, conectá-lo aqui, essa transformação de ligação também. E para lidar com a colisão, você pode simplesmente dizer tente ajustar a localização, mas sempre apareça. E quando geramos o item, também queremos gerar a quantidade dele. Então, arrastando daqui, agora isso é um objeto de um ator. Portanto, não podemos simplesmente dizer a quantidade definida do item, como temos aqui no, se você se lembra na base do item, se eu for para a base do item, temos essa quantidade de itens definida. No entanto, eu só preciso de uma referência ao item primeiro, se você puder dizer obter referência do item, aquela que fizemos antes com a interface. E agora você pode dizer definir o item uma vez por t. Agora também precisamos definir a quantidade quando geramos o mesmo dependendo de quantas retiramos do inventário. Vou arrastar isso e conectá-lo aqui. E eu vou arrastá-lo para cima ou para baixo da classe. Em vez disso, vou chamá-la de item. A quantidade de itens é boa e a transformação do spawn também é boa. Tudo bem, então, geralmente, quando geramos coisas, passamos pelo modo de jogo. E a razão pela qual passamos pelo modo de jogo, se você se lembra do compêndio multijogador, esse modo de jogo sempre existe no servidor, nunca existe no cliente. Portanto, ao passar pelo modo de jogo, garantimos que o cliente não gere coisas aleatoriamente e trapaceie. Então, precisamos passar pelo modo de jogo. Neste, na verdade, agora estamos trabalhando de trás para frente. Precisamos sair do componente de inventário. No entanto, eu comecei aqui. Então, na verdade, está mais claro onde está o problema, o objetivo principal aqui é usar esse chamado ator de spawn e estamos respondendo ao item. Então, agora vamos trabalhar de trás para frente. Vamos para o modo de jogo, porque o modo de jogo precisa chamar esse evento. Então, vamos voltar. Desenha um modo. Vamos abrir o editor de plantas completo. E aqui vamos criar um novo evento personalizado chamado request. Solte o item. E esse precisa chamar isso do controlador do player. Então, deixe-me clicar aqui e criar uma variável para o controlador do player. E o PC **** está inoperante, é assim que o chamamos. E, digamos, controlador de layout. E a partir do controle do player, vamos arrastar e chamar essa função de soltar item. Somos um evento que fizemos. Para os itens. Vamos clicar, arrastar e soltar. E para essa transformação de vínculo, vamos sair daqui e dizer fazer transformação. Normalmente, faço a transformação no Modo de Jogo e outros locais novamente e simplesmente clico, arrasto e solto no item de solicitação. Agora, aqui não precisamos replicar e executar no servidor, porque lembre-se novamente que o modo de jogo sempre é executado no servidor. Você não pode executar nenhum cliente aqui, o cliente não pode acessar o modo de jogo. Tudo ou criar aqui sempre é executado no servidor, então não precisamos configurá-lo para replicá-lo para o servidor aqui. Ok, então a última etapa, esse item de retirada de solicitações, precisa ser executada a partir dos componentes, o componente de inventário. Vamos voltar aos componentes. E tudo começa aqui, então, na verdade, estamos trabalhando de trás para frente. Então, aqui vamos clicar com o botão direito do mouse e criar um novo evento personalizado. Vamos chamar isso de “Drop”. Oi Tim. Aqui. Vamos criar um novo rodando pelo servidor chamado drop item. Assim, execute em um servidor confiável. E neste, vamos chamar o servidor de um item de descarte do servidor. E aqui precisamos chamar o do Modo Jogo. Então, vou clicar com o botão direito do mouse e dizer obtém um modo e depois arrastar daqui e precisamos obter a referência do modo de jogo. No entanto, acho que não criamos nenhuma interface, Blueprint Interfaces, para o modo de jogo. Então, vamos fazer isso aqui. Você pode fazer isso sozinho se quiser ou se exercitar, e você pode fazer isso comigo. Agora, vamos clicar com o botão direito do mouse, ir para blueprints, criar uma interface de Blueprint, um modo. Vamos abri-lo e criar aqui uma nova função chamada get Game Mode reference. Agora, aqui precisamos dizer o que estamos tentando referenciar? Estamos tentando fazer referência à cidade dos insetos. Este, esse é o nosso modo de jogo, e vamos chamá-lo de modo. Agora vamos compilar e salvar tudo. E vamos voltar ao Modo de Jogo, acessando as Configurações da Classe e adicionando essa interface, o modo de jogo de interface. Agora vamos clicar aqui e nas interfaces, e vamos chamar a autorreferência. Então, agora definimos o que é essa variável. Agora podemos voltar ao componente de inventário novamente. Podemos arrastar aqui e dizer que obtém uma referência de modo. Agora vamos conectá-lo. E a partir daqui, queremos executar o evento de solicitação de entrega de item que fizemos. Tudo bem, então agora vamos conectá-los aqui. Vamos conectar o controle do player, o item, a quantidade do item e a localização. E agora nós os temos aqui no item suspenso. E nós vamos fazer a mesma coisa. O controle do jogador, o item, a quantidade do item e também a localização. E agora podemos usar esse dentro da interface principal. Então, vamos usar isso. Então, o que vai acontecer é que vamos ligar pela interface principal. E ele vai passar por aqui, passando pelo servidor só para ter certeza de que não está recusando executá-lo. E vai passar pelo modo de jogo. Ele solicitará que o item seja descartado aqui no Modo de Jogo. E então, quando isso for possível, ele soltará o item, o controlador do jogador, onde ele vincula o item e a quantidade. Então, vamos para a interface principal aqui. Então, aqui dentro do peão do jogador, vamos fazer o inventário, porque agora queremos chamar esse evento aqui. Você entrará aqui pegando a variável de inventário do AAC aqui embaixo. Agora podemos dizer soltar o item e selecioná-lo aqui. Agora precisamos de um plugin para o controle, que possamos simplesmente arrastar e salvar o controle do jogador. Já criamos uma variável dentro daqui, conecte-a aqui e agora precisamos da classe do item. Então, como podemos conseguir esse? Assim como antes, vou até o compartimento de inventário e vou copiar tudo isso aqui. Então, copiando tudo isso e copiando isso também. Vou voltar para a interface principal, colando-a aqui. Vou excluir esse índice de slug, então eu só tenho isso aqui. E para o inventário, podemos simplesmente conectá-lo. Vamos pegar o Peão do Jogador só para deixá-lo mais limpo. Em vez de conectar isso aqui, vamos pegar o peão do jogador chamado variável de inventário AAC novamente aqui e depois conectá-lo a tudo isso. E agora, para o índice, precisamos saber o que estamos arrastando. Porque agora, quando estamos arrastando um item, precisamos realmente saber o que é esse índice de slots do qual estamos arrastando. Então, vou voltar para a interface do usuário abrir o inventário e ir para o gráfico. E aqui vou adicionar uma nova variável, essa variável que chamarei de índice de slot arrastado, e vou configurá-la como um número inteiro. E vamos compilar. Agora, vamos voltar aos slots de inventário. Então, aqui no compartimento do inventário, quando saímos disso, vamos definir o índice do compartimento dos medicamentos aqui. Então, vou insistir um pouco aqui. Vamos pegar o controlador do player, vamos chamar a variável de inventário WB. E a partir daqui, criamos o índice do slot Dragged. Vou colocar isso aqui e arrastá-lo até aqui, configurá-lo. E para o que vamos configurá-lo? Vamos simplesmente configurá-lo para esse índice de slots aqui, porque esse é o índice de slots que estamos arrastando. Se eu compilar agora e voltar para a interface principal, posso usar o controlador do player. Então, vou pegar o peão do jogador, vou pegar o controle do jogador. E a partir daqui, podemos pegar a variável de inventário WB. E agora podemos chamar o índice do slot de arrasto. Podemos conectá-lo ao que está aqui para obter as informações do item. Então, agora podemos pegar isso e fazer uma pausa. Vou pegar tudo isso e empurrá-lo para trás aqui. Portanto, para a classe do item, nós a temos dentro desse item. Então, se você pegar e disser pausa e abrir aqui, temos essa classe de item. Podemos conectá-lo ao item de acordo com a quantidade que temos aqui. Então, vamos conectá-lo e pedir a localização. Vamos colocá-lo onde quer que o jogador esteja atualmente. Então, pegar o ditado Player Pawn dá a localização do ator. Pegando isso aqui e você pode conectá-lo ao local, clicando nesta , pressionando ocultar canetas desconectadas e esta para ocultar coisas desconectadas. Tudo bem, então agora estamos realmente descartando o item. No entanto, também precisamos atualizar o inventário. Então, vou pegar esse aqui e dizer definir elementos da matriz. E vamos conectá-lo aqui, ou o item que precisamos para remover o item do inventário. Então, vamos dizer aqui e dizer fazer. E vamos criar esse espaço de inventário. Portanto, para o item, não vamos adicionar nada que exclua o item do inventário, bem como a quantidade. Não vamos adicionar nada. No entanto, ainda precisamos manter nosso slot de inventário e nosso índice de slots para que eles não sejam excluídos. Então, clicando aqui no slot de inventário, vamos mostrar também nosso inventário, slot de estoque e índice. Vamos arrastá-los para aqui. E a única coisa que vamos excluir é o item, além de definir a quantidade como zero. Agora clique aqui, escondendo os pinos desconectados. E agora, para o índice, podemos simplesmente arrastar a partir desse índice de slot arrastado. Podemos simplesmente copiá-lo se você quiser. E ele pode colá-lo aqui apenas para torná-lo mais limpo e você pode conectá-lo aqui. Agora também precisamos atualizar a interface do usuário. Lembre-se de fazer isso também. Então, diretamente do compartimento do inventário, dizendo atualizar inventário, há uma lógica conectando-o ao item. Não vamos inserir nada que exclua o item do inventário, além de definir a quantidade como zero. Agora, lembre-se de fazer isso agora que atualizamos tudo o que precisamos atualizar e vamos conectá-lo aqui agora. E lembre-se de clicar no tíquete booleano aqui. Então, é verdade e vamos compilar e agora experimentar o jogo. Então salve tudo, clique em Jogar. Agora vamos seguir em frente e perder alguma coisa. E vamos clicar e arrastá-lo para o mundo. E você pode ver que está surgindo, incrível. E eu vou arrastar esse também. Está desovando. E se eu clicar na banana, pegá-la, arrastá-la e soltá-la. Cai aqui. Se eu clicar nele, aludido novamente, ele carrega a quantidade correta. Se eu clicar aqui, deixo que esse é dez. Essa é para, eu amei essa. Na verdade, deveria analisar isso primeiro. Diz quatro. Vou carregar este, somar seis aqui e depois dizer quatro aqui. Então, na verdade, está funcionando como deveria agora que estamos retirando itens do inventário, vamos adicionar um pouco de física, então fica bom quando os estamos descartando e eles não estão flutuando no mundo. 44. 7.03 Habilitando a Física de Armas: Para habilitar a física dos itens, vamos clicar nos Itens e nas plantas. Vamos abrir a base de itens. E aqui dentro, se você clicar na classe, os padrões estão na malha e no item aqui, você pode ver aqui no painel Detalhes que temos algo chamado Física. E aqui você pode clicar em simular física para que ela caia no chão. No entanto, você pode ver que não podemos clicar nele. Então, o que podemos fazer é clicar com o botão direito aqui. E no começo, como em eventos, podemos arrastar esse item direto daqui e dizer simular física. Então, defina a física simulada e vamos defini-la como verdadeira. Então, toda vez que uma arma aparecer ou um item aparecer, isso fará com que a física seja verdadeira. Agora vamos clicar em Jogar e ver o que acontece. E agora, se eu clicar aqui e soltá-la, você pode ver que ela ainda está flutuando e tem algo a ver com a colisão. Então, clicando no item. E se formos até aqui para a colisão, você pode ver que está configurada para não colidir. E em vez de não haver colisão, clique em Personalizar. E aqui, religião ativada, vamos clicar nela e dizer religião ativada. Então, é consulta e física, precisamos da física aqui. Portanto, a colisão está ativada. E vamos ignorar tudo , exceto o mundo dinâmico e o mundo estático. E este é o chão para que não caia do chão. Vamos compilar agora e clicar em play. E deixe-me perder alguma coisa. E se eu clicar e soltar, você pode ver que ela cai, mas é falsa no chão. E se isso acontecer com você, eu realmente descobri por que isso estava acontecendo quando tentei fazer isso. E isso porque a colisão é muito ruim para esses itens que eu baixei. Então, se você acabou de abrir um dos ativos, por exemplo , um item inteligente, vamos corrigir este. Então, esse item inteligente, se você clicar em mostrar, talvez isso aconteça com seu projeto também. Então, mostrando as colisões simples aqui, isso é uma colisão simples. E o que você precisa fazer é aqui nas colisões você precisa adicionar uma caixa de colisão simplificada. Você pode ver que esses bugs simples foram adicionados. Se você clicar nele. Agora vou pressionar R para a ferramenta de escala. E eu vou ampliá-lo. Em vez disso, vou reduzir minha escala para esta. Vamos reduzir um pouco a velocidade da câmera. Vou ampliá-lo um pouco. Então, podemos ver que há uma pequena colisão aqui. Esta é a caixa de colisão que aumentamos e diminuímos. Eu vou escalar algo assim e também para lados assim. Vou testá-la aqui para ver a faca. Vamos clicar na caixa de colisão simplificada. Agora você pode clicar nele e aumentá-lo dessa forma. E também use palavras como essas. Eu também faço isso. Deixe-me fazer isso com a banana também. Deixe-me ir para a colisão e depois simplificar a caixa. E eu vou ampliá-lo. E a razão é essa a colisão é muito forte, então está caindo do chão desse jeito. Agora vamos salvar tudo e testá-lo com os itens que já temos. Agora, você pode ver que está flutuando um pouco, e esses são apenas os itens. Eles são uma colisão muito ruim. Então, vamos pegá-lo, vamos deixá-lo no chão. E você pode ver agora que não está caindo do chão. Assim, você pode corrigir a colisão em seu item, torná-lo mais específico agora. Isso é feito muito rapidamente. Então, vou adicionar a colisão também às minhas poções. Mas agora você pode ver que eles não estão caindo do chão e tudo está funcionando perfeitamente. 45. 8.01 obtendo informações de slot: Ok, agora é hora de mover os itens entre os slots do inventário. Então, quando perdemos um item aqui e a quantidade é definida como dois, é por isso que estou me referindo. Mas você pode vê-la. Não consigo movê-los entre os diferentes slots de inventário porque ainda não fizemos isso. Podemos simplesmente arrastá-los e soltá-los no mundo e carregá-los novamente. No entanto, não podemos arrastá-los para novos espaços de inventário, e é nisso que trabalharemos. Vamos até a interface do usuário e pressionar o slot de inventário. E dentro do gráfico, vamos seguir em frente e criar duas funções. Então, aqui nas funções, vamos clicar no sinal positivo e vamos chamar o primeiro, obtemos espaços arrastados. E vamos adicionar outro chamado get new slots, slot and get the new slots. Portanto, queremos obter algumas informações sobre esses dois slots porque os atualizaremos. Vamos para o primeiro, pegar um slot de arrasto. E dentro daqui, vamos pegar o controlador do jogador ou o player e o inventário AAC, variável de inventário. Então, agora queremos obter as três categorias, procurando por categoria. Primeiro, obtendo a categoria de armas, obtendo a categoria de alimentos e obtendo a última, a categoria de poções. E também obtenha esta categoria de inventário selecionada. E, assim como antes, vamos selecionar o negativo aqui e conectar todas as nossas categorias, inventários. E já estamos fazendo isso muitas vezes. Então, agora só queremos obter algumas informações sobre o slot Dragged. Portanto, dependendo do inventário que selecionamos, queremos obter esse item. E agora qual item é esse? É da loja de drogas. E lembre-se de que já criamos índice de slots de inventário arrastado, e ele está dentro do controlador do jogador. Então, o que podemos fazer é aqui, o peão do jogador e o controlador do jogador, vamos realmente voltar do não foi detectado e os fizemos entrar aqui. Na verdade, vou eliminá-los daqui e colocá-los no evento inicial do jogo. Em vez disso, basta arrastar o jogador desse jeito e conectá-lo aqui. Ok, então isso está conectado. E vamos voltar ao Event Graph e fazer com que ele comece a jogar. E aqui vamos adicionar esses dois aqui para que sejam definidos sempre que começarmos a jogar o jogo. Tudo bem, vamos voltar para os slots de arrastar. E dentro daqui, vamos pegar o controlador do jogador, digamos, o inventário WB, então a variável do widget de inventário. E aqui temos esse chamado índice de slots arrastados. E vamos conectá-lo aqui. Então, agora estamos obtendo o índice de slots Dragged. E a partir desse, agora podemos dizer pausa. E essas informações, vamos apenas adicioná-las a um nó de retorno. Então, arrastando daqui para dizer return, adicionando um nó de retorno. E vamos arrastar todas as variáveis dentro do nó retornado para que possamos usá-las posteriormente. Como estamos apenas obtendo algumas informações, podemos clicar nessa função e clicar em puro. Então, isso está transformando-o em uma função verde, que é simplesmente obter informações. Assim, você pode ver o gráfico de eventos. Se eu arrastar isso aqui para o mundo, é apenas essa função Get verde que não tem pinos de execução porque a definimos como pura. Tudo bem, então agora vamos fazer com que este obtenha um novo índice de slots. Então, ao ser arrastado, estou apenas copiando tudo isso. Vou obter um novo índice de slots. Estou colando tudo aqui. E agora podemos arrastar novamente a partir daqui, criar um nó de retorno. E vamos conectar, como antes, conectar todas as variáveis aqui. E em vez de fazer o índice de slots para obter arrastado, vamos pegar esse índice de slots. Este é o novo slot, índice de slots. Então, vamos compilar tudo e salvar. E foi isso para o índice de slots ser arrastado e obter um novo índice ****. E nós os usaremos para atualizar o inventário. 46. 8.02 Actualizar informações de slot: Ok, agora criamos o slot de arrastar e obter novas funções de slot. Agora vamos fazer a atualização mais uma vez, acesse aqui e crie uma nova função. Vamos chamar a primeira de atualizações, arrastar slugs e criar uma nova chamada atualização de novos slots. Vamos entrar no slot de atualização arrastado. E, novamente, precisamos apenas das informações do slot Dragged. Então, eu vou voltar aqui e eles serão arrastados. Vou copiar tudo isso e voltar ao slot de arrastar de atualização e colá-los aqui, e para atualizar o slot novamente como antes, arrastar daqui define os elementos da matriz. E agora vamos conectá-lo aqui. Agora queremos atualizar o índice do slot arrastado e, para o item, vamos arrastá-lo aqui e dizer criar um espaço de inventário. E aqui, vamos criar novas variáveis. Vamos criar dois aqui. Mas o primeiro será chamado de item de slot arrastado e o segundo será chamado de quantidade de novos itens. Vamos mudar esse para um número inteiro e o primeiro para uma estrutura de informações do item. Então, este é o item, aquele medicamento simplesmente vai entrar neste item aqui para esta matriz, bem como para a quantidade. Vamos arrastar isso e usaremos isso mais tarde. Mas deixe-me arrastar tudo para baixo. Quanto ao antigo slot de inventário e ao índice de slots, não queremos alterá-los. Eles permanecem os mesmos. Então, vamos extraí-lo aqui do índice direto de slots. Vamos apenas conectá-los novamente porque não queremos alterá-los. A única coisa que queremos mudar no compartimento do medicamento é o item e a quantidade provenientes dessa entrada. E quanto ao índice do slot aqui para a matriz, podemos simplesmente arrastar esse índice de slot e conectá-lo. E agora estamos atualizando o inventário. Mas lembre-se de que você também precisa atualizar a interface do usuário. Então, vou sair desse espaço de inventário e dizer atualizar, atualizar a interface do slot de inventário. E vamos conectá-lo . Quanto ao item, vamos colocar este item e novamente, bem como a quantidade do item. Então, vou criar algumas notas. Você pode clicar neste e clicar em Ocultar pinos desconectados, certo? Então, adicionei algumas notas de redirecionamento e as organizei. Então, agora o que estamos fazendo é simplesmente obter o índice do lote de arrasto ou obter o item. E aqui só precisamos do slot de inventário e do índice do slot e conectá-los novamente ao novo, porque não queremos perder essas informações. A única coisa que estamos mudando é o item e a quantidade do índice do slot arrastado ou item que, quando o arrastamos para índice do slot arrastado ou item que, quando o arrastamos o inventário também nos lembramos de atualizar a interface do usuário. No final, porém, para o novo slot de atualização, vou excluí-lo e vamos clicar com o botão direito do mouse aqui e clicar em duplicar. E vamos chamá-lo de update mu slots. E a única coisa que realmente vamos mudar aqui dentro. Vamos excluir esses medicamentos como o índice e, em vez disso, usaremos esse novo índice de slots. Deixe-me pressionar um pouco o código e organizá-lo. E isso é, na verdade, tudo, todo o resto permanece o mesmo. Este ainda é o item do slot de drogas que você verá mais tarde, e tudo é o mesmo. A única coisa que estamos fazendo aqui é obter esse novo índice de slots e manter as informações sobre também manter as informações sobre o widget do lote de estoques e o índice de slots. Agora, vamos compilar e salvar tudo. Então, agora nós temos esses. Se eu voltar ao Event Graph, teremos este. Obtenha o slot de unidades indexado, obtenha um novo índice de slots. Na verdade, este, clique novamente em puro. Então, nós temos isso assim. E então temos o slot de arrasto atualização e atualizamos o novo slot. Então, agora nós os temos e podemos usá-los para atualizar o inventário. 47. 8.03 item de queda no inventários: Ok, agora estamos prontos para colocar o item nos novos e antigos slots de inventário. Então, vamos voltar ao espaço do inventário. Vamos ao gráfico. E aqui, assim como antes de clicar na substituição, desça e selecione esta chamada Drop. Então, agora vamos imprimir uma string e ver o que acontece. Veja se o código é executado. Então, deveria dizer Olá se eu arrastar, então se eu clicar em jogar e arrastar daqui para aqui, agora, nada acontece porque não há itens. Então, se eu arrastar aqui e soltar aqui, você pode ver que diz Olá. Mas para slots de inventário em que eu não tenho itens, isso não diz nada, então isso é bom. Mas se eu arrastar aqui, solte , diz Olá, então tudo está funcionando como deveria. Agora vamos criar uma nova variável aqui, que é booleana, e vou chamá-la de empilhável. Agora, o que queremos fazer é verificar para nós uma coisa e definir se o item é empilhável ou não é empilhável. Vamos chegar aqui e pegar o novo slot e também o slot direto. Primeiro, o que queremos verificar é se estamos arrastando o mesmo item um sobre o outro. Então, pegando este item dizendo pausa, assim como este item dizendo pausa para o novo item para o qual estamos arrastando. Esse nome está no novo compartimento de itens, é o mesmo que estamos arrastando do compartimento do motorista? Se for, isso significa que é o mesmo item. E também precisamos verificar se esse item é empilhável. Se você clicar com o botão direito do mouse e clicar com o botão direito do mouse em B, verá este e o booleano. Então, primeiro aqui, o primeiro item, vamos arrastar isso, é empilhável e conectá-lo aqui, como aqui, e dizer olá aos pinos desconectados. Então, esse item é empilhável? E o nome é igual ao do travesti? Isso significa que na verdade é o mesmo item. E também só para ter certeza de que vou clicar neste sinal aqui e adicionar outro. E aqui embaixo, também certificando-se de que o compartimento de itens de arrastar também seja empilhável, escondendo pinos desconectados aqui. Agora, o que estamos dizendo aqui estamos verificando se o nome é o mesmo no novo slot e no slot. Então, estamos verificando se é o mesmo item e também se esse item é empilhável. E se for, vamos fazer uma filial. E vamos conectá-lo e dizer que sim, ele é empilhável. Agora, há outra coisa que precisamos verificar. E se arrastarmos esse item do compartimento de medicamentos para o novo compartimento? E o novo slot está vazio. Mas o enredo ainda é empilhável. No momento, estamos verificando se tem o mesmo nome , não terá o mesmo nome. Se esse espaço aqui estiver vazio e não tiver um item, precisamos verificar isso também. Então, o que vamos fazer é tirar essa quantidade de itens do novo espaço para o qual estamos arrastando e dizer igual. Então, se isso for igual a zero, significa que não há itens dentro desse slot. No entanto, este item de slot para drogas é empilhável. Então, partindo daqui e dizendo “booleano”, se é zero e as drogas, esse item é empilhável, então, na verdade, também é empilhável. Essa pode ser verdadeira e essa pode ser verdadeira. Então, para fazer isso, podemos arrastar daqui e dizer OR booleano e, em seguida, conectar esse aqui e conectar este aqui. Então, agora estamos dizendo que se isso é verdade ou se isso é verdade, então podemos dizer que o item é empilhável. E aqui, no falso, vamos configurá-lo como nenhum empilhável e vamos usá-lo um pouco mais tarde. E então vamos criar uma nova função que usaremos na próxima lição. Portanto, não se preocupe com isso agora. Mas vamos chamar isso de atualização de slots de inventário. E vamos voltar ao gráfico de eventos, na verdade, ao UNDRIP aqui. E vamos arrastar este para atualizar os slots de inventário. Vamos apenas conectá-lo com os dois aqui. E lembre-se aqui de que quando você arrasta, então, ao detectar o arrasto que criamos anteriormente, dissemos que a interface principal estava visível, a tela principal, precisamos nos lembrar ajustá-la também para nenhuma falha testável. Eles copiarão esse código, voltarão para o Andhra e vamos colá-lo aqui. E menos conectado também conecte este e defina este como verdadeiro. Agora também precisamos nos lembrar mudar este para um festival não oculto. E também temos que voltar para a interface principal, esta aqui, e ir para o gráfico, ir para o UNDRIP. E também aqui, quando o colocamos no topo do menu I, precisamos configurá-lo novamente como não testável. Porque esse aqui e o compartimento de inventário, este só funciona se o colocarmos em cima de outro espaço de inventário. Este ano, também o trocaremos novamente quando terminarmos de colocar o item em cima da tela. Então, em vez desse controle de placa, Ellis excluiu. Vamos pegar o Player Pawn, pegar o controle do jogador a partir desta jogada. E agora podemos conectá-lo aqui e simplesmente enviar o código dessa forma, conectá-los e lembrar pegar isso e configurá-lo como nada testável. Então, agora estamos mudando e mudando isso de volta também. Ok, agora terminamos com a função de desembrulhar. Estamos apenas verificando se o item que estamos arrastando é empilhável ou não. E isso é algo que usaremos na próxima lição quando criarmos essa função aqui. Então, vamos salvar tudo e passar para a próxima lição. 48. 8.04 Atualizando as fendas de inventário: Olá e bem vindo de volta. Então, agora vamos fazer essa atualização de slots de inventário. Então, aqui, para começar, deixe-me arrastar as novas lesmas e arrastar o slot aqui. Primeiro, estamos verificando se não estamos arrastando o item para o mesmo lugar. Então, se eu clicar em Jogar e acabei de desenhar, pegue um item aqui. Se eu arrastá-lo, só quero executar o código. Se eu estiver arrastando-o até esse espaço de inventário, não quero executar o código se eu estiver arrastando e soltando-o no mesmo espaço de inventário. Então, primeiro, estamos verificando se o novo índice de slides dos slots de inventário é igual ao antigo, o que significa que simplesmente o colocamos no mesmo espaço de inventário. Se isso for verdade, não queremos fazer nada, na verdade, apenas para minha própria leitura. Vou tentar a partir disso e dizer não e escolher isso NÃO booleano. Portanto, se não for o mesmo índice de slots, prosseguiremos e executaremos o código. No entanto, se for falso, se for o mesmo índice de slots, não queremos fazer nada. Posteriormente, perguntaremos se o item é empilhável ou não. Porque se for empilhável, vamos adicioná-los juntos. Se eles não forem empilháveis, vamos apenas trocá-los entre si. Então, primeiro vamos descer aqui. Digamos que o item não seja empilhável. O que acontece? Vamos pegar este, atualizar, arrastar os slots e atualizar o novo boletim informativo e o slide de medicamentos. E vamos conectá-los aqui e conectá-los assim. Então, para o novo slot, lembre-se de que estamos pegando o item do compartimento do motorista e colocando-o em cima do novo slot. Então, o novo item do slot é o item arrastado aqui do slot direto. Então, vamos pegar o slot de arrastar. Vamos pegar o item aqui e soltá-lo, assim como a quantidade do item. Quanto ao slot direto, precisamos colocar o item do novo slot, o lodo seco. Então, estamos alternando entre esses dois. Estamos pegando o item do compartimento de drogas e colocando-o no novo compartimento. E então precisamos do novo item do slot e o colocamos no slot de rascunhos. Agora, acabamos de atualizar o novo item do slot. Portanto, é impossível obter essas informações. Agora não podemos simplesmente pegar isso e fazer assim, porque aqui acabamos de atualizar este item. Este item aqui é, na verdade , agora esse item aqui. Então, não podemos fazer isso assim. O que podemos fazer é simplesmente pegar esse novo espaço. E antes de fazermos isso aqui, vamos clicar com o botão direito do mouse remotamente em uma variável local. Uma variável local é apenas uma variável temporária. Chame isso de novo item de caça-níqueis. E podemos clicar com o botão direito do mouse nesta, promover para variável local e chamar essa nova quantidade de itens de slot. Agora vamos conectá-los juntos e nos conectar com este também. E agora você pode usar essas variáveis para adicioná-las aqui. Então, o novo item do slot e , em seguida, a quantidade do novo item do slot. Tudo bem, então agora isso está correto. Na verdade, você pode simplesmente jogar e ver se isso funciona. Então, isso é se o item não for empilhável. Então, vamos clicar em jogar. E eu vou alaúdar isso aqui, isso aqui. E se eu apenas trocar esses dois juntos, você pode ver que agora eles são comutáveis. Se eu os arrastar até aqui, isso também funciona. Ok, então tudo funciona aqui e eu também posso trocá-los juntos. Isso é bom. Eu posso largá-lo. Eu posso trocá-los e descartar isso também. Você pode ver que funciona perfeitamente. Agora. No entanto, ele não funciona com os itens empilháveis porque não fizemos esse código. Então você pode ver aqui que o item é empilhável. Nada está acontecendo porque não fizemos nada aqui. Então isso está funcionando agora, vamos nos mudar para cá. Portanto, antes de fazermos qualquer coisa com os itens empilháveis, queremos somar as quantidades. Como você pode imaginar, se você tem quatro bananas no primeiro espaço e cinco bananas no segundo espaço, precisamos adicionar quatro mais cinco porque estamos arrastando o item empilhável para o próximo. Então, vamos pegar a vaga de drogas e também a nova vaga aqui. Agora eu os tenho e vamos pegar a quantidade do novo slot. Vamos adicioná-lo ao slot direto. E agora acabamos de criar essa nova quantidade de itens de caça-níqueis. Então, deixe-me arrastá-lo até aqui e colocá-lo aqui, conectado aqui. E a próxima coisa que precisamos verificar é a quantidade desse novo item. É maior do que o tamanho máximo da pilha desse item no novo slot? Então, vamos parar aqui e verificar se isso é maior do que o tamanho máximo da pilha, porque não queremos adicionar a coisa toda se ela ficar maior que o tamanho máximo da pilha Vamos arrastar aqui e criar um booleano. Então, digamos primeiro: Não, não é maior do que o tamanho máximo da pilha. Então, vamos apenas adicionar, por exemplo, para bananas junto com cinco bananas. Então isso é falso. Não é maior do que o tamanho máximo da pilha. Vamos arrastar o compartimento de atualização do novo item e arrastar o slot de atualização, arrastado e conectá-los. Então, para o novo slot, novamente, assim como antes, o novo item do slot é apenas aquele do slot direto, porque acabamos de arrastá-lo até lá. Então, pegando isso, conectando-o e solicitando a nova quantidade do item, acabamos de adicioná-los aqui. Então você pode. Pegue isso, conecte-o e crie nós de redirecionamento. E agora podemos, para o falso conectado aqui, na verdade, em vez de fazer isso, podemos realmente usar esse. Vamos deletar isso e pegar essa aqui para que possamos usar essa variável que acabamos de criar. É um pouco mais fácil usar algo assim. E agora, para o slot direto de atualização, agora acabamos de adicionar o item de slot direto em cima do novo slot. Então, ainda mais, na verdade, não temos mais um item. Vamos deixar que seja assim, a quantidade zero e o item serão excluídos do slot antigo. Ok, e se o item que estamos colocando em cima do novo slot conseguir mais do que o tamanho máximo da pilha desse item. Agora vamos copiar isso novamente e colá-lo aqui. Então, novamente, para o boletim informativo é como se o item fosse apenas o item do compartimento de medicamentos e a quantidade do novo slot exatamente do tamanho máximo da pilha porque não pode ser maior do que isso. Quanto à vaga de medicamentos aqui, o item de lodo seco é exatamente esse de novo. Então, eu vou copiar isso, colar aqui. Agora, para a nova quantidade de itens, precisamos subtrair essa nova quantidade do tamanho máximo da pilha. Então, vamos pegar a quantidade aqui, digamos menos o tamanho máximo da pilha. Então, digamos, por exemplo, que a vaga para drogas fosse dez e a nova vaga fosse quatro, o que nos dará 14. No entanto, para as bananas, o tamanho máximo da pilha é dez, então vai dizer 14 menos dez. Isso nos dá quatro. Lembre-se de que acabamos de arrastar dez para o novo slot. Então, temos os quatro que sobram no lodo seco. Então, vamos dizer menos aqui, e eu vou criar algumas notas de redirecionamento para que fique um pouco mais claro. E vamos conectar essa verdade aqui com esta, e agora ela deve funcionar. Então, vamos compilar tudo. Vamos ver se temos algum bug. Vamos clicar em Jogar. Deixe-me ir em frente e saquear alguns dos itens. E agora eu tenho 10.4. Se eu arrastar um novo slot para eles, ele realmente desaparece. Então, eu realmente preciso ver o que está acontecendo. Deixe-me voltar aqui e clicar na atualização do novo slot e verificar se está correto e se parece bom para mim. Então, agora, se voltarmos para Andhra e voltarmos aos slides de atualização do inventário, o IF funcionará aqui. E eu posso ver que, na verdade , o erro está aqui. Precisamos do tamanho máximo da pilha dos slots drogados. Porque não precisamos do tamanho máximo da pilha do novo slot. Porque se eu arrastar aqui, você verá que o novo slide agora tem zeros. Portanto, o tamanho máximo da pilha é zero porque não há nenhum item que seja realmente o dinheiro. Então, em vez de aqui, vamos conectá-lo, conectar este e criar notas de redirecionamento. Então, parece bom. Agora vamos compilar e deve funcionar. Isso foi apenas um pequeno erro. Vamos saquear tudo de novo. E agora temos o tamanho correto do Max Stack. Então, vamos arrastá-lo para o próximo e agora funciona. E se eu arrastar esse dez para o quatro, deveria dizer 10,4. Então, isso deve alternar entre si desse jeito. Então funciona agora que os itens empilháveis estão funcionando. E se eu deixar cair aqui, eu deixo cair essa, eu as carrego. Cfi, vamos, deixe-me realmente desenhar esse, vou coletar isso, colocá-lo aqui, ele deve preencher esse espaço aqui primeiro. Em seguida, ele colocará as coisas que estão mais aqui. Isso os colocará no primeiro slot. Ok, então tudo está funcionando agora. Estamos atualizando tudo. Vou colocar todos os itens no chão e vamos testar o produto final. 49. 8.05 Adicionando efeitos sonoros: Para torná-lo um pouco mais interessante antes de terminarmos este curso, vamos adicionar alguns efeitos sonoros. Então, na pasta de áudio, incluí alguns efeitos sonoros. É claro que podemos adicionar mais, mas vamos experimentá-los por enquanto. Então, esses efeitos sonoros, você pode clicar no primeiro e segurar a tecla Shift clicar no último e clicar com o botão direito do mouse. Você vai em frente e cria várias filas. Então, estamos criando essas pistas sonoras. Vou renomeá-los. Por exemplo, eu posso renomear o primeiro. Em vez de chamar uma fila aqui, vou chamá-la de SC para sinalização sonora e, em seguida, o nome do efeito sonoro. Agora eu renomeei todos eles, então veja, para começar, a sugestão sonora. E eu posso tocá-los agora, mas eles são muito altos. Acho que isso será permitido para você. Então, antes de fazer isso, vou abrir o primeiro. E agora, para isso aqui em cima, para o multiplicador de volume, você pode reduzir o som. Esta é a parte inferior, Hoover. Então, deixe-me escrever 0,5 e jogar a fila. E talvez 0,4 seja melhor. Vamos fechá-lo. Vamos abrir o próximo botão, digamos 0,4. Eu acho que isso está bem. Agora, para o inventário perdido, vamos tentar 0,4. Isso é bom. Novamente, optando pelo item de entrega, talvez 0,5 para este, isso é muito silencioso e os luditas são 0,50, 0,4. Eu acho que é melhor. Ok. E o último, o inventário aberto. Vamos tentar 0,4 como muito alto. 0,3. Eu acho que 0,25, talvez, algo assim. Vamos salvar tudo agora que reduzimos o som. Agora, um pequeno truque se você quiser sons diferentes. Então, agora você pode ver que isso é o que parece. Mas se você quiser que ele soe um pouco diferente toda vez que você abre, ele pode simplesmente arrastar daqui e escrever o modulador aqui embaixo, esse modulador e conectado aqui. Então agora você tem um modulador no meio. E você pode dizer que o mínimo, que é 0,9, e o tom máximo é 1,1. E se você tocar sempre que puder ouvir, é um efeito sonoro diferente. Toda vez. Ele muda ligeiramente no tom para cima e para baixo. Então, depende de você, por exemplo, os sons do alaúde, o item de lançamento. Você pode torná-los um pouco diferentes toda vez que carrega. Então, tudo bem por enquanto. Então, vamos adicionar o botão de passar o mouse e o botão para começar. Então, vamos para a interface do usuário. E primeiro ano da categoria. Vamos clicar nele. E aqui, vamos clicar na categoria do botão. Você pode ir até aqui e você tem um som deprimido e o som flutuante. Eles clicarão aqui, selecionando o botão passar mouse e pressionar o botão para este, vamos compilar e salvar o que podemos fazer. Também podemos adicioná-lo aos botões de inventário. Então, clicando na interface principal, se clicarmos nesse botão, podemos adicionar a mesma coisa aqui. Pressione o botão, passe o mouse. Vamos compilar e salvar tudo. Você pode experimentá-lo. Você pode tentar clicar em Jogar e ver o que acontece aqui para o cliente. Se eu clicar em ocupado, agora está funcionando. Portanto, é um pouco mais interessante do que nenhum som. Bem, vamos fechá-lo e a próxima coisa que precisamos adicionar é fechar o inventário e abrir o inventário que vamos ver os planos. E vamos tentar primeiro. Temos aqui e o jogador, estamos abrindo e fechando o inventário. Então, podemos colocá-lo aqui, ou podemos jogá-lo dentro do controle do player. Se formos até o controle do player e você estiver livre para fazer o que quiser aqui, a decisão é sua. Também podemos nos relacionar aqui quando você abre o widget, o inventário de abertura ou, quando fechamos o widget, fechamos o inventário. Portanto, ele pode fazer isso aqui ou ali. Deixe-me tocá-lo aqui no player, arraste daqui, diga o som atrasado para D e também copie e cole aqui embaixo. Então, aqui estamos fechando o inventário. Então, clicando aqui e selecionando o estoque mais baixo. E aqui embaixo estamos abrindo o inventário. Então, vou selecionar Abrir inventário e vamos incluí-los aqui no comentário também. Ok, vamos compilar e clicar em Jogar e ver o que acontece. Então, se eu clicar nele para abrir o inventário e clicar em OK para fechá-lo novamente. Ok, agora isso também funciona. A última coisa que falta aqui no áudio é o item de soltar e o item de alaúde. Para o item de cargas, estamos pressionando E para saquear o ISM e ele passará pelo servidor e será adicionado ao inventário. No entanto, ainda não carregamos aqui. Então, vamos até o inventário e vamos jogar aqui no loop, completo. Quando destruímos o item, nós o carregamos aqui. Vamos sair daqui e dizer reproduzir som para D. E o que queremos tocar é como o mencionado. Portanto, é um item obsceno. E também vamos copiar e colar aqui. Também estamos carregando aqui. Tudo bem, então o som final que está faltando aqui é o item de lançamento. Então, para o item de entrega, se você se lembra, vamos para a interface do usuário e vamos para o WB principal. Dentro daqui, temos essa função de Andhra ou descartar o item. E temos esse único item do inventário e ele acaba, se você se lembrar, no controle do jogador, no controle do jogador responderá da mesma forma quando o derrubarmos. No entanto, se você jogar aqui, lembre-se de que este evento está sendo executado no servidor. Portanto, ele nunca passa pelo cliente. Portanto, se você adicionar um som de reprodução para d aqui, ele não funcionará. O cliente não ouvirá. Então, vamos realmente fazer isso dentro do WB principal aqui. Quando estivermos prontos para entregar o item, vamos soltar o item. Você pode até mesmo colocá-lo aqui para atualizar a interface do usuário. Vamos jogar aqui antes de fazermos essa última coisa. E lembre-se de selecionar a sugestão sonora do item de descarte. E vamos compilar e clicar em play. Então, agora, quando ando por aí, aludi a um item. Abra o inventário que eu aludo. Ok, parece bom. E quando eu deixo cair o item, você também pode ouvir isso. É assim que você adiciona efeitos sonoros. Obviamente, isso só pode ser ouvido por você mesmo, porque, afinal, é um inventário. E não queremos que todos esses sons também sejam ouvidos pela outra camada. Então, agora tudo parece bom. E vamos seguir em frente. 50. 8.06 Testando o produto final: Tudo bem, agora estamos prontos para testar o produto final e ver se temos alguma caixa. Então, se clicarmos em jogar aqui e agora é o servidor e perguntarmos ao servidor, vou aludir a uma arma e vou carregá-la. Estou carregando o próximo. Essa é a faca. Tudo está funcionando. Eu posso movê-los e, se eu fizer alusão novamente , eles serão carregados aqui. Então isso está funcionando corretamente? Simples assim, vou perder uma poção e vou pressionar aqui. E são três poções no chão carregando essas 13 poções de resistência carregam mais poções de resistência. Esse era um no chão. Olhando aqui, ele colocará mais poções. Acho que o tamanho máximo da pilha é dez para a poção e na verdade seis para os quocientes. E agora você pode ver que eles foram adicionados em cima de uma nova pilha. E eu posso manter isso como cinco, eu acredito, para as manipulações. Então, ele vai criar uma nova pilha. Então, tudo está funcionando perfeitamente. Vou carregar as bananas. Esses funcionam como você sabe, nós os testamos várias vezes desse jeito. Perfeito. Então, eles estão funcionando. Eu vou perder a carne. E você pode ver a carne. Este é, eu acho, seis peças. E, na verdade, não esse. Este tem seis peças, então vai adicionar 5,1. E isso funciona. 5.1. Isso está correto. E agora você pode ver que isso funciona perfeitamente. E se eu continuar poluindo armas, bem, então tudo está funcionando como deveria. Eu posso movê-los. Se eu mover peças que não são empilháveis, elas não se acumularão. Então, esses cinco estrangeiros, eu posso trocá-los entre si e eu posso deixá-los se eu quiser. Agora, como clientes, precisamos saber que podemos fazer o mesmo. Então, clicando em Jogar, este é o servidor. Então, voltando ao cliente, vou minimizar isso um pouco. Indo até o cliente, pressionando um olho para ver o inventário. Eu posso ver isso, isso funciona muito bem. As carnes estão aqui na comida. Isso é ótimo. Vou fazer alusão a todas essas coisas e também está funcionando perfeitamente. Agora, para o cliente, se eu cair, o servidor deve ser capaz de vê-los. E eu posso ver isso, esse declínio acabou de cair. Então esta é, se eu mencionei, são cinco poções. Então, se eu deixar aqui, os itens podem, o cliente pode ver, e o cliente também pode carregar esses cinco oceanos. Será empilhado aqui antes de ser empilhado aqui. Ok, então a última coisa, vamos testá-la entre dois clientes porque não queremos a lógica do servidor, então ela também deve estar correta. Se dois clientes estiverem juntos, digamos, em um servidor dedicado. Então, vamos continuar como esse primeiro cliente. Vamos saquear e deixar cair essas cinco bananas. Eu também posso vê-los. E o novo cliente aqui vai perdê-los. E essas são na verdade cinco bananas, digamos que eu as deixei aqui em vez disso. E eu posso vê-los nos outros clientes. Portanto, tudo está funcionando bem tanto para o cliente quanto para o servidor. Era isso para o inventário. Espero que você tenha gostado do curso. Foi muito divertido de fazer. Se você estiver interessado em meus outros cursos, visite pixel helmet.com. Vou continuar lançando cursos todos os meses. Então vá em frente e dê uma olhada se quiser alguma ajuda. Também posso ajudá-lo no meu site ou se você quiser se juntar ao nosso servidor discord, isso agradecerá por estar aqui e nos vemos no próximo.