Como fazer um jogo de FPS – Unreal Engine 5 Multiplayer (2024) | Pixel Helmet | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


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

Como fazer um jogo de FPS – Unreal Engine 5 Multiplayer (2024)

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:21

    • 2.

      1.02 Baixando o Unreal Engine 5

      1:37

    • 3.

      1.03 Criando um novo projeto

      2:21

    • 4.

      1.04 Visão geral do Unreal Engine 5

      17:54

    • 5.

      2.01 Introdução ao jogo

      2:21

    • 6.

      2.02 Criando um novo mapa

      1:05

    • 7.

      2.03 Importando assets de ambiente

      4:16

    • 8.

      2.04 Projetando o ambiente

      12:05

    • 9.

      2.05 Volume de processo de pós-venda

      6:05

    • 10.

      2.06 Iluminando o ambiente

      23:46

    • 11.

      2.07 Dicas de otimização de ambiente

      10:52

    • 12.

      3.01 Importando os personagens

      2:56

    • 13.

      3.02 Classes de Blueprint para pais e filhos

      4:53

    • 14.

      3.03 Configurando o personagem

      8:31

    • 15.

      3.04 Modo de jogo e controlador de jogador

      4:58

    • 16.

      3.05 Contexto de mapeamento de entrada

      5:14

    • 17.

      3.06 Adicionando o contexto de mapeamento de entrada

      5:13

    • 18.

      3.07 Interface de Blueprint

      6:53

    • 19.

      Movimento de jogador 3.08

      7:07

    • 20.

      3.09 Importando as animações do jogador

      3:27

    • 21.

      3.10 Criando rigs do IK

      6:58

    • 22.

      3.11 Criando um Retargeter do IK

      6:49

    • 23.

      3.12 Fixando as mãos

      5:40

    • 24.

      3.13 Retargeting das animações

      4:37

    • 25.

      3.14 Introdução ao Blend Spaces

      3:35

    • 26.

      3.15 espaços de mistura desarmados

      8:40

    • 27.

      3.16 Introdução aos Blueprints de animação

      3:53

    • 28.

      3.17 Velocidade e direção de movimento

      7:47

    • 29.

      3.18 Entrada de crouch no multiplayer

      2:34

    • 30.

      3.19 Função de crouch no multiplayer

      11:54

    • 31.

      3.20 Blueprint de animação de crouching

      7:30

    • 32.

      3.21 Replicação variável

      3:08

    • 33.

      3.22 Suavização de animação

      2:46

    • 34.

      3.23 Caminhada no multiplayer

      6:00

    • 35.

      3.24 Blueprint de animação de caminhada

      4:46

    • 36.

      3.25 Salto no multiplayer

      4:59

    • 37.

      3.26 Blueprint de animação de salto

      7:37

    • 38.

      3.27 Introdução às enumerações

      2:47

    • 39.

      3.28 Mudando as variáveis de movimento para enums

      10:46

    • 40.

      3.29 Mudando as regras de transição de animação

      6:08

    • 41.

      3.30 Fixando o tamanho do jogador

      3:54

    • 42.

      3.31 Definindo a velocidade de movimento

      8:18

    • 43.

      4.01 Aim Offset Blend Space

      2:04

    • 44.

      4.02 Preparando as animações de deslocamento de objetivo

      4:56

    • 45.

      4.03 Adicionando animação ao deslocamento de meta

      2:31

    • 46.

      4.04 Como avaliar a direção do objetivo

      5:47

    • 47.

      4.05 Adicionando o deslocamento de meta

      2:19

    • 48.

      4.06 Adicionando a câmera do jogador à cabeça

      6:27

    • 49.

      4.07 Escondendo o chefe do modelo do jogador

      3:10

    • 50.

      4.08 Adicionando uma malha de terceira pessoa

      3:04

    • 51.

      4.09 Suavização de câmera e FPS

      4:04

    • 52.

      5.01 Ajustando a velocidade de movimento

      2:38

    • 53.

      5.02 Ajustando a velocidade da animação

      10:14

    • 54.

      5.03 Fixando o recorte de parede da câmera

      5:50

    • 55.

      5.04 Consertando o crouch de salto

      6:01

    • 56.

      5.05 Corrigindo os bugs restantes do Crouch

      1:07

    • 57.

      5.06 Preparando os passos do SFX

      5:27

    • 58.

      5.07 Temporizador por evento

      6:51

    • 59.

      5.08 Replicação de multicast

      9:17

    • 60.

      5.09 Condições de SFX da Passo

      13:03

    • 61.

      6.01 Colocando os pontos de spawn

      5:53

    • 62.

      6.02 Armazenando informações de ponto de spawn

      8:07

    • 63.

      6.03 Importando os assets de IU

      4:21

    • 64.

      6.04 Importando uma fonte personalizada

      2:54

    • 65.

      6.05 Introdução ao Blueprints de widgets

      5:26

    • 66.

      6.06 Exibindo a interface de usuário de seleção de equipe

      12:32

    • 67.

      6.07 Tamanho de interface do usuário dinâmica para todos os tamanhos de tela

      5:13

    • 68.

      6.08 Criando a IU de seleção de equipe

      21:24

    • 69.

      6.09 Efeitos sonoros de Button

      3:06

    • 70.

      6.10 Como gerar atores

      7:19

    • 71.

      6.11 Localização de spawn do jogador

      5:32

    • 72.

      6.12 Interface de Blueprint de modo de jogo

      2:15

    • 73.

      6.13 Terminando a lógica de seleção de equipe

      5:08

    • 74.

      6.14 Gerando o jogador

      4:27

    • 75.

      6.15 Configurando o modo de entrada

      3:14

    • 76.

      6.16 Colocando uma câmera de espectador

      5:41

    • 77.

      7.01 espaços de mistura de pistola

      5:50

    • 78.

      7.02 espaços de mistura de rifles

      3:58

    • 79.

      7.03 Deslocamentos de mira de pistola

      2:23

    • 80.

      7.04 Deslocamentos de mira de rifle.

      2:14

    • 81.

      7.05 Blend Poses de Bool

      4:15

    • 82.

      7.06 Blend Poses de Enum

      5:53

    • 83.

      7.07 Blueprint de animação de pistola

      3:05

    • 84.

      7.08 Blueprint de animação de rifle.

      2:20

    • 85.

      7.09 Finalizando o Blueprint de animação

      6:38

    • 86.

      8.01 Importando os ascensores de arma

      3:16

    • 87.

      8.02 Configurando a arma

      5:50

    • 88.

      8.03 Habilitando a física

      4:03

    • 89.

      8.04 Replicando atores

      1:22

    • 90.

      8.05 Sobreposição de arma

      4:34

    • 91.

      8.06 Configurando o tipo de arma

      2:31

    • 92.

      8.07 Verificando se o jogador tem a arma

      4:09

    • 93.

      8.08 Saqueando a arma

      11:17

    • 94.

      8.09 Criando o soquete de arma

      10:00

    • 95.

      8.10 Criando os soquetes restantes

      5:51

    • 96.

      8.11 Anexando uma arma à mão

      14:05

    • 97.

      8.12 Anexando armas à retaguarda

      10:58

    • 98.

      8.13 Sobrepondo duas armas de uma vez

      13:33

    • 99.

      8.14 Criando a estrutura de arma

      5:08

    • 100.

      8.15 Criando a tabela de dados de armas

      9:10

    • 101.

      8.16 Usando a biblioteca de funções

      8:03

    • 102.

      8.17 Adicionando o nome da arma

      3:08

    • 103.

      8.18 Substituindo a variável WeaponType

      5:03

    • 104.

      8.19 Ação de entrada de arma

      2:02

    • 105.

      8.20 Lógica de arma de soltar

      4:48

    • 106.

      8.21 Notificação de representante de arma de soltar

      9:51

    • 107.

      8.22 Reiniciando o valor de notificação de representante

      6:18

    • 108.

      8.23 Interação de arma booleana

      5:25

    • 109.

      8.24 Removendo a interação do Dropping Player

      7:07

    • 110.

      8.25 Melhoria da interação do jogador de arma

      8:03

    • 111.

      8.26 Arma de saque com chave de teclado

      16:58

    • 112.

      8.27 Configurando o tipo de item equipado corretamente

      2:28

    • 113.

      8.28 Corrigindo o erro de saque "Não acessou nada"

      5:18

    • 114.

      8.29 Limpando o código

      13:04

    • 115.

      8.30 Consertando um problema de replicação pequeno

      7:22

    • 116.

      9.01 Ações de entrada de troca de arma

      2:11

    • 117.

      9.02 Lógica de comutação de armas

      7:47

    • 118.

      9.03 Equip e Unequip arma RepNotify

      4:47

    • 119.

      9.04 Equipando a segunda arma

      2:30

    • 120.

      9.05 Criando montagens de animação

      2:04

    • 121.

      9.06 Ajustando o modelo de animação

      4:37

    • 122.

      9.07 Equipe de animação multicast

      5:59

    • 123.

      9.08 Configurando o widget de exibição de armas

      2:41

    • 124.

      9.09 Criando a IU de exibição de arma

      6:09

    • 125.

      9.10 Exibindo a IU de exibição de arma

      4:05

    • 126.

      9.11 Codificando a funcionalidade de exibição de arma

      6:02

    • 127.

      9.12 Adicionando miniatura de arma à estrutura

      8:26

    • 128.

      9.13 Opacidade de IU de arma inédita

      5:21

    • 129.

      9.14 Adicionando efeitos sonoros de equipe

      8:15

    • 130.

      10.01 Criando a IU de mira

      3:09

    • 131.

      10.02 Exibindo a mira

      2:52

    • 132.

      10.03 Adicionando propriedades de armas à estrutura

      1:11

    • 133.

      10.04 Ação e estrutura de entrada de arma de tiro

      8:41

    • 134.

      10.05 Criando o temporizador de disparo de arma

      18:21

    • 135.

      10.06 Traço de linha por canal

      13:21

    • 136.

      10.07 Ajustando as configurações de colisão de jogador

      8:31

    • 137.

      10.08 Criando os soquetes de flash do focinho

      2:35

    • 138.

      10.09 Fotografando VFX e SFX

      6:26

    • 139.

      10.10 Prevenindo o disparo durante o Equip Anim

      5:56

    • 140.

      10.11 Criando a IU de munição

      6:04

    • 141.

      10.12 Definindo a quantidade inicial de munição de arma

      6:37

    • 142.

      10.13 Criando a lógica da interface de usuário de munição

      4:52

    • 143.

      10.14 Atualizar a interface do usuário de munição

      5:02

    • 144.

      10.15 Esconder a interface de usuário de munição

      6:03

    • 145.

      10.16 Munição de contagem

      6:20

    • 146.

      10.17 Recarregar animação de arma

      5:20

    • 147.

      10.18 Funcionalidade de arma de recarga

      11:27

    • 148.

      10.19 Condições de disparo

      7:31

    • 149.

      10.20 Recarregar a arma com a chave do teclado

      5:48

    • 150.

      10.21 Recarregar a arma na troca de armas

      3:31

    • 151.

      10.22 Adicionando o disparo de pistola

      3:06

    • 152.

      10.23 Parando de filmar VFX na troca de armas

      7:13

    • 153.

      10.24 Animação de tiro

      13:52

    • 154.

      10,25 Fora da munição SFX

      7:45

    • 155.

      10.26 VFX e SFX de impacto de bala

      22:02

    • 156.

      10.27 Propagação de bala

      5:39

    • 157.

      10.28 Colocando as armas corretamente

      5:14

    • 158.

      11.01 Criando a IU de saúde e armadura

      12:01

    • 159.

      11.02 Aplicando dano

      9:33

    • 160.

      11.03 Estrutura de informação do jogador

      1:46

    • 161.

      11.04 Tabela de dados de informações do jogador

      5:08

    • 162.

      11.05 Definindo a saúde e a armadura base

      4:45

    • 163.

      11.06 Funcionalidade de IU de saúde e armadura

      5:08

    • 164.

      11.07 Atualizando a IU de saúde e armadura

      4:09

    • 165.

      11.08 Causando danos à saúde

      4:23

    • 166.

      11.09 Causando dano à armadura

      5:13

    • 167.

      11.10 Prevenindo o saque de vários rifles

      5:43

    • 168.

      12.01 Morte

      8:35

    • 169.

      12.02 Solte a arma quando estiver morta

      23:20

    • 170.

      12.03 Respawn

      9:03

    • 171.

      12.04 RepNotify não morto

      9:06

    • 172.

      12.05 Reiniciando a saúde no Respawn

      1:40

    • 173.

      12.06 Prevenindo o dano da equipe

      2:41

    • 174.

      13.01 Criando a interface de usuário de pontuação

      6:18

    • 175.

      13.02 Criando a IU de vitória da equipe

      2:18

    • 176.

      13.03 Funcionalidade de UI de pontuação e vitória em equipe

      5:38

    • 177.

      13.04 Mantendo o controle de jogadores vivos

      7:07

    • 178.

      13.05 Mantendo o controle de jogadores mortos

      3:09

    • 179.

      13.06 Mantendo o controle de todos os jogadores criados

      1:40

    • 180.

      13.07 Verificando a quantidade de jogadores vivos

      6:03

    • 181.

      13.08 Anúncio de vitória da equipe

      13:17

    • 182.

      13.09 Adicionando a pontuação da equipe

      7:34

    • 183.

      13.10 Reaparecendo os jogadores

      4:28

    • 184.

      14.01 Adicionando impulso no lançamento de armas

      4:46

    • 185.

      14.02 Melhorando o peso da arma

      3:12

    • 186.

      14.03 Removendo o Reload SFX no lançamento de armas

      5:46

    • 187.

      14.04 Adicionando o anúncio da equipe ganha no SFX

      5:47

    • 188.

      14.05 Adicionando o indicador de sucesso do inimigo

      8:28

    • 189.

      14.06 Adicionando ambiente SFX

      2:10

    • 190.

      14.07 Removendo o Mag ao recarregar

      9:21

    • 191.

      14.08 Corrigindo o bug de recarga na troca de arma

      3:28

    • 192.

      14.09 O que agora

      2:04

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

314

Estudantes

--

Projeto

Sobre este curso

Como fazer um jogo de FPS: comece com o Unreal Engine 5 Multiplayer.

Este abrangente programa de aulas no Unreal Engine ensinará a você como fazer um jogo de FPS no Unreal Engine 5 Multiplayer do zero. Inspirado no jogo clássico Counter-Strike, você vai aprender toda a mecânica básica e avançada necessária para saber como fazer um jogo de tiro em primeira pessoa. Tudo isso sem escrever uma única linha de código.

Você não precisa de nenhuma experiência anterior em desenvolvimento de jogos para fazer este curso; vamos passar por isso passo a passo. Se você é um iniciante ou um desenvolvedor experiente do Unreal Engine, este course tem algo para todos que querem aprender a fazer um jogo de fps no UE5.

O principal objetivo deste curso é deixar você confiante em como fazer um jogo de fps. Isso permitirá que você ganhe dinheiro e trabalhe como desenvolvedor de jogos independente em casa. Na verdade, sou desenvolvedor de jogos no UE5 em tempo integral há alguns anos, criando jogos, criando designs e vendendo ativos de jogos no mercado do Unreal Engine.

Comece seu treinamento de tiro em primeira pessoa hoje aprendendo como fazer um jogo de fps!

O que me torna qualificada para ensinar você?

Sou um desenvolvedor de jogos experiente com nove anos de experiência. Para resumir meu trabalho sem te aborrecer:

  • Eu lancei um jogo no Steam que dirigi do início ao fim com uma equipe de 8 pessoas.
  • Criei 11 aulas de desenvolvimento de jogos com mais de 40.000 estudantes e uma classificação média de 4.8+ de 5 estrelas.
  • Atualmente estou desenvolvendo solo o Farmtale 2 do início ao fim.
  • Também trabalho como freelancer em vários projetos de jogos, especializada em programação, iluminação, otimização de jogos e muito mais.

Sou profundamente pessimista no desenvolvimento de jogos e fiz do meu trabalho em tempo integral. Eu adoraria ensinar tudo sobre o Unreal Engine 5 com boas práticas de desenvolvimento de jogos e mantê-lo atualizado com as informações mais recentes.

Se você quiser aprender como publicar um jogo no Steam, confira o campo que eu lancei sobre o tema.

Faça jogos sem programar.

O blueprint do Unreal Engine é a poderosa linguagem de script do Unreal Engine usada no UE5. Ele permite que você crie seu próprio jogo online do início ao fim sem escrever uma única linha de código. Isso significa que você pode criar facilmente seu próprio jogo online, mesmo se for um iniciante, artista ou designer sem experiência em programação.

Este curso não requer nenhuma programação ou experiência no Unreal Engine. Vamos passar pelo básico do blueprint do Unreal Engine e avançar lentamente para o desenvolvimento de mecânica de jogo mais complexa. Ao fazer isso, você aprenderá como desenvolver jogos do início ao fim.

Você pode entrar neste course como iniciante, pois vai aprender passo a passo como fazer um jogo de fps do zero.

Multiplayer no Unreal Engine 5.

Entrar no desenvolvimento de jogos online com o Unreal Engine 5 é muito fácil. É semelhante ao projeto do Unreal Engine para um jogador, mas com uma etapa extra adicionada. Enquanto aprende a fazer um jogo de fps, você aprenderá tudo o que precisa saber sobre o multiplayer do Unreal Engine 5. Você não precisa de experiência prévia, pois vou ensinar rede básica e avançada no Unreal Engine.

Como fazer um videogame do zero

Embora este curso ensine você a fazer um jogo de fps, sempre há outros objetivos de aprendizado importantes nos meus courses. Ao assistir às aulas de vídeo, prestar atenção às ferramentas usadas durante o desenvolvimento de jogos é essencial. Você vai aprender como desenvolver jogos a partir de um projeto vazio do Unreal Engine. Independentemente do gênero, o processo de desenvolvimento de jogos no Unreal Engine 5 permanece o mesmo.

Como fazer um atirador em primeira pessoa - Aprenda tudo.

Neste curso do Unreal Engine, você vai ganhar conhecimento abrangente sobre como fazer um jogo de fps. Em primeiro lugar, o curso começa com um projeto vazio e apresenta aulas de vídeo simples e fáceis de acompanhar em resolução 4K. Em segundo lugar, você vai aprender como desenvolver o ambiente de jogo, incluindo design de níveis, iluminação e otimização do ambiente para um desempenho ideal do jogo. Então, vamos passar para o básico do multiplayer do Unreal Engine 5 e aprender à medida que desenvolvemos nosso jogo. Alguns dos conceitos-chave neste curso do Unreal Engine:

  • Aprenda como criar seu próprio personagem no Unreal Engine 5.
  • Aprenda a entrada aprimorada do Unreal Engine para movimento e animação.
  • Aprenda design de níveis de materiais à iluminação e otimização de jogos.
  • Aprenda como pegar armas ou qualquer outro item do chão.
  • Aprenda como equipar, soltar, atirar e recarregar pistolas e rifles.
  • Crie um sistema de inventário com funcionalidade de arrastar e soltar.
  • Cause dano a outros jogadores com saúde e armadura.
  • Crie uma funcionalidade de seleção de equipe com condições de vitória.
  • Aprenda como gerar e recriar jogadores.
  • Projete a interface de usuário do jogo (UI).
  • Adicione efeitos visuais e sonoros (VFX e SFX).
  • E muito mais.

Este curso também inclui o projeto de jogo acabado para você inspecionar. No final deste curso, você terá adquirido as habilidades necessárias para criar seu próprio jogo online.

Faça este curso e obtenha a certificação.

Completar o ciclo de como fazer um jogo de FPS garante uma certificação no Unreal Engine. Você pode usá-lo para fortalecer seu portfólio como desenvolvedor de jogos independente ou usá-lo ao se candidatar a empregos de desenvolvimento de jogos. A certificação do Unreal Engine pode ser baixada e salva localmente e é válida indefinidamente.

Como continuar ao completar "Como fazer um jogo de FPS."

"Como fazer um jogo de FPS" fornece as habilidades e o conhecimento necessários para avançar em direção a tópicos mais desafiadores. Você pode expandir o treinamento de tiro em primeira pessoa adicionando um sistema de inventário para transformá-lo em um jogo de tiro de RPG.

Criar jogos 2D neste software de desenvolvimento de jogos é surpreendentemente fácil e conveniente. Suponha que você queira aprender como fazer um jogo 2D no multiplayer usando as funcionalidades 2D do Unreal Engine. Nesse caso, você pode se inscrever em um curso emocionante sobre como fazer uma plataforma 2D no multiplayer. Você também pode entrar em jogos 2D para um jogador no Unreal Engine 5 observando como fazer um jogo de clicker.

Junte-se à nossa comunidade de apoio.

O desenvolvimento de jogos no Unreal Engine pode ser uma experiência frustrante às vezes. Por exemplo, você pode precisar olhar para uma caixa desmarcada em algum lugar, deixando você se sentindo perdido por horas. Alternativamente, você pode precisar de apoio moral e ideias de outros desenvolvedores de jogos como você. É por isso que oferecemos suporte ao vivo 24/7 escrevendo na seção de perguntas e respostas em qualquer um dos campos. Estamos sempre aqui para ajudar você sempre que precisar.

Vamos começar com "Como fazer um jogo de FPS" sem qualquer delay . Estou ansiosa para ver você na primeira aula Então, vamos começar e torcer para uma jornada de aprendizado emocionante!

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. Introdução: Neste curso, aprenderemos como desenvolver um jogo de tiro em primeira pessoa multijogador usando plantas no Unreal Engine Five, recriando um jogo semelhante ao icônico jogo Counter Strike Este curso contém tudo o que você precisa saber para começar a desenvolver jogos de tiro em primeira pessoa multijogador no Unreal Engine Incluindo como adicionar movimento FPS multijogador. Como criar uma tela de seleção de equipes. Como pegar e soltar armas. Como fazer um inventário de FPS. Como equipar uma pistola e um rifle. Como atirar usando diferentes tipos de armas. Como calcular e exibir a quantidade correta de balas Como recarregar uma arma. Como adicionar saúde e armadura. Como causar dano a outros jogadores. Como recompensar pontos de rodada para a equipe vencedora. Como responder aos jogadores. Como atualizar os valores da interface do jogo corretamente no modo multijogador. E, finalmente, como adicionar efeitos visuais e efeitos sonoros no modo multijogador. Também fornecerei o projeto finalizado para que você possa inspecioná-lo como desejar enquanto segue o curso No final deste curso, você poderá criar com confiança seu próprio jogo de tiro em primeira pessoa multijogador do zero no hon real Espero que você se junte a mim neste curso hoje. E lembre-se de que estou sempre aqui para apoiá-lo durante todo o curso e espero vê-lo em breve. 2. 1.02 Baixando o Unreal Engine 5: Para baixar o Unreal Engine Five, primeiro você precisa acessar Epic Games.com. E dentro daqui, há um botão azul aqui no canto superior direito Você precisa clicar nele e ele fará o download do lançador da Epic Games Você pode ver aqui, ele está sendo instalado agora. No entanto, eu já o instalei, então vá em frente e instale-o quando terminar. E aqui eu abri o lançador da Epic Games e ele solicitará que você faça login Eu já tenho uma conta da Epic Games, então vou entrar com minha conta da Epic Games. Se você não tiver um, pode se inscrever aqui. É gratuito ou você pode fazer login com todos os outros métodos. No entanto, vou entrar com minha conta da Epic Games. Depois de fazer login no inicializador, você estará dentro desta página Vá em frente e clique em Honoral Engine aqui à esquerda. Vá em frente e clique na guia da biblioteca aqui e você verá as versões do motor. Este é o Honoral Engine, e se você não vê nada, você pode ter uma caixa cinza aqui se esta for a primeira vez que você estiver dentro daqui Mas se você não receber uma caixa cinza, você pode clicar neste botão de adição aqui e você receberá uma. Em seguida, você pode selecionar o número e selecionar qual versão do Unreal Engine deseja instalar Agora você pode ver que eu já instalei Unreal Engine 5.2. No entanto, se você tiver uma versão posterior, se estiver assistindo isso no futuro e tiver 5.3 ou 5.21 e assim por diante, basta instalá-la Você pode acompanhar e nada mudou. Mas para este curso, vou instalar o mais novo motor Unreal five E então estamos prontos para a próxima lição. 3. 1.03 Criando um novo projeto: Vamos lançar o Unreal Engine Five. Quando o Unreal Engine five for lançado, essa janela aparecerá para que você possa ver seus projetos recentes E se você não tiver nenhum projeto recente, este estará vazio. Mas aqui você pode ver o meu. E o que queremos fazer é clicar na guia Jogos porque estamos criando jogos. Mas você também pode ver que o Real Engine Five pode ser usado para fazer arquitetura de filmes e vídeos, automotiva e de simulação. Muito legal. Mas para nós, vamos criar jogos. Então, vou entrar na guia Jogos. Na guia Jogos, você pode ver que pode selecionar entre diferentes modelos. Por exemplo, se você quiser criar um jogo de tiro em primeira pessoa como estamos fazendo, você pode selecionar o modelo em primeira pessoa Se você quiser fazer um jogo em terceira pessoa, você pode selecionar este e assim por diante. Assim, você pode ver que pode selecionar entre diferentes modelos interessantes. No entanto, todos esses modelos podem ser feitos por você. Na verdade, você pode criar um projeto em branco e criar tudo do zero e criar todos esses modelos. Se você sabe o que está fazendo nos meus cursos, gostaria de começar com um projeto em branco sem nada nele. Porque eu quero te ensinar como criar um jogo do nada. Não gosto de começar com esses modelos aqui. E, novamente, você pode criar tudo isso a partir de um projeto em branco se souber o que está fazendo. Então, vamos começar com um projeto em branco porque eu quero te ensinar todas as coisas. A partir de um projeto em branco, selecionaremos o Blueprint como nossa linguagem de programação E a plataforma alvo é a qualidade do desktop. A predefinição está configurada para o máximo. Quanto ao conteúdo dos dados, se você tiver isso, vou removê-lo para que não tenhamos nada. Novamente, quero começar do nada e depois selecionar onde você deseja salvar o projeto. Então, vou clicar aqui e selecionar uma pasta. E então vá em frente e dê ao seu projeto o nome deste jogo. Vou chamá-lo Counterstrike porque é o tipo de jogo que estamos fazendo Não estamos copiando 100%. Também estou fazendo algumas coisas personalizadas. Mas será muito mais parecido contra-ataque para este jogo de tiro multijogador Vá em frente, dê um nome e vamos clicar em Criar projeto. Depois que o projeto foi criado, aqui estamos dentro do Unreal Engine Vamos continuar na próxima lição e dar uma olhada na visão geral do Unreal Engine 4. Visão geral do Unreal Engine 5: Antes de começarmos nosso projeto, vamos dar uma rápida visão geral de como o Unreal Engine é construído Aqui no meio, temos a janela de visualização, e é aqui que você vê seu jogo visualmente Na janela de exibição, você pode segurar o botão direito do mouse. Ao segurar o botão direito do mouse na janela de exibição, você pode ver que pode olhar ao redor dentro da janela de exibição Agora, quando você segura o botão direito do mouse e clica em W, você avança no mundo. Quando você clica em, você volta Quando você clica em D, você se move para a direita. E quando você clica em A, você se move para a esquerda. Lembre-se de segurar o botão direito da boca ao fazer isso. Então, segure o botão direito mouse e o botão esquerdo do mouse ao mesmo tempo. Então você pode ver que você pode realmente se mover com o mouse sozinho, assim. Você também pode segurar o botão esquerdo do mouse sozinho e movê-lo para frente e para trás E você pode ver que também pode ficar assim. Existem diferentes técnicas de movimentação aqui dentro. O próximo é segurar o botão direito do mouse e, em seguida, você pode clicar em para mover para baixo ou clicar em para subir. Obviamente, a última coisa que temos aqui é que , se você rolar com o botão do mouse, também poderá aumentar e diminuir o zoom. Essas são todas as técnicas de movimento, e pronto. O principal que eu uso é segurar o botão direito do mouse e clicar em S DNA. Eu simplesmente me movo pelo mundo assim. Normalmente não uso os outros métodos, esse é o mais usado para mim. Então, você pode tentar segurar o botão direito do mouse, clicar em , tentar navegar, ter uma ideia de como é se mover dentro deste mundo. aqui, temos botões diferentes dentro do quadro de exibição Clicando aqui, o mais importante é esse chamado de visualização do jogo E esse esconde ícones no jogo. E isso é útil se você tiver tantos ícones no jogo. Lembre-se de quando você cria um jogo. Então, se você clicar em um dos itens que você tem dentro do mundo e clicar no teclado, na verdade o levará até esse item. Você pode ver aqui se eu clicar em, no meu teclado, esse é o atalho para a visualização do jogo Se eu clicar em, eu escondo os ícones. E isso é muito legal porque eu quero ver meu jogo, o que ele realmente parece sem nenhum ícone. E você pode clicar novamente para mostrá-los aqui. O próximo que temos é o modo imersivo, e isso tornará sua janela de visualização em tela cheia Clicar em 11, esse é o atalho para isso. Isso torna o jogo em tela cheia. E então eu posso clicar em para ocultar os ícones. E posso tentar ver qual é a aparência do meu nível sem me incomodar com todos esses ícones Clique novamente para mostrá-los clicando em 11 para minimizar o painel de exibição Novamente, vamos passar para essas ferramentas muito importantes. A primeira é chamada de ferramenta Selecionar. Ao clicar aqui, você pode selecionar itens diferentes no mundo. Eu não uso muito isso, eu realmente uso esses três. Eu nunca seleciono isso, na verdade. Se agora que estou pensando nisso, eu nunca seleciono isso. No entanto, você pode encontrar um uso para isso. Mas clicando no Q no teclado, você pode ver que eles têm atalhos se você segurar o mouse sobre eles. Ao clicar em Q, você seleciona a ferramenta e clicar em W no teclado selecionará a ferramenta de movimentação. Ao selecionar a ferramenta de movimentação, você pode ver se eu seleciono um dos ícones, por exemplo, recebo essas setas Então você pode ver que temos uma seta verde, temos uma seta azul e uma seta vermelha também. Com a ferramenta de movimentação, podemos mover itens. E você pode clicar em uma das setas. E você pode movê-lo aqui neste eixo. Nesse eixo também. E nesse eixo também. Aqui à direita, você pode ver no painel de detalhes que ele realmente mostra detalhes sobre o item selecionado. Se você selecionar um deles, poderá ver que os detalhes sobre esse item são alterados. Por exemplo, aqui, se eu selecionar esse você também poderá ver como ele é chamado no Outliner O Outliner basicamente mostra todos os itens que você tem dentro deste mundo, dentro desse nível aqui que temos Isso é o que está dentro dela. Todas essas coisas da paisagem que você pode ver aqui são apenas este mundo, você pode ver. Consiste em blocos. Ao selecioná-lo, você pode ver que ele também está selecionado aqui no Outliner Quando eu seleciono este na parte de visualização, ele também é selecionado aqui no Outliner Todas essas coisas que você pode ver aqui são na verdade, algo que está dentro do seu mundo. Quando eu seleciono isso, você pode ver que é chamado de clarabóia. É a luz do céu. E você pode ver detalhes sobre a clarabóia, por exemplo, o quão intensa ela é Por exemplo, você pode aumentá-lo. Digamos que eu queira escrever três. E você pode ver que meu nível é mais intenso na iluminação. E eu posso clicar aqui e clicar novamente ou na direita novamente, e então tudo volta ao normal. Você pode mudar as coisas aqui. O que eu queria mostrar aqui com a ferramenta de movimentação é que quando você a move, você pode ver que ela também está mudando a localização no painel de detalhes. Se eu movê-lo, você pode ver que está mudando os valores no valor z aqui quando eu o movo dessa maneira e também quando o movo dessa maneira. Mas para os pontos de articulação, você pode ver que o vermelho é na verdade o eixo X. Você pode ver isso segurando o mouse sobre ele. Diz X. O verde é o eixo Y e o azul é o eixo Z. Temos o eixo X, o eixo Y. E o eixo z. Você pode alterar a localização deles fazendo isso aqui. Ou você pode alterar a localização escrevendo um número. Por exemplo, no Z, eu posso escrever 200 clicando Inter e ele se moverá até o valor de 200 no Z. Mas você pode fazer isso, em vez de escrever um número, você também pode clicar, clicar no número, segurar o mouse e Então você pode ver que também pode alterar o local dessa forma. Se você quiser movê-lo em todas as direções ao mesmo tempo, clique nessa bola branca no meio. E você pode movê-lo em todas as direções ao mesmo tempo. Se você quiser movê-lo em duas direções diferentes ao mesmo tempo, clique na caixa no meio. E você pode movê-lo nas duas direções diferentes que você selecionou. Em seguida, se você clicar em E no teclado ou clicar aqui, simplesmente obterá a ferramenta de rotação, exatamente como está escrito. Você pode clicar aqui e girar o item. No momento, é um ícone, então não podemos realmente ver o que está acontecendo. Mas se eu clicar aqui, isso adicionará elementos. Clicando aqui, vou para Formas, e vou adicionar um cubo simples Adicionando um cubo simples, agora posso clicar no cubo, clicar em E no teclado ou selecionar a ferramenta de rotação e posso simplesmente girar esse item em torno Novamente, você pode ver os valores mudando aqui para a rotação, e você pode ver isso aqui. Você também pode girá-lo clicando aqui, clicando botão esquerdo e arrastando Isso também o girará. Então temos a ferramenta de escala aqui e, como diz, ela dimensiona o item. Você pode escalá-lo em todas essas três direções. Ou se você quiser escalar uniformemente em todas as direções ao mesmo tempo, você pode clicar nessa caixa branca no meio E ele será dimensionado em todas as direções, tudo ao mesmo tempo quando você o escala. Você também pode ver os valores aqui, o quanto os escalamos Se você quiser redefini-la, você pode realmente escrever 111 que redefinirá a escala. No entanto, você também pode clicar nessa pequena seta aqui. Isso redefinirá os valores para padrão. Ao clicar nessa pequena seta, ele voltará ao padrão. Aqui à direita, você tem diferentes ferramentas de encaixe Você pode ver que quando eu clico em W no meu teclado para selecionar a ferramenta de movimentação, eu posso mover este item. Mas você pode ver que não está se movendo suavemente. Está se encaixando em uma grade. Posso desativar isso clicando no ícone aqui em cima. E agora eu posso movê-lo, e você pode ver que agora está se movendo suavemente. Se eu clicar nele novamente, eu o habilitarei. Você também pode aumentar e diminuir a quantidade com que está tirando fotos Se eu clicar no número aqui em cima, e eu puder selecionar, por exemplo, 100, então ele se encaixará muito mais Se eu arrastá-lo agora, você verá que ele se encaixa muito mais. Isso é útil quando você está, por exemplo, fazendo design de níveis e deseja que os itens colocados como em um padrão lado a lado. O que você pode fazer, por exemplo, aqui, é segurar a tecla Alt no teclado. Você pode clicar e arrastar enquanto segura a tecla Alt. Isso copiará o item se eu fizer isso novamente. Eu clico e clico e arrasto novamente. Eu clico, clico e arrasto. Você pode ver que eu posso copiar os itens. E agora eles estão colocados à mesma distância entre si. É assim que a ferramenta de encaixe é útil. Vou apenas redefini-lo para dez, normalmente. Você pode fazer isso com a rotação e também com o dimensionamento Você pode ver se eu clicar para selecionar a ferramenta de rotação e eu clicar em uma delas, eu giro, Você pode ver que ela gira a cada dez graus. Novamente, está aqui em cima. Posso aumentar ou diminuir a quantidade de fotos com que ele está tirando fotos, ou posso simplesmente clicar no ícone e girá-lo agora, livremente, sem nenhum Eu vou ligá-lo novamente. E você pode fazer a mesma coisa com o dimensionamento. Agora, aqui, você pode aumentar e diminuir a velocidade da câmera. Você pode ver agora que estou me movendo dentro do meu mundo assim. Eu também posso me mover muito mais devagar. Imagine que se você tiver que focar pequenos detalhes aqui, é muito difícil mover a câmera para que ela pareça aqui. O que você pode fazer é clicar aqui, aumentar a velocidade da câmera. Agora você pode se mover muito mais devagar e se concentrar em pequenos detalhes dentro do seu nível No entanto, se você quiser se mudar para o outro lado do mundo, isso levará uma eternidade. Você pode clicar aqui, aumentar a velocidade da câmera e agora você pode ir para o outro lado do mundo rapidamente. Novamente, se você quiser ir para um elemento específico, sempre poderá clicar nele aqui. Por exemplo, se eu quiser me mover, digamos, para minha luz direcional, eu posso clicar nela E eu posso clicar no meu teclado. E será aqui também. Agora posso diminuir a velocidade da minha câmera novamente para uma por padrão. E eu posso me mover normalmente aqui, assim como antes. Tudo bem, então isso era tudo dentro do Viewpoard Novamente, o esboço mostra basicamente o que está dentro do seu nível, o que você pode ver visualmente aqui dentro do Mas, por enquanto, vou deletar esses cubos. Então, vou clicar aqui, clicar em excluir no meu teclado. E também selecione todos eles. E clique em Excluir no meu teclado. Agora, aqui na barra de ferramentas, podemos salvar o nível atual em que estamos. Também podemos clicar aqui e usar as diferentes ferramentas que temos. Por exemplo, se quisermos criar uma paisagem, podemos usar a ferramenta paisagem ou folhagem, por exemplo. Se você quiser pintar grama e árvores em seu nível, você também pode usar isso. No entanto, não vamos usar isso dentro do nosso jogo porque vamos criar um nível básico e também vamos nos concentrar muito nas plantas e em como podemos programar nosso jogo de tiro em primeira pessoa multijogador Então, se você quiser se concentrar na criação de paisagens e folhagens, confira Pixel Helmet.com meu site. Aqui você pode encontrar muitos cursos que também explicarão isso seguir, um botão muito, muito importante é que você pode adicionar coisas diferentes ao seu nível. Por exemplo, criamos o Shape, o cubo aqui. Você também pode criar iluminação. A iluminação que você pode ver aqui, também criaremos do zero. E você pode criar as diferentes luzes aqui dentro. Você também pode criar efeitos visuais e assim por diante. Assim, você pode colocar elementos diferentes em seu nível usando esse botão. Em seguida, temos o plano de nível. E falaremos muito sobre projetos mais tarde, então não vamos nos concentrar nisso por enquanto E então temos a cinemática, e vamos pular a cinemática por enquanto Então temos o botão play, e se você clicar nele, você joga o jogo. E então você pode ver que agora estou jogando meu jogo dentro do nível. Não está acontecendo muita coisa porque na verdade não temos muita coisa dentro daqui. Então, vou clicar em Escape no meu teclado para sair do modo de jogo clicando nesses três botões. Você também pode selecionar como deseja jogar seu jogo. No momento, estamos jogando dentro do Viewpoard. Clique também aqui e abra uma nova janela. E ele se abriu na minha segunda tela, você pode ver agora que estou jogando na minha segunda janela. Eu posso clicar em Escape para sair. Novamente, você pode selecionar como deseja jogar seu jogo. Vou apenas selecionar o painel de exibição selecionado. Aqui embaixo, temos configurações multijogador. Trabalharemos com isso mais tarde. Por fim, se você quiser empacotar seu jogo e lançá-lo no Steam ou lançá-lo para seus amigos, clique aqui, no Windows, por exemplo, e empacote o jogo para lançá-lo Agora, aqui em cima, temos os diferentes botões. Temos o botão Arquivo, onde você pode criar um novo nível, criar um novo projeto e assim por diante. Muito básico no software antigo que vimos. E então, na edição, o mais importante são as configurações do projeto, e vamos usá-las muito. Você pode ver que ele tem muitos botões e pode parecer um pouco confuso se você for novo no motor geral No entanto, vamos nos concentrar nas coisas mais importantes que precisamos aprender. E você pode aprender tudo isso mais tarde, mas por enquanto vamos nos concentrar nas coisas mais importantes. Vamos pular isso por enquanto E vamos abordar muito isso no curso. Então, no Windows, muito, muito legal, você pode abrir janelas diferentes dentro do nosso motor central. Por exemplo, essa janela de visualização que você pode ver aqui no meio, você pode ir para Viewports, e então você pode clicar em Viewports two, e isso abrirá uma Agora, isso é muito legal se você tiver duas telas. Normalmente faço isso quando tenho uma câmera e olho para o meu jogo assim, coloco na minha segunda tela e posso trabalhar aqui também enquanto tenho essa visão do meu jogo. Então, muito legal. Você pode abrir várias janelas aqui. E também vale para o painel de detalhes se você quiser abrir um segundo painel de detalhes. E você pode ver aqui que se eu selecionar algo no meu mundo, você pode ver que são os mesmos detalhes que são exibidos aqui. É muito, muito legal que você possa abrir várias janelas aqui. Em ferramentas, não temos muita coisa, então vamos pular isso por enquanto Em Build, o único botão importante aqui é que você pode construir o nível e criar a iluminação. E ele criará as sombras corretas e assim por diante, mas trabalharemos com isso mais tarde, quando fizermos a iluminação, e no final teremos a ajuda e você também poderá ver a documentação aqui OK. A última coisa que quero examinar antes de terminarmos aqui é a gaveta de conteúdo E clique na gaveta de conteúdo aqui embaixo. É aqui que todos os arquivos estarão para motores reais, para o jogo que você está criando. Por exemplo, se você tiver texturas, se tiver música, se tiver três modelos D, todos esses arquivos do seu jogo, eles estarão aqui na gaveta de conteúdo O que eu gosto de fazer, você pode ver que se eu clicar no painel de exibição, ele desaparecerá Se eu clicar aqui e clicar novamente, digamos que estou trabalhando no Viewpoard, ele desaparecerá Eu acho isso um pouco chato. O que eu geralmente faço é clicar aqui e clicar em Duck in Layout E vai ficar aqui. E agora é chamado de navegador de conteúdo. Está ficando aqui na minha tela o tempo todo. Quando eu trabalho no meu jogo aqui no mirante, ele nunca desaparece E também é muito melhor para você ver neste curso. Dentro do navegador de conteúdo, posso criar pastas. Se você clicar com o botão direito aqui, poderá criar uma nova pasta. Por exemplo, você pode dar um nome, por exemplo, olá ou algo parecido. Você também pode clicar com o botão direito na pasta e definir a cor. Você pode definir a cor da pasta. E isso é muito bom se você quiser se manter organizado aqui no navegador de conteúdo. Porque você pode imaginar que, se você tem um jogo grande, tem muitos arquivos aqui no navegador de conteúdo Se quiser criar algo novo, clique com o botão direito do mouse aqui. Você pode ver com o botão direito do mouse que você pode adicionar elementos diferentes ao seu jogo. O mais importante é que vamos trabalhar com plantas Então esse é muito grande. E também podemos criar um novo nível, um novo material. Se tivermos algo a ver com animações, também trabalharemos com isso Você pode criar isso, por exemplo. Você pode clicar em um deles e ver que tem opções diferentes. No momento, não temos realmente um esqueleto, um jogador. Então, vou fechá-lo e criar algo novo. Por exemplo, um material. E você pode ver aqui. Se você quiser tornar os ícones menores ou maiores, clique nas configurações, vá para o miniatura e selecione um tamanho menor Agora, o que você também pode fazer é manter o controle do teclado e usar a roda do mouse. Portanto, se você ampliar com a roda do mouse enquanto segura o controle, também poderá aumentar e diminuir os ícones. Agora vou clicar neste e clicar em Excluir no meu teclado. E vá em frente e exclua-o por enquanto. Se você clicar com o botão direito novamente, poderá ver todos esses elementos que você pode criar e adicionar ao seu jogo. Novamente, parece muito, muito confuso se você nunca o usou antes, usado em um motor real e se isso é novo para você Mas, novamente, não tente se concentrar em todas essas coisas. Vamos nos concentrar nas coisas mais importantes e criá-las durante este curso. E eu prometo que você aprenderá tudo isso lentamente. Portanto, não se concentre em tudo por enquanto. Agora, você também pode usar esse botão Adicionar, mas eu nunca uso isso. Na verdade, eu simplesmente entro na pasta em que quero adicionar algo e escrevo, clique aqui. Mas a mesma coisa, você também pode clicar aqui se quiser. Ok, então foi isso para a visão geral do Unreal Engine. Se você quiser uma visão geral mais aprofundada do Unreal Engine, visite meus outros cursos Também tenho um guia completo para iniciantes. Então, com isso dito, vamos seguir em frente e ir para a próxima lição. 5. Introdução ao jogo 2.01: Olá Ron. Esse sou eu do futuro. E este é o projeto finalizado deste curso. E eu vou mostrar a vocês o que vamos fazer dentro deste curso. Às vezes, é muito mais fácil ver o produto final antes de continuar. O que vamos fazer aqui é criar um jogo FPS do zero E, literalmente, do zero, começamos com um projeto em branco. E fazemos de tudo, desde criar o mapa, a iluminação, importar as armas e fazer o equipamento de armas e assim por diante E se eu clicar em Jogar aqui, você poderá ver o jogo. Portanto, temos um pouco de som ambiente em segundo plano. Alguns pássaros, você pode saquear armas aqui. Você também pode saquear isso. Você o tem nas costas, como você pode ver aqui na minha sombra. Mas você também pode ver isso aqui se eu simplesmente aparecer como outro jogador Você pode ver isso aqui na parte de trás deste player. E eu também posso trocar de arma. Eu posso atirar com a arma. Também existem efeitos sonoros diferentes para cada arma. Você também pode ver que temos alguns efeitos no solo. Temos balas calculando. Podemos recarregar a arma. Também podemos bater em outros jogadores. Sim, temos saúde e armadura e também temos pontos redondos Temos muita coisa acontecendo. Podemos soltar as armas. As armas têm peso. E também temos Ragdoll morrendo e respondendo. E você também recebe uma notificação quando ganha a rodada e perde a rodada e assim por diante. Muitas coisas estão acontecendo dentro deste jogo aqui, mas vamos passar por isso juntos. E confie em mim, será fácil se você seguir o curso aqui. Vou te ensinar tudo o que você precisa saber para criar um jogo FPS A vantagem dos planos é que esse curso Se você o seguir completamente e entender, esse curso ensinará você não apenas a criar jogos de FPS, mas também outros jogos mas também outros Porque quando você cria outros jogos, na verdade está usando as mesmas ferramentas. Plantas são apenas plantas. E você simplesmente tem essas ferramentas em uma caixa de ferramentas e cria coisas diferentes com elas. Nesse caso, vamos criar um jogo FPS. Espero que você se divirta comigo. Vamos continuar, e não perca tempo, e nos vemos na próxima. 6. 2.02 Criando um novo mapa: Para criar um novo mapa. Vamos primeiro criar uma nova pasta aqui. Vou clicar com o botão direito na pasta de conteúdo. Vou clicar em Nova Pasta, e vamos chamá-la de Mapas. Então, dentro daqui, vamos clicar com o botão direito do mouse aqui. E vamos clicar em Nível para este nível. Normalmente, para mapas, eu os chamo de mapa como prefixo, porque mais tarde podemos pesquisar elementos aqui e será mais fácil para nós mais tarde Então, eu geralmente dou prefixos aos meus arquivos. Eu chamo isso de um mapa e vamos chamá-lo de principal. Este é o nosso mapa principal. Agora podemos clicar duas vezes neste mapa. E agora ele nos pergunta se também queremos salvar esse nível aqui. E eu vou simplesmente remover isso. Eu só quero salvar meu novo mapa e clicar em Selecionado com segurança. E agora estou dentro do meu novo mapa. E você pode ver que está muito escuro aqui dentro, e no contorno não há nada E está escuro porque não há iluminação. Ainda não há ativos em nosso nível e precisamos adicioná-los em nossas próximas aulas. 7. 2.03 Importando ambiente Assets: Para os ativos ambientais, usaremos um pacote do Marketplace. Se você abrir o Epic Games Launcher e, dentro dele, clicar na guia Marketplace Quando estiver dentro do Marketplace O Marketplace tem muitos itens interessantes que você pode usar no seu jogo. Você também pode ver que eles são gratuitos durante o mês. Vale a pena dar uma olhada, mas, por enquanto, nos produtos, vamos pesquisar a grade. Se você simplesmente escrever Grid aqui e pressionar Enter, e depois aqui no preço máximo, você clica em Grátis. E então você vê esse chamado Super Grid Start up Pack. Isso é o que vamos usar. Então, se você clicar nele, ele dirá “baixe aqui”, se você ainda não o baixou. E ao baixar esse ativo, você pode criar um projeto. Você pode clicar nesse botão chamado Criar projeto. E então você precisa selecionar onde deseja salvá-lo e clicar em Criar. Você também pode selecionar versão para a qual deseja criá-lo. No momento, está definido para 5.1. Isso é. Ok, você não precisa de uma versão 5.1 para usar isso, mas ela apenas criará a versão mais recente do motor Honual Você não precisa baixá-lo para usá-lo, então está tudo bem. Eu já o criei. Então, se eu voltar para minha biblioteca, é aqui que, como se você a criasse, ela aparecerá aqui. Este é o pacote Stata super grandioso ou o Unreal Engine 5.1. Vou clicar duas vezes nele para abri-lo. Novamente, você não precisa do Unreal Engine 5.1 para Na verdade, você pode abri-lo com 5.2 ou qualquer versão que estiver usando E aqui está, ela se abre. Você tem que esperar. Se for a primeira vez que você o abre, ele deve preparar os shaders Pode levar muito tempo quando você o abre pela primeira vez, às vezes meia hora, às vezes uma hora. Mas quando estiver pronto, agora você pode usar o SS aqui. Para usar ativos de um projeto para outro, você precisa migrar arquivos A maneira de fazer isso é escrever, clicar nessa pasta Super Grid e, em seguida, clicar em Migrar e clicar em OK E então você tem que selecionar onde você deseja salvar esse arquivo? E eu quero salvá-lo dentro do meu outro projeto. Aqui eu fiz isso nesta pasta de atiradores multiplicadores e no E então você precisa selecionar a pasta de conteúdo do seu projeto Unreal Engine Lembre-se de que você precisa selecionar a pasta de conteúdo Você não pode salvá-la em outras pastas, selecionar a pasta de conteúdo e também não pode selecionar outra pasta dentro da pasta de conteúdo. Ao migrar coisas de um projeto para outro, você precisa selecionar a pasta de conteúdo e clicar em Selecionar pasta E então ele migrará todos os arquivos que estão aqui e agora está concluído Para que eu possa fechar essa superrede. E se eu abrir meu projeto, você pode ver que agora eu tenho essa pasta Supergrid e posso usar os ativos dentro daqui agora no meu jogo Agora, antes de terminarmos, vou abrir o lançador da Epic Games novamente, porque precisamos de outra coisa. Antes de continuarmos, vou abrir o mercado. E para a iluminação, precisamos de um céu aqui. Se eu pesquisar por Sky novamente, clico em grátis. Dentro daqui, vou usar esse chamado Good Sky. Se você clicar nele novamente, você pode clicar em Baixar se ainda não o baixou, e então você pode clicar em Adicionar ao projeto, e então você tem que encontrar seu projeto. Você pode ver aqui, se eu voltar, ele está disponível apenas para 5.1. Atualmente, estou usando o 5.2. O que você precisa fazer é clicar em Adicionar ao projeto e, em seguida, clicar em Mostrar todos os projetos E então eu posso clicar no meu projeto Counter Strike. E então eu tenho que selecionar a versão ou o Pac. Vou clicar aqui e selecionar a versão mais recente com a qual ela é compatível. Está tudo bem, não vai incomodar. Vai funcionar muito bem. Vou clicar em Adicionar ao projeto e ele o adicionará ao meu projeto aqui. Então, agora, se eu voltar ao meu projeto, você pode ver que o bom céu foi adicionado ao meu projeto e eu também posso usá-lo. Então, agora que importamos os ativos do ambiente, vamos prosseguir na próxima lição e projetar o ambiente. 8. 2.04 Projetando o ambiente: Para projetar o ambiente. Agora você pode ver que o nível está escuro e é impossível fazer qualquer coisa se eu for até a supergrade e começar um pacote e depois vou para Source e você pode ver que temos a pasta de malhas, por exemplo, se eu arrastar essa caixa para dentro daqui, você pode ver que está escuro e não podemos ver nada Se eu clicar no modo apagado aqui, alterando o modo iluminado para apagado, agora posso vê-lo porque realmente não temos iluminação e não podemos ver as coisas quando estamos no modo iluminado Então, na verdade, eu não gosto muito de projetar no modo apagado. Você pode fazer isso. Obviamente, você pode tentar projetar todo o nível em iluminação, porque depois disso, adicionaremos iluminação. No entanto, se você deseja projetá-lo no modo iluminado, basta clicar aqui. E vá para Luzes e adicione uma luz direcional apenas por enquanto E você sempre pode alterá-lo mais tarde. Lembre-se, se você aumentar o tamanho dessa caixa, por exemplo, e achar que a luz do sol está muito forte, você pode clicar nela e clicar em E para pegar a ferramenta de rotação. E você sempre pode girá-lo, tente ver se consegue um bom ângulo E você também pode diminuir a intensidade aqui e trabalhar a partir daí. Mas agora, isso é apenas temporário. Vamos apenas projetar o nível e depois fazer a iluminação. Mas eu só quero adicionar este para que eu também possa projetar meu nível no modo iluminado. Tudo bem, então agora eu vou deletar essa caixa novamente. E o que vamos fazer é projetar algo assim para o Counterstrike Então isso é chamado de mapa. Um mapa é basicamente, você tem dois lados desse mapa. Então, o contra-terrorista aparece de um lado e o terrorista surgirá do outro E há armas que eles podem pegar e atirar uns nos outros desse jeito. Apenas um mapa muito, muito simples e vamos criar algo assim naturalmente, um copiar-colar completo, mas algo que achamos que parece bom por enquanto. Vamos começar arrastando esse avião supercrítico para o nível O que eu gosto de fazer é colocá-lo no local de 000, ou seja, o centro do mundo. E eu geralmente gosto de começar daqui. Muito legal. Para esses ativos, você pode clicar em Arte para usar a ferramenta de escala e, em seguida, escalá-los nessas direções diferentes. E você pode ver que isso cria avião assim e cria um nível para você. Muito legal. Você pode escalá-lo nos dois eixos e, em seguida, criar o terreno para o jogo para facilitar, que você não precise escalar muito O que você pode fazer é clicar aqui para redimensioná-lo desta forma primeiro, para que a caixa seja exibida na íntegra Em seguida, você pode clicar aqui para ver a ferramenta de escalonamento aqui. E talvez selecionar a escala se encaixe em uma, configurando-a como uma Agora, se eu escalar nessa direção, você pode ver que ele escala uma caixa inteira, uma que eu escalo uma vez. Isso é muito legal. Em vez de fazer isso muitas vezes agora, o que você pode fazer é escalar uma vez e criar essa caixa para você. Você também pode ver como é útil usar o encaixe para o nível quando eu o escalo Você pode ver que também é dimensionado aqui no meu painel Detalhes. Você pode ver os números subirem. Você pode escalá-lo dessa maneira ou dessa maneira. Deixe-me, na verdade, escalá-lo dessa maneira. Aqui você pode imaginar que, se você descer até aqui, é aqui que o jogador está parado. Se você quiser ver o tamanho desse mapa, você também pode clicar aqui no botão Noções básicas e adicionar um jogador para iniciar este jogador . Eu vou derrubá-lo primeiro Algo parecido. Vai dizer tamanho ruim. Se estiver dentro do solo, vou movê-lo para cima. Algo parecido. O personagem tem quase o tamanho deste. Os jogadores começam quase. Isso é só uma referência. Agora você pode ver que esse nível é muito pequeno. Não é isso que vamos fazer. Precisamos que seja muito maior. Então, eu vou clicar neste avião. Vou escrever 80 para o x e 80 para o Y. Agora vou tentar construir esse mapa aqui Obviamente, para este curso, você sempre pode diminuí-lo. Não importa o que você projeta. Vá em frente e crie seu próprio nível novamente, não importa o que você projete neste estágio. Posteriormente, faremos a programação com qualquer mapa que você criar. Vá em frente e seja criativo crie suas próprias coisas e se divirta com elas. Quando criarmos o solo, o que você pode fazer é pegar essa caixa, por exemplo. Você pode colocá-lo aqui no chão. E então eu vou movê-lo para que ele se encaixe aqui até as bordas do chão novamente. Para tirar uma foto, colocando-a em uma, agora posso escalá-la, e esta é apenas minha parede Vamos escalá-lo até o outro lado, desse jeito , até que termine aqui. Então, o que você pode fazer é escalá-la para cima para fazer uma parede mais ou menos assim Na escala de 20 para a altura. Sempre podemos alterá-lo mais tarde. Se acharmos que isso é muito pequeno ou muito grande. O que eu posso fazer é realmente movê-lo um passo aqui, aqui nesta caixa, porque eu quero ter a outra parede aqui também. O que podemos fazer agora com essa parede é que eu realmente quero diminuir o tamanho aqui, agora está do lado de fora, diminuindo o tamanho em um. Exatamente desse jeito. Agora, o que posso fazer é segurar a tecla Alt no teclado e girar enquanto mantenho a tecla Alt pressionada E isso copiará o modelo segurando Alt enquanto você gira. Isso o copiará. E agora eu posso arrastar esse modelo até esse tamanho. Vou apenas aumentar um pouco a velocidade da minha câmera para poder ver o que está acontecendo. E eu vou para o modo apagado porque agora você pode ver, é realmente difícil ver E eu vou movê-lo desse jeito. Só estou juntando tudo. Apenas certifique-se de que eles estejam encaixados. Confira aqui para ver se está tudo bem. Tudo está bem. Novamente, vou clicar em E old e arrastar para copiá-lo. Não desse jeito. Vou clicar em Control Z, segure Alt. Clique e arraste para copiá-lo e, em seguida, arraste-o até aqui e, em seguida, fotografe-o Talvez também seja muito mais fácil aumentar esse encaixe. É melhor controlar. Você pode ver aqui, você não precisa movê-lo muito antes que ele se quebre. Isso tornará tudo muito mais fácil para você. Vou fazer a mesma coisa aqui, arrastando-a para este lado, certificando-me de que está se encaixando nessa parede Além disso, certifique-se de que fique bem aqui. Agora você pode ver que eu tenho uma parede. Se eu agora for para o modo Iluminado, posso clicar nessa luz direcional Eu posso girá-lo um pouco. Eu posso ver meu nível. E eu também posso diminuir a intensidade, então não é tão intensa. Agora temos esse nível com as paredes. Tudo bem? Então, eu quero que você projete esse nível como quiser. Você sempre pode colocar cubos aqui. Você pode tentar redimensioná-las, fazer algumas parecidas com paredes para o jogador, que o jogador fique aqui e atire nos outros jogadores Você pode tentar fazer cubos, algo assim. Você pode segurar a tecla Alt e arrastar enquanto segura a tecla Alt para copiá-la e talvez colocá-la desta forma. Você pode até mesmo copiá-lo novamente. E você pode colocá-lo ao lado deste, algo assim. E você também pode aumentar o tamanho, tornar algo assim interessante. Você também pode tentar criar modelos interessantes. Você pode ver aqui, você pode usar todos esses ativos. Você também pode usar rampas. Você pode tentar arrastar essa rampa e aumentar o tamanho da rampa e também o tamanho da inclinação Assim. E desta forma veja que você também pode fazer rampas neste nível Tente ser muito criativo e crie um nível aleatório que possamos usar para programar o jogo. Agora, com isso dito, se você não está realmente interessado em projetar o nível e quer apenas começar com os planos, eu também incluí o projeto para você que o nível foi projetado sem nenhum código Você também pode usar isso , se desejar. É uma prática muito boa também criar seus próprios níveis. Imagine que, mais tarde , quando você estiver criando seu próprio jogo, você também saiba como criar seu nível. Então, eu recomendo seguir em frente e se divertir com isso. Basta projetar o nível. Use talvez uma hora ou 30 minutos e depois volte aqui. Tudo bem, aqui estou eu de novo. Estou de volta e desenhei o nível. Passei algumas horas apenas criando algo interessante e fazendo com que parecesse legal quando estamos programando o projeto. Novamente, eu incluí isso para você, que você possa usá-lo sem nenhum código. Então, se você não quiser projetar, aqui está, você pode usá-lo. No entanto, novamente, sugiro que você vá em frente, divirta-se e crie algo aleatório que possamos usar. Você pode ver aqui que eu criei uma nova pasta chamada marketplace. E dentro daqui eu arrastei o céu bom e a super grade também Eles estão aqui e é um pouco mais organizado. Quanto ao nível, na verdade vou alterá-lo para o modo apagado para mostrá-lo a você, porque a iluminação está um pouco irritante no momento Dentro daqui, você pode ver o que eu fiz. Por exemplo, acabei de montar as caixas. Eu só estava tentando adicionar algumas formas interessantes a esse nível, o tamanho adequado. Novamente, o chão ainda tem 80 por 80, como fizemos antes, e as paredes ainda têm 20 por 79, exatamente como antes. Você pode ver aqui todas essas caixas, elas consistem em caixas diferentes. Você pode ver esta caixa aqui adicionada com esta caixa. Novamente, assim como antes. Acabei de usar a ferramenta de dimensionamento para aumentá-las e diminuí-las e apenas tentei criar formas interessantes para esta Este é o anel Super Grid. Se você clicar nele, por exemplo, se clicar aqui, poderá clicar nesse pequeno ícone. Na verdade, ele o levará ao modelo no navegador de conteúdo. Então, essa é a maneira mais fácil de fazer isso, e essa é a que eu usei dentro da pasta meshes Eu também fiz essa rampa. Então você pode ver aqui que eu projetei como uma rampa. Você pode subir aqui fazendo essa rampa e fazendo essa parede ao lado dela para fechar essa rampa Você pode ver como eu fiz isso para ter apenas um pouco de terra aqui. E esse chão também abaixo dessa rampa. São apenas duas rampas juntas e pouco de terra aqui entre elas. Apenas algumas paredes juntas. Você pode ver que passei algum tempo apenas para construir um nível interessante. São apenas caixas que você pode montar. Você também pode usar essas formas. Se você clicar nesse ícone, ele o levará até você e são esses cilindros que você pode colocar e depois escalar Então, o que você pode fazer é usar esses para colocar em cima. Você pode reduzi-los para que tenham uma boa aparência. Talvez apenas tire a foto aqui ou simplesmente a reduza para algo como 0,125 ou algo parecido E apenas diminua e tente copiar e colar tudo para criar aquela forma interessante aqui em cima. Ok, mas isso é o que eu fiz para projetar esse nível. Novamente, você pode baixá-lo se desejar. Eu o incluí para você. Com isso terminado, lembre-se de subir aqui também. O que você pode fazer no delineador é selecionar tudo o que você projetou E o que você pode fazer é selecionar todos eles. Então clique no primeiro, segure Shift e clique no último. E então você pode clicar no ícone dessa pasta para criar uma nova pasta. E clique em dois no teclado para dar um nome a essa pasta. E permanecerá organizado assim. Lembre-se de que é sempre bom se manter organizado aqui no navegador de conteúdo. Mantenha-se organizado também aqui no Outliner. Agora, com esse nível projetado, vamos voltar ao modo iluminado. E agora estamos prontos para fazer a iluminação. No entanto, você pode ver que é muito brilhante. E quando vou para a luz direcional e a altero para algo como 0,2, você pode ver a iluminação continua mudando e ficando brilhante Portanto, precisamos adicionar um volume de pós-processamento antes de continuarmos. Então, vamos para a próxima lição. 9. Volume de processo de pós-processamento 2.05: O volume de pós-processamento dentro do Unreal Engine é algo que podemos usar para mudar a imagem do jogo Assim como você pode pensar no Photoshop, onde você adiciona uma imagem ao Photoshop e altera as cores dessa É a mesma coisa aqui no Unreal Engine, usamos um volume de pós-processamento Esse volume pode alterar o calor do nível, podemos mudar a cor, a saturação, os reflexos da lente Bloom e assim por diante Então, o que podemos fazer é clicar aqui e você pode encontrá-lo em qualquer um dos efeitos visuais e ver que é chamado de volume pós-processamento. Ou você pode acessar os volumes e depois criar um volume de pós-processamento. Duas maneiras de criá-lo. Então vá em frente e clique nele. E se eu clicar em, no meu teclado para mostrar os ícones, você pode ver essa caixa aqui que criamos. Esse é o volume de pós-processamento. Agora, aqui dentro, se você clicar em um deles, por exemplo, o Bloom, e clicar na intensidade. E vamos aumentá-lo para algo insano, como cinco Você pode ver que nada realmente aconteceu, se eu dissesse isso para um, se eu dissesse para cinco, nada acontece. Isso ocorre porque você precisa entrar nesse volume de pós-processamento. Você pode ver que se eu mover minha câmera para dentro dela, a floração entra em vigor. Se eu sair desta caixa, você pode ver que a flor não tem efeito, então eu tenho que estar dentro dessa caixa para que ela tenha efeito. Para aplicar isso a todo o nível sem entrar e sair dessa caixa. Você pode ir até aqui e marcar a chamada extensão infinita. Você pode marcá-la e agora você pode ver que ela se aplica a todo o nível. O que a extensão infinita faz? Ele apenas o aplica a todo o nível para que você não precise entrar e sair da caixa. Agora, qual é a utilidade disso aqui, para esta caixa? É, por exemplo, se você tem uma masmorra, ou digamos que eu queira entrar neste prédio aqui e mudar de cor. Isso é o que você pode fazer. Você pode movê-lo, por exemplo, dentro deste prédio. Você pode movê-lo para cá. E você pode até mesmo ampliá-lo. Você pode ver que se eu movê-la até aqui, eu posso pegar a ferramenta de escala, clicar em R para pegar a ferramenta de escala, e então eu posso escalá-la em X, Y e Z. Só tentando preencher a área, eu realmente quero que ela tenha efeito Digamos, por exemplo, que eu queira que isso tenha efeito aqui. Quando eu entro, quando me mudo para esta masmorra, você pode ver a floração, a floração aumenta, agora ela entra em vigor Esse é o uso dele para não usar extensão infinita. Por exemplo, se você tem um jogo de RPG, você tem Dungeons e quer mudar cor sempre que estiver dentro dessa No entanto, nós realmente não temos algo assim. Eu quero que ele se aplique a todo o nível, então vou clicar em Extensão infinita. Vou até o topo e também vou pegar a balança. Vou pressionar esse botão para voltar ao padrão. Na verdade, isso não importa, mas eu só queria que fosse padronizado assim, como você pode ver aqui. Por exemplo, para a temperatura, você pode aumentar ou diminuir a temperatura e mudar a cor desse mundo. Até mesmo a tonalidade, você pode aumentar e diminuir a tonalidade. Você pode ver que o volume do pós-processamento é igual ao do Photoshop Você pode mudar a aparência deste jogo. Vou clicar nessas setas e colocá-las de volta ao padrão por enquanto Na verdade, não vamos jogar muito com ele por enquanto. O que eu quero fazer é que você pode ver aqui, se eu remover essa intensidade do Bloom, eu clico aqui. Você pode ver a luz do sol, se eu colocá-la em, digamos, cinco muito intensas, você pode ver que ela muda a luz. Essa é a exposição. Se eu colocar em 0,2, você pode ver que começa escurecendo e depois aumenta a iluminação. Não quero fazer isso porque estamos criando jogos e, em jogos, não fazemos coisas desse tipo. É sempre bom ficar em uma única iluminação quando você está iluminando. Vamos até o volume de pós-processamento e clique em Exposição aqui. Vamos clicar no EV mínimo e máximo e configurá-lo como um. E defina este como um também. Agora você pode ver se eu clico na luz direcional e ajusto a intensidade para algo como três E agora você pode ver que se eu chegar perto, se eu for embora, se eu olhar para coisas diferentes, você pode ver que não está realmente mudando a luz e está sendo estática. E é isso que queremos para jogos. Vamos ver o volume de pós-processamento do Bloom. Por enquanto, vou clicar na Intensidade e defini-la como zero. Para começar, é sempre bom chegar a zero. Quando você está iluminando, não afetamos a iluminação por outros fatores, então o Bloom a definiu como zero. Também aqui embaixo, o efeito de imagem, temos algo chamado vinheta E uma vinheta é que você pode ver se eu clicar nela e você a aumentar, ela cria uma mancha escura ao redor da tela Se eu apenas aumentar a intensidade da direção, acenda para que você possa ver o que quero dizer. Se eu definir para dez e agora clicar no volume de pós-processamento, você poderá aumentar e diminuir a vinheta. Assim mesmo. Este é apenas um robô cinematográfico em torno de sua imagem. E eu não quero fazer isso para começar. Não quero que isso afete minha iluminação. Vamos colocar isso em zero. Você pode ver se eu não marcar, é 0,4 por padrão, você pode ver que está realmente aplicado. Se eu desmarcá-lo, lembre-se de cadastrar e defini-lo como zero, isso o removerá Se eu for até aqui só para ter certeza de que há mais alguma coisa para o desfoque de movimento As pessoas geralmente não gostam desfoque de movimento em jogos de tiro em primeira pessoa. Vou clicar no valor e definir esse 120 também. E com isso feito, agora estamos realmente prontos para fazer a iluminação. Você pode ver que nada está afetando nossa iluminação. Quando fazemos a iluminação e vemos os resultados, nada está mudando a iluminação. E você pode ver que quando eu me movo para frente e para trás, a luz permanece a mesma. E é isso que queremos. Então, vamos continuar e clicar em Arquivo. E vamos clicar em Salvar tudo. E também aqui no volume de pós-processamento, o que você pode fazer é clicar nele e criar uma nova pasta. E vamos clicar aqui, clicar em dois e chamar isso de Post Process. Aqui está o volume do pós-processamento e agora estamos prontos para fazer a iluminação. 10. 2.06 Iluminando o ambiente: Agora estamos prontos para fazer a iluminação. Então, o que podemos fazer é excluir essa luz direcional Porque agora estamos prontos para começar do zero, ok? A maneira como eu faço a iluminação é subir aqui, ir até as luzes e primeiro adicionar uma luz direcional Então esta é a nossa luz solar. E eu geralmente adiciono todas as luzes antes de começar a ajustá-las. Então aqui está a luz do sol. E clicando aqui, vá para as luzes novamente. E vamos adicionar essa chamada clarabóia. A clarabóia é a luz que vem do céu, que, como você pode ver aqui , está muito escura agora O que podemos fazer é aqui na pasta Marketplace, clicar na Good Sky que adicionamos anteriormente e clicar na pasta Blueprint E neste Good Sky, você pode clicar e arrastá-lo para o nível. E quando você o coloca, você pode ver que está dentro daqui. Novamente, quero fazer isso durante o dia, mas por enquanto não vou realmente ajustar nada Então, o que podemos fazer é clicar aqui. Também temos outra luz, mas ela não está dentro das luzes. Está dentro dos efeitos visuais e é a atmosfera do céu. Você pode clicar nesse e depois clicar neste aqui em cima. Vá para Visual Effects novamente e clique neste chamado Sphere Reflection Capture. Ele vai capturar os reflexos dentro do seu nível Para este, na verdade, vou reduzi-lo para talvez 2000. E deixe-me arrastá-lo para o meio do nível. Naturalmente preciso, isso não importa. Vou aumentar esse raio de influência para encapsular meu nível Você pode ver agora que está encapsulando meu nível. E isso vai adicionar reflexos ao redor do meu nível. Agora, aqui em cima, você pode clicar novamente e acessar os efeitos visuais, na verdade, não os efeitos visuais nos volumes. E temos esse chamado volume de importância de massa leve. Clique nesse. O volume de importância do mapa é apenas dizer ao motor o que é importante para acender a luz. Precisamos encapsular nosso nível e dizer ao motor que essa área é muito importante para a iluminação Vamos fazer isso. Vamos colocá-lo em algum lugar aqui no meio. Novamente, isso realmente não importa. Vou clicar ou defini-lo aqui para as configurações do pincel. Você pode ver no X. Você pode clicar e arrastar para aumentá-lo Você está aumentando essa caixa para encapsular seu nível. Novamente, você realmente não precisa ser preciso , apenas no nível da cápsula E eu vou fazer isso para o Y também. Eu vou fazer isso para os Z Xs também. Vou me mudar para cá só para ver se está encapsulado. E nós realmente não precisamos que seja muito aqui embaixo. Vou aumentá-lo um pouco. Na verdade, diminua um pouco só para ter certeza de que o solo está aqui com ele. E também estou me certificando de que as paredes aqui em cima também estejam aqui com ela. Novamente, não precisa ser preciso, apenas certifique-se de que ele encapsula o nível. Agora temos a direção, a luz, o bom céu, o céu, a atmosfera, a clarabóia, a reflexão da esfera e a massa de luz dentro do nosso nível O que eu vou fazer é selecionar todos eles. Clique aqui para ver esta pasta, vamos chamá-la de iluminação. E agora estamos prontos para ajustar a iluminação do nosso jogo. Eu geralmente começo com um clique na luz direcional, que é a luz do sol E o que você pode fazer é clicar em E no teclado para selecionar a ferramenta de rotação. E então você pode tentar girar o sol. Assim, você pode criar algumas sombras interessantes. Isso é o que você está tentando fazer para começar, basta dar algumas sombras interessantes Você pode simplesmente girá-lo, ver onde as sombras são interessantes Você também pode remover o snapshot clicando aqui. E então você pode girá-lo livremente e tentar colocar algumas sombras interessantes para o seu jogo Para mim, vou tentar girá-lo para algo assim Talvez eu também esteja girando dessa maneira. Então, na verdade, projeta sombras dessa maneira. E eu sempre posso tentar ajustá-lo mais tarde. Então, agora você pode ver que as sombras estão muito escuras. E eu quero mudar um pouco para que seja mais fácil tentar encontrar algumas sombras interessantes apenas tornando-as um pouco mais brilhantes Clicando nesse bom céu, eu vou até aqui e, na hora do dia, vou mudar esse, para que não sejam estrelas. Vou escrever 12 na hora do dia. E agora você pode ver que é a luz do dia. E você pode clicar na clarabóia, descer, clicar em Recapturar para capturar o Você pode ver que algumas cores realmente mudaram aqui e estão ficando mais brilhantes Você também pode alterar a intensidade da clarabóia aqui para torná-la cinco ou algo parecido Muito louco agora. Mas só para encontrar algumas sombras interessantes com as quais você possa trabalhar agora, eu girei sob meu sol e estou feliz com minhas Novamente, vou até a clarabóia e, na verdade clicar nessa seta e colocá-la de volta em uma por enquanto Agora que temos o céu, vou começar com o céu bom. Agora clique no Good Sky. Para essas predefinições, o que vou fazer é que você possa ver, clicar nelas e alterá-las aqui para o estilo das nuvens Novamente, isso é opcional, mas vou clicar nela e selecionar essa Nuvem B. Esse é o estilo das nuvens Para a cobertura da nuvem, vou selecionar Meio. E essas são as configurações para um bom céu. Não há muita coisa a mudar aqui. Só para ter certeza, vou clicar na clarabóia novamente, descer, clicar em Recapturar, só para ter certeza de que ela tem a iluminação correta do céu. E eu vou clicar em Construir e construir todos os níveis. E isso garantirá que a iluminação esteja realmente correta. Então vá em frente e faça isso. Isso levará algum tempo se for a primeira vez que você estiver fazendo isso. E você pode ver o progresso aqui quando está construindo a iluminação. Mas, como você pode ver, provavelmente levará alguns segundos para mim. Agora, quando você terminar de construir a iluminação, ela mostrará o progresso. Está parecendo exatamente como antes. Tudo bem Você pode ver aqui se eu clicar na clarabóia agora e aumentar a intensidade da clarabóia para algo como três, você pode ver as sombras E é para isso que a clarabóia é usada. Isso torna as sombras mais brilhantes. Se você tem sombras muito escuras em seu jogo, você sempre pode aumentá-las para que suas sombras fiquem mais brilhantes E parece muito melhor do que antes. No entanto, na verdade, isso geralmente não é tão escuro. Se eu o tiver na escala de dois , não deveria estar tão escuro. Além disso, se você olhar aqui dentro, há algo mais acontecendo. Este é o lúmen, o novo sistema de iluminação. Se você clicar neste processo de postagem por enquanto, vou minimizar essa exposição. Se você simplesmente descer aqui e encontrar Lumen aqui, poderá ver a iluminação global Lumen, você pode clicar nele aqui e aqui no Lumin, iluminação global, você pode clicar nessa distância máxima para esta distância máxima para Se você escrever zero, verá que está muito mais claro do que antes Se você clicar nessa seta para voltar ao normal, verá que tudo está muito escuro. E se eu escrever zero novamente, fica muito mais claro Há algo acontecendo com isso também. Na verdade, vou reduzi-lo um pouco para este. Você pode ver se você escreve 100, fica assim. Se você escrever 200, 300, 400500600700900, ele começará a ficar Na verdade, vou escrever 700. Você pode tentar equilibrá-lo agora, parece muito plano, então eu não vou continuar com isso. 1 lúmen é muito bom e dá bons efeitos . Você verá isso mais tarde, quando a iluminação estiver boa, então eu não quero que pareça tão plana É muito bom ter lúmen em sua cena porque a iluminação ficará muito melhor Em vez de remover tudo, e vamos colocá-lo em 200, 300, tente aumentá-lo um pouco, mas ainda está plano no chão. Vou continuar aumentando em 100 até ver alguns detalhes. Agora eu posso realmente ver alguns detalhes aqui aqui. E se eu escrever 700 em vez de 600? E isso é o que parece. Se eu escrever 800, isso vai ficar muito escuro aqui. Eu vou escolher 700 com este, sempre podemos alterá-lo mais tarde. Está bem? Então você pode ver a diferença. Se eu clicar aqui, fica assim. Se eu escrever 700, parece muito mais leve do que antes. Agora você pode clicar na clarabóia e aumentá-la um pouco para que não fique tão escuro Para a clarabóia agora, são dois. Você pode escrever 34, talvez algo como quatro por enquanto, ok, talvez algo como quatro. E você já pode ver que está muito melhor do que antes. Antes era um por padrão e agora é quatro. E você pode ver a diferença aqui. Vou continuar ajustando a iluminação até ficar satisfeito. Nos jogos de tiro em primeira pessoa, é muito bom ter cantos escuros porque as pessoas querem se ver, querem atirar umas nas outras querem atirar umas E não é bom ter um canto escuro onde você não possa ver o inimigo. Algo assim, vai ser muito chato. Vamos escrever quatro na escala de intensidade aqui. O que vou fazer também é clicar na luz direcional e aumentar a intensidade da iluminação indireta E o que isso faz é que apenas acenda algumas luzes nas paredes e ficará muito melhor acenda algumas luzes nas paredes e ficará muito Se você aumentar, verá a diferença. Na verdade, veja a diferença aqui. Se eu escrever zero ou um como antes e se eu escrever seis, você pode ver essas paredes aqui estão refletindo luz umas sobre as outras E o ambiente parece muito melhor do que antes. Se estiver certo um, certo seis, você também pode ver a diferença nesta parede. Tudo bem, então o que eu quero fazer agora é equilibrar as sombras versus a iluminação Então, parece correto. Antes de eu fazer isso. Agora, se você clicar na clarabóia e depois clicar em Avançado aqui na iluminação aqui na clarabóia, você clica em Avançado, você pode ver algo chamado de cor do hemisfério inferior O que é isso, ele reflete a luz do solo para essas paredes e Aqui você pode ver que se eu clicar nele e colocar a luz ou a cor em algo extremo, você pode ver que na verdade está refletindo luz do chão para cima nessas paredes Agora, atualmente está preto e isso realmente não faz sentido porque não estamos realmente refletindo luz negra nas paredes Para torná-lo mais realista, precisamos mudar a cor para algo mais correto. No momento, meu chão está cinza. O que você pode fazer aqui é clicar no modo Iluminado aqui em cima, acessar a Visualização do Buffer e depois acessar a Cor Base Agora você pode ver a verdadeira cor base do seu solo. O que você pode fazer é clicar nele, pegar o seletor de cores e selecionar a cor do solo Vou selecionar esse cinza aqui. E eu vou voltar para o meu céu. Se eu minimizar isso, vá até a clarabóia. Agora você pode ver que mudamos cor do hemisfério inferior Agora, se eu voltar para o modo iluminado, desço e me lembro de clicar em recapturar Porque você tem que recapturar a iluminação. Agora está emitindo a iluminação correta aqui nessas paredes Tudo bem, deixe-me dar um zoom aqui. E eu quero agora equilibrar o equilíbrio entre a sombra e a luz. Agora, se você clicar na luz direcional e alterar a intensidade aqui, isso aumentará e diminuirá a quantidade de luz Se você for até a clarabóia e aumentar e diminuir a quantidade ou a intensidade aqui, isso aumentará e diminuirá o quão escuras são essas sombras Vou começar clicando na luz direcional e vou aumentar a intensidade e talvez algo como sete Agora, se eu for até a clarabóia novamente, você pode começar com um e depois escrever 23 Você pode tentar aumentá-lo um pouco só para ver como fica até ficar satisfeito, certo? Eu brinquei com a intensidade da clarabóia e da luz direcional Para a luz direcional, eu coloquei em seis, na verdade, vou colocá-la em sete para que não pareça noite Colocando isso em sete para a clarabóia, acabei de colocar em cinco novamente. Eu apenas aumentei um pouco aqui até ficar satisfeito quando aumentei para seis. Acho que estava um pouco claro demais, então reduzi cinco. E sempre podemos alterá-lo mais tarde. Não é um problema, mas agora, acho que está bom. Podemos ver a aparência das sombras em comparação com a iluminação E apenas comparando com o céu também. Veja se tudo parece realista. Dê uma olhada dentro desse túnel para ver se está tudo bem. Não quero que pareça muito escuro, como você pode ver aqui. Se você clicar no volume pós-processamento e descer novamente até o lúmen e, para obter a distância máxima do traçado, se voltar para 2000, poderá ver o quanto isso afeta a iluminação Isso realmente deixa tudo escuro e você precisa diminuir isso novamente. Você pode escrever 100 para ver como é, mas agora está realmente plano no chão. Se eu escrever 200, 300, 400, você pode ver que ainda parece muito plano no chão. E se continuarmos aumentando esse número, em algum momento ele vai parecer um pouco escuro demais. Então, eu vou, novamente, ajustá-lo de volta para 700. E eu gosto muito desse número, então vou ficar aqui. Mas é assim que eu costumo fazer a iluminação. Eu primeiro tento ir até a luz direcional. Tente encontrar sombras bonitas girando a luz do sol. E então eu vou ficar aqui na clarabóia novamente, assim como antes Clique no botão avançado da luz. Desça até o hemisfério inferior e mude a cor para o chão, então custa uma iluminação correta e também para um bom céu Alteramos algumas configurações aqui. Agora você pode ver que se eu olhar para esta parte e me afastar, você pode ver que, de repente, ela desaparece, o reflexo vermelho aqui Se eu me aproximar, você pode ver que, se eu me afastar, você pode ver que há uma pequena mudança na iluminação aqui. O que você pode fazer aqui é realmente brincar com a distância do lúmen Você pode voltar ao volume de pós-processamento e descer aqui. E temos algo chamado Lumen Scene Detail. Se você clicar no Lumen Scene Detail, se clicar no modo Iluminado e depois acessar a cena Lumen e Lumen Então, na cena do Lumen, você pode realmente ver onde o Lumen está afetando o Lumen Novamente, o novo sistema de iluminação do motor Ural faz com que tudo pareça muito bom. Vamos tomar isso como exemplo. Se isso ficar preto, você pode ver se eu me afasto dele. Isso significa que o lúmen não está funcionando nessa malha no momento Se eu chegar mais perto, vai funcionar. Isso deveria acontecer porque não queremos que o lúmen funcione o tempo todo , porque em algum momento você realmente não precisa dele porque está muito longe. E realmente não precisamos dar um desempenho pesado ao jogo. O que podemos fazer aqui para que funcione um pouco mais. Você pode ver se eu estou aqui, eu realmente queria trabalhar em alguns desses modelos também. Eu não quero que seja tão extremo para os detalhes de Slumencene Você pode aumentá-lo um pouco. Se você aumentar muito, funcionará em tudo mesmo que você esteja longe. Se você aumentá-lo, alguns detalhes serão eliminados. Este, por padrão, é, você pode ver aqui, que se você aumentar, o custo da GPU aumentará Não quero aumentar muito isso, mas você pode aumentá-lo um pouco. Vou clicar e arrastar apenas para aumentá-lo um pouco até que apareça algo como 1.2 Essa é uma boa mudança. Você pode ver que fica assim quando eu coloco em um, quando eu coloco em 1,2. Além disso, detalha o tear muito mais rápido do que antes. Você pode ver quando chegamos a um, neste momento ele estava desligado. Se eu colocar em 1,2, está ligado. Se eu voltar para o modo iluminado, está muito melhor agora. Tudo bem, então antes de terminarmos, vamos primeiro clicar em Construir e Construir todos os níveis. E certifique-se de que tudo esteja correto com a iluminação e as sombras Vai levar algum tempo para ser construída novamente e eu voltarei depois que ela tiver construído a iluminação. Tudo bem Então, agora ele terminou construir a iluminação e tudo está bem. Agora, às vezes, para algumas pessoas , a iluminação parece diferente. E isso porque pode ser porque você precisa acessar as configurações e a escalabilidade do mecanismo E agora você pode ver que estou vendo tudo nos gráficos da Epic. E isso é porque eu tenho um computador rápido. Mas se você tiver um computador lento, talvez queira usar igualdade média, por exemplo, ou baixa. Mas abaixo, você não consegue ver as sombras, mas também pode usá-las Se você tem um computador mais lento, no entanto, eu tenho um rápido Eu vou escolher o Epic One. Você sempre pode alterá-lo mais tarde quando estiver exportando o jogo Mas o Epic geralmente é muito pesado, então talvez você queira usar o High para seu computador se ele for um pouco mais lento Mas, como você pode ver, a escalabilidade desse mecanismo também afeta a iluminação, então você também pode verificar isso Ok, agora para a última etapa, vou clicar neste volume de pós-processamento. Agora, o que podemos fazer é mudar um pouco as cores. Então, podemos clicar nessa temperatura e você pode marcá-la aqui. Essa temperatura é mais leve e também essa tonalidade. Então, vou reduzir um pouco a temperatura, para que fique um pouco mais azulada Algo como talvez 6.200 , uma diferença muito pequena. Você pode ver se eu marcar e desmarcar, é assim que parece Só uma pequena diferença. Faz com que tudo pareça um pouco mais frio, mais azul do que na tonalidade; se você aumentar, verá que fica um pouco mais alaranjado, com um pouco alaranjado, Agora, eu não quero que seja tão extremo. Portanto, se você subir 0,1, poderá ver a aparência e poderá marcá-la e desmarcá-la. A mudança. No entanto, acho que isso pode ser um pouco demais até agora. I 0,05 em vez de bilhete e bilhete NFI. Isso é o que parece. Está bem? Então, apenas uma pequena mudança nas cores. Tudo bem, então a última coisa que eu quero fazer aqui, você pode ver nas configurações globais, você também pode mudar as coisas. Por exemplo, a saturação. Se seu jogo estiver muito dessaturado, você pode aumentar a saturação e tudo ficará muito mais saturado Agora você não precisa aumentar muito a configuração. Por exemplo, você pode colocá-lo em 1.1 e há uma leve saturação no seu jogo Você pode ver que dá um pouco mais de cor. No entanto, vou ficar com um por enquanto. Você também pode aumentar o ganho se o jogo estiver muito escuro, para poder aumentar o ganho. Todo o jogo será muito mais brilhante do que antes. Agora, para mim, vou ficar em um para este também. Eu não preciso mudar nada aqui. O que eu quero mudar é que acho que as superfícies são um pouco brilhantes demais e esse é, na verdade, o destaque. Se você acessar os Destaques aqui e clicar, por exemplo, no ganho. E você pode ver aqui, se você aumentar e diminuir o ganho, você aumenta e diminui as cores aqui em cima. Se você simplesmente colocar em zero, poderá realmente ver o que isso afeta. Esse é o destaque. Isso afeta o destaque na parte superior desses modelos 5.21 Acho que é um pouco brilhante e irritante de se ver O que você pode fazer é diminuí-lo um pouco, para que não fique tão claro. E é chato ver talvez algo como 0,60 0,56 E você pode ver que se você escreve uma, é assim que ela E se eu escrever 0,6, isso é o que parece. Agora eu acho que isso parece um pouco melhor do que antes, porque antes estava um pouco claro demais no gelo, e escrever 0.6 ajuda a resolver esse problema. Isso é o que temos atualmente dentro de um nível. Agora, para este, podemos adicionar um pouco de flor. E, na verdade, vou adicionar um pouco de flor aqui para o meu nível. Agora isso é preferência. Você também não pode adicionar flores ao seu nível. Algumas pessoas não gostam de florescer em praias de primeira pessoa Mas, para mim, vou aumentá-lo um pouco que você possa aumentá-lo e ver como fica. Se você escrever um, é assim que parece. Isso lhe dá aquele efeito sonhador. Se você escrever 01, acho que um é muito extremo. Se eu colocar em 0,6 , você pode tentar escrever 0,6 para ver a diferença Acho que algo como 0,6 é o caminho a percorrer. Não mais do que isso, senão será um pouco mais chato. Agora podemos ver como é aqui. A iluminação parece muito boa. Você pode ver quanto custa além das ondas aqui, e também pode ver fora daqui Tente olhar para dentro daqui, certifique-se de que não há nada escuro. Você pode ver o inimigo se eu entrar aqui. Agora, se você acha que esse túnel está um pouco escuro demais, você sempre pode entrar aqui e clicar aqui. Vá até as luzes, clique na luz pontual e crie uma luz pontual aqui. E você sempre pode colocá-lo em algum lugar aqui dentro desse túnel. Para essa luz pontual, você pode aumentar e diminuir a intensidade e ver como ela se parece. Agora está um pouco claro demais aqui nesta área específica. E eu quero suavizar isso porque, como você pode ver aqui, nós realmente não temos uma lâmpada. Então, vai parecer um pouco estranho que essa iluminação seja tão brilhante aqui Então, o que você pode fazer é, na verdade, diminuir a intensidade. Vou clicar em Avançado e aqui usar Inverse Squared Fall off Na verdade, vou desativá-lo aqui. Agora você pode ver que, ao aumentar e diminuir a iluminação, agora você pode aumentar a intensidade para ser muito maior do que antes. Você também pode diminuir essa intensidade de queda. E você pode ver que ela ilumina um pouco mais o ambiente em vez de se concentrar apenas nessa área específica. Agora, se eu continuar e clicar novamente na luz pontual. E vou deixar que esteja aqui às duas para o expoente de queda de luz Então vou diminuir a intensidade para algo como você pode ver, está muito, muito claro agora porque desativamos, diminuímos o expoente de queda de luz e também desativamos este para a intensidade Se você apenas escrever um, por exemplo, poderá ver a diferença se ligá-lo e desligá-lo Apenas um pequeno efeito para garantir que não tenhamos manchas escuras dentro do nosso nível. Agora você pode brincar com o raio de acentuação. Se você clicar em, poderá ver onde isso afeta. Então, se você aumentar e diminuir o raio de acentuação, isso é o que parece Vou colocar isso em algo como 2000, talvez, algo assim. Se você clicar em, poderá movê-lo desse jeito. Tente colocá-lo em algum lugar muito bom, onde você realmente não veja que há uma lâmpada dentro daqui. E tente também jogar com a intensidade. Acho que está muito claro, então se eu colocar em 0,5, não fica muito perceptível. E você pode clicar nesse olho para ocultá-lo e mostrá-lo. E você pode ver o que parece, apenas um pequeno efeito. Mas você pode ver aqui, se o inimigo está parado aqui e olhando para você, você pode ver que há um pouco mais de luz. E é sempre mais fácil ver o inimigo. E isso é mais bonito de se ver. Agora, tente contornar a luz agora que você terminou de colocá-la. E tente colocá-lo em uma área onde faça sentido para você. Eu acho que a luz do verão aqui é boa. Eu vou fazer a mesma coisa aqui. Vou segurar a tecla Alt, clicar e arrastar para copiá-la. Eu vou colocá-lo aqui dentro desse túnel também. Tente colocá-lo em algum lugar no meio aqui. E então eu vou movê-lo nessa direção. Vou dar uma olhada e ver como isso está afetando algum lugar como aqui. É a mesma coisa que você fez aqui com essa iluminação também. Essa iluminação também está no meio. Apenas certifique-se de que está no meio e está colocado aqui. Para a outra, vou pressioná-la levemente para que também se pareça com a outra luz. Agora que colocamos a luz personalizada apenas para que pareça um pouco mais brilhante aqui dentro, acho que terminamos com a iluminação e essa é a aparência do nível agora 11. 2.07 dicas de otimização de ambiente: Antes de concluirmos esse ambiente, também precisamos dar uma olhada na otimização e garantir que ele funcione bem como garantir que ele funcione um jogo quando o lançarmos Para dar uma olhada na otimização, vamos clicar no modo de tampa aqui em cima. Vamos aos modos de visualização de otimização e vamos começar com este chamado Light Complexity. Para a complexidade da luz, estamos basicamente, como o nome diz, dando uma olhada na complexidade da iluminação. Como você pode ver aqui, temos um gradiente aqui, começando do escuro e do azul, e depois vai até vermelho, roxo e branco. Agora, se você está aqui no azul, esse é um desempenho muito bom. Se você está aqui em roxo e branco, isso é um desempenho pesado e isso é ruim para o seu jogo. Mas, como você pode ver, nosso nível é totalmente azul. E você pode ver que está por aqui. E é muito bem otimizado em termos de iluminação. Isso ocorre porque, na verdade, não estamos usando tantas luzes. Só temos a luz direcional e depois temos a luz do céu Eles estão iluminando isso principalmente como você pode ver, se eu voltar, se eu desligar a luz direcional e se eu desligar a clarabóia, você pode ver que tudo fica escuro Basicamente, são esses dois que iluminam o ambiente. Agora, se eu voltar para a área de complexidade da luz , fica verde. Isso ocorre porque adicionamos as lâmpadas. Lembre-se de que clicamos aqui nas luzes e adicionamos uma luz pontual. É por isso que é verde. Este é mais pesado no desempenho em comparação com esta área. No entanto, esse ainda é um desempenho baixo. Isso é muito bom. Isso é bom para o seu jogo. Você ainda está na boa área. Se eu pegar uma das lâmpadas e esta aqui, se eu pegar esse ícone, essa luz pontual, se eu segurar a tecla Alt e arrastar para copiá-la, você pode ver se eu copio e a coloco fora dessas outras luzes pontuais, está pronto. No entanto, se eu começar a sobrepor as luzes, como você pode ver aqui, ela fica vermelha agora E na área laranja. Agora, digamos que esse era o seu nível, tudo bem. Isso não afetará seu jogo. Isso ainda é muito bom. No entanto, se todo o seu jogo for vermelho, como esse, você poderá experimentar em seu jogo. No entanto, se for apenas uma área mínima em seu nível que esteja vermelha, tudo bem. Isso é bom. Agora, se eu copiar e colar novamente, você pode ver que fica aqui, roxo e branco. E se você tem isso em seu jogo, isso é muito ruim. Ao otimizar seu jogo, tente reduzir a quantidade de iluminação que você está usando. Assim, você pode usá-los longe um do outro. Assim, você pode sobrepor alguns deles. Está tudo bem. No entanto, não tente sobrepor muitas luzes ao mesmo tempo. Isso fará com que seu jogo fique lento. Vou excluir todas as outras luzes pontuais que criei aqui. Essa e essa também. No momento, nosso nível está muito bem otimizado. Então, vamos ver a densidade do mapa de luz. No momento, ele está embutido em motor real. Talvez eles consertem isso. Essas caixas pretas cintilantes não deveriam estar aqui. Talvez eles consertem isso no futuro. Mas, por enquanto, ignore essas linhas pretas cintilantes na densidade do mapa de luz O que mostra aqui agora é azul novamente. Azul é resolução. E é bom para o desempenho do seu jogo. Se algo estiver muito vermelho assim, é ruim para seu desempenho. Vamos do azul para o vermelho. Há um gradiente. Então, vai do azul para o ligeiramente verde para o verde, depois vai para o laranja e depois para o vermelho. No momento, qual é a densidade do mapa de luz? Qual é a densidade do mapa de luz? Você pode aumentar a resolução do mapa de luz para cada modelo. E isso aumentará a aparência detalhada de sua sombra no chão. Se sua sombra tiver uma resolução muito baixa no solo, isso ocorre porque a resolução do mapa de luz do solo é baixa. Isso pode ser um motivo para isso. O que queremos fazer é acessar a densidade do mapa de luz e aumentá-la. O azul é uma resolução muito baixa para um mapa de luz. Temos que aumentar a resolução para as sombras tenham uma boa aparência quando atingirem as malhas, por exemplo. Isso é muito bom. Queremos buscar essa cor verde. O que eu quero fazer é clicar nesse chão. Você pode encontrar esse terreno aqui no navegador de conteúdo. No entanto, se você não conseguir encontrá-lo, o que você pode fazer é clicar no chão. E você pode clicar neste ícone aqui, e ele o levará até a malha terrestre. Agora vamos clicar duas vezes e abri-lo aqui no painel de detalhes. Vamos procurar um mapa de luz. Agora você pode ver a resolução do mapa de luz e a resolução mínima do mapa de luz. Agora eu tenho que clicar em outra coisa. Não vejo essa cor rosa, apenas clicando em outra coisa. Eu posso ver a cor azul aqui no chão. Agora, se você apenas aumentar a resolução do mapa de luz para algo como normalmente multiplicamos por dois, você pode dizer 128 Agora você pode ver que é menos azul. Agora, se eu fizer isso de novo, multipliquei por dois Agora, em vez de apenas escrever o número, o que você pode fazer, mecanismo muito bom e irreal, você pode dizer multiplicar por dois e pressionar Enter E vai fazer isso automaticamente. Agora você pode ver que a resolução é maior do que antes. Antes de ter 64 anos. Baixa resolução. Agora, quando multiplicamos por dois, multiplicamos por dois, eu ainda quero multiplicar por dois, porque essa ainda é uma resolução baixa multiplicada Agora isso está muito melhor. Às vezes eu parava aqui porque isso também é bom. Mas o que eu quero fazer é multiplicar por dois só para ver como fica também Essa é a cor que eu costumo escolher nos meus jogos. Isso ainda está na área de baixa resolução, mas isso fará com que suas sombras tenham uma boa aparência enquanto você mantém o jogo otimizado Não gosto de deixar meus modelos muito verdes assim. Eu gosto de ficar na área verde azulada. Ainda fica bem com as sombras. Resolução 1024, resolução de mapa de luz para o solo. E lembre-se de copiar esse número e colá-lo. A resolução mínima do mapa de luz também. E então você pode ir em frente e fechá-lo. E ele pergunta se você deseja aplicá-lo. Está bem? Em seguida, clique em sim. Você tem que fazer isso para todos os outros modelos. Por exemplo, vamos dar outro exemplo. Vamos clicar nesse aqui. Esse anel aqui. É esse anel aqui. Clique duas vezes nele, abra. Resolução do Light Map, aqui está. Agora vamos clicar em outra coisa para que possamos realmente ver a cor. Vamos escrever vezes duas vezes. Ainda está em baixa resolução. Vamos multiplicar por dois novamente. Vamos multiplicar por dois novamente. Isso é realmente muito bom. Acho que será muito alto se eu multiplicar por dois. Você pode ver agora que é verde e laranja. Essa. Ainda é bom em termos de desempenho. No entanto, ainda acho que esse é um desempenho muito alto. Lembre-se de que quanto mais você aumentar a resolução do mapa de luz, mais ele atingirá os quadros por segundo. E o desempenho, eu vou dizer, divida por dois e fique aqui no máximo. Vou copiar esse número aqui também. E eu vou fechar isso e aplicá-lo agora. Vá em frente e faça isso com todos os modelos que você está usando no jogo. Vou pular em frente e tentar fazer isso com todos os modelos que tenho aqui Eu terminei de ajustar todos eles e, como você pode ver, é assim que parece Agora você pode ver que alguns deles ainda têm resolução muito baixa. Por exemplo, essa parede aqui. No entanto, essa parede também é essa caixa que parece muito verde. Você pode ver que se eu abrir a caixa supercrid e procurar a resolução do mapa de luz, posso aumentá-la Por exemplo, multiplique por dois novamente e multiplique por dois novamente, e essa parede será de alta resolução No entanto, você pode ver que essas caixas todas vermelhas e vermelhas agora. E isso realmente não é bom. Isso ocorre porque quanto mais você aumentar a escala de um item, menor será a resolução. Por exemplo, vamos realmente voltar para 128 antes. Se eu colocá-lo aqui no nível, você pode ver que agora está verde. No entanto, se eu pegar a ferramenta de escala e aumentá-la, ela terá uma resolução mais baixa. Se eu aumentar a escala, você pode ver que agora está uma resolução mais baixa do que antes. Quanto mais você ampliar o item, menor será a resolução. No entanto, tudo está bem até agora. E se eu voltar para o modo iluminado e o que você pode fazer é salvar o nível e depois clicar em Construir e Construir todos os níveis. E isso é apenas para garantir que toda a iluminação esteja construída, todas as sombras estejam cozidas e que tudo esteja correto Vai levar algum tempo aqui. Vai levar um pouco mais de tempo do que antes porque você aumentou a densidade do mapa de luz. No entanto, você pode ver que o nível ainda está muito otimizado. Então, na verdade, isso não demorou e já está concluído. A iluminação agora está em alta resolução aqui no solo do que antes. Parece mais de alta qualidade do que antes. Isso ocorre porque aumentamos a densidade do mapa de luz. Agora vamos voltar aqui nos modos de visualização de otimização. Então temos a sobreposição de luz estacionária. Como você pode ver, não usamos muito. Aqui estamos na área verde. Você pode ver que está muito otimizado. Se examinarmos a complexidade do sombreador, novamente, parece muito bom Não há nada com que me preocupar se eu for até sorteio quádruplo. Em vez de juntá-los, vou para o sorteio quádruplo. E esses são os três modelos D que você está usando. Vamos dar uma olhada em quantos triângulos você está usando por modelo, e não temos muitos Você pode ver que está muito, muito otimizado. Todo o seu nível está atualmente otimizado. E se você passar para o modo Lit agora, agora terminamos o nível, tudo está otimizado. E se eu for até os quadros por segundo, se eu clicar aqui, mostre os quadros por segundo. E você deve saber que 120 FPS é o máximo aqui no Unreal Na janela de exibição aqui, você precisa exportar seu jogo como um arquivo EXC Por exemplo, se você quiser liberá-lo a vapor e ele terá um FPS mais alto, mas dentro do próprio motor, ele estará mas dentro do próprio motor, bloqueado em no máximo 120, certo? Então, tudo está muito bem otimizado. Todo o nível está sendo executado no máximo de FPS. E também otimizamos o nível. Então, agora estamos prontos para continuar. 12. 3.01 Importando os personagens: Tudo bem, agora é hora de importar os personagens. Agora, durante o curso, vamos importar mais coisas. Por exemplo, as armas e as animações. Mas vamos dar um passo de cada vez. Vamos começar com os personagens. Vamos abrir o Epic Games Launcher. Dentro daqui, quero que você clique na guia Marketplace. Agora, dentro do Marketplace, você pode encontrar ativos que podem ser usados no jogo. Você pode ver que eles estão criando coisas muito boas que você pode usar. Claro, muito disso é por dinheiro. No entanto, o que vamos fazer é clicar em Procurar e ir para Personagens. Em seguida, clicaremos no botão grátis aqui para ver o preço máximo de uso gratuito. Agora, dentro daqui, vou usar esse chamado Military Doc and Military Silva. No entanto, você também pode usar outros personagens. Você pode usar este se quiser, você pode usar este se quiser. Isso realmente não importa. Você pode usar esse. Depende de você. No entanto, vou usar esses dois, então vou clicar no primeiro. Em seguida, vá em frente e clique em Baixar. Se você ainda não o baixou, ele dirá baixe aqui. Vá em frente e clique em Baixar. Em seguida, você pode clicar em Adicionar ao projeto. Agora você pode ver aqui, isso está vazio, e isso porque só é compatível com o Unreal Engine 4.8 a 4.27. Essa é uma versão muito antiga Nem é o Unreal Engine Five. No entanto, ainda podemos usá-lo em nosso jogo. Vá em frente e clique em Adicionar ao projeto e clique em Mostrar todos os projetos. E então você pode selecionar nosso projeto. E agora está dizendo que não é compatível com Unreal Engine 5.2. Então você precisa selecionar outra Clique aqui e selecione a versão mais recente do Unreal Engine Agora vá em frente e selecione-o. E vá em frente e clique em Adicionar ao projeto. Agora vai entrar no projeto, se você ver aqui, se eu voltar para o meu jogo aqui, se eu clicar nele, agora você pode ver que agora está dentro do projeto e eu posso usar esse cara no meu jogo. Tudo bem, se não for compatível, ainda podemos usá-lo no jogo. Vamos voltar e vamos para o outro, esse prateado. Novamente, vá em frente e clique em Baixar. E depois de baixá-lo, clique em Adicionar ao projeto, Mostrar todos os projetos. Selecione nosso projeto e selecione a versão mais recente com a qual ele é compatível. Vá em frente e clique em Adicionar ao projeto, e ele também adicionará este ao projeto. Agora temos os dois personagens. Temos esse médico militar. Temos essa prata militar que podemos usar no jogo. Tudo bem, então é assim que você importa coisas do mercado. Basta baixá-los e adicioná-los ao seu projeto. E se eles não forem compatíveis, lembre-se de mostrar todos os projetos, selecionar o projeto e também selecionar a versão com a qual ele é compatível. Então, agora que importamos os personagens, vamos para a próxima lição. 13. 3.02 Blueprint para pais e filhos: Agora estamos prontos para trabalhar com plantas. Vamos criar uma pasta aqui, clique com o botão direito do mouse. Vá para a nova pasta e chame essa de blueprints dentro dessa pasta de blueprints Vamos clicar com o botão direito do mouse e selecionar a classe Blueprint. Agora vamos criar um personagem. Então, vou selecionar essa classe Aca. No entanto, se você não estiver familiarizado com as classes de blueprint, a primeira é um ator E o ator é simplesmente um ator que pode ser colocado no mundo. Por exemplo, uma mesa, uma cadeira, uma garrafa, apenas um ator estático que está lá. O peão é algo que você pode controlar. Por exemplo, se você tem uma bola rolando, esse é o seu jogador. Assim, você pode controlar essa bola em seu nível porque um peão pode ser possuído Possuído significa que o jogador pode controlar essa classe de planta com o teclado e o mouse Agora vamos criar um personagem porque ele tem a habilidade de andar por aí. Você pode se imaginar como um ser humano com dois braços duas pernas andando por aí. Então você tem que selecionar o personagem. Se seu personagem é simplesmente uma bola rolando, basta usar uma pata No entanto, temos personagens, então vá em frente e clique no personagem. E eu vou chamar isso de BP Player Base. Agora, por que eu não o chamei de BP player? Por que eu chamei isso de base de jogadores da BP? É disso que trata esta lição. É sobre aulas de plantas para pais e filhos. Agora eu vou criá-lo aqui primeiro. Antes de explicar, vamos clicar com o botão direito do mouse nessa base de jogadores da BP e criar uma classe infantil de blueprint Vamos chamar isso de terrorista da BP. Vamos clicar com o botão direito do mouse novamente e chamá-lo de BP sob terrorismo Ok. Isso é o que são aulas de planos para pais e filhos Agora mesmo. Nós criamos uma classe de blueprint A partir disso, escrevemos, clicamos e fizemos uma aula de planta infantil O que isso faz é que, se eu alterar as configurações dentro dessa classe de plano principal, essas mudanças serão transferidas para a classe de plano antiterrorista e para a classe de plano terrorista Digamos que eu tenha entrado na base de jogadores daqui. Fui até o componente de movimento do personagem e depois mudei a velocidade máxima de caminhada. Digamos que eu queria que meu personagem andasse mais devagar. Então eu fui até aqui e escrevi 250. Eu reduzi a velocidade. Eu cliquei em Compilar para salvar minhas configurações aqui, e depois fui para, você pode ver agora que eles têm essa estrela E a estrela significa que eles precisam ser salvos. Se você clicar em Contraterrorista, poderá ver se eu clico no componente de movimento do personagem, agora ele também está em 250 Fez isso automaticamente. E se eu também for até o terrorista , componente de movimento do personagem, a peça máxima de Wx também é 250 Você pode ver que, se você mudar coisa na classe principal do blueprint, todos os seus filhos também mudarão essa configuração Isso economizará muito tempo. Digamos, por exemplo, Quinzena. Se você estiver jogando Fortnight, digamos que você seja um desenvolvedor de Você tem essa base de jogadores e depois tem todas as skins Em quinzena, você tem todas as skins. Todas as skins de jogadores que você está controlando. Quando você altera uma configuração na base de jogadores, ela muda a configuração de todas as skins Digamos novamente, por exemplo, a velocidade com que eles estão andando. Em vez de alterar a velocidade de caminhada de cada personagem em quinze dias, é muito fácil simplesmente entrar na classe principal, alterar a velocidade e ela entrará em vigor em todos os filhos do plano alterar a velocidade e ela entrará em vigor em todos os filhos do Ok, é por isso que criamos classes de plantas para pais e classes de plantas para crianças , por exemplo, o movimento, vamos fazer o movimento com o teclado dentro da base de jogadores, porque não precisamos codificar o mesmo movimento no contraterrorista e o mesmo movimento no terrorista o mesmo movimento no Quando eles têm exatamente o mesmo movimento, eles se movem da mesma maneira. Ou se você é um contraterrorista ou se o terrorismo não importa, o movimento é o mesmo E é por isso que é melhor fazer isso na base de jogadores, então você só precisa fazer isso uma vez. Ok, vou mudar o máximo, voltar para 600 e a base de jogadores compilada, como você pode ver no contra-terrorista e terrorista, eles voltam para 600. É assim que vamos trabalhar. Vamos fazer coisas principalmente dentro da cláusula do plano parental e, quando eles têm coisas específicas que não são semelhantes , vamos fazê-las dentro das crianças Mas, por enquanto, essa é a explicação básica. Vamos salvar tudo e quando tudo estiver salvo, vamos passar para a próxima lição e configurar o personagem. 14. 3.03 Configurando o personagem: Para definir o personagem. Vamos começar primeiro com o terrist aqui no terris Vamos clicar em Abrir editor de blueprint completo. Esse visualizador é mostrado a você sempre que o blueprint está vazio e você o abre pela segunda vez Em seguida, clique aqui no editor Abrir plano completo e você voltará aqui na visualização normal aqui na janela Se você clicar aqui nos Componentes, clique na malha. E, à direita, você pode ver que é possível adicionar um ativo de malha esquelética Agora você pode clicar aqui e selecionar o personagem. O que você pode fazer é selecionar a pasta que você importou. E você também pode clicar e arrastar o personagem para esse componente de malha aqui. Você pode selecioná-lo aqui ou simplesmente clicar e arrastá-lo até aqui. Por exemplo, vou usar este, o terrorista masculino, e vou clicar e arrastá-lo até aqui e atribuí-lo. Como você pode ver, eu vou fazer a mesma coisa com o terrorista. Clique duas vezes nele. Abra o editor de plantas completo aqui. Clique na malha. Vá para a janela de exibição, só para que eu possa ver o que estou fazendo aqui Clique aqui e vende. Selecione a fêmea. Isso depende de você, realmente não importa o que você escolher, mas eu vou selecionar este, o personagem masculino antiterrorista. Agora você pode ver que os personagens deveriam estar voltados para esse lado, onde a seta azul está aparecendo. Eles estão voltados para o lado errado. Agora, novamente, falei sobre as aulas de plantas para pais e filhos Em vez de girá-los aqui e aqui, você pode fazer tudo de uma vez dentro da base de jogadores Se eu abrir a base de jogadores e ir para a parte de visualização, clico na malha. Clique em E no teclado para ver a ferramenta de rotação, e então eu realmente tenho esse encaixe Eu coloquei esse encaixe e girei 90 graus -90 graus Isso fará com que eles avancem dessa maneira. Se eu clicar em Compilar e clicar em cada um deles, você verá que os dois estão girados É por isso que é bom ter a perda de um dos pais. Assim, você pode alterar uma configuração e ela se aplicará a todas elas. Agora, o que temos que fazer também fazer com que o pé desses personagens fique no fundo da cápsula. Nós realmente não podemos fazer isso dentro daqui. Temos que fazer isso por cada um deles. Você pode fazer isso. Vamos realmente tentar. Vamos apenas fazer isso. Vamos clicar na malha. E clique na malha esquelética aqui. Basta atribuir qualquer caractere aleatório aqui. Na verdade, não vamos nos preocupar com o personagem porque também vamos removê-lo. Então clique nesse personagem. A melhor maneira de fazer isso é acessar a visão em perspectiva aqui. E clique em, Vamos começar com a vista frontal, por exemplo. Você pode ampliar e arrastar esse personagem para baixo. Assim, você pode ver que a cápsula não está realmente preenchendo todo esse personagem. Então, o que eu vou fazer é clicar na cápsula. E a metade da altura da cápsula, vou aumentá-la um pouco, algo como 93 ou algo parecido. Clique no personagem. Na verdade, vou mudar para a visão correta. Acho que é muito mais fácil ver e simplesmente arrastar esse personagem. Então, o pé aqui está na parte inferior. Você pode imaginar que este é o chão. O chão está aqui. Quando chegar a esse ponto, vou arrastá-lo para baixo. Então, o pé está no chão desse jeito. Não precisa ser 100% preciso. Você sempre pode ajustá-lo mais tarde. Mas isso é só um bom começo agora. Realmente não precisa preencher tudo isso. Cápsula de colisão. Este componente da cápsula geralmente é usado para uma colisão. Por exemplo, em dois jogos D, três jogos D, se você quiser bater no jogador, ele será atingido por esse componente da cápsula. No entanto, em nosso jogo de tiro em primeira pessoa multijogador, vamos criar um sistema de colisão mais avançado para braços e pernas e assim por diante Porque você pode ver neste jogo, se temos essa cápsula como colisão, quando você atinge o jogador Você pode realmente acertar o jogador se a bala for disparada aqui E isso realmente não faz sentido. Então, vamos criar um sistema de detecção de acertos mais avançado. Para que o jogador só seja atingido se for realmente atingido no braço e não aqui fora. Este realmente não importa muito por enquanto. Não precisa ser totalmente preciso, mas eu gostaria, aqui, na visão certa, de fazer com que caia no chão da melhor maneira possível . Se você for para a vista frontal, tente reduzir um pouco a cápsula. É sobre o corpo dele, sem mais nem menos. Ok, vamos clicar em Compilar agora. Vamos ao Contraterrorista. Veja o que parece. Se eu for para a vista certa. Vista frontal, dê uma olhada. Parece bom. Se eu for para a compilação terrorista, basta dar uma olhada na perspectiva Tenha a visão correta. Basta dar uma olhada no contraterrorista. Este também parece bom. Você pode ver que criamos tudo aqui dentro da base de jogadores, e agora eles são aplicados a todos os futuros personagens que criarmos. Agora, digamos que você queira criar outro personagem no futuro. O que você precisa fazer é clicar com o botão direito aqui e criar uma nova turma de plantas infantis Digamos, por exemplo, que o chamamos EP e há um terrorista chamado Phoenix. Você pode inserir um novo personagem aqui e clicar nesse cara nessa malha e depois mudá-lo para aquele personagem Phoenix. Por exemplo, essa personagem feminina poderia ser Phoenix. E você pode ver como é fácil criar novos personagens. Todas as configurações são aplicadas. Digamos que, para esse personagem, haja algumas configurações que precisam ser alteradas. Então você pode simplesmente entrar nesse personagem e ajustá-lo. Você pode ajustar perfeitamente essas classes de plantas para crianças perfeitamente essas classes de plantas Você não precisa confiar apenas nas configurações da base de jogadores. Você pode ajustar cada um deles se quiser. No entanto, você pode ver que é muito bom que já tenhamos as configurações básicas As configurações padrão já foram fornecidas e isso facilita nosso trabalho. Agora vamos fechar tudo. Vou deletar esse. Isso foi só para mostrar que vou voltar para a base de jogadores que precisamos adicionar uma câmera também, porque agora o personagem está lá. No entanto, não temos uma câmera para o jogador olhar. Vamos clicar na malha aqui, ir para D. Em seguida, vamos adicionar algo chamado primavera. O braço é apenas um suporte para a câmera. Clicando na mola, vá para D e depois procure a câmera. Em seguida, você pode selecionar essa câmera. Agora você pode ver que temos um braço de mola, e dentro do braço de mola está uma câmera. Agora, clicando na mola, vou clicar no meu teclado para acessar a ferramenta de rotação e, em seguida, vou girar a câmera para que fique atrás do personagem Por enquanto. Eu só vou arrastá-lo para cima. Algo como, isso realmente não importa por enquanto. Vamos ajustar a câmera mais tarde. Mas, por enquanto, eu só quero ver meu personagem quando estou dentro do jogo. O que você pode fazer é vê-lo aqui, por exemplo. Agora você pode ver que na verdade se aplica a ambos, terris e ao antiterrorista , porque são crianças Você pode ver que ambos têm um braço de mola agora, tanto o terrorista quanto o contra-terista Mas o que você pode fazer é clicar e arrastar o terraço do balcão, por exemplo, até o nível. Se você clicar no personagem, você pode ver que você tem uma visão aqui. E isso é porque você acabou de adicionar uma câmera. Você pode ver a aparência desse personagem por trás. O que eu costumo fazer, na verdade, aqui na base de jogadores, vou clicar no braço de mola. E vou definir o comprimento do braço para algo como 600, então fica um pouco longe do personagem. E então eu vou clicar no personagem, e você pode ver que é assim que ele se parece. Eu gostaria de desenvolver meu jogo de tiro em primeira pessoa dessa forma primeiro e depois . É muito fácil. A diferença entre um jogo de tiro em terceira pessoa e em primeira pessoa é que você pode clicar no braço da mola e definir o comprimento do braço alvo como zero E então você está realmente vendo este jogo como um modo em primeira pessoa. Mas, por enquanto, já que estamos fazendo o movimento do jogador, eu gostaria de começar com um comprimento de braço alvo de 600, porque assim poderemos ver todo o movimento que estamos fazendo e ver se estamos fazendo as coisas corretamente. Era isso para sentar do jogador. Lembre-se de compilar e salvar todo o seu trabalho. E vamos para a próxima lição. 15. Modo de jogo e controlador de jogador 3.04: Cada jogo que você cria. Não importa qual seja o jogo, você sempre tem um modo de jogo e um controlador de jogador. Vamos clicar na pasta Blueprint. Antes de fazer qualquer coisa, vamos criar uma nova pasta dentro daqui, e vamos chamá-la de Player. Vou pegar tudo isso aqui e adicioná-lo para dentro, movê-lo para dentro da pasta Player. Então, estamos um pouco mais organizados aqui na pasta do blueprint Vamos clicar com o botão direito do mouse e criar uma nova classe de blueprint. Vamos selecionar um controlador Player. Um controlador de jogador, o que geralmente fazemos aqui é criar a interface do usuário e, em seguida, também gerar coisas aqui Por exemplo, se o jogador solta uma arma no mundo , geramos essa arma no mundo, gerando coisas dentro do Player Controller e também a interface do usuário dentro do Vamos clicar e criar um controlador de jogador. E eu geralmente dou a eles um prefixo EC para controle do jogador, então eu o chamo de nome do jogo O jogo é Counterstrike, vou chamá-lo de Under Strike clicar com o botão direito novamente. Vá para a classe Blueprint e crie um modo de jogo. E geralmente para que serve o modo de jogo, ele cria as regras e a pontuação dos jogos Por exemplo, quantos segundos por rodada e qual é o modo de jogo, por exemplo, capture a bandeira e assim por diante. Então vá em frente e crie o modo de jogo, e vamos chamá-lo de GM para o modo de jogo E, novamente, vou chamá-lo do nome do jogo Hound, A Strike Então, o que eu quero que você faça é clicar duas vezes neste modo de jogo. E precisamos de algumas configurações iniciais aqui. No modo de jogo, você pode ver que temos nos padrões de classe padrão, temos a classe Player Controller Este é apenas o controlador de player padrão do Unreal Engine. Queremos clicar nela, alterá-la para nossa própria lei de controle de jogadores personalizada que acabamos de criar. A mesma coisa para a classe padrão. Mais tarde, não teremos ninguém, selecionaremos nenhum. No entanto, não temos realmente uma tela de seleção de personagens no momento. O que eu quero fazer é aparecer como, por exemplo, terrorista ou contraterrorista Vou apenas selecionar o antiterrorista. Posteriormente, vamos removê-lo porque teremos uma tela de seleção de personagens e você poderá selecionar como deseja gerar Mas, por enquanto, vamos aparecer como contraterroristas porque não temos uma tela de seleção de personagens Agora vamos fechá-lo. Vamos para Editar e Configurações do projeto. Dentro daqui, temos os mapas e modos. Nos mapas e modos, você precisa mudar o modo de jogo. No momento, ele está configurado para a base do modo de jogo, que é apenas o modo de jogo básico do Unreal Engine No entanto, quero mudá-lo para nosso próprio modo de jogo personalizado. E clicando nesta pequena seta para o modo de jogo selecionado, apenas certifique-se de que a cláusula de pontos padrão seja o antiterrorista que selecionamos e o controle do jogador também seja nosso Agora, se você quiser, percebeu que se fechar e abrir o motor, ele o colocará nesse mapa padrão de mundo aberto. Você também pode alterar isso dentro dos mapas e modos. Os editores iniciam o mapa, posso alterá-lo para este mapa, esse mapa que criamos também para o mapa padrão do jogo, também podemos alterá-lo para este Ok, vamos fechar isso. Como última coisa, vá em frente e clique nas Configurações do mundo. Agora, se você não conseguir ver a guia, clique em Janela e clique em Configurações mundiais e poderá vê-la. Então vá em frente e clique em Configurações do mundo e, na substituição do modo de jogo, clique nesta e selecione nosso modo de jogo como este É muito importante que você faça tudo isso , caso contrário, você não poderá gerar o jogador dentro do mundo Agora, se eu excluir esse player, é apenas alguém que acabei colocar na lição anterior. Precisamos que um jogador comece antes que possamos realmente aparecer aqui Vou clicar aqui, acessar o Básico e selecionar um início de jogador Vou clicar em G para ver os ícones. Vou movê-lo para baixo desse jeito, para o mundo. Algo parecido com isso aqui. Você pode ver aqui, se você colocá-lo embaixo do solo, ele vai dizer tamanho ruim Apenas certifique-se de que esteja acima do solo. Algo parecido com isso. Agora você pode clicar em jogar, e isso deve gerar seu personagem Se ele não aparecer, assista a este vídeo novamente. Verifique se o modo de jogo está dentro do mundo, configuração está dentro das configurações do projeto e assim por diante. Mas agora você pode ver que estamos surgindo como personagem e clicamos em Jogar E está realmente parecendo legal. Aqui é Lumen. Você pode ver as luzes do lúmen, na verdade, um lobo as tirando da superfície Ok, agora adicionamos o modo de jogo e o controle do jogador. E vamos seguir em frente e fazer o contexto de mapeamento de entrada e adicionar movimento para o jogador. 16. Contexto de mapeamento de entrada 3.05: Vamos começar com o contexto de mapeamento de entrada onde podemos adicionar o movimento do jogador. Vamos entrar na pasta do player. Dentro daqui, vou clicar com o botão direito do mouse e criar uma nova pasta chamada Input. Acabei de digitar incorretamente essa entrada exatamente como está aqui dentro Vamos abri-lo, clicar com o botão direito do mouse, ir para Entrada e criar esse chamado contexto de mapeamento de entrada. Normalmente eu chamo IMC como prefixo e vou chamá-lo de padrão Agora, antes que possamos usar isso, você pode ver que se eu abro , está vazio. Se eu clicar neste botão mais aqui para adicionar uma tecla ao meu movimento, por exemplo, você pode ver que não diz nenhum e eu não consigo selecionar nada. Isso ocorre porque ele quer uma ação de entrada. Então, aqui embaixo, clique com o botão direito do mouse, vá até a entrada e selecione a ação de entrada. Esse é o que vamos chamar de movimento. Agora, para este, eu vou abri-lo. Essa ação de entrada, a única coisa que realmente precisamos mudar aqui é o tipo de valor. O tipo de valor, você pode clicar nele e ver que tem essas opções diferentes. O que vamos fazer é avançar e retroceder para nosso personagem dentro do jogo Se eu colocar o personagem dentro daqui, personagem vai se mover para frente e para trás. Esse é um eixo. O personagem vai se mover para a esquerda e para a direita. Esse é o segundo eixo. É por isso que vou escolher um eixo dois D, porque estamos avançando para trás e também para a esquerda e para a direita, que é o segundo eixo Então eu vou economizar aqui. Vamos voltar ao contexto do mapeamento de entrada. Agora podemos clicar aqui e adicionar nossa ação de entrada que acabamos de fazer. Ok, vamos minimizar isso por enquanto. Em vez de aqui, você precisa atribuir uma chave. Quero seguir em frente com minha tecla W. O que você pode fazer é pressionar aqui e pesquisar. E então você pode ver que este é o teclado. Você pode selecionar o W. Outro método mais fácil de fazer isso se você clicar no sinal de adição aqui. Agora eu quero retroceder com minha tecla S. Em vez de clicar aqui, escrever e encontrar sua tecla S. Às vezes, pode levar algum tempo. O que você pode fazer é clicar nesse ícone e, em seguida, clicar no teclado que atribuirá essa tecla. Agora, para mover para a esquerda e para a direita, vou para dois deles aqui para a direita, vou clicar aqui e clicar em D para a esquerda. Vou clicar aqui e clicar em A no meu teclado. Agora eu tenho essas chaves. Também quero acrescentar se quero adicionar o movimento do mouse. Vou criar uma nova ação de entrada. Vou descer até aqui, clicar com o botão direito, ir para a entrada e criar uma nova ação de entrada. Vou chamar isso de Olha, procurando com o mouse por este novamente, vou abrir a ação de entrada. E vou mudar o tipo de valor para o eixo dois D, porque vou olhar para cima e para baixo. Esse é um eixo. E o segundo eixo está olhando para a esquerda e para o eixo direito dois D. Vou clicar em Salvar. E voltando ao meu contexto de mapeamento de entrada, agora posso clicar no sinal de mais aqui e adicionar minha nova ação de entrada para esta. Agora clique aqui e procure por um mouse. E você tem esse chamado mouse Xy2d. Agora, basta adicionar o mouse X, adicionar outro e adicionar o mouse Y. Você também pode fazer isso É a mesma coisa, mas para deixá-lo mais limpo, vou clicar aqui e pesquisar o mouse e adicionar esse mouse Xy, porque podemos fazer isso também e ele ficará muito mais limpo no código. Agora, o que queremos fazer com o movimento aqui com o WK, estamos avançando com o K, estamos retrocedendo No entanto, neste momento, os dois estão avançando. O que precisamos fazer para que o SK retroceda é que, nos modificadores você precisa clicar no Então aqui embaixo você tem que selecionar este chamado negate. Isso inverte sua entrada. Quando você clica nele, ele se move para trás. Quando essa negação é adicionada, Negate significa apenas que ela faz o oposto do que a chave Temos que fazer a mesma coisa aqui embaixo. D está se movendo para a direita, na verdade, para a esquerda e para a direita. O que também temos que fazer nos modificadores clicar aqui e selecionar o espaço mundial Temos que fazer a mesma coisa com a esquerda. Aqui, temos que clicar nos modificadores e selecionar o espaço mundial Agora, para a esquerda e para a direita, o D vai para a direita e o A vai para a esquerda. Agora, para a esquerda, também temos que adicionar esse modificador chamado Nick Gate, assim como antes Vai ser na direção oposta ao que o D está indo. Então, vamos continuar e clicar em Salvar. Tudo está indo bem. E agora estamos prontos para adicionar esse contexto de mapeamento de entrada ao nosso personagem. Porque agora adicionamos tudo. Tudo está indo bem. Agora, se pegarmos alguma caixa com o movimento, sempre podemos voltar aqui e trocá-la. Mas, por enquanto, é isso que temos. E vamos deletar esse personagem. E vamos para a próxima lição. 17. 3.06 Adicionando o contexto de mapeamento de entrada: Antes de podermos usar o contexto de mapeamento de entrada e adicionar movimento ao personagem, precisamos adicionar isso à nossa Clauss do blueprint. Vamos seguir em frente e fazer isso. Vamos até o jogador e vamos entrar na base de jogadores. Dentro daqui, vamos adicionar o movimento. Quando adicionarmos o movimento aqui, ele também será aplicado às crianças. No projeto principal, Claus, a base de jogadores. Vamos ao gráfico de eventos. Dentro do gráfico de eventos, você pode clicar e segurar o botão direito do mouse e fazer uma panorâmica por dentro daqui. Agora vamos selecionar todos eles. E aperte a liderança no teclado. E comece do começo como a primeira coisa que vou escrever. Clique. E ao escrever um clique, você pode selecionar entre diferentes funções e eventos. O primeiro evento que vamos criar é chamado de Begin, Play, Play. Vá em frente e selecione o evento, Comece, Jogue. E o que isso faz é o que deve acontecer se eu começar a jogar? Você pode escrever código aqui Se eu arrastar deste pino de execução e soltar. E eu escrevo print e uso essa string de impressão. Portanto, essa é a função simples e simples que temos no Unreal Engine Nas plantas, isso apenas imprimirá algum texto na tela Agora, se eu compilar, clico em reproduzir. Você pode ver que diz olá aqui em cima. Se eu clicar em jogar novamente, você pode ver que diz olá. Então, isso apenas diz o que deve acontecer se eu começar a jogar? O que queremos fazer é adicionar o contexto de mapeamento. A maneira de fazer isso é primeiro obter a referência do controlador do player. Para fazer isso, vamos escrever, clicar e pesquisar o controlador. Você pode selecionar este chamado controlador Yet. Estamos recebendo o controle, no entanto, este é apenas o controlador de jogador padrão básico no Unreal Engine Temos que especificar ao Unreal Engine que, na verdade, estamos falando sobre esse controle de jogador personalizado que criamos A forma como fazemos isso é contratando a partir daqui. E podemos dizer que lançar dois, custar dois significa que estamos tentando obter a referência desse controle de jogador que posso arrastar daqui e dizer que custa dois e então você tem que dar a ele o nome do controle do jogador. Controlador de jogador, PC. Counterstrike é o que chamamos de Counterstrike. Então vá em frente e selecione-o. Agora podemos acessar tudo dentro daqui. Digamos que no controlador do Player. Se eu, por exemplo, adicionar uma variável, basta chamá-la de hello ou algo parecido. Qualquer coisa aleatória, clique em compilar dentro da base de jogadores Agora você pode ver se eu arrasto daqui e escrevo olá, posso ver a variável que acabei de criar. A transmissão é que você pode acessar tudo dentro desse controlador de player agora porque você tem uma referência a ele, isso é chamado de comunicação de plano Porque agora você está na base de jogadores e está se comunicando com o controlador do jogador e pode acessar tudo dentro daqui A única coisa que queremos fazer aqui dentro é arrastar. E depois aprimoramos, nunca me lembro desse nome, é tão longo. Subsistema de player local de entrada aprimorado. Basta escrever Enhanced e selecioná-lo aqui. A partir desta, vamos arrastar e dizer adicionar contexto de mapeamento. Vá em frente e adicione o contexto de mapeamento. E lembre-se de conectar seu código, caso contrário ele não funcionará porque sairá do evento obterá essa referência do Play Controller. E então ele adicionará esse contexto de mapeamento a esse projeto E lembre-se de que, no contexto de mapeamento, você precisa clicar aqui e selecionar o contexto de mapeamento que você criou. Vá em frente e clique em Compilar. E é isso mesmo. Agora você adicionou o contexto de mapeamento ao player e agora pode usar eventos e criar o movimento. No entanto, na próxima lição, falaremos sobre interfaces de blueprint Eu realmente não gosto de fazer casting porque o casting cria referências interessantes no motor real quando você inicia o jogo. Por exemplo, digamos que você tenha criado um jogo completo. Você lançou, por exemplo, 100 plantas em seu jogo Agora ele foi lançado no Steam. No entanto, para as referências mais importantes, quando um jogador abre seu jogo antes de carregar o menu principal e tudo mais, ele carrega primeiro as referências interessantes. Se você tiver, digamos, 100, 200 em seu jogo de elenco, isso tornará seu jogo mais lento porque precisará carregar todas as referências importantes. Ele precisa carregar tudo isso primeiro. Ele pode rodar seu jogo. Não estou dizendo que você nunca deve usar isso, porque há casos em que é ridículo não usá-lo No entanto, neste caso, o que eu geralmente gosto de fazer é criar uma interface de blueprint E a partir disso, podemos nos comunicar com outros projetos sem criar referências interessantes Então, vamos fazer isso, vamos tornar nosso jogo mais otimizado. E também estou tentando mostrar como eu faria isso normalmente da maneira avançada, e eu realmente não gosto de ensinar maneiras ruins de fazer isso. Vamos tentar evitar a fundição por enquanto e vamos para a próxima lição onde podemos substituir essa peça. 18. Interface do Blueprint 3.07: As interfaces Blueprint são usadas em vez de custear. Para uma comunicação de plano, geralmente usamos interfaces de modelo para evitar custos E como você pode ver aqui no player que fizemos na base de jogadores, fizemos esse cálculo de custos e, para evitar ocultar referências que precisam ser carregadas no jogo antes do menu principal e retardam o jogo, criamos uma interface de esquema para evitar Vamos continuar e criar um. E vamos ver do que se trata. Na pasta do blueprint, vou escrever, clicar e criar uma nova pasta E eu vou chamar isso de interfaces ou interface. E vamos entrar nessa pasta aqui dentro. Vamos escrever, clique, vá para Blueprint e selecione a interface Blueprint Normalmente, para interfaces, eu costumo chamá-las de t como um prefixo No momento, você deve chamá-lo que está tentando se referir. Estou tentando fazer referência ao meu controlador de player. Vou chamar isso de controlador de jogo único. Vou entrar aqui e esta é a interface do modelo Lembre-se de que as interfaces de blueprint geralmente são difíceis para iniciantes, mas tente entendê-las e, na verdade, é muito fácil de entender Vamos tentar criar um e ver o que acontece dentro de uma interface de blueprint Você tem essa visão, você realmente não pode fazer nada aqui dentro. Você não pode arrastar nem fazer nada. A única coisa que você pode fazer é aqui nas funções, criar uma função. A função que eu quero fazer agora se você clicar em dois no teclado, poderá alterar o nome dela. Eu só quero chamá-lo de get player controller ref. Estou tentando, com essa função, tentar obter a referência dos controladores do player Então eu posso evitar esse elenco aqui . Vou clicar nessa função que acabei de criar. Vou criar uma saída aqui. Nas saídas, vou selecionar a classe de blueprint à qual estou tentando fazer referência Agora estou tentando fazer referência ao contra-ataque do meu PC do Player Controller É assim que a chamamos. E selecione a referência do objeto. Selecione aqui nas variáveis que você precisa para selecionar a classe de blueprint à qual você está tentando se referir Vou chamar isso de um Player Controller. E agora essa função está concluída. Muito simples. Lembre-se de pressionar e compilar aqui. Muito importante e vá em frente e economize. Agora temos essa função simples. Agora, o que podemos fazer com isso é abrir o controlador. Se eu acessar as plantas e abrir o controlador do player aqui dentro, vamos abrir o editor de plantas completo e, em seguida, selecionar Configurações de classe Nas Configurações de classe aqui embaixo, agora você pode adicionar a interface do blueprint Vamos clicar aqui e pesquisar por T. Aqui está, a interface que acabamos de criar. Vá em frente e selecione-o. Ao selecionar a interface do blueprint, você pode notar que, aqui à esquerda, você vê essa guia Agora, essa é uma nova guia que acabou de aparecer chamada interfaces. Dentro daqui, você pode ver a função que acabamos criar dentro dessa interface de blueprint Agora ele apareceu quando você adiciona a interface do blueprint. Se você clicar duas vezes nessa função e entrar nela, agora poderá definir essa variável aqui. Criamos essa variável de controle do jogador, mas no momento ela está vazia. O que precisamos fazer, precisamos nos afastar disso. E então escrevemos nós mesmos. O que isso significa? Deixe-me realmente fazer isso de novo. Talvez tenha sido muito rápido. Dragão daqui. E escrevendo self e , em seguida, selecione este, obtenha uma referência para si mesmo. O que isso significa é que, na verdade, deixe-me voltar aqui. Criamos a interface do blueprint aqui e criamos essa função dentro dela aqui para as variáveis que selecionamos, a variável à qual queríamos fazer referência Agora, dentro do controle do jogador, quando adicionamos a interface , as configurações de classe apareceram aqui. A função aqui dentro para essa variável que estamos escrevendo self. O que isso significa é que estamos apenas dizendo ao motor o que é essa variável do controlador do jogador. Porque se eu segurar o controle e clicar aqui e desconectá-lo, o motor nunca saberá o que é essa variável Se ficar assim, está vazio, a variável está vazia e você terá era em seu jogo. Mas se fizermos uma autorreferência, isso significa que essa variável é eu. Lembre-se de que estamos dentro do Player Controller. Basicamente, estamos definindo essa variável do controlador Player. Estamos dizendo ao motor que é neste Player Controller que eu estou agora. É eu mesmo. Autorreferência significa em que Eva, classe de projeto, estou dentro agora, que é o controlador Player Então, acabamos de definir isso aqui. Vá em frente, compile e salve o que podemos fazer agora. Agora terminamos com isso. Agora podemos ir até o player e vamos excluir isso. O que podemos fazer agora é arrastar do controlador e depois escrever a função que a chamamos. Aqui está o nome disso. Obtenha a referência do controlador do player, posso arrastar daqui e dizer obter camada. E então você pode ver que aparece aqui na interface de diagrama que criamos, que diz get player controller reference Esta é a função que acabamos de criar quando diz mensagem no final Isso significa que vem de uma interface de blueprint Então vá em frente e selecione-o. Esse ícone aqui significa apenas que vem de uma interface de projeto. E agora nós o temos. Agora evitamos o casting, evitamos as referências concretas e nosso jogo também está mais otimizado em termos de desempenho. Agora você pode simplesmente ir em frente e conectá-lo. Agora ele sabe que esse controlador de jogador ao qual estamos nos referindo é nosso controlador de jogador de Counterstrike para PC Como toda essa variável no PC Counterstrike nós mesmos escrevemos, agora ela sabe do que estamos falando aqui Isso pode ser um pouco confuso para começar se você nunca usou interfaces de blueprint antes, mas é muito útil para evitar a conversão. Acabamos de criar a interface do blueprint. Em seguida, selecionamos a classe de blueprint à qual queremos fazer referência Então, dentro da classe de blueprint qual estamos tentando fazer referência, adicionamos essa interface de blueprint e essa apareceu Então, dentro daqui, fizemos uma autorreferência. E a partir daí, agora podemos usá-lo aqui, onde podemos dizer obter o controle e , em seguida, obter a referência do controlador do player, assim mesmo, e evitar custos Tudo bem, então foi isso para a interface do blueprint. Teremos mais exemplos no futuro. Se isso foi um pouco difícil, dê uma olhada no meu servidor Discord ou dê uma olhada no Pixel Helmet.com. Estou muito, muito feliz em ajudá-lo em 2047 Então, vamos clicar em Arquivo Salvar tudo. E vamos continuar com a próxima lição. 19. Movimento do jogador 3.08: Agora que adicionamos o contexto de mapeamento de entrada ao player, agora podemos fazer o movimento. Temos que escrever o nome das ações de entrada que criamos. O primeiro que eu criei foi chamado de movimento IA. Vamos começar com esse. O que você pode fazer agora aqui no player é escrever, clicar e escrever o movimento IA, o nome da ação de entrada. E então você pode clicar nesse evento para criá-lo. Lembre-se de que esse símbolo significa que isso é um evento. Então vá em frente e crie-o. Agora temos esse evento e parece um pouco complexo, mas não realmente. Ele apenas diz para você quando o evento é acionado, iniciado, em andamento, cancelado e concluído Não há nada muito complexo aqui. Agora, quando esse evento é acionado? O evento é acionado. Se você acessar o contexto de mapeamento de entrada, lembre-se de que adicionamos botões para nosso movimento. Se eu clicar em W, esse movimento será acionado. Agora vamos ver se isso realmente funciona. Porque se você não adicionou esse código, isso não disparará a string de impressão correta e eu apenas imprimo uma mensagem simples na tela. Se eu clicar em, por exemplo, posso clicar em jogar. E se eu clicar em, você pode ver que está realmente imprimindo na tela. Agora, se eu tivesse desconectado isso e não adicionado meu contexto de mapeamento de entrada, clicasse em Play e clicasse em, você verá que nada está sendo impresso na tela e não está funcionando Lembre-se de adicionar isso ao seu código. Tudo bem, agora que isso está funcionando, vamos fazer alguns movimentos. Para o movimento do jogador, usamos uma função chamada Entrada de movimento do anúncio, clicamos com o botão direito e escrevemos uma entrada de movimento É assim que você adiciona movimento a um personagem Vamos conectá-lo agora. Agora, o que ele está perguntando para você é em que direção você quer mover o personagem? Agora vamos fazer o primeiro. Avance e retroceda. O que você pode fazer é simplesmente clicar com o botão direito do mouse e com o botão direito. No entanto, no vetor direto, esse é o vetor direto e podemos conectá-lo aqui à direção mundial. Agora, como podemos retroceder? Na verdade, não precisamos de mais nada. É a única coisa que precisamos. Como é isso, como ele sabe quando andamos para frente e para trás Isso ocorre por causa desse valor de escala. O valor da escala é um, ele vai avançar. Você pode ver aqui, se eu clicar em jogar e clicar nele, ele avança. Se eu clicar agora, ele também avança porque esse valor de escala está definido como um. Se eu definir para menos um e clicar em Jogar aqui e clicar em, ou você pode ver agora que ele se move para trás Quando isso é um, ele se move para frente e, quando é menos um, ele se move para trás Esse é o valor da ação aqui. Podemos clicar com o botão direito do mouse e dividir o pino da estrutura. Ou você pode pegar isso e quebrar o vetor dois D. Isso é na verdade a mesma coisa. Vou clicar com o botão direito do mouse e dizer estrutura dividida. Agora, para esse x, você pode adicioná-lo aqui ao valor da escala. Em vez disso, ao clicar em, você avança. Quando você clica em, você se move para trás porque será menos Lembre-se de que, no contexto do mapeamento de entrada, você escreveu o modificador aqui para que, ao pressionar para trás, você escreveu ou selecionou Negate, que apenas inverte O que significa que será menos um quando você clicar no botão OK. Esse é o movimento para frente e para trás. Isso agora está concluído para a esquerda e para a direita, muito, muito simples. Você pode copiá-lo, colá-lo e conectá-lo aqui. Então, para a direção da palavra, você pode escrever um vetor correto E você pode conectá-lo agora. E agora você pode conectá-lo para o y no valor da escala. Agora lembre-se de organizar seu código. Você pode clicar duas vezes aqui para criar um nó de redirecionamento. Apenas tente se manter organizado. Clique duas vezes neste também. Tente se manter organizado. Assim mesmo. É sempre bom se manter organizado porque você pode imaginar que seu código será muito grande mais tarde. Você também pode selecionar tudo e clicar em C no teclado para criar um comentário. Por exemplo, você pode escrever o movimento WASD e assim por diante. Por enquanto, eu não vou fazer isso, vou fazer isso um pouco mais tarde. Sim, esse foi o movimento. Agora você pode compilar e clicar em reproduzir. Mas em vez de jogar dentro da janela de visualização, acho que é mais fácil para você ver isso se eu jogar no editor em uma nova janela do editor, clicando aqui, na nova janela do editor, e ela aparecerá assim Agora eu posso jogar agora, deixe-me torná-lo um pouco maior. Clique em reproduzir, tornando-o maior. Você pode ver agora, quando eu clico em, eu avanço. Conforme eu me movo para trás, se eu clicar em D, vou para a direita E se eu clicar em, vou para a esquerda. Agora eu posso mover meu personagem com meu teclado. Muito, muito bom. No entanto, no momento, ainda não podemos mover o mouse. Precisamos adicionar o código para isso também. Você pode clicar com o botão direito aqui novamente. Chamamos isso de AI look Input action. Precisamos usar esse evento. Agora você pode clicar com o botão direito do mouse e escrever uma olhada. E então podemos selecionar esse evento. Agora, para olhar, temos que usar algo chamado adicionar sua entrada, isso é olhar para a esquerda e para a direita. E então temos o segundo , chamado de entradas de tom, este aqui, está se movendo ou olhando para cima e para baixo. Muito simples novamente, clique com o botão direito aqui, divida o pino atingido. Vá em frente e conecte o x aqui e o Y aqui. E foi isso, de uma forma muito simples, para olhar para cima e para baixo e para a esquerda e para a direita com o mouse. Vamos compilar e clicar em reproduzir. E eu vou mover meu mouse. Você pode ver que eu posso movê-lo para a direita e para a esquerda. Não consigo movê-lo para cima e para baixo. Na verdade, isso está no braço da mola. Se eu clicar no braço da mola, tenho que usar este chamado uso na rotação do controle. Agora eu posso clicar em Jogar. E agora você pode ver que eu posso me mover para cima e para baixo, para a esquerda e para a direita. No entanto, quando eu me movo para cima e para baixo, na verdade está invertido em comparação com o que estou acostumado Não estou acostumado a subir e descer até o mouse desse jeito. Estou acostumado a ter o oposto. Vamos para o contexto de mapeamento de entrada aqui no mouse Xy aqui. Para o modificador, vou adicionar um novo modificador e negar com o botão direito Quero inverter meu movimento Y com o mouse clicando na pequena seta o mouse clicando na Para a negação, eu vou remover o X e Z. Eu não quero inverter o X e Z, eu só quero inverter o Y. Então, novamente, eu vou clicar em play E agora, quando eu me movo para cima e para baixo, está realmente correto. Então, agora, quando eu me movo para cima e para baixo, está correto para mim. E quando eu olho para a esquerda e para a direita também está correto. Tudo bem. Então esse foi o movimento. E, novamente, se algo estiver na direção oposta à que você está tentando se mover, você sempre pode sair daqui usando a negativa e tentar inverter o E quando tudo está correto, esse foi o movimento muito, muito simples para nosso personagem. Agora podemos nos mover e olhar com o mouse. No entanto, estamos perdendo a animação. E vamos trabalhar com isso na próxima lição. Então vá em frente e salve tudo, e vamos seguir em frente. 20. 3.09 Importando as animações do player: Agora que terminamos a movimentação do jogador, agora estamos prontos para adicionar algumas animações neste site Eu incluí para você alguns materiais do curso. Vá em frente e baixe os materiais do tribunal e você provavelmente obterá esta pasta de materiais do curso como uma pasta Sip Apenas certifique-se de extrair o conteúdo da pasta Sip. Agora, o que podemos fazer aqui é entrar na pasta Counter Strike Animations Este é um projeto da Unreal Engine. Eu adicionei todas as animações que você precisa usar no jogo Se você simplesmente seguir em frente e abrir este projeto, quando tiver aberto este projeto, isso é o que você verá. Você tem essa pasta de animações. Aqui estão todas as animações que você precisa para criar o jogo Você tem algum deslocamento de animação ao apontar a arma e assim por diante Para isso, clique com o botão direito do na pasta de animações e selecione migrar A propósito. Outra dica aqui. Se você clicar com o botão direito do mouse em um arquivo em vez de em uma pasta, a migração estará em Ações de ativos e, em seguida, estará aqui migrar Isso ocorre se você quiser migrar apenas um arquivo, mas quisermos migrar a pasta inteira Clique com o botão direito e migre. E clique em OK, aqui novamente, vamos migrá-lo para nossa pasta de conteúdo Se você for ao Shooter de multiplicação, esta é minha pasta. Está dentro dos contras, ataque o projeto e depois o conteúdo está dentro do conteúdo. Aqui, novamente, selecione apenas a pasta de conteúdo, selecione qualquer outra pasta, caso contrário, ela não funcionará. Basta ir em frente e selecionar a pasta de conteúdo. Selecione a pasta e ela extrairá todas as animações ou passará para o nosso próprio projeto Agora que terminamos a migração, vamos voltar ao nosso próprio projeto Dentro daqui, você pode ver que agora temos o projeto de animações e temos todas essas animações que migramos Agora vamos transferir todas essas animações para nosso próprio personagem E depois podemos excluir essas duas pastas que importamos. Além disso, para essas duas pastas, vou clicar e arrastá-las para o mercado apenas para deixá-las um pouco mais limpas. Às vezes, quando você arrasta pastas de uma para outra e pode ver no mercado, elas agora estão aqui. No entanto, eles ainda estão aqui, e são apenas pastas vazias. Não foi excluído. O que você pode fazer é selecioná-los, pressionar delete no teclado e ver que são redirecionadores de objetos Você pode simplesmente ignorar isso e excluí-lo. Agora você pode ver que ele ainda não foi excluído. Isso acontece às vezes no Unreal Engine. Você pode clicar com o botão direito do mouse na pasta de conteúdo e clicar em Corrigir redirecionadores e tentar excluir novamente. Se não for excluído, geralmente eu simplesmente fecho o projeto. E então eu entro no meu próprio projeto aqui e na pasta de conteúdo e simplesmente os excluo daqui. Apenas certifique-se de transferi-los para a pasta do Marketplace, como você pode ver aqui. Vou apenas excluir essas pastas vazias da pasta de conteúdo e, em seguida, vou abrir minha própria pasta. Novamente, isso acontece às vezes no Unreal Engine. Ok, então aqui estamos novamente dentro do projeto, e agora que importamos nossas animações, vamos transferi-las para nosso próprio personagem E então vamos remover essas duas pastas mais tarde, mas vamos para a próxima lição. 21. 3.10 Criando rigs IK: Antes de podermos copiar as animações para nosso próprio personagem, precisamos criar algo chamado de equipamento K. Vamos ver as plantas. E vamos para a pasta do player, aqui vou clicar com o botão direito do mouse e criar uma nova pasta chamada Animações E então, dentro dessa pasta, podemos acessar as animações. Aqui, aqui embaixo, vemos algo chamado K. Então temos que selecionar isso no amarelo chamado Krig Eu costumo ligar para eles, vamos chamar esse de um manequim. Mannequin é o nome do outro personagem do qual vamos copiar as animações do K Agora você pode clicar duas vezes e entrar aqui. E o que você pode fazer aqui agora é selecionar uma malha esquelética que deseja usar Vou usar esse manequim aqui do qual precisamos copiar os itens Você pode ir em frente e selecionar este. Você pode ver que é chamado na pasta de referências 01. Se você puder ver essas informações lá embaixo no link, vá em frente e clique nelas. Agora, este é o Manikin, vamos criar uma plataforma IK de forma muito simples Aqui, na interface da plataforma IK, você tem todas as animações, como você pode ver aqui no navegador de ativos Se você puder clicar duas vezes neles, poderá ver as animações aqui na retargeting do IK Aqui você tem que especificar os ossos desse personagem e , em seguida, também temos que especificar os ossos do nosso outro personagem. E então, dessa forma, podemos realmente copiar animações desse personagem para o outro Porque definimos os ossos e o Honoral Engine sabe como copiar as animações Agora vou clicar em reiniciar apenas para fazê-los ficar parados. Aqui no Reino Unido estão mirando. O que você precisa fazer é criar uma nova cadeia. A primeira cadeia que vamos visitar, vamos chamá-la apenas cabeça. Vá em frente e chame isso de cabeça. No momento, não precisamos selecionar nada, apenas encadear. Exatamente desse jeito. Ok, agora temos um chamado cabeça. Vamos continuar adicionando os outros. Vou bater em uma corrente novamente. E essa vai se chamar esquerda, esquerda, e então vá em frente e crie uma nova chamada direita. Em seguida, crie um novo, com a perna esquerda. Crie uma nova chamada perna, certo? Então, podemos criar uma nova chamada coluna vertebral e uma última chamada raízes. Ok, então essas são todas as cadeias que precisamos criar. Cabeça, esquerda, perna direita, perna esquerda, coluna direita e raiz. Agora você precisa especificar onde a cabeça começa e onde termina, o osso inicial e o osso final. O que você pode fazer aqui, e de uma maneira muito, muito fácil, agora eu sei que se chama. Se você pesquisar aqui por pescoço, poderá selecioná-lo aqui e ele terminará na cabeça. Agora eu sei disso porque já fiz isso 100 vezes. No entanto, se você é novo aqui ou tem um novo personagem com ossos diferentes, porque lembre-se, se você tem um artista fazendo isso para você normalmente em um software de três D, pode chamá-lo do que quiser Você tem que saber como se chama. Esses são apenas os nomes dos ossos que geralmente aparecem em motores reais. Eu sei como eles são chamados. O que você pode fazer aqui para ver seus nomes sem realmente saber como são chamados. Aqui você pode clicar em Mostrar realmente o personagem aqui. Clique em Personagem, vá até Bones e selecione toda a Hierarquia Isso faz com que você possa ver todos os ossos desse personagem. O que você pode fazer aqui, você pode clicar aqui embaixo. Agora você pode ver que se chama Neck 01. Minha cabeça começa no pescoço 01. Se eu clicar aqui, esse se chama cabeça. O osso final é a cabeça. Agora vamos fazer isso com o braço esquerdo. Agora, esse é o braço esquerdo aqui. Se estivermos assim, esse é o braço esquerdo. Se você puder clicar no braço esquerdo, ele começa na clévica, à esquerda, o osso inicial é Levical, à esquerda, a extremidade Não é realmente o fim aqui nos dedos, mas onde a mão começa, se você clicar aqui, diz mão esquerda. A espinha dorsal aqui. Vamos selecionar o que sobrou, sem mais nem menos. Tinha saído como o fim. Agora, para a direita, é a mesma coisa. É só Levi Coal, certo? E então vire a mão direita para a perna novamente, você pode experimentá-lo como um exercício, você pode clicar nele em algum lugar aqui em cima. Essa é a coxa Começa aqui na coxa, procurando o que vou copiar Coxa esquerda, e eu vou colá-la aqui na perna direita para deixá-la na coxa esquerda. Coxa direita. A perna termina aqui embaixo. Se você clicar nele, ele termina com o pé de seleção esquerdo e aqui embaixo, pé direito. Agora, a última, coluna vertebral, é muito fácil. É a coluna média aqui. Começa na coluna um e termina na coluna três. Essa é fácil. Procurando pela coluna vertebral, você pode ver que ela começa coluna um e termina na coluna três. A raiz é chamada apenas de raiz. Você pode pesquisar raízes, basta chamá-la de raiz aqui também. Raiz, raiz. É a mesma coisa, é só o osso aqui em cima, o osso da raiz aqui embaixo. Agora terminamos de redirecionar esse personagem. E o que você pode fazer é clicar com o botão direito na pélvis aqui. Muito importante Agora clique com o botão direito na pélvis e selecione definir raiz alvo. Isso estabilizará esse personagem. E vá em frente e clique em Seguro. Ok, agora que terminamos com este, o que podemos fazer agora é ir para a pasta de animações Encontre o IK Ric que você acabou de fazer. Você pode clicar com o botão direito do mouse e, em seguida , duplicar isso Deixe-me chamar isso de jogador K. Esse é o jogador. Agora, em vez de fazer qualquer coisa aqui, o que você pode fazer é simplesmente selecionar o jogador. Agora, por exemplo, você pode selecionar esse undaterroristk masculino. Você não precisa fazer isso de novo. Você pode ver que já está lá. Tudo está bem. Está tudo bem. Ela já está definida como rota de redirecionamento porque fizemos para a outra Podemos fechar essa, mas agora temos essas duas plataformas IK Com isso concluído, vamos passar para a próxima lição e criar o IK retargeta 22. 3.11 Criando um Retargeter IK: Vamos agora criar o IK Targeta. Vamos dar uma olhada aqui, duas animações. Em seguida, selecione o K C novamente. E selecione o segundo chamado IK Targeta. Porque agora estamos prontos para copiar as animações de um personagem para outro, criando o retargeting K. Vou chamá-lo de IKR. Vamos chamá-lo de player por enquanto, IKR. Vamos abri-lo. Agora, ele perguntará de qual IK Rick você deseja copiar as animações Quero copiar animações do meu manequim em que temos E eu quero copiar animações para o meu player desse jeito Ele adicionará esses dois caracteres para você automaticamente. Agora eles estão sobrepostos aqui na malha alvo. Deslize o x aqui. Vou clicar e arrastar e simplesmente mover esse personagem para fora do caminho, algo como 175 aqui no eixo x. Então eu posso ver os dois. Agora, dentro da tageta IK, você pode ver, agora eu posso ver todas as animações aqui na cadeia ou no navegador definido No mapeamento da cadeia, você pode ver as cadeias que criamos para que funcionem corretamente. E geralmente faz isso corretamente de forma automática, apenas certificando-se de que a raiz da cadeia alvo, que é essa, seja a mesma, pois a raiz de origem está emparelhada com a raiz, coluna está emparelhada com a coluna, e assim por diante. Apenas certifique-se de que a perna direita, por exemplo, não esteja emparelhada com a coluna. Isso será errado. Eles precisam ser emparelhados com o mesmo osso ou corrente que criamos. Normalmente, o Unreal Engine faz isso automaticamente e corretamente. Vamos para o Acid Browser agora, essas são as animações. Se você clicar em uma delas, por exemplo, vamos selecionar essa caminhada, certo? Você pode ver que está quase correto. Na verdade, vou remover esses ossos para que possamos vê-los mais corretamente. Se eu clicar em Character Bones e selecionar somente agora , está quase correto. No entanto, os braços são muito estranhos, caso contrário, todo o resto parece funcionar corretamente. Podemos copiá-lo quase no entanto, precisamos corrigir alguma coisa aqui. Vou clicar em Parar. Eu acredito. Aqui, sim, clique em Parar. Vamos parar a animação. A razão pela qual não está copiando corretamente é porque a posição desse personagem precisa ser a mesma posição desse personagem. E você pode ver que o braço não está na mesma posição. É por isso que está criando uma era com os braços. Nesta animação, vou clicar em Pare aqui. O que podemos fazer é selecionar um dos ossos. Novamente, clique nos ossos do personagem, todos em hierarquia. Então eu posso ver todos os ossos, e aqui estão eles para esses ossos. Agora, o que podemos fazer é clicar no modo Editar. O Modo de Edição possibilita que editemos a pose desse personagem. Agora você pode selecionar um dos ossos, por exemplo. Você pode simplesmente experimentá-lo, selecione este, tente girá-lo Você pode ver que este não é o que você deve girar. Você pode clicar no controle Z para voltar e selecionar o próximo. O próximo aqui. Se você girar para baixo, desse jeito, acho que algo em torno de 50 graus. Acho que 40 graus é um pouco demais. Talvez possamos tentar -50 graus dessa maneira. Para o outro, vou clicar no mesmo osso e depois girá-lo em -50 graus, desse jeito. Assim como esse cara. Você também pode ver que esse cara tem uma rotação no osso aqui. Eu tenho que fazer isso aqui também. Eu tenho que clicar aqui neste osso. Então eu posso girá-lo talvez em 30 graus. E tente comparar esses dois. Também clicando na outra, girando-a em 30 graus, sem mais nem Apenas tente dar uma olhada de cima e comparar esses dois personagens. Tudo bem, acho que eles têm a mesma aparência. Vamos testar a animação e ver se ela está realmente funcionando. Eu vou sair do modo de edição. Vou esconder os ossos novamente, só para ver como fica sem os ossos. E então eu vou clicar em uma das animações. Por exemplo, vamos selecionar um em que ele esteja andando ou correndo. Isso é um pouco melhor de se ver. Você pode ver que as mãos são um problema agora, e acho que é porque giramos os braços demais para baixo Vamos voltar novamente no modo de edição. Vou ver todos os ossos, depois vou clicar nesse osso e girar o braço um pouco para cima Provavelmente o problema é que o rotacionamos um pouco demais para baixo. Agora vamos dar uma olhada Vamos voltar do modo de edição. Clique na frente aqui, deixe-me remover o osso para que eu possa ver como fica experimentando outras animações Você pode ver que tudo está funcionando corretamente. No entanto, o erro aqui é que, no momento, as mãos não estão funcionando corretamente. Só para ter certeza de que tudo está correto, vou parar as animações e dar uma olhada nelas do ponto de vista em perspectiva Aqui. Do ponto de vista certo. Basta dar uma olhada nesses dois personagens, apenas para garantir que tudo esteja correto. Também indo para a vista frontal e certificando-se de que tudo está correto para vê-la melhor. Aqui podemos clicar novamente no personagem, Bones, e depois em toda a hierarquia Assim, podemos ver todos os ossos e aqui estão eles. Você pode ver que há uma pequena diferença. Se você puder clicar em um dos braços e definir o encaixe para a rotação, vou configurá-lo para cinco e depois ir para o modo de edição Então deixe-me girá-lo um pouco aqui. Em seguida, vou girá-lo levemente para que quase caiba na outra mão Algo parecido com isso aqui. Você pode clicar no outro, e também não neste, neste aqui em cima. E gire-o para que ele se encaixe no outro também. Agora você pode voltar para a visão em perspectiva, dar uma olhada nesses personagens. Você também pode dar uma olhada na vista superior para ver a aparência de ambas. E se eles parecem iguais, acho que na maioria das vezes eles realmente têm a mesma aparência. Vamos voltar ao modo de perspectiva agora. O que precisamos fazer é realmente consertar as mãos porque elas não estão com boa aparência. Podemos simplesmente tentar executar uma animação. Por exemplo, a caminhada de volta à esquerda. E eu vou remover todos os ossos para que eu possa ver. Você pode ver que eles estão bem. Os dois. No entanto, as mãos estão um pouco bagunçadas. Então, temos que consertar isso. Vamos passar para a próxima lição e consertar as mãos antes de copiarmos as animações. 23. 3.12 Fixando as mãos: Agora vamos fixar os dedos. Antes de copiarmos as animações, vamos clicar duas vezes neste modelo de equipamento K aqui Eu já adicionei as correntes. Você pode ver aqui, você também precisa adicionar correntes para os dedos. Se você quiser que os dedos funcionem exatamente como as outras partes do corpo, vá em frente e adicione os mesmos. O polegar aqui, esse polegar aqui. E então você tem o dedo indicador, o dedo médio, o dedo anelar e depois o rosa aqui. Você tem que adicioná-los, todos eles novamente, polegar esquerdo, polegar direito, indicador esquerdo, índice direito, meio esquerdo, meio direito, anel, esquerdo, anel, direito esquerdo e mindinho , direito Vá em frente e adicione-os. Vou apenas mostrar os dois primeiros sobre como você pode encontrá-los novamente, e depois vou adicionar o resto deles. O primeiro aqui, o polegar, você pode clicar no primeiro aqui Você pode ver que este é o polegar 01, certo? Você pode clicar aqui e pesquisar o polegar. Você pode ver que começa com o polegar 01. Esse é o da esquerda. Temos que selecionar o polegar. 01, Esquerda, polegar direito. Termina no polegar 03, à esquerda. Você também pode clicar aqui para ver o nome, mas é muito fácil para esses dedos, o mesmo direito, você pode pesquisar o polegar, selecionar o correto Ele termina em 033, aqui no dedo indicador, você pode clicar nele Começa com o índice 01. Você pode ver pelas mãos, elas são realmente simples Se você clicar aqui e pesquisar por índice, poderá ver o índice 01 para a esquerda, um para a direita, 1203 para a direita 101203, um esquerdo e um direito. Aqui, no dedo médio, você pode clicar no dedo médio. Começa com o meio de 01. Vou seguir em frente e adicionar todos eles aqui. Agora eu adicionei todos eles e podemos clicar em Salvar. E você pode ver todos eles aqui. Exatamente como o que fizemos aqui em cima. Ok, então agora o que eu posso fazer, eu posso fechar isso. Agora, em vez de adicionar a mesma coisa aqui, vou excluí-la. Eu só vou deletar este. E clicando em OK. Na verdade, vai te dar uma era porque foi adicionado a esta plataforma IK Eu também vou deletar esse equipamento IK. Agora diz que há algo rodando aqui e eu não tenho certeza do que ele quer. Estou tentando salvar o projeto. Clique na pasta de conteúdo, corrija os redirecionadores, volte às animações do player e tente excluí-los Na verdade, vamos deletar esse. K jogadores vão me dar isso. Na verdade, vou fechar o projeto e tentar abri-lo novamente para ver se funciona. Ok, aqui estamos de novo. Vou deletar esse. E aí vai. Às vezes, o Unreal Engine fornece alguns erros aleatórios Não vamos deletar o alvo IK, vamos apenas fazer com que ele fique aqui. Vou clicar com o botão direito do mouse e duplicar meu manequim IK e chamá-lo de jogador IK como antes, entrar aqui e trocar esse manequim por nosso próprio antiterrorista assim, está tudo bem. Nós podemos economizar. Vamos voltar para o alvo do IK. Agora, para o retargeting de IK, certifique-se de que o manequim IK seja a fonte e que o alvo seja o jogador Então, tudo parece bem. Vamos tentar novamente. Vamos tentar fazer uma animação. Se voltarmos para a esquerda, por exemplo. E eu vou esconder todos os ossos para que eu possa realmente ver o que está acontecendo. Você pode ver que também não parece bom. Eu suspeito que as cadeias não estejam mapeadas. Se você clicar no mapeamento de cadeia, como eu disse antes, eles precisam ser semelhantes, você pode ver que na verdade não são os mesmos aqui, eu tenho que vinculá-los. Em vez de fazer isso manualmente, tente clicar aqui e clicar em Map All Exact. E você pode ver que mapeia todos eles para você. Agora vamos ver como é. Você pode ver agora que está muito melhor. Na verdade, está segurando, assim como o outro jogador, não apenas segurando os dedos aleatoriamente. Aqui estão, corrigimos o mapeamento da cadeia. Agora você pode ver que a mão desse jogador está torcida, como você pode ver Está distorcido aqui. No entanto, o problema não é realmente seu, é apenas como o personagem é feito. Você pode ver que está um pouco bagunçado nessa parte do braço. Está tudo bem. Na verdade, não você que fez algo errado. Vamos reproduzir algumas animações apenas para garantir que tudo esteja correto antes de continuarmos E só de dar uma olhada e tudo parece bem, você pode até ver que esse dedo no gatilho está segurando corretamente, assim como esse outro dedo no gatilho também. Ok, então podemos sempre dizer que, se você quiser que os braços e as mãos sejam 100% como esse jogador, como eu disse antes, você pode editar, mover levemente os dedos se quiser se lembrar de clicar nos ossos do personagem e em toda a hierarquia e tentar movê-los um pouco se não estiver satisfeito E então você pode seguir em frente e reproduzir uma animação. Dê uma olhada no que parece, mas acho que por enquanto isso parece muito bom. Antes que você possa imaginar, ou lembrar, que os braços estavam voando para cima Agora estão todos bem e os dedos também estão funcionando. Ok, então com isso, vamos clicar no personagem. Novamente, vou esconder todos os ossos porque não preciso mais vê-los. E agora vamos salvar o projeto e passar para a próxima lição, na qual copiaremos as animações 24. 3.13 Retargetando as animações: Agora estamos prontos para copiar as animações. Vamos até o IQ Targeta. Dentro daqui, você pode ver quando eu clico nas animações, assim como na lição anterior, tudo está funcionando bem Agora estamos prontos para copiar todas as animações. O que você pode fazer é muito simples. Você pode clicar na primeira e descer, selecionar a última e clicar nas animações selecionadas Agora você precisa selecionar uma pasta na qual deseja salvar essas novas animações. Na verdade, vou criar uma nova pasta. Para ficar mais organizado, vou criar uma nova pasta e chamá-la de Assets. Isso é o que eu costumo fazer nos meus jogos. Eu posso escrever, clique aqui e vamos chamar a nova pasta de animações. E então você pode ir em frente e clicar em Exportar. E agora estamos exportando essas animações para cá, e agora está concluído Agora, se eu minimizar e passar para minhas animações de ativos, agora você pode ver que elas estão todas aqui Se eu clicar em um deles, você pode ver que está funcionando com nosso personagem. Isso está parecendo muito bom. Não, eu não acho que todas as animações que eu posso ver aqui E isso é porque eles não estão usando o mesmo manequim. Se eu voltar para, vamos ver aqui, o jogador e se eu voltar para meu K targeta, esse manequim aqui, dá para ver se eu passar o mouse sobre ele, ele está usando a malha esquelética da de referência 01 Você pode ver aqui agora que são apenas as animações da pistola Eu posso ver que aqui na pasta de animações de ativos, copiamos todas as animações de pistola Você pode ver no final que eles são chamados de pistola. No entanto, temos mais animações. Você pode ver se você vai para a outra pasta de animações que importamos, você tem o desarmado e também o Não podemos vê-los. E por que isso? Só podemos ver as pistolas. Isso ocorre porque os outros estão, na verdade, usando outros manequins para o rifle Se você apenas segurar o mouse sobre ele, verá que ele está usando o esqueleto da pasta de referências 02, na verdade está usando outro Manequin O que podemos fazer é voltar para o manequim K dentro daqui Podemos clicar neste. Se você simplesmente passar o mouse sobre os outros maniquins que você tem, por exemplo, este, ele diz que este é da pasta de referências 02 No momento, estamos usando o maniq das referências 01, clicando no segundo manequim Agora vá em frente e clique em Salvar. Vamos até o alvo K. Agora você pode ver nas animações que ainda há a pistola O que precisamos fazer é clicar nessa seta apenas para reiniciá-la. Em seguida, vou clicar novamente e selecionar o manequim IK. E vá em frente e clique em Salvar. Agora você pode ver que não é mais a pistola, todas as animações do rifle, vá em frente e selecione todas as animações do Exporte as animações selecionadas. E vou exportá-los novamente na pasta de animações Vá em frente e exporte-os quando tiverem sido exportados. Vou voltar para o meu manequim IK. Vou selecionar o manequim da pasta de referências 03, você pode salvar Volte para o Ktageta. Vou clicar na seta novamente aqui para reiniciá-la. Em seguida, vou selecionar o manequim novamente e garantir que ele diga UA no final, e garantir que ele diga o que Essas são todas as animações desarmadas. E você pode clicar nele para ver como é. Vá em frente e selecione todos eles novamente. E vá em frente e clique em Exportar animações selecionadas e exporte-as novamente na pasta de animações. Clique em Exportar. Agora vamos fechar tudo e dar uma olhada na pasta de animações Agora você tem todas as animações aqui. Então, você pode ver que, ao clicar neles, eles parecem um pouco bobos. E isso não é porque fizemos algo errado, na verdade é a animação que parece um pouco boba, na minha opinião, mas está tudo bem Na verdade, não temos animações melhores. E eles são gratuitos e podemos usá-los. Então você pode ver aqui todas essas animações muito, muito boas E podemos usá-los para criar nosso jogo. Ok, então agora tudo está funcionando para o personagem. E você pode ver que tudo está ótimo. E às vezes podemos ajustar algumas dessas animações. Você pode ver que quando ele olha para o chão, é demais para o chão, na minha opinião. E podemos ajustar isso mais tarde. Mas você pode ver que tudo está funcionando bem. E é assim que você copia animações de um personagem para outro Então, vamos clicar em Salvar e passar para a próxima lição. 25. 3.14 Introdução ao Blend Spaces: Tudo bem, então vamos continuar e criar um espaço de mistura. E um espaço de mesclagem é usado apenas para mesclar duas animações E podemos usar isso no esquema de animação. Mais tarde. Você pode ver que acabei de colorir minha pasta de plantas só para vê-la ou localizá-la mais rapidamente Novamente, lembre-se de que você pode fazer isso selecionando todas essas pastas. Clique com o botão direito do mouse em Ir para Definir cor e, em seguida, clique em Nova cor e selecione a cor. É assim que você coloca cores nas pastas. Agora, dentro da pasta do blueprint nas animações. Vamos em frente e clique com o botão direito aqui. Vá para Animação e selecione esse chamado espaço de mesclagem. Novamente, um espaço de mesclagem é onde você pode mesclar duas animações Por exemplo, a animação inativa e a animação de execução. Podemos usá-los posteriormente no esquema de animação. Vamos continuar e criá-lo por enquanto. Agora ele pede que você escolha um esqueleto. Você tem que escolher o esqueleto para o seu personagem. Para este, vou selecionar o estilo MW. Esse é o contra-terrorista e esse é o terrorista. Vou selecionar o antiterrorista porque lembre-se de que, nas animações, nós realmente redirecionamos as animações para esse Vou selecionar o esqueleto antiterrorista. Chame isso de BS para combinar espaço. Então eu vou chamá-lo de run depois disso. Eu costumo chamá-lo, por exemplo, deste. Vou fazer os espaços de mistura desarmados porque mais tarde vamos correr com o rifle e correr com a pistola Este é chamado de run armed. Vamos clicar duas vezes nele ao abri-lo. Esse é o espaço de mistura. Aqui à esquerda, você tem um painel de detalhes aqui dentro. Você pode fazer coisas como suavizar a animação, a velocidade do movimento, a direção e assim por diante, mas trabalharemos mais com isso mais tarde. Aqui embaixo, muito, muito importante, você tem um gráfico. E aqui você adiciona todas as suas animações. É aqui que você mistura as animações, e faremos isso na próxima lição à direita Não se preocupe muito com isso. Nós realmente não temos muito o que fazer dentro daqui. Mas aqui embaixo você pode ver todas as animações. Se você clicar duas vezes em um deles, por exemplo, neste, clicar duas vezes neste, poderá ver todas as animações aqui dentro deste reprodutor de animação Se você clicar duas vezes nele, verá que está fora do espaço de mesclagem. Agora você não pode ver esse gráfico se você simplesmente rolar. Você pode simplesmente abri-lo novamente aqui clicando aqui. Mas agora você também pode ver isso com as animações. Você pode ver isso aqui embaixo. Essa é a cor do espaço de mesclagem. Você pode clicar duas vezes nele e abri-lo novamente, sem mais nem menos. Muito, muito simples. É assim que fazemos. E podemos, por exemplo, clicar e arrastar uma animação. Na verdade, não vamos usar esses. Isso é uma compensação. Vamos usar essas animações. Vamos trabalhar com o Aim offset mais tarde. Vamos trabalhar com uma das animações. Você pode clicar e arrastar, colocá-los no gráfico. E então você pode ver que esse cara agora está andando automaticamente. E você pode arrastar outra animação e simplesmente colocá-la em algum lugar. E agora você pode ver que eles estão realmente se misturando. Se você mantiver o controle do teclado e apenas mover o mouse daqui para cá, verá que agora eles estão se misturando Ok, muito legal. Por enquanto, isso foi apenas um exercício. Vamos clicar neste, clique em Excluir no teclado. Clique neste, clique em Excluir no teclado. Vamos em frente e economizemos. E vamos começar com a próxima lição, qual adicionamos espaços de mesclagem desarmados 26. 3.15 espaços de mistura desarmados: Agora estamos prontos para criar espaços de lentes desarmados. Vamos começar por aqui. Eu geralmente começo aqui no painel de detalhes. Temos um eixo horizontal e um eixo vertical. Se você clicar nas pequenas setas, poderá ver todas essas informações Normalmente, no eixo horizontal, temos a direção do movimento. Vá em frente e chame isso de direção do movimento. Você também pode ver que ele muda de nome. Aqui embaixo, aqui em cima, temos a velocidade de movimento. Esse é o eixo vertical. Vamos chamar isso de velocidade de movimento. Agora, para a direção do movimento, vamos de um valor mínimo para um máximo. O mínimo é menos 180 graus, o máximo é 180 graus. É assim que podemos girar 360 graus. Agora, para a velocidade de movimento, geralmente o que eu faço aqui, por exemplo, é a corrida. Se formos até o personagem, se clicarmos no jogador e clicarmos na base de jogadores, dentro da base de jogadores, clicaremos no componente de movimento. Você pode ver aqui que a velocidade máxima de caminhada, que também é a velocidade de corrida, é 600 agora. Normalmente, o que eu faço é configurá-lo para cerca de metade do que está escrito aqui. Porque se você escrever 600, precisará atingir a velocidade de 600 antes de poder fazer a transição completa para essa animação. Se você quiser fazer a transição para a animação em execução, eu geralmente escrevo 300 porque quando eu alcanço a velocidade de 300, que eu faço muito rápido porque minha velocidade total é 600, então eu faço a transição para a velocidade de corrida muito mais rápido. Normalmente, eu apenas diminuo o que é. Vou escrever 300 para este, para a direção do movimento. Vou aumentar as divisões da grade aqui porque tenho mais animações do que quatro Eu vou escrever oito. um movimento em oito direções Você pode ver agora que tenho mais linhas aqui. E é assim que queremos que seja. Agora, essa é a única coisa que você quer fazer dentro daqui. Vamos clicar em salvar neste painel de detalhes por enquanto. Agora, aqui no gráfico, agora o que você pode fazer é fazer a animação de corrida para os desarmados aqui embaixo na velocidade zero É aqui que você tem a animação inativa na velocidade zero Estamos apenas parados. Agora, aqui, se procurarmos por ocioso, esse chamado ocioso armado Vamos pegar esse. Ocioso, desarmado, vamos arrastá-lo E temos que colocá-lo aqui, onde a velocidade de movimento é zero. Agora, se você segurar a tecla shift no mouse enquanto a arrasta, poderá vê-la se encaixar na grade. E é isso que eu quero. Eu quero tirá-lo aqui. Se você posicioná-lo, poderá ver o personagem agora está ocioso com uma animação inativa Agora vamos clicar e arrastar isso novamente. Segure a tecla Shift para encaixá-la. Basta clicar e arrastá-lo para todos esses pontos da grade aqui embaixo. Basta levar a animação inativa até aqui. É apenas a animação inativa porque a velocidade é zero. Agora aqui, quando a velocidade estiver máxima, faça a animação da corrida. Se eu apenas procurar fugir agora, estaremos desarmados. Se você simplesmente entrar aqui, verá que este se chama is forward. B significa inverso. B L, por exemplo, significa voltar à esquerda e B R significa voltar à direita e assim por diante. Para este, queremos correr para frente, mas estando desarmados, corra para frente aqui E você pode ver esse chamado desarmado. Você pode arrastar este novamente, segurar a tecla Shift e colocá-lo aqui. Agora, se você segurar o controle do teclado e mover o mouse, verá que pode fazer a transição da animação de Adle E se você mover o mouse enquanto mantém o controle do teclado, você pode fazer a transição para este. Você pode ver o que parece. E isso é o que é um espaço de mistura. Agora, aqui, na verdade, vou clicar neste botão para mostrar os nomes das amostras, você possa ver o que eu coloquei e também será mais fácil para você. Então, aqui, em vez de procurar fugir, vou na verdade procurar por alguém desarmado desse jeito Acho que será mais fácil para mim e poderei ver todas as minhas animações de corrida desarmada Então, aqui à direita, temos a frente direita. Esse chamado front right. Vou deixá-lo aqui. Então temos o direito aqui. Eu vou pegar o que está certo. Deixe-o aqui. Então esse está de volta, certo? Eu vou pegar a parte de trás. Logo no final, na esquina, está o movimento traseiro. Estou pegando a parte de trás e colocando-a aqui para que você possa ver se eu mantenho o controle e vou até ela lentamente. Você pode ver que meu personagem está em transição. Simples assim, tudo parece correto. Ele anda para trás e depois volta. Pois este é exatamente o oposto disso. Este é o lado esquerdo, então corra para a frente para a esquerda. Então eu vou pegar este na frente à esquerda, segurar a tecla Shift, posicioná-lo e este fica à esquerda. Vou encontrar a esquerda e depois a esquerda, escolhendo esta chamada de volta à esquerda e esta chamada de volta. Assim como no outro canto, temos o movimento traseiro aqui e também temos o movimento traseiro aqui. Porque estamos girando 360 graus. Tudo bem, então esta é minha animação e tudo parece correto. Então é assim que deveria ser. Então, temos o movimento frontal e, em seguida, temos os movimentos para a esquerda e os movimentos para a direita. E agora terminamos a corrida com o braço direito, para que você possa manter o controle. Veja o que acontece quando você faz a transição. Agora você tem que fazer isso com os outros também. Então, vou compartilhar mais um exemplo rápido. Eu vou passar por isso rápido. Agora, se você simplesmente voltar às animações do player, clique com o botão direito do mouse, vá para as animações e crie um novo espaço de mesclagem Selecione o personagem novamente, o esqueleto que criamos, chame-o de PS Desta vez, vou chamá-lo de agachamento, porque agora estamos agachados E, novamente, chame isso de desarmado. O último, na verdade, vamos clicar com o botão direito novamente. Vamos para a animação. Vá para o espaço de mistura, selecione o esqueleto. Essa é uma caminhada de S porque agora estamos andando e a chamamos de desarmados Este também temos que fazer. Clicando novamente no agachamento, aqui no eixo horizontal, temos a direção do movimento Então temos a velocidade de movimento. Como movimento, estamos passando de menos 180 para 180. A divisão da grade é oito, porque temos oito movimentos que precisamos somar aqui para obter a velocidade do movimento. Novamente, este é para quem está agachado. Agora, agachar-se é muito mais lento do que a velocidade de caminhada. Novamente, você pode voltar se quiser para a base de jogadores. Clique no componente de movimento e veja a velocidade de agachamento. No momento, são 300. Vou colocar em 150, metade disso por enquanto. Mais tarde, vamos mudar todo esse movimento porque temos que testar o jogador no jogo e ver o quão rápido ele está correndo. E sempre podemos vir aqui e mudar esse valor aqui, ok? Agora que temos isso aqui à direita, agora precisamos que seja o agachado, agachado armado Vamos apenas escrever o braço sublinhado, temos tudo isso agachado O primeiro é o ocioso. Vou pegar essa , anim crouch idle. Vou segurar o turno, coloque-o aqui embaixo. Basta clicar e arrastar o mesmo agachamento inativo em todos esses pontos Porque, novamente, a velocidade de movimento é zero. Estamos apenas ociosos. Em seguida, temos o movimento frontal. Vamos tomar a frente aqui, desarmados. Então aqui está o movimento certo. Este está na frente, para a direita, arrastando para a frente para a direita. O outro lado está na frente esquerda, na frente direita, na frente esquerda. Então temos a direita aqui, a direita e a esquerda está do outro lado. Neste está de volta à direita, arrastando de volta para a direita. Do outro lado está atrás à esquerda. E então temos o movimento traseiro nesses lados. Podemos novamente manter o controle. Veja o que parece. Tudo está indo bem. Vá em frente e economize. E eu vou fazer o último e eu vou voltar para você. Tudo bem, então aqui eu terminei a caminhada e posso habilitar os rótulos para que você possa ver o que eu fazia antes. Os movimentos para a direita, os movimentos para a esquerda e também a marcha lenta aqui embaixo Nada de novo. Vamos em frente e economizemos, e vamos fechá-la. E aqui temos todos os espaços de mistura para o movimento desarmado Agora, mais tarde, também teremos que criar tudo de novo para o rifle e para a pistola, mas não vamos nos preocupar com isso por Vamos passar para o plano de animação. 27. 3.16 Introdução aos Blueprints de animação: Agora estamos prontos para trabalhar com projetos de animação. Vamos entrar na pasta de plantas. Vou entrar na pasta do player. Pasta de animação. Aqui. Vou clicar com o botão direito do mouse, ir para Animação. Em seguida, selecione esse chamado blueprint de animação. Agora temos que selecionar o esqueleto para o jogador para o qual estamos fazendo isso Estou fazendo isso para este Cando Terris agora. Vou seguir em frente e selecionar o esqueleto. Vá em frente e clique em Criar. Vamos chamá-lo de reprodutor de MBP. Agora, vamos clicar duas vezes e abrir esse plano de animação Um esquema de animação consiste em duas partes. A primeira parte é esse gráfico de animação. Dentro desse gráfico de animação, conectamos as animações e você pode ver se você segurar o botão direito do mouse aqui, você pode dar uma olhada dentro desse gráfico de animação, nós conectamos as animações E a segunda parte é esse gráfico de eventos. Dentro do gráfico de eventos, escrevemos o código para o movimento. Temos a parte do código e, em seguida, temos a parte da animação onde adicionamos as animações. Vamos começar aqui no gráfico de animação, você pode ver à direita que você tem todas as animações que você pode ver aqui Você pode até clicar e arrastá-lo para o gráfico de animação e conectá-lo , compilá-lo e assim por diante E você pode ver quando você o conecta, você pode ver agora que o player está ocioso e você pode ver a animação Agora estamos trabalhando com espaços de mistura de animação, não apenas com essas animações aqui. Vamos deletar esse. Em vez de apenas inserir uma animação aqui, vamos clicar com o botão direito do mouse e pesquisar a máquina de estado Vamos selecionar essa máquina de estado único. Vá em frente e renomeie este. Vou chamá-lo de movimento desarmado, porque mais tarde teremos movimento com a pistola e movimento com o rifle Vamos pegar isso e conectá-lo aqui, e vamos compilar. E você pode ver que recebe um aviso porque este está vazio no momento. Vamos clicar duas vezes nessa máquina de estado que criamos aqui. Se você clicar e arrastar a partir daí, você não tem muitas coisas para fazer aqui. A única coisa que queremos fazer é criar esse estado. Clique em um estado e vamos chamar isso de execução inativa E agora podemos ver que você tem esse estado. Agora, se você clicar duas vezes nesse estado aqui, agora poderá adicionar a animação. Vamos atacar esse movimento desarmado aqui. É com ele que estamos trabalhando agora. Vamos conectá-lo e clicar em Compilar. Agora você pode ver que a era desapareceu agora. Se você quiser voltar ao gráfico de animação, clique aqui. Você pode ver que não tem uma guia. Você só precisa clicar aqui e voltar ao gráfico de animação. Você pode ver que a era desapareceu. Conectamos o movimento desarmado dentro daqui. E temos esse estado, o estado ocioso Mais tarde, vamos criar mais estados. Por exemplo, se você arrastar no estado, criaremos o estado agachado e, em seguida, criaremos outro Talvez queiramos criar o estado de caminhada e assim por diante. Mas, por enquanto, apenas o estado de execução ociosa. Dentro daqui, temos esse espaço de mesclagem que criamos anteriormente. Agora podemos ver que o espaço de mesclagem deseja receber duas entradas. Se eu voltar para o espaço de corrida aqui dentro, você pode ver que criamos a direção e a velocidade do movimento. É isso que ele quer. Ele quer esses dois valores. Agora, se eu escrever um número estático aqui na velocidade de movimento, por exemplo, digamos que eu esteja me movendo com uma velocidade de 400. E se eu compilar, você pode ver que o personagem está funcionando corretamente. Se eu também mudar a direção, por exemplo, escrevendo 90 graus, podemos compilar o que está funcionando corretamente. Tudo bem, muito legal. Agora, não queremos realmente números estáticos aqui, queremos calculá-los por meio de código no gráfico de eventos. Vamos continuar e fazer isso na próxima lição. Vamos compilar por enquanto, escrevendo 00 novamente aqui. Vamos salvar tudo e seguir em frente. 28. 3.17 Velocidade e direção de movimento: Para calcular a velocidade e a direção do movimento, vamos entrar no gráfico da van. Agora, dentro daqui, em vez de começar daqui, vamos clicar com o botão direito do mouse agora e pesquisar por initialize E selecione este chamado Blueprint Initialize Animation Este evento é como começar a jogar. Se você se lembra, se eu voltar para a base de jogadores, usamos essa chamada de start play. O que deve acontecer se eu começar a jogar? Agora, nos esquemas de animação, isso é chamado apenas de esquema, Inicializar O que acontece quando você inicializa esse plano? É a mesma coisa aqui. O que você quer fazer, use esta função aqui, tente obter o dono do peão Vamos direto daqui e dizer que é válido. E vá em frente e selecione este com o ponto de interrogação válido. Agora estamos perguntando se o jogador é válido, se o jogador apareceu no mundo Se o jogador tiver surgido, queremos clicar com o botão direito do mouse nessa para transformá-la em uma variável e chamá-la de peão do jogador e seguir em frente e conectar-se ao que é válido Agora, o que estamos simplesmente fazendo aqui é perguntar a esse peão aqui esse jogador fez esse jogador desovar para o mundo Você pode imaginar o contra-ataque. Ao se conectar, você precisa selecionar se quer ser terrorista ou contraterrorista. Agora, se o jogador ainda não selecionou um terrorista ou antiterrorista, o jogador ainda não apareceu no mundo Não faz sentido fazer todo esse código de animação se o player ainda não apareceu Estamos apenas verificando se o jogador surgiu, se o jogador é válido, se o jogador está dentro do mundo Se não, queremos esperar. Vamos apenas escrever o atraso aqui e selecionar esse atraso. Vamos atrasar o código em, digamos, 0,3 segundos. Por exemplo, quando esse atraso for concluído, vamos correr. Isso é válido novamente porque, se o código não for válido, se o jogador ainda não tiver surgido, não queremos ficar presos aqui Se não adicionarmos nada aqui, o código simplesmente vai parar. E eu não quero isso, quero que essa variável player pon seja definida sempre que o jogador reaparecer Vou continuar verificando se o jogador apareceu. Vou atrasar o código se ele não for válido e, em seguida, vou executá-lo novamente. E agora podemos clicar duas vezes neste para criar nós de rota, a fim de torná-lo um pouco mais organizado. Algo parecido com isso. Aqui, continuamos atrasando o código se o jogador não tiver surgido, até que o jogador apareça e isso crie essa variável de dor do jogador Agora podemos pegar essa variável de peão do jogador , podemos colocá-la aqui Se você pegar aqui, poderá obter a variável ou definir a variável. Agora, para fazer isso rapidamente, você pode segurar o controle e arrastá-lo para dentro para obtê-lo automaticamente. Se você segurar Alt e obtê-lo aqui, ele definirá a variável. Esses são apenas atalhos, mantendo pressionado o controle e pressionando a tecla Alt enquanto você os arrasta. Ok, então estamos recebendo essa variável de peão do jogador. Agora, vamos clicar com o botão direito do mouse nessa variável e convertê-la em uma ainda validada. Agora, o que isso faz é conectá-lo aqui. O que isso faz é verificar novamente se o jogador é válido, se o jogador penhorou Só para ter certeza de que estamos executando esse código somente quando o jogador for gerado Porque você pode ver se eu compilo agora, agora o código está sendo executado E você pode ver que isso está funcionando infinitamente, porque ainda não surgimos. Isso vai parar de funcionar sempre que aparecermos. Quanto a este, isso sempre será executado, a atualização do plano e a animação sempre serão executadas E é sempre bom verificar se o jogador foi gerado porque não queremos executar esse código quando um jogador val ainda não apareceu Ok, agora para calcular a velocidade de movimento, vamos atacar com esse jogador, a pata Vamos pesquisar a velocidade e obter essa chamada velocidade Isso é simplesmente a única coisa que temos que fazer, na verdade. No entanto, se eu voltar aqui no blueprint de animação e voltar ao meu estado de execução ociosa, você pode ver o plug-in Ele quer a entrada que deseja, é uma variável do tipo flutuante Não é um vetor. Você pode ver se eu voltar ao meu gráfico de ventilação, isso é um vetor Nós realmente não podemos conectá-lo aqui. O que podemos fazer para transformar um vetor em um flutuador, podemos arrastar a partir deste e pesquisar o comprimento Podemos escolher esse chamado comprimento vetorial, que na verdade o transformará em uma variável do tipo flutuante Podemos clicar com o botão direito do mouse e promovê-la para uma variável agora e chamá-la de velocidade de movimento. Agora vamos conectá-lo aqui ao S válido. E agora temos a velocidade de movimento. Na verdade, isso é muito fácil. É assim que você faz. Você obtém a velocidade do player Fizemos o comprimento do vetor porque queremos transformar a variável em uma variável flutuante E então temos a velocidade de movimento aqui. Agora, para calcular a direção do movimento, podemos arrastar a partir daqui e pesquisar por calcular. E você pode ver isso chamado calcular direção. Como este agora, ele pede uma rotação. O que você pode fazer é direcionar a partir do jogador e procurar a rotação de atos. Este tem rotação de atos. Agora vamos conectá-lo. Agora, se você é muito novo no blueprint, às vezes não sabe como essas funções são chamadas Se ele pedir rotação, por exemplo, você pode simplesmente direcionar a partir daqui e escrever rotação. Isso é o que eu fiz quando comecei. Quando eu estava totalmente, acabei de escrever rotação e tentei ler o que eram todas essas funções. Depois disso, eu seleciono um deles. Agora vai demorar um pouco se você for novo. No entanto, isso é feito repetidamente e se tornará uma memória muscular para você. Não se preocupe com isso, apenas continue praticando. Estamos obtendo a rotação do ator, estamos conectando-a Estamos calculando a direção. Agora podemos clicar com o botão direito do mouse nessa , transformá-la em uma variável e chamá-la de direção do movimento. Agora também calculamos a velocidade e a direção do movimento. Vamos continuar e compilar. E agora temos esse código aqui. Vamos para o estado de inatividade aqui. Novamente, você pode clicar no gráfico de animação. Você também pode clicar no gráfico de animação aqui. Ou vá para o estado de inatividade aqui, à esquerda, dentro daqui Vamos aumentar nossa velocidade de movimento. Conecte-o à velocidade do movimento e arraste a direção do movimento, conecte-o na direção do movimento. Vamos continuar e compilar agora. Antes de podermos jogar, você pode ver se eu jogo agora, nada vai acontecer porque não usamos o esquema de animação no player Vamos até a base de jogadores. Vá até o Viewpo, clique no player ou na malha. Aqui, aqui em cima você pode ver o modo de animação. Use o esquema de animação, isso é correto. Na cláusula de animação, temos que selecionar nosso plano e clicar em Compilar E agora você pode ver que o player está animado aqui no Viewpoard Vamos clicar em Play e vamos experimentar. Se eu clicar em W para avançar, para retroceder, vá para os lados também Eu mudo para todos os outros sites. Você pode ver que está funcionando corretamente. Incrível. As animações que conectamos estão funcionando corretamente Agora, quanto à velocidade de movimento, vamos alterá-la mais tarde, então não se preocupe com isso. Também posso ver que o player é realmente muito pequeno em comparação com o ambiente. Então, temos que corrigir isso também. Mas não vamos nos preocupar com isso por enquanto. Tudo está funcionando corretamente. E vamos passar para a próxima lição e criar o agachamento 29. 3.18 Entrada para Multiplayer Crouch: Agora vamos criar a entrada para o agachamento dentro da pasta do player Eu vou para a pasta de entrada. Novamente, aqui vamos clicar com o botão direito do mouse, ir para Entrada e criar essa ação de entrada. Novamente, vamos chamar isso de agachamento. Agora, vamos abrir nosso contexto de mapeamento de entrada aqui. Vamos adicionar esse novo mapeamento. Agora já fizemos isso antes. Vou ir um pouco mais rápido, desta vez criando esse agachamento Para me agachar, vou clicar aqui e usar meu botão de controle esquerdo Agora você pode escolher qualquer botão que desejar para os gatilhos. Vou clicar no sinal de adição E eu só quero que essa ação de agachamento seja acionada sempre que eu pressionar o botão Porque se você não adicionar isso pressionado aqui, isso realmente será executado muito rapidamente muitas vezes por segundo. Assim como o movimento aqui, se você não adicionar nenhum gatilho, ele será executado continuamente No entanto, isso só será acionado uma vez quando você pressioná-lo. E isso está apenas tornando o código mais otimizado. Além de pressionar, também quero clicar aqui e selecionar Liberado. Porque eu quero me agachar quando solto meu botão, pressionado ou Ok, vamos em frente e salve isso agora. Vamos fechá-lo. Agora vamos voltar para o player agora. E dentro do jogador, vamos abrir a base de jogadores. Aqui embaixo novamente, clique com o botão direito do mouse, pesquise IA crouch ou o que você chama de ação de entrada. Selecione o evento aqui. Agora, aqui embaixo no valor da ação, você precisa arrastar a partir daqui e escrever uma ramificação e conectá-la ao acionado. A verdade aqui é tocar sempre que você pressionar o botão. Se eu simplesmente arrastar daqui e escrever uma sequência de caracteres impressa e escrever pressionada. Agora, é sempre bom adicionar sequências de caracteres de impressão se você estiver depurando Se você tem uma era em seu código, é muito, muito bom simplesmente escrever cadeias de caracteres impressas todo o código, como inseri-las aqui no meio do código, ver se elas funcionam e assim por diante É sempre bom depurar por meio de strings de impressão. Agora podemos depurar a Síria e ver se funciona. Se eu pressioná-lo, ele deve dizer pressionado. Se eu liberá-lo, deveria apenas dizer lançado. Se eu compilar, agora, se eu clicar em Jogar, se eu clicar em Controlar, apenas uma vez, e se eu soltar, agora diz lançado Você pode ver o comunicado de imprensa. Comunicado à imprensa. Ok. Agora está funcionando corretamente. Portanto, podemos excluí-los por enquanto e passar para a próxima lição. 30. 3.19 Função de Crouch para multiplayer: Tudo bem, então vamos nos agachar. Agora, para se agachar, você precisa clicar no componente de movimento do personagem Primeiro aqui, basta pesquisar por agachamento e clicar neste chamado can crouch Se você não tiver isso marcado, você não pode realmente se agachar e nada acontecerá Lembre-se de ir até o componente de movimento do personagem, pesquisar agachamento e selecionar este, agachar-se Ok, agora vamos clicar nesse T novamente. Agora, para o agachamento, podemos simplesmente arrastar até aqui e dizer Isso funcionará perfeitamente para um único jogador. No entanto, estamos trabalhando com o modo multijogador, então temos que executá-lo por meio de um servidor. Agora, no Honorable Engine, você tem algo chamado cliente e servidor Se você clicar aqui e definir a quantidade ou o número de jogadores para dois, e no modo Ith, configurá-lo para jogar como servidor de escuta. Se você clicar em jogar aqui, agora você pode ver que duas janelas se abrirão e agora estamos trabalhando com o modo multijogador. Agora, no Honorable Engine, você tem o servidor e o cliente Agora, o servidor é o verdadeiro jogo. E o que isso significa? O servidor tem a autoridade do jogo. E isso significa que o servidor pode fazer o que quiser. Por exemplo, digamos que aqui no jogo de tiro multiplicador, eu tenho uma arma e atiro minhas balas Agora, no cliente, eu posso atirar nos borrões, eu posso bater no cliente No entanto, o cliente, quando eu atiro a arma com o cliente agora no servidor. Este código para o disparo da arma. Ele passará pelo servidor e, em seguida, o servidor enviará essas informações de volta ao cliente e dirá ao cliente: OK, você tem permissão para atirar. Por que ele faz isso? E isso é, na verdade, para evitar trapaças. Agora, o servidor, novamente, é o verdadeiro jogo. Isso significa que todos os clientes aqui estão conectados ao servidor. O servidor pode ver o jogo como está, por exemplo, onde os jogadores estão, o que estão atirando, quais armas estão segurando. No entanto, para os clientes, na verdade, temos que enviar todas essas informações para eles, do servidor para o cliente. Por exemplo, se alguém saquear uma arma, digamos que temos vários clientes E vamos consertar esse dinheiro mais tarde. Mas digamos que temos, por exemplo, quatro jogadores. E clicamos em Play. E todos eles se abrem no meu segundo monitor. Então, deixe-me arrastá-lo até aqui. Agora, digamos que aqui estou eu, o servidor, e tenho todos esses clientes jogando comigo. Digamos que esse cliente aqui na minha frente vai saquear uma arma Agora, a arma que esse cliente vai saquear, eu tenho que enviar essa informação Por exemplo, se você saquear um AK ou uma arma, use Agle, por Tenho que enviar essas informações do servidor para todos os clientes. Porque se você não enviar as informações, na verdade somente o servidor poderá ver que você saqueou um deagle e os outros clientes não poderão ver que você está segurando Se você não enviar essas informações dos servidores para os clientes, elas não funcionarão. É por isso que dizemos que o servidor é o verdadeiro jogo, tem a autoridade do jogo e todas as informações estão contidas aqui no servidor. E o servidor precisa enviar informações importantes aos clientes. Por exemplo, se um dos clientes disparar uma bala, esse cliente dirá: “ Eu vou atirar uma bala E ele enviará essas informações para o servidor. Agora o servidor vai verificar se esse cliente realmente tem balas Porque estamos tentando evitar trapaças. Ele enviará essas informações de volta ao servidor. O servidor vai verificar se esse cliente tem balas Então, o serviço , talvez diga, sim, esse cliente realmente tem balas Em seguida, ele enviará essas informações de volta ao cliente e dirá, ok, você pode atirar. Agora você realmente tem balas e o cliente pode atirar. É assim que fazemos aqui no relacionamento cliente-servidor , o servidor tem todas as informações e o cliente simplesmente recebe e envia informações para evitar fraudes Tudo bem, essa sessão em grupo acabou. Você pode ver que eles estão em uma sessão de grupo discutindo, vamos parar aqui. Agora temos essa era aqui, muito, muito simples. Está apenas dizendo que acesse, sem tentar ler isso, obtenha o subsistema de player local E, na verdade, está aqui em cima. Se você clicar aqui, vá até aqui, diz apenas eixo nenhum. Tentando ler essa propriedade aqui, a única coisa que precisamos fazer é simplesmente arrastar a partir desta e dizer que é válida. E vá em frente e conecte este com o ponto de interrogação. Estamos apenas nos certificando de que o controle do jogador seja válido. E se for válido, podemos seguir em frente e executar esse código. A era que você chegou aqui é porque ele está tentando executar o código. Quando o controle do player ainda não for válido, você receberá um erro informando que não há acesso. O que axis none significa é que está tentando ler a variável que você está tentando executar. No entanto, acesse, essa variável está vazia. Eu não sei do que você está falando. Vamos fechá-lo. Vamos jogar novamente. Você pode ver se eu jogo aqui e esse cara caiu no chão, porque eles estão todos desovando um em cima do outro E você pode ver que a era acabou. Tudo bem, vamos continuar aqui antes que o vídeo fique muito longo. Vamos ver aqui no código de crouch. Aqui no código crouch, primeiro eu quero criar uma função Vamos criar uma função aqui em cima. Se você clicar em adicionar esta função, vou chamá-la de agachamento Normalmente, escrevo na frente dos nomes das minhas funções para poder pesquisá-las mais tarde muito rapidamente. Aqui em cima. Se eu também os adicionar aqui, posso ver que é um. Se eu for até o gráfico de eventos novamente, posso arrastar essa função aqui e simplesmente pressionar dois deles. Conecte um ao verdadeiro e conecte um ao falso. O que queremos fazer é adicionar um lingote. Isso é porque queremos nos agachar aqui e queremos nos agachar Vou clicar nessa função nas entradas, vou clicar no sinal de mais e adicionar esse lingote chamado u. Como você pode ver, você pode adicionar um B na frente das variáveis do ouro e elas não aparecerão Isso geralmente é feito em C plus plus. Você pode procurá-los mais facilmente mais tarde. Escrever um B não será exibido no nome se você fizer isso para bullins Agora, para me agachar, vou marcar esta. Então, eu quero me agachar aqui quando estou tentando me agachar com meu botão de controle e quando solto o botão que quero me desagachar, isso é considerado com meu botão de controle e quando solto o botão que quero me desagachar, isso é considerado falso. Agora, se entrarmos nessa função de agachamento, talvez fique um pouco difícil E você tem que praticar isso um pouco dentro dessa função. Agora podemos clicar com o botão direito do mouse nesse agachamento e eu vou promovê-lo para uma variável local e chamá-lo de Crouch e eu vou promovê-lo para uma variável local e chamá-lo de Crouch Agora, o que é uma variável local, ela está apenas contida nessa função. Você vê que se eu for para o gráfico de eventos, essa função ou essa variável não está aqui. E se eu voltar para a função, você pode ver que eu tenho a variável local, Crouch Na verdade, essa variável é usada apenas dentro daqui e não é usada fora. Agora, antes de fazermos qualquer coisa, quero sair daqui e dizer: o switch tem autoridade. Esse switch tem autoridade. Você pode ver que ele tem dois pinos de execução. A primeira é a autoridade e a outra é o controle remoto. Lembre-se de que eu disse que o servidor tem autoridade. A autoridade significa apenas que esse é o servidor que está executando o código. Remoto significa que esse é o cliente que está executando o código. Como eu disse antes, o cliente precisa executar o código no servidor e verificar se tudo o que o cliente está fazendo é legal antes podermos continuar o código no servidor para evitar fraudes Mas, por enquanto, vamos fazer isso por meio do servidor. O servidor pode simplesmente seguir em frente e fazer o código sem nenhum problema, porque o servidor tem autoridade sobre o jogo. Então, o que queremos fazer é verificar aqui se isso é verdadeiro ou falso, porque definimos aqui como verdadeiro ou falso. E esse lingote definirá essa variável aqui. Então, vou pegar essa variável local e arrastá-la daqui e escrever uma ramificação e perguntar se isso é verdadeiro ou falso e conectá-la à autoridade aqui. Agora você pode fazer dessa maneira ou dessa maneira. Isso é bom. A mesma coisa. Eu só quero ficar um pouco mais organizado. Então eu o conecto dessa maneira. Se o agachamento estiver definido como verdadeiro, eu quero me agachar desse jeito. Se não for verdade, eu quero me agachar. Procure agachamento desse jeito. Muito fácil. Também vou criar variáveis que usarei posteriormente no esquema de animação Crie uma nova variável aqui, um novo lingote chamado crouch Então você pode pegar este, arrastá-lo daqui e configurá-lo como verdadeiro. E arraste-o aqui e defina-o como defeito. Vamos usar esse mais tarde no esquema de animação, para que possamos alternar a animação Agora temos o servidor finalizado. Você pode ver se eu clico em jogar agora, jogo como servidor e corro aqui. Eu clico no controle. Você pode ver que a velocidade de movimento diminui, na verdade, agora está agachado No entanto, a animação ainda não está conectada, então você não pode ver a animação de agachamento Agora está realmente funcionando. Agora, para o cliente, o que precisamos fazer executar esse código primeiro executar esse código no servidor para verificar se o jogador está trapaceando ou não Vamos voltar ao gráfico de eventos. Vamos clicar com o botão direito do mouse e pesquisar um evento personalizado. Vamos criar um evento personalizado. Vamos chamar isso de SRV para servidor. E vou chamá-lo de agachamento. Porque agora eu quero executar isso por meio do servidor. Dentro desse evento, vamos clicar nele. E agora você pode ver as réplicas. O que você precisa fazer é clicar aqui e executar isso no servidor e clicar em Confiável. Agora estamos realizando esse evento aqui por meio do servidor. Vamos pegar esse agachamento aqui novamente e simplesmente conectá-lo E conecte esse bullying a aqui. E ele criará automaticamente essa variável dentro desse evento. Agora, na verdade, estamos executando isso por meio do servidor. O que precisamos fazer é voltar para a função aqui a partir do controle remoto. Precisamos partir daqui e pesquisar o evento de crouch do servidor que acabamos Agora, para essa entrada, basta conectá-la aqui, criar um nó de rota traseira apenas para ficar um pouco organizado. Agora ele está sendo executado no servidor. Depois de ser executado no servidor, agora ele pode executar esse código junto com o servidor. Ok, foi isso. Agora podemos compilar, e isso deve funcionar perfeitamente. Se eu clicar em jogar, agora sou o servidor e clico em controle. Você pode ver que estou agachado, estou me movendo lentamente. A mesma coisa com o cliente. Eu posso me mover e clicar no controle. E eu também me movo lentamente. Você pode ver no servidor que, na verdade, também estou me movendo lentamente. Isso significa que ele está funcionando corretamente. Ambos estão trabalhando lentamente. Só de passar por isso muito, muito rapidamente, pode ser um pouco confuso para começar Criamos essa função de agachamento Adicionamos o lingote para agachar ou agachar quando pressionamos o botão ou soltamos o botão Dentro dessa função, temos basicamente apenas o ouro aqui configurando essa variável local Então temos o switch, tem autoridade para verificar se é o servidor no momento em que estamos jogando As ou o cliente, se for o servidor, você pode simplesmente seguir em frente e executar o código. Agora, se você estiver agachado, nós vamos nos agachar Se você não estiver agachado, nós nos agacharemos dependendo do valor que você definiu aqui dependendo do valor que você Agora, se você está jogando com o cliente, primeiro precisa passar pelo servidor e verificar com o servidor qual é o valor que você está aqui. Então, ele será executado no servidor. Dependendo desse valor que você inseriu, ele pegará esse valor e se agachará ou se agachará também no cliente 31. Blueprint de animação em crouching 3.20: Agora que temos o agachamento funcionando dentro do nosso personagem de projeto, vamos fazer isso dentro do plano de animação Vamos para a pasta de plantas, animações do player com E vamos entrar no plano da animação. Agora, aqui novamente, você pode voltar para o gráfico de animação aqui. Você pode clicar na sua máquina de estado. Dentro daqui, precisamos criar um novo estado. Vamos atacar a partir daqui e vamos para a direita. Ou clique nesse estado aqui. Vamos nos agachar à direita Agora vamos fazer o Você não precisa vir até aqui. Você também pode simplesmente arrastá-lo aqui para o lado ou aqui para cima. Eu só gosto de arrastá-lo até aqui. Para o agachamento. Eu só imagino que estou agachado, descendo E então podemos clicar duas vezes nesse estado agachado à direita Fizemos este se agachar desarmados. Podemos arrastar esse espaço da lente para o gráfico e depois conectá-lo. Lembre-se de que já definimos a direção e a velocidade do movimento, então podemos arrastá-las e conectá-las aqui. Então vamos compilar. Agora, recebemos um erro ou um aviso aqui porque não fizemos a transição. Vamos voltar aqui no gráfico de animação, você pode voltar para sua máquina de estado. E dentro daqui você vê agora esse círculo. E esse círculo é uma regra de transição. Você tem que contar seu jogo. Quando você deseja passar do inativo para o modo agachado Você tem que fazer uma transição. Agora, se você clicar duas vezes aqui, você pode ver que aqui está a transição, o lingote, então temos que fazer uma transição E da maneira de fazer isso, primeiro você precisa acessar o gráfico de eventos e fazer um código antes de fazer uma transição. Você precisa saber quando o jogador está agachado. Agora, se você voltar para a nossa base de jogadores, você volta aqui na nossa função de agachamento Se você não clicar aqui. Fizemos esse chamado crouch Este lingote aqui, lembre-se de que não é o local que fizemos É essa única variável global de alta que criamos. Podemos usar este para saber se o jogador está agachado ou não e podemos usá-lo aqui dentro do esquema de animação Primeiro, temos que obter a referência ao jogador. No momento, esse é o peão de um jogador, mas precisamos de uma referência à base de jogadores porque agora precisamos usar esse ouro aqui Vamos voltar aqui e voltar para a pasta Interfaces. Vamos clicar com o botão direito do mouse para acessar o Blueprint e criar uma nova interface de blueprint Vamos chamá-lo de base de camadas porque queremos fazer referência à base de jogadores. Vamos abri-lo. E aqui, dentro dessa interface de projeto, assim como para o controlador do player, se você não se lembra, pode seguir em frente e assistir interface do controlador do Player Quando chegamos aqui, na verdade é a mesma coisa. Você pode clicar aqui, clicar em dois para alterar o nome e dizer obter jogador, obtendo a referência do jogador. Você também pode simplesmente chamá-lo de get get player base reference. É a mesma coisa. Em seguida, você pode clicar nessa função aqui na saída. Vá em frente e crie uma nova variável. Lembre-se de que aqui você deve selecionar a qual Eva você está tentando se referir. Estamos tentando fazer referência à base de jogadores da BP. Vá em frente e selecione-o. Deixe-me chamar isso de um jogador. Eu posso compilar agora. E indo para a base de jogadores. Indo para a classe, na verdade, nos padrões da classe, as configurações da classe aqui, nas interfaces, clique em Adicionar e pesquise a base de jogadores T. Este compile e você verá essa interface. Lembre-se de que, se você não vê isso, mesmo que tenha adicionado, é necessário compilar dentro da interface antes de poder vê-la Muito importante clicar em Obter referência do jogador. E aqui podemos arrastar novamente e escrever a nós mesmos como antes. Porque lembre-se de que estamos na base de jogadores. Estamos apenas dizendo que essa variável aqui é essa base de jogadores. Agora podemos ir para o. Vamos compilar primeiro Agora podemos acessar o plano de animação. E aqui já temos o peão do jogador. Em vez de simplesmente arrastar a partir daqui, deixe-me criar uma nova variável Vou arrastá-lo até aqui , colocá-lo e clicar em Obter. E eu vou usá-lo aqui em vez de arrastar daqui Acho que ficará um pouco confuso quando as linhas estiverem sobre todo o código Deixe-me interpretá-lo aqui como um novo e dizer layer ref. Agora temos isso para obter a referência do jogador. Vamos conectá-lo. Agora podemos usar a variável. Agora, se você arrastar a partir daqui e se agachar para a direita. Na verdade, um pequeno truque que eu quero te mostrar. Se você estiver agachado e quiser usar a variável bullion, as variáveis sempre são encontradas aqui usar a variável bullion, as variáveis sempre são encontradas Você pode ver que essa é a variável de agachamento que precisamos. No entanto, se você não vê, você sempre pode criar um espaço e escrever variável VAR para variável e poderá ver todas as variáveis. Apenas um pequeno truque para encontrá-lo rapidamente. Obtendo essa variável de agachamento que criamos. Agora posso clicar com o botão direito do mouse nessa variável promovida a uma variável dentro daqui no esquema de animação E eu vou chamá-lo, está agachado desse jeito Ou você pode simplesmente chamar um agachado da mesma coisa. Vá em frente, conecte-o e clique em Compilar. Ok, agora estamos agachados. Estamos considerando o valor disso aqui na base de jogadores. Então, se for verdadeiro ou falso, estamos pegando esse valor e colocando-o dentro dessa variável. Agora podemos usar essa variável para a regra de transição. Se eu voltar ao gráfico de animação, à minha máquina de estado e a essa regra de transição, você pode clicar nela. Agora está perguntando a você, quando devo ir da corrida ociosa para o E podemos arrastar daqui e conectá-lo aqui. Quando estamos agachados, se agachar é verdade, então queremos seguir em frente e fazer a transição No entanto, vamos voltar. Temos que clicar aqui e arrastar a partir daqui. E conecte-o aqui também. Porque em algum momento temos que voltar do agachado para o modo inativo, clicando na segunda regra de transição Isso é voltar do agachamento para a corrida. Vou arrastar isso e aqui podemos escrever N B e esse chamado N lingote Basicamente, o que estamos dizendo é que se o agachamento é falso , queremos voltar ao modo de execução porque não estamos mais agachados Será falso quando os evalu não estiverem agachados, porque nós o configuramos aqui para cair na Vamos continuar e compilar. E agora você pode ver que todos os erros desapareceram. Agora vamos ver se está faltando alguma coisa. Conectamos tudo aqui à direção e à velocidade do movimento Na verdade, vamos experimentá-lo. Vamos clicar em Jogar. E eu vou clicar em, na verdade, estou preso aqui como jogador. Deixe-me clicar em jogar novamente. Agora estou andando. Como jogador aqui, vou manter o controle para me agachar. E você pode ver que estou agachado. Está funcionando. Mas você pode ver nas minhas outras telas não estou agachada Isso ocorre porque agora estamos trabalhando no multiplicador. Você pode ver que estou agachado como servidor, os outros não conseguem ver. Estou agachado No entanto, se eu pegar esse cliente aqui e me agachar, você pode ver que o servidor pode ver que estou agachado desse jeito se eu estiver agachado como cliente, mas se eu estiver agachado como servidor, eu estou agachado No entanto, os clientes não conseguem ver que estou agachado. E lembre-se de que, na lição anterior, eu disse que estamos trabalhando no modo multijogador. E o servidor tem que enviar as informações de volta ao cliente e dizer aos clientes, ei, estou agachado agora, atualize minha animação O servidor precisa enviar essas informações, caso contrário eles não poderão ver o que estou fazendo. E é isso que faremos na próxima lição com a replicação de variáveis 32. 3.21 Replicação de variáveis: Certo. Vamos consertar o agachamento Agora, antes de fazer isso, vou clicar aqui e selecionar dois jogadores. Porque eu não quero carregar muitos jogadores o tempo todo. Se eu clicar em Play, você pode ver aqui como antes, se eu me agachar no servidor, o cliente não consegue Estou agachado, eu, estou agachado no cliente. O servidor pode ver no próprio servidor que eu estou agachado Lembre-se, como antes, de enviar informações ao cliente e dizer a ele que agora estou agachado Isso é muito fácil de fazer. Então, se você for até a base de jogadores agachada, isso é basicamente o que está errado agora no plano da animação Se voltarmos às regras de transição, temos essas regras de transição retiradas desse ouro aqui Esse lingote controla se estamos agachados ou não aqui A variável, essa informação dentro daqui, precisa ser enviada ao cliente Se você clicar nele, poderá ver as variáveis também podem ser replicadas, não apenas os eventos, você pode ver o evento Já o replicamos antes para ser executado no servidor, mas as variáveis também podem ser replicadas Se você clicar nessa variável, verá que a replicação aqui está definida como nenhuma Mas precisamos enviar essas informações para o cliente. O cliente também tem as informações se estamos agachados ou não clicando aqui e configurando isso para replicá-las E ele terá o símbolo aqui porque é replicado. E agora eu posso clicar em Compilar. Agora, é muito importante saber que as variáveis só podem ser replicadas por meio do servidor Você nunca pode pegar uma variável aqui. Por exemplo, se, digamos que eu esteja no cliente aqui e cole assim, você nunca poderá fazer isso. Ele não pode ser replicado por meio do cliente, as variáveis só podem ser replicadas no Muito importante lembrar que você não pode definir uma variável e replicá-la por meio do cliente, nunca vai acontecer Aqui você pode ver que ele está sendo executado no servidor porque temos esse switch autoridade e está sendo executado no servidor e se replicando, assim como no controle remoto. Na verdade, está sendo executado no servidor porque está sendo executado primeiro no servidor e, em seguida, replicamos essa variável Então, essa foi, na verdade, a única coisa que tivemos que fazer, basta clicar nela e configurá-la para replicá-la Agora, se pudéssemos reclamar, agora, como você pode ver, eu sou o servidor Agora, se eu maximizar isso um pouco. Assim, você pode ver que, se eu me agacho como servidor, agora estou agachado tanto no cliente quanto no E se eu sou o cliente e também estou agachado, estou agachado no cliente e no servidor Às vezes, também é bom clicar aqui, ir para o modo Net e jogar como dois clientes. Então vá em frente e jogue. É sempre bom testar nos dois sentidos. Então, como servidor e cliente, mas também como cliente e cliente para ver se eles realmente conseguem se ver. Se eu me agachar no cliente, o outro cliente também poderá me ver Está funcionando e vamos voltar e trocá-lo para jogar como servidor de escuta. Por enquanto, vamos salvar tudo e passar para a próxima lição. 33. 3.22 Smoothing de animação: Quando eu vou em frente e jogo, você pode ver que minha animação não é muito boa. Então, se eu andar por aí, você pode ver a transição muito rapidamente , e quando eu me agacho aqui, isso De repente, eu posso realmente suavizar isso um pouco e fazer com que pareça bom. E, na verdade, é apenas um ajuste que precisamos fazer. Se você for até o player e clicar nas animações. E você clica, por exemplo, nessa corrida de espaço de combinação. Você tem esse aqui chamado Weight Speed. Se você colocar em algo muito baixo, como um, por exemplo. E você pode clicar em jogar e ver o que acontece. Você pode ver se eu começar a andar, correr, você pode ver a transição para aquela animação em execução Se eu parar, ele volta por execução, ele faz a transição. Você pode ver agora que é muito suave quando eu corro e paro. Portanto, temos que colocá-lo em um número que pareça bom, sem muita suavização Se você aumentar esse número , será menos suave. Normalmente, algo em torno de 56 é muito bom. Cinco agora está muito melhor do que antes. Se você colocar em algo como três, essa velocidade de peso, vamos colocá-la três e vamos clicar em play. Às vezes, não gosto de exagerar porque o personagem de alguma forma se sente pesado quando eu ando por aí. Mas você pode ver que agora está transição muito mais do que Acho que três é muito baixo. Então, podemos tentar quatro e clicar em play. E então podemos correr e ver o que acontece. Quatro ainda é muito pesado. Acho que cinco foi um bom número. Ou para suavizar aqui, se você simplesmente correr assim, fica bem Talvez até 5.5 eu não goste que seja muito baixo aqui, 5.5 Eu não gosto que o personagem pareça muito pesado. Vamos fazer isso com os outros. Vamos clicar no agachamento, colocar a velocidade do peso em 5,5 E clicar na caminhada, colocar a velocidade do peso em 5,5 também Vamos clicar em Arquivo e Salvar tudo. Vamos clicar em Jogar. E agora você pode ver que quando estou correndo, quando estou agachada, ela também está se suavizando Na verdade, você pode ver muito mais a diferença entre se agachar Acho que se eu dissesse o agachamento até zero novamente. E se eu clicar em play, você pode ver a transição muito rápida Quando estou agachado, é quase antinatural. Se eu colocá-lo no 5.5 e eu salvar e clicar em jogar. Agora, quando eu me agacho e faço isso, você pode ver que está muito mais suave do que Não parece antinatural. Apenas um pequeno ajuste que pode fazer com suas animações pareçam muito melhores quando você as suaviza 34. 3.23 Caminhada multijogador: Agora estamos prontos para fazer a caminhada. Agora, caminhar é o mesmo que se agachar. Se voltarmos para o jogador e formos para a base de jogadores, na verdade é o mesmo processo que estamos fazendo aqui com o agachamento Tente fazer isso sozinho, se puder, e tente ver até onde você chega sem minha ajuda. É um exercício muito bom se você quiser continuar comigo, vamos continuar. Vou prosseguir com a entrada e criar uma nova. Vamos até Entrada e clique em Ação de Entrada. Vamos chamar esse. Eu ando. E vamos prosseguir para dentro daqui. Dentro daqui, nós realmente não precisamos fazer nada. Vamos ver o contexto de mapeamento de entrada aqui. Vamos clicar no sinal de mais e adicioná-lo aqui embaixo como a caminhada. Para caminhar, vou segurar a tecla Shift, clicar nesta, clicar em Shift no meu teclado. Quanto aos gatilhos, vou clicar aqui, dois pontos positivos, e o primeiro é pressionado e o segundo é pressionado e o segundo é Este botão será acionado sempre que eu pressioná-lo para andar e sempre que eu o soltar para parar de andar. Agora vamos continuar e economizar aqui. E vamos voltar para a base de jogadores aqui. Vou escrever, clicar e escrever uma caminhada e selecionar a ação de entrada recém-criada. Agora, para este, assim como antes, vamos tirar desse lingote e escrever uma ramificação a partir do verdadeiro Estaremos andando porque é quando pressionamos a tecla shift. Quando liberarmos o turno, pararemos de caminhar até aqui partindo do falso. Vamos criar uma nova função como antes. Vou chamar isso de caminhada. Vamos voltar ao gráfico de eventos. Vou arrastar essa caminhada até aqui e conectá-la aqui. E arraste-o novamente. E conecte-o aqui embaixo. Agora, novamente, assim como antes, precisamos de um lingote para andar ou parar de andar Vou compilar e clicar na entrada e chamar isso de B Agora, para esse lingote, vou ajustá-lo para verdadeiro quando eu quiser andar, e vou ajustá-lo para cair quando eu parar de andar Agora, assim como antes, quero executá-lo no servidor quando sou o cliente. Então, vou clicar com o botão direito do mouse aqui e dizer server walk. E lembre-se de configurar as réplicas para serem executadas no servidor e de forma confiável Agora vamos seguir em frente e fazer essa caminhada conectada, pegar essa entrada para o ouro e colocá-la no evento para que ela crie automaticamente essa variável aqui Ok, a maioria acabou. Vamos entrar na função de caminhada aqui dentro. Vamos clicar com o botão direito do mouse nessa e promovê-la em uma variável local. E esse podemos chamar de walk local. Vá em frente e arraste a partir daqui e diga que o switch tem autoridade. Agora, assim como antes, queremos primeiro executar o código no servidor. Se formos o cliente, arraste daqui e diga server walk, aquele que acabamos de criar e agora o estamos executando primeiro no servidor. Lembre-se de pegá-lo e conectá-lo com o clique duplo da caminhada para criar um nó redondo e deixá-lo um pouco mais organizado. Agora vamos pegar essa variável de caminhada local e colocá-la aqui. A partir daqui, à direita, uma filial e vamos conectá-la. Porque temos que perguntar: isso é verdadeiro ou falso? Porque se for verdade, queremos caminhar. Se cair, queremos parar de andar. Talvez queiramos começar a correr. Vá em frente e conecte tudo o que ele precisa para ficar assim. Agora, a partir daqui, o que basicamente queremos fazer é que você possa ver no componente de movimento do personagem que temos algo chamado velocidade máxima de caminhada. Isso é exatamente o mesmo que correr. Não sei por que é chamada de velocidade de caminhada, mas na verdade também é a velocidade de corrida desta. É isso que queremos ajustar quando queremos andar e não andar. O que precisamos fazer é pegar esse componente de movimento do personagem e partir daqui e dizer definir a velocidade máxima de caminhada. É isso que queremos ajustar. Queremos conectá-lo aqui. É claro que realmente não precisa ser alto. Se você acessar o componente de movimento do personagem agora, a velocidade de corrida é 600. Quando queremos caminhar, precisamos reduzi-lo para um número menor. Na verdade, posso clicar com o botão direito do mouse neste promover isso para uma variável. Vou chamar isso de velocidade de caminhada. Não gosto de ter números estáticos como esses. Vamos compilar e clicar nessa variável de velocidade de caminhada e configurá-la para algo como, vamos configurá-la para 100 ou na verdade, apenas 200 por enquanto, número aleatório Vamos mudá-lo mais tarde, quando não estivermos mais andando. Vamos pegar isso e colar aqui. Vamos transformar isso em uma variável novamente e chamá-la, por exemplo, de velocidade de execução. Vá e coloque-o aqui e conecte as cataratas a ele. Quando não estivermos mais andando, voltaremos à nossa velocidade de corrida. E clique na velocidade de execução. Lembre-se de definir o valor padrão. Vá em frente e compile Primeiro, ele pede que você compile o plano Vá em frente, compile e defina-o para 600, como padrão E agora estamos correndo novamente. Agora, assim como antes, preciso de um lingote para usar dentro do meu projeto de animação Vou fazer um novo lingote aqui, Bullet Walk. Agora eu posso pegar essa atração e configurá-la como verdadeira quando estou andando. E eu copio e colo aqui embaixo. E defina como falso quando eu não estiver andando. Agora, lembre-se de que isso precisa ser replicado para que o cliente saiba se isso é verdadeiro ou falso para que o plano de animação prossiga e configure isso para replicá-lo também Com isso concluído, terminamos e temos que seguir em frente com o plano de animação Mas vamos experimentar. Vamos clicar em jogar. E se eu clicar em Shift, você pode ver que estou andando agora. Estou andando devagar. A animação que precisamos corrigir na próxima lição. Mas, como você pode ver, se eu deixar de andar, posso correr novamente. Isso é muito, muito legal. Vamos seguir em frente e fazer o plano de animação. 35. 3.24 Modelo de animação ambulante: Agora, para o plano de animação, vamos até a animação do jogador e abrir nosso plano de animação Agora, dentro daqui, lembre-se de que, dentro da máquina de estado do gráfico de animação, vamos arrastar a partir daqui e criar outro estado. Vamos chamar isso de uma caminhada. Agora, para este, vamos clicar duas vezes nele e abri-lo. Assim como antes, criamos esse espaço de mistura de caminhada. Vamos conectá-lo aqui. E vamos arrastar a direção do movimento e conectá-la à variável de velocidade de movimento. E conecte-o também. Vamos clicar e compilar agora. Vamos voltar aqui. Como você pode ver, assim como antes de definirmos a regra de transição, precisamos primeiro acessar o gráfico de eventos e obter ouro que acabamos de fazer na mesma interface aqui Podemos arrastar e dizer andar como variável. Podemos obter esse lingote com este. Podemos escrever clique e promover isso para uma variável e chamá-la, por exemplo, de caminhar. Podemos dizer que está andando. Vamos prosseguir e conectá-lo. Clique duas vezes aqui para fazer uma anotação de redirecionamento, organizá-la, sem mais nem menos Vamos compilar e voltar ao movimento aqui. Agora, para a regra de transição, agora estamos fazendo a transição da corrida para a caminhada Podemos arrastar, isso é entrar aqui, sem mais nem menos. Se estamos andando, queremos fazer a transição de corrida para caminhada. Vamos continuar e compilar. Vamos voltar novamente. Temos que arrastar isso daqui para aqui, porque agora queremos fazer a transição da caminhada para a corrida. Se não estivermos mais andando, arraste isso e pegue e diga bullying se você não estiver mais andando, que significa que esse bullying ambulante será falso, então queremos começar a correr Saia, clique e compile. Agora isso vai funcionar. Se você clicar em Jogar e clicar no botão de mudança, poderá ver como estou andando. E tudo está funcionando muito bem. Tudo está funcionando. Você pode testar a animação se algo estiver errado com ela. Você provavelmente fez o espaço de mesclagem errado. Mas você pode ver que tudo está funcionando em todas as direções. No entanto, há um problema no momento. Se você clicar em agachar e clicar no botão andar ao mesmo tempo, agora ele não está andando, não está em transição Isso ocorre porque você também precisa arrastar isso para isso para criar regras de transição. Se você está agachado e quer seguir em frente e começar a andar, vou apenas afastar isso um pouco que haja mais espaço, mais organização Agora vá em frente e clique nessa regra de transição. O que deveria acontecer? Quando devo fazer a transição da caminhada para o agachamento Você pode pegar isso caminhando e trazê-lo aqui novamente, como antes do bullying Se eu não estou andando, agora estamos passando da caminhada para o agachamento Então, não estamos mais andando. Não estou mais andando, mas estou agachada Se agachar é verdade, mas correr é falso, e temos que arrastar a partir daqui e dizer: selecione esse lingote, vá em frente e Se você não está mais andando e está agachado, siga em frente e execute esta regra de transição Vamos voltar aqui e vamos atacar daqui, do agachamento até a caminhada desse jeito e clicar duas vezes nela Agora, quando você deve transição de agachado para andar Isso é se eu não estiver mais agachada, pegando essa. Se eu não estiver mais agachado, desse jeito, estou andando Eu quero fazer a transição para a caminhada. Se eu não estou mais agachado, mas estou andando, quero fazer a transição Se eu clicar em jogar agora, você pode ver se eu me agacho Se eu segurar o turno para andar e me soltar do agachamento, você pode ver que estou Também podemos fazer a transição da caminhada e do agachamento. No entanto, você pode ver que ainda há um pequeno erro. Você pode ver se eu me agacho, seguro, desloco para andar e vejo que estou Mas se eu segurar o controle para me agachar, você pode ver que minha velocidade de movimento é um pouco maior porque na verdade estou agachado Está tomando a velocidade de agachamento. Isso é algo para fazer dentro do nosso jogador, na base de jogadores aqui, dissemos essa velocidade de corrida e velocidade de caminhada. Estamos automaticamente correndo nessa velocidade de caminhada aqui sempre que estamos andando, mesmo estando agachados Esta é uma era pequena e quero apresentar a vocês mais tarde as enumerações E podemos tornar esse sistema muito mais inteligente, mas, por enquanto, tudo está funcionando E vamos para a próxima lição. 36. Salto para multiplayer 3.25: Faça o salto. Vamos prosseguir na pasta de plantas, vá para a entrada do player Vamos seguir em frente e fazer uma ação de entrada. Assim como antes. Você pode clicar com o botão direito aqui, ir para Entrada e criar uma ação de entrada. Vamos chamar isso de salto para dentro daqui. Na verdade, não precisamos fazer nada, vamos encerrar a ação de entrada. Em vez disso, vamos entrar no contexto do mapeamento de entrada, vamos minimizar tudo isso para que possamos ver o que estamos fazendo. Vamos clicar no sinal de mais aqui e adicionar o salto. Se você pesquisar por pular e selecionar a ação de entrada que acabou de fazer. Quanto aos gatilhos, assim como antes, vou clicar no sinal de mais aqui e selecionar a impressora Sempre que eu pressiono, vamos escolher a barra de espaço. Então eu posso clicar aqui e clicar na barra de espaço. Então, sempre que eu clicar na barra de espaço, essa ação de entrada será acionada. Agora que isso foi adicionado, você pode clicar em Salvar. Vamos fechá-lo e ir até a base de jogadores. Dentro da base de jogadores, onde temos todos os nossos movimentos aqui no gráfico de eventos, você pode clicar com o botão direito do mouse e pesquisar um salto e, em seguida, selecionar esse evento de salto. Agora, para este evento de salto, o que queremos fazer é simplesmente arrastar partir daqui e pular para a direita. E então você pode selecionar essa função chamada salto. Agora, para fazer isso funcionar, na verdade, isso já está funcionando, como você pode ver aqui. Fizemos tudo isso caminhando e agachando, mas o salto no motor Unreal já está replicado e no já está replicado Então você realmente não precisa fazer mais do que isso. Você pode ver se eu compilo agora e se eu clicar em jogar e você pode clicar na barra de espaço, você pode ver que estou pulando agora A animação não está correta porque não definimos nada dentro do esquema de animação Mas, como você pode ver aqui, se eu pular como cliente, ele funciona e se eu pular como servidor, também funciona. Jump inside of Wheel Engine já é multijogador. Na verdade, você não precisa fazer mais do que isso. No entanto, antes de fazermos isso, eu só quero ter certeza de que o jogador não pode enviar spam para o botão de pular quando já estiver pulando. Porque você pode ver aqui, se eu arrastar daqui e escrever uma string de impressão. É sempre bom usar uma string de impressão para depurar, para que possamos compilar e clicar em Play Você pode ver se eu apenas envio spam para meu botão Space. Eu posso enviar spam para o salto mesmo estando no ar. Para corrigir isso, apenas para torná-lo mais otimizado, podemos pegar esse componente de movimento do personagem que podemos arrastar daqui e dizer que está caindo. Basicamente, isso é dizer se o jogador está no ar ou não. Podemos pegar isso aqui e agora vou dizer que não é para não lingotes O que estamos dizendo é que só queremos pular sempre que meu personagem não estiver caindo. Isso significa que o personagem não está no ar e, portanto, eu quero pular. Se o personagem estiver no ar, eu não quero pular. Podemos arrastar daqui, pegar isso e fazer um galho. Podemos afastar isso um pouco para que tenhamos mais espaço para trabalhar e conectá-lo aqui. O que estamos dizendo é que se meu personagem não está caindo, ou seja, meu personagem não está pulando, queremos ir em frente e pular. Se você compilar e clicar em Reproduzir e enviar spam para o botão de pular, na verdade, vamos escrever uma sequência de caracteres impressa aqui para que você possa ver o que está acontecendo Vamos compilar, salvar e jogar. Se eu pressionar meu botão Space, você verá que só posso enviar spam sempre que cair no chão. Só é acionado uma vez. Isso só torna o jogo mais otimizado, apenas para torná-lo um pouco mais limpo aqui. O que você pode fazer é opcional, é claro, mas o que você pode fazer é passar por cima desses nós e escrever click and say collapse em uma função. Agora, essa função que você pode chamar, por exemplo, não está pulando Em vez de fazer isso com as entradas aqui, pinos de execução Este é basicamente apenas obter informações se você clicar duas vezes nessa função aqui, se clicar duas vezes nela e entrar nela. E eu vou organizar isso um pouco. Você pode ver que estamos apenas recebendo algumas informações. Não estamos definindo nenhuma informação nova, estamos apenas verificando se o jogador está caindo ou não. Em vez de ter esses pinos de execução, isso realmente não faz sentido para funções que apenas obtêm informações Podemos clicar na função e selecionar puro. Pure significa apenas que essa é uma função que obtém informações. Não precisamos executá-lo por meio do código porque não estamos realmente definindo nada de novo aqui. Podemos simplesmente arrastá-los juntos. E agora você está dizendo que se o jogador não está pulando, você pode ir em frente e pular E você pode ver que pode tornar as coisas um pouco mais limpas se as reduzir a funções. Então, você pode clicar em Compilar e jogar e testá-lo. E tudo está funcionando tanto no cliente quanto no servidor. E vamos seguir em frente e fazer o plano de animação. 37. 3.26 Blueprint de animação de salto: Faça a animação. Vamos às animações. E dentro do plano de animação do jogador. Agora, dentro daqui, vou clicar aqui e clicar com o botão direito do mouse e fechar as guias à direita para que fique mais limpo Novamente, vou abrir o gráfico de animação. Abra a máquina de estado que fizemos aqui dentro. Para o salto, precisamos de três estados. Para o primeiro, você pode arrastar a partir daqui e criar um novo estado. Esse eu vou chamar de jump start. Depois, você pode arrastar a partir daqui e criar um novo estado chamado jump loop ou jump air. E você pode arrastar a partir deste e criar um terceiro estado chamado jump end. Agora, para a extremidade de salto, você pode pegá-la e conectá-la novamente à marcha lenta. Agora temos três estados e precisamos adicionar as animações a eles. Como isso vai funcionar é que, quando eu pulo, tenho uma animação de início de salto Se eu clicar nele e pesquisar por jump aqui nas minhas animações, você tem esse chamado Jump Start Unarmed Apenas certifique-se de que seja o desarmado. Clique e arraste até aqui e conecte-o. Se você quiser ver a aparência da animação, você sempre pode clicar duas vezes nela. E isso é o que parece. Temos uma animação inicial de salto que vamos ver antes de irmos para a animação em que estamos no ar Vamos voltar aqui. Agora que conectamos isso, vamos voltar, clicar no salto aéreo e pegar este chamado Jump A desarmado E coloque aqui para o último. Vamos voltar ao ponto de salto. Vamos pular desarmados. Se eu conseguir encontrá-la, essa na verdade salta de terra desarmada. Podemos pegar isso e conectá-lo e continuar compilando, ok Agora, assim como antes, temos que definir essas regras de transição, vamos clicar na primeira. A primeira, basicamente quando estamos no ar, como fizemos aqui na base de jogadores, se você voltar como fizemos aqui para pular, se o jogador estiver caindo, significa que estamos no ar. Isso significa que realmente queremos pular. Temos que ir primeiro no gráfico de eventos e codificar que aqui como jogador, assim como você fez na base de jogadores, você pode arrastar a partir dele e obter o componente de movimento do personagem. E então, a partir do componente de movimento do personagem você pode arrastar e dizer que está caindo. Se estivermos caindo, você pode clicar com o botão direito do mouse e transformá-la em uma variável e chamar essa variável de “está no ar”. Isso significa que estamos no salto. Você também pode chamá-lo de is jumping se quiser prosseguir e compilar o Now dentro do gráfico de animação Vamos voltar ao salto aqui. Essa regra de transição. Vamos supor que isso esteja no ar e conectado. Agora que estamos transferidos, eu volto aqui. Estamos fazendo a transição para o ponto de partida sempre que estamos no Sempre que clicamos neste botão de espaço aqui. Do início ao salto, podemos clicar nisso. A função que queremos usar aqui é chamada de tempo restante. Se você clicar com o botão direito do mouse e pesquisar o tempo restante, isso é chamado de proporção de tempo restante. Apenas certifique-se de que seja uma proporção. Você pode arrastar a partir disso e dizer menos, menos do que aqui e depois conectá-lo. O que estamos dizendo aqui é que queremos fazer a transição de uma animação inicial para o salto, uma animação sempre que o tempo restante da animação inicial for menor do que qualquer número inserido aqui. Por exemplo, se eu conectar 0.5 e compilar, vamos realmente continuar com isso e eu posso te mostrar mais tarde o que isso está fazendo Então, vamos voltar aqui para dar o salto aqui. Se eu clicar na regra de transição entre o salto aéreo e a ponta do salto, mas desta vez, pousaremos sempre que não estivermos mais no ar. Porque você pode imaginar que o jogador está pulando e depois pousando novamente no chão Quando o jogador pousa no chão, queremos reproduzir essa animação de salto quando o jogador não estiver mais no ar. Então, podemos obter isso, digamos não lingotes, e podemos conectar isso Quando o jogador não estiver mais no ar, queremos seguir em frente e reproduzir a animação do jump end. Agora, para este aqui embaixo, assim como antes, queremos escrever, clique e pesquise a razão de tempo restante para o terreno do salto quando for menor do que algum número que inserimos aqui. Em seguida, queremos interromper a animação do jump end e voltar para a corrida de adição. Para este, vou escrever 0.5 novamente e compilar agora, podemos experimentar e ver o que acontece se você clicar em reproduzir e maximizar isso aqui Quando eu corro e pulo, você pode ver que eu tenho uma animação de salto inicial. Eu também tenho uma animação de jump land. Você pode ver isso mais claramente se eu colocar esse número em algo muito baixo. Se eu voltar a este também e colocá-lo em algo muito baixo, você pode ver suas transições Se eu clicar em play jump, ele terá uma animação de jump start. E tem uma animação de Jump Land. E veja que a animação de jump land é mais visível. Agora parece que o jogador está deslizando no chão quando cai É assim que você controla aqui a proporção de tempo restante. Se você clicar nela, quanto mais alto colocar, mais rápido a animação será cortada Se você colocar muito baixo, verá que a animação não está sendo interrompida rapidamente. E parece que o player está deslizando. No entanto, se você colocar em algo muito alto, por exemplo, 0,9 você pula, verá que o jogador não está mais deslizando. A animação do salto será interrompida muito mais rápido. Quando esse é um número maior, você só precisa sentar aqui e ajustar esse número, bem como esse número. Para começar, basta clicar em Jogar várias vezes, tentar pular, ver o que funciona para você, ver o que parece bom e tentar ajustar esses números. Eu tento contornar isso, e o número que melhor se encaixa para mim início do salto é 0,8. Se eu voltar para o final do salto, é 0,9. Isso é correto. Então, vamos clicar em Play e ver como fica. Agora, se pularmos, você pode ver que isso é o que parece. Você sempre pode ajustá-los um pouco mais, se desejar. Mas acho que essa é uma boa rodada de partida para o salto. Agora, o que você também pode fazer. Você pode ver aqui se eu clicar em jogar e andar por aí segurando a tecla Shift para andar e clicar em pular. A animação não está sendo reproduzida. Isso porque, lembre-se de que você precisa fazer a transição da caminhada. Você ainda não tem uma transição para arrastar da caminhada e fazer a transição para o salto. A partir daqui, você pode ver essa regra de transição exatamente como antes. Assim como você fez aqui em marcha lenta, você usa o Is in air bullion Você precisa clicar aqui e usar a mesma coisa. Se você estiver no ar, você pode fazer a transição da caminhada para o salto. Agora, não tenho certeza se quero fazer a transição do agachamento para o salto, mas você pode adicionar essa mecânica ao seu jogo, mas não quero adicioná-la Acho que não vou aceitar isso assim. Então você pode clicar em jogar agora, e você pode andar pressionando Shift, você pode clicar no espaço. E agora você também pode ver a transição para a animação de salto quando você está andando 38. 3.27 Introdução às enumerações: Agora, eu quero mudar alguma coisa com o movimento aqui. Você pode ver se eu clicar na tecla Shift e andar e se eu segurar o controle, você pode ver que eu realmente não consigo me agachar enquanto estou segurando a Se eu segurar a tecla Shift para andar e manter o controle ao mesmo tempo, não estou realmente agachada Eu tenho que pressionar Shift e depois soltar a tecla Shift e depois pressionar C. Eu realmente não gosto disso. Eu gosto, por exemplo, se você clicar em Crow, pressionar Shift ao mesmo tempo, ele vai andar aqui assim Mas não está fazendo isso agora. Eu tenho que soltar o botão e então eu posso andar. E eu tenho que soltar o botão de caminhada. E então clique em, no agachamento antes que eu possa me agachar. E eu realmente não quero fazer isso. Vamos corrigir isso e tornar o sistema um pouco mais avançado para que ele possa receber entradas como O que vamos usar para isso são enumerações. Nessas aulas, eu só quero apresentar a você as enumerações Você pode voltar para a pasta de plantas e clicar com o botão direito do mouse aqui e criar uma nova pasta e chamá-la de enoms ou enumerações Isso depende de você. Você pode clicar com o botão direito do mouse nessa pasta, definir uma nova cor e usar a mesma cor de antes dentro dessa pasta. Clique com o botão direito do mouse, vá para o Blueprint e selecione esse chamado enumeração Vá em frente e faça isso, e eu vou chamá-lo de prefixo e vou chamá-lo de estados de movimento E você pode abri-lo e ver que uma enumeração é basicamente apenas uma lista Você pode clicar aqui para adicionar um item. Se eu clicar aqui algumas vezes, você pode ver que é uma enumeração é apenas uma lista de itens que você pode fazer Pode ser uma lista de qualquer coisa, por exemplo, uma lista de mantimentos, uma lista de armas, uma lista de estados de movimento Como estamos fazendo aqui apenas uma lista de tudo o que você deseja. Também pode ser uma lista de itens que você pode saquear ou uma lista das partes que você tem no jogo Qualquer coisa que você possa fazer uma lista, você pode criá-la aqui. Ao clicar nesses ícones, você pode remover os itens da lista. Para o primeiro, vamos apenas fazer uma lista de estados de movimento. O primeiro estado de movimento que temos é correr. Então você pode clicar aqui novamente. Em seguida, temos que caminhar. Agora, ele realmente não precisa estar em uma ordem específica. Você pode, por exemplo, correr primeiro ou caminhar primeiro e assim por diante. Mas agora temos a corrida e a caminhada, e também temos o agachamento e você pode ir em frente e economizar Então, é muito, muito simples e enumeração é apenas uma lista de itens Nesse caso, estamos criando uma lista dos estados do movimento e os usaremos na próxima lição para tornar o sistema um pouco mais avançado para o movimento. 39. 3.28 Mudando de variáveis de movimento para enums: Agora que criamos a enumeração, vamos clicar no Vamos entrar na base de jogadores. Agora vamos voltar ao gráfico de eventos aqui. E eu vou arrastar essa aba para o lado. Portanto, tem um pouco mais de estrutura como essa para o primeiro. Por exemplo, para o agachamento, vamos entrar na função agachamento Dentro daqui, você pode ver que estamos agachados e estamos ajustando esse lingote para C e Vamos tornar esse sistema um pouco mais avançado para que ele possa receber várias entradas. Vamos excluir esses lingotes por enquanto. Vou arrastar isso para baixo para ter mais espaço para, vamos criar uma nova variável. Essa variável, vamos chamá-la de estado de movimento para o tipo de variável. Em vez de apenas criar essas variáveis padrão, você também pode criar variáveis de qualquer coisa dentro do jogo. Por exemplo, você pode criar uma variável a partir da enumeração que acabamos de Se você apenas pesquisar estados de movimento, você pode ver aqui, esta é a enumeração Apenas certifique-se de pesquisar o nome conforme você o escreveu, para o arquivo. Estados de movimento. Você pode ver aqui, se eu voltar para a enumeração, ela se chama estados de Agora eu tenho isso como uma variável e posso clicar e compilar Veja, se eu der uma olhada aqui no valor padrão, você pode definir o item da lista aqui para a enumeração Você pode configurá-lo para um desses estados se estiver correndo, andando, agachado e assim por diante Você pode clicar e arrastá-lo até aqui e escrever o conjunto. Você também pode ver a enumeração aqui. Você pode configurá-lo como um desses itens da lista. Você pode ver que isso é muito bom e também vamos usá-lo mais tarde para os widgets Quando estamos criando a interface do usuário, podemos fazer uma lista da interface do usuário. Por exemplo, menu principal, menu pausa, menu de escape Podemos criar a interface principal do jogo. Assim, você pode fazer uma lista de tudo o que é realmente útil usar aqui. Em vez de apenas tê-la assim como uma variável padrão, quero atribuir vários valores a ela. Você pode ver se eu me conectei, quero andar Em vez de apenas me agachar, você definirá essa variável para caminhar No entanto, isso será como antes, não há realmente uma mudança. Você está apenas configurando-o para andar e não andar. E você o está configurando para se agachar e não se agachar. Agora eu quero que ele tenha várias entradas. O que você quer fazer. Em vez disso, quero clicar nisso, no tipo aqui de qual tipo de variável ela deveria ser. E vou selecionar uma matriz em vez de uma única variável. Agora, o que uma matriz é comparada a uma única variável ou a uma única variável, você só pode defini-la com um valor. Por exemplo, se eu configurá-lo para caminhar na caminhada, isso substituirá esse valor que eu defini aqui Para se agachar da matriz, você pode imaginá-la como uma caixa e você tem várias entradas aqui Você pode ver se eu compilo. E quando você o transforma em uma matriz e clica nesse sinal de mais aqui, você pode ver que pode ter várias entradas Você pode ter a corrida, a caminhada o agachamento ao mesmo tempo em uma matriz, você pode imaginá-la como uma caixa E você está colocando todos esses valores dentro da caixa. No entanto, se você tiver apenas uma única variável padrão, é apenas um item que você pode configurar para caminhar, agachar-se e assim por diante Mas para as matrizes, novamente, você pode imaginá-las como uma caixa Você está basicamente colocando todos esses itens dentro da sua caixa e tem todos esses valores armazenados para você. Outro uso de uma matriz é, por exemplo, quais itens você tem em seu inventário? Por exemplo, você pode ter um triste, você pode ter um escudo e assim por diante. Assim, você pode ter vários itens dentro do seu inventário. Você pode ver que as matrizes são muito boas ou, se você tiver vários itens que deseja armazenar por enquanto, vamos excluir tudo aqui E vamos compilar para o agachamento. Vamos arrastar esse agachamento até aqui. O que queremos usar é que, se você arrastar, você pode dizer definir elemento de matriz para as matrizes Se você não conhece todas essas funções, você pode basicamente arrastar a partir daqui e escrever a matriz. Eu faço isso às vezes, se há algo que eu esqueço ou não sei, você pode escrever uma matriz. E você pode ver, você pode ver todas as funções da matriz. Ele pode limpar, pode encontrar um item que você está perguntando se ele contém um item. Você pode encontrar um item. Você pode obter um item específico. Você pode perguntar se essa matriz está vazia e fazer algo com ela. Você pode obter o comprimento da matriz. Você pode ver que temos muitas funções que você pode usar para a matriz. O que vamos usar é chamado de elemento set array. Vamos definir um item. Agora você também pode usar este se arrastar e escrever um, por exemplo, write add here. E você pode escrever o agachamento. Quando estivermos agachados, adicionaremos o agachamento a ele, o item No entanto, este está funcionando muito bem no modo single player, mas tenho muitos problemas com ele no modo multijogador. Às vezes, ele não adiciona e eu tento depurar meu código por horas, e na verdade é só esse que está funcionando Não há nada de errado com seu código. Este é muito ruim de usar no modo multijogador, tem muitos bugs, então vou excluí-lo e usar este. Se você quiser adicionar itens, use esse elemento de matriz sit em vez disso para conectá-lo. O que eu quero definir é que, quando eu vou me agachar, quero colocar o item Estou fazendo basicamente o que estou fazendo aqui por meio de código. Quando clico em agachamento, estou adicionando esse agachamento Ok, vá em frente e verifique se você excluiu todos os valores padrão por enquanto. Então, agora estamos configurando o agachamento. Agora, para o índice, ele apenas pergunta onde você deseja definir o agachamento Se você clicar na matriz e clicar no sinal de adição, verá que tem um número de índice. E se eu clicar no sinal de mais novamente, você verá que tem outro número de índice. As matrizes começam no índice zero e, quanto mais itens você adicionar, elas serão incrementadas Será índice um, índice dois, índice 345 e assim por diante Então, começa no índice zero. Não começa no índice um. É muito importante saber agora o índice, em vez de apenas tê-lo, pois isso será um problema. Porque se pegarmos isso e copiarmos, colaremos na caminhada e também configuraremos a caminhada para o índice zero. Você pode ver aqui que se sobreporá se eu estiver andando, digamos, digamos que eu esteja agachado Eu pressiono o botão de agachamento e vou deletar todos os outros Este eu vou deletar, assim como este. Agora estou agachado. Ele adicionou o agachamento ao meu índice zero Agora, se eu clicar na caminhada ao mesmo tempo, ela sobreporá meu agachamento aqui, o valor do agachamento, porque vai configurá-lo para o índice zero em vez O que você pode fazer é tirar disso e dizer, último índice. Ele vai dar uma olhada em qual é o seu último número de índice. No momento, meu último número de índice é zero. Se eu adicionasse esses itens, por exemplo, meu último índice seria três. Ele encontrará o último índice que você pode extrair disso economizará perdas e adicionará um a ele desta forma. E então você pode adicioná-lo ao índice. O que você está basicamente dizendo é encontrar o último índice número três, por exemplo, incrementado em um É aqui que você deseja adicionar esse novo valor. Você nunca está sobrepondo seus movimentos antigos. Vou deletar tudo isso. Compilar agora clique em Size to Fit, porque isso basicamente abrirá espaço para o novo estado que você adicionará Ok, agora temos isso aqui. Agora, para o agachamento, se não quisermos mais nos agachar, você pode pegar esse estado agachado arrastar a partir daqui e dizer remover E você pode escolher este chamado remover item e conectá-lo aqui. Quando não estamos mais agachados, basicamente queremos remover o agachamento desse item ou dessa matriz aqui Quando estamos agachados, adicionamos o item à matriz, ao último índice mais um, o que significa que não estamos sobrepondo ao último item que adicionamos, que talvez possa ser caminhar ou correr E então, quando não estamos mais agachados, queremos removê-lo dessa matriz porque não estamos mais agachados Ok, vamos compilar. copiar e colar tudo isso aqui. Copie e cole na caminhada. Vou deletar a velocidade de movimento e a caminhada. Vamos adicionar a velocidade de movimento mais tarde. Faça com que seja mais alavanca também. Vamos deletar tudo isso. Vamos colar esse código, conectá-lo e, para este, selecione a caminhada em vez disso. Se não estivermos mais andando, podemos pegar isso e dizer remova o item exatamente como antes e conectado. E você pode remover a caminhada. E vá em frente e organize um pouco mais. Certo, então temos a caminhada, agora estamos adicionando a caminhada. Apenas certifique-se de ter os valores corretos para caminhar e também para se agachar. Agachado, agachado Quando estamos agachados. Vamos adicionar o item quando estivermos caminhando. Também vamos adicionar o item. No entanto, agora, para a execução, não temos realmente um local onde possamos adicioná-la à execução. O que eu quero fazer é adicioná-lo por padrão. Se eu clicar no estado do movimento, quero clicar no sinal de mais aqui. E vou apenas adicionar a execução como padrão. Porque quando estou andando ou quando não estou agachada aqui e não estou andando, estou basicamente correndo Eu só quero ter esse estado de movimento como padrão. Quando não estou agachado e andando, ele funciona automaticamente Então você pode ver aqui, quando eu começar a andar, ele adicionará essa caminhada ao último índice mais um, que significa zero mais um. Isso aumentará a caminhada até aqui e nunca se sobreporá ao meu estado de movimento de corrida Agora que terminamos isso, na verdade terminamos com esse sistema. Você pode ver que está um pouco mais avançado, mas vai funcionar muito melhor do que antes. E você pode ver que quando fazemos uma enumeração, podemos reduzir a quantidade de variáveis que Porque agora, para se agachar, você pode clicar em Excluir Você pode simplesmente excluir isso. E para caminhar também. Agora você pode ver que só temos uma variável para o agachamento e para a caminhada posterior Se você quiser criar uma variável de sprint para o seu jogo, você pode entrar na enumeração, adicionar a variável de sprint e, para o sprint novamente, como antes, ir em frente e torná-la Assim como o agachamento e a caminhada, você pode adicionar o sprint desse jeito 40. 3.29 Mudando as regras de transição de animação: Agora que terminamos com esse sistema, vamos compilar, salvar tudo Vamos encerrar isso e, em vez disso, passar para o plano de animação do jogador Agora, aqui, recebemos alguns erros porque excluímos agachamento e a caminhada no gráfico de eventos do plano de animação Você pode simplesmente excluir esses, o agachamento e a caminhada, porque não precisamos mais o agachamento e a caminhada, porque não precisamos Você pode compilar e ver que os erros desapareceram. Em vez disso, o que queremos usar aqui direcionar a partir daqui e dizer que o movimento indica que queremos usar essa matriz que criamos. Vá em frente e pegue essa matriz. Você pode escrever lick it promovido para uma variável e simplesmente chamá-la de estado de movimento aqui dentro do esquema de animação Vá em frente e conecte-o. E conecte o is em Er junto com ele. E vá em frente e torne-o um pouco mais organizado. Agora, quando compilamos , ocorre um erro. Não tenho certeza do que ele realmente quer aqui. Se eu compilar novamente, você pode ver que ele desapareceu. Não sei, foi apenas um erro aleatório. Vamos ver o gráfico de animação. Dentro do gráfico de animação, vamos entrar aqui. Agora, queremos mudar todos os estados de movimento do primeiro , de inativo para andar, por exemplo Você pode clicar aqui usando esse lingote que usamos antes Vamos continuar e excluí-lo. Vamos considerar esse estado de movimento. Agora, para essa matriz, o que você pode fazer é pegá-la daqui e dizer get. Basicamente, só queremos começar a caminhar. Lembre-se, se eu voltar para o jogador só para explicar um pouco melhor. Em vez de quando estamos andando, estamos basicamente adicionando o item de caminhada a essa matriz. Agora, para a planta aqui, a planta da animação, queremos fazer essa caminhada Não sabemos realmente em que índice está, porque pode estar no índice zero. Pode estar no índice um. Lembre-se de que nunca pode estar no índice zero, porque no índice zero estamos sempre correndo. Portanto, pode estar no índice um ou dois para saber o que é isso. Em vez de apenas obter, você pode arrastar a partir deste aqui e obter o último índice. Lembre-se de que usamos esse na lição anterior e, em seguida, conecte-o aqui. Agora estamos obtendo o último índice. Lembre-se de que qualquer que seja o último índice é o botão atual que você está pressionando. Se eu estiver pressionando a caminhada, meu último indicador seria andar aqui. Se você receber isso e pedir para obter o último índice dessa matriz, esse último índice será igual. Assim, você pode escrever um sinal de igual e selecionar essa enumeração igual Se esse último índice obtido dessa matriz for igual a andar, isso é verdade. Isso significa que eu estou andando. Porque o último índice, se estiver andando, significa que estou pressionando o botão de caminhada e quero andar. Eu quero fazer a transição do inativo para passar por isso aqui e voltar e ir para este Vamos da caminhada para a marcha lenta, em vez de usar essa, não é andar Você pode copiar e colar o código que você escreveu antes e pode simplesmente colocá-lo em execução. Se o último índice for igual a corrida, significa que não estamos pressionando a caminhada, porque a removemos da matriz. E também não estamos pressionando o agachamento. Como o removemos da matriz, só nos resta o estado de execução. Se estiver funcionando, podemos seguir em frente e correr e isso estará correto. Ok, vá em frente e copie e cole isso para todos eles. Isso foi para caminhar. Agora, para que o inativo se agache, você pode clicar aqui Em vez de este ficar agachado, você pode colá-lo novamente Selecione agachamento, conecte-o. Volte e, do agachamento, execute, novamente, exclua esse passado, selecione o em execução e conecte-o Você pode ver que é muito mais fácil de usar, na verdade, mas este, do agachamento para andar, podemos deletar tudo isso Não precisamos dele agachado para andar. Isso significa que estamos andando. Podemos selecionar a caminhada. E conectou a mesma coisa da caminhada até o agachamento. Isso significa que estamos agachados. Podemos selecionar isso, selecionar agachamento e conectá-lo. Agora trocamos todos eles. Nós os trocamos E esse é só para pular. Nós realmente não precisamos trocar nada aqui. Vamos compilar e clicar em reproduzir. Vamos testá-lo. Você pode ver como jogador, eu posso clicar no controle, eu posso me agachar Se você segurar a tecla Shift ao mesmo tempo, verá que agora consigo andar enquanto estou segurando o controle e a tecla Shift ao mesmo tempo. Se eu largar o turno para agachar novamente, você pode ver que está funcionando E se eu soltar o controle, estou andando aqui agora, a velocidade de movimento não está correta e precisamos corrigir isso mais tarde. Mas você pode ver que agora posso pressionar vários botões. Se eu deixar o turno agora, posso andar normalmente. Eu posso segurar a tecla Shift novamente, segurar o controle ao mesmo tempo. Você pode ver que agora podemos segurar os botões ao mesmo tempo. E ele fará essa ação em vez de antes de soltarmos o botão, antes que ele possa fazer essa ação. Tudo bem, então vamos testá-lo também no cliente, só para ter certeza de que funciona no modo multijogador. Para o cliente, eu posso me agachar, para o servidor, eu posso me agachar e não está funcionando Se você se lembra do que eu disse, temos que replicar a variável antes que ela funcione Então, se voltarmos para o jogador , eu clicar no estado do movimento e clicar em Replicar. E replique, compile e clique em reproduzir como a pesquisa Novamente, se eu me agachar, você pode ver que funciona. E se eu andar, funciona de novo. Também podemos testá-lo para dois clientes apenas para ter certeza. Jogue como cliente e jogue. Agora temos dois clientes. Se você fizer o movimento, ele funcionará corretamente. Agora, novamente, para fixar a velocidade de movimento mais tarde. Mas agora você pode ver que tudo está funcionando corretamente. 41. 3.30 Fixando o tamanho do jogador: Antes de continuarmos fixando a velocidade de movimento, precisamos corrigir o tamanho do personagem. Porque agora você pode ver que, como personagem, se eu andar por aí, sou um personagem muito pequeno e temos que torná-lo maior. Não tenho certeza se meu mapa é muito pequeno ou se são esses personagens que eu importei do mercado. Eles são muito pequenos. De qualquer forma, isso realmente não importa. O que temos que fazer é aumentar o tamanho do jogador. Essa será a solução mais fácil. Vamos clicar na base de jogadores na malha. Lembre-se de que você precisa fazer isso na base de jogadores. Ele o aplicará automaticamente ao encontro terrorista, clicando o terrorista na base de jogadores. Clicando nesse personagem, tentei testar um pouco com os tamanhos. Eu tentei ampliar isso algumas vezes para ver o que há de melhor aqui. Mas se você clicar na malha e clicar nesse cadeado, você pode ver se você simplesmente escrever um número aqui, o y e o z não estão escalando junto com o x. Na verdade, não estão escalados Você pode clicar nesse cadeado. Isso significa que se você alterar um número, ele será alterado para todos eles. Extrema direita, 1.7 aqui, por exemplo. E você pode clicar em Compilar e clicar em Jogar Você pode ver que, se eu andar por aí agora, sou muito grande em comparação com o ambiente. Você pode tentar testar tamanhos diferentes. Tente percorrer seu ambiente e ver como ele se parece. Acho que talvez seja um pouco grande demais. Vou diminuí-lo para 1.6. Vá em frente, compile e clique em Play E tente andar agora pelo ambiente para ver como sua altura é comparada à das caixas. Você pode até dar uma volta por aqui e talvez andar nessa rampa para ver o tamanho e subir até aqui Acho que está muito melhor do que antes. Vou usar esse 11.6 se tivermos problemas mais tarde, sempre podemos alterá-lo e corrigi-lo mais tarde Podemos simplesmente mudar o número aqui. No entanto, acho que isso é bom agora. Também temos que consertar essa cápsula de colisão. Porque se eu correr agora, talvez eu vá até essa parte e entre aqui. Você pode ver que eu me sobreponho a tudo. E eu posso pular na parede. E isso é porque você precisa aumentar o tamanho dessa cápsula de colisão novamente. Se eu clicar aqui e ir para a vista certa, por exemplo, posso aumentar a metade da altura da cápsula, posso clicar no personagem. Mova o personagem para baixo para que o pé fique na parte inferior. Aqui você pode ver que eu tenho que aumentá-lo um pouco mais. Então, se eu clicar na cápsula de colisão novamente, aumente-a, talvez algo como 150 E eu posso clicar no personagem novamente, mover o personagem para baixo. Ele se encaixa muito melhor do que antes. Agora, isso realmente não precisa ser preciso. Nós vamos criar um sistema melhor mais tarde. Mas basta clicar aqui, verifique se o pé está na parte inferior. Aqui, você pode clicar nesta cápsula de colisão. Agora você provavelmente precisará ampliá-lo. Você pode clicar, clicar na vista frontal, agora temos que aumentar o raio um pouco. E vou torná-lo um pouco mais largo do que esses braços para que eles não colidam com os objetos Algo assim, talvez 60 exatamente. Podemos seguir em frente e clicar em jogar. Agora podemos andar por aí. É muito mais preciso do que antes. Você pode tentar entrar aqui e ver que isso não permitirá. Temos uma caixa pequena. Se você clicar no controle, poderá caminhar até aqui, mas eu também posso sair do controle e você pode ver que estou sobrepondo agora Temos que corrigir esses pequenos problemas mais tarde Mas você pode ver que geralmente tudo está funcionando bem, o tamanho do caractere é muito melhor do que antes. Então, vamos continuar. 42. 3.31 Definindo a velocidade de movimento: Agora que melhoramos nosso sistema de movimento, vamos definir a velocidade de movimento. Vamos encerrar isso. E eu vou voltar para o jogador na base de jogadores. Dentro daqui, o que eu quero fazer é criar uma nova função. Vamos clicar no sinal positivo aqui em cima. Vamos escrever F, definir a velocidade de movimento para esta função. Simplesmente o que eu quero fazer é pegar esse componente de movimento do personagem e definir a velocidade máxima de caminhada. Isso é simplesmente o que eu quero fazer agora. Quero definir essa velocidade máxima de caminhada dependendo se o jogador está correndo , andando ou agachado Agora, a maneira de fazer isso é direcionar a partir desta e dizer selecionar. E você pode ver esse chamado select. É a primeira vez que estamos usando esse. E este é muito, muito útil em jogos ou, aqui basicamente, em todos os jogos que você cria. O motor real com plantas permite que você selecione uma opção dependendo do que você conecta aqui Digamos, por exemplo, que você esteja conectando uma arma aqui. E dependendo da arma que você estiver conectando, você terá a velocidade de tiro ou quantas balas você tem nessa arma e assim quantas balas você tem nessa arma e Portanto, uma nota muito útil para usar neste caso. Vamos definir a velocidade de movimento dependendo se estamos correndo, agachados ou andando. Na verdade, precisamos dessa velocidade de movimento novamente Vamos obter o último índice exatamente como antes. Lembre-se de que o último índice é o botão mais recente que pressionamos . Vamos arrastar a partir daqui novamente e dizer pegue uma cópia, e vamos conectar este. Ok, agora estamos recebendo o movimento mais recente. Estamos pressionando o teclado e vamos arrastar a partir disso agora, em vez de antes, arrastamos e escrevemos da mesma forma e fizemos assim Agora, para a seleção, agora vamos simplesmente obter o último índice e ver o que o jogador está pressionando no momento E podemos arrastar a partir disso e conectá-lo aqui. E agora você pode ver a corrida, a caminhada e o agachamento. E a razão pela qual você vê isso é porque está simplesmente retirando dessa enumeração que escrevemos Se você adicionar mais coisas a essa enumeração, também adicionará mais opções O que quer que você adicione a essa enumeração, podemos ver que é muito útil agora, sempre que você estiver correndo, você pode ter essa variável de velocidade de execução Você pode arrastá-lo e conectá-lo aqui sempre que estiver andando, você pode conectá-lo aqui sempre que estiver agachado Na verdade, ainda não temos um. Vamos clicar com o botão direito do mouse nessa, transformá-la em variável e chamá-la de velocidade de agachamento Vamos continuar e compilar agora. Por enquanto, eu realmente não tenho números de movimento específicos, vamos ajustá-los mais tarde. Por exemplo, para a corrida, você pode escrever 1.000 para a caminhada, você pode escrever 500 para o agachado, você pode escrever Isso é só para ver se funciona e você pode seguir em frente e torná-lo mais organizado. Tudo bem, para este conjunto de velocidade de movimento, o que eu quero fazer é voltar ao gráfico de eventos. E vamos começar com o agachamento. Para o agachamento, estamos fazendo o agachamento aqui. E então precisamos pegar essa velocidade de movimento definida e configurá-la aqui. Também aqui embaixo, precisamos definir a velocidade do movimento, arrastando-a até aqui, definir a velocidade do movimento, porque quando não estamos mais agachados, novamente, precisamos pegar o último índice e ver se ele está correndo, andando ou se Precisamos fazer isso também para caminhar. Vamos arrastar novamente a velocidade de movimento definida. Conecte-o. E a mesma coisa aqui embaixo, defina a velocidade de movimento. Agora, quanto à corrida, não importa, porque se removermos a caminhada e o agachamento, ela correrá aqui como o último indicador e aumentará a velocidade de corrida Ok, vamos clicar em Play , testar e ver se tudo funciona. Então, aqui estou eu como servidor. Na verdade, estou correndo aqui para correr. Você também precisa alterá-lo primeiro. Aqui está o padrão no componente de movimento catal para a velocidade máxima de caminhada Como escrevi aqui que a velocidade máxima de caminhada seria 1.000 por padrão, vamos escrever 1.000 aqui também por enquanto. Então, eles são os mesmos aqui para a velocidade de caminhada, 500, tudo bem. Vamos clicar em play novamente, testado. Agora estou andando e é muito rápido. Vamos ajustar isso mais tarde. Crolick, mude para andar. Você pode ver que tudo está funcionando de forma agachada e deslocada ao mesmo tempo Você vê que há um erro, uma luta, agache-se ou pressione, agache-se e depois pressione a marcha Você pode ver que o movimento ainda está agachado. A razão pela qual isso é porque quando você está agachado, você escreve isso, você tem esse Você nunca se agacha, a menos que realmente remova o dedo do botão de agachamento realmente remova o dedo do botão de agachamento Na verdade, quando nos agachamos e andamos ao mesmo tempo, ainda estamos nesse estado agachado Na verdade, precisamos nos agachar para que a velocidade do movimento esteja correta Vamos voltar à velocidade de movimento definida. Na verdade, vamos nos agachar, se estivermos agachados para que pareça correto, o que vamos fazer é copiar isso aqui E vou estender isso aqui, copiar e colar. O que você precisa fazer é arrastar a partir disso e dizer igual, e precisamos ver se é igual a se agachar Precisamos perguntar se o jogador está agachado ou não? Se o jogador estiver agachado no momento, precisamos escrever esse agachamento Se o jogador estiver agachado, ou seja, se o último índice estiver realmente Mesmo que o jogador também pressione o botão de agachamento, mas o último indicador esteja andando, o jogador está andando no momento Na verdade, precisamos conectá-lo mais tarde. Nós podemos nos agachar. Quando removermos a caminhada, vamos conectá-los aqui. Esse é o agachamento E aqui nos agachamos. E podemos simplesmente ir em frente e conectá-lo aqui. Novamente, vou clicar e criar um nó traseiro aqui e vou conectar este aqui. Sim, isso parece correto. Agora, se eu me agachar, ele vai colocar o agachamento Se eu não estiver agachado, digamos que eu esteja pressionando o botão de caminhar ao mesmo tempo que pressiono o agachamento, ele realmente vai se agachar ele realmente vai se E então eu vou aplicar essa velocidade de caminhada. No entanto, quando eu paro de andar e ainda estou pressionando o botão de agachamento, ele simplesmente vai se agachar aqui Vamos clicar em Jogar e ver. Vamos clicar em Shift to Walk. Agora você pode ver se eu clicar em agachar e clicar em Shift ao mesmo tempo, você pode ver a velocidade do movimento se ajustar corretamente Se eu sair do turno novamente e me agachar, você pode ver que as velocidades de movimento estão se corrigindo aqui e eles estão corrigindo aqui e eles estão Se eu me deslocar, me agachar e depois me deslocar, ou então primeiro me deslocar e depois me agachar, você pode ver que Nossa velocidade de movimento está funcionando corretamente. Agora, o que basicamente fizemos foi fazer com que essa função definisse a velocidade de movimento. Agora estamos perguntando se o jogador está agachado ou não. E a razão pela qual fazemos isso é que, se não estamos fazendo isso e pressionamos primeiro o botão de agachamento, aplicaremos essa função de agachamento No entanto, se você ainda estiver pressionando o botão de agachamento e, em seguida, pressionando o botão de caminhada, ele ainda aplicado porque você nunca se agacha, nunca solta esse Basicamente, ele aplicaria o movimento errado, embora também tivesse definido o movimento para a velocidade de caminhada. Só estamos perguntando aqui, estamos agachados ou Se estivermos agachados, continue agachados. Se não estivermos agachados, certifique-se de nos agachar antes de fazer tudo isso Porque se você não se agachar, você ainda está aqui. Estamos apenas nos certificando de que estamos aplicando o movimento correto. Agora que a velocidade de movimento terminou, podemos salvar tudo e passar para a próxima lição. 43. 4.01 Aim Offset Blend Space: Agora estamos prontos para criar o Aim Offset. Para que o jogador crie o Aim offset, vamos voltar para a pasta do player Dentro daqui, vamos voltar às Animações. E vamos clicar com o botão direito aqui, vá para Animação. Agora temos algo chamado deslocamento de objetivo, mas também temos um mais simples chamado deslocamento de objetivo D. Isso é a mesma coisa que o espaço de mesclagem Na verdade, você tem algo chamado espaço de mistura. Um D para este, estou apenas mostrando para você rapidamente para o espaço de mistura. Por exemplo, você pode ver antes que tivéssemos o movimento em oito direções, mas um D é apenas passar de caminhar para correr, um espaço de combinação muito simples. Agora, para o deslocamento Am, deixe-me excluir este clique com o botão direito novamente. Em vez de fazer o movimento oito, vamos até o legado e usar o deslocamento Aim Um D. Vou selecionar meu esqueleto novamente e chamá-lo de O, fique desarmado Vamos clicar duas vezes nesse. Esse é o deslocamento do Aim. O offset Aim, muito, muito básico. Nosso único objetivo aqui é o centro onde estamos ansiosos. E o jogador está olhando para baixo. E o jogador está olhando para cá. O que precisamos fazer, assim como o espaço de mesclagem, temos um eixo horizontal. Essa é a nossa direção. Nós podemos escrever a direção. O valor mínimo para a direção é -90 Isso é quando estamos olhando para baixo, o máximo é 90, é quando estamos olhando para cima para ver a velocidade do peso Vou aplicar exatamente como antes o que fizemos com os espaços de mistura. Vou aplicar um pouco de suavidade para que fique melhor E agora estamos prontos para aplicar a animação. Vamos salvar tudo. Agora você pode ver que eu também importei para você os offsets do Aim Se você pegar um deles, por exemplo, vamos fazer esse. Você pode ver que quando tento arrastá-lo, ele diz um tipo de animação aditiva inválido Então, precisamos corrigir isso. E vamos para a próxima lição para corrigir esse tipo de aditivo 44. 4.02 Preparando as animações de deslocamento de meta: Antes de podermos usar nossos offsets de Aim, precisamos prepará-los. Então, vamos às animações dos ativos. E é aqui que estão todas as suas animações. Lembre-se, não está dentro das animações que eu te dei É dentro desses recursos e animações que abordamos anteriormente Por exemplo, vamos pesquisar um deslocamento de animação. Se você simplesmente escrever AO aqui, verá todos os deslocamentos da animação Agora você pode clicar em um deles e aqui você pode ver esse, por exemplo. Esta é a pistola voltada para frente, pistola central agachada. Para este, você pode ver o tipo de aditivo, é disso que ele estava falando Neste caso, você precisa clicar aqui e configurá-lo para o espaço de malha. Então você precisa clicar aqui e dizer o quadro de animação selecionado. Agora você precisa selecionar o ídolo para esta animação. O ídolo dessa animação é o ídolo pistol crouch, que podemos Se você acabou de pesquisar por ídolo, esse aqui, animation crouch Certifique-se de escolher isso para seu esqueleto redirecionado e não para a pistola Crouch Idol padrão de animação manqin Isso seria o correto para este. Vamos em frente e economizemos agora para este. Você pode ver se eu o fecho e volto às animações do meu player Abra-a aqui, você pode ver se eu volto para a pistola do sensor, se consigo encontrá-la aqui Esse aqui. Pistola com sensor de agachamento Agora, se eu arrastá-lo até aqui, você pode ver que está funcionando. Temos que fazer isso com todos eles. Você pode ver que os outros também são inválidos para o tipo aditivo Deixe-me deletar este por enquanto. E temos que fazer isso por todos eles. Agora, há uma maneira mais fácil de fazer isso. Se você clicar novamente nos Ativos, nas animações, você procura o AO novamente. Agora você pode clicar no primeiro, Hold Shift. Clique no último, você pode escrever, clicar em Ir para ações de ativos e, em seguida, clicar em Edição em massa por meio da matriz de propriedades. Dentro daqui, você pode editar as configurações de todas elas de uma só vez. Um truque muito útil para fazer isso. Aqui você pode ver que também pode editar outras configurações, como compressão, animação. Você pode editar coisas assim, mas, por enquanto, estamos interessados apenas nas configurações aditivas aqui Vamos ver aqui, o tipo de animação aditiva. Você pode clicar aqui e configurá-lo para mesclar espaço para todos eles. Para todos eles, você pode clicar aqui e configurá-los para o quadro de animação selecionado. Agora, para a animação da pose básica, ela não pode ser a mesma para todas porque algumas delas têm uma pistola, um rifle e assim por diante Então, vamos fechar tudo. Agora que temos as configurações básicas definidas, podemos salvá-las primeiro. Agora, o que podemos fazer, por exemplo, vamos começar com a pistola de agachamento. Clicando neste. Também estou clicando nesta agachamento para baixo e na pistola de agachamento Só temos três para cada pistola centralizada para baixo e para cima. Agora podemos clicar neles aqui, clicar com direito do mouse em Ações ácidas editadas em massa por meio da matriz de propriedades. Novamente, podemos acessar as configurações aditivas. Clique neste botão aqui, nesses quadrados aqui. Precisamos encontrar a animação inativa dessa pistola rabugenta. Podemos ver que é a pistola de agachamento. Precisamos encontrar o inativo. Para a pistola crouch idle. Agora está correto. Vamos fechá-lo. Temos que fazer isso também com o rifle aqui. Clique no agachamento do rifle, no agachamento rifle e no agachamento Clique com o botão direito em Actions Bulk Edd via matriz de propriedades. Vá para as configurações aditivas. Clique nos quadrados. Agora precisamos encontrar o agachamento. Para o rifle, agache-se, atire aqui. Feche-o novamente. Você pode ver que é exatamente o mesmo método, mas temos que fazer isso várias vezes. Agora é para os desarmados. Essa. Esse e esse. Clique com o botão direito do mouse, editado em massa por meio das configurações aditivas da matriz de propriedades . Clique aqui e depois pesquise por idle. Agora precisamos encontrar o agachamento para os ociosos, desarmados, desse jeito Então, eu vou fazer a mesma coisa com o estande também. E eu posso ver que este tem um nome errado. Então, vou renomeá-lo antes de continuar. Este se chama AO, fique desarmado. Em vez disso, agora vou aplicá-lo no suporte, exatamente como se estivesse agachado E eu vou pular em frente. No momento, eu preparei todos eles para que você possa ver se você apenas procura por um deles, por exemplo, o rifle de suporte AO, você pode clicar nele e agora você pode ver que aplicou Animation Idol Apenas certifique-se de aplicar a animação inativa correta, caso contrário, ela estará errada. Então eu fiz isso em todo o estande aqui, bem como no agachamento Agora vamos salvar tudo e passar para a próxima lição. 45. 4.03 Adicionando animação ao deslocamento de meta: Vamos agora criar o deslocamento Am para os movimentos desarmados Vamos ver as plantas. E vou voltar novamente para a pasta de animações. Na verdade, vamos fazer isso para depor primeiro. Antes de fazermos os outros, vamos clicar neste suporte desarmado aqui dentro Lembre-se de que fizemos a direção e fizemos a suavidade do peso aqui Agora, o que podemos fazer é pesquisar AO para este. Agora é o stand desarmado. Eu preciso do movimento desarmado. Então, o estande começa daqui até aqui. Eu preciso do centro Primeiro, vamos pegar o centro desarmado Clique, arraste e segure a tecla Shift e, em seguida, ela se encaixará aqui Agora, para o -90 na direção em que está olhando para baixo, precisamos deste chamado stand, que significa clicar desarmado, arrastar e segurar a tecla Shift para encaixá-la Então, para o movimento ascendente, fique de pé, desarmado, segure a tecla Shift e conecte-a aqui Agora, ao clicar no controle e mover o mouse, você pode ver que esse deslocamento de animação está sendo executado. Isso está ótimo. Sempre podemos ajustar o quão longe ele está olhando para baixo e o quão longe ele está olhando para cima mais tarde, se quisermos, se acharmos que isso parece um pouco ridículo Então, sempre podemos fazer isso assim em vez disso. Sempre podemos ajustá-lo mais tarde. Mas, por enquanto, vamos salvar tudo. Isso está funcionando agora, vamos fazer isso para os outros. Na verdade, vou clicar com o botão direito do mouse neste e duplicá-lo E vamos chamá-lo de braço rabugento. Agora, para caminhar, é na verdade o mesmo que ficar em pé. Nós realmente não precisamos de um para caminhar. Agora que temos isso duplicado, vamos clicar duas vezes nele Deixe-me deletar este por enquanto. Agora, esse é o agachamento. Vamos procurar o agachamento aqui, o braço central agachado, o braço agachado para baixo e o braço agachado para cima . Agora você pode ver que isso também está funcionando. Ok, vamos em frente e salve tudo agora. Vamos fazer isso mais tarde pistola e o rifle de agachamento e assim por diante, mas por enquanto não precisamos realmente deles Vamos descer o colosso agora. Antes de podermos aplicar esses deslocamentos de animação, precisamos calcular a direção da mira Precisamos saber em que direção o jogador está mirando, se está para cima ou para baixo. E vamos fazer isso na próxima lição. 46. 4.04 Calculando a direção do objetivo: Tudo bem, agora é hora de calcular a direção da mira. E podemos fazer isso de forma muito simples indo até o jogador. Agora, indo para a base de jogadores daqui, vamos realmente criar uma nova função. Vamos criar uma nova função chamada calcular a direção da mira. Para esta função, deixe-me compilá-la e voltar ao gráfico de eventos O lugar onde eu quero colocar isso, faz mais sentido para esse evento de look. É aqui que controlamos o movimento do mouse quando estamos no jogo. Faria mais sentido colocá-lo aqui, na verdade, depois deste, deixe-me arrastá-lo, calcular uma direção e conectá-lo aqui. Agora, basicamente, o que queremos fazer é definir uma flutuação chamada direção da mira Vamos fazer um novo flutuador chamado direção de mira. E vamos transformá-la em uma variável flutuante. Opa, número inteiro. Flutue, compile e salve. Agora, dentro disso aqui, vamos seguir essa direção de mira. Nós simplesmente queremos configurá-lo. Agora lembre-se do que eu disse antes, no modo multijogador, você nunca pode definir uma variável para um cliente. Você precisa estar no servidor para definir uma variável e depois configurá-la para replicá-la Você precisa configurar este para replicá-lo, porque os clientes precisam saber em qual direção os outros jogadores estão mirando. As animações são atualizadas corretamente para todos os clientes conectados O servidor precisa replicar essas informações de volta para os clientes Caso contrário, os clientes não conseguirão ver em qual direção todos os jogadores estão mirando. E eles só estarão ansiosos. E é como se nada estivesse acontecendo quando você define variáveis e as coloca para replicá-las Você nunca pode definir e replicar variáveis por meio do cliente, tem que ser executado pelo servidor Agora você pode ver se eu escrevo uma string de impressão a partir disso. Agora vou te dar um truque para saber quando você está no servidor e quando está no cliente. No momento, ele deve imprimir uma string automaticamente quando eu mover meu mouse, porque eu o conectei aqui e ele será conectado aqui se eu compilar agora, e eu clico em reproduzir e movo o mouse Quando eu movo meu mouse, estou no cliente. Você também pode ver que estou jogando como cliente aqui para que o cliente possa realmente executar esse código. Quando o cliente consegue imprimir código, significa que esse código que você está escrevendo também está sendo executado no cliente. Você pode ver quando eu jogo como servidor, na verdade, é o segundo cliente. Agora, deixe-me alterá-lo aqui para jogar como servidor de escuta. Em vez disso, deixe-me clicar em Play. Agora estou jogando como servidor e você pode ver que agora é o servidor imprimindo a string na tela quando estou jogando como cliente. Deixe-me jogar de novo e pegar esse cliente. Agora você pode ver que o código está sendo impresso como cliente. Quando você também pode imprimir uma string por meio do cliente, isso significa que esse código é executado pelo servidor e pelo cliente, e não apenas pelo servidor. Quando precisamos definir essa variável, precisamos ter certeza de que estamos executando no servidor. O que podemos fazer, novamente, como antes, pegar isso e dizer que o switch tem autoridade. Estamos nos certificando de que estamos executando isso apenas no cliente do servidor. Você ainda precisa executar o código. Se você for o cliente, primeiro precisará executar o servidor. Vamos voltar ao gráfico de eventos. Eu só vou voltar aqui. Vamos organizar isso mais tarde. Aqui embaixo, podemos escrever eventos personalizados e executá-los no servidor. E eu vou chamá-lo de Calcular uma direção. E vamos executar isso no servidor e ser confiáveis. E eu vou pegar isso, calcular uma direção e conectá-la aqui. Vá em frente e compile agora, vamos voltar ao cálculo de uma direção E vamos rodar esse servidor, calcular a direção da mira aqui embaixo. E então podemos continuar o código. Quando você é o cliente, você vai até o servidor e executa isso. E isso garantirá que, como cliente, você nunca possa executá-lo sozinho. Tem que passar pelo servidor. Ok, agora para a direção da mira, como podemos calcular essa primeira lista, clique com o botão direito e diga rotação de controle. Agora estamos obtendo a rotação do controle do player. Então, podemos dizer: obtenha a rotação do Acta. Temos a rotação para o controle do player e temos a rotação para o ator. Agora, o que podemos fazer para encontrar um ponto médio, precisamos encontrar esse ponto médio para saber onde o jogador está mirando Podemos pegar isso e dizer delta e escolher esse chamado rotador delta Você pode conectá-lo, é por meio da rotação do controlador do player e da rotação do ator. Ele vai encontrar um ponto médio através desse rotador delta Agora vamos dividir isso aqui, rotadores. Quando você quebra um rotador, você pode ver o X, Y e Z. Você também pode simplesmente fazer isso Se você escrever, clique aqui e diga split struct pin, na verdade é a mesma coisa Eu só gostaria de me dividir aqui. Então eu vou escrever break, Break rotator. E eu posso ver o XY e Z para a direção da mira, precisamos do y, do Y Você pode pegá-lo e conectá-lo aqui. Agora você está realmente calculando a direção da mira corretamente. Você pode ir em frente, compilar e salvar tudo. Agora estamos prontos para aplicar isso ao plano de animação e fazer com que nosso player com o deslocamento Am funcione 47. 4.05 Adicionando o deslocamento de meta: Vamos agora adicionar o deslocamento de mira ao plano de animação Volte para a pasta de animações e abra o esquema de animação do player Aqui, vou voltar ao gráfico de animação. E a partir daqui, vamos realmente desconectar isso. Vou te mostrar um truque com este. Para essa máquina de estado, você pode realmente arrastar e dizer Cache e clicar nessa . Salvar em cache Deixe-me chamar isso de Movimento Desarmado em Cache. O que é isso, é só pegar a locomoção, toda essa máquina de estado, e salvá-la por meio desse cache Está salvando isso aqui dentro. Em vez de pegar este, podemos simplesmente usar o cache. Vamos colocá-lo aqui. Em vez de usá-lo novamente, vamos clicar com o botão direito do mouse e dizer movimento desarmado Você pode ver que pode usar este. Usei o movimento desarmado do cache aqui. Agora você pode usar isso em vez deste aqui em cima. Vamos clicar com o botão direito do mouse e pesquisar por AO. Deixe-me realmente lembrar como eu o chamei. Vamos usar esse suporte de 10 desarmados. Vamos procurar por O, Stand desarmado e ter certeza de que é isso. Jogador de offset à 1h Um jogador de offset, fique armado. Assim como o chamamos aqui. Nós o chamamos de braço de suporte AO. Vamos conectar isso como poste base, o movimento desarmado com o deslocamento de animação desarmado Vamos conectá-lo aqui. Quanto à direção da mira. Lembre-se de que já calculamos isso. Precisamos ir até o gráfico de eventos , arrastar o jogador e procurar a direção da mira. Esse aqui. Vamos novamente promovê-la para uma variável aqui dentro do projeto e chamá-la de direção Vamos conectá-lo aqui no final do gráfico. E deixe-me clicar duas vezes para torná-lo um pouco melhor. Tudo bem, vamos compilar. E agora eu posso voltar para o gráfico de animação. E dentro daqui, a direção que estou tomando é essa direção de mira, conectando-a E agora vamos compilar. Agora, quando clicarmos em play, vamos ver se funciona. E você pode ver que funciona. Agora, se eu olhar para baixo e olhar para cima , está realmente funcionando. 48. 4.06 Adicionando câmera ao jogador: Agora, quando vamos jogar o jogo, você pode ver que a câmera está apenas flutuando e não está realmente seguindo a cabeça quando olhamos para cima e para baixo. Para fazer isso, vamos voltar aqui. Vamos colocar a câmera na cabeça do personagem. Para fazer isso, precisamos encontrar o esqueleto do nosso personagem agora mesmo Está dentro do mercado, dentro do personagem militar Silva, e esse é o esqueleto que temos usado até agora Deixe-me clicar duas vezes nele aqui. Dentro desse esqueleto, vamos encontrar o osso da cabeça Você pode simplesmente ir até aqui e tentar procurar o osso da cabeça, e você pode ver que está aqui embaixo. Você também pode simplesmente procurá-lo aqui. Um terceiro método é clicar no personagem aqui em cima. Vá para Bones e vá para All Hierarchy. Isso mostrará todos os ossos do personagem. Você pode simplesmente clicar no osso da cabeça. E você pode ver que também será selecionado aqui. Quero clicar no personagem novamente e ir até Bones. E selecione-o apenas para que eu possa remover esses ossos novamente. Agora que você selecionou o osso da cabeça, vamos clicar com o botão direito do mouse aqui e criar um soquete Adicione um soquete para um soquete. É apenas um suporte vazio que você pode usar para anexar itens a ele. Nesse caso, vamos usar esse suporte para conectar nossa câmera à cabeça. Você também pode imaginar que também pode usar isso para armas. Por exemplo, se digamos que você queira conectar um AK 47 ao lado do personagem, você sempre pode adicionar um soquete ao lado do personagem aqui, talvez até o quadril E então você também pode conectar a arma por meio de um soquete Mas, por enquanto, vamos apenas adicionar uma câmera. Vamos endireitar esse osso da cabeça, vá para Adicionar soquete E deixe-me clicar nele e clicar em dois no meu teclado para renomeá-lo E deixe-me chamá-lo para soquete e câmera. Ok, essa câmera de soquete, nós a temos agora, vamos perder tudo Agora vamos voltar ao projeto. Vá até o jogador e vá para a base de jogadores. Ok, dentro daqui. Vamos voltar para a janela de exibição. E agora queremos conectar essa mola à cabeça ou à cabeça ou à câmera do soquete que acabamos de criar aqui nos soquetes, você pode ver no painel de detalhes, ao selecionar a mola, você pode ver a seção do soquete e também pode ver que ela não está conectada a Agora, se clicarmos nessa pasta, você poderá ver o soquete Agora, se você não vê isso é porque você não tem essa mola dentro desse componente de malha. Se eu arrastar isso para fora daqui desse jeito, você pode ver se eu clicar nesta pasta, agora nada acontece. Você pode ver que precisa colocar o braço de mola no personagem. É um filho dessa malha. Antes que você possa realmente clicar aqui e ver tudo isso, você também pode clicar no condomínio terrorista, por exemplo Quando você clica no contraterrorista, você realmente não pode clicar aqui na primavera para falar sobre o contraterrorista, você tem que fazer isso por meio dos pais Então, na base de jogadores, isso é possível. Você terá o braço de mola dentro da malha. E então, para o braço de mola, podemos clicar aqui e selecionar a câmera. Lembre-se de que, se você não tem nada na malha, por exemplo, aqui você não tem nada, você a limpou e não tem um personagem parado aqui, então você também não encontrará o soquete aqui É por isso que na base de jogadores precisamos que um personagem esteja aqui, porque precisamos clicar aqui e depois adicioná-lo a um soquete Clique nesta câmera. Agora, a câmera está conectada ao personagem. Você pode ver que está realmente se movendo com o movimento da cabeça. Na verdade, está anexado. Agora é mais realista. Agora está flutuando. Vamos clicar na mola para ver o comprimento do braço alvo. Vou escrever zero, já que é um jogo em primeira pessoa. Em seguida, para a localização e a rotação, basta clicar nessas setas para redefinir a localização e também a rotação Você pode ir em frente, compilar e salvar tudo. Vamos clicar em Play e ver como fica. Você pode ver que estamos dentro da cabeça do personagem agora, mas quando eu olho para baixo e olho para cima, você pode ver que ele está seguindo a cabeça. Agora, quando eu fico parada e olho como se estivesse na minha frente, você pode ver que ela também está seguindo a cabeça. A câmera está se movendo um pouco da mesma forma quando eu corro. Na verdade, está se movendo com o mesmo movimento da cabeça. Ok, agora está anexado ao nosso player. Vamos voltar e agora vamos tentar ajustar o soquete. Se você abrir o esqueleto novamente, eu volto para o personagem militar Silva, abro o esqueleto E dentro daqui, vamos clicar na câmera do soquete. E eu vou ficar na frente aqui e tentar ajustar o soquete Você pode ver o soquete Depois de selecioná-lo, você também tem a localização relativa Você pode clicar e arrastar aqui. E eu só estou tentando ajustá-la perto dos olhos porque a câmera está realisticamente perto dos olhos do personagem Talvez dez no X e no Y e no Z. Está tudo bem agora Deixe-me, vamos jogar novamente para ver como é. Agora estamos dentro da cabeça do personagem. Se olharmos para baixo, se olharmos para cima, parece bom. No entanto, a cabeça do personagem está no caminho. Também posso ver que os lados do personagem estão atrapalhando. Deixe-me realmente voltar. Deixe-me empurrar a câmera um pouco para frente. Se você clicar e arrastar isso, verá que está deslizando a câmera para frente No entanto, não quero avançar muito. Eu só vou escrever cinco em vez de zero. Deixe-me tentar jogar novamente. Parece melhor. Agora, no entanto, ainda podemos ver partes da cabeça. O fato é que não podemos ver o corpo dentro do nosso personagem aqui. Tudo está indo bem. No entanto, a cabeça está no caminho. Na verdade, vamos na próxima lição e remover a cabeça desse personagem. Somente o inimigo pode ver sua cabeça, mas você, como jogador, não consegue ver a cabeça, é assim dentro da câmera. Vamos continuar na próxima lição e fazer isso. 49. 4.07 Escondendo o líder do modelo do jogador: Para esconder a cabeça do personagem para o jogador, você pode ir até o jogador novamente. E vamos abrir a base de jogadores. O que queremos fazer é remover essa cabeça para mim como jogador. Quando eu interpreto meu personagem, no entanto, os inimigos ainda conseguem ver minha cabeça aqui em cima. A razão pela qual eu removo a cabeça para mim é porque quando eu sou o personagem em primeira pessoa aqui, eu tenho a câmera. Na verdade, está dentro da minha cabeça, certo, e eu não quero ver tudo isso, não é necessário. Agora vamos remover a cabeça do jogador que está interpretando o personagem. Vamos ver o gráfico da van aqui dentro. Vamos fazer isso aqui no início do Play. Quando começarmos a jogar aqui, você pode clicar com o botão direito do mouse e terá uma função chamada ocultar ou por nome. Esconda o osso pelo nome. E selecione isso. E ele vai criar essa variável de malha para você automaticamente. Essa variável é simplesmente dessa variável de malha. Você pode simplesmente clicar e arrastar isso para dentro. É o mesmo. Ok, então vamos em frente e conectá-lo. Agora ele pergunta: qual osso você tenta esconder? Agora, se você voltar para o seu esqueleto, você está tentando esconder o osso da cabeça Se você clicar nele, verá que se chama cabeça. Você tem que escrever exatamente como está escrito aqui. É sensível a maiúsculas. Você tem que escrever exatamente como está aqui. Se eu escrever uma cabeça assim e clicar em Compilar, e se eu clicar em Plate para jogar, você verá que a cabeça sumiu para mim E eu também posso ver isso na minha sombra. Você pode ver que a cabeça sumiu. E, na verdade, está parecendo melhor. Agora, como personagem em primeira pessoa que consigo conhecer, tudo está bonito, nada está funcionando. Sim, é incrível. No entanto, do lado do personagem, eu posso ver isso, acho que é o rádio do personagem que está realmente aparecendo para consertarmos isso. Você sempre pode voltar para o jogador aqui se tiver algo para seu personagem que ainda esteja aparecendo. E clique no soquete da câmera. E então você pode clicar no Y novamente e aumentá-lo um pouco até que não esteja mais incomodando. Se você simplesmente aumentar isso para algo como dez e clicar em jogar. E se eu olhar para baixo e andar de lado, você pode ver que não consigo mais ver o rádio. No entanto, não aumente muito dessa forma , porque se você aumentar demais para frente, a câmera está realmente atravessando paredes. Se eu clicar em jogar agora , vejo que está atravessando paredes porque eu o aumentei demais. Não aumente muito esse. Talvez, em vez de cinco, eu queira experimentar seis e ver se isso resolve meu problema. Se eu andar por aí e ainda ver o rádio um pouco, posso aumentá-lo para sete. Em vez disso, tente clicar em reproduzir novamente. Tente jogar com o valor mínimo para ver se isso resolve o problema. Eu posso ver que sete é o número certo para mim, e tudo está indo bem. No entanto, você pode ver minha sombra, estou sentindo falta da cabeça. Então, também precisamos corrigir isso. Vamos prosseguir na próxima lição e corrigir tudo isso. 50. 4.08 Adicionando uma malha de terceira pessoa: Ok, agora vamos consertar a cabeça perdida na sombra. Então, vamos em frente e vamos até a base de jogadores. Deixe-me entrar aqui, como podemos corrigir isso é que podemos realmente adicionar outra malha de terceira pessoa. Se você clicar na malha, acessar Adicionar e pesquisar por malha esquelética Agora, se você não sabe o que é uma malha esquelética, se você é novo aqui, é simplesmente um modelo em três D que está animado no momento Por exemplo, a malha do seu personagem é animada. Essa malha, se você segurar o mouse sobre ela, diz que o componente da malha esquelética é simplesmente um modelo em três D animado Isso é uma malha esquelética. Vá em frente e crie-o novamente. Vamos chamar isso de personagem de terceira pessoa, ou malha de terceira pessoa, aqui dentro. O que queremos fazer, novamente, selecionar o personagem e temos que selecionar esse estilo, um homem como este. Em seguida, temos que selecionar o plano de animação aqui. Reprodutor de esquemas de animação. Agora você pode ver que está animando exatamente como nossa malha aqui O que realmente queremos fazer é esse personagem. Não queremos que nosso próprio jogador veja esse. Se você clicar em jogar, agora poderá ver que a cabeça está de volta. A razão pela qual a cabeça está para trás é porque agora temos essa malha que estamos vendo no jogo, mas também temos essa malha. essa malha de terceira pessoa, na verdade não queremos que as pessoas a vejam, porque eu só estou adicionando isso para ver minha sombra no chão e corrigi-la da outra. Para esconder isso para todos os jogadores, podemos clicar nessa malha de terceira pessoa. E então podemos descer e tentar acessar as configurações de renderização Você pode ver nas configurações de renderização, você pode clicar em Oculto no jogo Agora está escondido no jogo. Se você clicar em jogar, poderá ver que agora a cabeça sumiu. No entanto, minha sombra também desapareceu. Eu preciso consertar isso também. Se você clicar na malha de terceira pessoa novamente e pesquisar por sombra, você terá essa chamada Sombra oculta. Eu posso ver a sombra do meu item escondido, minha malha escondida em terceira pessoa. Se você clicar na sombra oculta, você compila. Você pode clicar em Jogar. Meu personagem está escondido. No entanto, eu também posso ver a sombra no chão agora. Agora está funcionando corretamente. Agora isso está corrigido. E vamos voltar apenas para garantir que não haja nenhuma colisão esse personagem, porque não queremos que esse modelo de personagem colida com a malha aqui em cima Ao clicar nessa malha de terceira pessoa, vou até as configurações de colisão e me certifico de que ela diz que pode se caracterizar , vou dizer não aqui E certifique-se de que você não tenha gerado eventos de sobreposição ativados E certifique-se de que você não tenha nenhuma colisão como predefinição de colisão. Vamos compilar tudo. Vamos salvar tudo e passar para a próxima lição. 51. Suavização de câmera e FPS 4.09: Quando estamos jogando, há uma perna leve, talvez eu não tenha certeza se você pode notar agora, mas se você simplesmente correr e tentar mover o mouse para cima e para baixo, às vezes parece que está um pouco lento Para corrigir essa rotação, você pode tentar fechar o jogo agora mesmo. Vá até o player e aqui você pode clicar na mola. Se você clicar na mola, poderá habilitá-la aqui abaixo desta chamada ativar a rotação da câmera Le. Isso suavizará a rotação da câmera. Se você brincar e sentir que, na verdade, está um pouco lento Você pode realmente se sentir lento quando tento girar minha câmera Para corrigir isso, você pode ativar a rotação da perna da câmera, que suavizará a rotação da Você pode ouvir a perna de rotação da câmera, você pode tentar definir um número. Se você configurá-lo muito, muito alto, poderá ver como é. Não está acontecendo muita coisa aqui. Se você talvez o coloque em um e tente jogar novamente, você pode ver que agora é muito suave assim. Isso é demais. Você pode ver que está tentando suavizar a câmera. Isso é demais. Eu tenho que aumentá-lo para talvez algo como dez e você pode tentar ver como é. No entanto, se você colocá-lo muito baixo, verá que é liso, mas parece um pouco lento e provavelmente causará enjôo Deixe-me colocá-lo em algo como 30. Em vez disso, eu compilo e tento girar. Eu só quero que pareça natural. Ainda é um jogo de tiro em primeira pessoa e não queremos colocá-lo muito alto ou muito baixo aqui, talvez colocando 40 em vez disso Apenas tente continuar jogando novamente. Tente aumentar o número. Tente olhar em volta e ver como é. Ainda parece um pouco, talvez algo como 60. E vou tentar dar uma olhada. Parece muito mais natural, assim como um jogo de tiro em primeira pessoa Vamos tentar ajustar esse número aqui. Você não quer que seja muito baixo, senão a câmera ficará muito lenta e tudo bem, isso foi corrigido. Agora vamos até a janela ou editemos, na verdade, e vamos até as Configurações do Projeto aqui dentro. Se você pesquisar por suavidade, terá algo chamado taxa de quadros suave. Você precisa ter isso ativado para o seu jogo se quiser lançá-lo em outro lugar, por exemplo, no Steam ou para um amigo. A razão pela qual isso é um erro que cometi quando lancei o Fm tail no Steam. Se você não tiver esse limite, se não tiver isso ativado , o jogador que está jogando seu jogo executará seu jogo no máximo de quadros por segundo. Depende da placa gráfica que eles têm. Se eles tiverem um jogo muito, muito bom, talvez seu jogo rode a 800 quadros por segundo e, na verdade, use muitos recursos para o computador deles. Provavelmente, você pode ouvir o computador emitindo muito som dos ventiladores porque a placa gráfica está funcionando demais. Você precisa habilitar isso para evitar que o jogo executado e use todos os recursos do jogador. Vá em frente e use essa taxa de quadros suave. No mínimo, vou colocá-lo em 30 quadros por segundo , no máximo. Normalmente eu coloco em 60 quadros por segundo. Para outros jogos, no entanto, este é um jogo de tiro em primeira pessoa, você precisa de mais quadros por segundo Talvez eu coloque em 200 como o máximo de quadros por segundo. Acho que 200 é bom. Eu não acho que você precise de mais do que isso. Vamos fechar isso e salvar tudo. Vamos passar para a próxima lição. 52. 5.01 ajustando a velocidade de movimento: Agora estamos prontos para ajustar a velocidade do movimento. Você pode ver que, ao clicar em jogar , está funcionando muito rápido. Portanto, se estiver executando um jogo, você pode tentar ter uma ideia de quão rápido deseja executar o jogo. Agora, para mim, isso é muito rápido. Realmente depende do jogo que você está criando. Agora, se você estiver criando um jogo rápido, essa execução pode até ser muito lenta para você Para mim, estou apenas criando algo próximo ao contra-ataque Na verdade, não 100%, mas alguma coisa. Vou reduzir um pouco essa velocidade de movimento. Eu acho que é muito rápido. Eu posso ir aqui na minha base de jogadores, o componente do personagem. E então eu posso diminuir minha velocidade máxima de caminhada. Agora vou diminuí-lo para algo como 700. Eu tento jogar algumas vezes e tento ajustar esse número. E então você precisa clicar em Jogar novamente. E só para correr até aqui e tentar ver como é. Agora continue jogando o jogo. Tente aumentar e diminuir o número de velocidade e ver como é. Eu acho que para mim isso é bom. Talvez eu possa realmente aumentá-lo para 750 e tentar jogar novamente. Acho que 750 é o número certo. Ok, então, quando você está pesado com este, você também pode se lembrar de que também tem essas variáveis flutuantes para a velocidade Na verdade, deixe-me clicar e arrastar isso até aqui, para que eles fiquem juntos. Você também pode clicar nessa velocidade de execução e configurá-la para 750. Continue e compile agora. Para a velocidade de caminhada, vou configurá-la para algo como 400 E para a velocidade de agachamento, algo como 200. Mais uma vez, tentei jogar meus jogos algumas vezes. Eu conheço esses números. Você precisa, novamente, definir a velocidade de caminhada para alguma coisa. Em seguida, você precisa clicar em Jogar. Então você precisa clicar em Shift to Walk e tentar ver se essa velocidade de caminhada é boa para você. Ou se você quiser que seja um pouco mais rápido. Apenas tente jogar seu jogo repetidamente e tente ajustar esses números. Agora, se eu jogar meu jogo e correr por aí e tentar ter uma ideia de como ele é rápido, se eu clicar em Shift para andar por aí, acho que também está bom. E se eu clicar no controle e tentar ver como fica, acho que essa velocidade também parece boa para mim. Ok, então vamos fechar tudo isso agora que a velocidade de movimento foi ajustada. E também vamos ajustar a velocidade da animação na próxima lição. 53. 5.02 Ajustando a velocidade da animação: Quando ajustamos a velocidade do movimento, também precisamos ajustar a velocidade da animação, caso contrário, ela parecerá incorreta. Se clicarmos no jogador novamente e clicarmos na base de jogadores. Por aqui, quero adicionar um pouco de comprimento à primavera. Mais uma vez, assim como antes. O motivo é que eu quero ver minha animação em execução e ver a velocidade com que elas estão correndo. Você pode ver que estamos correndo agora. Na verdade, parece bom. Você pode ver que está seguindo o chão. Às vezes, suas animações para o personagem quando você está correndo são muito rápidas e muito lentas. Você também precisa ajustar a velocidade de corrida. Você pode realmente ver que há alguma colisão aqui. Por alguma razão, acho que é meu céu. Se eu clicar neste céu aqui e realmente o afastar, por algum motivo, este terá uma colisão iniciada Mas isso é apenas o céu aqui em cima e realmente não importa onde esteja, vamos colocá-lo aqui. Ok, para a velocidade da animação, o que você precisa fazer é acessar as animações E então você pode definir as animações dentro dos espaços de mesclagem que criamos anteriormente Deixe-me começar com o espaço Run Blend. E aqui dentro, basta descer e ver todas essas misturas Agora, todas essas animações que você adicionou aqui como pontos, você também pode vê-las aqui Agora, primeiro o que eu quero fazer é realmente aumentar minha velocidade de peso. Porque a velocidade do peso, lembre-se, é a suavização das animações Acho que às vezes está deslizando um pouco demais. Talvez se eu aumentar para 6,5 em vez de 9,5 novamente. Lembre-se, assim como antes, quando você a aumenta, ela aplica menos suavidade à animação Eu só queria parecer mais natural. Eu vou abrir o resto deles. Para o resto deles, também vou definir a velocidade do peso para 6,5 6.5 para a caminhada também. Vou definir a velocidade do peso para 6,5 Ok, isso está corrigido. Vamos salvar tudo. Tudo bem, antes de fazermos qualquer coisa, você também pode subir aqui e lembrar de mudar seu eixo vertical. Valor máximo aqui. Lembre-se de que essa foi a velocidade de movimento da corrida. No momento, a velocidade de movimento do meu jogo é 750. Eu costumo colocá-lo em algum lugar ao redor da metade. Em vez disso, vou colocar este em 350. Você pode ver quando você coloca em algo maior, agora é aplicado aqui, 350. No entanto, minhas animações ainda estão rodando a 300, preciso clicar aqui, arrastar e segurar a tecla Shift e colocá-la aqui novamente, clicar em segurar a tecla Shift para tirá-la novamente e colocá-la aqui Nada de novo. Já fizemos isso antes. Basta arrastar todas essas animações até 350 e agora elas estão rodando nessa velocidade Ok, então vamos fazer isso com o resto deles. Vamos abrir o agachamento. Meu agachamento estava a uma velocidade de 200. Se você abrir o player e, dentro da base do jogador, a velocidade de agachamento, eu a ajusto para 200, que eu possa ir até o agachamento e colocá-lo em algo No entanto, você pode ver que se eu colocar em algo menor, isso me causará muitos erros e todas as minhas animações desaparecerão Isso ocorre porque ele está excluindo todas essas animações. Aqui em cima, vou clicar no controle Z para trazer tudo isso de volta. Aqui estão elas. Lembre-se de diminuir todos eles antes de realmente começar a brincar com esses números para que eles não sejam excluídos. Eu os coloquei aqui. Deixe-me diminuir esse número para 100 agora. E agora você pode pegar todos eles e adicioná-los aqui até a velocidade máxima. Eu gostaria que houvesse uma funcionalidade em que você pudesse realmente pegar todas elas e movê-las para cima ao mesmo tempo. Eu não acho que existam. Na verdade, agora para a velocidade de caminhada, ela está definida para 400. Vou colocá-lo em 200, voltando à velocidade da animação, e vou colocá-lo em 200 em vez disso Para a velocidade, vou movê-los para cima novamente. Tudo bem, agora que isso foi corrigido, vamos salvar tudo. Vamos voltar à corrida agora para ver a velocidade da animação. Vamos começar com a corrida para frente. Vou começar com a corrida para frente. E a razão pela qual eu faço isso é porque, quando isso estiver correto, vou aplicar para o resto deles. A corrida para frente é minha primeira aqui. Corra para frente desarmado. E você pode clicar na pequena seta para ver essas configurações da escala de taxas. Se eu aumentar para algo como três e todos eles forem maximizados por algum motivo, esse é o avanço Se eu definir para três e clicar em reproduzir, você verá que a velocidade da minha animação é muito, muito rápida. Agora você precisa ajustar a velocidade da animação para se adequar ao seu movimento. Se eu, neste momento, uma é a padrão. Se eu dissesse para 1.1, um pouco mais rápido. E se eu clicar em play, e você puder ver o que parece, agora, a corrida nas laterais não está funcionando porque essa é apenas a corrida para frente que ajustamos. Isso é o que parece. Para mim. Acho que 1,1 na escala de taxas parece bom. Na verdade, quero aplicá-lo ao resto deles. O que você pode fazer é segurar a tecla Shift e clicar com o botão direito do mouse. Isso copiará isso. Ou você pode simplesmente clicar com o botão direito do mouse e copiar. Mas você pode ver que a tecla Shift e o botão direito do mouse também copiarão isso. Então eu não quero fazer isso para a animação ociosa. As animações ociosas, eu só quero que elas sejam uma, como de costume Mais um problema para a animação em execução. A frente direita está correndo aqui. Vou segurar a tecla Shift e clicar com o botão esquerdo para colá-la. Novamente, você pode simplesmente clicar com o botão direito do mouse e colar também. Mas você pode ver que o atalho é Shift e clique com o botão esquerdo. Também vou colá-lo em todas as outras animações, para que sejam aplicadas exatamente assim Vamos continuar e clicar em Salvar. Vamos clicar em Jogar. Agora você também pode ver o que parece todos os outros lados. Parece um pouco melhor. E a razão pela qual o aumentamos é para que não pareça um pouco como antes. Tudo bem, agora que isso está feito, deixe-me encerrá-lo. Você também precisa fazer isso para se agachar. Você tem que jogar aqui. Tente se agachar e tente se agachar, veja como é Talvez, novamente, precisemos aumentar um pouco a velocidade da animação porque você pode ver que ela está deslizando porque a velocidade da animação é muito baixa. Então você tem que entrar aqui novamente, ir para a animação, se agachar Vou colocá-lo em 1.1 novamente, assim como na minha execução, só para ver como fica. E se eu me agachar e tentar caminhar para o lado, talvez precisemos de um pouco mais aqui, 1.3 Em vez disso, clique em play Tente se agachar e ver como é. Coloque-o em algo como 1.1 e, em seguida, você pode clicar em Play. Então você pode se lembrar, isso é apenas para se agachar Não funciona se você correr até os sites ou se agachar até os sites, se agachar para frente, e eu posso ver como é Talvez ainda esteja deslizando um pouco. Se eu colocar em 1,2 em vez disso, clico em play e me agacho Eu acho que isso está parecendo muito melhor. Vamos tentar, na verdade 1.2 O que vou fazer é copiar isso novamente e colar em todas as minhas outras animações que não estão ociosas Não me importo com as animações ociosas. Eu os tenho na proporção de um. Isso é bom. E para as outras animações, vou colocá-la em 1.2, assim como isso vai salvar E então vamos jogar e ver como é. Se eu andar para os lados também, ainda está deslizando Na verdade, talvez eu precise aumentá-lo para 1,3. Deixe-me realmente ir novamente. Aqui você pode ver que leva algum tempo. Você tem que testá-lo. Se eu colocar em 1.3 , copio isso e colo em todas as outras animações Assim como antes. Eu vou em frente e clico em jogar novamente. Deixe-me ver o que parece agora. Agora é muito menos, você pode ver que parece muito melhor do que antes. Podemos seguir em frente e continuar ajustando essas velocidades de movimento e essas animações e ver como elas se parecem Quando estiver satisfeito, agora você pode ir até a caminhada, fazer a mesma coisa, clicar em Jogar segurar a tecla Shift, tentar andar por aí. Você está deslizando demais agora. Vá para o movimento para frente. Deixe-me ver se consigo encontrá-lo aqui. Se eu subir para a frente, essa aqui, Animação. Ande em frente. Se eu colocar em 1.3, clique em play e eu mantenho a tecla Shift pressionada e tento andar por aí. E ainda está deslizando um pouco. Se eu colocar 1,5 em vez disso, segurar a tecla Shift e tentar andar por aí, você pode ver que a caminhada está muito melhor. Não estou deslizando por aí. Você pode ajustar a velocidade do movimento para a caminhada ou ajustar as animações de acordo com a velocidade do movimento Acho que 1,5 é bom para mim. Vou copiar isso em todas as outras animações que não estão ociosas, como essa e também na parte de trás E agora você pode ver que isso está inativo, então não vou copiá-lo aqui Ok, clique em play, e agora você pode segurar a tecla shift e andar por aí e tentar andar para o lado. Parece muito melhor. Se você achar que isso é muito rápido, você sempre pode reduzir a velocidade do movimento ou reduzir a velocidade da animação. Isso é bom. Novamente, isso realmente depende de qual jogo você está criando. Eu acho que para mim isso é bom. E eu sempre posso vir aqui e ajustá-lo mais tarde, se eu não estiver satisfeito. Às vezes, quando fecho meu jogo e fico online no dia seguinte, às vezes acho que algo parece estúpido e mudo de ideia, tento mudar a velocidade do movimento e a velocidade da animação e assim por diante. Mas, por enquanto, parece bom para mim. Então eu tenho que fechá-lo agora e deixar a gente salvar tudo. E vamos para a próxima lição. 54. 5.03 Fixando o clipping da parede da câmera: Agora precisamos corrigir o problema da câmera. Se eu voltar para o jogador e colocar a mola no comprimento do braço de zero, só para voltar ao modo em primeira pessoa e jogar o jogo, você pode ver se eu me aproximo de algo e olho para baixo, às vezes corta a parede assim, como você pode ver aqui E eu posso olhar pela parede, e as pessoas provavelmente usarão isso de forma errada e trapacearão no jogo para ver o que está por trás da parede para consertar Há duas maneiras. A primeira maneira é ir ao mercado e ir até o jogador e encontrar o esqueleto para o jogador Agora depende aqui do seu soquete. Primeiro, no soquete que você adicionou, você pode ver que eu coloquei meu valor Y em sete, se você colocá-lo em zero, por exemplo E você clica em Play, você pode ver que você empurra a câmera para trás. E você pode ver mais do seu corpo, desse jeito. Você pode tentar empurrar sua câmera para trás, talvez em vez de zero, você possa fazer com que seja menos cinco Você pode ver o quanto consegue empurrar sua câmera para trás sem fazer com que pareça ruim. Então você pode ver menos cinco. Começo a ver o pescoço ou a cabeça do meu personagem, quase onde a cabeça desapareceu e não parece muito boa. Menos cinco é demais. Eu o colocaria de volta em zero, por exemplo, e tentaria jogar novamente. O problema com esse personagem é que ele tem um rádio. Você pode ver o rádio no player aqui. Na verdade, é ficar na frente do personagem ou da câmera desse jeito e é um pouco irritante Agora, se esse fosse um personagem personalizado que você projetou, você poderia estabilizá-lo um pouco mais para que ele realmente não passe pela câmera E se fosse esse o caso , essa posição para o soquete seria realmente muito melhor Porque você pode ver o corpo e ele fica bonito assim. No entanto, o rádio é um pouco chato para esse personagem, então vou adiantá-lo novamente. Essa é a razão pela qual aumentamos para sete, porque às sete não conseguimos ver o rádio e tudo está ótimo. Ok, como podemos resolver isso agora? Na verdade, não podemos mais brincar com o soquete porque ele está colocado da melhor maneira possível A outra coisa é que você pode ir até a base de jogadores e acessar a janela de visualização aqui na base de jogadores, você pode clicar no Componente da Cápsula Componente da cápsula. Você pode ver se você aumentar o raio da cápsula para algo extremo, por exemplo, 150 E você clica em Play, você pode ver que tem uma colisão muito mais rápida contra as paredes E você não pode ir até as paredes facilmente. Você pode ver aqui. Agora é impossível andar e ver através das paredes. No entanto, é um pouco irreal colocá-lo muito alto, porque você não consegue realmente chegar perto das paredes e fica bloqueado Você também será bloqueado aqui. Se você for até essa rampa, acho que não pode passar pela rampa porque o componente da cápsula está muito alto e você não pode passar por Ok, aumente esse componente da cápsula. Um tamanho que realmente faz sentido para você e remove o recorte da parede, mas ainda é pequeno 70, por exemplo. Vamos experimentá-lo. Vamos atravessar a parede aqui. Olhe para baixo, veja o tamanho. Talvez seja bom. Isso está funcionando, na verdade, vamos para este. Às vezes eu consigo ver através das paredes. Às vezes, se eu entrar nela, tenho que aumentá-la um pouco porque, na verdade ainda atravessar as paredes pode aumentá-la para 75. E depois teste novamente e veja como é. Sim, talvez 75 esteja funcionando, na verdade. Às vezes, está tremendo um pouco. Ok, então vou colocar um 280. Essa é minha decisão final aqui. Então, vamos compilar e agora está em 80. Sim, se eu olhar para baixo, eu olho para cima, eu olho para os lados. Não consigo ver através da parede. E eu ainda posso me aproximar da parede desse jeito. E vamos ver se podemos subir as rampas aqui. Se eu subir a rampa e ela funcionar, mesmo estando perto da parede da rampa aqui, ainda posso subir a OK. Essa foi uma solução fácil se você for aqui. Agora, aqui, é um pouco problemático porque o espaço é muito estreito. O que você pode fazer para corrigir isso agora é que você sempre pode vir aqui e colocar as fotos aqui até talvez algo como dez E coloque-o. Então, na verdade velocidade da minha câmera é muito alta. Eu vou diminuí-lo. Você pode clicar nesse objeto aqui e simplesmente movê-lo para o lado. Talvez mude um pouco o design do mapa para que isso não dê certo. Agora, se você precisa de um sistema de colisão muito, muito complexo, isso realmente requer um trabalho muito avançado para este curso Aqui, você pode fazer isso com plantas. No entanto, ele requer muito código para funcionar e será muito avançado em comparação com este curso. Você pode tentar novamente subir aqui e ver se funciona. Veja se está tudo bem. E você pode ver que tudo está funcionando bem também. Tudo bem, então é assim que consertamos a câmera. Cortando as paredes novamente. Se for gravado em algum momento, você sempre pode entrar aqui Talvez retome a posição aqui do soquete, isso ajudará Ou se você puder vir aqui e aumentar um pouco o componente da cápsula para que ele não se esgote. Mas tenha cuidado para não aumentá-lo demais. 55. 5.04 Fixando o salto: Certo. Agora, se eu jogar o jogo, você pode ver quando eu pulo; na verdade, quando eu pulo e pressiono meu botão de agachamento ao mesmo tempo, você pode ver que posso enviar spam Quando eu pulo e continuo agachado, a câmera está cortando Você pode usá-lo como mecânico se quiser para o seu jogo. Algumas pessoas gostam de coisas assim, por exemplo. Você pode pular, tentar se agachar e olhar por cima da parede e ver que talvez seja um No entanto, acho que é um pouco demais e eu realmente não quero esse mecânico aqui quando ele se encaixa assim Se eu continuar agachado, vamos voltar para o jogador, ir para a base de jogadores dentro daqui Vamos até a lógica do agachamento. Esse aqui. Na lógica do agachamento, quero ter certeza de que o jogador não está pulando Você não pode se agachar quando está pulando. Se pegarmos essa, lembre-se que já fizemos com que essa função não fosse pular A única coisa que fizemos aqui foi pegar o componente de movimento do personagem e perguntar se o personagem está caindo ou não. Se o jogador não estiver caindo, significa que não está no ar, o que significa que não está pulando Ok, podemos pegar isso, podemos fazer um galho. Se o jogador não estiver pulando , podemos nos agachar momento, há um pequeno problema se pularmos e eu pressionar o agachamento Porque veja, eu só consigo me agachar no chão. No entanto, se eu pular e me agachar, quando aterrisso, não me agacho Na verdade, preciso me agachar sempre que pulo e clicar em agachar, ele deve me agachar automaticamente E precisamos corrigir isso aqui. Vou me arrastar disso e atrasar o código em algo muito, muito pequeno. Então, talvez 0,05 após o atraso, possamos voltar e reproduzir esse código novamente. O que isso está fazendo é simplesmente se você estiver pulando, não conseguindo se agachar, então será falso Ele atrasará o código e voltará e perguntará novamente se você está pulando ou não Ele continua verificando se você está pulando ou não. E quando você pousa no chão e ainda tem o botão de agachamento pressionado, ele realmente avança e se Você pode experimentar, ver se funciona ou algo assim. Insetos, você pode pular aqui, agachar-se, automaticamente, agachar-se, com um olho, pousar Isso realmente funciona. Agora, se você colocar isso muito alto, parecerá um pouco lento, porque quando você pula, leva um pouco de tempo Antes de se agachar, você pode tornar muito melhor se agachar aqui Se você diminuir muito, o tempo de resposta será muito maior. Se você pular, clicar e se agachar, poderá vê-lo Não gosto de exagerar, porque lembre-se de que quanto mais abaixo você coloca isso, mais vezes esse código será executado. Vai ser executado várias vezes por segundo tentando verificar se você está pulando ou não Para este, vou colocá-lo em 0,05 em vez disso. Para verificar quantas vezes isso é executado, você sempre pode pegar esse navegador e dizer 1/0 0,05 Então você pode ver esse código agora, executado 20 vezes por E você pode ver que ele funciona muitas vezes. Se você colocar em 0,01, ele será executado 100 vezes por segundo. Eu não gosto de colocar isso muito baixo. 0,05 é um bom número. Vamos fechar isso. Ok, agora isso está funcionando. Agora, o problema está aqui. Para o agachamento Na verdade, ele executará o código do crouch, mesmo que eu não esteja mais Você pode ver se eu arrasto aqui e digo imprimir string e eu apenas imprimo uma mensagem simples na tela para ver se esse código está sendo executado ou não está sendo compilado. Vamos clicar em Jogar. Você pode ver se eu pulo e seguro, me agacho e vou soltar. Então, quando eu pousar, ele realmente vai se agachar. Eu pulo, me agacho e me solto. Ele executará o código crouch mesmo que eu realmente não precise, porque ainda não me agachei para fazer isso ou corrigi-lo Podemos pegar o estado do movimento e arrastar a partir dele e dizer que contém o item. Se ele contiver o item agachado, queremos seguir em frente e Quando soltarmos o botão, vamos atacar aqui. Na verdade, basta arrastá-lo até aqui. E vamos fazer uma ramificação e conectá-la, sem mais nem menos. Ok, eu organizo isso um pouco, ok? Então, o que estamos fazendo aqui é perguntar se estamos no salto ou não. E se não estivermos no salto, podemos seguir em frente e nos agachar se estivermos no chão No entanto, se estivermos pulando no ar, ele continuará sendo verificado sempre que pousarmos E quando aterrissarmos, ele examinará esse código e perguntará você soltou o botão ou pressionou o botão? Se você pressionar o botão, você se agachará Se você ainda estiver pressionando o botão de agachamento, se tiver soltado o botão, primeiro ele verificará se você está realmente agachado Se essa matriz de estados de movimento contém o elemento agachado e, se não tiver, não faça nada porque não faça nada Faz algum sentido executar esse código. No entanto, se ele contiver o agachamento e você soltar o botão, ele se agachará Vamos tentar jogar agora. E vamos pular e clicar em agachar. Isso ajuda. Se eu pular e clicar em agachar e soltar, você pode ver que o código não está mais em execução e está totalmente otimizado Vamos compilar agora. Tudo está funcionando aqui. Quando eu pulo e envio spam meu botão de agachamento, ele não funciona Somente quando aterrisso aqui no ar, não consigo enviar spam para meu botão de agachamento. 56. 5.05 Corrigindo os erros restantes do Crouch: Ok, a última coisa que quero corrigir para o agachamento é que você pode ver se eu vou até uma borda ou saliência E eu me agacho aqui e vou até essa borda aqui e simplesmente saio da Você pode ver que o personagem está bloqueado aqui no ar. Você pode ver cada borda que realmente faz isso. Se eu for até aqui, isso é muito alto. Eu subo aqui e me agacho e quero cair. Você pode ver que eu estou realmente aqui no limite. E sim, parece estranho. Vamos fechá-lo. Vamos até a base de jogadores. E se você clicar no componente de movimento do personagem e pesquisar por agachamento, você tem este chamado Can walk off ledges você tem este chamado Can walk off Ao se agachar, clique nele e vá em frente, compile e clique em reproduzir Agora você pode ver quando ele faz isso, se você se agachar aqui e se você pular, ele cairá desta borda Essa foi a única coisa que tivemos que fazer, uma solução muito, muito simples. Vamos passar para a próxima lição. 57. 5.06 Preparando os passos do SFX: Agora é hora de adicionar alguns efeitos sonoros de passos ao personagem para que ele soe melhor no jogo, para que não fique muito silencioso. Vamos criar uma nova pasta. Vamos continuar aqui na pasta de conteúdo. Vamos clicar com o botão direito, ir para uma nova pasta, chamá-la de áudio. Dentro dessa pasta, vou escrever clicar e criar uma nova pasta também. Vou chamá-lo de efeitos sonoros dentro desta pasta. Vamos importar os efeitos sonoros agora. Novamente, nos materiais de custo que eu enviei para você neste site, você verá muito mais itens. Por exemplo, na interface do usuário ou no áudio, você verá muito mais itens do que os que vê aqui, porque eu continuo adicionando coisas. Enquanto eu desenvolvo este curso. Você pode ver ainda mais coisas do que o que está vendo aqui agora. Não se preocupe, não fique muito confuso, eu continuo adicionando coisas enquanto desenvolvo este curso. No momento, o que precisamos usar são os passos, o efeito sonoro dos passos 1-6 Então, tudo isso, você pode clicar e arrastá-los para o painel aqui, no navegador de conteúdo, soltar e eles serão adicionados O que você precisa fazer é clicar com o botão direito e, aqui no áudio, fazer um som que. Quando você faz um som que, você pode chamá-lo, vamos chamá-lo de passos Agora, outra forma de criar um som que é clicar com o botão direito do mouse em um deles e clicar em Create Que. A terceira opção é selecionar todos eles e criar uma única fila que, na verdade, também carregará todos eles em uma única fila, que é realmente o que queremos fazer. Mas você também pode clicar com o botão direito do mouse e acessar o áudio e criar o som que. Você tem opções diferentes. Vamos entrar nessa fila de som. Deixe-me torná-lo um pouco maior para que possamos ver. O que podemos fazer agora é pegar tudo isso. Clique no primeiro, durante todo o turno, clique no último e clique e arraste-os até a sugestão sonora que adicionará todos os efeitos sonoros de passos à sugestão sonora Agora, dentro daqui, o que você pode fazer é seguir esses passos aleatoriamente Ele deve escolher aleatoriamente qual jogar, só para que tenhamos alguma variedade. O que você precisa fazer é escrever, clicar e pesquisar aleatoriamente. Então você encontra essa nota aleatória. A propósito, para as dicas sonoras, você pode escrever clique. E você pode ver que tem esses nós exatamente como no blueprint No entanto, não é como no blueprint. Você pode ver que não tem muitos nós, mas também pode fazer coisas legais com eles, mesmo que não tenha muitos nós. Agora, para este, vamos usar o aleatório, e ele vai reproduzir um desses efeitos sonoros aleatoriamente. Vamos conectá-lo. Vamos arrastá-los e conectá-los aqui. E vamos clicar nisso. Além disso, algumas vezes que temos essas entradas, podemos conectá-las desse jeito. Conecte todos eles. A saída que conectamos à saída. Vamos organizá-lo um pouco. O que você pode fazer agora é clicar em Pl Q para ver o que ele faz. E você pode ver que ele toca um som aleatoriamente. Só escolhe um deles. Agora eu acho que está muito quieto. Podemos acessar o multiplicador de volume e aumentar o efeito sonoro do passo para colocá-lo em 1,2 Ou você pode colocá-lo em três. Você pode ver que isso aumenta o som, talvez 1,2. Não quero que seja muito alto para este curso porque também estou falando com você e você pode ouvir minha voz. Se estiver muito alto, provavelmente será muito irritante. Talvez um para mim, você possa aumentá-lo um pouco mais. Talvez um ainda esteja muito quieto. Mas para este curso, vou ficar com um. Acho que você também pode me ouvir quando me lembro do curso. Ok, temos esse passo e ele está preparado. E você também pode tocá-la aqui para ver como ela soa. Agora, se você também quiser mais variedade, pode usar algo chamado modulador Se você clicar com o botão direito do mouse e pesquisar o modulador aqui, na verdade vou usar apenas um som para demonstrá-lo para você Se eu pegar esse som e conectá-lo à saída, você pode ver que, se estiver tocando agora , soa um pouco diferente. Se você clicar no modulador e talvez diminuir o tom para 0,9 e aumentar o tom máximo para 1,1, há uma grande diferença Ele fará uma variedade de sons com tons diferentes Se você clicar em reproduzir agora, poderá ouvir que soa um pouco diferente toda vez que você pode usar um modulador para aumentar e diminuir o tom aleatoriamente Você também pode conectá-lo aqui. Se eu apenas conectar isso de volta, você pode conectá-lo aqui para criar uma variedade. Agora, em vez de 0,9, vou ficar com 0,95. Mas para o tom máximo, posso ficar com um Algo parecido. Você ouve um som diferente toda vez que toca isso. Ok, vamos salvar tudo. Vamos encerrá-lo e passar para a próxima lição. 58. 5.07 Timer por evento: Agora, adicione o efeito sonoro de passos. Se você já fez isso antes, sabe que pode acessar os ativos e as animações. E dentro de uma animação, por exemplo, essa aqui, qualquer animação aleatória. Na verdade, o agachamento é provavelmente a corrida que precisamos encontrar . Por exemplo, esse. Você sabe que pode entrar aqui, clicar com o botão direito do mouse, adicionar os notificadores um efeito sonoro Ao fazer isso selecione um efeito sonoro aqui na fila de som e clique em reproduzir Você pode ver que está realmente funcionando. E você pode copiar esse efeito sonoro, colar, tentar juntá-lo com os passos, sem mais nem menos Algo assim, por exemplo. Assim mesmo. Também funcionará no jogo quando você jogar. No entanto, eu fiz isso e queria gravar para você. No entanto, ele oscila um pouco porque, quando você corre, às vezes ele coloca o som duas vezes Porque na outra animação você também tem isso, você precisa colocar isso em todas as animações de execução ao alternar a animação de trás para frente ou de trás da direita para a esquerda Às vezes, ele realmente coloca o som duas vezes ao mesmo tempo. Parece um pouco confuso. Eu realmente não gosto desse método, então tentei outro. Então, vamos encerrar isso e tentar algo chamado cronômetro por evento Nesta lição, eu só quero explicar para você o que é esse cronômetro por evento, porque na verdade vamos usá-lo mais de uma vez E é um conceito e uma função muito importantes dentro do blueprint Vamos até o jogador, vamos até a base de jogadores. Agora, para a corrida, eu só quero dizer que talvez aqui no evento do movimento faça mais sentido. Vamos pegar tudo isso e, na verdade, vou diminuir um pouco para poder trabalhar aqui sem nenhuma restrição. Vamos até o final do código de movimento e vamos arrastar a partir daqui e escrever o cronômetro por evento E podemos seguir em frente e selecionar esse chamado cronômetro por evento Você também pode escrever e ver o que pode fazer. Você tem cronômetro por evento, cronômetro por nome de função Isso é quase o mesmo que o evento, mas você pode ver o que é isso. Depois de entender o que é definir cronômetro por evento, vamos selecionar definir cronômetro por Agora, para este evento, temos que adicionar um evento personalizado aqui. Você pode ver essa entrada que precisa direcionar a partir daqui e escrever eventos personalizados. Então você precisa chamar seu evento personalizado de algo. Por exemplo, vou chamá-lo de tocar passos, efeitos sonoros, tocar efeito sonoro de passos Agora ele pergunta aqui a que horas você deseja repetir isso? Por exemplo, vamos aumentar 0,5 Agora vou selecionar aqui que esse cronômetro está em loop E eu vou clicar nessa seta novamente. Ok, agora é um cronômetro em loop. E vai se repetir a cada 0,5 segundos. Se eu direto daqui e imprimir uma corda, e eu puder clicar em reproduzir aqui, você verá que corremos aqui. E eu paro meu código, você pode ver que ele é executado a cada 0,5 segundos. Você pode ver que ele realmente imprime olá a cada 0,5 segundos. Você pode ver isso melhor se eu mudar a cor. Por exemplo, na duração, em vez de apenas 2 segundos, eu coloquei em 50 segundos. Eu clico em jogar, me movo e paro. Ele executará o código. Veja a cada 0,5 segundos, ele vai dizer olá. Se você largá-lo, poderá ver que a cada 0,2 segundos ele vai dizer olá, como você pode ver aqui. Então, podemos usar esse cronômetro para executar algum código. Nesse caso, vamos usá-lo para repetir efeitos sonoros de passos quando você estiver correndo, ele reproduzirá os efeitos sonoros Ok, para este cronômetro, em algum momento precisamos parar o cronômetro Caso contrário, ele continuará para sempre e seu código falhará em algum momento porque você gerou muitas instâncias disso Então, vamos clicar com o botão direito do mouse e promover isso para uma variável. Vamos chamar isso de passos de 1 pé. Isso afeta o tempo ou o controle. É chamado de alça. Se você segurar o mouse sobre ela, ela é chamada de estrutura de controle de tempo. Eu geralmente chamo isso de hora ou controle no final. Passos, som, efeitos, tempo ou controle. Agora temos isso mais tarde, o que podemos fazer é pegar isso e dizer claramente e invalidar É quando queremos parar esse cronômetro. Em algum momento, podemos seguir em frente e usar esse cronômetro claro e invalidado. Mas agora vamos simplesmente excluí-lo. Sim, isso foi na verdade para esta aula. Deixe-me mudar este para algo como 0,5 para começar. Porque lembre-se de que um cronômetro executa essa quantidade de segundos. Então, por exemplo, se você for 0,1, ele será executado dez vezes por segundo. Você pode imaginar que não quer colocar isso em algo assim, porque imagine quantas vezes isso vai funcionar. Se eu disser olá e clicar em jogar, correr e parar, dá para ver que vai virar spam. Esse código, você pode ver que meu jogo está realmente travando e está muito atrasado Não faça isso, isso é muito ruim. Eu gosto de ficar com o valor mínimo e mínimo. Se eu realmente tiver que ir muito baixo, é 0,3 ou talvez 0,2 em casos raros. Mas geralmente eu tento ficar em 0,50 0,40 0,6 Isso se eu realmente precisar executá-lo Muitas vezes, novamente, o que eu disse antes, você sempre pode acessar navegador da Internet e dizer, por exemplo, 1/0 0,01 Então você pode ver quantas vezes ele é executado Normalmente eu não gosto de ir mais de 60 vezes por segundo. Eu escrevo, por exemplo, se você escrever 0,03, ele roda 33 vezes por segundo E às vezes está tudo bem, não se preocupe. Às vezes, isso é necessário e você saberá quando precisar. Quando você consegue ficar acordado assim, é muito melhor. Isso executa o código 16 vezes. Você pode ver 0,03 Você executa o código quase ou, na verdade, o dobro do tempo de 0,06. Tente ficar o mais alto possível aqui, porque isso será realmente otimizado para mim agora, seguindo os passos Vamos executá-lo em 0,5 segundo, duas vezes por segundo. E sempre podemos ajustá-lo mais tarde, quando necessário. Vamos deletar esse. Vamos compilar tudo e passar para a próxima lição 59. Replicação 5.08 Multicast: Ok, então aqui estamos novamente. Agora, é muito importante que estejamos no modo multijogador. Não podemos simplesmente entrar aqui e arrastar a partir daqui e dizer play Sound, por exemplo. Você acabou de dizer play Sound. Você pode reproduzir o som em dois D, que geralmente é usado para elementos da interface do usuário quando você clica em um botão. E você pode reproduzir som em um local, por exemplo, seguindo passos E você pode simplesmente ir em frente e selecionar o som. E você pode ver que se eu clicar em Play, eu corro, ele tocará o som como você pode ver aqui. Agora, isso realmente não funciona no modo multijogador. O cliente não ouvirá o som, porque, novamente, lembre-se de que precisamos replicar os itens para os clientes da lista de servidores Agora, isso funcionaria no single player, mas não no multiplayer. Agora, para multijogador, precisamos usar um multicast. O que é um multicast, na verdade, vamos criá-lo aqui e eu explicarei para você Vamos clicar com o botão direito do mouse e criar um evento personalizado. Neste evento personalizado, vou chamar o servidor primeiro. Vamos executá-lo no servidor. Passos do servidor, efeitos sonoros. Ok, vamos clicar aqui nas réplicas, rodar o servidor e de forma confiável Agora vamos clicar com o botão direito do aqui e criar um novo evento personalizado. Vamos chamá-lo de MC para multicast. E, novamente, toque passos, efeitos sonoros para este, vamos clicar em Replicar E agora também vamos escolher multicast e confiável O que é um multicast, você pode imaginar, ele replica isso, tudo o que você escreve aqui para todos os clientes Custa todos esses itens que você escreve aqui para todos os clientes. Para multicast, ele só pode ser executado por meio do servidor. Você não pode entrar aqui e dizer efeitos sonoros multicast footstep porque este que você pode ver diz que se o servidor só funciona através do servidor, você não pode transmitir através do cliente Não podemos fazer isso. É por isso que temos que arrastar a partir daqui e executá-lo primeiro no servidor, com efeitos sonoros de passos Então, a partir do servidor, podemos arrastar e dizer efeitos sonoros multicast footstep E isso funcionará perfeitamente, então você deve executá-lo primeiro no servidor, a partir do servidor e, em seguida, fazer multicast Ok, outra explicação também para o multicast que você precisa entender é multicast geralmente é usado para efeitos temporários Por exemplo, se você reproduzir um efeito sonoro porque se lembra do multicast, se um jogador se conectar ao seu jogo e você tiver escrito um código em multicast, o jogador conectado não conseguirá ver esse É aqui que entra a notificação de representante . E isso virá mais tarde. Não se preocupe com isso por enquanto. Mas você pode ver aqui se eu clicar em uma variável, se eu realmente tenho uma variável, se vou até você, agachado, por exemplo, e clico no meu estado de movimento Você pode ver na replicação que eu também tenho algo chamado notificação de representante que virá Mas se voltarmos e voltarmos aqui para o multicast, qualquer código que você escrever aqui não será visto pelo player conectado, a menos que seja reproduzido novamente. Se eu simplesmente me conectar ao jogo e ele apenas reproduzir o efeito sonoro de execução, não consigo ouvi-lo, a menos que o jogador pare e corra novamente. E coloque esse código enquanto eu estiver conectado ao servidor, então ele será reproduzido corretamente para o multicast É muito importante que você faça algo que o player conectado realmente não precise ouvir ou ver, a menos que seja reproduzido novamente, por exemplo. Agora, para esse efeito sonoro de passos, podemos tocar aqui, bem como alguns efeitos visuais, por exemplo, alguns fogos de artifício E se você abrir um baú e houver alguns efeitos visuais dourados saindo desse baú, ele também precisará ser executado em uma transmissão múltipla O representante aqui, se eu clicar em uma das minhas variáveis. precisa ser usado sempre que você precisar que o player conectado veja essa alteração. Digamos, por exemplo, se o jogador estiver segurando, por exemplo, uma AK ou uma pistola, uma águia Então, é muito importante que o jogador conectado veja a arma correta nas mãos do jogador. A arma que você realmente não usa em um multicast porque o jogador conectado verá a arma errada no player Alguns jogos custam muito dinheiro porque usam multicast para tudo Novamente, geralmente eu o uso principalmente para efeitos sonoros e visuais que não precisam estar presentes o tempo todo. Por exemplo, você pode ver se há um semáforo que vai de vermelho, amarelo e verde. Esse semáforo dessa cor, eu provavelmente faria dentro de um representante, notificar porque essa cor precisa estar visível corretamente para o player conectado O player conectado precisa ver se está amarelo ou vermelho e não continuar vendo a cor verde até que ela mude novamente. Para efeitos visuais temporários, por exemplo, fogos de artifício relacionados que desaparecem após 3 segundos não precisam estar em uma notificação que precisa estar em uma transmissão múltipla Tudo o que é temporário e que o player conectado não precisa ver imediatamente, você precisa fazer isso aqui. Lembre-se de que esse código precisa ser executado novamente antes que o player conectado possa vê-lo. Ok, vamos tocar o som aqui. Vamos arrastar a partir daqui e dizer reproduzir som no local. É assim que você toca um som. Você precisa especificar onde deseja reproduzir o som. Lembre-se de que estamos codificando dentro do player. Eu posso simplesmente arrastar a partir daqui e dizer obter a localização do ator. Estou obtendo a localização desse jogador. Agora, esse som será reproduzido onde quer que o player esteja. Agora temos que selecionar qual som. Vamos selecionar os passos. Agora, se eu clicar em jogar e correr, agora eu paro. Você pode ouvir que os passos estão tocando Você também pode ouvir isso aqui no outro player. Se eu abrir o outro player, também posso ouvir o som. Isso é do cliente. Agora isso está funcionando, ok? Você pode ouvir que ele funciona o tempo todo, mesmo que eu não esteja correndo. E também precisamos corrigir isso na próxima lição. Mas, por enquanto, sabemos que esse efeito sonoro está realmente sendo reproduzido. Novamente, o multicast só pode ser executado por meio do servidor. Você não pode executar um multicast por meio do cliente, executá-lo por meio do servidor e, a partir do servidor, você pode transmitir vários efeitos sonoros ou visuais temporários que não precisam aparecer conectado. Por exemplo, alguns fogos de artifício ou uma bala que você acabou de atirar e ela desaparecerá Mas, por exemplo, qual arma o jogador está segurando é muito importante para o jogador conectado. Então, isso entrará em um representante, notificará. Não se preocupe, faremos isso mais tarde. Por enquanto, não temos muito. Só temos o efeito sonoro. Mas teremos muitos exemplos ao longo deste curso. Ok, para parar o efeito sonoro sempre que pararmos aqui no final. Isso ocorre sempre que soltamos as teclas de movimento. O que podemos fazer é seguir os passos aqui novamente. Podemos limpar e invalidar o cronômetro por alça. Isso impedirá que esse cronômetro continue funcionando. Podemos prosseguir e conectá-lo, assim como podemos compilar e vamos tentar reproduzi-lo agora Se corrermos e eu parar aqui, você não ouvirá nada quando correr. A razão pela qual você não consegue ouvir tudo isso é porque continua funcionando assim muito rápido. Ele nunca atinge esse cronômetro antes que o segundo movimento esteja em execução Continua funcionando assim. Isso dá uma pausa para realmente revisar e ajustar esse cronômetro. Vamos corrigir isso, mas você pode ver aqui que, ao adicionar isso, o cronômetro na verdade não reproduz mais o efeito sonoro porque estamos parando Ele limpa o cronômetro apenas para garantir que ele não se apague. Sempre podemos usar essa alça de passos, podemos arrastar e dizer válido e podemos usar, este é um cronômetro válido Se for válido, podemos criar uma ramificação e limpar esse cronômetro dessa forma Está bem? Certifique-se de que esse cronômetro seja válido e, em seguida, limpe-o para torná-lo mais Você sempre pode pegar outra instância dessa variável e conectá-la aqui. E você pode ir em frente e organizar mais esse poço. E agora temos esse código. Ok, vamos compilar e, na próxima lição, vamos realmente tornar isso menos complicado e realmente executar esse código sempre que estivermos executando 60. 5.09 Condições da Footsteps SFX: Ok, primeiro o que eu preciso fazer é fazer um lingote, vamos arrastar isso para longe. E vamos fazer um novo lingote chamado Playing Footsteps Effects Tocando o efeito sonoro dos passos. E eu simplesmente escrevi isso errado. Assim, reproduzindo o efeito sonoro de passos, vamos arrastá-lo e configurá-lo verdadeiro sempre que estivermos reproduzindo os efeitos sonoros Antes de fazermos isso, vamos pegar isso e fazer um galho. Primeiro, vamos perguntar se estamos tocando os efeitos sonoros ou não. Só para torná-lo mais legível, vou me debruçar sobre isso e escrever não lingotes”, sem mais nem menos Quando não estamos tocando os efeitos sonoros, quero continuar tocando os efeitos sonoros. Não precisamos executar os efeitos sonoros dos pés quando já os estamos executando. Se não estivermos reproduzindo os efeitos sonoros de passos , podemos continuar reproduzindo os efeitos sonoros desse jeito Lembre-se de que você precisa configurá-lo para falhas. Em algum momento aqui, quando pararmos o cronômetro e pararmos os efeitos sonoros, vou definir isso como falso Vamos compor, ver se isso funciona ou se precisamos fazer mais. Agora você pode realmente ver que funciona quando você está correndo Funciona quando você está parando, também para. Ok, incrível. Agora ele corre muito devagar. Então, talvez você precise reduzir esse número para 0,5 ou quatro. E você pode ir em frente e jogar novamente. Talvez seja muito rápido. Na verdade, vou escrever 0,42. Acho que você tem que jogar algumas vezes Tente testar seu jogo. Acho que está tudo bem. Você sempre pode ajustar isso mais tarde, se tiver dinheiro com isso Mas acho que esse número está bom para mim agora. Agora isso está funcionando corretamente. No entanto, você terá alguns bugs. Você verá se clicar em Jogar e eu correr por aí, você pode ver se encontra alguma coisa. Coloque também o efeito sonoro. Esse é um pequeno bug que você precisa corrigir. Para este, você pode usar a velocidade do player, porque se eu simplesmente tirar isso, vamos mover tudo isso para cá. Assim, você pode realmente ter algum espaço para trabalhar. Se você clicar com o botão direito do mouse e disser obter velocidade, essa é a velocidade do jogador e você pegar isso e quebrar, quebrar esse vetor Assim, você pode ver o X, Y e Z novamente. Você também pode clicar com o botão direito do mouse e dividir o pino da estrutura. Isso é a mesma coisa. No entanto, eu gosto de quebrar o vetor só para tê-lo aqui. Agora, só para ver, vamos imprimir uma string. Você pode simplesmente imprimir a velocidade x, por exemplo, e ver o que ela diz Eu costumo fazer isso às vezes quando faço um novo mecânico. Eu uso muito a string de impressão para ver o que ela faz. Você pode clicar em W para se movimentar e ver o aumento da velocidade A velocidade do seu personagem aumenta sempre que eu me movo. OK. Assim mesmo. E a mesma coisa com o X e o Y. Então você pode ver que ele aumenta sempre que você se move O que podemos fazer para tocar os efeitos sonoros quando você entra nas coisas eu não quero tocar o som. Vamos partir disso e dizer se essa velocidade é maior que, por exemplo, 100 ou se é menor que 100 Porque lembre-se, se você voltar , será um número negativo se também for menor que 100 Ou vamos fazer isso para o y também. Vamos copiar e colar isso e conectá-lo aqui. Se for menor ou maior, ou menor que 100 aqui. Vamos nos afastar disso. Não precisamos usar barras de ouro porque n significa que tudo isso precisa ser verdade Podemos arrastar a partir disso e usar um lingote Or, se um deles for verdadeiro, não queremos reproduzir o som porque somos muito lentos. Vamos clicar no sinal de mais aqui e adicionar todos eles. O que estamos dizendo é que se a velocidade do x for maior que 100, ou se for menor que 100, ou se for isso, ou se for aquilo, então queremos reproduzir o som que podemos arrastar daqui e escrever uma ramificação Então, a partir dessa ramificação, podemos prosseguir e conectá-la. Assim, podemos conectar o código. Agora, o código só será reproduzido sempre que estivermos nos movendo nessa velocidade Vamos clicar em jogar. E eu me movo. Eu paro e me mudo para algo aqui. Veja que ainda está tocando. E acho que é porque isso aqui não é alto o suficiente. Se escrevermos, por exemplo, na verdade isso é porque esse é, o menor também está errado. Na verdade, vamos aumentá-lo primeiro, vamos fazer 250. E aqui eu tenho que escrever abaixo de -250 Isso foi um erro meu. Deixe-me escrever 250 e é menor que -250 Na verdade , ainda está tocando o som se eu entrar em coisas e é porque eu não o coloquei aqui no falso Quando for falso, você pode ver se é verdadeiro, ele reproduzirá o efeito sonoro. Mas se eu continuar pressionando o botão, será falso. Nós realmente não fazemos nada. Isso só interromperá o efeito sonoro sempre que eu soltar o botão. O que precisamos fazer é arrastar isso até aqui. E precisamos inserir esse falso aqui também. Portanto, ele interrompe o cronômetro sempre que for falso. Vamos clicar em jogar agora e ver as coisas. E você pode ver agora que ele não reproduz o som. Quando eu ando um pouco, você pode ver que ele começa a tocar o som. Você sempre pode ajustar esse número. Se você diminuí-lo, ele tocará o som muito mais rápido quando você entrar nas coisas. Mas, por enquanto, isso é bom para mim. E você sempre pode ir em frente e organizar isso um pouco mais, ok? Então, algo parecido. Acabei de colocar as notas da rota de leitura para que fique um pouco mais legível Simples assim, ok. Agora, o que precisamos fazer é que existem outros fatores. Agora, o próximo fator é que você pode ver se eu subo até aqui, deixe-me realmente pular daqui e eu pulo , também está tocando o som no ar. O que precisamos fazer é pegar, este não está pulando, então estamos nos certificando de que o jogador não esteja pulando Caso contrário, não queremos reproduzir os efeitos sonoros. Vamos tirá-lo do remo e do lingote direito. Se for verdade, se você não estiver pulando, podemos tocar os efeitos sonoros Isso também precisa ser uma condição. Na verdade, vamos atacá-los. Sim, um pouco aqui atrás. Deixe-me arrastar tudo isso ainda mais longe. Agora o salto está funcionando. A segunda coisa é que também queremos ter certeza de que estamos realmente correndo e não andando. E você pode ver aqui, se eu correr primeiro e andar, na verdade, ele também vai jogar, correndo. Não sei se tenho isso, na verdade não tenho. Podemos pegar esse estado de movimento e arrastar a partir daqui e dizer pegue uma cópia novamente. Podemos tentar verificar qual é o último índice. Se estiver funcionando, significa que estamos pressionando o botão de corrida agora e não andando ou agachados Se isso for igual à execução, podemos seguir em frente e fazer esse código desse jeito. Nós podemos fazer isso assim. Agora, para torná-lo mais limpo, vou selecionar tudo isso com o botão direito do mouse e reduzi-lo a uma função que vou chamar assim, a função está em execução. Isso é apenas verificar se o player está funcionando ou não. Estou transformando isso em uma função pura. Vamos entrar aqui e organizar isso um pouco mais dentro da função, desse jeito. Aqui, estamos simplesmente verificando se o player está funcionando ou não. Então, este está funcionando, então estamos garantindo que o player esteja funcionando, caso contrário, não queremos reproduzir os efeitos sonoros de passos Ok, vamos jogar aqui. E tente novamente. Estou jogando agora. Eu paro. Se eu correr, se eu segurar o turno para andar, não vou jogar. Se eu desistir, ótimo. Agora funciona, ok. Há um pequeno problema no momento. Você pode ver que se eu correr um pouco, ele realmente não reproduzirá o efeito sonoro, a menos que eu corra um pouco mais. O que você precisa saber aqui para o cronômetro por evento é o tempo que você precisa percorrer aqui antes ele realmente reproduza esse código, ajuste cinco, por exemplo E eu clico em Play. Ele não vai reproduzir esse código instantaneamente. Ele vai esperar 5 segundos antes de ser executado. A primeira instância desse código leva 5 segundos antes que ele realmente comece a reproduzir os efeitos sonoros de passos Como você pode ver aqui, ele acabou de ser reproduzido, o efeito sonoro do passo é 0,42. Precisamos tocar o efeito sonoro logo antes de ser reproduzido , apenas uma vez Nós podemos fazer isso aqui. Sempre que vamos começar a tocar os efeitos sonoros. Posso continuar e lembrar que você não pode executar o multicast diretamente do cliente Você também precisa executá-lo no servidor. É por isso que eu posso dirigir a partir daqui e escrever primeiro os efeitos sonoros do play footstep E então ele reproduzirá o multicast. Depois disso, vou tocar o efeito sonoro de passos imediatamente. Quando eu correr, após 0,42 segundos, ele começará a repetir esse código. Porque se eu não fizer isso, ele vai esperar 0,42 segundos antes de começar a executar tudo isso É por isso que temos um pequeno atraso. Se você clicar em “Pode jogar agora”, você pode ver que ele é reproduzido imediatamente , então é muito melhor. Agora, também o que você pode fazer se não quiser reproduzi-lo imediatamente. Se quiser ter um pequeno atraso no efeito sonoro, o que você pode fazer clicar aqui e pegar segundos decorridos ou os segundos do gatilho Ambos funcionam. Na verdade, deixe-me usar aquele chamado segundos de gatilho. O que você pode fazer é arrastar a partir daqui. Na verdade, vamos imprimir uma string. Gosto de imprimir sequências de caracteres para que você possa ver o que estamos fazendo. Vamos conectar essa string de impressão ao código e apenas conectar esse gatilho em segundos à string de impressão. Vamos jogar. Você pode ver quando eu seguro minha chave, apenas conta os segundos de quanto tempo estou segurando minha chave. Por exemplo, não só minha chave, na verdade, todo o meu movimento pode dizer que estou me movendo, mas conta. Se eu abandonar meu movimento, ele começa do começo. Ele conta apenas os segundos de quanto tempo você pressionou os botões de movimento. Mas o que você pode fazer é rastrear a partir disso e dizer que se os segundos de gatilho forem maiores que, por exemplo, 0,3, então queremos seguir em frente e correr. Deixe-me adicionar outra condição aqui. Temos muitas condições 1 aqui. No final, temos muitas condições. Vamos conectá-lo e clicar em Play. Funciona, mas agora, após 0,3 segundos, ele reproduzirá o código. Agora, se você aumentar, ele será reproduzido muito mais tarde. Após 2 segundos, se você clicar em Reproduzir e executar após 2 segundos, ele reproduzirá o código. Isso se você quiser atrasar um pouco. Se você não quiser reproduzir o efeito sonoro de corrida instantaneamente, você pode ter um pequeno atraso, talvez 0,4 em vez de 0,5, e ele será reproduzido muito mais rápido. Você pode ver que ele não reproduz o efeito sonoro sempre que você faz isso. Se você clicar na tecla rapidamente, mas se clicar um pouco mais, ela reproduzirá o efeito sonoro. Acho que vou colocar em 0,3 Acho que está jogando tarde demais. Se você fizer isso, não vai funcionar. No entanto, se você pressionar um pouco mais, ele reproduzirá o efeito sonoro. OK. Agora funciona perfeitamente. Vá em frente e organize o código. Se você quiser remover um dos pinos do Ou, por exemplo, você pode escrever, clicar e remover o pino Vá em frente e organize o código. Agora tudo está organizado e você pode ver o código aqui, caso tenha perdido alguma coisa. Também fiz o upload deste projeto final para você, para que você possa acompanhar. Vamos continuar e compilar. Vamos salvar tudo e passar para a próxima lição. 61. 6.01 Colocando os pontos de spawn: Ok, agora que terminamos o movimento, é claro que ainda precisamos do movimento da pistola e do movimento do rifle, mas vamos nos concentrar nisso mais tarde Por enquanto, vamos continuar com a geração do jogador para a geração do jogador, vamos começar a colocar alguns pontos de desova para o jogador aqui na pasta Vamos clicar com o botão direito do mouse em criar uma nova pasta. Vamos chamar isso de Span Points Again, vamos clicar com o botão direito do mouse nessa pasta. Eu vou definir a cor para este. Novamente, dentro dessa pasta. Vamos clicar com o botão direito agora para obter os pontos de desova Precisamos que os jogadores comecem para que o jogador possa realmente começar no nível No entanto, em vez de criá-lo a partir daqui, porque este agora é criado apenas a partir dele, os jogadores começam. No entanto, precisamos dos pontos de desova que são, na verdade, plantas Em vez de fazer isso , vamos deletar isso. Os jogadores começam do nível. Se você quiser certeza de que não tem mais partidas de jogador em seu nível, você sempre pode simplesmente vir até aqui no esboço e procurar o início dos jogadores E você pode ver que nada está aqui. Vou clicar no X aqui em cima para criar um novo. Vamos clicar com o botão direito do mouse para ir para a classe Blueprint agora, em vez de selecionar uma dessas aqui, você pode clicar nesta pequena seta, pode realmente ver, você pode fazer plantas de quase tudo Uma câmera, folhagem e até mesmo o jogador começa e assim por diante. Então você pode ver que tem 682 itens que você pode pesquisar, por exemplo, um jogo salvo, quando você vai criar um jogo onde você salva, descarrega e assim por diante Então você tem muitas coisas aqui dentro. Por enquanto, só precisamos que os jogadores comecem. Se você pesquisar uma partida de jogador, poderá vê-la aqui. Este chamado Players Start. Selecione este. Vá em frente e clique em Selecionar. Vamos chamá-lo de BP spawns. Vou salvar automaticamente por algum motivo. Vamos chamá-la de base de pontos de desova da BP. Nós temos, temos um plano básico, assim como o jogador. Se você voltar para o jogador, temos uma base de jogadores. E a partir desse jogador , criamos esses dois. Agora, eu realmente não expliquei para que eles são usados, porque não temos realmente nada dentro dos planos terroristas e antiterroristas E esse é o que precisamos corrigir mais tarde. Mas agora você pode ver aqui que eles estão vazios, os filhos da base de jogadores. Lembre-se de que essas são as plantas secundárias da base de jogadores Você também pode ver que, se você segurar o mouse sobre eles, verá que a classe principal é a base de jogadores. Vamos explicar nesta seção como eles são usados. Agora vamos voltar à soma dos pontos. E agora que temos um ponto de desova básico, vamos clicar com o botão direito nele Crie uma turma infantil de blueprint. Vamos chamar isso de ponto de surgimento de terroristas da BP. Vamos clicar com o botão direito do mouse na base do ponto de serra novamente e criar outra cláusula secundária do blueprint Vamos chamar isso de ponto de surgimento de terroristas da BP. Ok, temos um ponto de desova antiterrorista e temos um ponto de desova terrorista Agora vamos colocá-los dentro do nível. Vamos pegar primeiro o antiterrorista e colocá-lo no nível em algum lugar, por exemplo, aqui. E você pode clicar novamente em E para girar e girá-lo. Assim mesmo. Você pode ver que tem essa seta azul e é para onde o jogador está olhando. Porque você pode ver se eu clicar em jogar, agora o jogador está olhando nessa direção. Se eu girar dessa maneira e jogar, o jogador está girando nessa Então, para ter certeza de que eles estão olhando na direção correta, vamos seguir em frente e fazer com que ela aponte para essa direção dessa forma. Está bem? Agora você sempre pode ajustar os pontos de ligação mais tarde, mas, por enquanto, vou colocá-los onde acho que seriam os mais ideais. Então, por exemplo, no terraço do balcão aqui, você sempre pode segurar Alt e arrastar para copiá-lo. E você pode colocar este aqui, por exemplo. E eu geralmente os coloco atrás da defesa aqui, porque se você os colocar aqui, eles podem simplesmente se matar imediatamente. Eu costumo colocá-los atrás da parede para que não sejam mortos imediatamente. Você pode simplesmente colocar alguns deles. Esse é o terceiro e esse é o quarto. Está bem? Assim mesmo. Você pode até colocar um aqui, mas eu não quero gerar ninguém aqui, na verdade Eu só quero gerá-los aqui embaixo. Novamente, para o seu jogo, tudo depende de você. Você pode escolher onde quer que seus jogadores apareçam até você Ok, eu os gerei aqui. Deixe-me fazer a mesma coisa agora aqui para o terrorista. Deixe-me entender isso e colocá-lo em algum lugar aqui. Novamente, estou tentando colocá-los o melhor que posso atrás da parede. Segure alton, arraste para copiar e eu vou colocar um aqui Agora diz, oh, eu tenho o seletor de cores. Por alguma razão, na verdade, não tenho ideia do que acabei de pressionar. Clicando aqui e arrastando-o aqui novamente. Fique em algum lugar aqui e segure Alt. Arraste e coloque o último aqui. Eu só vou dar uma olhada na lateral, ver como eles ficam. Posso selecionar todos eles segurando o controle e clicando neles. Eu posso simplesmente movê-los um pouco mais perto da parede. Isso ocorre porque eu realmente quero colocar armas atrás desses jogadores ou atrás desses spawns OK. Algo parecido. Eu acho que parece bom. Você pode ajustar esses pontos de desova conforme desejar, mas acho que está ótimo Então, agora temos os pontos de desova do terrorista colocados e também os pontos de desova do contraterrorista Então, vamos salvar tudo e seguir em frente. 62. 6.02 Armazenando informações do Spawn Point: Agora que colocamos todos esses pontos secundários, vamos analisar e armazenar todas as informações. Agora eu costumo fazer isso dentro do modo de jogo porque o modo de jogo escolhe as regras do jogo Agora, muito importante, agora que você está trabalhando no modo multijogador, é muito importante saber que o código que você escreve aqui dentro do modo de jogo só está sendo executado no servidor se você for o jogador e, só está sendo executado no servidor se você for digamos, dentro do jogador, você tenta aqui a partir do movimento porque lembre-se de que quando você inicia o movimento aqui, você está disparando o código como jogador ou como cliente. E, como servidor, você sempre pode ver qual deles está atirando Se você simplesmente arrastar a partir daqui e escrever uma string de impressão. Agora, lembre-se de que uma sequência de caracteres de impressão é realmente poderosa de usar. E se você compilar e clicar em Play. E agora, quando eu me mudo, você pode ver que agora está dizendo servidor. E quando me mudo como meu cliente, é o cliente que está dizendo olá. Isso significa que esse código aqui está sendo executado no servidor e no cliente e não apenas no servidor. Agora deixe-me conectá-lo. Deixe-me dar outro exemplo. Algo que só é executado pelo servidor. Por exemplo, se eu ficar agachado e jogar aqui com a autoridade, por exemplo, posso compilar Clique em jogar e, quando eu ando como servidor, nada está sendo impresso. E isso é, na verdade, agora, quando eu clico em jogar, eu ando como servidor. Na verdade, vou me agachar. Essa é a chave de agachamento. Se eu me agachar, você pode dizer que diz olá. No entanto, se eu jogar como cliente e me agachar, você pode ver que o servidor está dizendo Não é o cliente que está dizendo olá porque esse código só é executado no servidor. Agora, para o modo de jogo, você não pode acessar o código aqui de um cliente. Ele não tem acesso ao modo de jogo. Se você quiser escrever algum código aqui que você precisa acessar do cliente, isso não é possível, então você não deve escrevê-lo dentro do modo de jogo. Pontos de desova. É muito importante saber que é sempre o servidor que gera coisas no mundo Isso ocorre porque estamos tentando evitar trapacear. Sempre deixamos o servidor lidar com a geração. Por exemplo, fazer com que os jogadores gerem uma arma no nível quando o jogador a retira do inventário e coisas assim A desova é sempre feita no modo de jogo. Para os pontos de desova, podemos escrevê-los aqui. Vamos deletar tudo isso por enquanto. Vamos escrever um clique dentro dos eventos. Se você clicar em um evento, por exemplo, e clicar em um jogo, poderá ver algo chamado post login. Você também pode simplesmente escrever, clicar e escrever o login da postagem. E esse evento em jogos multijogador. Sempre que o jogador se conecta ao seu mapa, se conecta ao seu servidor. Cancelar o login é como começar a jogar. Sempre que o jogador se conecta ao seu servidor, algo acontece. Está bem? Então, o que geralmente queremos fazer aqui é criar uma nova variável. Crie uma nova variável, você pode ver a entrada do novo jogador. Aqui está um controle de player, para que você possa realmente armazenar o controle do player quando ele se conectar e usá-lo posteriormente. Essa é uma informação muito útil. Vamos escrever os jogadores conectados e o tipo é controlador do jogador e, em seguida, selecionar este, Referência do objeto do controlador do jogador . E vamos compilar Como queremos armazenar todos os controles do player quando eles se conectam, precisamos transformar isso em uma matriz. Lembre-se de que essa é uma variável única, você só pode armazenar uma informação. No entanto, em uma matriz, é como uma caixa. Você pode colocar todos os controles do player dentro dessa caixa e usá-los mais tarde. Vamos pegar essa, vamos rastrear a partir daqui e dizer Ad. Podemos adicionar esse controlador de player a esta caixa aqui com todo o controle do player com os jogadores conectados aqui. Em vez de usar esse anúncio, evite a caixa que eu normalmente tiro daqui e use essa chamada add unique. Você só pode ter uma instância desse controlador de player aqui, caso o jogador se reconecte ou coisas assim Não temos dois controles de jogador desse cara dentro da matriz. Adicionar exclusivo. Basta adicionar uma instância desse controlador de jogador aqui. E depois para armazenar as informações dos pontos de ligação. Agora, para conseguir qualquer coisa, isso é muito, muito importante. Quando você costuma programar por meio dos meus cursos, quero que preste atenção às ferramentas que estou usando. Às vezes é importante que estejamos programando um jogo de tiro em primeira pessoa ou um jogo em dois D. Às vezes, é mais importante realmente prestar atenção aos nós que estou usando. E imagine de que outra forma você pode usá-lo em um jogo de RPG ao saquear moedas e assim por diante Para armazenar ou obter qualquer coisa que esteja dentro do seu nível, que exista dentro do seu nível, temos que usar um nó chamado Get Actor of class. Se você clicar com o botão direito aqui e dizer Obter ator da classe, você pode ver agora que pode obter qualquer coisa aqui que esteja dentro do seu nível. Por exemplo, os jogadores começam que estamos usando. Se você pesquisar jogadores começar, você pode ver isso. Você também pode ver isso aqui, já que não se chama partida de jogadores, isso não está errado. No entanto, você também pode obter, se você for até os pontos de desova, você pode obter a base do ponto de desova, agora que a temos na planta, se você apenas pesquisar a base do ponto de desova, poderá vê-la Consiga o ator da turma. Obtém apenas um deles aqui do nível. Também temos outro nó chamado get all actors of class. Não estamos ganhando apenas um ponto, na verdade estamos recebendo todos os pontos de desova Na verdade, eu só quero separá-los. Você pode simplesmente pesquisar a base do ponto de extensão e adicioná-la e chamá-la de pontos da Espanha. No entanto, na verdade, eu já vou separá-los daqui. Vou procurar os pontos de desova dos terroristas de Cada pontos de desova dos terroristas Ponto de desova. Certifique-se de que seja o ponto de desova que você selecionou aqui. Vou clicar com o botão direito aqui, promovê-la a uma variável e chamá-la pontos de desova de Cada terrorista Agora eu os tenho dentro dessa variável de matriz. Ok, em seguida, podemos novamente dizer que pegue todos os atores da classe, podemos obter os pontos de desova do terrorista Agora, se você conseguir encontrar um ponto de spa terrorista, vamos conectá-lo aqui novamente. Deixe-me clicar com o botão direito neste, transformar isso em uma variável e chamá-lo de pontos de geração de terroristas . Está recebendo todos os atores da classe de pontos de desova em terraços, que são todos aqueles que Ele está recebendo todos os quatro e agora os estamos armazenando dentro dessa matriz. Tudo bem, agora que temos isso armazenado, novamente, você sempre pode tentar imprimir uma string se quiser, clique com o botão direito do mouse em imprimir uma string assim. Você pode tentar obter este, por exemplo, obter uma cópia dele. Novamente, se você não se lembra das funções de uma matriz, basta pesquisar a matriz e ver todas as funções que podem ser usadas aqui. Por exemplo, você pode dizer get, se eu puder encontrá-lo aqui, este aqui e você pode conectá-lo. Agora você está obtendo o ponto da Espanha no índice zero. E se você jogar, pode ver que é chamado de ponto de rotação terrorista, assim. Se você obtiver o ponto de rotação no índice um nessa matriz, ele será chamado de spin 0.2 Se você obtiver o do índice dois, é chamado de Spin 0.3. Você pode ver essa matriz realmente contém todos os pontos da Espanha. Muito útil, novamente, para usar cadeias de caracteres Pin quando você deseja depurar seu jogo, só está interessado em ver o que essa variável, por exemplo, está realmente Vamos compilar, salvar tudo e seguir em frente 63. 6.03 Importando a interface do usuário: Agora que temos as informações dos pontos da Espanha armazenadas, estamos realmente prontos para criar uma interface de usuário antes de terminarmos a geração. Então, vamos importar a interface do usuário nos materiais de custo que eu forneci dentro deste site, você pode acessá-la e baixá-la novamente. Se você ainda não o baixou, pode entrar na pasta UI. Aqui eu tenho botões para você e eu tenho os ícones e também tenho imagens. Agora, se você clicar nos botões, deixe-me entrar primeiro no motor. E deixe-me criar uma pasta de interface do usuário. Vamos clicar com o botão direito na pasta de conteúdo. Vou criar uma nova pasta chamada I dentro daqui. Vamos clicar com o botão direito do mouse e criar uma nova pasta. E eu vou chamá-lo, por exemplo, de botões. Vou criar um novo chamado ícones. Vou fazer uma nova chamada Imagens. Vamos começar com a pasta de botões. Deixe-me ver os materiais do meu curso. Pegue todos os botões aqui, clique e arraste-os para o seu navegador punt. Assim, você pode ver todos eles importados. Awesome. Agora, para esses aqui, se você apenas abrir um deles, verá que eles são importantes e que tudo está correto. Para torná-los um pouco melhores e não deixá-los embaçados ou com erros dentro do jogo, você precisa alterar o grupo de texturas para Você também precisa alterar as configurações de compressão para a interface de usuário dois D. Então, ele realmente sabe que é um elemento da interface e que não temos nada embaçado ou alguma linha branca por trás dessa interface e assim por diante E você realmente tem que fazer isso para todos eles. Agora vou te mostrar um truque. Já usamos isso antes. E se você apenas selecionar todos eles, poderá escrever Clique em Ir para ações de ativos e Editar em massa por meio da matriz de propriedades. Agora fizemos isso com as animações. Se você se lembra, você também pode fazer isso com os elementos da interface do usuário aqui. Vamos clicar em compressão aqui. Certifique-se de que, nas configurações de compressão transforme-as em uma interface de usuário. Dois D, deixe-me realmente ver qual é o outro, acho que está no nível de detalhe aqui. Um grupo seleciona esse e o transforma em UI. Agora você realmente mudou isso para todos eles e não precisamos fazer isso para cada um deles. Agora você pode ver se clicar em um deles, por exemplo, você pode ver que é a interface de usuário e a segunda interface de usuário, incrível. Tudo está indo bem. clicar em Arquivo e Salvar. Vamos voltar aos materiais do curso. Vamos voltar aos ícones Agora, você pode ver mais ícones do que os que você pode ver aqui na minha tela. Novamente, isso ocorre porque eu geralmente coloco ícones à medida que desenvolvo este curso. Posteriormente, adicionarei mais ícones, mas no seu exemplo ou nos materiais do curso de conteúdo, você provavelmente verá mais ícones. Não se confunda, vamos usá-los mais tarde. Mas por enquanto eu só tenho esses dois. E eu vou até meus ícones e vou arrastá-los até aqui. E novamente, assim como antes, clique nele, transforme-o em uma interface de usuário e em uma interface de usuário dois D. Eu também vou fazer isso para o outro, interface de usuário dois D. Ok, então eles estão prontos. Vamos voltar às imagens agora. E deixe-me abrir meus materiais de custo. Vamos voltar às imagens. Deixe-me importar todos eles para aqui. E às vezes isso realmente os transforma em um mapa normal, como você pode ver aqui. Esses foram importados como mapas normais e eu não quero isso. E clicar em Reverter, Reverter e revertê-lo não os transformará em um mapa normal, então vá em frente e clique no primeiro novamente, selecione o último, clique com o botão direito Acesse Ações de ativos e Edição em massa por meio da matriz de propriedades. Abra a compressão selecione aqui nas configurações de compressão. Selecione a interface do usuário, dois D no nível de detalhe no grupo de texturas, selecione a interface do usuário. Vamos fechar tudo e salvar tudo. Agora que tudo está pronto, vamos para a próxima lição. 64. 6.04 Importando uma fonte personalizada: Tudo bem, agora que adicionamos a interface do usuário, na verdade também precisamos de algum fundo que possamos usar. Alguns textos, textos personalizados, e você pode encontrá-los escrevendo fundos para o Google É muito bom usar isso porque eles são gratuitos e têm muitos fundos interessantes. Se você entrar nos fundos do Google e clicar nele, este é um dos fundos que você deseja usar no seu jogo. O que eu costumo fazer é aqui em categorias, eu geralmente removo a tela, a caligrafia e o monoespaço Novamente, depende do estilo que você deseja para o seu jogo. Quanto ao número de estilos, geralmente gosto de fundos que tenham muitos estilos porque sei que eles ficam bem dentro do jogo. Por exemplo, podemos usar o Roboto ou o Open Sense. Ou você também pode usar, por exemplo, algo como Rubic. Acho que vou usar o Rubic novamente. Escolha o que quiser, não importa. Vou escolher Rubic e clicar em Download Family Ele vai baixá-lo para você. Eu posso clicar nele e abri-lo. E aqui você pode ver todos os fundos estáticos, clicando nos estáticos, e aqui estão todos os fundos, ok? O que vou fazer é minimizar tudo isso aqui no meu desktop. Vou colocá-los aqui primeiro porque é uma pasta e você precisa extraí-la primeiro. Porque se você tentar importar coisas de uma pasta Sip, ela não vai deixar, vai te dar esse erro aqui Novamente, vou minimizar isso. Normalmente, você realmente não precisa de fundos muito leves como este. Luz rubiana, porque é muito difícil de ver no jogo, geralmente escolho as mais ousadas. Rubrica, negrito, extra ousado. Vamos escolher também o semirnegrito, há um meio normal Vou pegar o médio e clicar e arrastá-lo para a área de trabalho para extraí-lo. Agora vou encerrar isso. Agora que temos esses fundos, podemos voltar ao Unreal Engine e deixar eu criar uma nova pasta, na verdade, aqui na pasta UI Deixe-me clicar com o botão direito do mouse e criar uma nova pasta chamada fundos. Vá embora daqui. E vou arrastá-los para minha pasta de fundos. E eu vou te perguntar, você gostaria de criar um novo ativo de fundos usando esses fundos importados? Vou clicar e aplicar em todos os D. Sim, eu quero que você faça isso. Isso criará um fundo para você. Vá em frente e salve tudo. E agora você pode realmente usar esse fundo se entrar em qualquer interface de usuário que estamos criando no futuro. Você pode alterar o fundo para um desses para ver uma maneira muito, muito fácil de adicioná-lo. Está bem? Então, agora que adicionamos fundos ao motor, vamos seguir em frente e apresentarei os projetos do Widgit 65. 6.05 Introdução aos widgets: Vamos agora criar um plano de widget. Os esquemas do widget são basicamente a interface do usuário aqui dentro do Unreal Então, se você clicar com o botão direito do mouse, acesse a Interface do usuário e crie um esquema de widget Mas, em seguida , crie-o e selecione-o. Aqui, aqui em cima, o widget do usuário. E vamos chamá-lo de WB. E vou chamar isso de seleção de equipe, porque estamos criando a seleção de equipe em que você pode escolher ser terrorista ou contraterrorista Vamos abrir esse widget, blueprint. Dentro desse widget. Planta. Quase parece o visualizador de plantas com o qual estamos trabalhando Você pode escrever, clicar aqui e girar para a esquerda. Você pode ver todos os elementos dentro da paleta que você pode adicionar Por exemplo, podemos adicionar imagens, botões, bordas, controles deslizantes, texto e assim por diante Vamos trabalhar muito com tudo isso. Também existe uma hierarquia. Por exemplo, se você clicar e arrastar esse botão para essa hierarquia, aqui você pode ver que temos esse botão adicionado Parece muito estranho agora, mas temos um botão adicionado nossa seleção do Steam, o Widgit Agora, novamente, você pode compilar para garantir que não haja erros, assim como no Blueprint E você pode jogar o jogo no teste e ver seu jogo. No entanto, nós realmente não exibimos essa interface de usuário no nível, então você não pode ver nada no jogo, ok. E à direita você tem um painel de detalhes. Se você clicar no botão, por exemplo, verá que pode mudar coisas sobre esse botão. Você pode alterar o estilo, alterar a cor e também alterar outras configurações. Vamos trabalhar com eles agora. O projeto do Wiga é dividido em duas seções. Você tem o designer agora, você está projetando a interface do usuário. E então você tem o gráfico onde você codifica os botões e assim por diante. Aqui está todo o código, o projeto ou a interface do usuário. Por exemplo, aqui no gráfico você pode codificar, por exemplo, se você clicar nesse botão, o que deve acontecer? Isso é feito aqui no código, aqui você projeta, aqui você codifica a funcionalidade da interface do usuário. Ok, vamos em frente e exclua isso. E a razão pela qual parece tão estranho é porque você realmente precisa adicionar algo chamado tela primeiro Se você pesquisar por tela, você pode clicar e arrastá-la para a hierarquia primeiro E agora você pode ver que tem uma tela. Quando você tem uma tela agora, você pode adicionar elementos a ela. Agora, normalmente eu não clico nessas listas, mas se você é muito novo aqui, pode clicar em todas elas. Tente ler o que você realmente pode fazer aqui. Isso é realmente muito bom. No entanto, se você é novo aqui, geralmente procuro apenas elementos. Você vai se acostumar muito com isso porque na verdade, vamos trabalhar muito com isso Os mesmos elementos que continuamos usando repetidamente, você se familiarizará muito com isso. Por exemplo, você pode pesquisar um botão e clicar nele e arrastá-lo para a tela. E você pode ver que quando você o adiciona à tela, ele também é adicionado na hierarquia Tudo o que você vê dentro dessa hierarquia , também está dentro do seu designer Aqui na tela, por exemplo, você pode clicar nesse botão e redimensioná-lo Ou aqui no painel de detalhes, você também pode redimensioná-lo aqui no tamanho x e no tamanho Y. Por exemplo, você pode pesquisar uma imagem arrastar uma imagem até aqui também. Você pode redimensioná-lo. Clique na imagem, clique no pincel e você poderá alterar essa imagem. Por exemplo, você pode alterá-lo para, na verdade, vamos importar alguns ícones. Se eu pesquisar por ICO e selecionar um dos ícones, e você pode ver aqui, importamos o ícone e você pode brincar com ele. Você também pode clicar em Tamanho para conteúdo. Na verdade, isso o dimensionará para qualquer tamanho que você tenha aqui no tamanho da imagem. Você também pode aumentar e diminuir isso. Normalmente, quando você clica nessas pequenas setas, padrão é qualquer resolução que você Por alguma razão, não está funcionando para mim agora. Não sei se é um bug no motor real ou o que quer que seja, mas geralmente funciona , mas na verdade deve redimensioná-lo para qualquer tamanho que você tenha importado E como você pode ver, as dimensões desse ícone são 256 por 256. Portanto, deve ser 256 como este. Eu pressiono aqui, mas por algum motivo não faz isso. Mas esse é, na verdade, o tamanho original desta imagem aqui, e se você clicar em Tamanho para consentir, ela realmente a redimensionará para esta aqui Ok, então você pode apenas brincar. Temos o botão, temos uma imagem e você também pode clicar em todas elas. Na verdade, não importa se você simplesmente tirar tudo daqui. Basta clicar nele, tentar ver se você agrega valor a ele. Veja se você pode realmente mover esse controle deslizante. E você pode clicar, por exemplo, em Entrada do Editor. Por exemplo, texto editável. Você pode colocá-lo aqui e ver o que acontece. Você pode escrever algo dentro deste texto e simplesmente brincar aqui. Na verdade, é muito divertido dar uma olhada no que está dentro daqui. E vou clicar e clicar no meu botão Excluir e excluir tudo por enquanto. E também vou excluir o painel de tela. Vá em frente e compile, salve tudo. E vamos passar para a próxima lição. 66. 6.06 Exibindo a interface do usuário de seleção de equipe: Vamos agora exibir a interface do usuário antes de realmente projetá-la para exibir a interface do usuário. Normalmente, quando trabalhamos com a interface do usuário, fazemos isso dentro do controle do player. É aqui que controlamos a interface do usuário que entra no controle do player. Vamos ver o gráfico de eventos aqui. O que costumamos fazer no modo single player, pegamos isso e dizemos criar widgets, desse jeito Crie um widget e, em seguida, selecione o widget, por exemplo, seleção de equipe do WB. E então geralmente adicionamos isso à janela de exibição, sem mais nem menos E então podemos clicar em jogar e estamos felizes em poder ver a interface do usuário. E quando eu clico em Escape, você vê que eu tenho uma era. E isso ocorre porque agora estamos no modo multijogador para exibir a interface do usuário e podemos realmente ver alguma coisa. Vamos primeiro entrar na interface do usuário novamente. Deixe-me adicionar uma tela novamente, deixe-me adicionar uma imagem aleatória porque eu realmente quero ver se ela foi adicionada à janela de visualização ou não Então, vou adicionar essa imagem estranha aqui à minha interface de usuário. E eu clico em Jogar, e você pode ver que está realmente sendo exibido na minha tela, tanto no cliente quanto no servidor. Na verdade, estou exibindo a interface do usuário agora. No entanto, se eu clicar aqui, se eu clicar em Escape, você verá que somente controladores de jogadores locais podem ser atribuídos aos widgets Lembre-se de que, quando estamos trabalhando com a interface do usuário, não precisamos realmente executá-la no servidor. Isso ocorre porque cada jogador tem sua própria interface de usuário. Não é como uma arma que você tem no jogo, em que você precisa passá-la pelo servidor e, em seguida, o servidor precisa replicar essa informação para os clientes e dizer a eles que você tem uma arma aqui no chão É diferente para a interface do usuário, cada jogador tem sua própria interface de usuário. Não é como se estivesse sendo executado no servidor e, em seguida, o servidor estivesse atualizando sua interface de usuário. Não é assim que está acontecendo. Isso está acontecendo com cada jogador como sua própria interface de usuário. Não está sendo executado no servidor. Quando você trabalha com a interface do usuário, precisa executá-la por meio do cliente. Lembre-se de que toda vez que você tem uma interface de usuário, precisa executá-la por meio do cliente. Vamos deletar tudo isso por enquanto. O que vou fazer é clicar com o botão direito do mouse e criar um novo evento personalizado aqui dentro do controle do player. Vamos chamar isso de widget show hide. Basicamente, o que esse widget ou esse evento fará é mostrar ou ocultar o widget, dependendo do que você mandar fazer Agora temos que dar dois parâmetros. Qual widget ele vai mostrar ou ocultar? E isso vai mostrar ou esconder isso? Aqui, deixe-me usar esse nome para mostrar que isso será verdadeiro ou falso. Se for falso, ele ocultará a interface do usuário. Se for verdade, mostrará a interface do usuário. Podemos usar esse touro aqui. No entanto, para o segundo, temos que dizer de qual widget estamos falando Temos que fazer uma enumeração. Vamos minimizar isso. Vá até a pasta de esquemas para enumerações Lembre-se de que criamos esse chamado estados de movimento anteriormente. Agora vamos clicar com o botão direito do mouse e criar um novo. Vá para a planta e a enumeração. Vamos chamar isso de widgets de jogo. Podemos fazer uma lista de todos os widgets de jogo que temos Para este, deixe-me adicionar um novo enumerador, um item de lista. Deixe-me chamar isso de seleção de equipe, porque agora queremos criar o widget de seleção de equipe Você também pode fazer um mais tarde. Por exemplo, o Mau I, que na verdade é o principal com sua saúde e assim por diante. Você também pode criar um novo chamado menu Escape quando tiver um e assim por diante, mas, por enquanto, vou excluí-los. Eu só tenho a seleção da equipe. Vamos economizar agora dentro da nossa lei de controle de jogadores. Vamos clicar novamente em nosso evento. Vamos mudar esse tipo para E. Nós o chamamos de widgets de jogos. E é essa, essa enumeração. Vá em frente e chame isso de Widgets. E aqui está. Então, vamos compilar agora Como você pode ver, se eu escrever, começar, jogar e criar o evento start play. Se eu arrastar daqui e chamar esse evento, mostre o widget ocultar Mostre ocultar widget, você pode ver agora que posso selecionar de qual widget ou de qual widget estou falando E então eu posso selecionar se eu quero ocultá-lo, significa que o show é falso. Ou se eu quiser mostrar a interface do usuário. E podemos executar o código por aqui. Ok, muito, muito legal. Agora vamos continuar com o código. Eu disse que isso precisa ser executado no cliente, então toda a interface do usuário que você cria precisa ser executada por meio do cliente. Então, vamos clicar com o botão direito do mouse e criar um novo evento personalizado. Vamos chamá-lo de CL para cliente, mostrar widgets ocultos. E vamos executar isso através do cliente e, de forma confiável, assim como o que está aqui em cima, precisamos das duas entradas Vamos criar as duas entradas. O primeiro é chamado de widgets e ele já selecionou este O segundo é chamado show the bullion. Mostrar ou ocultar. E vamos selecionar o lingote como o tipo. Temos que passar por aqui. Escolha os widgets CL, mostre e oculte aqui também Então, estamos conectando o evento do cliente aqui. E vá em frente e conecte-os. Ok, então o que está acontecendo agora é no Begin Play Quando você começar a jogar, mostrarei a interface de seleção de equipes instantaneamente. Então, vou marcar isso e mostrar a interface de seleção de equipes. Quando eu fizer isso aqui no início do jogo, o código será executado aqui. Então, ele colocará essas informações no cliente. E agora essa informação vem aqui e podemos usá-la como quisermos. Agora vou arrastar esse touro e escrever uma ramificação porque quero saber se vou mostrar a interface do usuário ou vou ocultar a interface do usuário? Isso é falso ou é verdade? Isso é o que estou perguntando agora. Agora, se for, vamos criar uma nova função. Vamos criar essa função chamada show widgets. Vamos criar outro chamado Hyde widgets. Novamente, clique neles e adicione uma nova entrada do widgit tipo A enumeração que fizemos antes e a chamamos de widget é compilada novamente porque precisamos saber que Widgit estamos falando no widget Faça uma nova entrada e chame-a de widget. Novamente, certifique-se de que esse tipo também seja um widget de jogo. Ok, vamos voltar ao gráfico. Vamos arrastar as funções que acabamos de criar. Eles ainda estão vazios. Não há nada dentro deles. Mas, por enquanto, vamos adicioná-los aqui. Ok, mostre o widget ocultar. Se for verdade, precisamos mostrar o widget Esse, eu posso conectá-lo. Se for falso, precisamos ocultar o widget e podemos selecioná-lo aqui Agora, de que widgit estamos falando? Essas informações que temos aqui, porque as configuramos aqui, podemos conectá-las às entradas que acabamos de criar podemos conectá-las às para aqueles que estão aqui Agora, essas informações vão para dentro da função. Agora temos isso aqui, e podemos fazer o que quisermos. Qual é o nosso objetivo aqui? Para mostrar um widget, precisamos usar o nó chamado create widgit. Precisamos usar esse aqui. Em seguida, temos que selecionar de qual widgit estamos falando. Este, por exemplo, aqui, como você pode ver na enumeração, poderíamos ter muitos itens Precisamos saber qual é o valor dessa enumeração. Fazemos isso simplesmente arrastando a partir daqui e procurando por Switch E temos esse chamado Switch na enumeração. Vá em frente e selecione-o. E agora ele fornecerá um pino de execução, dependendo dos itens da lista que você tem. Por exemplo, se eu voltar à minha enumeração e digamos que eu tenha um MenuI e um menu de escape, exatamente assim, exatamente assim Vá em frente e salve-o. E vamos voltar ao controle do player. Agora você pode ver que eu recebo pinos de execução, dependendo dos itens da minha lista, independentemente do que você configurou aqui Então, se eu voltar, o que você selecionar aqui passará por esse evento, coloque-o dentro do cliente e ele continuará o código, coloque-o dentro da função. Agora ele sabe que você está falando sobre a seleção da equipe porque você a selecionou aqui. Então, ele executará o código dentro da seleção do jogador. Ele não executará o código que está escrito aqui. E não executará o código que está escrito aqui. Só vou executar o código que está escrito aqui porque você definiu o valor para a seleção da equipe. Ele só vai passar por aquele pino de execução agora. É assim que fazemos. Na verdade, vamos excluí-los por enquanto. Nós realmente não precisamos deles, precisamos apenas da seleção da equipe. Vá em frente, salve e compile isso também. Ok, para criar ou mostrar um widget, vá em frente e crie o widget Selecione qual deles você deseja mostrar. Em seguida, vamos clicar com o botão direito do mouse e promovê-la em uma variável. Como é muito útil com a variável, podemos usá-la posteriormente para executar eventos. Essa eu vou chamar de seleção WB . Agora que você criou a interface do usuário, agora, se você clicar em Play, ela realmente não mostrará nada. Isso ocorre porque não basta apenas criar a interface do usuário. Você também precisa arrastar a partir daqui e dizer Adicionar à janela de exibição. Agora ele é adicionado ao Viewport. Agora, se você clicar em Reproduzir, verá que agora ele foi adicionado à janela de visualização e não há erros ao clicar no botão Escape Ok, isso está parecendo bom. Agora, para garantir que você não continue adicionando isso à sua janela de visualização sem nenhum motivo, deixe-me desconectar aqui e afastar isso Deixe-me pegar essa variável, arrastá-la até aqui, clicar com o botão direito do mouse e convertê-la em um get validado, vá em frente e conecte-a Agora, se essa variável não for válida , o programa ou mecanismo irreal não sabe realmente do que você está falando com essa variável porque você não colocou nenhuma informação dentro dela Isso significa que ainda não executamos esse código. Se não for válido, vá em frente e crie a interface do usuário. No entanto, se for válido, se essa variável já contiver o widget Então, já executamos esse código antes. Na verdade, não queremos executá-lo novamente, só queremos adicioná-lo à janela de visualização, assim, ok? Portanto, isso evita que criemos a interface do usuário repetidamente. Se não for válido, vá em frente e crie a interface do usuário e, em seguida, adicione-a à janela de exibição a interface do usuário e, em seguida, adicione-a à janela de exibição . No entanto, vá em frente e basta adicioná-lo à janela de exibição Vamos compilar e salvar tudo. Agora, para o widget de ocultação aqui, a mesma coisa. Vamos atacar a partir daqui e dizer que ative a enumeração. Vamos pegar essa variável, agora que a criamos, vamos clicar com o botão direito do mouse em converter em um get validado. Vá em frente e conecte-o. Agora, se for válido, significa que realmente queremos ocultá-lo. Agora vamos atacar a partir daqui e dizer remover do Parent. É assim que você remove a interface do usuário do seu Viewport. Remova do pai, se for válido, vá em frente e remova-o, porque queremos ocultá-lo. Agora, se você compilar e clicar em Reproduzir, poderá ver a janela de visualização Na janela de exibição, você adicionou a interface do usuário. Se você prosseguir no gráfico de eventos de controle do jogador, basta remover o programa, porque agora, na verdade, quando é falso, vai passar por aqui e vai passar por aqui. E mostrará falso porque você o definiu como falso. O que significa que ele irá em frente e ocultará a interface do usuário, o widget. E ele sabe de qual widget você está falando, porque está inserindo essas informações aqui E isso vai ocultar a interface de seleção de equipes. Como você pode ver aqui quando eu jogo, não vejo a interface de seleção de equipes. Mas, por enquanto, na verdade, queremos mostrar a interface do usuário à frente para a seleção da equipe, vá em frente e clique em Mostrar. Agora ele deve funcionar perfeitamente. Agora, se quiser tornar isso mais organizado, você sempre pode clicar e criar pinos de execução, ou pode selecionar todos eles. Clique em C no teclado e chame-o, por exemplo, de Mostrar Ocultar UI e assim por diante. Então, vá em frente e mantenha-se organizado. Mas, por enquanto, vamos compilar, salvar tudo e seguir em frente 67. Tamanho da interface dinâmica para todos os tamanhos de tela: Agora, antes de começar a projetar a interface do usuário, é muito importante saber como ela se parece em outras telas, não apenas na sua tela, mas na minha tela. Se você cria seu jogo, precisa saber como ele se parece na minha tela, que é um monitor com resolução de quatro K. E também na tela de um laptop e assim por diante. Portanto, você precisa redimensioná-lo corretamente. Na verdade, vamos aprender isso antes de realmente projetarmos, porque será mais tarde se você projetar de maneira errada. Por exemplo, vamos ver o esquema do widget. Vamos adicionar um pouco de texto. Essa será a maneira mais fácil de ver isso. Adicionando uma tela de texto e digamos que estou redimensionando algo assim, seja o que for Agora que você tem isso dentro da interface do usuário, vamos continuar e compilar E vá em frente e clique em Placa. Agora, isso é o que parece na minha tela. E normalmente eu simplesmente pego meu plano de widget e retomo meu jogo aqui E eu geralmente tento compará-lo. Vá em frente e abra seu jogo aqui. Vou minimizá-lo um pouco e tentar ver como fica no jogo. Isso é o que realmente parece. Se eu comparar com aqui, parece um pouco maior aqui, na verdade se parece com isso. Quando eu aumento e diminuo o zoom, você pode realmente ver o zoom aqui em cima. No momento, ampliei mais três e agora parece Com zoom mais três, parece correto. Agora, isso pode parecer um pouco estranho para corrigir isso. Agora suba aqui no tamanho da tela. Normalmente, o que você quer fazer é querer, na interface do usuário, na menor tela possível. Se você quiser projetá-lo para jogos para celular, clique no tamanho da tela, vá para os telefones e selecione o telefone. Você deseja projetá-lo para a menor tela. No momento, eu só quero fazer um jogo de computador. Vou clicar aqui. Normalmente eu o desenho para laptops. Esses notebooks genéricos de 14, 15 polegadas. Eu não vou agora. Eu tenho um monitor de quatro K. Eu posso selecionar isso e apenas projetá-lo aqui. No entanto, talvez fique assim na tela se você tiver um monitor de um K e assim por diante. É muito importante projetá-lo corretamente. Primeiro, vamos clicar no tamanho da tela. E vou selecionar o tamanho genérico do laptop. Agora, se eu aumentar o zoom e for um a um como este aqui no tamanho de um laptop, agora, eu estou realmente olhando para ele e vendo como é. Se eu abrir este jogo agora no meu laptop, esse é o tamanho do texto Por exemplo, no laptop, vamos clicar nesse fundo. Clique no fundo e eu faço o tamanho, por exemplo, 30. Agora é o que parece no laptop. Mas se eu jogar, agora é assim que parece. No meu monitor de quatro K, você pode ver que há uma diferença. Esse é o laptop. Esse sou eu. Eu vejo que é muito maior no meu do que no laptop. Se você não gosta disso, se às vezes a interface do usuário fica muito grande nos monitores maiores, você pode clicar neste botão aqui embaixo. Aqui você pode ver o dimensionamento da interface do usuário. Os laptops genéricos estão aqui embaixo. Como você pode ver, essa é a resolução. Estou projetando para esses laptops. Agora eu tenho um monitor de quatro K, e na verdade está aqui. Você pode ver que em um monitor de quatro K, estou aumentando em 3,8. É 3,8 maior do que um laptop Agora, se você não quiser aumentar tanto, você pode selecionar esta resolução. Em vez de escalar para oito, vou escalar para quatro, por exemplo Agora você pode ver que não vai aumentar tanto em comparação com antes. Agora, se eu clicar em Play , na verdade é menor do que era antes. Se eu voltar, na verdade, clicar aqui, deixe-me aumentá-lo para algo como 18, que você possa realmente ver algo extremo. Se eu clicar em Jogar, você pode ver que agora é muito grande. Normalmente, o que eu gosto é que, se estou satisfeito com o tamanho do laptop, tento escalá-lo. Então, também estou satisfeito com meu monitor de quatro K. Normalmente, está em torno de 2,5 na escala. Eu não gosto de ir muito. Você pode clicar nesses botões. É, é para sua tela desse jeito. Vou apenas diminuir um pouco o zoom. Talvez seja só clicar em, vou diminuir um pouco o zoom, para que fique melhor. Deixe-me clicar em jogar Agora, acho que isso parece bom. Se eu precisar dimensioná-lo mais, eu o redimensionarei Mas eu acho que isso parece bom. Você pode compará-lo agora e quase parece o mesmo. Vou tentar projetá-lo com a escala de 2,5, mas, novamente, vá em frente e brinque com ele. Basta aumentar e reduzir isso, dependendo da aparência do monitor em comparação com o monitor do laptop. Ok, quando você estiver satisfeito, vamos fechar tudo e salvar tudo. Vamos passar para a próxima lição. 68. 6.08 Projetando a interface do usuário de seleção de equipe: Agora que estamos exibindo a interface do usuário na tela e temos o tamanho correto, vamos prosseguir e projetar a interface do usuário. Vamos encerrar o jogo. Vamos até a pasta UI. E aqui, dentro do widget de seleção de equipe, planta. Agora vamos deletar isso aqui. A única coisa que temos agora é o painel de tela. Novamente, se você ainda não o adicionou, vá na paleta e pesquise por tela E vá em frente e adicione-o ao seu widget, blueprint. A tela é muito importante. Você precisa adicionar isso antes de fazer qualquer coisa. O que queremos projetar é a seleção da equipe. Isso é do meu outro projeto. Eu gostaria de mostrar a interface do usuário para que você saiba o que está projetando. É isso que queremos projetar. Sempre que você começa a projetar a interface do usuário, precisa imaginar o que deseja criar, pois será muito mais fácil para você. É isso que vamos projetar. Vamos até aqui. A primeira coisa que queremos fazer detalhar a interface do usuário. Se eu levar isso de novo aqui para você, você tem que detalhar. Como você pode ver aqui, temos um plano de fundo e um texto em cima dele. Quando você tem duas coisas uma em cima da outra, precisa usar essa chamada sobreposição Quando a sobreposição sobrepõe itens uns sobre os outros, quando você tem algo em cima de alguma coisa, pense em uma sobreposição arrastando-a até aqui, e vamos procurar uma imagem, o plano de fundo, e colocá-la aqui também, e colocá-la aqui também, quando você tem algo em cima de alguma coisa, pense em uma sobreposição arrastando-a até aqui, e vamos procurar uma imagem, o plano de fundo, e colocá-la aqui também, dentro da sobreposição. Assim mesmo. Vamos arrastar isso para o meio da tela para que possamos ver o que estamos fazendo apenas redimensionando essa sobreposição para preencher essa imagem Você pode ver que é muito pequeno. Para preencher esta imagem em toda a tela, você precisa aqui no alinhamento horizontal e vertical, clicar aqui para preencher, horizontal e verticalmente, ela preenche toda a sobreposição ela preenche Não importa o tamanho da sua sobreposição, sua imagem preencherá tudo Queremos preenchê-lo com o plano de fundo. Agora, no fundo, você pode clicar aqui para ver a imagem, e no pincel aqui, clicar na imagem e você pode pesquisar, acho que chamei de painel. E esse painel é azul. Novamente, depende de você o que você deseja usar. Você pode usar outra cor, mas eu vou usar a azul. E aqui está. OK. Neral Engine, para fazer com que as coisas não fiquem embaçadas dessa forma e que elas se estendam corretamente, você tem que mudar isso em vez de uma imagem, você tem que transformá-la em Agora, antes de fazer isso, deixe-me realmente mostrar como funciona. Se eu for até as imagens da interface do usuário e pesquisar o painel, você pode ver se eu segurar o mouse sobre ele, na verdade é uma imagem muito pequena. São 68 pixels por 68 pixels. Se você abri-lo, isso é realmente o quão grande ele era quando eu o projetei no Photoshop Este você pode tornar muito grande e ainda ficar bem no Unreal Engine Se você acabou de adicionar a imagem, pinte os desenhos em uma caixa e altere a margem para 0,5, como se você clicasse nesta. Aqui você remove essas linhas tracejadas. Eu gostaria de fazer isso para ver minha interface de usuário sem que nada me distraia E é isso que parece que você pode ver, mesmo sendo uma imagem pequena agora você pode simplesmente clicar na sobreposição esticá-la e criar outra coisa sem que fique embaçada Recurso muito legal no Unreal Engine. Você não precisa criar cada botão, você pode simplesmente criar a base e, em seguida, criar os próprios botões aqui dentro. Este é o nosso histórico para a seleção da equipe. Agora, para a seleção da equipe , também, se eu arrastar isso para aqui, novamente, temos algum texto abaixo dela. Nós temos esses botões. Temos algo chamado caixa vertical. Se você for até aqui e pesquisar por vertical, verá essa caixa vertical. Vou adicioná-lo à sobreposição. Agora, na caixa vertical, temos algum texto na parte superior como título. Como você pode ver aqui, também temos esses botões. Antes de adicionar esses botões, você também precisa detalhar isso. Na verdade, você tem uma caixa horizontal. Eles estão alinhados horizontalmente entre si. Se eu procurar por uma caixa horizontal, essa caixa horizontal, você tem que colocar na caixa vertical. Nós temos o título, temos o título aqui. E então temos a caixa horizontal onde adicionamos os dois botões. Ok, esse aqui. Na verdade, o título precisa ficar no meio. Vou clicar no texto, alinhá-lo aqui horizontalmente ao meio E você pode ver que nada acontece quando eu o alinho no meio Às vezes, quando você faz isso dentro de uma interface de usuário, não se confunda, você também precisa olhar para o pai. Não importa se o texto está alinhado dessa forma ou se a caixa vertical também não está alinhada Você pode ver a caixa vertical ao clicar em uma delas. Aqui você pode ver que a caixa vertical é, na verdade, apenas essa seção. Isso não acontece, se você alinhar esse texto aqui, aqui e aqui, você só tem o espaço Não está preenchendo a coisa toda. Clicando na caixa vertical, tenho que preenchê-la aqui nesta sobreposição clicando no alinhamento horizontal e no alinhamento vertical Agora você pode ver que é. Preenchendo horizontal e verticalmente. Ok, agora, quando eu alinho o texto, ele deve funcionar. Sempre preste atenção ao pai aqui em cima, como ele está alinhado Porque se estiver alinhado assim, esse texto nunca vai aparecer aqui Vá em frente e alinhe-os horizontalmente desta forma. Agora, para dar mais espaço às bordas, podemos clicar na caixa vertical e empurrá-la aqui para baixo no preenchimento ou à esquerda Na verdade, você também pode escrever um número aqui, por exemplo, 50 ou 102030 Você pode ver que pode empurrá-lo pelas bordas 50, 60 e assim por diante. E se você quiser empurrá-lo especificamente em direções, por exemplo, colocarei a esquerda em 55 e a parte superior colocarei em 45. Não tanto quanto a esquerda e a direita. A direita é 55 e a parte inferior também é 45. Algo parecido. Lembre-se, estou no zoom mais dois. O tamanho real é parecido com isso. Apenas preste atenção no zoom em que você está , pois você pode estar muito ampliado. Isso é o que realmente parece agora. Acho que o espaçamento até as bordas está bom agora. O que você pode fazer é seguir em frente e continuar nosso design. E então podemos seguir em frente e estilizar tudo. Vamos clicar na caixa horizontal. Agora, para a caixa horizontal, temos esses dois botões. Agora, novamente, estamos sobrepondo um botão. Em cima dela está uma imagem e também temos um texto. Novamente, você precisa usar uma sobreposição, caso contrário, não poderá sobrepor coisas umas sobre as outras Dentro da caixa horizontal, temos uma sobreposição. Dentro dessa sobreposição, temos um botão e, em seguida, temos uma imagem, que é o ícone do botão Também temos alguns textos. Se eu pesquisar texto e adicioná-lo aqui, temos o botão, a imagem e algum texto. Clicando nessa sobreposição, na verdade, nessa caixa horizontal, novamente, temos que preenchê-la aqui. Então você pode ver que, embora eu o esteja alinhando horizontal e verticalmente, ele não está alinhado verticalmente verticalmente E isso ocorre porque você precisa clicar em Preencher e ele preencherá tudo. Ao clicar nesse botão, vamos adicionar algo a esse botão. Clique no botão, vá para o Estilo, clique em Normal aqui em cima e selecione o botão. Vou selecionar o botão vermelho. E geralmente eu chamo os botões BTN. Você pode tentar pesquisar qual botão deseja usar. Novamente, é opcional, depende de você. No entanto, o que eu quero usar é esse chamado Button Red, eu acredito, ou Button Square red, como este. E eu vou escolhê-lo aqui. O que você pode fazer é, novamente, pintar. Vou clicar na tonalidade e colocá-la em branco, porque não quero nenhuma tonalidade cinza no meu Na verdade, essa é a cor real. Se você colocar em branco aqui, a caixa arredondada, eu vou trocá-la por uma caixa, uma caixa normal. Novamente, a margem, o que eu disse antes, defina-a para 0,5 e parecerá normal. Agora vamos ver se temos outras coisas para mudar e não, se você quiser copiar essa configuração para o hovert, você não precisa fazer tudo isso Novamente, segure a tecla Shift e clique com o botão direito. Ou, novamente, você pode simplesmente clicar com o botão direito e copiar. Mas você pode segurar a tecla shift e o botão direito do mouse para copiá-la, e a tecla shift e o botão esquerdo do mouse para colá-la também para esses dois. Lembre-se de clicar no cursor. E lembre-se também colocar o cursor no tabuleiro E clique no pressionado até o, pressionou este. OK. Talvez também precisemos ajustar o tamanho da imagem, mas vamos fazer isso mais tarde. Por enquanto, neste você pode ver que está muito esticado. Então, o que vou fazer é clicar na sobreposição e clicar em Preencher Então, ele preenche a coisa toda. Então, deixe-me realmente copiá-lo novamente. Ao clicar nessa sobreposição, vou clicar em Control D, e isso copiará o outro botão Então, eu posso realmente ver o que parece se eu tiver dois botões. Agora eu tenho essas duas sobreposições, e vamos colocar um espaçador entre elas, procurar por espaçador e adicioná-las procurar por espaçador e entre E então vamos adicionar algum espaço entre essas duas sobreposições. Esse é o eixo x e esse é o eixo Y. E precisamos de espaço no eixo x. Deixe-me escrever algo como 50. E agora você pode ver que há algum espaço. Agora, para este texto. Eu quero que esteja na parte inferior deste botão aqui. Ao clicar no texto, vou alinhá-lo ao botão aqui e também no meio E a mesma coisa com esse alinhamento inferior e no meio horizontalmente Ok, agora vamos aos botões. Eu não quero que eles sejam esticados assim. Ao clicar em um dos botões, em vez de alinhá-lo verticalmente, vou clicar na parte A mesma coisa aqui. Clique na parte inferior. Alinhe verticalmente, assim. Em vez de alinhá-lo verticalmente, vamos controlá-lo nós mesmos Clique no botão, você pode clicar no Tamanho da imagem. Aqui, este é o Y aumentando para cima e para baixo. Você pode aumentar o Y do botão e escolher o tamanho que ele deve ter para este e este, algo como 160. Por enquanto, 160. Na verdade, vamos adicionar os ícones antes de decidirmos qual tamanho eles devem ter. Vou fazer de novo para a imagem, é alinhá-la no meio Na verdade, vamos fazer isso por ambos. Vamos clicar nos dois. Clique em um controle antigo, clique no próximo. Vamos alinhá-los no meio e na parte inferior novamente. Para empurrá-los para cima novamente, podemos usar o acolchoamento, empurrando-os de baixo para cima Então você pode empurrá-los, por exemplo, 40, algo assim, 50, 60. Você pode ver que pode empurrá-los para cima em torno de 40. Na verdade, deixe-me mudar o ícone primeiro. Clique na imagem e vamos mudar o ícone. Se você pesquisar ICO para este, vou selecionar o contador ou o terrorista para este, vou escolher o contra-terrorista. Aqui podemos ver que eles são muito pequenos por algum motivo. Novamente, esses botões não funcionam, então eu tenho que adicionar o tamanho manualmente. Se você simplesmente descer aqui, na verdade, e clicar se eu for até a interface do usuário até os ícones, se você segurar o mouse sobre esses ícones, poderá ver as dimensões. O tamanho real é de 256 pixels por 256 pixels. Se você puder clicar nele, se escrever 256 por 256, esse é realmente o tamanho real do ícone. No entanto, isso é muito grande. Mas lembre-se de que, se você aumentá-lo mais do que o tamanho máximo que ele tem, ele ficará embaçado. Não exagere nisso. O que eu vou fazer é talvez fazer com que seja 150 por 150. E a mesma coisa para o contraterrorista, o tamanho 150 por 150. OK. Algo parecido. Agora, para controlar o quão altos e baixos esses botões estão, você pode clicar na caixa vertical, na verdade, na própria sobreposição E então você pode simplesmente redimensionar a caixa vertical. Em seguida, escolha até que ponto esses botões devem ser comparados ao título para cima e para baixo. Clicando nesse texto também. Eu quero estilizar esses textos. Lembre-se de que adicionamos alguns fundos dos fundos do Google, The Rubic one Sempre podemos clicar no texto, clicar na família da fonte e, em seguida, escolher um dos estilos rubicos Para este, vou escolher apenas a rubrica em negrito. E então vou definir o tamanho para um pouco menor, talvez algo como 22. Em vez disso, vou adicionar um esboço ao texto. Se você selecionar os dois novamente, vá para Configurações de contorno Vou definir o tamanho para algo como, você pode tentar 1234, acho que algo como três está bem aqui E depois também mude a cor. Vou mudar a cor clicando na cor do contorno e depois usando o seletor de cores Então eu vou escolher uma cor escura, talvez essa aqui. Vá em frente e clique nele e ele escolherá essa cor. Você acabou de selecionar. Ok, para o texto, se você quiser empurrá-lo para baixo, você sempre pode tentar essa parte inferior aqui, por exemplo. Menos dois, menos cinco. Você pode ver que pode arrastá-los para baixo. Se você escrever um número positivo, na verdade você o pressiona para cima. Algo parecido. Você também pode usar este aqui embaixo, o tradutor, se eu puder encontrá-lo aqui embaixo, a transformação. E então tradução, você pode traduzi-la em y. Se você escrever dois aqui, por exemplo 56, você também pode empurrá-los para cima e para baixo na tradução, pois isso pode ser algo, dois está bem. Nós apenas o empurramos um pouco para baixo. OK. Eu vou estilizar esse texto também Clique nele. Vá em frente e selecione o negrito Ruby Este eu fiz 22. Este eu estou fazendo 24 porque é um título. E então vá em frente e selecione as configurações de contorno. Vou colocá-lo em três, assim como os outros. Para a cor do contorno, vou talvez usar essa cor escura ou essa, vou escolher essa cor escura e clicar em OK. Agora você pode simplesmente ir em frente e alterar o texto. Por exemplo, selecione uma equipe para essa. Vou escrever Terri para o outro, vou escrever terrorista Ok, para o daterrista. Na verdade, eu quero mudar o botão. Você pode clicar nele, alterar esse botão. Vou mudar para quadrado, acho que quadrado verde. E vá em frente e selecione quadrado verde. Assim mesmo. Novamente, assim como antes. Você pode copiar isso em cima dos outros, clicar no texto, clicar na cor do contorno Pegue o seletor de cores e selecione este em vez disso. Ok, eu acho que isso parece muito melhor do que antes. Ok, agora vamos ver o que está errado. Agora, se você clicar em Play, é sempre bom compilar Clique em Jogar e veja o que está acontecendo. No momento, você pode ver que a interface do usuário ou o widget de seleção do Steam na verdade, na parte superior da imagem e não no meio Você pode ver se você clicar na tela, na verdade está aqui. Se você simplesmente arrastar essa sobreposição aqui, por exemplo, no canto inferior direito, e clicar em Play, poderá realmente ver que ela está no meio Isso realmente não faz sentido. Deveria estar aqui embaixo, porque acabei de colocá-lo aqui. Esse é um conceito muito importante que você precisa entender esses pontos de ancoragem Eles são muito importantes no momento. O que está acontecendo é que você tem o ponto de ancoragem aqui em cima. Se eu clicar em jogar, tento maximizar a tela aqui, você pode ver que essa interface de usuário está ficando. extremidade da tela aqui em cima, ela será empurrada para cá. Isso ocorre porque seu ponto de ancoragem está lá em cima. Não vai ficar aqui como você deseja. Você tem que mudar o ponto de ancoragem. Lembre-se de sempre fazer isso com sua interface de usuário. Ao clicar na sobreposição, você precisa alterar o ponto de ancoragem clicando aqui. Como você pode ver aqui, somente o pai tem um ponto de ancoragem Todos os outros não têm pontos de ancoragem, apenas o principal Clicando nesse, vá em frente e clique em Âncoras e selecione onde você deseja alinhá-lo. Para esta interface de usuário. Quero alinhá-lo no meio, selecionando o ponto de ancoragem central no meio da tela desta forma Então, para a posição, vou escrever 00 para alinhá-la no centro Mas, como você pode ver, não está alinhado com o centro. Na verdade, é até aquele ponto aqui. É aqui que você tem que jogar com o alinhamento. Se você apenas aumentar esse, verá que agora está aumentando corretamente. Está no meio, na posição 00. Agora, para este, você tem que escrever o número exato em vez disso. 0,50 0,5 Você pode ver aqui, se você escrever zero no alinhamento, esse é o alinhamento x. Ele vai se alinhar dessa maneira. Se você escrever 0,5 , está no meio. Se você escrever um, ele vai para o outro lado do alinhamento. Você pode escrever 00 ponto 5.1 Você tem essas opções. Vou escrever 0,5 por 0,5 porque vai alinhar isso no meio e na posição 00 Agora você pode ver que está diretamente no meio. E se eu compilar e jogar , deve estar no meio Não importa o tamanho da tela que eu tenha, ela vai ficar no meio da tela. OK. O próximo problema que temos agora é que o mouse realmente não aparece, e vamos fazer isso mais tarde. Nós vamos consertar isso. No entanto, se eu tentar passar o mouse sobre os botões, eles estão realmente E eu tenho que consertar isso. Isso ocorre porque, se você clicar no botão e clicar no normal, definirá o tamanho da imagem para 32 por 160. No entanto, para o hovert, o tamanho da imagem ainda é muito baixo Você deve copiar o tamanho da imagem do tamanho normal, com base no cursor e no pressionamento de todas elas pressionamento de todas E faça o mesmo com o verde. Copie isso, com base no da imagem exibida e também no tamanho da imagem pressionada Vamos continuar e compilar, ok. Clique em jogar. Agora, novamente, se eu passar o mouse sobre ele, você pode realmente ver que consigo passar o mouse sobre o No entanto, quando coloco o mouse sobre a imagem, não consigo realmente passar por cima do botão, e a imagem e o texto estão, na verdade, bloqueando o botão. Vamos consertar isso. Clique nas imagens, todas elas aqui. E o texto também. Você tem que encontrar esse chamado visibilidade. E você precisa configurá-lo para não ser testável. E isso significa que as imagens e os textos são apenas decoração. Não quero que meu mouse interaja com eles. Eu escolho este não testável, e isso garantirá que eles não interajam com meu mouse Agora, quando clico em reproduzir e tento passar o mouse sobre o botão, você pode ver que ele também paira, mesmo eu esteja passando o mouse sobre o ícone e o texto Ok, então foi isso para o CI. A última coisa que quero fazer é também deixar o fundo desfocado porque, como você pode ver, está tudo bem. No entanto, também gosto que meu plano de fundo fique embaçado. Agora é opcional. Talvez eu o remova mais tarde. Mas, por enquanto, vamos pesquisar desfoque e colocá-lo aqui em segundo plano, ou seja, sobre a sobreposição fora de Agora, para este, novamente, lembre-se de mudar o ponto de ancoragem Quero que esse desfoque preencha a tela inteira. Como você pode ver, para esse desfoque, você pode alterar a intensidade do desfoque Então, algo como 50 , como você pode ver aqui. Mas eu quero que ele preencha a tela inteira. O que você precisa fazer é clicar no ponto de ancoragem novamente e preencher a tela inteira. Assim mesmo. E altere o deslocamento para 0000, sem mais nem menos. Agora ele vai preencher toda a tela. E se você clicar em Play, a tela ficará desfocada. Agora, quanto à quantidade de desfoque, na verdade vou reduzi-la para algo como dez Isso ocorre porque você também pode ver o fundo, um efeito muito legal enquanto seleciona a equipe. Ao entrar no jogo, você pode ver os outros jogadores jogando enquanto você seleciona a equipe. Ok, agora que terminamos, vá em frente e salve tudo e vamos para a próxima lição. 69. 6.09 Efeitos de som do Button: Agora vamos adicionar alguns efeitos sonoros aos botões. E para fazer isso, vamos examinar os materiais de custo. E dentro daqui, vamos ao áudio. E eu tenho esses efeitos sonoros para você. O botão passa o mouse e o botão é pressionado. Vamos também para a pasta de áudio, o motor e os efeitos sonoros. E vamos arrastá-los para o navegador de conteúdo. Agora, clique com o botão direito do mouse no botão, passe o mouse em Criar. E eu vou ligar para ele, então passe o botão. Para o outro, pressionado, vamos clicar com o botão direito do mouse em Criar Q e chamá-lo de pressionamento do botão de som. Vamos entrar em ambos. O passar o mouse e o pressionado. Deixe-me reduzir o som para talvez 0,25 Isso soa bem para a imprensa Deixe-me colocar em 0,4, talvez. Sim, isso soa bem. Ok, vamos salvar tudo de novo. Como eu disse antes, podemos ver se você toca o som. Se você quiser que isso seja diferente. Toda vez que você pode adicionar um modulador e conectá-lo aqui, você pode Eu gostaria de mudar o tom de 0,9 para 1,1. Parece diferente toda vez que você pode fazer a mesma coisa aqui. Vou copiar o modulador. Vou colá-lo aqui e conectá-lo aqui também. Agora, isso também soa diferente a cada vez, quando você passa o mouse sobre os botões Ok, incrível. Vá em frente e salve tudo Agora para adicionar os efeitos sonoros, vamos voltar para a interface do usuário. Abra o widget, a planta, clique no botão. Então, aqui embaixo, você vê as opções pressionadas. Som Você pode ir em frente e alterá-lo para pressionar o botão para passar o mouse Som Você pode alterá-lo para o botão, passe o mouse. A mesma coisa para o outro. Você pode mudar o pressionado para o pressionamento do botão e o que passou o mouse para o botão passar o e o que passou o mouse para o botão passar o mouse. Vá em frente e compile E agora, quando você clica em Play e passa o mouse sobre eles, se você pressionar ok, agora você pode ver que funciona No entanto, você pode ver que eu realmente tenho um dinheiro aqui, então preciso trocar o verde Verde pairado e verde prensado. Na verdade, eu quero usar o outro, o alto. Acho que tenho um alto. Esse é muito melhor para mim. Na verdade, vou copiar isso. Escolha a versão com o mouse e pressionada. Vou clicar no texto e selecionar o seletor de cores E selecione este em vez disso. Acho que parece muito melhor. Ok, para o som, eu realmente preciso reduzir o efeito sonoro do passar o mouse, acho um pouco chato Em vez disso, deixe-me alterá-lo para 0,15. Jogue. E agora vamos testá-lo. Funciona aqui. Ok, agora eles funcionam. E você também tem alguns sons nos botões. 70. 6.10 Como spawn de atores: Agora vamos em frente e criemos o jogador. E antes de fazermos isso, vamos examinar as configurações mundiais de extensão. Na verdade, vamos ver as plantas. Clique no modo de jogo para ver o modo de jogo. Lembre-se de que, nos padrões da classe, definimos o padrão da classe para aparecer como Vamos prosseguir e esclarecer isso por enquanto. E vamos, antes de fazer qualquer outra coisa, vamos examinar as plantas e abrir o antiterrorista para ter certeza de que está correto Se eu abrir a janela de visualização aqui, apenas me certificando de que a malha de terceira pessoa é a mesma da malha e acho que há um bug no terrorista Então, se eu o abrir e você ver que há um bug, a malha é o terrorista. Isso está correto. E a malha de terceira pessoa, temos que mudá-la para o terrorista masculino, bem como essa malha aqui. Ok. Apenas certifique-se de esteja errada por algum motivo que a câmera esteja errada por algum motivo, na verdade porque também precisamos do soquete da câmera aqui e do soquete principal Porque lembre-se de que o terrorista está usando outro esqueleto. Se eu for ao mercado, este, o personagem prateado está usando esse esqueleto, os militares usam, o terrorista está usando esse esqueleto Vou abrir esse esqueleto para o terrorista. Vá até a cabeça. Vou clicar com o botão direito do mouse e adicionar um soquete para este também Vou mudar o nome para câmera, assim como a outra que vou salvar. E agora precisamos posicioná-lo da mesma forma que o outro. Vou abrir o personagem Silver Skeleton. Vou clicar nesse soquete. Vou segurar a tecla Shift e clicar com o botão direito do mouse para copiar essas configurações. E então eu vou até o terrorista, pressiono a tecla Shift e botão esquerdo naquele e ele o colocará no mesmo lugar, vá em frente e salve tudo. E agora você deve ver se você voltar para o terrorista, ele colocou automaticamente a câmera aqui porque o braço de mola está realmente conectado à câmera do soquete Ok, vamos salvar tudo. Agora, isso parece correto. Novamente para o modo de jogo. Nos padrões da classe, precisamos remover o pan padrão e defini-lo como não, porque agora é o jogador que selecionará se deseja aparecer como terrorista ou antiterrorista Ok, vamos fechá-lo. Além disso, certifique-se nas configurações mundiais, se você clicar aqui, de que essa classe de pan padrão também esteja definida como não. Ok, agora, se você clicar em jogar, poderá ver que você aparece em uma área aleatória E isso é bom. Isso é intencional. Então, agora não estamos surgindo como nenhum personagem. Temos que selecioná-lo nós mesmos. Ok, para gerar jogadores, temos que fazer isso dentro do Player Controller, o Player Controller, dentro daqui Fazemos a interface do usuário como fizemos aqui, mas também fazemos a geração de itens e personagens e assim por diante Toda vez que você gera algo, você precisa acessar a interface do Player Controller e a desova ocorre dentro do Vamos abrir o Player Controller. E dentro daqui, na verdade, desta vez eu quero trabalhar de trás para frente, porque você entenderá muito melhor a desova. Muito, muito importante. Queremos realizar um evento, e ele não precisa estar dentro do controlador do Player. Você pode organizar o evento a partir do jogador ou de qualquer outro lugar. Então você tem um evento inicial que deseja realizar. Então, esse evento precisa passar pelo modo de jogo. Porque lembre-se de que o modo de jogo só funciona no servidor. O cliente não consegue se comunicar com o modo de jogo. Então, a geração de itens e jogadores. Na verdade, percorremos o modo de jogo para garantir que o cliente não esteja trapaceando Portanto, o servidor está sempre verificando se o que você está fazendo é legal ou não. E então, a partir desse modo de jogo, se tudo estiver bem, você vai até o Player Controller e gera aquele item ou personagem A desova final está sempre dentro do Controlador. Como não temos um personagem no momento e realmente queremos gerar o personagem, vamos começar esse evento a partir do controle do Player Na verdade, eu quero trabalhar de trás para frente. O evento final que queremos alcançar é se você escrever clicar e escrever um evento personalizado e fazer Saw player, chamamos esse evento personalizado de spawn player Você arrasta daqui e diz desova o ator da classe. Essa é a função usada para gerar coisas para o mundo. Agora, para este, em vez de apenas selecionar o que queremos gerar, vamos deixar o jogador decidir, vou simplesmente arrastar essa entrada ou esse pino aqui para o evento e ele criará automaticamente essa variável para mim E eu vou fazer a mesma coisa a transformação de spawn Agora, para esta classe, vou apenas selecionar uma equipe ou chamá-la equipe porque é o contraterrorista ou o terrorista que vai aparecer O jogador seleciona a equipe, então ela aparecerá em algum momento aqui para a colisão Eu tenho que configurá-la para tentar ajustar a localização, mas certifique-se de sempre gerar esse Ok. É sempre bom ter uma variável desse jogador. Vamos clicar com o botão direito, promover uma variável e chamá-la de peão do jogador, ok? Essa é a etapa final que queremos alcançar. Queremos, por exemplo, realizar um evento chamado Selecionar equipe. E então essa equipe selecionada passará pelo modo de jogo. E o modo de jogo voltará para controle do Player e executará esse único jogador de spawn se tudo estiver bem e nós aparecermos no mundo Ok, vamos salvar tudo agora, vamos para o modo de jogo. Dentro do modo de jogo, queremos executar esse spawn player Na verdade, estou trabalhando de trás para frente, agora estou trabalhando de trás para Este reprodutor de spawn deve ser executado aqui. Para fazer isso, vamos realmente criar um novo evento personalizado. E vamos chamar essa solicitação de spawn player, estamos solicitando a geração do player para esta Mais uma vez, eu quero organizar este evento. Na verdade, não temos uma referência ao nosso controlador Player. Na verdade, vamos adicioná-lo a este. Basta clicar no e procuro meu PC. Eu acredito que se chama PC Counterstrike. Essa. Vá em frente e selecione o controle do player. E vou chamá-lo de controlador Player, podemos arrastar daqui agora. E então, como o chamamos, Spawn Player. Eu arrasto daqui e digo Spawn player e vou em frente e seleciono Ok, então agora você está executando isso. Agora podemos ver que você precisa definir a equipe e a transformação do spawn Agora, para a equipe, novamente, a equipe será determinada sempre que o jogador pressionar esse botão Então, este vai voltar até o pressionamento do botão. Então, vou clicar e arrastar isso para aqui também. Então, agora, para a transformação de desova, temos que determinar em que lugar do mundo queremos gerar os jogadores, além dos pontos de desova que criamos anteriormente Então, vamos prosseguir na próxima lição e escrever a lógica para isso. 71. Localização do Spawn do jogador 6.11: Tudo bem, agora temos que determinar onde queremos gerar os jogadores E lembre-se de que já colocamos os pontos de desova aqui para o terrorista e o antiterrorista, e já armazenamos esses pontos de desova dentro dessas matrizes Vamos pegar os pontos de desova do contraterrorista e os pontos de desova do terrorista Vamos atacar a partir daqui e escrever aleatoriamente. Então, temos uma função chamada item de matriz aleatória, então vamos gerar o jogador em um desses pontos da Espanha aleatoriamente, indo em frente e selecionando um desses pontos da Espanha aleatoriamente E então vamos pegar o ponto da Espanha e dizer get act transform. Ok, faça a mesma coisa aqui. Vamos escrever aleatoriamente e depois obter a transformação. Agora temos a localização dos atores, rotação e a escala. Você pode ver que, se clicar com o botão direito do mouse aqui e dividir a estrutura, poderá ver o ponto de desova que ela selecionou aleatoriamente Você tem a localização desse ponto de serra, você tem a rotação dele e você também tem a escala dele. Vou recombinar o pino da estrutura porque, na verdade, quero transformar Agora, o que você pode fazer, muito legal aqui, é arrastar dessa equipe, e agora você pode dizer igual assim e selecioná-la aqui. Se essa equipe selecionada for igual, por exemplo, a contraterrorista, vamos selecionar essa equipe antiterrorista da BP Se o jogador selecionou o antiterrorista, o que podemos fazer aqui é arrastar a partir daqui e dizer selecione, use este. Na verdade, vamos usar esse chamado select transform. Mas você também pode usar esse chamado select. E então você pode simplesmente colocar isso aqui e usar isso falso ou correto. A propósito, isso é a mesma coisa, a transformação selecionada. Já nos dá um lingote. Na verdade, vamos usar esse. Vamos em frente e conecte-o. Agora , o que está dizendo aqui, vamos conectá-lo aqui. O que está dizendo é que se a equipe aqui selecionada é igual à equipe antiterrorista, se for verdadeira, vá em frente e escolha A. Se for falsa, vá em frente e escolha B. É isso que está dizendo. Se é verdade que selecionei o antiterrorista, tenho que pegar os pontos antiterroristas aqui e depois conectá-los ao A. Porque é verdade, eu selecionei o antiterrorista. Vou pegar os pontos de observação antiterroristas e conectar a transformação aqui. No entanto, se for falso, é o terrorista que o jogador selecionou e o configurou aqui. Se você tem várias equipes para seu atirador, você tem que usar essa chamada select porque esta na verdade só oferece a opção de duas Este oferece a opção de mais de dois, exatamente como você viu antes. Se você inserir uma enumeração aqui, ela fornecerá as opções de todas as enumerações que você todas as enumerações Agora, vamos deletar esse. Vamos nos concentrar nisso para a equipe, vou reconectá-la aqui Não sei por que ele se desconectou. E vamos continuar organizando as coisas um pouco mais. Tudo bem, agora isso vai levar esse jogador aleatoriamente a um desses pontos, dependendo se o jogador selecionar contra-terrorista ou terrorista Como você pode notar aqui, para aqueles eventos que eu nunca seleciono executar no servidor novamente, lembre-se de que o modo de jogo só funciona no servidor. Você não precisa executar isso no servidor ou no cliente. E, a propósito, você nunca pode executar no cliente no modo de jogo, porque, novamente, ele só roda no servidor. Você realmente não precisa replicá-lo aqui. Ele será executado automaticamente no servidor e também aqui no controle do jogador. Você pode ver aqui. Ou observe que eu também não executei isso no servidor. Lembre-se do que eu disse antes, é sempre o servidor que gera coisas no mundo Realisticamente, deve ser executado no servidor. No entanto, lembre-se de que você está vindo do modo de jogo. O modo de jogo só funciona no servidor e executa esse spawn player Isso ainda está automaticamente no servidor. Isso nunca sai do cliente. Isso vem do modo de jogo que é executado no servidor. Portanto, esse sempre será executado no servidor, então você também não precisa replicá-lo Ok, agora, se eu voltar ao modo de jogo, agora temos essa solicitação de spawn player E isso realmente vem do controle de jogo. Então, se eu voltar aqui, o botão direito do mouse e crio um evento personalizado. E vamos chamar isso de Select Team. Estamos quase terminando. Selecione a equipe. E também quero fazer com que outro seja executado no servidor chamado Server Select Team. E este é executado em um servidor confiável. Ok, agora vamos selecionar uma equipe. Quando clicamos na interface do usuário, para essa equipe selecionada, quero executar a equipe de seleção do servidor. Então, agora ele vai ser executado no servidor. Para este, vou executar o modo de jogo. Um chamado Request Spawn Player. Agora não consigo executar a solicitação de spawn player porque, como você pode ver aqui, não tenho uma interface de plano para meu modo de jogo e não tenho nenhuma referência a Então, vamos prosseguir na próxima lição e criar uma interface de modelo para o modo de jogo 72. Interface do Blueprint do modo de jogo 6.12: Tudo bem, então vamos criar uma interface de modelo para o modo de jogo Agora você pode fazer isso sozinho, porque já fizemos isso muitas vezes. Agora, se você não se lembra, vá em frente e me siga aqui nesta lição. Vamos continuar na pasta de interfaces do blueprint. Clique com o botão direito do mouse, vá para Blueprint e selecione a interface do blueprint Vá em frente e ligue e eu vou para o modo. Entre nessa interface de diagrama Vamos chamar essa função, obter a referência do modo de jogo aqui. Vamos criar uma saída. Você precisa selecionar o que você está tentando referenciar. Acho que estou tentando me referir ao meu modo de jogo chamado GM Contra-ataque. Se eu clicar aqui novamente, certo, contra-ataque Selecione meu modo de jogo e , em seguida, chame-o de modo de jogo. Ok, agora terminamos aqui. Lembre-se de compilar tudo. Vamos voltar ao nosso modo de jogo no modo de jogo Blueprint. Dentro daqui, vamos clicar nas configurações da classe, ir até as interfaces e selecionar a interface que você acabou de criar no modo jogo. Agora vamos clicar duas vezes na interface. E dentro daqui, vamos escrever autorreferência. Agora definimos esse modo de jogo. Vá em frente, compile e salve tudo. Agora podemos acessar o controlador do Player e eu posso aqui começar a jogar. Na verdade, vamos dizer e clicar com o botão direito aqui para obter o modo de jogo. Agora, a partir disso, podemos dizer que obtemos referência do modo de jogo que acabamos de fazer. E é uma mensagem porque vem de uma interface de diagrama E vá em frente e se conecte. Agora, para este, você pode clicar com o botão direito do mouse e promovê-lo para uma variável e chamá-lo de modo de jogo. Agora temos uma referência ao nosso modo de jogo. Agora que temos uma referência ao nosso modo de jogo, o que podemos fazer agora é pegar esse modo de jogo e dizer que se eu voltar ao meu modo dizer que se eu voltar ao de jogo e lembrar como eu realmente o chamei, e voltando aqui, o chamamos de Request Spawn Player Então, agora podemos sair desse modo de jogo e dizer Request Spawn Player, sem mais nem menos Ok, agora podemos usá-lo na próxima lição. Vamos compilar e salvar tudo, e vamos seguir em frente 73. 6.13 Finalizando a lógica de seleção de equipe: Ok, agora vamos continuar e terminar a lógica. Agora vamos conectar essa solicitação evento spawn player do modo de jogo nos permite conectá-lo ao servidor Agora, se você conectar este aqui, você também terá uma era se conectá-lo aqui. E então, para este modo de jogo, digamos que você conectou esse alvo aqui Essa é a referência do modo de jogo. Se você fizer isso aqui, se você executá-lo, essa é a referência do modo de jogo. Se você executá-lo a partir daqui, na verdade, chega a uma época em que diz que essa variável do modo de jogo não existe. Eu não sei do que você está falando. Isso acontece se você executar isso no cliente. Lembre-se de que o modo de jogo só pode se comunicar com o servidor. Se você tentar executar a variável do modo de jogo por meio do cliente, isso lhe dará uma era e dirá não sei o que é essa variável. Lembre-se de executar esse modo de jogo também no servidor. Vamos excluir essa variável. Deixe-me conectar meu modo de jogo novamente, sem mais nem menos. Agora eu tenho que conectar meu controlador de player, selecione. Lembre-se de que já estamos no controle do jogador, arraste daqui e escreva para si mesma a equipe que você deve selecionar. Novamente, queremos fazer isso por meio da interface do usuário aqui. O que vou fazer é simplesmente arrastar isso para o evento, arrastar isso para o evento também e compilar Agora, o que podemos fazer agora é pegar esse evento e executá-lo por meio da interface do usuário. Se eu abrir meu widget, blueprint, clico no meu botão. Para este, vamos realmente mudar o nome dele Se você clicar no botão, eu o chamarei de BTN Terrace. Faça com que seja variável, porque se você não tiver isso como variável no gráfico, quando você vai codificar a funcionalidade desse botão. Você pode ver que não tem nenhuma variável. Se você colocar isso, agora você pode vê-lo como uma variável aqui. E você pode criar eventos por meio dele. Certifique-se de marcar que é variável. Faça a mesma coisa com o contraterrorista. Vamos chamá-lo de terrorista BT N. Vamos fazer com que seja variável. Vá em frente, compile e salve tudo. Vamos passar para o gráfico agora. Para este, vou deletar tudo isso. Por enquanto, vou clicar primeiro no Terris, por exemplo E agora temos esses eventos. Podemos selecionar isso com um clique. O que deve acontecer quando eu clico no botão Terris? O que eu quero fazer é, ao clicar em, executar essa Seleção de Equipe. Preciso de uma referência ao controlador do Player. Então, do jeito que você faz isso de forma muito, muito fácil dentro da interface do usuário, você pode escrever, clicar e dizer “Get Owning E você pode ver que tem duas coisas aqui. Você pode se tornar proprietário do jogador e isso obterá o controlador do player para o jogador E você pode se tornar dono do jogador Pon. Isso obterá o player P em vez do controlador do player. No momento, precisamos do controlador do player. Eu vou fazer o Get Owning Player. Agora, novamente, já nos lembramos ter uma interface de modelo para o controlador do player, onde podemos arrastar a partir dela e dizer obter referência do controlador do player Vá em frente e se conecte. Agora podemos realizar esse evento chamado Selecionar equipe e selecioná-lo. Agora você precisa especificar o que é a equipe. É o terrorista porque clicamos no botão terrorista Vá em frente e procure o terrorista da BP e compile o antiterrorista Vá em frente e clique nele. Vá em frente e clique aqui. Vou copiar e colar tudo isso. Você pode escrevê-lo novamente se quiser mais prática. Agora vamos selecionar o contador em vez deste. Vamos continuar e compilar Agora, só para explicar para você, o que realmente está acontecendo é se eu clicar no botão terrorista. Agora, passará pelos controles do jogador , selecione Evento da equipe. Vai passar por aqui. Lembre-se de que este está sendo executado no cliente e no servidor. Nós o executamos por meio do cliente aqui e depois executamos primeiro no servidor. Quando o executamos no servidor, agora estamos nos comunicando com o modo de jogo Vamos acessar o modo de jogo e perguntar ao modo de jogo podemos realmente gerar isso E vamos passar por tudo isso e gerar o controle do jogador Vai descer aqui. Lembre-se de que ele sabe o que gerar porque nós os definimos aqui na interface do usuário, definimos a equipe aqui Ele levará esse valor para a equipe selecionada, passará por aqui, conectará aqui, login aqui, executará o modo de jogo aqui. E então ele vai executá-lo no player de spawn aqui. E ele sabe qual é o valor porque nós lhe dissemos o que é e ele também sabe onde gerar o jogador Ok, agora vamos clicar em jogar. E se eu selecionar um deles, por exemplo, o terrorista, você pode ver que nada está acontecendo agora. Na verdade, vamos para a próxima lição e terminar isso. 74. 6.14 Gerando o jogador: Tudo bem, então há uma última coisa para gerar o jogador. E temos que possuir o jogador. Se você realmente clicar nisso, você está realmente gerando o jogador Mas você não pode ver o jogador no nível porque também precisa possuí-lo . Se você arrastar do display pon, lembre-se de que já criamos uma interface para a base de jogadores, então você pode arrastar da tela e dizer obter referência do jogador. Já criamos essa interface de diagrama e agora você pode arrastar do player Você precisa possuir o jogador para controlá-lo. Vá em frente e compile tudo agora, e vamos clicar em Play Se você clicar no terrorista agora, verá que pode realmente possuir esse contraterrorista. No entanto, ainda há a interface de usuário à nossa frente e precisamos removê-la. A interface do usuário é executada pelo cliente. Quando você trabalha com a interface do usuário, você está trabalhando dentro do cliente. Agora, em vez de fazer isso aqui, vamos clicar com o botão direito do mouse e criar um novo evento personalizado. E passe pelo cliente. Spawn player, vou chamá-lo de cliente spawn Eu sei que está conectado a este. Vou clicar nele. Vá em frente e continue possuindo um cliente confiável. Vamos examiná-lo por aqui também. Cl spawn player para este aqui agora Só quero lembrar que o chamamos de widget show hide. Então, podemos vir aqui e dizer mostrar o widget ocultar e selecioná-lo aqui Agora podemos selecionar a seleção da equipe e esta desmarcada Agora, ele ocultará a interface do usuário dos jogadores. Vamos compilar e clicar em Play. E vamos selecionar, por exemplo, o Counter Terrist. Agora você pode ver que estamos aqui dentro. Agora você pode ver aqui, eu não consigo mover meu personagem. E também posso ver a cabeça do meu personagem. Lembre-se de que realmente removemos a cabeça. Isso é um bug. Se formos até o jogador, e eu só quiser verificar meu código se você clicar na base de jogadores, se você acessar o gráfico do evento, ele mostrará minha cabeça. Lembre-se de que, no início do jogo, removemos a cabeça, também não podemos controlar o jogador. Suspeito que esse código aqui, o código de movimento e o esconderijo da cabeça não estejam funcionando Porque se eu jogar e clicar, você pode ver que consigo ver minha cabeça, esse código não está sendo executado. Este também não está funcionando porque eu realmente não consigo mover meu personagem. Acredito que seja porque você pode simplesmente imprimir uma string aqui. Imprima uma string novamente, imprimir uma string é realmente poderoso. Deveria dizer olá aqui. Se isso acontecer, sei que meu código está sendo executado aqui. Se eu clicar nos meus galeirões, você pode ver que ele não está dizendo olá Mas se eu conectá-lo ao inválido. Então, se eu simplesmente desconectá-lo, coloque-o como inválido, desse jeito E eu posso reconectar isso novamente. Eu clico em jogar e agora ele diz olá. Na verdade, está dizendo que isso não é válido. Agora, no modo multijogador, você precisa saber que precisa dar ao jogador um pouco de tempo para apareça, porque não é como um único jogador Eles demoram algum tempo para aparecer no servidor ou se conectar ao servidor Então você tem que se afastar disso e, digamos, atrasar. Às vezes, isso realmente resolve o problema. Se eu apenas adicionasse um atraso e não fosse realmente um grande, apenas 0,01, então muito, muito baixo e compilasse. E agora, se eu clicar em Jogar, selecione o Counter Terrorist. Agora você pode ver que eu posso mover meu personagem e minha cabeça também sumiu. Na verdade, a única coisa que precisávamos aqui é adicionar esse atraso. Porque quando você se conecta à rede no servidor, é necessário um atraso muito pequeno para que o player realmente se conecte e execute esse código. Tudo bem, agora, como você pode ver aqui, tudo está funcionando bem. No entanto, você pode ver que o mouse está desaparecendo toda vez que eu clico na tela E é irritante, eu tenho que selecionar minha outra tela antes de poder realmente clicar nos botões E eu tenho que clicar aqui antes de poder jogar. Então você pode ver que eu tenho que clicar, ou realmente minimizar isso. E agora eu posso clicar na interface do usuário. E eu tenho que clicar novamente na tela antes de poder mover meu personagem com o mouse. Então, temos que consertar isso. E, na verdade, temos que fazer isso na próxima lição com algo chamado modo de entrada que temos que definir. Vamos para a próxima lição. 75. 6.15 Definindo o modo de entrada: Tudo bem, agora vamos abrir nosso controle de player. Então, se você abrir o Player Controller, agora, como você pode ver quando clico em play, não consigo ver meu mouse e não consigo pressionar nada. Se eu for até o controle do player e clicar nos padrões da classe, posso selecionar esse chamado sapatos Se eu compilar e jogar, agora você pode ver que consigo ver o cursor do mouse No entanto, às vezes, quando entro no jogo, não consigo passar o mouse sobre meus botões E é aí que entra o modo de entrada definido. Aqui no controle do player. Vamos atacar a partir daqui, desde o início. Jogue e, digamos, defina o modo de entrada. Você tem esses tipos diferentes. Você pode definir o modo de entrada para somente interface do usuário, somente jogo ou jogo e interface do usuário. No momento, quando nos conectamos ao servidor, queremos apenas que ele esteja apenas na interface do usuário. Porque queremos apenas nos concentrar na seleção de nossa equipe e selecionar a equipe. Não nos importamos com o jogo no momento, você será suficiente. Em seguida, temos que especificar o controlador do player. Lembre-se de que já estamos dentro do controle do jogador, então vou me arrastar daqui e dizer eu mesmo. Então, para que o widget se concentre, não precisamos fazer nada aqui E tudo está indo bem. Então, vamos continuar e compilar. E agora, quando clico em Jogar, na verdade não estou focando no meu jogo. E eu posso ir em frente e fazer tudo isso. Agora, quando o jogador aparece, você também precisa alterar o modo de entrada Porque quando entramos no jogo, você pode ver que não consigo mais me mover porque, no momento, seu modo de entrada está configurado apenas para a interface do usuário, então você também precisa mudar isso. Vamos descer até aqui. E lembre-se, na verdade, se você subir aqui e ver o ícone, você pode segurar o mouse sobre ele Você pode ver que este na parte superior, você pode ver que diz apenas cliente. Ele só funciona no cliente. Vamos descer até aqui. Quando geramos o player, vamos realmente executá-lo para o cliente. Spawn player Vamos arrastar a partir daqui e dizer definir o modo de entrada. No momento, precisamos do jogo apenas porque agora estamos no jogo. Queremos nos movimentar. Não nos importamos com a interface do usuário, com o controle do player , digamos, como antes. Deveria ser isso. Vamos compilar e jogar Agora eu seleciono Counter Terrace, por exemplo, e agora estou aqui dentro. Mas, como você pode ver, ainda consigo ver meu mouse. Vamos arrastar a partir daqui e dizer mouse. Você tem esse evento aqui embaixo. O lingote chamado set show mouseursa. Vou fazer com que caia aqui em cima. Você sempre pode defini-lo como verdadeiro por padrão Se quiser, você pode copiá-lo. E você pode colá-lo aqui conectá-lo e configurá-lo como verdadeiro. Agora, já fizemos isso definindo-o como verdadeiro por padrão, mas só para ter certeza de que está visível, caso você faça algo no futuro, você pode ter isso. Mas, por enquanto, na verdade, não é necessário. Mas, na verdade, vamos deixar que esteja aqui. Vamos clicar em Play by Select, No terrorist. Você pode ver que meu mouse desaparece e tudo está funcionando perfeitamente Tudo bem, então vamos fechar tudo. Lembre-se de salvar seu jogo e vamos seguir em frente. 76. 6.16 Colocando uma câmera para espectador: Agora, ao clicar em Jogar, você pode ver que ele começa em um ponto aleatório. E, na verdade, quero começar em um lugar legal onde você possa ver todos os jogadores logo quando você se conecta. Isso vai ser muito bom. O que você pode fazer é simplesmente configurar uma câmera aqui, por exemplo. Deixe-me colocar minha câmera primeiro. Por exemplo, eu quero colocar minha câmera assim aqui e eu posso ver todo o nível e os jogadores também. Agora, quando estiver satisfeito com a posição da sua câmera, você pode clicar aqui na janela de exibição e depois clicar nesta Crie a câmera aqui e selecione Câmera. Isso criará um ator de câmera automaticamente. Agora, se eu clicar na câmera, ela foi criada aqui. Para garantir que eu não mova a câmera aqui por engano, escreverei clique e transforme e selecione Bloquear movimento selecionado. Agora, quando você clica nela e seleciona a ferramenta de movimentação, você pode ver que ela não está lá. Eu realmente não posso mover isso por engano. Agora, bloqueou o movimento para este. Ok, vou renomear essa e chamá-la de espectadora. Vamos economizar. De vez em quando, o que podemos fazer é acessar o controle do player e lembrar o que eu disse antes. Se você quiser uma referência a qualquer coisa dentro do mundo, tente se lembrar de qual função realmente usamos. Vou te dar apenas um pequeno segundo para pensar sobre qual função podemos usar aqui para obter a referência para esta câmera aqui. Vamos para o controlador do Player agora. O que podemos fazer é definir essa visualização sempre que o jogador se conectar. Na verdade, vou fazer isso aqui no início do Play. O que você pode fazer é que eu vou fazer isso aqui depois do modo, vou arrastar isso para longe. E então, a partir daqui, diga um ato de aula na Floss. Essa é a função que você precisa usar. Em seguida, selecione a câmera. Se eu procurar a câmera , você poderá selecionar a câmera. Esta é uma câmera, estamos tirando a câmera do nosso nível. Agora, o que podemos fazer é usar essa função chamada Set View Target, Blend. Definir o alvo de visualização com mesclagem definirá a visualização da sua câmera quando você se conectar. Agora ele pergunta qual é a vista? A visão é apenas essa câmera que criamos. Vá em frente e conecte-se. Na verdade, foi isso. Vamos apenas escolhê-los aqui. Vá em frente e compile, salve tudo. Vamos clicar em Jogar. E agora você pode ver que começamos aqui. E eu posso ver esse nível. Parece legal se os jogadores estão jogando e eu posso selecionar meu time, bem como ver os jogadores em segundo plano. Quando você clica em terrorista, por exemplo, você avança e aparece dentro do nível E tudo está funcionando bem para o outro. Se eu for em frente e aparecer como contra-terrorista, eu for até lá e você verá que eles podem se ver No momento, você pode ver que há um bug. Vamos realmente consertar isso. Com a cabeça desaparecendo quando vejo o cliente como servidor, se eu sair daqui, isso realmente me mostra uma era e pode ser por causa dessa Diz que não estou tentando ler esta era aqui, você pode tentar consertá-la sozinho agora antes de me seguir, apenas para praticar. Axis não significa que ele tenta ler esse valor chamado get local player subsystem Se eu clicar aqui, este é o subsistema get local player Ele está tentando ler esse valor, mas diz acesso nenhum, o que significa que não consigo obter nenhuma informação deste. Vamos acabar com isso. Sempre bom fazer isso é simplesmente eliminar isso e dizer que é válido somente quando é válido. Vamos executar esse código, vamos conectá-lo aqui também. Sempre que o controlador do player for válido, assim como essa entrada aprimorada, ela é válida, então queremos executar o código novamente. Basta clicar duas vezes aqui no nó de redirecionamento. Vá em frente e faça essa compilação organizada. Vamos clicar em play e ver o que ele faz. Agora vá em frente e selecione terroristas para este, por exemplo Vamos até o meio e selecionaremos o outro. Vamos selecionar o antiterrorista. Deixe-me ver o outro cara aqui e ver se eles se vêem. E agora você pode ver que está corrigido. Era apenas um problema com aquela era que tínhamos antes. Agora, se você quiser testá-lo, poderá jogá-lo como cliente. Você pode jogar como, por exemplo, três jogadores. Vamos abrir todos esses três jogadores. Vou minimizar esse grande por enquanto e torná-los um pouco maiores. Assim, neste caso, vamos criar um antiterrorista E para o outro, vamos criar um antiterrorista. Para o terceiro, vamos criar um terrorista. Deixe-me ir para o meio aqui. Para este, eu também vou para o meio. E para o outro também. Agora você pode ver que eles estão funcionando perfeitamente. Todo mundo pode ver todo mundo. E as animações, elas podem ser vistas agachadas, essa também, os efeitos sonoros funcionando, e tudo está pronto Vamos salvar tudo e seguir em frente. 77. 7.01 Espaços de mistura de pistola: Agora estamos realmente prontos para trabalhar com as armas e colocá-las no nível também. No entanto, antes de fazermos isso, vamos realmente fazer as animações de rifle e pistola porque estamos sentindo falta delas no momento Vamos finalizá-las antes de trabalharmos com as armas, porque nesse momento teremos todas as animações e tudo ficará muito mais fácil para nós Então, vamos voltar para a pasta de plantas, clicar no player e voltar para a pasta de animações O que eu quero fazer é, nesta lição, criar os espaços de mistura da pistola Assim como essas, mas as de pistola agora, se você quiser criá-las você mesmo Portanto, é um bom exercício e então você pode ver o que estou fazendo. Mas você já deve saber como fazer isso. Porque na verdade é a mesma coisa que aqueles que se agacham desarmados, correm desarmados e também andam desarmados andam Se você quiser seguir, clique com o botão direito aqui. Vamos aqui na animação e selecionar o espaço de mesclagem para esta. Novamente, selecione nosso estilo de esqueleto, um masculino, e chame-o de espaço de mistura Vamos chamar isso de pistola de agachamento. Vamos criar esse primeiro. Vamos clicar duas vezes aqui. Para o eixo horizontal, essa é a direção do movimento para o eixo vertical, essa é a velocidade do movimento. Para a direção do movimento, ela vai de menos 180 para 180 E então temos oito deficiências porque temos um movimento de oito vias Quanto à velocidade de movimento agora, depende se estamos agachados ou se estamos andando ou correndo Agora vamos voltar para, na verdade, eu posso fazer isso aqui, à direita. Vamos voltar ao agachamento para os desarmados. Quero ver qual era a velocidade do movimento. Aí está 100, então vou configurá-lo da mesma forma aqui para a pistola, 100 E a última coisa aqui para a velocidade do peso, colocamos em 6,5. Se você se lembrar, se não se lembrar, pode clicar no agachamento e descer E então você pode ver a velocidade do peso, nós a configuramos para 6,5. Faça a mesma coisa com este , para que eles sejam iguais. E antes de fazer qualquer coisa, vou salvar isso e clicar com o botão direito do mouse e duplicá-lo Isso ocorre porque eu não preciso fazer tudo isso de novo e de novo. E essa é chamada de pistola de corrida. E então eu vou duplicar isso novamente e isso vai se chamar S Walk Pistol Vou abrir a pistola de corrida. Agora só precisamos mudar a velocidade do movimento. Acho que é 350 e se você não se lembrar novamente, clique no desarmado Para a corrida, você vê que é 350. No agachamento ou, na verdade, no agachamento, na pistola de corrida, você também precisa colocá-la em 350 Ok. E vamos verificar a pistola. Acho que essa é 200 na arte. Sim, são 200. Então, vamos colocar a caminhada um em 200 também e vamos salvar tudo. Agora você pode ver que quando eu o dupliquei, não preciso fazer tudo isso de novo e de novo. Então, agora eles estão todos prontos. Ok. Vamos começar com a pistola 1 Vamos procurar o agachamento ou posso simplesmente procurar uma Isso é muito mais fácil. E então eu posso dar uma olhada no agachamento aqui Assim como antes. Primeiro você precisa ter o inativo. Vamos ver, agache-se novamente, segure a tecla Shift e conecte-a aqui embaixo segure a tecla Shift e conecte-a Exatamente desse jeito. E a mesma coisa do outro lado, sem mais nem menos. Ok, aqui em cima está o movimento para frente, como você pode ver aqui. E então você tem a frente esquerda até aqui, e a frente direita até aqui. Então você tem a esquerda aqui e você tem a direita aqui. E então você tem as costas à esquerda e as costas à direita, e então você tem as costas dos dois lados. E eu posso habilitar os rótulos para que você também possa ver como eu os coloco. Mas você pode segurar o botão de controle e mover o mouse apenas para verificar se está tudo bem. Tudo parece bom. salvá-lo e fechá-lo. E agora eu posso abrir a pistola de corrida. Vou procurar a pistola de marcha lenta e vou usar essa chamada pistola de marcha lenta e colocá-la novamente Segure a tecla Shift e coloque todas elas. Agora, quando você as tiver colocado, vamos procurar por pistolas e eu vou encontrar as de corrida. Use esta, as pistolas agora precisamos, se eu puder encontrá-la aqui, a da frente Então precisamos da frente esquerda e depois da frente direita. Então precisamos da esquerda, da direita, e precisamos da parte traseira esquerda, de trás para a direita. Também precisamos da parte de trás aqui para os dois lados. Novamente, mantenha o controle apenas para ver como é. Tudo parece bem. Ok. Nós podemos fechá-lo. Agora vamos abrir a última, a pistola de caminhada. Mais uma vez, vou encontrar o ocioso. Pegue a pistola ociosa e coloque-a aqui novamente. Então vamos procurar uma pistola. Agora precisamos encontrar a caminhada nesta frente de calçada e colocá-la aqui assim. E então precisamos da esquerda, da frente, da direita. Então precisamos da esquerda e da direita aqui, volta à esquerda, de volta à direita. E então precisamos em ambos os sites. Novamente, posso ativar esses rótulos para que você possa ver e eu manter o controle. Mova meu mouse só para ver como fica e tudo fica bem. Então, agora podemos salvar tudo. E isso foi tudo para a pistola uma vez. Vamos passar para a próxima lição e usar o rifle. 78. 7.02 Espaços de mistura de rifles: Para o rifle. Novamente, você pode tentar fazer isso sozinho, agora que também fizemos a pistola Mas vamos fazer isso juntos se você ainda tiver alguma dificuldade com isso. Vamos clicar com o botão direito aqui. Vamos para Animação. Vamos ao Blend Space e selecionamos nosso esqueleto. Novamente, chame isso de S. Vamos chamá-lo de Rifle. Vamos falar sobre isso. Ligue para o horizontal. Direção do movimento. O eixo vertical. Velocidade de movimento. A direção vai de menos 180 a 180. Com oito divisões de grade, a velocidade do peso é 6,5 Quanto à velocidade de movimento, é o agachamento Portanto, está definido como 100. Isso está correto. Vamos fechá-lo novamente. Vou duplicar isso e chamar isso de rifle Un. E vou duplicar isso novamente. Vamos chamar isso de rifle de caminhada. Vou abrir o rifle de corrida e mudar a velocidade de movimento para 350 Sim, não precisamos mudar mais nada. Vamos abrir o rifle de caminhada aqui. Vamos mudar a velocidade de movimento para 200, como as outras. E vamos salvar tudo e fechá-lo. Ok, para o rifle. Vamos começar com o agachamento novamente. Para o agachamento, vou procurar um rifle e depois vou encontrar o rifle inativo e colocá-lo aqui embaixo E vá em frente e coloque-os novamente, até aqui embaixo. Tudo bem, quando isso for feito, agora encontre o rifle agachado e coloque-o aqui embaixo Às vezes, estou apenas segurando o controle para verificar se a animação que importei para você está correta. Normalmente, eu apenas mantenho o controle e verifico se isso está correto. Eu não cometo um erro aqui neste curso. Agora temos essa frente. Ok, então temos a frente esquerda, temos a frente direita, depois temos a esquerda agachada à esquerda e Então temos a parte traseira esquerda e a traseira direita. Então, temos idas e vindas também. Opa, eu preciso copiar isso de volta desse jeito novamente. Mantenha o controle, verifique se tudo está correto, tudo parece estar correto. Vamos encerrar isso. Vamos até o rifle novamente. Eu procuro por ocioso. E eu pego esse rifle ocioso e o coloco aqui embaixo. E coloque-o novamente, até aqui embaixo. Quando isso for feito, vá em frente e procure por um rifle. E agora eu encontro o Run uma vez e encontro o rifle Run Forward e isso parece correto E vamos colocá-lo na frente, à esquerda, à frente, à direita. E então temos a esquerda e a direita. E temos as costas à esquerda e as costas à direita, e temos as costas dos dois lados. E eu vou manter o controle, verificando se tudo está correto. Parece correto. Vamos fechá-lo. O último é o rifle de caminhada. Novamente, vou procurar o inativo, arrastá-lo para baixo do rifle e colocá-lo até Mais uma vez, vamos procurar um rifle. E agora precisamos do Walk One. Vamos seguir em frente. Coloque-o aqui embaixo e vamos dar uma olhada. Isso está correto. Em seguida, na frente, à esquerda. Frente à direita, e nós temos a esquerda. Nós temos os direitos. Então temos os Bccrights Também temos costas nos dois lados. Vou controlar, novamente, apenas para verificar se tudo parece correto e se tudo parece estar correto. Vamos salvar tudo. Vamos fechá-lo. E agora o rifle e as pistolas estão prontos. Vamos passar para a próxima lição e fazer o deslocamento da mira. 79. 7.03 Pistol Aim Offsets: Agora vamos seguir em frente e fazer o deslocamento do Aim. Agora você já fez isso antes. Novamente, tente fazer isso sem mim. Essa é uma boa prática. E se você não consegue se lembrar, vamos fazer isso juntos. Vamos clicar com o botão direito aqui, ir para Animação e ir para Legacy. E selecione-os, Offset one D, vamos selecionar o personagem Vamos chamá-lo de O para uma compensação. E vamos nos agachar. E vamos chamar isso de pistola. E vamos clicar duas vezes nele. Para este, o eixo horizontal é a direção. Você também pode clicar no outro para ver o que você fez. Então você faz a mesma coisa. Não é muito bom fazer coisas diferentes no mesmo jogo. Por isso, é sempre bom fazer a mesma coisa. Se você a chamou de direção aqui, tente chamá-la de direção aqui também, em vez de direção de movimento e assim por diante. Então, tente fazer a mesma coisa. Então você tem consistência em seu jogo -90 E acho que os deficientes continuam os mesmos Tudo está indo bem. A velocidade de peso que coloquei em 5,5 Vou clicar na pistola e colocar a velocidade de peso em 5,5 também Eu vou salvar tudo agora. Vamos procurar o offset da pistola Crouch. Se eu procurar uma pistola e descer até o Am offset, essas são as agachadas O central que eu vou segurar e segurar mude e o coloque aqui embaixo. Então estamos prontos e eu vou manter o controle para ver se tudo está correto. Isso é bom. Vamos fechá-lo. Vou clicar com o botão direito do mouse em Animation Legacy Am. Compense um D. Selecione seu esqueleto e chame esta pistola de 10 pés. Vamos abri-lo novamente. Chame isso direção indo de -90 a 95,5 na velocidade do peso E vamos procurar uma pistola novamente. Desta vez, é a pistola de suporte, a central que vou colocar no centro Então temos o baixo, e depois temos o alto. E você também pode ver o rótulo aqui. Nós temos o baixo, nós temos o alto. Tudo está indo bem. Vamos salvar tudo e passar para a próxima lição. 80. 7.04 Rifle Aim Offsets: Ok, então agora só nos falta o rifle. Mire offset novamente, tente fazer isso sozinho para praticar. E se você não se lembrar novamente, vamos fazer isso juntos. Vamos clicar com o botão direito do mouse em Animação. Selecione Legacy e mire um D. E vamos selecionar nosso esqueleto e chamá-lo, vamos chamá-lo de rifle de agachamento Para este, vou clicar duas vezes em Chame de direção para o valor mínimo -90. Para o valor máximo, é 90 A velocidade do peso é de 5,5. Vamos procurar o rifle, desta vez para compensá-los. Esse é o agachado. Precisamos do deslocamento do agachamento. Vou atacar esse centro e colocá-lo aqui. Então temos o baixo, depois temos o alto. Isso aqui parece bom. Agora, a animação em si parece estranha. Quero dizer, ele está muito curvado e isso parece tão estranho. Mas essas são apenas animações como se não fosse sua culpa, não estivéssemos fazendo nada de errado É apenas a animação que é feita assim. Agora, se eu tivesse animações melhores, eu as daria para você. Infelizmente, eu realmente não tenho animações melhores. Talvez no futuro eu tenha alguém que faça tudo personalizado. Mas, por enquanto, isso é o melhor que podemos fazer. Tudo está indo bem. Agora vamos fechá-lo. E vamos clicar com o botão direito novamente. Vá para Animação e legado, aqui está dito que selecione o esqueleto Chame isso de rifle de suporte AO. Vamos clicar duas vezes aqui e chamá-la de direção. Então, para o valor mínimo -90 para o máximo 90, para o peso, velocidade 5.5 E vamos procurar o rifle e agora podemos selecionar o rifle de suporte, este é Então temos a penugem. E então temos o controle antigo para verificar se tudo está correto e se está tudo bem. Ok, vamos salvar tudo. Vamos fechá-lo. E agora também temos a mira compensada. Vamos seguir em frente na próxima lição. 81. 7.05 Blend Poses by Bool: Agora estamos prontos para voltar ao plano de animação e trabalhar nele Vamos clicar na pasta Animações do player e abrir o plano de animação Agora, aqui dentro, eu quero que você clique no gráfico de animação. Então, estamos aqui dentro. Como você pode notar, anteriormente usamos o offset para o estande No entanto, também usamos o outro, o desvio de mira, para agachamento Usamos apenas aquele para o estande. Quando estamos agachados, não estamos usando o deslocamento correto da mira . Para fazer isso. Vamos clicar com o botão direito do mouse e pesquisar por agachamento. Este jogador de um offset, momento em que estamos no, vou apenas copiá-lo na direção. E copie este enquanto o conectamos. Agora temos isso. Mas o problema agora é que não consigo conectar isso aqui, porque, como você pode ver, apenas uma entrada. Temos que conseguir algo que junte essas duas coisas. A maneira como podemos fazer isso é clicar com o botão direito do mouse e pesquisar poses de mistura. Você pode ver que podemos combinar essas duas poses por vários fatores. Você pode ver tudo isso. No entanto, o que precisamos é misturar poses de touro, você pode ver que há algo chamado mesclar poses de touro. Isso possibilita que você misture as poses por meio de um lingote Se você tem um lingote verdadeiro, ele vai usar essa pose Se for falso, ele vai usar essa pose. Temos que lhe dar um lingote. O ouro que queremos usar é verificar se o jogador está agachado Se o jogador estiver agachado, usaremos o desvio de mira para Se o jogador não estiver agachado, usaremos o deslocamento para o Vamos descobrir que o lingote aqui, se já fizemos isso agora, está agachado e está andando Lembre-se de que os excluímos anteriormente daqui. Na verdade, eles não são usados no momento e estão errados. Vamos deletar o Está agachado e está andando. Lembre-se de que os trocamos pelo estado do movimento aqui. Vamos atacar este. E vamos arrastar a partir daqui e dizer pegue uma cópia. E agora você pode arrastar a partir daqui e dizer o último índice, e então podemos conectá-lo. Estamos verificando se o jogador está pressionando o botão de agachamento no momento Podemos arrastar a partir daqui e dizer igual se o último índice for igual a agachamento, o que significa que o jogador está pressionando o botão de agachamento agora , então podemos seguir em frente e nos agachar então podemos seguir Agora vamos conectá-lo se for verdade, ou seja, o jogador está agachado, queremos usar este em que o desvio da mira é agachado No entanto, se o jogador não estiver agachado, queremos usar este com o suporte Vá em frente, compile e conecte-os aqui. Compile tudo E eu vou mover tudo para cá e organizá-los. Tudo bem, então tudo está organizado agora. Agora você pode tentar verificar se isso está funcionando. Assim, você pode clicar no estado do movimento. Você pode adicionar uma matriz aqui, adicionar um elemento à matriz. E você pode simplesmente configurá-lo para agachado. E você pode ver como é. Então, agora você pode realmente ver que está funcionando. Porque se eu configurá-lo para agachado, ele estará agachado. Se eu configurá-lo para outra coisa , ele mudará para o outro. Agora você pode ver que ele está funcionando corretamente. Vamos lembrar de excluir isso por enquanto. OK. Então, isso está funcionando corretamente. É assim que você mistura poses por meio dessa chamada pose de mistura de bullying OK. Então, temos outro que precisamos usar mais tarde, porque esse é apenas o movimento desarmado Também precisamos do movimento da pistola e do movimento do rifle Então você pode ver que fica um pouco mais complexo porque precisamos criar tudo isso para a pistola e o rifle Precisamos de outra chamada pose de mesclagem por enumeração. Mas, por enquanto, vamos passar para a próxima lição e aprender sobre o assunto. 82. 7.06 Blend Poses by Enum: Tudo bem, aqui estamos de novo. Desta vez, queremos usar essa chamada pose de mesclagem por enumeração Se você escrever, clicar e escrever pose de mesclagem ou pose de mesclagem, verá todas aquelas que começam com E. Começando com E, na verdade, é uma enumeração E essas são apenas enumerações criadas no Unreal Agora, vamos criar nossa própria enumeração, deixe-me minimizar tudo isso Vamos para o Enos. Deixe-me clicar com o botão direito do mouse nessa pasta, ir para Blueprint e criar uma nova lista de enumeração Mas vamos chamá-lo de tipo de arma. Vamos prosseguir e inserir a enumeração. E agora você pode adicionar os tipos de armas que temos. Temos a pistola e o rifle, mas também temos os desarmados porque eu também preciso do movimento desarmado Então, vou fazer o desarmado, para começar. E podemos fazer um para a pistola e podemos fazer um para o rifle Novamente, não importa em que sequência eles estão. Se for assim, você os criou ou algo assim , não importa. Ou seja , isso realmente não significa nada. Ok. Vou fazer com que seja como uma pistola desarmada, Vá em frente e salve, essas são as armas que temos. Se você tiver mais armas, pode adicioná-las. Mas, por enquanto, vamos salvar tudo. Vamos entrar aqui. Agora podemos clicar com o botão direito do mouse e pesquisar poses de mistura. E então você pode pesquisar a enumeração que acabou de fazer, O tipo de arma, podemos pesquisar o tipo E aqui está. E agora você pode selecioná-lo. Agora você o tem aqui. Agora você pode mesclar poses por meio dessa enumeração Podemos clicar com o botão direito do mouse nessa pose padrão e, em seguida, você pode selecionar e adicionar um alfinete para quem está desarmado . Clique com o botão direito, selecione a pistola, clique com o botão direito, selecione o rifle Agora você tem pinos para todos os movimentos que você tem, então você pode conectar o movimento desarmado, o movimento da pistola e o movimento do rifle E você precisa inserir a enumeração para poder alterá-la adequadamente Ok, vá em frente e salve tudo. Agora, o que precisamos fazer aqui é voltar ao jogador, porque agora realmente precisamos saber o que o jogador está equipando agora Porque se você está equipando um rifle, precisamos mudar sua pose para um Se eu for até a base de jogadores e adicionar uma nova variável que usaremos mais tarde, vou chamá-la de arma equipada. Vou transformar esse tipo de variável no tipo de arma. Vamos usar essa arma equipada mais tarde quando definirmos qual arma o jogador equipou. E vamos salvar tudo. Acho que este será replicado mais tarde. Agora vamos fazer isso replicado para que os outros possam realmente ver qual arma você equipou E vamos voltar ao plano de animação. Acesse o gráfico uniforme aqui. Lembre-se de que já temos a referência do jogador, então podemos arrastar a partir daqui e procurar arma equipada e obter essa variável. Agora, o que podemos fazer é clicar com o botão direito do mouse para promover isso para uma variável chamá-la de arma equipada também Vá em frente e conecte-o. Vou clicar aqui para criar um nó de redirecionamento, só para tornar as coisas um pouco mais organizadas. Tudo bem, agora que temos isso, vá em frente e compile. Vamos voltar ao gráfico de animação agora. Agora podemos conectar essa arma equipada aqui e compilar Agora, para a pose padrão, você precisa ter uma pose padrão. Normalmente, o que eu faço é conectar o movimento desarmado dentro da pose padrão Para os desarmados, você precisa conectar a mesma coisa. No entanto, você realmente não pode conectá-lo duas vezes assim. Você realmente tem que copiar e colar isso. Agora, para tornar isso mais organizado, eu realmente quero me desconectar E é por isso que é tão bom fazer as notas de cache, porque você não precisa copiar e colar tudo isso. O que podemos fazer é simplesmente colocá-lo aqui. E então eu vou renomear esse Unarmed Movement Vou chamá-la de Máquina Estatal Desarmada. Cache de máquina de estado desarmado. Lembre-se de que essa era chamada de máquina de estado, máquina de estado desarmada em cache Eles estão conectados aqui corretamente. Para este, na verdade , vou arrastar e dizer cache e nova pose de salvamento do cache. Para este, vou chamá-lo desarmado, porque agora esse é o movimento desarmado que também inclui os desvios de mira Agora podemos pegar este aqui e usá-lo aqui se você pesquisar o movimento do braço, não o movimento desarmado da máquina estatal armazenado em cache E agora você pode ver como é fácil e organizado. Na verdade, não precisamos copiar tudo isso e conectá-lo aqui repetidamente. Agora podemos simplesmente copiar e colar isso e usá-lo também como pose desarmada Agora, para a pistola e o rifle, precisamos fabricá-los Vamos arrastar isso, conectá-lo aqui, ir em frente e compilá-lo. Então, aqui o que eu posso fazer agora é clicar na arma de equipamento. E digamos que no jogo eu pego um rifle. Então você pode ver que está mudando. No entanto, nós realmente não conectamos nada. E é isso que esta nota está dizendo. Está dizendo que a pose da pistola e do rifle foi ignorada porque não temos nada conectado aqui Mas, como você pode ver , está realmente funcionando. E se você voltar para desarmado, ele volta para o movimento desarmado Então, agora o que nos falta é que estamos perdendo a pistola e as máquinas de estado do rifle Então, vamos realmente passar para a próxima lição e fazer os planos de animação da pistola 83. 7.07 Modelo de animação de pistola: Olá e bem-vindo de volta. Agora estamos prontos para fazer a máquina de estado da pistola. Então agora temos os desarmados. Vou copiar isso. Vá em frente, clique em Copiar e controle C e controle V novamente. E agora temos isso. Vou pressionar F dois para renomear isso e vou chamar esse movimento de pistola Agora vou entrar nessa máquina de estado e lembrar de mudar todo o movimento para o modo inativo. Vamos trocar isso por este. Se você acabou de pesquisar uma pistola, na verdade não precisa pesquisar já Coloque-os aqui embaixo. E temos a pistola acionada. Arraste isso até aqui. Vá em frente e exclua este. E conecte a direção e a velocidade do movimento. E vá em frente e conecte-o. Volte para a caminhada, agora a caminhada. Vamos excluí-lo. Vamos procurar a pistola de caminhada aqui. Apenas certifique-se de arrastar no espaço de mesclagem correto que você criou e compilou Agora vamos voltar e ficar agachados agora. Vá em frente e exclua esta e, para a pistola de agachamento , arraste-a e conecte a direção e a velocidade do movimento Vá em frente e conecte isso também. Compile, volte agora que temos tudo isso. Não acho que precisemos mudar nada com as regras de transição e, na verdade, não precisamos. Tudo está correto agora. Agora, para o salto, precisamos pressionar aqui. Agora, para começar, vamos procurar o salto. Preciso usar aquele para a pistola. Esta é uma pistola de arranque. Vá em frente, exclua este e conecte-o. Vamos para o ar e este é o salto de uma pistola, apague esta , conecte a A última é a pistola jump end e jump end, esta aqui e conecte-a também Agora, lembre-se de alterar a regra de transição para esta, porque ela ainda diz que comece desarmado Precisamos pesquisar a relação de tempo e selecionar aquela para a pistola E ele sabe automaticamente que é a pistola porque bloqueamos a animação na outra. Nós o corrigimos. Então vá em frente e selecione esta, proporção e pistola. E vá em frente e exclua este e conecte este em vez disso. Lembre-se de que também o temos aqui embaixo. Clique duas vezes neste novamente, pesquise a relação de tempo restante para a pistola de salto Exclua este e adicione este. Agora, compile, salve tudo. Deixe-nos aqui, basta verificar se há algo que perdemos. Acho que não temos mais nada aqui. Agora temos o movimento da pistola e podemos arrastar a partir daqui e dizer cache novamente. Podemos chamar isso de Pistol State Machine hash, sem mais nem menos E agora temos o movimento da pistola. 84. Blueprint de animação de rifle:: Certo. Então, a última coisa que falta é o movimento do rifle Então, vamos copiar a pistola, Ted aqui. E vamos renomear isso para Rifle Movements. Deixe-me entrar aqui novamente. Em vez disso, clique duas vezes na marcha lenta desta pistola de uma corrida. Deixe-me deletar tudo isso. Desça, na verdade, vou procurar um rifle que será muito mais fácil descer até aqui Só vemos o rifle misturando espaços. Este é o rifle Un. Vá em frente e conecte a direção e a velocidade do movimento e conecte-a também. Vamos voltar para a caminhada. E deixe-me deletar esse. Conecte o espaço de mistura para a caminhada, para o rifle. Tranque-os. Exatamente desse jeito. A mesma coisa para o agachamento Vá em frente e pegue o agachado. Tranque-os novamente, desse jeito. A mesma coisa para o salto. Comece, vou procurar por Jump e encontrar aquele para o rifle Fuzil Jump Start, esse. Exclua o antigo. Coloque este novo. Agora, a mesma coisa para o salto. A, selecione o salto, um rifle. Conecte isso. A mesma coisa para a ponta do salto. Pegue o rifle jump end e exclua este. Conecte isso. Lembre-se de alterar novamente a regra de transição aqui para a proporção do tempo de partida restante do rifle de partida Vá em frente e exclua o antigo. Selecione este e o mesmo para este. Regra de transição de ponta de salto, proporção de tempo restante para o rifle de ponta de salto Exclua o antigo. Em vez disso, coloque este. Vá em frente e compile, salve tudo. E acho que terminamos com este também. Só verificando rapidamente, acho que está tudo bem. Vamos voltar ao gráfico de animação. E dentro daqui, vamos atacar e dizer cache novamente. E renomeie este para Rifle State Machine. Ok, você pode organizar isso um pouco mais se quiser, mas por enquanto está tudo acabado. Vamos em frente e salvemos tudo. Lembre-se também de compilar e seguir em frente. 85. 7.09 Finalizando o Blueprint de animação: Ok, agora é hora de terminar isso. Não temos mais muita coisa, então vamos continuar e terminar tudo isso. O que precisamos fazer agora é adicionar também as compensações de mira Vamos começar com a pistola 1. Eu só vou arrastar isso para longe. Pegue a pistola aqui. Agora precisamos usar essa pose de cache. Vamos clicar com o botão direito do mouse e pesquisar o cache da pistola. Pegue este, com a pistola de estado em cache e use isso. Agora precisamos fazer a mesma coisa aqui. Precisamos clicar com o botão direito do mouse e pesquisar por AO Rauch. Procure aquela com a pistola Am offset player crouch pistol Am offset player crouch Vá em frente e conecte-o aqui também para ver a direção da mira. Eu posso simplesmente copiar e colar essa variável. Agora isso está correto. Vou usar para eles uma pistola offset. Pegue aquele com o reprodutor de offset Am. Conecte na direção da mira, vá em frente e faça a mesma pose em cache e conecte-a aqui também Agora você tem uma para o agachamento e outra para a pistola vertical, assim Use essa mistura de poses de Bool. Na verdade, vou copiar tudo isso. Nós realmente não precisamos escrevê-lo de novo e de novo. Então vá em frente e pegue isso. Vamos configurar este para agachado, que na verdade ainda está correto Vamos apenas conectar o verdadeiro. Se estivermos agachados, vamos usar este. Se não estivermos agachados, vamos usar este. Vá em frente e compile. E agora vou organizar isso um pouco mais tarde. No momento, eu só quero conectar isso porque esses ficarão um pouco maiores, assim como este aqui. O que vou fazer é pegar isso e salvar uma nova pose em cache, assim como antes você a chamava de unun movement Esse eu vou chamar movimento de pistola, sem mais nem menos E vá em frente e conecte-os aqui. Agora vou organizar isso como antes. Ok. Então, agora está organizado. Eu apenas tentei organizar tudo. E agora temos o rifle aqui. Podemos simplesmente movê-lo para baixo por enquanto. Na verdade, vou mover o movimento desarmado acima da pistola, um desses Tente ser o mais organizado possível , porque quando você está criando um jogo grande, vai ficar muito confuso porque você terá muitas coisas acontecendo E é sempre bom tentar se manter organizado para a última vez aqui, com a pistola ou o rifle Vamos novamente, assim como antes, clicar com o botão direito do mouse e procurar por AO Rauch e escolher aquele para o E, novamente, levante-se e escolha aquele para o rifle novamente. Agora podemos seguir em frente e pegar o rifle da máquina de estado, máquina de estado em cache, conectá-lo aqui, pegar a direção e conectá-lo Agora podemos colar isso aqui também. Conecte-o a essas entradas. Agora está tudo bem. Novamente, assim como antes, vou copiar tudo isso. A mistura que intimida aqueles que estão aqui também. Vá em frente e cole. Conecte o agachamento. Se você estiver agachado, você Se você não está agachado, está fazendo isso, está E podemos arrastar a partir daqui e dizer Cache novamente. Podemos salvar uma nova pose de cache e chamar esse movimento de rifle de Cached assim Ok, tudo parece correto. E vamos compilar E vou organizar isso de novo assim como antes. Agora está organizado. E eu vou pegar tudo isso e colocá-lo logo abaixo do da pistola, assim como aqui Está bem? Tente fazer isso da melhor maneira possível. Agora nós o temos aqui. Temos aquele para os desarmados, temos o da pistola e também o do rifle O que podemos fazer agora é compilar e salvar tudo apenas para garantir nada falhe com a pistola Agora podemos arrastar e dizer que podemos usar o agora, este está apenas usando o movimento, porque a partir do movimento determinamos se devemos usar o agachamento ou o suporte A partir disso, pesquise o cache e lembre-se de selecionar o movimento da pistola em cache, não o movimento da máquina de estado Então, para o rifle, podemos arrastar e procurar o cache novamente. E escolha o único movimento do rifle armazenado em cache. Vá em frente e organize isso da melhor maneira possível. Eu também vou arrastar isso um pouco para baixo. Parece um pouco melhor, talvez algo assim. E agora vamos compilar. E agora você pode ver que a nota sumiu porque conectamos tudo E se eu clicar na arma equipada e trocá-la por pistola, ela está funcionando Se eu mudar para rifle, está funcionando. Se eu mudar de volta para desarmado, ele também está funcionando. Agora, você também pode alterar o tempo de mistura, se desejar. Então, podemos ver se você aumenta todos e tenta alterá-los Agora, o que você pode fazer é mudar para a pistola e o rifle, você pode ver que isso muda instantaneamente O que você pode fazer, você também pode aumentar esse tempo. Por exemplo, posso aumentá-lo para dois. Na verdade, ele se misturará muito mais lentamente. Lembro-me de compilar, caso contrário, não funcionará. Compile e depois mude para pistola. Agora você pode ver que leva muito tempo antes de mudar para essas poses. Você pode tentar jogar com isso. Por exemplo, 0,0 0,3 talvez dois ao extremo. Vamos compilar e selecionar o rifle de pistola. Talvez isso seja muito melhor. Acho que ainda está muito lento. 0,20 0,20 0,2 Vamos compilar. Vamos selecionar a pistola de rifle desarmada. Basta compilar, certificando-se de que está funcionando corretamente. Eu acho que é muito melhor. 0,2 em vez de 0,1 é muito melhor. Agora você pode ver que terminamos o movimento, e talvez possamos colocar este aqui no meio. Esse é o último. E agora tudo está funcionando. Portanto, sempre podemos trocar essa arma equipada posteriormente em nossa base de jogadores, quando estivermos saqueando armas E automaticamente, no gráfico de eventos, definirá essa variável aqui e ela mudará no gráfico de animação. Mas, por enquanto, para a arma equipada, vou colocá-la como padrão, compilar tudo, salvar tudo e agora estamos prontos para seguir em frente 86. 8.01 Importando a arma Assets: Vamos agora importar os ativos de armas. Para isso, volte para o lançador da Epic Games. E dentro daqui, vamos ao mercado. No mercado, vamos acessar Browse e acessar Weapons In Weapons, você precisa clicar nos gratuitos para que possamos obter alguns ativos gratuitos que possamos usar no curso. Eu baixei este chamado FPS Weapon Bundle. Se você clicar nele, vá em frente e clique em Download. Se você ainda não o baixou, clique em Adicionar ao projeto. Depois de fazer o download novamente, clique em Mostrar todos os projetos e selecione nosso próprio projeto, Counterstrike E vá em frente e selecione a versão compatível com a versão mais recente, esta. Realmente não importa que seja compatível com essa versão, isso não nos causará problemas. Vá em frente, selecione-o e vá para Adicionar ao projeto. Isso vai adicionar isso a um projeto. E isso pode levar algum tempo. Se esta é a primeira vez que você está fazendo isso, eu vou voltar aqui. Vou baixar este também porque este pacote aqui não contém nenhuma pistola E eu quero fazer uma pistola também, é claro. Então você sabe atirar com pistolas e assim por diante Portanto, não são só rifles. Vamos clicar nesse. E vamos baixar este novamente. Armas militares Doc. Vá em frente e faça o download. Você também pode usar esta, prata militar em vez disso, mas eu vou usar esta. Faça o download e adicione ao projeto novamente, clique em Mostrar todos os projetos, selecione nosso projeto e selecione a versão mais recente. E adicionar ao projeto também. Então você pode ver que, quando isso terminar e eu puder fechá-lo, você pode ver dentro do nosso projeto que agora temos o pacote de armas FPS e também o documento de armas militares E antes de fazer qualquer coisa, vou selecionar os dois e depois arrastá-los para a pasta Marketplace. E selecione Mover aqui. E este vai levar algum tempo, então vou pular até terminar. Tudo bem. Agora eles foram movidos e, como você pode ver, na pasta Marketplace, agora tenho o dock de armas militares e o pacote de armas FPS Mas como você pode ver lá fora, eu ainda tenho essa pasta de pacotes de armas FPS E isso pode acontecer com você também. Você pode ver que eles estão vazios e se eu clicar em excluir no meu teclado e selecionar Excluir, ele não será excluído. E isso acontece às vezes em um motor real. Então, o que eu faço é geralmente salvar o projeto e fechá-lo. Então eu abro o arquivo do projeto, então está dentro daqui, o contra-ataque. E então eu abro a pasta de conteúdo e excluo esse pacote FPS Portanto, certifique-se de que todos os arquivos já estejam dentro do mercado. Então você pode ver aqui, o pacote FPS está vazio e não há nada dentro dele Não sei por que não está sendo excluído por algum motivo. Então, vamos excluir essa pasta. E então eu posso ir em frente na biblioteca e executar meu projeto novamente. E ela deve ser excluída agora, como você pode ver aqui, quando eu estiver dentro do meu projeto novamente, a pasta desaparecerá porque acabamos de excluí-la. E na pasta Marketplace, temos o pacote de armas FPS e o documento de armas militares 87. 8.02 Configurando a arma: Agora que importamos as armas, vamos configurá-las. Vamos clicar com o botão direito aqui na pasta Blueprint. E vamos criar uma nova pasta, e vamos chamar essa de armas. Vamos clicar com o botão direito do mouse nessa e definir uma nova cor para essa pasta. Novamente, vamos abrir essa pasta, botão direito do mouse e ir para a classe Blueprint Para este, vamos apenas criar um ato simples. Porque uma arma é apenas um Ta estático que existe no mundo. Não é um peão ou um personagem que você possa controlar. E também não é um desses, é só um ator. Vamos chamar isso de Base de Armas BP . Novamente, vou criar uma classe Base. E a partir dessa, podemos escrever, clicar e selecionar Create Child Blueprint Class Para este, vamos fazer um AK 47, então podemos chamá-lo de PK 47 Em seguida, você pode clicar com o botão direito do mouse novamente e criar uma classe secundária de blueprint para esta Vamos chamá-lo de BP M41. Aí está a outra arma. O último é uma pistola. Podemos clicar com o botão direito do mouse em Criar classe de planta infantil e chamá-la de pistola BP. Vamos salvar tudo. Primeiro, vamos abrir a base de armas porque primeiro temos que trabalhar aqui. Aqui precisamos de um novo componente. O componente que precisamos é uma malha estática ou uma malha esquelética, porque precisamos adicionar os três modelos D para a arma Agora, se você clicar aqui e pesquisar por malha, teremos a malha esquelética e a malha estática Se você não sabe, a diferença é que a malha estática é apenas um modelo estático de três D sem animações E temos uma malha esquelética que é um modelo em três D com animações Se você voltar, na verdade, temos que conferir aqui as armas do mercado, como elas vêm se você abrisse o pacote de armas do FPS, abrisse as armas e abrisse as malhas E vamos abrir esse K para sete. E você pode ver que é uma malha esquelética. Se você vê essa linha rosa ou também pode olhar aqui embaixo, diz malha esquelética Na verdade, temos que adicioná-lo como uma malha esquelética. Também podemos verificar a outra pasta apenas para garantir que o documento de armas militares abra armas e que elas também venham como malhas esqueléticas Você pode ver aqui que eles têm animações. Eles têm animações de recarga, animações filmagem e assim por diante Essas armas têm animações. Se voltarmos para a base de armas daqui, vamos clicar em Anúncio e procurar a malha esquelética E selecione-o aqui. E vamos chamar isso de arma. Agora, para esta arma aqui, também precisamos de uma esfera de colisão Porque precisamos interagir com a arma. Por exemplo, se estiver no chão, precisamos pegar aquela arma e saqueá-la É por isso que precisamos de uma esfera de colisão para que possamos colidir com ela e realizar algumas ações Se você apenas pesquisar por colisão, podemos ver que podemos fazer uma colisão de caixa, colisão cápsula ou colisão de Agora eles são iguais, é só a forma que é diferente. Então, vou selecionar uma colisão esférica para esta E vou aumentar o raio dessa esfera um pouco maior. Agora, isso não importa agora, porque vamos ajustá-lo mais tarde. Quando testamos as armas dentro do nível , podemos calcular o raio de distância em que o jogador pode saquear a arma e assim por diante É assim que você controla isso aqui. Mas, por enquanto, vou colocá-lo um número aleatório e salvar tudo. Agora vamos fechar a base de armas e ver as plantas da criança Se você abrir armas. E vamos abrir o AK 47 aqui. Agora, para a arma, se você clicar nela, vamos selecionar a malha esquelética Se você apenas pesquisar, não sei por que se chama KA 47, mas você pode pesquisar e encontrar e selecionar este. E vamos abrir o segundo. E você pode clicar na arma, abrir esta aqui e pesquisar por R quatro. Você pode selecioná-la aqui, depois abrir a última, a pistola, clicar na arma e depois selecionar ou simplesmente pesquisar a pistola e selecionar esta aqui Agora você pode ver que todas as armas estão agora dentro daqui. Vá em frente e compile todas as plantas. Mas, como você pode ver aqui, todos eles estão virando dessa maneira. Na verdade, essa é a direção errada, porque no Unreal Engine, o eixo X é o eixo dianteiro E você pode ver aqui, o ponto de articulação vermelho aqui é o eixo dianteiro As armas precisam girar dessa maneira. Aqui estão todos virando para o lado errado. Como você pode ver, temos que virar todos eles em vez de apenas girá-los um por um desta forma. E temos que ir aqui e transformá-lo também. Na verdade, vamos fazer outra coisa. Lembre-se de que temos uma base de armas que é a classe principal do projeto Tudo o que você fizer aqui dentro se aplicará a todas as crianças. Se você clicar na arma e pegar a ferramenta de rotação e girá-la em -90 graus, vá em frente e compile Agora dê uma olhada na pistola M four, a AK. Eles estão todos virando da maneira correta, agora essa é a maneira correta que eles deveriam virar. Vá em frente e salve tudo. Eu acredito que foi isso para tudo. Agora que temos isso, vamos arrastá-los para o nível e dar uma olhada em sua aparência. Eu só vou separá-los um pouco. Vou selecionar todos eles e depois movê-los para cá no nível. Novamente, você pode clicar em G para ocultar todos os ícones, dar uma olhada neles e tudo ficará bem. Por enquanto, vá em frente e salve tudo, e vamos seguir em frente. 88. 8.03 Habilitando a física: Como você pode ver aqui, quando eu clico em jogar, todas as armas estão flutuando. Se eu for, na verdade, eles estão do lado terrorista. Se eu clicar em jogar e selecionar terroristas, podemos ver que todas as armas estão flutuando Queremos que eles caiam no chão. Em vez de fazê-los flutuar assim. Precisamos habilitar a física. Se voltarmos ao plano e antes de eu fazer isso, na verdade vou reduzir a quantidade de jogadores que eu espio no servidor de aulas Ok, vamos até as armas, abra a base de armas. Dentro daqui você clica na arma. Você pode ver algo chamado Simular Física aqui em Física Simular Física No entanto, por algum motivo, não consigo selecionar e não tenho ideia do porquê. Mas o que você pode fazer é simplesmente excluir esses eventos por enquanto. No Begin Play, vamos fazer isso aqui. Vamos pegar a arma. Vamos arrastar a partir daqui. Se você simplesmente escrever o mesmo nome que você pode ver aqui, clique em Arma. É chamado de Física Simulada. Se você arrastar a partir daqui e apenas escrever Simular, você pode ver que é esse chamado Set Simulate Se você simplesmente selecioná-lo aqui, conectá-lo e configurá-lo como verdadeiro para que ele simule a física e vá em frente e compile Agora, ele ainda não funcionará porque a colisão Se você clicar na arma e descer até a colisão, verá que não há colisão Se você clicar em jogar agora e selecionar o terrorista, verá que ele ainda não está caindo. Eles ainda estão voando no ar. Vamos fechá-lo e, para a colisão, vamos alterá-lo para personalizado Por enquanto, vou clicar em Ignorar a colisão para ignorar tudo por enquanto Estou indo aqui para não colidir. Vá em frente e selecione somente física. Só queremos física. O que significa consulta. Isso significa que se podemos interagir com a arma ou não. Na verdade, não precisamos disso porque nossa esfera de colisão é, na verdade, apenas uma consulta É como se estivéssemos colidindo aqui. Estamos fazendo alguma ação com essa esfera de colisão. É uma colisão e você pode interagir com ela sem ter física Mas para a arma, eu não quero isso porque já temos a esfera de colisão para esta, só queremos que a física seja ativada Então eu vou ignorar tudo. No entanto, você precisa bloquear a estática mundial e a dinâmica mundial porque agora é o chão. Se você ignorar tudo, você pode ver se eu clicar em jogar agora e selecionar o terrorista, as armas sumiram. Isso ocorre porque você não bloqueou o chão. Eles estão caindo pelo chão. Temos que bloquear o chão, o mundo estático e dinâmico. Vá em frente e compile e clique em jogar e selecione terroristas Novamente, na verdade, vou pegar todos e colocá-los aqui, em vez disso. Basta colocá-los no meio para que eu possa realmente vê-los mais rápido. Se eu clicar em jogar, vou até terrorista, você pode ver que agora eles estão sendo bloqueados pelo chão e estão caindo no chão, ok. Agora você também pode ver se eu entro neles como terrorista ou como peão, nada está realmente acontecendo e isso é porque eu não estou colidindo com Agora, se você quiser que o peão colida com eles, eu não vou fazer isso dentro deste projeto No entanto, se você quiser isso, você também pode selecionar o lago que você está controlando também os bloqueará. E isso significa que agora você pode interagir com eles como peões para que possamos entrar neles e a colisão também funcione Você também pode fazer isso se quiser. No entanto, para este projeto, eu realmente não vou fazer isso, vou ignorar isso por enquanto. Então, agora temos a física ativada e estamos simulando a física para todas as armas Então, vamos compilar e salvar tudo e seguir em frente 89. 8.04 Atores replicantes: Anteriormente, replicávamos variáveis, mas você também pode replicar atores do blueprint E temos que fazer isso para que eles apareçam corretamente para todos os clientes. Se você abrir a base de armas e aqui nos padrões da classe, verá que ela também é chamada E você precisa selecionar isso se quiser mostrar as informações corretas do servidor para todos os clientes que exibem essas armas, bem como o movimento das armas e assim por diante. Então você tem que pressionar as réplicas. Portanto, funciona em multiplicador. Você também precisa replicar o movimento, para garantir que o movimento deles também para garantir que o movimento não esteja incomodando. Essa era a única coisa que você precisava fazer às vezes, se você esquecer isso, às vezes você faz algum código e vê que não está funcionando para os clientes e fica confuso por que está. Então, mas é porque você também precisa usar um ator que você cria, por exemplo, essa é a base de armas. E você precisa selecionar réplicas, bem como replicar Funciona para multijogador. Vá em frente e salve tudo. Como você pode ver, como é o modelo principal, agora ele também se replica para todos os filhos Vá em frente e salve tudo, e vamos seguir em frente. 90. Sobreposição de arma 8.05: Agora estamos prontos para realizar alguns eventos para quando nos sobrepormos à arma Para ver melhor, você pode abrir a base de armas por enquanto, se clicar na esfera, poderá clicar neste jogo oculto Você pode removê-lo. E se você compilar, poderá ver a esfera de colisão no jogo É bom ver aqui. Você pode ver a que distância você pode interagir com a arma. Você sempre pode aumentá-lo ou diminuí-lo, dependendo do jogo que você está criando. Mas é sempre bom ver o interior daqui. Vamos fazer alguns eventos de interação. O que queremos fazer aqui na base de armas clicar na colisão da esfera na parte inferior. Se você acessar aqui no painel de detalhes, poderá ver este chamado Component Begin Overlap Se você clicar no sinal de adição, ele criará o evento para você. Agora diz o que deve acontecer sempre que você se sobrepõe a essa colisão esférica Para este, primeiro preciso verificar se é o jogador que está colidindo com ele Porque se você tiver inimigos correndo por aí ou alguma outra coisa colidindo com eles, ele realmente disparará esse código Quero ter certeza de que somente o jogador pode interagir com ele. O outro ator é o ator que está interagindo com essa esfera de colisão. Posso dirigir a partir desse outro ator e dizer que ator tem tag e, em seguida, posso selecionar essa função aqui. E o que essa função está dizendo é que se o ator que está interagindo com essa colisão de esfera tem essa etiqueta específica, eu posso ir em frente e disparar o código Eu posso fazer um galho aqui. Se isso for verdade, o jogador tem essa tag que estamos prestes a escrever. Os eventos podem disparar aqui a tag que precisamos escrever aqui. Temos que atribuir uma etiqueta para o jogador. Se você abrir o player novamente, base de jogadores aqui, dentro daqui na classe, é padrão Se você pesquisar por tag no painel de detalhes, poderá ver essa em ator. Não está sob etiquetas. Você tem que se certificar de que está abaixo do ator. E você pode ver as etiquetas. É chamado actor has tag. Precisa estar sob o comando do ator. Se você clicar na cláusula, eu posso chamar isso de um jogador Agora adicionamos uma tag aqui para essa cláusula do blueprint. Adicionamos o reprodutor de tags. O que podemos fazer é ir até a base de armas e perguntar: esse ator tem o tag player? Se isso for verdade, podemos disparar essas funções. Agora, isso só é verdade para os jogadores da base de jogadores. Eles têm o tag player. E isso se aplicará tanto ao terrorista quanto ao contraterrorista, porque, novamente, essa é a cláusula principal Vamos abrir aqui. Agora, para colisões aqui, para a sobreposição de componentes, você sempre precisa se certificar de executá-lo no servidor para evitar A partir daqui, arraste e diga que o switch tem autoridade e, em seguida, podemos escrever o código dessa autoridade aqui, que é o servidor sempre garantir que você execute esse código no servidor. Porque se você não fizer isso, digamos que o cliente esteja aqui e esteja trapaceando de alguma forma, tenha baixado algum software e possa realmente interagir com a arma, possa realmente interagir com mesmo estando aqui, executando-a no servidor O servidor verifica se o jogador está realmente interagindo com ele ou não Ok, desse outro ator, o que podemos fazer é arrastar também. Agora sabemos que é o jogador e agora o executamos no servidor. Podemos arrastar a partir daqui e dizer obter referência do jogador porque lembre-se de que é o jogador que está interagindo com ele E também fizemos com que isso pegasse o player F da interface. Anteriormente, temos a referência dos jogadores, para que possamos prosseguir e conectá-la. Clique duas vezes aqui para fazer anotações de redirecionamento e torná-las Assim mesmo, Deus e compile. E agora podemos realmente interagir com ele. Agora, para ver se isso está correto, você pode arrastar a partir daqui e escrever uma string de impressão. Talvez você possa conectar esse player a ele. Vá em frente e veja se isso acontece. Se você clicar em jogar e realmente selecionar o terrorista , não estaremos do outro lado do mapa. Agora, se eu for até aqui e interagir com ele, você verá que diz aqui, terrorista da BP Agora está realmente correto, estamos interagindo com ele Tudo está funcionando, então vá em frente e exclua isso por enquanto, compile e vamos seguir em frente 91. 8.06 Definindo o tipo de arma: Porém, antes de continuarmos, preciso adicionar o tipo de arma a cada arma. E é bom usar isso mais tarde, porque é sempre bom saber se a arma que você está saqueando é um rifle ou uma Precisamos disso mais tarde para o inventário, para não saquearmos vários rifles, várias pistolas e É claro que você pode fazer isso em seu próprio jogo, mas também verificar, por exemplo, se você não pode saquear três rifles e coisas assim Então você tem que saber se é um rifle ou uma pistola que você está saqueando, porque no momento não temos ideia do que estamos saqueando, estamos apenas interagindo estamos apenas interagindo O que podemos fazer está aqui na base de armas. Na verdade, antes de fazermos isso, vamos às enumerações E já temos esse chamado tipo de arma, na verdade já temos esse. Vamos voltar à base de armas e adicioná-la aqui. Clique no sinal de mais nas variáveis e escreva o tipo de arma aqui. Para o tipo de variável que você pode pesquisar pelo tipo de arma, esta é nossa enumeração Saia e selecione-o, clique compile e salve tudo Agora, o legal disso é que você o adicionou à base de armas, que é a classe principal desses projetos de armas Muito bom é que, se você abrir o AK 47 agora e clicar nos padrões da classe, agora poderá ver o tipo de arma variável e selecionar qual tipo de arma é essa Se você adicionar variáveis à classe principal, elas poderão ser usadas nas classes secundárias Agora você pode ver se eu abro a 44 ou a pistola, clico nos padrões da classe, posso ver as variáveis da Tudo o que você adicionar aqui também pode ser aplicado a todas as crianças. Agora, clicando no AK, posso selecionar o tipo de arma para ser um rifle Eu posso compilar agora. Também posso ir até os quatro selecionar o tipo de arma para ser um rifle Se eu abrir a pistola, vou para os padrões da classe e clico aqui e seleciono a pistola para Vá em frente e compile todos esses projetos. E agora podemos salvá-los. Sim, agora sabemos qual é o tipo de arma para todos eles. Isso é uma pistola, isso é um rifle. E isso também é um rifle. E precisamos fazer isso para sabermos o que estamos saqueando. 92. 8.07 Verificando se o jogador tem a arma: Vamos agora criar um inventário de armas para o jogador e verificar se o jogador já tem a arma. Porque o que eu estou tentando fazer é se o jogador interage com a arma, ele precisa verificar se o jogador já tem a arma ou não Se o jogador já tiver a arma, não poderá saqueá-la Só vai saquear o rifle se eles ainda não tiverem um rifle E eles vão saquear a pistola se ainda não tiverem uma pistola Vamos continuar na base de jogadores e, dentro daqui, vamos clicar no sinal de mais. Vou criar uma nova variável chamada Inventário de Armas. Aqui, apenas procuramos o tipo de arma ou a base de armas, porque precisamos adicionar as armas a esse inventário, elas precisam ser do tipo de base de armas. E vá em frente e selecione a referência do objeto. Agora, como agora é um inventário, deixe-me clicar no X aqui. Como é um inventário, precisamos alterá-lo de uma única variável para uma matriz. Lembre-se de que uma matriz é como uma caixa onde você adiciona coisas a ela. Temos que adicionar as diferentes armas que você saqueou. Você pode ver se eu clico no sinal de mais. Agora, aqui eu não posso selecionar porque é a classe principal. E não podemos simplesmente adicionar coisas aqui automaticamente. Mas você pode ver que pode adicionar o rifle e a pistola durante o Você pode adicionar várias armas dentro desse inventário. Mas, para nós, queremos adicionar, por exemplo, um rifle e uma pistola E você pode ter uma espingarda e assim por diante para o seu jogo. Mas, por enquanto, só temos o rifle e a pistola. Vá em frente e exclua-o por enquanto. Isso foi só por exemplo. Vamos voltar para a base de jogadores. Agora, da base de jogadores, como já temos a referência, podemos arrastar a partir daqui e pesquisar inventário de armas e obter essa matriz. Agora, para essa matriz, queremos percorrer todo esse inventário e verificar se o jogador tem um rifle que podemos arrastar daqui e dizer para cada laço com freio. E você pode ir em frente e selecionar isso. Agora você pode ver as armas através desse giro, se você segurar o mouse sobre elas. Agora é um elemento único. É a base de armas da BP. Vai pegar cada arma daqui e percorrer o código, percorrer essa matriz, e você poderá fazer algo com ela. Agora, o que estamos tentando fazer é verificar se o jogador já tem essa arma com a qual está tentando interagir. O que precisamos fazer é pegar cada uma das armas do inventário que precisamos arrastar daqui e verificar o tipo de arma. Lembre-se, você acabou de criar esse tipo de arma, então você pode chamá-lo aqui. Agora está percorrendo cada um deles. Você está pegando o tipo de arma, você está apenas perguntando aqui, arrastando e dizendo o mesmo, se esse tipo de arma dentro do seu inventário é igual ao tipo de arma que você está tentando saquear E podemos fazer um galho, se estiver correto, então você não pode saquear a arma Temos que fazer isso mais tarde para que você não possa saquear a arma. No entanto, se for falso, podemos realmente saqueá-lo É assim que você faz. Agora precisamos replicar essa porque o cliente também precisa ver essa informação, que tipo de arma você tem Vou selecionar replicá-lo. Vá em frente, compile e salve tudo. Agora você pode ver aqui que estamos fazendo o inventário de armas. Estamos tentando verificar se o jogador já tem a arma. Estamos pegando o tipo de arma com a arma dentro do inventário. E estamos verificando se esse tipo de arma é igual ao que estamos tentando saquear Se isso estiver correto, não podemos saquear a arma porque já a temos no inventário Se for falso, podemos saquear a arma. Ok, este com intervalo, podemos usá-lo mais tarde. Eu posso explicar o que isso significa, mas por agora podemos salvar tudo e passar para a próxima lição. 93. 8.08 Saqueando a arma: Agora vamos seguir em frente e possibilitar que o jogador saqueie a arma Então, agora verificamos se a arma está no inventário. Se isso for verdade, vamos primeiro entrar na base de jogadores e fazer um novo lingote, que vou chamar de arma de saque Eu vou transformá-lo em um lingote. Vamos alterá-la para uma única variável em vez de uma matriz. Vamos compilar Agora, isso será verdade se o jogador conseguir saquear a arma E será falso se o jogador não conseguir. O que vou fazer é colocá-lo como padrão. Assim, o jogador pode saquear a arma por padrão, a menos que encontremos aqui no inventário que o jogador já tem uma arma por padrão Vá em frente e defina como verdadeiro. Vamos salvar tudo e vamos para a base de armas agora. Agora, o que podemos fazer é nos afastar desse jogador novamente e procurar por esse lote de barras de armas Vamos configurá-lo aqui. Se encontrarmos essa arma que estamos tentando saquear, se a encontrarmos no inventário, vamos configurá-la como defeituosa É verdade por padrão, mas vamos definir como erro que o jogador não possa saquear a arma se realmente a encontrarmos no inventário Esse loop aqui não o encontra no inventário do jogador, mas sim em todos os itens que ele está pesquisando. No final, quando o loop estiver concluído, esse ainda é verdadeiro. Se não encontramos nenhuma arma, ainda é verdade. Então, podemos ir em frente e saquear a arma que podemos arrastar desta Agora, novamente, e eu posso procurar uma arma para saquear. Dependendo se isso é verdadeiro ou falso, podemos fazer alguma ação aqui quando ela for concluída. Primeiro, ele simplesmente percorrerá os itens. E depois disso, vamos verificar se essa arma pode saquear agora é falsa ou verdadeira Agora vou organizar isso um pouco. Vou adicionar um nó de rocha traseiro aqui e conectá-lo aqui. Em vez disso, se isso for verdade, se o jogador puder realmente saquear a arma, vamos em frente na base de jogadores e vamos até aqui Vou escrever, clicar e criar um novo evento personalizado. Vamos chamar isso de arma única novamente. Vou apenas executá-lo por meio do servidor. Apenas certifique-se de que agora ele já esteja sendo executado no servidor. Porque você lembra que está administrando isso por meio da autoridade. Ele já está sendo executado no servidor. No entanto, eu gostaria de fazer isso dessa maneira para me manter consistente. Você pode simplesmente escrever um para este servidor imediatamente. Você não precisa fazer isso porque já estamos acessando o servidor para você. Você pode simplesmente usar este se quiser, mas eu só gosto de permanecer consistente com meu código. Vou executá-lo por meio do servidor aqui. Novamente, vou arrastar a partir deste e executá-lo no servidor desta forma. Então eu vou escrever meu código aqui. Agora, novamente, você pode simplesmente escrever um código aqui se quiser, mas no futuro, se você não o estiver executando no servidor, precisará executá-lo aqui. Agora temos isso escrito. Agora, o que queremos fazer quando saqueamos a arma, queremos apenas adicionar essa arma saqueada ao inventário Estamos fazendo esse inventário de armas e dizendo definir elemento de matriz. Como queremos adicioná-lo ao inventário, ele pergunta: a qual índice você deseja adicioná-lo? Eu só quero adicioná-lo a qualquer índice disponível. Então, vou direcionar a partir daqui e dizer comprimento, depois vou adicioná-lo aqui. Agora, lembre-se de que as matrizes começam do índice zero e depois vão para 123 e assim por diante Se você arrastar daqui e disser, último índice agora, o último índice será três, ou essa matriz aqui. Se você estiver pegando esse último índice e conectando-o aqui, verdade você vai sobrescrever qualquer arma que esteja no índice Se você quiser usar o último índice, você tem que pegar o último índice e dizer mais um. Você está encontrando o último índice e, na verdade, está adicionando a nova arma aqui no índice quatro, que você pode conectar aqui. Agora, um método melhor para fazer isso é apenas encontrar o comprimento. O comprimento é 1234. Na verdade, ele vai adicioná-lo ao índice de quatro. Não precisamos fazer isso aqui. É por isso que eu uso comprimento. Vai produzir quatro. E você também pode ver isso se você apenas escrever uma string de impressão e conectá-la aqui, sempre bom adicionar strings de impressão Se você quiser verificar os valores do que está fazendo, vou adicioná-los a esse índice. Agora, qual item queremos adicionar? É a arma que queremos adicionar. Agora, nós realmente não temos nenhuma referência à arma. Deixe-nos fazer isso. Vamos clicar em Perder neste evento aqui. E vamos procurar uma base de armas. E vamos selecioná-la aqui e chamá-la de arma. Você também pode chamá-la de arma saqueada, se quiser. E então eu vou tirá-lo daqui e conectá-lo a este evento. E agora podemos usá-lo aqui na base de armas. Se muitas armas forem verdadeiras, então queremos pegá-las da base de jogadores e procurar muitas armas. É assim que a chamamos. Vá em frente e selecione-o e agora você pode conectá-lo aqui novamente Vou clicar para fazer anotações reescritas para torná-las um pouco mais legíveis Assim mesmo. Agora ele vai te perguntar, qual é a arma? Qual é a variável para isso? Agora, a forma como você define isso é : lembre-se de que você está dentro da base de armas se apenas atacar e escrever a si mesmo, porque é a arma com a qual você está interagindo Se você interagir com este aqui, ele sabe que é o 41 porque é com ele que você está interagindo E se você escrever self como referência, ele sabe que essa arma é, na verdade a única cláusula padrão aqui embaixo. Se a arma for considerada falsa, ela pode saqueá-la. Então isso significa que você não pode saquear a arma porque em algum momento ele realmente encontrou a arma no inventário e você não pode saquear a Agora, se ele encontrar a arma no inventário, digamos, por exemplo, no primeiro índice, ele realmente encontrou a arma. E não faz sentido vasculhar todas as outras armas porque ele já encontrou a arma e você não pode saqueá-la De qualquer forma, isso é o que isso é, o que essa pausa significa. Eu quero quebrar o ciclo. Não quero mais percorrer essa matriz. Quando eu encontro a arma no inventário posso fazer com que a arma de saque caia Na verdade, quero arrastar isso e configurá-lo para quebrar. Posso clicar duas vezes agora e fazer algumas anotações traseiras para facilitar a leitura. O que estou dizendo é que, quando você encontrar essa arma no inventário, vá em frente e quebre o ciclo. Porque não faz sentido dar uma olhada em todos os itens quando eu já o encontrei e não consigo saqueá-lo de qualquer maneira Então, ele vai quebrar e isso pode ser saqueado, a arma está prestes a cair Então você não vai saquear nada porque não temos nenhum código aqui Mas lembre-se de que você precisa definir isso como verdadeiro novamente porque é verdade. Por padrão, tem que ser verdadeiro. Isso funcionará na próxima vez que você interagir com uma arma. Por padrão, será falso porque você não se lembrou de defini-lo como verdadeiro. Por padrão, será falso. E mesmo que você possa saquear uma arma, mesmo que ela não tenha encontrado nada, essa será falsa Na próxima vez que você saquear uma arma. Lembre-se de arrastar a partir daí novamente e procurar novamente se pode pegar uma arma e configurar e , em seguida, lembre-se de configurá-la como verdadeira novamente. Por padrão, sempre que você interagir com uma arma novamente no futuro, você pode realmente configurá-la, mas você pode realmente saquear a arma mas você pode realmente saquear a arma se não a tiver no inventário Eu também posso simplesmente clicar e arrastar isso até aqui. Na verdade, vai ficar muito melhor. Algo parecido. Então, agora deve ser verdade, você pode ir em frente e compilar tudo novamente. Lembre-se de que se você fez isso como eu, vá em frente na base de jogadores e no inventário, vou deletar todas aquelas aqui que acabei de criar para demonstrar que o inventário de armas por padrão, não deveria ter nada. Vá em frente e salve tudo. E agora, para essa arma aqui, vamos levá-la até aqui e organizá-la um pouco melhor. E agora, o que você pode fazer agora, você pode conectar essa arma porque a definimos aqui como a autorreferência. Agora você pode pegar, essa arma passará por aqui e será adicionada ao inventário. Novamente, clique duas vezes para fazer anotações traseiras da rota. Agora você o está saqueando para o inventário. E vá em frente e selecione o tamanho adequado. Ele garantirá que ele seja adicionado a essa matriz. Vá em frente e compile. E agora ele deve funcionar corretamente para testá-lo. Para ter certeza, vá em frente e arraste a partir daqui e escreva uma sequência de caracteres impressa. E você sempre pode pegar esse, vamos colar aqui. E vamos arrastar e dizer , pegue uma cópia. E sempre podemos obter o índice zero porque isso é, lembre-se de que em matrizes ele começa com o índice zero Estamos obtendo o índice zero e nos certificando de que estamos realmente saqueando a arma Isso. E adicione-o à corda para que ela saiba o nome da arma. Agora vamos imprimir o nome da arma na tela que saqueamos, compilar e salvar E vamos garantir que tudo esteja funcionando. Vamos clicar em jogar. Selecione Terroristas E se eu entrar aqui , vai dizer AK 47, como você pode ver aqui Agora, o único realmente não importa, é apenas o número desse plano Nós podemos pegar esse. Agora você pode ver que não consigo interagir com ele porque já tenho um rifle no meu inventário Agora, se eu jogar novamente e selecionar o terrorista e passar pelo 41, ele imprime o 41 na tela aqui em cima. Agora, se eu usar a pistola, porque você pode ver a K, ela não imprime nada porque eu já tenho um rifle que está funcionando corretamente Agora, se eu usar a pistola, ela deve imprimi-la. E você pode ver que está imprimindo , mas está imprimindo o nome errado. E lembre-se de que, para a sequência de caracteres de impressão, estamos imprimindo apenas o índice zero, então estamos imprimindo apenas o 41. voz alta, sempre podemos configurá-lo para o índice um e ele imprimirá a pistola Agora, se você quiser imprimir tudo dentro desse inventário para ver o que está dentro dele, sempre arraste a partir daqui e diga que para cada loop, agora você vai percorrer toda essa matriz e conectar o loop. E então você pode selecionar cada nome único do item que está aqui e imprimi-lo como uma string. Eu posso ir em frente e pegar o AK, por exemplo. Então você pode ver se ele é impresso na tela. Eu posso ir até a pistola e agora ela vai imprimir tanto a AK quanto a pistola na Está funcionando como deveria. Vamos salvar tudo e passar para a próxima. 94. 8.09 Criando o soquete de arma: Antes de podermos colocar a arma nas mãos do jogador, precisamos criar um soquete Lembre-se de que criamos um soquete anteriormente. Quando criamos a câmera do jogador e colocamos essa câmera na cabeça do jogador, precisamos adicionar outro soquete onde colocamos a arma na mão do jogador Vamos até a pasta Marketplace e vamos até o personagem militar Silva para entrar nesse esqueleto aqui Lembre-se de que esta é a câmera, esse é o soquete da câmera que adicionamos anteriormente Agora, o que precisamos fazer é adicionar um soquete para a mão do jogador para que ele possa segurar a arma na mão, certo? aqui que você geralmente segura uma arma. Tê-lo na sua mão direita. Para a mão, à direita, posso clicar com o botão direito do mouse e adicionar um soquete aqui Vou clicar em dois para renomeá-lo. E eu vou chamá-lo de Rifle. Agora vou adicionar um soquete para um rifle e um soquete para rifle e um soquete para Agora, eu tentei mais cedo apenas adicionar um para a arma. Arma e eu poderia adicionar a pistola e o rifle a ela. No entanto, posições na mão são diferentes. É muito melhor adicionar um para o rifle e outro para a pistola Parece muito melhor selecionar um rifle S. Vamos adicionar uma animação prévia que possamos realmente ver como seria se eu apenas procurasse por rifle e procurasse por um deles. Por exemplo, o rifle de animação idle. Vou pausar essa animação no primeiro quadro para que ela fique parada e não se mova E eu posso ajustar o soquete. Clicando no rifle de soquete, posso clicar com o botão direito do mouse agora para adicionar prévia D. Vamos adicionar, por exemplo, o 41, ou ele se chama R four, na verdade aqui e selecioná-lo Agora podemos visualizá-lo e ajustar o soquete. Então vá em frente e clique no soquete. E vá em frente e selecione a ferramenta de rotação. E agora você pode girá-lo 90 graus dessa maneira. E eu só estou tentando ajustá-lo à mão para que fique melhor. Vou reduzir a velocidade da minha câmera. É muito rápido. Agora você pode ver o único erro aqui, você pode tentar ajustar o soquete No momento, o único erro desse personagem é que ele está realmente segurando o rifle assim Parece estranho porque ele vai atirar para frente aqui embaixo Se eu estiver na frente dele, ele está realmente atirando o ar quando deveria atirar em mim. Isso é um pouco errado no lado da animação. Você realmente não pode fazer nada sobre isso. Vamos tentar fazer isso da melhor maneira possível. Na verdade, essa rotação deveria ser como se fosse um disparo para frente. Vamos remover o encaixe para a rotação. E estou tentando fazer com que ele mire para frente da melhor maneira possível. Você também pode ir para a vista certa. Na verdade, vá para a vista frontal. Para a visão frontal, você pode novamente girar a arma da melhor maneira possível. Aqui está. Talvez seja melhor ver como ele está mirando assim. Você pode voltar à perspectiva e dar uma olhada nela, ter certeza de que ele está mirando para frente e tudo está ótimo, talvez algo assim Então você pode ir em frente e movê-lo para cima, tentar colocá-lo na mão do personagem, algo assim. Apenas tente da melhor maneira possível colocá-lo corretamente na mão do personagem. Por exemplo, ter esse gatilho aqui, certificando-se de que não passe por seus dedos assim aqui. Tentando movê-lo um pouco para frente, mas ainda com ele na mão do jogador. Agora você realmente não pode fazer isso perfeitamente. Se esse for um projeto sério, os personagens devem ser projetados de forma que estejam segurando essa arma corretamente. A arma e o personagem se encaixam. Por exemplo, no Counterstrike, eles estão projetando dessa forma No entanto, aqui para este, é apenas um personagem aleatório, animação aleatória. Com armas aleatórias. Você não pode esperar que isso seja 100% factível. Estamos apenas tentando ajustá-lo da melhor maneira possível. Agora, esse parece bom. Tudo está ótimo. Eu posso tentar arrastá-lo um pouco para trás, sem mais nem menos. Tudo está ótimo. Ele está segurando a arma agora. E você pode ver que se eu animar, vai ficar assim. Parecendo incrível. Agora você tem que testá-lo com o outro rifle. Só para ter certeza, vou clicar com o botão direito do mouse nesse e remover todos os ativos anexados. Vou clicar com o botão direito novamente na análise. Agora deixe-me adicionar o KA para sete. Deixe-me adicionar o AK. Você pode ver o AK está se rompendo um pouco O que vou fazer é aumentá-lo o máximo que puder sem fazer com que seja um livro assim. Agora vai passar um pouco aqui, mas seja como for, não podemos fazer muito a respeito. Essas armas não foram projetadas para essas animações. Não podemos ser 100% precisos. Mas algo assim aqui. E, novamente, posso selecionar o rifle, chupá-lo corretamente para movê-lo para baixo o máximo que puder, sem fazer que pareça cheio de bugs, Talvez seja o melhor que eu possa fazer. Se você clicar com o botão direito do mouse, remova o ativo anexado e clique com o botão direito novamente. Adicione o AR four como pré-visualização apenas para ter certeza de sua aparência. É um pouco mais ascendente. Mas isso é o melhor que podemos fazer por essa arma. Como se não pudéssemos realmente colocá-lo melhor , porque também funcionaria para o AK. Agora podemos olhar através do gelo desse personagem e verificar se a rotação está correta. Acho que está girado um pouco para o lado errado. Vou clicar no soquete novamente e vou segurá-lo e girá-lo nessa direção aqui Acho que está um pouco inclinado, talvez. Algo parecido. E parece muito melhor. Ok, foi isso. Isso sim, tudo está indo bem. Agora, só para ter certeza, vou clicar com o botão direito do mouse novamente. Remova-o. Vou clicar com o botão direito do mouse no AA 47 assim como na última vez para ter certeza de que tudo está correto. Agora, o que podemos fazer é sempre arrastá-lo um pouco mais dessa maneira. Não está grampeando aqui pela alça. Algo parecido com isso. Ok, parece melhor agora, tudo parece bem. Agora você sempre pode ajustá-lo um pouco para cima e para baixo. Acho que parece bom. Agora vamos salvar tudo. Agora você deve se lembrar de adicionar isso ao outro esqueleto também, mas vamos adicionar a pistola primeiro Antes de fazermos isso, vamos ver a prévia agora. Ou não prévias. Visualize a animação. E vamos procurar uma pistola agora, vamos pegar uma das animações da pistola E eu vou selecionar esse ídolo de pistola aqui. Vamos colocá-la na primeira animação. Agora, para este, vou remover todos os ativos anexados. Vamos clicar com o botão direito na mão e adicionar um novo soquete. E vou chamar isso de pistola. Na verdade, pistola. Sabemos que é um soquete Agora, para este, vamos clicar com o botão direito do mouse e adicionar a pistola como o ativo anexado Se adicionarmos nossa pistola como antes, vamos girar o Vou adicionar essa ferramenta de encaixe ao girar 90 graus novamente para girá-la dessa forma, de forma que fique apontando para frente, você sempre pode voltar para a vista Vá em frente e aumente o zoom. Selecione a pistola ou o soquete aqui e remova o encaixe Vou girá-lo um pouco para baixo para que esteja mirando corretamente. E vá para a visão em perspectiva. Verifique se está tudo bem. Tente o melhor que puder para fazê-lo mirar para frente. E sempre podemos ajustá-lo mais tarde. Agora vamos movê-lo para a mão do jogador. Assim, desta forma, talvez desta forma. Novamente, tente colocar o dedo no gatilho da melhor maneira possível. Então, algo assim, novamente, sempre podemos ajustá-lo mais tarde. Não é realmente um problema. Se algo estiver um pouco confuso, você pode ver que a rotação está um pouco confusa. Está muito inclinado Vou, novamente, girá-lo dessa maneira, para que não fique inclinado assim . Eu acho que isso é bom. Sempre podemos ajustá-lo mais tarde. Agora vamos tentar movê-lo da melhor maneira possível nas mãos do jogador. Acho que algo assim parece bom. Acho que vou movê-lo um pouco para cima, sem mais nem menos. Ok, agora ele está segurando a arma e atirando para frente. Sempre podemos tentar visualizá-lo. Você pode tentar pré-visualizar com outras animações, se desejar Por exemplo, se eu pesquisar pistola e atirar na pistola, você pode ver como é. Parece bom. Agora vamos salvar tudo. Agora você tem que copiá-los. Vamos clicar com o botão direito do mouse e remover todos os ativos anexados. Você também precisa copiá-los para o outro esqueleto. Então, vou pegar esse soquete, botão direito do mouse aqui e copiar o soquete selecionado Ou você pode clicar no controle C. Vá até o outro esqueleto, o médico militar Clique na mão direita e controle V para colá-lo. Vamos até o outro esqueleto também. Copie um rifle e clique no controle V para colá-lo aqui também Este também tem. Agora, tanto o contraterrorista quanto o terrorista devem funcionar agora. Ok, então foi isso para os soquetes. Vamos passar para a próxima lição. 95. 8.10 Criando os soquetes restantes: Agora vamos criar os soquetes restantes. Então, vamos voltar ao esqueleto do personagem prata Eu quero colocar o rifle na parte de trás do personagem se o personagem já estiver segurando a pistola Portanto, não queremos colocar a pistola na mão do personagem que já está segurando uma arma. Vamos. Digamos, por exemplo, a animação da pistola. Basta selecionar um deles. Vamos apenas selecionar esse. Ocioso novamente. Vou pausá-lo no primeiro quadro Vou adicionar um soquete aqui na parte de trás para o rifle. Vou colocar o rifle na trás se eles não o estiverem segurando Eu vou dizer que, se você não tiver certeza de qual osso usar, você sempre pode clicar em Character Bones e depois mostrar toda a hierarquia E então você pode tentar escolher o melhor osso que você pode ver aqui no player que vai caber. Por exemplo, você pode escolher a coluna dois ou escolher a coluna três. Acho que vou escolher a coluna três. Você pode escolher a coluna três. Clique com o botão direito. Adicione um soquete. Vou chamar isso de arma. A arma vai estar aqui na parte de trás. Vamos clicar com o botão direito do mouse novamente, adicionar uma malha de visualização e vamos adicionar os K chamados KA 47. Na verdade, vamos selecionar este. Vamos apenas girar essa arma. Vou segurar ou selecionar essa ferramenta de encaixe e vou girar 90 graus Dessa forma, vou movê-la para fora e tentar colocar a arma como quiser Não há realmente uma resposta para o que é correto ou não. Seja qual for o jogo que você está tentando fazer, tente fazer do seu jeito, do seu estilo. Você sempre pode arrastá-lo para a parte de trás do personagem, se desejar. Você sempre pode incliná-lo assim para melhorar a aparência e simplesmente colocá-lo na parte de trás do personagem da melhor maneira possível E talvez algo parecido. Eu acho que está parecendo bom. Eu posso movê-lo um pouco para cima. Acho que fica bom se você apenas reproduzir uma animação para garantir que tudo esteja bem e que tudo esteja funcionando. Se você acabou de fazer uma animação de execução, por exemplo, frontal direita, desarmado, você pode sair e reproduzir a animação E eu posso clicar nos ossos do personagem. E selecione-o apenas para remover todos os ossos para que eu possa ver como realmente é. E parece que sim. Ok, tudo parece correto. A arma também está se movendo com o corpo. Também posso selecionar Remover anexado. E eu posso selecionar o AR Four só para ver como ficará se eles o usassem em vez disso. Ok, tudo está indo bem. Sim, isso está ligado ao player. Agora podemos clicar com o botão direito do mouse e remover todos os anexos. A segunda coisa que quero acrescentar agora é voltar ao ídolo e selecionar um deles. Por exemplo, o ídolo da pistola que vou posicionar na O que eu quero fazer é colocar a pistola na lateral do personagem quando ele estiver segurando o rifle Este era para o rifle, o outro aqui é para a pistola Mas, novamente, você pode clicar nos ossos do personagem toda a hierarquia e selecionar aqui um osso que se encaixe Por exemplo, esse. Essa é a coxa Vamos criá-la aqui, na coxa, clicar com o botão direito do mouse, adicionar um soquete e chamar essa de arma desse jeito Vá em frente e clique com o botão direito neste. Anexe um ativo de pré-visualização e selecione a pistola. Esta, assim como antes, vou adicionar a ferramenta de encaixe e girá-la dessa maneira Por exemplo, deixe-me avançar também. A pistola, quando colocada de forma realista aqui, estará na verdade do lado oposto, algo parecido Em vez disso, vou girá-lo, se desejar, você pode girá-lo de alguma forma e tentar colocá-lo da melhor maneira possível Agora, realisticamente, se fosse um jogador projetado para este jogo, eu não colocaria este aqui Então, poderíamos realmente colocar a pistola aqui. Mas podemos tentar colocá-lo debaixo desta bolsa da melhor maneira possível e tentar movê-lo um pouco para fora. Também podemos movê-lo ou girá-lo nessa direção e tentar colocá-lo da melhor maneira possível na coxa do personagem Eu acho que isso parece bom. Agora, se você simplesmente salvar tudo e vamos tentar fazer com que a animação seja executada novamente. Selecione um deles, por exemplo, execute a pistola dianteira. E se você apenas jogar agora, você pode vê-lo aqui. Agora, personagem, vou selecionar ossos. Selecione somente para que eu possa remover os ossos. E aqui está a pistola quando você corre com ela. Ok. Isso está preso à coxa Agora podemos parar essa animação. E eu posso clicar com o botão direito do mouse ou em outra pistola, a da coxa. Se eu puder encontrá-lo aqui, este aqui embaixo, eu posso clicar com o botão direito. Remova todos os ativos anexados. E lembre-se de copiar isso também para o outro esqueleto. Se eu clicar duas vezes aqui e abrir o documento do personagem, eu também abro o esqueleto Vamos copiar o soquete da coxa. E eu vou encontrar a coxa aqui mesmo. Se eu conseguir encontrá-lo. Este controla V para colá-lo. Eu vou voltar e vou encontrar o soquete traseiro. Aqui está a arma de volta Eu vou copiar este. E para a coluna três novamente, vou colá-la e será correta para esta também. Vamos salvar tudo e passar para a próxima lição. 96. 8.11 Anexando arma à mão: Agora que criamos esses soquetes, podemos colocar a arma na mão Vamos voltar para a base de jogadores. Na base de jogadores anterior, se você se lembra, nós já criamos a lógica da arma de saque aqui Na verdade, podemos fazer com que o jogador já equipe a arma. O que podemos fazer é usar algo chamado anexar se você apenas pesquisar anexar, para que você possa usar um desses, por exemplo, anexar ao ator ou ator ao componente e assim por diante. Então você pode simplesmente selecionar um deles para ver o que é. Você está basicamente aqui para isso, por exemplo, você está anexando um ator a um componente Por exemplo, você está conectando o ator da arma ao componente de malha, onde seleciona em qual soquete deseja adicioná-lo Por exemplo, a pistola. E então você pode encaixá-lo lá e prendê-lo à mão Agora, em vez de fazer isso, lembre-se de que estamos dentro de um jogo multijogador. Isso não é single player. Se fosse para um jogador, poderíamos fazer isso aqui sem todo esse servidor e assim por diante, e funcionaria. No entanto, como estamos em um jogo multijogador, precisamos replicar as informações do servidor para o cliente Para mudanças visuais como essa, você precisa usar algo chamado notificação de representante. E ainda não usamos isso antes. Se você clicar com o botão direito nessa arma e promovê-la a uma variável, vou chamá-la de arma saqueada Agora, quatro variáveis. Vamos agora primeiro coletar ou conectar este. Deixe-me clicar duas vezes, na verdade, já temos um nó de rota traseiro aqui, então vou arrastá-lo até aqui. Clique duas vezes neste. Agora temos essa variável. E se você clicar nele agora, em vez de configurá-lo para replicá-lo, você tem algo chamado de notificação de representante. E onde a notificação de representante é: se você tiver alguma alteração visual em seu jogo que precise ser enviada a todos os clientes, você precisará usar uma réplica de notificação de representante Ele é usado apenas para informações como números que serão enviados ao cliente. Anteriormente, tínhamos essa chamada arma equipada, por exemplo. Esse que dissemos foi replicado. Porque o cliente precisa saber se essa informação é variável, que está configurada, se está configurada pistola ou rifle desarmado No entanto, para este, vou fazer uma mudança visual. Não são apenas números e informações, como texto. Eu tenho que atualizar a arma. Então, está preso às mãos do jogador, na verdade é uma atualização visual. Essa arma vai se teletransportar para as mãos do jogador e vai ficar lá Então, eu tenho uma mudança visual que preciso fazer, e é aqui que você seleciona uma notificação de representante Agora, se você se lembra, também usamos um multicast. Então, se eu voltar aos passos, usamos esse chamado multicast O Multicast também envia informações para todos os clientes. Por que estamos usando algo chamado notificação de representante em vez de multicast? No entanto, uma notificação de representante é usada se você tiver alterações visuais que precisam ser mostradas a todos os jogadores, mesmo aqueles que ainda não estão conectados ao servidor Digamos que alguém se conecte ao servidor, como se eu estivesse aqui e saqueasse o 44 ou o 41 Alguém se conecta ao meu servidor 2 minutos depois. Se eu fizer esse código dentro de um multicast, o player conectado não conseguirá ver que estou segurando esse 44 O multicast só pode ser usado para coisas temporárias. Por exemplo, passos aqui e agora. Ou se eu tocar alguns efeitos visuais de fogos de artifício que desaparecerão após 2 segundos. Os jogadores conectados não, o jogador que está se conectando agora realmente não precisa saber disso. Porque provavelmente já desapareceu no nível. Por exemplo, o efeito visual de um representante é usado para mudanças visuais que também precisam ser vistas por alguém que se conectará ao seu jogo Daqui a 2 minutos, quero ver os jogadores que estão se conectando ao meu jogo. Eu quero que eles vejam que agora estou segurando o 41. Vamos até aqui. E vamos clicar nele. E vamos clicar em Representar, Notificar Vá em frente e compile. E você pode ver que ela já foi criada como uma função para você. Isso vai ser chamado, então você vai saquear a arma E este vai ser definido. Sempre que isso for definido e alterado em valor, ele executará automaticamente essa função. Então, agora podemos escrever o código dentro dessa função. E o que quer que escrevamos aqui, isso será notificado a todos os clientes. Ok, então, antes de anexarmos qualquer coisa, quero pegar essa arma saqueada que acabamos de saquear e vamos atacar aqui e procurar a malha e vamos atacar aqui de armas Então, se eu for até o fundo e selecionar a arma. Lembre-se, esta arma aqui. Se eu voltar às armas e selecionar a base da arma, essa é a malha do esqueleto da arma Vou selecionar a malha do esqueleto porque lembre-se de que estamos simulando física Nós realmente não precisamos simular física. Sempre que essa arma aqui estiver nas mãos do jogador, precisamos remover a física. O que eu preciso fazer é primeiro arrastar a partir daqui e dizer set simulate physics Vamos conectá-lo. Vamos defini-lo como falso. Na verdade, não precisamos simular a física quando ela está nas mãos do jogador A próxima coisa é que eu também preciso remover a colisão, porque quando ela está nas mãos do jogador, nós realmente não precisamos colidir com Novamente, arraste desta arma e diga Definir colisão e selecione esta Defina a Colisão ativada e vamos conectá-la sem colisão Agora a arma não tem nenhuma colisão. Nós realmente não precisamos dele quando o jogador o tem nas mãos. Agora lembre-se de que na base de armas você também tem a esfera aqui. Você também precisa remover a colisão disso. Caso contrário, outros jogadores podem realmente entrar em você quando você tiver a arma e saqueá-la da sua mão Agora você pode usá-lo como um recurso no jogo, mas para este, vamos removê-lo. Vamos pegar a arma saqueada novamente. E vou me arrastar daqui e procurar minha esfera de colisão E está aqui embaixo. E, na verdade, é chamada de colisão, apenas chamada de esfera. E eu vou renomeá-lo, na verdade, para pollsionsphere, só para ficar mais óbvio Esfera de colisão. Vá em frente e compile Vamos voltar aqui e procurar a esfera de poluição agora. E deixe-me ir até o final e selecioná-lo aqui. Ok, assim como antes, arraste-o aqui e diga que definir colisão ativou este aqui e vamos configurá-lo para não colisão Agora, quando outros jogadores estão entrando nessa esfera de colisão, eles não estão interagindo com ela porque agora não há nenhuma colisão Vou me lembrar de tornar isso falso porque não precisamos simular nenhuma física. As colisões de armas e também as colisões da esfera de colisão Agora, quando usamos a função attach the, na verdade precisamos fazer algo antes. Porque quando eu estava fazendo isso antes, havia um bug. Eu estava jogando aqui. E coloquei a arma na minha mão. Sempre que eu entrava nessas armas por algum motivo, mesmo que eu as colocasse na minha mão, elas continuavam no chão e eu não entendia. O motivo está aqui para simular a física. Você pode ver aqui na parte inferior que diz: Observe que, se esse componente estiver atualmente conectado a algo, início da simulação o separará Isso significa que quando eu simulo a física aqui, ela realmente separará essa arma da raiz de cena padrão No momento, é como se esses dois não estivessem conectados, isso é separado deste. Na verdade, preciso recolocar a arma raiz da cena padrão. Vamos realmente fazer isso. Vamos pegar a arma saqueada se eu arrastar daqui e pesquisar a raiz padrão da cena, o mesmo nome aqui na parte inferior, e selecioná-la Agora, o que eu quero usar é anexar um componente a um componente. Lembre-se de que esses são componentes se arrastar daqui e pesquisar e você pode selecionar esse componente anexado ao componente que estou tentando anexar Na verdade, não essa. Estou tentando colocar a arma aqui. seguida, basta arrastar e procurar arma e ir até o fundo novamente, selecionar a variável Estou tentando conectar a arma à rota padrão da cena. Parece assim de novo. Vamos prosseguir e conectá-lo. Agora temos que selecionar o soquete. O soquete, nós realmente não temos nada. Estamos apenas conectando a arma com a rota de cena padrão. Este é adequado para a regra de localização. Tudo isso precisa ser direto ao alvo. Ele se encaixa exatamente assim, e agora está correto Vamos continuar e compilar. E agora tudo deve estar funcionando corretamente. Agora, se tentarmos colocar a arma na mão do jogador, podemos arrastar a partir daqui. Agora, para o anexo, estamos tentando conectar um ator, essa base de armas. Estou tentando anexar um ator a essa malha aqui, que é um componente. Precisamos anexar um ator a um componente. Se eu arrastar daqui e disser anexar e você puder pesquisar de ator a componente, estou tentando conectar o ator da arma saqueada Se eu apenas copiar e colar aqui na malha aqui, que é um componente, o soquete ao qual estamos tentando adicioná-lo agora é, digamos, por exemplo, que o chamamos de rifle. Vamos tentar pegar o rifle primeiro, e sempre podemos usar a pistola depois Novamente, ajuste o alvo para todos eles. Vamos compilar e salvar tudo. Vamos ver como funciona se eu clicar em Compilar agora ou Jogar agora e selecionar o terrorista Agora, se eu entrar no rifle, você pode ver que ele está realmente em minhas mãos Você pode ver isso aqui na sombra. Na verdade, está em minhas mãos. Agora, a razão pela qual eu não estou segurando a animação do rifle é porque também precisamos atualizar o equipamento, a arma equipada Lembre-se, se eu voltar ao plano de animação, já faz algum tempo que fizemos isso Se eu for até o player, animações e plano de animação Lembre-se de que estamos trocando essas animações aqui, dependendo do que é essa enumeração de armas equipadas Este vem da arma equipada pelo jogador. Precisamos mudar isso para que as animações mudem O que precisamos fazer aqui é fazer isso rapidamente. Se voltarmos ao gráfico da van, posso clicar com o botão direito do mouse e criar um novo evento personalizado. Eu posso chamar isso de uma arma equipada. Novamente, vou copiar esse nome, clicar com o botão direito do mouse, criar um novo evento personalizado executá-lo no servidor. Este é executado em um servidor confiável. Vou executar o servidor por meio dessa arma normal de conjunto de eventos . Agora, para este, a única coisa que ele está fazendo é colocar essa arma equipada aqui. Se você simplesmente conectá-lo assim. E se o conectarmos assim, novamente, a única coisa que esse evento está fazendo é definir essa variável aqui para o que quisermos configurá-la, e usaremos essa mais tarde. Vamos compilar agora. Lembre-se de que você só pode definir variáveis e replicá-las quando elas estão sendo executadas no servidor Você não pode usar esse aqui em cima. Você precisa executá-lo no servidor antes de poder configurá-lo e replicá-lo para todos os clientes Ok, agora isso está feito. Vamos clicar duas vezes nessa variável. Novamente, você pode abrir a função aqui ou simplesmente clicar duas vezes aqui e isso fará com que você entre aqui. Agora, lembre-se de que precisamos configurar a arma equipada para que a animação seja atualizada. Se você arrastar a partir daqui e procurar a arma equipada que acabamos de criar , teremos que selecionar o que queremos configurá-la. O que queremos definir é o que você saqueou. Lembre-se de que na arma que você fez, esse tipo de arma. Se você pegar essa arma saqueada arraste daqui e procure o tipo de arma Agora você sabe se é um rifle ou uma pistola, por exemplo, e ele sabe qual animação usar Se você conectá-lo aqui, compile. Vamos clicar em jogar. Se você selecionar o terrorista, só para que apareçamos ao lado dele E se eu entrar nesse AK, por exemplo, agora ele mudará a animação para a correta. Agora, se eu abrir o cliente também, só para ter certeza de que tudo está funcionando. Se eu jogar como servidor aqui, vou minimizar isso, também estou jogando como cliente. Então eu abro o contra-terrorista para este, e eu estou abrindo o terrorista para este. Vou até lá com o contraterrorista e só para ver se tudo está funcionando corretamente. Se eu trabalhar com este quatro, você pode ver que eu o saqueei Se eu chegar perto do jogador, ele não está interagindo com minha esfera de colisão porque eu a configurei para não E agora, quanto ao outro, se eu entrar neste AK, você pode ver que ele também foi saqueado Acho que vou reduzir o tamanho do AK. Talvez a arma pareça muito grande. Você pode ver que agora está apenas saqueando o rifle, porque agora, se eu entrar na pistola, ela também vai colocá-la no soquete do E parece estranho assim. E temos que mudar isso mais tarde. Então, vamos fazer isso na próxima lição. Por enquanto, nós realmente o anexamos e podemos tornar isso um pouco mais complexo. Então, também está funcionando para a pistola. 97. 8.12 Anexando armas às costas: Tudo bem, então vamos tornar esse código um pouco mais complexo em vez de apenas anexá-lo diretamente Agora tenho que perguntar se o jogador já está segurando uma arma ou não. Se o jogador já estiver segurando uma arma, eu quero colocar essa arma na parte de trás do personagem porque ele já está segurando uma arma, então não queremos prendê-la na mão. O que eu quero fazer é pegar essa arma equipada e arrastar daqui e dizer, é igual, igual a uma arte? Neste momento, você não tem armas? Se for esse o caso, como se você não estivesse segurando nenhuma arma, eu realmente quero colocá-la na mão do jogador. O que eu posso fazer é conectá-lo aqui, aqui. Em vez de apenas conectá-lo ao soquete do rifle, talvez seja uma pistola O que eu posso fazer é arrastar a partir daqui e dizer selecione este. Já usamos esse antes, mas agora podemos ver outro exemplo disso. Agora temos que selecionar dependendo do tipo de arma. Se for uma pistola, vai usar a pistola de soquete. Se for um rifle, ele vai usar um rifle de soquete. Vou copiar esse tipo de arma novamente e vou conectá-lo aqui. Ou se o tipo de arma for igual a desarmado, realmente não precisamos fazer nada Se for uma pistola, quero prendê-la à pistola. Isso é o que chamamos de soquete. Se for um rifle, queremos anexá-lo ao rifle. Agora ele sabe qual soquete usar, dependendo do tipo de arma e tudo o mais está correto Agora, na verdade, vamos movê-lo para cá. No entanto, se você não estiver desarmado, significa que você já tem uma arma na mão Vamos copiar tudo isso de novo e agora, em vez de depender agora do tipo de arma, ou eu, se for uma pistola, vou adicioná-la à coxa da arma Lembre-se de que é o que chamamos de soquete para a arma da coxa Se for um rifle agora, ele também o colocará naqueles Isso vai ser conectado aqui. Se for falso, vou aproximar tudo isso. Agora está mais organizado e podemos sair, compilar e salvar tudo Só queremos configurar a arma equipada sempre que não tivermos nada em nossas mãos. Porque se tivermos algo em nossas mãos, só queremos adicionar a arma na parte de trás do personagem. Vamos salvar tudo e clicar em jogar. E se eu selecionar Terrorist aqui e caminhar até aqui, deixe-me abrir deixe-me abrir este para que possamos ver se está funcionando para esse personagem, se eu maximizar isso um pouco. Então você pode ver se eu agora entro no rifle, você pode ver que eu o seguro na minha mão Se eu entrar na pistola agora, você pode realmente ver que a pistola caiu no chão Na verdade, quero consertar isso. E eu acredito que é essa malha aqui. É muito fino, então está caindo no chão. Vamos realmente consertar isso. Deixe-me pegar a caixa aqui, se eu for, deixe-me lembrar onde eu a salvei, a pasta Super Grid, o pacote de estatísticas e as malhas. E vamos usar a caixa de supergrade para o solo em vez do avião. Eu vou pegar essa caixa. Na verdade, vou reduzir para 100 aqui para o movimento Primeiro, vou colocar essa caixa em algo como aqui. E vamos movê-lo para o chão novamente. E eu vou empurrá-lo para trás exatamente onde está esse chão, eu vou movê-lo assim, eu acredito. E aqui. Ok, agora está no chão. Agora vou escalá-la da mesma forma que a escala do solo. Vou tentar o melhor que puder. Deixe-me, na verdade, ampliá-lo primeiro. Deixe-me escalá-lo aqui para 1010 para o Z. Nós realmente não precisamos dele. Deixe-me clicar nesse cadeado. E deixe-me escrever um aqui. Vou clicar no chão, na verdade, está mais abaixo, assim aqui. E eu vou tirá-la aqui e do outro lado Ok, agora ele se encaixa no chão. E eu vou clicar no chão. Vou segurar a tecla Shift e clicar com o botão direito para copiar isso. 80, 81. Vou clicar na minha caixa aqui. Vou segurar a tecla Shift e clicar com o botão esquerdo para colá-la. E agora deve estar correto. Agora, se eu for para o outro lado só para verificar se cobre o chão e funciona, tudo bem. Agora, o que vou fazer é selecionar o avião. Acabei de clicar algumas vezes aqui. Ele selecionará o plano da superrede. Vou deletar e copiar esse material para guardá-lo novamente. Clique com o botão direito do mouse na orelha, clique com o botão esquerdo para colar esse chão aqui. E parece exatamente como antes. Ok, vamos salvar tudo. E agora, se clicarmos em Play, ele não deve cair no chão. O chão era muito fino e eu tenho a suspeita de que seja branco caindo do chão Deixe-me novamente maximizar isso um pouco. Agora, se eu jogar como esse jogador, diluir um M quatro e diluir uma arma, ela deve adicioná-la à coxa Você pode ver do lado do meu personagem, agora eu posso ver a arma. Incrível. Agora, para esse K, eu posso saquear tão bem quanto o outro jogador No momento, ele desapareceu. Você pode ver que o cliente não pode vê-lo no servidor. Você pode ver que parece correto porque lembre-se o servidor tem autoridade e pode fazer qualquer coisa. No entanto, para o jogador, está na parte de trás. Como você pode ver aqui na sombra, há um problema de replicação, algum valor que não está sendo ultrapassado A única coisa que consigo pensar essa arma equipada e desarmada, porque essa escolhe se coloca a arma nas costas ou na A maneira de corrigir esse problema em que você não consegue ver a arma ao saqueá-la é Na verdade, vamos fazer isso de outra forma, a arma equipada com o conjunto. O motivo é que não sei realmente esse valor, porque às vezes, quando eu jogo como cliente, ele coloca essa arma na parte de trás do personagem. Você pode ver aqui, em vez de saqueá-lo na mão. O motivo pelo qual ele o coloca volta na parte de trás do personagem é um problema de replicação Por alguma razão , estamos equipados, este é o único que controla devemos estar em sua mão ou a arma em suas costas. Por alguma razão, está vendo que esse valor de arma equipada não está armado como se você já tivesse uma arma e a coloca nas costas do personagem em vez de na sua mão. Na verdade, isso ocorre porque estamos executando este por meio da notificação do representante. Não precisamos fazer isso porque isso vai estragar o jogo. Vou remover isso. Em vez disso, vamos para o gráfico de eventos. Vamos executá-lo aqui no servidor. Como precisamos definir valores por meio do servidor em vez de por meio do representante, notificar, em vez de apenas alterá-los diretamente Lembre-se de que você só quer colocar a arma equipada sempre que estiver aqui desarmado Sempre que estiver desarmado, você deve colocar a arma equipada porque não quer trocá-la sempre que colocar a arma na parte de trás Em vez disso, para este, temos que pegar a arma equipada. E, novamente, temos que perguntar se é igual a estar desarmado. E deixe-me afastar isso. Certifique-se de perguntar, você está desarmado ou não? Porque só queremos executar esse código se você estiver desarmado. Se você estiver desarmado, sim. Vamos em frente e vou atrasar o código antes de realmente fazermos isso. E a razão pela qual eu faço isso é que estou dando uma chance para esse representante notificar para ficar sem esse código Lembre-se de que usará essa variável de arma equipada para verificar se você está desarmado ou não E isso será grampeado. Se você colocar instantaneamente essa arma equipada e mudar esse tipo de arma, vamos adiar um pouco Certifique-se de que esse código seja executado antes de realmente alterarmos o tipo de arma ou a arma equipada aqui. Esse atraso precisa ser o menor possível, pois parecerá estranho se você estiver correndo sem a aplicação da animação Mas vamos tentar assim antes de fazermos qualquer coisa. Então, deixe-me clicar em jogar aqui como terrorista. Agora eu posso clicar em jogar e posso entrar na arma e ver se ela está funcionando. Agora você pode ver que está funcionando. Preciso fazer isso algumas vezes apenas para ter certeza de que está realmente funcionando, e agora você pode ver que não está funcionando Acho que isso resolveu o problema. No entanto, no futuro, se ainda tivermos problemas com isso, tentaremos corrigi-lo. Mas acho que está realmente corrigido agora e não temos problemas com isso. OK. Agora vamos tentar reduzir esse número, 0,05, algo muito baixo E podemos tentar jogar e tentar reduzi-lo, mas ainda vai funcionar. Agora você pode ver que ele ainda está funcionando. Se você reduzir demais, corre o risco de o código na notificação do representante não ser capaz de ser acessado neste momento Antes de realmente fazer isso, verifique se está lento , mas não muito baixo. Você terá problemas, mas, como você pode ver aqui, tudo está funcionando. E não se esqueça de comentar esse atraso porque se você voltar três meses depois, não terá ideia de por que fez isso. Certifique-se de segurar, clique em C no teclado para adicionar um comentário. Por exemplo, para este comentário, você pode verificar se a arma está presa à mão antes de alterar o estado de equipamento do jogador. Assim mesmo. Você pode até mesmo escrever que está esperando que o representante notificado se inscreva Vá em frente, compile e salve tudo. E isso deve funcionar se você clicar em play. Agora, se você entrar na pistola agora, você pode ver que ela está mudando Se você entrar neste , ele está de costas e eu posso ver que tudo está funcionando agora. Outro dinheiro que temos, espero que o último, é que quando você coloca duas armas uma em cima da outra, um pouco confuso porque você está sobrepondo duas esferas e eu não sei qual delas saquear, e ela vai acabar se esgotando se reclamar agora E aqui está o cliente. Eu entro nos dois, tento me deparar com os dois desse jeito. Você pode ver que na verdade está segurando a pistola e as quatro ao mesmo tempo e está um pouco confuso Temos que consertar esse dinheiro também. Vamos realmente fazer isso na próxima lição. 98. 8.13 Sobrepondo duas armas de uma vez: O problema que estamos enfrentando agora é que, se eu usar duas armas ao mesmo tempo, elas explodirão porque agora você pode ver que estou segurando a pistola e o rifle ao mesmo tempo Portanto, esse é um bug que temos agora e precisamos corrigir de alguma forma. Precisamos verificar as duas sobreposições de armas e não apenas Porque, no momento, estamos apenas verificando a sobreposição de uma arma e não estamos verificando se há duas armas sobrepostas ao mesmo tempo Para corrigir isso, vamos até o jogador e vamos abrir a base de jogadores dentro daqui. No momento, temos essa arma de saque. Em vez de apenas saquear a arma, preciso criar uma nova matriz onde reúno todos os elementos sobrepostos E então, a partir desses atores sobrepostos, ele saqueará as armas em vez de saqueá-las diretamente Vamos pegar tudo isso e colocá-lo aqui, botão direito do mouse e criar um novo evento personalizado. Vou chamar esse evento de item sobreposto. Ok, com esse, novamente, vou executá-lo no servidor, no servidor personalizado, e adicionar um item sobreposto E então lembre-se de executá-lo no servidor e também de forma confiável. E eu vou executar aquele servidor aqui em cima no evento normal, adicionar um item sobreposto, desse jeito O que precisamos fazer é criar uma nova matriz chamada itens sobrepostos Novamente, esta é uma base de armas na verdade, não itens sobrepostos Provavelmente é mais correto chamá-lo de armas sobrepostas Em seguida, clique com o botão direito do mouse ou simplesmente clique aqui e procure a base de armas. Vá em frente e selecione-o. Vamos prosseguir e selecionar essa matriz novamente. Agora, em vez de um item sobreposto, provavelmente é melhor chamá-la de arma sobreposta que é mais precisa para não mudarmos nosso estilo Uma arma de sobreposição como essa. E vá em frente e pegue essa matriz. O que podemos fazer aqui, sempre que sobrepomos um item ou uma arma, podemos adicionar essa arma a essa matriz Agora precisamos saber qual arma estamos sobrepondo novamente. Vá em frente e adicione uma variável, procure a base de armas. Basta chamar essa arma e conectá-la aqui também. Ela parte daqui sempre que nos sobrepomos e, em seguida, as informações estão aqui Assim como antes, o que fizemos aqui. Vá em frente e pegue isso e diga definir elemento de matriz e conectá-lo. Esse é o item que queremos adicionar ao índice. Novamente, exatamente o que eu te disse antes. Vamos usar o comprimento. Tire dessa pesquisa o comprimento e ele encontrará automaticamente o índice correto. Ele o adicionará para prosseguir e organizar isso. Tudo bem, o que estamos simplesmente fazendo é em vez de saquear instantaneamente a arma do chão, estamos adicionando essa arma sobreposta a essa matriz E então, a partir dessa matriz, podemos ir em frente e saquear as armas Garantimos que todas as armas sobrepostas sejam saqueadas daqui. Quando eu sobreponho uma arma, lembre-se de usar novamente essa arma de saque, caso contrário, você não a usará. Na verdade, vamos voltar primeiro. Vamos voltar para a base de armas em vez da base de armas agora, em vez de aqui com o código que escrevemos, em vez de saquear a arma instantaneamente quando você sabe que pode saquear a arma, vá em frente e adicione-a às armas sobrepostas Deixe-me remover isso. Vamos pesquisar aqui no player. Lembre-se de que este é o reprodutor de pinos. Vamos pegar isso e pesquisar a arma sobreposta ao anúncio. Vá em frente e adicione-o aqui. A arma é exatamente assim e compile agora. Ele adicionará essa arma de sobreposição à matriz primeiro aqui Vamos usar a arma do lote. Vamos atacar a partir daqui e procurar muitas armas. A arma aqui. Na verdade, não precisamos disso porque lembre-se que agora o adicionamos a essa matriz. Em vez de simplesmente ir daqui para cá, agora podemos usar essa matriz aqui embaixo. Na verdade, não precisamos desse alfinete. Se você clicar nesse pino, remova-o. Também clique aqui e remova-o, sem mais nem menos. E para que este o remova, segure Alt e clique nele e ele será removido, ou você pode clicar aqui e atualizar todos os nós que também removerão esses pinos da era vermelha Agora você está saqueando a arma. Vai passar por aqui. Agora, antes de adicioná-lo diretamente, vamos primeiro verificar algo. Vamos pegar essas armas sobrepostas. Primeiro, vamos perguntar se estão vazias ou não Porque se estiver vazio, não queremos saquear. Vamos atacar a partir daqui e dizer que está vazio. Digamos que não esteja vazio. Se não estiver vazio, vamos para O. Podemos arrastar a partir daqui. E escreva um ramo e saia e se conecte. Agora, se não estiver vazio, vamos saquear. Tudo bem, qual é a arma que estamos saqueando, podemos arrastar daqui e dizer pegue esta Estamos simplesmente obtendo o primeiro item que está dentro do conjunto de armas sobrepostas, obtendo apenas aquele no índice, zero Então, a primeira arma que está aqui dentro, vamos conectá-la com a arma de sobreposição Agora estamos adicionando essa arma ao inventário. Em seguida, ele vai entrar aqui, adicioná-lo ao inventário, vai configurá-lo para a arma de saque Vamos verificar se estamos desarmados Se estivermos, vamos configurar a arma equipada Agora lembre-se de remover a arma de sobreposição, aquela que você está adicionando agora Lembre-se de removê-lo da matriz, caso contrário, ele ficará aqui para sempre. Você tem que pegar essa matriz agora. Então, depois de fazer isso, talvez possamos pegar as armas sobrepostas Podemos dizer que remova o item e vá em frente e conecte-o. Então lembre-se de pegar este que você acabou de adicionar. Em vez disso, você pode conectá-lo aqui. Novamente, clique duas vezes para criar um nó de rota traseiro e apenas torná-lo outro nível com os outros. Agora estamos lembrando de removê-lo da matriz. Ele ficará aqui para sempre e você terá uma caixa em seu jogo. Ok, agora estamos removendo esse item sobreposto da matriz porque agora o adicionamos ao inventário e tudo está concluído, então o removemos Agora lembre-se de que essa função aqui, esse evento aqui, está sendo executado apenas uma vez, sempre que você se sobrepõe Está realizando o evento de armas do lote, como você pode ver aqui. Quando terminamos, paramos o código. E se você realmente tiver dez armas nas armas sobrepostas Você precisa continuar usando essa arma do lote até que ela esteja vazia. E quando estiver vazio, não fará nada. Você precisa continuar realizando este evento para verificar se há mais itens sobrepostos Porque ele continua verificando se está vazio ou não para executá-lo. Novamente, aqui em cima, vamos fazer um novo evento. E vou chamá-lo, vamos começar a partir daqui, de um evento personalizado. Vamos ligar para este, verificar se há armas sobrepostas. Vou verificar se há mais armas sobrepostas. Podemos pegar essa e derrubar até aqui. Verifique se há armas sobrepostas. Quando terminarmos de adicionar a arma, faremos essa verificação de armas sobrepostas e a executaremos novamente E então o código aqui será executado novamente e verificará se está vazio ou não. Se não estiver vazio, ele pegará novamente aquela nova arma. Continue adicionando-os ao inventário o máximo que pudermos. No entanto, se estiver vazio, não faremos nada. Tudo bem, um problema que temos agora é se o jogador se sobrepor a várias armas Porque toda vez que você colidir com uma arma e puder saqueá-la, isso aumentará essa arma sobreposta E, na verdade, ele executará isso novamente, mesmo que estejamos no meio do código, e isso interromperá o jogo toda vez que você se sobrepor a algo Isso executará tudo e, na verdade, também ativará tudo isso. Em vez disso, vamos colocar uma barreira. Isso só funciona uma vez. E o que você pode fazer é arrastar a partir daqui e dizer faça uma vez. Esse nó garante que isso seja executado apenas uma vez, mesmo que eu me sobreponha a várias armas Não vai repetir esse código aqui. Na verdade, ele vai repetir esse código, vai adicionar algo a isso. Mas essa parte do código não vai se repetir. Na verdade, só vai fazer isso uma vez. E podemos controlar quando ele deve fazer isso de novo. Só queremos fazer isso uma vez, mesmo que tenhamos cerca de 100 armas sobrepostas Só fazemos isso uma vez porque lembre-se de que estamos fazendo um loop infinito até que não esteja mais vazio e paremos o código. Nós realmente não precisamos amar isso daqui também. Ok, faça uma vez. Quando podemos redefinir isso? A redefinição significa que eu só vou fazer esse código uma vez. Você me diz quando posso reiniciar, para que eu possa executar esse código novamente. O reset, vamos arrastar a partir daqui e criar um novo evento personalizado. Digamos que pode perder uma arma novamente. Eu posso saquear a arma novamente sempre que eu parar de saquear aqui Quando está vazio, a arma sobreposta. Sempre que estiver vazio, podemos arrastar daqui e dizer que podemos saquear a arma novamente. Podemos executar esse código novamente porque ele parou. E vou me arrastar um pouco daqui , abrir espaço e organizar isso. Tudo bem, agora isso está mais organizado. Então, vamos entrar, compilar, e vamos também compilar aqui, salvar tudo Vamos agora tentar clicar em play e ver o que acontece. Selecione Terrorist. Na verdade, deixe-me copiar essas armas todos esses pontos, para que eu não precise continuar correndo para aquele local novamente. Basta copiar algumas vezes e colocá-las ao redor. Selecione terrorista e vamos entrar nisso agora que nada está acontecendo. Provavelmente ganhamos um dinheirinho aqui, provavelmente sobrepondo-se Mas como você pode fazer isso é arrastar de um deles, por exemplo, essa sobreposição de servidor e escrever uma string de impressão É assim que você depura seu código se tiver um bug. Não quero remover isso do vídeo porque também quero mostrar como depurar Você conecta essa sequência de impressão e clica em Reproduzir. Sempre que imprime a string, como você pode ver, na verdade está imprimindo a string. Isso significa que essa parte do código está funcionando. Não há nada errado aqui. Está passando. Sim, acho que está aqui. Eu esqueci de fazer esse tamanho para caber. Talvez vamos tentar jogar de novo e testá-lo. E esse era o problema. Eu não fiz esse tamanho para caber. E isso significa que, para matrizes, quando você as cria, você realmente precisa arrastar a partir daqui e dizer redimensionar E então você tem que dizer ao motor qual é o tamanho dessa matriz. Por exemplo, darei 20 vagas. Agora, com esses 20 slots, agora posso adicionar itens. Você tem que fazer isso, por exemplo, no jogo Begin ou algo parecido. No entanto, com o tamanho adequado, ele indica que você pode criar automaticamente um novo slot. Isso é bom. Eu não me importo com o tamanho dessa matriz. Que o que você está fazendo aqui, tamanho adequado, era o problema. Agora, se você tiver problemas, novamente, arraste a partir daqui, escreva uma string de impressão, veja se a string é impressa na tela. Se isso acontecer, provavelmente há algo mais errado. Novamente, lembre-se de que você também pode imprimir valores para ver se eles foram realmente adicionados a essa matriz de armas sobrepostas e assim por diante Mas, por enquanto, parece funcionar. Vamos clicar em Jogar. Se você quiser verificar melhor, você também pode clicar na mola, torná-la, por exemplo, 600. Só para que eu possa ver meu personagem. Vamos tentar lotar novamente. Agora você pode ver que está na minha arma ou nas minhas mãos e costas. Vou fazer isso algumas vezes apenas para ter certeza de que tudo está funcionando corretamente e parece funcionar. Então você pode ver que isso resolve o problema, porque agora ele continua passando por tudo Ele garante que ele examine o conjunto de armas sobrepostas antes de parar e que possamos saqueá-las novamente Então, é garantir que tudo seja saqueado. E, como você pode ver, embora eu me sobreponha a várias armas ao mesmo tempo, ela está funcionando corretamente O rifle está na minha mão e a pistola está ao lado da minha perna Certo? Então, agora que terminamos com essa lógica, vá em frente e salve tudo, e vamos para a próxima. 99. 8.14 Criando a estrutura da arma: Ok, com este jogo, quero mostrar tudo o que fazemos quando desenvolvemos um jogo, mesmo que seja avançado. Nesta lição, vamos criar uma estrutura de armas. É muito melhor do que continuar criando variáveis para as armas. Antes que isso fique muito grande, vamos começar a criar a estrutura. Agora eu posso tentar te mostrar e você entenderá muita coisa nas plantas Vamos clicar com o botão direito do mouse e criar uma nova pasta. Vamos chamar isso de Estruturas. E clique com o botão direito novamente, defina a cor para essa cor aqui, assim como antes Dentro desta pasta. Vamos clicar com o botão direito do mouse e acessar o Blueprint. Temos algo chamado estrutura. Clique nele e eu vou chamá-lo de ST como um prefixo para a estrutura Vamos chamar isso de informação sobre armas. Essa estrutura contém as informações das armas. Agora, quando você abre uma estrutura, a única coisa que você faz aqui é adicionar variáveis. Se você adicionar uma variável, poderá escolher como essa variável deve ser chamada. Você pode escolher o tipo, assim como aqui no blueprint em que você cria uma nova variável mesma coisa. Agora, dentro da estrutura, você pode ter todas as informações sobre armas aqui. Você pode adicionar várias variáveis aqui e ter todas as informações da arma aqui. Por exemplo, com que rapidez a arma pode disparar, qual é o nome da arma e todas essas coisas que você deseja. Por exemplo, a miniatura da arma quando você a adiciona ao inventário, quanto ela deve custar na loja ao comprar a Você pode ter um valor de moeda ou um valor de $1 e assim por diante. Todas as informações da arma podem estar dentro de. Aqui você pode ver que é possível reunir todas as variáveis dentro de uma estrutura. Não é necessário criar 100 variáveis dentro desse projeto, elas na verdade as contêm dentro da estrutura Vamos começar a fazer um. Vou deletar todos eles. O primeiro aqui eu vou chamar de nome. Preciso de um nome para minha arma. E vou mudar para o tipo de string porque string é apenas um texto que podemos escrever. Agora, muito importante, a diferença entre uma string e um texto pode ser localizada ou traduzida para diferentes idiomas Por exemplo, se eu quiser que meu jogo seja alemão, japonês ou chinês, no futuro, terei que selecionar texto. Por exemplo, se eu quiser traduzir o nome da arma, se você escolher String, não poderá traduzi-la no futuro. Certifique-se de que você quer um jogo que possa ser traduzido porque você deseja traduzi-lo no futuro. Vá em frente e selecione o texto. No entanto, vou selecionar nomes de armas de corda, como AK 47 ou 44. Mesmo que eu o mude para idiomas diferentes, ele realmente não será traduzido. Quero dizer, como se chama AK 47 em diferentes idiomas? É o mesmo nome. É por isso que eu escolho uma string em vez de um texto, embora eu queira traduzir meu jogo no futuro string para o nome. Então lembre-se também adicionamos esse tipo de arma. Na verdade, também podemos ter esse tipo de arma dentro da estrutura. Eu posso simplesmente chamá-lo de tipo, você pode chamá-lo de tipo de arma, tudo bem. Chame-o do que quiser para torná-lo mais visível para você aqui. Vamos mudar para o tipo de arma. Lembre-se de que criamos esse tipo de arma de enumeração tipo de arma Também podemos adicionar um novo e chamar a classe. Uma classe é se você procurar base de armas e pegá-la aqui, selecione esta classe, referência Uma classe é que você pode gerar uma nova arma a partir desta Talvez precisemos, talvez não. É sempre bom ter uma classe para qualquer jogo que você crie, porque talvez no futuro você precise devolver essa arma ao mundo É sempre bom ter essa aula aqui. Agora temos uma estrutura. É pequeno, mas é bonito e criamos um mais tarde. Você pode adicionar, por exemplo, velocidade de tiro para essa arma. E então você pode selecionar um flutuador para o número de quão rápido ele pode disparar Mais tarde, você pode dizer velocidade de recarga e assim por diante. Então você pode ver que pode adicionar muitas informações sobre essa arma. Talvez você queira adicionar valor de uma loja, adicionar uma descrição semelhante ou adicionar uma miniatura ao inventário Você pode adicionar muitas coisas. Mas, por enquanto, vamos apenas adicioná-los. E vou adicionar mais à estrutura mais tarde, quando precisarmos. Agora que criamos essa estrutura, podemos prosseguir com a criação de uma tabela de dados. Eu vou te dizer na próxima lição o que é uma tabela de dados, mas por enquanto, incrível, você criou uma estrutura e vamos seguir em frente. 100. 8.15 Criando a tabela de dados de armas: Nesta lição, vamos criar uma tabela de dados de armas. Para criar uma tabela de dados, você precisa estar no Google Drive ou no Google Sheets ou, se tiver o Excel, também poderá usá-lo. Estou usando o Google Sheets. Vá em frente e crie uma conta do Google, se você não tiver uma. E então, aqui dentro, estamos clicando aqui e indo para o meu drive. Dentro do seu drive, acabei de criar uma pasta aqui para ficar estruturada dentro daqui. Quando você está dentro do Google, você pode escrever, clicar criar uma nova planilha do Google. Clique aqui, e então ele vai fazer uma, e eu vou chamar essa aqui de tabelas de dados. Vou criar um espaço aqui, dentro daqui. Eu só vou organizar isso um pouco. Vou clicar em Controle A para selecionar tudo. Vou clicar aqui, alinhar seu centro. Clique aqui, alinhe seu centro. Clique aqui e selecione a quebra de texto. Então eu vou mudar o telefone para este. Aqui nesta linha, vou clicar em negrito. Novamente, controle para selecionar tudo. Vou tornar tudo mais amplo assim, e isso é apenas uma preferência. Ok, agora estamos dentro das planilhas do Google. E o que é uma tabela de dados é que podemos escrever todos esses valores de uma estrutura dentro de uma tabela de dados. Assim, pessoas que não sabem programar podem realmente usar essa tabela de dados e modificar informações sobre seu jogo, por exemplo. Vamos começar aqui e você pode ver o que quero dizer. Criamos essa estrutura aqui com a variável nome. O que podemos fazer dentro dessa tabela de dados para escrever escrever essas variáveis exatamente como você as escreveu. Dentro de uma estrutura. Para o nome, podemos escrever nome e, em seguida, temos o tipo e, em seguida, temos a classe. Isso é o que temos dentro de uma estrutura agora, lembre-se de escrever exatamente como você escreveu aqui dentro da estrutura. Caso contrário, você receberá uma caixa, escreva-a aqui para o nome do item. Por exemplo, no primeiro, temos um AK 47 K 47. A próxima, temos uma se você vê aqui na arma de plantas, é isso que você tem E então você tem uma pistola. Você também pode dar um nome a ele. No entanto, minha pistola é chamada de pistola. Eu realmente não tenho um nome para isso. Agora você tem que escrever o tipo dessa arma. Lembre-se de que, dentro da enumeração você criou esse Dentro da estrutura, você também pode ver o tipo de arma que selecionou. Agora, para esse tipo de arma, você deve escrevê-lo exatamente como os tipos de armas que você escreveu aqui. Caso contrário, você receberá uma caixa dentro de uma tabela de dados. Você tem que escrever as coisas exatamente como você fez aqui dentro. Para o tipo de arma, podemos ter um rifle. Este AK é um rifle, o quatro é um rifle A pistola é simplesmente o tipo de pistola como essa. Para a aula, temos que fazer outra coisa. Vamos criar a tabela de dados primeiro porque não consigo fazer referência a essa a menos que eu realmente tenha a tabela de dados dentro dos blueprints Vamos criar uma nova pasta. Vamos chamar isso de tabelas de dados dentro dessa pasta. Novamente, vamos clicar com o botão direito do mouse em Definir a cor dentro dessa pasta. Vamos clicar com o botão direito, acredito que esteja dentro do Michelaneous, Aqui está, a tabela de dados. Vá em frente e crie. Agora ele diz a você, qual estrutura você deseja criá-lo? Eu quero criá-lo a partir das informações da arma. Vá em frente e clique. Ok. Agora vamos chamá-la de tabela DT e, novamente, chamá-la de Informações sobre Armas. Eu geralmente chamo isso da mesma forma que a estrutura. No entanto, DT para prefixo, porque esta é uma tabela de dados Se eu abrir essa tabela de dados, você pode ver que ela está vazia agora. Se você clicar no sinal de mais, um puro, você adiciona uma nova entrada para a tabela de dados. Você pode ver aqui, você pode dar um nome a ele. Por exemplo, AK 47. Eu posso transformá-lo em um rifle e a classe é esse BPAK 47 que Aqui você pode ver que agora temos as informações , em vez de uma tabela de dados. Na verdade, podemos extrair essas informações e usá-las em nosso jogo. Vamos fazer isso a partir da nossa tabela de dados aqui do Google Sheet. Vou clicar nesta, nesta entrada que você criou agora, e selecionar uma delas aleatoriamente. Por exemplo, esse PPK 47. Então você pode escrever, clicar agora neste e dizer copiar, porque agora você está copiando esta referência. Aqui você pode ver que é assim que realmente precisamos escrevê-lo dentro da sua planilha do Google. Nós já fizemos isso. Escrevemos o nome aqui corretamente, assim. Escrevemos um tipo como esse rifle, por exemplo. Para a classe, você também precisa escrevê-la assim se eu controlar V dentro daqui. Lembre-se de escrever: Clique aqui, copie, controle V. Dentro daqui. Vou apenas registrá-lo para que eu possa realmente ver o que estou fazendo. Assim mesmo. Ok, aqui, é assim que se faz. Agora você copia este e cola nos outros. Lembre-se, em vez de um AK 47, isso é 44. Então você tem que escrevê-lo exatamente como referência. Estou me referindo a este PP 44. Eu posso voltar aqui. Estas são as pastas, plantas e armas corretas. E eu só preciso mudar esse 1141. A última é a pistola chamada pistola BP. Eu escrevo pistola P aqui também. Ok. Agora eu tenho essa informação corretamente. O que eu preciso fazer agora é clicar no arquivo para baixar e selecionar CSV Esse é o formato que precisamos usar. Agora, se eu abrir minha pasta de downloads aqui, vamos chamá-la de T para tabela de dados. Vou chamá-lo com o mesmo nome de dentro daqui, para que possa ser importado. Lembre-se de chamar o mesmo nome, ET Weapon Info. Agora você pode clicar e arrastá-lo até aqui. Se você clicar e arrastá-la até aqui, ela dirá Nome esperado da coluna não encontrado. Não tenho certeza do que eu chamo isso. Eu o chamei de nome. Isso ocorre porque, na verdade, precisamos de uma coluna aqui. Precisamos clicar com o botão direito do mouse e adicionar uma coluna à esquerda e chamá-la de ID. Por algum motivo , ele cria um ID, também precisamos disso. O que eu geralmente faço é copiar todos os nomes e colá-los aqui. Na verdade, vai extrair informações do ID. E quando você extrai, por exemplo, esse ID aqui, ele sabe o nome, o tipo, essa classe e assim por diante. Então, ele conhece todas essas informações. Na verdade, você precisa primeiro de uma identificação. Ok, então vamos tentar baixá-lo novamente como um CSV. Vamos voltar para aqui. Vou copiar esse nome. Vou deletar o antigo. E para o novo, vou renomeá-lo assim. E agora eu posso arrastá-lo até aqui. Agora você pode ver que funciona corretamente. Então, precisamos dessa identificação. Agora você pode ver que quando eu importo minha tabela de dados, ela preenche automaticamente todas as informações Então eu clico no primeiro, você pode ver que ele tem o rifle AK 47 e está configurado com o modelo correto E o outro, por exemplo, em quatro, você também pode ver as informações corretas, também está aqui. Então você pode ver como é muito bom para pessoas que não sabem programar. Na verdade, eles podem simplesmente entrar aqui, mudar o tipo da arma ou mudar o nome da arma. E a única coisa que você precisa fazer agora é clicar no arquivo. Baixe essa pasta ou arquivo e arraste-o para o jogo. E isso mudará todos os valores. Dentro daqui, você pode imaginar que pode ter um valor na loja e que as moedas custem pela arma se comprá-la na loja. E o designer do jogo pode simplesmente vir aqui e editar todos esses valores dentro da planilha do Excel. Você pode até mesmo criar fórmulas aqui e calcular. Depois, basta clicar em Baixar e arrastá-lo até aqui e ele mudará todos os valores da moeda aqui. Você não precisa fazer isso dentro do motor. É muito bom usar uma tabela de dados, especialmente para pessoas que não sabem programar. Eles podem entrar aqui e alterá-lo a partir da tabela de dados, agora nós o temos dentro daqui. A próxima coisa é que precisamos usar uma biblioteca de funções. Vamos fazer isso na próxima lição. 101. 8.16 Usando a biblioteca de funções: A etapa final antes de podermos usar essa tabela de dados é criar uma biblioteca de funções. Uma biblioteca de funções, assim como o nome diz, uma biblioteca e dentro dela estão as funções. Vamos clicar com o botão direito aqui novamente, criar uma nova pasta. Deixe-me chamar isso de bibliotecas. E vamos mudar a cor dela dentro dessa pasta. Vamos clicar com o botão direito do mouse em Ir para Blueprints e usar essa chamada biblioteca de funções de blueprint Você pode ver que já usamos uma vaca modelo. Estamos usando a biblioteca de plantas. Usamos a interface do blueprint. A biblioteca de macros é igual à biblioteca de funções. Usamos a enumeração e também usamos Você pode ver que, na verdade, já passamos pela maioria dessas aulas de blueprint É muito bom que você tenha passado por tudo isso e esteja tendo a experiência. Vamos criar uma biblioteca de funções de blueprint. E deixe-me chamá-la de biblioteca de funções BP porque eu só tenho uma no meu jogo Vamos abrir essa biblioteca de funções dentro de uma biblioteca de funções. Você pode criar funções e criá-las aqui. A vantagem de uma biblioteca de funções é que você pode usar as funções globalmente. Se eu criar uma função aqui, vamos chamá-la, por exemplo, aleatória se eu compilar Agora, se eu for ao meu plano de jogador, por exemplo. E eu escrevo clique e digo aleatoriamente, foi assim que eu o chamei. Você pode ver, agora eu posso ver funções de uma biblioteca de funções. Não importa onde eu escrevo isso. Se eu abrir o modo de jogo e escrever, deixe-me sair desse, na verdade, deixe-me acessar o gráfico de eventos e dizer aleatoriamente. Você pode ver, eu posso ver a função dentro da biblioteca de funções. Qualquer função que você faça aqui pode ser vista globalmente por meio de todos os projetos Lembre-se de que não funciona aqui sem motivo, porque isso consome desempenho. Se essa biblioteca for enorme, a única coisa para a qual você deve usá-la é se você tiver uma função usada em muitos projetos Por exemplo, você está recebendo as informações da arma Você pode usá-las na base de jogadores. Você pode usar isso no modo de jogo. Você pode usar isso no controle de jogo. Se você tem uma função que vai usar em vários blueprints, então vá em frente e coloque-a dentro de uma biblioteca de funções para que você não precise fazer a mesma função repetidamente em cada blueprint Mas funções específicas não as criam dentro de uma biblioteca de funções. Isso se destina apenas a funções que você usará muitas vezes em vários projetos Por exemplo, para este, vamos chamá-lo de Obter informações. Estamos recebendo as informações sobre as armas. Eu também vou marcar puro, puro só faz com que seja aquela função verde. Se eu compilar e você puder ver se eu vou até a base de jogadores, por exemplo e digo obter informações sobre a arma, você pode ver que ficou verde E a razão pela qual ficou verde é porque eu cliquei em puro. E aqui você pode ver isso. Na verdade, fica como aquelas funções verdes se você tiver criado uma. Este, por exemplo, para este, estamos recebendo o controlador, você pode ver que está verde porque está simplesmente obtendo informações. Se você definir informações , precisará desses pinos aqui e eles são azuis Essas são funções definidas e essas são funções get. Eles estão simplesmente obtendo informações sem modificar nada Isso é o que queremos fazer. Queremos obter informações sobre nossas armas. Nós o configuramos como puro porque não estamos modificando nada aqui A função principal que precisamos usar aqui, se você clicar com o botão direito do mouse, ainda é a linha da tabela de dados. Esta aqui embaixo, mas linha da tabela de dados. Essa é a função principal que precisamos usar. E precisamos selecionar nossa tabela de dados. Portanto, precisamos obter informações das informações da arma T. Agora você tem que dizer quais informações você deseja obter dele? Agora, isso precisa ser dinâmico, dependendo do que você está fazendo dentro do jogo. Vamos fazer isso, e eu posso explicar isso mais tarde para obter as informações sobre a arma. Agora vamos criar uma variável e vamos chamá-la de nome da arma. E eu vou transformá-lo em uma corda. Vou pegar isso e dizer substituir. E use essa função chamada substituir. Agora, a razão pela qual eu uso isso é se você dentro da sua tabela de dados aqui, digamos que você tenha um nome, por exemplo, digamos que você tenha uma arma chamada quatro em um. Vamos fingir que isso é uma arma. Você tem espaços entre seu nome para o ID. Agora, quando você cria algo dentro de uma tabela de dados, ele realmente remove os espaços. Se você abrir a tabela de dados, digamos que você importe esta no espaço um a. Se você importar isso para aqui, ela realmente removerá o espaço e escreverá apenas um A sem espaço. O que eu geralmente faço aqui para remover todos os espaços daqui, quando você os carrega, eu pego o nome da arma aqui no formulário. Eu pressiono espaço, certifique-se de adicionar um espaço. Os dois podem simplesmente estar vazios. Nada dentro daqui, só isso. O que isso está simplesmente fazendo é ocupar todos os espaços desses nomes. Digamos que seja esse. Ele está ocupando o espaço e o substituindo por nada, que significa que você está, na verdade excluindo o espaço dessa forma Em seguida, ele encontrará o ID correto dentro dessa tabela de dados. Porque essa tabela de dados remove automaticamente esses espaços quando você os importa. Quando você pesquisa por um nome como neste espaço, isso lhe dará uma era. Estamos removendo todos os espaços e agora vamos conectá-los aqui. Ele converterá automaticamente a string em uma variável de nome. Então podemos sair daqui e dizer “volte”. Você pode conectar essa saída ao retorno e chamar essa informação de arma. Ok, agora terminamos e preciso explicar todo o processo para você, porque isso pode ser um pouco confuso O que estamos fazendo aqui agora é que agora podemos dizer, por exemplo, aqui dentro da base de jogadores que podemos dizer obter informações sobre armas. E podemos chamar essa função que criamos na biblioteca de funções. Estamos recebendo essa informação. Agora precisamos inserir o nome da arma. Digamos, por exemplo, que faremos isso na próxima lição. Mas digamos, por exemplo, que eu conectei o nome AK 47 Vai levar esse nome. Ele vai entrar nessa função na biblioteca de funções. Ele vai pegar o nome aqui, vai remover todos os espaços, se houver algum. Ele vai colocar aquele AK 47 que eu escrevi aqui no nome da linha, que significa que ele aparece aqui no nome, ele procura o AK 47, ele procura este. Agora ele sabe que estamos falando sobre essa linha. Ele sabe o nome, o tipo, a classe e assim por diante. Então você pode arrastar a partir daqui e dizer quebrar, você pode quebrar estruturas. E agora você pode ver todas as variáveis, pois ele pega as informações dessa tabela de dados, agora sabe o nome do AK 47, sabe que tipo de arma é, de que classe é, porque está pegando todas essas informações dessa tabela de dados. É assim que você o usa e agora precisamos realmente criar nomes para essas armas. Liste isso por enquanto. Vamos compilar, salvar e seguir em frente. 102. 8.17 Adicionando o nome da arma: Agora, o que precisamos fazer, vamos fechar tudo. Vamos voltar para as armas e vamos para a base de armas. Agora, dentro daqui, vamos criar uma nova variável chamada, vamos chamá-la de nome da arma. Vamos dar a ele o tipo de string. Então, é só uma mensagem de texto. E se você compilar, você pode ver, você pode escrever algo aqui agora para o nome da arma Como você cria essa variável, lembre-se de que, como você criou dentro da classe principal do blueprint, todos os filhos herdarão essa Se você abrir o Q 47, poderá ver nos padrões da classe que agora você pode escrever o nome de uma arma Você pode torná-lo específico para cada arma. Agora você adiciona a variável dentro da base da arma e depois pode editar essa variável para ser algo específico para cada criança. O nome da arma para o AK 47 é apenas K 47 para os quatro. Eu posso ver isso aqui. Não preciso clicar aqui. O nome da arma para os quatro é 41. Vamos fechar isso também. Para a pistola, é só uma pistola. Na verdade, vou me lembrar compilar aqui desse jeito Salve tudo. Agora você escreveu o nome da arma para cada uma delas. Precisamos do nome da arma, extraia as informações corretas tabela de dados porque se o nome da arma for pistola, vamos inserir o nome da arma e ela extrairá todas essas informações daqui Ok, vamos fechá-lo agora. Agora, o que podemos fazer, por exemplo, é ir até o jogador. Vamos até o jogador. Eu só vou te mostrar que você realmente não deveria seguir aqui. Na verdade, eu só quero te dar um exemplo. Temos, por exemplo, essa arma saqueada. Essa arma saqueada eu posso arrastar daqui. E agora eu posso dizer o nome e pegar essa variável de nome de arma. A partir disso, posso dizer ainda informações sobre a arma. Essa é a biblioteca de funções. Agora podemos realmente conectar isso. Digamos que eu andei por cima de uma AK 47. Eu passei por ela e agora posso realmente extrair as informações dela se eu simplesmente imprimir uma string na minha tela e conectá-la aqui embaixo. Vamos pegar isso e dizer que quebre essa estrutura. Vamos imprimir o nome dessa arma. Se eu apenas acompanhar, eu vou até lá, na verdade eu preciso escolher, então se eu escolher terroristas e passar por cima dessa pistola, ela vai imprimir Se eu examinar isso em quatro, vai ser impresso em 41. Portanto, você pode ver que agora está extraindo informações corretamente , dependendo do nome da arma Deixe-me deletar isso por enquanto. Lembre-se de que é muito importante que, ao adicionar essa variável à classe principal, lembre-se de que você precisa entrar em cada um dos filhos e alterar o valor dela. Ok, vá em frente e salve tudo e vamos seguir em frente. 103. 8.18 Substituindo a variável WeaponType: Tudo bem, nesta lição eu vou substituir a variável do tipo de arma. Se formos à base de armas, lembre-se de que criamos esse tipo de arma e o estamos usando aqui para verificar se o jogador já tem a arma no inventário. Esse tipo de arma, nós já fizemos isso dentro da estrutura. Se você for até a estrutura, lembre-se de que fizemos esse tipo. Agora, não precisamos que essas variáveis extras estejam espalhadas. Na verdade, podemos usar nossa estrutura para substituir isso. O que podemos fazer agora, em vez de tudo isso, em vez de usar o tipo de arma como esse, agora podemos dizer obter informações sobre a arma. Podemos pegar isso aqui, inserir o nome assim. Lembre-se de que estamos dentro da base de armas. Já temos o nome aqui. Agora, para obter o tipo de arma, temos que arrastar e dizer break e podemos quebrar isso. O que você pode fazer, você também pode escrever clique aqui e diga estrutura dividida. E você pode obtê-los assim. No entanto, eu gosto de apenas escrever pausas e publicá-las aqui. Agora, essa é apenas a preferência. Agora posso pegar esse tipo, esse é o tipo de arma, e posso conectá-lo aqui. Agora você pode ver que isso é a mesma coisa. Agora eu posso realmente excluir essa variável de tipo de arma para esconder os pinos que você não está usando Para melhorar a aparência, você pode clicar nele e pressionar ocultar os pinos não conectados. Parece que é assim. Ok, eu tenho que organizar isso um pouco mais tarde, mas vamos deixar que esteja aqui para esse tipo de arma. Aqui estou me retirando disso e dizendo o nome novamente. Obtenha o nome da arma, obtenha informações sobre a arma. E então você pode quebrar isso. Em seguida, você pode inserir o tipo aqui; em vez disso, também podemos excluí-lo. Agora você pode ver que não estamos mais usando essa variável. Temos todas as informações sobre a arma dentro desta. Ok, vou organizar isso um pouco. Tudo bem, agora está um pouco mais organizado para dar uma olhada se você tem outras referências desse tipo de arma. Em vez de procurá-lo, sei que também o usamos na base de jogadores. Mas se você não se lembra, digamos que você venha aqui um mês depois e não se lembre de onde o usou. Em outro lugar, você pode ver se você tentar excluí-lo agora, ele diz que o tipo de arma variável já foi usado. Você quer excluí-lo? Estou pressionando não, porque ainda o estamos usando. Clique com o botão direito aqui e diga encontrar referências. Agora, isso aqui embaixo está apenas encontrando as referências dentro deste projeto Mas se você clicar nesse pequeno ícone, ele o encontrará em todas as plantas Ele vai pesquisar em todas as plantas. E você pode ver que é usado na base de jogadores da BP. Se você clicar duas vezes na variável aqui, ela nos levará e a usamos aqui na arma de saque onde definimos o tipo de arma equipada Em vez de fazer isso de novo, vamos pegar essa arma saqueada Digamos que coloque a arma. Na verdade, obtenha informações sobre armas. Obtenha o nome, obtenha o nome da arma. Em vez de fazer tudo isso de novo e de novo, na verdade vou até a base de armas e vou copiar isso e isso aqui. Então, as informações da arma Git e a estrutura do freio. Então, eu posso simplesmente colar aqui e conectar isso aqui, é um pouco mais rápido. E agora você pode conectar o tipo aqui. E você pode excluir isso novamente apenas para tentar torná-lo o mais organizado possível. Mas você pode ver que agora é muito longo em comparação com antes. No entanto, novamente, você tem todas as informações contidas nessa estrutura, então ela será muito mais limpa para você. Tudo bem, agora temos isso e vamos abrir minhas referências novamente. Vou clicar duas vezes neste agora. E eu o uso aqui quando quero trocar ou conectar o ator ao meu componente de malha. Novamente, assim como antes. Vamos copiar tudo isso porque, na verdade, estávamos usando essa arma saqueada Novamente, vou voltar aqui, saquear um representante e vou deletar isso, abrir espaço além disso e depois conectá-lo E então basta empurrá-los de volta. A mesma coisa aqui embaixo. Exclua-os e conecte-os. Assim mesmo. Ok, agora você tem que compilar, salvar tudo E isso deve ser tudo que você pode ver. Você não tem mais referências. Eram todos eles. Se você voltar agora para a base de armas e pressionar delete, ela será excluída automaticamente porque você não a está mais usando. Agora você pode ver que substituímos todos eles. As plantas estão ficando mais limpas no futuro. Não temos cerca de dez variáveis para a arma. Nós os temos todos dentro de nossa função funcional, nossa estrutura. E a partir dessa estrutura, ele pega essas informações da tabela de dados. E sempre podemos prolongar mais tarde. Mas, por enquanto, essas são todas as informações de que precisamos. Vamos agora salvar tudo e seguir em frente. 104. Ação de entrada de arma 8.19: Ok, antes de fazermos a funcionalidade Lote, como quando você pressiona um botão, por exemplo. Se eu pressionar E em uma arma no chão e a soltar, acho que é muito melhor começar com uma arma solta. Porque se você estiver segurando uma arma na mão, também precisará soltá-la ao saquear a outra Vamos começar soltando uma arma antes soltá-la com uma tecla no teclado Vamos para a entrada aqui na pasta do player. Vá para Entrada, clique com o botão direito do mouse. Na verdade, você pode tentar fazer isso sozinho, se quiser. É um bom momento para se exercitar. Nós já fizemos muitos deles. Você deve ser capaz de fazer isso sozinho. Tente fazer isso sozinho. Se possível, tente criar uma ação de entrada ou soltar uma arma E adicione-o ao contexto de mapeamento de entrada. E também adicione o evento à base de jogadores. Agora vamos fazer isso juntos aqui. Vamos à direita para Entrada e selecione Ação de Entrada. Vamos chamar isso de uma arma. Vamos abri-lo. Na verdade, não precisamos mudar nada aqui dentro. Vamos ao contexto do mapeamento. Vamos adicionar um novo mapeamento. Vamos selecionar a arma de lançamento. Vou soltar a arma com a tecla G no meu teclado, assim como no Counterstrike Agora você pode usar qualquer outra coisa que seja adequada para o modificador Vou clicar em Pressionado, porque você precisa pressionar o botão e ele reproduzirá o código quando não abranger isso. Ok, agora temos isso. Vamos fechá-lo. Vamos até o jogador, a base de jogadores. E dentro daqui, vamos ao gráfico de eventos. Aqui embaixo, você pode clicar com o botão direito do mouse e escrever o nome novamente, exatamente como você fez com a entrada ou a arma de lançamento. Clique com o botão direito do mouse e diga uma arma solta e aqui está o evento que você precisa usar. Agora podemos codificar na lógica de soltar a arma, vamos salvar tudo e passar para a próxima. 105. Lógica da arma 8.20: Tudo bem, então vamos começar com a lógica de lançamento da arma. Agora precisamos saber qual arma você quer retirar do inventário. Agora vamos executá-lo no servidor. Novamente, precisamos executá-lo no servidor para evitar fraudes Então, vou criar um novo evento personalizado chamado SRV Weapon Vamos executar isso no servidor e de forma confiável. Vamos rodar o servidor que está dentro daqui. Ok, então quando eu pressiono a tecla G para soltar minha arma, ela passará por esse evento personalizado. Agora precisamos saber qual arma estamos soltando. Estamos soltando a arma que temos em nossas mãos. Precisamos saber qual é a arma que estamos segurando em nossas mãos. No momento, na verdade é esse tipo de arma equipada. Ele sabe se estamos segurando um rifle, pistola ou se estamos desarmados com essa arma equipada Na verdade, vou renomeá-lo para que soe melhor. Não é arma equipada, é tipo de arma equipada. Também precisamos mudar o nome aqui. Na verdade, configure a arma equipada. É definido como tipo de arma equipada. Eu também vou fazer isso aqui embaixo, defina o tipo de arma equipada. E a mesma coisa aqui para as variáveis. Eles são chamados de tipo de arma equipada e tipo de arma equipada. Tipo de arma equipada. Está mais correto do que antes. Agora já sabemos qual é o tipo de arma equipada. Precisamos encontrar isso no inventário. Precisamos fazer o inventário de armas. E podemos economizar para cada loop com uma pausa. E vamos conectá-lo aqui novamente. Lembre-se de que criamos esse nome na última lição. Vamos pegar isso e dizer variável name e pegar o nome da arma. Agora estamos recebendo o nome da arma do item agora. A arma aqui. Então, a partir desse nome de arma, obtenha novamente as informações da arma. A estrutura aqui, vamos quebrá-la. O que nos interessa é que estamos interessados em obter o tipo de arma agora a partir do inventário que estamos examinando Se esse tipo que estamos vendo atualmente no inventário for igual, enumeração igual, se for igual ao tipo de arma equipada, isso significa que temos essa arma no inventário e é a que temos, certo? agora. Se for esse o caso, queremos largar essa arma agora. Ok, se for o fato que a arma que estou procurando agora no meu inventário é igual ao tipo de arma equipada no momento. Isso significa que essa arma aqui é realmente a que queremos remover do inventário. Se isso estiver correto, vamos clicar com o botão direito do mouse aqui e promover isso para uma variável. Vou chamar isso de arma para soltar. E agora podemos conectá-lo aqui. Assim como antes de você fazer este, vamos ver se podemos encontrá-lo. Você fez essa única arma de saque. Ao saquear a arma, você remove a colisão aqui da função de notificação A mesma coisa que realmente precisamos fazer aqui com a arma de soltar, porque temos que habilitar a física novamente, lembre-se de que simulamos a física nas armas desde o início Na verdade, temos que fazer a mesma coisa aqui para este. Vamos adicionar algumas notas de rota traseira para que essa arma caia. Vamos clicar nele e dizer, vamos compilar. Vamos fazer essa função na próxima lição. Mas, por enquanto, vamos continuar aqui, estamos soltando a arma E lembre-se também de removê-lo do inventário. Vou pegar esse inventário aqui e colar aqui e dizer remover item. Digamos que remova um item assim. Vamos agora selecionar o item que queremos remover. É esse item de arma ou item de inventário. Agora estamos removendo-o do inventário porque, se você não fizer isso, ele ainda estará no inventário. Se você deixá-la cair no chão , devemos lembrar de atualizar também o tipo de arma equipada. Arraste a partir daqui e diga definir o tipo de arma de equipamento. Por enquanto, vamos configurá-lo como desarmado. Podemos modificá-la posteriormente, se você tiver uma pistola ou o que quer que tenha agora, ao soltar a arma, vamos configurá-la para desarmada E foi isso. Agora você está realmente soltando a arma. Agora terminamos com este. No entanto, ainda precisamos criar essa função de representante e notificação. Vamos fazer isso na próxima lição. 106. 8.21 Drop Weapon Rep Notify: Certo, vamos abrir a arma para soltar o representante e notificar. Se você não se lembra do que fizemos, você sempre pode voltar para a arma mencionada E aqui o que você fez foi remover a física simulada, removeu a colisão da arma porque agora a está segurando na mão e também removeu a colisão da esfera de colisão. Você pode opor a isso: se voltarmos para nossa arma caída, precisamos primeiro soltar a arma da mão Porque lembre-se de que, nas armas saqueadas, você anexou isso ao personagem O que precisamos fazer primeiro é pegar essa arma para soltar. Precisamos dizer desapego. E você pode selecionar esse. Separe-se do ator. Agora você está separando essa coisa aqui, essa arma para soltar desse ator Vamos manter a localização, rotação e a escala para manter mundo onde quer que ele esteja agora. Ele apenas mantém a localização e assim por diante. Exatamente o oposto das armas saqueadas. Vamos pegar isso e dizer que vamos primeiro definir a colisão porque não podemos simular Se você realmente não configurou a colisão corretamente, vamos ativar a colisão . Na verdade, é a arma Se você voltar, se não se lembrar, sempre volte para a base de armas, verifique o que precisa de colisão Lembre-se de que é a arma que precisa dessa colisão aqui. Na verdade, precisamos pegar isso e pegar a arma primeiro, a variável da arma, pegar aquela. Então, podemos dizer que a colisão definida está ativada aqui. Vamos conectá-lo. A colisão, lembre-se, foi apenas física. Não precisamos de consultas para essa malha aqui, apenas física. E também precisamos simular a física. E fazemos isso com a arma. Lembre-se, se você voltar e clicar na arma, é aqui que você simula a física Não está nos padrões da classe. Você tem que se arrastar da arma e dizer simular física E selecione esse Deus, conecte-o e habilite a física. Vá em frente e faça algumas anotações de redirecionamento para torná-lo mais agradável. Ok, agora simulamos a física e também temos algumas colisões ativadas Agora lembre-se de que você também desativou a colisão. Se eu voltar para a arma saqueada, você também desativou a colisão da esfera de colisão, você precisa pegar esta e usar a variável da esfera de colisão Você desce até a parte inferior aqui, pega a esfera de colisão e, em seguida, define novamente uma colisão ativada e sai e seleciona E sim, sem mais nem menos. Agora você precisa definir a colisão para consulta somente porque na verdade, a colisão é uma consulta somente para a esfera de colisão Você pode ver isso aqui. Somente consulta, precisamos configurá-la para somente consulta. Eu acredito que é a única coisa que tivemos que fazer. Vamos testá-lo. Vamos ver se tudo funciona. Se tivermos alguma caixa que precisamos consertá-la, vamos jogar como o terrorista. Agora, se eu bater alto, por exemplo, o AK e clicar em G, soltar a arma, você pode ver que ela caiu no chão. Assim mesmo. Incrível. Na verdade, vamos jogar em primeira pessoa, para que eu possa ver melhor. Vou clicar no meu braço de mola para ver a base de jogadores e configurá-lo para zero. Vamos jogar em primeira pessoa. Agora vamos pegar esse K. Agora que estou segurando, eu pressiono para soltá-lo Agora você pode ver que está no chão. Incrível. Vamos tentar pegar essa aqui e jogá-la no chão. Agora você pode ver que temos um dólar. Eu não acho que seja invisível porque você não pode vê-lo nas minhas costas. Estou me perguntando o que está acontecendo. Vamos pegar a primavera. Vou configurá-lo para 600 para ver o que está acontecendo. E, na verdade, é apenas o M quatro. Então você pode ver que a pistola está funcionando corretamente. O K também está funcionando corretamente. Nada está acontecendo , exceto o M quatro. Estou carregando corretamente na primeira vez. No entanto, se eu deixá-lo cair e entrar nele, oh, na verdade está embaixo de mim. Você pode ver isso nos meus pés. Está lá. Vamos realmente corrigir isso rapidamente. Acho que precisamos redefinir a localização. Se você for ao representante, notifique a arma saqueada. Sempre que você saqueia uma arma, você precisa reiniciar, transformar. Na verdade, vamos fazer isso aqui depois anexar o componente ao componente raiz. O que posso fazer aqui é pegar a arma e dizer reset. E você pode ver algo chamado reset, transformação relativa. Isso reiniciará a transformação dessa arma aqui dentro da planta Como não basta reconectá-lo ao componente raiz, também precisamos redefinir a transformação dele Vamos compilar, jogar e ver se isso resolve nosso problema. Eu pego os quatro, eu deixo cair. Eu pego quatro novamente, e agora você pode ver que está funcionando corretamente. Se eu voltar com meu braço de mola, coloque-o em zero. Jogue agora como terrorista. Agora posso pegar isso em quatro e posso soltá-lo. Posso aguentar de novo. Eu posso largar isso. Você pode ver agora que está funcionando corretamente. É um bom mecânico que, na verdade, precisamos sair primeiro da esfera de colisão antes de podermos saquear Porque você pode imaginar que, se você a soltar e não tiver essa funcionalidade, continuará saqueando a arma Quando você o deixa cair embaixo de você, você tem que sair e entrar novamente e tudo está funcionando perfeitamente, tudo bem A última coisa que também esquecemos, ou eu esqueci, foi quebrar o ciclo Porque se você encontrar a arma aqui, nós realmente precisamos quebrar o circuito. Precisamos pegar isso e executá-lo até o intervalo. E vamos clicar duas vezes para redirecionar os nós para melhorar a aparência Porque agora, se encontrarmos a arma, precisamos parar o circuito. Não precisamos examinar mais porque já encontramos os resultados. Temos que quebrá-lo aqui através do loop. Isso o tornará mais otimizado. Agora vamos compilar e clicar em Reproduzir. E toque o personagem só para testar se tudo está funcionando corretamente. Agora podemos ver que tudo está funcionando bem com a pistola também Tudo está funcionando bem também. Agora, às vezes você recebe um erro se soltar a arma e não tem nada realmente aqui. Em vez de continuar soltando a arma, temos que verificar se você realmente tem uma arma ou não Precisamos pegar esse tipo de arma equipada e precisamos dizer: é igual a desarmada Na verdade, podemos dizer que não é igual? Isso vai ser muito melhor. Se não for igual a desarmado, você pode soltar a arma Se estiver desarmado, você não tem nada na mão e não faz sentido soltar a arma Se não estiver desarmado, você pode soltar a arma, que a tornará muito melhor E também remova uma caixa que você possa ter mais tarde se soltar a arma. E você pode ver agora que tudo está funcionando como deveria. No entanto, não se deixe enganar pois agora vamos tentar jogar como cliente Agora, se eu jogasse como cliente como terrorista, agora, se eu entrar em uma arma, você pode ver que ela está posicionada corretamente E se eu clicar em G para soltar a arma, tudo bem. No entanto, se eu for saqueá-la novamente, você verá que estou segurando alguma coisa e, na verdade, estou segurando a arma No entanto, ele ainda está no chão. O que está acontecendo? Esse bug está acontecendo porque o representante notifica Se eu for até a base de jogadores, o representante só notifica ser chamado se o valor mudar Por exemplo, aqui, se eu perder a arma aqui, digamos que eu aluda à arma. Ok, bom. Eu defino essa variável, esse representante notifica que está configurada para pistola Agora, se eu deixar cair, vamos voltar ao jogo. Se eu deixar aqui, se eu distribuir os quatro, tudo bem, é bom soltá-lo Se eu for até a pistola funciona bem. Você pode ver que eu posso fazer isso. No entanto, não posso usar a mesma arma duas vezes. Vai funcionar, mas eu entro nela, você pode ver que está saindo e algo está estranho. Isso ocorre porque , se for o mesmo valor que está sendo inserido aqui da última vez, na verdade ele não chamará uma função de notificação de representante A função de notificação do representante não será chamada se for exatamente o mesmo valor que você inseriu aqui E isso acontece com tudo. Por exemplo, digamos que você tenha uma variável vetorial e esteja definindo alguma Digamos que você tenha definido a localização da arma. Digamos que você esteja definindo a localização da arma e, na verdade, executando-a por meio de uma notificação de representante Digamos que a localização da arma precise ser 000 e você a conectou aqui Agora, da próxima vez que você executar isso e a localização da arma for exatamente a mesma, na verdade, ela não executará essa função de notificação de representante A função de representante notificado só será executada se você estiver alterando o valor Vamos deletar esse aqui. Vamos deletar isso na localização da arma representativa que acabamos O que precisamos fazer aqui é mudar isso. Vamos realmente fazer isso na próxima lição. 107. 8.22 Redefinindo o valor do aviso de representante: Tudo bem, agora vamos redefinir a função de notificação do representante para que ela funcione corretamente. Então, o que podemos fazer aqui agora você está usando esta arma de lançamento. Você o está executando corretamente. Agora vamos redefini-lo aqui. Quando o loop estiver concluído e tudo isso estiver concluído, vamos redefinir esse valor. Então, na próxima vez que a configurarmos, mesmo que seja o mesmo valor, ela executará essa notificação, porque a redefinimos antes disso. Aqui embaixo, o que eu preciso fazer é pegar essa arma. Vamos pegar isso aqui. Está aqui embaixo, a arma para largar. Vamos levá-lo até aqui. Vamos nos conectar ao completo. Na verdade, essa é a única coisa que você precisa fazer se não inserir nada nesse valor, ele jogará fora todas as informações que estão dentro dele e redefinirá essa variável aqui. O que podemos fazer agora é que haverá um pequeno bug, e você provavelmente também verá isso. Agora, se clicarmos em Play, eu pego isso, eu solto, você pode ver que agora está no ar. Estamos pegando corretamente. No entanto, ele ainda está no ar. Isto é, deixe-me encerrar isso. Isso ocorre porque você ainda está executando essa função aqui. E, ao mesmo tempo, você está redefinindo essa variável. Na verdade, precisamos dar um pequeno atraso para que ele tenha a chance de executar essa função de notificação. Antes de reiniciá-lo. Deixe-me atrasar em algo muito pequeno, como 0,1, e então podemos redefinir essa variável. Vamos compilar, vamos jogar e ver o que acontece. Agora, se eu jogar como terrorista, eu pego e largo. Veja se funciona corretamente. Se eu pegar de novo. Agora ainda há um erro aqui e temos que fazer a mesma coisa com a arma de alaúde Agora diz X sem tentar ler a propriedade da arma para soltar, separada do ator Agora, o que precisamos fazer aqui é porque, quando executamos isso, lembre-se de que, ao executar uma função de notificação de representante, você está alterando o valor, mesmo colocando zero nisso Mesmo que você esteja esvaziando, ainda esteja alterando o valor E, na verdade, executará tudo isso. Novamente, a maneira de fazer isso é clicar com o botão direito do mouse nessa arma para soltá-la e convertê-la em um objeto validado e conectá-la aqui sempre que for válida Podemos seguir em frente, conectar e executar esse código sempre que ele não for válido. dizer isso aqui, sempre que não conectarmos nada aqui, isso fará com que isso não seja válido e não faremos nada se não for válido. Vamos compilar e ver se isso realmente resolve os problemas. Antes de continuarmos, posso soltá-la aqui, entrar nela, e você pode ver que ela ainda está invisível e temos que esvaziar a outra variável. No entanto, você pode ver que não recebemos nenhum erro, então eles foram corrigidos. Vamos voltar. Agora, vamos até as armas saqueadas. Este também precisamos reiniciar. Lembre-se de que isso também está configurado para a mesma variável porque você está saqueando a pistola repetidamente Agora, para este, o que podemos fazer aqui, lembre-se de que não está vazio, então estamos verificando se o conjunto de armas sobrepostas está vazio ou não Se estiver vazio, colocamos a arma de saque novamente, aqui Novamente, posso dizer que demore 0,1 segundo para dar a ele a chance de jogar. Sempre que isso for feito, posso pegar essa arma saqueada e configurá-la assim e esvaziar os valores aqui dentro Agora lembre-se de entrar nisso novamente e garantir que isso seja válido sempre que você fizer isso Vamos clicar com o botão direito do mouse em converter em um get validado, assim como antes Somente quando é válido. Queremos executar o código porque, se ele não for válido, não queremos fazer nada. Vamos compilar, salvar tudo. Deixe-me clicar em jogar agora, e isso deve funcionar. Se eu jogar como terrorista, largo a arma e saqueei novamente. Você pode ver que foi saqueado corretamente. Se eu deixar cair muito de novo, você pode ver que agora está funcionando perfeitamente. Está correto. Agora ele funciona como cliente. E se eu jogar o servidor de escuta do jogo. Então, se eu jogar como servidor e também como cliente. Agora aqui está meu servidor. Eu vou desovar. E aqui está meu cliente. Eu também vou desovar. Eu mencionei a pistola como minha cliente e você pode vê-la aqui no servidor, e se o servidor e se o servidor K, por exemplo, você também pode vê-la Se eu deixar cair, eu aludi, você pode ver que você pode ver isso tanto nas telas aqui quanto no cliente, eu posso largar esse lote, tudo está funcionando corretamente Se eu aludi às informações, elas também estão corretas OK. Tudo está correto, está bonito. Agora, há um pequeno problema. Se eu for até o jogador e o jogador soltar a arma, você pode ver que agora estou segurando a arma. No entanto, como jogador, como cliente, não consigo ver nada. Mas como servidor, você pode ver, eu posso ver o K. Agora, o que está acontecendo? Você pode estar pensando que isso pode ser um problema de replicação, porque, como servidor, posso ver as informações corretas, mas, como cliente, não consigo ver as informações corretas Isso pode ser um problema de replicação. Porque você pode ver no chão, eu posso realmente ver a arma. Há algo errado. Agora, eu não suspeitaria de um problema de replicação. Eu posso realmente ver a arma no chão. Se fosse um problema de replicação, a arma deveria estar nas minhas costas Porque então ele pensa que eu já tenho algo na minha mão e colocaria meu Ak nas minhas costas. Mas por alguma razão estranha, a arma está realmente no chão e aqui está na minha mão Provavelmente, o problema é que você esteja saqueando a arma Como o outro jogador, você está realmente saqueando a arma antes ter a chance de jogar todo esse código na arma de soltar Vamos realmente fazer isso na próxima lição. Vamos corrigir esse problema. 108. 8.23 Interação de armas: Para garantir que não possamos interagir com essa arma até que ela realmente passe e seja reiniciada. Então, na verdade, queremos interagir com a arma porque, no momento , os jogadores estão interagindo com ela muito rápido. Vamos para a base de armas. E dentro daqui eu vou criar uma nova variável. Vamos chamá-lo, pode ser interagido. Vamos transformá-lo em um lingote. Agora vamos para a base de jogadores. Na verdade, vamos fazer com que, por padrão, você possa interagir com ele. Se clicarmos nesse lingote, vou defini-lo como verdadeiro padrão. O que podemos fazer agora é ir até o jogador. Agora, não quero que eles interajam com ele. Depois de realmente encontrarmos essa arma e quisermos soltá-la, vou arrastá-la para longe. Agora temos essa arma. Eu só vou dobrar aqui. E eu posso partir daqui, dizer e interagir com ele, e podemos configurá-lo como falso Agora, não precisamos replicar isso e o motivo é que estamos apenas executando isso no servidor Às vezes você acha que às vezes está replicando coisas, às vezes não está replicando O que eu realmente preciso replicar Se você precisar de algumas variáveis que você está usando apenas durante as funções do servidor, elas não precisam ser replicadas Você está definindo se isso pode ser interagido ou não. Se você está usando essas informações apenas dentro das funções do servidor para fazer alguma lógica e os outros jogadores não precisam saber sobre isso, você realmente não precisa replicá-las No entanto, se você quiser outras coisas, por exemplo, qual arma você está equipando, se estiver usando aqui , você pode ver o tipo de arma equipada Na verdade, estou usando aqui, onde o cliente também executa o código. Agora, se isso não for replicado, isso dará uma era para o cliente No entanto, pode ser que se eu o usar aqui em cima onde o cliente também está, eu tenha que replicá-lo Mas como eu o estou usando apenas na lógica do servidor , na verdade não preciso replicá-lo É como uma coisa interna. Você pode salvá-lo agora. Agora não consigo interagir com a arma aqui embaixo. Sempre que for concluído, quero definir que minha pode ser interagida como verdadeira Agora precisamos configurá-la antes desta, porque lembre-se de que você está excluindo a variável Antes de excluirmos a variável, precisamos usá-la. Vamos pegar isso e dizer que pode ser interagido com. E vou defini-la como verdadeira porque agora podemos interagir com ela e depois queremos excluir essa variável. Você não quer fazer isso aqui porque excluiu a variável, então essa seria inválida Agora isso é excluí-lo. Agora, o que precisamos fazer é ir até a base de armas aqui. Também precisamos escrever aqui que, se você não conseguir interagir com ele, não faça nada depois da autoridade. Vamos atacar a partir daqui. Lembre-se de que não replicamos essa variável. Se escrevermos algo aqui, isso nos dará uma era em que estamos escrevendo, depois que o switch tiver autoridade, então só o estamos usando dentro do servidor, então tudo ficará bem, não precisaremos replicá-lo Vamos pegar, isso pode ser interagido e vamos fazer uma ramificação Digamos, isso pode ser interagido com isso? Se puder, vá em frente e execute o código. Se não puder, vou atrasar o código em, digamos, 0,1 segundo. E então eu vou executar isso de novo. Então, eu continuo examinando esse código. Na verdade, vou organizar isso um pouco mais. Então, basicamente, o que estou fazendo aqui é continuar percorrendo o código para ter certeza de que posso interagir com minha arma antes de fazer algum código de interação Então, deixe-me tentar organizar isso aqui, deixe-me reduzi-lo. Então, agora, o que estou basicamente dizendo é que vá em frente e dê uma olhada e veja se isso pode ser interagido Se puder, execute o código com antecedência. Se não for possível, vou repetir ou atrasar o código em 0,1 segundo. E depois vou voltar e verificar se é possível interagir com isso Eu continuo examinando e estou esperando isso seja verdade, porque sempre que você soltar a arma, isso acontecerá muito rapidamente Então você nem vai notar esse. Não se preocupe, isso não prejudica o desempenho porque isso vai se repetir muito rápido. E não vai funcionar muitas vezes, porque isso vai ser verdade muito rápido. Então, na verdade, este não está sendo executado muitas vezes. Então não se preocupe com isso. Vamos tentar clicar em jogar agora e ver o que acontece se eu jogar como terrorista e maximizá-lo. Eu saqueio algo e clico em, você pode ver que eu estou realmente saqueando instantaneamente E esse é o problema que temos agora. Se eu soltar a arma muito rápido, continuo saqueando-a porque na verdade ela está indo aqui e verificando se eu consigo interagir com ela Mesmo sendo o mesmo jogador, o mesmo jogador que solta a arma pode interagir com Então, isso é algo que temos que corrigir. No entanto, no momento, o código está funcionando. Só podemos interagir com ele sempre que isso acontecer. Portanto, não obtemos nenhuma caixa por ela ser invisível. Então, vamos para a próxima lição. 109. 8.24 Removendo interação do Dropping Player: Tudo bem, agora precisamos escrever um bom código aqui antes que isso funcione. Como queremos ter certeza de que o jogador que está soltando a arma agora, queremos garantir que o jogador que essas informações não as esteja saqueando Novamente, só queremos que o outro cara saqueie as informações. Não queremos interagir com ele imediatamente, caso contrário, você continuará saqueando Precisamos definir a arma caída. Deixe-me ir em frente e fazer um novo evento para clientes. E vamos chamar isso de um conjunto de arma caída. E vamos executá-lo novamente no servidor. Conjunto de servidores descartado. Em seguida, precisamos executar isso no servidor e ser confiáveis, e precisamos executar o evento normal aqui, ativar a arma solta. Ok, aqui embaixo, nós simplesmente precisamos definir essa variável. Vou clicar aqui adicionar uma nova variável. É apenas a base de armas porque precisamos da arma. Vamos chamar isso de arma caída. Vamos conectá-lo aqui também. Para este, vamos promovê-lo para uma variável e, digamos, arma caída. Agora, acho que não precisamos replicá-lo, porque acho que só precisamos executá-lo por meio do servidor Mas eu realmente não posso determinar isso por enquanto. Vamos fazer o código e, mais tarde, se realmente usarmos isso também no cliente, precisamos replicá-lo Por enquanto, vamos deixar que não seja replicado. Gosto que as coisas não sejam replicadas quando não precisam ser replicadas Porque lembre-se de que quanto mais informações você replicar, mais lento será o jogo Porque você está enviando informações do servidor para o cliente. Quanto mais informações você envia, menos desempenho. Apenas mantenha as coisas não replicadas sempre que puder. Agora temos essa arma caída. Agora, quando você saqueia coisas aqui, quando está interagindo com elas na base de armas, precisamos ter certeza de que você não saqueia a O que eu preciso fazer aqui é do player, antes de fazer tudo isso, eu posso arrastá-lo para longe. Antes de fazer tudo isso, posso pegar isso e dizer abandonado. Nós levamos isso aqui. Se a arma caída for igual a eu, essa arma, eu estou tentando saquear agora Se for igual, não faça nada. Se não for igual, vamos excluir isso e dizer que não é igual. Isso será melhor para facilitar a leitura. Se a arma caída não for igual à arma com a qual estou tentando interagir no momento , podemos saqueá-la No entanto, se for o mesmo, não faça nada. No momento, não definimos a arma caída. Vamos realmente fazer isso. Deixe-me dizer isso. Deixe-me voltar para a base de jogadores aqui em cima. Sempre que soltamos a arma, vamos realmente colocar a arma e defini-la. Deixe-me chamar esse evento aqui embaixo. Arma soltada, deixe-me chamá-la aqui. E a arma caída é simplesmente essa. Você pode simplesmente ligar para este aqui. E vamos aproximar tudo, como antes. Vamos compilar e salvar tudo. Tudo bem, agora podemos experimentá-lo. Vamos clicar em Jogar e jogar como terrorista. Agora, se eu saqueio algo e o faço, você pode ver que não estou interagindo com O problema dessa arma caída continua o mesmo. Então, na verdade, nunca mais poderei saquear essa arma. Temos que removê-lo sempre que quiser. Você pode ver aqui, sempre que eu carrego e solto, eu venho aqui novamente, você pode ver que não consigo carregá-lo. No entanto, sempre que saímos dessa esfera de colisão, preciso redefinir essa variável de arma solta Podemos fazer isso na base de armas novamente. Lembre-se de que usamos o componente on start overlap. Agora, o que podemos usar se você clicar na esfera de colisão novamente e descer, você pode usar esta na sobreposição de colisão Agora você pode usar isso para remover a definição da arma caída. Agora, o que podemos fazer é, como antes, copiar Este ator tem um player técnico porque queremos ter certeza de que é o jogador saindo dessa esfera de colisão Vamos conectar isso novamente. O Switch tem porque queremos ter certeza de é o servidor que lida com tudo isso para evitar fraudes A única coisa que queremos fazer é ajustar a arma solta da mesma forma que reinicializar a variável. Pegue isso e diga para obter informações do jogador. Ou obtenha a referência do jogador. Na verdade, não é informação, obtenha a referência do jogador. Vamos conectá-lo. Vamos chamar o conjunto de arma caída e transformá-lo em nada. Estamos apenas redefinindo a variável. Tudo bem, aqui está. Vamos compilar e salvar tudo. E vamos tentar lutar. Clique em jogar e eu coloco o terrorista. Agora eu me deparo com o. Em quatro, eu o deixo cair, eu fico sem ele, eu corro para ele. Agora você pode ver que está funcionando perfeitamente. Eu não o saqueio instantaneamente, só o saqueio sempre que saio dessa esfera de interação E eu entro novamente. Eu posso saquear a arma. Agora vamos tentar clicar em play. E jogue como dois jogadores. Agora, se eu minimizar esse cliente, na verdade esse é o servidor. Vamos jogar como cliente e também como cliente. Eu posso saqueá-los em quatro. O servidor tem uma aparência bonita. Eu posso largar isso. Parece correto. Eu posso saqueá-lo novamente. Parece correto. Ok. Eu posso tentar te dar essa arma aqui. Eu vou largar isso. Esse cara agora o saqueia. Eu posso esquecer isso desse cara. Agora eu não posso realmente saqueá-lo. Às vezes, ele se apaga, você pode ver que às vezes quando eu solto , ele realmente se apaga. Eu não o perco instantaneamente. Essa é a esfera de colisão, você pode ver aqui. Eu não posso mais saqueá-lo. Estou tentando entrar nela. Não posso saqueá-lo aqui como servidor. Isso ocorre porque o outro jogador está realmente de pé sobre ele e está sofrendo a colisão daquele outro jogador que está em cima dele Sempre que o novo jogador tenta se conectar ou interagir com ele, na verdade não está fazendo nada. O problema agora com essa sobreposição inicial é que ela está verificando apenas um jogador Se houver vários jogadores sobrepondo essa esfera de colisão, na verdade ela está um pouco incomodada Temos que consertar isso também. Você pode ver que temos muitas coisas para consertar e essa é simplesmente a natureza dos jogos. Você continua tendo problemas que precisa resolver, mas é muito bom quando tudo está funcionando e tudo está escrito. Agora vamos para a próxima lição e continuaremos aprimorando o código. 110. Melhoria da interação do jogador de arma 8.25: Tudo bem, bem-vindo de volta. Agora, vamos melhorar esse código para garantir que, embora vários jogadores estejam interagindo com a esfera de colisão, isso é levado em consideração agora quando garantimos que podemos interagir com essa arma Agora, em vez de apenas fazer isso aqui, deixe-me arrastar esse código para longe. Deixe-me arrastar isso para baixo e deixe-me arrastar isso para que tenhamos mais espaço para trabalhar. A maneira como você interage com várias coisas é escrever clicar e dizer, obter atores sobrepostos Agora você tem todos os atores sobrepostos. Eu posso pegar todos os jogadores que estão se sobrepondo. Essa aqui, que está se sobrepondo, é a base de jogadores É a base de jogadores, o que significa que todos os jogadores estão aqui para esta. Agora posso perguntar se o comprimento é maior que um ou se o comprimento é realmente um. Eu posso tirar disso e dizer o comprimento. Posso perguntar se isso é maior que um. Porque se não for maior que um, significa que é apenas um jogador interagindo com ele Essa é uma informação crucial. Se for maior que um, eu posso fazer alguma coisa. No entanto, se não for maior que um, posso pegar isso e obter o primeiro índice, ou seja, apenas esse jogador, esse jogador. E agora eu posso conectá-lo a este. Em vez de tirar isso desse outro ator, agora posso pegá-lo desse jogador sobreposto E eu posso conectá-lo aqui se for menor ou não maior que um, o que significa que é apenas um jogador que está interagindo com essa esfera de colisão Eu posso pegar esse jogador aqui do índice zero, e eu posso conectar esse jogador aqui. Ok, então está funcionando perfeitamente. No entanto, e se tivermos vários jogadores? No momento, estou apenas verificando se é um jogador. Então, se você tem vários jogadores sobrepondo essa esfera de colisão, preciso examiná-los Eu posso pegar todos esses atores sobrepostos, eu posso dizer. Ou cada loop com intervalo. Quero ter certeza de que quem soltou a arma não interaja com essa arma que tenho no Eu posso conectar isso Agora eu posso partir daqui e dizer obter referência do jogador. Agora, para cada um desses jogadores, o que eu posso fazer agora é pegar a arma caída. Posso perguntar: essa arma caída para esse jogador que estou examinando agora não é igual Na verdade, estamos apenas escrevendo o mesmo código que aqui embaixo. Se não for igual à arma que estou tentando saquear agora , posso ir em frente e saquear a Estou percorrendo cada jogador. Estou tentando encontrar o jogador que ainda não soltou a arma. Se for verdade, deixe-me clicar aqui e promovê-los como uma variável E chame esse jogador interativo. Deixe-me configurá-lo para aqui. Vá em frente e configure para fazer algumas anotações de redirecionamento para que pareça muito melhor Agora, quando definimos essa variável, o que podemos fazer agora está aqui na íntegra Quando eu encontrar meu player interativo, quero pegar isso e quebrar o loop Lembre-se, sempre quebre o loop para não colocar nenhuma caixa aqui. Seu código também será muito mais otimizado porque você não percorre tudo. Eu quebro o código, quebro o loop. Agora eu tenho o player interativo. O que eu posso fazer agora. Agora precisamos examinar o inventário. Porque não precisamos executar tudo isso aqui. Nós já fizemos isso aqui em cima. Portanto, precisamos examinar diretamente o inventário do jogador que está interagindo Em vez de partir daqui, na verdade, basta que o jogador interagindo agora passe por isso aqui em cima, um jogador e você passe por isso aqui O que você pode fazer é clicar com o botão direito sobre este e promovê-lo. Ou simplesmente pegue aqui. Esse é o jogador interativo. Agora, se for apenas um jogador e ele passar por isso e executar corretamente, você pode fazer isso. Em vez de fazer tudo isso, você sempre pode simplesmente pegá-lo daqui agora e conectá-lo aqui para que eu possa mover meu código um pouco para que não fique muito confuso Assim mesmo. Agora estou apenas usando esse player interativo Você pode pegar isso e conectá-lo aqui. Na verdade, não assim. Não sei por que eu o configuro, arrasto para fora, conectei aqui. Em vez de partir diretamente disso, agora estamos apenas usando isso, essa variável que definimos. Na verdade, vou deletar este e apenas conectá-lo a cada um deles. Assim mesmo. Ou o que você pode fazer. Na verdade, vou usá-lo várias vezes. Vou usar o player interativo aqui. Eu também vou copiá-lo aqui neste. E você não precisa desse. Eu posso simplesmente conectá-lo diretamente, sem mais nem menos. Eu também posso conectá-lo aqui. Estou apenas substituindo as notas artísticas traseiras para que pareçam muito melhores pois esta vai para esta aqui. Vou excluir as notas artísticas traseiras. E apenas conectá-lo aqui, parece muito melhor do que Agora estamos examinando isso. Estamos configurando o jogador que interage e agora estamos percorrendo o inventário Tudo bem, agora eu organizei isso. Agora, como você pode ver, estamos pegando a variável interativa do player e a executando por meio do código Estamos nos certificando de que seja o jogador interativo que possa interagir com tudo isso Vamos testar esse código. Vamos clicar em jogar. E vamos jogar como terroristas, por exemplo. Deixe-me jogar como cliente. Novamente, selecione Terrorista. Deixe-me perder alguma coisa. Deixe-me saquear essa pistola. Eu vou até o jogador, vou deixá-lo para o jogador. O jogador deve saqueá-lo. Vou devolvê-lo. Agora você pode ver que esse jogador o saqueia. Vou devolvê-lo. Esse jogador a saqueia, eu vou devolvê-la Agora você pode ver que agora está funcionando e tudo está funcionando bem. Se eu deixá-lo aqui, não posso interagir com ele a menos que eu saia dessa esfera e corra de volta para ela. No entanto, mesmo estando na minha frente, esse cara pode saqueá-lo sem nenhum problema Agora você pode ver que tudo está funcionando corretamente agora. Incrível. Agora, na verdade, parece mais um jogo do que apenas um protótipo Estamos chegando mais perto nossa meta e você pode ver que tudo está bem É muito divertido de jogar e será muito mais divertido agora, quando adicionarmos o disparo, o recarregamento e assim por diante Como você pode ver, tudo está funcionando bem. Se eu de alguma forma notar alguma caixa no futuro, vou fazer alguns vídeos para eliminá-las. Ou você sempre pode visitar Pixel Helmet.com ou você pode visitar meu servidor Discord Se você encontrar alguma caixa que eu não tenha percebido, estou sempre consertando e mostrando como consertá-la, mas por enquanto não podemos realmente ver nenhuma caixa. Tudo parece funcionar perfeitamente. Eu vou melhorar o jogo mais tarde. Por exemplo, podemos melhorar o que achamos que parece ruim. Parece iniciante que sempre podemos consertá-los. Aqui estou testando-o como servidor e clientes. Eu também posso entregá-lo ao cliente. Eles podem soltá-lo para frente e para trás. Eu posso jogá-lo no chão. O outro jogador pode entrar nela e saqueá-la. Eu posso colocá-lo aqui como servidor. O cliente também pode se deparar com ele e saqueá-lo. Você pode ver que realmente não temos nenhuma caixa no momento e tudo está funcionando perfeitamente no futuro. Novamente, você pode visitar meu site ou servidor do Discord novamente, Pixel Helmet.com, e eu me certificarei de que, se alguma caixa aparecer de alguma forma durante o desenvolvimento do jogo, sempre poderemos corrigi-la Mas, por enquanto, tudo está funcionando. Tudo está bem. Vamos passar para a próxima lição. 111. 8.26 Arma de saque com chave do teclado: Vamos agora adicionar algumas teclas do teclado para saquear as armas Antes de fazer isso, quero aumentar o tamanho da minha interface do usuário. Alguém me disse que é difícil acompanhar quando meu UIize é pequeno Se você também quiser aumentar o seu, clique em Ferramentas e depois em depurar e depois no refletor de widgit Vou aumentá-lo para 1,2. Talvez seja mais fácil para você seguir. Você pode ver que minha interface de usuário está maior, agora me avise se isso ajuda ou se devo transformá-la novamente em uma. Feito isso, vamos prosseguir com a entrada e fazer uma nova ação de entrada, certo? Novamente, você pode fazer isso sozinho, se desejar. Nós já fizemos muitos deles. Vamos clicar com o botão direito do mouse e ir para Entrada e ir para a ação de entrada. Vamos chamar isso de arma única. Então, para este, vamos prosseguir com a ação de mapeamento de entrada. Vou clicar no sinal positivo aqui em cima e descer aqui e adicionar esse lote de ações de entrada de armas. Vou pressionar minha Ekey para saquear a arma novamente. Aqui, para ver os gatilhos, vou configurá-lo para pressionar, salvar e fechar Vamos voltar para o jogador. Ok, dentro daqui. A propósito, vamos limpar tudo isso em breve em algumas aulas. Porque você pode ver que fizemos muito e também precisamos nos organizar um pouco antes de continuarmos. Antes de fazermos isso, vamos até aqui e clicar com o botão direito do mouse e procurar a arma A lot. E escolha esse evento. Ok. O que eu quero fazer é que, ao pressionar meu EK, quero carregar qualquer arma que esteja embaixo de mim O que precisamos fazer é criar uma nova função porque já temos uma aqui. Deixe-me ver aqui. Já temos essa chamada arma Lot. Essa arma de lote. Lembre-se de que adicionamos uma arma de sobreposição daquela que chamamos de arma de saque Basicamente, não é saquear uma arma diretamente. É mais como se estivéssemos solicitando o saque uma arma se encontrássemos uma arma sobreposta Se eu conseguir encontrá-la novamente aqui, se eu encontrar uma arma sobreposta, então eu posso ir em frente e saqueá-la Vamos criar um novo evento personalizado. E essa que vamos chamar de arma de lote de requisição. E vamos executá-lo por meio do servidor e de forma confiável. E vamos ligar para cá quando pressionarmos a tecla E. Vamos chamar o SRV Request Lot Weapon. Ok, então primeiro vamos verificar se estamos sobrepondo alguma arma porque não queremos jogar o código. Se estivermos aqui e não tivermos nenhuma arma embaixo de nós, isso não faria nenhum sentido. Vamos clicar com o botão direito do mouse e dizer isso. Atores sobrepostos. E vamos mudar essa para a base de armas. Estamos nos certificando de que estamos sobrepondo a uma arma. Vamos atacar a partir daqui e dizer que não está vazio. Isso apenas verifica se estamos realmente sobrepondo a uma arma. Pelo menos. Vamos atacar aqui e fazer um galho, e ir em frente e conectá-lo. Quando temos uma arma aqui, se ela não estiver vazia, isso significa que estamos sobrepondo a uma Temos que verificar se já temos essa arma no inventário. Porque se você já está segurando essa arma nas costas ou na mão, precisa soltar a arma atual. Você não pode ter duas pistolas ao mesmo tempo e não pode ter dois rifles ao mesmo tempo É claro que você pode fazer isso para seu próprio jogo, mas para este jogo que estamos criando, você só pode ter um rifle, pistola, uma granada ou faca ou qualquer outra coisa para Digamos que aqui, vamos tentar encontrá-lo em nosso inventário. Lembre-se de que já estamos fazendo tudo isso. Na verdade, vou pegar isso e copiar tudo isso aqui. Vou copiar isso aqui e colar aqui porque estamos fazendo o inventário e depois verificando se já temos essa arma por meio desse tipo de arma. Para esse tipo aqui embaixo, é simplesmente a arma que estamos sobrepondo Então, vou me arrastar daqui e dizer recebe. E então vamos pegar uma cópia. E vamos obter o índice de um. Se estivermos sobrepondo várias armas, obteremos apenas o índice zero aqui e vamos verificá-lo Ok, então o que precisamos fazer, assim como antes, precisamos obter o nome deste. Não podemos realmente dizer o nome da arma agora e obter essa variável porque esta, se você segurar o mouse sobre ela, é apenas uma referência geral do objeto ator. Lembra dessa? Este é o BP, objeto baseado em arma ou referência de objeto Portanto, se você tiver apenas um general para referenciar, primeiro precisará transformá-lo nessa base de armas. Para este, temos que obter a referência da arma. Acho que não fizemos isso aqui. Nas interfaces que não fizemos, obtenha a referência da arma. Novamente, tente fazer isso sozinho, porque já fizemos isso antes, apenas para praticar. Tente fazer com que uma função obtenha referência de arma e tente usá-la aqui. Ok, se você não se lembra, vamos fazer isso juntos. Clique com o botão direito do mouse, vá para Blueprint e escolha a interface Blueprint Vamos chamar isso de uma base de armas. Vamos abri-lo. Digamos que pegue a arma F. Agora vamos compilar. Aqui embaixo, você deve selecionar a qual Eva você está tentando se referir. Estou tentando fazer referência à base de armas, selecioná-la e chamá-la de arma. Vamos compilar e salvar tudo. Vamos voltar aqui. Deixe-me pensar nas armas, vamos abrir a base de armas. E agora vamos para as configurações da classe e adicionar a interface aqui chamada Base de Armas. Vá em frente e selecione Compilar. E agora você pode abri-lo aqui nas interfaces e rastrear a partir daqui e dizer self. Isso é uma autorreferência. Agora definimos essa variável. Agora, o que podemos fazer é voltar para a base de jogadores e aqui podemos arrastar e dizer isso, referência à arma. Agora temos uma referência a essa base de armas. E agora transformamos essa referência geral de ator em uma referência de objeto ou ator base de arma. O que podemos fazer é arrastar isso agora para aqui fazer login como antes. Vamos arrastar e dizer que, na verdade, pode simplesmente copiar e colar tudo isso. Vamos apenas copiá-lo. Não precisamos escrevê-lo 100 vezes. Vá em frente e conecte-o. Na verdade, vou arrastar este aqui abaixo e conectá-lo aqui. Vamos arrastar a partir daqui, fazer uma ramificação e conectar esta. Ok, então antes de ficarmos muito confusos, talvez o que estamos fazendo aqui seja pegar aquela arma com a qual estamos sobrepondo E agora estamos examinando o inventário. Estamos tentando ver se já temos essa arma. Se eu simplesmente não clicar para fazer uma nota traseira para que você possa ver o que está acontecendo. O que estamos fazendo é vasculhar o inventário e verificar se já temos esse tipo de arma em nosso Se tivermos esse tipo de arma, temos que soltá-la primeiro. Digamos que eu esteja saqueando um AK 47 e já tenha um M41 nas minhas costas Eu tenho que largar esse 41. Então, temos que soltar a arma. Lembre-se de que já fizemos aquela arma de lançamento. Nós chamamos isso. Agora não precisamos ligar para este evento daqui. Isso ocorre porque, na verdade, estamos examinando o Não precisamos fazer isso porque já estamos fazendo isso aqui. Na verdade, temos essa parte aqui, mas o que precisamos é dessa parte em que façamos que o jogador não possa interagir com a arma. E a arma será descartada e assim por diante, e será removida do inventário. Na verdade, também configuramos esse tipo de arma. Precisamos de tudo isso, você pode simplesmente colar aqui. No entanto, para uma boa prática de codificação, em vez de apenas copiar e colar, é melhor transformá-la em uma função para que possamos usá-la novamente Vá em frente e aqui no servidor, solte a arma deste. Selecione tudo isso, basta selecionar tudo aqui sem essa ramificação. E clique com o botão direito para entrar em colapso. Para funcionar, transformamos isso em uma função, vamos chamar essa função de arma de soltar. Solte a arma. Deixe-me clicar duas vezes aqui para criar um nó traseiro. É redobrado para esse pino de entrada. Na verdade, se você clicar duas vezes nessa função, eu a deixo um pouco melhor de ver agora. Você pode ver que está um pouco confuso aqui. Isso termina aqui. Deixe-me ver se realmente precisamos fazer alguma coisa. Depois da verdade, ele solta a arma e depois volta e quebra o laço. Isso parece bom. Nós realmente não precisamos fazer nada por aqui. Tudo bem, então agora parece muito melhor. Vamos compilar e salvar agora para este pino de entrada aqui. Vamos chamar isso de arma para soltar. Ok, estamos fazendo tudo isso como antes e estamos apenas interrompendo o ciclo. Estamos apenas fazendo a mesma coisa de antes. Mas agora nós o transformamos em uma função. E agora podemos usar essa função. Se formos até aqui agora e descobrirmos que temos isso em nosso inventário, agora podemos pegar essa arma. E agora podemos selecionar. Que arma você quer soltar? Quero colocar essa arma no meu inventário que acabei de encontrar. Então eu posso arrastar isso e conectá-lo aqui. Vou clicar para fazer anotações de rock. Ok, agora vamos usar a arma. A próxima coisa que precisamos fazer é adicioná-la às sobreposições aqui. Porque quando o adicionamos às sobreposições, lembre-se de que o adicionamos à matriz de sobreposições e depois começamos a saquear a arma Precisamos chamar isso de arma de sobreposição de anúncios. Vamos até aqui e digamos que adicione uma arma sobreposta. E agora precisamos selecionar de qual arma estamos falando? A arma da qual estamos falando é essa. Lembre-se, não é esse. Porque você não pode arrastar daqui e conectá-lo aqui. Isso não funcionará porque lembre-se de que essa é apenas uma referência normal de objeto ator. E este precisa de uma referência de objeto base de arma. Lembre-se, você já fez isso aqui. Então você pode arrastar a partir deste e conectá-lo aqui. Novamente, clique duas vezes para fazer anotações de redirecionamento. Aqui está. Lembre-se de que quando você encontrou isso em seu inventário e terminou com tudo isso, lembre-se de arrastar a partir deste e também quebrar o loop, para não continuar o loop. Então, novamente, clique duas vezes e faça anotações aqui também. Ok, antes de terminarmos isso aqui no loop, lembre-se de que quando você solta uma arma também, se você subir aqui para pegar a arma de soltar, você a configura para interagir novamente e assim por diante Então, vamos copiar tudo isso novamente, e vamos até aqui e colá-lo aqui. Só assim, porque lembre-se de que você está usando essa arma de soltar e, dentro dela, está fazendo com que não possa interagir com uma arma. Então você tem que fazer isso para poder interagir novamente. E adicionamos isso ao seu completo. Agora, se você clicar em jogar, podemos selecionar Terrorista. Vamos correr por aí, pegar essas armas. Agora, se clicarmos no K, você verá que nada está realmente acontecendo agora. Se eu sair e, novamente, algo estiver incomodando. E também temos um erro aqui. Se eu clicar nele, estou apenas dizendo que este não pode ser encontrado. Não se preocupe com esse. Isso está relacionado a outra coisa que corrigiremos posteriormente. Mas, por enquanto, você pode ver que eu deixei cair a arma e adicionei a sobreposição da arma, mas por algum motivo ela não está pegando Em vez de remover isso do vídeo e fornecer a solução, tentarei mostrar como costumo depurar erros Esse é um bom lugar para fazer isso. Agora estamos soltando a arma. Então, sabemos que todo esse código funciona. Porque chega ao ponto em que realmente derruba a arma de você. Mas algo está errado aqui, desde o início, quando se adiciona uma arma de sobreposição Agora, ao depurar, você precisa adicionar uma string de impressão Chamamos esse evento aqui. Deixe-me adicionar uma string de impressão aqui. Pesquise a sequência de caracteres impressos, selecione-a e ela deverá dizer olá aqui. Quando eu aludi, eu seleciono Terraço. Agora eu vou para o AK. Deixe-me, na verdade, eu não pego essa. Deixe-me clicar aqui. Você pode ver no canto aqui em cima, que diz Olá. O código chega a essa parte corretamente. Agora preciso verificar se isso está correto. Agora eu acho que esse está errado. Mas nós podemos. A primeira coisa aqui, vou verificar aqui se essa vez está realmente funcionando ou não. Vamos clicar em Jogar. Selecione Terrorist. Vá em frente e selecione ou pegue isso. Clique aqui no AK e você não verá nada impresso. Agora eu sei que essa parte do código funciona, mas essa parte não funciona. Nunca chega ao ponto em que realmente perde a arma. Há algo errado aqui com essa parte do código. Talvez nunca abra. Esta nota novamente. Diz que pode pilhar armas novamente. Lembre-se de que este é um nó e ele só faz esse código uma vez até abrirmos aqui reiniciarmos esse nó. Faz isso de novo. Há algo com essa arma lotada novamente, pode pilhar arma novamente, estamos chamando isso aqui. Há algo errado com essa parte. Talvez não estejamos removendo as coisas corretamente dessas armas de colo oval. O que podemos fazer é sempre clicar aqui e imprimir uma string. Vamos imprimir uma sequência aqui e ver o que acontece se eu clicar em jogar agora e pegar o terrorista. Eu perdi tudo isso. Agora você o vê removido. Em vez de fazer tudo isso, vamos sair desse índice. Na verdade, sabemos o que é. Removendo a sobreposição que aparece, estamos obtendo o índice e o removendo Deixe-me conectar isso aqui, eu posso realmente ver o que estou removendo. Reprodução física de lúteos. Remova o ph. Ele faz isso como você pode ver aqui. Se eu saquear a pistola, ele deve remover a pistola, mas você pode ver que nada Isso porque ele está removendo apenas o Inp, mas não a pistola Algo está errado e o que estamos fazendo de errado aqui é que agora só estamos removendo essas coisas sempre que estivermos desarmados Se eu clicar em Jogar e jogar agora, sempre que estiver no estado desarmado, ele será removido corretamente no momento No entanto, se eu não estiver mais desarmado, ele realmente executará esse código aqui E nunca executará essa parte do código. O que precisamos fazer aqui, mesmo não estando desarmados, remover tudo o que saqueamos após a primeira Se saquearmos as informações, não estaremos mais desarmados Quando saqueamos a pistola, ela roda nesta parte e não fazemos nada Na verdade, o que precisamos fazer é sair daqui e também remover a pistola que saqueamos após a informação Então vá em frente e conecte-o a este removedor. E vamos compilar agora. Vamos clicar em Play e ver se nosso código funciona. Agora, se eu saquear este, agora se formos para o AK e se eu clicar em E, agora você pode ver que funciona corretamente Se eu for até esta, na verdade eu saqueei a pistola, ela saiu. Isso é algo que corrigimos na próxima lição, mas, por enquanto, você pode ver que as informações estão funcionando e, quando sobrepomos a pistola, precisamos corrigir esse problema e pronto Mas você pode ver que está saqueando os rifles corretamente, nada mais errado. Isso é o que fizemos desenhando antes. Você também precisa adicionar algumas notas reescritas aqui. Tudo bem, vamos compilar. A próxima coisa é, veja aqui, se pressionarmos E, eu continuo enviando spam no meu teclado e gosto Você pode ver que temos algum erro aqui e diz: Access não está tentando ler a propriedade saqueada da arma Há algum erro aqui e vamos corrigir isso na próxima lição. Bem como a era aqui embaixo que às vezes acontece. Por enquanto, tudo está funcionando, vamos salvar tudo e passar para a próxima lição. 112. 8.27 Definindo o tipo de item equipado corretamente: OK. Antes de corrigirmos o acesso, não há erros. No momento, o que você pode ver aqui é quando clicamos em jogar e saqueamos as informações e a pistola E quando eu vou até uma pistola e pressiono E, ela muda para o modo de visão da pistola Isso ocorre porque lembre-se de que, na arma de soltar, definimos que você deve simplesmente mudar para desarmado sempre que soltar a arma Agora temos que melhorar isso porque quando você está segurando um rifle, não queremos passar para o lado desarmado Ou quando você está trocando a arma nas costas, você não quer mudar para desarmado O que podemos fazer aqui, muito simples, é pegar a arma equipada. No momento, tipo de arma equipada. Vamos tentar perguntar se é o mesmo que estamos deixando cair Se o tipo de arma equipada for o mesmo da arma que estamos lançando, isso significa que devemos ir para a desarmada No entanto, se estamos soltando uma arma que não estamos segurando no momento, não devemos ir desarmados porque ela estava nas nossas costas E não precisamos trocar o tipo de arma aqui. Vamos arrastar a partir daqui e dizer igual. Vamos pegar a arma que estamos soltando agora. Vamos arrastar a partir daqui. Digamos, por exemplo, o nome da arma. Vamos pegar o nome da arma novamente. Digamos que obtenha informações sobre armas. Essa. Vamos quebrar isso. Vamos pegar o tipo aqui e conectá-lo. E pergunte se é o mesmo aqui. Vamos conectar essa filial e deixar eu organizar isso. Agora, o que estamos perguntando é se a arma que estamos soltando é do mesmo tipo que a que estamos segurando agora? Se for, vamos mudar para desarmados. Se não for, não faremos nada. Não vamos trocar. Vamos compilar agora e vamos ver se funciona. Então, se eu for aqui e pegar o rifle e clicar na pistola, você pode ver que ela solta a outra pistola que eu estava segurando agora, ela não está mais mudando para o estado de movimento errado Se eu falar isso também, você pode ver que a mesma coisa está acontecendo, ok? Agora isso está funcionando e a única coisa agora é que temos um eixo sem era. E vamos fazer isso. Vamos corrigir isso na próxima lição. 113. 8.28 Corrigindo o erro de saque "Acesso a nenhum": Ok, então o problema agora com o não acesso é se estamos tentando enviar spam para a chave. Se eu continuar enviando spam para a tecla E para saquear uma arma, isso me dará um acesso Se eu tentar isso aqui. Se eu tentar enviar spam para a chave desse jeito e clicar em escapar, vejo que estamos chegando nessa era dizendo acesso, tentando ler a propriedade, arma saqueada Esse único acesso não significa que essa variável está vazia. E isso provavelmente é porque estamos reconfigurando aqui. E ele não tem a chance de processar todo o código antes de tentarmos saquear novamente. Porque se você enviar spam para a chave de saque, você está simplesmente enviando spam para todo esse E ele chega a esse ponto e depois atinge esse ponto ao mesmo tempo e diz acesso nenhum. Fica confuso. O que podemos fazer é impedir que o jogador saqueie sempre que ele estiver realmente saqueando a arma Se eu for até aqui e criar uma nova variável, vamos chamar essa variável de arma de saque Compile este quando estivermos saqueando a arma. Vamos pegar isso e dizer que uma arma de saque é verdadeira Sempre que terminar de saquear a arma, podemos pegar isso e dizer falso Ok, isso evita que o jogador envie spam para o código. Temos que fazer isso aqui quando pressionamos a tecla, temos que dizer ao jogador que você não pode fazer isso sempre que estiver saqueando Arraste daqui e diga “não é bobagem”. Quando você não está saqueando uma arma, podemos fazer um galho e dizer que agora você pode ir em frente e solicitar a arma perdida Quando isso é definido como verdadeiro aqui, quando começa a saquear a arma, você não pode fazer nada Mas quando terminarmos de saquear a arma aqui, você pode prosseguir e solicitar o saque de uma nova Agora, este vai te dar um problema, e talvez você já possa ver qual é o problema. Agora, se eu for como cliente e tentar saquear a arma aqui, você pode ver que isso está me causando um problema No momento, se você se lembra, estamos no modo multijogador. E este agora, você está configurando por meio do servidor e aqui você está tentando usar essa variável no cliente. Lembre-se de que você pode arrastar e escrever uma string de impressão para ver se está no servidor ou no cliente. Se eu jogar aqui como servidor e pressionar, você pode ver que imprimo hello como servidor. Mas se eu jogo aqui como cliente, agora eu jogo e pressiono. Você pode ver que estou enviando spam para isso como cliente. Eu posso jogar esse código por meio do servidor e do cliente. Isso significa que também estamos no cliente. Quando estamos aqui, você está usando a variável no cliente, mas está configurando-a no servidor. Lembre-se de que, como servidor, você precisa replicar as informações de volta para o cliente, caso contrário, o cliente não terá chance de saber se isso é verdadeiro ou falso Quando você configura algo no servidor e precisa usá-lo no cliente, precisa replicar essas informações de volta para o cliente. Vamos compilar e salvar Então, agora, se eu jogar como cliente e clicar em jogar, vamos experimentar aqui como terrorista. Vamos pegar as armas e me deixar ir até K. Eu continuo, tudo está funcionando agora Ok, está funcionando. E também posso trocar minha pistola na parte traseira e também posso trocar essa Você tem que fazer isso se eu enviar spam agora, enviando spam para minha chave de lote, defina um atraso, se desejar Se você não quiser que o jogador troque isso rapidamente, você pode definir um atraso para o saque Mas, como você pode ver aqui , está funcionando corretamente. E se eu clicar em Escape, você pode ver que não recebemos nenhum erro. Isso ocorre porque, na verdade, está esperando que isso seja falso antes que o jogador tenha a chance de saquear novamente. Mas o jogador não percebe isso porque o código está sendo executado muito rápido. Mas agora estabelecemos essa barreira e tudo está funcionando corretamente. Às vezes, se disser erro com armas, você está tentando cair. Se você está tentando jogar aqui e está tentando enviar spam para a tecla, eu pressiono escape. No momento, não estou cometendo nenhum erro, mas se você tiver uma era no futuro, sempre poderá aceitar isso. Essa é a era que tínhamos antes. Você pode clicar com o botão direito do mouse em converter isso em um get validado, certifique-se de que seja válido antes de fazermos tudo isso Sim, é assim que você se livra da era anterior à nossa, em que você realmente ganhou uma era ao largar a arma Você pode ver que estou tentando enviar spam. Nada está acontecendo. Acho que está consertado. Mas se você tiver esse problema, sempre poderá fazer isso. Vamos compilar e salvar tudo. Por enquanto. Vamos passar para a próxima lição. 114. 8.29 Limpando o código: Ok, então antes de continuarmos, o que eu quero que você faça é limpar todo esse projeto porque está ficando muito grande e precisamos consertar algumas coisas. Se pudermos otimizar as coisas e pudermos comentar algumas coisas, será muito melhor fazer isso agora do que mais tarde, antes que fique muito complexo. Então, o que eu quero que você faça, por exemplo, você pode ir aqui até o Início. Jogue. Tente fazer anotações da rota traseira, se ainda não tiver feito isso. E você pode selecionar tudo. Clique em C no teclado e você pode, por exemplo, escrever start, Play. Isso é melhor do que não ter nada aqui no código. E você pode clicar nele. Você pode clicar na cor do comentário, você pode alterar a cor do comentário para algo. Por exemplo, eu posso escolher essa cor azul púrpura. Posso reduzir a saturação 20,75 e posso colocar o alfa 20,25 Apenas tente estilizar isso da melhor maneira possível. Além disso, por exemplo, posso transformar o texto em 24, para que eu possa lê-lo muito melhor quando estou com o zoom reduzido Mas você pode ver aqui. E você também pode salvar a cor. Se você clicar aqui e puder clicar e arrastar até aqui, isso é seguro. Agora, quando você comenta algo aqui embaixo, por exemplo, deixe-me arrastar tudo isso e movê-lo para um diesel como este. Então eu não arrasto isso para baixo, arrasto tudo isso para baixo, por exemplo. Você pode comentar essa parte porque essa parte é para seguir os passos O que você pode fazer é clicar neste, por exemplo. Você pode chamar os efeitos sonoros de Playing the Footsteps. Novamente, assim como antes, vou aumentar a frente. E você pode clicar aqui e clicar nessa cor. E isso aplicará automaticamente todas as configurações que você fez aqui. Ok, então eu quero que você comente tudo. Tente tornar tudo o mais organizado possível. Além disso, vou fazer os comentários no meu tempo livre, que você não precise olhar para mim fazendo comentários sobre tudo. Mas lembre-se de que você pode fazer comentários com comentários. Você tem este e digamos que eu queria incluir o movimento com este. Assim, você sempre pode selecionar tudo com o comentário aqui. E você pode fazer um novo comentário e, por exemplo, chamar isso de movimento. Então você tem um comentário principal. E você também pode comentar pequenas coisas aqui dentro . Mas, por enquanto, vou fazer isso no meu tempo livre. O que é mais importante agora é ver se podemos melhorar o código de alguma forma. Na verdade, podemos. Se formos até aqui, você pode ver que já usamos este antes. Muitas vezes estamos fazendo o inventário e entrando em um loop e tentando encontrar esse item dentro do inventário. Estamos fazendo isso há algum tempo aqui. Algumas vezes. Também podemos ver que estamos fazendo isso aqui. Então, estamos vasculhando o inventário e obtendo esse tipo de item Acredito que faremos algum outro lugar que não consigo encontrar agora. Mas, por enquanto, vamos realmente transformar isso em uma função e será muito melhor o que podemos fazer. Vamos apenas copiá-lo por enquanto. Vamos copiar essa parte do código aqui. Vamos também copiar esse igual. Vamos apenas copiar e colar aqui. Na verdade, podemos transformar isso em uma função. O que podemos fazer é selecionar tudo isso. Clique com o botão direito. Na verdade, você não pode transformá-lo em uma função porque temos uma macro. Se você disser colapso para funcionar, ele dirá erro e você poderá mostrar a mensagem. E diz que só pode ter um pino de execução. E você pode ver que este tem muitos pinos de execução. O que você pode fazer é clicar com o botão direito do mouse e reduzi-lo a uma macro. Para essa macro, a diferença entre uma função e uma macro é simplesmente que uma macro pode ter vários pinos de execução E as funções só podem ter uma entrada e uma saída, enquanto as macros podem ter vários pinos de execução E você pode ver aqui, essa ramificação que estamos usando é na verdade uma macro e tem vários pinos de execução para essa macro que acabamos de criar Deixe-me clicar aqui e clicar em dois. Vamos chamar isso de M para macro. Vamos chamá-lo de Encontre o tipo de arma no inventário. Isso é simplesmente o que está fazendo. Está tentando encontrar o tipo de arma dentro do nosso inventário. Vamos criar um novo pino de execução aqui. Se você apenas escrever a execução, acho que execute. Na verdade, se você clicar aqui, o tipo, se você apenas escrever execute, na verdade removeremos o texto aqui. Esse é um segredo para a execução da gravação de macros . Vamos conectá-lo aqui. Também precisamos de um pino de execução para quebrar isso mais tarde. Deixe-me fazer um novo pino de execução. Vamos chamar isso de um loop de interrupção. Ok, agora temos isso. Deixe-me conectar isso aqui embaixo. E também precisamos de uma entrada para este. Vamos colocar essa aqui. Deixe-me subir uma vez. Se eu clicar e arrastar isso até aqui, vamos mudar o nome para este. E esse é o tipo de arma a ser encontrada, estamos tentando encontrar esse tipo de arma em nosso inventário. Basta clicar duas vezes nele e fazer algumas anotações de redirecionamento Tudo bem, aqui na saída, precisamos ter tudo isso aqui dentro. Agora vamos primeiro pegar esse corpo de loop e colocá-lo aqui. E já diz loop body. Isso está correto. Vamos agora pegar este e colocá-lo aqui. Em vez do valor de retorno. Estou dizendo que a arma foi encontrada e podemos fazer um galho para ver se isso é verdadeiro ou falso. Agora, para a outra coisa, vou conectar o concluído. Opa, não desse jeito. Pegando isso, conectando-o E, apenas para concluir o ciclo de esclarecimento, também precisaremos da referência da arma posteriormente para que possamos fazer algumas coisas com ela E eu vou movê-la para cá, vamos chamá-la de arma agora. Não importa se ele foi movido para cá, por exemplo. Se eu mover isso para cá ou para cá, isso realmente não importa. É só ficar limpo com o código. Mas eu gosto de ser assim. Novamente, vou clicar duas vezes aqui e fazer algumas anotações de rota , bem como para este pino de execução aqui. Ok, então aqui está e vamos compilar. Agora vamos voltar ao gráfico da van. E agora você pode ver que essa é a macro que criamos. Agora podemos usar este em vez disso, chicotes. Se eu aumentar o zoom novamente para ver essa arma de lançamento. Em vez de fazer isso, já estamos entrando aqui O que posso fazer é excluir isso e, em vez disso, conectar este. Deixe-me afastá-lo um pouco para que eu possa ver o que estou fazendo. Agora. Em vez de fazer tudo isso, já estamos fazendo isso. Vamos deletar esse também. Este tipo de arma equipada. Podemos pegar isso e conectá-lo aqui. Em vez disso. Ou seja, lembre-se de que é isso que estamos tentando comparar com nosso inventário. Isso é a mesma coisa de antes. E se eu conectar esse loop e conectar essa ramificação com aqui. Agora vamos ver, essa arma. Isso é o que precisamos usar para a arma de lançamento. Quando encontrarmos a arma, vou deletar esses três nós de rota. Vou mover isso para mais perto daqui. E vamos quebrar o ciclo depois de soltarmos a arma. Esse código é como antes. Na verdade, está apenas otimizado. Não fizemos nada novo aqui. Estamos apenas criando essa macro para torná-la melhor e mais limpa. Sim, quando o loop estiver concluído, vamos conectar tudo isso novamente, como antes. Agora você pode ver que está muito mais limpo do que antes. É assim que você otimiza o código. Agora você pode usar esse. Deixe-me organizar isso um pouco mais agora. Podemos pegar esse tipo de arma encontrada no inventário. Nós podemos, vamos ver aqui onde tentamos encontrar o item novamente no inventário. Vamos arrastar isso para fora. Vamos deletar este. E exclua este também. Deixe-me conectá-lo por enquanto no corpo do loop. Assim como antes, estamos conectando isso, tudo isso aqui já temos dentro da macro. Vou deletar tudo isso. E esse também. É com isso que estamos tentando comparar esse tipo de arma a partir das informações da arma. O que realmente podemos fazer, mesmo que pareça um pouco confuso, podemos arrastá-la e colocá-la de volta aqui no tipo de arma para encontrar novamente, clicar duas vezes para fazer anotações para que fique melhor O que estamos essencialmente fazendo é a mesma coisa de antes. Sem essa macro, estamos apenas encontrando o tipo e conectando-o para compará-lo com o tipo de arma do inventário Deveria fazer a mesma coisa. Deixe-me dar uma olhada aqui. Está passando pelo galho. Lembre-se de que vamos administrar essa filial aqui. Vamos também clicar duas vezes neles para fazer anotações de rota traseira para este. Para esta arma aqui, a arma para soltá-la é do inventário. Então, estamos tentando retirar a arma do inventário que você possa arrastá-la até aqui e conectá-la. Ok, agora tudo está conectado. E lembre-se de interromper o ciclo a partir daqui. Mais uma vez, arraste, quebre o loop. Eu só quero ver se eu realmente me lembro de fazer isso também com o outro, e eu fiz. Vamos descer, e vou afastar isso um pouco mais. Eles não se sobrepõem, sem mais nem menos. Ok, compile e agora, para concluir o loop, vamos reconectar este aqui embaixo A arma, estamos tentando retirá-la do inventário. E é a arma que estamos tentando saquear. Vamos nos sobrepor exatamente como antes, mas acabamos de torná-lo muito mais limpo do que Por isso, é sempre bom jogar o jogo e apenas testar e ver se tudo está funcionando conforme o esperado. Agora você pode ver que está funcionando exatamente como antes. Sim. Então, tudo está funcionando. momento, há um pequeno erro com o código, que está aqui quando estamos tentando solicitar o saque da arma, estamos tentando compará-la com o inventário, tentando encontrar a arma dentro do nosso inventário Se não tivermos a arma no inventário , terminaremos nesta parte do código. Porque se tivermos a arma no inventário, a arma que estamos tentando saquear, estamos tentando soltar o rifle existente, por exemplo No entanto, se não tivermos um rifle, na verdade vai acabar aqui Em vez disso, vou pegar isso e colocá-lo na sobreposição, porque ainda queremos saquear o item se não o tivermos em nosso Só uma pequena correção para esse código, ok? Todas as outras coisas, eu realmente não vejo mais coisas que possamos tentar melhorar. Mas se você quiser fazer alguma coisa funcionar, por exemplo, esta. Você pode criar uma função ou coisas que deseja que funcionem e tentar limpar. Vá em frente e faça isso agora. No entanto, acho que isso é suficiente e vou comentar tudo. O que você também pode fazer é colocar todas essas variáveis em categorias. Por exemplo, a velocidade aqui, você pode escrever algo na categoria. Por exemplo, propriedades da camada, que podem ser uma categoria. E você pode ver que foi adicionado aqui. E você também pode clicar na velocidade de execução. Clique em Categorias e adicione-as às propriedades do player. O mesmo acontece com o agachamento. Agora você pode ver que eles estão em uma categoria. Você pode limpar todas as variáveis desse jeito. Na verdade, você também pode fazer isso com funções. No entanto, você não pode fazer isso com as funções unrep, você só pode fazer isso com as outras funções que você criou Está bem? Então, com isso dito, vou comentar tudo. E lembre-se de que vou entregar esse projeto para você. E você pode baixá-lo do site para ver tudo isso que eu fiz, todos os comentários e assim por diante. Mas você provavelmente também verá isso na próxima lição. Vou comentar tudo e nos vemos na próxima aula. 115. 8.30 Corrigindo um pequeno problema de replicação: Ok, então antes de continuarmos, vamos voltar para a base de jogadores. Então você pode ver aqui, eu limpei meu projeto, coloquei tudo em ordem, e a única coisa que fiz foi basicamente criar alguns comentários e organizar as coisas um pouco mais. Então, temos o movimento básico do personagem aqui com todas as coisas que fizemos com o agachamento, a caminhada, o salto e assim por diante E aqui embaixo eu tenho o saque e o lançamento da arma, ou temos as sobreposições, o saque da arma e assim por diante E eu também adicionei um comentário para este, certifique-se de que a arma esteja acoplada. o atraso sobre o qual falamos anteriormente, é sempre bom escrever por que você edita esse atraso para que não pareça aleatório e você o exclua por engano no futuro. Ok, então vamos salvar tudo. E agora, antes de continuarmos para a próxima seção, percebi um pequeno bug. Se eu clicar em terrorista aqui e tentar saquear duas coisas, às vezes funciona Então você pode ver que eu saqueei coisas aqui. Na verdade, vou clicar no braço da mola e chegar a algo como 500. Só para que eu possa ver o que está acontecendo e poder jogar novamente. Tenho que fazer isso algumas vezes e às vezes você percebe que o jogador na verdade não está saqueando a arma Então, vou continuar tentando saquear a arma dessa forma e ver se consigo dinheiro para estar Aqui. OK. Então, eu tentei isso algumas vezes e depois de 1 minuto tentando de novo e de novo, você pode ver aqui que está falhando Eu não tenho uma pistola na minha mão. Se eu movê-lo rapidamente para que você possa ver que minha mão não tem uma pistola A pistola está no chão e eu realmente não consigo saqueá-la assim, ela está saindo. No entanto, ele está funcionando no servidor. Então, se eu tivesse o servidor jogando, acho que estamos jogando como dois clientes. Então você pode ver que este é o segundo cliente. Eu entro como o segundo inclinado e olho para esse jogador. Eu posso ver que esse jogador não tem uma pistola. Então você pode ver aqui, não tem nada na mão. Não consigo ver a pistola ainda no chão. E eu também não posso saquear desta vez. O bug está acontecendo porque isso é apenas um problema de replicação Se eu clicar em G para soltar a arma, você pode ver agora que ela está realmente no chão. Se eu voltar e caminhar até a frente dela novamente, você pode ver que estou saqueando a pistola e agora eu realmente tenho a pistola na Então, na verdade, é apenas um problema de replicação e percebi que demorei talvez 1 hora ou 30 minutos apenas tentando depurar e ver o que estava acontecendo porque tudo parecia correto No entanto, o que está errado agora está na arma de saque Se você andar sobre as armas. E o que fiz aqui para pegar esse bug foi passar por cima de duas armas rapidamente. Algo parecido com isso. E eu tento algumas vezes e uma vez você pega o bug, às vezes uma das armas não funciona. Na verdade, isso ocorre porque, quando esse código está em execução e você está tentando saquear a arma por meio desse representante, às vezes, se você passar por cima dele com rapidez suficiente ou no ritmo correto, ele realmente excluirá a arma saqueada E quando o próximo chegar lá, então não tem nada , não será válido. E então tudo isso não acontecerá e você será expulso, e então poderá ver que a arma está no chão Mas se você jogar como servidor, poderá realmente ver que o cliente está segurando a arma. No entanto, para o cliente, o cliente não consegue ver a arma na mão. Eles só conseguem vê-la no chão, mesmo que na verdade a estejam segurando na mão. Eu sabia que era um problema de replicação porque o servidor o examinou corretamente, mas o cliente viu que ele parecia estar no chão, embora devesse estar na mão Na verdade, é esse. Isso é o que está tornando tudo estranho Em vez de excluir a variável da arma saqueada, lembra o que fizemos aqui? Apenas uma rápida caminhada para não ficarmos muito confusos, porque fizemos muito neste curso. O que simplesmente fizemos foi saquear a arma. E depois passamos por isso, saqueamos a arma. Estamos verificando se essas armas sobrepostas não estão vazias. Se não estiver vazio, estamos saqueando a arma. E depois de tudo isso, vamos removê-lo da arma sobreposta E então estamos verificando se há mais armas sobrepostas que precisamos saquear, que nos levarão até que nos levarão Na verdade, deixe-me ver onde está. Ele nos leva até aqui, verifica se há armas sobrepostas e depois tenta saquear a Novamente, ele verifica se está vazio. Agora há menos itens porque removemos o antigo aqui. Agora ele é executado novamente. Digamos que foi só a pistola. Digamos que fosse apenas a pistola e a removemos aqui. Este deve estar vazio agora. E diz que, se não estiver vazio , será falso porque está vazio agora. E então diz, pode saquear arma novamente. Isso vai atrasar isso. Aqui, ele excluirá isso. Lembre-se de que o motivo pelo qual excluímos uma notificação de representante é porque você saqueia a mesma arma repetidamente Lembre-se de que uma notificação não é executada se você a atualizar com o mesmo valor; se eu atualizei com a mesma pistola, na verdade não funcionará Essa é a desvantagem de uma notificação de representante. Se você aplicar exatamente o mesmo valor, ele não será executado. É por isso que, na verdade, excluímos a variável e, em seguida, podemos executá-la novamente. Ok, em vez de fazer isso aqui, apenas uma solução muito simples, podemos começar a partir daqui. Vamos apenas colá-lo em algum lugar por aqui. Em vez disso, não podemos colá-lo aqui porque, na verdade, o estamos usando aqui para definir o estado do movimento ou a arma equipada com firmeza. Podemos adicioná-lo aqui antes de removê-lo deste. Ou você também pode adicioná-lo aqui. Isso não importa. Vou apenas adicionar antes disso aqui e você pode conectá-lo. E então eu vou reorganizar as coisas, certo? Então eu mudei os comentários também. Aqui está, agora, em vez disso, está aqui embaixo. E podemos realmente tê-lo aqui porque estamos tendo esse atraso. Podemos utilizar esse atraso, então não estamos sobrescrevendo essa variável aqui porque, na verdade, temos um atraso E esse código pode ser reproduzido antes de realmente excluirmos a variável. Faz sentido que esteja aqui embaixo. E então nós realmente não precisamos desse atraso, desse atraso. Nós o adicionamos antes porque queríamos esperar que esse código fosse reproduzido. No entanto, para este, vamos apenas excluí-lo. Este, podemos simplesmente conectar de volta. Assim mesmo. Sim, acho que isso vai resolver tudo. Então, vamos salvar tudo. Deixe-me clicar, na verdade, deixe-me mudar para jogar como servidor de escuta. E eu vou jogar com três jogadores. Estou tentando jogar novamente e ver se consigo fazer com que esse livro apareça novamente. Tudo bem, então eu tentei cerca de 40 vezes agora, nada está acontecendo. E parece ter resolvido o problema. Esse foi um problema de replicação. Tudo está funcionando como deveria. Agora, deixe-me clicar na mola e configurá-la para zero. Novamente, compile tudo. Vamos passar para a próxima lição. 116. Ações de entrada de comutação de armas 9.01: Agora é hora de criar a ação de entrada para trocar as armas e tentar fazer isso sozinho. Tente fazer uma ação de entrada chamada arma primária e arma secundária e tente adicioná-las você mesmo. Já fazemos isso há algum tempo. Apenas um desafio legal. E você pode tentar se desafiar. E se você não se lembra, vamos fazer isso juntos. Vamos clicar com o botão direito do mouse aqui e ir para Entrada e Ação de Entrada. Vou fazer isso um pouco mais rápido do que antes, porque sabemos o que estamos fazendo agora Arma primária. Vamos tentar, clique novamente, vá para a ação Entrada de Entrada e crie a arma secundária. Vamos ao contexto do mapeamento de entrada. E, fora daqui, estou clicando duas vezes porque preciso adicionar dois mapeamentos E eu não tenho ideia de por que não me mostra nada. Na verdade, acho que preciso mudar isso antes de adicionar a segunda, uma arma primária. E vou clicar no sinal de mais novamente. Não sei por que eles continuam maximizando. Na verdade, é um pouco irritante Acho que você pode pressionar aqui. Sim, você pode dizer aqui, desmoronar ou expandir. Tudo, você pode derrubar tudo. Acho que talvez funcione. Uma arma secundária? Sim, eles maximizaram novamente sem motivo. Arma primária. Vou clicar na minha única tecla para pegar minha arma principal, que é meu rifle E clique nas duas teclas para pegar minha pistola novamente. Como gatilho, vou escrever pressionado porque só quero tocá-lo uma vez Quando clico no botão, não quero atualizar constantemente. Então, esses dois são adicionados. Agora vamos salvar tudo, vamos fechá-los. E vamos até o jogador. Vamos até a base de jogadores. E aqui dentro, vamos clicar com o botão direito do mouse aqui e dizer arma primária IA. E aqui embaixo, digamos, uma arma secundária IA. Ok, agora temos esses dois eventos. E podemos usá-los para obter nosso rifle ou pistola, se os tivermos no inventário 117. 9.02 Lógica de comutação de armas: Ok, então para a troca de armas, vamos primeiro descer aqui. Vou remover isso para o lado porque não preciso disso primeiro. Só precisamos trabalhar com a arma principal. Então, vamos aqui e criamos um novo evento personalizado. E eu vou percorrer o servidor e vou chamá-lo, vamos chamá-lo de equipar arma Vamos executar este no servidor e de forma confiável. Quando pressionamos uma tecla, por exemplo, a tecla principal da arma, queremos equipar o rifle Quando faço algo assim, tento pensar um passo de cada vez. Não pense dois ou três passos à frente, porque você ficará confuso. E eu também vou ficar confuso, um passo de cada vez. O que precisamos fazer quando precisamos equipar a arma? Primeiro, se você tem essa arma em seu inventário e como você faz isso? Lembre-se de que encontramos esse tipo de arma no inventário. Podemos arrastar isso aqui. O que queremos encontrar é simplesmente o rifle. Porque quando você clica em uma tecla, eu posso realmente arrastar daqui e dizer arma equipada com servidor. Quando clicamos nele, queremos encontrar o rifle. Agora, primeiro, queremos ter certeza ainda não temos o rifle em nossas mãos, caso contrário, não faz sentido reequipar o Vou pegar o que já temos equipado. Então, o tipo de arma equipada, eu vou dizer que se não for igual a um rifle, então podemos prosseguir e realizar este evento Porque se já temos o rifle equipado, não faria nenhum sentido executar tudo isso, ir em frente e conectá-lo aqui Ok, então aqui embaixo, vamos sair desse galho e fazer um galho aqui, ou desse lingote e fazer um galho E sempre que encontrar essa arma no inventário, sempre que encontrar o rifle, eu vou fazer um lingote. E esse lingote é chamado de arma encontrada no inventário. E agora podemos pegar isso aqui e configurá-lo como verdadeiro, sem mais nem menos. E lembre-se de quebrar o ciclo assim: Ok, agora sabemos que ela encontrou a arma no inventário aqui embaixo, concluída. Podemos continuar o código aqui. Estávamos apenas procurando o item no inventário e agora o encontramos. Então, vou aproveitar essa constatação e me certificar que ela é verdadeira somente se for verdadeira. Vamos executar um código. Se não o encontramos no inventário, realmente não precisamos fazer nada. O que eu preciso fazer é equipar a arma. Na verdade, vamos aqui, podemos clicar com o botão direito neste. Esta é a arma que encontramos no inventário. Deixe-me promovê-la a uma variável e chamá-la de arma de equipamento. Agora, o que isso significa, precisa ser replicado ou representado, notificado Você pode tentar responder a pergunta para si mesmo. E por que deveria ser representado, notificado ou replicado? Agora eu vou te dar a resposta. Este precisa ser representado, notificado. E lembre-se, sempre que você tiver alterações visuais. Então, agora o jogador vai segurar o rifle na mão, o que é uma mudança visual Você precisa transformá-la em uma notificação de representante, para poder notificar todos os clientes sobre a mudança visual Então vá em frente e conecte-o aqui. E clique nele e configure-o para notificar o representante. E depois lembre-se também de mudar sua postura. Porque agora, se você clicar nele, você equipará uma arma Então, no momento, não temos isso feito, e faremos isso na próxima lição. Portanto, você também precisa se lembrar de definir o tipo de arma equipada atual pois lembre-se de que fizemos isso aqui. Este está controlando o que está sendo reproduzido dentro do seu plano de animação Vamos até aqui e, digamos, e você pode encontrá-la aqui, definir o tipo de arma equipada. Então, o tipo de arma precisa ser rifle neste caso. Além disso, você precisa definir isso para quedas, porque mais tarde, quando fizermos isso, novamente, será definido como verdadeiro. Lembre-se de configurá-la para cair aqui, precisamos redefinir essa variável também. Precisamos configurá-lo para falls sempre que terminarmos o código Na próxima vez que ele for inserido, ele executará o código corretamente, caso contrário, ele será verdadeiro automaticamente. E ele executará esse código mesmo que não esteja correto. E também quero redefinir essa variável porque, quando tivermos feito tudo isso, lembre-se de que precisamos redefinir a notificação do representante para que ela não saia. E podemos pegar essa arma equipada e reiniciá-la aqui antes de acabarmos com tudo. E talvez precisemos adicionar um atraso aqui para notificar o representante sobre a hora de jogar Mas vamos realmente verificar isso mais tarde. Não sou fã de adicionar atrasos aleatórios. Eu só adiciono atrasos sempre que realmente precisamos , porque atrasos são bons Este não será notado. É 0,05 Nenhum humano jamais notará isso, mas não precisamos realmente adicionar um se realmente não precisarmos Ok, então a segunda coisa que realmente precisamos aqui é se você já está segurando uma arma na mão. Então, por exemplo, se você já está segurando uma pistola, você precisa desequipar essa Na verdade, também precisamos nos desequipar. Então eu preciso perguntar se o jogador está armado ou desarmado. Porque o jogador pode estar segurando uma pistola agora e nós estamos saqueando o rifle e pressionando tecla do rifle e já temos Então precisamos primeiro desequipar a pistola. Vamos, a partir daqui, na verdade, desconectá-lo e arrastá-lo um pouco para baixo Então podemos pegar esse tipo de arma equipada e dizer: é igual a desarmada Vamos fazer uma ramificação aqui e conectá-la aqui novamente. Se for igual a desarmado, vamos seguir em frente e executar o código que criamos anteriormente No entanto, se não estiver desarmado, queremos desequipar a arma que estamos Mais uma vez, encontre a arma no inventário de que estamos falando. De que arma estamos falando? Estamos falando sobre a arma equipada atual que temos. Essa pode ser a pistola agora. Então, quando você encontrar isso, estamos fazendo um galho como antes. Quando você encontrar isso, vamos promovê-la para uma variável e chamá-la de arma não equipada . E vamos entrar em contato com um representante, notificá-lo e conectá-lo aqui Faça algumas anotações da rota traseira. E então, quando isso estiver concluído, porque agora você está executando esse código e está desequipando a arma Mas você tem que equipar essa arma depois. Então, aqui na íntegra, você tem que executar isso aqui novamente. Deixe-me arrastá-lo aqui para abrir espaço e fazer com que pareça muito melhor. E podemos arrastar isso até aqui. Ok, então algo assim parece muito melhor. Estamos verificando se estamos desarmados ou não. Se estivermos desarmados, vamos equipar a arma instantaneamente Se estivermos armados com uma pistola, por exemplo, vamos desequipar a Lembre-se de quebrar o ciclo. Esqueci de conectá-lo aqui. Vamos quebrar o ciclo também. Depois de quebrarmos o ciclo, e ele estiver completo, vamos equipar a arma, a desequipada e a Faremos isso na próxima lição. Mas lembre-se também de reiniciar a arma não equipada para que não recebamos a caixa mais tarde no jogo Sim, acabou a lógica no momento, não podemos realmente testá-lo porque realmente não temos a notificação do representante Vamos pular para a próxima lição e trabalhar nelas. 118. 9.03 Equip e Unequip Weapon RepNotify: Tudo bem, então avise o representante de equipamento não equipado. Isso será muito fácil porque já fizemos isso antes. Se formos até a arma saqueada ou a arma saqueada, se você for ao representante, notifique a arma se você for ao representante, notifique a Se você entrar aqui, lembre-se de que fizemos tudo isso desativando a colisão e assim por diante Então, quando você já tem a arma no inventário, já removemos a física, já removemos a colisão e fizemos tudo isso Então, nós realmente não precisamos fazer tudo isso de novo. Você já fez isso quando saqueou a arma. Então, a única coisa que precisamos fazer é realmente equipá-lo de costas Então, este aqui, conecte o ator a qualquer um desses soquetes Então, vamos apenas duplicar esse código aqui. Vou copiar e vou até minha arma de equipamento e vou colá-la aqui Tudo bem, para este, não é a arma saqueada Eu vou deletá-los. É nossa arma equipada, então vou arrastá-la e conectá-la aqui. E eu vou conectar este aqui. Ok, novamente, vou dar uma olhada aqui e clicar com o botão direito do mouse e dizer converter em um get validado Estou me certificando de que minha variável é válida antes de fazer tudo isso, antes de anexá-la. Lembre-se de que agora sua arma equipada, esta aqui agora, está presa às suas costas. Por exemplo, seu AK 47 antes de segurá-lo na mão, ele é preso às costas do personagem. Primeiro, o que você precisa fazer é realmente separá-lo daquele soquete antigo Você tem que arrastá-lo daqui e dizer separar-se do ator. Vamos separá-lo primeiro da parte de trás. E podemos manter a posição mundial em todos eles. Depois de retirá-lo da parte de trás, podemos seguir em frente. Na verdade, vou excluir esse nó de rota. Vou conectá-lo diretamente aqui. E podemos detalhar isso para que pareça um pouco melhor aqui. E então este você pode realmente excluir e conectá-lo aqui, se desejar. É só para fazer com que pareça um pouco melhor, algo assim. Deixe-me aproximá-los um do outro. Ok, aqui está. Este é o código equipado para os não equipados. Talvez você já tenha adivinhado. Temos que ir até a arma let's para soltar. Já fizemos tudo isso e, na verdade, não caímos no drop. Vamos até a arma saqueada. Precisamos desse código aqui em que você coloca sua pistola, por exemplo, na coxa ao tirar o Vamos copiar tudo isso aqui onde você coloca nas costas ou na coxa E vamos para a arma não equipada, como antes. Vamos colar esse. E deixe-me pegar a arma não equipada e conectá-la aqui Deixe-me deletar esse. Deixe-me repetir, certo, converta em uma conexão validada Na verdade, vamos excluir este e conectá-lo aqui. Antes de fazermos isso, vamos nos separar novamente do ator. E vamos manter a posição no mundo e vamos separá-la do ator E então vamos conectá-lo aqui. Lembre-se também aqui, que estamos usando a arma não equipada, desse jeito Ok, vá em frente como antes. Mova-o para baixo. E aproxime-o, para que fique um pouco melhor. Algo parecido com isso. E vamos continuar compilando e salvando tudo. Ok, agora terminamos com eles e podemos clicar em Play para ver se realmente funciona ou se fizemos alguns livros. E vamos clicar em jogar. Deixe-me aqui, como servidor, jogar como contra-terrorista. Na verdade, vamos jogar como terrorista. Porque as armas estão lá agora. É apenas a única chave que funciona. Então eu preciso eluir o rifle como minha segunda arma. Agora, se eu clicar em um, você pode ver que estou realmente selecionando meu rifle E se eu enviar spam para uma chave, lembre-se de que não podemos enviar spam a única chave se eu fechar isso para que eu possa mostrar a você, porque aqui, vamos encontrar o gráfico de eventos. Na verdade, vou fechar tudo isso. Então, vou mover isso aqui, clicar com o botão direito, fechar as guias à direita Então, é um pouco melhor dar uma olhada aqui. Lembre-se de que fizemos esse lingote para não enviar spam para a chave do rifle, porque se já temos o rifle, não executamos Isso também é bom para otimização. Assim, você não executa código desnecessariamente. Tudo está funcionando bem e, se encontrarmos alguma caixa, sempre poderemos consertá-la. No entanto, tudo está funcionando. A próxima coisa que precisamos fazer é a arma secundária, e vamos fazer isso na próxima lição. 119. 9.04 Equipando a segunda arma: Agora, vamos usar a arma secundária agora. Você pode copiar tudo isso e criar um novo evento. E basta copiar e colar tudo isso e mudar isso para uma pistola No entanto, isso não seria realmente uma boa prática de codificação. Agora lembre-se de que estou tentando te ensinar o melhor código e poderíamos copiar e colar isso aqui embaixo, e funcionaria perfeitamente. No entanto, quando vejo algo copiando e colando, quando vejo um código que precisa ser copiado e colado e a única coisa preciso alterar é um valor, por exemplo, de rifle Eu sempre tento caçar. Eu só tenho esse evento e posso reutilizá-lo em vez de copiar e colar novamente. Sim, podemos tentar pensar por si mesmos como podemos usar esse evento aqui também? Na verdade, funciona aqui e aqui. Sem precisar copiar e colar tudo isso, o que precisamos fazer agora? Podemos postar esse vídeo e você pode voltar. E agora eu vou te dar a resposta. Em vez de tê-la como uma variável estática, podemos tê-la como dinâmica. Podemos arrastar isso para aqui, para este evento. Esse é o tipo de arma a ser encontrada. Na verdade, acredito que precisamos, sim, desse também. Quando trocamos a arma, a animação, essa também precisa entrar nessa. Vamos clicar duas vezes neste e fazer algumas anotações de redirecionamento. Tudo bem, agora nós o conectamos aqui. O que podemos fazer é usar a arma principal para transformá-la em um rifle aqui em vez de aqui embaixo O que podemos fazer aqui é copiar e colar tudo isso. E cole aqui embaixo. Vou conectá-lo agora em vez de um rifle Agora, a arma secundária é uma pistola. Então, se não tivermos uma pistola já equipada, podemos ir em frente e realizar este evento E essa eu vou mudar para pistola agora. Ele vai ter esse valor conectado aqui e agora ele vai procurar por uma pistola Ok, então agora, muito fácil, nós realmente terminamos esta lição. Você pode clicar em jogar e eu posso clicar em terrorista e saquear essas duas armas Eu posso clicar em um para ter meu rifle. Posso clicar em dois para pegar minha pistola. Agora você pode ver que podemos alternar entre essas duas armas sem nenhum problema. E nem copiamos e colamos tudo isso. Acabamos de reutilizar o mesmo. 120. 9.05 Criando montagens de animação: Ok, então o que eu gostaria de fazer agora é que acho que é um pouco barato agora. Porque podemos trocar as armas assim. E seria legal se tivéssemos uma animação ao trocarmos a arma. Se você já jogou Counter Strike antes, quando você troca uma arma, ela meio que recarrega a arma antes que você possa usá-la Vamos fazer algo assim e para esta lição, muito simples. Vamos apenas criar algumas animações ou montagens de animação Vamos clicar nos ativos. Lembre-se, não é a animação , não são as antigas. São os ativos. É nosso personagem. Apenas certifique-se de que é nosso personagem. Em vez disso, vou apenas pesquisar por recarga porque temos algumas animações de recarga que usaremos Agora, eu não tenho animações específicas para tirar sua arma Você provavelmente tem se tiver um projeto sério e quiser fazer algo assim. No entanto, para este, vamos usar a animação de recarga ao arrastar nossa arma E isso também é uma boa prática. Vamos clicar com o botão direito na pistola primeiro. Por exemplo, acesse Criar e crie uma montagem de animação Com a montagem da animação, podemos adicionar, na verdade, algo como recarregar animações, animações disparar a arma e coisas assim sem interromper nossa animação sem interromper E clique na montagem de animação e vamos chamá-la ânion para montagem de animação e chamá-la de pistola Vamos fazer a mesma coisa com o rifle, clique com o botão direito, vá criar uma montagem de animação E chame isso de rifle de recarga. E se você abrir agora, verá que temos uma montagem de animação E temos algumas coisas que podemos fazer aqui. E, na verdade, vamos usar essa parte aqui embaixo para criar um movimento da parte superior do corpo. Então, quando estamos correndo, podemos ter essa outra animação, essa animação de recarga, sem parar nossa animação em execução Então, podemos ter duas animações ao mesmo tempo e é por isso que criamos essa montagem de animação 121. 9.06 Ajustando o Blueprint de animação: Ok, antes que as montagens de animação possam funcionar em sua animação, você precisa fazer algo dentro do esquema de animação Vamos até o player e vamos abrir o plano da animação E lembre-se de que isso é o que fizemos aqui até agora. O que você precisa fazer é realizar um movimento da parte superior do corpo, como você pode ver aqui. Se eu voltar às minhas animações, pesquisar minha animação e dar uma olhada nas minhas montagens de animação Agora, se eu clicar em um deles, posso ver aqui que ele está usando um slot chamado slot padrão. E, na verdade, precisamos usar a parte superior do corpo em vez disso. Aqui na animação Slot manager. Vamos clicar em um slot, vamos chamá-lo de parte superior do corpo, porque eu só quero mover a parte superior do corpo quando recarrego e ainda quero que meu personagem corra Você pode correr e recarregar parte superior do corpo e deixar que a gente a salve E agora você vê se vai até a pistola também. Aqui no gerenciador de slots, você tem essa parte superior do corpo. Você tem esse slot sempre que cria um deles, o rifle o tem e a pistola também Ok, você precisa clicar no slot aqui em vez do slot padrão. Vamos agora clicar aqui para ver o nome do espaço e alterá-lo para a parte superior do corpo. A mesma coisa para a pistola, então os dois clicam aqui, colocam o nome do slot e alteram para parte superior do corpo Agora você pode ver que a animação não está sendo reproduzida porque, na verdade, só nós sabemos que essa é a parte superior do corpo. Nós realmente não dissemos ao motor neural o que é a parte superior do corpo no momento. Precisamos fazer isso. Vamos ver o plano de animação aqui dentro. Precisamos usar uma função chamada mistura em camadas de seu osso. Esta em camadas mistura seu osso como padrão. Vamos pegar a pistola primeiro Vamos copiar isso. O movimento da pistola foi armazenado em cache, e vamos colocá-lo aqui. O que precisa ser misturado é tentar copiar e colar isso novamente. E precisamos arrastar até aqui e procurar o slot padrão. Você pode ver aqui que temos esse slot padrão. No entanto, não é isso que queremos usar agora. Queremos usar, se você clicar aqui, você deseja alterá-lo para a parte superior do corpo. Agora estamos usando este em vez disso. E você pode sair e conectá-lo aqui. Sempre que reproduzimos nossa montagem de animação, ela se mistura entre as duas Temos essa mistura aqui. Vamos clicar nele aqui. E vamos clicar na configuração da camada. Clique aqui e clique no sinal de mais. Clique na seta aqui. Agora estamos dentro daqui. O que estamos tentando fazer agora é dizer ao Unreal Engine o que é a parte superior do corpo, porque no momento o Unreal Engine não conhece realmente a parte superior do Você tem que dar a ele um nome de osso. Se você abrir o esqueleto ou o personagem e clicar nos ossos do personagem e em toda a hierarquia, poderá ver o osso do personagem que queremos mostrar na parte superior do corpo Onde isso começa? Normalmente , na maioria dos casos , começa aqui na coluna 01. Às vezes parece melhor quando começa na coluna 02. Nesse caso, vamos tentar usar o Spine 01. Você tem que voltar e escrever exatamente como é chamado aqui, vamos chamá-lo de Spine 01. E a profundidade da mistura é uma. E também a rotação do espaço da malha, diz-se que a mistura é verdadeira. Vamos compilar e excluí-lo daqui de cima. E, em vez disso, vamos conectar isso. Assim, vou copiar colar tudo isso e deletar a pistola Em vez disso, pegue o rifle e conecte-o aqui também Vamos conectar o rifle também e excluir este antigo Vou reduzir isso e organizar as coisas um pouco mais. Então, algo assim aqui. Então eu posso movê-lo para cá como antes. E agora nós realmente terminamos isso. Se eu clicar em pode compilar, você pode ver meu personagem está realmente se movendo agora Agora, se reproduzirmos nossas montagens de animação, tudo deve funcionar perfeitamente Lembre-se de alterá-lo. Aqui em sua montagem de animação, lembre-se de alterá-la para a parte superior do corpo E lembre-se aqui, para a parte superior do corpo, para a mistura em camadas por osso, lembre-se de dizer de qual osso você deseja se misturar Muito, muito importante. Salve tudo e vamos seguir em frente. 122. 9.07 Equip Animation Multicast: Vamos seguir em frente e fazer com que funcione. Vamos voltar para o jogador e abrir a base de jogadores aqui. Vamos reproduzir nossa montagem de animação. O que você precisa fazer é pegar essa malha que temos e arrastar a partir daqui e pesquisar por montagem de animação E então você pode ver isso aqui. Reproduza a montagem de animação. Ok, agora temos que selecionar qual montagem estamos falando Vou torná-lo dinâmico, assim como este. O que podemos fazer é lembrar que este é um efeito temporário. Em vez de usar um representante, notifique, lembre-se de que uma notificação de representante será vista por um jogador que ainda não se conectou ao seu servidor E se eles se conectarem, por exemplo, 10 minutos depois, poderão ver sua arma equipada. No entanto, a animação, como a animação de recarga quando você pega uma arma e eles podem ver uma recarga, não precisa ser exibida para jogadores desconectados porque é apenas uma animação que desaparece As pessoas realmente não se arrependerão se não conseguirem ver essa animação quando se conectarem, porque, de qualquer forma, ela simplesmente desaparecerá após 1 segundo. Então, em vez disso, vou adicionar a um multicast. Uma transmissão múltipla. Lembre-se de que somente os jogadores conectados podem ver isso. E jogadores desconectados, se eles se conectarem ao mesmo tempo em que você está recarregando, não poderão ver isso até que você recarregue novamente Vamos criar um novo Chame isso de multicast. Vamos chamá-lo de Equip Weapon, porque eu geralmente chamo do mesmo nome do servidor Vamos executar isso em multicast e de forma confiável, e vamos conectá-lo aqui para o multicast Dependendo se estamos segurando uma pistola ou um rifle, queremos reproduzir a respectiva animação Exatamente como o que fizemos aqui. Vou criar uma nova variável e é o tipo de arma que existe lá em cima. Selecionado. Vamos fazer a mesma coisa aqui. Eu só vou me equipar. Eu só vou ligar para equipar. Na verdade, vou chamá-lo da mesma coisa aqui em cima. Em vez de encontrar, equipar assim, tipo de arma para equipar Ok, tudo parece bem. Agora podemos arrastar a partir daqui e dizer selecionar e usar esse nó de seleção. Então podemos conectar este aqui embaixo. Agora, ele selecionará a animação dependendo de qual é esse valor de enumeração. Se for a pistola, vou selecionar e jogar a pistola Montagem de animação. Se for o rifle, vou jogar o rifle Animation Agora vai funcionar dependendo do que selecionamos aqui para o rifle ou aqui embaixo para a pistola Deixe-me, na verdade , colocá-lo abaixo dos dois. Na verdade, vou organizar isso um pouco mais. Movendo isso, movendo isso para cima. Então, eles estão juntos e este está abaixo deles. E podemos mover esse para cima também, sem mais nem menos. Ok, agora nós o temos e agora precisamos adicioná-lo ao código. Então, vou adicioná-lo aqui. Logo depois de mudarmos nosso estado de movimento, quero reproduzir minha animação de recarga E nós a chamamos de arma de equipamento MC. E lembre-se de que os multicasts só podem ser executados em eventos do servidor. Este é um evento de servidor. Lembre-se de que é muito importante que o multicast não pode ser executado aqui. Portanto, você não pode chamar um multicast aqui. Isso está errado. Você precisa executá-lo por meio do servidor. Vamos descobrir isso e, digamos, a arma MC Equip. Vamos conectá-lo aqui. E vamos conectar esse tipo de arma a ela para que fique correta quando for jogada. E vamos compilar agora. Agora podemos clicar em Play para ver se tudo funciona ou se temos alguma caixa. Se eu clicar em jogar e selecionar terroristas e os selecionar aqui, agora eu clicar em um, agora eu clicar em um, você pode ver que eu jogo a animação de recarga Se eu clicar em dois, eu também recarrego. Agora vamos ver se isso combina com nossa corrida. Se eu correr e clicar aqui, você verá que estou realmente correndo e recarregando Se eu clicar no controle e recarregar, veja, na verdade, se eu clicar no braço da mola e torná-lo 500 para que possamos realmente ver como é, eu clico em play E se os pegarmos agora, vamos fazer isso agora. Se eu trocar, você pode ver que eu também estou agachado e recarregando Está funcionando agora. Tudo está funcionando corretamente. Incrível. Então, agora eu estou clicando no braço da mola, tornando o comprimento do braço alvo zero novamente, e tudo está funcionando. Agora também precisamos adicioná-lo em outro lugar. Porque quando saqueamos a arma do chão, no momento ela não está jogando Sempre que você saquear os itens ou aqui no lote de armas, sempre que você saquear o item Quando definimos o tipo de arma equipada com a arma do lote, também precisamos reproduzir a animação. Então está correto. Deixe-me mudar isso um pouco para cá. E vamos chamá-la novamente de arma MC Equip. E vamos adicionar qualquer que seja o tipo de arma. É esse. Vá em frente e crie um nó de rota traseiro, e agora está correto aqui. Então, vamos organizar as coisas um pouco mais desse jeito. Ok, agora está aqui dentro também na arma de saque E agora vamos clicar em play. Agora, sempre que eu saqueio minha arma, ela realmente reproduz essa animação antes que eu possa atirar com minha arma Então é assim que você também adiciona animações às suas armas Você pode adicioná-los por meio montagens de animação e também fazer um movimento da parte superior do corpo para as montagens de animação, para não interromper a animação em execução enquanto faz tudo isso Ok, então foi isso por enquanto. Vamos salvar tudo e passar para a próxima. 123. 9.08 Configurando o Widget de exibição de armas: Agora é hora de criar o widget de exibição de armas. Então, vamos em frente. Na interface de usuário aqui, assim como antes de criarmos a I de seleção de equipe, vamos agora clicar com o botão direito do mouse e ir até a Interface do usuário e criar outro widget, o blueprint Agora, para este, novamente, o widget do usuário é o que vamos selecionar E vamos chamá-lo de B. Vou chamá-lo de principal. Essa será a interface principal que teremos. Não criamos um NuWi principal para o jogo. No Nei principal, você também pode ver suas armas. Vamos abrir esse. Lembre-se de que sempre que você começa com um esquema de widget, primeiro precisa usar a tela, adicionando uma tela a ela E agora estamos prontos para projetá-lo aqui. No entanto, ainda não importamos os ícones. Então, deixe-me salvar tudo. Vamos encerrar isso. E eu quero que você leia os materiais do curso que eu lhe dei, vá os materiais do curso que eu lhe dei, até os ícones da interface do usuário, e eu dei esses ícones para você. Então vá em frente e selecione todos os ícones de armas novamente. Você pode ver itens diferentes nos materiais deste curso, dependendo de quando você fizer o download. Porque, no momento, estou apenas adicionando mais coisas à medida que faço este curso. Pode haver mais ícones do que você pode ver aqui agora. Tenha esses três ícones. Por enquanto, vamos para a pasta de ícones. Deixe-me clicar e arrastá-los até aqui. Novamente, assim como fizemos com os outros, lembre-se de que alteramos o grupo de texturas para UI e as configurações de compressão para a interface de usuário dois D. Vamos fazer isso com esses três também. Agora você pode clicar neles e configurá-los individualmente. No entanto, você pode simplesmente clicar em um ou segurar o controle para selecionar os três. Clique com o botão direito do mouse e vá para Ativo. Ação, edição em massa por meio da matriz de propriedades. Lembre-se de que é assim que você edita todos eles de uma vez. Isso é algo que fizemos antes. Vamos em frente e clicamos nele. Na compressão, acredito que, já que daqui as configurações de compressão aqui, ela vai para duas interfaces de usuário, duas D, e o nível de detalhe, você pode configurá-lo do mundo para a interface do usuário. Agora podemos fechá-lo e salvar tudo. Tudo bem, agora, quando entramos na interface do usuário e na interface principal, e se, por exemplo, adicionarmos uma imagem à tela, você clica nela aqui em cima para que a imagem encontre a imagem, vamos encontrar os ícones que adicionamos. E aqui você pode ver os ícones que temos. Tudo bem, então vamos passar para a próxima lição, onde criaremos esse modelo de widget Por enquanto, vamos excluir esse. Vamos manter essa tela porque precisamos dela. E compile, salve tudo e vamos seguir em frente. 124. 9.09 Projetando a interface do usuário da tela de armas: Ok, então o que queremos fazer agora com tela da arma é como no Counterstrike, onde você pode ver aqui ao lado que você tem a arma e, em seguida, você tem a tecla no teclado que precisa pressionar para ver essa arma Então, assim, faremos a mesma coisa, e a interface ficará mais visível sempre que você tiver essa arma selecionada em comparação com as outras e assim por diante, então apenas um pequeno efeito. Ok, por enquanto, deixe-me encerrar isso e vamos criar essa interface de usuário de exibição de armas muito simples. Agora, quando você cria algo assim, precisa pensar em quais caixas deseja adicionar. Então, temos a caixa horizontal e temos a caixa vertical. Primeiro, precisamos de uma caixa vertical porque as armas estão uma em cima da outra. Vamos escolher uma caixa vertical. Coloque-o aqui. Vamos redimensionar isso de alguma forma para que eu possa arrastá-lo E eu vou arrastá-lo até aqui em algum lugar. Novamente, lembre-se de alterar o ponto de ancoragem, caso contrário, ele estará errado na tela aqui Clicando no ponto de ancoragem, colocando-o no canto inferior direito E também para a posição, vou escrever 00 para ver onde está na tela. E você pode ver que está fora da tela. Lembre-se de que você pode ajustar isso no alinhamento. Se eu escrever 0,5 aqui, você pode ver que agora ela se encaixa no meio dela E se eu escrever um, ele se encaixa no outro lado, assim como para Y, se t 0,5 ele se encaixa no meio dele E se eu escrever um, ele se encaixa no outro canto. Agora, mesmo na posição 00, ela está dentro da nossa tela, e é isso que queremos para as posições x e y. Posso dar algo como -30 aqui e -30 aqui, só para afastá-la das Não está na parte superior da tela. Aqui está a borda da tela. Ok, vamos compilar. Agora, o que precisamos fazer é ter uma arma e a tecla do teclado. Além disso, na verdade precisamos de uma caixa horizontal. Agora, uma caixa horizontal dentro da caixa vertical. E agora podemos adicionar a imagem da arma, bem como o texto da tecla do teclado. Adicione-os aqui. Deixe-me clicar no texto e vamos escrever um por enquanto. Essa é a tecla do teclado. E então você pode clicar na imagem. Deixe-me selecionar a imagem. Se eu pesquisar o ícone AK 47, por exemplo, e quiser um tamanho maior, em vez de 32 por 32, talvez possamos escrever algo como 130 por 130. Lembre-se de que, antes de criar isso corretamente, lembre-se de clicar no tamanho da tela. Acesse laptops, por exemplo, e selecione o notebook genérico de 14 a 15. Isso é exatamente o que eu mostrei antes com o widget de seleção de equipes Isso é para escalar essa interface de usuário corretamente em todos os dispositivos. Sempre que eu estiver no zoom, um por um, é assim que vai ficar no laptop, é isso que parece. Agora você pode ver se você clicar neste botão aqui, eu removo as linhas de traço Eu costumo fazer isso para ver como fica sem todas essas linhas. Acho que é grande o suficiente para um laptop. Vamos compilar. Lembre-se, nós o escalamos para minha tela Por exemplo, eu tenho um monitor de quatro K e o escalamos clicando nesse pequeno ícone E então selecionamos aqui o quanto queríamos escalar. Acho que antes eram oito. Portanto, é escalado muito rapidamente. Eu coloquei em 2,5 Sim. Agora vamos clicar nesse número. Vou alinhá-lo verticalmente ao meio. Acho que agora é clicar nessa caixa horizontal. Na verdade, o que vou fazer é clicar na caixa vertical. E clicando em Tamanho para conteúdo, a caixa vertical simplesmente será dimensionada em comparação com qualquer conteúdo que ela contenha. O que podemos fazer é, por exemplo, para a caixa horizontal, eu posso controlar D, e isso vai copiá-la além desta aqui em cima. Se você apenas controlar D para copiá-lo ou duplicá-lo, você pode ver que ele cola as armas aqui em cima e está parecendo correto Eu só preciso de dois deles. Eu não preciso de tantos. Vou clicar no número primeiro. Na verdade, vou deletar esse. Vou apenas estilizar um deles e posso copiar e Vou clicar nesse número. Vou mudar o fundo para alguma coisa. Nós importamos rubi. Acho que Simy Bold ficará bem com este. Sempre podemos testá-lo quanto ao tamanho. Acho que 22 pode ser um pouco melhor. 22, precisamos de um espaço entre esses dois. Vá até aqui, procure por espaçadores e coloque-os entre a imagem e o texto E então você pode colocar algum espaço entre eles. Por exemplo, se eu fizer 20, algo parecido. Ou você pode aumentar ainda mais se for muito pouco. Acho que está tudo bem por enquanto. Agora, o que você pode fazer é clicar nesse controle de caixa horizontal D para duplicar. E agora você tem , por exemplo, para este você pode transformá-lo em uma pistola Agora, isso realmente não importa agora, porque vamos mudar isso dinamicamente no jogo Esse AK será uma arma. Se eu for até o projeto de armas, se eu puder encontrá-la aqui, a arma aqui, 44 Este será o ícone, ou este. Se você pegou 44 em vez de um AK, essas imagens mudarão dinamicamente no jogo Realmente não importa, mas para esses números, isso é um, isso é dois. E é isso que eu pressiono no teclado para que essas armas sejam equipadas para mim. Tudo bem, então foi isso para estilizá-lo. Você pode ver que é muito, muito simples. É uma interface de usuário muito simples, mas ficará bem no jogo. Então foi isso por enquanto. Vá em frente, compile e salve tudo, e vamos para a próxima 125. 9.10 Exibindo a interface do usuário da tela de arma: Agora vamos exibir essa interface de usuário na tela. Agora você pode fazer isso sozinho se quiser algum treinamento, porque já fizemos isso antes. Tente descobrir como você pode exibir isso na tela. Depois do widget de seleção de equipe. Sempre que selecionamos a equipe, quero exibir essa interface principal. Tente descobrir isso sozinho. É um bom treinamento se você não se lembra ou quer ajuda. Vamos fazer isso juntos. Deixe-me encerrar isso. Primeiro, o que eu preciso fazer é ver as plantas. Vá para o controle do jogador. Lembre-se de que, no controle do jogador temos toda a interface de usuário em que criamos esse evento show hide widget Aqui, quero mostrar meu widgit principal. Agora usamos essa enumeração, preciso adicioná-la à Se eu for para Enums, clico nos widgets do jogo Dentro daqui, estou adicionando um novo enumerador e estou escrevendo nome ou não nome Vou movê-lo aqui até o topo só para ficar mais limpo. Realmente não importa. Então eu vou para o controlador do Player aqui, assim como antes. Clique com o botão direito, crie widgets. Então, podemos criar o widgit principal. Podemos procurá-lo aqui. Vou clicar com o botão direito do mouse e promover isso para uma variável e chamá-la de WB main Agora vamos arrastar a partir daqui e adicionar ao Viewport, assim Agora, assim como antes, vou arrastar esse principal para fora, certo, convertê-lo em um get validado Então, quando não for válido, quero criar o widget No entanto, se já o criamos antes, vou adicioná-lo diretamente à janela de visualização, como antes Tente organizar isso. Quando você terminar assim, poderá prosseguir e compilar E lembre-se também de acessar o widget ocultar aqui dentro Assim como antes, vamos colocar W em um get e arrastar validado a partir daqui e dizer remover de Lembre-se também de fazer isso sempre que quiser , talvez um pouco agora. Isso realmente não acontece muito com o MenuI. Você não o remove demais. No entanto, em um caso, por exemplo, se você tiver um filme cinematográfico ou algo parecido, não desejará exibir o MenuI Também é assim que você o remove. Vamos voltar ao gráfico de eventos agora. Após a seleção da equipe, lembre-se que aqui no controle do jogador na parte inferior, criamos esse CL spawn player Nós geramos o jogador, escondemos a seleção da equipe. Agora, aqui está um bom lugar para mostrar o Maui. Lembre-se de que a interface do usuário está do lado do cliente. Sempre que você trabalha com a interface do usuário, você precisa executá-las no cliente aqui. O que eu geralmente faço é procurar um evento para clientes que já criamos e que possamos usar. Este reprodutor de spawn do CL está rodando no cliente, então esse é um ótimo lugar para mostrar o Maui Vou dirigir até aqui e dizer Mostrar widget Ocultar, como o chamamos E eu vou selecionar o MenuI. Vou clicar em Mostrar e conectá-lo. Agora, só um lembrete, se você esqueceu, ele selecionará o Maui e selecionará Mostrar aqui no Ocultar widget. Ele sabe que é o MenuI Ele sabe que esse boletim é verdadeiro. Então, vai ficar aqui. Ele sabe que é verdade. Então, ele vai mostrar o widget Agora ele sabe qual widget é, porque selecionamos o widget principal, que entrará E ele executará esse código a partir do widget principal. E vai ignorar esse. Só está rodando esse aqui em cima. E vamos adicionar o widget principal à janela de visualização. Então, acho que não estamos perdendo nada. Então, vamos jogar e selecionar, por exemplo, o antiterrorista. E então você pode ver que eu tenho minha interface principal. Se eu maximizar minha tela, tenho a interface principal aqui e posso vê-la na minha tela. 126. 9.11 Codificando a funcionalidade de exibição da arma: Agora vamos codificar a funcionalidade da interface de exibição. Vamos até a interface do usuário e vamos abri-la. Essencialmente, antes de começar a codificar a interface do usuário, você só precisa pensar o que está tentando fazer? O que estou tentando fazer é mudar essa imagem para o que estou segurando. Quero exibi-la e removê-la, dependendo se eu saqueei a arma ou não Então, vamos começar com o primeiro. No primeiro, vou apenas mudar o nome da imagem para que não fique confuso Vou chamá-lo de rifle IMG. A próxima eu vou chamar de pistola IMG. Agora, para usá-los aqui no gráfico, você pode ver que não temos nenhuma variável. Temos que clicar nos dois. Selecione os dois. Dois é variável, então você tem que pegar isso e compilar. E agora podemos ver que podemos usá-los como variáveis dentro daqui. Vou deletar tudo isso e deixar que criemos um evento personalizado. Vamos chamar isso de atualizar o inventário. Eu atualizo o inventário I dentro daqui. Basicamente, o que estamos tentando fazer é pegar essa pistola de imagem, por exemplo, um rifle de imagem e , dizer , separar o pincel da textura Este é um conjunto de pincel de textura, isso é simplesmente quando você está alterando esta imagem. Queremos mudar essa imagem dependendo se estamos segurando o K, as informações ou qualquer outra coisa. Defina o pincel a partir da textura e aqui está a imagem que podemos mudar. A outra coisa é que estamos tentando mostrar ou ocultar esse ícone, dependendo se saqueamos a arma ou não Novamente, drague a partir desta visibilidade definida e selecione esta. Vou copiar e colar este aqui embaixo, copiar isso e conectar o rifle de imagem também Isso é o que você está tentando fazer. Também estou copiando e colando isso assim. Essas são as funções que simplesmente vamos usar. É sempre bom fazer isso sempre que você vai começar algo. Tente pensar qual é a principal coisa que você está tentando fazer. Você está tentando mudar a imagem dependendo da arma que você saqueou e está tentando definir a visibilidade como oculta ou não oculta, dependendo se você saqueou essa arma ou Ok, com esse. Agora, depende de qual arma estamos saqueando. É uma pistola ou é um rifle? Lembre-se de que já temos uma variável para isso e esse é o tipo de arma E. Estamos usando muito isso e vamos chamar isso de um tipo de arma. Ok, então temos esse e podemos arrastar a partir daqui e dizer que o switch tem autoridade. Na verdade, ative a enumeração desta. Agora, dependendo se for uma pistola, vamos executar esse código Dependendo se for um rifle, vamos executar esse código E eu vou conectar tudo isso aqui, desse jeito. Ok, agora para as imagens, para as texturas. Em vez de colocá-los aqui, vou apenas clicar e arrastá-los para este evento. E eu vou chamar isso de prego idiota. Também podemos arrastar isso para cá. Ok, vamos compilar agora. Vamos salvar tudo. Tudo bem, então a única coisa que falta agora é a miniatura da arma Porque lembre-se de que não adicionamos uma miniatura de arma à infraestrutura de armas Então, precisamos fazer isso na próxima lição. No entanto, antes de terminarmos isso, também precisamos definir isso como visível ou não. Então, agora a visibilidade da arma ficará visível sempre que você tiver carregado a arma. No entanto, se você ainda não o tiver carregado, ele ficará oculto. Então, para fazer isso, o que podemos fazer é verificar se essa miniatura de imagem ou miniatura de arma é válida ou Porque, assim como antes, se eu voltar ao jogador e à base de jogadores, lembre-se de como poderíamos excluir variáveis como essa sem configurá-las para nada e elas não serão válidas. Podemos fazer a mesma coisa aqui com a miniatura da imagem. Podemos configurá-lo para nada e não será válido, que significa que deixamos cair a arma. O que podemos fazer é arrastar a partir daqui e dizer que é válido e podemos escolher, este é válido. Assim como antes, ou como trabalhamos com as notas selecionadas, podemos arrastar a partir daí e dizer selecione e escolha esta. Agora eu posso conectar esse lingote a este aqui. Está bem? Se a miniatura da arma não for válida, válida é falsa, isso significa que queremos que ela fique oculta Agora, para este outro, se for verdade, é válido. Queremos que seja testável sem impacto. Lembre-se de que não pode ser testado com acerto significa que o cursor do mouse não pode interagir com essa imagem Nós realmente não precisamos fazer isso. O que precisamos fazer é clicar nele aqui e manter o controle. Clique no segundo e também defina a visibilidade como não testável Visível significa que seu mouse pode realmente clicar nele e bloqueará qualquer coisa por trás disso. Mas nós realmente não precisamos clicar neles. Preciso configurá-los para que não sejam testáveis. E faça a mesma coisa aqui para o texto. Defina-os como não testáveis. Aqui embaixo, na visibilidade também por padrão, vou selecionar esses dois e a visibilidade fica oculta. Na verdade, não precisamos vê-los quando começamos o jogo, não temos armas. Vamos configurá-la para ser testável sem impacto sempre que realmente saquearmos a arma Faça a mesma coisa aqui. Estamos perguntando se isso é válido. Na verdade, podemos simplesmente copiar e colar este. Copie, cole, conecte e também conecte aqui. Ok, então aqui eu criei algumas notas de rota e organizei um pouco o código. Aqui temos o código, e esse é o código principal do nosso inventário, UI. Agora vamos para a próxima lição e criar essa miniatura de arma dentro de nossa estrutura 127. 9.12 Adicionando miniatura de arma à estrutura: Vamos agora adicionar a miniatura da arma à estrutura. Vamos voltar às nossas estruturas e abrir as informações sobre as armas. E vamos adicionar uma nova variável e chamá-la de miniatura aqui Para a miniatura, o tipo é apenas uma imagem, então é uma textura dois D. É assim que elas são chamadas. Saia e economize. Agora vamos fechar essa estrutura. Vamos também adicioná-lo à tabela de dados. Se você abrir a tabela de dados das planilhas do Google que criamos anteriormente e abrir a tabela de dados aqui, vamos adicionar a variável dentro da estrutura. Vou empurrá-lo para cá depois do tipo, talvez aqui só para deixá-lo mais limpo. Realmente não importa para onde você o move, mas agora preciso adicioná-lo aqui. Depois da digitação, preciso adicionar a miniatura. Se eu olhar aqui depois do tipo, preciso adicionar a miniatura Vou clicar com o botão direito do mouse e adicionar uma coluna à direita. Então eu vou chamar isso de uma miniatura. Lembre-se de chamá-lo do mesmo nome que você chamou aqui. Agora precisamos das referências a eles. Se eu fechar isso, vou para a interface do usuário. Abro os ícones, agora posso escrever, clicar neste AK e copiar a referência. Posso voltar para minha tabela de dados e colá-la aqui para o AK. Faça o mesmo aqui para obter as informações, clique com o botão direito do mouse em copiar referência. Cole aqui, clique com o botão direito do mouse em copiar referência para a pistola. E cole aqui também. Agora você pode baixá-lo como um arquivo CSV aqui na pasta de downloads Vou renomear Weapon Info. Vou copiar isso, o antigo. Eu vou deletá-lo. Vou colar o nome aqui, DT Weapon Info. Lembre-se de que esse é o mesmo nome que chamamos aqui em nossas tabelas de dados. E agora podemos clicar e arrastá-lo até aqui, e ele diz que foi reimportado com sucesso Se você abri-lo, poderá ver que ele realmente tem ícones anexados a ele agora. Ok, agora podemos fechá-lo. E agora vamos até o jogador e abrir a base de jogadores. Dentro da base de jogadores, queremos atualizar a interface quando saqueamos a arma aqui no lote de armas Vamos até aqui com a arma Servalote. Precisamos chamar esse evento de atualização da interface do usuário dentro de um cliente. Lembre-se de que a interface do usuário está localizada no cliente e, na verdade, não temos nenhum evento para clientes no momento O que vou fazer é clicar com o botão direito do mouse aqui e criar um novo evento personalizado. Chame-o de CL para o cliente, deixe-me chamá-lo de Atualizar inventário, UI, por exemplo. E execute-o no cliente proprietário e é confiável. O que queremos fazer aqui é chamar nosso B principal. Lembre-se de que está dentro do controlador do player, temos esse WB principal E dentro do B principal, podemos encontrar nosso evento que criamos anteriormente. Precisamos acessar esse WB principal, que está dentro do controlador do player Tente ver se você pode fazer isso sozinho e ligue para este evento aqui. Essa é uma boa prática para se comunicar entre os projetos. Vamos fazer isso juntos. Agora, deixe-me clicar com o botão direito do mouse e dizer obter o controlador para obter o controlador específico. Então eu posso arrastar daqui e dizer get player controller reference, nós fizemos isso a partir da nossa interface de blueprint E então eu posso chamar minha variável principal WB. Então eu posso arrastar e atualizar o inventário. Evento atualizar o inventário. Eu vou em frente e o conecto ao tipo de arma. Vou apenas arrastá-la até aqui, assim como a miniatura da arma Estou apenas arrastando isso para o evento. Ele cria uma variável automaticamente e eu vou criar alguns nós de rota. Agora, quando isso for feito, vamos compilar e salvar tudo aqui Sempre que saqueamos uma arma, eu vou chamá-la, depois equipá-la, depois de mudar o tipo de equipamento aqui, vou afastá-la Eu também vou afastar isso. Eu vou afastar isso. Em seguida, vou ligar para o CL, atualizar a arma ou a interface do inventário. Agora, em vez de definir o tipo de arma, vamos apenas arrastá-la dessa arma saqueada Vou clicar e arrastá-lo até aqui. Faça também uma anotação de redirecionamento. Também para a miniatura da arma. Agora nós o temos dentro da nossa tabela de dados. Ao obter as informações da arma, você também obtém as informações da miniatura, que você pode ver aqui Se você não vê, lembre-se de marcar isso aqui. Lembre-se de que clicamos em Ocultar pinos desconectados e só vemos isso Agora você também pode clicar no Spin para mostrar a miniatura e podemos conectá-la Tudo bem, então agora temos isso aqui. Nós o temos conectado agora. Deve funcionar sempre que saqueamos uma arma. Vamos apenas experimentá-lo. Antes de continuarmos, vamos clicar em play. E quando clicamos em Jogar como terrorista. Eu me refiro a essa pistola, por exemplo. E você pode ver que a pistola agora está sendo exibida aqui na My UI Quando eu aludo ao for, ele não está mostrando o P. Precisamos corrigir este Não está mostrando o por enquanto. É estranho porque deveria ser o mesmo código aqui. Sempre que for, segundo a informação, não estamos mais desarmados Então, aqui no saque de armas agora ou lote a arma, então não estamos desarmados Então, na verdade, ele está passando por essa parte do código aqui em cima e está pulando tudo isso Precisamos realmente reconectar isso a um correto. Vou manter o controle e a tecla Alt para desconectar isso. Alt. Clique em, desculpe. Alt e clique para desconectar isso. Então eu vou mover isso do falso para cá. Acho que é melhor conectá-lo aqui. Em vez disso, vamos conectá-lo aqui Isso é mais correto e vamos compilar agora e tentar reproduzi-lo Então, se eu jogo com terroristas selecionados, agora eu pego um formulário e depois pego a pistola e você pode ver que os dois estão funcionando agora Precisamos corrigir o problema em que agora soltamos uma arma e agora ela deve ser removida da nossa interface. Vamos copiar isso aqui e encontrar a arma de lançamento. Agora, aqui para pegar o código da arma de descarte e a arma de soltar, eu vou entrar aqui. E agora estamos configurando a arma caída e a removendo do inventário. Você pode fazer isso aqui ou aqui. Realmente não importa. Eu só vou fazer isso dentro daqui. Eu vou colá-lo. E precisamos ter a miniatura da arma. Então essa é a arma a ser solta. O que eu posso fazer é tirá-lo daqui, a arma para soltar, e posso conectá-lo aqui, para que pareça mais limpo. Eu também aguento isso. Posso dizer novamente, estamos realmente fazendo tudo aqui. Em vez de copiar e colar, vamos usar este. Deixe-me movê-lo de volta. E então eu posso usar o tipo de arma e posso usar a miniatura E vamos estruturá-lo melhor para este. Vamos reconectá-lo. Vamos movê-lo de volta. Assim como antes, sempre podemos criar uma traseira. Na verdade, não precisamos criar um nó traseiro. Podemos simplesmente colocá-lo assim aqui para a miniatura da arma Na verdade, antes de clicarmos em play , na verdade não é assim. Lembre-se de que, ao soltar uma arma, você não quer definir uma miniatura, queremos configurá-la para Aqui na interface do usuário, ele diz que não é válido e, quando não é válido, oculta esse ícone. Clicamos em frente no jogo e saqueamos a pistola Saqueie o rifle. E se soltarmos o rifle, por exemplo, você pode ver que ele foi removido da interface do usuário Se eu soltar a pistola, agora ela será removida. Se eu pegar o AK, você pode ver que agora está mostrando o ícone AK. Se eu pegar a pistola, se eu soltar o AK e pegar as informações, você pode ver que agora está mostrando o ícone de informações Então, tudo está funcionando como deveria. E foi isso por enquanto. Então, na próxima , podemos tentar. Então, sempre que você tiver uma arma selecionada. Então, agora, se eu tiver a pistola selecionada, a pistola deve estar totalmente visível No entanto, o ícone de informações deve estar pouco visível. Assim, você sabe o que selecionou do seu inventário. 128. 9.13 Unequipped Weapon UI Opacity: Tudo bem, então vamos continuar o código aqui. O que precisamos fazer agora é alterar a opacidade das imagens no designer Se você clicar em um deles, por exemplo, o AK, se clicar na tonalidade, se clicar na seta e ver, poderá alterar o alfa para torná-lo visível e não visível Então é isso que queremos mostrar sempre que selecionamos a pistola Por exemplo, eu vou fazer isso de novo. E vamos ao gráfico. Podemos pegar a pistola de imagem e dizer opacidade. Se você não sabe como se chama, basta pesquisar a palavra e ver qual é a melhor para usar. Isso às vezes é algo que eu uso. Se estou criando uma nova mecânica, posso simplesmente escrever a palavra e tentar selecionar o que fizer sentido Queremos definir a opacidade dessa opacidade do conjunto de imagens. Agora depende de qual é a nossa arma equipada. A arma equipada está dentro do nosso jogador, este tipo de arma equipada. Porque esse agora, não podemos usar. Esta é apenas a arma que pegamos do chão. Essa não é necessariamente a arma que estamos equipando agora Precisamos obter essa variável. E da maneira como fazemos isso, novamente precisamos nos comunicar com o jogador. Dentro da interface do usuário, temos algo chamado get owning, get owning player. Se você quiser uma referência ao controlador do player, obtenha o proprietário do player Se você quiser uma referência à panorâmica do jogador para o I, queremos uma referência à Paw do jogador Eu vou dizer para possuir o peão do jogador. Então, podemos arrastar a partir daqui e dizer obter referência do jogador. Porque já fizemos isso dentro de uma interface de blueprint Vamos conectá-lo depois dos que estão aqui. Não importa qual deles seja, ele executa o código e continua sendo executado a partir daqui. Queremos equipar, esta é do tipo de arma equipada. Novamente, assim como antes. Vou mover isso e dizer ativar a conexão de enumeração Agora vamos pegar isso. Se for uma pistola, queremos definir a opacidade para uma Se for um rifle, vamos copiar isso, na verdade, sem esse Digamos que defina a opacidade se for um rifle. Da pistola. No momento em que equipamos a pistola, o rifle estaria com 0,25 de visibilidade Por exemplo, a opacidade. Agora podemos copiar e colar isso aqui e podemos conectá-lo ao rifle A pistola agora é 0,25 e o rifle é um. Agora que terminamos isso, podemos prosseguir, compilar e salvar tudo. Agora deve funcionar. Temos que ligar para esse. Lembra dessa interface de atualização do inventário? Na verdade, não estamos convocando nosso evento, onde na verdade selecionamos armas aqui embaixo. Quando selecionamos a arma primária e secundária aqui. Não estamos chamando o evento em que atualizamos a interface do inventário, precisamos chamar esse também. Sempre que equipamos armas, esta aqui é atualizada Temos que fazer isso. Vamos até a base de jogadores. E deixe-me afastar isso. Lembre-se de que estamos usando a arma de equipamento Serva. Sempre que mudamos para o primário e o secundário aqui. Depois desta, novamente vou ligar para CL, atualizar a arma I, vou verificar aqui o tipo de arma que estamos equipando, é essa arma tipo dois equipamentos que estamos usando Posso simplesmente conectar isso aqui e criar um nó de redirecionamento para o próximo. A miniatura da arma é que podemos realmente obtê-la dessa variável de arma, podemos arrastá-la aqui, obter o nome, pesquisar a variável de nome, coletá-la como antes obter informações sobre a arma e, em seguida, podemos arrastá-la daqui e quebrá-la Então, podemos obter as informações aqui. Temos o tipo de arma e temos a miniatura. Tecnicamente, você pode simplesmente conectar isso aqui também. Realmente não importa. Vou apenas inserir a miniatura. Isso é bom. E vou clicar neste e ocultar os pinos desconectados E agora terminamos isso. Vou levar isso mais de perto e tudo ficará bem. Vamos compilar, salvar tudo e testar. Reclame agora selecione terroristas e eu posso pegar a pistola e eu posso pegar as quatro posso pegar a pistola e eu posso pegar Você pode ver que o M quatro não está tão visível quanto a pistola no momento Se eu selecionar o M quatro, ele se tornará mais visível. Então agora eu posso ver que posso trocar de arma assim. Se eu soltá-la e selecionar a AK ou pegar a AK, posso soltar a pistola E agora o AK não está visível porque eu não o equipei. Mas se eu equipá-lo, ele vai aparecer. Agora você pode ver como isso funciona. Está muito melhor do que antes. Agora podemos realmente ver o que equipamos. É apenas um bom design de jogo, então podemos, na verdade, ter algumas mudanças visuais. Ok, agora isso acabou. Vamos fazer alguns efeitos sonoros. Os efeitos sonoros de quando realmente trocamos a arma e a recarregamos dessa forma e sempre que dessa forma e sempre que a jogamos no chão 129. 9.14 Adicionando efeitos sonoros de equipa: Vamos agora adicionar os efeitos sonoros equipados. Primeiro, vamos importar os efeitos sonoros. Se formos para a pasta de áudio e efeitos sonoros daqui, eu forneci a vocês os materiais de custo aqui. Se você acessar o áudio e descer até aqui e encontrar o recarregamento do rifle e o clipe do rifle, o recarregamento da pistola e o clipe da pistola, esses cinco efeitos sonoros, clique e arraste-os para o recarregamento do rifle e o clipe do rifle, o recarregamento da pistola e o clipe da pistola, esses cinco efeitos sonoros, clique e arraste-os para o navegador de conteúdo daqui. Ok, então quando você os arrastar, vamos selecionar todos eles segurando, clicando em um deles, segurando a tecla Shift e clicando no último clique com o botão direito e criando várias dicas Isso criará todas essas dicas sonoras para você. Agora, eu gostaria de renomeá-los para o que fizemos antes aqui com o S, o prefixo Vamos continuar e clicar no primeiro. Vou deletar do final. Vou adicionar som Q em vez de efeitos. Eu vou fazer isso com o resto deles. E vou pular um pouco e renomeá-los Agora eu renomeei todos eles. Antes de continuar, vou reduzir o volume de cada um porque eles estão muito altos. E para este curso, não quero que muito alto, pois isso será irritante para você Este é o som aqui, e se eu clicar no próximo, talvez o reduza para algo como 0,30 0,3 A propósito, você pode ter volumes Luda Soará muito melhor no jogo, mas estou fazendo isso apenas pelo meu núcleo, para que você não precise ouvir esses ruídos altos Então, essas são as recargas e é isso que parece. Ok, incrível. Agora deixe-me fechá-lo, salvar tudo. Agora vamos ver os recursos e animações e encontrar essas animações Lembre-se, não são essas animações antigas, nossas próprias animações aqui. Se eu procurar alguma montagem agora, podemos ir em frente e abrir as duas A montagem de animação de rifle e a montagem de animação de pistola que criamos anteriormente. Ok, legal. Dentro da montagem da animação aqui, o que você pode fazer é adicionar efeitos sonoros não precisar fazer isso dentro do código Aqui no nó para F, temos essa barra aqui, essa. Você pode renomeá-lo se quiser clicando nele Clique em dois no teclado. Ou simplesmente clique nele e talvez chame efeitos sonoros ou algo parecido. Realmente não importa. E aqui, vamos clicar com o botão direito do mouse e adicionar uma notificação e depois reproduzir o Sound. Agora vamos clicar nele e agora podemos escolher qual som queremos tocar. O que queremos tocar no primeiro é chamado de clipe de pistola Queremos escolher esse clipe de pistola porque você pode ver aqui, queremos colocar o som sempre que ele recarregar aqui, sempre que ele tirar o clipe da Agora, o que eu descobri é que é muito melhor adicionar o som antes que ele faça a coisa, porque parece atrasado. Se você realmente colocar o som aqui onde ele tira o clipe e você pode tentar ouvi-lo, parece um pouco atrasado. O que eu gosto de fazer é adicioná-lo antes que ele realmente o faça. Talvez algo como aqui. Ok. Parece bom. Agora, a próxima é que eu não preciso usar efeitos sonoros para o clipe da pistola, na verdade temos que adicionar o mesmo Você pode clicar aqui, controlar C e depois controlar V aqui. Vamos ver quando queremos jogar. Talvez algo como aqui. Então a última é a recarga da pistola. E acho que vou adicioná-lo a algum lugar por aqui. Clique com o botão direito em Adicionar, notifique o jogo. Som Clique nele e encontre a recarga da pistola. Acho que se você pesquisar, então recarregue, encontrará o que eu te dei Recarga da pistola. E, a propósito, você pode ver muitos efeitos sonoros aqui. E isso porque você já importou efeitos sonoros do mercado. Quando você importou todas essas armas, na verdade existem efeitos sonoros dentro dessas pastas de armas. Você pode tentar usar alguns deles, se desejar. Você não precisa usar o que eu te dei. Você pode pesquisar por recarga de pistola. Esse é o que eu te dei. Esse é o som. Você pode clicar no espaço para ouvi-la. Ok. Para que pareça um pouco mais interessante, você pode ouvir o clipe entrando e saindo. Ou recorte e encaixe. Eles soam iguais. Está bem? Não é realmente interessante. Vamos mudar isso e torná-lo mais interessante. Se você acessar os efeitos de áudio e som e clicar, clique nele. Mas vamos clicar no clipe da pistola e duplicá-lo. Se eu conseguir encontrar o botão aqui, duplique. Vamos chamá-lo de Pistol Clip In. Vamos renomear este para Pistol Clip Out. Vamos clicar no clipe da pistola aqui para fazer com que pareça diferente Acho que já o usamos antes dentro do curso. Mas você pode usar esse chamado modulador. E com um modulador, você pode alterar o tom do som E dessa forma você pode fazer com que pareça diferente. Vamos conectá-lo aqui. Vamos juntá-los. Agora clique no modulador. Vou mudar essa para 1,3 no campo. Vai soar mais alto do que o outro. Se você tentar tocar , é assim que parece. Se você abrir o outro, o clipe sai agora e você pode ouvir a diferença. Ok, podemos clicar no espaço aqui para ouvi-la. Na verdade, acho que sim, precisamos trocá-los aqui em vez de cortá-los. Vou alterá-lo para encaixar e vamos tentar novamente. Ok, parece muito melhor do que antes, então vamos salvá-lo. E temos que fazer a mesma coisa com o outro. Se eu abrir a outra montagem de animação, e você puder fazer isso, a propósito aqui no navegador de ativos, você poderá ver a outra montagem de animação Vá em frente e abra-o como antes. Vamos renomear esse para efeitos sonoros. Vamos clicar com o botão direito do mouse em algum lugar aleatório aqui e adicionar uma notificação. Jogue. Som Clique no som. Vá em frente e procure por rifle Lip, acho que se chama Rifle Clip out O primeiro é recortar novamente. Vou adiar, talvez eu esteja colocando aqui. Em seguida, o clipe entra, vou adicionar em algum lugar por aqui, talvez o clique com o botão direito do mouse e clique nele, mude para rifle. Na recarga, talvez eu reproduza a recarga Clique com o botão direito, Jogue. Som Clique nele e procure por recarregar o rifle. Vá em frente e selecione-o e vamos tentar ver como soa. Clique aqui Talvez este deva chegar mais cedo porque parece atrasado. Isso soa bem. Eu gosto disso agora. E vamos salvar tudo. E foi isso para este. Portanto, já deve funcionar. Como agora elas são aplicadas às animações , não precisamos adicionar nada ao código Então, se formos até aqui e selecionarmos terroristas. E se eu pegar uma pistola por enquanto. Parece bom. Se eu pegar a informação e selecionar, parece bom. Ok. Incrível. Agora eles soam bem. É claro que vamos fazer com que pareça muito melhor com o recarregamento, com o clipe e assim por diante, mas por enquanto foram apenas os efeitos sonoros e, aliás, tudo está soando bem Novamente, você pode usar outros efeitos sonoros que vêm com as outras armas que você baixou do mercado. E foi isso por enquanto. Então, vamos salvar tudo e passar para a próxima. 130. 10.01 Criando a interface do usuário do Crosshair: Ok, então vamos adicionar a cruz. Vamos para a pasta UI. E vamos abrir a pasta de ícones em vez de aqui, como antes, vá até seus materiais de custo e eu incluí para você, em vez de ícones, incluí essa cruz para você. Clique e arraste-o para o navegador de conteúdo. Antes que esqueçamos, vamos abri-lo e entrar aqui no grupo de texturas. Mude-a para a interface do usuário, assim como antes para as configurações de compressão, vamos alterá-la para uma interface de usuário em dois D, vamos salvá-la, vamos fechá-la. Agora, o que queremos fazer, vamos para a interface do usuário. Clique com o botão direito aqui e vá para a interface do usuário, selecione Wigid, Blueprint. E escolha o usuário. Widgid. Tudo isso já fizemos antes. Vamos chamá-lo de WB. Rosa. Vamos abri-lo em vez de aqui. Qual é a primeira coisa que precisamos acrescentar? Lembre-se de que é a tela. Vamos procurar por telas. Vamos adicioná-lo. E por dentro, muito simples. Para o Crossa, só precisamos de uma imagem. Só precisamos da Crossa. Vamos mudar a imagem para a cruz. Selecione a Crossa, queremos que ela fique no meio. Tente fazer isso sozinho. Já fizemos isso antes. Tente fazer essa cruz no meio , na posição 00. Tente fazer isso. Vamos continuar juntos o que você quer fazer aqui. Primeiro, você quer mudar o ponto de ancoragem para o meio Então, se você escrever 00 na posição, poderá vê-la ancorada aqui. Isso ocorre porque, para o alinhamento, você também precisa configurá-lo como 0,5 para o Y. 0,5 exatamente assim para que seja dimensionado corretamente. Em vez de alterar o tamanho aqui ou aqui, quero dizer, você pode usar esse tamanho para o conteúdo, ele será dimensionado para qualquer tamanho de imagem que você tiver, em vez de alterá-lo aqui. Vamos compilar agora. Agora, isso é o que parece. Lembre-se de que você também deseja clicar na tela aqui e nos laptops, e alterá-la para genérica, neste notebook aqui. Como isso é apenas uma cruz, realmente não precisamos de toda essa tela aqui Isso é apenas algo que está no meio da tela. Por causa disso, podemos clicar em Tela cheia e selecionar Desejado. Isso só vai chegar a essa pequena coisa aqui porque só queremos colocá-la na tela. Não queremos todo o espaço ao redor. Selecionar o desejado aqui seria correto. Agora, se você ampliar um por um, poderá ver como isso é pequeno. Precisamos aumentar a imagem e talvez algo em torno de 80 por 80, só que muito maior. Podemos testá-lo no jogo mais tarde para ver se é grande ou pequeno. Então, agora podemos guardar tudo para este. Vou clicar nele novamente. Vá para Visibilidade, altere-a para Testável sem toque. E isso ocorre porque não queremos que o mouse interaja com ele. Foi isso para tudo. Vamos salvar isso. Vamos fechá-lo e passar para o próximo. 131. 10.02 Exibindo a mira: Agora vamos adicionar a cruz à tela. E você também pode tentar fazer isso sozinho. Já fizemos isso antes. Se você não se lembra, vamos fazer isso juntos novamente. Vamos ver as plantas. Agora vamos ao controlador do player. É aqui que temos toda a nossa interface de usuário no gráfico de eventos. Você pode acessar seus widgets aqui. Você precisa criar o valor de enumeração para ele. Se você simplesmente abrir a pasta de plantas, pasta en e os widgets do jogo aqui dentro, como antes Vamos adicionar um novo enumerador. Vamos chamar isso de cruz. Vá em frente e economize. Vamos voltar ao controle de jogo aqui. Clique com o botão direito do mouse em Criar widgets aqui, selecione Criar widgets e selecione Cruzar Clique com o botão direito nela, promova-a para uma variável e chame-a de B cross. Vá em frente e adicione-o à janela de exibição. Adicione duas janelas de visualização, sem mais nem menos. Ok, assim como antes, vamos tirar essa variável cruzada B. Vamos clicar com o botão direito do mouse e convertê-lo em um get validado. Vamos conectá-lo aqui. Se for válido, podemos simplesmente adicioná-lo diretamente à janela de visualização. Se não for válido. Vamos criá-lo primeiro, antes de adicioná-lo à janela de exibição Lembre-se também de adicioná-lo, vamos ver aqui, ao Hyde Widget Se você clicar em Hyde Widgets também poderá encontrá-los aqui Se você não a tiver aberto, você pode pegar essa cruz e convertê-la corretamente em uma obtenção validada Se estiver na tela e quisermos removê-lo, podemos arrastar e dizer remover dos pais. Vá em frente e organize um pouco mais desse jeito. Ok, vamos salvar tudo e agora vamos adicioná-lo à tela. Vamos ao gráfico da van. E acho que o melhor lugar para adicionar isso talvez seja depois de gerar o jogador, você oculta a seleção da equipe e também mostra o widget principal Vamos mostrar a cruz também. Vamos atacar a partir daqui e dizer mostrar ocultar o widget e chamar esse evento que criamos Vá em frente, selecione a cruz e selecione Mostrar. Isso deve funcionar agora, compile, vamos jogar. Agora vamos jogar como cliente, por exemplo, e selecionar Terrorist. Agora você pode ver que tenho o Crossa no meio da minha tela agora Você pode optar por ajustar o tamanho, se desejar. Se você simplesmente acessar a interface do usuário e acessar o Crosier, poderá clicar nela e talvez alterar o tamanho para algo como 60, 60, se achar que é muito grande. E você pode tentar jogar novamente e ver como fica. Talvez algo assim seja muito melhor do que antes. Ok, então é assim que você adiciona um crosier à tela e vamos passar para a próxima 132. 10.03 Adicionando propriedades de arma à estrutura: Antes de continuarmos, precisamos adicionar algumas propriedades à estrutura. Vamos agora para a estrutura aqui e vamos abri-la. A primeira coisa que queremos adicionar às informações da arma é a velocidade de tiro. Nós precisamos disso. A próxima coisa que precisamos adicionar é o flash do focinho Esse é o efeito visual que queremos jogar sempre que dispararmos a arma. O último é o efeito sonoro, adequado para a velocidade de disparo. Vamos transformá-lo em um carro alegórico. Esse é apenas um valor numérico para o flash do focinho. É um sistema de partículas. Sistema de partículas, o efeito visual. E vá em frente e escolha a referência do objeto para o efeito de disparo. Vamos usar a dica sonora. Estamos usando sinais sonoros aqui para a velocidade de disparo, mosca do focinho e efeito sonoro Tudo parece bom. Vamos salvá-lo. Essas variáveis que criamos aqui, vamos adicioná-las posteriormente à tabela de dados, mas por enquanto terminamos. Nós os adicionamos. Agora vamos fechá-lo, salvar tudo e passar para o próximo. 133. Ação e estrutura de entrada de arma de tiro: Agora vamos criar uma ação de entrada chamada Shot Weapon. E você pode fazer isso de novo sozinho. Tente fazer isso como prática. Vamos até o player e abrir a pasta de entrada. Vamos clicar com o botão direito do mouse, acessar as entradas e adicionar uma ação de entrada. Vamos chamar isso de arma de tiro. Nós realmente não precisamos fazer nada dentro daqui. Vamos abrir o contexto do mapeamento de entrada. Vamos adicionar outro mapeamento. Deveria estar aqui na parte inferior. E vamos selecioná-lo e procurar a arma de tiro. Vá em frente e selecione-o. E para a tecla, vamos usar apenas o botão esquerdo do mouse. Nós realmente não precisamos de nada aqui embaixo. Vamos agora fechá-lo. Vamos abrir a base de jogadores e o interior daqui. Então, aqui eu posso olhar agora e procurar uma arma de tiro. E vá em frente e selecione-o. Agora, também antes de terminar, vejo aqui a arma de equipamento. Vamos realmente consertar isso. Agora que percebi que, para a arma de equipamento, temos essa animação de recarga Na verdade, vamos adicionar isso dentro da nossa estrutura. Se você simplesmente for até a estrutura , abri-la e pesquisar ou apenas criar uma nova variável e chamá-la de equip, algo parecido ou equipar animação. Você também pode escrever a coisa toda, algo assim. Equipe a animação Para esta, vamos abri-la e procurar qualquer montagem Vamos usar uma referência de objeto de montagem de animação para a animação do equipamento. Vou deixar que seja aqui embaixo . Vamos salvar tudo. Vamos agora ver aqui dentro do código. Em vez de fazer assim, o que podemos fazer agora é remover isso, na verdade, excluir esse. E podemos usar essa montagem para tocar diretamente aqui. E podemos remover esse também. Podemos alterar este para equipar algo assim ou equipar E vamos arrastá-lo para mais perto. Agora, o que podemos fazer é aqui, onde quer que o tenhamos usado, se você não sabe onde o usou, a propósito, nós o usamos aqui, mas se você quiser todas as referências, você pode escrever, clique aqui e você pode pesquisar por referências e você pode realmente ver onde as usamos. Vamos clicar no primeiro. É só esse. Vamos clicar no próximo. Está aqui. Podemos clicar em Alt e clicar aqui para desconectá-lo Também vou deletar esse nó rodoviário. Em vez de usar o tipo de arma, é essa, a arma equipada. E já temos a estrutura dividida, então podemos simplesmente clicar nela. Esconda tudo aqui. Esconda os pinos não conectados E eu posso simplesmente clicar nessa animação de equipamento. E eu posso pegar e arrastar isso até aqui. Agora você pode ver que temos uma animação personalizada para todas as armas. Então, dependendo do que conectamos para cada arma, ele pegará essa animação e a reproduzirá Então, vamos compilar e salvar tudo. Temos que mudar isso aqui também. Então, se eu simplesmente desconectar isso, excluo esse nó da estrada E com essa estrutura, novamente, esconda os pinos desconectados Vou mostrar a animação do equipamento. E eu vou adicioná-lo aqui também. Tudo bem, agora consertamos e reorganizamos isso para a animação do equipamento. O que podemos fazer é simplesmente adicionar essas informações dentro da nossa tabela de dados. Vamos abrir a tabela de dados aqui. Vou abrir a tabela de dados. Também vou abrir a estrutura para que eu possa ver quais variáveis eu adicionei aqui. Para as variáveis, deixe-me aumentá-las um pouco e ir para este lugar depois da aula. Aqui adicionamos a velocidade de disparo, também adicionamos o flash do focinho e também adicionamos um efeito sonoro de disparo E adicionamos a animação do equipamento. Novamente, lembre-se de escrevê-los exatamente como o nome que você escreveu aqui. Agora, para a animação do quip, vamos salvar tudo. Vamos acessar o navegador aqui e abrir os ativos. Animação. Pesquise a montagem de animação aqui para a pistola. Vamos clicar com o botão direito do mouse e copiar sua referência. Vá até a tabela de dados da pistola, que é a última aqui Vamos para o lado para ver a animação do quip. Vou apenas colar essa referência. Vou clicar com o botão direito para ver a referência do rifle. Vou colá-lo tanto para o AK quanto para os quatro. A propósito, você pode fazer a mesma coisa aqui. E vamos fazer isso com o AK para ver a velocidade de disparo. Agora temos que testar isso no jogo, não tenho ideia. Vamos escrever 0.1 para o próximo 10.1, para o terceiro 10.1, não sei, temos que tentar isso no jogo Não temos ideia no momento. Quanto ao flash do focinho, o que você pode fazer. Acho que temos alguns flashes de focinho dentro desta pasta onde importamos todas as armas do mercado Se você apenas procurar por focinho, poderá ver esses flashes de focinho Vou usar um deles, por exemplo. Você pode usar o. Flash no cano do fuzil de assalto. Vou clicar com o botão direito do mouse. Sua referência para o rifle para o AK. Eu posso colar um para o M quatro. Eu posso colar o mesmo. Agora você pode ver que, para cada arma, você pode realmente ter um focinho para cada uma delas. Na verdade, eles podem ser únicos. Todos eles podem ter efeitos sonoros exclusivos, animações exclusivas, velocidades de filmagem exclusivas e assim por diante Então você pode ver como esse método é bom. É muito dinâmico e é muito fácil de mudar. Se um dia você quiser ter outro efeito sonoro, basta entrar aqui e adicionar outra referência. Ok, para a pistola, temos o flash do cano da pistola aqui e podemos clicar com o botão direito neste Podemos copiar a referência novamente. E podemos colá-lo aqui. Agora, para os efeitos sonoros de filmagem , ainda não os importamos, então vamos realmente fazer isso enquanto estamos fazendo isso aqui. Vamos abrir a pasta de materiais de custo. Vamos voltar ao material de custo aqui. O que eu quero que você importe é o tiro AK 47. Eu também quero que você importe os 41 tiros e também o tiro de pistola Esse é um tiro de pistola. Vamos para a pasta de áudio como efeitos. Deixe-me remover a palavra de pesquisa e você pode clicar e arrastá-la até aqui. E, assim como antes, você pode clicar em todos eles. Clique com o botão direito para criar várias dicas. Eu vou abrir todos eles aqui em cima. Reduza o som aqui para 0,3. Acho que quero reduzi-los ainda mais porque eles estão muito altos e não quero que eles entrem neste curso. 0.1 para todos eles. E vamos tentar jogar. OK. Incrível. Tudo parece bom. Vamos fechar todos eles. Agora, antes de copiarmos as referências, vamos renomeá-las. Vou renomear este para SC e remover o Q aqui no final Eu também vou trocar isso pela pistola. Vamos remover o Q e escrever C no início. O último para o AK. Novamente, remova Q e A.C para o início. Agora, para as referências, vamos copiar primeiro o AK 47. Vou copiar a referência. E então aqui na tabela de dados do AK 47, que é o primeiro, posso colá-la aqui para o M quatro. Se pudermos encontrá-lo aqui. Aqui estão os quatro. Vamos clicar com o botão direito do mouse em copiar, referenciar e colar. E o último é o tiro de pistola. Copie a referência e cole-a aqui também. Agora vamos em frente e , na verdade, é um salvamento automático, então vamos fazer o download aqui e no CSV Agora, aqui, vou renomeá-lo. Copiando o mesmo nome aqui para as informações da arma, excluindo a antiga Estou renomeando a nova e depois vou voltar às tabelas de dados do meu esquema e agora é só pegar essa nova tabela de dados e conectá-la Está bem? Agora, todas essas informações estão aqui. Você pode verificar se tudo está correto e se está tudo bem. Podemos ir em frente e salvar tudo isso. Agora ele deve ser reproduzido automaticamente, porque aqui na base de jogadores. Agora, aqui na base de jogadores da arma de equipamento, temos agora essa animação de equipamento. E agora está sendo reproduzido automaticamente. Como definimos na estrutura o que é, se jogarmos agora e vermos o que acontece se selecionarmos terrorista e eu sair e pegá-lo, você deve ver se ele está realmente jogando. E para a pistola também. Agora, em vez de extrair do tipo de arma, todas as informações que podemos tornar únicas, podemos adicionar a essa estrutura de arma. 134. 10.05 Criando o temporizador de tiro de arma: Ok, então agora vamos abrir a base de jogadores. E aqui dentro, vamos até o evento em que fizemos a arma de chute Para começar com isso, vamos criar o servidor um clique direito e fazer um evento personalizado. E vamos criar a arma de tiro do servidor dentro daqui. Primeiro, vamos criar um cronômetro, colocá-lo em réplicas no servidor e ser confiável para Vamos criar um cronômetro como o outro cronômetro que criamos aqui para as etapas em que criamos o cronômetro definido É o mesmo método que vamos usar para fotografar. Se descermos até aqui e arrastarmos daqui e dissermos cronômetro por evento, prosseguirmos e selecioná-lo Então, a partir daqui, podemos arrastar e criar um novo evento personalizado. Podemos chamá-lo de Shot Weapon Loop. Ok, a lógica da arma de tiro estará aqui embaixo. Lembre-se de configurar o cronômetro para ficar loop e, em seguida, temos que definir um Agora, o tempo definido aqui depende da velocidade com que sua arma está disparando. Para AK 47, por exemplo, digamos que seja 0,1 para uma pistola Talvez seja para pistolas Se você não quiser fazê-las disparar automaticamente, nós realmente não precisamos desse cronômetro Mas para armas automáticas, AK 47 e as informações que elas precisam estão disparando por meio de um cronômetro. Porque ele repetirá o código nessa velocidade , já que essa é a velocidade da arma. Lembre-se de que, na estrutura, se eu voltar e abrir a estrutura, adicionamos essa variável de velocidade de disparo. Na verdade, podemos usar isso para nos conectar aqui. Dependendo da velocidade com que sua arma está disparando, esse cronômetro mudará a hora Dependendo disso, precisamos uma referência à arma, então vamos fazer isso. Vamos clicar aqui e criar uma nova variável. E escolha a base de armas aqui, entre os tipos variáveis. Vá em frente e selecione isso. Vamos chamar isso de uma arma. Temos que ligar para esse aqui. Chame isso de arma de tiro de servidor. Eu posso soletrar isso assim. Arma de choque do servidor. Agora temos que definir a arma. Agora, se você compilar, verá que terá uma era. E diz novo parâmetro. Mesmo que esteja escrito arma aqui em cima, às vezes isso acontece e você só precisa deletá-la e fazê-la novamente. Ou você pode clicar no arquivo e atualizar todas as notas. E isso também resolverá isso. Ok, precisamos de uma definição para a arma agora. Na verdade, não temos uma variável ou a arma porque a única coisa que temos é a arma equipada, mas também excluímos que, posteriormente, temos uma arma não equipada e também temos muitas armas Aqui em cima temos a arma saqueada. No entanto, também estamos liderando essa variável de arma saqueada por aqui Na verdade, não temos nenhuma variável para a arma que permaneça consistente. Na verdade, vamos criar um. Vamos até a arma equipada aqui. Quando equiparmos essa arma, vou clicar com o botão direito do mouse na mesma variável e transformá-la em uma variável Vamos chamar isso de arma equipada. Esta é uma arma equipada. Estamos equipando a arma. E esta é a arma equipada. E podemos usar essa variável. Nós não excluímos isso. Isso mudará toda vez que estiver sendo definido. Lembre-se de clicar nessa variável e configurá-la como replicada. Na verdade, não precisamos notificar nada replicado. Significa apenas que estamos apenas enviando essas informações para o cliente. O cliente também sabe o que é essa variável. Vou apenas selecionar tudo isso aqui e afastá-lo. E movendo essa variável para cá. Agora temos essa variável com a qual podemos trabalhar. Ok, podemos ir até aqui agora. E podemos pegar essa arma equipada e conectá-la aqui. Agora temos isso. Vamos compilar agora a partir deste. Podemos arrastar e dizer que podemos obter a variável de nome e, em seguida, podemos obter as informações da arma, obtenha-as aqui. E então vamos afastar isso e parar. E agora podemos usar a velocidade de disparo daqui e conectá-la aqui. Está bem? Então clique nele e esconda todos os pinos desconectados Ok, então sempre que pressionarmos um botão do mouse, ele vai disparar e disparar neste cronômetro. Agora também temos que parar esse cronômetro em algum momento Então, vamos clicar com o botão direito do mouse nessa alça promovida a uma variável e chamá-la de alça de arma Shot. E podemos usar essa alça para parar o cronômetro, então temos que saber quando estamos filmando e quando não estamos filmando Quando soltarmos um botão do mouse, esse gatilho completo será acionado e não estaremos mais disparando a arma. Na verdade, vamos adicionar uma bala aqui. Vamos adicionar um. E vamos chamá-la de arma baleada. E vou adicionar um B na frente para manter a consistência, já que é um lingote E transforme-o em um lingote como este. OK. Agora você pode arrastar a partir daqui e dizer galho e conectá-lo se for verdade Se a arma disparada for verdadeira, queremos ir em frente e atirar na arma. No entanto, se não quisermos mais disparar a arma, vamos pegar essa alça e dizer que é válida. Se esse identificador for válido, apenas certifique-se de que não estamos recebendo nenhuma caixa, certificando-se de que seja válida. E vamos fazer outro galho. Se for válido, pegue este cronômetro e diga claro e invalide o cronômetro pela alça Vamos parar esse cronômetro aqui neste código. Agora podemos copiar e colar isso. E para completar, quando soltarmos um botão do mouse, ele definirá a arma de tiro como falsa. Quando disparamos a arma, ela precisa ser verdadeira, quando é falsa, quando paramos de atirar, ele vai perguntar: esse cronômetro é válido Se estiver, vá em frente e pare o cronômetro. Eu só vou reorganizar as coisas um pouco aqui. Agora que fizemos isso, vamos testar e ver se tudo está funcionando. E vamos clicar em jogar aqui para o cliente, por exemplo, vou selecionar terroristas Vamos pegar alguma coisa. Vamos pegar as informações agora mesmo. Vamos tentar atirar. No momento, estou tentando atirar com o mouse um e nada está acontecendo. Nada está sendo impresso na tela aqui em cima. Deixe-me cancelar, aqui temos uma era. Esta era está dizendo acesso. Access none significa apenas que ele está tentando ler algo dessa variável de arma, essa variável de arma aqui. No entanto, acesso não significa que essa variável está vazia, não tem nada para ler. Na verdade, isso é verdade porque colocamos apenas a arma equipada dentro do evento de equipar armas E essa só é ativada sempre que trocamos de arma. Se eu for até terroristas e pegar alguma coisa, tenho que trocar para outra arma e depois voltar antes que essa variável seja definida agora, deixe-me atirar agora e ver o que acontece e nada está acontecendo Na verdade, isso ocorre porque estamos executando isso várias vezes. Se eu desconectar esse falso, você pode ver aqui se eu não paro o cronômetro, você pode ver mais claramente se eu simplesmente pegar outra coisa novamente Agora, se eu disparar com a arma, estou atirando agora. E se eu solto o mouse, sempre que solto o mouse, ele está na verdade imprimindo. Isso é o que nós queremos. Queremos que seja impresso sempre que pressionamos o mouse, não quando o soltamos. Isso ocorre porque o cronômetro aqui está sendo executado muito rapidamente no código Sempre que estou segurando meu mouse com um botão , ele nunca tem a chance de realmente reproduzir esse código. Essa parte aqui, na verdade, precisamos fazer apenas uma vez. Deixe-me apenas reconectar isso aqui do verdadeiro. Eu vou fazer um nodo único. Sempre que eu pressiono um botão do mouse, ele faz esse código uma vez e, em seguida, podemos redefinir esse código sempre que quisermos. Eu só vou afastar tudo isso. E neste eu vou fazer um novo evento personalizado. E vamos ligar para esse e atirar novamente. Quando podemos filmar de novo? Podemos atirar novamente. Sempre que pararmos de filmar aqui, vou ligar assim, podemos atirar novamente. E desse jeito, essa é a única coisa que tivemos que fazer. Agora vamos tentar novamente. Vamos compilar e testar. Deixe-me selecionar terroristas. Deixe-me pegar as armas. Agora vamos corrigir esse problema. Novamente, isso é um problema com as armas saqueadas aqui em cima. Então, na verdade, vou fazer uma solução difícil daqui a pouco. Eu só quero ver se isso aqui embaixo funciona e podemos ir em frente e consertar isso. Então, se eu pegar a arma e segurar um botão do mouse, agora você pode vê-la impressa na tela corretamente. E se eu soltar o mouse , ele para de imprimir. E vamos realmente fazer isso também com o rifle. Então, se eu, como um terrorista, pegar o rifle, pegar a pistola e alternar para frente e para trás para definir a variável, agora eu posso segurar o mouse com um botão e ele está atirando, e se eu soltar, ele não está mais atirando Ok, então esse código aqui embaixo está realmente funcionando totalmente. Agora terminamos com este, e eu também vou excluir essa string de impressão. Vamos até aqui e consertar isso. Antes de terminarmos, deixe-me removê-lo daqui. Vamos fazer uma solução muito boa para este. Nunca mais se encaixa aqui embaixo nas armas sobrepostas, é isso que você está tentando conseguir Vamos pegar essa e dizer: isso é igual à variável da arma saqueada Estamos tentando verificar se o que estamos saqueando atualmente está configurado com a mesma variável que dissemos anteriormente Se for verdade, queremos excluir a variável antiga. Deixe-me mover isso para cá. Queremos excluir a antiga variável saqueada. Depois disso, queremos executar a nova variável. Com isso bloqueado, estamos basicamente verificando se o que estamos saqueando agora é o mesmo que dissemos anteriormente Se for, excluiremos essa variável antes de definir a nova. Isso, certifique-se de que não definamos o mesmo duas vezes. Se não for a mesma coisa, se não for o mesmo item, estamos saqueando Vá em frente e execute o código sem excluí-lo. Ok, vou organizar isso mais tarde, mas vamos ver se funciona. Antes de experimentar, vamos conectar isso novamente. Aqui estamos. Removendo o item do inventário. Vou clicar e arrastá-lo de volta para aqui. Vá em frente e compile agora, vamos tentar clicar em Jogar e selecionar Terrorist e ver se funciona Se eu entrar aqui, você pode ver que realmente funciona. Ok, é assim eu acho que é realmente um método melhor para fazer isso. Como você vê, não está mais funcionando. A próxima coisa é que, na verdade, estou percebendo que os ícones estão errados. Vamos apenas depurar isso. Vamos voltar ao widgit principal, vamos abri-lo e vamos ao gráfico Só estou vendo o que está aqui em cima, por que está fazendo isso. Para o rifle, temos o rifle de imagem, rifle de imagem. Isso está correto aqui. Para a arma equipada. Para a pistola, estamos mostrando a pistola e escondendo o E para o rifle, estamos mostrando o rifle e escondendo a pistola, a opacidade Isso parece correto. Há algo errado definir o tipo de arma equipada. Vamos voltar para o jogador. Deve haver algo errado com a arma equipada. Para a arma equipada. Vamos ver aqui, essa é a interface do usuário do inventário de atualização. Estamos configurando o tipo de arma para o tipo de arma para equipar o tipo de arma a ser equipada Nós o definimos aqui quando pressionamos o botão. Quando pressionamos Primário, estamos configurando para rifle, o que está correto. Esse é o nosso rifle secundário, estamos configurando para uma pistola Isso também está correto. Na verdade, nada está errado aqui. Então, algo deve estar errado quando aludimos à arma, quando aludimos à arma aqui, arma de saque, estamos configurando isso também, estamos definindo o tipo de arma também o Ao que acabamos de aludir, que também está correto Na verdade, não há um erro em nenhum lugar aqui. Eu suspeito que talvez haja um erro na tabela de dados. Se você abrir a tabela de dados, vamos dar uma olhada, o tipo de tabela de dados aqui. Então, temos que procurar o tipo de arma. Se escrevemos algo errado, rifle, rifle e Na verdade, eles estão todos corretos. Eles estão configurados para o correto. OK. Na verdade, nada está errado. Não consigo ver nenhum erro. Talvez agora o problema seja que estejamos configurando o tipo de arma equipada corretamente. No entanto, também estamos executando esse código. E essa parte do código ainda não percebe que foi definida com esse valor. Se fizermos um atraso e dermos a chance de definir isso, basta dar uma olhada e ver se isso funciona, porque eu realmente não gosto de atrasos aqui. Mas vamos dar uma olhada e ver se isso realmente resolve o problema. Se eu saquear as armas, clico em uma. Se eu clicar em dois, agora isso também funciona. Então você pode ver que realmente funciona. Agora, se eu clicar em 1.2, os ícones estão funcionando. O problema aqui é que isso está sendo configurado corretamente, o tipo de arma. No entanto, você também está executando esse código muito rapidamente. Então você está executando esse código antes que ele tenha a chance de realmente mudar. Ok, para corrigir esse problema, podemos tentar adicionar um atraso. No entanto, neste código, vamos realmente fazer isso dentro do nosso WB main Dentro da função aqui que criamos anteriormente. Aqui é quando definimos a opacidade do rifle. Antes de definirmos a opacidade, você pode tentar adicionar um atraso e o atraso. Comece tornando-o muito pequeno, 0,01 e compile. E vamos clicar em play. E se isso funcionar, então é realmente muito bom. Agora eu posso pegar tudo e ver que a pistola está pegada. E eu vou apenas maximizar meu ponto de vista. A pistola agora está levantada. Eu posso clicar em 14. Clique em dois para pegar a pistola, você vê que às vezes ganhamos um dólar Eu mudo para o meu rifle, vamos configurá-lo para 0,03 Em vez disso, compilar Clique em jogar. Vamos tentar novamente. Vamos pegar tudo. Clique em rifle, pistola Fuzil, pistola. Agora tudo parece estar funcionando bem. Ok, então isso funciona. Portanto, 0,03 corrige o problema normalmente. E isso seria uma solução muito, muito boa e fácil. Ok, então eu sei que tem sido muito confuso aqui, mas nós realmente tivemos que fazer isso porque isso estava funcionando o tempo todo Então, se a arma equipada alguma vez aparecer aqui, ela não está realmente funcionando no momento. Então, eu vou deixar pra lá. No entanto, se alguma vez falhar, como aqui em cima, você pode usar o mesmo método verificando se a arma está equipada aqui Você sempre pode verificar se é igual ao anterior que definimos. Em seguida, você pode remover a variável e definir a nova. Então, em vez de fazer isso no método antigo, no entanto, acho que isso não vai funcionar porque aqui estamos verificando se já estamos usando um rifle, mas no futuro podemos pegar um bug Eu não tenho ideia agora. Temos que nos desenvolver e ver. Mas é assim que acontece no desenvolvimento de jogos. Você tem bugs durante a programação e precisa corrigi-los. O bom para um programador é saber como resolver esses problemas E aqui você vê que acabamos de adicionar um agressor e verificar se era o mesmo ou não, e resolvemos esse problema dessa maneira Você sempre verá quando desenvolve jogos, mesmo em grandes estúdios. Mas você só precisa saber como corrigi-los e como superar o problema. Vamos agora experimentá-lo. Vamos clicar em play antes de terminarmos isso para ver se tudo está funcionando. E se eu selecionar o terrorista, eu pego tudo aqui e posso alternar entre eles. Se eu deixar cair os quatro, estou apenas tentando soltar agora, o soltar, você pode ver que também está desaparecendo Portanto, temos que adicionar um pequeno atraso aqui porque ele não está percebendo que excluímos isso Se eu dissesse o atraso para 0,05 e eu clicasse em jogar. E clique em jogar aqui. E vamos pegar uma arma. Vamos deixar isso de lado. Vamos pegar, soltar, soltar, soltar. Veja, agora está funcionando perfeitamente e eu posso alternar entre eles. Só estou tentando testar o jogo para ver se ele falha. Agora parece funcionar bem. Tivemos que ter esse pequeno atraso imperceptível porque, caso contrário, o programa não sabia o que estávamos fazendo aqui É bom saber ter isso aqui também. Isso corrige todos os problemas que tivemos com a exclusão dessa variável sem que quiséssemos que ela fosse excluída antes de executar o código. Então, tudo está funcionando agora. Eu vou reorganizar isso. Vou colocá-lo aqui dentro e vamos para o próximo. 135. Traço de linha 10.06 por canal: Nesta lição, vamos criar uma função linha por canal. Dessa forma, vamos disparar a bala da arma Vamos clicar no player e abrir a base de jogadores aqui. Vamos ver o código que escrevemos antes. Na arma, aqui é onde queremos adicionar o traçado de linha por canal. Mas antes disso, ganhamos um pequeno dinheiro com a arma equipada, quando sempre que eu saqueio uma arma, se eu clicar em terrorista, eu perco alguma coisa. Se eu atirar agora, não me dá um dólar porque eu troco a arma No entanto, se eu não trocar a arma, então se eu pegar essa diretamente e começar a atirar, vou me dar um erro aqui, porque só estamos configurando a arma equipada sempre que, na verdade, estamos trocando com as teclas do teclado. Vamos copiar essa arma equipada. E vamos subir onde quer que carreguemos a arma aqui na arma saqueada E vamos configurar a arma equipada sempre que lermos esse código aqui, sempre que estivermos desarmados, vamos colocar a arma equipada aqui Depois desse atraso aqui. Vamos continuar e colar. E vamos conectá-lo. E eu também vou afastar tudo isso para que eu possa ver aqui. E eu vou conectá-lo aqui. E então arraste da arma saqueada para esta. Novamente, você pode ler notas aqui, fazer algumas e organizá-las. Então, isso deve estar funcionando bem agora. Agora também estamos configurando a arma equipada sempre que estivermos saqueando aqui Ok. Então, eu vou afastar isso também. Aumente o tamanho do comentário, algo assim. Ok, então isso agora está corrigido. A próxima coisa que eu quero fazer é aqui com as armas. Então, vamos até as armas e abrir a base de armas. Vamos agora esconder essas esferas. Nós realmente não precisamos mais deles. Vou clicar na esfera de colisão e selecioná-la novamente. Aqui, escondido no jogo. E eu vou fazer isso na base de armas. Então, isso acontece com todos eles. Se eu salvar agora, tento jogar o jogo apenas para verificar se isso foi corrigido. E você pode ver aqui que está corrigido agora. Está bem? Então, nós realmente não precisamos mais dessas esferas, ok? Então, vamos seguir em frente e fazer o traçado da linha por canal. Então, vamos ver o código que escrevemos antes aqui. Vamos começar a fazer isso a partir daqui. Sempre que repetirmos o código, vamos arrastar a partir daqui e escrever o traçado de linha por canal. Vamos selecionar essa função. Agora, parece complexo, mas na verdade é muito, muito fácil entender o traçado de linha por canal. Ele precisa de um local inicial e de um local final. O local inicial é onde você estiver agora, e o local final é onde eu estou mirando agora Com micros, é isso que temos que dizer. A forma como obtemos essas informações é se você escrever clique e primeiro precisamos acessar o controlador do player. Agora tente fazer isso sozinho. Se você se lembrar de como acessar o controlador do player, podemos fazer isso juntos. Agora você pode escrever get controller, você pode obter o controlador desta reprodução exatamente como antes, temos essa referência do controle get player a partir da face. Agora você pode arrastar a partir disso Se você apenas escrever câmera, queremos obter algo chamado gerenciador de câmeras. Se você simplesmente percorrer tudo isso, tente ler o que temos. Este, pegue o gerenciador de câmera do player. Com este, somos capazes de chegar exatamente onde pretendemos com nossa venda cruzada Obtendo este gerenciador de câmeras, vamos arrastar a partir disso e dizer obter a localização da câmera. Esta é a nossa posição inicial. A posição inicial agora é onde quer que eu esteja agora, aqui, aqui, como o jogador no meio da minha tela. Agora temos que dizer que a localização final é onde eu esteja mirando com microsa A maneira de fazer isso primeiro é arrastar a partir disso e dizer chegar ao vetor de avanço. Então, estamos obtendo a direção direta desse gerenciador de câmeras. Então, estamos pegando isso e multiplicando. A razão pela qual estamos multiplicando, vamos primeiro aqui e vamos mudar esse Não precisamos que seja um vetor. Vamos transformá-lo em um flutuador. Vamos multiplicá-lo por algo muito grande. Por exemplo, 20.000 algo assim. A razão pela qual fazemos isso é estamos obtendo o vetor para frente, ou seja, a direção para frente desta câmera. E então estamos multiplicando isso por muito porque queremos que ele alcance a distância ali na parede Estamos multiplicando isso. Então temos que dizer mais. Aqui estamos adicionando o local inicial. Estamos adicionando o local inicial junto com essa linha para o local final. Dessa forma, obtemos a localização final. Você pode imaginar aqui que estou como jogador e estamos obtendo o local de partida. É aqui que estou agora. E estamos basicamente criando uma linha e a adicionando com o início. E isso fará com que esteja lá no final, onde estou buscando agora Agora, é muito confuso entender como iniciante ou na primeira vez que você faz isso Mas tente pensar em como isso faz sentido. Agora, quando somarmos isso, vamos adicioná-lo aqui até o final. E isso deve bastar. Portanto, lembre-se também de conectar esse pino de execução. E vá em frente e faça anotações de redirecionamento. Ok, agora isso deve funcionar aqui. Agora temos algo chamado hits, e você pode ver que é um alfinete azul. E se você já percebeu, já usamos pinos azuis antes porque informações de nossa arma também são, na verdade, um alfinete azul Um pino azul significa que esta é uma estrutura com estruturas como antes, podemos arrastar e dizer quebrar, podemos quebrar estruturas, você tem todas essas informações que pode usar. Você pode pegar esse traçado de linha por canal. Assim, você pode pegar a linha que criou aqui e obter o local em que realmente atingiu essa linha. Você pode obter o ator que atingiu com esse traçado de linha por canal. Você pode saber o tempo, a distância, e muitas coisas aqui, nós realmente não precisamos de muita coisa agora. A única coisa antes de fazermos isso é que queremos nos arrastar desse lingote e fazer um galho Porque não queremos continuar nosso código se isso não for válido. Sempre que realmente encontramos algo, queremos continuar com o código. É sempre bom ter isso caso contrário, às vezes você terá uma era. A próxima coisa que temos é esse bloqueio. Sempre que realmente atingimos algo com essa linha, queremos continuar o código também, criar uma ramificação aqui também. Além disso, queremos ter certeza de que o jogador que estamos atingindo causará algum dano Porque não queremos bater em nenhum ator aleatório com uma atuação de sucesso, como antes. Já fizemos isso antes. Digamos que o ator tenha uma etiqueta, então você pode escrever o player. Lembre-se de que adicionamos o tag player. Se você não se lembra, pode clicar em, acredito que seja o padrão da classe E se você pesquisar por tag, lembre-se de que adicionamos o reprodutor de tags ao ator. O ator tem tag player. Temos isso para todos os jogadores porque o adicionamos à base de jogadores. Agora podemos arrastar a partir disso e dizer puxe se estivermos batendo em alguma coisa Então, temos um golpe bloqueador, o ator que atingimos é um jogador. Então, queremos seguir em frente e aplicar alguns danos. Ok, com esse. Primeiro, podemos simplesmente escrever uma string de impressão para ver se ela está realmente funcionando aqui. Para a depuração, você pode realmente alterar isso para persistente, porque então você pode ver a linha que está fotografando E você pode ver se ele está realmente fazendo algo errado ou correto. Também para os atores ignorarem. Você não quer se matar aqui. Ignorar a si mesmo já está ativado, mas às vezes, quando me desenvolvo em meu próprio tempo, gosto de me afastar disso e dizer faça. Agora você pode criar uma matriz e depois arrastar a partir daqui e dizer self. Agora, na verdade, ignorará esse jogador aqui, os atores ignorarão a si mesmos. E já está fazendo isso aqui. Talvez isso seja desnecessário, mas eu só gosto de tê-lo aqui. Segurança. Se você quiser bloquear outros atores. Então você não ignora outros atores. Então você não pode atingi-los. Você sempre pode clicar no sinal de adição e adicionar outro ator aqui. Mas, por enquanto, deixe-me clicar com o botão direito aqui e remover esse elemento da matriz. Ok, isso foi tudo para o rastreamento de linha. E vamos compilar E deixe-me clicar em jogar e ver o que acontece se eu jogar como servidor e selecionar terroristas E eu seleciono, por exemplo, uma arma aqui e atiro. E nada está acontecendo agora. Deixe-me sair daqui e ver por que isso não está funcionando. Na verdade, está jogando, mas está jogando. Um pouco atrasado. Se eu tentar novamente e segurar o mouse, ele está realmente jogando. Você pode ver que agora está criando as linhas. Onde quer que eu fotografe, na verdade, está atirando a essa distância ali. Qualquer coisa que eu esteja mirando, mas é uma resposta tardia E a razão pela qual isso acontece é que precisamos de uma foto inicial aqui. Porque sempre que estivermos filmando, lembre-se da hora que você definiu aqui para um cronômetro; na verdade, levará esse tempo até que seja reproduzida Por exemplo, se, digamos que eu escrevi três aqui para meu cronômetro, compilo e clico em reproduzir, faltam 3 segundos para que ele realmente seja gravado Agora estou segurando meu mouse e você pode ver depois de 3 segundos ele vai tirar a foto aqui, a hora que você definiu aqui. Na verdade, vai esperar esse tempo antes de começar a circular. Para corrigir isso, precisamos de um evento inicial, como o de filmagem, que executará esse código uma vez antes de executarmos o código aqui. E é assim que resolvemos esse problema. Vamos fazer algo chamado tiro inicial de arma. Deixe-me apenas arrastar isso e criar um evento personalizado. Provavelmente preciso afastar tudo isso para que tenhamos espaço para trabalhar com esse evento aqui. Vou chamar isso de tiros iniciais de arma. Este está sendo executado apenas uma vez para garantir que esteja sendo executado antes que esse cronômetro por evento seja executado aqui após o Isso só vai ser executado uma vez. Então, podemos dizer tiro de arma inicial. Então, ele vai filmar apenas uma vez antes de realmente começarmos a filmar. Portanto, não temos nenhum atraso no tiroteio. Vamos clicar em jogar agora. E se eu pegar alguma coisa e atirar, você pode ver que ela dispara. Ele dispara imediatamente. Não precisamos esperar por nada agora. Está funcionando. E vamos encerrar isso. Acredito que recebemos um erro agora. Se eu não tenho nada e tento atirar, você pode ver que consigo fotografar alguma coisa e também recebo um erro. Se eu clicar nele, ele diz que há uma seta com esta. Para isso, podemos fazer algo aqui. Sempre que disparamos a arma, podemos ter certeza de que realmente temos uma arma. Da maneira como fazemos isso, podemos clicar com o botão direito do mouse aqui e converter isso em um get validado e seguir em frente e fazer algo assim Também podemos fazer outra coisa. Vamos manter isso e pegar esse tipo de arma equipada e, a partir daí dizer que se isso não for igual ao estado desarmado, podemos atirar porque realmente não faz sentido atirar sempre que estamos desarmados porque não temos uma Vamos conectar isso. Mais tarde, provavelmente o faremos se não tivermos MO. Quando adicionamos MO, se não temos MO, também não queremos filmar. Vamos adicionar isso mais tarde sempre que adicionarmos o MO ao jogo. Tudo bem, agora estamos disparando a arma. No entanto, não estamos atingindo o jogador. Se você ver aqui, se eu clicar em jogar, eu pego o terrorista aqui, pego meu outro cliente e seleciono terroristas, como pegue uma arma aqui, deixe-me tomá-la como servidor Se eu atirar como servidor no jogador, ele está atingindo o jogador No entanto, nada está acontecendo. Você pode ver o que quer que eu bata em alguma coisa, a linha atrás dela fica verde. E isso significa que ele sabe que atinge alguma coisa. No entanto, dissemos que só queremos reagir sempre que for o jogador que estamos atacando Sempre que não é o jogador, ele realmente não fará nada, mas sabe que acerta alguma coisa. No entanto, para o jogador, não está realmente atingindo nada Vamos ajustar as configurações de colisão para o jogador na próxima lição 136. 10.07 Ajustando as configurações de colisão do jogador: Tudo bem, bem-vindo de volta. Vamos ajustar as configurações do player aqui. Configurações de colisão. Então, deixe-me clicar no Mesh. E deixe-me ir até as configurações de colisão. Sempre que estamos atingindo algo, precisamos gerar um evento de sucesso Vou ativar o evento de acerto gerado porque também precisamos gerar um evento de acerto quando causamos danos, saúde e coisas assim causamos danos, saúde e coisas assim. E para a colisão aqui, se você der uma olhada no traçado da linha, estamos usando o canal de visibilidade Agora, para traços de linha, você pode mudar isso. Se você acessar as configurações do projeto agora, não vamos alterá-las porque realmente não temos problemas com isso. Mas, no futuro, se tivermos um problema e precisarmos mudá-lo, vamos mudá-lo. Mas, por enquanto, vamos manter a visibilidade. Mas vou mostrar onde você pode alterá-lo , por precaução, nas configurações do projeto. Se você encontrar uma colisão, se eu apenas percorrer e tivermos algo chamado colisão, temos algo chamado canais de rastreamento Isso é um traçado de linha. Na verdade, você pode adicionar um novo canal ao traçado de linha e, em seguida, selecionar o canal que você criou. Na verdade, você também pode usar um canal personalizado para isso, mas, por enquanto, vamos usar o canal de visibilidade. E se você clicar na malha aqui para ver as predefinições de colisão, vou alterá-la para personalizada Então vamos, para a visibilidade, dizer bloquear porque estamos usando o canal de visibilidade. Agora vamos continuar assim. Se tivermos um problema mais tarde, podemos alterá-lo. Vamos compilar tudo. No momento, estamos usando uma colisão precisa porque não estamos usando esse cápsula do componente de colisão, na verdade estamos usando essa malha para criar os eventos de impacto Vamos agora clicar em jogar e ver se ele diz olá quando eu atiro no jogador. Se eu pegar essa arma aqui como a outra, vou selecionar terroristas Eu vou pegar esse. Agora esse é o cliente. Eu vou atirar no jogador. No momento, nada está acontecendo. Deixe-me tentar fazer isso no servidor. Se eu clicar no servidor, você pode ver que diz olá. No entanto, no momento, o cliente não está dizendo nada para corrigir isso. Como se trata de um modo multijogador, o cliente realmente não sabe qual é o local inicial e o local final. Como você pode ver aqui, o servidor sabe o que é. No entanto, para o cliente aqui, se eu tentar jogar novamente e mostrar a você antes de consertarmos, se eu pegar alguma coisa e para o cliente terrorista como cliente, se eu apenas, digamos que eu atire aqui nesta parede. A corrida de linha é automática. Na verdade, não vai aparecer no cliente porque lembre-se de que a corrida de linha que você está fazendo é jogar no servidor. A linha persistente aqui, a linha de depuração nunca será exibida no cliente O que é normal porque você está executando isso no servidor. Quando damos uma olhada no servidor também aqui, você pode ver que eu atirei nesta parede. No entanto, para o cliente, parece que você atirou lá. , isso realmente não faz nenhum sentido No entanto, isso realmente não faz nenhum sentido no servidor. E eu atiro aqui, eu deveria corretamente. Você pode ver aqui, eu clico aqui. No entanto, para o cliente, nem está lá. A maneira de corrigir isso. Agora, isso é multijogador, então ele realmente não sabe disso. Na verdade, temos que arrastar isso ainda mais para o evento. Vamos começar assim. Vamos chegar ao fim aqui também. Precisamos mover esse código. Vou desconectar esse código aqui. E vamos afastar isso. Temos que voltar ao início aqui. A razão pela qual fazemos isso é quando também executamos esse código no cliente. Porque na verdade não estamos definindo nada. Isso é bom. Se não estivermos configurando nada , não há problema em jogar no cliente. Estamos executando isso no cliente que também sabe qual o local inicial e final e é assim que você corrige esse código. Vamos conectá-los aqui. Agora, deixe-me afastar isso. Deixe-me organizar isso. Deixe-me aproximar tudo isso desta. Agora é só esse código aqui. Deixe-me criar alguns nós de redirecionamento para esses vetores. Está bem? Algo parecido com isso. Agora que isso está resolvendo, deixe-me ir embora, deixe-me pegar esse código e movê-lo para baixo. Temos algum espaço lá em cima. Agora, para esse código, depois que isso for válido, descobrimos que essa arma equipada é válida. Em seguida, podemos inserir esse código. Vamos continuar e conectá-lo. E vamos deixar isso de lado novamente. Vamos conectar o início a isso e o fim a este. Você também pode simplesmente mover isso para baixo para ver o que está acontecendo. E você pode ir em frente e conectar isso se quiser. Você pode simplesmente pegar tudo isso. Você pode clicar com o botão direito do mouse e reduzi-la a uma função. E você pode chamar essa função ou simplesmente torná-la mais descritiva Obtenha localizações de rastreamento de marcadores , algo assim Como você está recebendo informações e não está configurando nada, você pode clicar em Pure porque você realmente não precisa passar por isso. E você pode clicar duas vezes nele. Vá em frente e organize essa função também. Certifique-se de que tudo esteja logado. E deveria ser bom fazer algo assim. Você já fez isso. Agora vamos voltar ao gráfico e deixar tudo um pouco mais perto. Você pode ver que é muito mais limpo simplesmente transformá-lo em uma função. E vamos renomear a localização inicial desses dois marcadores e essa localização final Agora que fizemos isso, podemos compilar para este Nós realmente não precisamos fazer nada porque estamos parando esse tiroteio. Nós realmente não precisamos disso. Essa é a coisa mais importante aqui. Ok, nós temos isso conectado, e acho que isso vai funcionar Agora, deixe-me mudar isso para cá. E vamos clicar em Play. Vamos experimentá-lo. Agora vamos experimentá-lo como cliente. E deixe-me pegar uma coisa. Deixe-me experimentá-lo também como servidor. Pegando o, como servidor. Agora eu posso atirar nesse jogador. E diz olá, assim como o cliente. Deveria dizer olá se eu atirar no jogador e se eu atirar no jogador, na verdade está dizendo olá. Você também pode ver no servidor que a linha está realmente desenhada corretamente. Na verdade, também me irritou. Digamos que no servidor, eu também esteja filmando aqui como cliente. Estou filmando aqui. Você vê que, na verdade, está atirando com precisão. Agora isso está corrigido. Agora ele sabe onde eu estou realmente filmando. Agora, se eu bater no player, você pode ver que diz olá. Como você pode ver como é preciso, se eu bater no player aqui, não diz nada porque eu não estou atingindo a malha do jogador Se eu bater no jogador, por exemplo, deixe-me atirar no jogador. Você pode ver que diz olá. Deixe-me atirar no jogador. Por exemplo, aqui diz olá. Se eu atirar no jogador aqui, ele diz olá. Eu atiro no jogador aqui em cima. Não diz nada. Também é muito bom. Este está atingindo o jogador aqui porque a malha em si não é muito boa Ela se curva, mas você pode ver, por exemplo, se eu jogo como contraterrorista, é assim que as malhas estão agora Se eu apenas jogar como contra-terrorista e maximizar isso, ele deveria dizer olá como servidor. Se eu filmar aqui, você pode ver olá. O rastreamento da linha não está sendo exibido porque estamos no cliente. Lembre-se, se eu simplesmente fotografar aqui, por exemplo, você pode ver dizendo olá. Se eu atirar aqui, ele diz olá. Você pode ver que essa é mais precisa, essa malha aqui, em comparação com a outra. É também como você faz a malha e quão precisa ela é, e assim por diante. Então você pode ver a diferença. Eu posso filmar aqui e diz olá, porque eu estou atirando nele. No entanto, se eu atirar aqui, ele não está dizendo olá. Também é muito preciso com essa colisão. 137. 10.08 Criando os soquetes de flash do focinho: Antes de adicionarmos o efeito visual e os efeitos sonoros para a filmagem, precisamos adicionar um soquete para o efeito visual do focinho. Vamos fazer isso. Vamos até a arma que estamos usando. Preciso encontrar o esqueleto para a arma. A maneira mais fácil de encontrá-lo, em vez de apenas consultar as pastas do mercado. Você pode abrir as armas, abrir o K para o AK. Clique na arma e clique neste pequeno ícone. Isso o levará automaticamente no navegador de conteúdo até essa arma. Agora vá em frente e abra o esqueleto da arma. E dentro daqui, assim como antes, precisamos adicionar um soquete Já vi que há um soquete aqui. Deixe-me realmente renomeá-lo. Vou renomeá-lo e chamá-lo como prefixo. E focinho, podemos chamá-lo de focinho. Isso é bom. Ou podemos chamá-lo, basta chamá-lo de focinho E vamos para os outros e fazer isso também. Deixe-me ir até a arma novamente, abra as quatro, abra a pistola, clique no clique na arma, clique neste pequeno ícone, ele o levará até lá E então abra o esqueleto. E para o esqueleto aqui, para o flash do focinho, agora podemos clicar com o botão direito do mouse e dizer adicione meia para este novamente, chame-o Basta chamar da mesma forma em todos eles. Focinho para este também. Não tenho certeza se precisamos girá-lo. Este, você pode ver, X é o eixo dianteiro deste. Acho que precisa ser girado dessa maneira. Vamos tentar fazer isso. Deixe-me clicar nele novamente. E eu vou tirar uma foto aqui para a rotação. E eu vou girar 90 graus. Dessa forma, o X está realmente apontando para frente. Ok, vamos guardar isso e vamos até a pistola. Agora vamos abrir o editor de plantas completo. Vá até a arma e clique neste pequeno ícone da pistola. Agora, para a pistola, abra o esqueleto aqui para ver o flash do cano Na verdade, tem um aqui também. Sem ejetar, tem o flash do focinho. Este pacote aqui está mais avançado do que antes, mas para este, deixe-me renomeá-lo novamente. Deixe-me chamá-lo de focinho. Agora temos um soquete para todos eles e vamos usá-lo dentro do nosso personagem para anexar efeitos visuais à arma 138. 10.09 Fotografando VFX e SFX: Tudo bem, vamos voltar para o jogador e abrir a base de jogadores mais uma vez. E agora estamos prontos para adicionar os efeitos visuais e os efeitos sonoros aqui. Dentro daqui, o que precisamos fazer executar um multicast Novamente, como precisamos mostrar os efeitos visuais para todos bem como os efeitos sonoros, precisamos executar um multicast Primeiro, vamos criar o multicast. Vamos clicar com o botão direito do mouse e dizer Evento personalizado. Para esse evento personalizado, vamos chamá-lo de arma multicast. Agora, para este, vamos colocá-lo. Não é executado no servidor, mas é multicast e confiável. Para isso, a coisa mais simples que queremos fazer é gerar o emissor no local Ou, na verdade, vamos conectar o emissor de spawn porque vamos conectá-lo ao Vá em frente e veja o emissor conectado e então temos que selecionar de qual emissor estamos falando? Aquele. Se formos até a estrutura e abrirmos a estrutura da arma, teremos esse sistema de partículas intermitentes que adicionamos anteriormente à nossa tabela de dados Podemos ir em frente e simplesmente conectar isso. Nós vamos usar isso. Vou renomear isso para Shooting Visual Effects ou apenas VFX Vou chamá-lo apenas de VFX. E o conector ao componente, na verdade, vou simplesmente conectá-lo aqui também. Vou mover este até o topo. E precisamos anexá-lo à arma. Vou chamá-la de arma agora, este é o osso ao qual precisamos prendê-la. O osso que chamamos de focinho. Basta escrever o nome aqui, Muzzle. O nome do soquete que você criou. Em seguida, a localização desse efeito que precisamos reproduzir agora para esse emissor Se usássemos o emissor de spawn no local , na verdade precisaríamos do local para No entanto, esse é apenas o local dentro do soquete e deve ser apenas 000 Isso é bom. Agora também precisamos reproduzir um efeito sonoro, arraste a partir daqui e diga reproduzir som no local. Agora, para esse efeito sonoro, lembre-se também na estrutura que fizemos esse efeito sonoro de filmagem. Só precisamos conectá-lo aqui e adicionaremos mais tarde. Vamos chamar isso de efeito sonoro, a localização do efeito sonoro, daquele que precisamos. Vamos arrastar isso até aqui. Podemos apenas dizer a localização. Isso é bom. Vamos compilar e salvar tudo. Vamos tentar jogar isso aqui. Antes de fazermos a corrida de linha, vamos tentar reproduzir o efeito. Se eu arrastar isso para longe, chamo essa arma multicast de chute aqui Arma Mc Chute. Isso precisa ser conectado a ele, assim como a este. Então, esses dois eventos. Agora precisamos inserir todas essas informações. A arma que estamos usando é essa arma aqui. Se eu arrastar a partir disso e realmente precisar obter a variável da arma, se eu apenas pesquisar a variável da arma e obter aquela malha estática ou malha esquelética em vez da que estamos usando aqui, podemos clicar e arrastá-la até aqui E agora isso está conectado. Agora, o efeito visual depende do que temos dentro dessa estrutura. Você pode simplesmente usá-lo aqui, já chamamos de estrutura. Você pode clicar nele e clicar no pino do flash do focinho E você pode conectá-lo e também clicar no pino para obter o efeito sonoro da gravação. E você também pode conectar isso. Agora, para a localização, precisamos apenas obter a localização do soquete para o flash do focinho, que é onde queremos reproduzir o efeito sonoro Você também pode simplesmente obter a localização do personagem ou representar uma localização. Ninguém notará que você pode simplesmente dizer obter localização do ator e simplesmente usá-la. E será exibido onde quer que seu ator ou personagem esteja e ninguém realmente perceberá que não está vindo da arma. No entanto, se você quiser que ele venha exatamente da arma, basta pegar isso e dizer obter a localização do soquete Você pode fazer isso e escrever o cano do soquete e pegá-lo e conectá-lo aqui Isso também é mais preciso para este. Tudo bem, então eu criei os nós do Smyroute, então isso está um pouco mais organizado Se eu compilar e salvar tudo, isso deve fazer com que funcione Agora, neste início e fim, também podemos mudar o nome dele. Então, em vez de fazer isso da lição anterior, localização do marcador, vou chamá-lo apenas de localização inicial do marcador E marque a localização, parece que está melhor e podemos entendê-la com mais facilidade Vamos agora clicar em play e ver se isso vai funcionar. Lembre-se de que, se você ainda não definiu as informações da tabela de dados, fizemos isso nas lições anteriores. Se você não o configurou , você deve colocar o focinho aqui dentro, fora da tabela de dados Ele sabe qual efeito sonoro tocar e também qual F tocar. Ok, vamos salvar tudo e vamos fechá-lo. E vamos clicar em jogar aqui como servidor, vou selecionar Terrorist. Selecione a arma. Agora você pode ir em frente e atirar. Você deve ouvir o efeito sonoro. Você também pode ver que o flash do focinho também está tocando. OK. Incrível como cliente. Vamos tentar isso também. Deixe-me ir em frente e pegar alguma coisa. Vamos pegar o K. Se eu for em frente e atirar, isso também está funcionando Ambos estão trabalhando. Tanto o cliente quanto o servidor. Se eu for na frente dele, você joga. Eu posso ver o focinho piscar em ambos. Se eu fizer isso como cliente, só para ter certeza de que está funcionando bem, eu vou até a frente e filmo, e isso também está funcionando. Ok, incrível. Então , isso funciona, e agora terminamos com o código. Então, se você voltar para a base de jogadores, simplesmente criamos esse multicast e o adicionamos ao servidor Lembre-se de que um multicast só pode ser executado por meio de um evento de servidor Nós o executamos por meio do evento do servidor. Conectamos todas essas informações e agora as temos funcionando Então vá em frente e salve tudo, e vamos seguir em frente. 139. 10.10 Prevenindo o disparo durante o Equip Anim: O problema que temos agora é que o jogador pode atirar enquanto equipa a arma Se eu equipar esta arma, você pode ver que eu posso atirar enquanto estou equipando a A propósito, para este curso, vou apenas desativar o som da arma para que você possa me ouvir quando eu estiver atirando e não me distrair Eu só vou desativá-lo do meu lado. Quando você equipa a arma, queremos desativar o disparo Vamos seguir em frente e fazer isso. Vamos primeiro adicionar um lingote. Vamos chamar isso de arma de equipamento. Vamos compilar agora. Temos que definir isso por meio de um evento. Vamos criar um novo evento personalizado. Evento personalizado. E vamos chamar isso de um conjunto de armas equipadas. Vamos copiar esse nome porque vou criar outro evento personalizado. Temos que executar isso pelo servidor. Vou chamá-lo de servidor no início. E execute este no servidor e também seja confiável. Ok, você pode executar o servidor no conjunto normal de servidores de eventos. Este conjunto é uma arma de equipamento, assim como esta aqui O que simplesmente queremos que essa variável seja, seja verdadeira ou falsa, dependendo de como a definimos. Vamos apenas arrastar isso até aqui. E vamos arrastar isso para aqui também. Ok, esse. Lembre-se de configurá-lo para replicá-lo para que o cliente também saiba qual é essa variável Para este, temos que chamá-lo por meio do código em algum lugar para que seja verdadeiro ou falso. Vamos começar por aqui. Temos essa montagem de jogo sempre que equipamos a arma. Deixe-me arrastar esse aqui. Sempre que colocamos a arma, sempre que isso é verdade, eu estou fazendo um galho sempre que isso é verdade. Vamos chamar essa arma de equipamento de equipamento MC equip. E então também podemos definir essa animação de equipamento Então, o que fizemos aqui foi executar o multicast e, na verdade chamá-lo no servidor Então, o que podemos fazer é copiar e colar isso. Só estou pensando se deveríamos arrastar isso para aqui e depois arrastar isso para aqui, para que possamos chamá-lo aqui. E eu acredito que realmente não precisamos fazer isso, vamos copiar isso aqui. E deixe-me mudar isso para baixo. Vamos colar esse aqui embaixo. E vamos colar a animação do equipamento como antes. E vamos esconder os pinos desconectados. Então, agora, sempre que equiparmos a arma, vamos jogar esse multicast Ok, agora que temos isso, vamos compilar. Agora, o que podemos fazer é usar este conjunto de armas equipadas em vez desta Sempre que equipamos uma arma, isso será definido como verdade Deixe-me excluir isso por enquanto e ocultar os pinos desconectados. Deixe-me ligar para o aparelho que está equipando a arma e vamos conectá-la E ele será executado no servidor e, em seguida, chamará o multicast sempre que isso for verdadeiro Aqui queremos equipar a arma. Você precisa configurá-lo como falso em algum momento, caso contrário, será verdadeiro o tempo todo e você não poderá disparar sua arma. Sempre que terminarmos de jogar essa montagem de animação, vamos dizer que o conjunto está chicoteando a arma Nós o removemos aqui. Está bem? E então, quando dispararmos a arma aqui, atire com a arma. Queremos filmar sempre que não estivermos nos equipando. Vamos pegar isso aqui. É uma arma de equipamento. E certo, não lingotes, então arraste daqui e escreva lingotes. Vamos conectá-lo aqui. Ok, então não podemos atirar quando estamos desarmados e não podemos atirar quando ainda estamos equipando a arma aqui Tudo bem, vamos compilar. E eu vou subir aqui também. Quando saqueamos a arma, também somos a arma do equipamento. Vamos excluir o multicast daqui. Eu vou fazer a mesma coisa. Você pode simplesmente ir até aqui. Se você quiser copiar isso, cole aqui, assim mesmo. E isso também deve reproduzir a animação. Isso deve resolver o problema. E eu posso deletar isso aqui. Eu posso esconder os pinos desconectados em vez de usar a arma equipada com este equipamento Porque essa arma de equipamento só está sendo chamada aqui na arma de equipamento. No entanto, nós realmente não temos a arma equipada aqui quando usamos a arma. Talvez seja melhor usar essa arma equipada. É melhor usar esse. Então, deixe-me ver aqui. Armas equipadas. Sim, nós já definimos isso antes. Chamamos isso, talvez você possa simplesmente deletar isso, e me deixar ver a arma equipada, usando esta em vez disso. Isso deve funcionar muito melhor. Vamos compilar e salvar. Vamos realmente tentar jogar e ver se temos alguma caixa aqui. Deixe-me jogar aqui, o Terrist. E tento atirar sempre que eu saqueio a arma, não consigo. E você pode ver que só consigo atirar quando termino de equipar a arma Se eu soltá-lo novamente e tentar saqueá-lo e atirar, não consigo. Agora eu posso, sempre que parar aqui. Ok, vamos tentar jogar como cliente. Porque também é muito importante ver se funciona como cliente. Vou escrever apenas um jogador e jogar como cliente. Vou jogar aqui e testá-lo. Tomar isso e aquilo é a mesma coisa. Eu realmente não consigo atirar sempre que estou equipando minha arma. É assim que funciona e só reproduzirá a animação sempre que a arma de equipamento estiver configurada como verdadeira E ele vai configurá-lo como defeituoso sempre que a montagem da animação for concluída 140. 10.11 Criando a interface do usuário de munição: Agora é hora de criar a interface do usuário do MO para que possamos adicionar um pouco de MO ao jogo. E para fazer isso, vamos até a interface do usuário. E vamos projetá-lo dentro da nossa interface principal. Porque faz parte da interface principal daqui. Eu quero desenhá-lo logo abaixo da arma aqui. Por exemplo, vamos pegar essa caixa vertical, vamos empurrá-la para cima em Y. Então eu tenho algum espaço aqui embaixo para fazer isso Eu quero criar algo assim. Gosto de mostrar o que quero criar e você precisa detalhá-lo. Você precisa dar uma olhada nisso e depois tentar detalhá-lo e ver o que você precisa adicionar como interface do usuário. Por exemplo, você precisa adicionar uma caixa horizontal? Uma caixa vertical? E o que você precisa adicionar aqui? Primeiro, precisamos de uma sobreposição, porque eu posso ver que temos algum texto em cima de uma imagem no fundo E, portanto, precisamos de algo chamado sobreposição. Vamos começar aqui. Vamos procurar uma sobreposição e colá-la aqui no painel da tela, na caixa vertical Nós terminamos com este. É uma sobreposição aqui por si só. E eu vou colocar a âncora no botão, certo? E então, se escrevermos 00 como a posição, podemos ver que ela se alinha aqui para o alinhamento Temos que escrever 11. Agora, na posição 00 , está dentro da tela. Ok, primeiro precisamos de uma imagem. Vamos procurar uma imagem e colá-la na sobreposição. Clique na imagem e vamos preencher toda a sobreposição até o preenchimento de alinhamento horizontal E o alinhamento vertical também preenche. Ok, clicando na imagem, vamos selecionar a imagem. Acho que o chamei de painel. Sim. Se você pesquisar por painel e pegar esse membro do painel de imagem, se ele estiver esticado assim, você poderá deixá-lo solto Se você ouvir nas portas, mude para uma caixa e altere a margem para 0,5. Ok, lembre-se também de diminuir o zoom para uma a uma. Você pode realmente ver o tamanho real dessa caixa. Você pode simplesmente redimensioná-lo. No momento, não é muito importante. O que eu quero fazer é clicar na sobreposição e, na verdade, clicar em Tamanho para conteúdo Na verdade, ele será dimensionado para qualquer conteúdo que esteja dentro dessa sobreposição Quando clico na imagem e aumento o tamanho, agora você pode ver que posso aumentar o tamanho nos dois sentidos. Você pode simplesmente aumentá-lo por enquanto. Precisamos primeiro projetar o interior antes de realmente sabermos o tamanho dele. Primeiro, precisamos de uma caixa horizontal porque temos algum texto e, ao lado dela, temos uma imagem. Vamos procurar uma caixa horizontal e colocá-la na sobreposição Vamos pegar a caixa horizontal e alinhá-la no meio da imagem aqui da sobreposição Agora vamos pesquisar um texto. Pegue o texto e coloque-o dentro da caixa horizontal. E também tire uma imagem e coloque-a dentro da caixa horizontal. Ok, agora podemos clicar no texto. Vamos escrever alguma coisa. Por exemplo, 30 por 90. Você tem 30 balas agora no carregador, e então você tem 90 balas extras Agora, isso vai mudar dinamicamente no jogo, então isso realmente não importa no momento Na verdade, vou escrever algo como 100, 200, então sei que é um texto falso e podemos configurá-lo corretamente mais tarde. Ok, para este, esta é a imagem do marcador e ainda não a importamos Vamos até Assets at Assets. Vamos ver a interface do usuário e os ícones aqui. Eu forneci a você, dentro da pasta de materiais da caixa nos ícones da interface do usuário, este marcador aqui, clique e arraste-o até aqui E lembre-se de abri-lo primeiro e alterar o grupo de texturas para UI. E altere as configurações de compressão para a função da interface do usuário. Vamos em frente e economizemos. Vamos voltar para nossa Nui Vamos procurar a bala e selecioná-la. OK. Agora eu posso clicar no meu texto. E deixe-me ampliar para que eu possa ver o que estou fazendo. Vou mudar este para rubic, semi negrito. Quanto ao texto, agora vou diminuir o zoom para um para que eu possa realmente ver o tamanho desse texto. E vou deixar que seja 24 aqui de acordo com o tamanho. Ok, vou clicar no ícone aqui em cima, então removo as linhas de traço desse marcador Vou alinhá-lo no meio e vou torná-lo menor, talvez 30 por 30 Em vez disso, é isso que parece. Ok, eu preciso de algum espaço entre esses dois. E isso pode ser feito procurando por um espaçador e colocando-o entre o texto e a imagem Vamos transformar o texto, ou o espaço aqui, em dez pixels no x. Ok, aqui está. Você pode compilar agora. E o que você pode fazer agora é clicar na imagem e tentar redimensioná-la melhor Agora, agora você tem o conteúdo dentro dele e tenta redimensioná-lo da maneira que quiser Ok, quando você estiver satisfeito, vou afastar essa sobreposição um pouco da tela, das bordas aqui da tela Talvez -30 por -30 e agora está perfeito. Então, vamos compilar e salvar tudo. E também vou selecionar o texto, a imagem e a imagem em segundo plano. E definir a visibilidade como testável sem acerto para que o cursor de milhas também não possa interagir com eles. Ok, vamos compilar e salvar tudo. E agora que isso acabou, vamos clicar na caixa vertical aqui em cima. E agora podemos movê-lo para baixo. Você pode mover isso para baixo, talvez algo assim. E estou satisfeito com isso. Temos a munição e também temos as armas aqui em cima. Ok, você pode ir em frente e compilar, salvar tudo e passar para a próxima 141. 10.12 Definindo a quantidade inicial de munição para arma: Vamos agora definir quanto MO você tem em cada arma. Novamente, precisamos voltar à estrutura. Vamos ver a estrutura, informações sobre armas que criamos. Vamos criar duas novas variáveis. A primeira, precisamos saber quanto MO você tem em uma revista, aquela arma contém o máximo de MO Precisamos saber quanto MO você tem como balas extras. Então você pode ver aqui na interface do usuário se eu a abro. Quanto MO você tem aqui na revista? E quanto MO você tem? Sobras que você pode recarregar a partir desta. Vou chamar Max extra MO. Qual é o máximo que você pode ter dentro dessa arma? Como é apenas um número, é um número inteiro, não é um número decimal Precisamos selecionar um número inteiro, apenas um número comum Sem decimais, temos o máximo em ma e o máximo de MO extra. Vou movê-los até aqui e acho que vou movê-los acima da velocidade de tiro, algo assim. Agora, realmente não importa para onde você os move. Eu só gostaria de ficar limpo assim. Depois de concluí-los, agora podemos fechá-lo e lembrar atualizá-lo dentro da tabela de dados. Se eu abrir a tabela de dados e dentro da minha tabela de dados aqui, teremos que escrevê-la da mesma forma que fizemos aqui na estrutura. Se eu voltar para a estrutura, eu abro a estrutura aqui dentro da estrutura. Agora, se eu apenas compará-lo com minha tabela de dados, preciso agora desse MO em mim e de Max extra MO após a variável de classe. Depois dessa. Depois da aula, vou escrever clique e diga Inserir coluna à direita. E eu vou fazer isso mais uma vez. Deixe-me maximizar isso para que eu possa realmente ver o que estou fazendo. Podemos simplesmente diminuí-lo e escrever Max MO em Mag Você pode até copiar isso, colar aqui. E copie isso. E cole aqui. Ok, então temos isso agora. E então você tem que definir quanto MO você tem. Então, para o AK 47, por exemplo, posso ter 30 na minha Meg e posso ter no máximo 90 balas extras Minhas informações poderiam ter, por exemplo, 2060 e minha pistola, por exemplo, 12 balas e no máximo 24 balas como MO extra, algo 2060 e minha pistola, por exemplo, 12 balas e no máximo 24 balas como MO extra, Vá em frente novamente e clique no arquivo para baixá-lo e baixá-lo como um arquivo CS para que possamos carregá-lo no mecanismo. E, novamente, assim como antes, vou excluir o antigo que criamos. E eu vou colá-lo aqui, renomeá-lo novamente como DT Weapon Info E então, dentro do motor, vamos às tabelas de dados. E deixe-me clicar e arrastar isso até aqui para que ele seja atualizado. E se você abri-lo novamente, verá que todos os valores aqui estão atualizados. Ok, incrível. Então, agora definimos o valor do MO. No entanto, agora, quando jogamos o jogo, o motor não sabe o valor inicial porque realmente não usamos esses números. Está tudo bem. Nós os escrevemos dentro da estrutura e da tabela de dados. No entanto, nós realmente não os configuramos para nada no momento. Vamos até as armas e vamos fazer isso dentro da base de armas. A razão pela qual eu faço isso na base de armas no momento, e não no jogador, é porque sempre que a arma aparecer, ela define a quantidade de MO que ela tem na revista e o MO extra, ela faz isso automaticamente Dentro daqui, dentro daqui. Vamos clicar com o botão direito do mouse e criar um novo evento personalizado. Vamos chamar isso de servidor. Então, vamos executá-lo por meio do servidor. E vamos chamá-la de arma inicializada. É apenas um evento para iniciantes que acontecerá aqui no início do jogo Se você simplesmente chamar a arma inicializada pelo servidor e executá-la no servidor, de forma confiável, compile. Agora, aqui o que queremos fazer é definir o MO extra atual e também o MO no carregador da Vamos criar duas novas variáveis e também precisaremos delas mais tarde. Vamos chamar esse. Preciso mudar o nome aqui, MO em mag. Vamos chamar o outro de M extra aqui na estrutura. Se eu voltar e abrir a estrutura, dentro da estrutura, esse é o máximo de M, esse é o máximo que podemos ter. Esse é o atual. Poderíamos ter fechado nossa arma e usado nosso MO quando a jogamos no chão. Não terá o MO máximo que o MO na revista Terá esse MO atual porque o jogador usou parte do MO. Vamos transformar isso em um interior também. Deixe-me arrastá-los até aqui para que possamos configurá-los. E lembre-se de que você pode segurar Alts no teclado para configurá-los diretamente dessa forma Vamos conectá-los aqui, conectar este. E agora precisamos defini-los primeiro. Precisamos obter a variável aqui, a estrutura. você provavelmente já sabe agora o que precisamos fazer, porque já fizemos isso 1.000 vezes. Então você obtém o nome da arma, obtém as informações da arma e depois quebra essa estrutura. E agora você tem o Max MO e Meg e o Max Extra MO. O Max M e o Mag, vou configurar para o M e Meg atuais e o M extra, configurando-o para o MO extra atual E vou clicar em Ocultar pinos não selecionados. E, assim, o que acontece é que sempre que essa arma aparece neste início, o jogo continua Sempre que gerarmos isso no mundo, sempre que tivermos colocado isso no mundo, clicaremos em jogar E esse início de jogo será reproduzido imediatamente. E sempre que estiver aqui, ele definirá automaticamente o MO atual e o Mac um Mo extra do que definimos de fato na tabela de dados. Tudo bem, então foi isso. Isso foi muito, muito simples. E com essas variáveis, você precisa clicar nelas e clicar em replicado E também para este, clique em replicado. Porque lembre-se de que estamos rodando no servidor. E se não os replicarmos, o cliente não tem ideia de quanto MO você tem O cliente verá 00 MO se você não os tiver replicado. Portanto, lembre-se de replicá-los também. Os dois. E vamos passar para a próxima. 142. 10.13 Criando a lógica da interface do usuário da munição: Agora vamos prosseguir com a interface do usuário e fazer a lógica aqui dentro. Dentro do nosso B main, criamos essa interface de usuário para os marcadores Agora vamos clicar nesse texto. E vou renomeá-lo para T bullets ou MO. Vamos chamá-lo de MO. E vamos compilar Vamos também configurá-lo como uma variável. Como precisamos definir esse texto, dependendo da quantidade de MO que temos, precisamos transformá-lo em uma variável. Assim, podemos modificá-lo com o código dentro do gráfico. Dentro daqui. Vamos criar um novo evento personalizado. Vamos clicar com o botão direito do mouse em Eventos personalizados. Vamos chamar essa atualização de MOI com isso Inicialmente, o que queremos com isso é definir esse texto para a quantidade de MO que temos. Vamos atacar aqui e dizer texto definido. É sempre bom pensar: o que você realmente quer? O que você está tentando fazer? Isso é o que eu geralmente me pergunto quando tento codificar algo. Por exemplo, este aqui, o que você está tentando fazer? Você está tentando definir esse texto para a quantidade de MO que você tem agora no Meg, você vai até o gráfico e pega isso, por exemplo Você pode escrever Definir texto porque, em última análise, queremos definir o texto. Como configuramos o texto? Precisamos de duas variáveis diferentes. Isso é algo que já fizemos. Precisamos do MO atual no Mac. Precisamos saber disso, porque precisamos configurá-lo aqui e também precisamos do MO extra atual. Vamos ligar para isso. Clique aqui e chame-o de Current extra MO. Vamos transformar os dois em um número inteiro. Essas são as duas variáveis que precisamos conhecer e com as quais precisamos definir esse texto. Agora você pode ver que temos duas coisas que precisamos definir. Não temos apenas um número, temos duas coisas. Sempre que houver várias coisas dentro de uma linha de texto que você precise alterar separadamente, você usará algo chamado de formato de texto. Se você arrastar daqui e disser formatar texto, isso é algo em que você precisa pensar imediatamente quando tiver duas coisas que deseja modificar dentro de uma linha de texto, duas coisas separadas. Queremos modificar esse número e queremos modificar esse número. Sempre que recarregamos a arma, precisamos formatar o texto Porque agora precisamos inserir essas duas variáveis com formato de texto. Se você escrever um colchete para começar, vamos chamá-lo Você pode chamá-lo do que quiser. Vou chamá-lo do mesmo nome que aqui. MO atual em maio. E então você tem que fechar os colchetes Lembre-se de que é um suporte encaracolado. Você precisa formatá-lo da mesma forma que aqui. Porque eu quero o espaço aqui e o e o espaço. Vou clicar aqui e escrever espaço no espaço. Porque eu só queria ficar assim. Você pode escolher como quiser que pareça que eu quero ficar assim. Então você tem que abrir os colchetes novamente, porque agora eu tenho que definir minha segunda variável Este é, por exemplo, MO extra atual, assim como este. Está bem? Agora temos essas duas e agora registramos essas duas variáveis. Ele os conectará automaticamente aqui e aqui, o que significa que atualizará isso e isso separadamente um do outro. É assim que você usa um formato de formato de texto. Se eu fizer isso de novo, por exemplo, outro exemplo, você pode usá-lo, por exemplo, em um jogo de RPG, você poderia dizer, por exemplo, olá E então você pode dizer o nome do jogador. Porque talvez diga olá John, ou algo parecido. Eu não sei. Seja qual for o nome do seu jogador , ele diz olá. E o nome do seu jogador, como você está saindo a essa hora do dia, por exemplo, Olá, por exemplo, John, como você está fazendo isso esta noite? Talvez você tenha um sistema diurno e noturno. E no jogo você sabe automaticamente se é noite ou manhã ou algo parecido, e você pode conectar isso às variáveis. É assim que você usa um formato de texto. Você pode criar várias variáveis, e elas realmente não precisam ser números inteiros Pode ser uma linha de texto, pode ser outra coisa, uma enumeração e assim por diante É muito, muito útil usar esse formato. Ok, agora terminamos isso, e podemos realmente usar isso para conectar essas variáveis. Vamos compilar e salvar tudo e passar para a próxima 143. Atualização da interface do usuário do Ammo: Agora é hora de atualizar a interface para a quantidade real que temos dentro das armas. Vamos até a base de jogadores. Agora, dentro daqui, vamos criar um novo evento. E vamos dar uma olhada aqui e criar um novo evento personalizado. Chame isso de CL porque estamos trabalhando com UI e UI, do lado do cliente. Vamos chamar isso de atualização, MOU. O que precisamos fazer, assim como este, é pegar o controlador e assim por diante. Agora você pode ver que estamos tentando obter esse controlador repetidamente. Na verdade, é bom criá-lo em uma variável, em vez de copiar e colar isso o tempo todo Vamos até aqui para ver a jogabilidade do Player aqui, onde realmente pegamos o controle. Vamos clicar com o botão direito do mouse e transformar esse controlador uma variável e chamá-lo de controlador de player. Vou mover isso um pouco cá e depois vou colocá-lo aqui. Sempre que esse controlador de player for válido, vamos defini-lo como uma variável. Sim, isso é bom. E você pode até mesmo clicar duas vezes aqui para fazer anotações de redirecionamento assim Ok, vá em frente e compile. Agora, o que podemos fazer aqui remover isso, pegar o controle, jogar o controle, porque já o temos como uma variável agora. Agora fica muito mais fácil de fazer. Podemos até aproximar isso, algo assim. Agora você pode realmente fazer o mesmo aqui. Podemos pegar o controlador. Vamos executar isso no cliente antes de esquecermos de executar o cliente proprietário, pegar o controlador de exibição, obter o WB principal. Então você pode chamar o que chamamos de atualização MO Ui. Ok, precisamos de duas variáveis aqui. Podemos simplesmente conectá-los a esse cliente. No cliente um. Deixe-me diminuir um pouco, sem mais nem menos. Ok, e agora temos esse aqui. Então, vamos compilar e salvar tudo. E precisamos ligar para essa sempre que saquearmos a arma. Então, deixe-me subir até aqui. Sempre que saquearmos a arma que está aqui, saqueie a E se formos para o lado, precisamos atualizar as balas somente se estivermos desarmados Porque se eu tiver um AK, ele vai passar por esse código aqui em cima. Eu só quero atualizar sempre que eu realmente saquear a arma pela primeira vez Porque não precisamos alterar a quantidade de MO da outra arma. Isso vai cair nas minhas costas porque eu não o equipo quando estou desarmado Quero atualizar meu MO aqui. Precisamos estender o código novamente. Na verdade, vou afastar isso um pouco porque continuamos estendendo esse código Eu tenho algum espaço para trabalhar. Eu posso levar tudo isso para cá comigo. Exatamente desse jeito. Podemos chamar de update MY este cliente que acabamos de criar. Então você tem que definir qual é o seu MO atual e extra aqui. Já fabricamos essa arma equipada com variáveis. Neste, vou clicar nele e ocultar os pinos desconectados Clique sobre isso. Então você tem essa arma equipada, podemos usá-la. A arma equipada. Lembre-se de que não é uma arma equipada, é a arma equipada. Talvez você possa mudar o nome delas para não se confundir muito com a arma equipada. E podemos obter o MO atual em mag. Também podemos obter o MO extra atual. E podemos conectá-los aqui. Na verdade, posso copiar tudo isso porque podemos copiar e colar isso por toda parte . Podemos copiar e colar isso. Vamos compilar, vamos colar. Sempre que trocamos as armas. Sempre que eu troco as armas aqui na lógica da arma de equipamento, novamente, estamos atualizando a interface do usuário Então eu vou tirar isso e vou colar aqui. Cole depois dessa lógica. E vamos prosseguir e conectá-lo. Exatamente desse jeito. Ok, vamos compilar tudo agora. Vamos tentar ver o que acontece se clicarmos em jogar agora. E agora interpreta o cliente. Eu seleciono Terrorist e deixo eu pegar alguma coisa. Então você pode ver que meu MO está realmente sendo atualizado, agora diz 20,60 Se eu pegar a pistola, ela não diz nada, a menos que eu mude para a Em seguida, ele também atualiza o MO. Se eu deixar isso agora, agora precisamos esconder a seção MO porque eu não tenho nenhuma arma. Mas vamos fazer isso nas próximas aulas. Agora podemos ver aqui que, quando eu pego o AK, ele será atualizado corretamente. Quando eu troco de arma, ele também é atualizado corretamente. Ok, então tudo está sendo atualizado corretamente. E foi isso para esta lição. Muito simples. E vamos salvar tudo e seguir em frente. 144. 10.15 Hide Ammo UI: Ok, bem-vindo de volta. Então, agora precisamos ocultar a M UI sempre que não precisarmos dela. Deixe-me abrir a interface do usuário novamente. Abra o WB principal e entre no gráfico abaixo, o MOU de atualização. Vou criar outro evento personalizado e vou chamar essa tela desse jeito. Para este, o que estamos tentando fazer, novamente, pergunte a si mesmo: o que você está tentando fazer? Estou tentando esconder toda essa seção. Sempre que não tenho uma arma, clico nessa sobreposição Isso se sobrepõe a tudo aqui. Este é o pai de todos eles aqui. Vou renomear este para V M ou sobreposição. Deixe-me defini-lo como uma variável para que eu possa editar essa codificação Deixe-me ir ao gráfico, pegar isso e dizer definir visibilidade. Quero controlar a visibilidade dessa interface do usuário. Podemos arrastar a partir disso e dizer selecionar, dependendo se queremos mostrar ou ocultar a interface do usuário. Eu preciso de um touro aqui. Eu preciso de um lingote chamado display. Se quisermos exibir ou ocultar a interface do usuário, podemos conectá-la aqui. Esse bullying é falso, o que significa que não queremos exibir a interface do usuário. Eu quero esconder isso. Sempre que isso for verdade aqui, quero exibir a interface do usuário. Vou configurá-lo para não ser testável. Novamente, isso significa que você significa que está visível, mas o cursor do mouse não pode interagir com essa interface aqui. E, de qualquer forma, não precisamos interagir com ele. Vamos compilar E agora isso aqui está terminado. Agora, o que podemos fazer é voltar para o jogador. E em vez da base de jogadores, como antes aqui, vamos clicar com o botão direito do mouse e criar uma nova ventilação personalizada, tudo isso exibido novamente. Vamos pegar esse copiar e colar e procurar por display MI. Vamos conectá-lo. Lembre-se de executar isso no cliente proprietário e também confiável Deixe-me clicar e arrastar essa variável até aqui. Ok, foi isso. Vamos compilar agora. Vamos escolher quando queremos exibir e ocultar a interface do usuário. Quero exibir minha interface sempre que eu equipar a arma ou saqueá-la aqui Exibir MOU. Se eu for até minha arma de lote e simplesmente for até aqui e quiser exibi-la logo após atualizar meu MO. Não quero exibir antes atualizar meu MO porque, caso contrário , ele parecerá cheio de bugs Quero atualizar o MO antes de exibir a interface do usuário. Mais uma vez, deixe-me arrastar tudo isso para longe. Novamente, assim, continuamos arrastando isso para longe. Temos muitas coisas para fazer aqui dentro, podemos escrever o display CL aqui e conectá-lo. Novamente, vou afastar isso um pouco desse jeito. Algo parecido com isso. É sempre bom dizer, organizado. Ok, então vamos exibir a interface do usuário aqui. Essa de novo, sempre que estivermos desarmados, porque agora temos uma arma Quero exibir minha interface de usuário. Lembre-se de marcar isso aqui. Vamos compilar novamente. Também precisamos disso sempre que equipamos a arma. Se eu for até minha arma de equipamento, se eu puder encontrá-la aqui, equipe a arma Novamente, sempre que eu atualizo meu MO, quero exibir minha interface de usuário ou meu MO desse jeito. Ok, lembre-se também de marcá-la aqui. Agora precisamos esconder a interface do usuário sempre que soltamos a arma aqui na minha arma lógica de lançamento. Lembremos que criamos essa função anteriormente, soltar arma. Vamos entrar aqui. Vamos esconder a interface do usuário logo antes desta. Se eu arrastar isso para longe, posso colar isso. A tela MO UI vai ser, cai aqui, se apaixona pela tela. E podemos esconder a interface sempre que soltarmos a arma. Ok, vamos compilar e salvar tudo. Vamos testá-lo e ver se ele realmente funciona. Vamos selecionar terroristas. Na verdade, precisamos ocultá-lo por padrão. Você pode ver que está agora e não queremos isso. Então esse é o primeiro bug. Vamos até o principal aqui. Vamos clicar na sobreposição aqui na visibilidade. Vamos configurá-lo como oculto por padrão e compilar. E vamos clicar em jogar novamente aqui no cliente, selecione Terraço. No momento, não podemos vê-la, mas quando pegamos uma arma, ela aparece com a quantidade correta de balas Se eu soltá-lo agora, ele não será mais exibido. Eu pego a pistola, ela vai aparecer, eu pego a AK Não atualizará os marcadores a menos que mudemos para o AK Se eu soltar o AK, ele não exibirá nada. Você pode ver agora que está funcionando corretamente. Sempre que estivermos segurando uma arma, a veremos sempre que trocarmos a arma. Sempre que soltamos a arma, escondemos a interface do usuário e assim por diante. E, na verdade, também vamos tentar isso no servidor, então não sei se estou jogando como servidor também. Então, clicando aqui, jogando como servidor, eu vou jogar com dois números ou dois jogadores e vamos selecionar terroristas Vamos também testá-lo aqui no servidor. Lembre-se de que você precisa testá-lo no cliente e no servidor para saber se ele realmente funciona nos dois. Aqui eu também tenho o cliente e você pode selecionar terroristas E nós já o testamos no cliente. Tudo está funcionando perfeitamente. Sim. Tudo está funcionando, tudo está bem, incrível. Tudo funciona. Não temos dinheiro, não temos erros, e é assim que fazemos Vamos passar para a próxima. 145. 10.16 Munição de contagem: Então, agora vamos calcular o MO, porque agora, sempre que estamos atirando com a arma, então se eu pegar isso e tentar atirar, não estamos realmente calculando o MO Ainda são 20. Então, vamos seguir em frente e fazer isso. Vamos até a base de jogadores mais uma vez para calcular as balas Lembre-se, fizemos esse cronômetro aqui embaixo. Se pudermos encontrá-lo aqui embaixo com o traçado de linha por canal e reproduzindo o efeito visual e o efeito sonoro aqui, queremos subtrair uma bala toda vez que você Deixe-me afastar esse traçado de linha, porque vamos usá-lo mais tarde, quando aplicarmos o dano do jogador. Mas, por enquanto, vamos trabalhar aqui. O que eu simplesmente quero fazer é pegar minha arma equipada que tenho agora e quero colocar meu MO atual na minha revista Então eu só quero subtrair um, menos um. E então você pode ir em frente e definir esse MO atual em mag. MO atual em maio. E precisamos configurá-lo. Defina o MO atual em mag. E com apenas menos um, estamos subtraindo uma bala toda vez que disparamos Agora, em vez de ficar assim, precisamos arrastar a partir disso e dizer pinça O que o grampo faz é evitar que nosso valor fique abaixo de zero porque não queremos ter menos uma bala, menos duas balas, menos três balas Estamos definindo nosso valor mínimo como zero quando subtraímos aqui Estamos evitando atingir menos uma, menos duas balas e Isso não faria nenhum sentido. Agora, o máximo para este, podemos simplesmente pegar isso e dizer que podemos obter as balas atuais e então podemos configurá-las aqui Agora, esse não importa. Podemos até mesmo configurá-lo para 999. Realmente não importa agora. Mas eu vou usar uma boa prática, uma boa prática de codificação Pegue as balas extras atuais e defina-as como máximas. Ok, nós temos esse conjunto agora. Deixe-me criar notas reescritas em torno desta também. Vamos conectar esse pino de execução aqui. E vamos conectar o pino de execução aqui também. O que você pode fazer é até clicar com o botão direito do mouse e promovê-la para uma função ou reduzi-la a uma função. Vamos chamar essa função de trato MO de mag assim. Está bem? Agora estamos subtraindo e podemos deixar que fique Agora, em vez de ter apenas uma bala, você pode até mesmo torná-la dinâmica no futuro. Se você quiser disparar uma bala e realmente quiser subtrair duas em vez de uma Você pode até mesmo conectá-lo aqui e escrever MO para subtrair assim Deixe-me afastar tudo isso, isso, e vá em frente e compile agora Se voltarmos agora, você pode ver que pode escrever quantas balas você quer subtrair para o meu jogo agora, eu só quero subtrair uma bala. Isso é bom. Então, vamos fazer uma anotação da sequência, porque vamos recarregar mais tarde Na verdade, vou desconectar esse traçado de linha e vou afastá-lo um pouco aqui Vamos rastrear a partir daqui e fazer a sequência. E escolha o nó da sequência. Agora, com a nota de sequência, vamos conectar os dois aqui, do pino aqui, do zero. Vamos conectar isso aqui. O que é uma nota de sequência, ela é usada apenas para organizar seu código. Não está fazendo nada além disso, está apenas organizando seu código. Primeiro vamos fazer o efeito aqui e vamos subtrair a bala Em seguida, vamos estabelecer esse traçado de linha. Eu posso mover esse traçado de linha até aqui. Vou mover tudo isso para cá também, porque parece um pouco confuso agora. Você pode até mesmo excluí-los e conectá-los diretamente aqui. E eu vou aumentar isso assim. Está bem? Agora parece muito melhor. E agora podemos conectar isso a isso aqui. Um nó de sequência serve apenas para organizar seu código. Ele fará o efeito sonoro e tudo mais, subtrairá a bala e, em seguida, criaremos o traçado da linha Depois disso, vamos fazer o recarregamento porque precisamos verificar se estamos sem balas Se estivermos, precisamos ir em frente e recarregar. Vamos continuar e fazer isso na próxima lição. Isso não será muito difícil, mas você tem que estar acordado para isso Por enquanto terminamos, estamos calculando as balas Podemos até clicar na placa apenas para testá-la por um bom motivo aqui e ver se está fora da caixa. No momento, precisamos realmente atualizar a interface do usuário e vamos fazer isso dentro da função subtrair amo da função mag Vamos entrar aqui e entrar aqui. Vamos atacar a partir daqui e chamar a atualização CL de MO I. Isso é o que criamos anteriormente. E então podemos pegar esse MO em mag, este é apenas este aqui e o outro, o MO extra Na verdade, podemos simplesmente pegar este e criar um nó de redirecionamento ou simplesmente torná-lo mais baixo aqui e podemos levá-lo até aqui. Ok, agora isso está feito. Vamos compilar. Vamos clicar em jogar. Vamos testar como cliente. Vamos agora jogar. Vou atirar com minha arma. Está funcionando agora. Também vou jogar como servidor, pegando a arma e atirando também. E isso funciona. Tanto o cliente quanto o servidor estão funcionando perfeitamente. OK. Agora está calculando. E vamos seguir em frente nas próximas lições. E você pode ver, podemos disparar a arma. Você pode ver que se eu continuar atirando com a arma, eu posso continuar atirando sempre que estou com zero balas E a razão para isso é porque realmente não dissemos ao motor que parasse de disparar sempre que estivéssemos com zero balas E faremos isso nas próximas aulas. Mas primeiro temos que calcular o MO e fazer o recarregamento E depois disso, podemos adicionar todas essas condições. Mas, por enquanto, vamos salvar tudo isso. Tudo está funcionando. E vamos passar para a próxima. 146. Animação de arma de recarga 10.17: Olá e bem-vindo de volta. Agora estamos prontos para executar a funcionalidade de recarga. Agora você precisa estar bem acordado para esta lição , porque talvez ela também seja longa Temos muita matemática para fazer, então você realmente precisa prestar atenção aqui. Ok, vamos fazer a recarga primeiro. Vamos criar um evento personalizado. Então, deixe-me clicar com o botão direito aqui e criar um novo evento personalizado. Vamos chamá-la de arma de recarga definida. Então, vamos configurar um touro para fazer com que ele recarregue ou não execute, na verdade, para ser executado no servidor. faça isso. Não funciona no servidor, isso foi um erro, basta configurar a arma de recarga Evento normal, vamos criar um servidor aqui chamado set is reloading weapon Vamos executar este no servidor, de forma confiável. Vamos fazer um novo bulling aqui chamado reloading e clicar em Vamos pegar isso e colocar o touro de recarga aqui. Lembre-se de configurá-lo para replicá-lo, pois estamos rodando no servidor e o cliente precisa saber se estamos recarregando ou Por aqui, precisamos executar o conjunto de eventos do servidor que está recarregando a arma Vamos continuar e conectar isso aqui também. Ok, então sempre que estivermos recarregando, queremos realmente reproduzir a montagem para Deixe-me sair daqui e fazer um galho. E vamos fazer uma filial aqui. E digamos que, se estivermos recarregando, queremos fazer uma montagem E lembre-se da montagem N que precisamos reproduzir por meio um multicast porque todos os clientes precisam ver essa mudança visual O conjunto multicast está recarregando a arma. Agora eu gostaria de chamá-lo do mesmo nome das funções principais. Você pode nomeá-lo como quiser e executá-lo por meio um multicast confiável aqui Precisamos pegar a malha, então não os dois, mas apenas essa malha aqui. E você pode escrever uma montagem e jogar essa montagem como antes Esta montagem para jogar, você pode simplesmente conectá-la aqui Vamos chamá-lo de reload M. Vamos jogar esse multicast aqui em cima. O conjunto está recarregando a arma. Essa é a correta. Então, precisamos dizer qual montagem precisamos tocar. Agora, acho que não temos animações. Porque se formos até aqui, vamos pegar um deles. Essa estrutura aqui. Estou apenas colando para não ter que escrever tudo de novo. Posso pegar minha arma equipada e conectá-la aqui. Ok, então aqui na estrutura temos apenas a animação do equipamento. Não temos uma animação de recarga para cada arma porque realisticamente, cada arma tem sua própria Então, vamos adicionar isso à estrutura. Na estrutura, abra-a e vá em frente e adicione a animação de recarga Vamos configurar, vá em frente, pesquise e selecione-o, assim como o mostrado acima Vamos em frente e salve tudo. Eu quero que você vá em frente e abra sua tabela de dados. Porque aqui na tabela de dados agora você pode escrever uma animação de recarga Posso copiar todas as animações do meu equipamento aqui. Porque, como eu disse antes, não tenho uma animação de equipamento separada. Mas, como você pode ver em seu próprio jogo agora, você pode ter uma animação de equipamento, uma separada e uma animação de recarga separada Tudo isso pode ser personalizado muito bem. Agora você pode sair e clicar em Arquivo e fazer o download, Baixar como CSV e, em seguida , minimizar isso aqui, vá para a pasta de tabelas de dados E aqui, assim como antes, vou deletar o meu antigo e renomear esse novo, e depois arrastá-lo até aqui para atualizá-lo Agora eu posso voltar para minha base de jogadores dentro desta montagem para jogar Agora diz zero sem motivo. Você só precisa clicar em Arquivo e atualizar todos os nós assim Agora eu posso realmente ter minha animação de recarga aqui e você pode conectá-la Ok, agora resolvemos isso e também precisamos definir que o recarregamento é falso em algum momento Vamos definir que isso é recarregamento como falso. E da maneira como fazemos isso, podemos simplesmente chamar isso de novo no servidor. Lembre-se de que, quando estiver em um multicast, você pode voltar ao servidor aqui Quando concluímos o recarregamento, podemos dizer que o conjunto de servidores está recarregando Estamos voltando para o servidor e configurando o recarregamento como falso Na verdade, podemos experimentar e vamos compilar E foi isso agora, não podemos realmente testá-lo agora porque não temos nenhuma funcionalidade de recarga Mas vamos fazer isso e vamos calcular a recarga e assim por diante aqui Mas, por enquanto, terminamos a animação de recarga e vamos compilar, salvar tudo e passar para a próxima 147. Funcionalidade da arma de recarga 10.18: Tudo bem, agora estamos prontos para calcular as balas quando estivermos recarregando E antes de fazermos isso, vamos adicionar esse conjunto está sendo recarregado aqui no código Antes de continuarmos, lembre-se de que fizemos essa sequência. Então, como você pode ver aqui, e estamos atirando as balas, estamos subtraindo uma bala toda vez No entanto, no final, precisamos verificar se temos mais balas Se não o fizermos, precisamos ir em frente e recarregar. O que precisamos fazer é pegar essa arma equipada e lembrar que temos esse MO atual em mim. Podemos perguntar se isso é igual a zero. Se isso for igual a zero, deixe-me fazer uma ramificação aqui. Se isso for igual a zero, vamos pegar isso e conectá-lo aqui. Se isso for igual a zero, vamos dizer que set é reload Definido como recarregar, queremos recarregar sempre que não tivermos mais balas Vamos compilar. Vamos clicar em jogar. E vamos ver se isso realmente funciona. Estou indo em frente aqui e vou atirar com todas as minhas armas. Preciso ter cuidado porque não quero atirar porque não criei condições para isso. Se eu atirar para zero, você pode ver que está indo em frente e recarregando, e isso está correto Ok, então está reproduzindo a animação agora. Precisamos calcular as balas sempre que estivermos recarregando Então, vamos seguir em frente e fazer isso. Deixe-me afastar esse multicast porque precisamos do código aqui Agora você tem que estar realmente acordado porque há muita matemática acontecendo quando calculamos as balas Ok, primeiro o que precisamos fazer, precisamos pegar a arma equipada, precisamos descobrir as balas extras que temos Porque se não tivermos balas extras, realmente não faz sentido recarregar Agora, a primeira coisa que quero perguntar é se esse MO extra que temos nesta arma é maior ou igual a? Agora deixe-me colar isso aqui embaixo. É maior ou igual ao MO máximo na revista Agora, o motivo pelo qual perguntamos sobre isso é porque digamos que esse seja o AK, e o AK tenha 30 aqui no máximo M da revista, se tivermos mais do que isso como MO extra Agora vamos fazer um galho. E deixe-me conectar isso aqui embaixo. Se isso for verdade, podemos simplesmente seguir em frente e pegar essa arma equipada e obter o MO e o carregador atuais E defina esse MO atual, e podemos simplesmente configurá-lo para o que está aqui como o M no, se isso fizer sentido. aqui descobrimos que nosso MO extra é maior ou igual ao que podemos ter dentro do mag Isso significa que a revista pode estar cheia. Estamos apenas enchendo a revista inteira aqui, sem mais nem menos. Mas antes de fazermos isso, eu também preciso calcular o que nos resta em nosso MO atual, porque precisamos subtrair daqui Vamos pegar esse MO extra e digamos menos. O que precisamos subtrair daqui? Precisamos subtrair o quanto temos agora em nossa revista Se eu apenas pesquisar o MO atual em mag neste ano, precisamos subtrair o MO máximo em mag do M max atual Vamos dar um exemplo para que não fique muito confuso Pode parecer muito confuso. Por exemplo, digamos que meu MO máximo agora no AK seja 30. Agora eu subtraio. Digamos que eu tenha 27 MO restantes. Na minha revista atual, eu só atirei três balas. Agora eu tenho 27 aqui. 30 que é o máximo -27 que é 33. Vou subtrair três do meu MO extra se eu tivesse 90 como meu MO extra, agora tenho 87 porque eu só atirei três balas Agora, a matemática faz sentido aqui para este. Agora, esse valor, preciso definir meu M extra atual aqui. Em vez de copiar e colar isso. Na verdade, vou desenhar a partir daqui e dizer M extra. Podemos definir isso para esse valor. Vamos seguir em frente e fazer isso. E vamos conectar isso também. Vou fazer algumas anotações de redirecionamento e, novamente, explicar isso para você, apenas para ter certeza de que estamos na mesma página Tudo bem. Então, agora eu criei notas traseiras e as organizei. Na verdade, precisamos estendê-lo um pouco, porque posso ver que estamos ganhando um dinheiro mais tarde, porque estamos perguntando se o MO extra atual é maior ou igual ao MO E se for esse o caso, estamos configurando isso, estamos configurando o MO atual para o MO máximo porque podemos pagar, temos balas suficientes No entanto, quando tivermos algo como, digamos que ainda temos cinco balas Então, se eu simplesmente abrir a interface do usuário para que possamos entender muito melhor. Digamos que eu tenha mais cinco balas aqui. Eu tenho algo como, digamos, dez balas sobrando. Não vai configurá-lo para 15, na verdade vai estar errado aqui. O que precisamos fazer é perguntar se o MO extra atual que temos, precisamos realmente adicionar isso aqui mais o atual. Precisamos adicionar os dois. Juntamos o M atual mais aqueles. Se forem maiores ou iguais ao máximo M no máximo, agora está correto e não ganhamos dinheiro com este Eu sei que talvez você precise entender isso da mesma forma que você pode simplesmente postar este vídeo e tentar entender a lógica por trás disso. É pura matemática. Você pode até mesmo escrevê-lo no papel. É muito melhor. Às vezes, quando eu crio uma lógica como essa, eu a escrevo no papel , está na minha frente, é muito mais fácil de entender. Basicamente, estamos perguntando: o MO extra atual que você tem mais o MO atual em mag é maior ou igual ao MO máximo Se for esse o caso, isso seria falso porque o total seria apenas 15 e o máximo no Mac seria 30. Então, seria falso. E faríamos algo assim aqui. Tudo bem, então agora está correto. E também vamos lembrar aqui que, quando subtraímos aqui e ajustamos o MO extra atual novamente, vamos pegar uma pinça e garantir que ela não fique abaixo E vamos conectá-lo aqui. O máximo é apenas esse MO extra. Na verdade, podemos simplesmente pegar este ou você pode simplesmente copiar e colar para que fique muito melhor e mais legível, como este aqui Agora, quando é falso, vou afastar essa parte, então parece muito melhor. Agora, quando é falso, o que precisamos fazer pegar essa arma e obter o MO atual em Meg, e precisamos definir esse valor O que precisamos definir é digamos que foi o caso deste ano. Ainda temos cinco balas aqui, temos dez balas aqui. Precisamos dizer cinco mais dez, ou seja, 15. E precisamos definir isso para a quantidade atual de balas. Na verdade, precisamos levar isso até aqui. Precisamos dizer o MO extra atual que temos, que é dez, por exemplo, mais o cinco que é 15. E precisamos colocá-lo aqui. E isso é feito sempre que não temos mais balas. O M extra mais o MO atual no mag, eles não são ainda maiores do que o MO máximo no mag Depois, só precisamos pegar todas as balas, juntá-las e colocá-las dentro do nosso carregador atual Algo parecido com isso aqui. Ok, agora isso está resolvido. Também precisamos garantir que a quantidade extra de balas aqui seja zerada Agora, como colocamos todas as balas no carregador, precisamos pegar isso, precisamos dizer Precisamos dizer que defina o MO extra atual como zero. Agora também precisamos nos lembrar de atualizar a interface do usuário. Deixe-me salvar tudo e digamos que atualize o CL I. Vamos conectar este aqui e vamos conectar este aqui. Precisamos atualizar a interface após esses eventos. Deixe-me clicar duas vezes neste. Faça com que pareça muito melhor assim aqui. Agora podemos pegar, não, vou apenas copiar isso do passado aqui. Agora podemos conectá-los, vamos conectá-los de forma diferente aqui. Primeiro, o MO atual, em mag e MO extra. Apenas preste atenção ao que você está conectando aqui. Vamos compilar agora e salvar, e agora vamos testá-lo. A razão pela qual escrevi a lógica aqui nas cataratas é porque estou esperando que essa animação termine antes de permitirmos que o jogador defina a quantidade de balas corretamente Porque, na verdade, não quero dar balas ao jogador durante a animação Quero esperar que a animação termine. Quando cair, reproduzirá esse código aqui embaixo. Ok, então você pode ver que precisa estar um pouco acordado para esse código aqui Novamente, fique à vontade para fazer uma pausa, dar uma olhada, pegar papel e caneta e anotar os valores Tente fazer as contas e veja se isso faz sentido para você. Vamos continuar e clicar em Jogar. Jogue como terrorista. E deixe-me pegar o M quatro, por exemplo. Deixe-me maximizar a janela de visualização. Agora, se eu disparar todas as minhas balas, quando eu bater, ainda posso atirar Você pode ver que ainda está incomodando. Eu posso atirar sempre que continuo segurando meu mouse. Ainda não fizemos essa condição . Nós vamos fazer isso mais tarde. Mas se eu soltar meu mouse agora, vou recarregar e ele realmente calculará as balas corretamente se eu continuar fazendo isso E vai recarregar novamente. Eu vou fazer o último aqui. Vou recarregar novamente, e isso é o que parece Você pode ver os insetos aqui no final. Isso é porque nós realmente não fizemos nenhuma condição aqui. Se eu voltar aqui e me deixar pegar o código que escrevemos com a sequência. Se eu encontrar a sequência aqui em cima, essa é a sequência que estamos filmando. E então estamos perguntando aqui se o Mo atual em mag é igual a zero Essa é a única condição que estamos pedindo. Precisamos adicionar algumas condições para que não surja dessa forma. Mas, por enquanto, salve tudo, agora está correto, é assim que o código se parece. Novamente, fique à vontade para dar uma olhada novamente, eu sei que é confuso Essa é a matemática mais difícil que fizemos para o jogo até agora, mas na verdade não é tão difícil quando você a coloca no papel Então, vamos salvar tudo e passar para a próxima. 148. 10.19 Condições de filmagem: Tudo bem, bem-vindo de volta. Agora vamos fazer as condições de filmagem para que não fotografemos aleatoriamente quando estamos recarregando e coisas assim Então, vamos começar aqui com a arma de tiro. Não quero disparar minha arma sempre que estou recarregando. No momento, não podemos disparar a arma quando estamos desarmados ou quando ainda estamos equipando a Além disso, não quero disparar minha arma sempre que estiver recarregando Sempre que a recarga aqui for falsa. Portanto, sem recarregar, podemos adicionar um alfinete e adicioná-lo aqui Vá em frente e compile, ok, então isso está resolvido Agora, vamos descer para esta parte aqui na sequência aqui. Não quero atirar sempre que tenho zero balas. Eu tenho que escrevê-lo aqui antes de tocar o efeito e assim por diante. Preciso dizer que, se eu tiver zero balas, não estou interessado em jogar tudo isso Na verdade, é exatamente o mesmo que este. Na verdade, vou transformar isso em uma função, já que estamos reutilizando isso , reduzi-la a uma função e vou chamar essa de fora do MO, torná-la pura porque estamos apenas obtendo informações Não estamos configurando nada quando o M Mac atual é zero, isso significa que estamos sem balas Se for para recarregar, se você estiver sem MO, então você pode ir em frente e recarregar Isso faz sentido. Agora, para este aqui em cima, vamos colá-lo. Vamos escrever em lingotes e selecioná-lo. Quando não estamos fora do MO, queremos ir em frente e atirar. Se estivermos fora do MO, não queremos filmar também para recarregar Vamos pegar a recarga e dizer que, se não estivermos recarregando, queremos ir em frente e Se estivermos recarregando, não queremos ir em frente e atirar. Isso é o que está dizendo agora. Deixe-me ir em frente e afastar tudo isso. Acho que em breve limparei todo o projeto porque está ficando confuso novamente porque estamos escrevendo muito código no momento Mas, como você pode ver aqui, se não estivermos fora do MO e se não estivermos recarregando , podemos ir em frente e atirar com as armas aqui embaixo Quando estamos recarregando a arma, não quero recarregar o dobro dessa, na verdade, já que é uma sequência, ela só leva isso em consideração E quando chega até aqui, não leva isso em conta. Você realmente tem que adicionar isso aqui também. Quando você não está recarregando, você precisa recarregar aqui Não queremos recarregar repetidamente quando já estamos recarregando E também há outra condição agora, quando eu disparo minha arma. Também quero ter certeza de que realmente tenho MO extra ao recarregar Porque você pode imaginar aqui, por exemplo, digamos que eu tenha 15 balas e eu tenha zero como balas extras Na verdade, também funciona se eu recarregar, se eu disparar com as armas ou atirar no MO e ele chegar a zero, ele realmente recarregará Eu tenho que perguntar aqui se eu tenho MO extra. Do jeito que fazemos isso de novo, vamos pegar a arma rápida e dizer: pegue o MO extra de corrente. Se isso não for igual a zero, igual a isso não é igual a zero, então queremos seguir em frente e fazer tudo isso. Deixe-me conectar isso aqui e conectá-lo. Estamos apenas nos certificando de que realmente temos MO extra. Antes de recarregarmos, deixe-me levar esse colapso para uma função novamente e chamá-la MO extra novamente, tornando-a pura Vá em frente, vamos colocá-lo aqui. E leve isso aqui também. Tudo bem, vamos continuar e compilar. Eu acredito que foi isso. Vamos clicar em jogar. E talvez estejamos perdendo alguma coisa. Temos que experimentar o jogo clicando em jogar. Agora vou saquear meus quatro e vou atirar com minha arma Como você pode ver aqui, se eu segurar meu mouse, na verdade ele não vai mais atirar, vai parar de atirar. Então, estou segurando meu mouse. Ele vai parar de fotografar automaticamente. Eu continuo atirando aqui, sem balas. Também está fazendo isso agora. Por algum motivo, na verdade, não está calculando corretamente. Quando eu tiro minha arma com menos de 20 balas, na verdade ela está se apagando. Acho que também aconteceu na lição anterior. Deixe-me dar uma olhada no que está errado aqui. Deve ser algo aqui em cima quando subtraímos a bala Porque sempre que filmamos, estamos fazendo isso. Não está aqui porque estamos entrando e disparando a arma. Acho que é algo dentro daqui. Estamos considerando o MO com menos um, porque escrevemos um aqui que está sendo definido aqui E defina o MO atual em sua configuração para a variável correta aqui. Essa é a errada. Estamos definindo o máximo para o MO extra atual. Se o seu MO extra atual for um, este na verdade será definido como um automaticamente. Há um erro aqui. O que precisamos fazer, vamos fazer isso, sim, vamos pegar isso aqui, digamos variável de nome. Vamos trazê-lo aqui. Vamos obter informações sobre armas. Obtenha as informações da arma como antes. Divida e este é o MO atual. E vamos pegar o Max MO e a revista e colocá-los aqui em vez disso Não vamos usar esse, vamos usar esse ali em vez disso. Deixe-me clicar aqui e ocultar os pinos desconectados. E isso deve funcionar perfeitamente. Agora, o bug deve ser corrigido. Acredito que isso também tenha acontecido na lição anterior. Então, clicando em Play, vamos fazer isso agora. Eu só vou atirar em todas as balas. E mostre agora que estou filmando as balas finais, recarrego e Você pode ver que agora está correto. Não consigo mais atirar quando estou com zero balas e tudo está funcionando perfeitamente Agora eu tenho que verificar isso para o cliente também. Lembre-se de que você precisa verificar o cliente, mesmo que ele funcione no servidor, pode estar errado. Quando eu largo essa arma agora e a pego, você pode ver que ela realmente tem a quantidade correta de balas Quando eu tiver dez balas sobrando, nove, eu posso soltá-las Eu posso pegá-lo. Tem a quantidade correta de balas Se outra pessoa vai saqueá-lo agora, eu também tenho que testá-lo com o servidor Se eu simplesmente abrir o servidor aqui e minimizar os dois aqui como servidor, posso soltar a arma quando o cliente for embora. Aqui, como servidor, eu vou buscá-lo. E se eu maximizar isso, na verdade é a quantidade correta de balas Se eu atirar como servidor, agora faltam quatro balas Aqui, como cliente, eu posso ir buscá-la e faltam quatro balas. OK. Isso está correto. Tudo parece funcionar perfeitamente. E também faz isso para o AK. Vamos tentar disparar algumas das balas aqui também. Tudo está funcionando bem. Ok, consertamos toda a caixa. No momento, tudo está funcionando corretamente. Vamos fazer o recarregamento com a tecla do teclado na próxima lição 149. 10.20 Recarregar arma com chave do teclado: Tudo bem, então vamos continuar e recarregar com o teclado Então, vamos seguir em frente, como antes, vamos ao player e ao Input. E clique com o botão direito aqui, vá para a entrada, faça uma nova ação de entrada. Vamos chamar isso de arma de recarga. E vamos abrir este, na verdade, apenas o contexto de mapeamento. Vamos adicionar um novo mapeamento. Vá até o final, selecione a arma de recarga e pressione a tecla R. Vou recarregar com minha tecla R no teclado e depois pressionar aqui, só tocamos isso uma vez e será muito mais otimizado Ok, aqui com o conjunto está a arma de recarga. Eu só vou chegar aqui em cima. Eu recarrego a arma e vou fazer com que essa seja minha ação de entrada simplesmente quando pressionamos a tecla R, só queremos dizer que o set está recarregando para ser verdade Só queremos recarregar sempre que pressionamos o botão. No entanto, lembre-se de que você precisa de algumas condições porque não quer apenas recarregar Porque agora, se eu apenas jogar, posso simplesmente pressionar R. Agora, por exemplo, vamos pegar isso. Eu posso simplesmente pressionar R, mesmo que eu tenha balas cheias. Eu posso pressionar um R. Isso não faz nenhum sentido. Na verdade, posso pressionar um Re. Sempre que não temos nenhuma arma equipada, eu também posso pressionar R e isso nos dará Bucky. Nós não queremos fazer isso. Primeiro, precisamos pegar esse tipo de arma equipada e queremos ter certeza de que não é igual a um braço. Vamos arrastar a partir daqui e dizer que não é igual a M e garantir que não seja igual a D. Ok, então essa é a primeira coisa. Vamos arrastar a partir daqui e dizer ouro, porque precisamos adicionar alguns deles. A próxima coisa é que, se já estamos recarregando, não queremos pressionar recarregar, então vamos encontrar nosso lingote de recarga e dizer N valentão Se não estivermos recarregando, podemos prosseguir e recarregar aqui. Ok, então vamos adicionar um novo pin novamente. A última coisa que eu quero perguntar é se eu tenho balas cheias Se, por exemplo, digamos que eu tenha 30 de 90, por exemplo, aqui, como o AK, não quero recarregar porque tenho balas cheias no meu Mac Basta dizer, vamos pegar essa arma equipada e pegar a atual M. Vamos, na verdade, copiar e colar a estrutura. Eu não quero escrever isso de novo. Vamos colar essa estrutura aqui embaixo para a arma. Deixe-me conectar a arma equipada a ela. Agora vamos perguntar, esse MO atual é em mag, isso é igual ao MO em Ma Porque se eles forem iguais, significa que temos MO total em nosso Mac e realmente não precisamos recarregar Eu digo que é igual. Se o MO atual não for igual ao MO máximo e eu, podemos prosseguir e recarregar Caso contrário, não recarregaremos. Ok, deixe-me colocá-lo por trás de tudo isso e vamos conectar isso a uma ramificação e vamos conectá-los juntos. Agora estamos perguntando, estamos dizendo que se não estamos, se não estamos recarregando e se ainda não temos a quantidade total de balas no MO atual e em mim, podemos prosseguir e Vamos tentar fazer isso. Vamos compilar, salvar tudo e clicar em Plate Se eu clicar em R no meu teclado, podemos ver que realmente estou recebendo um erro. Deixe-me dar uma olhada no que está acontecendo aqui agora. Só está dizendo que a era é essa. Se eu escrever spam R aqui e sair, isso realmente me mostrará em que época a arma equipada não é válida. Na verdade, preciso que isso seja válido primeiro, deixe-me arrastar tudo isso. Deixe-me pegar a arma equipada, clicar com o botão direito do mouse e converter em uma obtenção validada Deixe-me conectar isso. Garantimos que a arma seja válida antes de fazer tudo isso, porque quando não saqueamos nada antes, se pressionarmos R, ela não será válida Agora não estamos mais pegando esse bug. Vamos pegar uma das armas agora. Se eu pressionar R, agora vou recarregar porque tenho MO completo Mas se eu atirar em um e recarregar , posso continuar e recarregar desse jeito E vai calcular o MO corretamente. Agora você pode ver que deveria dizer 39, isso é correto. E se eu fotografar quatro delas e recarregar, devo dizer 35 como o MO extra correto Agora, sempre que eu atiro todas as minhas balas, digamos que ela seja calculada Agora deixe-me atirar em três deles e recarregar. Deveria dizer 12, isso é correto. Agora, digamos que eu recarregue aqui sempre que tiver cinco, digamos 170 Isso também está correto. Agora, se eu atirar em todos eles, ele não vai recarregar E se eu clicar em R, agora ele será recarregado Existe essa última condição que precisamos verificar. Precisamos verificar se temos mãe extra. Isso também tem memória extra antes de podermos recarregar. Agora, todas as caixas estão consertadas. Agora, também não podemos recarregar sempre que tivermos zero balas nos carregadores extras Eu vou mover isso um pouco para baixo. Vou reorganizar isso um pouco mais tarde, quando terminarmos a seção Então, vamos salvar tudo e passar para a próxima. 150. 10.21 Recarregar arma na troca de armas: Ok, então o problema é que agora também queremos recarregar, sempre que estivermos trocando de armas Agora você pode ver aqui se eu tenho zero balas e troco minha arma, deixe-me pegar rapidamente uma pistola e trocá-la Agora você pode ver se eu voltar, esta é a animação de captação. Não é a recarga no momento. Estou tentando atirar e não consigo atirar. Estou tentando recarregar e não consigo recarregar. Isso ocorre porque aqui, quando recarregamos a arma, na verdade estamos configurando a recarga para ser verdadeira sempre que recarregamos No entanto, se cancelarmos a animação, reproduzimos a montagem da animação No entanto, na verdade não o estamos concluindo. Isso nunca será definido como falso. É por isso que, na verdade, está funcionando de alguma forma. Quando trocamos a arma, precisamos configurá-la como falsa e recarregá-la automaticamente Na verdade, podemos fazer isso com a arma equipada. Sempre que saqueamos uma arma, configuramos esse conjunto como arma de equipamento como verdadeiro Também fazemos isso sempre que o equipamos manualmente. Além de pegá-lo, também estamos configurando este conjunto como arma equipada Lembre-se de que fizemos isso aqui embaixo. Deixe-me clicar aqui, Ocultar pinos desconectados. Estamos fazendo isso aqui. Sempre que configuramos a arma equipada e terminamos de equipar a arma Vamos continuar e fazer essa recarga automática sempre que estivermos sem mais automaticamente Digamos que a recarga é falsa porque precisamos configurá-la como falsa sempre que o jogador estiver realmente trocando a arma durante a animação de recarga Sempre que terminarmos de equipar a arma, automaticamente definiremos a recarga Também vamos recarregar a arma. O aparelho está recarregando. Sempre que não temos mais MO, precisamos verificar se o jogador está fora do MO e se o jogador tem MO extra? Porque se você não tiver MO extra, não faz sentido recarregar Precisamos desses dois e precisamos fazer um galho também. Depois disso, podemos ir em frente e recarregar. Antes disso, não podemos recarregar, precisamos definir o recarregamento como verdadeiro Se não tivermos isso, não vamos recarregar nem fazer nada, apenas certifique-se de que a recarga esteja configurada para cair Porque quando você o interrompe aqui durante o recarregamento, quando interrompe a montagem, você nunca vai configurar isso para cair e seu código vai sair Agora que isso foi corrigido, vamos experimentar. Vamos tentar jogar aqui como terrorista. Eu vou pegar os quatro e vou atirar se eu trocar a arma agora. Agora, lembre-se de que a primeira animação que ele reproduzirá é a animação do equipamento. Não é a recarga, então ela precisa ser recarregada desse jeito. Agora recarrega automaticamente sempre que não tenho mais balas quando eu o troco Ok, como você pode ver, agora eu recarrego. Eu troco a arma e a troco de volta. Agora eu posso pressionar R e ele realmente recarrega. Não falha, assim como antes. Vamos experimentá-lo. Vamos tentar novamente. Se tivermos, temos zero balas e eu troco de arma, ela não deve recarregar e não recarrega Agora tudo está funcionando perfeitamente. 151. 10.22 Adicionando tiro de pistola: Até agora, trabalhamos com o rifle e agora vamos atirar com a pistola Isso é muito fácil porque já fizemos a configuração. Vamos até a base de jogadores daqui. O que estamos fazendo agora aqui na arma de tiro, quando estamos atirando com a arma, estamos apenas indo em frente e jogando, o cronômetro está repetindo o código e estamos disparando o Agora, quando temos uma pistola que queremos atirar, não queremos usar esse cronômetro porque não queremos repetir tudo Só queremos disparar um tiro porque é uma pistola. Obviamente, se você tiver uma pistola automática, poderá usar esse sistema novamente porque é uma pistola automática No entanto, é apenas uma pistola e eu só quero disparar uma bala Eu não quero executar esse cronômetro. O que podemos fazer aqui é que podemos, na verdade, partir desta, pegar o tipo de arma aqui. Já temos o tipo de arma. O que você pode fazer é arrastar a partir daqui e dizer ativar a enumeração Podemos ver com qual tipo de arma estamos atirando atualmente Você pode sair e se conectar. Quando estamos atirando com um rifle, queremos jogar esse cronômetro Quando estamos atirando com uma pistola, não queremos fazer nada porque lembre-se de que já estamos disparando uma bala Já estamos executando todo esse código aqui. Já estamos executando tudo isso aqui com esse tiro inicial de arma, porque o chamamos aqui. Na verdade, acho que você acabou . Vamos clicar em jogar. Então, foi muito fácil , basta clicarmos, vamos experimentá-la para o cliente aqui. Agora eu posso ver aqui, eu não consigo mais atirar. Só estou atirando uma bala. Eu acredito que sim. Porque aqui estamos configurando isso, podemos atirar novamente. Estamos fechando este. Estamos fazendo esse código uma vez e sempre que disparamos uma bala, na verdade não estamos fazendo mais Isso ocorre porque aqui, quando é falso, lembre-se de que já configuramos a arma de tiro como falsa. Por que ele faz essa foto de novo? Tente responder você mesmo, se puder. Sem minha ajuda. Agora, eu posso te dar a resposta. O problema agora é que nunca entramos nesse cronômetro. Este nunca será válido. Aqui. Estamos perguntando, isso é válido? Isso será falso porque nunca executamos esse cronômetro. Agora, levando a pistola até aqui das cataratas, você precisa conectá-la para poder atirar novamente. E vou fazer algumas anotações sobre Mirarte e agora deve funcionar. Se eu compilar agora e clicar em reproduzir selecionar terrorista novamente e pegar minha Agora você pode ver que eu posso realmente disparar minha pistola sem nenhum problema e tudo está funcionando como deveria 152. 10.23 Parando de filmar VFX na troca de armas: Mas agora temos um problema. Se eu jogar como servidor, por exemplo, na verdade vamos jogar como cliente. Se eu jogo como cliente, você pode ver, tente dar uma olhada em mim aqui no servidor. Você pode ver aqui, você pode ver quando eu atiro e troco de arma. Se eu simplesmente atirar e trocar de arma, eu posso realmente atirar com a arma ainda no chão. E o flash do focinho está ao lado da minha perna. E veja, parece muito estranho. Cat, atire na minha arma e troque, e fica assim e está tudo como se estivesse grampeado. Na verdade, temos que parar de atirar sempre que trocamos a arma porque não queremos fazer isso. Vamos prosseguir e fechá-lo. A primeira coisa que quero fazer aqui a arma quente agora é cancelar a arma quente sempre que soltamos o botão do mouse No entanto, também quero cancelá-lo sempre que isso não for verdade. Sempre que estamos recarregando ou equipando uma nova arma, ou vamos para o estado desarmado, eu realmente quero parar de atirar Vamos copiar esse. Cole isso. Vamos conectá-lo a este. Aqui, deixe-me afastar isso um pouco. E aqui está. Estamos cancelando a arma de tiro sempre que uma delas não for verdade. Na verdade, podemos clicar em jogar e ver como ela é Novamente, vou jogar como cliente e vou dar uma olhada aqui na minha tela grande para ver como é. Então, se eu simplesmente atirar e trocar, agora ele para. No entanto, você pode ver que ainda há um flash de focinho tocando Quando eu troco, você pode vê-lo no chão. Ele não é registrado muito rápido. Se eu atirar e trocar, você pode ver que ainda está tocando, aquele focinho pisca no chão que ainda parece cheio de bugs no Então, precisamos corrigir isso. Ok, vamos fazer isso aqui. Se encontrarmos o flash do cano, vou limpar tudo isso depois desta seção Precisamos limpar isso antes de continuarmos , para que seja mais fácil trabalhar com o flash do focinho aqui embaixo, onde eu também toco o efeito sonoro Aqui, para o flash do focinho, na verdade vou escrever clique e promover esse emissor que criamos uma variável e vamos chamá-lo de emissor do focinho Vamos conectá-lo aqui. Novamente, vou tocar o som só para ver como é com o som também. Vamos compilar, ok, agora temos esse flash de focinho Agora precisamos parar esse flash de focinho em algum momento. Precisamos encontrar uma parte inicial aqui no código. Quando podemos cancelar esse flash de focinho logo no início do código para torná-lo maluco? Talvez quando estivermos equipando a arma. Se eu simplesmente subir aqui e tentarmos encontrar uma arma equipada aqui, quando estamos trocando a arma aqui, verdade não fazemos isso Porque aqui, para a arma equipada, você está tentando procurar a arma no inventário. Se você não o tem no inventário, se isso for falso, na verdade você não está fazendo nada. Realmente não faz sentido parar o flash do cano se você não tem nada no inventário e não está trocando a arma aqui na arma do Quip. Acho que vou fazer isso aqui sempre que eu realmente encontrar a arma no meu inventário porque agora meu personagem está trocando para outra arma aqui. Quero pegar meu emissor de flash de focinho e clicar com o botão direito do mouse e dizer converter em um get validado Então eu vou conectá-lo aqui. Se for válido, deixe-me afastar um pouco todo esse código para que eu possa trabalhar aqui. Sempre que for válido, vou arrastar e dizer destruir componentes, destruir um componente e depois continuar. No entanto, se não for válido, eu só quero continuar. Eu não quero destruir nada. Se não for válido, vá em frente e continue o que você fez antes. Vamos dar uma olhada aqui na carne do focinho. O que eu vou fazer é levar isso aqui. Antes de fazer isso, na verdade, aqui também podemos dizer que você não pode fazer isso sempre que estiver equipando a arma Sempre que você o estiver equipando aqui. Quando dizemos que configurar uma arma é equipar uma arma, precisamos parar de atirar Se eu pegar essa arma, se eu puder encontrá-la aqui, essa. E eu posso pegá-lo e colocá-lo aqui. E novamente, certo, não puxe e eu posso conectá-lo. Se você também não estiver equipando a arma , pode atirar Vou copiar tudo isso e colar logo antes do local do emissor Na verdade, antes de fazer tudo isso, vou verificar se você ainda pode fazer isso. Tudo bem. O que também precisamos fazer aqui, eu acredito. Vamos até aqui com a arma encontrada no inventário. Porque quando você encontra uma arma no inventário, não quer mais jogar muzzle flash aqui. Também podemos verificar antes de tocar o emissor e evitá-lo Podemos pegar essa arma encontrada no inventário e colocá-la aqui, pegá-la aqui. Além disso, eu o configurei para replicá-lo. Não foi replicado. Eu o configurei para replicá-lo porque lembre-se de que agora estamos no cliente, estamos no multicast, e isso também é usado pelo Você precisa replicar a variável para que o cliente saiba do que estamos falando Deixe-me escrever lingotes, sempre que não for encontrado no inventário, podemos atirar ou jogar esse emissor, seja como for encontrado no Acho que isso é um salva-vidas para nós, porque é jogado logo no início, sempre que trocamos a arma Essa é a primeira variável que está sendo alterada. Ele está detectando isso logo no início e não toca o flash do focinho Espero que precisemos testar constantemente, porque na verdade não sabemos antes de testar Vamos jogar como servidor agora, na verdade, vamos jogar como cliente Como cliente aqui em cima, deixe-me jogar. Agora vou dar uma olhada aqui no meu servidor novamente. Se eu fotografasse como cliente e trocasse, tentei fazer isso algumas vezes, só isso. Há muitas verificações que estamos fazendo. Isso é necessário para não reproduzir esse efeito de bug. Agora, isso não está realmente afetando o jogo, no entanto, ainda o está afetando visualmente. Não afeta o dano nem nada porque, na verdade, isso não é jogado. Isso é interrompido logo no início. Na verdade, não estamos prejudicando o jogador. Lembre-se de que estamos causando dano ao jogador após a corrida em linha. É apenas um bug visual do qual nos livramos. Tudo bem, vamos continuar e compilar tudo. Vamos salvar tudo e passar para a próxima. 153. 10.24 Animação de tiro: Agora precisamos de uma animação de filmagem porque, no momento, o player está estático. Sempre que filmarmos, vamos adicionar uma animação. Vamos aos recursos e animações. E aqui estão todas as animações que criamos antes. Se você apenas procurar por tiros acho que na verdade isso se chama fogo. Se apenas procurar fogo, você poderá ver a pistola de fogo e o rifle de fogo Essas são as animações que podemos usar para adicionar sempre que o jogador estiver atirando com a arma Para esses dois, vou pegar os dois. Acho que não precisamos do C, talvez precisemos mais tarde. Não tenho certeza agora. Mas vamos usar esses por enquanto. E vamos voltar a eles se precisarmos deles. Vamos clicar com o botão direito aqui, ir para Criar e criar uma montagem de animação como antes Para esses dois aqui, agora criamos duas montagens de animação Vou renomeá-los, remover a montagem do final No início, vou chamá-lo prefixo apenas para manter a consistência com nosso código atual no momento Deixe isso e chame esses outros 11 também. Se eu apenas pesquisar para ver as montagens da animação. Eu posso clicar na pistola primeiro. Isso é uma recarga. Estou clicando no fogo da pistola, é esse aqui E o que podemos fazer aqui novamente é mudar a ranhura para a parte superior do corpo, assim como fizemos antes. Nome do slot, parte superior do corpo como esta. E vamos fechá-lo. E vamos abrir o rifle também. Mude para a parte superior do corpo, assim. Ok, e salve tudo agora. Vamos fechá-lo. Ok, o que precisamos fazer agora reproduzir essa animação. Sempre que disparamos a arma, precisamos adicioná-la novamente à nossa estrutura. Vamos voltar às plantas. Vou remover essa palavra de pesquisa para que possamos ver. Vou até as estruturas e abrir as informações da arma. O que podemos fazer aqui é adicionar uma variável chamada animação de filmagem para esta. Agora você pode ter uma animação de tiro diferente para cada arma. Isso é muito legal. Tudo é personalizado nesta animação de filmagem. E eu vou tê-lo logo após a recarga ou logo antes da recarga Equipe, atire, recarregue. Ok, vamos compilar ou simplesmente salvar aqui. Vamos abrir nossa tabela de dados. Mais uma vez, aqui dentro da nossa tabela de dados. Mais uma vez, vamos ver aqui a animação do equipamento. Deixe-me adicionar uma nova à direita e chamar isso de animação de filmagem única. Agora podemos minimizar isso aqui no jogo. E vamos encontrar nossa montagem novamente. Se eu procurar um e pegar esse rifle de fogo, copie a referência E deixe-me voltar para a tabela de dados. Cole para os quatro AK e M, esses são os dois primeiros. Então eu volto e copio a referência para a primeira montagem da animação Copie a referência, eu volto aqui e colo para o tiro com pistola. Ok, foi isso. Vamos clicar no arquivo, baixar o arquivo CSV. Vamos abri-lo aqui. Vou renomeá-lo novamente como antes. Renomeie-o para Informações sobre a arma E eu já tenho um aqui, então, na verdade, vou copiar esse. Exclua-o aqui e renomeie este. Agora vamos voltar ao nosso jogo. Vamos ver plantas, tabelas de dados aqui dentro Novamente, vou fechar isso aqui. Você pode arrastar essa tabela de dados até aqui. E agora está atualizado. Ok, vamos ver o código agora e codificá-lo na base de jogadores daqui sempre que filmarmos. Na verdade, também está aqui se simplesmente arrastarmos tudo isso para longe. Então, vamos reproduzir a animação junto com o flash do focinho e o efeito sonoro porque ainda é apenas uma animação E precisamos jogar em um multicast porque todos os jogadores precisam ver essa animação Vamos pegar a malha novamente. Mais uma vez, digamos montagem. E podemos tocar essa montagem, e vamos conectar tudo E agora o que também podemos fazer aqui para que a montagem seja reproduzida Agora, temos isso da tabela de dados. Deixe-me copiar tudo isso. Cole-o aqui e deixe-me esconder pinos desconectados da arma Agora não temos realmente uma referência para a arma. Esta não é a classe de armas, na verdade é apenas a malha de armas. Você pode ver aqui. Se você se lembra, se voltarmos para a arma quente, vamos dar uma olhada aqui na rampa do servidor, arma Essa é a malha de armas. Essa é a malha esquelética. Lembre-se de que essa não é a classe blueprint em si. Essa é a classe blueprint. Essa é a malha esquelética. E a malha esquelética é aquela que estamos conectando à arma Na verdade, essa é a malha esquelética. Não é a classe blueprint em si. Precisamos da cláusula de projeto porque não é realmente a malha esquelética que colocamos aqui . É esse. Então você pode ver se eu arrastar até aqui e conectá-lo aqui, você pode ver que se encaixa. O que precisamos fazer aqui para otimizá-lo melhor. Na verdade, vou trocá-lo se clicarmos no multicast e se clicarmos no Plus e procurarmos a base de armas E escolhemos a base de armas, vamos chamá-la de antiga, que eu possa renomeá-la para arma Lembramos de compilar primeiro antes que você possa fazer isso. Agora se chama Arma, e agora podemos conectá-la aqui. Agora podemos ver que funciona, ok. Agora, tudo isso realmente precisa estar aqui porque eu já tenho essa referência de arma. Agora você pode realmente obter todas essas informações aqui para esse efeito V que você conectou aqui. Lembre-se de que este é o tiro, você tem o efeito sonoro do disparo e o flash do focinho E você pode conectar o flash do focinho a este aqui. E você pode conectar o efeito sonoro de gravação a este aqui. Você também pode conectar a animação de filmagem que acabamos de fazer aqui. Você realmente não precisa também da arma, podemos obtê-la daqui. Se você simplesmente arrastar a partir daqui e pesquisar a variável de arma, essa é a malha esquelética Você também pode conectá-lo aqui. Então eu posso ver que tudo isso é realmente inútil. Então, podemos remover este, e este, e este e sair e compilar Recebemos muitos erros porque agora não os estamos usando. Vamos prosseguir e excluir tudo isso. Na verdade, vamos remover isso clicando no botão Alt no teclado. E clicando aqui, clicando aqui, clicando aqui. E vou remover esse nó de redirecionamento, removê-los, clicar aqui, ocultar os pinos removê-los, clicar aqui, ocultar Agora precisamos de uma referência à arma. É essa arma aqui em cima. Eu posso simplesmente clicar e arrastar por enquanto. Vou deixá-lo muito mais limpo mais tarde. Então, vamos compilar por enquanto. Agora, essa arma de tiro está correta. Ok, nós realmente não temos mais referências agora para ter certeza se eu tenho mais referências a isso ou não. Só para ter certeza de que não estou desistindo, posso escrever, clicar e encontrar referências E você pode ver que está aqui ou aqui. Não tenho mais referências do que isso. Ok, então está tudo bem agora. E agora também conectamos a animação de filmagem. E eu não quero jogar quando estiver completo, como fizemos antes. Lembre-se das outras montagens que criamos anteriormente. Por exemplo, esse. Reproduzimos esse evento aqui sempre que concluímos a montagem da animação Agora, para a arma de tiro, eu só quero jogá-la e depois continuar meu código. Não quero esperar que seja concluído antes de jogar meu efeito aqui. Isso é bom. Vamos compilar e salvar tudo agora. Ele deve reproduzir a animação. Se clicarmos em jogar, deixe-me jogar no servidor agora mesmo, e eu seleciono terrorista. Eu vou aqui e só atiro uma bala. Você pode ver que ele está realmente reproduzindo a animação. Agora temos um bug. Agora, se eu olhar para baixo, você pode ver que está reproduzindo a animação aqui no centro da tela. Você pode ver que ele vai para o centro da tela sempre que eu fotografo, o que é muito estranho e precisamos mudar isso. Além disso, a animação é muito lenta Vou até os ativos e procurarei por Anim novamente. Vou abrir a pistola aqui para a animação de filmagem da escala de taxas Então, quão rápido essa animação será executada. Vou mudar para três. Acho que quero atirar muito mais rápido. Também para o rifle, vou alterá-lo para uma escala de três taxas Ele atira muito mais rápido. Ok, agora vamos consertar isso. Na verdade, isso também está afetando a recarga e não sei por que não percebi isso antes Acho que estava ocupado apenas conversando, gravando e mostrando para você. Mas se você acabou de recarregar, verá que esta é a animação de recarga que temos até agora No entanto, ele não está recarregando corretamente porque, se eu olhar para baixo e recarregar, na verdade ele está olhando para o meio novamente e recarregando, exatamente como esse problema de filmagem que temos Ok, precisamos corrigir isso agora. Deixe-me desconectar o som novamente, para que não seja irritante neste curso Deixe-me desconectar o som da gravação e compilar Vamos abrir o plano de animação. Porque o problema está aí agora. O problema é que o plano de animação é essa animação da parte superior do corpo em camadas por osso Na verdade, precisamos jogar isso antes do deslocamento do Aim. O desvio de mira, lembre-se, é o deslocamento em que aqui, como jogador, eu olho para cima e para baixo com minha arma e um movimento como esse Precisamos reproduzir essa animação da parte superior do corpo antes do deslocamento da mira para que ela possa se misturar Esse é o problema agora, o que eu posso fazer aqui, vamos até aqui. Vamos começar com uma pistola agora para esta máquina de estado em cache Deixe-me deletar esse movimento da pistola por enquanto. Deixe-me pegar essa camada por osso e colar aqui. Agora lembre-se de usar o cache da máquina de estado da pistola. Temos a máquina de estado em cache. Se eu conseguir encontrá-lo, temos essa máquina de estado em cache e também temos o próprio movimento. Temos a máquina de estado em cache e movimento em cache aqui Estamos usando a máquina do estado agora. Deixe-me copiar e colar aqui também. Isso é só para a pistola e vamos fazer isso também para o rifle Deixe-me deletar isso, recortar e colar aqui. Deixe-me usar essa máquina de estado para o rifle, lembre-se de que é a máquina do estado E copie e cole aqui também. E vá em frente e conecte-o aqui. Ok, então foi isso, na verdade, vamos copiar e colar isso. Vamos copiar tudo isso. Vou deletar isso aqui embaixo. Eu vou colá-lo. E eu vou conectá-lo aqui também. Vamos fazer isso aqui também. Vamos copiar a pistola One Pistol State Machine. Deixe-me deletá-lo aqui embaixo. Deixe-me copiar ou apenas conectar isso aqui. Cole conectado aqui também. Agora estamos jogando a mistura em camadas por osso. Antes de jogarmos o desvio de mira, essa será a solução correta Agora estamos salvando tudo isso no movimento da pistola em cache e no movimento do rifle em cache Podemos prosseguir aqui como antes, clicar botão direito do mouse e pesquisar o cache. Você pode conectar o movimento da pistola, clicar com o botão direito do mouse e procurar o cache Pegue o movimento do rifle em cache e conecte-o Também está muito mais limpo do que antes e pode ser montado assim. E vamos compilar e verificar se isso funciona ou se temos alguma caixa que precisamos cuidar Vamos clicar em jogar aqui como terrorista. Agora, quando eu mostro, se eu olhar para baixo, você pode ver que está funcionando. Eu atiro para cima também. Eu atiro no meio. Também está funcionando para a recarga. Agora podemos realmente recarregar enquanto olhamos para baixo. Não precisa ir aqui para o meio. Se eu atirar, eu recarrego, eu posso fazer isso. Se eu pegar um, se eu abrir esse outro cara, eu dou uma olhada naquele cara aqui. Então eu posso ver a animação. Eu pego o K, como você pode ver aqui, fotografando. Eu posso recarregar até mesmo olhando aqui. Ou se eu olhar para baixo, também posso recarregar. Eu posso atirar. E você pode ver minha animação de filmagem. Se eu chegar perto daqui, você pode ver minha animação de filmagem. E o mesmo aqui, se eu jogar como servidor. Você dá uma olhada aqui como cliente. Se eu maximizar isso. Então você pode ver que eu minimizo isso um pouco. Aqui, estou dando uma olhada no servidor e o servidor agora está filmando. Além disso, você pode ver a animação de filmagem. Eu posso recarregar daqui de cima também. Também posso recarregar enquanto olho para baixo. Agora está funcionando bem e eles estão se misturando. 154. 10.25 Fora da munição SFX: Para esta lição, quero mostrar como você pode reproduzir um efeito sonoro sempre que estiver fora do MO. Sempre que você está fora do MO, você ouve esse som de clique do rifle Você pode tentar implementá-lo sozinho, eu acredito que você pode, se você der uma boa olhada nisso. No entanto, se você não tiver certeza, vamos fazer isso juntos. Vamos abrir o player sempre que ele for salvo aqui. Vamos abrir a base de jogadores aqui dentro. Novamente, precisamos usar esse multicast. No entanto, vou adicionar um valentão aqui dizendo que não tem. Sempre que tivermos MO, podemos jogar tudo isso. Se eu simplesmente arrastar e escrever uma ramificação como essa aqui, sempre que tivermos MO, tocaremos tudo isso da mesma forma que fizemos antes. No entanto, se não tivermos Mo, quero tocar outro efeito sonoro. Eu quero pegar essa lata de som daqui e dizer a localização. Que som você quer tocar agora? Precisamos adicioná-lo à estrutura mais uma vez. Quanto à localização, já temos a localização. Podemos simplesmente conectá-lo aqui e compilar agora para a estrutura Vamos abrir a estrutura e criar uma nova variável. Podemos simplesmente chamar isso de efeito sonoro M. Vamos mudar isso para um som, vá em frente e selecione-o. E vá em frente e economize. Acho que vou movê-lo para cima até onde está sob o efeito sonoro da filmagem. Todos os efeitos sonoros estão juntos. Vamos salvar tudo mais uma vez, vamos abrir a tabela de dados. Vamos para a direita aqui no final, depois do efeito sonoro de filmagem. Vou clicar com o botão direito do mouse e adicionar um à direita. Então, podemos dizer que fora do MSX e dentro daqui, vamos apenas copiar a referência No momento, não temos nenhuma referência porque ainda não importamos nada. Vamos para a pasta de áudio aqui. Abra os efeitos sonoros. Se você acessar os materiais da causa, incluí para você alguns áudios. Se você abrir este áudio e eu incluí-lo a partir do MO, basta aumentá-lo com M K 47, de MO para um e de uma pistola MO E selecione todos os três. Clique e arraste-os para o navegador de conteúdo. Dentro daqui, selecione os três, clique com o botão direito do mouse e crie várias dicas. Mais uma vez, vou renomear todos eles apenas para manter a consistência, nós os renomeamos para S C como prefixo Eu também vou fazer isso com a pistola aqui. Vamos fazer isso para o último. O último é o K 47. Vamos chamá-lo de Som no começo, desse jeito. Ok. Vou abrir o AK 4071. Eu também vou abrir a pistola e vou abrir as quatro Quero reduzir o som porque provavelmente está muito alto para mim. Também vou colocá-lo em 0,2 para não torná-lo irritante para você neste curso. Então agora eu posso ouvir isso. Este é o fim dos efeitos sonoros do MO. Agora vamos fechá-lo e copiar as referências. Vamos clicar com o botão direito do mouse na referência de cópia do AK. Vou voltar à minha tabela de dados para o K, esta é a primeira. Vou colar para os quatro, clique com o botão direito do mouse na referência após a pistola, clique com o botão direito na referência p e cole aqui também Download de arquivo, download, CSV, como antes. Abra a pasta de downloads. E dentro daqui, mais uma vez vou deletar o antigo, colar no novo, renomeá-lo e ir até as tabelas de dados e arrastá-lo até aqui, ele é atualizado, e vamos salvar tudo Ok, vamos voltar para o jogador e abrir a base de jogadores. Agora, para este, agora temos isso aqui. O que podemos fazer é usar isso a partir dos efeitos sonoros M. Vou arrastar isso aqui de volta porque realmente não precisamos copiar e colar isso. Mais uma vez, vou fazer anotações reescritas sobre tudo isso. Na verdade, é melhor dar uma a duas aulas aqui. O que podemos fazer é tirar o efeito sonoro do MO arrastá-lo até aqui. Agora ele reproduzirá o efeito sonoro sempre que não tivermos MO. Agora não terminamos totalmente porque, na verdade também precisamos definir quando temos MO ou não. Aqui no MC, atire com a arma. Precisamos aceitar isso, lembrar de tornar isso realidade. Esse é o código normal que temos. E já temos MO aqui sempre que estamos filmando. Porque estamos basicamente dando uma olhada aqui se estamos fora do MO ou não e todas essas coisas aqui aqui. E isso será correto. Agora, sempre que não tivermos MO, sempre que isso for realmente falso, vamos tentar fazer algum código aqui. Deixe-me aumentar um pouco. Deixe-me copiar e colar isso. Deixe-me reduzir isso um pouco também, só para que tenhamos algum espaço para trabalhar. Agora, para este, vamos nos conectar aqui. Precisamos fazer o código da arma. Novamente, vou quebrar a mesma arma daqui de cima e arrastá-la até aqui. E para o local, é o mesmo local. E para o Mo, agora precisamos ter certeza de que temos Mo, porque não queremos jogar isso sempre que vamos aqui. Basicamente, o que você deseja verificar que queremos reproduzir esse som. Sempre que você tem zero balas, zero balas no Mac e zero balas nas balas extras, podemos realmente usar as balas extras Aqui eu acredito que já temos uma função. Este tem Mo extra, podemos realmente usar este. Podemos dizer que se você tem X Ramo, você vai jogar normalmente. Se você não tem Ramo, você pode reproduzir efeitos sonoros sempre que o MO extra for falso, então podemos reproduzir esse efeito sonoro de disparo. Onde estamos fora disso deve resolver tudo. Vamos compilar e clicar em reproduzir. Aqui eu quero jogar enquanto os terroristas continuam atirando minhas armas Vou continuar filmando e pular o vídeo. Ok, agora estou com as balas finais. E se eu continuar atirando e alcançar, se eu chegar a zero balas, vou tocar isso sem efeito sonoro E você pode ouvir, eu não tenho nenhuma bala. Se eu simplesmente mudar para cá e tocar os outros efeitos sonoros, vejo que é normal. Porque lembre-se, eu desconectei o efeito sonoro da filmagem agora Se eu chegar a zero balas, você pode ouvir que eu tenho zero balas Então é assim que podemos fazer isso. Vamos compilar e salvar tudo como antes de continuar. Agora, na verdade, vou limpar tudo isso antes de continuarmos, porque parece uma bagunça E também é como seguir esse curso. Deixe-me compilar no meu tempo livre. Vou apenas organizar tudo isso, então é muito melhor dar uma olhada. Vá em frente e crie, redirecione notas, crie comentários e tudo Te vejo na próxima. 155. 10.26 VFX e SFX do Bullet Impact: Tudo bem, então tudo está indo bem até agora. Acho que faltam alguns efeitos visuais e sonoros para quando a bala atinge alguma coisa Agora, quando estamos jogando e eu pego, por exemplo, os quatro e tento filmar aqui, agora estou tocando nessa parte aqui, mas na verdade não vemos nenhum efeito visual na parte que estamos batendo, e acho que ficará muito Vamos adicionar isso. Você pode tentar se editar porque eu acho que você pode, se você tentar pensar bem , vamos fazer isso juntos. Vamos aqui na base de jogadores. Assim como antes, precisamos criar um multicast. Agora podemos integrá-lo aqui e adicionar mais variáveis, mas acho que vai ficar um pouco confuso. Então, precisamos criar um novo. Como você pode ver, eu organizei isso aqui, como você pode ver, e vou te ensinar um pouco sobre isso. Aqui temos o gráfico de eventos. Temos o movimento básico do personagem que fizemos e finalizamos. E nós realmente não tocamos nele há muito tempo. A propósito, adicionei as funções a gráficos diferentes Isso ocorre porque se você cria muito código dentro de um gráfico, ele realmente começa a funcionar, talvez você já consiga senti-lo no seu computador. Começa a acontecer. Quando você olha aqui dentro , o que você pode fazer, por exemplo, digamos que eu queria esse agachamento especificamente em outro gráfico Eu só controlo x para virar aqui , controle x. Então eu crio um novo gráfico chamado, por exemplo, agachamento É porque um evento é chamado de agachamento. Então eu não posso fazer isso. Vamos chamá-lo de gráfico de eventos crouch ou algo parecido Então, dentro daqui, agora eu estou. Dentro do gráfico de agachamento, eu posso controlar V, e aí está, eu tenho o Agora, por alguns motivos, você pode ter funções que não estão sendo coladas Deixe-me clicar no controle Z aqui, controle Z, no controle do controle Z até que esteja aqui. Às vezes, o que acontece é que, se você copia algo, digamos que eu queira copiar essa parte, controlar X, criar um novo gráfico, chamá-lo de algo aleatório e depois copiar e colar. Agora eu posso ver quando você cola, isso aparece e diz que algumas referências de funções não puderam ser resolvidas no novo contexto. Você gostaria de consertá-los aqui? Então você pode escolher algo. No entanto, você não quer fazer nada aqui, basta clicar em Confirmar. Ao clicar em Confirmar, você pode ver que há muitos erros aqui que precisam ser corrigidos. No entanto, não pressione em nada. Você pode simplesmente clicar em Arquivo e, em seguida, clicar em Atualizar todos os nós E isso resolverá tudo para você. É assim que você copia e cola o código de um gráfico para outro. Vou clicar nos controles apenas para voltar ao que eu tinha antes, assim. Isso é o que eu fiz. Acabei de copiar daqui e fiz um novo gráfico Eu fiz um chamado Lot Equip and Drop Weapon. Aqui está minha lógica de Lot and Dropping Weapon. E minha arma Equip Logic. Eu também adicionei alguns comentários para você. Quando eu lhe apresento o projeto final, você pode tentar dar uma olhada nele e é muito melhor vê-lo do que ficar confuso. Como você pode ver aqui, essa é a arma do lote e assim por diante. Sim, isso é tudo. O último gráfico que fiz foi a arma de tiro e recarga Essa em que temos a lógica da arma de tiro. E eu tento organizá-lo da melhor maneira possível. Aqui está a transmissão múltipla da arma de tiro, então eu também tenho a arma de recarga E aqui está a lógica para isso. Muitas barreiras para se manter organizado, com vários gráficos de eventos Temos o gráfico de eventos normais apenas com o movimento. Você não pode renomear este, este é o padrão, você não pode renomeá-lo No entanto, eu criei os outros e os renomeei para Saquear, Equipar e entrar e atirar com a arma aqui. Recarregue também. É muito melhor se manter organizado e podemos encontrá-los muito melhor mais tarde. Também criarei categorias para todas elas, como mostrei na lição anterior. Você pode criar categorias e adicioná-las aqui. Provavelmente é bom fazer isso para todas essas e também para todas as suas funções. Fora isso, vamos para a filmagem e recarregar. Na filmagem e recarga, aqui temos esse multicast tocamos o emissor aqui com o flash do focinho No entanto, vamos criar um novo para o impacto. Clique com o botão direito do mouse e crie novos eventos personalizados como antes. Vamos chamar isso de MC bullet Impact. Vamos executá-lo também por meio de um multicast e confiável. Agora, o que precisamos saber é, claro, que precisamos da arma da qual estamos atirando. Também precisamos do local do ataque. Onde é que queremos gerar nosso emissor? Este é o lugar em que estamos atingindo o local de ataque da arma É a base de armas. Vá em frente, selecione-o e compile. Ok, onde você quer jogar isso? Queremos jogar isso sempre que filmarmos. Essa é a lógica do tiro. Estamos atirando na arma primeiro, interpretando o efeito e depois reproduzindo o traçado de linha. Lembre-se do traçado de linha, se eu selecionar o tipo de depuração para ser persistente para que você possa ver a linha, essa é a linha quando estamos filmando, esse é o traçado de linha Está filmando essa linha. Agora sabemos onde estamos atingindo com esse traçado de linha depois de realmente atingirmos alguma coisa Isso é o que significa: Bloquear golpe depois de realmente atingirmos alguma coisa. Queremos reproduzir esse efeito. Então, vou deletar esse olá por enquanto. Vamos reproduzir esse MC Bullet Impact que acabamos de criar. No momento, temos um pequeno problema porque é um golpe de bloqueio. E aqui também diz que o ator de sucesso tem o técnico. No momento, é só jogando isso para os jogadores que precisamos corrigir isso. Em vez de combiná-los, vou deletar isso. Vamos pegar o bloqueio aqui e conectá-lo. Vamos fazer um galho e ir em frente e fazer isso. Se for o jogador, você pode fazer alguma coisa. Se não for o jogador, você pode fazer outra coisa. Então, em vez de apenas adicionar aqui, temos que reproduzir esse efeito. Nós realmente não nos importamos se é o jogador que foi atingido ou não Nós apenas jogamos esse efeito de qualquer maneira. Porque se você bater em uma parede, você vai reproduzir esse efeito. Se você bater no jogador, você vai jogar esse efeito. Mas realmente não precisamos conectá-lo depois do player aqui. Assim, podemos conectá-lo antes do player. Eu só vou dar um pouco de espaço aqui. Podemos adicioná-lo antes do jogador. Acho que também precisamos saber quem atacamos. Porque se atingirmos o jogador, queremos jogar sangue em vez de apenas um decalque ou pedra que atingimos aqui Para este, vou adicionar um novo. Vamos chamá-lo de hit Actor. Para o ator de sucesso, você pode ver aqui. Agora, se você está confuso o tipo de variável precisa adicionar, basta ir até aqui. E esse ator de sucesso. Se você segurar o mouse sobre ele, ele diz Actor Object Reference. Vamos até aqui, clicar nele e mudar isso para uma referência de objeto ator aqui. Este, podemos simplesmente colocá-lo acima disso aqui e compilar. Ok, agora também temos essa informação. Agora, para a arma, você precisa conectá-la. A arma está aqui em cima, então você pode simplesmente clicar e arrastá-la até aqui. E deixe-me criar algumas notas de rota traseira para me manter organizado. Ok, vamos lá. Agora nós criamos isso. Isso está fora do caminho. A próxima coisa é o sucesso. O ator de acerto é apenas esse local de acerto se você clicar na seta, para que você possa ver todos os valores, esse é o local que atingimos. Depois de termos um hit de bloqueio, pegamos esse local de hit aplicamos a esse multicast Vamos minimizar isso um pouco novamente, e aqui está. Vou conectar isso mais uma vez. E depois de atingirmos o jogador, podemos aplicar algum dano. Agora o que podemos fazer, sim, podemos ir até aqui. Agora. Nós realmente não temos nada para fazer lá fora. Vamos gerar o emissor no local. Vamos gerar o emissor em um local. Também tocaremos som no local. Agora, se você quer ter decalques, se já jogou Counter Strike antes, sabe que os decalques aparecem na parede. Se você atirar na parede. Eu realmente não tenho decalques neste curso. No entanto, se quiser, você pode novamente arrastar a partir daqui e dizer desova o decalque no local Isso vai gerar decalques. Os decalques são basicamente imagens. Você pode gerá-los na parede. Por exemplo, se uma bala atinge uma imagem, você pode gerá-la por meio de um decalque de desova Já temos a localização aqui para a localização, o tamanho do decalque, você pode fazer 111, por exemplo, ou qualquer outra coisa Aqui você pode selecionar novamente o decalque dependendo do que está na estrutura Você pode adicionar os decalques à estrutura da arma específica e assim por diante, mas eu realmente não tenho um decalque, então vamos excluí-lo Isso será fácil para você fazer depois de termos feito tudo isso 100 vezes. Vamos excluí-lo. Agora, aqui para esse emissor de spawn, agora precisamos do emissor, também precisamos do Vamos fazer isso. Vamos salvar tudo, vamos minimizar isso. Vamos para a estrutura agora. Abra-o e aqui vamos adicionar duas variáveis. Vamos adicionar um chamado Bullet Impact VFX. Vou abrir um espaço aqui, verdade não precisamos juntá-los , Bullet Impact VFX E eu também vou adicionar outro, Bullet impact. X, um para o efeito sonoro e outro para o efeito visual. Para o efeito visual, é um sistema de partículas. E vá em frente e selecione isso. Para o próximo, o efeito sonoro é uma sugestão sonora. E Deus, e selecione isso também para o efeito sonoro. Eu vou sim, logo após o efeito sonoro da filmagem. Então, só para me manter organizado e para obter o efeito visual, vou movê-lo logo após o flash do focinho Vá em frente e salve tudo. E lembre-se de que agora precisamos adicioná-lo ao que é chamado de tabela de dados. Vá em frente e abra sua tabela de dados. Tudo bem, então aqui estou eu, dentro da minha tabela de dados. E agora, para esses efeitos de impacto de bala, é depois do flash do cano Vou adicionar uma coluna à direita. Vou chamá-lo do mesmo nome aqui. Eu posso simplesmente copiar e colar isso. Vamos para o lado e colamos aqui. O próximo também mostra os efeitos do impacto da bala após os efeitos de tiro aqui Adicione uma coluna à direita e adicione-a aqui. Agora precisamos de referências a. Agora, para eles, estou usando apenas os do mercado. Em vez de procurá-lo na pasta, porque não tenho ideia de onde ele está, basta clicar na pasta Marketplace e pesquisar por Impact. E então você pode vê-los aqui. O que eu vou usar talvez seja esse chamado Stone Medium para o efeito de partículas de impacto Clique com o botão direito e copie a referência. Se eu puder encontrá-lo aqui, copie a referência e eu posso colá-la para os efeitos de marcador Vou apenas colá-lo para todos eles. Eu só quero ter o mesmo efeito visual de impacto de bala para o efeito sonoro Agora acredito que temos algo chamado impacto do rifle aqui Vou clicar duas vezes nele e reduzir o volume para 0,2 porque acho que está muito alto. Na verdade, é o corpo, é quando atingimos o jogador. Na verdade, também vamos adicionar isso enquanto somos adicionados. Vamos adicionar um para o jogador. Vamos abrir a estrutura novamente e adicionar uma nova variável. Vamos chamar isso de impacto de bala, impacto bala, efeitos de jogador para o outro Vamos adicionar este para o efeito sonoro. Vamos adicionar um novo. Chame isso efeito sonoro do Bullet Impact Player Acho que vai ser muito mais interessante ter os dois. Vamos pesquisar novamente o sistema de partículas. Vá em frente e selecione-o para o outro. Som E basta movê-los para cima novamente para ver o impacto da bala, efeito visual e o efeito sonoro Ok, agora eles estão nisso. Vamos adicioná-los novamente à tabela de dados. Abra-o e faça uma coluna aqui à direita. Faça uma coluna aqui à direita também. Este copia e cola o nome, o outro também, copaame Aqui estamos. Agora podemos adicionar um novo efeito visual e efeito sonoro. Vamos voltar para a pasta do Marketplace novamente, pesquisar calor. Vamos copiar este Body one, apenas reduzimos o ruído do botão direito do mouse. Copie a referência e podemos colá-la para o efeito sonoro do bullet impact player aqui Agora precisamos daquele em que não atingimos o jogador. Acho que essa superfície de impacto de um rifle. Vá em frente e reduza o ruído para 0,2. Vamos jogar e ver o que é. Ok, parece bom. Vamos clicar com o botão direito do mouse, copiar a referência e colar aqui. Agora precisamos de um efeito visual de impacto de bala. O efeito visual do player realmente precisa de um pouco de sangue Quando atingimos o jogador, não tenho certeza se eles têm um aqui. Talvez você possa procurar sangue. Nós realmente não temos um aqui. Você pode ver que só temos aqueles metálicos. Só temos o impacto na pedra e na madeira. No entanto, vamos apenas copiar o metálico por enquanto. Demora um pouco para entrar no sistema de partículas aqui e isso não faz parte do curso Isso será um pouco avançado demais, levará algum tempo para ser feito. Vamos copiar a faísca aqui. Meio de ignição Vamos clicar com o botão direito do mouse e copiar a referência. E você também pode colá-los aqui no efeito visual deste. Agora, se você realmente quiser entrar aqui e mudar alguma coisa, você pode abri-la. Talvez você possa clicar em Color over Live. Você pode clicar aqui, aqui , nessa seta e nessa constante. E você pode tentar brincar com as cores. Você sempre pode tentar brincar com isso. Torne-o mais vermelho, para que a cor aqui, ao longo da vida, você possa brincar com a cor. E com as setas aqui, torne-o mais vermelho, para que pareça sangue Você sempre pode fazer isso, ou também pode acessar o mercado da Epic Games e baixar alguns sistemas de artigos de sangue. Há muitos deles dentro do mercado. Tudo bem, agora nós os adicionamos. E vamos voltar para a tabela de dados. E agora podemos clicar em Arquivo e baixar e baixar o arquivo CSV, mais uma vez aqui na minha pasta de download Deixe-me renomear essa tabela de dados mais uma vez. E deixe-me ir para a pasta de tabelas de dados. Deixe-me fechar isso por enquanto. Deixe-me arrastar a tabela de dados até aqui e atualizar tudo. Ok, agora temos isso trancado. Vamos até o jogador, a base de jogadores. E agora vamos copiar tudo isso. Cole para que eu não precise escrevê-lo novamente. Isso é exatamente o que fizemos antes. Vamos arrastar a arma, obter o nome da arma e as informações da arma a partir daqui. Eu só vou esconder os pinos desconectados. O que eu preciso deste é o impacto de bala, o impacto de bala de efeito, o reprodutor de efeitos e os efeitos de impacto de bala e o reprodutor de efeitos Eu preciso deles aqui e então eu posso ir em frente e fazer o efeito de partícula em vez de apenas rei, por exemplo, o impacto da bala, os efeitos Sempre podemos perguntar se é o jogador que batemos ou não. Porque se for o jogador que atingimos, queremos jogar este. O que podemos fazer é pegar esse ator de sucesso e dizer ou não entender, mas apenas o ator tem etiqueta um pouco antes. Assim como fizemos aqui quando atingimos o jogador aqui. Estamos perguntando se o ator tem o tag player, então sabemos que é o jogador. Podemos fazer a mesma coisa aqui, dependendo se o ator tem o tag player ou não, então sabemos que é o jogador que atingimos ou não. Então, o que podemos fazer é pegar isso e dizer selecionar. E podemos pegar o nó de seleção e conectá-lo aqui. Falso, não é o jogador, então só queremos reproduzir esse efeito se for o jogador, se for verdade, o ator tem o tag player. Queremos reproduzir esse efeito de jogador. Agora, ele reproduzirá um efeito visual dependendo de atingirmos o jogador ou não. Ok, legal. Para o local, é o local do hit Para a escala de rotação, tudo é o mesmo. Nada realmente precisa ser mudado. Agora, para o efeito sonoro, estou fazendo o mesmo a partir daqui. E diga selecionar dependendo se é o jogador ou não. Aqui, esse. Vá em frente e conecte-o novamente. Se não for o efeito sonoro normal do player, se for o player, o efeito sonoro do player é igual ao do local em que foi atingido. Vou apenas adicionar algumas notas de redirecionamento e organizar esse Eu adicionei algumas notas de redirecionamento e vou salvar tudo agora Deixe-me ir até aqui e verificar novamente se não esqueci nada Agora, adicionamos isso, adicionamos o efeito visual e o efeito sonoro aqui no código Sempre que fotografamos e realmente atingimos alguma coisa, tocamos o efeito sonoro e também o efeito visual. E o ator de sucesso está bloqueado. A arma também está bloqueada e o local do ataque também está bloqueado. Vamos salvar tudo aqui e experimentar. Vamos selecionar terroristas. Vou selecionar os quatro. Vá em frente e atire. Eu posso ouvir o som, se você puder ouvir o som. Incrível. Ok, deixe-me desconectar essa parte do código aqui para a arma de tiro Vou apenas desconectar a parte do código da arma de choque Só consigo ouvir os impactos da bala para ver se funciona corretamente Eu só vou tirar a foto do AK aqui. Agora você pode ver que eu estou realmente filmando. Eu posso ver o impacto. Eu também posso ouvir o som. Se estiver longe, não consigo ouvir o som. Se estiver perto, você pode ver que está se aproximando. Parece muito melhor. Se você quiser aumentar o impacto, você sempre pode entrar aqui e aumentar a escala. Algo como uma loucura. Você pode realmente ver a diferença. A escala agora é dez. Eu posso jogar, eu posso atirar em alguma coisa. E agora você pode ver o quão louco isso realmente fica. Agora você pode ver que o efeito parece ruim porque é muito ampliado No entanto, acho que um a um está bem. Se desejar, você sempre pode torná-lo 1,5 para que seja um pouco maior, se desejar. Mas acho que está tudo bem por enquanto. Isso é o que parece. Agora vamos remover essa linha. Nós realmente não precisamos ver essa linha de depuração para que eu possa pressionar nenhuma Também quero experimentá-lo no cliente, apenas para ter certeza de que está funcionando no cliente para prosseguir e experimentá-lo no cliente. Ok, bom. Novamente, se você quiser mudar a cor do impacto, você sempre pode entrar no sistema de partículas e clicar na cor E você também pode mudar a cor para isso. Mas agora você pode ver que está funcionando muito bem e também está funcionando lá. No entanto, não podemos realmente vê-lo lá porque é muito pequeno. Aqui está. Você pode tentar, você pode ver aqui está aqui. Incrível. Parece muito bom. Bom. Ok, isso foi concluído e eu vou conectar essa parte novamente, compilar e salvar tudo Agora também temos o efeito de disparo, o efeito visual e o efeito sonoro. Novamente, se você quiser adicionar um decalque como Counterstrike, você também pode atacar aqui e dizer Cal você também pode atacar aqui e dizer E você pode gerar o decalque no local, como antes. Você sempre pode selecionar aqui, criar um nó de seleção e conectar o player. Se for o jogador que você atingiu, você não quer gerar nada, você pode fazer isso se for o jogador ou se não for o jogador que você atingiu Você sempre pode gerar uma bala na parede. Você sempre pode fazer isso. Vamos compilar e salvar tudo e passar para a próxima 156. 10.27 Espalhe de bala: Agora, em vez de ter todas as balas atingidas no meio do cursor, agora você pode ver se eu atiro em alguma coisa, ela sempre atinge o mesmo lugar Em vez de fazer isso, você pode realmente adicionar um marcador espalhado Podemos fazer isso exatamente como em Quinzena, por exemplo. Se você pressionar o cursor, ele não está realmente atingindo o mesmo ponto, 2047 Se você continuar atirando. Fazer isso, é muito, muito simples na localização final do marcador Você pode ver aqui que estamos criando esse traçado de linha. Antes de fazer isso , vamos pegar tudo isso, copiar e colar aqui. Acho que vou provar isso mais tarde, porque aqui eu não quero traçar uma linha se eu estiver fora do MO e assim por diante. Talvez eu queira melhorar isso removendo a sequência, porque então não precisamos copiar e colar esse código. Podemos simplesmente adicionar essa parte logo depois disso. Mas vamos manter isso por enquanto, assim, e ver aonde vamos com isso. A localização final, o que eu quero fazer com ela, quero randomizá-la um pouco Local inicial e final. O local inicial é adequado para o traçado da linha. No entanto, a localização final, vamos randomizá-la. A corrida de linha não acontece sempre no mesmo lugar. A maneira de fazer isso é muito, muito simples. Podemos pegar essa localização final agora e podemos pegá-la e dizer vetor de quebra. Agora, a partir desta, o que podemos fazer é desconectá-la daqui Por enquanto, exclua este, que só temos isso aqui. E você pode simplesmente clicar, arrastar e colar aqui. Na verdade, nesta localização final, estamos quebrando o vetor. Então eu posso ver o x, y e z, e eu posso randomizar o valor aqui O que eu quero fazer é usar esse chamado random float in range Agora, não temos realmente um vetor aleatório no intervalo, caso contrário, eu teria usado isso. Mas temos uma função chamada random float in range. Então, ele escolherá um flutuador aleatório dependendo de um número aleatório, dependendo do que você fornecer como valor mínimo e valor máximo A propósito, também é assim que você joga um dado. Você lança um dado escrevendo aqui, o valor mínimo dos dados deve ser um, o valor máximo dos dados deve ser seis. E então ele lança um valor aleatório de 1 a 6 para lançar os dados. E você ganha como um número aqui. Vamos fazer isso aqui pelo valor mínimo. Só queremos pegar esse x e dizer, vamos escrever menos primeiro, digamos 200 Vamos tentar 200. Então, a flutuação máxima aqui, digamos mais 200 Ele vai pegar a localização x, vai encontrar um número aleatório. Damos isso x -200 Pegue isso x mais 200. Entre esse intervalo, você encontrará um número aleatório com esse número aleatório que queremos tornar vetor. Vamos pegar essa extremidade aqui e dizer vetor para que possamos juntá-la novamente e selecionar esse vetor make. Então, podemos conectá-lo novamente ao x aqui. Basicamente, estamos apenas modificando o valor x e conectando novamente ao vetor Vamos fazer a mesma coisa com o outro. Vou copiar e colar isso. Talvez você também possa realmente criar uma função a partir desta, mas acho que será desnecessário. Vamos apenas adicioná-lo aqui. E adicione o x ou o y e o Z também. Vamos conectar o Y. Vamos conectar o Z desse jeito Ok, agora terminamos isso e agora ele vai encontrar uma carga e um alcance aleatórios. E ele vai randomizar nosso vetor dependendo do valor que ele encontra aqui como aleatório E deixe-me adicionar algumas notas de redirecionamento para melhorar a aparência Ok, então aqui está. Na verdade, foi isso. Então, terminamos. Isso foi muito, muito fácil. Vamos fazer a depuração novamente e jogar só para ver como fica Agora, aqui como terrorista, eu posso disparar minha bala e você pode ver quando eu atirei várias vezes Não vai atirar no meio do cursor, vai encontrar uma localização aleatória, às vezes no meio, às vezes fora do cursor. O que você pode ver é que não é atirar no mesmo lugar repetidamente, é assim que você pode randomizar a propagação da bala Você não está filmando no mesmo lugar. O que você pode fazer se quiser um spread maior sempre aumentar esses números novamente Se quiser melhorá-lo, você sempre pode promover isso uma variável e conectar essa variável a todas elas. E você pode simplesmente editar uma variável e ela editará todas elas ao mesmo tempo. Isso vai te poupar muito tempo, mas acho que vou mantê-lo em 200, se você quiser. Você pode aumentar a extensão da bala e ela será atingida no meio Mas, como você pode ver, se eu chegar perto, será muito mais fácil acertar. No entanto, se eu acertar longe, será mais difícil acertar o alvo. Nem sempre estou no meio aqui. Método muito fácil de fazer isso. E vamos salvar tudo, vamos passar para a próxima. 157. 10.28 Colocando as armas corretamente: momento, acho que estamos no momento em que podemos simplesmente colocar ao redor das armas, aquelas armas que temos por aqui. Eu só vou deletar todos eles. Você pode fazer isso rapidamente. Você pode clicar aqui, no turno antigo, clicar no último, excluir, e eu também vou excluir este. O que você pode fazer agora é ver as plantas das armas. Agora você pode simplesmente arrastá-los e colocá-los ao redor do nível, por exemplo. Você pode colocar um AK aqui se quiser. Você pode ativar o snapshot aqui. Acho que vai ser muito difícil colocar o AK e simplesmente arrastá-lo um pouco para cima para que não fique assim no chão. O que você pode fazer é que eu só queria tê-lo na parte de trás. Só estou dando uma olhada no quão longe estamos dessa parede. Talvez possamos adicioná-lo aqui. Na verdade, deixe-me arrastá-lo até aqui atrás da capa, segurar alt e arrastar para copiá-lo. Acho que vou aumentar esse para 500 em vez de segurar Alt e arrastar assim. Acho que vou copiá-lo assim algumas vezes. Aqui, aqui e aqui. Basta fazer o que quiser para o seu nível. Você realmente não precisa seguir aqui. Só estou fazendo isso aleatoriamente. Agora nós temos isso. Talvez possamos adicionar um aqui também. Agora nós temos isso. E o que você pode fazer é adicionar um quatro no meio aqui. Talvez eu só precise diminuir meu snapping para 100 mais uma vez aqui, acho que vou adicioná-lo no meio Eu preciso diminuir isso para 50 em vez disso aqui. E então aumente, vamos pegar aqui, aumentar para 100 novamente, aumentar isso para o outro. Coloque em 500 novamente, assim como antes. Continue arrastando assim. Agora está entre o K aqui, aqui e aqui. E vá em frente e continue assim. Ok, agora temos isso e se você der uma olhada, parece bom o que você pode fazer. Você também pode colocar a pistola para arrastá-la até o nível Deixe-me diminuir isso para 100 novamente. E coloque a pistola, empurre-a para cima como antes, assim se quiser, você pode adicionar a pistola para curtir todo o espaço Se eu aumentar para 50, você pode adicionar a pistola assim a todos os espaços Deixe-me ir em frente e fazer isso. OK. Agora, eu coloquei as pistolas Agora você pode ver pistolas até aqui, a K e quatro até aqui, se quiser Na verdade, eu não quero colocar armas na frente daqui porque é aqui que o jogador está surgindo Eu posso até movê-los um pouco mais para a frente. Portanto, eles não estão surgindo em cima das armas. Estou apenas movendo alguma coisa para cá. Também temos que lembrar os pontos de desova deste Basta ir em frente e selecionar todos eles. Mova-os um passo para a frente, assim. Além disso, para essas armas, quero selecionar todas elas. Clique no primeiro, role para cima Hold Shift e clique no último. Além disso, tenho que selecionar o estojo Hold Control. E eu vou apenas selecionar todos eles aqui. E vamos clicar na ferramenta de movimentação, segurar Alt e arrastar para copiar todos eles. Clique em para girar 180 graus. Deixe-me mantê-los aqui e tentar fazê-los no mesmo nível. Portanto, é justo que os dois lados verifiquem se estão no mesmo nível e estão agora, o que eu quero fazer agora é arrastá-los para o outro lado e colocá-los em algum lugar como aqui. Acho que é aqui que está do outro lado também. Eles estão muito perto da parede. Eles também estão muito perto da parede. Talvez mais um como esse, precisemos arrastá-los para o outro lado. É algo aqui. É mais um, acho que atrás de uma cobertura como essa. Agora, os dois lados são iguais. Se você clicar em jogar agora, podemos vender antiterroristas. Agora, por exemplo, você pode ver que eles estão no chão. Podemos pegar uma pistola e também podemos escolher uma das outras armas E sim, agora tudo está funcionando. O que você pode fazer em vez de pegar uma pistola primeiro porque é irritante, talvez trocar para o rifle, você possa Então você tem o rifle primeiro e depois as pistolas atrás deles Ok, agora que você tiver colocado as armas, você também pode colocá-las aqui, se desejar. Você pode colocar, se você fizer outra arma, como uma arma especial, você pode colocá-la aqui em cima. Então você tem que subir essa rampa para pegar essa arma. Isso também vai ser legal. Ok, então sempre que você tiver colocado suas armas, vamos passar para a próxima lição. 158. 11.01 Projetando a interface do usuário de saúde e armadura: Tudo bem, agora estamos na armadura de saúde e danos, e estamos prontos para criar a interface de usuário de saúde e armadura Então, vamos seguir em frente e acessar a interface do usuário. E já temos nossa interface principal, então vamos abri-la aqui à esquerda, quero criar uma interface de armadura e saúde Ok, então o que eu quero projetar, eu quero mostrar para você primeiro , para que você possa realmente vê-lo. Quero criar uma interface de usuário como essa. Gosto de mostrar isso para você. Então você pode, na verdade, estamos na mesma página aqui e você sabe o que está fazendo. Nós estamos fazendo isso. E era assim que eu queria ser. Novamente, o que eu disse antes, tente dar uma olhada, tente detalhá-lo. Então, você sabe, se você quiser criar caixas horizontais, caixas verticais , sobreposições, exatamente como fizemos antes, isso é o que vamos criar Ok, primeiro precisamos de uma sobreposição porque temos um plano de fundo e algo em cima dele Vamos arrastar isso para o painel da tela aqui. E agora está adicionado. Agora clique nele. E para o ponto de ancoragem, vou mudá-lo para o canto inferior esquerdo e escrever 00 na posição para colocá-lo aqui na tela para o alinhamento do y, escrever um, agora está aqui na posição Ok, para este, queremos ter uma imagem, queremos ter um lugar de fundo, a imagem aqui. Eu quero fazer com que seja o mesmo que aqui. Em vez de apenas fazer a mesma coisa. O que posso fazer aqui é segurar a tecla Shift e clicar com o botão direito para copiar isso. Ou você pode simplesmente clicar com o botão direito e copiar. Você pode ir até esta imagem e segurar a tecla Shift e clicar com o botão esquerdo para colá-la. Assim para o alinhamento, basta preencher tudo para a sobreposição Agora eu quero que ele seja dimensionado para um conteúdo como esse. Qualquer que seja o tamanho da imagem que temos aqui , na verdade, será automaticamente dimensionado com esta. Para o espaço na tela. Eu quero afastá-lo um pouco, 30 no X e -30 no Y. Temos um pouco de espaço aqui Não está aqui no limite. Ok, vamos compilar agora. Isso é o que parece. Agora vamos adicionar a barra de saúde. Vamos adicionar uma caixa horizontal porque queremos um ícone e uma barra de progresso ao lado dela. Então, vamos adicionar uma caixa horizontal a essa sobreposição. Para esta caixa horizontal. Vamos primeiro adicionar uma imagem porque queremos um ícone. E então vamos adicionar a barra de progresso. No entanto, lembre-se de que a Barra de Progresso tem texto em cima dela. Na verdade, precisamos de uma sobreposição. Primeiro, vamos procurar uma sobreposição e colocá-la aqui para essa sobreposição Vamos encontrar a barra de progresso. Para a barra de saúde, estamos usando uma barra de progresso e, em seguida, temos um texto em cima dela para mostrar quanta saúde o jogador tem. Ok, agora parece um pouco confuso para essa sobreposição. Vamos ver aqui que temos essa caixa horizontal para essa barra de progresso. Basicamente, quero preencher tudo nessa sobreposição. Vamos colocar isso no meio. Ao clicar na caixa horizontal, vou alinhá-la ao meio da imagem Vamos selecionar o ícone. Agora não temos um ícone no momento. Vamos aos ícones. Eu quero que você acesse os materiais do curso. Se você simplesmente acessar os materiais do curso aqui, eu vou para a interface de usuário dos ícones e importo a saúde no ícone do coração e no ícone do escudo. Clique e arraste-os até aqui. Agora eles são importados. Lembre-se de clicar nele, alterar o grupo de texturas para a interface do usuário, como antes. E as configurações de compressão interface do usuário têm a mesma coisa ou o coração Mude-a para UI e mude-a. Vamos ver aqui, a interface do usuário para T. Agora podemos entrar na interface do usuário. Podemos clicar na imagem, pesquisar CO ou ícone. Vamos apenas procurar o coração, um a um. Selecione-o. Agora você pode ver as exposições E isso é por causa do alinhamento. Eu só queria tê-lo no centro assim. E eu vou mudar o tamanho dele para 45, 45 talvez. Na verdade, vamos mudar para 40 por 40. Agora, para essa barra de progresso, vamos clicar nela. Para a barra de progresso, você pode ver aqui, eu posso aumentar e diminuir a porcentagem. E isso aumentará e diminuirá a barra de progresso. Agora, para o estilo, precisamos de uma imagem de fundo e precisamos de uma imagem preenchimento e uma imagem de letreiro. Agora, para o plano de fundo, eu só quero clicar aqui. E acho que podemos procurar a caixa de entrada. Eu tenho algumas caixas de entrada aqui que podemos usar como plano de fundo. E podemos usar apenas essa imagem, barra de entrada escura. Vá em frente e selecione-o. Lembra o que eu disse antes? Mude-o para uma caixa e também selecione 0,5 como margem. Portanto, ele se estende corretamente para a imagem de Phil. Se você apenas pesquisar por Phil, eu tenho a barra de progresso, Phil, para Deixe-me importar o outro porque ainda não o importei. Você provavelmente já o importou aqui. Deixe-me ver meus materiais de custo mais antigos, imagens. E deixe-me importar esse vermelho, vermelho, Phil. Deixe-me importá-lo aqui. Clique nele, altere I e altere essa interface de usuário para salvar. E deixe-me voltar aqui. Vamos selecionar o preenchimento vermelho. Vá em frente e selecione este, também para a imagem da marca. Você pode simplesmente copiar isso. Cole aqui. Lembre-se para a margem do que eu disse antes, 0,5 para a margem. Este novamente muda para caixa e 0,5 para a margem. Agora isso foi corrigido e você pode ver que a cor não está correta. Está mostrando essa estranha cor azulada, cor verde-azulado. Isso não é o que queremos. Isso ocorre porque o preenchimento e a opacidade da cor são dessa cor azul clara Você mudou para branco. Você pode ver o correto em tudo o que você selecionou aqui. Vamos compilar agora. Vamos aumentá-lo um pouco para ver melhor a imagem do letreiro. É aqui que você controla o tamanho. Se você tentar alterar o tamanho da imagem nesses, não funcionará. Deixe-me ir aqui para o tamanho da imagem do letreiro e você pode alterá-lo Vamos apenas ampliá-lo. Por exemplo, 350 Lee, por exemplo, 60 aqui na altura. É o que parece agora, 350,60 Você pode copiar novamente o tamanho da imagem e colá-la em cima das outras Você pode clicar no texto aqui e alinhá-lo no meio dessa barra de progresso Vamos mudar o texto para rubic semi negrito, o que temos usado até agora Além disso, vamos mudar esse tamanho para 20. Eu o diminuo, vamos escrever um número aleatório por enquanto. Vamos escrever 76. Eu só quero escrever um número para que possamos ver o que estamos fazendo. Vamos mudar isso posteriormente de forma dinâmica dentro do jogo, mas é assim que parece agora Vamos adicionar um esboço. Vou adicionar dois ao tamanho do contorno e depois alterar a cor do contorno Por exemplo, você escolhe esse seletor de cores. Você pode escolher uma cor aqui. Acho que vou escolher a cor de fundo dessa barra de progresso. Ok. Clique nele novamente e eu também adicionarei um pouco de sombra se você escrever 66 aqui para a sombra, por exemplo. Assim, você pode ver claramente e clicar nessa cor de sombra e alterar o alfa para um. Essa é a sombra do texto. Agora, para a sombra, vou usar o deslocamento de três por três E vou mudar a opacidade para 0,5. Não é muito visível quando você olha daqui, parece muito melhor Ok, isso parece bom. Agora podemos desativar o contorno tracejado que possamos ver sua aparência agora Acho que o que podemos fazer agora clicar, vamos ver aqui, na caixa horizontal. E podemos dar a ele algum espaço. O que podemos fazer aqui para o preenchimento para a esquerda e para a direita, vou dar, por exemplo, 30,30 . Isso é o que parece. Agora estamos empurrando-o para longe dos lados. Na verdade, eu quero dar mais. Clicando na horizontal novamente, 35 por 35, e de cima para baixo. Acho que vou dar até 30 por 30. Agora, isso é o que parece. Ok, vamos dar um pouco de espaço entre o ícone. E isso é feito se procurarmos um espaçador e o colocarmos entre o ícone e a caixa horizontal Na verdade, não aqui. Vamos arrastá-lo até aqui. Entre a imagem do coração e a barra de progresso. O espaçador está aqui. Vamos no x, dê a ele um espaço de 15, talvez. Na verdade, vamos dar mais espaço. Acho que podemos dar mais espaço para o espaçador, talvez 20 em vez disso Também acho que vou dar mais espaço aqui para a caixa horizontal aqui em cima. Em vez de 35, vou dar para 40. esquerda e a direita serão 40, e a parte superior e inferior serão 30. Isso é o que parece agora, parece bom, podemos compilar agora Vamos copiar e colar isso e editar como uma armadura para a caixa horizontal Vamos clicar aqui e clicar em Controle. Você pode ver agora que eles estão um em cima do outro porque na verdade, precisamos de uma caixa vertical para colocá-los um em cima do outro. Esquecemos de fazer isso. Vamos procurar uma caixa vertical. Vamos ver aqui abaixo a imagem de fundo. Lembre-se de que essa é a sobreposição, essa é a imagem de fundo E então podemos ter a caixa vertical onde temos a saúde e a armadura Vamos colocá-los nessa caixa vertical. Agora, para a caixa horizontal, em vez de ter o preenchimento dentro daqui, você pode ver que ela foi adicionada duas vezes porque está adicionando um preenchimento para ambas. Vamos apenas copiar isso. Vou clicar nessa seta para removê-la. Clique na caixa horizontal aqui também. Remova, adicione-o para a caixa vertical em vez disso, o pai desses dois. Clicando aqui, cole o preenchimento que você tinha antes, e agora você o tem aqui Vamos adicionar um espaçador novamente entre esses dois porque eles estão muito próximos aqui para o espaçamento Este é o Y. Vou adicionar 15 para o ícone. Vamos alterá-lo para escudo de ícones. Vamos mudá-lo para aquele para a cor do preenchimento. Vamos mudar para o roxo. Deixe-me copiar e colar aqui também. Acho que, sim, tudo deve ficar bem por enquanto. Agora, se desejar, você também pode clicar neles. Por exemplo, essa imagem de imagem. Essa imagem. Vamos mudar isso para a visibilidade do Hit Testing. Não podemos interagir com ele, com o mouse, acredito nesse e nesse. E também podemos alterar a visibilidade para clicar em Testável. Sim, isso deve ser tudo, só para que o mouse não interaja com eles. Se você precisar interagir no futuro, alteraremos os nomes deles posteriormente, quando precisarmos deles como variáveis. Então, podemos mudar os nomes aqui, mas por enquanto isso acabou. Essa é a aparência da nossa parte da saúde. Se você clicar em Placa para ver sua aparência, aumente a tela. Isso é o que parece. Parece bom. Então, agora temos a saúde e a armadura e podemos adicionar funcionalidade a elas 159. 11.02 Aplicando dano: Agora que temos o saudável, vamos aplicar alguns danos. Se formos para a base de jogadores, agora temos esse projétil, esse traçado de linha que estamos filmando aqui O que estamos dizendo é que, se o ator tem o técnico, queremos causar dano a ele. Para aplicar dano, você basicamente arrasta daqui e diz aplicar dano. Você tem essa função e é muito fácil de usar, ela vai afastá-la. Temos um pouco mais de espaço para trabalhar. Aqui estamos aplicando alguns danos. Agora você precisa especificar quanto dano deseja aplicar? Agora, digamos, por exemplo, que temos um número estático. Digamos 20. Agora também temos que especificar quem é o ator danificado. É o jogador. Estamos atacando o ator de sucesso aqui. Do ator de sucesso, você pode clicar, arrastar e conectá-lo. Ok, agora temos o ator danificado. Vamos experimentar e ver se funciona para testar e ver se está realmente funcionando. Vamos em frente e aqui embaixo, vamos causar qualquer evento de dano. Agora, antes de fazer o evento de dano, eu realmente quero fazer um novo gráfico, para não colocarmos muitas coisas aqui dentro. Tudo isso está bem. Mas quando aplicamos danos, quero ir para outro evento aqui ou outro gráfico. Vamos chamar isso de Saúde e Saúde, Armadura e Dano. Vamos chamá-lo assim. Dentro daqui, se você clicar com o botão direito do mouse e dizer Qualquer dano. Agora, esse evento é jogado sempre que um jogador recebe dano. Podemos simplesmente tentar imprimir uma string na tela para ver se funciona. E arraste esse dano para essa corda, ela imprime quanto dano estamos causando ao jogador. Agora, se clicarmos em Jogar e selecionarmos Terrorist aqui, e selecionarmos Terris aqui Se eu simplesmente pegar uma arma e tentar atirar no jogador, você pode ver que ela imprime 20 na tela, porque agora estou aplicando 20 pontos de dano a esse jogador. Ok, esse código funciona. Agora, se eu voltar, em vez de aplicar cerca de 20 de dano, como um número estático, vamos entrar em uma estrutura mais uma vez, vamos abrir a estrutura dentro daqui. Vamos adicionar duas variáveis. Eles são tanto um flutuador quanto um flutuador. Agora, para o primeiro, como queremos chamá-lo, vamos chamá-lo de dano na cabeça. Agora, o que você pode fazer é torná-lo muito específico, como quanto dano você deve causar ao bater nas pernas? Quanto dano você deve causar ao bater nos braços e assim por diante? Mas para manter esse curso mais curto, complexo ou mais curto e simples, seja, ele está ficando muito longo, basta mantê-lo um pouco mais simples. Vou causar um dano na cabeça e outro no corpo. Danos corporais, dois tipos de danos. No entanto, vou mostrar como você pode fazer o resto disso. Demora um pouco mais , mas é o mesmo processo. Ok, agora nós o temos dentro da nossa estrutura. Agora, o que precisamos fazer é também adicioná-lo à tabela de dados. Então vá em frente e abra a tabela de dados aqui. Agora, antes de fazer isso, vou realmente mover o dano até aqui só para ficar um pouco mais organizado. Depois do MO, vou fazer os danos na cabeça e no corpo aqui. Vamos maximizá-lo após o MO máximo. Deixe-me adicionar duas colunas à direita. O primeiro é chamado de dano na cabeça, o próximo é chamado de dano corporal. Em seguida, você precisa especificar quanto dano você causa. Agora, deixe-me dizer, por exemplo, que pelo dano na cabeça, estou causando 20 de dano, estou subtraindo 20 Pelo dano corporal, estou causando apenas dez danos. Eu vou fazer o mesmo. Na verdade, vamos mudar isso para ver se há uma diferença entre os quatro. Digamos que estamos causando 15 de dano e cinco de dano, talvez isso seja até oito de dano Para a pistola, isso é muito menos Dez danos, por exemplo. E digamos que cinco danos aqui. Ok, então você pode ajustar isso o quanto quiser. Agora vamos baixá-lo como um arquivo CSV e vou para minha pasta de download aqui Vou renomeá-lo novamente para T Weapon Info. Agora, dentro daqui, novamente, vamos às tabelas de dados. E deixe-me fechar isso e importar a tabela de dados aqui. Ok, agora que temos essa informação, vamos salvar tudo. Agora, às vezes, ele trava sempre que você tenta salvar e editar algo dentro de uma estrutura. Isso é normal, como acontece muitas vezes. Quando você edita essa estrutura e adiciona novos valores e coisas assim, ela geralmente trava Lembre-se de salvar seu trabalho. Certifique-se de que aqui, deixe-me abrir a tabela de dados para garantir que todos os meus valores estejam conectados, assim como antes e não estão Você pode ver que está aqui embaixo. Às vezes, ele trava e você precisa refazê-lo aqui. Mas, felizmente, não temos muito o que fazer, basta arrastar isso até aqui e, em seguida, posso arrastar novamente a tabela de dados até aqui Ok, agora vamos salvar tudo e espero que não falhe. Agora funcionou. Vamos agora abrir a base de jogadores. No player, abra a base de jogadores. Agora vamos tentar causar danos na cabeça e no corpo. Agora, o que você geralmente procura é acessar os ativos que importou para o player. Aqui temos o esqueleto do jogador, a malha esquelética do jogador. Mas também temos algo chamado ativo de física. Na verdade, é aqui que você está batendo. Esse recurso físico é onde você está atingindo o jogador. Você pode tentar ajustar esse ativo físico. Você pode tornar essas formas maiores e menores. Na verdade, esta é sua caixa de sucesso. Você pode desenvolver o jogador da mesma forma que cria formas, basicamente matando-o, destruindo-o e assim por diante. Mas agora , devido aos danos na cabeça, estamos acertando este Deixe-me minimizar a velocidade da câmera. Você está atingindo essa forma aqui e essa é chamada de golpe Eles são basicamente chamados de corpo em forma de corpo. Se eu voltar aqui para a base de jogadores. Agora, aqui estão os resultados da ocorrência, se você clicar na seta novamente. Vamos aqui depois do dano aplicado. Eu só quero imprimir isso para que você possa ver. Quero imprimir o nome do hit bone, o nome do Hit bone e arrastá-lo até aqui. E vou minimizar isso mais uma vez. Agora estamos imprimindo o nome Hit bone. Podemos ver o que acontece se clicar em Play Terrorist e eu também clicar como terrorista para o céu. Vamos apenas atirar nesse jogador. Se eu atirar na cabeça, ele diz isso. Se eu atirar na perna, diz coxa. Isso é, esse é o pé, certo? Essa é a coxa E esta é a mão, mão direita, mão esquerda e assim por diante. Você pode ver que estamos fotografando diferentes partes do corpo. Agora, só para torná-lo um pouco mais interessante para nós, vamos usar esse nome de sucesso. O que podemos fazer é como as enumerações, onde você pode ativar a enumeração, você pode ativar o nome aqui, ativar o nome, porque lembre-se de que essa é uma variável de nome Ative o nome e você pode simplesmente conectá-lo antes aplicar o dano e clicar no sinal positivo para girar. Agora você precisa especificar qual é o nome. Meu nome é Head. Se você voltar aqui, verá que se chama Cabeça. Você pode escrever Cabeça e depois conectá-la aqui por padrão Vou aplicar dano corporal por padrão, mas se for cabeça, aplicaremos o dano na cabeça. Vou apenas copiar e colar isso. E, por padrão, vou aplicar o dano corporal. Agora vamos obter as informações aqui. Se eu copiar tudo isso, as informações de nossa arma aqui embaixo e nossa variável de arma, acredito que está nesta longa aqui. Na verdade, esse é o ator de sucesso. Essa é a arma. Acabei de conectá-lo aqui. Esconda os pinos não conectados. Eu só quero ver o dano corporal, o dano na cabeça aqui, e conectar o dano na cabeça, conectar o dano corporal e também o dano ao ator danificado. Lembre-se de conectar isso novamente assim, ok? Sempre que estamos batendo na cabeça, estamos causando danos na cabeça Sempre que estamos batendo no corpo, estamos causando danos ao corpo Vamos clicar em jogar e ver o que acontece. Agora, se eu jogar novamente como terrorista e atirar na cabeça, você pode ver que isso causa 20 de dano. Se eu atirar no corpo, ele causa dez de dano. Ok, então agora temos um dano de tiro na cabeça. Ok, incrível. Então isso está funcionando. Eu só vou minimizar isso. E também vou remover a depuração aqui da bandeja de linha para não ver as linhas vermelhas E foi isso por isso. Novamente, você pode criar um sistema mais complexo, mas só para fazer com que esse curso não muito complexo, é assim que podemos fazer isso. Estamos causando alguns danos na cabeça e alguns danos no corpo também. Lembre-se de definir os valores da tabela de dados. Você pode ajustar esses números. Sim, vamos seguir em frente e passar para a próxima. 160. Estrutura de informação do jogador 11.03: Tudo bem, agora vamos adicionar a saúde do jogador e a armadura e a quantidade e assim por diante Mas antes de fazermos isso, vamos realmente criar uma estrutura de jogadores. Agora vamos às plantas e às Estruturas. E agora, em vez das informações da arma, clique com o botão direito do mouse agora, vá para Blueprint e adicione uma nova estrutura E deixe-me chamar isso de informação de uma camada. Vamos abri-lo. Agora, para as informações do jogador, o que eu quero acrescentar é qual é a saúde máxima que o jogador pode ter? Isso é um número flutuante, não um número inteiro, porque às vezes é calculado como uma E então você aumenta a saúde. Então você tem o Max Armor. Lembre-se de que também temos a armadura no jogo. Eu posso acrescentar mais a isso. Lembre-se de que, se você for até o jogador e a base de jogadores, também temos algumas propriedades de execução. Temos a velocidade de caminhada, velocidade de corrida, velocidade de agachamento. Você também pode realmente tê-lo aqui dentro. Não precisamos ter variáveis separadas aqui. Basta adicionar a velocidade de execução. Eu adiciono a velocidade de caminhada, também posso adicionar a velocidade de agachamento. Assim. Ok, agora temos isso. O que podemos fazer, podemos excluí-los mais tarde. Portanto, precisamos terminar isso primeiro antes de excluí-lo. Tudo o que você tem, como um valor estático que não mudará. Por exemplo, qual é a velocidade de corrida, caminhada, velocidade, velocidade de agachamento. E eles não mudarão durante o jogo. Se você tem números estáticos, é muito bom adicioná-los dentro de uma estrutura. Acho que foi isso aqui dentro. O que podemos fazer é ir em frente e salvá-lo. Salve tudo. Vamos passar para a próxima e criar a tabela de dados. 161. Tabela de dados de informações do jogador 11.04: Tudo bem, então aqui estou eu de volta às tabelas de dados. Agora, para esta, a antiga, vou ligar aqui para informações sobre armas da DT. Na verdade, vamos criar um novo. Na verdade, vou apenas duplicar isso para não precisar reorganizar todas essas E eu vou chamá-lo apenas de informações do jogador de DT. Vamos clicar no controle A e depois excluir tudo. Ok, coisa boa aqui. Vamos voltar, voltar para a estrutura e ver o que temos. Não são as informações da arma, as informações do jogador aqui dentro. O que temos primeiro. Agora, antes de adicionar qualquer coisa, você precisa ter uma coluna de ID. Temos isso nas informações da arma. Lembre-se, temos esse chamado ID. Precisamos de uma identificação para este, verdade não precisamos da identificação. Você pode simplesmente chamar o nome, por exemplo, você pode chamá-lo de um. Vamos chamá-la de uma, porque teremos apenas uma linha para o jogador com todas as informações. Não precisamos de várias linhas aqui. Ok, para o primeiro, temos a saúde máxima. Então temos a armadura e, em seguida, temos a velocidade de corrida Então temos a velocidade de caminhada e, em seguida, temos a velocidade de agachamento. Ok, nós temos esses valores. E deixe-me fazer isso um pouco menor. O que você pode fazer agora é obter o ID Nós o configuramos como um para a saúde máxima. Vou configurá-lo para 100 para a armadura máxima 100, bem como para a velocidade de corrida Agora, já definimos esses dois como valor padrão. Se eu for até o player, clico na velocidade de execução, ela está configurada para 750. Agora eu vou configurá-lo para 750. Para a velocidade de caminhada, ajustei para 400, e para a velocidade de agachamento, configurei para Então, vamos escrever isso. Agora estamos prontos. Vamos clicar no TSV de download de arquivos como antes. Vamos abri-lo aqui e vamos chamar isso de informação de um jogador. Vamos fechar isso. Agora, nas tabelas de dados. Agora, antes de importá-lo, vou criar um novo. Vá para Diversos e selecione Tabela de dados. Agora vamos selecionar as Informações do jogador. Clique. OK. Vamos chamá-lo de T Layer Info. Está aqui. Agora podemos importá-lo se você clicar em arrastar agora mesmo para isso. Agora, ele carregou todos os valores. Além disso, agora está funcionando e podemos salvar tudo. Agora, lembre-se de que, quando precisamos usar essa tabela de dados, precisamos criar uma função dentro da biblioteca, como antes. Vamos criar uma nova função na biblioteca. Nova função, vamos chamar essa, obter informações do jogador, porque precisamos fazer isso. Vamos copiar e colar a coisa aqui. Vamos copiar e colar tudo isso. Cole-o aqui dentro. Conecte isso como aqui. E vamos conectá-lo aqui. Em vez das informações da arma do DT, precisamos das informações do jogador do DT e devolvemos. Arraste-o até aqui e chame-o de info. Vamos compilar e salvar tudo. Além disso, lembre-se de transformá-la em uma função pura como esta. Porque estamos apenas obtendo informações, não estamos configurando informações. Vamos tentar usá-lo apenas para ver se algo está errado. Vamos, por exemplo, ao jogador, sua base. Digamos que eu quisesse usá-lo. Aqui posso dizer com razão para obter informações do jogador, e aqui está. Agora você pode obter as informações do jogador a partir deste. Ok, no momento não temos realmente uma identificação. Assim como quando usamos com as armas. Como se tivéssemos um nome de arma. Do nome da arma, estamos extraindo valores para a base de jogadores Na verdade, temos apenas uma linha de código ou uma linha na tabela de dados, só temos essa linha aqui. Realmente não faz sentido escrever um a cada vez para extrair dessa linha desse ID, porque ele permanecerá o mesmo o tempo todo. Para melhorar, o que podemos fazer é simplesmente voltar aqui nas informações do jogador aqui e , na verdade , desconectar isso Na verdade, também podemos simplesmente excluir tudo isso aqui e remover essa variável daqui. Agora, o que você pode fazer é apenas o nome da linha, é sempre um. Basta definir o nome da linha como um. É isso aí, se eu compilar agora na base de jogadores, quando digo informações do jogador, agora ele sempre obtém essas informações do jogador Então, nós realmente não precisamos escrever nada aqui e isso realmente não faz sentido quando temos uma linha. De qualquer forma, estamos apenas obtendo as informações da tabela de dados da primeira linha. Está bem? Agora temos essa informação e podemos usá-la. Vamos salvar tudo e passar para a próxima. 162. 11.05 Definindo a saúde e armadura base: Tudo bem, agora estamos prontos para definir a saúde básica. No momento, quando entramos no nível, nossa saúde está basicamente dizendo 76, porque é isso que definimos na interface do Este é apenas um número estático que definimos aqui por meio dessa porcentagem. Realmente não faz nenhum sentido. Vamos definir a saúde e a armadura básicas sempre que aparecermos Para isso, vamos abrir a base de jogadores, ela está fora daqui. Deixe-me ver o gráfico de Armadura e Danos de Saúde. Eu quero fazer dois eventos. Eu quero fazer o primeiro chamado Set Layer Health. Eu quero fazer o outro chamado Set Layer Armor. Nós temos esses dois. Também queremos executá-lo por meio do servidor. Vamos executá-lo no servidor. A camada de configuração também executa esta no servidor. Defina uma camada de armadura. Vamos executá-los no servidor e de forma confiável. Vamos rodar o servidor aqui em cima, arrastando e dizendo definir camada para o de armadura Vamos atacar a partir daqui e dizer que na camada do servidor, defina a armadura do jogador assim Ok, agora vou mover isso para baixo para que tenhamos mais espaço para trabalhar. O que queremos fazer é simplesmente definir a variável de saúde. Agora precisamos de duas variáveis aqui. Precisamos de uma chamada saúde atual, porque na estrutura criamos uma chamada saúde máxima. Essa é a saúde máxima que o jogador pode ter. Mas também precisamos de um para a saúde atual. No momento, temos a saúde atual e a armadura atual, ambas para a saúde aqui. Vamos levar isso até aqui. Vamos definir a integridade no servidor. Arraste esse pino para o evento em que ele cria um. E também arraste esse pino ainda mais para o evento. Essa. Lembre-se de que você está definindo a variável no servidor. Você precisa ter isso replicado. O cliente também pode ver qual é a saúde dos outros jogadores. Você também precisa fazer isso por aqui. Vamos atacar pela armadura. Conecte-o e conecte-o aqui. Conecte-o aqui. Vamos configurar este para replicá-lo também. Agora temos isso. O que podemos fazer com isso agora é deixar-me movê-los juntos. Agora eu posso voltar ao início do jogo. É aqui que eu quero definir a saúde básica dos jogadores. Sempre que o jogador aparecer instantaneamente, você colocará a saúde aqui Eu quero dirigir daqui e dizer Set Health. Nosso Set Player Health é o que chamamos de Set Player Health. Também queremos usar o outro chamado Set Player Armor Em seguida, temos que especificar qual é a saúde e a armadura atuais Está cheio quando você desova. Quando você desova, eu quero dizer para obter informações do jogador. Podemos quebrá-lo aqui. Então, podemos definir aqui o máximo de saúde para a armadura. Nós podemos fazer isso assim. Mas, na verdade, acho que vou criar duas funções diferentes. Mas neste eu vou clicar com o botão direito do mouse e dizer promover uma função ou reduzir para uma função. Vamos chamar isso de, obter a saúde máxima do jogador e transformá-la em uma função pura. Em vez desse nome insano e insano, vou dizer Max Health Vamos entrar aqui. Vamos organizar um pouco. Vamos fazer isso com o outro também. Deixe-me copiar e colar isso. Excelente. Copie e cole isso. Deixe-me duplicar esse aqui. Duplicado. Vamos chamar isso de Get armor em vez de Eu vou remover esse. Chame isso de armadura Max. Para obter o máximo de saúde, vamos desconectá-lo, colocá-lo na armadura máxima e conectá-lo aqui Agora podemos pegar isso, pegar o player Max Armor e conectá-lo aqui também Ok, só temos essa aparência um pouco mais limpa. E agora estamos definindo a saúde máxima e a armadura máxima dos jogadores saúde máxima e a armadura máxima Agora, se clicarmos em play, agora nada vai aparecer. E talvez você já tenha adivinhado Isso ocorre porque realmente não estamos atualizando a interface do usuário no momento Estamos apenas definindo essas variáveis e agora elas estão corretas. No entanto, nunca acessaremos a interface do usuário no momento e, na verdade, atualizaremos esses valores aqui. Isso é o que vamos fazer no próximo. 163. 11.06 Funcionalidade da interface do usuário de Health & Armor: Então, aqui estou eu dentro do projeto principal do Uji. E agora vamos atualizar a saúde e a armadura Então, a primeira coisa que precisamos fazer usá-los dentro do gráfico de eventos. Para fazer isso, lembre-se de que precisamos deles como variáveis. Clique no primeiro. Essa é a parte do progresso da saúde. Vou chamar isso de saúde apenas para barra de progresso. Na próxima, vou chamá-la de Armadura. Lembre-se também de considerar que isso é variável. Então, podemos vê-los como variáveis aqui dentro do gráfico. E eu posso usá-los e podemos modificá-los. Vamos clicar no texto também. O texto também precisamos modificar. O primeiro é chamado de Saúde do Texto, também variável. A próxima é chamada armadura fixa de braço e também é variável Agora, não precisamos realmente de mais nada para ser uma variável Essa é a única coisa que precisamos editar. Vamos compilar e passar para o gráfico. Vou criar duas novas funções, a primeira chamada atualização, atualização, saúde I. Eu também vou fazer a outra chamada atualização, ou elas estão quase, ou na verdade vão fazer a mesma lógica. Mas essa é para a saúde, essa é para a Ama. OK. O que realmente precisamos fazer? Isso é sempre o que você deve se perguntar sobre sua codificação. O que estamos tentando fazer agora? Definimos essa porcentagem aqui para a barra de progresso. Ok, vamos ao gráfico. Vamos fazer esse progresso, vamos colocá-lo aqui. Agora, vamos atacar e dizer porcentagem, porque é isso que estamos interessados em editar aqui. É uma porcentagem definida, vamos fazer isso. Isso é fácil. Vamos conectá-lo. Há algo que você precisa saber sobre a porcentagem de uma barra de progresso. Você pode ver aqui, vai 0-1 Não vai 0-100%, vai 0-11 é O que precisamos fazer agora obter a saúde atual usando uma saúde de corrente flutuante Vamos fazer essa variável, essa saúde atual. Digamos, por exemplo, que eu tenha 100 pontos de vida e tenha sido danificado cerca de dez, e agora tenho 90 pontos de vida. Se você conectar isso agora, o valor será 90. Isso não faz sentido porque o valor máximo é um. Mesmo que você tenha cerca de 100 pontos de vida restantes, ele ainda mostrará a barra completa porque, na verdade, uma é a barra completa aqui. Precisamos dividi-lo de alguma forma. Na verdade, também precisamos da saúde máxima , saúde atual, saúde. Quando os dividimos, se você arrastar da saúde atual e dividir a saúde máxima, por exemplo, digamos que você tenha 90 em saúde. Podemos dizer 90/100 porque essa é a sua saúde máxima. Isso será 0,9 Então o 0,9 que inserimos aqui, isso estará correto porque agora a barra de porcentagem será algo assim sempre que você perder dez, ok? Por exemplo, digamos que eu tenha 40 pontos de vida restantes, 40/100 é 0,4 e isso se encaixará aqui E a barra de progresso estará em 0,4. Assim, ela estará correta agora. Ok, isso está fora do caminho. Vamos fazer a mesma coisa aqui. Temos a armadura atual e a armadura máxima. Então, estamos dividindo esses dois juntos aqui. Vamos pegar a barra de progresso da armadura e dizer definir uma porcentagem Vá em frente e conecte-os. Agora vamos conectar isso aqui. Agora também estamos configurando a armadura corretamente. A próxima coisa que precisamos fazer é também definir o texto aqui. Vamos clicar no texto. Esse é o texto Saúde. Vamos pegar aqui e dizer Definir texto. Vamos ver aqui. Defina o texto, é este. E vamos conectá-lo agora. Defina o texto. Vamos fazer a mesma coisa com o conjunto de armaduras. Precisamos atualizar os dois. O que precisa estar no texto? O que você precisa exibir aqui? Isso é muito simples. Apenas essa variável, a saúde atual. Se minha saúde atual for 40, quero exibir o número 40 aqui. Muito fácil. Vamos começar a partir da saúde atual, faça o login aqui. E, por exemplo, o Unreal Engine converterá automaticamente a variável flutuante em uma variável de texto e simplesmente a conectará aqui Ok, muito bom, muito fácil. Vamos fazer a mesma coisa aqui. Vamos quebrar essa armadura atual. Conecte-o. E, sem mais nem menos, isso acabou. Ok, então foi isso. Isso está atualizando agora a armadura e este está atualizando a saúde Vamos continuar na próxima. 164. 11.07 Atualizando a interface do usuário de Health & Armor: Ok, agora o que precisamos fazer é atualizar a saúde do jogador. Agora vamos começar com a saúde agora. Lembre-se de que, na base de jogadores no gráfico da van, definimos a saúde e a armadura do jogador quando ele aparece, que devem ser atualizadas Agora podemos atualizá-lo em outro evento. Mas acho melhor fazer isso como continuar o código aqui. E a saúde, quando definimos a saúde, definimos a variável e a replicamos Vamos continuar o código aqui. Deixe-me arrastar essa para baixo. Eu tenho mais espaço. Deixe-me criar um novo evento. Lembre-se de que, quando você atualiza a interface do usuário, ela é executada no cliente. A interface do usuário está passando pelo cliente. Você chuta isso, faça isso aqui. Temos que criar um evento para o cliente chamado Set Player Health. Então você tem que executar isso possuindo um cliente confiável. Agora, o que você precisa fazer com este é, deixe-me tirar tudo isso aqui. Já temos a referência principal do WB. Lembre-se de que temos o controlador do player aqui. E podemos dizer assim. Então podemos arrastar daqui e dizer atualização, acredito que chamamos isso de atualização de saúde, essa. Agora podemos conectá-lo ao evento desta forma. Agora podemos conectar a saúde agora aqui, vamos chamar o evento do cliente de atualização de CL ou conjunto de CL de saúde do jogador. Este para a saúde atual. Vamos apenas conectar este aqui para obter o máximo de saúde. Já criamos uma função que definimos a saúde máxima do jogador. Assim aqui. Ok, isso é totalmente funcional. Agora vamos fazer a mesma coisa com a armadura. Temos a armadura de jogador definida. Deixe-me reduzir isso um pouco assim. E vamos criar um novo evento chamado L, Set armor. Execute-o através do cliente, de forma confiável. Em seguida, execute o cliente aqui em cima, defina a armadura do jogador. Este para este, pouco antes de precisar da referência do controlador do player, você precisa do B main. Em seguida, precisamos chamar a armadura de atualização y conectar, conectar as variáveis ao evento exatamente como antes Vamos conectar a armadura atual aqui. Para obter a armadura máxima, vou conectar a função, obter a armadura máxima do jogador. Lembre-se de que a função é basicamente obter as informações do jogador e retirá-las daqui. Ok, vamos voltar ao gráfico de eventos, Saúde e Armadura aqui E agora deve estar funcionando. Estamos chamando o evento, ele atualizará a interface do usuário, o que quer que chamemos de Set Player Armor ou Set Player Health. Vamos clicar em Jogar. Agora, se eu selecionar Terris, você pode ver que está configurado corretamente para 100.100. O que está acontecendo é que, no Begin Play, estamos definindo a saúde do jogador Lembre-se da saúde do jogador que você definiu em sua tabela de dados, essa saúde máxima. Está definindo a saúde do jogador. Ele vai até este evento passando pelo servidor. O servidor definirá essa variável para qualquer coisa que você tenha conectado aqui Em seguida, ele atualizará a interface do usuário, esses valores, porque o cliente atualizará a interface do usuário. Está passando por aqui, atualize a interface de saúde. Está pegando os números que você fez login. Está lhe dando a porcentagem porque você as dividiu. E então você também está exibindo o texto corretamente na tela por meio deste. Era isso para atualizar a saúde e a interface do usuário, na verdade, nossa saúde e armadura E agora também podemos usar esse conjunto de saúde e armadura do jogador quando estamos causando dano ao jogador 165. 11.08 Causando danos à saúde: Agora que terminamos com o conjunto de saúde e armadura, vamos continuar e causar o dano ao jogador Aqui temos qualquer evento de dano que usamos antes e o usamos apenas para ver se realmente causamos dano ao jogador. Verificamos que nas aulas anteriores quando você bate na cabeça, você causa algum dano. Se você bater no corpo, você causa outro dano. E podemos ver que está imprimindo, então está realmente funcionando. Qualquer dano está funcionando aqui. Ok, tudo bem. Então, agora queremos causar o dano real aqui sempre que você causar dano, e isso vem do dano aplicado. Então, se você voltar à lógica de tiro aqui para a linha de rastreamento, trace, ao atingir o jogador, você está causando esse dano. Se você aplicar dano a um ator, ele automaticamente disparará este, qualquer evento de dano, se você receber o dano. Agora, qualquer dano que você receba, esse é o dano que você aplicou aqui dentro do dano aplicado. E dissemos que dentro da nossa tabela de dados, estamos aplicando dano ao jogador aqui em qualquer dano. O que podemos fazer agora tirar a saúde atual do jogador. Podemos dizer, por exemplo, que agora minha saúde está 100. Então, podemos dizer 100 menos. Estamos subtraindo 100 de menos, digamos que o dano foi dez, que será 90 Temos que ajustar a saúde novamente. Antes de fazer isso, gosto de ter esse nó de fixação. Só estou me certificando de que não vamos abaixo de zero. Não queremos ter uma saúde de menos dez, por exemplo. Estamos definindo esse valor como sendo zero, então não pode mais ficar abaixo de zero. E, no máximo, vou arrastar este, obter a saúde máxima do jogador e conectá-lo aqui. Agora está preso. E então podemos definir a saúde novamente. Vamos definir a saúde para esse valor que temos. Está bem? O que está acontecendo é basicamente que você está causando dez de dano. Por exemplo, ele vai dizer que a saúde atual é 100 menos dez, ou seja, 90 Vamos passar por aqui para garantir que não fiquemos abaixo de zero. E o valor de 90 será inserido aqui. Agora, a nova saúde que temos é, na verdade, 90. Agora, em vez de definir essa integridade dessa forma, isso funcionaria porque se você tiver esse ícone, isso significa que ele é executado no servidor. Se você segurar o mouse sobre ele, e na parte inferior, ele dirá apenas autoridade. Esse evento só é acionado no servidor. Novamente, não há problema em definir variáveis ou é correto definir variáveis no servidor e depois replicá-las. Isso funcionará perfeitamente. No entanto, lembre-se de que já criamos esse evento de definir a saúde do jogador, e isso também atualiza a interface para nós, em vez de apenas chamá-la novamente, e precisamos atualizar a interface. Se tivéssemos que fazer dessa maneira, teríamos que copiar isso, colar aqui e fazer assim. Em vez de fazer isso, já fizemos uma função ou um evento aqui. Digamos que defina a saúde do jogador. E podemos simplesmente chamar isso do que acabamos de fazer. E podemos conectá-lo aqui. Ele passará automaticamente por isso e também atualizará a interface do usuário, porque a chamamos aqui, tudo bem. Tudo bem, incrível. Agora, também aqui para a morte, se a saúde atual for igual a zero e pudermos fazer uma ramificação, se isso for verdade, queremos chamar de evento de morte. É quando o jogador morre, quando a saúde atual é zero. Faremos isso mais tarde. Mas, por enquanto, temos isso conectado. Ok, vamos clicar em Play e ver se realmente funciona aqui. Se eu pegar uma arma e atirar no jogador, agora você vê que o jogador tem 90 incríveis. Se eu atirar na cabeça, ele atirou -20 Agora eu tenho 70 pontos de vida que estão funcionando corretamente. Vamos experimentá-lo no servidor. Se o servidor atirar no cliente, deixe-me minimizar isso aqui. Se o servidor filmar o cliente, isso também está funcionando, incrível. Se eu saquear como outra arma aqui, ela também está funcionando Tudo bem, essa lógica está funcionando. Agora vamos fazer a armadura na próxima lição. 166. 11.09 Causando dano à armadura: Ok, para distribuir a armadura, basicamente vamos usar o mesmo método No entanto, para a armadura, eu realmente quero causar menos saúde ao jogador se você já tiver uma armadura Então, eu não vou causar a mesma quantidade de danos à saúde, apenas afastando tudo isso, desse jeito. E eu quero fazer a armadura primeiro, apenas afastando-a. Ok, então vamos pegar a armadura atual agora, é 100 como um começo O que eu quero dizer é, vamos pegar essa armadura e subtraí-la do dano Não quero subtraí-lo apenas um por um. Na verdade, quero subtrair esse valor, o dano, se eu multiplicar por, digamos, 1,5 e depois quero aplicar o dano na armadura A armadura será danificada muito mais rápido do que a saúde atual Não será danificado como a saúde atual. Ele será danificado muito mais rápido porque o multiplicamos por 1,5. Também posso simplesmente arrastar deste, ele permanece organizado assim aqui Incrível. Agora, com essa subtração, o que podemos fazer é, novamente, como antes, fixar a bóia Garantimos que não fique abaixo de zero. O máximo é pegar a armadura máxima desse jogador e conectá-la E agora vamos definir a armadura atual. Novamente, temos a função chamada set, set player armor. E vamos ajustar a armadura assim. E agora está implementado, ok. Se você jogar aqui e pudermos experimentar. Você pode ver aqui, eu sou o cliente atirando no servidor. Estamos perdendo a armadura. Agora, não adianta ter uma armadura se você vai perder aquela saúde pela qual está sendo danificado de qualquer maneira Então, no momento, isso realmente não faz sentido porque você ainda está perdendo saúde e morrendo. O que eu quero dizer é que, se você tiver uma armadura, perderá mais saúde, uma quantidade menor de O que eu posso fazer aqui, em vez de subtrair o dano da saúde, este aqui, em vez de subtrair o dano que eu quero arrastar daqui e dizer selecione flutuar aqui Agora queremos perguntar: a armadura é igual a zero? Vamos pegar a armadura e dizer: é igual a zero Quando diz escolha a, se essa intimidação for verdadeira, vá em frente e escolha a. Se a armadura for zero, isso significa que na verdade queremos apenas aplicar dano que tínhamos antes, desse jeito No entanto, a armadura no momento não é zero. Isso significará que é o valor B aqui. Então, na verdade, isso significa que temos uma armadura e quero causar danos mais lentos ao jogador Se eu apenas arrastar isso aqui, quero direcionar a partir daqui e dizer dividir esse dano por, digamos, por exemplo, 2,2 0,5 Vamos então causar o dano. Na verdade, estamos reduzindo o dano antes de causá-lo ao jogador. Ok, agora faz sentido que tenhamos armadura, porque quando temos armadura, na verdade vamos sofrer menos danos E vamos clicar em play. E vamos experimentar essa mecânica aqui. Se eu for até o servidor, se eu simplesmente atirar no jogador aqui, você pode ver que estamos sofrendo danos agora. O valor aqui, precisamos remover as casas decimais. Isso é bom por enquanto. Mas você pode ver que a armadura está funcionando Sempre que perdermos a armadura, sofreremos muitos danos Vamos sofrer o dano que existe sem a armadura Ok, essa funcionalidade funciona. Você sempre pode controlar esses valores, quanta armadura você perde aqui quanto ele você está perdendo Mas agora está funcionando para a interface do usuário. Na verdade, precisamos remover as casas decimais. Vamos voltar aqui no B principal aqui. O que eu quero fazer é basicamente arredondar o valor. Se eu pegar esse flutuador, posso usar esse chamado round e estamos arredondando o valor Se o dano está no momento , não estamos realmente no negativo, mas digamos que no positivo Se tivermos 1,6 pontos de vida, ela se torna dois. Podemos usar esse e arredondar o valor. E agora podemos arrastar isso para o texto e conectá-lo. Vamos excluir o antigo aqui. Em vez disso, vamos configurar isso e fazer a mesma coisa aqui. Vamos usar o round e excluir esse antigo. Conecte-o aqui. Vamos organizar isso. Agora vamos testar isso e ver se funciona. Basta criar alguns nós de rota para melhorar a aparência. Agora vamos compilar, clicar em Play e ver se realmente funciona Se eu mostrar ao player, você pode ver que ele está arredondando o valor agora que tudo está funcionando como deveria 167. 11.10 Prevenindo o saque de vários rifles: O problema que estamos enfrentando agora é se eu clicar em jogar aqui e maximizar minha janela. Você pode ver aqui que eu saqueei um quatro. No entanto, se eu clicar aqui para saquear uma arma, posso realmente saquear esse AK E eu posso até mesmo saquear esses quatro. Eu posso até saquear este, e eles estão todos nas minhas costas Isso não deveria acontecer. E há um disco dentro do código aqui na base de jogadores Eu acredito que é uma solução simples. Vamos até o estacionamento. Equipe e descarte a lógica aqui. Aqui na arma do lote, algo está errado porque dissemos para ela não saquear a arma se for a mesma arma que equipamos É essa arma de saque de um único pedido, porque aqui estamos tentando encontrar a arma no inventário Estamos tentando comparar a arma com o inventário, com a que estamos saqueando agora . Estamos passando por isso. Estamos retirando a arma do inventário. Estamos tentando verificar se já temos essa arma. Se já a tivermos, soltaremos a arma. Se for falsa. Se não a tivermos, carregamos a arma. Por alguma razão, acredito que está passando por aqui em vez de aqui. Não é deixar cair a arma. É como se não conseguisse encontrar a arma. Se eu apenas imprimir uma string aqui e dizer duas aqui em cima, eu imprimo outra string e escrevo uma. A propósito, é assim que você depura. Agora vou ver onde o código está sendo executado. Está subindo aqui ou descendo aqui? Vamos compilar e clicar em play. Vamos agora carregar essa arma. Agora, se eu clicar em, ele diz, se eu aludir a este, ele diz dois, o código está realmente indo para cá Está acontecendo aqui no falso. É como se dissesse: não, eu não tenho esse item no meu inventário e isso é falso. Na verdade, tenho esse item no meu inventário. Vamos ver o código aqui. Vamos até aqui. Está tentando encontrar, está tentando comparar o item no inventário com o que estamos tentando lotar. O que está acontecendo aqui é que ele primeiro pesquisa aqui no índice zero. Ele pesquisa no primeiro índice da arma. Se eu voltar aqui, basta fechar isso. Se eu voltar aqui para a lógica aqui, quando ele não encontra a primeira arma, por exemplo, se a primeira arma for uma pistola, então essa será falsa, na verdade, porque você está comparando a pistola com a que queremos saquear E não é um rifle, o que significa que, na verdade , é falso E então ele adiciona essa arma aqui. Precisamos ajustar o código aqui embaixo. O que precisamos fazer é garantir que ele tenha percorrido todo o inventário antes de continuar com o código Se ele receber apenas o primeiro item do inventário, que é a pistola , isso realmente não faz nenhum sentido , porque nos dará um dólar, como agora O que eu quero fazer é ter certeza de que esse índice aqui, esse índice você pode ver aqui. Se eu clicar com o botão direito do mouse e imprimir uma string, posso mostrar a você. E você pode conectar o índice para ver o que ele imprime. E eu posso compilar com play quando eu saqueio este. Agora diz zero. Ele continua dizendo zero porque só olha para o primeiro índice. Agora, o rifle é, se eu clicar em mais aqui, o primeiro pode ser a pistola, o indicador pode ser o E continua verificando apenas o índice zero. Agora, deixe-me deletar tudo isso e deletar isso. Deixe-me conectar o índice de raios aqui. Deixe-me mudar isso para cima. Vamos movê-lo para cá e chamá-lo de índice de raios. Vamos compilar, vamos voltar. Agora, quero verificar se esse é o último índice antes de continuar. Se eu pegar o inventário e nos deixar encontrar a variável aqui, inventário de armas. Vamos pegar isso. Digamos último índice desse inventário de armas que temos agora, esse número é igual a esse índice de área? Vamos torná-lo mais bonito aqui. Agora vamos fazer um galho. E estamos perguntando: estamos no último índice do inventário? Vamos apenas deletar isso. Deixe-me conectar isso. Se isso for verdade, queremos continuar com o código. No entanto, se não estivermos no último índice, se ainda precisarmos verificar algumas coisas no inventário, precisamos voltar atrás. E, na verdade, não precisamos fazer nada porque, se não for o último índice, simplesmente analisaremos isso. Na verdade, não estamos quebrando o ciclo, estamos apenas quebrando o ciclo aqui. Quando encontramos um item, na verdade não preciso fazer nada. Deixe-me organizar isso um pouco, deixe-me afastar isso, e isso deve resolver nosso problema. Ok, aqui eu criei alguns nós de rota e está mais bonito Vamos agora clicar em Play e ver se funciona. Se eu simplesmente saquear essa arma, por exemplo, e clicar em, você pode ver que ela realmente a derruba em quatro E se eu clicar aqui, também solto esse. Você pode ver aqui que está funcionando. Não consigo saquear dois rifles ao mesmo tempo e ele também está funcionando com uma pistola provavelmente Agora vejo que não consigo saquear duas armas ao mesmo tempo. 168. 12.01 Morte: Tudo bem, então agora vamos criar a morte do jogador. Lembre-se de que aqui causamos qualquer evento de dano e calculamos a saúde, a armadura e a quantidade de dano que você sofreu Agora dissemos isso aqui no final, se a saúde atual for igual a zero, queremos jogar o evento da morte. Ok, muito simples. Vamos criar novamente um novo evento rápido chamado morte, vamos executá-lo no servidor porque estamos no modo multijogador Vamos executá-lo através deste servidor, evento de morte confiável. E vamos executar a morte do servidor aqui em um evento normal. Então, funciona assim. Para a morte, você pode imaginar que, na verdade, vamos fazer uma morte como uma boneca de pano, em que o jogador simplesmente cai no chão Agora podemos dizer que reproduza uma montagem de animação. No entanto, eu só quero tornar isso um pouco mais divertido e realmente criar uma morte de boneca de pano em vez de uma animação Porque já fizemos isso antes. Sabemos como fazer isso em vez de fazer multicast. Eu quero te mostrar como matar uma boneca de pano. Para fazer isso, agora precisamos que um representante notifique porque você mudará o visual do jogo Lembre-se de que, se você quiser alterar o visual de um representante, notifique aqui Vamos criar um novo evento ou uma nova variável. E esse vai se chamar Dead Bullion. Vamos definir que isso está morto para ser alguma coisa. Vamos apenas arrastá-lo para o evento. E este também o arrasta para o evento. Na verdade, podemos chamar isso de. Agora vamos até aqui. Se a saúde atual for igual a zero, vamos chamar esse evento de morte. Vamos fazer com que o jogador morra. Lembre-se de tornar isso realidade. Agora precisamos representar e notificar isso. O representante notifica que cria uma função. Então, vamos clicar duas vezes nele. Dentro daqui, o que queremos fazer é simplesmente perguntar se o jogador está morto ou não? Esse lingote é verdadeiro ou falso? Ok, o que queremos fazer para causar a morte por desemprego regular quando a variável de morte é verdadeira Queremos simular a física com essa malha. Porque se eu simplesmente for ao mercado e abrir a era, apenas uma delas realmente não importa. E você acabou de abrir o ativo de física. Você abre o ativo físico, como pode ver aqui. Se você clicar em Simular, poderá ver o jogador morrendo assim Na verdade, isso é morte regular, se você apenas simulá-la. E você pode ver, isso é o que eu quero fazer. Para fazer isso, precisamos simular a física. Vamos pegar essa malha e dizer que simula. Defina a física simulada como verdadeira. Também quero desativar o movimento do jogador. Portanto, você não pode pressionar o teclado e se mover. O jogador pega o movimento do personagem e diz desabilitar o movimento. Agora, o jogador não pode pressionar o teclado para se movimentar. Vamos compilar e ver o que acontece se eu clicar em play Agora eu também gero o outro jogador. Deixe-me atirar nesse jogador e ver o que acontece. Eu vou atirar nesse jogador. O jogador morre, mas cai no chão. Na verdade, vamos corrigir isso também. Precisamos mexer com algumas colisões. E isso ocorre porque a malha agora está simulando a física. Se dermos uma olhada na malha aqui, se descermos até as configurações de colisão, podemos ver que ela realmente não tem colisão física, o que significa que vai cair no Só tem sobreposição. física se sobrepõe quando eu bato em minhas bandejas de linha para causar danos, mas ela não tem colisão física, precisamos Vamos pegar essa malha agora. Deixe-me arrastar a partir daqui e dizer definir colisão. Vamos descer até aqui. Defina a colisão ativada. Vou permitir a colisão. Eu vou colidir aqui. Colisão ativada Eu tenho uma consulta e uma física. Vá em frente e selecione isso. Na verdade, vou fazer isso antes da física caso contrário, o jogador cairá no chão. Eu vou habilitar a física primeiro. Vamos tentar isso. Agora temos física. Ok, esse bug foi corrigido. Você tem que tentar ver que outra caixa temos. Agora, novamente, eu vou matar esse jogador aqui. Ok, agora o jogador está morto. O jogador está aqui. Incrível. Um problema com esse player no momento é que, na verdade, ele tem a animação ociosa ativada Porque eu posso ver o jogador respirando agora. Você pode ver que os ombros estão se movendo e temos uma animação sendo reproduzida. Precisamos parar com essa animação porque ela parece boba. Deixe-nos fazer isso. Vamos ficar aqui. Na verdade, você pode dizer reproduzir animação. Você pode selecionar essa animação de reprodução. Você simplesmente não define nada aqui que realmente exclua todas as animações e o player não terá nenhuma animação aplicada Agora, novamente, basta clicar duas vezes aqui para fazer uma anotação de redirecionamento para que você possa ver o que estou fazendo Portanto, não é difícil assim. Ok, agora vamos compilar. Acho que também notei um bug na sombra. Se eu simplesmente gerar o jogador novamente. E eu mostrei ao jogador. Ok. Incrível. Agora há um bug aqui com a sombra, porque aqui, como jogador, você pode ver que eu posso me mover. Isso ocorre porque, lembre-se de que temos uma malha de terceira pessoa . Malha em terceira pessoa. O que fizemos antes foi que, se você procurar por uma sombra, fizemos com que essa mostrasse uma sombra oculta. Fizemos isso, lembre-se, há muito tempo, neste curso porque queríamos mostrar a cabeça do jogador. Estamos usando essa malha de terceira pessoa para mostrar a sombra correta. Vamos conversar em terceira pessoa, vamos fazer isso aqui. Por exemplo, digamos que set hidden, acredito que seja chamado de conjunto oculto no conjunto de jogos cast hidden shadow. Essa, não digamos mais nada, porque eu não quero mais mostrar minha sombra. Também há uma última coisa que eu esqueci. E esse é o componente da cápsula. Não quero que esse componente da cápsula colida com armas e coisas assim Na verdade, vou desativar a colisão para este também Vou fazer isso antes ativar a colisão para a malha, porque talvez às vezes essa cápsula colida com essa malha e crie uma bagunça Vamos afastá-lo e dizer que a colisão definida está ativada. Digamos que não haja uma colisão como essa. E espero que seja isso. Vamos afastar isso. Ou, na verdade, basta movê-lo para cá. E não precisamos movê-lo até lá. Agora deve funcionar. Vamos compilar agora. Clique em Jogar. Se eu for até aqui, deixe-me criar esse jogador Agora eu posso atirar no jogador. Agora destruímos todas as mortes, incrível. Eu não colido com o jogador. O jogador ainda não está se movendo. E se eu me mudar para cá com o outro cliente, você pode ver que eu posso mover minha câmera da maneira que eu fizer, como se a sombra tivesse sumido, eu estivesse morto aqui. Claro, você pode torná-lo mais complexo. Como se você pudesse criar uma câmera para espectadores. Em vez de fazer isso, você pode até mesmo desativar a câmera. Você não pode, você é assim e não consegue mover a câmera. Mas acho que está tudo bem por enquanto. Eu adoro isso. Sim, tudo está funcionando corretamente. O problema que temos agora é que o jogador não deixa cair as armas depois que você a tem Você pode ver aqui, uma vez que você tem armas e eu atiro em você, você ainda está segurando aquela arma. Quero que o jogador solte a arma, porque imagine que se todos os jogadores estivessem segurando as armas quando morrerem, todas essas armas desaparecerão cerca de 2 minutos após o início da partida. Eu quero que o jogador solte a arma, e nós também podemos fazer isso. Vamos seguir em frente e passar para a próxima lição. 169. 12.02 Drop Weapon When Dead: Tudo bem, então vamos fazer o jogador largar todas as armas quando o jogador morrer aqui. Sempre que definimos isso como verdade. Então, deixe-me arrastar isso e fazer um galho e perguntar se está morto está definido como verdadeiro. Porque mais tarde vamos configurá-lo como falso quando o jogador estiver respondendo Mas, por enquanto, o jogador está morto e queremos soltar a arma. Ok, vamos voltar como um lembrete e ver o que fizemos com a arma de lançamento Se eu voltar ao evento da arma lutqudrop, ou a um gráfico, e para soltar a arma, na verdade ela está E apertamos o botão e depois soltamos a arma. Na verdade, só precisamos convocar esse evento aqui. Na verdade, não estamos apertando um botão, estamos apenas forçando o jogador a soltar todas as armas Então, na verdade, vamos fazer isso. Este evento procurou o tipo de arma equipada. E acho que precisamos modificar isso porque não é apenas a arma equipada que precisamos soltar, também precisamos soltar a outra arma que está nas nossas costas ou na nossa coxa Na verdade, precisamos modificar um pouco esse código. Vamos voltar apenas para anotar e ver o que acontece por aqui. Vamos ligar para o servidor. Acredito que se chame arma de solicitação de entrega. Solte a arma. Essa. E vá em frente e ligue agora mesmo. Quando ligarmos novamente, ela soltará a arma equipada, mas na verdade queremos descartar todas as armas do inventário. Deixe-me modificar isso para este evento. Vou adicionar uma nova variável. Vamos adicionar a base de armas. Porque vamos dar a informação que queremos aqui, base de armas. E, em vez disso, vamos chamá-lo de nós. Aqui temos que especificar qual arma queremos soltar quando clicamos no botão para soltar a arma, quando clicamos no K, eu quero soltar minha arma. Essa aqui, arma equipada. Agora, isso é correto para este. Agora vamos atacar a partir daqui e dizer o nome. Obtenha a variável de nome exatamente como antes. Obtenha informações sobre a arma e quebre isso e então podemos obter o tipo. Em vez de fazer isso, podemos excluí-lo e conectar isso em um, deixe-me remover todo esse código. Isso, e podemos ver o que estamos fazendo agora. Organizamos tudo. Tudo está indo bem. Só estou expandindo isso aqui. Expandindo isso aqui também. Fantástico, temos essa configuração. Agora, se você acessar o gráfico de saúde e armadura, agora podemos especificar de qual arma você está falando Nós simplesmente queremos colocar todas as armas no inventário. Em vez de fazer quatro voltas, eu poderia fazer quatro voltas em cada volta, novamente com o inventário aqui. E poderíamos inserir o inventário de cada um deles, poderíamos soltar a arma. No entanto, lembre-se de que, com um loop de quatro em cada, ele não espera que esse código seja reproduzido. Ele reproduzirá duas vezes esse código de lançamento de arma. Na verdade, vai bugar seu código aqui porque vai mudar a arma aqui. Isso mudará esse valor aqui antes que você tenha a chance de terminar esse ciclo de código. Em vez de fazer isso, o que vou fazer é fazer um loop manual. O que podemos fazer aqui é fazer o inventário. Apenas certifique-se de que este não esteja vazio, porque não queremos soltar armas. Se isso não tiver nada, vamos pegar o tamanho desse inventário e garantir que seja maior que zero, porque não queremos fazer nada se for maior que zero. Exatamente desse jeito. Se for maior que zero, também solte a arma. Se for maior que zero, isso significa que temos algo no inventário. Deixe-me pegar o primeiro item que temos no inventário. Isso estará no índice zero. Eu quero ir em frente e largar isso. Vamos atacar a partir daqui. Assim, eu acredito. Não precisamos fazer mais aqui. Porque se você voltar para a arma de soltar, lembre-se de que, dentro dessa função de soltar arma, você já removeu esse item do inventário. Porque é muito importante removê-lo do inventário. Agora, caso contrário, você terá um loop infinito aqui. Vamos atrasar esse código. Vamos atrasar em algo como 0.1. Então, podemos voltar e reproduzir esse código novamente. Então, diremos novamente: vou fazer algumas anotações espelhadas para que possamos realmente ver o que estou fazendo por esta aqui, assim como também do outro lado. O que estamos vendo aqui basicamente é soltar essa arma, atrasar o código e tentar executá-lo novamente. Tente verificar se esse comprimento ainda está acima de zero. Lembre-se, nós o removemos aqui na arma de lançamento. Tecnicamente, deveria ser zero se tivéssemos apenas uma arma. No entanto, se tivermos duas armas, o comprimento disso ainda será um. Porque o comprimento era de dois antes. Porque tínhamos duas armas. Agora é uma arma. Vou verificar novamente. O comprimento é maior que zero Se for. E pegue de novo. Pegue essa arma. Largue isso. Então, ele continua caindo até que você não tenha mais nada para arrastar daqui e dizer que não há mais ou nenhuma arma para soltar Ele imprimirá a sequência se você tiver zero armas para começar ou se tiver retirado todas as armas do inventário Agora você pode diminuí-las, acredito que 0,05, talvez até Mas deixe-me escolher 0.1 Realmente não importa que o jogador não perceba. De qualquer forma, deixe-me clicar em Play. E vamos experimentar e ver se temos problemas. Se eu tiver essa arma aqui, esse jogador saqueia todas essas armas Na verdade, deixe-me mover esse jogador para cá. Assim, podemos ver as armas sendo lançadas. Deixe-me atirar nesse jogador. Agora podemos ver o jogador realmente soltar as armas aqui. Essa pistola e o K. Se eu largar isso e for até a pistola, eu mesmo tenho uma pistola , então deixe-me Eu posso saquear essa pistola. Eu posso até mesmo saquear o K que esse jogador deixou cair. Eu posso perdê-lo como antes. Não há nada realmente errado com isso. Incrível. Vamos experimentá-lo no cliente também. Esse era o servidor. Deixe-me minimizar isso e ir até o cliente. O jogo para o servidor. Eu vou querer que o servidor tenha muitas armas. Agora que os íons vão atirar nos jogadores, aqui estão eles. Vou deixar isso em quatro. Eu quero o K, eu aguento. Incrível. Tudo está funcionando agora. No momento, temos um problema não conseguir saquear duas armas no momento Às vezes, temos um problema em que deixamos cair a arma e não podemos realmente saqueá-la porque ela tenta compará-la com a arma caída Na verdade, vamos resolver isso também. É como fizemos com o conserto da arma. Se voltarmos, se eu voltar aqui no meu gráfico, alaúde e equipamento, e este é o código de arma que criamos Lembre-se de que comparamos a variável da arma do lote com a que queremos lotar agora. Se for a mesma, apagamos a notificação e a executamos aqui Porque lembre-se de que, se você executar o mesmo valor duas vezes, ele não será executado. Simples assim. Vamos voltar. Deixe-me abrir o depósito aqui. Vamos até a arma de lançamento aqui. A maneira como eu quero fazer isso é porque dentro de uma função você não pode realmente fazer um atraso como fizemos antes aqui na arma do lote, onde atrasamos aqui antes de executarmos o código. Nas funções, você não pode atrasar. Isso é outra coisa. Esse não é o atraso normal que costumamos fazer. Precisamos realmente fazer isso fora da função. Precisamos fazer isso aqui em vez disso, aqui, quando quisermos soltar a arma. Vamos criar o código aqui. Quero fazer com que a arma caia aqui e não a coloque em nada assim. Então eu quero arrastar a partir daqui e dizer atraso, como antes. Configure 20.05 e então eu quero largar a arma Antes de fazer isso, não quero fazer isso o tempo todo. Quero verificar se isso é o mesmo de antes. Vou pegar essa arma para soltar e dizer: é igual à arma aqui no inventário que acabei de encontrar? Deixe-me fazer um galho. Se isso for verdade, eu quero fazer isso aqui, deixe-me voltar atrás. Se isso for verdade, eu quero fazer isso aqui. Se for falso, eu só quero executar o código como antes. Deixe-me reorganizar isso para que você possa realmente ver o que está acontecendo Ok, assim, estamos tentando comparar a arma a ser soltada com a que estamos tentando soltar aqui. E se for o mesmo, vamos esclarecer isso e fazer tudo isso. Ok, ótimo aqui, na verdade não precisamos disso. Podemos simplesmente deletar este daqui. Além disso, às vezes, novamente, a arma se torna invisível porque esse ator não consegue reconhecer esse ator, mesmo que eles sejam iguais. Em vez de fazer isso, vamos simplesmente deletar isso. Exclua isso e vamos colocá-lo aqui. Em vez disso, excluímos constantemente essa arma para soltá-la antes de usá-la novamente. E isso é bom. Não há realmente nenhum problema com isso. Na verdade, vamos fazer isso também para o saque. Em vez de verificar se é a mesma coisa, vamos excluir isso. Vamos fazer isso porque realmente não dói muito ou não dói de verdade. Na verdade, isso realmente não importa. Vá em frente e conecte-o assim. Vá em frente e compile. clicar em jogar agora, verifique novamente. É principalmente para o cliente, pois é aqui que os problemas de replicação ocorrerão Aqui. Como cliente, como servidor. Vou saquear algumas armas e me destacar aqui e matar esse jogador Agora o jogador está morto. Agora vou largar minha arma para saquear essa Estou largando a pistola agora, carregando a pistola. Funciona para que possamos saquear as duas pistolas. Vamos carregar essa arma. Continue saqueando a arma e veja se você sai, se tem algum problema ou se está tudo bem Podemos ver que nada está ficando invisível, tudo parece bom. Só estou tentando ver se há um bug no momento. Acho que vi um bug em que, na verdade, deixei cair os quatro. Você pode ver agora que deixei cair o quando pressionei em vez disso. No momento, o bug é que, se escolhermos um jogador aqui e equiparmos duas armas, e se eu clicar em G para soltar a arma, você verá que a arma nas minhas costas está caindo E isso é depois das novas edições que acabamos de fazer. Vamos verificar o que está acontecendo. O problema talvez seja escapar da arma ou soltá-la aqui Para soltar a arma, estamos soltando a arma equipada Vamos primeiro verificar se isso é verdade. Qual é a arma equipada? Vamos realmente fazer isso aqui embaixo. Vamos fazer isso aqui embaixo para que possamos imprimir o nome da arma. Basta conectá-lo aqui, compilar e salvar. Agora deveria dizer pistola. Quando tento soltar minha arma e ela diz pistola, a arma equipada está correta Não há nada de errado quando saqueamos a arma. Agora conhecemos a arma de saque. A lógica está correta. Estamos tentando soltar a pistola, mas por algum motivo o rifle está caindo Agora vamos imprimir isso. Deixe-me também tentar ver se estou desarmado ou não. Na verdade, não faz sentido porque estamos soltando a arma Então, sabemos que não estamos desarmados, estamos soltando a Algo está errado aqui. E eu acredito que esse loop, mais uma vez, eu te disse antes, loops não esperam pelo que você está tentando fazer Esse é um problema com os loops. Às vezes, eles simplesmente executam o código. Se eu voltar aqui, acredito que está tentando soltar a segunda arma que você saqueou Porque não vai esperar pela sua demora. Na verdade, ele percorrerá e eliminará o último índice. Eu acredito que isso é o que está acontecendo. Em vez disso, vamos desconectar isso. Deixe-me deletar isso. Aqui, deixe-me afastar isso. Agora, quando encontrarmos uma arma, vamos criar uma nova variável. Vamos fazer uma nova chamada arma encontrada para soltar. É essa, uma arma encontrada para soltar. Vamos fazer com que essa arma encontrada seja verdadeira. Então, vamos quebrar o ciclo. Agora encontramos uma arma e fazemos anotações como antes. O que podemos fazer com isso agora é deixar eu desconectar isso e afastar isso. Agora vamos pegar isso e fazer um galho e perguntar, temos uma arma? Ele encontrou uma arma para soltar. Se isso for verdade, primeiro queremos definir isso como falso. Porque da próxima vez que fizermos isso, queremos ter certeza de que não está funcionando. A próxima coisa é que queremos largar essa arma. Só estou movendo isso para cá, e está tudo bem. Vamos soltar a arma como antes. Mas vamos fazer isso aqui embaixo quando o loop estiver realmente concluído aqui. E a arma a ser solta pode ser apenas a arma que você tem agora. Porque lembre-se de que você quebrou o laço, então ele ainda está na arma que você encontrou. Não precisamos fazer nada dentro daqui. Então vamos atrasar. E então vamos configurar isso para interagir novamente. Ok, vamos compilar A próxima coisa que queremos fazer é que tudo isso esteja correto. Não há nada de errado aqui. A próxima coisa que eu quero fazer voltar à minha armadura de saúde e lógica de danos aqui Apenas certifique-se de que você tenha esse atraso de talvez até 0,2. Acho que tive que 0,1. Se ele falhar, às vezes é porque você está soltando as armas muito rápido. Acho que vou chegar a 0,2 e vamos compilar e salvar tudo Essa é a lógica que temos até agora. Se você perdeu alguma coisa, verifique se está assim, assim como a lógica para soltar a arma Se eu voltar ao meu gráfico aqui, saqueando, certifique-se de que o saque seja assim Removemos a comparação. Também posso remover esse nó de redirecionamento. Isso é o que temos até agora. Nós simplesmente deletamos essa variável, deitamos instantaneamente um pouco e depois saqueamos a arma Ok, isso está parecendo bom. Além da arma de soltar, fizemos essa arma equipada para ser conectada a este servidor. E então usamos o tipo de arma aqui e nos certificamos de quebrar o circuito dessa forma para que ele não se solte. Ok, essa é a nossa lógica até agora. Se precisarmos, podemos tentar consertar as coisas novamente, mas acho que isso deve resolver o problema. Vamos testar e ter certeza de que nada está funcionando. Vou minimizar o servidor. Vou jogar no cliente porque é principalmente aqui que a replicação está dando errado Vamos pegar uma arma aqui como servidor. Agora, se eu for até o cliente. Aqui com o cliente e eu atiro no servidor, aqui eu solto a arma. Eu tento saquear. Eu posso saqueá-lo. Eu tento saquear a pistola. Não posso porque tenho um. Se eu a deixar cair, vou até lá e tento saquear a pistola aqui No momento, tenho um problema de replicação com a pistola. Se eu simplesmente fechá-lo e dar uma olhada novamente aqui para ver os atrasos, tenho 0,05 após queda da arma e, em seguida, atrasamos em 0,1 para ter certeza de que podemos gostar dessa interação depois de executarmos essa função Além disso, se você voltar para a saúde, esta é 0,3 Agora podemos tentar fazer com que seja 0,2 novamente, mas vamos mantê-la em 0,34 Agora, antes de testarmos as coisas, vamos ver a morte que causamos aqui Em vez de configurar a malha para ativar a colisão. Porque, para a malha, se você descer até a colisão, verá que ela também está interagindo com as armas Está interagindo com a estática mundial e a dinâmica mundial. Vamos tentar ativar apenas a física da colisão, não a consulta, não estamos nos sobrepondo às armas e Em vez de ativar a colisão, vou definir a física apenas porque estamos interessados apenas em física Assim, podemos fazer aquele efeito de boneca de pano e cair no chão A física só deveria ser boa aqui. Vamos agora experimentar e ver se funciona. Acredito que já tive um bug antes com a interação do jogador. Quero lembrar esta caixa para poder consertá-la aqui como jogador ou cliente. Vamos filmar o servidor. Agora eu posso largar isso, tentar muito e saquear a pistola K Agora eu também posso saquear a pistola. Eu não tenho nenhum problema se eu sair. Você pode ver aqui que recebi um erro dizendo que eixo não está tentando ler a propriedade interagindo com o player Se você simplesmente clicar no erro, aqui está. Só está recebendo um erro aqui. Eu acredito que é o jogador que está morrendo. Na verdade, está configurando esse jogador para isso quando diz eixo não. Você pode simplesmente corrigir isso certificando-se de que seja válido. Se eu simplesmente afastar isso, posso pegar isso e clicar com o botão direito do mouse e convertê-lo em um get validado E vamos nos certificar de que é válido antes de continuarmos. Então, a próxima coisa também é o bug aqui, porque me mostra que a era também chegou. Agora eu fiz com que isso fosse válido porque também vem daqui de cima. Você pode ver que ele vem diretamente para esse loop. Mesmo que consertemos isso, isso vai funcionar por causa deste Certifique-se de que isso seja válido. Isso nos deu uma era por causa dessa. Estamos tentando verificar as coisas quando isso não é válido. Vamos nos certificar aqui depois do jogador, e acredito que estamos interagindo com o jogador que está soltando a arma Vamos copiar isso aqui, aqui embaixo. Certifique-se de que não foi esse jogador que também deixou cair a arma. Porque não queremos saquear a arma, simplesmente caímos. Isso não faz nenhum sentido. Vamos afastar tudo isso. Assim, na verdade, acho que podemos deletar este, porque já estamos pedindo isso. Vamos fazer uma ramificação e vamos conectá-la, conectados aqui. Se isso for verdade, vamos definir o player que interage, vamos movê-lo para frente Acredito que podemos deletar isso, porque acabamos de verificar isso. Vamos deletar. Exclua isso. Isso deve funcionar bem. Neste caso, estamos configurando e depois verificando se é válido. Isso também é bom. Ok, agora vamos fazer algumas anotações. O motivo pelo qual não estou excluindo isso e apenas conectando-o aqui desta forma porque quero ter certeza de que isso é válido antes de continuarmos Porque também estamos vindo daqui e, na verdade, nos conectando diretamente a isso. Mesmo estando aqui, precisamos ter certeza de que isso é válido antes de continuarmos aqui. Também vou me certificar de que o jogador seja válido. Arrastar aqui e dizer que é válido, vá em frente e também, certifique-se de que o jogador seja válido e também que não foi o jogador que soltou a arma Agora vamos filmar o servidor novamente. Agora vamos largar a arma, carregar a arma. Deixe-me aumentá-lo para que possamos realmente ver o que está acontecendo agora. Tudo está funcionando. Eu posso soltar a pistola. Se eu carregar duas coisas e eu cair, soltamos a pistola, não temos mais esse bug. Ok. Posso carregar tudo e não recebo nenhuma caixa quando saio disso. Ok, tudo está funcionando agora. Sei que tem sido confuso porque tínhamos muitas caixas que precisávamos cuidar Certifique-se de que, quando o jogador estiver morto, você solte a arma Estamos recebendo essa primeira arma no inventário. Se o tamanho do inventário for maior que zero, o que significa que temos uma arma no inventário, estamos soltando a arma e também atrasando em uma quantidade que não faria com que a arma caísse 0,3 dólares neste momento No momento, talvez possamos reduzi-lo para 0,2. Mas estou satisfeito com isso agora, ninguém vai saber disso de qualquer maneira. Então, dentro da queda da arma, fizemos esse loop aqui. Fizemos esse touro entrar, para não sairmos. E não precisamos replicar essa variável porque estamos apenas verificando as coisas dentro do servidor Estamos usando essa variável fora do servidor, então nunca a usamos no cliente. Nós realmente não precisamos replicá-lo. Estamos examinando isso, estamos limpando essa variável primeiro Antes de soltarmos a arma. Soltamos a arma, a atrasamos para garantir que ela seja executada e que os jogadores possam interagir com ela. Mais uma vez, o atraso é de 0,1 para este. Finalmente, para a arma do lote, novamente, apenas removemos diretamente a variável da arma do lote. O Notify o limpou e depois o colocamos aqui. Ok, então isso é tudo que eu sei, é um pouco confuso, mas tivemos que nos livrar de todos esses problemas Agora, novamente, se você tiver algum problema, fique à vontade para visitar meu site, Pixel Helmet.com, ou você também pode falar comigo no Discord Você pode ver minha discórdia no meu perfil e também é apenas o capacete Pixel Tudo bem, obrigado por assistir e vamos para a próxima lição. 170. 12.03 Respawn: Agora que terminamos com a morte, vamos garantir que o jogador também responda Dentro da base de jogadores. Novamente, dentro da saúde, da armadura e dos danos Deixe-me clicar aqui com o direito e com o botão direito do mouse. Em seguida, feche as guias à direita. Ok, dentro daqui, vamos clicar com o botão direito agora e criar um novo evento personalizado. Ligue para esse. Vamos clicar com o botão direito do mouse novamente e torná-lo um evento personalizado e chamá-lo de Re. Então, este será executado no servidor exatamente como antes. Vamos executar isso, o servidor é confiável. Esse aqui em cima, vamos chamar o servidor de respawn. Agora estamos prontos para responder. Agora, para o respawn, o que simplesmente queremos fazer é mudar a localização do jogador Porque imagine que o jogador tenha morrido aqui no chão. Basicamente, vamos mover esse jogador de volta ao ponto de desova. Isso é o que estamos tentando fazer agora. Já temos os pontos de desova no modo de jogo. Se você se lembra, se você voltar às plantas, abrir o modo de jogo e, dentro do modo de jogo, temos uma solicitação: spawn player Agora não queremos gerar o jogador, lembre-se de que só matamos o jogador por não nos movermos Tecnicamente, você já foi gerado. Nunca removemos você do jogo. Não queremos ligar para isso de novo. O que queremos fazer é fazer essa lógica mais uma vez. O que podemos fazer é precisar do modo de jogo para capturar os pontos de origem do antiterrorista e do terrorista Vamos voltar à base de jogadores e dizer: comece o modo de jogo. Esta é apenas a referência, digamos que um modo de jogo como este. Em seguida, conectado a isso, obtenha referência do modo de jogo em nossa interface de blueprint Agora vamos pegar os pontos de desova do Darorist, vamos pegar os pontos terroristas, este ganha pontos problemáticos este ganha Agora, o que queremos fazer, assim como antes, vamos voltar ao modo de jogo. Na verdade, podemos simplesmente pegar um ponto de spa aleatório e copiar essa transformação como antes. Também podemos copiar isso aqui, controlar C. Vamos voltar ao controle da base de jogadores V. Vamos conectar o terrorista do condomínio e o terrorista a eles e agora vamos notificar o representante também, lembre-se de conectar este Precisamos da equipe que você selecionou. Precisamos saber se o jogador é antiterrorista ou terrorista. Lembre-se de que fizemos isso na interface do usuário. Voltamos à interface de usuário em que você seleciona a equipe. Você acessa o gráfico aqui e seleciona em qual equipe está. Isso leva você ao modo de jogo. O modo de jogo aqui, selecione a equipe. Na verdade, vamos criá-la como uma variável para que possamos usá-la, porque no momento não há como usá-la. Vamos criar uma nova equipe variável. Se eu apenas segurar o mouse sobre ela, você pode ver que é uma referência de classe de ator, se você ator e é essa. E você pode selecionar a referência da classe. Vamos compilar agora, lembre-se que só precisamos definir coisas assim dentro do servidor, não no cliente Aqui no servidor, vou configurá-lo como equipe e depois conectar este aqui para torná-lo mais limpo. Agora, não precisamos replicar isso porque nunca vamos usá-lo no cliente Só precisamos usar isso no servidor para encontrar o ponto de desova correto Essa variável em si não é necessária, não precisamos realmente replicá-la Agora, definimos essa variável aqui. Precisamos ter o controle do jogador. Vamos clicar com o botão direito do mouse e dizer get controller e encontrar a função aqui. E então vamos atacar e dizer referência ao controlador do jogador. Vamos conectá-lo agora como o controlador do player. Vamos pegar a variável de equipe que acabamos de criar. E vamos agora conectá-lo aqui embaixo. Ok, agora estamos perguntando se o jogador é terrorista ou contra-terrorista? Se o jogador for um antiterrorista, que significa que isso é verdade, vamos encontrar os pontos antiterroristas. Porém, quando o jogador for terrorista, isso será falso, então ele escolherá B, que são os pontos terroristas. Ok, vamos clicar com o botão direito do mouse e promover isso para nossos pontos de resposta variáveis do jogador. Ou, na verdade, deixe-me chamá-lo de responder transformar. Isso é mais correto. Novamente, precisamos nos tornar um representante notificar porque estamos mudando a localização do jogador Essa é uma mudança visual para clicar nela. Vamos compilar, vamos entrar aqui. Simplesmente o que precisamos fazer aqui é mudar a transformação do ato. Vamos clicar com o botão direito do mouse e dizer definido e selecionado. É só eu. o jogador que acabou de morrer. Isso é bom. Agora, para a nova transformação, vamos pegar essa que acabamos de dizer. Agora, o problema com este, certo? Agora, o jogador, se você clicar na malha, lembra que fizemos antes de eu dizer que a escala é 1,6 na escala. Se eu conectar isso diretamente aqui, ele será redefinido para 11.1. Isso ocorre porque esse ponto da Espanha aqui é na verdade 111 O que você pode fazer é que, na verdade, estamos realizando essa transformação a partir dos pontos da Espanha. Se você destacar esse ponto para a versão 1.6, deixe-me voltar aqui para a base de camadas. Você conecta isso diretamente e tem isso em 1,61 0,61 0,6 , então na verdade será 1,6, mesmo que você tenha definido como um Na verdade, está transformando esse ponto de desova. No entanto, para o meu exemplo aqui agora para o seu jogo, se você tiver 111, você realmente não precisa fazer isso aqui, mas para mim, vou explicar isso aqui. Eu vou transformar, quebrar, transformar aqui, fazer transformar aqui. Pois a localização está boa, a rotação está boa. No entanto, para a escala, quero mantê-la 1,6. Vamos conectá-la assim. Agora vamos compilar e voltar. E também queremos ter certeza de que está morto seja definido como falso, porque agora não estamos mais mortos. Nós apenas respondemos, saímos daqui e dizemos morte e definimos isso como falso. Agora precisamos trabalhar nisso na próxima lição porque ainda temos física simulada e ainda não temos nenhuma colisão e tudo E vamos trabalhar nisso aqui na próxima lição. Mas, por enquanto, vamos clicar em play. Na verdade, antes de clicarmos em jogar, precisamos responder aqui. Nunca convocamos esse evento. Nada vai acontecer. Vamos ligar para cá quando o jogador não estiver mais morto. Sempre que definimos isso como falso. E vamos realmente fazer isso aqui. Sempre que você terminar de largar todas as suas armas, deixe-me atrasar o código em 3 segundos. Vamos melhorar isso mais tarde, mas, por enquanto, vamos responder e ver se funciona. Vamos atrasar 3 segundos e depois responderemos . Deixe-me clicar em Play. Eleja terrorista aqui, selecione terrorista, por exemplo. Agora vou colocar algumas armas neste jogador. Vá até aqui no cliente. Agora, deixe-me abrir os dois no cliente. Eu sou o jogador aqui. O jogador deve responder em um dos pontos de desova após 3 segundos, como você pode ver aqui No momento, nada está acontecendo. Isso ocorre porque ainda simulamos a física. E esse é o problema. Se apenas tentarmos clicar na malha da cápsula. Deixe-me dizer que aqui, escondido no jogo, vou desligá-lo para que eu possa ver as cápsulas e realmente ver o que está acontecendo. E se eu tocar a arma novamente, saia aqui como terrorista. Eu vou sair aqui. Agora. Vamos tentar novamente. Vamos atirar no jogador e ver. Porque se a cápsula se mover, não é um bug que temos. Se você der uma olhada agora, depois de 3 segundos, você pode ver que a cápsula desapareceu do player. E isso é porque a cápsula está aqui agora. Agora, o jogador está realmente aqui. No entanto, o jogador ainda está deitado novamente. Isso ocorre porque simulamos física. E tudo isso precisamos trabalhar na próxima lição aqui nesta parte e fazer com que funcione. 171. 12.04 Não está morto RepNotify: Tudo bem, agora estamos de volta e vamos trabalhar nisso. É quando é falso. Então, esse representante notifica e para que possamos responder ao jogador corretamente. O que você quer fazer primeiro, vamos remover a física. Esse é o primeiro passo. Vamos pegar a malha e eu vou dizer que simule a física. A próxima coisa que queremos fazer é projetar sombra novamente a partir dessa malha de terceira pessoa. Então vá em frente e faça isso. O que vou fazer é colocar a malha novamente. Vou arrastá-lo para baixo. Defina a colisão ativada. Se você simplesmente clicar na malha, ela será configurada para somente consulta. Vou clicar aqui e configurá-lo para consulta somente. Eu posso redefini-lo para o que era antes. Vamos criar um nó de redirecionamento aqui e movê-lo para baixo. A próxima coisa que queremos fazer é olhar aqui e ver o que precisamos fazer. Agora. Precisamos pegar esse componente da cápsula e clicar nele. E precisamos configurá-lo como habilitado para colisão, arraste a partir daqui E diga definir colisão ativada e selecione-a. Em seguida, defina a colisão ativada aqui. Para este, porém, agora este está correto. Além disso, lembre-se de que desativamos a animação, precisamos executá-la novamente. A animação para o jogador é esse plano de animação. Neste aqui em cima, o modo de animação está configurado como modelo de animação Na verdade, precisamos fazer isso de novo a partir daqui. Da malha. E lembre-se de que essa é a malha aqui a partir dela. E digamos que defina o modo de animação. E vá em frente e selecione esse modo de animação definido. E você precisa configurá-lo novamente para usar o esquema de animação. No momento, quando o configuramos como plano de animação, na verdade também precisamos definir qual plano de animação Como redefinimos as configurações aqui, o que podemos fazer é arrastar a partir dessa malha novamente e dizer que classe é essa instância de animação definida e conectá-la É o que chamamos de player MBP aqui, o modelo de animação que criamos Agora, o que precisamos fazer é que ainda vamos reservar, porque vou mostrar para porque vou mostrar você e você poderá ver o que está acontecendo. Se abrirmos isso de novo, interpreta o terrorista aqui. Agora vamos atirar nesse jogador. Agora esse jogador é baleado. E você pode ver aqui que o player ainda está portando, mas não há nada aqui. E eu também estou deitado no chão nesta tela, ainda há um bug. Isso porque, lembre-se de que, com a física simulada, tivemos esse problema no início do curso Se você segurar o mouse sobre ele, ele dirá que se esse componente está atualmente conectado a algo, é a malha conectada ao componente da cápsula. Então, ao iniciar a simulação, ele será desconectado Na verdade, está separado do componente da cápsula. Precisamos recolocá-lo novamente. Vamos pegar a malha aqui. Opa, não os dois. Vamos pegar a malha e, digamos , anexar componente a componente. Se você não se lembra do que fizemos, você sempre pode clicar na arma saqueada Notifique se você encontrar a arma saqueada desembrulhada. Isso é o que fizemos. Desativamos a física e recolocamos a arma na cena raiz Aqui está a mesma coisa que estamos fazendo. Vamos voltar para aqui. Agora vamos nos conectar novamente ou conectar a malha ao componente da cápsula. Lembre-se de que está conectado a, na verdade, não é nada. O soquete não é nenhum. Para a regra de localização. Digamos que vá direto ao alvo. Encaixe no alvo. Encaixe no alvo. Ok, vamos ver o que acontece se você clicar em Jogar novamente. E teste aqui como jogador. Eu vou atirar no jogador novamente. Agora vamos dar uma olhada no que acontece. O jogador é gerado aqui. No entanto, ainda há um problema. O player está aqui embaixo, também na minha tela, o player tem uma câmera estranha A razão para isso é porque se você clicar na malha novamente, ao simular a física, você redefine todas as suas configurações Para mim, a localização é essa e a rotação é essa. Para o jogador, inicialmente isso também é redefinido. Na verdade, preciso colocá-lo novamente. Se eu pegar a malha e disser definir definir localização e rotação relativas , preciso conectá-la. Vou apenas clicar na minha malha e copiar minha localização. Cole-o. Este é o valor z e a rotação é -90 Vamos agora compilar, salvar tudo Vamos ver se tudo está funcionando. Vamos clicar em Jogar. Como terrorista de novo, como esse cara. Deixe-me atirar no jogador agora e ver o que está acontecendo. Agora o jogador está surgindo no chão. Por algum motivo, a pesquisa foi reconsiderada. Agora estamos parecendo normais. O único problema que temos agora é que o jogador está surgindo no chão Para corrigir o problema em que o jogador está embaixo do solo. O que podemos fazer agora, quando clicamos em jogar e o jogador está realmente aparecendo corretamente, há nada de errado com os pontos de St. Nós realmente não precisamos fazer nada com eles. O problema agora está aqui, sempre que conectamos esse player, vamos realmente fazer isso de forma relativa. Vamos manter o jogador relativo. Dimensionamento. Relativo significa exatamente o que escrevemos aqui. Uma vez que, na verdade , manterá nossa escala. Vamos voltar ao representante do jogador aqui para ver a transformação que fizemos Em vez de fazer 1.6, na verdade vou excluí-lo e colocá-lo aqui. Porque, novamente, se eu configurá-lo para ser relativo, ele manterá minha escala. Eu compilo e vamos clicar em jogar e ver o que acontece se eu selecionar terrorista aqui Vamos atirar no jogador. Vou filmar mais. Vamos ver onde o jogador responde. Agora o jogador está respondendo ali. Se eu maximizar meu ponto de vista aqui, você verá que o jogador tem um peão No entanto, o jogador está flutuando. Isso porque eu esqueci de habilitar a caminhada. Se eu voltar para cá em vez disso. Lembre-se de que aqui configuramos a animação para isso e desativamos o movimento. Ao desativar o movimento, você precisa ativá-lo novamente. A maneira de fazer isso é deixar que façamos isso logo antes do plano de animação Vamos adiar isso. Vamos pegar o componente de movimento do personagem e dizer definir o modo de movimento como este. Defina o modo de movimento conectado. Agora você pode configurar este para andar, o andar é o padrão que você tem por padrão, deixe-me mover isso para baixo. E agora deve funcionar. Se você compilar e salvar tudo, talvez eu queira mover esses pontos de desova mais para Então, eles estão realmente alcançando o chão. O jogador não está caindo no chão. Se eu simplesmente movê-los para baixo, ou se eles realmente estiverem aqui no chão, isso deve funcionar se eu os mover também. Essa. Essa. Essa, e essa. E eu os movo para baixo para ficarem no chão. Ok, vamos jogar agora selecione terrist, aqui estou eu. Vamos aparecer como o outro jogador. Agora vou atirar no jogador. Vamos ver o que os jogadores, o jogador, está gerando lá E eu posso andar normalmente como antes, se eu fotografar como cliente. Se eu apenas maximizá-lo para ver se está funcionando, agora o servidor está morto. O jogador responde ali, isso está funcionando nos dois sentidos Se eu tentar novamente, agora o jogador morre rapidamente porque não definimos a saúde máxima. E podemos fazer isso na próxima lição. Mas você pode ver que o jogador está morrendo corretamente e nada está saindo. Incrível, vamos passar para a próxima lição. 172. 12.05 Redefinindo a saúde no Respawn: Vamos agora redefinir a saúde do jogador quando ele responder. E isso é muito fácil porque já fizemos todo o trabalho se você voltar para a saúde aqui. E o que podemos fazer é aqui, sempre que o jogador responder, sempre que fizermos com que o jogador não morra mais, isso aqui vai disparar daqui O que podemos fazer é arrastar e dizer Set player he, acredito que chamamos isso de Set player health. Basicamente, esse é o que fizemos antes. Então, defina a saúde do jogador. E também temos um chamado set Player Armor. Chame aquelas que já criamos de funções. Aquele que vamos ver aqui. Obtenha o máximo de saúde do jogador. E também temos armadura máxima para o jogador. Vamos reabastecer o jogador com saúde e armadura. Agora podemos jogar e deve funcionar. Isso foi tudo o que tivemos que fazer. Ok, deixe-me filmar aqui e ter certeza de que está correto. Se eu minimizar isso para que eu possa realmente ver a saúde, esta e também a do cliente. Vamos filmar como o Klein para ver se funciona, o jogador deve recomprar Aqui. Você pode ver que o jogador está saudável novamente. Podemos ver que o jogador está recuperando 100 pontos de vida e armadura E eu tenho que atirar no jogador novamente antes que ele morra. Fantástico, vou experimentar aqui no servidor e ver se funciona. E o cliente também deve responder com a máxima saúde correta a máxima saúde correta e com tudo funcionando como deveria. 173. 12.06 Prevenindo danos à equipe: Agora podemos atirar no colega de equipe. Se você é terrorista, não deveria ser capaz de atirar em seu colega de equipe terrorista Alguns modos de jogo também podem ser usados, mas se quiser não causar danos à equipe, vamos até a base de jogadores. O dano é feito aqui no lote. Equipe aqui a filmagem e recarregue. É aqui que filmamos. Esse é o traçado de linha que estamos criando. Simplesmente o que queremos fazer é não causar danos. Se você está atirando em seu companheiro de equipe. O que queremos verificar é se o ator de sucesso está na mesma equipe que você, você pode pegar esse ator de sucesso e dizer obter referência. Vamos conectá-lo depois daqui. Se eu tirar isso um pouco daqui, vamos expandir isso para que tenhamos espaço para trabalhar. E eu também vou abrir espaço aqui. Vamos adicionar o código no meio. Vamos pegar a referência do jogador. Digamos que obtenha o controlador porque temos essa variável de equipe dentro do controlador. Obtenha a referência do controlador do jogador . Aqui, podemos acessar a variável de equipe que acabamos de criar. Fizemos isso nas aulas anteriores. Podemos usar isso para ver se a equipe aqui é a mesma que temos contra nós. Se pegarmos o controle do jogador e pegarmos essa variável de equipe, nós as compararemos. Estamos pegando essa variável de equipe do jogador que acabamos de bater. Estamos usando nossa própria variável de equipe. Se isso não for igual a isso, podemos causar danos se você apenas fizer um galho. E podemos aplicar o dano Se não estivermos na mesma equipe, eu quero aplicar o dano. No entanto, se estivermos na mesma equipe, na verdade não faremos nada. Deixe-me reorganizar isso um pouco aqui. Ok, agora que está reorganizado, se não estivermos na mesma equipe que o outro cara, vamos aplicar dano E essa era, na verdade, a única coisa que precisávamos fazer se eu selecionasse terroristas agora E se eu selecionar um terrorista aqui, eu não deveria ser capaz de prejudicar esse colega de equipe Se eu atirar nesse colega de equipe, você verá que nada está acontecendo Não estamos perdendo nenhuma saúde. Eu tento com este. Se tentarmos aqui como servidor e também fotografar o cliente, nada vai acontecer. Ok, então é assim que você evita danos à equipe. 174. 13.01 Criando a interface do usuário da pontuação: Agora que terminamos o jogo base, vamos adicionar algumas pontuações da equipe. Pontuação para contraterroristas e terroristas. Assim, você pode ver o quanto ganhou em rodadas. Vamos seguir em frente e ir até a interface do usuário. Vá para a interface do usuário na interface principal, vamos fazer as rondas aqui O que eu quero fazer é basicamente mostrar a vocês o que estamos tentando fazer para que seja mais fácil entender que é isso que estamos tentando fazer. Ter uma pontuação para contra-terrorista e ter uma pontuação para terrorista. Mais uma vez, detalhe isso. Veja quais elementos você precisa usar e tente fazer isso sozinho, se quiser, sem minha ajuda, porque você deve poder comprar. Agora, se você ainda precisar de ajuda, se não tiver certeza, se não tiver certeza, vamos fazer isso juntos. Primeiro, precisamos de uma caixa horizontal porque há dois elementos lado a lado. Vamos prosseguir e procurar a caixa horizontal. Deixe-me garantir que eu não os coloque aqui dentro. Basta colocar a caixa horizontal no painel da tela. Está aqui dentro. Verifique se o ponto de ancoragem está no meio da tela Se você escrever zero na exposição, este deve estar no meio. Precisamos ajustar o alinhamento x para 0,5 na posição do x. Vou apenas dizer 30, na verdade, o xy 30, então não está na borda da tela Novamente, tamanho de acordo com o conteúdo. Ok, agora vai ser dimensionado para qualquer conteúdo que eu tenha aqui dentro. Primeiro, deixe-me adicionar uma sobreposição. Dentro dessa sobreposição, precisamos de uma imagem porque precisamos de um plano de fundo Eu adiciono essa imagem à sobreposição dessa imagem. Vamos apenas pesquisar o painel, o mesmo painel que usamos até agora. Então, neste documento de um painel, novamente, altere o desenho quanto à margem da caixa para 0,50 0,5 e agora podemos esticá-lo Agora, às 11 no zoom, posso ver o quão grande é. Acho que não vou fazer o tamanho aqui. Acho que vou realmente controlar isso mais tarde. Então, deixe-me escrever 32 por 32. Mais uma vez, vou controlá-lo aqui embaixo. Primeiro, vamos ter uma caixa vertical. Como precisamos de dois textos um em cima do outro, precisamos do primeiro. Vamos apenas pesquisar por texto. Coloque-o dentro da caixa vertical. Duplique este. Vou clicar nos dois. Na verdade, vamos copiar o estilo deste. Deixe-me clicar nele, segure a tecla Shift e clique com o botão direito do mouse. Clique nos dois. Segure a tecla Shift e clique com o botão esquerdo Colamos o estilo. Eu também vou, vamos ver aqui. Para a sombra, não aplicamos nenhuma sombra e tudo bem. Também não temos um esboço. Ok, esse está bem. Vamos agora selecionar os dois que precisamos fazer. Na verdade, vamos editar o primeiro. Digamos que seja antiterrorista. Vamos apenas escrever um aqui. Deixe-me talvez escrever um aqui para este. Eu vou colocá-lo aqui no meio. Na verdade, esse também. Coloque isso no meio. Coloque isso no meio também. Também aqui na justificativa, vou colocá-la no meio Agora clique nas linhas para remover os traços. Agora precisamos de algum espaço entre eles. Antes de fazer isso, também vou mudar o tamanho da frente. Acho que é um pouco grande demais. Vou configurá-lo para 20. Clicando nessa sobreposição, temos a imagem, depois temos a caixa vertical Na verdade, vou colocar alguma margem nessa caixa vertical. Deixe-me apenas escrever, ou preencher. Então, deixe-me escrever 30 e isso é o que parece agora. Eu acho que está bem. 30 é bom para esta caixa vertical. Nós empurramos a caixa vertical longe das bordas desta imagem. Eu vou mudar a cor dessa. Apenas tente encontrar a cor que você quiser aqui. Para o antiterrorista, vou reduzir um pouco a saturação Talvez algo assim esteja bem. Ok, eu tenho o contra-terrorista, deixe-me adicionar um espaço entre esses dois. Basta pesquisar por espaço, adicioná-los entre esses dois textos. Para o Y, vamos escrever dez. Talvez isso seja um pouco demais. Vamos escrever cinco e dar uma olhada novamente, acho que precisamos de mais. Digamos 88 para o espaçamento. Vamos apenas duplicar isso. Vou duplicar a sobreposição porque estamos na caixa horizontal Ele vai adicionar outro ao lado dele. Deixe-me mudar este para terrorista. Deixe-me mudar a cor aqui, o tom para algo vermelho Apenas zero aqui. É vermelho. Vou reduzir um pouco a saturação porque acho que é demais. A saturação é 0,8 E eu vou fazer isso para a outra também, mudando para 0,8, ela permanece a mesma Vamos adicionar um espaçador entre esses dois. Se eu pegar o espaçador novamente, adicione-o entre as sobreposições Então, para o tamanho e o x, vamos escrever algo como 50, talvez algo menos, talvez não 50. Vamos escrever 30. Eu acho que está tudo bem. Ok, se você compilar agora, vamos apenas alterar essas variáveis porque vamos usá-las mais tarde. Este é o número, chame isso de pontuação terrorista T. Vou copiar isso e garantir que seja variável, pois precisamos modificá-lo posteriormente. Clique na outra, chame de pontuação terrorista de texto. Faça essa variável também. Vou clicar em todos eles e garantir que a visibilidade aqui não seja testável porque não quero que testável porque não quero o mouse interaja com eles. Ok, se você simplesmente clicar em Play para dar uma olhada na aparência, é assim que fica. Acho que tudo está indo bem. Então, vamos passar para o próximo. 175. 13.02 Projetando a interface do Team Win: Antes de continuarmos, vamos criar a equipe win I dentro da interface do usuário. Vamos voltar para o principal por aqui. Eu quero que diga que conte vitória terrorista ou uma vitória terrorista sempre que uma equipe vencer. Na verdade, vamos adicioná-lo abaixo disso. O que precisamos é disso dentro de uma caixa vertical. Como temos isso e o texto abaixo, vamos procurar uma caixa vertical Deixe-me minimizar tudo isso para que eu possa ver onde posso soltá-lo. Ele precisa entrar nessa caixa vertical. Eu só vou deixá-lo no meio daqui. E então arrastando essa caixa horizontal para a caixa vertical E agora clique na caixa vertical. Coloque a âncora no meio. Defina essa posição como zero. Vou definir o alinhamento. Na verdade, primeiro clique no tamanho do conteúdo e defina o alinhamento para 0,5. E para a posição em Y, vou defini-la como 30, assim como antes Agora nós o temos dentro de uma caixa vertical. E o que podemos fazer é pesquisar um texto e adicionar esse texto à caixa vertical. Esse texto pode estar no meio e a justificativa também pode estar no meio Vamos dar um pouco de espaço, pesquisar por espaçador, adicioná-lo no meio, clicar nele, digamos, por exemplo, 15 ou 20, ou 25 talvez Digamos que 25, e isso é o que parece. Agora vamos clicar nesse texto. Vamos clicar com o botão direito do mouse para copiar esse estilo frontal, clique neste clique com o botão esquerdo para colá-lo. Para o deslocamento da sombra, vou apenas dar uma sombra de dois a dois No momento, você não consegue ver nada porque, dentro da cor da sombra, você precisa aumentar o alfa em zero, é transparente. Mas se você escrever 0,3, por exemplo, vamos ver, há um leve efeito sombrio, 0,4 talvez fique mais claro e é isso que temos Por exemplo, podemos escrever Terrorist Win. É assim que vai ficar. Ok, para se divertir, vamos torná-lo um pouco maior porque é importante. Agora parece bom. Vamos compilar tudo e passar para a próxima 176. Funcionalidade de interface do usuário do Score e do Team Win: Agora vamos continuar e codificar a funcionalidade da interface do usuário. Vamos abri-lo novamente e clicar em Contra o Terrorista. Vou configurá-lo para ficar oculto para começar, configurá-lo como oculto. Não queremos ver isso por padrão. Além disso, se você acabou de chegar aqui, mude o nome. Vamos alterá-lo para uma mensagem de texto com o anúncio da vitória da equipe, por exemplo. Você pode chamá-lo do que quiser e configurá-lo como variável para que possamos alterá-lo no blueprint E esta é a pontuação antiterrorista que já temos, bem como a pontuação terrorista. E ambas são variáveis. Ok, então isso está feito. Vamos ver o gráfico aqui dentro. O que fizemos até agora foi a armadura, como podemos ver aqui, e o MO, agora vamos até aqui, vamos criar um novo evento personalizado Vamos chamar isso de uma atualização de interface de pontuação terrorista. Vou copiar esse nome porque vou escrevê-lo novamente aqui. Digamos que agora a pontuação do codterrorista. O que precisamos fazer é, para o terrorista, pegar a pontuação do terrorista definir o texto e nos deixar conectá-lo. E vamos fazer a mesma coisa aqui embaixo para a pontuação antiterrorista. Defina o texto e vamos definir o texto. Para o texto, precisamos basicamente da partitura. Vamos clicar nesse evento e criar uma nova variável valor inteiro e numérico Vamos chamar isso de uma pontuação. A mesma coisa para este. Vamos criar um novo número inteiro variável. Chame isso de pontuação. Agora podemos simplesmente inserir esse número de pontuação aqui. mecanismo neural transformará automaticamente sua variável inteira em uma variável de texto para que possa imprimi-la na tela Vamos fazer a mesma coisa aqui. Vamos afastar isso apenas para organizar isso. Agora terminamos com eles. Na verdade, vamos compilar e salvar tudo. A última coisa é essa, e essa é um pouco maior. Vamos clicar com o botão direito do mouse e criar um novo evento personalizado. Vamos chamar essa atualização de anúncio da vitória da equipe I. Ok, para esta, o que precisamos fazer é simplesmente definir esse texto também. Vamos pegar esse. Lembre-se de que este está oculto por padrão. Mesmo que alteremos o texto, precisamos mostrar a visibilidade antes de eu fazer qualquer coisa, vamos atacar aqui e dizer definir visibilidade para a visibilidade. Vamos configurá-lo para não ser testável, não possamos interagir com ele com o mouse Então, queremos definir esse texto. Deixe-me mover isso para baixo e arrastar a partir daqui e dizer definir texto como este. Defina o texto, vá em frente e conecte-o. Agora vamos definir o texto, dependendo se é o terrorista ou o contra-terrorista que vence. Na verdade, precisamos saber o que é a equipe. Lembre-se de que, dentro do controle do jogador, se eu voltar ao controle do jogador do blueprints, definimos essa equipe variável E podemos realmente usar isso para saber se estamos falando sobre o terrorista ou o contraterrorista. Deixe-me adicionar uma nova variável aqui. Lembre-se de que essa variável de equipe é um tipo de classe de ator. Se eu mudar isso para ator ator aqui e for uma referência de classe, vamos chamar isso de uma equipe, apenas soletrando Neste momento, temos essa equipe aqui. Posso me arrastar daqui e dizer que essa equipe é igual a uma equipe antiterrorista. Se estiver, podemos arrastar a partir daqui e dizer selecionar. Podemos selecionar o texto que queremos escolher. Podemos conectá-lo aqui. Estamos perguntando se essa equipe está agora e, mais tarde, inseriremos as informações aqui, mas no momento não temos nada. Mas se esse valor for antiterrorista, se for falso, queremos mostrar, por exemplo, a vitória terrorista. Se for verdade, se for antiterrorista, então queremos significar vitória terrorista Ele selecionará o texto dependendo de qual equipe venceu e forneceremos essas informações posteriormente. Agora, vamos clicar duas vezes aqui, criar um nó de redirecionamento. Tudo bem, agora estamos exibindo isso na tela, mas depois de alguns segundos eu quero escondê-lo novamente. Se eu voltar e a quantidade de segundos for, na verdade, o tempo que as pessoas levam para responder. Imagine que se todo mundo morresse, isso resultaria na vitória do serviço de contador de tela após, digamos, por exemplo, 5 segundos. Ele se afasta porque inicia uma nova rodada e todo mundo vai responder. O que vou fazer é chamar isso, por exemplo, de hora de exibição. E podemos conectar o cronômetro de resposta mais tarde no horário de exibição Vou atrasar isso com a quantidade desse tempo de atraso, que é o cronômetro de resposta no futuro E podemos clicar duas vezes aqui e organizar isso. Vamos atrasar isso. Após esse atraso, queremos ocultar isso mais uma vez, basta copiar e colar isso, adicionar conectado , movê-lo aqui e eu vou configurá-lo como oculto novamente. Ok, então isso acabou. Então essa foi a interface do usuário da pontuação e essa foi a interface do usuário da pontuação. E essa é a interface de anúncio que vamos atualizar. Então, agora podemos usar esses eventos mais tarde. Vá em frente, salve tudo e passe para a próxima. 177. 13.04 Mantendo o controle dos jogadores vivos: Agora, o que precisamos fazer é rastrear quem está vivo no mapa e quem está morto. Porque não podemos realmente mostrar aqui na interface quem venceu. Se não sabemos realmente quem está no mapa e em qual equipe eles estão, também precisamos saber em qual equipe eles estão. Por exemplo, pode haver cinco pessoas vivas e elas estão todas na mesma equipe. Por exemplo, contra-terrorista e todo o terrorista está morto. Portanto, precisamos mostrar a vitória antiterrorista, mesmo tendo cinco vivos, porque eles podem ser da mesma equipe. Precisamos saber disso. Vamos fazer isso dentro do modo de jogo porque dentro do modo de jogo nós realmente decidimos todas essas regras. O que podemos fazer aqui é adicionar duas variáveis. Primeiro, vamos adicionar um chamado Players Alive. Antes de adicioná-lo, vamos realmente alterar o tipo de variável para a variável. Eu quero mudar isso para a base de jogadores. Vá em frente e selecione o jogador agora. Acho que acredito que isso está errado. Vamos novamente procurar a base de armas, mas a base de jogadores é essa. Essa. Esse aqui. Base de jogadores. Agora, em vez de apenas uma variável original aqui, vamos transformá-la em um mapa. O que é um mapa, como você pode ver aqui, ele pode conter dois valores. Se você simplesmente selecioná-lo aqui, nós apenas compilamos. Agora você pode ver que temos essa base de jogadores, mas também temos a segunda variável ao lado dela. Na verdade, você pode atribuir coisas diferentes a esse jogador. Agora, se eu clicar no sinal de mais, por exemplo, se eu adicionar um jogador aqui, também posso adicionar um número aqui. Essa variável de mapa, você pode realmente usá-la como em diferentes cenários. Você pode ter duas variáveis. Por exemplo, você pode ter cada jogador e também quantas mortes eles têm. Cada jogador está dentro dessa lista e ela também tem quantas mortes eles têm, por exemplo. Mas o que queremos fazer é ter esse jogador e também saber em qual time ele está. Porque isso é algo que precisamos aqui para ver se todos da mesma equipe estão vivos ou se estão mortos e tudo mais. Vamos mudar isso novamente para um ator, última referência, porque essa é a nossa equipe. E eu vou mudar esse tipo de variável. Aqui está. Agora temos essa variável, temos o jogador. Se eu apenas compilar, isso desaparecerá se eu compilar. Agora podemos ter o jogador, podemos aqui, em qual equipe ele está. Agora podemos ter cada jogador e em qual equipe eles estão. Ok, então temos os jogadores vivos. Vou fazer um novo chamado players. É o último mais tarde, e trabalharemos com isso mais tarde. Mas vamos fazer isso agora. Jogadores aparecem. Vamos usar isso mais tarde. E essa vai ser apenas uma matriz normal. Só sabemos quantos jogadores surgiram dentro do mapa Vamos começar aqui. Vamos criar um novo evento personalizado. E este vamos adicionar ao mapa vivo dos jogadores. E esse é chamado de mapa, a propósito. Essa é uma única variável, uma matriz, um conjunto. E agora estamos trabalhando com um mapa. Adicione o mapa vivo de dois jogadores. O que vamos fazer é pegar isso e dizer adicione aqui. Podemos adicionar o jogador, na verdade, precisamos ter essa referência do jogador. Podemos simplesmente arrastá-lo e conectá-lo aqui. E essa é a base de jogadores. Vou apenas renomeá-lo para Player. Antes de eu fazer isso, o jogador pode estar morto. O jogador pode ser adicionado a isso. Jogadores mortos, porque quando responderem, serão adicionados a isso. Aqui, o que precisamos fazer primeiro na verdade, é pegar isso e dizer encontrar. Nós podemos usar isso. A propósito, para mapas, você pode simplesmente arrastar aqui, ir para utilitários, ir para o mapa Aqui estão as funções que você pode usar com ele. Você pode ver que não há realmente muito que você possa fazer com isso. Você pode adicionar, encontrar algo, perguntar se está vazio e assim por diante. Na verdade, não tem muito a ver com isso. O que queremos fazer é tentar encontrar esse jogador e ver se ele está dentro desse mapa. Vamos apenas conectá-lo aqui, encontre aqui. Vamos fazer essa ramificação para perguntar se ela encontrou o jogador aqui dentro. Deixe-me diminuir um pouco isso. Se encontrarmos o player, queremos pegar isso e dizer remover e selecionar a função de remoção. Vá em frente e remova esse jogador dos mortos do jogador. Deixe-me clicar duas vezes aqui e fazer uma anotação da rota traseira para que ela seja organizada. Agora vou arrastar deste player, vá em frente e conecte-o novamente. Clique, vou mover tudo isso para baixo para ter mais espaço para trabalhar. E podemos mover isso para baixo assim. E agora está. Aqui vamos encontrar esse jogador dentro do mapa morto do jogador. E vamos remover o jogador se ele for encontrado. No entanto, se o player não for encontrado, basta continuar com o código. O que queremos fazer aqui é adicionar o jogador aos jogadores vivos. Agora removemos o jogador dos mortos do jogador e agora vamos adicionar esse jogador ao mapa. Este é o jogador novamente. Podemos simplesmente desconectar isso porque agora temos esse nó de redirecionamento Vou clicar duas vezes aqui e conectá-lo aqui. Novamente, clique duas vezes aqui e adicione-o aqui embaixo. Agora, o que precisamos fazer é que, na verdade também precisamos disso aqui. Precisamos saber qual equipe está contratada para fazer isso, precisamos obter uma referência ao controlador do jogador. Porque lembre-se de que, dentro do controlador do player, temos essa variável e precisamos dela. Vamos até aqui, deixe-me afastar isso. O que podemos fazer é clicar duas vezes aqui para criar um nó de redirecionamento Podemos arrastar aqui e dizer get controller and select. Lembre-se de que esse é o jogador. Estamos tentando obter esse controle de jogo. Então, a partir da interface do blueprint, criamos a referência do controlador get player Agora temos o controlador do player. Agora podemos acessar tudo dentro desse controlador de player. E queremos essa variável de equipe. Vamos atacar aqui. Equipe obtenha essa variável de equipe. E agora podemos clicar, arrastar e inserir isso aqui. Vamos apenas conectá-lo aqui. E vou mover tudo isso baixo para ter mais espaço assim. E vamos aproximá-lo e conectá-lo. Agora, na verdade, estamos adicionando esse jogador ao mapa e removendo o jogador do lugar desse jogador Ok, agora isso acabou. Vamos compilar tudo e passar para a próxima 178. 13.05 Mantendo o controle dos jogadores mortos: O que precisamos fazer agora é acompanhar os jogadores aqui. O que precisamos fazer, exatamente como antes, é clicar com o botão direito do mouse, criar um novo evento personalizado e chamá-lo de adicionar ao mapa dos jogadores. Assim como antes, precisamos da referência do jogador. Então, se você procurar uma base de jogadores, selecione-a aqui e chame isso de um jogador. Vamos pegar o mapa morto desse jogador. Na verdade, vamos pegar o que está vivo primeiro. Precisamos remover o jogador se estiver dentro daqui antes de adicioná-lo ao mapa morto aqui, assim como antes. Vamos pegar isso, vamos ver se podemos encontrar o jogador aqui dentro. Vamos fazer um galho. Vamos conectar isso aqui. A propósito, para este, esqueci de realmente conectar isso, como posso ver aqui aqui para remover, se for falso, se não conseguirmos encontrar o player aqui dentro, vá em frente e continue o código Não remova nada. Na verdade, vamos clicar duas vezes aqui e clicar duas vezes aqui. Ok, isso está corrigido. Precisamos fazer a mesma coisa aqui. Se conseguirmos encontrar o jogador, vá em frente, pegue isso e diga remova. E vamos conectá-lo. Vá em frente e remova o player, como antes. Eu só vou reorganizar isso. Tudo bem, agora que removermos o jogador, vamos adicionar o jogador aos mortos do jogador. Vamos pegar isso, digamos adicionar, vá em frente e adicione o player exatamente como antes. Clique duas vezes aqui para ver o jogador, crie um nó de rota traseira. Vamos colocar isso aqui e criar um nó de rota traseiro novamente. Aqui vamos nós. Agora adicionamos o player aqui. E vou afastar isso um pouco para ter mais espaço para trabalhar. Precisamos fazer com que o controlador saiba qual equipe esse jogador está. Vamos arrastar isso para longe. Vamos clicar duas vezes aqui. Digamos que obtenha o controle, obtenha o controle, na verdade, obtenha o controle do jogador. Vá em frente e conecte-o. Agora precisamos pegar essa variável de equipe como antes e conectá-la aqui embaixo. Vamos movê-lo para cá. E deixe-me mover isso um pouco assim. Vou mover este um pouco para cima, assim como este. E vá em frente e aproxime-o. Ok, agora estamos adicionando o player aqui. E, assim como antes, se não conseguirmos encontrar o jogador, vá em frente e encontre o controlador e podemos adicionar o jogador a este mapa. Ok, esse era o código. Agora estamos acompanhando os jogadores que estão vivos e também os que estão mortos. O que precisamos fazer agora é acompanhar os jogadores que estão vivos, todos os jogadores vivos. Vamos continuar e fazer isso na próxima lição. 179. 13.06 Mantendo o controle de todos os jogadores spawned: Para acompanhar todos os jogadores que realmente são gerados no nível Isso é muito fácil em comparação com os outros. Vamos criar um evento personalizado chamado add to players spawn array aqui Novamente, precisamos do player, vamos mudar isso e chamá-lo de player. E o tipo é base de jogadores. Nós simplesmente queremos pegar a matriz de geração desse jogador e, digamos, definir os elementos da matriz e queremos adicionar os jogadores aqui Vamos agora escolher o índice. E o índice está apenas pegando isso e dizendo o comprimento. E vamos conectá-lo aqui. Ele encontrará automaticamente o comprimento dessa matriz e adicionará os jogadores dentro dela. O item que queremos adicionar é simplesmente esse player. Lembre-se também de usar esse tamanho para caber, porque se você não o usar inicialmente, o que precisávamos fazer é realmente pegar isso e dizer redimensionar. Em seguida, vamos dar o quanto essa matriz pode conter em tamanho. Mas, em vez de fazer isso , podemos simplesmente dizer tamanho adequado. Dimensione-o automaticamente. Isso é bom. E podemos clicar duas vezes aqui para criar um nó de rota traseiro, e podemos aproximá-lo. Isso está realmente feito. Isso é tudo o que precisamos fazer. Agora podemos usar todos esses eventos. Agora é muito mais fácil para nós, porque já fizemos tudo isso e podemos usá-los no futuro. Vamos salvar tudo e passar para a próxima lição. 180. 13.07 Verificando a quantidade de jogadores vivos: Ok, então agora precisamos verificar se os jogadores estão todos mortos ou se estão todos vivos. Porque precisamos ir até essa Nui e mostrar isso. Precisamos verificar a quantidade de jogadores que estão vivos. Ainda assim, a melhor maneira de fazer isso é aqui. Quando adicionamos o jogador ao mapa morto , sabemos que esse jogador acabou de morrer. E a partir daqui podemos verificar quantos jogadores estão vivos. Toda vez que um jogador morre, vamos verificar se precisamos jogar esse pára-brisa antiterrorista, por exemplo. Vamos fazer isso, deixe-me fazer uma macro aqui. Vamos clicar nesse plus. Para a macro, deixe-me chamar isso de verificação Quantidade de camadas vivas. A razão pela qual eu o transformo em uma macro em vez de uma função é porque estou fazendo um loop for aqui. Ou para cada loop, na verdade, para cada loop eu vou usar este. O bom de uma macro é esse retorno. Se eu simplesmente adicionar duas variáveis aqui, ambos os pinos de execução, essa é chamada de executar, essa é chamada Então, a razão pela qual eles são chamados é que o texto desaparece se você realmente escrever execute aqui E se você escrever, então também desaparece aqui embaixo. A saída, em vez de fazê-la aqui como uma função, quando você começa com a caneta de execução e termina aqui, podemos, com uma macro, adicionar a saída ao completo. Na verdade, esperamos que o loop aconteça antes de continuarmos o código aqui. Se eu adicionar essa macro aqui, ela só continuará quando meu loop terminar. É por isso que, na verdade, estou criando uma macro. Nesse caso, o que eu quero fazer, vamos agora adicionar duas variáveis. O primeiro que podemos chamar de terroristas terroristas vivos. Vamos transformar isso em uma variável normal inteira. Vamos criar um novo chamado alive e compilar. Ok, para este, vamos primeiro colocar os contra-terroristas em zero, os que estão vivos e este em zero também Porque vamos repetir isso e aumentar a quantidade dependendo de quantos estão vivos. Ok, vamos pegar esses jogadores vivos. É aqui que podemos verificar quantos estão vivos. Ainda é um. Deixe-me deletar isso para este. Para corrida, você pode simplesmente pegar isso e dizer que para cada loop você pode realmente usar isso. No entanto, para um mapa, você não pode dizer que para cada loop não é uma matriz, isso é apenas para raios. O que você pode fazer é arrastar, basta acessar o mapa de utilitários e ver essa função Você tem algo chamado chaves. Você também tem algo chamado valores. Se você clicar nas teclas, poderá obter todas as chaves aqui. Como toda essa parte, você pode pegar todos os jogadores. , se você arrastar e disser No entanto, se você arrastar e disser valores, poderá obter todos os valores, poderá obter toda essa seção, esta seção aqui, temos chaves e valores. E você pode vê-los aqui. Se você simplesmente arrastar a partir daqui e disser adicionar, verá que está adicionando a esta, quais são as chaves, e está adicionando a esta, quais são os valores. Isso é o que fizemos antes. Vamos pegar todos os valores. Deixe-me deletar isso aqui. Deixe-me pegar todos os valores e dizer que para cada loop agora podemos repeti-lo porque isso é uma matriz. Agora, para cada loop, deixe-me deletar este e movê-lo para baixo. Vamos verificar qual equipe está viva que eu posso tirar disso e dizer que, na verdade, precisamos pegar isso primeiro e dizer o mesmo e perguntar se isso é igual a desfazer um terrorista, por exemplo E selecione este antiterrorista da BP , faça uma filial aqui Agora estamos pegando os valores aqui e perguntando: isso é um valor antiterrorista agora? Isso significa que um contra-terrorista está vivo. Se isso for verdade, podemos pegar esse contra-terrorista vivo e dizer mais. O que significa mais, mais? É a mesma coisa que dizer mais um e depois definir essa variável assim, assim, fazer isso é muito mais curto. Na verdade, é a mesma coisa que adicionar um. Você pode segurar o mouse sobre ele e dizer adicionar um ao valor especificado e, em seguida, defini-lo. Em vez de fazer tudo isso, podemos simplesmente fazer isso. Estamos pegando o antiterrorista vivo e adicionando um a ele porque acabamos de descobrir que esse valor específico é um antiterrorista. Ok, se for falso, significa que é um terrorista. Podemos pegar esse terrorista vivo e dizer mais e adicioná-lo aqui ao falso. Se for falso, é um terrorista que está vivo. Quando terminar o ciclo, o que precisamos fazer agora aqui na volta dizer quantos terroristas estão vivos e quantos antiterroristas estão Precisamos adicionar duas variáveis e ambas são números inteiros aqui Saídas, chame isso de contar terroristas vivos e chame isso de terroristas vivos e sem espaço Agora podemos adicionar essas duas variáveis aqui e enviá-las para o player no. Quando concluirmos o loop, continuaremos o código. Portanto, se eu voltar ao gráfico de ventilação e compilar aqui, continuaremos após o loop e agora sabemos quantos antiterroristas estão vivos e também sabemos quantos terroristas 181. Comunicado de vitória da equipe 13.08: Agora que sabemos quantos jogadores estão vivos, vamos pegar esses terroristas vivos e perguntar se isso é igual a zero Podemos fazer a mesma coisa com o terrorista. Pergunte se isso é igual a zero, a partir daqui e diga e use este ou ouro Se o terrorista ou os contra-terroristas forem zero Isso significa que precisamos escrever este texto aqui porque não há mais contraterroristas ou terroristas no mapa e precisamos dizer ou dizer quem venceu o jogo ou a rodada aqui Estamos perguntando, isso é igual a zero ou é igual a zero Se um deles for verdadeiro, vamos fazer uma ramificação e conectá-la. Se uma delas for verdadeira, precisamos reproduzir o anúncio. Então, vamos voltar aqui como um lembrete e ver o que chamamos de anúncio Então, aqui chamamos isso de atualizar o anúncio da vitória da equipe. Agora, para jogar isso, não podemos fazer isso diretamente no modo de jogo porque lembre-se de que o modo de jogo sempre roda no servidor. E é por isso que aqui nunca estamos replicando para o servidor, porque isso não faz sentido Ele já está sendo executado no servidor. O cliente não pode acessar o código dentro do modo de jogo. Além disso, lembre-se de que a interface do usuário está sendo executada no cliente. Cliente e servidor não conseguem se comunicar assim, como você não consegue. O cliente não pode simplesmente entrar no modo de jogo porque o modo de jogo só existe no servidor e não pode se comunicar com o cliente. Coisas aqui na interface do usuário; na verdade, precisamos de um meio para executá-lo. Ou precisamos executá-lo pela base de jogadores ou precisamos executá-lo pelo controle do jogador. Como estamos controlando a interface dentro do controle do jogador, estamos criando a interface dentro do controle do jogador. Dentro do controle de jogo. Faz mais sentido fazer coisas aqui com a interface do usuário. Vamos fazer isso. Vamos clicar com o botão direito do mouse. O que realmente precisamos fazer é simplesmente pegar o WB principal Precisamos chamar isso de uma atualização de anúncio da vitória da equipe. Vamos voltar ao anúncio da vitória da equipe de atualização do controlador de jogo . Isso é o que estamos tentando fazer. Vamos criar uma função ou um evento para isso. Vamos criar um evento personalizado chamado anúncio do update win. Deixe-me copiar isso para que eu não precise escrevê-lo novamente, porque agora temos que criar um novo evento para criar um novo evento clientes, pois precisamos executar algumas coisas de interface de usuário e clicar em Owning Client reliable Vamos executar o cliente aqui em cima. Ok, vamos reduzir isso. Vamos conectá-lo aqui. Na verdade, não é o M, esse é o errado. Atualize o anúncio da equipe I. Vamos excluir isso e, em vez disso, conectar isso. Agora precisamos passar isso por aqui e também precisamos executar o tempo de exibição. Faça a mesma coisa aqui em cima, apenas continuando com o fluxo. E agora precisamos chamá-lo aqui através do modo de jogo. Agora funciona. Podemos simplesmente chamá-lo um porque ele é executado no servidor. Lembre-se de que você só pode chamar eventos do cliente se estivermos atualmente no servidor. Estamos no servidor porque se esse evento estiver aqui, se eu voltar, se você chamar esse evento aqui pelo modo de jogo, ainda estamos no servidor. Isso quer dizer que você só pode executar este servidor, você só pode executar eventos do Cliente se estiver no servidor. Estamos fazendo isso. Vamos voltar ao modo de jogo. Agora, aqui, depois de verificarmos que um deles é zero, agora precisamos jogar isso. Precisamos pegar o controle ou todos os jogadores, porque precisamos exibir para todos os jogadores, precisamos exibir esse texto aqui para todos os jogadores. O que precisamos fazer é precisar de um loop for. É por isso que fizemos esses jogadores surgirem. Vamos pegar isso e dizer que, para cada um, porque realmente não nos importamos com quem está vivo e quem não está, na verdade, só queremos jogar para todos os jogadores gerados. aqui para cada um dos jogadores de spawn, vamos pegar o controlador It Então, podemos dizer novamente que obter referência ao controlador do jogador é a mesma coisa que temos feito até agora. E agora podemos chamar isso anúncio da vitória da equipe de atualização. Vamos chamar isso de anúncio da equipe de atualização. Esse aqui. Agora precisamos saber o que é a equipe. Também precisamos saber qual é o tempo de exibição. O tempo de exibição, novamente, eu já disse antes, é na verdade apenas o cronômetro de resposta Enquanto estamos respondendo, queremos mostrar isso na tela Deixe-me criar uma nova variável aqui no modo de jogo e dizer. Temporizador de resposta. E podemos simplesmente transformar isso em um flutuador e nos deixar conectá-lo aqui Agora também precisamos conhecer a equipe dessa equipe. Precisamos mostrar quem venceu o jogo. Para isso, só precisamos pegar esses jogadores vivos, porque quem está vivo é o time que venceu Podemos pegar isso e dizer valores. Vá em frente e selecione isso. Basta atacar a partir daqui e dizer recebe. Porque agora é como uma matriz. Podemos obter esse valor. Vamos obtê-lo do primeiro jogador que encontrarmos aqui. Não é muito importante saber quem é o jogador porque eles estão todos vivos, o mesmo time que venceu. Então, vamos pegar o primeiro jogador que pudermos encontrar. E então podemos conectar isso aqui. O jogador vivo é aquele que venceu. Vá em frente e conecte tudo. E eu vou apenas fazer anotações da rota traseira aqui. E aqui está. Então, agora estamos realmente terminados. Então, estamos trazendo todos os jogadores que foram gerados para o jogo Estamos adotando todas as leis de controle de jogo deles. E estamos exibindo para todos eles essa equipe de atualização que anunciamos. E o que estamos mostrando é que quem está vivo, esse é o time que venceu Então, agora clicamos no cronômetro de resposta. E vou definir esse cronômetro de resposta para talvez algo em torno de 3 segundos, por enquanto, para compilar E agora vamos clicar em Play e testar. E vamos jogar o jogo aqui. Vou selecionar terroristas aqui, ou contraterroristas aqui, ou contraterroristas E eu vou selecionar terroristas, vou me mover na frente do contraterrorista Agora eu sou o contra-terrorista, vou atirar no terrorista. Agora deveria dizer antiterrorista, mas agora nada é exibido. Então, deixe-me fechar isso e ver o que está acontecendo. Tudo bem, antes de continuarmos, lembre-se de definir esse cronômetro de resposta para algo que não seja zero, talvez algo como 3 segundos. Além disso, precisamos configurar os jogadores para estarem vivos quando eles aparecerem, porque no momento nada está acontecendo Nunca chamamos esses eventos de Aqui, vamos compilar tudo, salvar tudo e ir para a base de jogadores sempre que esse jogador aparecer E isso está dentro desse gráfico de eventos. Comece a jogar sempre que esse jogador aparecer e definimos a saúde desse jogador Eu também quero configurá-los para este mapa vivo. Lembre-se de que, agora, no cliente, esse início de jogo é executado tanto no cliente quanto no servidor. Vai nos dar um dinheirinho se ligarmos diretamente para isso. Como o modo de jogo só pode ser acessado pelo servidor, não podemos acessá-lo pelo cliente. Na verdade, precisamos criar um evento de servidor. Vamos criar um novo evento personalizado por meio do servidor. No primeiro, preciso adicionar duas camadas de mapa ativo e executá-lo por meio do servidor. Confiável. Precisamos criar o outro também, chamado servidor de duas camadas spon array porque também temos esse E precisamos executar isso no servidor também. Ok, aqui precisamos obter a referência do modo de jogo. Não acredito que criamos uma variável para isso, como criamos para a lei de controle do jogador. Na verdade, vamos fazer isso também no modo de jogo. Eu vou afastar isso. Digamos que obtenha o modo de jogo. Na verdade, essa é a referência. Vamos colocar o modo de jogo aqui embaixo. Esta função, execute-a por meio desta referência de obtenção do modo de jogo. Vamos reduzir isso. Vamos em frente e conecte-o. Vamos promover isso para nossa variável e chamá-la de modo de jogo. Ok, vamos conectá-lo. Não precisamos replicar isso porque, de qualquer forma, isso só é executado no servidor Vamos agora aqui, pegar essa variável do modo de jogo. Vamos chamar a adição aos jogadores de mapa ao vivo. Vamos conectar isso a este. Digamos que modo de jogo. Novamente, vamos pegar essa variável de modo de jogo que temos. Digamos que adicione à matriz de spawn dos jogadores. Vamos entrar e nos conectar como antes. Agora, o que podemos fazer com isso é chamá-lo aqui no jogo Begin. Podemos chamar o servidor de adicionar camadas a um mapa ativo. E também podemos chamar o adypawnarray. Precisamos definir o jogador. Lembre-se de que já estamos dentro da base de jogadores, então podemos simplesmente dizer self e nos arrastar novamente à distância. Agora nós os adicionamos sempre que aparecem. Estamos adicionando o jogador ao mapa ao vivo, mas também estamos adicionando o jogador aos jogadores que surgiram Então, acompanhamos quantos jogadores estão realmente dentro do mapa. Sempre que o jogador morre, precisamos adicioná-lo à morte também. Se eu simplesmente for até aqui, vá até a armadura de saúde e danos Se simplesmente morrermos, lembre-se de que reaparecemos aqui depois dessa, onde diz que não há armas para soltar E nós respondemos, o jogador. Vamos agora desconectar isso e afastar isso. O jogador, sempre que o jogador morre e deixa cair todas as armas. Vamos adicionar o jogador a esse evento do modo de jogo. Isso já está sendo executado no servidor, então não precisamos criar um evento de servidor. Essa referência de modo de jogo que fizemos, digamos, Adicionar jogador, ou deixe-me ver como eu a chamo. Se eu for para o modo de jogo, adicione o mapa morto de dois jogadores. Vamos atacar a partir daqui e dizer que adicione dois jogadores mortos e conectados. Agora precisamos dizer quem é o jogador? É eu mesmo, ainda estamos no jogador. Agora vamos adicionar esse jogador ao mapa morto sempre que o jogador morrer. A razão pela qual não está sendo impresso para mim é que, na verdade, eu adicionei esse código aqui no mapa vivo de dois jogadores. E eu preciso ligar aqui porque preciso verificar toda vez que um jogador morre. Deixe-me desconectar esse código aqui. Deixe-me copiar tudo isso que escrevi e , em vez disso, vou movê-lo para este e conectá-lo. Um pequeno erro, apenas certifique-se de que isso não aconteça com você também. Adicione-o ao deadmp do jogador, porque precisamos verificar toda vez que um jogador morre Vamos compilar e clicar em jogar agora. E eu vou maximizar isso. Selecione Contraterrorista aqui, terrorista aqui. E então eu vou ficar aqui ao ar livre como contra-terrorista. Agora vou atirar no terrorista. Só vou me aproximar um pouco mais. Se eu atirar no terrorista, agora aparece a vitória antiterrorista em ambas as telas. Agora ele vai desaparecer após 3 segundos porque é isso que eu coloquei no meu cronômetro. E vamos tentar testá-lo com mais jogadores. Se eu escolher quatro jogadores e jogar o jogo, aqui estão eles. Vou selecionar terrorista, terrorista e este contra-terrorista. No meu outro monitor, eu acredito ou está por trás deste. Há mais um. Aqui está. E eu vou selecionar um antiterrorista para este também. Agora temos dois contra-terroristas e também temos dois terroristas Deixe-me ficar aqui ao ar livre para todos eles e, como o contraterrorista, fique aqui. Agora, como terrorista desta vez, eu vou até o spawn, vamos tentar matar aqui e ver o que diz Agora, se eu matar esse contraterrorista, nada será exibido porque nem todos os jogadores estão mortos aqui. Como contra-terroristas que estão vivos, vou atirar nesse terrorista. Agora esse terrorista está morto e ainda somos dois jogadores vivos aqui como contraterroristas. Se eu agora for até o terrorista e atirar nesse terrorista, agora diz que o contra-terrorista venceu. Em todas as telas, tudo está funcionando perfeitamente. Agora podemos ir em frente e somar as pontuações da equipe antes de respondermos aos jogadores. 182. 13.09 Adicionando a pontuação da equipe: O que precisamos fazer agora é somar a pontuação da equipe. Se voltarmos para a interface principal, lembre-se de que marcamos a pontuação da equipe aqui. Fizemos com que esses dois eventos atualizassem a interface de pontuação terrorista. E fizemos essa única atualização na interface de pontuação antiterrorista. Vamos adicioná-los também à lei negra de controle porque, novamente não podemos acessar o modo de jogo como cliente aqui. Vamos para o controle do player quando este for exibido, sempre que for reproduzido. Sempre que mostramos o anúncio da vitória da equipe, geralmente queremos incrementar um deles Na verdade, deixe-me editar aqui após o anúncio da vitória da equipe de atualização. O que podemos fazer aqui é perguntar qual equipe tem uma. Podemos arrastar isso e dizer igual a isso. Se isso for igual a contraterrorismo, vamos criar uma filial aqui, vamos conectá-la. Vamos pegar essa página principal do WB mais uma vez e colá-la Sempre que for o contra-terrorista, queremos atualizar a interface do usuário da pontuação antiterrorista sempre que for o terrorista Sempre que isso for falso, queremos atualizar a interface do usuário da pontuação do terrorista. Vá em frente e conecte isso ao falso. Agora também precisamos conectar a pontuação. Vamos fazer um alfinete aqui. Porque precisamos disso. Vamos transformá-lo em um número inteiro, chamá-lo de pontuação. Eu só vou colocá-lo abaixo da equipe aqui. Mova isso para baixo. Então eu vou arrastar isso para a partitura. Vamos apenas afastar isso para que fique melhor. E vou clicar aqui para criar um nó de redirecionamento e torná-lo assim. E vá em frente e conecte isso também. Ok, agora temos a pontuação também. E vamos compilar. E também aqui em cima, lembre-se de arrastar a partitura até aqui. Vou subir um aqui abaixo da equipe. A última coisa está dentro do modo de jogo. Dentro do modo de jogo, agora temos esse pino de pontuação. E precisamos somar a pontuação para a pontuação. É a pontuação antiterrorista ou terrorista que precisamos inserir aqui. Novamente, precisamos partir disso e dizer: isso é igual ao terrorista? E vamos afastar tudo isso para que tenhamos mais espaço para trabalhar. Estamos perguntando se isso é igual a terrorista ou é igual a contraterrorista? Dependendo disso. Vamos selecionar arrastar e dizer selecionar Integer e inserir esse touro Já fizemos isso antes, vamos selecionar A. Se isso for verdade, vamos criar novas variáveis. Vamos fazer duas variáveis, uma chamada Da, pontuação terrorista e terrorista. Vamos transformar isso em um número inteiro. Vamos fazer um novo. Vou chamar isso de pontuação terrorista. E isso também é um número inteiro para essas duas pontuações, sempre que for o contraterrorista Então, ele vai escolher um, vamos colocar a pontuação antiterrorista aqui. Sempre que for o terrorista, vamos pegar a pontuação terrorista e colocá-la aqui. E então ele vai selecioná-lo dependendo do que é essa pesquisa e inserir esse número de pontuação aqui OK. Vamos agora resolver isso juntos. O que precisamos fazer agora é defini-las porque, no momento , a pontuação terrorista e antiterrorista é apenas zero. Nós realmente não estamos fazendo nada agora. Vamos criar uma nova função, e eu vou criar uma nova função aqui em cima. Vamos chamar isso de pontuação da equipe. Na verdade, podemos usar isso vivo se os contra-terroristas estiverem vivos aqui. Podemos pegar essa e dizer se é igual a zero, fazer uma ramificação e conectá-la. Se a quantidade de antiterroristas vivos for igual a zero, isso significa que precisamos atribuir um ponto à pontuação antiterrorista. Podemos considerar isso novamente, digamos mais, mais ou incrementado em um No entanto, se isso for verdadeiro ou falso, significa que o contraterrorista está realmente vivo e não é igual a zero. Isso significa que podemos pegar essa pontuação antiterrorista e dizer mais, mais, porque provavelmente é a contagem de terroristas que estão vivos e não o terrorista Como gostamos de ter chegado a esse ponto do código, vamos apenas conectá-lo. Agora vamos voltar ao gráfico de van e vamos adicioná-lo depois deste, porque depois de verificar que um deles é realmente igual a zero, podemos então atribuir um ponto a um deles. Podemos pegar essa função e conectá-la aqui. Agora faz sentido, porque agora estamos perguntando quem é que é zero? Se o contra-terrorista vivo é igual a zero, então precisamos dar um ponto ao terrorista. No entanto, se isso for falso, isso significa que o terrorista é na verdade igual a zero. Então, precisamos conceder um ponto aos contraterroristas e agora concedemos um ponto e ele será bloqueado aqui Ok, isso deve funcionar perfeitamente. Agora vamos salvar tudo e clicar em Play. E verifique se isso está funcionando. Na verdade, vou reduzir a quantidade de jogadores para talvez algo como três. Vou selecionar terroristas neste caso, terroristas neste e contraterroristas neste aqui Agora, como contra-terrorista, vou até a base terrorista Na verdade, vou minimizar isso. Então eu posso ver aqui em cima e detalhar. Não sei por que ele continua aparecendo na parte superior da minha tela, então deixe-me matar um deles Ok, nada aconteceu porque um ainda está vivo e eu vou matar esse cara aqui. Você pode ver que o terrorista agora ganha um ponto. Isso não é verdade, porque agora eu sou na verdade um contra-terrorista. Se você der uma olhada aqui embaixo, a pontuação antiterrorista está inserida incorretamente A pontuação terrorista está inserida incorretamente. Se eu voltar à pontuação do prêmio e der uma olhada, esse é o contra-terrorista, e se for igual a zero, vamos atribuir um ponto à pontuação terrorista. Tudo parece correto. A outra coisa é porque isso foi desconectado porque escrevemos esse pull aqui Vamos reconectar isso porque, na verdade, é o antiterrorista que tem um, mas está selecionando terrorista por padrão Deixe-me arrastar isso aqui novamente, assim como antes, e você pode criar um nó de rota. Agora está conectado. Vamos verificar para ter certeza. Aqui no controlador Apple, ele também está conectado. Este aqui está desconectado porque, novamente, fizemos isso aqui embaixo Vamos conectá-lo. Agora deve funcionar. Certifique-se de que tudo esteja conectado. E vamos clicar em jogar novamente e selecionar Terrorista, Terrorista, Contra-terrorista mais uma vez. E eu vou até o spawn novamente. Ok, aqui eu matei os primeiros terroristas e vou até o segundo terrorista e mato esse jogador E se eu maximizar a tela para que você possa ver agora diz que o combate ao terrorismo venceu. E isso adiciona um ponto para todos os jogadores. Além disso, acrescenta pontos para o terrorista. Isso acrescenta um ponto ao contraterrorista. Isso está funcionando corretamente agora. 183. 13.10 Respawning the Players: Certo? Então, o que nos falta agora é responder aos jogadores, vamos fazer isso aqui embaixo O que podemos fazer aqui é atrasar porque não queremos responder aos jogadores imediatamente. Na verdade, queremos responder após esse cronômetro de resposta. No momento, esse cronômetro de resposta está configurado para 3 segundos, então ele atrasará o código em 3 segundos. Depois disso, responderemos a todos os jogadores mais uma vez. Vamos dar a esses jogadores o caminho de cada loop, com este que chamaremos de respawn que criamos no jogador com essa armadura de saúde Lembre-se, fizemos esse renascimento, vamos chamar assim. Vamos até o jogador e reapareça. Agora, na verdade, estamos respondendo a todos os jogadores e podemos nos comunicar com Porque este está sendo executado no servidor. Vai passar por aqui. Percorrendo o servidor e fazendo tudo isso que fizemos antes, respondendo aos jogadores Lembre-se de que também temos essas variáveis, os dados dos jogadores e os jogadores vivos. E precisamos atualizá-los também. Antes que eu demore, vou seguir em frente. Vou pegar esses jogadores vivos e os jogadores mortos, e vou eliminá-los aqui. Vou eliminar os jogadores vivos e vou afastar isso. Também vou limpar o mapa para os jogadores mortos. Ambos estão redefinidos. Então, vamos atrasar o código. Assim aqui. Vou mover isso para baixo conectado aqui. Agora vamos atrasar o código. Sempre que adiamos, precisamos adicionar os jogadores novamente aos jogadores vivos, caso contrário, ninguém estará vivo aqui. E ele reservará aqui para responder. Antes de respondermos aos jogadores, quero adicioná-los. Lembre-se, dentro do player, acabamos de criar esse gráfico de eventos. Acabamos de criar este recentemente, para adicionar aos jogadores um mapa ao vivo, precisamos chamar esse no servidor de list rake e, digamos, o servidor adiciona aos jogadores um mapa ao vivo Precisamos especificar quem é o jogador, é só esse aqui. Então, podemos seguir em frente e responder. Vou apenas arrastá-lo para baixo. E, novamente, clique duas vezes aqui para fazer uma anotação da rota para que você possa ver a diferença entre as duas. Aqui vamos nós. Agora vamos limpar esses mapas, garantir que não estejam grampeados Então, podemos atrasar no cronômetro de resposta. Então, vamos esperar um pouco e depois responderemos aos jogadores e os adicionaremos a esse mapa vivo. Mais uma vez, vá em frente e compile agora dentro do player o que fizemos antes aqui na resposta a este código aqui, podemos simplesmente deletar Na verdade, não estamos realmente usando isso, este, vou excluí-lo porque não uso mais essa string de impressão. Isso é o que temos. Vamos compilar, salvar tudo e clicar em reproduzir novamente. Selecione Terrorist. Selecione Terrorista, Contra-terrorista, por exemplo. Agora eu só vou para a base. Deixe-me pegar esse AK e eu vou atirar nesse jogador agora. Agora diz que o terrorista venceu e eu vou ter razão. Então, todos nós responderemos. Aqui estou eu como o terrorista nasce com o outro terrorista aqui Esse também é o terrorista. Aqui está o contra-terrorista. Responda aqui como terrorista. Agora, se eu for até o contraterrorista e atirar no contra-terrorista, então ele deveria dizer que o terrorista venceu. Vamos conseguir o segundo ponto e todos responderemos novamente. Ok, então isso está funcionando perfeitamente e esse é o contra-terrorista e agora eu vou matar esse cara aqui. Agora você vê o contra-terrorista vencer. Tudo bem, então tudo está funcionando corretamente e também estamos respondendo aqui no spawn terrorista e no aterroristpaon, estamos concedendo a quantidade correta de pontos ou, na rodada aqui, pontos redondos sempre que vencemos a rodada 184. 14.01 Adicionando o Impulse on Weapon Drop: Ok, então agora estamos quase terminando. E o que eu quero fazer nesta seção é melhorar o jogo com alguns pequenos elementos que precisam de alguns ajustes. Por exemplo, agora, quando soltamos a arma, ela cai logo abaixo Além disso, esta arma está caindo logo abaixo de nós. Em vez de fazer isso, quero soltar a arma na nossa frente, como se a estivéssemos jogando na nossa frente Para fazer isso, vamos até a base de jogadores novamente e dar uma olhada na lógica de lançamento de armas aqui. Criamos a arma de soltar, se eu apenas estender isso e incluir isso também, essa é a lógica da arma de soltar que criamos. Esta é a arma a ser notificada se clicar nela, ela nos leva a essa função. Vamos adicionar o código aqui. Sempre que lançamos a arma, estamos retirando a arma do jogador Definindo a colisão como física somente para a arma, e então estamos simulando Depois de simularmos a física, podemos adicionar um impulso porque, se você não tem física, pode adicionar um Não podemos adicioná-lo antes dessa etapa. Ls, você receberá um erro. Bem, basta adicioná-lo depois disso. Basicamente, pegando essa arma para desenhar e depois pegando variável de arma que estamos usando. É o mesmo que este. Basicamente, vamos partir disso e dizer impulso. Em seguida, adicione esse impulso que é a física. Você pode ver aqui se você conectá-lo, clique duas vezes aqui para criar um nó de redirecionamento O que podemos fazer agora é adicionar física. Se você escrever algo, digamos uma ou 5.000 coisas muito extremas, podemos pegar essa mudança de velocidade O que isso faz é remover a massa do ator. Não estamos dando uma olhada na massa, estamos ignorando a massa, definindo essa mudança de velocidade Se você jogar alguma coisa agora, você pode ver que ela voou lá e até voltou para mim Você pode ver que eu posso jogar isso agora. E até me lembrei, é um mecânico muito legal Essa é a mudança de velocidade que criamos aqui para fazer com que, na verdade, estejamos jogando para o lado Olhamos aqui e, na verdade, estamos jogando para lá para fazer com que ele jogue na nossa frente, onde estamos olhando Podemos clicar com o botão direito do mouse e dizer get actor forward vector. Lembre-se de que estamos usando isso. Se você voltar ao gráfico da van e ao movimento, nós o usamos aqui. Obtenha o vetor de avanço do ator para obter o vetor de avanço do jogador para que possamos avançar. Vamos voltar ao drop repoify e pegar esse vetor de avanço do ator get E vamos agora quebrá-lo. Então eu posso usar o X, Y e Z novamente. Você pode simplesmente clicar com o botão direito do mouse se quiser e dizer split struct pin. Isso é a mesma coisa, eu só estou fazendo isso dessa maneira. Então eu vou fazer direto daqui e dizer fazer vetor. E faça esse vetor, você também tem XY e Z porque a única coisa que eu quero modificar é o x. Andy, vou deixar z ser o que quer que seja agora. Eu não quero jogar para cima. Vamos modificar o xy x agora mesmo. Vamos pegar isso. Agora precisamos impulsionar. No momento, é zero. Vamos pegar isso. E é zero. É um. Vamos multiplicar esse por 600. Vamos multiplicar esse por, digamos, 600 também, assim E então podemos conectá-los de volta ao x. O que fizemos aqui foi pegar o x, multiplicá-lo por 600 e colocar de volta o valor aqui Agora adicionamos um pouco de impulso, mas para o valor Z, permanecemos os mesmos Ok, vamos organizar isso aqui e afastar isso. Ok, vamos compilar. Vamos clicar em jogar agora, vamos ver o que acontece se eu pegar algo e jogá-lo na minha frente. Veja, agora estamos realmente jogando a arma na nossa frente Seja qual for a direção para a qual estamos olhando, estamos jogando a arma à nossa frente. Ok, legal. É muito melhor do que jogá-lo aqui embaixo de nós É um mecânico legal de se ter. Ok, foi isso. Vamos salvar tudo. Muito simples, correção ou melhoria. Mas isso faz muito pelo jogo. Vamos passar para a próxima. 185. 14.02 Melhorando o peso da arma: Então, aqui estou eu de volta ao jogo agora. Você pode ver quando eu jogo alguma coisa, se eu jogo essa arma, quando ela cai no chão, ela salta E esse também. Parece que a arma não é realista. É muito leve. Isso não deveria saltar tanto no chão. Talvez devesse ficar parado muito mais rápido. Como se o peso dessa arma fosse muito baixo e muito leve. Também é um pouco irreal. A segunda coisa é que eu posso ver a cápsula. Eu acho que aqui é um jogo escondido. Eu também quero fazer isso no jogo escondido da cápsula base de armas. Então, eu não acho que a arma seja leve. O que você pode fazer é algo novo com o qual nunca trabalhamos antes. Se você abrir a arma aqui, base de armas. Na base da arma, você pode clicar na arma e rolar para baixo até a colisão Você tem algo chamado material físico. Com o material físico, você também pode ajustar as configurações de atrito e de ressalto O que queremos fazer é, na verdade, criá-lo dentro dessa pasta porque não temos nenhuma pasta para isso. Poderíamos criar uma nova pasta, mas vamos fazer isso dentro da base de armas. Podemos escrever, clicar em Ir para Física e depois adicionar este chamado Material Físico e Criado. Vá em frente e selecione este. Vou chamá-la de PM para material físico, podemos chamá-la de base de armas ou algo parecido. Basta dar um nome a ele. Abra agora, você pode ver aqui que podemos ajustar o atrito e podemos ajustar o atrito estático Também podemos ajustar a restituição. E você pode ver que a restituição também é chamada de elasticidade da superfície Se eu simplesmente colocar isso em zero e salvar, e eu for para a base de armas em vez da base de armas. Se você clicar na arma e na colisão, seleciona esse novo material físico. Nós o chamamos de Pm. Essa única base de armas. Você vai em frente, compila e clica em jogar. Agora você pode ver que se eu deixei cair essa arma no chão, ela está quicando muito menos do que A outra coisa que quero fazer é que, em vez de zerar, vou colocá-lo em algo como 0,15. Inicialmente, era 0,3, talvez metade Então, para o atrito, vou colocá-lo em 25,25. Então, quanto maior for, maior será o atrito e também não vai saltar e se mover Ok, vamos clicar em jogar e ver o que acontece. Se soltar essa AK, agora é isso que acontece, ok. Parece que tem muito mais peso em uma arma como essa. Parece muito melhor do que antes. Se você quiser, você pode até mesmo aumentar esse atrito, atrito estático, você pode brincar com ele E acho que está tudo bem por enquanto. Vamos fechá-lo e passar para o próximo. 186. 14.03 Removendo o Reload SFX no Weapon Drop: Tudo bem, então uma coisa aqui agora, um dólar é se tentarmos atirar em algo, recarregarmos e soltarmos a arma, por exemplo Você pode ver que consigo ouvir o som de recarga Mesmo quando eu o equipo e deixo cair, consigo ouvir o som de recarga assim Eu posso ouvir isso quando eu até mesmo deixo a arma cair no chão. Precisamos corrigir isso. Se formos até a base de jogadores, vamos dar uma olhada no que acontece quando eu equipo uma arma Está tocando um som. Se você for ao saque, equipe e solte a arma e siga sua lógica de equipamento Aqui estamos reproduzindo essa montagem de animação. Lembre-se de que os efeitos sonoros estão , na verdade, dentro das montagens da animação Se eu for até as animações de ativos aqui dentro, se pesquisarmos, podemos pegar o rifle de recarga, por pegar o rifle de recarga Lembre-se de que os efeitos sonoros estão aqui dentro. Na verdade, não podemos parar o efeito sonoro aqui porque ele está dentro da montagem da animação quando soltamos uma arma Na verdade, quero impedir essa montagem de animação reproduzida porque não quero reproduzir todos esses efeitos sonoros Se eu for para a base de jogadores. Agora vamos para a lógica de lançamento da arma. Aqui estamos soltando a arma e procurando por uma arma no inventário Sempre que encontrarmos uma arma no inventário, vamos colocá-la aqui. Na verdade, quero adicionar aqui o código que fará sentido sempre que encontrarmos uma arma no inventário e estivermos prontos para soltá-la. Deixe-me afastar tudo isso um pouco e deixe-me organizar isso aqui. Agora, o que queremos fazer é fazer uma transmissão múltipla para essa arma de lançamento Ainda não temos um, então, na verdade, posso simplesmente criar um se eu mover essa parte para baixo e clicar com o botão direito do mouse e criar uma transmissão múltipla de eventos personalizada Porque eu quero parar com isso para todos eles e dizer solte a arma para este multicast O que eu quero fazer é primeiro configurá-lo para multicast e confiável Então, vamos usar essa malha para encontrar a montagem de animação que está sendo reproduzida no momento Precisamos encontrar a classe de animação primeiro. Se você pesquisar, acredito que instância de animação, obtenha uma instância. Portanto, você precisa primeiro obter a instância de animação. Então você pode dizer montagem. Então você pode ver que tem muitas funções que podem ser usadas com a montagem Mas o que queremos fazer é parar a montagem. Montagem, pare e vá e conecte. Para este, precisamos conectá-lo novamente aqui. Então, não podemos fazer isso agora. Para o alvo, é a instância, podemos chamá-la apenas de instância para a montagem Podemos simplesmente conectá-lo e eu vou chamá-lo de equip, Equip montage, Equip montage, Equipe a montagem de armas. Podemos até chamar isso de arma aqui, então faz sentido. Ok, agora que temos esse, podemos chamá-lo aqui. Vamos chamar MC Drop Weapon. E vamos movê-lo para cá. Agora podemos nos conectar a partir do servidor. Podemos conectar a instância de animação. Também podemos obter a montagem. Se sairmos daqui e dissermos montagem, vamos ver aqui. Podemos dizer que obtenha a montagem ativa atual. E vamos pegar essa montagem que está sendo reproduzida atualmente e podemos colocá-la aqui Deixe-me apenas fazer anotações de rota para este. Ok, agora que está conectado , vamos salvar tudo. Agora mesmo. Isso dá a você uma era dizendo algo aqui. Vamos clicar em Arquivo e atualizar todas as notas. Acho que algo está errado. Só precisamos atualizar todas as notas, desconectá-las e conectá-las aqui, compilar o box. Às vezes , não faz sentido, não tenho ideia do porquê, mas certifique-se atualizar todas as notas e poderemos Ok, vamos jogar agora. Porque agora isso deveria acontecer. Se eu jogo, pego uma arma, veja isso por exemplo. Vamos agora trocar de arma e soltar. Agora você pode ver que a animação de recarga ou equipamento está parando Isso é bom. E se eu recarregar agora se eu recarregar e Isso está corrigido agora. Ok, isso está corrigido agora. Não faz nenhum sentido tocar o som. Se estivermos soltando a arma agora, adicionaremos mais tarde algumas coisas que podem incomodar isso O que eu quero que você faça é, antes de fazermos essa lógica, eu quero que você tire desse conjunto a montagem ativa atual, certifique-se de que ela é válida Antes de realmente fazermos isso, pergunte: isso é válido? Vamos simplesmente afastar tudo isso. Deixe-me , na verdade, recuar também e perguntar primeiro se isso é válido? Se for válido, vá em frente e pare com theta, ou pare esta montagem aqui E se não for válido, vá em frente e faça o que você fez antes. Deixe-me criar algumas notas de redirecionamento para esta e aproximá-la, assim E agora isso acabou. Vamos ignorar essa arma MC Drop. Se isso não for válido, não temos nada aqui. Vamos compilar, vamos salvar tudo. E agora isso acabou. Podemos passar para a próxima. 187. 14.04 Adicionando anúncio da equipe Win SFX: Então, agora, o que eu quero fazer é sempre que jogarmos aqui e quando matarmos alguém e vencermos a rodada, quando diz vitória antiterrorista ou vitória terrorista, eu quero reproduzir um efeito sonoro. Seria mais legal do que agora, onde não temos nada O que eu quero que você faça é ir ao mercado e acessar o conteúdo gratuito da Epic Games aqui. Acho que estava na página sete, há algo chamado Peagon Mail on Você também pode procurá-lo se quiser. Neste Perregon Ono, você pode pegar isso e adicionar isso ao projeto Vou dizer mostrar todos os projetos porque, no momento, não é compatível com o motor N 5.2, vou mostrar todos os projetos Selecione o projeto Cada strike e selecione a versão mais recente aqui. Vá em frente e clique em dois projetos. Deixe-me minimizar isso ou apenas esperar até que termine Depois de terminar, vamos minimizar isso. Vamos entrar em nosso próprio projeto. Eu só vou descer até aqui. E aqui está, o Paragon mail Anons. Vamos apenas adicionar isso à pasta Marketplace. Nós nos mantemos organizados como antes. Agora podemos abrir a pasta Marketplace e acessar esse e-mail do Paragon Sons Vamos ao Sound. Agora que temos o som para este, podemos fazer algo legal primeiro. Antes de fazer isso, eu posso simplesmente selecionar tudo dentro daqui. Clique com o botão direito em Ações de ativos e edite em massa por meio da matriz de propriedades. Como quero reduzir o volume do som de todos eles para que não fique muito alto neste curso, vou reduzi-lo para um multiplicador de volume 20.1 Feche-o e salve tudo aqui. Só precisamos de dois sons no momento. Precisamos da derrota. Temos essa chamada derrota. Você está derrotado. É quando você perde. E também temos algo chamado vitória. Eu acredito que é esse, você é vitorioso. Eu quero jogar esses dois. Vamos fazer isso. Vamos ver as plantas E a melhor coisa está aqui no modo, porque dentro do modo de jogo jogamos isso. Lembre-se de que acabamos de fazer isso. E isso atualizará o anúncio da vitória da equipe. Vamos clicar duas vezes nele e ir até o controle do player. Agora, dentro do controlador do player, estamos executando este cliente avistado Queremos reproduzir o som no local do cliente , porque sempre que você perder, ele tocará um som Sempre que você ganhar, ele tocará outro som. Não queremos tocar o mesmo som para todos. Isso é o que você fez com um multicast. Você tocou o mesmo som para todos por meio de um multicast Mas, para isso, queremos reproduzir um efeito sonoro de vitória quando vencermos e queremos perder o efeito sonoro para o jogador que perdeu. É do lado do cliente. Para isso, podemos realmente fazer isso aqui porque sabemos quem venceu. Aqui conhecemos a equipe vencedora. O que queremos fazer simplesmente é reproduzir som. Em vez de reproduzir um som em um local, vamos tocar um som dois D, apenas para o jogador que está ouvindo esse som agora. Que som estamos tocando? Vamos arrastar a partir disso e dizer Selecionar, então vamos fazer com que, quando você perder, você ouça um som. Quando você ganha, você ouve outra coisa. Agora podemos usar isso, na verdade, podemos arrastar a partir disso e dizer igual assim. Lembre-se de reconectar isso. Sempre que a seiva é vendida. Isso vai incomodar. Reconecte-o. Agora queremos comparar essa equipe vencedora. Essa equipe vencedora é igual à equipe em que estou atualmente? Agora estamos comparando essa equipe vencedora com qualquer equipe em que eu esteja agora. Se for o mesmo, vá em frente e conecte-o agora mesmo ao select. Estamos comparando a equipe vencedora com a equipe em que estou agora. Se forem iguais, se eu tiver, vamos jogar isso. Som. A equipe vencedora é minha equipe. Eu quero jogar a vitória. Som. E eu acredito que é esse único congresso. Essa. Talvez você seja Victoria. Sim. Então, desta vez eu quero jogar a vitória. Som. Porque a equipe vencedora é na verdade a equipe em que estou agora. No entanto, se não for o caso, quero jogar a derrota da equipe derrotada. Som E é esse. Ok, agora estamos tocando o som correto. Vá em frente e compile. E deveria ser isso. Vamos jogar. E, na verdade, vou colocar dois jogadores. Agora eu vou jogar e vou minimizar isso à frente. Na verdade, eu posso fazer isso aqui. Talvez assim e assim. E vamos seguir em frente e selecionar terrorista, contra-terrorista. Agora, como contra-terrorista, vou até lá, vamos atirar no terrorista. Você é vitorioso. Diz que você é vitorioso. Sempre que você ganhar, agora vou atirar no terrorista. E sempre que eu atiro no terrorista e morro, vou mudar rapidamente para a janela terrorista. Então eu posso ouvir se o terrorista está dizendo derrotado. Então você pode ouvir dizer que foi derrotado aqui do lado terrorista. Sempre que eu mudo para ele rapidamente, agora ele está funcionando. É dizer derrotado sempre que você perde e dizer vitória para o jogador vencedor. Vamos para o próximo. 188. 14.05 Adicionando indicador de sucesso do inimigo: No momento, é um pouco difícil saber se você atingiu o jogador de longe. Se eu atirar nesse jogador, posso ver o pequeno efeito. Mas se houver muitos jogadores e você estiver atirando por aí, é um pouco difícil saber se você acertou o jogador. Precisamos de um indicador para saber se realmente atingimos o jogador ou se batemos atrás do jogador. Vamos acrescentar isso. Vamos encerrar isso. E o que eu quero que você faça é abrir os materiais da causa aqui dentro. Quero que você acesse a pasta UI em ícones e incluí esta para você, a faísca de ícones Vamos para a pasta UI e para dentro de seus ícones, e vamos colocar isso na pasta. Abra-o, vá para o grupo de texturas, altere-o para UI e altere as configurações de compressão para a interface do usuário. Vamos fechá-lo. Agora vamos abrir a cruz, essa, o widget, planta que fizemos aqui dentro Vamos adicionar essa imagem. Vou apenas pesquisar a imagem adicionada ao painel da tela e vou clicar nela agora. Coloque-o no centro, assim como a cruz. Coloque o ponto de ancoragem no centro. E o alinhamento deve ser 0,50 0,5, então está no E defina a posição para 0,0. Em seguida, clique também no conteúdo Tamanho Dois. E agora está totalmente correto. Você pode clicar na outra imagem, a cruz aqui, para ver a diferença. Se você quiser torná-lo mais organizado, você pode chamar essa imagem, você pode clicar na outra. Vou chamá-la de imagem Spark. Vá em frente e compile no Image Spark. Vou mudar a imagem para esse ícone de faísca que acabamos de importar E eu vou fazer o tamanho dele ser algo como 70 por 70, eu acho. O Crosier. 60 por 60. Então, vou torná-lo um pouco maior e vou colocá-lo atrás do báculo Eu não vou colocá-lo na frente da cruz. É assim que parece sempre que filmamos. Vamos fazer com que os marcadores apareçam. Vamos clicar no Spark. Por padrão, ele está oculto. Torne-o oculto por padrão. Vamos aqui, defina como variável, certifique-se de que podemos editá-la. Agora vamos ao gráfico. Vou deletar tudo isso. Isso é muito, muito simples. Vamos criar um evento personalizado e chamá-lo de Show. É que eu gosto disso. Agora vamos pegar essa faísca de imagem. Vamos definir a visibilidade. Defina a visibilidade para que não seja testável, para que fique visível e o mouse não possa interagir com ela Agora, depois de um pequeno atraso após 0,1 segundos, quero fazê-lo desaparecer. Ele vai aparecer na tela por 0,1 segundo e depois vai desaparecer. Isso só vai nos indicar que atingimos o inimigo. Essa é a única coisa que queremos fazer. Vamos encerrar isso. Agora vamos abrir o jogador e ir para onde quer que atinjamos outros jogadores do inimigo. Mas vamos atirar e recarregar a arma aqui. Sempre que filmamos, traçamos a linha e, na verdade, atingimos o jogador aqui. Lembramos que verificamos se não é o companheiro de equipe que estamos atirando Se não for o companheiro de equipe , estamos atirando em alguém Neste momento, queremos jogar este site do cliente porque eu só quero mostrá-lo para o jogador que está realmente filmando. Este é chamado de Shoot Weapon. Na verdade, vou fazer um cliente se sentar. Eu só quero adicioná-lo aqui, clique com o botão direito. Crie uma nova arma de tiro CL para eventos personalizados, com o lado cego. Execute-o possuindo um cliente confiável. Vou simplesmente descer até aqui e pegar a referência ao controlador do player que fizemos. Vamos ver se consigo encontrá-lo. Este controlador de um jogador. Vamos pegar o controlador do player, vamos cruzar o B, uma referência que fizemos anteriormente para que possamos obter a planta do widget Agora, a partir do modelo do widgit, chame o que você acabou chamado show enemy I ahead e E essa é a única coisa que ele vai fazer. Também quero reproduzir um efeito sonoro porque podemos mostrar a interface do usuário, mas também quero indicá-lo com um efeito sonoro. Jogue. Lembre-se, dentro disso, temos esse chamado Bullet Impact Player Na verdade, vou tocar esse único efeito sonoro. O que queremos fazer é primeiro precisar da arma. A referência da arma. Vou apenas escrever Base de armas, selecione a referência de classe baseada em armas. Vou chamá-la de arma como antes, só quero o efeito sonoro. Vou copiar e colar tudo isso. Vá em frente e conecte-o. Vamos esconder os pinos desconectados. E eu só vou mostrar o efeito sonoro do Bullet Impact Player Quero reproduzir um efeito sonoro somente para o jogador que está fotografando novamente. Toque Sound Two D, somente para o jogador que está filmando. E vá em frente e toque esse efeito sonoro. Agora, isso deve funcionar se eu mover isso para dentro e precisarmos tocar o som aqui Se você simplesmente arrastar daqui e disser CL, atire com a arma. Assim, podemos convocar esse evento sempre que filmarmos. Você pode ver que essa entrada é chamada de algo diferente desta. Novamente, preciso clicar em Arquivo e atualizar todos os nós, ele é exibido corretamente. Vou afastar isso um pouco, para que eu possa afastar isso também assim. E eu tenho mais espaço para registrar isso aqui. Ok, tudo está indo bem. Tirando isso, conectando-o. E temos que conectar a arma também. Acho que temos a referência da arma. Sim, é esse. Vai até aqui. Até aqui. E eu posso clicar duas vezes aqui. Agora eu posso conectar, na verdade, um, eu acredito que é esse. Clique duas vezes nele e conecte-o. Vamos compilar e agora deve funcionar. Agora, antes de jogar, também vou aumentar o volume, para que eu possa ouvi-la claramente e encontrá-la rapidamente, acessar a tabela de dados, abrir as informações da arma, e é essa. O impacto da bala, efeito sonoro claro. Clique no pequeno ícone aqui. Isso me leva até lá automaticamente. Isso é o que parece agora. Na verdade, vou aumentar o som talvez 0,5, talvez seja muito alto. 0.4 Agora eu posso ouvir isso claramente, então vamos salvar tudo. Vamos agora jogar o jogo e ver como ele soa. Como servidor, vou apenas criar um contra-terrorista E agora, como terrorista, vamos ouvir como contraterrorista. Deixe-me passar na frente de tudo para que eu possa ver o jogador. Agora, quando eu atirei no player, você pode ver esse efeito sonoro. E você também pode ver esse marcador que aparece na minha tela sempre que eu atiro no jogador, ele dá a ele um marcador sempre que há uma bala espalhada, como se estivesse atingindo logo atrás dele Lembre-se de que adicionamos uma distribuição de marcadores mais cedo, então ela não atingirá 100% todas as vezes Sempre que atinge o jogador, quem é Victoria? Sempre que atingir, o jogador realmente mostrará esse marcador. Se eu ficar na frente do jogador, mais uma vez desse jeito e atirar no jogador, ele vai me mostrar o indicador sempre que eu bater no jogador, sempre que eu não bater, ele não vai me mostrar nada. Eu também posso ouvir isso no efeito sonoro. Você também pode ouvir a diferença aqui. É muito melhor acrescentar um vencedor do que não ter nada, porque então o jogador realmente sabe se acertou o jogador ou não Foi isso mesmo. Vamos salvar tudo e passar para a próxima. 189. 14.06 Adicionando Ambience SFX: No momento, é um pouco silencioso demais dentro do ambiente. Você pode ouvir. Está tudo bem. Temos os efeitos sonoros de caminhada, temos a filmagem e tudo mais, e vai soar muito bem. Imagine se você tem cinco contra cinco aqui, tipo cinco jogadores, e todo mundo está atirando, carregando e coisas assim, vai soar bem. No entanto, não há efeitos sonoros para o meio ambiente. Precisamos de um efeito sonoro ambiente se você abrir as configurações do projeto novamente. Aqui vamos voltar ao áudio. Eu incluí isso para você. O ambiente dos pássaros Você pode adicionar o ambiente que quiser, mas para este, vamos usar isso Vamos voltar ao áudio aqui, efeitos sonoros. Se você arrastar isso até aqui e eu clicar com o botão direito do mouse, transforme-o em um. Então eu vou chamá-lo, então ambiente, vá em frente e abra Deixe-me reduzir o volume. Algo muito baixo, como 0,01, eu tentei e acho que 0,03 é bom. Deixe-me salvá-lo. E eu vou clicar e arrastar esse ambiente para o nível Ele é reproduzido instantaneamente para todos que estão se conectando. Agora, se eu clicar em Play, você poderá ouvir o efeito sonoro dos pássaros. Se eu selecionar terris agora, é muito bom porque tenho algum ruído de fundo Você pode até mesmo reduzi-lo ainda mais, se desejar. Agora, tudo está soando muito bem. Eu posso andar por aí, eu posso atirar e nós podemos jogar. Mas eu também tenho alguns efeitos sonoros aqui para o meio ambiente. Não é silencioso. É uma sensação boa. É uma sensação boa. Não é um silêncio constrangedor que você tem no nível . Isso é bom. OK. Portanto, é uma ótima adição. Adição muito rápida, mas faz com que todo o ambiente pareça mais vivo. Ok, então foi isso. Vamos salvar tudo de novo. Você pode adicionar qualquer ambiente que desejar para o seu nível, e vamos passar para o próximo 190. 14.07 Removendo o Mag ao recarregar: Tudo bem, então a última coisa que falta agora é se você selecionar Terrace, por exemplo, e pegarmos uma arma. Agora, sempre que eu fotografo e recarrego, você pode ver que o carregador não está sendo removido Parece um pouco estranho porque estamos recarregando e o carregador não está sendo removido Então, precisamos fazer algo sobre isso. O que podemos fazer é abrir a montagem da animação. Se você voltar às animações do player e pesquisar montagens de animação que você criou anteriormente Vamos ao rifle. Vamos começar com esse. Agora, o que você pode fazer aqui é adicionar uma notificação. Vamos começar a fazer isso. Quero adicionar uma notificação sempre que eu estiver recarregando, sempre que eu levar esta revista aqui. Vamos tentar adicionar essa revista que removemos. Não consigo clicar com o botão direito do mouse em cima disso, então vou clicar com o botão direito aqui. O que você pode fazer é também adicionar outra faixa de notificação, para que você não a adicione em cima dos efeitos sonoros, você pode adicionar outra faixa. E eu vou chamar isso de recarregar, talvez, algo assim O que você preferir aqui. Vou escrever Clique e depois Adicionar. Notifique e adicione uma montagem. Notifique este. Podemos usar o código para fazer o que quisermos com este. Vou chamar isso de lip in. Vamos adicionar um para clip-out, ou isso é clip out. Na verdade, isso não é um clipe. Vamos chamá-lo de Lip out. Vamos adicionar um para inserir o clip. Talvez aqui, vamos clicar com o botão direito do mouse em Montage Notify, clicar nele e chamá-lo de Lip in Ok, agora temos essas montagens ou notificações. Vamos minimizar isso. Vamos ver as plantas. Remova essa pesquisa. Vamos abrir a base da camada de jogadores. E vamos ao código em que estamos realmente recarregando. Vá em frente e clique neste aqui. Esse é o código de recarga. Lembre-se de que comentamos isso, Recarregue a arma. Essas são todas as coisas que fizemos calculando balas Aqui no multicast, estamos tocando a montagem, a montagem de recarga Agora, o que podemos fazer é realmente usar esse chamado unnotifiedgin Esse gin não notificado começará a ser reproduzido sempre que receber uma notificação dentro de uma montagem de animação Sempre que chegar a essa notificação aqui, esse código será acionado. Agora você pode ter várias notificações para coisas diferentes na mesma área, e é por isso que está aqui Podemos pegar isso e dizer: isso é igual a, por exemplo, você o chamou de clip in ou clip out para começar. E vamos fazer um galho, vamos atacar a partir daqui. Se isso for igual a um recorte, então podemos fazer algo com ele. O que queremos fazer é, deixe-me abordar isso aqui. O que queremos fazer é esconder o osso da meg Se eu voltar e encontrar a arma no mercado, abro a arma FPS, empacoto as armas, as malhas e volto para o meu Deixe-me abrir o esqueleto aqui agora, assim como antes, onde escondemos a cabeça do jogador Agora, idealmente, como se você tivesse um projeto sério, talvez seja melhor fazer uma animação, como uma animação de recarga, em que o Mac entra e sai Você pode realmente ver isso no outro pacote. Baixamos o documento sobre armas militares. Se eu voltar para uma das armas aqui, elas realmente têm animações aqui Por exemplo, eles têm uma animação para recarregar esse rifle E você pode ver aqui que eles têm essa animação baixa, então vou fechá-la rapidamente. Mas eles têm essa animação de recarga que você pode usar e será mais ideal, mas nesse caso não temos nenhuma animação e ainda podemos fazer isso Queremos esconder o osso, assim como o jogador em que batemos na cabeça. Para este, vamos esconder o carregador de armas. Ok, é chamado de revista de armas. O que vamos fazer é primeiro precisar da referência da arma. Esta é a arma equipada. Vamos pegar a arma equipada que temos agora. Vamos arrastar a partir daqui. Precisamos das variáveis da arma. Precisamos da malha esquelética dentro daqui. Novamente, basta escrever osso. Se você não sabe como se chama, escreva osso e então você poderá ver através dele e fazer com que este esconda osso pelo nome, assim como antes. Se isso for verdade, vá em frente e esconda esse osso. Agora, qualquer que seja o nome desse osso, mag, se você quiser, você pode escrevê-lo estaticamente Mas a melhor coisa, novamente, é adicioná-lo à sua estrutura. Se eu voltar para duas estruturas, informações sobre a arma. Basta adicionar uma nova variável e eu a chamo de nome. Digamos nome aqui, nome, variável, salve e salve tudo. Vá em frente e abra sua tabela de dados. Vou apenas abrir espaço entre isso aqui e abrir minha tabela de dados. Vamos para a direita aqui. Vou chamá-lo de Mag Name. Então podemos dar a ele o nome do meu AK. É chamado de Mag. A mesma coisa para minhas informações. Acho que essa é minha pistola. Para minha pistola. Não tenho certeza se precisamos fazer alguma coisa porque, com a pistola, acho que você não consegue ver Mac Se eu simplesmente usar armas, armas escuras e abrir minha pistola, ela está aqui, mas não tenho certeza se você consegue ver a revista completamente Então, eu vou deixar este de fora para este. Você pode simplesmente não escrever nenhum, por exemplo, e não precisa de nada aqui dentro. Novamente, é melhor fazer animações como as feitas aqui para essas armas E é muito mais limpo. Parece muito melhor. Vamos salvar tudo agora. Vamos voltar aqui e fazer o download como um arquivo CSV. Deixe-me ir em frente e ir até as tabelas de dados. E deixe-me importar isso. Agora eu importei o arquivo CSV e ele está atualizado. E deixe-me salvar tudo Agora posso voltar para minha base de jogadores. E o que podemos fazer aqui agora é usar essa referência. Podemos simplesmente adicionar uma variável aqui chamada nome. E podemos alterá-lo para um nome aqui. Podemos voltar para onde quer que toquemos o multicast. Vou clicar neles e ocultar os pinos desconectados para que não precisemos ver tudo Deixe-me ver onde tocamos o multicast. Deixe-me esconder esse também. O multicast é reproduzido aqui no evento do servidor. O que podemos fazer é clicar aqui, clicar no nome da revista e conectar o nome da revista Ok, agora vamos descer até aqui. O que podemos fazer agora é pegar nome dessa revista e conectá-la ao Bone Name Vamos clicar duas vezes aqui, fazer algumas anotações traseiras para que também permaneça limpo. Aqui vamos nós. Sempre que for recortado, ocultaremos o nome da revista sempre que for recortado Então, podemos pegar isso aqui. Agora, neste caso, temos apenas duas notificações. Só temos isso e isso. Tecnicamente, podemos simplesmente inserir o código a partir daqui. No entanto, se você tiver várias notificações, lembre-se de arrastar novamente, dizer igual e dizer o que quer que seja chamado, depois criar uma nova ramificação e, em seguida, conectá-la e dizer que, se for verdade, você pode fazer isso No entanto, no nosso caso, temos apenas duas notificações. De qualquer forma, na verdade vou arrastá-lo daqui. Só estou afastando isso. Se for falso, vamos pegar essa arma novamente. E se você simplesmente arrastar o osso direito e ver que há algo chamado osso desoculto pelo nome, vamos usar este Vamos conectar esse nome ósseo mais uma vez. Vamos nos conectar. aqui e clique duas vezes para criar um nó traseiro. Agora deve estar funcionando se eu compilar e salvar tudo Agora vamos experimentar e ver como fica se eu clicar em play. Agora lembre-se de que só funciona na recarga. Essa é a animação do equipamento. Essa não é a animação de recarga. Agora, se recarregarmos, você pode ver que o mag está sendo removido . Ok, incrível. Vamos experimentar com um M 4 aqui, se eu quiser, e recarregar Incrível, isso também funciona. Parece muito melhor. E, novamente, é muito melhor ter apenas animações para isso, mas você também pode ocultar nomes de ossos ao recarregar a arma 191. 14.08 Fixing Reload Bug on Weapon Switching: Passo uma hora testando meu jogo para ver se há algum bug ou algo que precisamos corrigir antes de terminarmos com isso. Houve apenas um pequeno problema agora. Você vê se eu clico em jogar agora e saqueio alguma coisa Agora, se eu estiver atirando com essa arma, por exemplo, se eu trocar e recarregar ao mesmo tempo que você vê que eu troco e depois recarrego, na verdade ela está falhando Agora estou tentando atirar, mas não está atirando, a recarga está falhando. Vamos resolver isso. Antes de terminarmos, vamos até a base de jogadores daqui. Vamos ver nossa lógica de recarga aqui e esta é a arma de recarga dentro daqui O que está errado é que podemos recarregar mesmo estando equipando a arma Essa é uma solução muito rápida por aqui. Quando você tenta pressionar o botão de recarga, as coisas que estamos verificando Também precisamos verificar se estamos equipando a arma. Lembre-se de que, se eu clicar com o botão direito do mouse e disser equipar, fabricamos esse lingote mais cedo Quando equipamos a arma, obtemos sua arma de equipamento E depois lingotes, quando não estamos equipando a arma, podemos prosseguir e No entanto, se ainda estivermos equipando a arma, realmente não faz sentido recarregá-la Vou copiar e colar isso que fizemos antes para que pareça melhor Estou copiando e colando esse código onde escondemos a revista. Na verdade, vou assistir à animação do lutequip aqui. A arma MC Equip. Vou colar aqui. Acho que vai ser muito melhor. Talvez você não precise fazer isso se tiver outra animação de equipamento. Mas a animação do meu equipamento é a mesma da recarga. Na verdade, vou apenas conectá-los aqui para que pareçam melhores. E também vou colocar isso aqui e chamá-lo de mag name, assim como antes Então eu vou, vamos ver aqui, é esse, então vou conectá-lo aqui. E isso também deve ser corrigido. Ok, a última coisa está bem aqui, dentro da arma de lançamento. Ao soltar a arma e parar a montagem, lembre-se de não fazer a recarga soar Paramos a montagem aqui, obtivemos a instância de animação e assim por diante No entanto, às vezes fica confuso com a instância de animação Vamos atacar daqui porque diz acesso N. Às vezes, podemos simplesmente atacar a partir daqui e dizer que é válido e adicionar esse nó é válido Estamos nos certificando de que é válido antes de continuarmos. Se não for, não faça nada. E, novamente, basta fazer algumas anotações traseiras aqui para torná-lo mais limpo e isso deve resolver todos os nossos problemas. Experimentei o jogo por cerca de uma hora, hora e meia e, naturalmente, havia mais problemas para jogar. Estou confiante em dizer que removemos todas as caixas do jogo. Também não temos nenhuma caixa quando jogamos o jogo. Vou limpar esse projeto para você, criar comentários e coisas assim. E então eu fornecerei esse projeto para você. Talvez você já tenha baixado. Isso está no futuro. Vamos salvar tudo. E Leah, vamos para a próxima. 192. 14.09 What Now: Então, parabéns por ter chegado até aqui. Foi um longo caminho até o que estou acostumado, mas foi muito divertido criar isso para você e criar todos esses elementos para você. Então, agora temos um bom começo para um jogo de tiro da FBS. E temos as armas caindo. Temos o inventário, podemos recarregar, podemos trocar armas, rifle de pistola, temos as balas, temos a saúde e a armadura e temos os pontuação Então, adicionamos muitas coisas a esse ambiente. Agora terminamos com isso atualmente, mas no futuro eu quero adicionar mais itens. Por exemplo, podemos adicionar um menu Bi. Podemos adicionar mais armas, como um lançador de foguetes. Podemos adicionar um lançador de granadas. Podemos adicionar granadas. adicionar um placar para o jogador Podemos adicionar um menu principal e coisas assim. E o que você pode continuar agora é acessar meu canal no Youtube, e dentro dele, na verdade, você pode lançar este jogo no Steam. Então, eu vou te ensinar gratuitamente como você pode converter este jogo agora que você tem. Você pode salvá-lo, você pode converter qualquer jogo que você tenha agora para o Steam. Assim, você pode adicionar um menu principal, um navegador de servidor. Você pode adicionar uma barra de pesquisa e coisas do tipo. E você pode realmente fazer com que hospede um jogo no Steam para que outros jogadores participem. Então, eu vou te ensinar isso dentro do meu canal no Youtube. Portanto, certifique-se de ir em frente e visitar isso também. E você sempre pode visitar meu site e meu servidor Discord Eu vou ajudar todos vocês em 2047. Portanto, certifique-se de ir em frente e fazer isso. Também é muito bom conversar com a comunidade. E sim, estamos apenas nos divertindo com o desenvolvimento de jogos, então é bom ter você aqui. Obrigado por assistir. E fique atento para mais atualizações. E também não deixe de assistir meus outros tutoriais e outros cursos sobre motor real e Vá em frente e salve seu progresso e espero vê-lo em breve.