Unreal Engine 5 UE5 crie um jogo ARPG ao estilo Diablo do início ao fim | 3D Tudor | Skillshare

Velocidade de reprodução


1.0x


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

Unreal Engine 5 UE5 crie um jogo ARPG ao estilo Diablo do início ao fim

teacher avatar 3D Tudor, Bestselling Blender Author & 3D Educator

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.

      Workshop de design de jogos: criação de ARPG de masmorra processual UE5

      3:33

    • 2.

      Fundamentos do jogo

      18:24

    • 3.

      Como criar o menu principal

      13:02

    • 4.

      Como adicionar o menu principal à janela de visualização e encerrar a funcionalidade

      10:30

    • 5.

      Mecânica de tela de carregamento e geração de labirinto

      12:19

    • 6.

      Como criar uma tela de carregamento

      16:44

    • 7.

      Como adicionar tela de carregamento ao modo de jogo

      11:04

    • 8.

      Construindo o algoritmo de labirinto

      13:30

    • 9.

      Criando o primeiro bloco

      14:51

    • 10.

      Sistema de direção personalizado

      11:47

    • 11.

      Como encontrar azulejos adjacentes

      13:45

    • 12.

      Mapeamento de coordenadas e geração de azulejos

      14:14

    • 13.

      Visualizando o labirinto com flechas

      15:27

    • 14.

      Como adicionar paredes de castelo

      14:58

    • 15.

      Comunicação de blueprint com interfaces

      15:47

    • 16.

      Como encontrar saídas disponíveis

      10:26

    • 17.

      Algoritmo para forma de labirinto base

      22:03

    • 18.

      Aula 3D 17 Geração de Azulejos Contínuos

      11:20

    • 19.

      Sistema de backtrack personalizado

      15:33

    • 20.

      Finalizando regras de retrocesso

      14:08

    • 21.

      Como conectar a geração de azulejos pós-labirinto

      20:34

    • 22.

      Resolução de erros e plantas de decoração

      16:03

    • 23.

      Como posicionar paredes com base em caminhos bloqueados

      15:01

    • 24.

      Padrões de corredor padrão

      12:34

    • 25.

      Construção de sala e plano de elevador

      15:36

    • 26.

      Blueprint de Chest

      16:30

    • 27.

      Algoritmo de construção de sala

      16:10

    • 28.

      Como encontrar possíveis salas de 2x2

      13:49

    • 29.

      Função de perímetro da sala

      13:23

    • 30.

      Lista de salas e depuração

      15:56

    • 31.

      Construindo a estrutura da sala

      14:18

    • 32.

      Função de sala e fixação de parede

      14:32

    • 33.

      Finalizando funções de sala

      16:24

    • 34.

      Randomização de paredes internas

      12:42

    • 35.

      Como adicionar paredes da sala

      18:55

    • 36.

      Portas de sala e segmentação de labirinto

      18:44

    • 37.

      Como segmentar as áreas de calabouço

      12:48

    • 38.

      Finalizando a mecânica de segmentação

      13:46

    • 39.

      Como categorizar áreas por tamanho

      12:00

    • 40.

      Substituição de piso por categoria

      15:46

    • 41.

      Categorias de salas escondidas

      17:19

    • 42.

      Função de troca de parede a porta

      21:07

    • 43.

      Colocação de porta e sigilo

      13:42

    • 44.

      Funções de área de porta única

      21:28

    • 45.

      Como conectar paredes de calabouço

      13:53

    • 46.

      Decorações de parede

      16:57

    • 47.

      Ajustes de seta direcionais

      11:30

    • 48.

      Como esconder flechas de depuração e criar tochas

      15:21

    • 49.

      Luzes de tocha gerando

      14:16

    • 50.

      Efeito de cintilação da tocha

      16:29

    • 51.

      Sistema de luz de corredor

      16:20

    • 52.

      Mecânica de armadilha e sistema de danos

      13:42

    • 53.

      Animação de armadilha e SFX

      12:27

    • 54.

      Função de Spawner de Prop

      15:22

    • 55.

      Projeto de decoração de sala

      13:04

    • 56.

      Noções básicas de Spawner de Prop

      15:01

    • 57.

      Conclusão da decoração do quarto

      14:00

    • 58.

      Como adicionar itens de física às salas

      11:55

    • 59.

      Como importar o Blueprint Revenant e Hellgate Tower

      15:02

    • 60.

      Aula 3D 59 Visuais da Torre Hellgate e integração de labirinto

      13:42

    • 61.

      Fundamentos do item e tabelas de dados

      16:04

    • 62.

      Comportamento do item e widget de hover

      14:16

    • 63.

      Como animar o Blueprint do peito

      15:12

    • 64.

      Mecânica de peito e sistema de queda de itens

      13:42

    • 65.

      Baús de sala escondidos

      15:00

    • 66.

      Animação de gota de itens perto do peito

      20:00

    • 67.

      Animação de itens de acabamento com linhas do tempo

      12:45

    • 68.

      Mostrar widgets de itens e inventário

      15:21

    • 69.

      Pegue itens e adicione ao inventário

      11:39

    • 70.

      Contador de moedas e widget de coleta

      13:41

    • 71.

      Como corrigir a funcionalidade do contador de moedas

      12:19

    • 72.

      Visuais de inventário na jogabilidade

      13:13

    • 73.

      Como atualizar visuais de inventário

      14:25

    • 74.

      Como gerar o zoom do jogador no cinema

      20:23

    • 75.

      Correções de colisão e detecção de azulejos de jogador

      12:30

    • 76.

      Mecânico de tetos de escondido

      17:47

    • 77.

      Mecânico de teto Mostrar e esconder

      12:06

    • 78.

      Blueprint de visuais de elevador

      13:16

    • 79.

      Gerar o próximo mecânico de labirinto

      15:19

    • 80.

      Geração de labirinto contínua do primeiro azulejo

      14:49

    • 81.

      Animação de elevador e efeitos sonoros

      12:16

    • 82.

      Câmera cinematográfica para elevador

      14:28

    • 83.

      Como corrigir problemas de mistura de visão da câmera

      16:39

    • 84.

      Animação de elevador e entrada de inventário

      13:46

    • 85.

      Sistema Minimap

      11:31

    • 86.

      Toques finais do minimapa e dica de ferramenta de inventário

      19:39

    • 87.

      Sistema de saúde do jogador e widget

      19:54

    • 88.

      Poção de saúde de usabilidade de itens de inventário

      17:08

    • 89.

      Barra de tempo de jogo e poção de tempo

      13:00

    • 90.

      Poção de velocidade e efeitos de granulação

      12:44

    • 91.

      Poção de raiva e efeitos de granulação

      15:37

    • 92.

      Música de combate e modo de combate Hellgate

      16:43

    • 93.

      Sistema de saúde Hellgate e morte

      11:11

    • 94.

      Animação de bala Hellgate e sistema de segmentação

      14:59

    • 95.

      Tiro de bala Hellgate e SFX leve

      15:13

    • 96.

      Widgets personalizados de mouse e malha revenant

      13:11

    • 97.

      Animação de impulso de física e ataque corpo a corpo

      15:54

    • 98.

      Colisões e efeitos de Blueprint de Ataque Corpo a Corpo

      23:48

    • 99.

      Mecânica de mira estática e de tiro

      14:09

    • 100.

      Modelo de bala do jogador e visuais

      10:38

    • 101.

      Tiro de jogador e efeitos visuais

      13:29

    • 102.

      Animação e mecânica de morte do jogador

      11:59

    • 103.

      Sistema de detecção de mouse

      18:14

    • 104.

      Interação avançada de mouse para itens

      15:56

    • 105.

      Sistema de interação com o mouse e entradas

      14:03

    • 106.

      Sistema de interação de alcance mínimo

      14:14

    • 107.

      Finalização de disparos estáticos e miras

      20:20

    • 108.

      Sob mecânica inimiga Crude

      17:32

    • 109.

      Correções de Estêncil de Pós-Processo e Detecção de Inimigos

      20:18

    • 110.

      Correções de itens e Widget de Peito

      16:21

    • 111.

      Correções de Widget de item e código de elevador

      8:10

    • 112.

      Ajustes de widget de itens e funcionalidade de elevador

      17:56

    • 113.

      Importação de personagens de Morigesh e sistema de saúde de IA

      12:45

    • 114.

      Retargeting de animações revenentes para Morigesh

      15:44

    • 115.

      Verificação de alcance de IA e protetores Hellgate

      17:54

    • 116.

      Tiro de bala com IA e mecânica de knockback

      17:28

    • 117.

      Mecânica de repulsão e atordoamento

      17:08

    • 118.

      Variáveis de quadro negro e configuração de árvore de comportamento

      7:41

    • 119.

      Como configurar variáveis de quadro negro e árvores de comportamento de IA

      13:45

    • 120.

      Comportamento de patrulha de IA e modo de pânico

      12:47

    • 121.

      Modo de ataque de IA e verificações de linha de visão

      12:13

    • 122.

      Volume de navegação de IA e otimização de caminho

      11:14

    • 123.

      Volume de navegação e otimização

      10:30

    • 124.

      Comportamento de finalização de disparo e depuração

      14:19

    • 125.

      Correções de erros finais e polimento de jogabilidade

      10:17

    • 126.

      Remendo de bugs de jogabilidade principal

      17:13

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

446

Estudantes

2

Projetos

Sobre este curso


Desbloqueie seu potencial criativo com o Workshop de design de jogos: criação de calabouço ARPG de

UE5![
Clique aqui para o Resource Pack]

Você já quis criar sua aventura de masmorra como Diablo?

Imagine criar seus próprios ataques épicos, completos com masmorras geradas processualmente, inimigos implacáveis e itens épicos, todos alimentados pela Unreal Engine 5.

No Workshop de design de jogos: criação de calabouço processual ARPG da UE5, estamos dando vida ao seu jogo dos sonhos!

Junto comigo, Markos e 3D Tudor, você vai mergulhar profundamente no Unreal Engine 5 para construir um ARPG totalmente funcional do zero. Quer você esteja sonhando em construir mundos de fantasia épicos ou aventuras de ação em ritmo acelerado, este curso da Skillshare vai guiar você passo a passo pelo domínio do design de masmorra processual, IA personalizada e mecânica de combate dinâmica. Vamos transformar suas ideias de jogos em realidade!

O que você vai aprender:

  • Domine o Unreal Engine 5 para design ARPG: crie seu ARPG do zero, incluindo masmorras processuais, IA inimiga e mecânica de combate personalizada.

  • Geração de calabouço dinâmica com algoritmos de backtrack: aprenda a gerar layouts únicos com texturas e armadilhas frescas em cada jogada.

  • Criar IA de inimigo imersivo: crie inimigos desafiadores que patrulham, atacam e se adaptam aos movimentos do seu jogador.

  • Sistemas de pilhagem e baús interativos: adicione captadores de itens e mecânica de tesouro para envolver os jogadores e aprimorar a experiência de jogo.

  • Níveis de calabouço sem fim: crie uma mecânica de elevador que gere níveis infinitos, criando exploração de masmorras sem costura.

  • Pacote de Recurso Personalizável: use componentes pré-fabricados como materiais, efeitos granulados, texturas e malhas para agilizar o desenvolvimento e focar na criatividade.

O que esperar:

Imagine criar masmorras que geram layouts únicos a cada vez, cheios de iluminação atmosférica, baús interativos e armadilhas estratégicas. Imagine batalhar contra inimigos ferozes que reagem às ações do seu jogador, com baús de tesouro espalhados pelo mundo.

Este curso da Skillshare vai guiar você na construção desses elementos essenciais desde o início, garantindo que você ganhe as habilidades necessárias para criar sua própria aventura ARPG.

No Workshop de design de jogos: criação de calabouço ARPG de procedimentos UE5, você vai aprender como:

  • Crie um gerador de calabouço processual usando um algoritmo de backtrack personalizado. Você será guiado na construção do sistema de labirinto e na geração de peças dinâmicas, garantindo uma jogabilidade nova sempre.

  • Crie salas e ambientes dinâmicos, adicionando adereços, texturas e materiais para trazer variedade ao seu calabouço.

  • Implemente uma mecânica de elevador para níveis infinitos, adicionando progressão e desafios à medida que os jogadores exploram mais.

  • Crie uma IA inimiga personalizada que patrulha, ataca e se adapta às ações do jogador, criando encontros táticos e envolventes.

  • Integre física, iluminação e efeitos sonoros para criar atmosferas imersivas, melhorando a experiência do jogador.

Repartição do curso:

Este workshop começa com o essencial: montar um modo de jogo de cima para baixo e criar um menu principal totalmente funcional. Você vai mergulhar nos Blueprints do Unreal Engine, onde vamos implementar algoritmos de geração processual, construindo dinamicamente masmorras infinitas com IA inimiga e acessórios ambientais.

Ao longo do curso, você vai mergulhar seus dedos em:

  • Geração de calabouços processuais: usando algoritmos personalizados para criar paredes, pisos e salas para calabouços únicos.
  • Mecânica de combate do jogador: crie ataques corpo a corpo e de distância, juntamente com efeitos de retrocesso para aprimorar a jogabilidade.
  • Comportamento de IA: crie inimigos que patrulham, atacam e se reposicionam taticamente.
  • Elementos interativos: crie elementos envolventes como baús, armadilhas e elevadores para aprofundar o desafio do seu jogo.
  • Sistemas avançados de UI: implemente um minimapa 3D, barras de integridade, inventário e animações de coleta de itens para uma experiência completa do usuário.

Seu pacote de recursos:

Para ajudar a agilizar seu trabalho, este curso inclui um extenso pacote de recursos com:

  • 21 texturas de interface do usuário para elementos HUD personalizados.
  • 133 mapas de textura para criar materiais estilizados, juntamente com 53 instâncias de materiais pré-fabricados.
  • 2 efeitos de granulação predefinidos para explosões e fogo.
  • 17 efeitos de áudio para design de som ambiental.
  • 63 malhas em 5 estilos de masmorra predefinidos (pedra, pedra pedregosa com musgo, madeira, tijolo e um tema de câmara preta) com adereços e tochas.
  • Um efeito de destaque pós-processo para garantir a visibilidade do jogador em ambientes complexos.

Resumo do curso

Neste curso, estamos dando início ao modo e layout de jogo principais no Unreal Engine 5, como lançar as bases para tudo. Depois disso, vamos começar a criar um menu principal realmente limpo e fácil de usar. É uma daquelas coisas que fazem uma grande diferença, sabe?

Depois de tudo resolvido, mergulhamos nas coisas divertidas — a geração de labirinto processual. É aqui que você vai começar a construir masmorras dinâmicas e fica muito legal. À medida que avançamos, vamos definir regras personalizadas para geração de salas, para que você não esteja apenas montando as coisas. Você terá controle sobre coisas como peças e pontos de saída, garantindo que a experiência do jogador seja perfeita.

Também vamos trabalhar em um algoritmo de backtrack personalizado que garante que toda vez que alguém jogar seu jogo, ele pareça novo. Não há duas corridas nunca mais serão iguais! Então realmente entramos no centro com IA inimiga e sistemas de combate. É aqui que seu jogo começa a obter alguma profundidade séria, desafiando jogadores e mantendo as coisas interessantes.

Para encerrar tudo, vamos nos aprofundar na criação de um sistema de inventário para que os jogadores possam coletar itens e interagir com eles sem problemas. Ele realmente une tudo e faz todo o jogo parecer mais interativo e polido.

Pensamentos finais

Ao final do Workshop de design de jogos: Criação de masmorra ARPG procedimental da UE5, você terá construído um sistema de masmorra processual totalmente funcional com ambientes dinâmicos, IA avançada e um sistema de pilhagem, tudo no Unreal Engine 5. Quer você esteja apenas começando seu primeiro jogo ou buscando refinar suas habilidades, este curso vai equipar você com as ferramentas e o conhecimento para criar um ARPG atraente de masmorras.

Continue escrevendo o roteiro, todos e vejo você no curso!

Markos

Conheça seu professor

Teacher Profile Image

3D Tudor

Bestselling Blender Author & 3D Educator

Top Teacher
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. Workshop de design de jogos: criação de ARPG de masmorra processual UE5: Você já quis criar sua própria masmorra, como o lendário Diablo, como o lendário Diablo, cheia de inimigos implacáveis e epiclúdio, usando o poder de irrealizar cheia de inimigos implacáveis e epiclúdio, usando o poder de irrealizar cinco. Bem, agora você pode dar as boas-vindas ao workshop de design de jogos, realizando cinco criações processuais de Dungeon, Pois o jogo dos seus sonhos pode se tornar realidade. Neste curso, você aprende a criar um LPG de ação totalmente funcional usando projetos avançados, desde a geração dinâmica de tangentes até IA personalizada, baú interativo e Você tem tudo o que precisa para trazer sua visão à luz. Olá, sou Marcos e me uni Dudo para oferecer este Nosso objetivo é criar um sistema que gere níveis dinamicamente, completo com paredes, adereços e iluminação personalizados, ao mesmo tempo em que adiciona funcionalidade de jogabilidade para dar vida ao seu jogo Desenvolveremos um gerador de níveis que usa um algoritmo de retrocesso personalizado para criar a estrutura do dangon Isso estabelecerá a base para nossos níveis processuais, garantindo que sua jogada seja nova e única Em seguida, construiremos salas e dividiremos o nível em várias categorias. Isso nos permitirá aplicar diferentes texturas, materiais e adereços para aprimorar a variedade visual do dangon Adicionaremos adereços de luz que aparecem automaticamente dentro da masmorra para ajudar a adicionar ambiente ao nível à medida que ele é Um dos recursos mais interessantes que abordaremos é a mecânica do elevador, que permite níveis infinitos à medida que os jogadores avançam. O elevador gerará um novo gerador para criar o próximo nível, garantindo uma exploração infinita Também adicionaremos rascunhos, baús e um baú de missões para desbloquear o elevador e progredir para o Para tornar o ambiente mais vivo, introduziremos ativos físicos ou interações dinâmicas com adereços e objetos no mundo do jogo Continuando com o design da interface, implementaremos três mínimos D para ajudar os jogadores a navegar pela masmorra Além disso, criaremos um sistema de interface de usuário básico para exibir a saúde, sistema de inventário e vários itens, como aumento de velocidade, saúde e poções, todos malas por meio de tabelas de dados Para o combate, criaremos um personagem com duas habilidades principais, um ataque que pode repelir os inimigos e objetos e um ataque para destruir a barragem à distância Também implementaremos um sistema de IA inimigo, qual os inimigos patrulharão, atirarão no jogador quando estiverem ao alcance e se reposicionarão para manter uma vantagem tática Então, aumente ainda mais a dificuldade. Vamos projetar um prédio inimigo que atira no jogador. Os inimigos da IA protegerão essa estrutura e, quando ela for destruída, IA entrará em pânico ou atacará agressivamente o jogador, adicionando um elemento estratégico à masmorra Neste curso, você terá acesso a um pacote de recursos abrangente que elevará o design do seu jogo Inclui 21 texturas de interface de usuário personalizadas, 133 mapas de tração para texturização de ativos para criar 53 materiais e instâncias de materiais O pacote apresenta 63% de bagunça de ladrilhos em cinco estilos de masmorra preceitos: pedra, paralelepípedos musgosos, madeira, tijolo e uma câmara temática mais escura, e uma câmara temática mais escura, ajudando em cinco estilos de masmorra preceitos: pedra, paralelepípedos musgosos, madeira, tijolo e uma câmara temática mais escura, ajudando você a integrá-los perfeitamente ao seu projeto. Esses códigos o guiarão passo a passo na construção um sistema de masmorras totalmente funcional usando al engine five Vamos mergulhar e começar a criar nosso próprio mundo gerado processualmente 2. Fundamentos do jogo: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco cursos processuais RPG de ação em Dungeon Vamos explicar do que trata todo esse curso. Vou demonstrar, em primeiro lugar, minhas incríveis habilidades de desenho em pintura para fazer isso, e faremos isso com frequência durante o curso. Agora, o que criaremos é basicamente um menu principal. Isso gerará um labirinto. Mas do jeito que vai funcionar, vamos discutir isso um pouco mais detalhadamente. Mas, por enquanto, criará caminhos parecidos com serpentes que, em algum momento, terminarão Eles não serão capazes de criar mais, então ele tentará escolher outro caminho e criar outro caminho de cobra que terminará em agora, e depois cada vez mais Vamos fazer isso a partir de um ponto de partida e vamos em direção a qualquer direção em uma grade fictícia Se isso faz sentido. Agora, depois disso, vamos criar nosso próprio personagem, que terá um ataque no shopping. Vamos dar um soco aqui. Meu ataque de ML e um ataque de tiro. Claro, o coarcor que seremos capazes de mover em todas as direções, isso é dado Além disso, teremos um pequeno inventário, como, por exemplo, se esta for nossa tela, teremos um inventário aparecendo e aqui, nosso personagem poderá pegar alguns itens clicando neles ou abrir alguns clicando neles ou abrir baús que derrubarão Sim, é um xadrez incrível. Como eu te disse, habilidades de desenho incríveis. Sim. E, por fim, o que vamos fazer é criar um personagem de IA Vamos colocar dois chifres nesse personagem que terá um ataque à distância Não será uma arma, será algo como uma adaga. E também usaremos o que fazemos na criação do labirinto, basicamente Vamos criar algo como uma torre que atira em você quando você está ao alcance, algo assim. E, basicamente, isso seria. A IA estará guardando a torre e estará em patrulha. Quando a torre for destruída, ela percorrerá o labirinto no modo de pânico E quando você está no alcance da IA, ela atira em você, e quando você não está no alcance, mas eles são agro Eles tentarão encontrar um local para atirar. Basicamente, uma IA muito simples. Vamos usar árvores de navegação e IA para demonstrá-las. Mas, para ser sincero, essa escala de IA e a forma como a fizemos serão processuais porque nosso labirinto é algo que eu não adicionei O labirinto quando chegarmos ao fim, digamos que seja o fim Vamos subir com um elevador e criar outro labirinto Não menor, maior que o anterior. Menor não faria nenhum sentido. Mas sim, isso seria. Vamos criar outro labirinto. E como isso é infinito, e do jeito que estamos fazendo, vamos usar um volume de navegação que vai engolir nossos labirintos, o que não o torna ilimitado porque tem um Mas vamos usar isso para demonstrar o padrão de navegação que a IA acha que isso não seria o ideal. Isso seria para o nosso jogo. Isso criará um pouco de moldura, mas está tudo bem. Acho que esse é um bom ponto de partida para explicações. Existe uma obra de arte, uma forma de arte, como você pode ver Vamos continuar na próxima. Tchau Vamos começar criando um novo nível para um jogo hostil porque esse nível está sendo preenchido com nossos recursos de pré-visualização Agora, se você conhece algumas explicações, podemos encontrar os ativos que povoamos todo o mundo aqui na caixa de descrição. Se eu selecionar qualquer ativo no mundo, ele me redirecionará para esse ativo no esboço No esboço, podemos ver o que está dentro que colocamos em nosso mundo Vamos criar um novo nível. Vamos aos mapas de pastas, clique com o botão direito do mouse e selecione o nível. Isso criará um novo ambiente para nós que estará vazio. Vou chamá-lo de nível de jogo. Vou pressionar Enter. Agora, você pode ver que há um pequeno asterisco ao lado do ícone Esse asterisco significa que esse ativo não está salvo. Também podemos ver se eu mudar de pasta, por exemplo, esqueci que não salvei esse ativo Podemos ver aqui embaixo que diz um ativo não salvo. Corrigimos isso, vamos pressionar esse ícone, e ele abrirá o menu de conteúdo seguro e eu salvarei o ativo. atalho rápido seria o controle salvo e é o atalho para salvar Como podemos ver no arquivo, Dave all. Volte para o navegador de conteúdo, volte para os mapas e vamos abrir nosso nível. Agora, podemos ver que esse nível está vazio agora no contorno Não há nada dentro dela. Eu queria trazer algo para dentro, mas não vou usar nossos atos agora. Vou até este botão aqui e pressionar Vamos adicionar a iluminação direcional, para que possamos fazer as coisas Não podemos ver nada porque não há nada para ver. Também vou adicionar uma forma e selecionar um tubo. Agora podemos ver que há iluminação e o tubo. Também podemos ver isso em nossa janela de exibição. Misture a câmera. E para aqueles que não conhecem o Unreal Engine, fiz isso pressionando o botão direito do mouse e me movendo com WA e D, mantendo pressionado o botão direito do mouse U e A movem a câmera para cima e para baixo, e o mouse gira basicamente como um jogo Os morcegos são mais técnicos. Como podemos ver quando selecionei o cubo ou a iluminação, a luz direcional Podemos ver os detalhes do painel aqui alterados. Esses são os detalhes de tudo o que selecionamos. Ao lado, há outra guia chamada configurações mundiais. Se você não tiver essa guia, poderá encontrá-la nas configurações da janela wd. Ele pode aparecer em qualquer lugar, mas você pode encaixá-lo na janela de exibição onde quiser Dentro das configurações de palavras, podemos encontrar muitas informações sobre as regras específicas do nosso nível. Algumas regras específicas o definem nas configurações de parede. Não vamos nos preocupar com tudo agora, mas vamos verificar as regras de humor do jogo, que são as regras, digamos, as informações mais importantes É uma das primeiras coisas que, quando pressionamos play, está sendo carregada no comportamento predeterminado E o que quero dizer com comportamento predeterminado? Se pressionarmos play, você pode ver o esboço está sendo preenchido com muitas outras coisas Essas são coisas necessárias para rodar o jogo. No momento, temos o cubo e a iluminação e, por padrão, podemos controlar com o mouse e podemos nos mover e passar o mouse Para mudar todo esse comportamento, precisamos alterar as configurações. Existem várias maneiras de mudar esse comportamento e, para nós, vamos explorar como mudá-lo por meio do modo de jogo Agora, para conseguir isso, vamos usar um modelo e grande parte da nossa programação. Então, vamos para a gaveta de conteúdo novamente e selecionamos Adicionar e adicionar recurso ou pacote de conteúdo Essa é uma forma de adicionar aos seus projetos esses pacotes de conteúdo, os modelos que a Areal oferece, caso você ainda não tenha feito na criação do projeto Você pode adicionar o Blueprint one, o Seplus one ou o pacote de conteúdo inicial Vamos até o Blueprint e selecionaremos a parte superior para baixo. Vou pressionar outro projeto. Será instantâneo para mim. Pode não ser para você. Eu recarrego essas informações porque já as baixei em outros projetos Agora, quando o download terminar, ele abrirá o navegador de conteúdo em uma nova janela e poderemos fechar a anterior. Eu vou fazer isso em tela cheia. E vamos ver as coisas novas adicionadas. Foi adicionada a pasta de personagens, que contém os dinheiros para as animações. Acho que é um Many and Qin, algumas ferramentas de prototipagem de níveis e uma pasta de cursor para clicar de cima para baixo A própria pasta de cima para baixo, que contém um mapa que requer tudo isso para funcionar. E dentro da pasta de blueprints, podemos ver as três classes que na verdade, vamos usar muito Eu tenho usado muito a palavra classes e, para aqueles que são novos em programação, isso pode ser confuso Por enquanto, você pode considerar as classes também como modelos de programas, como São placas mais específicas para criar objetos em nosso mundo, e tudo em nosso mundo é um objeto. Por exemplo, temos três classes específicas de blueprint aqui Temos a classe de personagem e temos a classe de controle e o jogo ou classe. Cada um deles é reprogramado com um comportamento específico, que o torna uma classe E no nosso caso agora, estamos usando a classe antiga do jogo, que é responsável. Vou fechar essa janela aqui , que é responsável, como podemos ver nas configurações mundiais, pelo lago de classes, pelo controlador, pelo hud, por muitas coisas Agora, vamos acessar Gamed Override e selecionar o jogo de cima para baixo. Como você pode ver, ele já mudou as informações aqui para mais perto do que queremos. Se eu pressionar play, podemos ver o personagem de cima para baixo caindo sem parar Se eu remover a classe de peão padrão não usar nenhuma e pressionar play, o personagem desaparecerá e a câmera permanecerá onde a colocamos originalmente O que isso significa, por meio do comportamento predeterminado do modo de jogo, quando temos um peão de classe padrão, ele sempre aparecerá no início do jogo quando pressionarmos play Mais informações sobre o modo de jogo são que ele é executado por nível. Isso significa que ele está contido no interior. Ele contém regras para esse nível, mas podemos usá-lo em vários níveis porque talvez queiramos ter as mesmas regras ou vários níveis. Podemos ter quantos modos de jogo quisermos em nosso jogo, e sempre podemos substituí-los aqui Eu uso a palavra substituir porque podemos definir um modo homossexual padrão, eram as configurações do projeto quando configuramos o modo homossexual Podemos descobrir que podemos colocar um padrão que todos os nossos mapas usarão. Oh, Mode é uma aula um pouco complicada. Também é responsável por coisas multijogador e posso conter muitas regras especiais. A habilidade que ele tem de reiniciar em cada nível. Deixe-me dar um exemplo na pintura, torne-a mais dolorosa visualmente. Ah. Se esse é o nosso nível, quando o carregamos, começamos com o modo de jogo. Por que eu digo que devemos começar com o modo de jogo? Porque o modo de jogo é executado antes da abertura do nível. Como podemos ver isso claramente. O nível em si tem um outro plano específico independente, chamado de plano de nível Podemos demonstrar isso indo para o projeto, e indo até esse vento aqui, e um plano de nível aberto Agora, para aqueles que são novos, essa é a parte do gráfico de eventos do plano Explicaremos mais coisas um pouco mais tarde. O que eu vou fazer é começar a jogar. Eles nivelam o plano. Isso significa codificar que, quando o nível começar, imprima uma string no console que tenha essas letras dentro dele Vou copiar essa string. Vou acessar o navegador de conteúdo. Vá para o modo Down Blueprints. Se ele abrir assim, geralmente acontece porque não há código dentro dele, então ele nos mostra as variáveis padrão do blueprint A banheira padrão. Vou compilar, abrir um plano completo Vou clicar com o botão direito do mouse no gráfico do evento e digitar de acordo. Eu vou colar. Impressões. corrigir esse molde A Gain. Planta. Compile e eu vou apertar play Como você pode ver, ele imprimiu primeiro um modo de jogo e, acima dele, o plano do nível Isso significa que a ordem em que isso é executado é o primeiro modo de jogo, que contém todas as informações. Conversamos sobre o controle do player, o telefone do player, tudo, e então ele executou um plano de nível contido Algumas perguntas podem surgir na cabeça de algumas pessoas sobre por que estamos usando isso e por que não estamos usando aquilo? Na codificação, há algo como referência. Isso significa que eu quero fazer alguma coisa, ou outra coisa para fazer algo por mim. Em geral, se eu quiser comunicar algo com outra coisa, como o jogo, eu me comunico com um plano de nível. Eu tenho que ter uma referência. Há uma referência. Então, eu tenho que ter uma referência para você. Um dos princípios, um dos princípios, na verdade, mas uma das maneiras pelas quais pensamos quando estamos programando algo é sobre as referências. Como posso obter uma referência sobre isso e como faço para obter uma referência sobre isso? Há muitas regras. Não vou entrar em muitos detalhes, mas essa é uma das maneiras pelas quais escolhemos o que usar. Há decisões e regras muito mais complicadas que precisam ser levadas em consideração. Mas, por exemplo, uma coisa importante é a referência para um iniciante, algo com o qual ele precisa se acostumar Oh, por que estamos usando o modo de jogo também e como vamos usá-lo? É que vamos demonstrar a capacidade do modo de jogo de se reiniciar sozinho. Isso significa que, quando estamos carregando o nível, queremos disparar coisas específicas que estão acontecendo. E quando recarregarmos o nível, esqueça-os e recarregue-os desde o início Em um exemplo mais específico, o que vamos usar é o modo de jogo para criar o menu principal. Vamos criar um novo slide. O que vamos criar é um programa que diz: Dê-me o menu principal, o jogador pressiona ou inicia e, em seguida, inicia o jogo, continua com o que fizemos ou sai do jogo Mas quando o jogo terminar, queremos recarregar isso O que vamos fazer é abrir o nível novamente daqui. Então, quando abrimos o rótulo novamente, queremos mostrar o menu principal novamente. Mas vamos usar o modo de jogo para hospedar isso. Acho que isso é suficiente para a teoria. Para este, vejo você na próxima com mais ação. Adeus 3. Como criar o menu principal: Olá, bem-vindo ao workshop de design de jogos e às cinco chamadas processuais de criação de Dungeon Action PZ do Real Engine Dungeon Action PZ Na lição anterior, começamos criando nosso mapa na pasta maps. E então continuamos adicionando o modelo para personagens de cima para baixo e mudamos o modo de jogo em nossas configurações de parede. Também adicionamos um cubo e uma luz direcional e demonstramos a habilidade, bem, não a habilidade, mas a ordem das operações em que o modo de jogo executa primeiro e, em seguida, o nível do jogo é executado quando estamos iniciando Agora, eu vou deletar essas sequências, e também vou deletar o cubo e a luz de direção, e vou salvar tudo Nesta lição, vamos criar o menu principal do widget do nosso jogo usando um esquema de widget Agora vou para Conteúdo, clique com o botão direito do mouse, crie uma nova pasta e chame-a de U. Dentro dessa pasta, vou clicar com o botão direito Interface do usuário e selecione o esquema do widget. Agora, o que é um modelo de widget? Um modelo de widget é uma forma real de criar interfaces de usuário Vou selecionar o widget de usuário da classe comum. Há muitas outras aulas para coisas muito específicas para fazer. O que precisamos é de um widget de usuário. Vou chamar isso de WG. Menu principal. E eu vou abri-lo. Antes de começarmos a programar o widget e o menu principal. Vamos falar um pouco sobre widgets para quem é novo. Em primeiro lugar, podemos notar que esse gráfico parece um pouco diferente dos gráficos que vimos na planta do modo de jogo ou na planta do nível do jogo O motivo é porque estamos na guia designer do widget Há também uma banheira gráfica que parece mais familiar aos outros gráficos. O motivo é que na banheira gráfica, estamos fazendo a programação do widget, enquanto na banheira de design, estamos fazendo a parte visual do widget O widget aparece na tela. Para fazer isso, estamos usando itens da nossa paleta e os configurando como queremos que tenham a aparência Ah. Mais uma coisa, quando estamos adicionando algo no lado visual do widget, podemos ver isso aqui na hierarquia Agora, vamos começar adicionando uma tela. Eu vou soltá-lo aqui, ou eu poderia simplesmente arrastá-lo e soltá-lo aqui e será o mesmo. Descrição do que o Cvass faz. Você pode ser encontrado ao passar o mouse sobre ele e ver a descrição do Opta Mas, basicamente, é um elemento para dizer onde nossos widgets estão no espaço em nossa tela Você pode ter um cavaço menor do que sua tela. Você pode ter telas dentro de cavas, não é recomendável ter muitas Oh, vamos demonstrar isso. Traremos um botão aqui. Coloque-o dentro da tela. Eu posso dizer onde na tela eu quero que esteja ou qual o tamanho. E dependendo do Canvas, na verdade é tela em tela cheia ou parcialmente essa tela, por exemplo, podemos ter uma tela em um widget menor em um canto ou algo assim por exemplo, podemos ter uma tela em um widget menor em um canto ou Ele diz onde se basear nessa convas. Agora, se eu tivesse um segundo botão, isso complicaria Digamos, por exemplo, que eu queira esse botão exatamente abaixo desse botão, e é difícil ver essas coisas Mas existem outras ferramentas, como, por exemplo, uma caixa vertical ou uma caixa horizontal. Agora, precisaremos de uma caixa vertical. E dentro dessa caixa vertical, eu apaguei os outros botões. Talvez precise deles. Vou trazer uma caixa vertical novamente e fazer tudo. Agora eu posso arrastar esses ptons dentro dessa caixa vertical. E como esses botões estão alinhados verticalmente nessa caixa. Agora, o tamanho, porém, é determinado pela caixa. Há muitas maneiras de alterar o tamanho e tudo mais. Temos que passar por uma experiência completa de interface de usuário agora. O que vamos fazer é colocar a caixa onde quisermos e dimensioná-la o quanto quisermos. Para fazer isso, mantenho o mesmo lugar em qualquer resolução porque esse é o e aqui. Sempre podemos compensá-lo com base nessa âncora. O que é uma âncora? Ele diz ao widget onde ser colocado com base nessa âncora, mas com base nesse Então, se eu mudar a resolução agora, ela tenta manter esse lugar, mas quando eu vou para resoluções não ortodoxas, ela meio que perde o controle Isso pode ser corrigido colocando a âncora ao redor e ele também tentará mantê-la Novamente, observar todas essas coisas não é muito fácil, mas existem outras maneiras de fazer isso Por exemplo, se eu selecionar a caixa vertical e ir para o painel detalhado. Quando eu seleciono tudo, novamente, temos um painel detalhado, como tínhamos no plano, o plano de saída do jogo, como temos no nível, quando selecionamos algo, e vamos até cada Oh, quando eu seleciono o painel de detalhes da caixa vertical, eu posso ver que há uma âncora Vamos começar com a opção de âncora. Ah. Você pode ver que existem algumas posições de ancoragem predefinidas O que vamos escolher é o do meio. Queremos ancorá-lo no meio da tela. Mas, como você viu, isso não moveu nosso widget para o meio da tela Tente dizer onde estava. A razão é porque ela está sendo compensada por esses valores aqui, posição x e posição y. Se eu eleger essa coisa que é o valor padrão, vamos para o ponto pivô original Agora, o que é um ponto de pivô? Isso significa que essa caixa , por exemplo, não está no centro, mas o ponto em que estamos manipulando seu tamanho começa nesse canto Agora, se eu definir uma quantidade específica de tamanho, como 500 por 300, talvez 300 talvez 200. Bem, queremos alguns botões longos, por exemplo. Podemos dizer que o deslocamento x da posição seria de menos 50 E a posição y seria -100. Agora ele está posicionado no meio porque o compensamos por esses valores Mas e se eu quisesse alterar o tamanho do meu widget? Agora, isso não é mais, eu tenho que fazer matemática novamente. Para não fazer todas essas ações novamente. Poderíamos dizer que a posição não está deslocada, em primeiro lugar, recomendo o alinhamento, que é um valor 0-1, ele pode realmente ir para negativo O alinhamento é 0,5 e 0,5. E isso coloca o widget no centro. Alinhe meu widget em uma porcentagem em um valor de 0 a 1 em relação ao eixo x e ao eixo y. Se eu mudar o tamanho, você verá que ele sempre fica no meio. Vamos trazer isso de volta para 100100200. Ah, compile e salve. Agora, temos nosso widget no meio da tela. Mas nossos botões não são exatamente muito bonitos do jeito que estão. Aquele abaixo do outro, mesmo em um menu mínimo, isso não deveria acontecer. O que vamos fazer é selecionar os dois botões, perder a opção. E no alinhamento vertical, vamos escolher a opção, inserir alinhamento, inserir alinhamento Agora você pode ver que nossos botões estão muito melhores. Uma ideia interessante aqui seria que, quando selecionamos os dois botões, mantemos essas configurações comuns, como se ambos tivessem essas configurações, mesmo acontece com os dois. Se eu selecionar com o controle escolhido na caixa vertical, você pode ver essas configurações desaparecerem porque a configuração do desgaste deve ser baseada em algo. Como você pode ver, o slot vertical da caixa está acima aqui, e quando eu seleciono a caixa vertical, o slot do painel Cvas está aqui em cima Então, isso é definir a posição dentro do Cvass, onde aqui, estamos definindo a posição dentro da caixa vertical, a posição de alinhamento ou qualquer outra coisa Agora, há muitas outras maneiras de fazer isso. Poderíamos ter colocado espaçadores entre esses botões. Esse é outro. Vamos realmente demonstrar isso. Vamos afirmar que os dois botões são controlados e selecioná-los verticalmente Agora, dois botões grandes. Eu os quero menores, então eu poderia usar algumas bases. Traga-o aqui entre os dois botões, vou colocar outro acima do outro botão. Vamos colocar um abaixo do outro botão. Agora, se você notou outra ponta de tração real que podemos ver, quando eu coloco o botão aqui, ele coloca essa linha, essa linha azul aqui com um pequeno R no canto que aponta para cima. Isso significa adicioná-lo à hierarquia acima. Por exemplo, a hierarquia acima agora está na caixa vertical Se eu tentar adicioná-la aqui e ela colocar uma seta abaixo, ela será adicionada à hierarquia abaixo, acima do espaçador Mas se eu tivesse a seta para cima, ela a adicionaria à hierarquia acima, o painel Canvas. Vamos tentar isso. Vamos colocá-lo aqui, vamos lançá-lo. Como você pode ver, ele foi adicionado na hierarquia do Canvas. Se eu medir aqui, ele o colocará na caixa vertical por padrão no final Vou selecionar os espaçadores e vou selecionar. Como você pode ver, são bases descascadas e agora os botões também parecem um pouco melhores do que colocá-los um acima do outro Com essa configuração, podemos ter tudo para sentir e funciona da mesma maneira. Não precisamos nos preocupar com alinhamentos verticais nem com nenhum. Agora, esses botões devem ter algum texto Quando adicionamos coisas na caixa vertical, adicionamos 12, três, quatro, cinco elementos. Mas quando estou adicionando algo a um botão, vamos usar o botão. Então, se eu adicionar algo no botão, como um texto, e eu vou adicionar, digamos que eu queira dois textos. Não posso fazer isso porque os botões só têm uma criança. Isso significa que eles só podem ter uma coisa dentro. Mas há uma maneira de contornar isso. Você pode ter uma coisa que tenha muitas coisas dentro dela. Por exemplo, você pode ter um botão uma caixa vertical dentro dele. Como podemos ver, a caixa vertical pode ter muitas coisas dentro dela. Isso se chama filhos, e quantos filhos um elemento pode ter? Bem, vou copiar esse bloco de texto e colá-lo no outro botão. E eu vou para o primeiro bloco de texto, altero o texto em seus detalhes. Diga um nome. E vá para o outro botão também, e como bloco de texto dois. Acho que isso é suficiente para esta lição. Eu vou te ver na próxima. Adeus 4. Como adicionar o menu principal à janela de visualização e encerrar a funcionalidade: Olá, bem-vindo ao Game Design Workshop, sou o verdadeiro curso de criação de ARPG de ação Lensing Five Procedural Dungeon ação No anterior, terminamos com o visual do menu principal Neste, vamos começar a programar algumas coisas para que possamos ver esse menu principal em nosso jogo. Agora, vamos para o modo de jogo. Se você não conseguir encontrá-lo, ele está na banheira de conteúdo na interface do usuário da pasta e não, desculpe, na pasta de cima para baixo, nas plantas dobradas e o modo de jogo está Plantas de cima para baixo, game.de. Não, em nosso modo de jogo, vamos arrastar um cabo. Agora, vamos explicar algumas coisas sobre esse cabo aqui. Fizemos isso antes com Print string, mas não dissemos nada sobre isso. Então, o que é isso, essa é a linha de execução dos projetos O que isso significa, em resumo, é que essa execução controla o fluxo da lógica. Quando um evento é acionado, ele segue essa linha de execução para acionar as ações que serão executadas em uma determinada ordem. Basicamente, ele determina a ordem em que as coisas acontecerão. Então, vamos demonstrar isso. Se eu colocar uma impressão. E para a string, vou colocar uma, e depois colocar, vou copiar e colar essas. Coloque uma sequência de caracteres de impressão dois. Eu vou para o mapa geral, no mesmo nível. Eles selecionaram e jogam. Oh, eu posso ver um, dois, ele imprimiu primeiro um e depois dois. Agora, há momentos especiais que isso não acontece exatamente quando estamos jogando com atrasos, quando estamos acionando outros eventos que têm atrasos, ou quando há vários motivos para que isso não aconteça em ordem, mas todos eles também Vamos demonstrar isso com um exemplo. Se eu fizer um evento personalizado. Isso significa que um evento meu, como começar a jogar, é um evento prescrito. Ele morde quando a planta é executada. Quando eu uso um evento personalizado, é um evento que eu criei, então eu tenho que chamá-lo. Vamos chamar esse evento personalizado de realmente teste. Bem, vou colocar uma sequência impressa de duas aqui. Na verdade, vou mudar para três. Vou ligar para meu evento personalizado aqui. Agora, se eu conectar esses dois, vamos jogar, tudo será coletado, um, dois, três. Mas se eu colocar um atraso aqui, digamos de 2 segundos ou 0,2 segundos, posso ver um, três, dois. Isso foi acionado aqui, mas como tem um atraso, ele aguardará o valor, mas isso continuará. Ter um atraso não fará com que ele pare. Mas agora vamos inserir um limite de quatro loops. Se eu tenho quatro voltas aqui, agora o que são quatro voltas? Então, vamos lá. Ah, é um nó de programação que começa com um índice e termina com outro índice, e faz isso até passar por todos os índices. Para o corpo do loop, vou conectar isso aqui e, na verdade, vou fazer isso a partir de dois, digamos, seriam cinco. E vá e aperte play. Veja um, dois, três, 45. Para esse nó, por exemplo, ele esperou para concluir esse nó e depois continuou para a outra linha De qualquer forma, praticando e explorando o motor e a programação, as pessoas aprenderão mais sobre essas coisas. Agora, vamos deletar tudo isso porque não vamos precisar disso. Não precisaremos de um evento de teste. E vamos começar trazendo nosso widget para nossa janela de exibição. Eu vou fazer isso. Na verdade, precisamos de um evento personalizado, seja, como evento, e vamos chamá-lo de mostrar menu principal. Quando começamos o jogo, queremos mostrar o menu. Agora, quando clicarmos duas vezes nele, ele nos levará ao evento que criamos. Ou se tivéssemos uma função aqui, falaremos sobre funções mais tarde, isso abriria a função para nós. Agora, mostre o menu principal, vamos criar Porque para trazer nosso widget ao mundo, temos que criá-lo de alguma forma Precisamos tê-lo como uma entidade, e a classe que vamos escolher para o widget será o menu principal do WG Agora, possuindo um jogador, vamos usar o controlador do jogador E o que esse jogador proprietário significa. Basicamente, se tivéssemos um co-game local, talvez, e também houvesse alguns usos no modo multijogador mostrar widgets para outros jogadores e outras coisas, talvez Ele informa ao motor a quem esse widget pertence. Então, criamos o widget. Agora, se eu for prensar argila, nada vai acontecer. Não vemos o widget A razão é porque quando estamos criando o widget, nós apenas criamos uma variaa dele, criamos uma pequena célula que contém as informações desse Não dissemos ao motor faça algo com esses dados. Então, o valor de retorno é o widget que criamos. Se passarmos o mouse sobre os pinos de um nó, podemos ver mais detalhes sobre eles Então, para fazer referência ao objeto do menu principal, criamos um widget do menu principal, que é um objeto Como dissemos antes, tudo é um objeto. E temos uma referência a isso. O que vamos fazer é promover essa variável e chamá-la de menu principal do W G. Agora, temos nossos dados, temos nosso widget e os armazenamos nessa variável, e queremos dizer que algo aconteça com esses dados Vou trazê-lo das variáveis aqui porque quando estamos criando uma variável, ela está sendo armazenada aqui. Vou trazer essa variável e dizer adicionar à janela de visualização. Esse é o comando para adicionar um widget na sua janela de visualização. Bem, eu vou conectar isso aqui. E agora eu vou pressionar A, e isso vai virar um widget Eu pressiono os botões. Nada acontece ainda. Mas vamos programar isso agora. E a primeira coisa que vamos programar é o botão quid. Então, vamos para o nosso modo de jogo de cima para baixo, menu principal do Widget, e vamos para o botão quid Agora, se escolhermos esse botão, queremos fazer algo com esse botão. Portanto, precisamos determinar seu comportamento. Para fazer isso, precisamos clicar na variável nos detalhes. Vou clicar aqui e nomear esse botão também como Sair. T. E agora vou me aprofundar nos detalhes, e essa lista de eventos apareceu. Se eu desclicar na variável, ela desaparecerá. Se eu clicar na variável, ela aparece. Isso não significa que eu não possa usar o botão de outras formas. Há outras maneiras de usá-lo sem ser uma variável. Mas é assim que vamos fazer isso agora, e é a maneira mais comum. Vamos escolher o evento com um clique. Ou pressionado. A diferença entre os dois é que, quando clicamos, precisamos clicar no botão e, quando o soltamos e ainda estamos no botão, ele aceita essa ação. Bem, pressionado é que, no momento em que clicamos, isso acontece. Não. No botão clicado e. Vamos simplesmente arrastar uma mesa e dizer: Q. Não vamos especificar o jogador Não vamos especificar as preferências de saída, vamos simplesmente deixá-las e não vamos ignorar as restrições da plataforma porque isso não é para nenhuma plataforma específica. Oh, vamos compilar e salvar, ir para o nosso nível de jogo e pressionar play Agora, se eu clicar em Sair, soltá-lo não funcionará, mas se eu clicar e soltá-lo enquanto estiver em Sair, é o jogo. Acho que esse é um bom ponto de parada para esta aula. Nos vemos na próxima. Adeus. 5. Mecânica de tela de carregamento e geração de labirinto: Olá, bem-vindo de volta ao Game Design Workshop Real sin five Procedural Dungeon action A Psy creation course Anteriormente, criamos nossa cadeia de eventos no início do modo de jogo para mostrar nosso menu principal e criamos um evento personalizado que cria o widget, armazena em uma variável e o adiciona à janela de visualização Também programamos a funcionalidade do botão rápido usando o evento de conflito e usamos o nó do jogo Qi Agora, continuaremos com a funcionalidade de iniciar o jogo. Mas antes de começarmos a programar o botão Iniciar, vamos explicar um pouco nosso sistema. Então, o que vamos ter é um gerador de labirinto. Isso vai construir o nível, como quiser. Vamos criar algumas regras. Teremos algumas regras no gerador, como ele funcionará na criação de um nível. Mas esse nível tem um começo e um fim. E esse fim gerará outro gerador. Ele passará de gerador de massa para gerador de massa para gerador de massa, e terá algumas regras e ficará maior, etc Então, quando iniciamos um jogo, quando pressionamos, digamos que temos o modo de jogo e, a partir do modo de jogo, geramos o menu principal O menu principal pode ser torcido ou iniciado. É aqui que vamos gerar o gerador do labirinto Agora, aquele gerador de labirinto, precisamos ter uma opção que seja a primeira, ou seja alguém no meio ou no final, que é quando o jogador perde Portanto, há várias maneiras de fazer isso. A maneira como vamos fazer isso é expor uma variável Isso é expor uma variável que vai aparecer. Basicamente, será um lingote que dirá ao labirinto você é o primeiro ou não, que é uma maneira muito simples de fazer isso Já que vamos gerar esse ator, e cada ator, vamos gerá-lo Agora, o que essa variável fará por nós agora na primeira parte do nosso programa. Isso diferenciará do labirinto que, se você for o primeiro, prossiga no carregamento. Isso é carregar a tela de carregamento Então, teremos uma barra para carregar reabastecimento, pois o gerador está construindo o labirinto e está pronto para Não. Vamos começar. Vamos começar criando nosso projeto de gerador de labirinto. Vamos ver o conteúdo. Vamos para a pasta de conteúdo e clicaremos com o botão direito do mouse em uma nova pasta. Vou chamá-lo de plantas. Agora, começamos a ter muitas pastas e, basicamente, o que poderíamos fazer é clicar com o botão direito nas plantas e definir a cor Vou configurá-lo para azul. Indo para a pasta UI, clique com o botão direito do mouse e defina a cor. Vou dizer isso para azul claro. E você precisará de qualquer outra pasta rapidamente. Talvez uma pasta de cima para baixo. Vou configurá-lo para um verde. E agora posso sair rapidamente de cada pasta dobrada com base em suas cores Agora, dentro da pasta blueprints, vamos clicar com o botão direito do mouse e criar uma nova classe de blueprint Agora, quando eu faço isso, aparece o menu que me diz você quer criar uma classe de modelo ou algo a partir de um modelo que o real oferece Se pudermos, há várias classes que podem ser criadas. O que queremos agora é uma aula de atores. Basicamente, um ator é um objeto que pode ser colocado ou gerado no mundo Basicamente, tudo é um objeto que pode ser colocado, mas tudo tem algumas regras extras. O ator é o mais vazio. Por exemplo, a planta do personagem que temos de cima para baixo tem, por exemplo, uma esfera de colisão, não uma cápsula de colisão, desculpe, e uma malha estática e uma direção estreita até Ele tem o componente de movimento, que é exclusivo da classe do personagem. De qualquer forma, talvez eu esteja explicando muitas coisas agora. Então, vamos criar um ator. E vamos chamar esse ator de PP Mazen, gravar tudo e abrir o gerador de labirinto Eu vou colocá-lo aqui. Agora, a primeira coisa que vamos fazer é criar uma variável. Vamos até Variáveis e pressionaremos este símbolo de adição aqui. E já o transformou em ouro, pois queríamos diferenciar se o labirinto é a primeira peça ou se continua sendo construído Vou nomeá-lo em Tu. Vou chamá-lo de continue. Talvez não seja o melhor nome, mas faremos o trabalho agora. Agora, vou voltar ao menu principal e vou até o botão Iniciar, que é variável, nomeie-o como botão artístico. E vou pressionar em clicar porque fizemos em clicar em clicar Devemos fazer isso no botão de arte. Também no clique. Agora, como faço para trazer esse ator para o mundo? Usamos um nodo chamado Stone Actor da classe. A classe que vamos selecionar para ser a geradora de labirintos Gênero de labirinto BP. Agora, tem outra opção aqui. É chamado de transformação. O que é transformação, para aqueles que são recém-transformados é um grupo de informações, é uma estrutura de informações. Vamos falar um pouco mais sobre estrutura, mas não é uma variável estruturada É uma variável única que contém três vetores. E se eu clicar com o botão direito do mouse e dividi-la, podemos ver que ela contém a localização da transformação son, a rotação da transformação spon e a escala da transformação spon, que é três unidades vetoriais Um deles é um rotador. Os outros dois são apenas vetores normais. Isso significa que queremos estourar esse ator, mas onde queremos gerá-lo com qual rotação e em que escala Por enquanto, não por enquanto, na verdade, vamos gerá-lo no lugar zero, zero, zero do mundo, zero, x, zero, y e zero, e com a rotação normal e a escala padrão Antes dissemos que vamos especificar isso para esse gerador de labirinto, seja ele contínuo ou não Há muitas maneiras de fazer isso. Vou te mostrar rapidamente duas maneiras. Vamos até esse spawn e, a partir daqui, a partir do valor de retorno, obtemos a referência real à coisa que tocamos, o ator que atendemos Eu posso fazer a partir daqui, o que eu posso fazer é continuar, como você pode ver, o alvo é o ator que acabamos de matar. E o valor, podemos defini-lo como sim ou não. Outra forma de fazer isso, vou deletar isso indo para o gerador de labirinto e ir para a variável continuada, que é edição de instância e é exposta no span Isso significa que se eu compilar agora e salvar, volte ao menu principal e selecione novamente porque ele não é atualizado automaticamente Às vezes acontece. Vou selecionar novamente este gerador de labirinto Agora eu tenho essa opção aqui. Não vou marcar isso, sim, vou deixar não, e quando essas colheres, por padrão, estiverem desligadas Agora, para nós, isso está desativado por padrão e queremos que seja desativado. Quando estivermos preparando o labirinto para continuar, é aqui que vamos começar. Então, para provar que geramos isso no mundo, vamos até o gerador do labirinto Vamos até o gráfico de eventos e, no início, vamos trazer cordas, e elas se formam como se fossem suas Agora, antes de morarmos aqui, devemos fazer mais uma coisa. Estamos estragando o gerador do labirinto. Mas a próxima coisa que devemos fazer é remover nossa parte visual do widget Do nosso ponto de vista. E para fazer isso, vamos remover da peça. Esse é o nó usado para isso. E como alvo, teremos o eu. Alvo geralmente em nós significa quem está fazendo isso. Se formos para o modo de jogo e para a direita, remova da peça. Vamos ver que é sensível ao contexto, isso não existe. Mas se eu remover isso, podemos encontrá-lo. Como você pode ver, ele pertence ao widget da categoria. Então isso significa que está fazendo algo por um widget. Vou clicar nele. E se eu conectar isso aqui, nada acontecerá porque o modo de jogo não é um widget, vou apenas acionar um erro ou nada Mas se eu conectar o menu principal do widget, que salvamos em nossa referência aqui para remover do Parent, ele saberá que esse menu principal do widget, digamos que criamos cinco deles e salvamos apenas um deles Essa que salvamos como variável será removida do pai. Agora, vou deletar isso e vamos deixar isso e remover do pai. O alvo em si. Estamos no widget, empilhando e salvando, e vamos jogar Ao pressionar play, o Maze gen tem um telefone e o widget Eu acho que este é um bom ponto de parada para este. Eu vou te ver na próxima. Adeus. 6. Como criar uma tela de carregamento: Olá, bem-vindo ao workshop de Design de Jogos no curso Procedural Dungeon do engine five RPG de ação Na lição anterior, acrescentamos que, na verdade, criamos o gerador Blueprint Maze e o geramos por meio do botão Iniciar do menu principal Também adicionamos uma variável no gerador de labirinto que expusemos para poder configurá-la quando estamos gerando o labirinto, e essa variável era a variável contínua, que nos diferenciará se essa é a primeira peça ou é uma peça que continua que nos diferenciará se essa é a primeira peça ou é uma peça ou é uma peça Nesta lição, continuaremos criando as primeiras etapas da lógica, que é mostrar a tela de carregamento ou não. Vou deletar essa tela de impressão aqui, toque, e vou pressionar B e clicar, ou então eu poderia clicar com o botão direito do mouse e digitar ramificação, e vou trazer uma ramificação. Agora, o que é um galho? Basicamente, um ramo é uma declaração I. É verdadeiro ou falso com base em uma condição que aplicamos. E a condição aqui seria. Então, basicamente, é a continuação do labirinto anterior ou é a primeira peça Agora, quando criamos o menu principal do modo de jogo. Precisamos criar outro widget para fazer a tela de carregamento, e isso nos leva a criar um novo widget Então, vamos para a pasta UI. Vou clicar com o botão direito do mouse e acessar Interface do usuário, Planos do widget e selecionar o widget do usuário novamente Vou nomear esse WG loading loading. E eu vou abri-lo. Vou trazê-lo aqui e vou guardar tudo. Agora, vamos usar uma cavas novamente. E isso não é um problema porque, em qualquer caso, menu principal foi removido de um pai quando começamos. Portanto, ter outra conversa não é um problema. Não que ter duas conversas, ou três ou quatro, fosse um grande problema Agora, vou selecionar uma imagem, adicioná-la como plano de fundo e fixá-la em tela cheia Vou zerar as compensações. Como você pode ver, ele preenche a tela inteira. Vou usar as configurações de pincel, uma nova configuração que estamos explorando, que é basicamente aparência de algo. Nós trazemos um botão. Na verdade, vamos demonstrar. Onde está o jogo, podemos ver que quando eu passo o mouse esse botão muda de cor Então eu vou ao nosso menu principal e vou ao designer. Escolha os botões. Podemos ver abaixo o slot e as configurações de alinhamento. Podemos ver que existe um estilo de aparência, que tem muitas configurações para definir o estilo e a aparência do botão. Agora, vamos voltar ao carregamento e à nossa configuração de aparência. Então, nessas configurações, temos essa cor de pincel. Podemos selecionar a imagem que quisermos, mas, por enquanto, vamos usar apenas a habilidade de tonalidade. Ible e transforme-o para uma cor preta. E temos um fundo preto para nossa tela de carregamento. O próximo elemento que precisamos é chamado de barril de progresso. Esse é outro elemento exclusivo, como os botões. Quando os pressionamos, eles fazem alguma coisa. Essa é uma barra que é preenchida com base em uma porcentagem. Quero dizer, um pouco antes de entendermos. Vamos ver se há um estilo. Há também as configurações que conhecemos, as configurações que colocamos na posição, a ancoragem, o alinhamento e o estilo, que também tem muitas Também há outra configuração abaixo dela chamada progresso, que é exclusiva da barra de progresso. Se eu aumentar a porcentagem, você pode ver que ela preenche essa barra É Progress Martin. Sim. E tem algumas habilidades a serem preenchidas com base em alguma direção e em muitas outras opções. Agora, para nós, vamos apenas mudar talvez o fundo dos preenchimentos e a imagem Então, o que vamos selecionar será a opacidade da barra T. É isso que queremos para nossa imagem de fundo. E isso também é o que queremos para nossa imagem de campo. Opacidade B e barra. Ah, um pouco. Não queremos que a parte do progresso esteja lá em cima. Queremos que a parte do progresso seja um acorde no meio. Não vá para os desvios de posição. E quanto ao tamanho, podemos realmente morder. Vamos colocar o alinhamento Y X como no meio. Bom ponto. Y. Eles são 1.500, talvez 600, 1.600 ou X, e digamos que 50 parecem bons ou tamanho y. Agora, vamos começar com a cor Vamos preencher a barra b. Vamos colocá-la em 1%. Agora, vou usar o tom da imagem de fundo e selecionar algo um pouco mais acinzentado Mais. Isso é bom. Talvez coloque um ponto Alpha, para que faça um banimento, isso não acontece, mas também acontece se aumentarmos para diminuir, 2,3, você pode ver o banimento. 0,8, e algo está bem. Agora, se eu mudar a tonalidade na imagem de preenchimento, você verá que ela realmente não muda a cor que eu quero Isso ocorre porque isso está sendo preenchido por esta opção aqui, aqui cor de preenchimento e opacidade, que é uma configuração diferente para a cor da imagem que aplicamos Então, vamos mudar a cor aqui. Vamos colocá-lo em vermelho, um pouco mais escuro, um pouco mais Este 2.8. Bem, talvez 0,9 de vinho, e talvez dê a ele um verde zero e também um pouco mais claro em direção à luz laranja. Ok, acho que parece bom. E agora temos uma barra de carregamento assustadora ou uma plogra quadrada não tradicional OK. Agora, o próximo elemento que precisamos é um texto. Vou trazer uma variável de texto, que é apenas uma variável para a qual estamos escrevendo texto. Vou ancorá-lo no centro. Vou zerar as compensações. Tamanho, vamos alinhá-lo para 0,5. Então cinco. Esse, talvez três. Três está bem. Com esse tamanho, vamos digitar o texto primeiro. No texto das chegadas. Temos opções diferentes novamente. Então, nesse caso, temos conteúdo, que é o conteúdo do texto. Abaixo dela, podemos manipular nosso texto, nossa fonte, nossa opacidade da extremidade polar Nós o faremos em um segundo. Agora, para texto, vamos digitar flo em maiúsculas Vamos dimensionar isso até a fonte que é olhos de fonte. Cento e 30 fortes. 35. Isso parece bom. Uma olhada aqui, se estiver exatamente no meio, está quase no meio Está bem, está bem. Vamos mudar o texto também. Nós Nenhuma cor avermelhada, branco é bom, qualquer coisa. Você pode alterar a opacidade de um ou do parafuso base, luz tardia, regular para o que quiser Para nossos propósitos, agora, está tudo bem. Poderíamos animar o texto e entrar e desaparecer pela banheira de animação, criando uma animação, mas não vamos compilar e salvar E agora, como vamos usar essa barra no jogo para aumentar bem sua porcentagem. Primeiro de tudo, vamos chamá-la de barra de carregamento e torná-la variável porque queremos fazer algo com ela. E queremos fazer algo com qualquer parte da parte visual do widget que dissemos Temos que fazer disso uma variável. Se quiséssemos mudar o texto, por exemplo, teríamos que torná-lo variável. Queríamos mudar a imagem de fundo? Tivemos que torná-la uma variável. Oh, barra de carregamento, agora é uma variável. Vamos até o gráfico e vamos trazê-lo para mostrar algo. E quando eu saio disso, posso fazer qual porcentagem. E esse percentual é o valor 0-1. Basicamente, é uma variável de fluxo a ser definida completamente. Como podemos ver, é o mesmo valor que aqui 0-1. Podemos configurá-lo para dois, mas não terá nenhum efeito. Está abaixo de zero ou acima de zero. Portanto, é uma variável de zero para um. Fora. E é assim que definimos a porcentagem. Mas quando eu crio o widget, por exemplo, no modo ga Eu o armazeno em uma variável. Se esse widget tinha a barra de progresso, esse widget, no caso, tem esses dois botões como variáveis Neste widget, posso chamá-lo aqui de modo g. Posso chamar esses dois botões a partir disso porque tenho uma referência a eles. C é o botão de partida para isso. Eu posso obter uma referência a isso. Então, da mesma forma que eu faria ao criar o widget de carregamento e armazená-lo em uma variável, eu poderia pegar minha variável de referência e chamar o botão Iniciar ou a barra de progresso Mas isso também é chamar algo de novo e de novo. O que faremos é criar uma função que tenha, vamos ao gráfico. Vou copiar isso para a função. Como eu criei a função aqui e pressionei o símbolo de adição, e ela cria uma nova função. Então, vou criar uma função e colar isso. Então, quando eu quiser fazer tudo isso, na verdade, posso chamar essa função a partir do próprio widget Eu vou demonstrar isso em um segundo. Agora, para aqueles que eu conhecia, o que é uma função? Bem, em resumo, é um conjunto de instruções que podem ser facilmente chamadas e repetidas. Por exemplo, quando uso um determinado conjunto de instruções com frequência, posso colocá-las em uma função e não escrever esse conjunto de instruções toda vez que preciso delas. Há muitas regras sobre a função. Uma regra importante é que eles não podem envolver o tempo facilmente. Você não pode ter nós de atraso ou nós de linha do tempo em íons pois existem coisas que são chamadas de funções puras Há coisas que, de qualquer forma, estou exagerando nelas. Por enquanto, vamos considerar as funções como um conjunto de instruções que podemos chamar sempre que quisermos. E nesse caso, o conjunto de instruções que queremos é definir a porcentagem da barra de carregamento. Agora, quando eu chamo uma função, eu posso ter algumas entradas, como por exemplo, vamos trazer a função aqui No momento, está apenas chamando a função para fazer o que ela faz. Se eu arrastar esse cabo até aqui, ele diz, adicione pino ao nó. Vamos fazer isso. Eu criei uma variável de entrada para essa função. Eu volto ao gráfico. Eu posso ver que essa função agora tem essa variável em porcentagem. Eu posso fazer isso de outra forma posso adicionar, eleger a função e descer até seus detalhes nas entradas ou saídas, porque a função pode ter uma saída Por exemplo, digamos que, como uma ação, ela retorna verdadeira. Eu teria uma ramificação que, se isso acontecesse, ela retornasse verdadeira, se não acontecesse, ela retornaria falsa. Mas eu também vou combinar em detalhes. Agora, essa é a outra maneira de adicionar entradas ou saídas à função Vamos usar isso muito mais tarde e explicaremos isso muito melhor. Mas, por enquanto, vamos usar essa entrada em porcentagem e nomear a função em porcentagem. Não há motivo real porque, como você pode ver, essa função é a mesma que essa. Além disso, não quero chamar a barra de carregamento toda vez. Em termos de desempenho, não é realmente um grande problema. Chamando sempre a barra de carregamento a partir da referência. Já que estamos usando a referência de qualquer maneira. É só porque torna mais fácil para mim ligar por cento. Eu acho que este é um bom ponto de parada para este. Eu vou te ver na próxima. Adeus. 7. Como adicionar tela de carregamento ao modo de jogo: H. Olá, bem-vindo de volta ao workshop de Design de Jogos e ao verdadeiro curso de criação de Dungeon Action ps procedural Engine Five Dungeon Action ps Em nossa lição anterior, criamos nossa tela de carregamento, nosso widget de carregamento e criamos a função para definir a porcentagem da barra de carregamento Também projetamos em bares e tudo mais. E agora vamos adicioná-lo à nossa porta de visualização. Vamos colocá-lo em nosso jogo. Então, vamos hospedá-lo novamente no modo de jogo. Com isso, quero dizer, vamos criar um evento. O show está carregando. E vamos copiar e colar o código aqui. Vamos deletar essa parte. Na verdade, nem tudo. Nós vamos desfazer Em vez do menu principal, vamos escolher o widget de carregamento Estamos mostrando o carregamento, estamos criando o widget. Estamos armazenando-o em um carregamento variável. Um sublinhado? Vou conectar isso. É um pouco mais reto e traz variável de madeira. W G. Começamos a ter coisas de tia aqui, então vamos começar a comentar Ao selecionar iniciar evento de jogo, pressione C e digite B Anu Então, na verdade, vou selecionar os dois. Para colocá-los de lado e digitar, pressione C e digite Widgets Eu vou torná-lo um pouco maior. E eu vou selecionar o menu principal do show. Digite mostrar menu principal. E a mesma coisa no tipo de carregamento mostra ping. E vou mudar a cor desse comentário para algo como azulado E começamos a fazer alguns pedidos aqui. Agora vamos compilar e salvar, e isso traz nosso widget para nossa janela Agora, de onde chamamos isso? Vamos voltar ao nosso gerador principal para nossa filial contínua. Vamos dar isso por enquanto. Agora, se for verdade, se continuar, veremos mais tarde o que está acontecendo. Mas se for falso, vamos selecionar, vamos encontrar um nó chamado Get game mode, e isso nos dá acesso ao nosso modo de jogo atual. O problema aqui é que este é um nó genérico do modo de jogo Get. Isso significa que ele retorna um objeto genérico baseado no modo de jogo, como podemos ver no valor de retorno. Então, quando eu quero meu modo de jogo específico, esse modo de jogo, usamos um nó chamado casting. O que significa casting? Basicamente, ele pergunta se o objeto que estamos objeto que estamos testando é de uma classe específica. Vou perguntar para o modo de jogo de cima para baixo. Então, agora eu estou recebendo o jogo de, e eu estou perguntando, este é o jogo d que está rodando no jogo, o jogo de que está realmente ativo agora. Se for, podemos extrair um cabo do molde puro. Se não for, não será mais puro, desculpe, do lado do elenco Ou, se não for, falhará. Agora, quando eu retiro um cabo da parte de sucesso, eu também tenho outra variável que diz: S BP top down game d. Isso significa que podemos realmente chamar diretamente nosso modo de jogo de cima para baixo que estamos usando neste momento Isso significa que tenho acesso a todas essas variáveis que criamos e armazenamos quando elas estão sendo criadas. Se não forem criadas, essas variáveis estarão vazias. Agora, vamos voltar ao gerador M. Como você pode ver, ele tem esses pinos de execução e, quando cometi o erro anterior, chamei isso de puro elenco Eu queria mostrar que existe uma maneira não ter isso como execução. É chamado de converter para conversão pura, remova os pinos de execução para tornar o nó mais versátil A conversão ainda falharia, resultando em uma entrada inválida na saída, desculpe O que isso significa é que isso cria uma variável de sucesso. Assim, podemos tê-lo, por exemplo, em uma filial, se houvesse uma chance de esse não ser nosso modo de jogo. 02, por exemplo, código de erro. Esse plano, e poderíamos dizer que, se isso for falso, digamos erro, o jogo está errado, por exemplo Mas não vamos fazer isso. Sabemos que nosso jogo será esse. Então, o que vamos fazer é beber daqui e promover variáveis E, na verdade, isso poderia ser feito antes da filial. Vou levar isso aqui. E quando promovemos para variável, ela usou o nome BP top down game old Então, isso é muito conveniente para nós. E temos essa referência, e podemos simplesmente arrastá-la e soltá-la na variável que criamos. Ah, quando você arrasta e solta com o mouse, você pode obter um get ou um set. Um get é obter a variável, um setter é algo o qual estamos configurando a variável Há um atalho rápido para isso. Se eu arrastar com control e soltá-lo, ou se eu arrastar com lt e soltá-lo, ele obterá um getter ou um setter com lt. Agora, guarde isso A partir daqui, vamos selecionar a tela de carregamento. Agora, se nossa continuação for falsa, mostraremos a tela de carregamento. Se eu pressionar play agora, pressionar iniciar jogo, podemos ver nossa tela de carregamento, aqui está. Adicionamos com sucesso a tela de carregamento. Agora, vamos nos aprofundar um pouco mais em como nossa tela de carregamento funcionará e como nosso gerador de labirinto funcionará Oh, eu vou abrir a pintura. Vamos considerar isso como nossa barra de carregamento. E, como dissemos, vamos preencher a barra de carregamento com base na porcentagem de nossa geração de labirintos Mas se considerarmos essa geração Maze, vamos falar um pouco sobre a geração M, como ela funcionará A forma como funcionará é adicionar algo que chamaremos de bloco. E ele adicionará blocos com base em algumas regras e criará uma forma. De um labirinto de qualquer coisa. Agora, adicionando essas peças e criando as formas como o jogador se moverá, por exemplo, criará blocos e coisas. Vamos chamar isso de fase um. Vamos chamar isso de fase um. Essa seria uma maneira fácil de fazer o carregamento Essa porcentagem é baseada em zero a no máximo em madeira serrada Isso é um x, não um t. Então, zero a máximo seria a porcentagem da barra de carregamento. Mas depois disso, nosso labirinto fará outras coisas, criará paredes , trocará materiais , quebrará coisas. Então essa fase é meio que um ponto de interrogação, qual é o tamanho da porcentagem qual é o tamanho da porcentagem dessa barra de carregamento. Então, o que vamos fazer é fingir. Digamos que isso seja 0,2%, isso é 20%, desculpe porque é o valor 0-1 Então, isso vai levar 0,3%, por exemplo. Vamos definir porcentagens falsas porque realmente não sabemos nem mesmo como o computador do jogador responderá a isso Algumas ações são baseadas em GPU, algumas ações são baseadas em CPU Então, sim, vamos definir porcentagens falsas. Geralmente é isso que você vê barras de carregamento indo, parando, subindo até um ponto com uma grande velocidade e depois parando e avançando, porque para aqueles que são usuários mais avançados, alguns loops demoram mais Portanto, para que os loops congelem a cama, pode haver laços largos que congelam completamente o computador É aqui que geralmente é a parte em que não podemos nem mesmo uma banheira em certas barras de carregamento. Sim, de qualquer forma, depende de que sempre existam maneiras mais avançadas de fazer isso e torná-lo perfeito e ser capaz de controlar seu computador completamente e ser muito específico com um grande conhecimento técnico e parte de design do jogo Mas, para nós, vamos usar algumas formas básicas. Agora, vou encerrar isso, e acho que esse é um bom ponto de parada por enquanto, e vamos demonstrar essas ações na próxima. Digamos, por exemplo, tenhamos um bloco mínimo de zero a um bloco máximo e definamos uma porcentagem dessa barra a porcentagem de zero para o bloco Mx Nós vamos parar por aqui. Eu vou te ver na próxima. Adeus 8. Construindo o algoritmo de labirinto: Olá, bem-vindo de volta ao workshop de Design de Jogos, And real Engine five Procedural Dungeon action A Ps creation course Anteriormente, terminamos com a barra baixa de Dan e explicamos como ela será preenchida. Usamos o modo de jogo para gerá-lo. E chamamos isso de pawing our Me a partir de nossa referência de modo de jogo Agora, nesta lição, vamos continuar com a matemática necessária para preencher a barra de carregamento. Vamos criar uma função. Vamos chamar isso de lc calcule o carregamento do ladrilho. Isso é bom. Vamos fazer essa função. Vamos selecionar a função quando ela é aberta e l a pura. Como dissemos, as funções são como modelos de código que podemos repetir com frequência. E suas funções, conversamos um pouco sobre elas. Eles são para realizar operações. Isso significa que eles precisam de uma saída e não têm uma linha de execução. Podemos ver uma linha de execução aqui, mas se eu trazê-la para o gráfico de eventos e arrastá-la aqui, você pode ver que ela não tem uma linha de execução. Se quisermos que isso seja executado, ele precisa ter uma saída que possamos conectá-lo a algum lugar e requer as informações dessa função. Por regra, a função pura não deve ter configuradores, não deve alterar os dados Eles só devem fazer operações. Você pode alterar os dados dentro de uma função pura. Posso colocar um setter aqui, mas isso meio que anula o propósito das técnicas de otimização opcionais que o Unreal tem de usar funções puras Agora, quando criei uma nova saída, adicionei um float para mim porque eu deixei com as variáveis Para você, se não for um carro alegórico, você pode escolher o tipo e ir flutuar Por padrão, pode ser um ouro. Vamos nomear essa saída de dois pares e dois por cento. Não. Temos nossa função, temos algumas funções e precisamos que algumas operações sejam feitas aqui. Para isso, precisaremos , em primeiro lugar, de duas variáveis, que será uma variável, será e a outra variável será atual. Como você pode ver, minhas variáveis são inteiras porque já expliquei que eu estava fazendo alguma coisa, mas mantiveram o tipo Para você, se não for um número inteiro, novamente, você pode clicar no tipo e ir de Bleion ou o que quer que seja para Agora, vamos trazer essas duas variáveis aqui. A fórmula para encontrar, digamos, a porcentagem das peças atuais em relação às peças masculinas seria dividir as peças atuais com as peças máximas e multiplicá-las por 100 O que queremos, porém, é calcular as proporções dos blocos máximos ao bloco atual em uma forma de porcentagem. Então, para fazer isso, vamos apenas inverter essa divisão e dividir o máximo de peças pelas peças atuais E como esses são números inteiros, e a divisão disso resultará em uma flutuação, vamos fazer com que isso torne o motor, considere isso um Então, vamos fazer duas conversões flutuantes. Vou copiar essa conversão e conectá-la aqui. Agora vamos dividir isso e multiplicar por 100. Agora, o que temos é a representação da proporção de blocos máximos em relação aos blocos atuais. Mas queremos que isso preencha até 40% da barra, não ultrapasse 40%. Então, o que faremos é dividir novamente por 40, 40 dividido por esse fator de escala, e é escalar porque os blocos atuais mudarão, e vamos conectar isso à porcentagem O que isso faz é, na verdade, normalizar, significa que coloca no contexto A que 40 é o máximo. Espero que isso seja entendido. Fora disso, continuaremos preenchendo a marca de carregamento com essa porcentagem. E vamos realmente demonstrar isso, como vamos fazer isso. Demonstre algumas porcentagens. Então, vou arrastar a partir daqui e carregar madeira. E aqui está a variável que armazenamos no modo de jogo de cima para baixo. Quando arrasto daqui, arrasto diretamente do modo de jogo de cima para baixo porque armazenamos esse modo de jogo como uma variável. Oh, vamos definir a porcentagem, que é a função que criamos. E conecte isso aqui. Se eu deixar como e, o que ele vai fazer é além de zero. Mas digamos, por exemplo, nossos blocos máximos sejam 20 e nosso bloco atual seja. Portanto, isso deve preencher nossa barra de carregamento em 20%. E eu acho que, de fato, 40% estariam aqui, 50% em algum lugar aqui. Na verdade, vamos preenchê-lo com 20 de 20. Sim, agora construiu 40% do bar, acho que 50 está em algum lugar aqui. E funciona corretamente. Agora, mais uma coisa que precisamos fazer: criar essas duas variáveis, estilos máximos e blocos atuais. O que devemos fazer é expô-los no Spaw, na verdade, apenas os estilos máximos, não os blocos atuais, expô-los no Spaw e torná-los no Spaw e torná-los Então, quando vamos ao nosso menu principal no gráfico, vamos compilar e salvar, não o atualizamos Mas se eu escolher novamente o gerador de labirinto, agora podemos ver que temos o máximo de estilos aqui com o valor padrão de 20 Mais duas explicações. O que isso significa o valor padrão? Quando criamos uma variável no blueprint em qualquer blueprint Em primeiro lugar, é necessário compilar o plano. Então, se eu compilar, poderemos ver nos detalhes do valor padrão que podemos colocar qualquer valor que quisermos para esse blueprint quando ele não estiver definido em nenhum outro lugar O valor que definimos para um valor padrão será mantido toda vez que o adiarmos E a outra coisa sobre a qual eu queria falar era sobre a instância editável Então, o que significa gerar um projeto é que, por exemplo, se eu trouxer esse gerador de idade aqui, eu trouxe uma instância dessa classe Como falamos, tudo é um objeto, e as classes são formas de dizer aos objetos o que fazer em um modo predefinido de modelo E quando os estou trazendo ao mundo, estou trazendo exemplos deles. Sim. Isso é o que eu queria acrescentar porque já usamos a Instância editável duas vezes ou talvez mais, e não havia nenhuma explicação sobre isso Agora, vamos redefinir nossos valores para os padrões. Vou deletar essa nova variável. Vou definir as peças atuais como zero e vou definir o máximo de peças. Na verdade, vou deixar 20. Qual seria o nosso próximo passo agora? Nosso próximo passo seria adiar a primeira peça do labirinto E para fazer isso, precisaremos de um modelo de ladrilho. Vou acessar o conteúdo. Vou ver os blueprints e vou criar um novo blueprint do tipo actor e chamá-lo de arquivo de sublinhado PP Antes de começarmos a gerar peças e tudo mais, vamos falar um pouco sobre nossa geração de labirintos Vamos começar com esse primeiro bloco que vamos gerar. O que isso significa? Bem, a forma como nosso labirinto funcionará será mapeá-lo com base em uma grade bidimensional, grade x e y. E isso será representado por valores negativos e positivos e zero. E nosso primeiro estilo, vamos considerá-lo um bloco de 0,0. Agora, quando quisermos adicionar algo, digamos, por exemplo, no Norte, vamos adicioná-lo em X é o valor para e Sul e y é o valor para leste e oeste. Mas nos certificaremos disso quando estivermos fazendo isso nas direções mundiais. Então, digamos que para o Norte, queremos aumentar um, o x e o y permanecem os mesmos, ou para o Sul, queremos decair x, zero em A mesma coisa poderia ser feita para y se quiséssemos esquerda e para a direita leste e oeste, basicamente, será 0,1 e zero ponto menos Essa é a nossa coordenada interna que esta peça pertence ao ponto zero Esta peça pertence à 1.1. Isso pertence a um ponto menos um, etc. Pode ser 25. Qualquer número, essa será nossa representação mapeando o armazenado em uma variável. Agora, além disso, o que precisamos fazer ao responder um arquivo, ele tem um certo tempo Então, o que vamos fazer pegando esse tamanho e multiplicando-o pela localização da maça, por exemplo, se nosso primeiro ladrilho for 600, ele ocupará esse espaço se nosso primeiro ladrilho for 600, ele ocupará Quando adicionamos o segundo, digamos, por exemplo, norte, seria 0600 multiplicado por um e 600 multiplicado por zero, então caberá exatamente aqui Nossos quadrados, nossas peças serão as mesmas porque 600 multiplicado por zero e zero está aqui e cem multiplicado por um, nos leva à localização mundial de x é igual a 100, onde esse x onde Oh, acho que isso é explicação suficiente por enquanto, à medida que avançamos com a criação do labirinto Explicaremos mais coisas, mas esta é a primeira introdução sobre as variáveis que criaremos na próxima lição para armazenar essas informações. Perguntando a você uma próxima. Adeus 9. Como criar o primeiro bloco: Olá, bem-vindo de volta ao Game Design Workshop e de RPs de ação em Dungeon com cinco procedimentos reais RPs de ação em Dungeon Então, na lição anterior, criamos o carregamento de blocos de cálculo, a função que calcula qual porcentagem de blocos atuais do máximo é 40% da barra e nos dá uma porcentagem dela Agora, também falamos um pouco sobre as variáveis e a grade bidimensional do nosso labirinto e como vamos mapear nossos blocos que são gerados em uma grade bidimensional Agora, vamos começar a criar algumas funções e variáveis que usaremos para manipular esses dados criar regras sobre eles e gerar o primeiro bloco Então, a primeira coisa que vou fazer é criar uma função chamada arquivos próprios. Obviamente, precisaremos da ramificação contínua, para possamos diferenciar se esse é o primeiro estilo que aparece com base em todo o jogo ou se é uma peça contínua Vamos usar isso porque teremos uma peça de introdução, como se tivéssemos um balão que representa como o jogador entrou nesse labirinto E quando continuarmos, esse espaço que geraremos o balão será o espaço em que nosso elevador nos levará do nível anterior para o próximo nível Então, quando estamos criando o primeiro ladrilho, é preciso levar em consideração que no labirinto acima, vamos trazer tinta Então, se tivermos nosso labirinto no nível um, digamos, o zero no eixo D zero A próxima peça que vamos criar, o próximo labirinto, este é um labirinto de Agentes, como você quiser chamá-lo Mas a próxima peça que queremos gerar, onde quer que ela apareça acima e se crie sozinha, queremos ter uma correspondência com o labirinto abaixo, do qual temos uma elevação aqui, e vamos subir Então essa peça aqui precisa estar vazia. E no primeiro pedaço de milho, digamos que o começo esteja aqui, esse pedaço que queríamos que fosse o balão que viemos Nós viemos de. Vamos continuar com isso. Agora, é por isso que precisamos que essa ramificação se divida entre duas ações , se for uma continuação ou não no primeiro bloco. Agora, como fizemos no menu principal e usamos o nó patrocinador, a mesma coisa que faremos aqui para patrocinar a partir da aula, e a classe que vamos usar é o bloco BV Vamos dividir a transformação do filho. Localização da etiqueta. Falei um pouco sobre localizações nas explicações anteriores, e o que eu queria acrescentar é que, quando estamos no nível, existe um sistema cartasiano de x, y e z. É sobre isso que eu estava falando nosso primeiro labirinto Z zero, e o segundo labirinto será em Z, digamos vermelho No mundo, temos um sistema ctsan que chamamos de coordenadas mundiais Este é um pequeno parêntese para aqueles que precisavam dessa informação Agora, quando estamos gerando o gerador de labirinto, estamos gerando ele em Este é o centro da nossa palavra, digamos assim. E quando estamos desovando pela primeira vez, poderíamos usar o 000, mas isso significaria que quando respondermos novamente a um labirinto, ele aparecerá novamente no primeiro local Então, o que faremos aqui é usar um nó chamado get acto location. Por ser o alvo desse nó em si, ele nos fornece como valor de retorno o local em que o labirinto de BP foi gerado Agora estamos respondendo no menu principal, é 000. Quando respondermos de outro lugar mais tarde, provavelmente o elevador, ele obterá a localização da esponja para adicionar o ladrilho De qualquer forma, vamos continuar. O que mais vamos precisar? Então, um pouco de otimização, não muita otimização, não faremos muita otimização, mas um pouco Quando estivermos gerando o próximo labirinto, devemos ser capazes de excluir o anterior Portanto, ele não carrega na RAM e nas ações. Por exemplo, teremos uma grade de navegação que será usada a partir da IA. Não deveria estar calculando todas essas coisas na massa anterior Por exemplo, se tivermos itens, não devemos calcular os itens se eles estiverem colidindo, ou os itens de física não devem estar funcionando Portanto, precisamos de uma lista para destruir as coisas depois de escolhermos. E para essa lista, vamos criar uma variável e ela será do tipo ator. Vamos digitar actor, acessar os tipos de objetos e selecionar a referência do objeto. Agora vamos explicar um pouco mais tarde sobre referências a objetos flexíveis e referências a objetos. Mas não vamos otimizar muito. Vamos usar referências de objetos. Mas eu divago mais tarde. Agora, vamos usar esse ator, que é objeto. Queremos nomear essa lista de atores a serem destruídos. O que eu quero analisar mais nessa situação é que, como dissemos, estamos configurando essa variável para algo. Mas isso contém apenas uma informação, uma variável. Mas se eu quiser uma lista de variáveis. Não, além do tipo de variável, também temos um tipo de contêiner, como está escrito na dica de ferramenta Por exemplo, para este, precisaremos de uma matriz. O que é uma matriz? Vamos mudar esse primeiro tipo de variável. Nós trouxemos isso. Em segundo lugar, o que é uma matriz? Basicamente, é uma lista. É uma lista dos mesmos tipos de dados, uma coleção de elementos, se você quiser. Por enquanto, temos uma lista de atores. Mas se eu mudar o tipo de variável, seria uma lista de biões, por exemplo, ou uma lista de números inteiros, uma lista de Por enquanto, vamos deixar isso para o ator. Referência do objeto, é a outra tela, é o que vou digitar. Agora, se eu escolher o conjunto, como podemos ver, ele requer uma lista. Se eu usar o g, ele me dará uma lista. Então, como posso adicionar um único ator a essa lista, uma única variável. A maneira como fazemos isso é usar um getter e, a partir do getter, estamos usando o nó em matrizes que têm muitos nós exclusivos para manipular Vamos conhecer alguns deles durante este curso. Vou conectar isso aqui. Agora, quando isso acontece, estraga nosso primeiro estilo nesta lista que seremos atores a serem destruídos quando passarmos para o próximo nível? Em segundo lugar, a segunda coisa que precisamos é o que chamamos de sistema de coordenadas, sistema notas de coordenadas, valores de coordenadas Para isso, vamos criar outra variável e vamos chamá-la de es. E vamos mudar isso até certo ponto. Agora, o que é um ponto positivo? É basicamente um vetor de dois d. Além disso, vou mudar de matriz para variável única. Agora, se eu compilar, o valor padrão atualmente é zero, zero Isso é o que queremos para a primeira peça. A primeira frieza que queremos é 00. Agora, precisamos armazenar isso em algum lugar. Além das matrizes, há outro tipo de variável chamada variável de mapa, que é basicamente uma matriz bidimensional com algumas regras extras Vamos criar um. Vou criar uma nova variável. Vou chamá-lo de “Gon”. Mapa de Ngon. Não, na verdade, eu vou apenas meu mapa, Dang mapa de Dang também descreveria melhor o tipo de variável Então, vou ver aqui os tipos de contêineres e selecionar o mapa. Você pode ver isso como duas variáveis. Então, isso é o que é um mapa. É como uma matriz bidimensional, mas primeiro tipo de variável precisa ser exclusivo. Vamos compilar e demonstrar isso. Por exemplo, se eu adicionar o ponto chave, o 8.00, e tentar adicionar algo novamente Isso não me permite, mas se eu for até a matriz e não adicionar nenhum como ator, posso adicioná-la novamente. Não importa se temos duplicatas. Vou deletar isso, vou voltar às chamadas e, na verdade, vou mencioná-las. Mapa. Vou voltar para p e excluir também o valor padrão que eu adicionei. Agora, a primeira serão as coordenadas. O primeiro é que temos neste mapa. O segundo seria o próprio ator principal. Então, eu poderia ter as coordenadas ou, ao mesmo tempo, o ator que eu quero referenciar. Vou digitar tile. Vou arquivar o arquivo da BP. Vou usar uma referência de objeto. Vou mudar o tipo de variável. Ele está me pedindo para mudar o tipo de variável porque eu a trouxe para o gráfico. Isso significa que ele já está registrado. Se eu não tivesse trazido isso para o gráfico, eu estava aqui criando a variável e mudo o tipo de objeto Você pode ver que isso não o afeta. Mas no momento em que eu o coloco no gráfico, isso o afeta. Eu vou desfazer Vou trazer esse gin aqui. E quanto à matriz, vou adicionar Agora, esse anúncio tem uma regra especial de que se você estiver adicionando algo que já existe, já que deve ser a primeira chave, deve ser exclusivo. Isso substituirá a chave existente. Portanto, essa não é uma mecânica à prova de falhas , mas como sabemos que ela funcionará apenas uma vez no início da licitação, uma vez no início da licitação, por ser a primeira peça, é à prova de falhas que adicionará a peça correta Agora, vou conectar as coordenadas atuais aqui, e vou conectar o ator, também o valor de retorno do ator de desova a este mapa da masmorra Em nosso sistema de masmorras, em nossa masmorra de labirinto, seja lá o que chamarmos Teremos uma regra especial. Essa regra dirá que em blocos especiais não geram coisas Portanto, precisamos listar os blocos especiais, não as coisas de geração. Para essa lista, vamos usar as coordenadas da própria masmorra. Então, vou duplicar a variável coords atual , E vou renomeá-la para Salas especiais, por exemplo, todas peças especiais, na verdade Azulejo especial. E eu vou fazer disso também uma lista, uma matriz. Agora, eu poderia ter feito um conjunto as mesmas regras do mapa ou da primeira chave. Algumas das regras são as mesmas. Isso significa que eles precisam ser adicionados de forma exclusiva. Mas vou usar uma matriz pois elas são um pouco mais fáceis de manipular. Vou trazer ladrilhos especiais com retenção. Vou pegar um getter e vou adicionar essa matriz, as coordenadas desse bloco Acho que esse é um bom ponto de partida por enquanto. Na próxima legião, vamos decidir e descrever como vamos definir o ponto de saída Onde está a próxima peça? Onde eu vou arrancar essa peça? Onde a próxima peça vai aparecer? Vamos definir a lei de Nora Southwest. Muito obrigado. Adeus. 10. Sistema de direção personalizado: Olá, bem-vindo de volta ao mecanismo de cinco chamadas de criação de macacos de ação de Dungeon do Game Design Workshop cinco chamadas de criação de macacos de ação de Dungeon Na anterior, iniciamos a cadeia de eventos, a função do Span for style. E adicionamos os atores para destruir a matriz. Explicamos um pouco sobre os raios. Também criamos a variável de mapa de masmorra, que é uma variável de um ponto int e um ator E também adicionamos as coordenadas à matriz de blocos especiais. Mas dissemos que as peças especiais serão peças para em breve, seguiremos a regra de não gerar coisas em nossa Por exemplo, não queremos que, no primeiro ladrilho uma espada em uma torre ou um H. Vamos economizar e continuar criando outra variável para listagem. Desta vez, será a lista da variável nordeste, leste e sudoeste. Esse é um tipo de lista muito original. Essa lista aqui, a lista MP ou a lista de matrizes ou, como dissemos, podem ser alteradas em tempo de execução. Isso significa que posso adicionar ou remover coisas dessa lista durante o jogo. O que vamos criar é uma enumeração antiga, que não importa se você está nos blueprints ou no Sets plus, as blueprints ou no Sets plus, enumerações Nunca é. Mas seria uma conquista tremenda. Agora. Vamos ver como criamos essa variável. Essa variável não pode ser criada na lista aqui porque a lista aqui contém coisas que podem ser alteradas Para nossa lista, o que será mutável será o valor Mas a lista em si deve ser criada aqui. Para criar isso. Precisamos ir para o Content Drawer, acessar nossos planos de pastas Vamos criar outra pasta lá dentro. Vou ligar para isso ou para nums for fold. Braços. Vou clicar com o botão direito do mouse, ir para a categoria plantas, enumeração da mangueira Vamos chamar isso de Oh, vá adicionar quatro variáveis. Vou abri-lo, e é isso que vemos na lista de variáveis de enumeração, e temos esse botão que adiciona Se eu tentar renomear um enumerador para quatro, teremos um novo enumerador zero, um, dois, três, eu tento nomear esse zero, eu tento nomear esse zero, você verá que O novo enumerador zero já está em uso. Mas isso novamente tem nomes exclusivos. Agora, eu troco 01. Por exemplo, vou mantê-lo zero. Foi um erro meu. Coloque a capital em R, não faz distinção entre maiúsculas e minúsculas. Portanto, ter o capital R realmente não muda. Agora, vou deletar esses nomes. Eu tenho que fornecer um nome. Então, vamos começar com a primeira chamada. E para Norte, o segundo chamando E para Leste, o terceiro eu vou chamá-lo de sul para S para Sul, e o quarto eu vou chamá-lo de W ou Oeste. Temos o nordeste sudoeste. Portanto, esta é nossa lista predeterminada. Antes de falarmos com aqueles que querem uma definição, uma definição mais precisa seria que é uma programação de tipagem de dados que nos permite definir as constantes de nomes que representam valores específicos Por exemplo, nosso menu de opções, ou poderíamos ter um horário normal e fácil, são aulas de ajuda Isso é Use para programar para tornar nosso código um pouco mais claro do que ter, por exemplo, um monte de pólens, um monte de ramificações, ligar e desligar coisas ou strings ou qualquer outra coisa Vamos continuar. Vamos trazer para esta lista nosso gerador M de blueprinting, porque precisaremos muito dele Coy deveria ter lhe dado o nome de direção. Direção E. Vou criar uma nova variável. Eu chamo isso. Ereções, apenas direções Agora, não vamos encontrá-lo facilmente aqui. Então, eu digo que há muitas ações do tipo de animais de estimação. Agora, ele nos dá a variável que criamos e direções, que tem a lista de nordeste, sul e oeste. Vou mudar um único tipo de ibru de A, compilar e deixar mostrar uma coisa para vocês Agora, como você pode ver, na verdade, vamos trazê-lo, podemos ver nos detalhes. Ele tem um menu suspenso com nossas opções com Nordeste, Sudoeste, e uma delas é a persistência do valor escolhido Mas mesmo que tenha armazenado todos esses valores, um desses valores, aquele ao qual foi adicionado. Se eu vou definir as instruções será uma dessas opções. Na verdade, direção, não é um bom nome para essa variável porque vamos usar essa variável para definir nosso ponto de saída do nosso ator gerado B agora, o que precisamos fazer é descobrir onde nossa próxima peça vai aparecer Então, vou mudar o nome para Última saída. Ah, sim. Essa é nossa última variável de saída. De onde saímos pela última vez? Oh, vá compilar, Dave. E agora vamos fazer uma saída aleatória. Agora, vamos repetir o sistema. Não é uma técnica ruim, mas também é a melhor. O que vamos fazer é usar make array. Se eu arrastasse isso, não conseguiria obter make array porque isso é sensível ao contexto Eu não estava. Eu digito a matriz M, ela fará a mesma coisa. Mas o que fizemos foi criar uma matriz com um curinga como variável. Então, o que eu vou fazer é também ficar sensível ao contexto, obter uma cópia do Ray a, por exemplo, e conectar isso aqui. Então eu transformei o curinga em um tipo de nossa meração. Agora que temos essa matriz aqui, exclua o get ou o up. Vou voltar daqui em diante e conectar isso aqui, excluir isso aqui. Vou adicionar nossos alfinetes e chegar ao oeste. Mas esses são pequenos truques para eu não ter que criar uma matriz com todas as direções e obter uma aleatória daquela matriz que eu criei. Estou apenas criando uma matriz temporária que será coletada como lixo Agora, essa coleção de carbach também é uma grande novidade. Há muitas explicações. Nós não vamos entrar nisso. Ah, eu criei uma matriz que não vai ser armazenada em uma variável e não vai consumir memória, por exemplo, o que seria negligência, porque apenas um raio de valores de enumeração R De qualquer forma, eu só queria mostrar como podemos fazer algumas manipulações com nós e passar do curinga para nossa própria variável Agora, o que isso faz é criar uma saída aleatória desse elemento dom e promovê-la para nossa variável. Liga para nossa última saída. Então, quando isso decidimos que nossa acontecer , decidimos que nossa última saída será essa. Na verdade, podemos demonstrar isso com uma string de impressão, eu conecto esse valor aqui. Na verdade, isso não nos mostrará nada. Isso não nos mostra nada porque não conectamos o primeiro bloco Vou conectar isso aqui. Compilar. Eu vou pré-fabricar. Como podemos ver, se eu pressionar play novamente e iniciar, não, pressione e inicie. Oeste novamente. R: É o Rundo Um dos motivos pelos quais você simplesmente vai para o oeste e para o sul. Ok. Temos um Norte. Sim, funciona. Obtém aleatoriamente, três vezes. Eu acho que este é um bom ponto de parada para este. Continuaremos a próxima definindo o ponto de saída, não o ponto de saída, o ponto de introdução, que também será em algumas regras. Isso é tudo para este. Adeus 11. Como encontrar azulejos adjacentes: Olá, bem-vindo de volta ao Game Design Workshop Real Engine RPG de ação Procedural Dungeon do Game Design Workshop Real Engine Five Na anterior, criamos a última saída IO Blue e criamos a enumeração E expliquei algumas coisas sobre enumerações. Também provamos que estamos ganhando um ponto aleatório por meio do truque de Mar A aqui, e agora não precisamos disso, e vamos continuar com a saída oposta Agora, podemos facilitar as coisas para nós mesmos e não ter uma saída oposta aleatória e apenas verificar se todas essas duas variáveis nunca são as mesmas. Outro cheque é não. O que podemos fazer é simplesmente obter o oposto do que é nossa saída. Por exemplo, tinta. Se esta é a nossa caixa e estamos saindo de cima, a introdução deve ser de baixo Se estivermos saindo do leste, a introdução deve ser do Acho que é uma regra simples e torna as coisas um pouco mais fáceis para nós agora. Posteriormente, criaremos algumas verificações, para que uma variável nunca venha com outra variável. Mas, por enquanto, vamos seguir em frente com o que estamos fazendo. Agora, para fazer isso. Precisamos de uma maneira de encontrar os vizinhos, as células adjacentes, como você quiser chamá-la O que está basicamente ao redor de nossa primeira, nossas primeiras coordenadas, como se nossas coordenadas fossem zero, zero, zero, x, zero, y. Quais seriam os vizinhos em uma cruz? Porque estamos construindo com uma cruz. Essa também é uma informação sobre nossa masmorra, como ela cria a masmorra como ela cria a masmorra . Vamos pintar novamente. Agora, como você pode ver, coloquei flechas no Nordeste Sudoeste Não temos flechas no noroeste ou no nordeste, ou isso exigiria um tipo diferente de construção Mas para nós agora, vamos fazer o básico de ter apenas o Nordeste do Sudoeste e continuar com essa lógica. Agora, para obter os vizinhos dessas coordenadas atuais. Vamos precisar de outra função. Vai ser uma função pura novamente porque é um cálculo matemático. Vamos criar uma nova função. Vamos chamá-la de base da cruz de vento nela. Essa é a grafia de adjacente. Enviado. De qualquer forma, isso não importa. Se você continuar cometendo um erro ortográfico, se for um erro ortográfico constante, realmente não importa, porque você pode encontrar sua função Mas a ortografia é meio importante. Agora, vamos inserir essa função. Na verdade, está aberto. Agora, o que vamos precisar é de uma entrada. Vamos precisar de uma entrada de coordenadas. Vou acessar as entradas e selecionar um ponto de E eu vou chamar isso de ds. Como eu disse, ds, o ponto in é dois vetores d. Isso significa que tem um x e um y. Não tem um z. Então, como eu poderia fazer com a transformação. Então eu posso fazer isso com cabos, mas eu não quero usar split porque se eu usar split, fica assim, e eu vou ter que arrastá-lo daqui a partir daqui Vai ser uma bagunça de qualquer maneira. Então, vou recombinar os dois, o que vou fazer é arrastar isso aqui e digitar break in break in point Agora, está um pouco mais claro, o que não será no final das contas. Porque o que precisamos fazer é adicionar manualmente uma nas coordenadas superiores ou subtrair uma E também faça o mesmo com y. Então, obtemos nossas coordenadas nordeste sudeste oeste. Porque definiremos que nosso norte é o seno positivo de x. Sul é nosso menos menos na palavra direção x, e comer é a direção positiva em, e nós somos a direção negativa em y. é o seno positivo de x. Sul é nosso menos menos na palavra direção x, e comer é a direção positiva em, e nós somos a direção negativa em y. Oh. Agora, eu atraí e adicionei manualmente os valores. Mas eu preciso esclarecer os pontos. O que eu vou fazer é como eu fiz o make a ray. Na verdade, posso fazer uma observação. Eu posso ter esse nó aqui que cria outro ponto de entrada. A maioria das coisas pode ser criada temporariamente dessa forma. Agora eu preciso disso quatro vezes. Agora, vamos conectar tudo, tudo. Vamos aqui, vai aqui. Seremos forçados a espacializar um pouco. Vou arrastar do y aqui para o 0x0y, e do y aqui para esse zero y, e vou fazer o mesmo com x aqui aqui, e fica saturado Agora, o que isso significa em resumo é que estamos criando uma variável neu endpoint com a partir da posição atual mais um até x ou mais menos dois x mais um y e mais menos um y. Temos uma localização cruzada para encontrar nossos vizinhos a partir do nosso Agora, vou fazer um raio, como fiz antes, e vou adicionar alfinetes Vou conectar isso aqui e aqui isso aqui, clicar na cruz do vinho adjacente e criar uma saída, que será uma matriz, e chamá-la de j. Por fim, e chamá-la chamá-la j. Por fim precisamos nos conectar ao nó de retorno, a matriz que acabamos de criar ao adjacente Agora, antes de continuarmos, vamos demonstrar o que criamos. Então, vamos entrar na função no primeiro estilo e colocar um rt br novamente. Vamos trazer essa função aqui. Eu não a selecionei para ser pura, vou selecioná-la agora, selecionando a função em qualquer lugar que ela esteja. No esboço de detalhes, você pode ver essa opção pura. Eu vou selecionar isso. Para coordenadas, posso usar os berços atuais agora. E o que podemos ver instantaneamente é que não podemos conectar essa variável a essa porque essa é uma caixa. Tem o símbolo de uma caixa, que é nosso símbolo de matriz, onde este tem apenas um símbolo de alfinete, esse ponto arredondado aqui. Oh, como podemos mostrar tudo, todas as listas de elementos dessa matriz. O que podemos usar é algo chamado de loop for para cada um. Agora, também há um foreloop. Vamos trazê-lo. Nenhum exemplo. Então, qual é a diferença entre esses dois? Antes de tudo, vamos explicar o que eles fazem. O que eles fazem é baseado em um índice que ou nós mesmos definimos ou o obtemos de uma matriz. Essa é uma ação que podemos programar, chamada body loop. E quando estiver concluído, ele conecta o pino completo. Agora, como você pode ver, esses também têm alguns pinos diferentes neste lado Este apenas nos dá um índice, por exemplo, se eu colocar o índice 55-55 Isso significa que ele indexará, o primeiro índice que fornecemos quando ele dispara o loop corporal seria 55. E a razão pela qual sabemos que é 55 é porque, se abordarmos, diz que executa o loop corporal para cada índice, do índice inicial ao índice final, inclusive Essa é a palavra-chave, inclusive. Isso significa que ele executará 55 e também 65. Agora, este nos dá um elemento de matriz. Então, quando usamos para cada loop de uma matriz, na verdade também obtemos o elemento correspondente ao índice. Não, vamos conectar isso antes da string de impressão. E agora queremos apontar esse elemento A. Vou conectar isso aqui. Vou excluir esse loop. E nossas coordenadas agora são zero e zero, zero em y e zero x. Então, ela deve nos dar um mais um em x, menos um em x, mais um em y e menos um em y, mantendo o oposto correspondente Eu vou compilar. Estou no overp. Me desculpe. Vá para o nível M. Vá para salvar tudo e aperte play. Agora, no estilo de jogo, podemos ver as coordenadas aqui em cima. Se for muito rápido, podemos abrir algumas opções extras na string de impressão, que tem toda a duração, outras coisas ou adiantamento. Nós, coloque isso. Se eu, por exemplo, agora, ele vai ficar mais tempo. Agora, se testarmos com valores diferentes, vamos chamar o gerador ma, em vez dos potros atuais, vou dividir isso Selecione, digamos que comecemos de um e um. Eu deveria atualizar corretamente , assim como os valores. Mais uma coisa antes de encerrarmos esta aula. Acho que devemos colocar alguma explicação e encontrar uma cruz adjacente à ordem de onde elas estão vindo. Como dissemos, o norte é mais em x, e o sul é menos em x e oeste menos em y, e mais é Eu vou para o evento. Na verdade, posso colocá-lo como uma dica de ferramenta, mas prefiro no nome Eu o tenho aqui. Renomeie com F dois no espaço e norte Nordeste Oeste Eu posso ter isso e me explicar a ordem em que esses estão chegando. Agora, eu acho que isso é suficiente para este. Eu vou te ver na próxima. Adeus. 12. Mapeamento de coordenadas e geração de azulejos: Olá, bem-vindo de volta ao workshop de design de jogos e ao curso de criação de RBC do Real Engine Five Procedural Dangon Action Anteriormente, criamos nossa função de cruz fina adjacente ao Norte-Sudeste Oeste. E vamos recombinar isso, na verdade. Temos uma entrada de uma entrada de ponto int e estamos exportando, temos uma saída de uma matriz de pontos t. Agora, demonstramos a capacidade, com um loop inicial de adicionar qualquer coordenada nos dê os vizinhos, os vizinhos cruzados Então, agora vamos conectar isso aqui e, na verdade, deixar isso também. Agora, o que queremos é obter o oposto da última saída. Para fazer isso, o que vamos usar é essa lista aqui. Vou pegar uma cópia. Agora, a diferença entre uma cópia e uma referência é que, quando estou recebendo uma cópia, estou recebendo uma cópia basicamente do elemento real A partir da referência, eu posso realmente manipular a fonte, a entidade real da matriz Então, o que precisamos é de uma cópia. E agora vamos usar um novo nó. Vamos usar um nó de seleção. Deixe-me demonstrar isso. Vamos digitar select. Como você pode ver, temos esse nó aqui, que nos fornece algumas opções e um índice de um curinga e um valor de retorno. Agora, com base nesse curinga de índice, curinga antigo porque ele pode mudar para vários tipos Na verdade, vamos usar o am que temos. Por exemplo, vou conectar a última saída aqui. Eu converti automaticamente. Agora, esse valor de retorno é um número inteiro porque solicitamos uma seleção de um inteiro Se eu fosse apenas solicitar a seleção, você pode ver que tudo é um cartão Y. Portanto, podemos usar esse nó em muitos casos diferentes. Não, fazemos um primeiro ao norte, zero porque as matrizes são numeradas por zero, indo para um, dois, três, etc Oh, o norte é zero, o leste seria dois, sul seria um e o oeste seria três. Mas com base no índice que está chegando, ele vem para o sul, escolhe dois, quando é um norte, ele escolhe o correspondente Mas o problema com isso é que, se o Norte vier, então estamos selecionando o Norte. Se o Leste vier, então estamos selecionando o Leste. O que queremos é inverter esses números. Mas quando está vindo para o norte, queremos o sul, mas vamos escolher um aqui. Quando é sul, queremos norte, então vamos escolher zero aqui. Quando é leste, queremos oeste, e onde é oeste, queremos leste. Então, agora podemos inverter isso basicamente na renda, o que obtemos dessa matriz Agora, para finalmente alcançar nosso objetivo em todas essas ações, seria dizer ao programa que essa caixa deveria ter essas coordenadas em nosso mapa, nossa bidimensional deveria ter o início. Bem, não o começo, mas o bloco de introdução, por exemplo, vamos chamá-lo de introdução Na verdade, vamos criar um plano para isso. Vamos para a pasta Blueprint. Vamos clicar com o botão direito do mouse. Vamos selecionar uma classe de blueprint. Eu vou fazer um ator. Vamos chamá-lo de introdução da BP ou balão ou qualquer outra coisa. Vamos usar um balão. É por isso que eu disse balão. Não. Como queremos que o intra seja gerado lá, devemos dizer ao labirinto que ele deve ser mantido Essas coordenadas. Então, o que eu vou fazer se você for para telhas especiais? Opa. Eu já cometi um erro aqui. Acho que isso aconteceu. Não deveria ter nenhum elemento. Vou deletar isso. Os ladrilhos especiais devem ter zero elementos. Acho que isso aconteceu porque eu criei o elemento a partir daqui Eu dupliquei essa variável, então ela pode tê-la mantido ou, por engano, eu poderia ter adicionado ou para alguma nação Portanto, os ladrilhos especiais estarão vazios. Agora, vou copiar esses blocos especiais, colá-los e renomeá-los para stt Mas vamos ter outra lista, novamente, vamos trazer isso aqui com controle, selecionar AD e adicionar essa variável de get Agora, vamos usar essa lista quando estivermos construindo o labirinto, para criar algumas regras para dizer: não coloque nada aqui porque talvez queiramos colocar algumas coisas lá nós mesmos, como faremos agora Digamos que queremos propor esse título de introdução, coloque este local Vou usar novamente esse próprio ator porque é assim que os atores respondem no mundo E eu vou selecionar o em O. É um R. Oh, vamos realmente para este projeto A maneira como passei por isso foi selecionar essas sobrancelhas, que significa navegar até um conjunto, lupa aqui, e ela me leva à planta, como se eu estivesse em outra pasta, ou seja, pronta para a Agora, vou clicar duas vezes nela e adicionar uma malha estática e selecionar para a malha estática selecionada automaticamente aqui, um tubo. Nós temos um tubo. Tubo SM. Ok, vamos deixar esse tubo por enquanto. Então, sabemos onde está nosso intra. Agora, encontre a localização. Como dissemos, quando eu divido isso, recombine a estrutura. Sim. Você também pode dividir os próprios vetores. Mas o que queríamos era recombinar para mostrar que isso era uma transformação Agora, se eu dividir, posso ver a localização, a rotação. Eu tenho minhas coordenadas locais ou uma matriz bidimensional. Mas o que isso se traduziria em coordenadas no mundo? Como isso precisa de coordenadas de palavras, não pode ser gerado com base em um e dois, menos um e menos dois, em qualquer lugar Mas para isso, vamos criar outra função, outra função pura para poder fornecer coordenadas, e ela nos dá a localização de uma palavra. Ah. Vamos para nossas funções, pressione este símbolo de adição novamente e adicione uma nova função. Vamos chamar esse ponto de localização. Eu acho que isso é o suficiente. Como dissemos, precisamos de outra entrada aqui. Vai colocar a ordem de pontos nesses buracos. E vai ter uma saída de um vetor. Temos um espaço w de x y e z. Digamos isso. Não seria ótimo se eu pudesse conectar isso aqui e você pudesse simplesmente trabalhar. Mas o que precisamos fazer é quebrar isso. Lembra quando falamos em pintura sobre o tamanho da pilha, por exemplo, qual é o tamanho real do nosso tipo de labirinto Bem, precisaremos criar essa variável. Vou pressionar nossa variável aqui, vou mudar seu tipo inteiro Vou chamá-lo de arquivo é. Como eu sei o tamanho dos blocos R, esses 600, vou digitar 100. Esse é o valor padrão, mas podemos torná-lo editável por instância e exposto no Então, podemos mudar. Temos blocos diferentes Quando estamos criando o labirinto, vamos ao menu principal e representamos o gráfico Vamos atualizar isso. Colete e nada acontece porque eu não compilei esse plano E agora temos o tamanho do ladrilho. Podemos ajustá-lo sozinhos se tivermos diferentes tipos de peças, 400 por 400 ou qualquer número em que morrermos. Vou compilar e salvar novamente e retornar ao nosso mapa Agora, temos esse tamanho de ladrilho que é cem, e se multiplicarmos isso por x, multiplicaremos por y. Vamos vetorizar Na verdade, porque com vetores. Agora, isso é. Vetores são flutuadores. Então, se eu tentar fazer disso um vetor, isso não vai acontecer. Agora, eu sempre posso fazer uma mudança de dois flutuadores, e isso criará um flutuador Mas o real hoje em dia nos dá a opção de acessar esse pin, clicar com o botão direito do mouse e convertê-lo para o que eu quiser. Vou escolher um carro alegórico. precisão única não importa para o nosso Portanto, talvez seja um procedimento maior para nós porque estamos multiplicando E bem, para ser sincero, porque vale a pena localizá-la e talvez estejamos criando o labirinto Eu flutuo. O poder não importa ou não importa. Oh, a partir daqui, agora eu posso fazer tor. E esse é meu valor x, e esse é meu valor y. E para o valor z, vou apenas adicionar isso ao tor asi. O preenchimento é importante. Sim. Então, como isso é zero, ele adicionará o eixo Z da nossa localização do ator. E a razão pela qual estamos adicionando isso é porque esse é o nosso ponto de partida. E quando mais tarde surgirem os próximos labirintos, como acima, e mesmo com um ponto de partida diferente 002000, digamos, Pode ser 500 por 600 X e um Z aleatório. É por isso que precisamos adicionar a localização do ator Os próximos labirintos que serão construídos levarão em consideração que sua localização é relativa à localização dos atores na localização dos labirintos, a localização do construtor do labirinto Oh, eu vou colocar isso aqui. Não especificamos muito esse plano. Vou compilar, vou salvar e vou voltar a isso no primeiro estilo, vou trazer a finalização, vou torná-la pura, portanto, volta novamente, e vou conectar isso aqui e isso aqui Agora, se eu jogar, ele deve aparecer. Na verdade, podemos ver isso porque temos a tela de carregamento. Então, vamos para a tela de carregamento. Vamos até o painel de cavas e definamos a visibilidade como oculta. Compile e salve. Não há tela carregada. Mas acho que não estamos vendo isso porque não há luz Vamos consertar isso. Vamos trazer luz ao nosso nível. Vamos até a caixa aqui em cima que é adicionada rapidamente ao projeto. Vamos até as luzes e adicionaremos essa luz direcional Vamos jogar novamente. Realmente não consigo ver nenhuma caixa porque nossa câmera não estava no lugar certo. Oh, acho que essa é a nossa introdução. Então, em algum lugar por aqui está nosso gerador de labirinto. Agora, eu acho que este é um bom ponto de parada para este. E na próxima, devemos começar a projetar nosso ladrilho para que possamos ver nosso primeiro ladrilho. Adeus. 13. Visualizando o labirinto com flechas: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco cursos processuais RPG de ação em Dungeon Anteriormente, criamos a função de localização de ladrilhos finos, que refina com base em coordenadas e com base no tamanho do ladrilho, na localização de nossas coordenadas pares e na palavra localização Oh, adicionamos isso ao nosso código e também geramos nosso bloco de introdução Na verdade, isso deveria estar aumentando um pouco mais, então vou apenas adicionar aqui e fazer uma matemática de adição vetorial Vou adicionar ao Zaxs, 300. Vou conectar isso aqui. Então, agora ele vai aparecer um pouco mais alto do que o resto do nosso labirinto Agora, mais um detalhe antes de começarmos a fazer as peças, como dissemos, precisamos adicionar isso aos atores para destruir a matriz. Eu vou trazer os atores para destruir. Eu só vou pressionar adicionar. E eu vou adicionar esse ator também, que é o resultado da introdução do ator que gerou PP Agora vamos compilar e salvar. Vamos abrir nossa pilha. Agora, quando a abrimos pela primeira vez, novamente, a planta se abre assim Só precisamos abrir o editor de plantas completo. Novamente, caso alguém esteja se perguntando, esse é o tubo padrão de valores padrão deste blueprint, também pode ser encontrado nos padrões de classe aqui nos Vou colocar isso aqui. E vamos começar. O que vamos fazer primeiro é adicionar algumas malhas de sótão e algumas setas em nossa Então, para vê-los, vamos até nossa janela de exibição. E vamos pressionar adicionar uma malha estática. Estamos adicionando uma malha estática. Vamos nomear essa malha. Quatro. E isso é um componente de malha estática. Portanto, ele precisa que uma entidade de malha estática seja adicionada a essas propriedades aqui, porque isso é o que está dizendo ao blueprint: você tem uma malha estática Não diz à planta qual malha estática. Mas vamos entrar aqui na guia detalhada, acessar a propriedade de malha estática e selecionar nosso piso Agora, há dois andares, o 400 por 400, e o piso plano. Este é um andar de 600 por 600, então vamos usar este. Agora, como dissemos, nosso norte é o eixo positivo em x, e nosso oeste nosso leste é o eixo positivo em y. Para tornar as coisas um pouco mais visuais para que possamos dizer qual era apenas olhando para elas no mapa. Vamos adicionar quatro setas. Adicione primeiro. Em seguida, vou copiar e colar. 43 vezes. Oh, eu vou renomear também na seta norte, seta sul e seta oeste. M. Agora. Como essas flechas são pequenas, vamos também aumentar seu tamanho Vou selecionar todos eles, escalar e aumentá-la em um fator dois, basicamente. Agora eles são um pouco maiores. Vamos girá-los de forma correspondente. Vou pressionar o rotador, que E, girar a segunda seta, a seta leste, e girar agora a seta Gire a seta oeste. Está tudo bem e muito bem. quatro setas que mostram a direção, mas não temos nenhuma informação especial sobre o que é o quê Então, se eu ver isso, sem ter uma ferramenta selecionada nem nada, eu não vou ser capaz de dizer se este é o norte, é o oeste. Mas vamos adicionar um pouco de texto em cada seta. Texto, texto da seta, selecionando a seta. Selecionar a última seta e o texto. Por que eu os estou selecionando? Porque quando eu os seleciono, ele os adiciona automaticamente como filho do componente selecionado. Se eu tivesse selecionado a raiz, ela adicionaria os componentes de texto associados à raiz Agora eles estão voltados para a flecha. Então, se eu estou mudando a direção da seta, o texto também muda. Agora, vou apresentar os textos um pouco mais adiante. Na verdade, como você pode ver, como as setas são renderizadas com e de dois, nosso texto é adicionado automaticamente com 0,5 Então, é basicamente escalado em um se eu colocá-lo fora da ponta da seta Eu criei a raiz da planta, não criei raízes, apenas toquei Você pode ver que ele voltou para um, um, um, mas o texto permanece do mesmo tamanho. Voltamos e a colocamos na seta, que estava ao norte Vejo que ela voltou para 0,5 0,5 0,5, mas aumentou o tamanho. Isso ocorre porque a flecha em si é dimensionada em duas. Era como quatro, seria 0,25, por exemplo, vamos demonstrar esse anexo Mais uma vez, eu fiz disso uma raiz. No chão. É por isso. Aqui, a seta ou eu vou tocar no texto novamente. Você pode ver que é 0,5. Agora, se eu retornar a seta para dois, o texto ficará 0,25 porque agora estou escalando enquanto tenho isso quando criança Então, o motor acha que eu estou pensando que toda essa matemática automática está acontecendo ao mesmo tempo. Eu vou cuidar dele novamente. Na verdade, não precisei ser pai. Só vou para um, um, A. Vou girá-lo um pouco Gire para o lado oposto, então eu vou fazer isso também. Vou mudar os detalhes do texto de texto para n para norte. Aqui. Agora, nossas setas estão no local zero com esse zero. Talvez essa não seja a melhor opção porque eles deveriam estar um pouco mais altos que o chão. No momento, eles estão exatamente no chão. Então, vou mudar de local. Eu controlo cada um deles selecionado. Vou mudar a localização para net. Ou 100 ou 50, só um pouco acima. 90 k. Agora, para quem é novo, a maneira como estou mudando para cá é a maneira como estou movendo o editor. Isso significa que, ao pressionar o botão direito do mouse e usar o AWS T&E, movimente-se Ah. Agora que temos n, não estamos totalmente centrados aqui. Mova-o. Eu o movo, não consigo centralizá-lo com o tópico atual de espaçamento de grade Mas porque é dez, se eu colocar em cinco, talvez fique bem centrado. Sim. São cinco melhores centros. Mas se não estivesse centrado nem mesmo em cinco, é claro, eu poderia colocá-lo em um Eu ligo para e agora, eu poderia simplesmente desligar isso e a foto seria desligada A mesma coisa que podemos fazer com a rotação com os graus, e a mesma coisa que podemos fazer com escala controlada por essas opções aqui. Agora, vamos colocar mais textnra. Vamos chamar esse textrander Eu vou para a outra mensagem de texto. Vou definir a escala para um. Lembre-se de ter isso trancado, para que ele escale tudo em um. Se você tiver isso desbloqueado, você tem um componente de escala, e tome cuidado se ele estiver mesmo dimensionado Eu o bloqueio, ele aumentará de acordo Tranque-o novamente. Conjunto um, 11. Novamente. Vamos trazê-lo aqui. Vamos girá-lo. Isso realmente sabe o que. Isso deveria ser assim. Eu o trago aqui. Vou mudar o texto para West W. E. one. OK. Vamos fazer o leste. Esse foi o. Agora, veja, porque estou girando por muito tempo, gire-o. E isso na verdade é a seta leste. Então, vou reinicializar a transformação e a rotação e continuar novamente. Eu o reinicializo marcando a seta em negrito aqui quando você move algo e pergunto se você deseja redefini-lo para a propriedade padrão aqui com esta seta Vou colocar dessa forma. Vou girá-lo dessa maneira, dessa maneira, e vamos descer ainda mais. W E da mudança para disparar novamente, um pouco mais para baixo. Eu acho que eles parecem bons. Agora, na seta oeste, vamos fazer a seta correta desta vez. Vou definir o texto como Ws em outro lugar. Eu vou mudar a rotação. Corretamente. Escale para um e coloque um pouco mais abaixo aqui. Arquivando bem, para o último, South, Bring it down, S para o texto, e deixe Obviamente, defina a escala como um e definimos a localização. Agora temos uma direção nordeste e sudoeste para ver onde estão nossas possíveis saídas e entradas. Por exemplo, se formos jogar agora, podemos ver a tela de carregamento. Sim. Então, vamos para nossa tela de carregamento, acessar nosso painel de cavas e ocultá-lo, compilar e salvar, para que possamos realmente ver o que estamos construindo Se eu pressionar play, a câmera não está olhando corretamente. Mas se eu ejetar, pressione Alt e S, por exemplo. Não, por exemplo, esse é o atalho para ejetar. Eu posso me mover livremente novamente no editor do editor. Podemos ver o nordeste do sudoeste, mas não podemos ver as flechas O motivo é porque existe uma opção para as setas. Mostraremos isso depois. Portanto, há uma opção nas setas para deixá-las escondidas no jogo Bem, agora, como você pode ver, nossa saída provavelmente está no norte porque o sul oposto é nosso bloco de introdução Como você pode ver, isso não está exatamente centralizado, e o motivo é que, se abrirmos para o bloco de introdução, vá para a Você pode ver que o centro é na verdade esse canto aqui, não o centro do quadrado. Então é por isso que parece. Nós não precisamos disso. É por isso que não parece centralizado. Mas se fosse um pivô central do tubo , teria sido Agora, acho que isso é suficiente para este. Na verdade, vamos mostrar as setas novamente, a variável oculta do jogo, ir para a janela de visualização, para a porta Ti, não para o gerador do labirinto Vamos selecionar todas as setas e ir até a opção de ganhar detalhes Acabei de escrever aqui HID, e vou desligar isso do Se eu compilar e salvar Agir. Agora podemos ver as setas e a saída é pelo leste, então nossa introdução é pelo oeste Isso é tudo para este. Eu vou te ver na próxima. Adeus 14. Como adicionar paredes de castelo: Olá, bem-vindo ao Game Design Workshop underal Engine, cinco processuais de criação de Dungeon Action Bz Anteriormente, começamos a criar a seta de ladrilho. Adicionamos algumas setas, adicionamos piso e adicionamos algum texto para indicar a direção das setas, com base em nossas Ah. Como usamos as coordenadas, basicamente. Não, agora. Vamos começar mais algumas coisas para fazer com que essa masmorra pareça um pouco mais como ter um chão Se apertarmos play, parece estranho Chão no meio do céu. Então, vamos adicionar alguns extras, torná-la mais parecida com uma masmorra Não, o que vamos adicionar é uma bagunça estática. Já passou de um. Quatro. Então, temos quatro deles. Podemos chamá-los de dois, parede um. Parede dois. E quatro. Agora, porque eu havia escrito HID, estava apenas mostrando opções com HID nelas Então leia isso, para que eu possa ver tudo. E para a malha estática tudo isso, selecionarei tudo. E como esse é um atributo comum, posso adicioná-lo a todos eles. Vou selecionar novamente e desta vez o 400 por 400. E, na verdade, eu vou mudar o material também. Eu tenho que fazer isso selecionando cada um deles e usando o tijolo e argila B. Eu não tenho ideia de como pronunciar isso Mas é isso que estamos usando. E eu vou selecioná-lo em tudo. Este material neste andar é do pacote inicial original do motor real Agora, vamos movê-los para criar algo parecido com paredes. Mas antes de tudo, vou mudar a escala para dois. Talvez um pouco mais de 2,3, em altura, e eu precise desbloquear antes. Obrigado. Agora, vou copiar, copiar esse valor e colá-lo no resto. Essa é outra opção que temos. Podemos copiar até mesmo conjuntos de opções inteiros, como eu posso copiar toda a transformação da categoria de propriedade, por exemplo, e se o outro item tiver o mesmo, cole e deveria ter funcionado. Novamente, propriedades de pilha na categoria e propriedades basais na OK. Aí está. Funciona. É. Agora, todos eles têm as mesmas propriedades. Agora, o problema agora é que isso é multiplicado por dois, é 400 por dois, cria 800 andares, não 600 andares, que não é um grande problema para nós agora, porque precisamos de espaço extra Vamos colocá-los nas bordas, talvez. Talvez eu esteja errado, talvez nosso tamanho não seja 600, é 800. Talvez eu tenha sido informado de forma errada. Das três pessoas D sobre os ativos. Mas está tudo bem. Podemos simplesmente alterar o tamanho do nosso ladrilho para 800. Vamos continuar. Podemos fazer isso valor padrão do tamanho do ladrilho do gerador Maze, pelo menos 2800, ou também poderíamos ter feito isso aqui no menu principal No momento, precisamos fazer isso no menu principal, com certeza, porque o antigo valor padrão teria superado porque não teria sido atualizado aqui Agora, Salvamento de arquivo, salvamento completo. Nossos azulejos são 800. Agora. Vamos colocá-los aproximadamente. Lá. Eles precisam criar uma caixa. Quando os substituímos grosseiramente e, na verdade, os fabricamos com frieza. Um pouco mais baixo porque, como você pode ver na mesma altura do piso, os materiais podem se sobrepor, e não queremos que isso aconteça À medida que é mais baixo. Sim, isso parece bom. Realmente não importa. Sim, está tudo bem. No momento, temos algo que parece paredes. Eu ejeto novamente, de algum lado. Você tem algo que parece paredes. Quando colocamos os itens acima deles, como paredes e tudo mais, talvez precisemos reajustar de acordo com o que vemos Vamos até o gerador de labirintos e, na verdade, colocar ladrilhos no bloco BB, adicionando mais uma coisa Você vai adicionar um texto. Outra renderização de texto. Isso vai colocá-lo aqui e girá-lo, olhe para a câmera Oh, eu não pude desfazer porque deixei Lay tocar. E quando você está jogando em qualquer editor, as alterações também precisam de uma certa combinação para serem salvas. Bem, na verdade. Mas quando você estiver jogando no editor, basicamente não faça alterações. Essa é uma das regras. Você pode. Como eu disse, você pode economizar. Se você tem um nível que deseja jogar, ejetar e mover algo, você pode e pode realmente salvá-lo É o botão k. Deixe-me demonstrar isso. Vamos para o nível do jogo. Se eu pressionar play, vou ejetar agora mesmo. Por exemplo, não quero mover isso porque isso foi gerado por meio de nossa planta, mas quero mover, por exemplo, a iluminação direcional Não seja a luz direcional, digamos que seja outra mesa de atores Eu quero mudar sua localização. E talvez gire-o também em algum outro grau. Se eu pressionar K selecionando-a, você poderá ver o estado seguro de K. Quando eu parar de jogar, ele manterá a rotação e localização ou escala que eu configurei Vamos retornar isso ao padrão e voltar ao nosso plano Agora, voltando ao nosso texto, eu vou gostar disso, datado na verdade. E para texto, vamos senti-lo de outro lugar e Shona aumentará o tamanho E vamos fazer isso com um tamanho de arte de 26, eu vou colocá-lo em 30. 40, 50, 50 parece bom. Eu o coloquei em algum lugar aqui porque vai ser uma frase. Na verdade, vou fazer isso aqui. Vou ver o roteiro de construção. Agora. Eu falo um pouco sobre roteiro de construção. O que ele faz é criar coisas e corrigir informações, e manipular o projeto basicamente antes de possuí-lo Talvez vamos. Vou receber esse novo texto, que eu não nomeei nem o número do arquivo. Vou trazê-lo aqui com controle e vou definir o texto. Vou conectar isso primeiro de tudo. Para o texto, vou alterá-lo para soar realmente como texto, o que transforma em string em texto. Agora, vou fazer uma caneta aqui, que significa na corda acima até a corda abaixo. Para a primeira string, vou fazer com que a pilha seja Ou B, na verdade, vou criar um bloco variável Quando coloquei uma palavra, não gostei de duas palavras porque temos o número do texto, o número do texto e colocamos uma pontuação t na frente dele. Agora, eu posso compilar e mudar isso para madeira. Ei, vou mudar isso para a variável do número T de N para inteiro Vou trazê-lo aqui e conectá-lo ao B. Agora, onde esse número ty será preenchido com informações que estarão no spawn Se você compilou e não funcionou na primeira vez, diz que não é possível analisar quedas de valor padrão Eu não vou entrar nisso. Você pode compilar novamente e está corrigido. Ah. Será preenchido na instância editável e exposto nos Quando estamos gerando um ladrilho, por exemplo, nosso primeiro ladrilho no gerador de labirinto, vá para nosso primeiro ladrilho de geração Defina como ladrilho. Agora temos esse número de ladrilho aqui, e o primeiro ladrilho é zero. Para compilar e salvar, vamos ver como fica. Eu ejeto. O número é zero. Agora, eu não gosto que ejetemos toda vez. Eu só vou trazer uma câmera. Deus. Vou configurá-lo para zero, zero, zero ou um pouco acima. Olhe para baixo. Podemos colocar aqui e fazer isso em um ângulo. Agora, se eu começar, ela não fez nada porque não a configuramos para possuir essa câmera. Vamos para um plano de nível agora, como a câmera, vamos para o plano de nível Clique e crie uma referência. Vou ficar mais legal com isso, vou misturar você com o Blend Conecte o novo alvo, esta câmera, e conecte-a ao Bigin play, compile e seven E agora estamos possuindo essa câmera. OK. Então, temos o número da peça zero, temos as setas e, na verdade, temos algumas paredes, que essa parede está um pouco fora, é essa parede O que eu deixei sobrepor, coloquei bem apertado, um pouco mais baixo. Ok, vamos jogar. Anúncio. Temos nosso número de tempo, temos nossas direções e temos um início que sempre é aleatório Agora, o que precisamos fazer é descobrir se quando sairmos do oeste, e quando soubermos que estamos bloqueados pelo oeste, essas flechas fiquem escondidas Mas isso é algo que vamos deixar para a próxima lição. Adeus por enquanto, até a próxima. 15. Comunicação de blueprint com interfaces: Olá, e bem-vindo ao Game Design Workshop e ao real Engine five Procedural Dungeon, curso de criação de RPG de ação Anteriormente, adicionamos algumas paredes em nosso ladrilho e também adicionamos texto do número do ladrilho que adicionamos ao script de construção. Como dissemos, isso acontece antes que o Blueprint apareça no mundo, mas se eu o tivesse, por exemplo, no início do jogo, ele funcionaria no Foi depois da desova. Ah, agora, vamos continuar olhando nossas flechas com base em nossas saídas, com base em qual lado está bloqueado e qual não está Na verdade, vamos usar isso também para descobrir quando estou construindo a próxima peça, se a anterior, de onde sai, onde posso construir, realmente vai fazer isso, precisaremos de uma função, mas não precisaremos de nenhuma função. Caso você queira criar posteriormente seus próprios ladrilhos, seu próprio labirinto Vamos criar e talvez tenhamos um labirinto criado por muitos ladrilhos Se eles tiverem as funções, na verdade, não se tiverem as mesmas funções, mas se tiverem uma certa adição ao blueprint que é chamada de interface de blueprint, eles podem ser executados mesma forma. Eles podem ser usados a partir do mesmo algoritmo Deixe-me explicar a tinta mordaz. Digamos que temos um algoritmo que diz: Vamos criar um algoritmo, na verdade. Se o bloco atual for igual ao bloco Mc, p? Se não for igual, então no ladrilho. É isso que criaremos mais tarde. Quando um bloco de desova e eu queremos ativar suas setas, pois quando nossa mecânica de desova nos dá uma referência ao que geramos, podemos chamar diretamente uma função que podemos chamar diretamente pois quando nossa mecânica de desova nos dá uma referência ao que geramos, podemos chamar diretamente uma função que está dentro desse projeto. Digamos que em nosso projeto de ladrilho, tile. E se eu tivesse P, eu farei. E essa função não gostaria disso. Se eu tivesse, tipo, ao selecionar uma classe, se eu colocasse uma caixa aleatória aqui para selecionar entre diferentes blocos, classes aleatórias. Não gostaria que eu estivesse desenhando a partir disso e executando uma função específica desse projeto Então, aqui está o porquê das interfaces de blueprint. Eles têm vários nomes de funções com entradas, saídas, o que quer que uma função possa fazer, na verdade, compartilhar algumas classes que selecionamos Então, quando eu tenho uma função de BI, uma função de interface de blueprint aqui, eu posso enviar uma mensagem independentemente da classe, independentemente de não ser uma palavra, independentemente da classe, mas eu estou gerando, desde que a classe tenha essa interface de blueprint, dentro dela, como herdada Eu vou te mostrar como adicionar isso agora. Então, basicamente, esse é um dos usos das interfaces de blueprint Não vamos falar sobre o que é mais ideal. Há outras formas de enviar informações. Existem despachantes de eventos, existem referências diretas, existem várias maneiras de fazer isso Mas o que é mais ideal ou não? Depende de muitos fatores. E geralmente não se trata de os problemas não virem daí. Geralmente são problemas de colisão. Geralmente são problemas de navegação, a bagunça de navegação e, com a IA, diferentes tipos de problemas criam problemas muito mais graves nos jogos Mas sempre, você pode usar o criador de perfil e verificar onde seu jogo está errado. Agora, vamos adicionar essa interface, mas para adicioná-la, precisamos criá-la. Então, vamos para nossa pasta Blueprints. Clique com o botão direito para criar uma nova pasta, na verdade. É chamada de interfaces de pasta, BI, Blueprint. Você vai entrar nessa pasta. Você vai para Blueprints, botão direito do mouse e acessa Blueprints e seleciona a interface do blueprint Vou chamar esse grupo de BI de Homes. E eu vou abri-lo. Agora, quando eu o abro, aqui, ele já nos dá uma nova função para adicionar. A primeira função que adicionaremos é uma função para encontrar a próxima saída. Porque onde estamos, precisamos, antes de tudo, encontrar a próxima saída. Então encontre Então vamos precisar de duas entradas para isso. Eles serão do tipo e direção. Ah, já é para mim porque é a última variável que criei, e vamos nomear essa renda. Ereção. E vá para as saídas e crie outra variável. Vai ser novamente na direção e, e essa será a saída. Ba, esta função fará coisas para encontrar a direção com base na direção de entrada, onde está a saída Porque não queremos que a saída seja igual à direção de entrada Porque então vamos jogar pingue-pongue para frente e para trás. E a próxima função seria olhar as setas, para definir a visibilidade com base no fato de o caminho estar bloqueado ou não Agora, como você pode notar, para aqueles que são novos, não posso colocar nenhuma codificação aqui Isso ocorre porque, nas interfaces de blueprint, devemos a elas o blueprint real ao qual as estamos adicionando E o motivo é porque podemos querer a mesma função com as mesmas entradas e saídas Eva faz algumas matemáticas diferentes, algumas operações diferentes dentro dela Eles podem estar funcionando de forma diferente no arquivo BV. Eles também podem funcionar de forma diferente no bloco BV, mas as entradas e saídas seriam as mesmas De qualquer forma, vamos continuar. Como podemos adicionar essa interface em nosso projeto? Para fazer isso, vamos acessar padrões das classes, desculpe, as configurações dos clubes, e vamos acessar o tubo de interfaces e as interfaces implementadas Vamos selecionar Adicionar e chamar o BI Mase comes. Agora, em nossas funções, variáveis e variáveis, foi criada uma nova categoria chamada interfaces. Se eu abrir isso, posso ver claramente que não compilei isso. Eu posso ver claramente nossas duas funções. As funções que você estava vendo antes eram uma função que eu testei oficialmente, mas não funcionou bem. Então, sim, essas são nossas duas funções agora. Compile novamente e ele compilará. Sempre compile seu plano de classe I. Dave e, em seguida, feche antes fazer as coisas que você adicionou em seu projeto Agora, nossa próxima etapa antes de começarmos a corrigir essas funções, não corrigi-las, mas criá-las, seria criar uma variável para controlar as informações de se uma direção está aberta ou não. Se uma direção tiver acesso, podemos seguir em frente ou ela será bloqueada. E como você pode ver, eu já estava brincando com isso, e essa é uma variável de mapa que eu criei. Vamos começar do início igualmente. Digamos que, por exemplo, não seja um mapa. Digamos que seja uma variável única e seja do tipo direções. Crie uma nova variável do tipo direções e, em seguida, selecione a variável do mapa, o contêiner do mapa. E a segunda parte disso seria um Bolan. Direção ligada e desligada. Isso é o que criamos aqui. Vou chamar isso de direções variáveis. Agora, vou precisar de outra variável, que dessa vez seria novamente um mapa, e eu vou ter os dois lados de e d. Vou nomear isso de forma oposta. Vou compilar e salvar. E para essas duas variáveis, preciso definir alguns valores padrão. Então, vou primeiro seguir as instruções. Vou adicionar um. Eu vou dizer que isso é o oeste. Vou adicionar outro, dizer que é o sul, adicionar outro, dizer que é o leste, e vou adicionar outro que será o norte. Vou deixar a parte In, a segunda chave como também. Agora, por que eu não pressiono sempre adicionar mais quatro? E então, porque se um deles for norte e o valor padrão for norte, não posso adicionar outro. Como você pode ver, ele diz que não é possível adicionar uma nova chave porque ela já existe. Agora, eu vou fazer isso para as direções opostas também. E isso seria o sul, o oposto é o norte. Isso seria o leste, então o oposto é o oeste. Isso seria oeste, então o oposto é leste. E isso seria o norte, o oposto é o sul. Vou compilar e salvar. Na verdade, vamos usar as instruções primeiro. Vamos para nossa função de setas Tal. Agora, ele foi criado como um evento em que eu queria que fosse uma função. Então, vou deletar isso. Vou deletar isso e mexer um pouco no sistema , porque isso não me permitirá fazê-lo funcionar facilmente. O que vou fazer para acabar com isso é simplesmente adicionar a pilha de parâmetros voltar ao nosso plano Total de oito setas funcionais. Adicione algo a isso. Vamos isso. Vamos adicionar o This is good. Isso, compile e salve. Volte aqui, vou deletar a saída, compilar e salvar E agora eu tenho isso como uma função. Agora, para nossa função total de setas. Vamos pegar as direções do mapa. E quando estamos manipulando informações do mapa, não podemos realmente ficar como uma matriz Temos que usar a matriz, uma das duas chaves. Eu vou ver. Na verdade, são chaves e valores. Não são duas chaves. É e e os valores de Enfim, vou pegar as chaves e acessar cada loop das chaves. Explicamos algumas coisas sobre quais loops antes, agora vai ser fácil Vou obter orientação novamente e vou encontrar um valor. É possível encontrar um valor com base em uma chave. Vou conectar isso aqui, o elemento da matriz do laço dianteiro, e estou encontrando a chave nas direções. E eu vou pegar todas as minhas flechas, na verdade. Um para ou o que precisamos é de um aluguel com base nas instruções. Então, vou conectar a seta norte ao norte. Vou conectar a seta sul ao sul, para conectar leste a leste, oeste a oeste. A partir dessa matriz que ele está selecionando com base no raio, com base nessa seleção com base nas direções. Vou ter visibilidade e também vou me propagar para crianças E a visibilidade que será definida será definida com base no resultado da descoberta. Agora, ele tem dois pinos opcionais. Uma delas é se encontrou o item porque há um caso de eles solicitarem algo que não está dentro das instruções acima E o outro é o valor dos dados. Vou conectar isso à visibilidade e vou conectar isso aqui. Baseie isso aqui e está incompleto. Eu vou terminar o set. Retorne a nota de que concluímos a função. Agora, vou compilar e salvar. E vamos testar isso, por exemplo. Vamos colocar as setas Tg aqui . Compilando, digamos Quando eu pressiono play, nenhuma seta deve ser mostrada porque as temos de forma invisível Sabemos que tudo está bloqueado. Mas se eu pressionar, digamos que Norte e Sul estejam abertos, funcionará. Sim, está funcionando. Oh, eu acho que isso é suficiente para este. Eu vou te ver na próxima. Adeus 16. Como encontrar saídas disponíveis: Olá, e bem-vindo de volta ao Game Design Workshop, que revisa cinco cursos de criação de Procedural Dungeon Action A Plus Na lição anterior, falamos um pouco sobre interfaces de projeto e também criamos algumas variáveis, e também criamos a variável de direção, que contém todas as informações para oeste, sudeste e norte e visibilidade acordada das setas na E também criamos o mapa de direções opostas, qual temos as direções e o oposto delas. Também criamos a função total de setas, qual estamos seguindo as direções examinando cada uma delas e encontrando a seta adequada para ativar ou desativar a visibilidade Agora, vamos continuar encontrando a saída. Um pouco de vapor estourou aqui. Não importa. Então, vamos continuar encontrando nossa saída. O que primeiro precisamos fazer é promover a direção da renda para uma variável, caso precisemos dela posteriormente. Na verdade, podemos usá-lo livremente nessa função, só porque temos essa renda aqui. Deixe-me mostrar uma funcionalidade legal e real. Agora, deixe-me mostrar uma funcionalidade interessante e real. Se eu renomear isso, para ficar mais claro, destinos de renda, vamos colocar um S aqui. Enquanto estou dentro da função, posso chamar qualquer entrada que esteja chegando a essa função, apenas digitando e, direção da renda Claramente, isso é diferente em uma categoria diferente. Na verdade, não está em nenhuma categoria. Isso significa que está dentro dessa função. Eu posso chamá-lo como uma variável, desde que eu esteja nessa função. Se eu sair dessa função para o gráfico e colar essa variável, você verá que ela não existe. Agora, quando uma variável não existe, podemos clicar com o botão direito do mouse e criar uma variável para criá-la, e ela manterá os dados, o tipo de dados e essas coisas. Agora, vamos deletar isso. Nós não vamos precisar disso. Vamos retornar à nossa função. Oh, conecte isso aqui. Temos instruções de renda. Nosso primeiro passo deve ser que nosso mapa de direções seja atualizado, que essa direção seja, na verdade, uma direção móvel É livre se mover pela lateral. Não bloqueia. Então, devemos ativar as setas. Mas o que vamos fazer é ir na direção oposta. Vamos descobrir que o valor da direção da renda, que eu posso simplesmente arrastar daqui, não importa, e depois vou adicionar ao mapa. E por que vou adicionar, como explicamos, porque estamos adicionando um valor que já existe, isso apenas altera o valor. Não adiciona um novo. Então, vou conectar isso aqui e definir o valor verdadeiro e conectar a extituição Agora, a próxima etapa que devemos fazer é descobrir qual dessas direções está livre para criar uma saída. O que vamos fazer é, na verdade, duplicar as direções. Tudo isso existe. Vou compilar e, como é uma duplicata, ela já tem nossos valores Agora, o que vou fazer é remover as direções de renda, que na verdade deveriam ser nomeadas para a direção de renda. Esses muitos são apenas um. Aqui eu vivo. Agora, como removemos um valor daqui, a direção da renda, o restante dos valores deve estar livre para continuar nossa construção de Eu, como encontrar a saída que queremos. Então, eu vou pegar as chaves. Agora, essas seriam apenas as respostas possíveis, e eu vou receber um item aleatório. Vou promover isso para uma variável e vou chamá-la de possível saída. Este ano, este ano. Agora, temos uma possível saída. Como decidimos e a classificamos em uma variável, devemos removê-la novamente das possíveis saídas Vou conectar isso aqui. Vou conectar isso aqui e ele será removido. Então, agora isso vai ficar com duas saídas possíveis. A próxima coisa que devemos fazer é adicionar as direções, como e ao dizer adicionar, quero dizer atualizar o valor de nossa possível saída. E isso vai transformar isso em verdade. Então, agora, compile e salve, o próximo passo seria olhar as setas Como atualizamos os valores nas direções, a função The que criamos para Togal setas, atualizaremos nossas No final, vamos trazer o nó de saída, conectado aqui, e conectar a possível saída à saída de saída. Na verdade, poderíamos nomear essa saída, não uma saída possível. Compile e salve Agora, vamos pintar e explicar o que esse código realmente fará. Qual é a teoria por trás disso? No momento, temos uma caixa, nossa caixa de ladrilhos, e decidimos sair, digamos, aleatoriamente desse lado, e como essa é a primeira caixa, essa seria nossa introdução Bloco de introdução. Agora, estamos encontrando uma saída aleatória no primeiro bloco do telefone. A segunda peça que vamos construir. Vamos colocá-lo em amarelo, na verdade. A segunda peça que construiremos será automaticamente automática. Vamos executar a função, é claro, para fazer isso. Que este lugar seja sua entrada e ela decida aleatoriamente um lado para continuar Vamos supor, por exemplo, que continue subindo. Na próxima peça, também saberemos que há outra saída aqui, e digamos que continue assim. Agora você está vendo aonde eu quero chegar com isso. Na verdade, acabará indo para cá e não poderá continuar. A forma como o estamos construindo é como uma cobra, como um verme. Isso cria mais uma saída. O que faremos é criar um algoritmo como um algoritmo de rastreamento de dinheiro para aqueles que são um pouco mais avançados O que é um algoritmo Buck Track? Isso significa que, em resumo , ele coloca algo, ele coloca algo até que as regras digam que você não pode colocar algo. Não há mais colocação com base nisso. Então, ele volta e verifica se pode comprar outra maneira de percorrer. Agora, essa é uma explicação muito aproximada. Isso é o que faremos. Mas para nós, exatamente, queremos dar um passo atrás. Como se um algoritmo de retrocesso mais tradicional começasse a partir daqui Ele encontrou um ponto em que não pode continuar, então volte. Você pode encontrar algum outro lugar para continuar? Na verdade, escolheremos um bloco aleatório para criá-lo aleatoriamente, criando masmorras ramificando a masmorra em lugares Fora, estamos avançando demais. Eu acho que este é um bom ponto de parada para este. Na próxima lição, podemos começar construindo isso e explicando mais algumas coisas. Tchau Nos vemos na próxima. 17. Algoritmo para forma de labirinto base: Olá, bem-vindo ao workshop de design de jogos no curso processual de criação de RPG de ação Dungeon Five RPG de ação Anteriormente, criamos a função find exit, que corta a direção da renda para nossa variável, faz alguns cálculos e adiciona direções de nossa variável de direção. Ele atualiza as estatísticas, que as setas fiquem visíveis e, a partir de nossas possíveis direções, estamos removendo a direção de onde estamos vindo E então estamos armazenando uma direção aleatória das que sobraram, e estamos removendo isso também e também alterando as setas, as direções, as variáveis para tornar as setas visíveis E então totalizamos as setas com a função que criamos antes Agora, também explicamos um pouco sobre nosso algoritmo, que será um algoritmo retroativo Para quem precisa de mais explicações sobre o algoritmo e o que ele é Basicamente, é uma técnica para resolver problemas de forma incremental tentando soluções parciais e depois abandonando-as se não forem nosso exemplo, ele tentará criar para colocar outro ladrilho se não conseguir colocar outro ladrilho, ele voltará para uma posição anterior, como dissemos, para uma posição anterior aleatória e tentará criar mais ladrilhos a partir daí Agora, vamos começar a criar o algoritmo. Vamos ver o gráfico Even no gerador do labirinto, não no ladrilho Nós, no gerador de BPM, vamos para o VNGraf. Vamos criar um evento personalizado. Vamos chamar esse campo de evento personalizado. Agora, a primeira pergunta que devemos fazer é com uma ramificação terminamos de saber se nossos blocos atuais são iguais aos nossos blocos mac? Eu vou trazer isso para aqui, e vou conectar isso. A primeira pergunta está feita. Se for verdade, terminamos de construir a primeira parte do nosso. Caso contrário, que é a parte mais interessante, devemos começar a construir Agora, nossa próxima ação será aumentar os blocos atuais em um. Vou colar isso aqui, vou fazer um mais um e vou definir os blocos atuais. Se estivermos aumentando em um, também podemos adicionar mais, que é um aumento em, que aumenta em um Mas isso também é bom. Para a próxima parte, vem a parte mais difícil, porque aqui vem basicamente uma pergunta múltipla E para isso, precisamos de uma função. O que essa função fará. O primeiro passo da nossa pergunta será encontrar não a cruz adjacente, mas a cruz adjacente que está vazia. Vamos criar outra função e a chamaremos de base vazia. A grafia correta, talvez. Quem sabe? Não. O que faremos é obter nossas coordenadas atuais e também obteremos a função na qual criamos a cruz encontrada adjacente. E a partir dessa lista que explicamos, obtemos tudo adjacente às nossas coordenadas. Vamos fazer um loop, para cada loop. R e vamos fazer alguns testes. O primeiro teste que devemos fazer é essas coordenadas já pertencem à masmorra Se já pertence, significa que tem um título, então não deveríamos estar lá. Vou pegar nosso mapa da masmorra, vou pegar nossas chaves e vou perguntar se as chaves contêm um item E o item seria o elemento de matriz dos vizinhos adjacentes. Oh, esta é nossa primeira pergunta. Vamos colocar um galho. Vamos conectar isso aqui. Agora, se isso for verdade, devemos continuar. E a próxima pergunta seria: ela pertence às coordenadas de entrada forçada? Como, por exemplo, o bloco de introdução ou, para os próximos níveis, o bloco de elevadores do Eu anterior. Oh, vamos ver se essas coordenadas também estão contidas em uma cópia e cole isso na lista vazia forçada. Agora, quando temos um galho e temos duas coisas que queremos que sejam verdadeiras, continuemos a partir da verdade. Nós temos a variável. Na verdade, não os dois. Para alterar essa frase para se tivermos uma ramificação e quisermos verificar se alguma das condições é verdadeira, podemos usar isso ou nós. Ou Boulan, o que significa que se isso é verdade, ou isso é verdade para Isso significa que, se alguma de nossas condições for verdadeira, a filial disparará de verdade. O que queremos é que nenhuma das condições seja verdadeira, então ela dispara do falso. Agora, precisamos de outra condição, e a condição seria quão grande eu posso construir o labirinto Tipo, o que significa o máximo em x e y, eu posso ir no layout. Para isso, precisamos de uma nova variável. Vamos criar uma nova variável a partir de variables plus. Vamos escolher uma variável e definir seu nome M s e alterar seu tipo para um inteiro Isso é um número inteiro, é claro, porque não há meio bloco Há apenas um, dois, três, quatro, quantos blocos queremos. E por ter apenas uma variável, só podemos criar labirintos não quadrados porque ela será gerada aleatoriamente. Mas se os corredores máximos estiverem mais ou menos próximos do tamanho do labirinto, do que eles podem sentir, então será abóbora Se quiséssemos diferenciar entre x e y e criar paralelogramos , precisaríamos do tamanho máximo x tamanho máximo y. Agora, para nós, precisamos apenas Vamos trazê-lo aqui. O que queremos fazer é comparar maior ou menor. Eu disse o contrário. Se for maior é esse, se for menor é esse. O x e o y, então precisamos duplicar isso. Conectado aqui. Oh, se temos nossas coordenadas atuais, que não são nossas coordenadas atuais no momento, é esse elemento real da matriz, que vou quebrar aqui porque é um ponto de entrada e eu , x e y, separados. Oh, se meu x for maior ou meu y for maior que o tamanho de maio, então estamos fora dos limites Mas, ao mesmo tempo, também queremos usar os valores negativos, que nosso labirinto se ramifique mesmo por trás da estrela Se começarmos aqui e começarmos nos sentir no eixo positivo de x e y, esse é o nosso espaço de construção. Mas se começarmos aqui e ali com o negativo também, então nosso tamanho e os triplos O que vamos fazer é multiplicar isso por menos um, que possamos negá-lo e conectar esses dois Isso é uma bagunça. Vamos trazer os positivos para os maiores acima e os negativos para baixo e conectar isso aqui. O que podemos fazer é criar algumas notas de leitura clicando nos próprios cabos. Isso se conecta aqui, então eu vou conectar isso aqui. Vou trazer isso de volta e conectar isso aqui. E vamos fazer outro aqui, nós aqui. Agora, você sabe o que? Vamos apenas duplicar essa variável aqui, talvez conectada aqui Pronto, eles podem ver meu erro. Ok, porque quando está tão espaguetado, é difícil entender X vai aqui e y vai aqui. E isso não é necessário. OK. Agora está um pouco melhor. Agora, o que vou fazer é usar novamente a marcha ou uma ou lógica Vou me conectar a isso aqui porque se algo disso for t, então retornará verdadeiro. Se todas forem falsas, elas retornarão falsas, então estamos dentro do labirinto E um pequeno truque bacana e verdadeiro também é que eu posso usá-los Eu posso clicar com o botão direito, e eu posso recolhê-los, funcionar. Vou torná-lo puro e chamá-lo. Tecnologia a partir de vogais. Não, eu não criei a saída porque não a conectamos Vamos colocá-lo em uma variável. Vamos acabar com isso. Digitação do salto. Vamos entrar e nos conectar e atuar aqui. Compile e salve. Vamos voltar ao nosso espaço vazio adjacente e criar outro pino neste ou conectá-lo aqui. Eu passei um pouco além disso. Sim, podemos concretizar mais pinos clicando no pino do anúncio, como fiz aqui Eu deveria ter terminado com isso. De qualquer forma, vamos continuar. A lógica é a parte importante. Agora, digamos que tudo é falso, e tudo está de acordo com nosso plano, que está correto. E um desses adjacentes está completamente vazio. Ainda não pertence ao labirinto. Não é esvaziado à força e não está fora dos limites Deixe-me verificar rapidamente fora dos limites, se nada está errado. Se o tamanho máximo for maior que o X. Agora, isso é o oposto Se o x for maior que o labirinto, e se o x for menor, e isso Isso significa que, por exemplo, se x é menos dez e o tamanho é menos cinco, é s, e é, está fora do limite Isso está correto. Então, se estiverem corretas, temos as coordenadas, mas não temos qual é, Nordeste, Sudoeste, onde estão essas coordenadas? Também precisamos dessa informação. Então, o que vamos fazer é criar uma variável temporária se formos até aqui na lista de variáveis. Agora podemos ver uma nova opção, variáveis locais, que são variáveis que, como você pode ver, ficam vazias adjacentes que pertencem apenas a essa função. Isso significa que quando essa função é executada, eles estão recebendo seus valores padrão. Ele não armazena nenhuma informação sobre eles. Ah, como essa é uma função pura, podemos realmente usá-la. O que vamos fazer é chamar isso, vamos fazer disso um mapa primeiro. E a primeira chave, a chave, serão as direções, a rameração A variável, a segunda variável seria o ponto das coordenadas. Oh, tenho que trazê-lo aqui. Vamos nomeá-lo também. Um cátion. Agora, vamos dar um nome a ele. R Não há locais disponíveis. É o adjacente válido. OK. Mas temos adjacentes válidos. E aqui vamos adicionar a esse adjacente válido. Esse valor que vem da matriz. Vamos conectá-lo aqui. Agora, como sabemos se é nordeste, sul ou oeste? O que vamos fazer é usar um nó de seleção aqui. E para as opções, vamos conectar o índice da matriz. Na verdade, isso não funcionou muito bem. Às vezes, não oferece as opções, Zake. Vamos fazer uma seleção. Assim com um curinga, e se eu conectá-lo, ainda não me dá as opções. Então, vamos mexer um pouco e pegar a última saída daqui e fazer uma seleção a partir daqui. Vou conectar isso também aqui e depois conectar aqui e remover isso. Isso não funcionou. Vamos tentar novamente. Vamos trazer la exit e da matriz de índice, vou escolher Vamos conectar isso aqui. Y. Aqui temos os valores Vou conectar isso aqui primeiro, e depois vou desconectar isso É assim que introduzimos esse seletor. Incrível. Nós trazemos da matriz. Fazemos uma seleção, trazemos uma variável de nossas direções eletrônicas. Nós o conectamos ao select, então ele mostrou as opções em vez de tê-las como variáveis. Talvez houvesse uma maneira mais fácil de fazer isso. De qualquer forma, agora, como sabemos nosso índice corresponde a esse índice do raio, porque é esse que queremos fazer um loop Sabemos que o primeiro é Índice zero é norte. O primeiro é o número um é o sul, o número dois é o leste e o número três é o oeste. Portanto, podemos fazer isso de forma correspondente aqui, norte, norte, oeste. Agora, a próxima coisa que precisamos é de uma saída nesta função Vou selecionar isso e a partir da conclusão dos quatro loops. Porque se o adicionássemos aqui , toda vez que o corpo do loop disparasse ficaria completo. Na verdade, no primeiro , ficaria completo. Vou conectar isso aqui, e vou mudar a saída para uma variável de mapa, na verdade uma variável de direções que fará dela um mapa. E o segundo estaria novamente em questão. Assim, podemos conectar nosso adjacente válido. Vamos chamar também de válidos os valores. Por que eu adiciono os valores neste e não aqui neste nome, porque se você tem os mesmos nomes, isso pode confundir o motor e geralmente não permite, mas caso permita , pode confundir o motor ao empacotar o jogo em muitas outras Então, sim, é melhor ter nomes diferentes para as variáveis locais, para as variáveis que não são locais em seu blueprint e também para as notas de retorno e tudo A criação de nomes de variáveis é algo melhor feito com muitas explicações, como valores adjacentes válidos. Talvez isso devesse ter sido um labirinto válido cruzando valores adjacentes Quanto mais explicações sobre os nomes das variáveis, melhor. Ah. No momento, terminamos com essa função, ponto vazio adjacente e estamos retornando essa lista. Também criamos esse checkout da função óssea, e acho que é um bom ponto de parada Eu vou te ver na próxima. Adeus. 18. Aula 3D 17 Geração de Azulejos Contínuos: Olá, bem-vindo de volta ao workshop de design de jogos e procedural real engine five Dungeon action bs Na última lição, paramos criar nosso get empty adjacente. Na verdade, passamos por nossos vizinhos. Fundamos os vizinhos cruzados e nós quatro examinamos cada um deles. Verificamos se eles pertencem ao mapa Dungeon, se pertencem ao vazio forçado ou se estão fora dos limites criando essa função aqui Então, se não pertencia a nenhuma delas, nós a adicionamos a uma variável chamada valid adjacente, que é uma variável local nessa função, e fornecemos esse valor com nossas notas de retorno quando o loop for concluído. Vamos continuar com nosso labirinto. Algoritmo de construção. Agora, vamos ao gráfico par e trazer essa pequena função que criamos, que é ficar vazio adjacente. Mas não o tornamos puro. Vou clicar em computar e agora é puro. Agora, temos essa lista. O que queremos fazer com essa lista é verificar se a última saída pertence a alguma delas. Então, o que eu vou fazer é encontrar a última saída. Se eu não conseguir encontrar a última saída, precisamos voltar atrás, então não há como continuar porque todos os adjacentes vazios não correspondem à saída que queremos O bloco quer sair de lá, mas o próximo bloco não é realmente válido. Não, não vamos fazer a trilha de volta agora. O que vamos continuar se encontrarmos a última saída. Vou colocar uma ramificação aqui, vamos conectar isso aqui. E desde que fundamos nossa última saída, ela existe. Isso significa que eu posso construir um novo bloco. Isso significa que finalmente posso ter uma nova coordenada. Vou trazer os cabos atuais e vou conectá-los para conectar isso aqui Agora que temos nossas novas coordenadas, precisamos encontrar o local onde geraremos o novo bloco Oh, vamos trazer sua própria aula de ator. E vamos selecionar o bloco da classe novamente, bloco P, e vamos dividir a transformação. Agora, para encontrar a localização que precisávamos, criamos uma função para isso, que é chamada de localização sem fim Vou conectar isso aqui. Vou conectar isso aqui, e finalmente podemos ter um novo bloco. Agora, isso responde ao novo bloco. Nosso número de ladrilho não deve ser zero. Nosso número de título deve ser nossos blocos de celeiro. Porque agora, adicionamos um e zero mais um é igual a um, então esse é nosso primeiro bloco com base zero de contagem A próxima coisa que devemos fazer é adicionar isso à droga. Vou trazer o mapa do Dangon e vou adicionar este lugar aqui E vou trazer as coordenadas atuais aqui e o valor de retorno do ator de desova para o ator da masmorra Além disso, precisamos ligar daqui para encontrar a saída. Sim, eu vou encontrar uma saída. Queremos que a mensagem seja uma porque se eu tivesse selecionado a saída. Podemos selecionar isso. Como você pode ver, ele tem um alvo diferente. Provavelmente não teria funcionado porque essa cor aqui significa que você a está chamando nesta planta, mesmo que eu tenha conectado o alvo Mas de qualquer forma, deveria ser o modelo. A mensagem quando tem essa pasta aqui, significa que está enviando uma mensagem. Agora, eu vou deletar isso, e vou conectar isso aqui. E para a direção de entrada, vamos escolher a última Sair. Y. E nosso valor de saída seria definir nossa última saída Também precisamos adicionar esse ator para ser destruído, então vou levar os atores para o destruidor. Vou fazer uma adição na matriz e conectar isso aqui. Vamos mudar tudo um pouco. Aqui, e talvez faça os cabos um pouco menos pagificados. Já parece melhor. Agora, quando todas essas funções acontecerem, o que devemos fazer é construir novamente. Se eu clicar aqui, você pode ver, me leva ao início, e isso continuará até que essa condição seja satisfeita ou isso ou agora encontre um problema. Vamos demonstrar o que criamos. Vou até a variável Meu tamanho e selecionarei um número. Digamos que cinco. Vamos realmente tornar essa instância editável e expor no Spone, para que possamos configurá-la no menu principal Mas vamos atualizar isso também. Vamos compilar primeiro. Vamos atualizar isso também. E temos um tamanho de labirinto aqui. máximo 20 peças, é claro, também precisamos convocar o evento de construção após nosso evento de estilo spawn first Então, vamos chamar aqui nossa construção e compilação. Vamos lá. Vamos pré-começar, e ele grampeou. Por que isso incomodou? Agora funcionou. Aqui, aqui, aqui. Por que esse beco sem saída? Tenha Ops aqui novamente, este é um beco sem saída. Estou vindo daqui, estou removendo isso. Aqui. Há algo acontecendo com as flechas. Então, vamos ao bloco BP e às nossas funções de interface Eu provavelmente encontro uma saída. Vamos verificar o que estamos fazendo na próxima direção. Estamos descobrindo o oposto. Estamos acrescentando que é o oposto de onde viemos. Estamos removendo-o da saída das chaves da lista. Estamos adicionando a saída e alternando direção da renda passa. Sim. Esse é o problema aqui. Veja, estamos removendo a direção da renda. Estamos removendo uma forma de sairmos. O que devemos remover é o oposto da direção da renda no início. Então, se compilarmos o jogo agora, sim, temos duas setas e ele termina com uma Ok, ótimo, e isso mantém isso vazio. Além disso. Temos algo que começou a criar um labirinto, um labirinto de minhocas, começamos daqui Vamos ver mais algumas vezes se ele volta atrás. E vamos ver quantas peças são. 11. Como dizemos esse máximo. Oh, eu chego ao fim. É por isso que. O fim. Adivinhando. Digamos que cinco. Então isso é zero, um, dois, três ou cinco. Esse é o fim. É por isso que acaba aqui. Tudo bem. Não, acho que esse é um bom ponto de parada. Na próxima lição, vamos fazer a lógica Bata. Tchau. Nos vemos na próxima. 19. Sistema de backtrack personalizado: Olá, bem-vindo de volta ao Game Design Workshop e ao verdadeiro curso de criação de ARPs Procedural Dungeon Action do Real Engine Five ARPs Procedural Dungeon Action Anteriormente, criamos o início do nosso algoritmo, nosso algoritmo construído. Na verdade, criamos muito. Criamos a primeira pergunta, ou seja , nosso algoritmo chegou aos blocos MC. Em seguida, adicionamos um ladrilho extra, um extra ao balcão dos ladrilhos. Fazemos algumas perguntas, por exemplo, se nosso espaço vazio adjacente ao nosso redor é válido, e encontramos a localização de nossas novas coordenadas, se elas são válidas, e geramos o bloco Adicionamos à lista de destruição, adicionamos a lista da masmorra, encontramos uma nova saída e continuamos construindo Agora, vamos continuar com nosso loop de bactra. Ah. Agora, precisamos fazer algumas perguntas novamente. Então, vamos abrir o Paint e explicar essa parte do nosso algoritmo com mais detalhes Agora, digamos que temos nossa masmorra que está sendo criada Deixe-me copiar e colar isso. Em algum momento, ele não pode criar mais. Tentou prosseguir e não há mais espaço para avançar com as regras que temos até agora. Então, o que fazemos? Vamos fazer uma pergunta muito simples. Vamos diferenciar o bloco aleatório de escolha 11 dos que criamos e tentar ver se há uma saída válida. Além disso, faremos mais uma pergunta: se visitarmos um quarteirão e continuarmos construindo a partir desse bloco, bla bla bla a Roa, é uma construção contínua e se encontra no final novamente Não queremos nunca mais voltar a esse quarteirão. Então, criaremos outra lista na qual colocaremos os blocos que visitamos. Então, criaremos outra lista dos quarteirões que estamos visitando, para que nunca mais os visitemos. A razão é que, do meu ponto de vista, ela cria uma masmorra melhor, uma masmorra mais ramificada do que seria sem ela De qualquer forma, essa é a nossa regra. Vamos implementá-lo. Agora, para fazer isso, precisamos de uma nova função. Agora, vamos criar outra função, e vamos chamar isso. Tente sacudir o caminhão. A primeira coisa que precisaremos é duplicar nosso mapa de masmorras Vou chamar isso de duplicata z. Acho que está tudo bem Eu vou trazer isso aqui e vou trazer nosso mapa de masmorras também Agora, no mapa da masmorra, vou selecionar as chaves E eu vou pegar o comprimento, na verdade. Posso obter um item aleatório diretamente da matriz e vou promover uma variável local, o inteiro, o índice de saída, não o endpoint E eu vou nomear esse local aleatório. Vou conectar isso aqui. Vamos verificar se esse local aleatório está dentro do nosso visitado. Na verdade, eu tenho isso aqui. Localizações. Vou verificar os jantares. E eu vou precisar da chave para descobrir que eu vou precisar, eu vou pegar. Há uma referência, preciso de uma cópia. Vou pegar esse local aleatório. Por que eu faço isso dessa maneira? Vou explicar em um segundo. A maneira como estou fazendo isso é porque quero explicar que, se eu escolhesse, se eu tivesse conectado isso aqui, obteria um novo aleatório. Se eu armazená-lo em uma variável , obterei essa variável que eu armazenei. Mas se eu estiver recebendo desse nó aqui , receberei aleatoriamente um novo aleatório toda vez que algo estiver solicitando algo aleatório A mesma coisa teria acontecido se eu tivesse um int aleatório. Se eu estivesse solicitando duas vezes , receberia dois números diferentes E todos os nós aleatórios, como, por exemplo, um intervalo aleatório, funcionam assim. Eles darão um valor diferente tudo o que está conectado a eles. Vamos continuar. Agora, se isso for verdade, então queremos terminar essa função aqui. Então, vamos ter uma saída, que será do tipo lean, e vamos nomeá-la. Não. Vou conectar isso aqui e vou colocar a saída. Agora, porque estou encerrando a função aqui, não significa que, se eu tiver coisas aqui, elas não serão executadas se isso for falso. Eu posso ter muitos nós de retorno dentro uma função com base em onde eu quero que a função termine. Então. Mas se for falso, vou usar a lista de Nangon, nosso mapa de Dungeon Eu vou trazer isso aqui. Vou pressionar d. Vou conectar isso aqui. Na verdade, a partir desse resumo, vou colocar isso aqui Além disso, precisamos enrolar para que possamos obter o objeto também. E erro instantâneo. Eu não quero o mapa da masmorra aqui. Quero o local visitado aqui. Estou encontrando no mapa dangon e estou adicionando ao local visitado Ah. Agora, adicionei ao local visitado, o novo local que estamos testando se ele pode ter uma saída. Mesmo que esse local não tenha uma saída, ainda queremos adicioná-lo aos locais visitados. Agora, como vamos verificar se há uma saída para esta? Precisaremos abrir nossos pentes de labirinto I, adicionar uma nova função e nomear essa função de new exit Vou compilar e salvar as comunicações de BI, mas coms e usar nossos pneus Agora, essa nova função aparece aqui. No entanto, essa nova função precisa de uma saída. Nós, vamos adicionar uma saída. Não seria uma saída. E ele precisa de outra saída da direção de saída. Vamos ligar para isso. Será a partir das direções de tipo, das direções de enumeração, e agora podemos compilar e salvar na verdade e salvar na verdade e Isso é uma função. Não é mais um evento. Vou abri-lo e vamos criar algumas coisas aqui. Sério, você sabe o que? Vamos terminar essa parte primeiro. E então vamos fazer isso. Então, vou chamar a nova saída como uma mensagem porque estamos enviando uma mensagem. É uma interface de modelo. E se for verdade, eu não quero um N. Eu quero um galho. Se isso retornar verdadeiro, significa que não temos saída e, em seguida, não retornamos nenhuma saída. Nós copiamos e colamos o nó de retorno. Agora, se isso for falso, definiremos a última saída para a direção de saída e definiremos nossas coordenadas atuais Para W, é a ordenança aqui Vamos ler um pouco sobre spaghetti pi aqui, vai aqui Aqui. Um pouco melhor. Eu quero fazer isso. OK. Taça T. É sempre bom amarrá-los um pouco. Não, vamos devolver isso com furos. Encontramos uma saída. Podemos continuar construindo. Acho que devemos conectar isso aqui. Vamos chamar essa função. Mochila, que não será pura, que será uma função real E vamos colocar um galho aqui. E temos que fazer mais algumas coisas. Agora, se eu fosse colocar, digamos, nenhuma saída, então continuaremos construindo com nossos novos dados. Se eu fosse executar a partir da compilação , ele passaria por essa verificação, que realmente não importa, mas adicionaria um extra aos blocos atuais, e não queremos que isso aconteça. Então, vamos criar outro evento personalizado. E vamos chamá-lo de continue build e vamos conectá-lo à ramificação aqui que estamos considerando para adjacentes vazios Vamos continuar construindo a partir do falso. Isso significa que, se nenhuma saída for falsa, continuaremos construindo com nossos novos dados que serão passados aqui. Ele verificará a ordenança que estabelecemos e funcionará de acordo Agora, o que acontece se nenhuma saída for verdadeira quando não tivermos outra saída? Bem, vamos fazer uma pergunta muito simples. Nossos locais visitados e o mapa de masmorras têm o mesmo comprimento para fazer isso? Vou perguntar o comprimento, que nos dá o número de entradas neste mapa, matriz ou conjunto? E se esses dois são iguais e não há saída , não podemos mais vencer o labirinto. R: Vamos piscar, por uma questão de insegurança. Eu não consigo construir. E para que nosso código não cometa erros, definiremos nossos blocos principais. Até o máximo de estilos, e vamos chamar de build. Isso significa que, se o labirinto não puder mais ser construído, defina nosso ladrilho atual com dois estilos máximos e saia dessa base para construir a masmorra Agora, quando não é quando o mapa da masmorra não é igual aos locais visitados, devemos simplesmente executar novamente a viagem para voltar atrás E isso não criará um problema porque não será infinito, porque toda vez que fazemos o backtrack e selecionamos um novo ponto, adicionamos para visitar esses locais Em algum momento, essas duas variáveis serão as mesmas. Basicamente, eles não serão os mesmos porque estarão em uma ordem diferente, mas conterão as mesmas informações. Então, ele sairá e sairá do nosso prédio. Eu acho que isso é suficiente para este. Continuaremos com a próxima preenchendo o novo código de saída. Te vejo então. Adeus 20. Finalizando regras de retrocesso: Olá, bem-vindo de volta ao Game Design Workshop rail Engine cinco procedimentos de Dungeon Action At Ps Anteriormente, criamos nossas regras personalizadas para retrocesso. Dissemos que, se não conseguirmos encontrar um adjacente, tentaremos voltar atrás Oh, temos as chaves da masmorra, o que quer que tenha sido feito Armazenamos o índice aleatório dessa matriz que obtemos das chaves e verificamos se ele é visitado na lista de locais visitados. Se estiver na lista de locais visitados, estamos saindo com quedas Se não for verdade, não há saída. Então, vamos executar isso novamente para encontrar outro possível. Agora, se não for verdade, então não está contido nos locais visitados, estamos adicionando esse local aos locais visitados. Estamos tentando encontrar uma nova saída. Se não conseguirmos encontrar uma nova saída, retornamos false e a executamos novamente. E se encontrarmos uma nova saída, armazenamos as variáveis, armazenamos as coordenadas, vamos sair e continuamos construindo a partir de um novo evento personalizado. Agora, quando estamos tentando encontrar uma nova saída, estamos verificando se os locais visitados são tantos quantos existem na lista de masmorras Então, desculpe, ao usar o comprimento desses dois mapas, e se eles forem iguais, saímos com uma mensagem que não podemos mais construir. Definimos nossos blocos máximos para os blocos atuais e executamos o construtor novamente e, e executamos o construtor desta vez, ele retornará de verdadeiro. Agora, saímos daqui sem preencher a nova saída no bloco BP. Então, vamos fazer isso. Vamos abrir nossa função new exit que criamos na interface do blueprint e vamos começar a criar algumas regras A primeira regra que devemos ter é trazer o galho. Vamos pegar as saídas possíveis e o comprimento Esse comprimento é igual a zero? Tipo, há alguma saída possível? Porque se não houver saídas possíveis, talvez devêssemos apenas flechas, antes de tudo Apenas no caso de algumas flechas estarem erradas. E então vamos voltar sem saída. Agora, caso isso não seja zero. É aqui que entra a parte interessante. Nós, interessantes, podemos ser difíceis. De qualquer forma, vamos partir do oposto. Vamos selecionar um rondo. E vamos definir a saída. Eu trouxe exit, eu a trouxe das variáveis, segurando t, trazendo aqui e liberando, o que gera um Vou conectar isso. Aqui. Agora, estamos fazendo a mesma coisa que estamos fazendo com find exit, mas com algumas mudanças. Agora, vamos adicionar direções e adicionar a direção de saída. Vamos adicioná-lo a t e vamos removê-lo novamente. Eu vou trazê-lo novamente. arrastar uma mesa daqui. Remova a saída das possíveis saídas. Da próxima vez, podemos escolher que provavelmente não haverá uma próxima vez, porque estamos definindo esse estilo para nunca mais sermos visitados por meio de nossos locais visitados. Mas de qualquer forma, não, vamos usar flechas feias, eu chamei as setas de alternância erradas Mas sim, está tudo bem. O mais correto seria fazer isso com o nó amarelo. Mas, vamos ler corretamente. Porque quando temos um nódulo amarelo, isso significa eu. O alvo é eu mesmo e, basicamente, é isso. Isso significa que você está mirando em si mesmo. Mesmo aqui está, mas por algum motivo, isso é melhor. E isso é um pino, na verdade, venho me referindo ao pino como um nó, de qualquer forma. Estamos falando de flechas e, em seguida, precisamos do nó de retorno novamente. Desta vez, encontramos uma saída. Nós desclicamos isso e conectamos a direção de saída à saída. Então, agora vamos obter algumas informações. Agora, vamos tentar executar isso. Como podemos ver. Ok. Vamos realmente ver isso acontecendo. Vamos ao nosso gráfico de eventos e vamos colocar um atraso aqui. Vamos colocar um atraso de 0,2 segundos. Sim. Isso é bom. E vamos ao nosso menu principal. Vamos tornar isso maior. Vamos fazer tamanhos de pilhas. Ok, 200 pode ser um pouco grande, mas digamos 100. Vamos ver o tamanho e seria suficiente, eu acho, dez por 10100 E se contarmos os negativos, vamos ver dez. Então, jogue. Eu já o rejeito, e podemos tentar construir nosso labirinto Construindo uma masmorra, aparece aqui com backtrack, backtrack Quando você não consegue encontrar outra, você vê quando essa forma é quadrada ou paralela, ela tenta voltar atrás. Aí está. Eu acho que isso é das últimas peças, é 100 Bem, pelo que eu posso dizer, eu coloquei no oposto. Talvez devêssemos mudar, talvez devêssemos colocar esse número neste lado. Ok, vamos para isso, vá para o nosso azulejo. Isso é do norte, deve ir do sul. Vamos executá-lo novamente. Não. Ok. Por quê? Eu acabei de mudar isso. Bem, deixa pra lá. Vamos desfazer O que está acontecendo aqui? Está correto. Eu viro a câmera. Foi minha culpa. Está correto. Ele retrocede, cria Let's Let's try and play test a bit Vamos colocar 1.000. Vamos colocar isso em 50. Vamos colocar isso em 20.1, então é um pouco mais rápido E rejeite e jogue. Ing para fora. Sim. Isso cria um nível, lentamente, mas isso acontece. Isso não vai incomodar. Queríamos incomodar um pouco. Vamos fazer com que queiramos colocar 1.000 peças, mas em um labirinto do tamanho de cinco Então isso não vai caber. Vamos ver esse exemplo. Aqui agora, ele deve dizer que em algum momento ele colocou nossa mensagem de erro. Eu não posso continuar. Ele construirá uma caixa humilde, não uma caixa, porque estamos rastreando dinheiro Ele imprimiu a mensagem. O labirinto não pode construir mais. Como eu abri isso. Eu apertei a tecla de ladrilho, aquela ao lado de uma. Então, se eu fizer isso, posso ver as últimas mensagens. Então, como você pode ver, também posso ver o que venho fazendo clicando no plano de fundo, por exemplo. Então, temos Mace que não pode deixar de. E temos essas pequenas lacunas aqui e aqui porque nosso caminho de volta para não ir. Tem alguns locais visitados, então eu optei por não fazer isso. Agora, o problema que podemos ver instantaneamente é que alguns dos blocos, alguns dos blocos, mesmo que tenham acesso a outros blocos, eles não têm a seta. E isso é por causa da forma como os labirintos foram construídos. Estamos atualizando algumas setas, mas algumas não estamos atualizando Deixe-me dar um exemplo sobre isso. Vamos jogar tinta no lixo. Agora, digamos, por exemplo, que estamos construindo uma ferramenta de pintura, estamos construindo o primeiro bloco e estamos obtendo essa saída Agora estamos construindo o segundo bloco, e estamos habilitando isso, e estamos tentando sair daqui Então, estamos construindo esse bloco. Estamos habilitando isso e tentamos sair daqui. Agora estamos ativando esse bloco. Estamos nos habilitando aqui e tentando sair daqui, o que não podemos Então, na verdade , isso significa não, se tiver uma flecha porque tentou entrar aqui. Ele não pode construir, mas encontrou algo, então há acesso a ele. Agora, vamos tentar voltar atrás a partir daqui. Estamos recuando a partir daqui, então estamos habilitando isso. Estamos tentando seguir esse caminho. Opa, então estamos habilitando isso. Agora, seguimos esse caminho e estamos habilitando isso. E nós queremos seguir esse caminho. Bem, não podemos. Então, estamos habilitando isso, mas não estamos habilitando este aqui. Então, quando isso acontece muitas vezes, como vimos, no grande labirinto que acabamos de criar Podemos ver que isso vai acontecer muito, e isso cria um padrão de que alguns deles serão assim, e alguns deles serão assim, e eles não terão o último porque o último estava vindo daqui e dizia que eles não podiam continuar ou não colocaram uma flecha. Só tentou voltar atrás. Então, vamos corrigir isso. Então, nossas flechas no labirinto estão realmente corretas. Mas isso faremos em uma segunda fase. Nossa primeira fase foi construir um valor com base nos valores que temos, porque 1005 funcionará, se o máximo de peças não for adequado, sempre criará uma coisa quadrada Então, vamos colocar algo melhor. Vamos colocar esses três e vamos colocar isso em 20. O que isso cria. Eu verifiquei novamente. Sim, algo assim deveria ser mais de primeiro nível. Tem uma coisa pequena e, em seguida, continuamos, podemos aumentar o início do tamanho principal e dos ladrilhos. Na verdade, falamos demais. Acho que esse é um bom ponto de parada, e continuaremos com isso na próxima. Adeus. 21. Como conectar a geração de azulejos após a labirinto: Olá, bem-vindo de volta ao Game Design Workshop e ao curso real de criação de RPG de ação Procedural Dungeon Five RPG de ação Anteriormente, criamos a função new exit, encontrar uma nova saída, se possível quando o gerador de labirinto solicitou no algoritmo Pack track Também demonstramos nosso labirinto no jogo. E descobrimos um problema com as setas direcionais. Então, vamos resolver isso. Vamos até o gerador de maio. Vou interromper a emulação e criar um novo evento de átomo E vou nomear esse evento como decoração, por exemplo. Bem, flechas não são decoração, mas essa seria basicamente nossa fase dois Agora, precisaremos de uma função para corrigir todas as conexões não conectadas que façam algum sentido. Sim, vamos realmente chamá-lo assim. Não conserte ninguém. Vou colocar entre parênteses, s, visibilidade. Ok, então o que vamos fazer para conseguir isso é ocupar toda a masmorra Vamos pegar todas as chaves. E, a partir de agora, os processos serão um pouco mais lentos do que executar isso Porque de agora em diante, vamos examinar toda a masmorra e adicionar algumas regras Essa não seria a melhor maneira de fazer isso, e os projetos não seriam a melhor maneira de fazer isso O Surplus plus seria muito mais eficiente para criar coisas assim Mas, para manter as regras separadas, podemos examinar a masmorra várias vezes e realizar ações específicas Agora, há outro problema em ter muitas ações em um loop. É sobre como fazer o loop para cada loop ou para a contagem de loops. Há um limite máximo que o Unreal detecta se for um loop infinito Se isso durar muito tempo, Unreal pode estar dizendo que é um loop infinito Portanto, na verdade, ele não conta os índices. Também conta, conta o índice, é claro, mas conta principalmente quantas ações estão acontecendo dentro do loop. Também existe nas configurações do projeto se encontrarmos um loop infinito. Contagem máxima de iterações de loop. Como você pode ver, o que importa são as iterações. Agora, eu posso ter mudado um pouco, mas se você encontrar um problema de loops infinitos, aumente isso para um número maior Sim, acho que esse é um número máximo. De qualquer forma, isso é uma informação extra. Não acho que precisaremos mudar isso. Acho que o número era bom, mas vamos deixá-lo aqui. Se você encontrar esse problema, também existe outra maneira nos planos de enganar o sistema, atrasando algumas ações Mas de qualquer forma, vamos continuar. Então, vamos examinar todas as coordenadas da nossa masmorra. E a partir dessas coordenadas da masmorra, vamos verificar se há vizinhos válidos, basicamente, se há adjacentes válidos, eles pertencem a uma masmorra, a próxima E se eles atacarem os vizinhos, então vamos ajudar nosso bloqueio, habilitar a direção da seta para aquele lado. Ação simples, mas há uma coisa. Na verdade, não deveríamos fazer isso na primeira peça. Mas por que não? Vamos fazer isso no primeiro bloco. Além disso. Então, o que vou fazer é obter do elemento L. Se eu não queria que isso acontecesse no primeiro bloco, desculpe. Se eu não quisesse que acontecesse na primeira peça, eu simplesmente igualaria isso a zero. Então, se esse for o primeiro índice, não faça nada. Isso é basicamente o que queríamos mostrar. Então, se for o primeiro índice, não faça nada. E podemos ter algumas regras extras se for o 24º índice, por exemplo, não faça isso Mas há outras maneiras de tornar regras como essa mais eficientes. Agora, se verificarmos nossas funções, teremos apenas um espaço vazio adjacente. O que precisamos é o oposto disso. Então, vamos criar outra função. Vamos chamá-lo de get F. D un adjacente. Não. Acho que estamos chamando essa função de nossas ordenadas. Precisa de uma coordenada porque precisamos encontrar o que está por aqui Vamos ver as entradas. Vamos selecionar um ponto de entrada como um tipo de variável. Vou citar esses pontos. Não, o que fazemos com essas coordenadas? Bem, encontramos a cruz adjacente. Nós temos esse aroma de descoberta. Então, obtemos nossa lista de rossocent. Em seguida, percorremos essa lista com um para cada look E vamos verificar se isso está contido. Na verdade, precisamos da masmorra aqui, da variável da masmorra, do mapa da masmorra E se pudermos verificar se isso contém esse endpoint. Se todos os vizinhos ou alguns dos vizinhos estiverem contidos, nesta lista. Isso significa que eles fazem parte da masmorra. Se não estiverem, então são um lugar vazio. Então, precisamos de um mapa para gerar isso. Precisamos armazenar cada variável em um mapa porque precisamos da ordenança e também da direção que conhecemos aqui, é nordeste, sul , nordeste, nordeste, nordeste, sudeste oeste Portanto, nosso raio de índice corresponde ao Nordeste Nordeste Nordeste Sudeste Oeste. Agora, vou criar uma variável local. Vamos chamá-lo de Das válido. O mundo está falando sério. Sim, tudo bem. Vai ser do tipo E. E vai ser um mapa, e a segunda chave estaria dentro. Vamos trazer isso aqui e selecionar Adicionar. Vamos fazer isso para obter o nó selecionado, porque se eu conseguir elegê-lo aqui, ele não habilitará as opções. Aqui, ele não permite que eu habilite as opções aqui. Então eu vou trazer a última saída. Na verdade, vou fazer o nosso a partir do índice e do AR vou para o eleito. Vou conectar a última saída aqui. O ativa as opções. Vou conectar isso aqui, e depois vou desconectar isso Basta adicionar opções. Vou conectar o elemento RA e ir para o noroeste. Agora nossa lista está sendo preenchida corretamente. Quando concluímos, precisamos um nó de saída para fornecer nossos resultados e fazer isso realmente. Então, vamos criar uma saída do mesmo tipo de adjacente válida. Na verdade, acho que posso fazer isso. Saída. Se eu arrastar e soltar algo aqui, mesmo se eu arrastar e soltar aros Se eu arrastar e soltar este, ele criará um nó válido para mim. Isso, eu não preciso disso. Uma saída Um pino de saída para mim. Conecte isso aqui. Compile e salve E vamos voltar à nossa correção: nenhuma conexão de conexão é visível. Vou trazer essa função aqui , que é preenchida ao lado. Vou conectar isso aqui. E a partir daqui, eu vou pegar as chaves. Eu tenho uma matriz com nordeste, sul e oeste que posso fazer um loop. E então eu vou pegar meu esfregão de masmorra. Vou encontrar o elemento atual da matriz. Desse ator, eu vou receber Actions. E adicione o elemento correspondente, conecte-o aqui e defina-o como verdadeiro. No final, basta alternar as setas, o que podemos fazer no final ou podemos fazer aqui que podemos fazer no final ou podemos fazer Isso realmente não importa. É a mesma coisa. Mas o que devemos fazer é alternar as setas. Como uma mensagem. Porque, como dissemos, esse pode ser um bloco diferente. Pode ser para nós. Agora temos um bloco BP. Pode ser qualquer ator. Se escolhermos ter a variável como ator, não faremos isso agora porque ela bagunçará o labirinto e será t como uma mensagem Agora, vamos explicar o que fizemos aqui para aqueles que não entenderam que , como estamos colocando seu campo adjacente e seguindo as direções, descobrimos que essa direção está ativada. Então, estamos obtendo as instruções que deveriam estar ativadas para o bloco atual que estamos verificando e as habilitando. Estamos dizendo a eles sobre como compilar e salvar, e vamos ver se funcionou Na verdade, ainda não ligamos, ou não funcionará. Vamos até a primeira construção e chamaremos nossas decorações, função de decoração, evento, não função e todas as nossas conexões não conectadas Agora, se eu jogar, tão longe. Podemos ver que ele criou essas cruzes. Bem, temos alguns becos sem saída que não deveriam ser becos sem saída, mas vamos resolver isso onde deveriam ser becos sem saída. Isso é o que eles queriam dizer. Como, por exemplo, aqui, porque quando estamos tentando colocar algo, estamos ativando a seta. Essa é a razão pela qual isso acontece. Isso não aconteceu em todos os lugares. Então, sim. Mas o primeiro problema foi corrigido. O primeiro problema é que coisas que estão se conectando a algo devem sempre ter uma seta. Agora, antes de prosseguirmos e consertarmos essa parte , as setas estão apontando para lugar nenhum quando ele estava verificando se poderia tocar Vamos criar a barra de carregamento. Vamos progredir e ver como fica. Então, vamos começar a carregar. Vamos selecionar o Cvas e torná-lo visível novamente. Compile e salve, e vamos ao nosso gerador de labirinto e adicionar nosso carregamento Temos nossa porcentagem definida e nossa função de carregamento de lixo, função Vamos copiar e colar esse código aqui. Nós vamos vir aqui, e vamos colocá-lo aqui. Agora, apenas colocá-lo não faz nada se não o estivermos conectando. Então, vamos conectá-lo. Isso pode ficar um pouco mais próximo e, na verdade vamos comentar algumas coisas durante todo esse passado. No campo, soletrou o labirinto. Use por arquivos. Pilhas. Comentário enorme. Não faz nenhum sentido. Você pode colocar o comentário que quiser. É assim que isso me ajuda. Os comentários são pessoais. Isso é o que eu entenderia melhor. Vamos continuar. Vamos começar a jogar. É o suficiente. Vamos compilar, salvar e jogar E podemos ver nosso carregamento, mas sendo preenchido em dois 40% quando os ladrilhos estão prontos. Vamos parar. Vamos voltar ao carregamento. Na verdade, vamos montar essa toca invisível, compilar e salvar, e continuar consertando nossos becos sem saída Então, o que precisamos é de uma função que chamaremos de becos sem saída de ventos, talvez. Corrija saídas falsas. Sim, conserte saídas falsas. Então, vamos criar uma função. Vamos chamar isso de corrigir saídas falsas. E vamos entrar nele. R, vamos precisar. Primeiro de tudo, vamos explicar o que vamos fazer. Na verdade, vamos fazer a mesma coisa que fizemos aqui. Então, vamos. Tudo isso. Como está aqui. Mas em vez de cabos, usaremos o mapa da masmorra E vamos pegar as chaves. Chaves. Vamos conectá-lo aqui, então vamos iterar em todo o mapa Eu copiei o Sim, copiei a função errada. Exclua isso, exclua isso. Copiei o campo get adjacente, mas queríamos as conexões fixas sem conexão Então, vou copiar isso, vou consertar saídas rápidas Vamos iterar todo o esterco e, em vez de obter um campo adjacente, ficaremos apenas vazios E aqui ainda não temos coordenadas. Então, o que realmente fazemos é mudar essa conexão aqui, clicar com o botão direito do mouse e encontrar referências, que nos levarão até onde a usamos. Que está aqui na seção de construção, e vamos conectar aos cabos os cabos atuais, porque isso é o que precisávamos aqui, mas quando o usamos, em saídas f fixas, precisamos dele assim Vamos conectar isso aqui. Agora, temos as chaves do vazio adjacente e, em vez de t, vamos defini-lo como falso. Se eu compilar o play, não funcionou. E o motivo é porque eu não o conectei. Então, vamos voltar para May Gen. Vamos ao VNGraf para decorar e Corrija saídas falsas. Compile e salve, e vamos lá. Meio que funciona em alguns em um, ou eu posso ver dois, pode ser mais, mas não em todos Mas esse é um problema que descobriremos no próximo. Eu vou te ver então. Adeus 22. Resolução de erros e plantas de decoração: Olá, bem-vindo de volta ao Game Design Workshop e reformule cinco cursos processuais de criação de Ps de Dungeon Actional Anteriormente, na última lição, criamos a função de visibilidade de setas de conexões fixas sem conexão que pega as teclas de toda a masmorra, como todas as nossas coordenadas Quando o campo adjacente obtém as teclas do campo adjacente e com base na direção, estamos permitindo a visibilidade das setas Agora, também criamos a função pura adjacente get fill, que usamos, que obtemos os adjacentes, verificamos quais deles pertencem à masmorra e é assim que nossa lista está sendo E agora, a última coisa que tentamos fazer foi consertar as saídas pálidas Então eu meio que descobri por que não funcionou. Se ficarmos vazios ao lado, ele só pegará aqueles que estão nos limites da masmorra Então, aqueles que estão fora da masmorra, isso realmente não os pega Portanto, não podemos verificar se há becos sem saída se eles estão no limite com essa função. O que vamos fazer é que há muitas soluções. Poderíamos criar uma protuberância aqui para controlar isso e talvez não controlá-lo Poderíamos criar uma nova função que simplesmente não tenha essa verificação, mas eu gosto de usar o que já temos. Nas saídas de Fix Falls, não obteremos o vazio adjacente Na verdade, colocaremos o campo adjacente novamente. E do campo adjacente, o que vamos fazer é basicamente muito diferente do que fizemos. Então, na verdade, não precisamos excluir muita coisa. Mas o que precisamos é do ator das coordenadas atuais. Então, vamos obter o ator das coordenadas atuais e obter suas direções. Basicamente, no ladrilho em que estamos, pegue as instruções e, a partir das instruções, pegue as chaves. Agora, não precisamos disso aqui, mas precisamos disso aqui. A partir das teclas, verificaremos se é uma direção que contém aqui. A direção que estamos verificando tem um adjacente válido? Se isso acontecer, está tudo bem. Se isso não acontecer, então nós o desligamos. Mas isso pode ser falso. Isso poderia acontecer aqui. Conecte isso aqui. Isso é um pouco confuso. Deixe-me esperar. Como podemos fazer isso parecer melhor? Poderíamos estar promovendo algumas coisas em variáveis. Eu só vou desembaraçá-lo um pouco. É um pouco mais claro do que vemos. De cada ladrilho, estamos obtendo as direções. Estamos obtendo o ator de suas coordenadas. Estamos encontrando no mapa de perigo. Estamos obtendo as direções desse ator e, de todas as direções, estamos verificando se cada direção tem uma adjacente válida. Isso é um pouco mais pesado, mas está bem. Vamos compilar e salvar o ID e conectar as setas totais, então precisamos conectar O ator que estamos verificando. A verificação do ator está em setas, conformidade é salva, e vamos verificar se desta vez funciona Parece estar funcionando. Agora, para uma verificação pura, precisa, porque o problema eram as bordas do labirinto Vamos colocar 202.000 2000 e cem, seja o que for. Um número enorme, então cria uma caixa. Então, verificamos apenas as bordas. Eles têm flechas e agora desapareceram. E agora temos uma direção mais clara com as setas para onde podemos caminhar e onde não podemos Então eu acho que é hora de começar a fazer isso parecer mais uma masmorra com paredes, com adereços, com objetivos e Então, eu vou fechar isso. Vamos devolver isso para 20. Se parece bem, acho que está bem. Podemos ter alguns quartos, podemos ter ponto de pata e ponto final Então, como vamos fazer isso? Há muitas maneiras de outros ladrilhos, existem maneiras de gerar salas dentro dos ladrilhos . Vamos demonstrar algumas maneiras. Por enquanto, o que vamos fazer é ir para o nosso bloco P. Feche essas setas. E eu vou adicionar um ator infantil aqui. U É ator, o que basicamente significa que podemos adicionar outro modelo dentro desse projeto Para nossos propósitos, ele será usado para ter um plano que tenha todas as decorações em uma e ativamos e desativamos algumas delas Em algum momento, falei sobre referências, referências rígidas e referências leves. Uma breve explicação seria que é para gerenciar dependências e uso de memória Uma referência física está apontando diretamente para o ativo ou objeto, garantindo que ela esteja sempre carregando na memória. Ele ocupará esse espaço de memória, por exemplo, vamos para o nosso nível. Vamos ao Sis Map. Podemos ver as dependências que ele sempre precisa para ser executado Isso exige que eu não tenha acrescentado muito, mas podemos, exige que a argila esteja sempre na memória, exige que a vegetação, o mecanismo de script esteja na memória com base nos ativos que usamos, referenciando nossos ladrilhos exige que a vegetação, mecanismo de script esteja na memória com base nos ativos que usamos, referenciando nossos ladrilhos Basicamente. Aqui o chão, as paredes, tudo o que é referenciado pelo labirinto e mantido em uma variável Se eu for aqui, por exemplo, e fizer disso uma referência suave ao modo de jogo. Isso significa que se eu executar esse gerador de labirinto em outro mapa que não tenha esse modo de jogo Obviamente, ele produzirá alguns erros nos locais em que o usei, mas não o carregará na memória. Portanto, todas as dependências do modo de jogo não serão carregadas na memória porque não estou chamando o modo de jogo Se eu tivesse dentro do DOA transmitido para o modo de jogo, que na verdade temos no começo, isso o negaria porque transmissão o forçaria a carregar na memória Forçará o blueprint a carregar o modo de jogo de cima para baixo na memória porque eu o estou lançando e ele o está segurando Porém, se eu não tivesse esse elenco e fosse uma referência suave, ele não o carregaria. Então, basicamente, as referências flexíveis mantêm uma referência ao ativo ou objeto sem carregá-lo imediatamente na memória até que seja chamado. Há muita otimização em fazer isso. Não faremos isso. É como dizem, quando você tiver um problema, verifique o criador de perfil. Essa é sempre a regra, crie-a e verifique os problemas. Para nós, acho que não teremos nenhum problema. Agora, vamos precisar desse ator infantil. E conterá todas as referências todos os itens de que precisamos para mantê-los em um só lugar e mostrar como os utilizamos. Uma maneira melhor seria possuir, por exemplo, quaisquer adereços acima que mostraremos também em alguns outros ativos especiais Agora, vamos criar esse ator infantil. Vamos ver o conteúdo. Vamos até os blueprints, vamos clicar com o botão direito do mouse e selecionar uma classe de blueprint e selecionar E vamos chamar isso de BP Decorations. Vamos chamá-la de decorações BP. Eu arquivo, eu vou salvar tudo, e vamos abri-lo. Agora, vou trazê-lo aqui ao lado do ladrilho. Vou encerrar isso porque, como temos uma decoração direta, será filha do azulejo Temos acesso direto um ao outro. Agora vou até o bloco BP e selecionar as decorações, decorações BP Vamos adicionar algumas paredes. Primeiro de tudo, vou adicionar algumas malhas estáticas, todas elas na verdade. Vou chamá-los de parede, digamos que parede n norte é parede para sul, depois tudo para leste e parede. W para West. E o que vou fazer é acessar script de construção e trazer cada uma dessas variáveis aqui. Enquanto mantenho o controle, estou ganhando . Só um lembrete. E eu vou fazer Ray. Armazene-os como informações em uma matriz para uso posterior. Vou promover essa variável, vou chamá-la de paredes. E vou conectar isso ao script de construção. Compilar. Agora vamos colocar algumas mensagens estáticas nas paredes. Vou selecionar todos eles. E eu vou para a nossa lista. Vou controlar e ampliar um pouco, esperar que desapareçam. OK. Nós, é isso. Combinado 67a9 67. Eu acho. Sim, parece que sim. Vamos colocá-los e espaçá-los. Oh, podemos espaçá-los. Podemos vê-los aqui. Se você tiver duas telas, isso pode ser um pouco mais fácil para você. Mas eu vou fazer isso assim . Eu vou ter isso. Isso e eu vamos movê-los para o lado correto. Digamos que esse seja o lado correto. Eu vou fixar os valores depois. Realmente é o lado correto. Esta é a parede norte, então seria como 90 graus em algum lugar aqui. Chega de posicionamento visual. Vou colocar isso de volta aqui de volta aqui e vou verificar suas coordenadas 0390 Vamos arredondar para 400. Seria bom menos e -400. Verifique Sim. Está tudo bem. Decorações, e eu vou girar essa ala para este lado, eu acho, e a localização será o oposto Vou copiar e colar a localização apenas negando formas opostas E eu vou para a parede. Cento e 100. Isso seria 100 ou cem -400. Pegue o eixo. Algo está errado. Isso deve ser o oposto de 400, 400 vias. Agora temos paredes. Agora. Ah, eu compilo e jogo Agora temos bordas, algumas paredes. Eu acho que este é um bom ponto de parada para este. Na próxima, de co, vamos limpar o caminho. Nos vemos na próxima. 23. Como posicionar paredes com base em caminhos bloqueados: Olá, bem-vindo de volta ao Game Design Workshop, curso RPC do Real Engine Five Procedural Dungeon Action Anteriormente, adicionamos o bloco de decorações em cima do nosso azulejo como ator infantil Usamos as decorações da classe BP para esse ator infantil e, na verdade, criamos primeiro as decorações BP Adicionamos algumas paredes e as adicionamos a uma matriz no script de construção. Agora, também depuramos, para ser honesto, a grande função de saída falsa que escolhemos para usar outro sistema diferente do que descrevi no início, que é só desta vez obter as direções do bloco do bloco atual que estamos verificando, obtendo das direções se há um adjacente válido nessa direção, e definimos ser falso estar na visão de flechas, e nós dobramos flechas . Agora, e para ser honesto, podemos realmente mover essas duas f, essas duas funções para cá antes de decorar. E vamos progredir na barra de carregamento também. Nosso gosto. Digamos que isso seja mais 5%, então vamos para o ponto zero. Vida. E depois vamos decorar. Como você pode ver, a partir de agora, vamos apenas estimar o que é uma ação e quanto percentual do carregamento é necessário. Depende de nós. Depende dos nossos testes. Como eu disse, existem maneiras mais complicadas de fazer isso e tê-lo como uma porcentagem, mas seriam necessários muitos cálculos e muito mais código. Agora, vamos voltar a consertar nossas decorações, nossas paredes, para ter um layout básico para nosso labirinto Para fazer isso, iremos ao nosso gerador de labirinto B. Vamos para o gráfico Even, vamos para as decorações agora que está vazio e vamos criar outra função Vamos chamar isso de layout básico. Vamos chamar essa função aqui. Vamos inserir essa função. E o que faremos é bem simples. Chamaremos cada ator para chamar cada criança de condutor para fazer alguma coisa, e essa coisa seria esconder as paredes com base nas instruções que temos aqui Então, vou renomear esse duto infantil para cors. Além disso, o que vou fazer é, como eu disse, agora que sabemos que esse ator será filho desse ator, podemos ter uma referência direta a ele, o que significa que, ao começar a jogar, vou ligar para Fork Sim. Ator. E então eu vou lançar para o BP Tile. Agora, isso cria uma dependência. Agora, essa decoração precisa ter o azulejo BP como ator principal Se isso não acontecer, não funcionará. Isso é basicamente o que são as dependências. Oh, eu vou promover isso para uma variável. Sabemos que é como não falhar no elenco. Sempre terá sucesso. E, na verdade, o que vou fazer também é criar uma dependência no bloco BP do gerador de labirinto E vou chamar esse gerador de azul, e vou ser do tipo gerador. Oh, como chamamos isso de referência de objeto maze gen Mazen BP maze Agora, por que isso realmente não importa. Como vamos gerar um ladrilho e ele será gerado por meio do gerador de labirinto, então, na memória, lançar aqui não gera muita confusão Ele converte, o que é uma carga pesada porque está solicitando a referência da classe na classe, mas já estará carregado na memória. Porque o ladrilho está surgindo antes que as decorações sejam Agora, vamos criar esse gerador, vamos fazer com que ele realmente edite a instância e exponha no Então, não precisamos escalar nem nada. Podemos simplesmente acessar nosso gerador de labirinto, acessar nosso gráfico de eventos e acessar nosso bloco de desova, que está aqui Vamos redefinir isso porque ele não é atualizado. Eu não compilei? Sim, eu não compilei. E eu vou dizer, na verdade, há um B. Agora, quando eu abri isso, ele expôs um dono. Eu poderia usar isso como eu e depois aqui no proprietário da BP. Proprietário, então eu poderia lançar isso no gerador e fazer assim. Mas eu prefiro a forma de expor na desova. De duas a quatro, vou excluí-lo sozinho. E como você pode ver agora, ele decidiu atualizar. Então, eu vou fazer isso sozinho no gerador. E agora temos uma referência direta quando se trata de patas. Só há um ladrilho que não tem, que seria o primeiro ladrilho da colher. Portanto, isso também precisa ser atualizado com célula no primeiro bloco e, em seguida, em nosso loop construído. Precisamos atualizar também o arquivo son actor P para ter o gerador como eu. Agora, vamos voltar às nossas decorações, compilar e salvar, criar outra função e chamar essa Digamos que esconda paredes. Sem essa parte extra. OK. Agora, vamos pegar nosso bloco BP, e vamos obter direções, e vamos pegar as chaves das teclas, vamos fazer um loop para cada loop Em seguida, vamos fazer uma pergunta simples. Vamos encontrar o valor de P. E perguntar, você está visível ou não? Agora, o problema surge quando temos nossas paredes e vamos examinar todas elas. E como sabemos qual parede é qual? Ok, nós temos o nome, nós os temos em uma ordem. Mas e se eu os colocasse na ordem errada? W Eu sempre tenho que verificar a ordem de cada matriz e, se elas corresponderem, Não. Existe outra maneira muito fácil. Podemos ir até cada parede e colocar um puxão, algo chamado de rebocador Então, vou pesquisar alguns detalhes para puxar e pressionar o elemento Por exemplo, vou colocar para a parede n, o rebocador N. E para a parede S. Eu vou colocar o puxão S para a parede E. Eu vou colocar o tapete e para a parede W, eu vou colocar o rebocador W. Por que eu escolhi esses nomes? Porque eles correspondem à nossa matriz de strings, basicamente à nossa, desculpe, não à matriz de strings à nossa matriz de enumeração Ah, vou verificar se esse é o que vou fazer é basicamente transformar essa enumeração Há uma string, e isso nos dá o nome do enumerador para um valor de E o que eu posso fazer é que existe um nó chamado componente em. Vou conectar isso aqui. Ele o converterá automaticamente em nome. E selecione se o componente tem o puxão correto que estamos verificando e, em seguida, defina sua visibilidade Na verdade, opera com ganho, não com a visibilidade. Porque se fizermos a visibilidade, ela será um pouco menos ideal. Mas o que temos de novo escondido seria verdade. O que também precisamos fazer é configurar sua colisão. Para nenhuma colisão. Porque então, se não fizéssemos isso, teríamos paredes invisíveis nos bloqueando. O que são tags? Basicamente, é um sistema para identificar objetos para criar um identificador para objetos menos pesados, por exemplo , escalar constantemente dois, pegar todos os atores e comparar com conseguir atores com puxão ou se algo específico tem uma etiqueta Ele pode ser adicionado aos componentes. Ele também pode ser adicionado aos padrões de classe dos atores. Você pode ver que há uma tag que conta para a tag de ator. Portanto, a questão não seria componente com tag, seria ator com tag em comparação com o que estamos verificando agora para componentes. Então, uma pequena explicação para o que fizemos novamente estamos recebendo cada lista de direção do bloco que tem as duas informações, se elas estão ativadas ou desativadas, estamos iterando a lista Em seguida, estamos percorrendo cada parede para cada iteração da lista um loop dentro de um loop é chamado Basicamente, um loop dentro de um loop é chamado de loop aninhado Então, para cada componente desse loop, passe por outra coisa e verificamos se o componente da parede tem a etiqueta da enumeração que convertemos em uma string Verdadeiro. Corrija aqui. Se tiver a etiqueta, ela existe. E se o valor for verdadeiro, porque se o valor for verdadeiro, significa que não há parede, significa que nossa seta está visível. Significa que nossa flecha está visível, estamos desligando a parede. Agora, se formos jogar, primeiro, vamos conectar essa função. Na verdade, nos conectamos, não é? Sim, nós temos. OK. Isso está vazio. Ainda não percorremos todas as nossas masmorras, então, desta vez, obteremos os valores, não as chaves Então, vamos iterar por meio de cada ator, não pelas coordenadas Vamos fazer um loop. Então, a partir de quatro ciclos, obteremos as operações, que serão as últimas. Então, a partir daqui, vamos nos esconder. Agora, precisamos escalar. Agora você vê que agora precisamos moldar, o que chamamos de decorações? PP. Você pode ver, agora eu não posso lançar duas condecorações BP. Não consigo encontrá-lo porque Decorations é um ator infantil. Ele retorna um componente de ator filho. Então, temos que contratar um ator infantil. Então, isso é um componente e é um componente do ator infantil, que lançou duas condecorações da BP Como se isso fosse a célula, e isso fosse o que estava na célula. Vou me converter em um molde puro, este, e vou esconder morcegos. Basicamente, é isso. Então, parece uma função simples. É pesado porque tem todas essas informações, precisa do ator, precisa de uma criança, da criança que precisamos escalar para pegar a decoração, e aqui dentro, também estamos fazendo muito mais coisas. Então, algo que parece estar aqui e é ótimo pode não estar no final das contas. Compile e salve, e vamos jogar. E agora temos uma área agradável. Eu acho que é isso para este. Te vejo em seguida. Adeus 24. Padrões de corredor padrão: Olá, bem-vindo de volta ao workshop de design de jogos, Real Engine five, Procedural Dangon action Na última lição, adicionamos algumas referências do gerador ao ladrilho e do ladrilho ao ator filho, que são as decorações do BP, e criamos a função hide wall, que usa essencialmente o ladrilho que são as decorações do BP, e criamos a função hide wall, que usa essencialmente o BP Ele obtém as instruções e, a partir da direção em que passa pelas teclas, descobre quais teclas estão visíveis e esconde as paredes adequadamente E também fecha a colisão. Agora, quando criamos um labirinto como esse, o que podemos notar instantaneamente é que ele é um pouco plano Não tem algumas maneiras de virar à direita e à esquerda. É uma área aberta, que, claro, poderíamos decorar com alguns quartos e alguns adereços, e ficaria bem Mas vamos criar um pouco de complexidade sobre onde o jogador pode ir e não. Para fazer isso, vamos atualizar um pouco nossa função existente de vamos parar de jogar. De conexão fixa sem conexão. Agora, o que estamos fazendo é pegar cada bloco e dizer, você bloqueia, você está amarrado a qualquer outro bloco? E se a resposta for sim, então definimos a visibilidade dessa seta como visível em direção ao outro bloco. E se pudéssemos perguntar se há outro bloco e eu apontar em sua direção, eu criaria uma flecha? Por exemplo, vamos pintar. R. Quando nossos blocos fazem essa coisa aqui com setas, eles estão procurando a próxima sala, eles estão criando o oposto, eles estão procurando a próxima sala, eles estão criando o oposto, eles estão procurando a próxima sala E, novamente, eles criam o oposto, mas agora ficamos com isso. Mas se modificarmos o código em vez de quando você tem um bloco, esse bloco basta abrir essa seta. Então, conectamos todas as setas que são os labirintos tentando descobrir se há outro bloco Por exemplo, se houvesse um quarteirão aqui e ele continuasse desse jeito e nunca tentasse seguir esse caminho, digamos que veio daqui, então temos outro bloco aqui. E então tentou seguir esse caminho. Não tentou seguir esse caminho, então não há nenhuma flecha aqui. Então, basicamente, mantemos nosso verme-cobra como padrões do mapa Então, para fazer isso, na verdade, só precisamos adicionar algumas coisas aqui. seja, quando estamos iterando pelos adjacentes disponíveis, o que faremos é apontar essa direção em nosso bloco original O bloco que estamos testando no Dungeon Mac. Mapa. Então, o que precisamos fazer é encontrar esse bloco a partir dos blocos válidos. Vou acabar com essa base de valor, o valor que estou verificando. A partir disso, vou usar a masmorra para encontrar o ator apropriado Agora, vou pegar direções opostas porque queremos que a seta oposta apareça. E eu vou me afastar novamente dos outros elementos. Essa direção oposta. Vou me conectar aqui. Na verdade, em vez de dizer que é sempre verdade, vou fazer com que seja igual ao bloco de direções. Agora, vamos esclarecer as linhas aqui porque são muitas. Faça este original, vamos nos conectar aqui. Talvez tenha mais baixo aqui também. Por aqui, precisamos de apenas um, não precisamos de dois Talvez possamos ser uma variável local, tudo isso. Adjacente. Agora, isso não é realmente necessário nas coisas aqui. Aqui. Aqui. Eu não preciso mais de linha. Eu posso quebrar. Aqui. Agora, está um pouco melhor. Poderia ficar muito melhor se promovêssemos isso tão variável e nos conectarmos a tudo. Mas acho que é legível. Primeiro, chegue um pouco mais perto. Acho que é muito mais legível possível do que pode ser agora Então, vamos ver se isso funcionou. Compilar. Vamos primeiro. Agora podemos ver que alguns lugares estão trancados. Mas a maioria dos lugares são. Temos corredores, na verdade, deve haver algum erro, porque eles deveriam estar disponíveis para acesso Dê-me um segundo para verificar isso. Sim, teta é, não estou ativando as setas da maneira correta Estou alternando as setas no primeiro bloco de verificação. Não vou alternar as setas no segundo bloco de verificação. Então, se conectar isso aqui, na verdade. Pode ser corrigido. Você terá algumas tocas. Esse motivo é a ação que estou verificando. Ah, sim, estou adicionando na mesma direção que estou verificando. Então, eu vou pegar as instruções a partir daqui. Queremos que a direção seja adicionada às direções do bloco oposto. Não aquele que estamos verificando no momento, mas aquele que está respondendo a essa verificação Portanto, essa adição tem as direções do ator adjacente ao campo. Também compile e V, funciona. A única coisa que não funciona é o primeiro bloco. Esteja na primeira peça, não estamos alternando Então, vamos fazer isso. Vamos para nossa função no primeiro bloco. E vamos arrastar essa seção. E vamos pegar as chaves. E cada um. Na verdade, podemos, não precisamos passar por todos eles. Precisamos de um loop for. Podemos simplesmente adicionar este compilar e salvar novamente. E agora é muito mais viável. Vamos verificar isso novamente. Sim, temos um belo labirinto e podemos ver que existem algumas paredes que criam um caminho Agora. A próxima parte lógica seria quando temos nosso labirinto, temos alguns horrores, alguns caminhos que, em sua maioria, podem ser bloqueados, algumas partes que não estão trancadas, a próxima coisa seria adicionar algumas regras às oito salas Porém, já que queremos que certa sala seja uma saída e que algumas salas sejam, por exemplo, um baú com a chave de saída. Seria mais sensato colocar isso em primeiro lugar no labirinto. Por exemplo, se eu criar uma sala aqui , isso limita muito onde posso colocar as chaves. Eu disse que as chaves estão nesta caixa e, repente, a sala dividirá automaticamente essas áreas um pouco melhor. Portanto, se eu espalhei blocos que não são viáveis para salas, isso deve ser versado em lógica Criando os quartos inteiros. No entanto, eles são. Seja isso que faz com que eles consigam se espaçar mais. Quando um mapa em que você tem lugares com xs não é colocado aqui, isso limita muito o local onde as salas podem ser construídas. Então é assim que vamos fazer isso. E acho que esse é um bom ponto de parada por enquanto. O que vamos fazer na próxima é criar a do elevador e a planta do baú e, em seguida, descobrir uma maneira de gerá-las É isso por enquanto. Tchau Cante para você na próxima. 25. Construção de sala e plano de elevador: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon RPG de ação Anteriormente, atualizamos nossa função para as conexões não conectadas do Pi para, em vez de procurar em cada bloco uma localização de campo válida, localização que pertence ao Labirinto, para verificar, se esse campo, realmente verificamos as localizações dos campos, mas estamos verificando agora que se essa localização do campo, nosso bloco que estamos verificando, tem uma seta em direção a ela, as conexões não conectadas do Pi para, em vez de procurar em cada bloco uma localização de campo válida, uma localização que pertence ao Labirinto, para verificar, se esse campo, realmente verificamos as localizações dos campos, mas estamos verificando agora que se essa localização do campo, nosso bloco que estamos verificando, tem uma seta em direção a ela, devemos habilite a seta oposta a esse local. Então, basicamente, vamos trazer tinta e, por exemplo, tinta amarela Neda Então, por exemplo, se nosso bloco tivesse uma seta para este lado, e digamos uma flecha, para este lado, e o bloco oposto tivesse uma flecha para este lado e para este lado, agora, nosso bloco que está indo daqui para este bloco. Essa é a verificação que está sendo feita. Diz que tenho uma flecha na sua direção. Você tem uma flecha na minha direção? Caso contrário, crie uma seta. Além disso, se não tiver uma seta e esta tiver uma seta, ela na verdade a desliga porque a definimos Adicionamos, não definimos porque o AD é um configurador de mapas se o valor existir Então, se eu não tenho uma flecha, você não tem uma flecha porque estamos obtendo a descoberta de nossas direções no bloco de verificação original. Agora, nesta, dissemos que continuaremos criando alguns blocos em todo o nosso labirinto que não conseguiremos ter quartos, como temos o bloco do elevador e o bloco da caixa, a caixa com o bloco da chave Portanto, é mais fácil dizer nas regras que, quando estamos, digamos, por exemplo, queremos que o elevador esteja nos últimos quarteirões. Então, digamos que esta seja a última caixa, coloque L aqui, última caixa, e queremos a penúltima, a terceira a última. Digamos que queremos que a caixa e o elevador, desculpe, estejam em um desses quartos. Agora, se essas salas estão sendo criadas. Se esses blocos, não salas, estiverem sendo transformados em uma sala, nosso elevador não poderá estar na sala e nosso código falhará. Portanto, seria mais fácil definir lugares que, em todo o labirinto, não criassem uma sala, porque temos regras sobre isso e deixar o resto do labirinto para poder criar salas sempre que Agora, veremos essas coisas em ação com mais clareza, eu acho. Oh, primeiro de tudo. Vamos criar as plantas que usaremos para o elevador Prateleiras das plantas. Então, vamos clicar com o botão direito do mouse em nossa pasta de plantas. Vamos escolher o modelo e vamos selecionar o ator Então, vamos nomear esse elevador da BP. Vamos entrar no elevador e adicionar uma malha estática. E vai ser Agora, isso é só para mostrar agora, então vamos colocar algo qualquer que seja. Vamos colocar uma mesa. Vamos colocar isso. Isso é grande. Queremos algo menor. Sim. Isso faremos bem por enquanto. Isso representará nosso elevador. Vou compilar e salvar, e vamos criar outro plano Conjunto AEP. Grande colete. Ok. Vamos abri-lo e vamos fazer uma malha estática. Fiz essa malha estática. Acho que temos um baú, o primeiro. Tudo bem. Por enquanto, compile e salve Mas temos algumas representações deles quando estamos criando as regras no labirinto onde construí-las. Agora, vamos continuar com nossa decoração. Criamos os blocos básicos. E já que criamos os blocos básicos, vamos aumentar também nossa barra de carregamento. Então, vou copiar e colar esse percentual c definido sem que o c carregue, na verdade. Mas vou excluí-lo depois. A partir de agora, estamos definindo um valor que queremos na pré-frase, e desta vez será 5,0 0,5 porque éramos do 0,45 com a saída fixa sem conexão e a saída fixa fs Agora, seja honesto, porque isso vai acontecer um pouco rápido. Podemos colocar alguns atrasos falsos aqui. Vamos colocar um atraso de 0,1. Então, damos a ilusão de que o computador está pensando. Agora, precisaremos de uma nova função e chamaremos essa função no elevador. E então vamos inserir essa função. Já estamos em E o que precisamos, em primeiro lugar, é nosso mapa de masmorra variável de masmorra Agora, vamos tirar as chaves disso. E para gerar nosso elevador, vamos usar o último índice Qual é a última peça colocada no labirinto. Agora, vamos obter essa cópia do último índice, então temos nossa ordenança, e vamos promover essas coordenadas para uma variável que chamaremos de localização do elevador, caso precisemos Agora, vamos pegar nossos ladrilhos especiais, os ladrilhos nos quais não queremos que nada seja construído sobre eles, e vamos adicionar essa localização de elevador a eles porque não queremos que nada mais seja construído nos ladrilhos especiais Agora, a próxima coisa que fazemos é criar um perímetro ao redor do elevador Então, nada surgirá ao redor do elevador. Então, queremos realmente adicionar o perímetro desse ladrilho aos ladrilhos especiais E para fazer isso, precisaremos de uma nova função. E vai ser puro desta vez porque só vai fazer algumas operações matemáticas. Vai ser uma espécie de cópia dos nossos blocos cruzados. Ele também receberá os painéis de visão. Então, todas as oito direções em torno de um ladrilho. Então, vamos fazer essa função. Vamos criar uma função. Vamos chamá-lo em perímetro de ladrilho único. Está correto. Eu não tenho. E vamos inserir essa função. Já estamos lá dentro. Vamos fazer com que seja um caso desde o início. E para entrada, é claro, precisaremos de um ponto t para fazer das coordenadas a verificação das coordenadas. O nome é duas portas. Agora, vamos para nossa cruz de vento adjacente. Então, vamos copiar isso. E vamos voltar à nossa função. Vamos colar isso, abaixo, e eu vou conectar os cabos aqui Agora, temos a cruz. O que precisamos basicamente é de mais, o que seria uma questão de organização no momento. Por exemplo, nós os colocaríamos no Nordeste entre o Nordeste, o Sudoeste entre o Sul e o Oeste, ou manteríamos os mesmos de antes e os adicionaríamos abaixo. Talvez eu faça isso. Mantenha-os iguais aos de antes e nos novos abaixo. Ok. Então eu vou precisar de ou mais, e vou precisar do mais um do x e do mais um do y. Então eu vou precisar mais um para o x e o menos um para o y, depois o mais um ops, pegue o mais um do y, e o menos um do x, e então os dois no menos Aqui, agora, realmente não importa qual é qual ou o que queremos fazer. Mas podemos descobrir isso. Agora não. Vamos continuar com isso. Então, temos o elevador de spawn. Adicionamos a localização do elevador e agora vamos usar essa nova função f single, mas eu não criei uma saída. Então, vamos criar uma saída. Vamos fazer disso uma matriz. Vamos chamar esse perímetro de ladrilho ps. E vamos conectar isso aqui. Vamos voltar para o elevador. Agora, vamos obter a localização do nosso elevador. Vamos fazer um loop até essas ordenadas, que são o perímetro desse E agora vamos adicioná-los ao bloco especial. Vou copiar e colar esse código daqui para cá. Vou conectar isso aqui e isso aqui. O único problema com isso seria que, se um ladrilho do perímetro não estivesse na masmorra, ele seria adicionado aos ladrilhos especiais Portanto, blocos especiais conteriam coordenadas que não estão na masmorra Poderíamos ter usado algumas regras para dizer que se peças especiais não estiverem na masmorra, faça algo a respeito, mas também podemos filtrar isso aqui para não ter isso Vou pegar o mapa da masmorra. Eu vou trazê-lo aqui. Vou perguntar se ele contém as coordenadas que estamos adicionando e, se as contém, vou usar uma ramificação para adicioná-las. Caso contrário, não os adicione. Vou compilar e salvar. E, por enquanto, para ver se está funcionando, vamos criar o elevador Então, vamos excluí-lo depois, porque vamos gerar todos os nossos adereços em um Então, agora vou gerar um ator da classe para depuração, e vamos ver o que acontecerá se ele aparecer na última, dividiremos essa transformação e vamos ver o que acontecerá se ele aparecer na última, dividiremos essa transformação. Vou obter a localização do elevador. E também vamos obter o Dungeon Mp. E no mapa do Dungeon, vamos encontrar o ator na localização do elevador, o ladrilho E a partir disso, vou conseguir a localização do ator. Vou conectar isso aqui. E para a aula, eu vou selecionar. Tor. E podemos deixar assim por enquanto. Não precisamos excluí-lo. E, na verdade, vou promover isso para um rival chamado Elevator Ok. Isso é bom. Compile e salve. Vamos jogar. E não há elevador porque não estou chamando a função. Oh, vamos chamar o elevador. Em nosso gráfico de ventilação no cortejo. Vamos começar e jogar. Temos nosso elevador, e ele está em nosso último ladrilho. Então, estamos partindo daqui, e temos nosso elevador aqui que nos levará até a próxima masmorra Acho que é uma boa parada por enquanto. Na próxima, vamos bater no peito. Tchau 26. Blueprint de chave de peito: Olá, bem-vindo ao Game Design Workshop n real engine five Procedural Dungeon Action P Z Na última aula, começamos a decorar nosso labirinto com nosso elevador E neste, continuaremos com nosso peito dizendo que deixaremos cair a chave do elevador Então, o que fizemos no elevador foi obter o mapa da masmorra Pegamos as chaves do mapa da masmorra e obtivemos o último índice porque o elevador aparecerá no Então, adicionamos esse último espaço ao ladrilho especial, nada mais apareça lá, e criamos uma função para encontrar o perímetro de um único ladrilho adicionando basicamente as oito coordenadas direcionais Então, depois, adicionamos essas coordenadas às peças especiais e filtramos se elas estão contidas na masmorra ou não, e então criamos o elevador para depuração Agora, vamos criar uma nova função para gerar o baú Mas vamos chamar essa função p est. Na verdade, não os estamos gerando, então talvez o nome não deva ser elevador de desova Deve ser criado um elevador, e isso deve ser criado por cabos. Porque, como eu disse, vamos excluir o código mais tarde do elevador, este, e vamos gerar todos os nossos adereços em outro local do algoritmo Vamos voltar a criar os núcleos para o baú. Agora, vamos voltar ao nosso Na verdade, podemos copiar e colar o código daqui. Podemos obter o mapa do Dungeon, as chaves e, na verdade, só precisamos disso Então, vou colar isso aqui. E o que precisamos é, novamente, o último índice. E vamos dividir isso em dois. Então, podemos ter metade de onde está o meio da nossa masmorra? Também poderíamos fazer estilos mac divididos por dois, e seria o mesmo. Mas essa também é uma boa maneira. Caso queiramos atualizar o labirinto posteriormente para ter algumas peças extras, por exemplo, além do corpo principal Digamos, por exemplo, que estamos criando algumas áreas secretas. Estamos gerando algumas coisas extras fora do algoritmo comum que construiu a masmorra Oh, nós vamos pegar metade deles. E vamos promover isso para uma variável local. Vamos chamar isso de índice do tesouro. E agora, por que estou promovendo esses dois índices de tesouros? É porque eu quero verificar pela metade dos ladrilhos se há um lugar para gerar nosso baú do tesouro Porque não queremos que nosso baú do tesouro apareça na primeira peça, por exemplo, nas primeiras duas, três peças Pode ser baseado em como nosso labirinto está se ramificando, e essa seria uma das omizações Mas devemos tentar que isso aconteça um pouco menos. Então, vamos verificar a metade acima do labirinto E para fazer isso, vamos usar um loop selvagem. Na verdade, deixe-me trazer tintas por um segundo. Então, o que fizemos foi, se tivermos o total de peças, nosso labirinto, na verdade, vamos usar nosso mapa de masmorras Então, obtivemos o último índice. Este último índice, e nós o dividimos por dois. Digamos que seja 20, então agora há essa dezena. Agora, definimos esse dez para ser o início do nosso índice de tesouros. Isso é dez. Vamos fazer um loop Y que verifica. Se o índice do tesouro for igual a essa metade, porque não o teremos exclusivo. Então, queremos acima da metade do labirinto, não exatamente no bloco, digamos, por exemplo, no índice que representa Então, mas como há um caso em que isso funcionará sem parar, já que loops, wi loops são um pouco, isso precisa de uma Sim. Mas os wiloops são um pouco desagradáveis, digamos eles possam congelar seu computador até concluírem a tarefa porque estão sendo executados da mesma forma que os executamos agora, no thread principal, então podem congelar completamente seu computador Então, para evitar isso, criaremos também a variável tries. E diremos que tente, por exemplo, 30 vezes. Na verdade, o que faremos é, sim, algo assim. Estilos Mac divididos basicamente por dois. Se estiver acima desse número, corte o loop y. Lá, ele não encontrou nenhum local válido. Então, vamos definir manualmente uma ação, que seria exatamente o meio Então, sim. É sobre isso que eu queria falar sobre wi loops, que eles são complicados e não devem ser realmente usados em tempo de execução Mas, para nós, esse tempo de execução não é exatamente o tempo de execução porque estamos construindo com base no carregamento. Portanto, não estamos fazendo isso no tempo de execução do jogo, o que é importante em FPS Fora. Vamos fazer isso. Vamos trazer o loop wi. Essa coisa perigosa. E vamos fazer com que a condição de que índice da medida seja igual ao último índice dividido por dois. Se isso for verdade, isso executará o loop corporal. Quando esse termo cair, ele sairá. Há também uma dica de ferramenta que explica isso um pouco melhor do que eu. Ah. No momento, não temos outras condições para adicionar quartos especiais. Isso geralmente será pela metade mais um, porque aumentaremos isso em um. Mas primeiro, vamos proteger nossas falhas. Vamos criar uma nova variável local, que será inteira novamente. Vamos citar esse preço. Vamos primeiro aumentar isso em um. E vamos fazer uma pergunta. I R tris igual ao último índice dividido por dois, porque toda vez que ele adiciona um, ele começa do zero Quando isso é verdade, significa que tem metade do nosso labirinto Então, se isso for verdade, vamos definir o índice do tesouro 20, e isso sairá do nosso loop. Agora, apenas em K, bem, para nós, serão todos os casos. Quando o trice não for igual a 50% do labirinto, obteremos nosso índice do tesouro, mais um t, e obteremos nosso mapa de Dungeon, encontraremos o ator e precisaremos do ator e das Então, eu vou pegar as chaves aqui. Vou pegar uma cópia e conectar esse mais um. E então eu vou encontrar esse ator. Não, eu vou verificar. Na verdade, me desculpe, eu não preciso que o ator verifique. Só preciso verificar as coordenadas. Se estiverem contidos nos ladrilhos especiais. Se estiver contido nos ladrilhos especiais, vou fazer nada. Se não estiver contido nos blocos especiais, vou definir nosso índice de tesouro variável tesouro. Tesouro mais um. Bem, porque estou adicionando antes da ramificação, não significa que estou configurando. É por isso que fiz isso dessa maneira para explicar isso. Quando estou adicionando algo e verificando os blocos especiais, basicamente, se são as coordenadas Então, quando estou adicionando a esse índice antes da ramificação, isso não significa que estou configurando. Estou apenas adicionando para obter um valor, um número, e estou verificando com base nesse número, algo que eu quero. E se o que eu quero não for verdade nesse caso, estou definindo esse número para o índice do tesouro. De qualquer forma, vamos continuar. Agora, esse loop y terminou de uma forma ou de outra. Se terminou com o índice do tesouro zero, precisamos saber. Vou verificar se o índice do tesouro é zero. Se for verdade, vou definir o índice do tesouro na metade do labirinto Se não for verdade, isso realmente não importa, porque significa que essa ramificação foi executada e encontrou um novo valor. A próxima coisa que farei é obter as coordenadas novamente. Eu vou sair daqui. Vou adicioná-lo aos blocos especiais. Eu vou promover esse ps. O get precisa do índice de idade. Caso contrário, ele obterá o primeiro índice zero, que seria o bloco inicial. Vou promover isso para uma variável também e chamar esse local. Agora, para depuração, vamos trazer nosso elevador telefônico ou BP do elevador de oito cabos, vamos voltar para criar o Cords vamos voltar para Em vez do elevador, vou escolher o melhor colete maior. Em vez da localização do elevador, vou colocar aqui a melhor localização. Vou deletar isso, e vou promover essa variável. Sim. Agir. Para compilar e salvar, vamos primeiro jogar E, mas eu esqueci de chamar essa função novamente. Crie o baú central após criar o elevador do núcleo. Agora, por milagre, não está funcionando novamente. Oh, não, é. Aqui está. Nós temos o baú. Está em um canto. Não importa. Está no número 11 desde 20 M. E é dez mais um. Portanto, o loop Y funcionou corretamente. Como se começássemos do zero, precisávamos ir até aqui, pegar a chave e voltar para o elevador. Vamos criar outro. Por aqui, o elevador está aqui. Sim, por onde começamos? Começamos aqui. Começamos aqui. Nós podemos ver isso. Não sabemos se as chaves estão aqui, podemos passar por aqui, podemos ir. Pelo que sei, ele cria alguns cenários de jogabilidade válidos . Estamos começando aqui. Podemos ver instantaneamente o elevador. Sim, cenários válidos por aqui. OK. Eu acho que é isso para este. Eu vou te ver na próxima. Adeus. 27. Algoritmo de construção de sala: Olá, bem-vindo ao Game Design Workshop, Procedural Dungeon da Unreal Engine Five ação Anteriormente, criamos a função criar baú de coordenadas no gerador do labirinto Usamos o mapa Dungeon. Temos o último índice das chaves. Dividimos por dois e armazenamos isso em uma variável que chamamos de índice do tesouro. Agora, criamos um loop while que verifica que embora o índice do tesouro seja igual à metade do índice , adicionamos um a uma variável trice que começa do zero e verificamos se essa variável é igual à metade do comprimento Dissemos que, se isso for verdade, significa que não podemos encontrar um índice de tesouro válido, então definimos o índice do tesouro como zero e saímos do loop Y, ou então, se não for igual, tentamos encontrar uma opção válida que não esteja nos blocos especiais Para nós, é mais um, pois não temos outras regras de empate especiais no momento. Então, quando saímos do loop, se for zero, o que significa que ele tentou encontrar um e não conseguiu, então colocamos as peças do tesouro exatamente metade do índice e, quando era falso, adicionamos o novo índice do tesouro que, quando é falso, significa que encontrou um novo índice. Adicionamos esse índice à nossa matriz especial de blocos e adicionamos as coordenadas à localização do baú. E depois, aparecemos para depurar um baú. Agora, é hora de adicionar essas chamadas salas ao nosso jogo. Portanto, temos mais variedade e mecânica mais complexa em nosso labirinto Para fazer isso. Vamos trazer a tinta primeiro e explicar algumas coisas que são necessárias para nossa lógica. Se, por exemplo, temos quatro blocos, vamos esquecer os blocos especiais. Digamos que haja quatro blocos em nosso labirinto. A primeira coisa que faremos é se estivermos verificando desta sala, por exemplo, desculpe, não desta sala. Vamos começar do canto inferior esquerdo, porque é assim que vamos verificar. Vamos começar da possibilidade inferior esquerda. E pediremos a partir desse bloco que verifique se há um ladrilho aqui, aqui ou aqui. Então, nem norte e leste. Existe um ladrilho sobre isso nessas coordenadas. Se houver um bloco, criaremos uma matriz para isso e faremos um loop Na verdade, não é muito. Pontos. Estaremos criando um ciclo de quatro com esta ordenança. De qualquer forma, dentro desse loop for, verificaremos algumas regras e, na verdade , teremos quatro loops para verificar cada regra especificamente Então, queremos exagerar em tudo de uma vez, será mais confuso se tivermos um monte de regras aqui, ramificações e tudo mais, separá-las Esse quatro loop faz isso, esse for loop faz isso, esse loop fo faz isso, então tendo tudo em um. E então, quando isso for suficiente, nós o adicionaremos a uma nova variável Agora, por que eu digo uma nova variável? Porque desta vez, usaremos uma estrutura, uma variável chamada estrutura. O que é uma estrutura? Uma explicação aproximada seria uma lista personalizada de variáveis de nossa escolha para mantê-las em uma estrutura, para mantê-las em um formato em que possamos reunir todos esses tipos de variáveis. Por exemplo, temos um bulion para asgun, por exemplo, Agan Temos um número inteiro para amo. Temos um número inteiro para mana. Temos um carro alegórico para toda a vida. Para o nosso caso, será uma estrutura feita de matrizes E exclua tudo isso, uma estrutura feita de matrizes que serão as coordenadas das salas Então, será uma matriz de 0,0, depois será 0,1, será 11, será 1,0 se y estiver aqui e aqui. De qualquer forma, não, usaremos essa estrutura para ter todas as possibilidades porque depois esta for executada para essas três coordenadas extras, essa será executada para as próximas coordenadas, e essa será executada para as próximas coordenadas, e esta será executada para as próximas coordenadas. E vai continuar até parecer que é todo o labirinto, e temos uma lista com os quartos possíveis Agora, é claro, nossos quartos serão dois a dois. E para uma quantidade maior de quartos, se escolhemos esse sistema, que não é muito ideal para salas maiores, seria como se adicionássemos coordenadas extras, como verificaríamos esse bloco também, se quiséssemos dois por três, ou se quiséssemos três por três, verificaríamos as coordenadas abaixo e abaixo. Agora, vamos fazer isso. Então, algo familiar, primeiro. Vamos criar uma função. Temos várias funções. Em algum momento, podemos categorizar nossas funções como, por exemplo, podemos colocar as puras na categoria P. Criamos a categoria de aqui, puras Agora que temos não diz puro, diz colocado. Puro. Ok, então podemos escolher todas as nossas funções puras e adicioná-las a essa categoria, por exemplo. Vamos fazer isso bem rápido. Então, estamos encontrando todas as nossas funções que dizem puras e as adicionamos à categoria pura. Então, basicamente, temos muitas funções puras no momento. Esses são nossos blocos de construção. Digamos, e essa é a nossa matemática. Agora, vamos continuar criando uma nova função, cantando o símbolo de adição aqui e chamando essa função encontrar possivelmente salas duas por duas salas. T dois por dois. Agora, essa será uma função um pouco pesada , pois terá um próximo loop for múltiplo. Então, vamos pegar as chaves da masmorra. Para cada coordenada, vamos verificar se elas são uma sala válida. Então, para fazer isso, vou criar uma variável local, e vou torná-la do tipo b. Id valid room. Só por causa disso, vamos fazer o oposto. Digamos que o quarto válido esteja ativado no início. Então, o valor padrão aqui, precisamos compilar para definir o valor padrão O valor padrão da sala válida é t. Agora, vamos trazer isso aqui, na verdade, com um setter, e eu poderia simplesmente configurá-lo aqui como verdadeiro Não preciso do valor padrão, mas pode ser do padrão em comping save E agora vamos criar uma nova variável chamada R. E ela será do tipo em ponto. E o ponto de tipo é porque são coordenadas, e será uma matriz de contêineres, e vamos trazê-lo aqui e vamos limpá-lo. A razão pela qual estamos limpando na verdade, e definindo a variável aqui como verdadeira é porque vamos verificar cada quarto, eu vou preencher essas informações Queremos que essa parte do ciclo quatro redefina as informações antes de fazermos nossas verificações Porque quando fazemos nossas verificações, quando fazemos o resto dos quatro loops, porque aqui vai nosso loop F, não haverá quatro loops para cada loop, para as coordenadas vizinhas deste, as gravações vizinhas da sala Precisamos criar essa função. Vai ser puro novamente. Então, vamos pegar , como dissemos na pintura, as próximas coordenadas x, x mais um, x e y mais um e y mais um para criar uma sala de dois por dois quartos. E então vamos fazer com que eles verifiquem algumas regras. Agora, vamos criar essa função. Mas antes de criá-lo, o que precisaremos basicamente é novamente uma parte das coordenadas finas, a fina adjacente. Então, vamos para o puro, encontre o adjacente. Eu atravesso adjacente. E vamos copiar. Vamos copiar tudo e excluir tudo o que não precisamos. Oh, nova função. Vamos chamá-lo de fazer dois por dois s. Vamos torná-lo puro e vamos colocá-lo na categoria puro. Claro, precisamos de uma saída que seja o endpoint s. Ray, é claro, novamente Agora, precisaremos de uma entrada, que seria cabos, e isso não precisa ser uma matriz É apenas um único ponto final de coordenadas ipari. E vamos colar o que obtivemos da outra função. Agora, não precisaríamos dos negativos. Precisaríamos do mais um. É x mais um. É y mais um, e é x e y mais um. Agora, precisamos que as salas originais também sejam coordenadas. Então, vamos conectar isso aqui. Vamos deletar isso e vamos conectar isso também aqui. Temos todas as coordenadas da sala, a mais uma em x, a mais uma em y e a mais uma em cada uma delas e as coordenadas originais em uma matriz, que produzimos como coordenadas da sala. Vamos voltar à nossa função, encontrar salas possíveis e trazer essa nova função pura aqui, que eu não adicionei à categoria. Agora, eu executo a função errada. Eu adiciono, faço coordenadas de duas por duas salas. Aqui estamos, e vamos passar por eles. Agora é hora das regras, das regras maravilhosas. E a primeira pergunta, claro, deveria ser: elas pertencem à masmorra Então, vamos fazer com que nossa variável de masmorra seja uma cópia colada E vou perguntar se ele contém essa informação, que é a informação de todas as coordenadas da sala. Agora, se não contiver, vamos para aquela sala válida falsa porque essa não é uma sala válida. Todas essas coordenadas não pertencem a uma sala válida, e isso significa que estamos saindo Se estiverem, devemos adicioná-los à nossa nova variável, matriz de sala de variáveis locais, em e vamos nos conectar. Se isso acionar quedas, só por uma questão de otimização, vamos mudar isso para cada loop para cada loop com intervalo O que isso significa? Isso significa que podemos superar essa contagem de corpos sempre que quisermos. Se o gatilho, vou colocar isso aqui, isso significa que ele não percorrerá todas as coordenadas Sempre que encontrar uma coordenada que não esteja dentro da masmorra, ele interromperá essa verificação Então, se multiplicarmos isso por 1.000, digamos blocos, isso realmente terá um benefício em quantas vezes nossa função é executada Agora, vamos continuar com uma pergunta simulada. É um quarto válido Se for verdade, devemos continuar com o próximo teste. Se não for verdade, então não devemos considerar todas as outras razões pelas quais temos que manter esta sala. Eu acho que este é um bom ponto de parada para este. Vamos continuar com as próximas regras na próxima. Tchau 28. Como encontrar possíveis salas de 2x2: Olá, bem-vindo de volta ao Game Design Workshop Re engine Five Procedural Dungeon Action ApS Anteriormente, criamos nossas possíveis salas duas por duas, as primeiras partes dessa função, e também criamos os cabos make two by two room, que basicamente usa os cabos que temos mais um no x mais um no y e mais um em ambos para criar os dois por dois Agora, desistimos e verificamos se eles pertencem ao mapa do Dungeon Se não o fizerem, saímos do nosso loop nested for. E se o fizerem, nós os adicionamos à matriz de salas. Como dissemos, vamos adicionar a uma estrutura que serão todas as matrizes de salas Vamos continuar com outra regra agora. Vamos continuar com a regra de que está contida em nossas salas especiais. Oh, vamos arrumar nossos quartos. Porque agora, nós os tínhamos feito dois a dois. No momento, se for verdade, nós o armazenamos na matriz da sala. Vamos ignorar novamente a ramificação verdadeira da sala válida porque, se for válida, continuamos; se não for válida, saímos e conectamos a matriz de salas Vamos trazer os azulejos especiais e especiais. Sim, azulejos especiais. Desculpe. Vamos perguntar se eles contêm um item, algum dos que temos. Vamos colocar uma filial para conseguir isso. Se estiver contido, definiremos as chamadas de drom válidas e quebraremos Se não estiver contido , tudo está bem. Não precisamos fazer nada. Este é um quarto válido. E depois perguntaremos novamente quando isso for concluído, se é válido porque, se tivermos freado, queremos sair e não ir para a próxima etapa Agora, a próxima etapa requer mais uma etapa do que colocar algum código. Requer a sala ST de que falamos, a estrutura das salas. Então, vamos ao conteúdo. Vamos para a pasta de plantas. Vamos clicar levemente e criar uma nova pasta. E vamos nomear essas pastas. E entre nessa pasta e clique com o botão direito do mouse novamente vá para as plantas e selecione a variável de estrutura Agora, vamos nomear essas salas de sublinhado ST. Sim, quartos ST. Por que não? Está tudo bem. Salas ST. Vamos compilar e salvar, e vamos adicionar uma variável, que ela já tem Será do tipo ponto de tinta. E agora será do tipo array. Vamos chamar essa sala de artes. Essa é uma forma de criar uma lista de matrizes, basicamente. Temos uma estrutura com a lista da matriz e, em seguida, criamos uma matriz com essa estrutura. Então, vamos criar uma nova variável em nosso projeto, que será do tipo S, salas, e será uma matriz, que já é E vamos chamar isso de ST mes y. Agora, vamos precisar uma variável temporária de uma estrutura Se adicionarmos um índice aqui, podemos ver que o índice é de códigos de sala que tem seus próprios elementos Então, para adicionar isso aqui, vou deletar isso agora, deve haver zero elementos. Para adicionar isso aqui, vamos criar uma nova chamada Ros Rom, na verdade. E qual seria o objetivo aqui seria This is an array. Não deveria ser uma matriz. Deve ser uma única variável. Estamos confusos. Por que estou vendo uma matriz aqui. Então, estruturas. Essa é uma variável de estrutura e tem essa matriz dentro dela. Então, basicamente, o que fizemos foi ter uma matriz de uma estrutura com matrizes, se isso fizer sentido O que precisamos fazer nessa estrutura é definir membros nas salas ST. Porque é assim que estamos alterando os dados em nossas estruturas. Não podemos, se definirmos salas, não enviarmos membros, definirmos salas acima do nodo. Há um conjunto de salas ST, e há um conjunto de membros na sala ST. Então, se eu definir a sala ST como a variável , isso significa que você altera toda a variável. Se eu definir membros , posso alterar os membros da estrutura. Por exemplo, se essa estrutura tivesse, como eu descrevi antes, uma variável de saúde, uma variável de arma, uma variável de munição, então poderíamos definir os membros então poderíamos definir os membros para decidir o que queremos desse nó aqui. Por exemplo, agora, temos as coordenadas da sala. Quero definir as coordenadas da sala de membros. Tivemos outro valor. Saúde. Por exemplo, eu poderia ter selecionado um pino com o valor de saúde e não atualizar o resto da lista. O que precisamos não é de um criador regular, é de definir membros É um nó exclusivo para estruturas. Se a sala for válida, definiremos os membros. Vamos configurar a sala que acabamos de criar, a matriz de salas para ser o membro dessa estrutura de sala. Então, o que vamos fazer é obter nossa matriz de salas ST e adicionar estrutura. Então, novamente, temos uma estrutura que tem coordenadas internas. Armazenamos essas coordenadas, que estão na forma de uma matriz. Nós os armazenamos em nossa estrutura, que tem uma matriz dentro das coordenadas, e então usamos essa estrutura para armazená-la em uma matriz desse tipo de estrutura. Espero que isso faça sentido. Agora, seria basicamente isso se deixássemos como está, mas isso criaria uma lista com todas as possibilidades. Por exemplo, vamos excluí-lo. Eu tinha um quarto aqui, um quarto aqui, um azulejo, não um quarto, um azulejo aqui, um azulejo aqui, azulejo aqui. Vamos fazer uma grade. G. Se eu estiver, precisamos de mais azulejos. Eu estou verificando este, eu estou verificando E se eu estou verificando este, eu estou verificando este. Mas esse se sobrepõe. Então, tem uma possibilidade. obtemos as coordenadas de Basicamente, obtemos as coordenadas de tudo o que está disponível para nós. Precisamos de mais algumas regras para esclarecer isso. E como temos essa estrutura maravilhosa aqui, conjunto de estruturas aqui que acabamos de criar, podemos criar outra regra antes de adicioná-las. Nós podemos perguntar. Vamos pegar essa estrutura, essa matriz de estruturas, trazê-la aqui, e vamos para ou ou cada volta com uma pausa novamente. E vamos conectar isso. Isso. Na verdade, vamos trazer essa filial para cá. E vamos perguntar, se alguma dessas coordenadas são nossas coordenadas de verificação, basicamente, se elas estão em alguma dessas coordenadas. Para fazer isso, como podemos ver, não podemos simplesmente verificar um igual a partir daqui. Vai se desconectar porque é do tipo ST. É uma estrutura. Para verificar uma estrutura, precisamos quebrar. Como fizemos, deixe-me trazer o ator. Como fizemos no ator de spa The Transform, nós o dividimos. É da mesma forma , mas ao contrário. Transformar é uma estrutura. Também podemos dividi-lo se quisermos. Mas como está em quatro voltas, podemos até mesmo em quatro voltas. Podemos dividi-lo aqui e obter diretamente a variável. Mas eu só queria mostrar o break node. Vamos recombinar. Se tivermos uma estrutura com muitos elementos, dividir nos quatro loops não seria tão visualmente bom De qualquer forma, vamos continuar com o loop de quatro. Conecte isso aqui. E vamos perguntar, na verdade, precisamos de uma pausa aqui para cada loop com intervalo. Pausa. Conecte isso aqui. Na verdade, precisamos de uma filial aqui para perguntar se ainda é um quarto válido. Porque se não for um quarto válido, devemos fazer uma pausa. Não estamos verificando algo aqui, mas se quebrarmos aqui, estaremos quebrando aqui também. Vou colocar um galho aqui e perguntar se isso está contido na sala. Vou me conectar. H. Se estiver contido, então estamos colocando o poldrum buracos e estamos quebrando É falso, estamos quebrando. Ele tenta ser executado novamente, é falso, estamos quebrando e então precisamos de outra ramificação válida. E se for falso, estamos quebrando novamente e retornando ao loop original, que começa nas próximas coordenadas. Agora, a razão pela qual adicionamos o aqui é porque essas são as coordenadas que estamos verificando aqui. E estamos verificando se algum dos quartos tem essas coordenadas. Se o fizerem, quebre, este não é um quarto válido, continue com o próximo. E agora podemos conectar isso aqui. E se tudo for verdade, se todas as nossas verificações forem verdadeiras, então estamos adicionando às salas ST. Acho que foi muita informação. Devemos fazer uma pequena pausa aqui e continuar na próxima. Tchau. 29. Função de perímetro da sala: Olá, bem-vindo ao curso de criação de RPG de ação e ação do Game Design Workshop Under Engine five Procedural Dungeon RPG de ação e ação Anteriormente, criamos que continuamos , na verdade, a descoberta possível de dois por dois quartos. Criamos a estrutura da matriz de salas. E fizemos alguns testes. Verificamos se a sala está dentro de ladrilhos especiais, se está quebrada e continuamos verificando a próxima sala. Também verificamos se nossa sala está contida em alguma das salas que já adicionamos , quebrando a estrutura que criamos por meio da matriz de salas ST, que é uma matriz que contém muitas estruturas que têm uma matriz variável de coordenadas. E então verificamos se eles estão contidos, eles contêm alguma de nossa matriz de salas de verificação. Se não o fizerem, estamos adicionando que significa que nosso quarto é válido, não pertence a nenhum outro quarto. Não pertence a nenhum ladrilho especial e está dentro da nossa masmorra Adicione as coordenadas ao nosso sistema, matriz de salas ST. Agora, o único problema com o problema. Isso não é um problema. Na verdade, é uma escolha de design pois os quartos podem ficar próximos uns Por exemplo, vamos adicionar mais alguns. Consistência amarela como meus desenhos ruins. Eles são consistentes. Consiste mal. Então, se tivéssemos uma sala nesses blocos, outra sala poderia aparecer aqui, o que eu pessoalmente não gostaria porque cria duas salas próximas uma da outra Eles podem ter uma porta, podem não ter uma, mas sempre terão uma parede se separando, que eu não gosto da possibilidade de não ter uma porta, na verdade Poderíamos criar algum código se duas salas estivessem sobrepostas, duas mudanças, talvez sempre colocassem uma porta em um lado ou em qualquer outro lado Mas acho mais divertido aprender como criar um perímetro na sala ou isso como uma variável E então podemos fazer o que quisermos para o perímetro. Por exemplo, poderíamos criar outras regras se detectarmos uma sala na qual podemos atravessar três ou quatro, criarmos um corredor entre elas ou não faremos isso Vamos ficar em nossos quartos dois por dois. Mas acho que é mais versátil conhecer os perímetros dos dois por dois ou três por três ou dois por três ou de qualquer sala que tenhamos projetado Agora, como vamos fazer isso? Vamos criar uma função. Vai ser incrível. Vamos criar uma função. Vamos chamar essa função de perímetro da sala de vento, definir perímetro da sala O que vai fazer é encontrar o perímetro da sala Ele o adicionará às salas especiais e, às salas especiais ação, às salas perimetrais da sala E precisaremos de uma nova variável. E precisaremos excluir algumas paredes. Agora, por que isso? Vamos voltar a pintar. Vamos precisar quando tivermos um quarto, as paredes que estão sendo usadas são essas paredes de blocos Então isso significa que quando temos um quarto, essas paredes, se estiverem ligadas , elas permanecem acesas. Então, temos que encontrar uma maneira de excluir essas paredes e manter as paredes da sala que queremos. Vamos fazer isso. Nova função. Vamos chamá-lo de perímetro definido Porque está configurando tudo. Nós, vamos precisar de uma entrada, que seria do tipo matriz, e seria nossa matriz de quartos. Vamos chamar essa função porque, se não a chamarmos, será uma execução. Achamos possível duas por duas salas no final, onde estamos adicionando nossa sala ST, nossa matriz de quartos à sala st, e então estamos adicionando esta sala ST às matrizes da sala STs Agora, no final, traçamos o perímetro da sala. Porque esse é o fim. Dissemos que a sala é válida, então, como é válida, seu perímetro Vou conectar nossa matriz de salas à matriz de salas aqui e voltar para nossa função. Agora, sabemos que a partir dessa matriz, a última é a mancha original. Então, se formos fazer cordões de dois por dois quartos, podemos ver que o terceiro , o último, configuramos são as coordenadas originais Então é aqui que nosso quarto começa. É aqui que tudo começa. A partir dessas coordenadas, se obtivermos o último índice, sabemos que são três. No último índice três, poderíamos ter definido apenas três. Mas caso queiramos definir as salas para serem maiores, por exemplo, quatro por quatro seria melhor obter o perímetro da sala para o último índice Como sabemos que o último índice sempre seriam nossas coordenadas de verificação originais para a sala. Porque o resto das coordenadas são as coordenadas que estamos verificando. Este é o original Oh, o que vamos fazer com isso? Por que isso é importante? Porque eu vou quebrar isso agora. Como é dois por dois, vou fazer menos um em x, e depois vou durar dois em x. Isso meio que o torna inválido para salas maiores Teríamos que alterar esse valor se fosse maior que dois por dois. Agora, qual é esse valor? Se voltarmos à nossa pintura, vamos deletar isso. Oh, desenhos maravilhosos novamente. Isso são quartos. Se for 0,0. Se eu for menos um em x, esse é o valor x, esse é o valor y. Menos um é -1,0, x, isso é y. Se eu for mais dois, seria 01, dois, será 2,0 Vou fazer o mesmo com y. Então vou pegar essa caixa aqui, essa caixa aqui, essa caixa aqui, essa caixa aqui, essa caixa aqui, essa caixa aqui, essa caixa aqui. Na verdade, porque eu estou fazendo isso em ambos, eu estou trazendo esta caixa aqui, esta caixa aqui, esta aqui e aqui. Então isso seria menos um menos um, isso seria mais dois mais dois Como vou passar por tudo isso? Vamos fazer o mesmo em y. Bem, até agora, usamos para cada loop, que exigia uma matriz Desta vez, vamos usar um loop de quatro aninhados, como um loop de quatro, novamente um quatro cada loop para loop com pausa e, novamente, um loop de quatro com break, um aninhado para dois loops aninhados ou um loop aninhado de quatro, aninhado para dois loops aninhados ou um loop aninhado ou um Então, vou conectar isso ao primeiro índice e esse último índice e esse primeiro no último índice. Então, começando de menos um x, vamos verificar o menos um y. Então, quando estamos verificando o menos um x, vamos verificar o menos um y até mais dois y. Então isso vai para o Então isso vai para Basicamente, são quatro loops aninhados , como aconteceu com o resto dos quatro loops com cada quatro loops com Agora, o que vamos verificar? Vou verificar se nosso conjunto de quartos, vamos trazê-lo. Oh, eu tenho essa variável aqui. Os quartos são cinzentos. Se eu digitar rooms ray, obterei uma referência para essa variável. Então eu não preciso arrastar um cabo. Nós conversamos sobre isso. É sobre as convenções de nomenclatura e como elas não devem ser iguais às variáveis As variáveis locais, as variáveis de entrada e saída, todas elas devem ser únicas. Oh, vou verificar se isso contém essas coordenadas, o que significa que vou quebrar isso. Vou adicionar os valores x do primeiro ou loop e os valores y do segundo. E agora eu criei um oitavo ponto com base nesse loop de dois para, quebramos Eu vou para a filial. Vou conectar isso aqui, vou colocar isso aqui. E se isso for verdade, vou criar uma nova variável local, Olim, que será do tipo eh point E vai ser uma matriz. Eu vou adicionar. Que referência, vou adicionar esses dois valores a essa matriz. Compile e salve. Então, basicamente, agora temos o perímetro dos nossos quartos. F ou loop com intervalo não foi necessário porque, na verdade, não precisamos quebrar aqui. Não há razão para quebrarmos isso. Então, vamos mudar isso para apenas um loop. Ou você pode simplesmente deixar tudo à vontade, realmente não importa. É só que ele quebra. A maneira como estou movendo os nós dessa maneira é manter o controle, apenas arrastando e selecionando E se eu segurar o controle e arrastar um pino, ele simplesmente move o cabo. Talvez isso pareça melhor. De jeito nenhum. Existe, se você é artístico e usa tabelas, existem maneiras de fazê-las parecer muito melhores. Compile e salve. E eu acho que esse é um bom ponto de parada. Temos nosso perímetro. Temos as coordenadas do nosso perímetro. O próximo ponto, a próxima coisa que devemos fazer é oito as paredes do perímetro em direção à sala Isso é algo que vou fazer na próxima vez. Adeus por enquanto. Vou te mandar na próxima. 30. Lista de salas e depuração: Olá, bem-vindo de volta ao workshop de design de jogos e ao curso de criação de RPs de ação processuais de Dungeon com cinco motores reais RPs de ação processuais de Dungeon Anteriormente, falamos sobre a criação do perímetro da sala. Então, criamos uma função. Obtivemos nossa matriz de salas no final de encontrar possíveis duas por duas salas. Quando decidimos que essa é uma sala ok para criar, adicionamos essa matriz. E como sabemos que a última opção dessa matriz é nosso bloco de verificação, criamos algumas coordenadas para verificar toda a ordenança a partir dela No final, se pertence à sala, se pertence à sala, isso é um erro. Deveria estar em quedas. Se não pertencer à sala , estamos aumentando o perímetro da sala, não se pertencer à sala Se pertencer ao quarto, não o adicione. Se não pertencer à sala, adicione-o porque, como dissemos, estamos verificando tudo ao redor da sala, todos os corredores vizinhos e também os internos Então, os internos, não, não é um perímetro, é a sala E agora vamos deletar as paredes do perímetro em direção à sala Porque eles podem ter outras bolas, então não estão na sala e não queremos excluí-las. A primeira coisa que precisamos fazer é obter o perímetro do nosso quarto. Agora, vamos colá-lo aqui e, a partir disso, vamos para cada loop. De tudo isso, vamos encontrar uma cruz adjacente. Queremos saber o que está por perto. Obviamente, vamos formar um loop a partir de cada ereção de todos os vizinhos adjacentes Agora, queremos saber qual desses vizinhos adjacentes é na verdade um quarto. O que vamos fazer é simplesmente datar aqui muitos códigos e verificar se estão contidos em uma sala e escolher mais seguidores. Mas não podemos torná-la uma função pura porque vamos usá-la um pouco mais para verificar se há uma sala ao nosso lado. Então, uma nova função, e desta vez ela será pura. Vou criar uma função. Vou chamar isso de descoberta Vamos chamá-lo de encontrar índice de quartos. Porque mais tarde, precisaremos saber se é uma sala, mas também qual sala é, já que temos uma estrutura de salas. Uma estrutura com as informações de matrizes, que contêm todas as coordenadas de cada sala Então podemos dizer, esta é a sala número um, esta é a número dois, número três, número quatro , essa matriz, vai conter nossos quartos, quantos são, e os tem numerados Agora, L, vamos continuar com o índice da sala de impressão. Obviamente, precisaremos de uma coordenada de entrada, que será um ponto final, mas uma variável de tipo único Então, precisaremos da matriz St rooms. vamos fazer loop Desta vez, vamos fazer loop with break porque há muitas coordenadas. Um lugar aqui. E vamos quebrar isso porque é uma informação da nossa estrutura. Isso nos dá que cada elemento seria uma matriz de coordenadas para uma sala. Vamos verificar se isso está de acordo com nossas ordenadas. Porque se isso contém nossas coordenadas, significa que há uma sala. Para indicar isso, usaremos uma variável local. Como essas são algumas funções, novamente, um pequeno lembrete, as variáveis locais não afetam as funções de xixi. Será do tipo pool e será uma única variável. Vamos chamá-la de quarto. Funções completas não são recomendadas. Bem, isso contraria o objetivo de adicionar variáveis de configuração externas Mas se for uma variável interna, uma função local, ela só existe aqui, na verdade não a afeta. E vamos promover isso também para uma variável local. O índice, que será o número do quarto. Se encontrarmos uma sala, vamos fazer uma pausa e agora precisamos de saída. Portanto, nossa saída seria nossa descoberta. Rom será do tipo, e vamos nos conectar aqui. E para o próximo, seria o índice da sala. Agora você vê que nomear é estranho porque eu nomeei o outro Vai ser do tipo inteiro. Eu nomeei o outro número do quarto. Eu não poderia citar esse número de quarto porque isso bagunçaria tudo. Então, vou conectar isso aqui, compilar e salvar. Agora, temos um bom índice de sala e ele nos dá se encontramos uma sala e o índice dela, e podemos continuar nosso perímetro de sala definida Então, nossas coordenadas nordeste sudoeste pertencem a uma sala? Encontre o índice da sala. Não é uma função pura. Vamos transformá-la em uma função pura e colocá-la de volta na categoria de funções puras. Vamos trazer um galho. E eu vou conectar isso aqui. Agora, encontramos um quarto. Agora precisamos dizer ao nosso ator que estamos verificando se o ator responsável por essas coordenadas está alinhado com essas coordenadas. Na verdade, o ato. É um filme para nós, mas é um ator modelo De qualquer forma. Então, precisamos encontrar o ator responsável por essas coordenadas. Então, vamos pegar nosso mapa de pontos, e nosso mapa seria nossa masmorra Mas agora temos acesso ao nosso bloco. A partir disso, vamos obter nossas paredes, eu acho, parede, como a nomeamos. Decorações BP. Vamos comprar decorações, o ator infantil, na verdade, que precisamos comprar para o ator, que então vamos escalar para as decorações P. Vamos converter isso em um elenco puro. Assim, podemos sugar todos esses lindos nós uns sobre os outros A partir disso, obteremos componentes por s. E a classe seria pic mesh component. Componente de malha Tic. Aqui está. Agora, o que isso significa? Para aqueles que são novos quando compramos, os componentes são tudo o que estamos adicionando ao plano Então, estamos obtendo todos os componentes que são do tipo malha estática, não do ladrilho BP, das decorações da BP, que seriam todas Ou agora. Mais tarde, teremos mais coisas. Ele receberá uma lista de todos esses componentes. Por exemplo, se tivéssemos uma parede e um barril, digamos aqui, e eles tivessem as mesmas regras que criaremos agora, ambos desaparecerão Agora, vamos apenas fazer as paredes desaparecerem. E o que vamos usar são as etiquetas que temos, o sistema de etiquetas de S, W e E. Então, vamos voltar ao labirinto Obtenha os componentes por classe, e vamos até um loop ou cada loop a partir deles. Conecte isso à verdade. Certo. Agora, o que vamos fazer é que o hash bug tenha um componente puxado Como fizemos na função hide walls, o puxão será determinado pelo índice da nossa matriz Na verdade, podemos usar nossas decorações em paredes ocultas, basta copiar e colar Mas agora não estamos usando as paredes, estamos usando os componentes da malha do sótão get all components Eu vou voltar para o nosso labirinto. Vou acelerar este ano. Na verdade, eu não preciso de tudo. Eu não preciso desse. Eu vou me conectar este ano, para me conectar este ano. Precisamos criar uma seleção personalizada. E temos o problema novamente. Vou trazer a última saída. Eu vou sair do índice. Vou conectar o último aqui. Vou conectar isso aqui. Na verdade, esse é o índice errado. Queremos esse índice porque esse é o índice de não e úmido. Vamos conectar isso aqui. Vou adicionar mais duas variáveis, mais 32. Eu excluo isso, e será norte sul, leste oeste. E agora vou conectar isso aqui. Eles estão conectados. Sim, está conectado. Mas agora está escondendo as paredes do nosso perímetro em direção ao nosso quarto Agora, apenas para fins de depuração, vamos demonstrar o que Vamos pegar nossa matriz de salas ST, e vamos conectar cada loop ao aqui completo do real, não aqui. Pegue as coisas daqui. Vamos voltar à nossa forma de fazer dois por dois encontrar possíveis dois por dois quartos. E aqui, vamos adicionar nossa matriz de salas ST. Vamos conectar isso aqui. E vamos fazer uma pausa. Eu vou mostrar cada grupo. E nós vamos pegar a masmorra. E vamos descobrir onde encontrar cada ladrilho e vamos obter um piso. A partir disso, vamos definir o material L, vamos selecionar um material diferente. Vamos selecionar essa base de madeira, parede de tijolos suja ou o que você quiser. Você só quer ver se funciona. Ela constrói e não cria espaço algum. Vamos torná-los um pouco maiores para verificar. Digamos que M estilize 50 em cinco tamanhos. E também verifique se eu conectei as salas de criação. No mesmo gráfico, portão, não, eu não tenho. Portanto, encontre possíveis quartos dois a dois depois de criar cordões para o baú Jogue e teremos alguns quartos. Temos alguns quartos agradáveis. Agora. A próxima coisa que precisamos é criar algumas paredes nesses quartos. E, por exemplo, coisas como essas que criam um beco sem saída nesta sala não deveriam acontecer. Então, vamos corrigir isso na próxima lição. Adeus por enquanto, señor, o próximo. 31. Como construir a estrutura da sala: Olá, bem-vindo de volta ao Game Design Workshop Andal engine five, ARPs Procedural Dungeon Action Anteriormente, concluímos nossa função de coordenadas de salas finas e também adicionamos um perímetro a elas. Como podemos ver, existem alguns erros sobre isso. exemplo, podemos criar salas próximas a outras salas e, se pressionarmos parar e acessarmos nosso dock de mensagens, veremos um erro repetido. Então, vamos analisar isso um pouco novamente e corrigir os erros desta vez. Agora, em nossa sala perimetral definida, a primeira coisa que devemos mudar é que eu criei esse perímetro da sala para inteiro local, matriz local, variável local, matriz de pontos int Isso deve ser promovido a uma variável, e vamos chamá-lo de perímetro de todos os ambientes Vou deletar isso. Vou trazer todos os perímetros dos quartos aqui. Eu vou adicionar algo a este também. Vou quebrar isso e adicionar y em y e x em x. Eu realmente não preciso fazer mais nada porque isso bagunçará o código Mas devemos ter uma variável que tenha todos os perímetros Agora, a próxima coisa que devemos fazer é verificar esse erro, esse erro de mensagem. Diz que a filial não pode acessar nenhum. acesso não é geralmente tentar acessar algo, que não tem nenhuma variável. Se você clicar em qualquer coisa, isso levará a uma macro constante. Mas isso nos diz para onde olhar. Nesta filial, na geração base, no perímetro da sala definida. Novamente, a ramificação leva à função. Mas está no perímetro da sala definida. Então, vamos ver Maze Gen e Strom perimeter. Na verdade, o que ele faz é que, em algum momento, estamos tentando encontrar no mapa da masmorra Mas quando estamos saindo do perímetro da sala, há uma chance de que o perímetro não esteja dentro da Não tem nenhum ladrilho. Então, o que vamos fazer é perguntar se o mapa da masmorra que estamos solicitando, o ator que solicitamos o ator que solicitamos por meio das coordenadas, é válido E vamos usar o segundo nó, que na verdade nos dá uma opção de ramificação Vou conectar o true to é válido ao xy e o válido ao loop anterior. Se não for válido, não nos importamos, e isso não acontecerá. O erro não acontecerá. Então, se eu apertar play agora, j. Não funciona. Se pressionar parar, nosso registro de mensagens deve estar claro, trazê-lo e está claramente projetado. Agora, o próximo problema temos é que as salas estão sendo criadas ao lado de outras salas, como se o perímetro não tivesse feito nada Isso ocorre porque eu ainda não adicionei o código. Então, vamos encontrar possíveis quartos de dois por dois. E quando estivermos verificando se há ladrilhos especiais, também verificaremos todos os perímetros da sala, faremos um contenção aqui Vamos conectar nossa matriz de salas e fazer uma extremidade, não uma extremidade, ou um bulion porque está nos ladrilhos especiais ou nos quartos Não queremos que seja um quarto válido. Se eu pressionar compilar. Vamos apertar play. Os quartos não devem ser criados ao lado um do outro. Bem, possivelmente aqui, eles não poderiam. Vamos tentar novamente. Labirinto mais sólido. Sim, mais sólido. Como podemos ver, os quartos não estão ao lado de outros quartos. Isso cria essa distância entre eles. Uma distância de ladrilho, o perímetro. Agora, uma coisa também que devemos mudar seria não alterar o material, vamos deletar isso. Mas podemos adicionar todas as salas, todas as coordenadas em uma matriz. Então, vou criar uma nova matriz, uma nova variável. Vou chamar isso de todos os tesouros de quartos. Será do tipo endpoint. E vai ser uma matriz. E vou adicionar a essa matriz, todos os cabos da sala que estamos quebrando a partir do final de encontrar possivelmente dois por dois quartos Quando finalmente saímos do loop de palavras principal, quebramos a matriz de todas as salas de teste e adicionamos todas as coordenadas que encontramos dentro das matrizes da estrutura Agora, a próxima coisa que devemos fazer é realmente construir os quartos. Então, adivinhe, vamos criar uma função novamente para construir as salas. Então, no final, vamos criar essa função. Vamos chamar isso de construir salas. Vamos ligar para isso no final. Porque quando testarmos, esquecerei de adicioná-lo aqui e vamos inserir essa função. Mas antes de entrarmos na programação, vamos explicar o que essa função deveria fazer. Então, vamos pintar para alguns desenhos incríveis. Agora, a primeira coisa que ele deve fazer é curar os ladrilhos, como se tivéssemos quatro ladrilhos. Mas, basicamente, eles precisam remodelar suas paredes para ficarem nas bordas E com base em suas flechas, isso não vai acontecer Então, o que precisamos é, na verdade preso a cada ladrilho que a sala tem, quais paredes devem estar ligadas e quais desligadas. Não, essa é a primeira coisa, a primeira coisa. Não será a primeira coisa, mas é uma das coisas que nossa função precisa fazer. Agora, a segunda coisa seria dizer que tipo de paredes assim como a segunda coisa seria, que tipo de paredes estamos colocando em nosso quarto? Porque temos uma certa quantidade de paredes, paredes diferentes. Se formos para nossas bagunças estáticas. Na verdade, se formos ao mapa geral , você também pode alterar a cor dos mapas. Agora os mapas estão vermelhos, certo? Então, se eu for para a visão geral do mapa, salvar selecionado, podemos ver que temos um, dois, três, quatro, cinco ladrilhos, conjuntos de parede diferentes. Então, com base nessas paredes, devemos ter cinco tipos diferentes de quartos. Então, isso também é algo pelo qual essa função será responsável. Mas essa é outra parte que temos. Função. Agora, por fim, adicionaremos um randomizador. Então, se tivermos nosso quarto, talvez aleatório, podemos criar uma parede aqui ou aqui. Em algum lugar da sala, podemos adicionar aleatoriamente uma parede ou não Então, criar essa parede aleatória seria a terceira coisa que essa função faz. Agora, vamos voltar ao nosso mapa. Vamos para o nível do jogo e vamos para o nosso gerador de labirinto dentro da função de quartos O que precisaremos é da matriz de salas Ray ST, e vamos fazer um loop para cada loop em todas elas. E a primeira coisa que vamos fazer é quebrar a estrutura para obter as coordenadas de sua sala. Também promoveremos o índice para uma variável que será controlada localmente. Promova a variável local, e vamos chamar isso de índice de sala. E conecte isso aqui. Porque toda vez que executamos isso for loop, estamos executando basicamente uma sala diferente. Na primeira vez em que for executado, o primeiro índice dessa estrutura de matrizes será a primeira sala A segunda vez que funcionará, será a segunda sala, e assim por diante. Então, podemos ter uma regra, por exemplo, digamos que, como temos cinco salas diferentes, as cinco primeiras sempre escolheriam uma aparência diferente. Ou para torná-lo ainda mais interessante. Digamos que os dois primeiros tenham uma aparência diferente e, em seguida, o resto deles seja do s de algum aleatório. Portanto, isso criará a ilusão de que alguns quartos são realmente especiais e outros são mais comuns Então, vamos criar outra variável local, que chamaremos de índice All. Chame isso de índice de parede. Isso será um número inteiro novamente, e não uma matriz, será uma única variável. E economize. Vamos definir esse índice de parede da sala, esse índice de parede. Então, vamos verificar se isso é maior que dois. Então, zero, um, dois, na verdade, os primeiros três quartos seriam diferentes. E então, a partir da quarta e depois, ele escolheria desfazer Ou escolheríamos o número um e ele iria para os dois primeiros quartos. Mas vamos fazer três, na verdade. Então, vou selecionar uma ramificação, vou conectá-la aqui. Eu vou conectar isso também. Portanto, se estiver acima de dois, significa que é maior do que a quantidade desejada, e colocarei o índice da parede em uma tinta aleatória no intervalo. Isso seria 0-4. E a razão pela qual são quatro é porque temos cinco conjuntos diferentes de salas. Portanto, 01234 são cinco opções diferentes. Contar a partir de zero como um número como uma entidade é um pouco difícil no começo, mas você se acostuma. Agora, se não for maior que dois , mostramos esse índice de parede Digamos, para o índice da sala. Então, sempre será índice de quarto um, quarto índice dois, quarto índice zero. R, Contando do zero, algo com o qual temos que nos acostumar. Agora, vamos ler aqui para conectar esses dois nós. Aqui. Eu acho que esse é um bom ponto de referência para esta lição. Já que teremos que fazer coisas um pouco mais complexas mais tarde, elas precisarão de um pouco mais de explicação. Adeus por enquanto, vou te mandar o próximo. Adeus. 32. Função de sala e fixação de parede: Olá, bem-vindo de volta ao Game Design Workshop rail engine procedurais de Dungeon Action Apes do Game Design Workshop rail engine five Anteriormente, corrigimos alguns problemas e alguns erros no gerador do labirinto E também explicamos algumas coisas sobre nossos quartos construídos. Começamos a função de construir salas percorrendo todas as salas com quatro e l, e então criamos uma variável para armazenar o índice, uma variável local para armazenar o índice das salas. Criamos uma regra para alterar os tipos de parede e agora acho que é hora de continuar. Agora, a primeira coisa que precisamos fazer, a primeira coisa. Uma das coisas que precisamos fazer, e vamos fazer agora, é decidir se nosso quarto terá uma parede aleatória, e onde ficaria essa parede? Na verdade, se tiver, decidiremos mais tarde, mas caso tenha, vamos decidir onde ficaria essa parede aleatória. Não, vou copiar e colar esse intervalo de números inteiros aleatórios e vou mudar a variável para três porque nossa sala é de dois em dois, então zero, um, 23 leva a quatro opções Agora, vou promover isso para uma variável local e vou chamar isso de índice de parede interno. Além disso, vou partir do intervalo de salas, como se do intervalo de salas, como nossas coordenadas de sala duas a duas, vou pegar P, e também promover isso para uma variável local, e chamar isso de Pile Corredor da parede interna. Coordenadas. Bem, isso é uma coordenada, mas podemos dizer isso pelo tipo de variável. E eu vou conectar isso aqui. Para começar, vou usar o conjunto do aleatório. Novamente, se eu tivesse me conectado aqui aleatoriamente, provavelmente seria um número diferente desse porque geraria um novo número aleatório. Então, eu queria conectá-lo a partir do conjunto ou, na verdade, trazer a variável real aqui e conectá-la dessa forma, seria a mesma de qualquer maneira Ah, agora. A próxima coisa que devemos calcular é onde estão nossas paredes com base no índice de quartos Já que essa linha aqui nos traz a sala de descanso ST, todos os nossos índices de quartos Vou aquecê-lo aqui embaixo. Nós podemos, por um loop. Para cada um deles. E sabemos que o último índice é, acho que o Noroeste, temos que verificar isso onde criamos os quartos. Agora, esta é a forma de criar coordenadas para encontrar possíveis duas por duas salas. Estamos fazendo acordes de dois por dois ambientes. Então a última é a sala de verificação, e então adicionamos uma em x, uma em y, não y. Então essa seria a sala norte. Esta seria a sala norte, a sala noroeste. Em seguida, adicionamos y. Então esse seria o Nordeste, número dois, e o número um é Como X permanece o mesmo, podemos chamá-lo de sudeste, e o valor original é o Sudoeste. É claro que, quando falo sobre sudeste, sudoeste, estou falando sobre as paredes que estarão ativas na sala. Como se o primeiro fosse oeste e sul. O acima seria oeste e norte, e continua. Se você quiser anotar, isso seria norte e leste, e isso seria sul e leste. Basicamente, precisamos dizer duas direções. Nossas instruções estão no ladrilho do ator principal, no ladrilho da BP. Quais são seus lados fechados? Direções com o W. De qualquer forma, então vamos voltar para nossos quartos construídos. Para fazer isso, como sabemos a ordem, meio que descobrimos a ordem em que elas são configuradas, podemos realmente alcançar int e ter três resultados diferentes porque é uma matriz de quatro comprimentos, quatro resultados diferentes Desculpe. E vamos remover o padrão. Agora, qual é o interruptor? Conversamos um pouco sobre enumerações É o oposto de uma seleção. Você pode ativar strings, ativar enumerações e, basicamente uma saída diferente para ser executada com base na Agora, para essas coordenadas, precisamos dos conjuntos ti. Para fazer isso, vamos pegar nossa masmorra e vamos lutar Agora, eu queria dizer algo sobre cerveja e tudo mais. Não pense que cerveja é apenas uma ação que acontece instantaneamente Essas são apenas funções prontas para nós, que examinam as variáveis e verificam se a variável é igual à variável que queremos. Não é que um nó como esse seja algo que não seja tão pesado quanto um loop for, por exemplo, que passa pelo mesmo número de variáveis. De qualquer forma, vamos continuar. É um pouco melhor. É um pouco melhor. Agora, uma vez que descobrimos isso, precisamos das direções. E precisamos adicioná-lo toda vez porque estamos falando de duas paredes. E, na verdade, precisamos copiar e colar isso. Haveria soluções mais fáceis fazer isso com uma função, mas, por enquanto, isso seria eficiente. Agora, também precisaremos deles para desligar todas as outras paredes. Vamos duplicar. Eu tenho que conectar as linhas novamente. Talvez eu tente fazer isso um pouco, leia a nota aqui, diga assim, mãe, vá assim. Parece melhor. Mova isso, mais para baixo. Nós clicamos aqui também. Nós clicamos aqui também. Estamos criando vários nós de leitura. Portanto, não há octa. Isso fez com que fosse. Modos, tarefa horrível eu diria Digamos que os primeiros sejam os que estão ativados. Há uma maneira de se mover, e as segundas serão aquelas que terão paredes. Para o primeiro set, sempre use isso para. O segundo conjunto é ligar as paredes. Então está desligado. Agora, vamos descobrir as direções. Como dissemos, o número zero é uma grande dor novamente no oeste e no norte. Portanto, o leste e o sul devem estar desligados. Oeste e norte? Não, eu semeei o oposto, não é o leste, o sudeste e o sul Vamos fazer primeiro as primeiras e depois as segundas. Agora, para o segundo bloco, o primeiro em ordem seria Norte e Leste. Esse é o segundo? Eu esqueci de novo, tenho que verificar. O primeiro é apenas mais x, então esse é o noroeste. O segundo é não em x e mais y. O segundo é o sul. Ok. O segundo é esse. Isso é dois, esse é um. Isso é três, e isso é zero. Não, desculpe. Não estou dando minhas próprias regras. Então isso é zero. Esse é um deles. Isso é três, e isso é dois. Portanto, sempre ter uma almofada externa fazendo coisas simples como essa é útil. Agora, o segundo, nós que estamos no leste ao sul, então o norte e o oeste devem estar fechados, no noroeste. O terceiro, 1 segundo, terço no número de ordem, número dois, seria Norte e Leste. Então, este é o oeste e o sul que estão no primeiro, o último seria o norte e o oeste. Então isso significa norte e leste. Aqui teremos o sudoeste número três, número dois, será o norte e o leste. E do Leste. Vamos verificar se cada linha tem todos os. Como este é norte e oeste, este é sul e leste e este é leste e sul, então é norte e oeste. Duplicata, então esteja correto. Vamos descobrir isso nos testes. Portanto, esta é a parte da nossa função que define nos ladrilhos as novas setas reais, com base no fato de serem uma sala Você vai me dizer, sim, mas onde colocamos a porta? Bem, esse é um assunto diferente porque quando fecharmos todos os nossos quartos, queremos poder navegar por toda a masmorra Então, vamos fazer isso depois. Agora, acho que isso é suficiente para esta lição. E na próxima lição, vamos tentar adicionar nossa parede interna. Tchau Nos vemos na próxima. 33. Finalizando funções de sala: Então, anteriormente, adicionamos algumas coisas à nossa função de quarto: quartos construídos, construímos quartos Então, função Bilroom. Adicionamos a variável de índice de parede interna e o ladrilho da variável de parede interna, que é um ponto de tinta. Basicamente, estamos fazendo um número inteiro aleatório para o índice e, em seguida, armazenando esse índice, as coordenadas desse índice Agora, depois, percorremos cada uma de nossas matrizes de salas, que pertence à estrutura das matrizes de salas, e definimos manualmente quais paredes devem corresponder a qual lado da matriz de salas Agora, como dissemos, a próxima coisa que devemos fazer é realmente adicionar essa parede interna ou não adicioná-la. Nem todos os quartos precisam ter uma parede interna. Para fazer isso, vamos ativar mais abaixo o int. E T por meio dessa troca de int. Como você pode ver, eu o conectei a partir da conclusão desse loop fd. O motivo é que ainda estamos dentro desse loop fd. A isso é aninhado para cada incremento do índice, basicamente para cada matriz, estamos colocando isso em switch on int e vamos adicionar três variáveis Na verdade, vamos adicionar quatro porque, digamos, por exemplo, zero, um, dois, três, estaremos mantendo variáveis para realmente colocar uma parede, e quatro seria não colocar uma parede. E como vamos fazer isso? Vamos eleger int. A, pico A, vamos para uma piscina aleatória. Então, alguns quartos terão uma parede. Portanto, os quartos não terão. Mas quando for o pico A, vamos escolher o número quatro, por exemplo, que seria não colocar uma parede. Vamos remover esse pino de execução, o padrão, porque não o queremos. E em B, na verdade, precisamos de um índice aleatório. Você não o nomeou aleatoriamente. Como o nomeamos? Índice de parede interna. Então, aqui precisamos do índice interno da parede. Ótimo. Portanto, temos B para 0123 Mas qual sala é qual, novamente, agora, precisamos fazer algo assim para definir as paredes das salas, porque então vamos pintar para mostrar que é necessário excluir. Então, temos nossos quatro corredores que são nosso quarto. E sabemos que, por enquanto, há uma parede ao redor. Talvez isso devesse ter sido um pouco mais grosso. Linha de ticker. Poderíamos escolher uma linha mais grossa. Bilhete um. Então, temos nossas paredes em torno de um novo estilo de desenho, paredes com caixas. Ah. Agora, se estivéssemos neste quarteirão aqui, poderíamos ter uma parede aqui ou aqui, ela ainda estaria disponível em toda a sala. E isso vale para cada quarteirão. Poderíamos ter os dois lados de cada ladrilho, um deles, mas podemos selecionar um dos dois lados em cada corredor Oh, como eu disse, vamos fazer um sistema como esse novamente. Vamos adicionar manualmente as variáveis. Mas temos que descobrir qual quarto é qual. E com base nisso, isso está em nossa estrutura. Na verdade, tínhamos aquele desenho anterior. Vamos pintá-lo novamente. Eu vou para que eu possa melhorar. Este é o terceiro, com certeza. Isso é zero. Isso é dois, e isso é um, e isso é dois. Acho que foi assim que fizemos. Vamos verificar novamente. Vou levar um segundo para encontrar a função. Vou às funções, encontrá-lo para construir salas, fazer dois por dois s. Isso é o que queremos porque era o puro. Zero é p um em x, um é p um em y, um é leste-sul e o segundo é um. Essa. Então, sim , está correto. Ótimo. Vamos voltar para nossas salas de construção e vir aqui para preencher o campo. Agora, como queremos que uma das duas paredes aconteça, vamos colocar quatro galhos porque é uma ou outra parede. E de acordo com essas condições, vou simplesmente conectar e formar uma bola a todas as condições No número quatro, precisamos dessa etapa porque ela não vai somar tudo. Mas depois conectaremos isso ao que vier a seguir, que na verdade é a colocação da parede. Ah. Vamos trazer alguns nós que já temos. Vamos precisar de dois para o acima, dois para o abaixo, outros dois e outros dois. Isso ficou grande, mas está tudo bem. Você só precisa espaçá-los, que fiquem um pouco mais lidos em azul. Quando seu plano se torna um pouco complexo, há muitas coisas Enfrentá-los, realmente não importa. Temos espaço infinito, rolagem infinita. Ponto. Oh, vamos pegar a masmorra que precisamos, a peça, no sorry dangon, da masmorra, a peça Então, vamos obter um mapa de masmorras e encontrar o que vamos encontrar Esse ladrilho variável de paredes internas que armazenamos aqui. Já que conhecemos o azulejo. Sabemos qual ID nos dois por dois es, qual posição nos dois por dois oitos Podemos apenas encontrar e obter seções, e agora temos que conectar as direções a todo esse anúncio Um, dois ou eles também se expandem, eles se tornam um incômodo ainda maior no projeto Vamos nos conectar ao False. Não sei se algum de vocês já tocou com editores musicais como Reason Parece muito com a conexão com a razão. De qualquer forma. Baseie-os. Agora. Vamos descobrir quais paredes precisamos. F zero, estamos no sudoeste. Na verdade, precisamos das paredes internas correspondentes. Basicamente, temos essa luz um pouco acima de nós. Mas como é um pouco confuso, eu não fiz isso e Away, vamos fazer isso de novo. Precisamos do leste e precisamos do norte, é leste ou norte, sul, desculpe. Leste e sul para o primeiro. O próximo. O próximo é aqui embaixo, então precisamos do norte e do oeste. Norte e oeste. O próximo é o número dois. Número dois, a tinta aqui está. Número dois, precisamos do oeste e do sul. 02 é este West South. Para o último, precisamos do norte e do leste. Nora, já está aqui para nós. Épico. Agora, qual seria o próximo passo? Em primeiro lugar, já que mudamos muito as informações sobre as setas Criamos nosso próprio sistema de setas. Vamos somar flechas. Vamos fazer isso. O que precisamos é de cabos de sala ST. Vamos trazê-lo de todo o w aqui e digitar cada loop. E vamos conectar tudo a mim. Basicamente, nos blocos que são salas, nos blocos que são salas, ou nossas configurações de setas estão sendo redefinidas para o que queremos Agora, também precisamos conectar esses quatro aqui, que não têm parede interna aqui, aos quatro de cada loop. Então, ele mantém tudo isso. E agora que estamos circulando com quatro voltas pelas coordenadas, vamos encontrar o ator apropriado Na verdade, podemos simplesmente copiar isso porque é disso que precisamos. Pegamos o esterco, o achado e nos conectamos de acordo com o achado E a partir daqui, vamos receber decorações. A variável está sempre na parte inferior, e vamos moldar as decorações. PPG primeiro, o médico infantil. E a partir disso, vamos obter decoração. Desculpe, vamos cortar a decoração. E vamos fazer do pó um pó puro. Novamente, mais rápido, é mais eficiente e ajuda a evitar que os acenos venham Torne-se uma torre. Agora, vamos ativar as setas em todas Alterne a mensagem de setas porque é nossa interface de diagrama Vou conectar isso aqui. Na verdade, se eu sim, eu conectei isso às decorações desta vez Acho que já aconteceu com as aulas antes. Mas agora acho que podemos testar e ver o que criamos com flechas Vamos ver algumas flechas criando salas, acho que se tudo tiver corrido bem Então, eu não tenho certeza. Possivelmente este é um quarto. Talvez não devêssemos ter removido a descozedura de trocar rapidamente um gerador de átomos Vamos ver o gráfico uniforme. Vamos rapidamente descobrir as possíveis duas a duas aqui. Temos isso em cópia, o mapa que Dungin encontrou Vou usar isso para definir o material do piso. Na verdade, ao eleger o piso para nós e também definir o material, traga um nodo. Vamos escolher a sujeira dessa vez. Compilar e salvar Vamos jogar, tirar alguma sujeira, ejetar. OK. Portanto, temos algumas salas, mas o Teams realmente não funcionou. Por que isso? Vamos descobrir o material agora, estávamos aqui. Estamos jogando flechas na companhia. As flechas não estão nas decorações É por isso que isso está enviando a mensagem, mas as decorações não têm nenhum código relacionado às setas Devemos enviar as flechas diretamente para o ladrilho, não para a decoração. Conecte as decorações. A forma como está conectado foi que eu usei, caso você esteja se perguntando. Eu costumava pressionar Alt, clicar e conectar a linha que você segmentou. Então, ao salvar a compilação, desta vez ela deve funcionar porque você está atualizando o projeto correto, não o filho da decoração Sim, aqui estamos, e também temos algumas portas que não são garantidas. Eles serão mais tarde ps. Agora, como você pode ver, as paredes dos quartos não foram atualizadas porque não atualizamos as paredes aqui. Mas as flechas estão corretas. É disso que precisamos agora. Precisamos das flechas. Com base nas setas da próxima lição, vamos mudar as paredes e, finalmente, será uma parede com uma sala com paredes e sem teto Vamos consertar tudo isso mais tarde. Adeus por enquanto, até a próxima. 34. Randomização de paredes internas: Olá, bem-vindo de volta ao workshop de design de gangues e ao curso de criação de RPG de ação processual Real Engine Five RPG de ação processual Real Anteriormente, adicionamos mais algumas coisas às nossas salas construídas. Adicionamos qual parede deveria ser colocada aleatoriamente por meio desse interruptor aqui e as variáveis que salvamos anteriormente, o ladrilho da parede interna, o índice da parede interna. Por meio dessa opção, decidimos uma aleatória, que seria colocada, ou se escolhermos o número quatro nesse int aleatório, ela não colocará nada. E também usamos a função total de setas corretamente, depois de algumas tentativas para fazer com que as flechas se comportassem como queremos, as setas dentro da sala Agora, vamos continuar fixando quais paredes devem estar levantadas e quais não devem estar levantadas. Vamos até as decorações PP e criar uma nova função, que na verdade será meio parecida com essa Poderíamos atualizar isso, mas vamos fazer um novo. Por uma questão de clareza. Vamos chamar essa função de build. Não. Deixe as paredes do quarto. Paredes da sala. E precisaremos de uma entrada porque vamos chamá-la do gerador de labirinto diretamente aqui Portanto, temos acesso direto para obter instruções a partir do bloco. Como temos acesso direto a ele, podemos alimentá-lo diretamente lá. Porém, isso poderia, já que temos nosso parentil aqui. Não vamos passar uma informação. É mais eficiente obtê-lo daqui do que as decorações reais de PP, porque temos um ladrilho de PP Oh, vamos obter instruções. Pelas instruções, vamos pegar as chaves. Como você adivinhou, vamos segurar o loop entre essas teclas ou cada loop Em seguida, vamos segurar o laço também em nossas paredes. E vamos verificar se o componente tem stug, que é o elemento da matriz das direções anteriores ou Agora, se tiver puxão, faremos, mas algo depende do valor que temos nas direções Então, vamos encontrar o valor correspondente ao elemento da matriz, que é a mãe, o host ou o loop. Esta é a nave-mãe que comanda o resto. Bem, para ser honesto, neste caso, esta é a nave-mãe que executa tudo isso tantas vezes. Mas, como você pode ver, leva apenas alguns segundos. Veremos isso na barra de carregamento. Agora, o que vamos fazer? Vamos definir a visibilidade. Na verdade, acho que estamos escondendo aqueles que estão escondidos. Vamos fazer as duas coisas. Se eles entrarem novamente. Realmente não importa. Queremos que eles sejam visíveis e também que não se escondam para ganhar dinheiro. Caso a colisão esteja desativada, também devemos definir a colisão Isso é tudo Dante e bom, mas o que colocamos aqui? Então, para visibilidade. Se isso for verdade, queremos que a visibilidade seja desligada. Então, precisamos de um t aqui. Sem touro. Então, L. Se isso for verdade novamente, queremos que seja invisível e oculto, isso acontece aqui. E se isso for verdade, o que significa que há uma passagem, quando é verdade, significa que você pode passar. Precisamos de uma seleção aqui. E precisamos conectar isso aqui, é mais fácil encontrá-lo, se não for por colisão, se for falso, física de quaran ativada por colisão Compile e salve, e é mais ou menos isso. Vamos testá-lo. Já o conectamos ao Nope, não o fizemos. Então, vou ler isso. Nós não precisamos disso. Precisamos daqui como eles o chamaram. Paredes daquele quarto. Então paredes, agora, devemos ter essas meias paredes que temos em todos os quartos. Pegue de novo. Não, nós não temos Há um problema. Vamos descobrir isso. O que poderia ser? Vamos verificar no gerador do labirinto Vamos verificar a partir daqui. Estamos executando isso, executando a instância aqui, e sua instância está definindo suas próprias variáveis. Em seguida, vamos adicionar uma parede falsa da parede de uma sala. Tudo isso deveria ser basicamente falso. Porque se for verdade, estamos de passagem. Mas ter o falso significa que temos o muro. Vamos ver se isso foi corrigido. Ah, as paredes, não o ok, temos uma parede aqui, temos uma parede aqui. Eu não esperava que as paredes reais fossem consertadas. Por que as paredes não estão acontecendo? Pergunta V. Vamos verificar. Pare com isso. Vamos voltar ao gerador do labirinto, para fazer um loop, levar o alternador de decoração até aqui, Definir paredes e decorações para cada loop são componentes operacionais. Gira o nome do enumerador. Sim. Não queremos isso exatamente. O que queremos é saltar. Queremos esse nodo. Esse nó retorna, vamos imprimir uma string para você. Aqui, vamos conectar esses dois, para que possamos corrigir isso. E compilando o jogo Agora, ele terá alguns números e nomes estranhos . Direção E. OK. Direções E, numerador um, numerador dois, numerador Agora, se ele mantiver um nome muito genérico, como você pode ver. Para ser sincero, achei que estaria retornando o número do byte Mas sim. Então esse era o problema. Feche isso, então não precisa disso. Aqui. Do elemento da matriz, precisamos de um para a string e, em seguida, essa string, nos conectamos ao puxador E ele o converte automaticamente uma variável de texto, uma variável de nome Ah. Vamos jogar isso mais uma vez. E devemos ser capazes de ver os quartos. fechadas. Sim. Eles estão completamente fechados. E acho que é hora de realmente colocar algumas paredes reais nos quartos. Ah, vamos para uma decoração e criar uma nova função. E vamos nomear essa função. Paredes. Vamos entrar nele. Já estamos dentro. Mas antes de começarmos a programar isso, precisaremos de uma nova malha de sótão aqui Isso é porque este é um quarto. Quando trocamos duas paredes, também devemos colocar um teto porque, se não tiver teto , serão apenas quatro Não é realmente um quarto, não é? Então, vamos pressionar adicionar, vamos adicionar uma malha estática. E vamos nomear esse teto. É assim que se escreve. Não tenho certeza. Outra palavra difícil de soletrar Vamos selecionar uma bagunça estática para isso. Acho que há uma malha cítica. Para o material, ele tem uma parede de pedra? Por padrão, vamos ver sua visibilidade. E defina-o como invisível. E também podemos fechar sua colisão. Então, vamos para as configurações de colisão. É claro que, mais tarde, quando estivermos construindo o jogo, mudaremos muitas configurações e tipos de colisão, tipos de objetos e tudo com que eles interagem, mas isso é mais tarde Presentes de colisão, conheça. Não queremos as predefinições de colisão. Queremos o H. Vamos colocar isso em predefinições de colisão personalizadas e definir a colisão ativada para nenhuma colisão Mas quando a tornamos visível, também devemos deixar a colisão ativada para provocar a colisão Agora, eu acho que este é um bom ponto de parada para este. Devemos preencher essa função na próxima, para que possamos explicar como nosso processo de seleção também funcionará. Adeus por enquanto, então você é o próximo. 35. Como adicionar paredes da sala: Olá, bem-vindo de volta ao Game Design Workshop e ao motor Five Procedural Dungeon Action Apes No último. Na verdade, conseguimos que eu concluísse as salas construídas. Temos mais uma coisa a fazer, e será agora. Mas vamos ver o que fizemos. Na verdade, criamos a função de paredes do set room, que é uma função dentro da decoração do VP, que pega o ladrilho principal , segue as instruções dele, olha através delas e através desse laço, olha através da matriz de paredes e verifica quais devem estar visíveis e ter a colisão Agora, vamos trocar paredes que criamos uma função, mas não concluímos Também adicionamos o teto. E nessa função, precisaremos de duas entradas. Seremos do tipo inteiro. Já está feito para mim. Você vai mudar o tipo aqui, e vamos nomear aquele. Como você chama isso? É a variável aqui, não o índice interno da parede. Porque, como dissemos, temos cinco conjuntos diferentes de paredes para os quartos, então vamos examiná-los. Sem loop, mas selecione um tipo deles. Além disso, precisaremos da segunda variável, que seria o índice da sala, mas que será usada posteriormente para escondermos e mostrarmos nossos limites quando nosso jogador se mover pelas Então, vou nomear o primeiro índice de sala e o segundo de índice de parede. E vou promover o índice de quartos para variáveis. Não importa se funciona algumas vezes. Sempre será o mesmo índice da sala. E agora precisamos fazer um loop for em toda a matriz de paredes. Um loop porque vamos manipular o componente de malha estática para definir um elemento de malha estática para eles. Não. Claro, vamos usar o pic mesh. E para a malha estática, precisamos eleger. Agora, para tornar isso um pouco mais fácil, vamos voltar ao nosso mapa geral. Nós temos tudo. E temos um, dois, três, 45, vamos fazer cinco opções. Um, dois, três, quatro, cinco. E para o wild c, queremos apenas conectar o índice da parede. Chamamos de índice W. Como estamos dentro da função, podemos fazer isso. Agora vamos arrastar os seletores aqui. Porque quando estamos selecionando um tipo de parede, ela tem basicamente três variações e uma variação de porta para cada uma delas. Oh, volte aqui. Vou adicionar mais um alfinete ou colamos juntos. Então eu vou colar. Um, dois ou cinco. Agora, para o curinga aqui, o que podemos fazer é selecionar aleatoriamente no intervalo, e seria 022 porque temos três Vou conectar isso em todos os lugares. E eu também vou. Então, por que eu abri a visão geral? É simples porque vou selecionar uma parede. Vou encontrá-lo na verdade, vou clicar com o botão direito do mouse. Existe a opção de encontrar Rose para atuar. Não me ajudou muito. Aqui está. Vou até o ativo, arrastá-lo e soltá-lo aqui. Vou para a segunda parede, clique com o botão direito, cs to asset. Eu ajudaria um pouco mais. Arraste e solte aqui, e vou repetir esse processo para cada um dos ativos. Observe que não estou selecionando as portas. Isso é de propósito. As portas serão colocadas posteriormente por meio de código em locais muito específicos. Paredes de madeira, dois ativos, ativos de rosas. Outro. É incrível como algumas ações simples podem levar muito tempo. Não me pergunte por que estou sempre fechando o navegador de conteúdo antes de acessar as plantas Parece um hábito. Eu deveria clicar diretamente nas plantas Ativo. Aí está o ativo. Aqui está. Esses 12, mais dois sets. Este 12, navega por dois ativos e arrasta e solta. Poderíamos ter armazenado em algum lugar todas essas informações, de uma matriz delas e simplesmente extraí-las de lá ou tabelas de dados, seria muito bom tê-las na tabela de dados Mas você sabe, você nem sempre tem o que quer. O trabalho se torna um pouco mais tedioso. Ativos, equação, conteúdo, na captura na pista Visão geral, ativo. Estamos quase finalmente prontos, mas mais duas paredes para assar Aqui está mais um assado. Tudo bem Não. Antes de habilitarmos os tetos, vamos ver se funciona Mas antes de tudo, vamos ao gerador Mz. Vamos até o final dos quartos construídos. Vamos selecionar as decorações e vamos chamar as paredes de troca Eu troco paredes, e vamos precisar do índice. E também precisaremos de um índice de parede. Não neste momento. O mesmo nome e convenção realmente não importavam. Índice da sala para o índice da sala e índice da parede. O motivo é porque tudo isso reside em uma classe completa diferente em um projeto diferente Portanto, isso reside nas decorações da BP, pois essa resolução reside Portanto, isso não é um problema. Na verdade, às vezes pode ser útil ter o mesmo nome, para que você saiba qual variável corresponde a quê. Onde compilar e salvar. Vamos voltar ao nosso nível de jogo de mapas. Salve tudo o que puder jogar. Agora, devemos ter paredes em nossos quartos. Sim, nós temos. Temos algumas paredes bonitas em nossos quartos. Temos uma sala de madeira, temos uma sala de pedra, temos uma sala de pedra coberta de musgo Há algumas lacunas aqui e ali, mas isso é apenas posicionamento. Se você quiser dedicar algum tempo e consertar isso, seria. Acho que, basicamente , pelo que vejo, as paredes precisam ser abaixadas um pouco e tudo ficará bem, eu sinto De qualquer forma, vamos habilitar os tetos. O que precisamos fazer é ir até as decorações do nosso vice-presidente, entrar nas paredes de troca, trocar por paredes Vamos obter nosso teto e vamos ter visibilidade T. E vamos ativar a colisão de ects Mas desta vez, vamos ter um pequeno truque. Mãe, na verdade, daqui. Queremos permitir a colisão total. Habilitaremos a consulta e nenhuma física porque não é necessário que o teto tenha nenhuma física ou física de colisão, mas queremos a consulta por causa de nossos eventos de clique Então, falando sobre os eventos de clique, agora estamos começando a entrar na área de jogo. Precisaremos de uma maneira de ligar e desligar nossos tetos quando entrarmos ou sairmos E, nesse caso, estou falando apenas de quando estamos andando dentro da sala. Eu coloco tinta exatamente no que quero dizer. Não quero dizer que enquanto eu estiver entrando aqui, estou falando sobre quando eu já lá dentro e andando de um lugar para outro, estaremos trocando ladrilhos. Então, um comando deve dizer que eu movi um ladrilho, comanul diz alguma coisa E o labirinto, a sala em si, precisa uma maneira de saber se vou sair na próxima vez, se não vou entrar, e será que o código precisará de uma maneira de saber se eu ainda estou dentro da sala e não saí Então, para isso, vamos usar uma caixa de colisão extra aqui Vamos colocar isso como caixa de colisão. Por que eu disse extra. Ainda não fizemos isso, mas precisaremos de uma caixa para a própria peça para dizer ao jogador em qual peça ela está. Assim, podemos fazer coisas quando sabemos em qual bloco elas estão. Vou aumentar isso. Queria apenas se ajustar às bordas. Eu acho que está tudo bem. Veremos na jogabilidade. Então, para quem é novo, formas de colisão em todas as formas Existem caixas de colisão, capturas de colisão, esferas de colisão até formas de colisão personalizadas que Mas as formas de colisão são basicamente usadas para determinar o que acontece quando algo está colidindo com algo, elas podem acionar a física, elas podem acionar qualquer coisa relacionada a Nós os consideramos como gatilhos, por exemplo, e à medida que você se acostuma com o motor real, você se acostuma mais com a forma como os usamos Não. Por padrão, pois nem todas as decorações serão uma sala. Vamos fazer com que essas colisões gerem eventos de sobreposição às quedas Então, isso basicamente não faz nada. E vamos até nossas paredes. E quando ativamos os tetos, também habilitaremos também habilitaremos geração de colisão que geram eventos de sobreposição até agora que geram eventos de sobreposição até agora que Agora, antes de prosseguirmos, já que fizemos muitas coisas no gerador de labirintos, vá para o gráfico par, não precisamos de todas essas funções abertas Vou mover o gráfico par à esquerda e vou fechar a guia à direita. Então, agora está claro aqui novamente. Vamos ver o que fizemos. Começamos gerando o primeiro estilo, criando o carregamento e Construímos aproximadamente a forma do nosso labirinto. Depois consertamos um pouco as flechas. Agora, vamos copiar e colar esse percentual definido. Mas precisamos aumentar um pouco o carregamento e começamos a decorar. Começamos com um layout básico dos tijolos e paredes, como deveriam ser E o que fizemos aqui foi apenas esconder as paredes que não são necessárias. E agora criamos algumas coordenadas para o elevador. Criamos algumas coordenadas para o peito. Encontramos os quartos e construímos as paredes dos quartos. Agora vamos aumentar nosso carregamento. Segundo, da última vez foi 0,5, digamos 5%. Um bom valor. Fizemos as ações, quatro delas na verdade, duas delas iguais. Então, isso seria 65%. Vamos progredindo na tela de carregamento, selecione as cavas que estão visíveis É o labirinto. E todo o resto é muito rápido. Mas até mesmo nosso gerador de labirinto seria rápido. Não tivemos esse atraso de 0,1. Então, vamos diminuir. Isso está demorando muito. Mas vamos colocar outro zero na frente de um. Vamos apertar play. Tem copos aqui, o que queremos. Tudo bem. Vamos esconder isso de novo. Agora, o que vamos fazer a seguir não é criar as portas, o que vamos fazer a seguir. Normalmente, depois de criar os quartos, dizemos que vamos criar as portas. Mas ainda não é a hora certa. Na verdade, vamos adiar o atraso aqui. Vemos o copo um pouco melhor. Não é a hora de criar as portas e a razão pela qual não é a hora. Quando estamos criando um labirinto. No momento, temos todas essas áreas. É um material cheio de bugs aqui que está acontecendo. Vamos ver o que está acontecendo na próxima. Parece que há dois materiais. Não vejo dois andares. Vamos verificar o chão, o que está acontecendo aqui. Temos extras. Por que temos? Isso não deveria estar acontecendo. O que está acontecendo? Fez o teto? Sim, eu não aumentei a altura do teto. Vamos colocar. Essa é a altura de nossas paredes, f cem, um pouco abaixo da altura máxima. Sim, era o teto. Eu entro, não vejo nada. Na verdade, eu não deveria ter voltado. Eu posso simplesmente entrar aqui e colocar T. E o chão. Agora, talvez o teto esteja um pouco baixo. Mas está tudo bem. Tudo bem Eu acho que este é um bom ponto de parada para este. Eu vou te ver na próxima. Adeus 36. Portas de sala e segmentação de labirinto: Olá, bem-vindo de volta ao Game Design Workshop e Real Engine Five Procedural Dungeon Action ApS Anteriormente, finalmente terminamos de colocar paredes e colocar quais tipos de paredes e mostrar o teto nos quartos? Como eles ficam mais certos em quartos. E, na verdade, criamos uma caixa para gerar eventos de sobreposição quando o bloco é uma sala E comecei a falar sobre as áreas segmentadas, mas fomos interrompidos pelo teto que não estava abaixado, subia, não baixava subia, não baixava Foi mantido ligado antes da posição. Agora, vamos falar sobre as áreas segmentadas das quais eu estava falando Como você pode ver, digamos, por exemplo, que temos uma sala aqui e ela está conectada apenas a essa área. Esta área é isolada em comparação com as outras áreas, enquanto esta área está sendo conectada por três salas. Esta área foi conectada por dois quartos. Esta área está conectando dois quartos novamente. E essa área aqui é apenas uma única área com dois blocos, e essa é uma área com um bloco conectado a um quarto. Então, e se tivéssemos uma maneira de categorizar essas áreas? Basicamente, o que faremos é que qualquer área que conecte mais de uma sala, consideraremos um corredor Se ele conecta dois quartos ou três quartos, é um corredor. Se uma área é única e se conecta a uma sala, então é uma sala especial, sala escondida, algo assim. E a outra categoria que podemos ter é que se uma área tem dois ou três corredores e está conectada a uma sala Podemos considerá-lo uma varanda ou uma borda ou algo parecido, que também é uma área maior que dois ou três quarteirões e se conecta a um quarto. Podemos considerá-la uma área especial. Como vamos fazer isso? Bem, acho que todos vocês sabem a resposta. Vamos criar uma função. Então, vamos parar de jogar. Vou fechar essas funções. Não preciso mais deles. E vamos criar essa nova função. Vamos chamar essa função aumentada. Essas são as áreas de ortografia Mas acho que escrevi as áreas corretamente e encontrei. Não, eu não fiz. Eu adicionei um símbolo divisor O que faremos aqui? Precisamos explicar. Essa será uma grande função novamente. Na verdade, vamos abrir a pintura. Eu vou ser um pouco mais fácil. Vamos considerar que temos nossa massa. Essa correção aqui fez toda a diferença. Agora, neste labirinto, temos alguns quartos E então temos algumas paredes que separam as áreas Faça-os maiores. Aqui, aqui, vamos sair e talvez aqui ou aqui. Isso é um ect. Agora, como dissemos, vamos separar algumas áreas em corredores Vamos representar esse cinza. Então, basicamente, isso seria um corredor. E isso seria um corredor porque conecta dois quartos. Agora, a laranja seria a área secreta e a azul seria uma varanda. E a roxa seria uma área especial porque se conecta apenas a uma sala e é maior do que duas ou três caixas. Digamos que três. Ah. Como vamos fazer isso? Neste momento, nosso labirinto, nossa masmorra, terá algumas paredes erguidas Oh, o que vamos fazer é usar essas paredes. Digamos que vamos pegar, por exemplo, uma área aleatória. Nós vamos pegar esse. A Polar não é a melhor. Redondo. Vamos começar daqui, por exemplo, e vamos para o traçado de linha, o que é traçado de linha? Uma técnica usada para detectar objetos ao longo de uma linha na palavra do jogo, basicamente. Envolve projetar uma linha invisível ou visível se a depurarmos do ponto de partida ao fim e verificarmos se há colisões com objetos no caminho Isso seria uma explicação aproximada. Então, o que vamos fazer é desenhar um traçado de linha a partir do nosso ponto. Sem palavras, nossos vizinhos cruzados. Acho que ou algo parecido. Então, o que vamos pesquisar é quais dos vizinhos estão diretamente conectados a mim. Eles não têm parede entre eles, eles não têm espaço entre Na verdade, é a única coisa que nos importa. Então, quando fizermos isso, vamos adicioná-los em uma lista. Mas esse vizinho está bem, esse vizinho está bem, esse não está, esse não é porque aqui batemos em uma parede, e aqui também batemos em uma parede, que é o fandangon externo Agora, com essa lista, vamos repetir o processo e brincar um pouco com as variáveis, adicioná-las e removê-las das listas para criar quais áreas estão conectadas e com quantas salas elas se conectam Porque essa pode não ser uma área vazia, mas é uma sala, então precisamos diferenciar isso Não. Basicamente, essa é a teoria por trás disso sobre o que faremos. Possivelmente usaremos duas vezes a frase de linha, uma vez para uma primeira verificação, uma segunda vez para uma segunda verificação, mas explicaremos enquanto estivermos criando uma longa. Então, vamos começar. Vamos mostrar essa jogabilidade. E vamos voltar ao nosso gerador M nas áreas segmentadas finas Agora, é claro, novamente, vamos usar as coordenadas da masmorra e vamos pegar as chaves Desta vez, vamos promovê-los em uma variável local. Vamos chamar essa variável de chaves de masmorra. Porque talvez precisemos deles ao longo do caminho e arrastando cabos Vai ser complicado, pois essa função será enorme e incluirá outras funções nela Agora, a partir dessas teclas dngon, obteremos P. Então, vamos começar com nosso primeiro índice, que seria o Índice zero, e começar a verificar a partir daí Vou promover isso, uma variável chamada Study, uma variável local. E conecte isso aqui. Oh, esse será o ponto de partida do estudo. Esse é o primeiro set. Temos que começar em algum lugar. Por que não começar do começo? Vamos verificar a quantos blocos ele está conectado e como está se conectando? Ah. O que vamos fazer também é criar uma variável local de matriz temporária. Nós vamos chamá-lo. Ray, O. Eu não gosto que isso vá para mim, Cardy Cords. Vamos chamar essas coordenadas de estudo de uma. Oh, eu vou trazer isso, deve ser uma matriz, e deve ser um ponto final É muito irritante quando você está promovendo algo para uma variável local Ele não fica na memória porque eles criaram outro contador de variáveis antes do qual queremos que você use. Isso aconteceu um pouco de cocaína, eu acho. Como estamos, vamos usar essa matriz de estudo para adicionar o ponto de estudo. Como essa seria a primeira matriz, estaríamos sentindo e depois testaremos em outra matriz. Basicamente, sentiremos essa matriz agora, desde que os traços de linha, por exemplo, não batam nas paredes, na verdade, vamos voltar um pouco à pintura. A forma como realmente funcionará será: vamos escolher uma nova cor, vamos escolher o vermelho brilhante. Sim, é porque estamos começando do estudo e vamos verificar os vizinhos. Então esse será um deles. Esse será o outro deles. Isso será mais um, e esse será mais um. Esses dois aqui, este e este, serão adicionados à lista porque estão corretos. Em seguida, verificaremos, a partir desta lista, onde este e este se conectam. Então, eles basicamente se conectam a isso, isso e isso, e vamos transferir cada lista uma para a outra e testar e testar novamente até que ela não possa mais adicionar, e essas duas listas sejam iguais, e quando forem iguais, passamos para a próxima parte Oh, vamos continuar. Agora, precisamos testar os dois primeiros vizinhos. Vamos estudar, estudar arável. Vamos encontrar bs adjacentes e vamos ignorar isso A razão pela qual adicionamos o estudo antes de fazer isso é porque queremos incluir o estudo em qualquer que seja nosso resultado, porque se você não adicioná-lo, agora vamos começar a procurar vizinhos. Não vamos voltar para o primeiro. Então, nós o adicionamos antes de iniciarmos todo esse procedimento. Os vizinhos pertencem à masmorra? Então, vamos fazer um mapa de contenção. E, claro, o mapa seria nossa masmorra. E assim por diante, e vamos branquear e conectar isso aqui Agora vamos trazer nosso traçado de linha. O traçado de linha, por canal. O que significa “canal”? Agora, temos a visibilidade do canal e a câmera. Este é um canal de colisão. Isso significa que, quando acessamos as decorações, por exemplo, e selecionamos a caixa, quando acessamos as colisões e abrimos as predefinições, podemos ver a dinâmica da palavra do tipo de objeto E então podemos ver as respostas a esse tipo de objeto. Isso, mas esse tipo de objeto, mas como essa colisão responde ao resto dos tipos de objetos Tipos de objetos como visibilidade, objetos como câmera, tipos de objetos como palavra estática. Tudo depende das configurações aqui? Falaremos sobre isso um pouco mais detalhadamente mais tarde, quando estivermos fazendo o jogo, quais colisões serão muito importantes sobre rastros e tudo No momento, vamos usar apenas canal da câmera porque visibilidade será usada em nossa jogabilidade. E como algumas coisas serão desativadas na colisão de visibilidade , usaremos câmera que sempre estará ligada, como se ela interagisse com qualquer linha de traço que esteja atingindo durante a visibilidade, fecharemos algumas delas Agora, vamos continuar. Vamos até nosso gerador de labirinto. Vamos escolher a câmera de linha base e precisamos de um início e um fim neste nó. Então, para começar, o que vamos fazer é que precisamos ter as coordenadas. Precisamos encontrar o ator na masmorra. Vamos enrolar, e vamos conectar isso aqui e obter a patente do ator. À localização desse ator, vamos adicionar o eixo A Z, então fica um pouco mais longe do chão Vamos colocar isso 25. É um pouco mais alto que o chão, e agora precisamos de um fim. Nesse caso, porque o próximo arqueamento será diferente. Nesse caso, nosso fim será nosso estudo. Porque estamos desenhando a partir dos vizinhos a partir dos vizinhos descubra que essas são as coordenadas de um vizinho. Este não é nosso estudo. Então, estamos começando pelo vizinho e terminando em nosso bloco de estudos. Então, eu vou encontrar novamente, vou copiar isso. Conecte isso, conecte isso, e eu vou catiar, vou copiar e colar a altura, conectar essa esfera, e então conectar essa esfera até o final, e temos um traçado de linha Agora, se eu escrevesse o tipo de bug, essa opção aqui, que nos mostra uma linha, e eu a torno persistente e realmente chamo essa função aqui. Áreas segmentadas após o carregamento. Temos que carregar, então sim, jogue, devemos ver essa linha aparecendo aqui. Agora, este tem apenas um vizinho válido, então ele lança uma linha Ele tenta jogá-lo do começo, do vizinho ao começo. E, como podemos ver aqui, aqui que ele encontrou um sucesso. Isso nos diz que esse bloco tem uma parede. Então, nesse caso, não o adicionaríamos à lista. Agora, acho que esse é um bom ponto de parada para esta lição. Mais tarde, continuaremos com a lógica e um pouco com nossos resultados de aquecimento externo, que é a forma como obtemos os dados que acabamos de obter, e também o valor de retorno, que é se eles realmente aqueceram ou não. Isso é mais do que aqueceu. Mais explicações sobre a próxima. Adeus por enquanto. 37. Como segmentar as áreas de calabouço: Olá, e bem-vindo de volta ao workshop de design de jogos e ao verdadeiro curso de criação de RPG de ação procedural Engine Five Anteriormente. Começamos com nossa função de áreas de segmento fino, que dividirá nosso labirinto com base em algumas regras, os corredores de conexão, basicamente, a diferentes tipos de Teremos, como dissemos corredores, teremos varandas Fora, teremos alguns tipos diferentes de áreas. Então, começamos a fazer isso adicionando nosso mapa de masmorra, obtendo nossas chaves de mapa de masmorras e promovendo-as a uma variável partir disso, obtivemos o primeiro índice porque decidimos que esse é um bom lugar para começar e o adicionamos à matriz de coordenadas do estudo Também promovemos isso para uma variável, que será a primeira do loop da qual obteremos os vizinhos. Sobre os vizinhos, e quando vamos adicioná-los, será o Study Cords E, como dissemos, vamos dar uma olhada e fazer alguns truques para verificar toda a área. Agora, a maneira como pesquisamos sobre esses ladrilhos que estão nessa área divididos por salas por paredes é criando uma linha traseira que projetamos do vizinho em direção ao nosso ladrilho de estudo. E isso nos dirá se atingiu alguma coisa ou não. Conforme descrevemos, quando usamos o desenho persistente, o tipo de bolsa persistente. Podemos ver em nosso primeiro estilo, mas preciso localizar o estilo zero. Ok acho que na mesma época em que Zero se tornou um quarto. Possível. Antes do Não. Obstáculos. Estou um pouco cego. Este bloco zero se conecta a este e a este com um traçado de linha. Eu não tinha uma parede dessa vez. Vou criá-lo muito rápido. Eu queria ter uma parede, e ela tem duas paredes. Então, estamos partindo do vizinho e esta é a nossa linha deba, que fica verde quando atinge alguma coisa Quando pegamos essa caixinha e ela fica verde, significa que aqueceu alguma coisa e a caixa é o indicador. Agora, falamos sobre isso quando usamos algumas regras com base no resultado do chapéu e no valor de retorno. Basicamente, vamos usar o valor de retorno , ou seja, atingiu alguma coisa ou não? Vou pressionar B, conectar isso aqui e aqui, se esquentar alguma coisa, não fazemos nada. Não queremos isso em nossas coordenadas, na de coordenadas. Nós vamos trazer isso aqui. Pressione e eu vou conectá-lo ao falso porque se não odiamos algo, significa que está na mesma área, e eu vou conectar isso ao elemento da matriz. Agora, quero dizer algumas coisas sobre o resultado do aquecimento externo. Se quebrarmos isso porque é uma estrutura, se passarmos o mouse sobre ela, podemos ver a estrutura resultante do calor Podemos ver que tem algumas informações. Na verdade, tem muitas informações, não poucas informações. Como ator térmico, ele tem a localização do calor, o ponto de impacto exato do impacto. Tem a distância da nossa largada até o calor, o tempo que levou do início da linha até a corrida, aqueceu alguma coisa. E o início e o fim, é claro, tem muita informação. Essa é uma estrutura muito boa usar até mesmo para depurar coisas, como se você tivesse um sistema de depuração, lançasse um traçado de linha e quisesse testar alguma de usar até mesmo para depurar coisas, como se você tivesse um sistema de depuração, lançasse um traçado de linha e quisesse testar alguma coisa. Esse é um ótimo ponto de partida para criar um sistema de depuração por vários motivos De qualquer forma, eu só queria mostrar basicamente que existe isso, isso é uma estrutura. Tem tantas variáveis que pode nos fornecer. Agora, vamos continuar com nosso algoritmo. Como eu disse, precisaremos de um novo conjunto de cordões de estudo para que possamos comparar cada um deles. Se tivermos arquivado todas as coordenadas possíveis da determinada área que estamos verificando. Vou criar uma nova variável. Eu vou ser do tipo point. Esteja aqui. Vou nomear o ds Essa convenção de nomenclatura não é a melhor, mas nós fazemos por enquanto Oh, nosso próximo passo é promover nossos Study Cords one, two cords two Vou conectar isso aqui. O que precisamos fazer é semelhante a isso. Vou copiar e colar isso. Nós estamos aqui. E o que precisamos primeiro, outro para loop. Essa aposta porque queremos analisar cada um que encontramos, como vimos aqui, houve casos em que estávamos adicionando um, estávamos adicionando dois ou pode haver casos em que estamos adicionando quatro locais. Queremos passar por todos esses locais e, em seguida, para cada um deles, verificar os vizinhos. Precisamos desse loop extra de quatro, e isso se torna uma bagunça quatro Isso se torna. De qualquer forma. Agora, precisamos mudar um pouco as regras. Obviamente, precisamos começar e terminar da mesma forma, desde o vizinho até o estudo atual. E o estudo atual é aquele em que estamos obtendo o resultado desses quatro ciclos aqui. Vou conectar um pouco esse ponto. Não. Como eu disse, precisamos de algumas regras extras, e a regra extra seria se o Estudo 1 contém algum dos vizinhos que estamos verificando? Porque se estiver contendo, não devemos adicioná-lo novamente. Então, eu vou perguntar se um estudo contém m Isso aqui. A para trazê-lo aqui. Talvez aqui nós vamos conversar. Deixe um pouco claro que as linhas estão conectadas. Um. Sim, é espaguete. É sempre um pouco de espaguete. Você pode passar mais tempo e torná-lo mais visível, mais claro para os olhos. Mas acho que se entendermos a lógica do que estamos fazendo , será mais fácil. Agora, eu vou precisar de outra condição aqui, não uma condição, um nó, que será o m. Nós o usamos antes, o que significa que se um é dois. Na verdade, não queremos o aqui. Queremos ser, se estiver na masmorra, continue. Na verdade, precisamos de uma segunda filial aqui, para abrir espaço. Então, a segunda ramificação seria se ela já pertencesse às coordenadas, não faça nada. Queremos a pulsação desta. Eu vou medir o pulso aqui. Vou desconectar esse pulso e conectar isso porque, a partir disso, queremos fazer essa pergunta aqui Está tudo bem. Essas coisas pagearam. De qualquer forma, vamos manter as coordenadas do estudo uma pois eles avaliam que estamos adicionando algo E quando toda essa operação terminar, vamos verificar Se o comprimento de nossos cordões diurnos um for igual aos cordões de estudo dois. Agora, por que fazemos isso? Porque, se aqui, adicionamos algo a essa lista, e os dois de Ady Cords não estavam completos Adicionamos algumas peças novas. Não, vamos fazer isso. Pegue um rancho e pergunte: o comprimento de nossas coordenadas Ady de dois comprimentos é igual ao comprimento de um dos cordões de estudo Oh, se não for igual, vamos fazer isso um ou dois. Não tem nada nele. E o que realmente vamos fazer é o mesmo loop. Vamos adicionar os Cords um, deixando nos Cords two. Em seguida, verificaremos se podemos adicionar algo ao de coordenadas. E se adicionarmos alguma coisa , ela será repetida repetidamente até que termine Eu acho que esse é um bom ponto para este. Eu vou te ver na próxima. Adeus. 38. Finalizando a mecânica de segmentação: Olá, bem-vindo de volta ao workshop de design de jogos, Real Engine five Procedural Danson Action Na última lição, continuamos com nossa função de áreas segmentadas finas Criamos os Study Cords two Variable, quais promovemos nossos Study Cords E então nós, para todos os nossos Cordões de Estudo, um. Você verifica todas as áreas que adicionamos. Agora, verificamos essas áreas nordeste, oeste e sul, em todos os vizinhos, e perguntamos se ela pertence à masmorra ou se já está contida no Estudo Um Depois, fizemos nosso sistema de linhas de rastreamento verificar se batemos em uma parede ou não. E se não o fizermos, adicionamos esses cabos ao Estudo Um. Quando o quatro loop, o primeiro loop, termina, que significa que ele completou todas as coordenadas do estudo um, estamos verificando se nossas coordenadas do estudo dois são iguais ao estudo um, porque antes de fazermos essa ação para adicionar coisas novas, promovemos as coordenadas do estudo para as coordenadas do estudo dois Agora, se isso foi quando isso era falso, não é verdade. Foi minha culpa. Limpamos o Estudo dois e o redefinimos para ser igual ao Estudo um. Em seguida, tentamos adicionar novamente para estudar uma nova coordenada e, se não houver nenhuma nova para adicionar, continuaremos agora com a parte verdadeira, que é quando o Estudo dois é igual ao Estudo um, e isso significa que não tem mais coordenadas. A primeira coisa que precisamos é criar outra estrutura como a matriz de salas ST, que conterá as coordenadas de nossas áreas segmentadas Mas como será do mesmo tipo de estrutura, será apenas uma estrutura que tem uma matriz de coordenadas, uma matriz de pontos finais. Podemos usar a mesma estrutura. Assim, posso simplesmente ultrapassar o conjunto de salas ST e chamá-lo de ST em todas as áreas. E serão do tipo variável salas ST, que podemos renomear, que podemos renomear, mas vamos deixar como salas ST, que são, como dissemos, uma matriz de coordenadas Vou trazer isso aqui e vou pressionar adicionar. Agora, vou conectá-lo ao. Vamos falar sobre esse nodo aqui . Isso precisa de uma estrutura. Antes de criarmos uma estrutura, dissemos que podemos realmente dividi-la e adicionar as coordenadas aqui. Agora, vamos fazer isso. Vamos apenas dividi-la e adicioná-la dessa forma porque funciona, mas é melhor começar a criar uma estrutura e adicionar membros a ela se você é novato em estruturas. Se você tem experiência com isso e sabe quando as estruturas estão funcionando, você pode fazer isso quando necessário. O motivo pelo qual estou dizendo é porque as estruturas podem criar problemas. Por exemplo, se eu mudar algumas coisas na estrutura , precisaremos reconectar muitos nós como esse Porque quando eu o divido aqui, ele nem sempre atualiza as variáveis. eu recombinar, temos a estrutura, e se eu adicionar algo à estrutura, vou para a variável da estrutura e adiciono mais algumas variáveis a ela, e isso pode ter um problema Vou dividi-lo e vou trazer uma para nossas coordenadas de estudo E vou conectá-lo aqui porque os cordões de estudo um e os cordões de estudo dois agora são iguais Mas isso criará uma lista basicamente de nossas áreas segmentadas, como aconteceu com os quartos Agora, a próxima coisa que vou fazer é limpar as coordenadas de estudo E agora precisamos continuar verificando o resto das áreas. Porque, como fizemos agora, partimos do bloco de estudo zero e verificamos quantos blocos estão conectados ao bloco de estudo zero. Primeiro, verificamos se eles estão conectados, verificamos se havia mais. Vamos jogar se tivermos um exemplo. Em S, mapeou todo o estudo, uma, todas as coordenadas de zero pontos que não estão conectados e que não estão bloqueados por salas, paredes ou salas Não, precisamos fazer isso pelo resto do labirinto. Para fazer isso, na verdade, vamos refazer tudo isso aqui Mas primeiro, precisamos criar um verificador. Ainda tenho mais lugares para estudar? Porque se todos os lugares estiverem mapeados, essa coisa deve parar funcionar. Ok, vamos criar isso. A primeira coisa que precisamos é das chaves da masmorra, e vamos abrir cada uma delas. Na verdade, porque isso é uma regra que queremos verificar se vamos executar isso novamente ou não. Isso seria e deveria ser ou com intervalo. Porque vamos seguir a mesma lógica aqui. Vamos usar uma variável. Vou criá-lo no local, vai ser do tipo b, não vai ser um R, vai ser único. Vamos chamar isso de pertença. Se pertence, então a onde pertence? Se pertencer às regras que criaremos. E cada verificação que estamos fazendo pertence às chaves da masmorra, então isso significa que terminamos Isso significa que verificamos todas as áreas. Se não pertencer, se algum cheque daqui não pertencer a nenhuma de nossas regras , isso significa que temos que executá-lo novamente, ou o elemento c A, a determinada ordenança. Não, vou conectar o que pertence aqui e vou deixar que seja configurado para quedas, e vou deixar que seja configurado para porque quando começamos a verificar todas as variáveis, é aqui que queremos que cada variável esteja desativada. Vamos precisar de outro ou cada loop com intervalo, vamos conectá-lo aqui. E agora precisamos da variável que criou o ST em todas as áreas. Porque vamos comparar se essa chave de masmorra pertence a alguma das áreas Se não pertencer a nenhuma das áreas, como dissemos, vamos reiniciar isso. Vamos analisar a estrutura , que são as salas ST, e perguntaremos se alguma dessas matrizes contém diretamente, não precisamos fazer um loop para cada uma delas e ignorá-la Podemos perguntar diretamente se essa matriz contém o valor original. O valor atual do estudo. Talvez. Oh, eu vou colocar um galho aqui. Vou colocar aqui, e colocar aqui, e então, vamos definir que pertence à verdade. Então isso significa que esse valor que estamos verificando já pertence a uma área. Vamos fazer uma pausa? E continue com uma pergunta: é pertencente? Porque talvez nessa verificação, acabemos com tudo falso. O que estamos verificando não pertence a nenhuma área. Há uma chance não só de pertencer ou não pertencer a uma área. Isso pode ser um quarto. Já que estamos verificando todas as chaves da masmorra E se for uma sala, sempre provocará quedas em todas as áreas. Então, temos que perguntar se isso pertence a uma sala. E aqui estão as coordenadas de todas as salas que armazenamos em uma matriz. Então, não precisamos ir, não precisamos fazer isso, na verdade. Se tivéssemos todas as áreas também em uma matriz, poderíamos perguntar se ela está contendo. Mas acho mais adequado agora, mais tutoriais, como, se você quiser, tê-la como bake ST e se familiarizar com o uso de estruturas em uma matriz Vamos perguntar se está reclamando. E vamos colocar um galho, e se isso for falso, não é verdade. Claro, precisamos obter as coordenadas atuais. Nós fizemos. E agora, a única coisa que nos importa é que, se isso não for verdade, se não for verdade, vamos adicioná-lo ao estudo atual. E quando encontramos um bloco para estudar, devemos quebrar as chaves da masmorra para encontrar o estudo Na verdade, diminua um pouco. Um erro, precisamos que algo seja verdade. Precisamos que isso pertença para ser verdade. Então, também não precisamos conectá-lo. Só precisamos ativá-lo porque quando saímos do loop principal, quando saímos do loop de teclas da masmorra, precisamos perguntar se ele pertence Vamos usar um galho e vamos usar pertences. Se pertencer, B se não pertencer mais, como eu disse, precisamos executar tudo novamente. E como vamos fazer isso? Vamos arrastar uma enorme zibelina de s para o início da nossa adição. Adicione as duas chamadas, que na verdade, vou desconectar daqui, basta conectá-la assim . Compile e salve Agora, todo esse loop será executado até que todas as áreas sejam concluídas Vamos testar se funciona, comece. E todas as áreas estão segmentadas no momento. Tenha suas próprias flechas. E temos categorias. Quase temos categorias. Nós os temos em uma lista. Mas a próxima coisa que devemos fazer é criar algumas regras dessa lista para definir nossas áreas. Mas isso é alguma coisa. Vamos partir para a próxima. Adeus por enquanto. 39. Como categorizar áreas por tamanho: Olá, bem-vindo ao Game Design Workshop e real de criação de RPG de ação procedural Engine Five RPG de ação procedural Engine Anteriormente, criamos e terminamos com o loop de áreas do segmento Pine. Criamos a peça em que estamos armazenando todas as áreas em uma variedade de salas ST. E criamos um mecanismo para verificar se alguma de nossas chaves de masmorra pertence a alguma das áreas que acabamos de criar ou se pertence a uma sala Se isso não acontecer, significa que ainda temos coisas para verificar e ele executa novamente todo o algoritmo. Agora, a novidade que precisamos é categorizar essas áreas. E surpresa surpresa, vamos precisar de uma nova função para isso. Vamos criar uma função. Vamos chamá-la de áreas de carrinhos. Na verdade, vamos chamá-lo de encontrar áreas segmentares. Vamos entrar nele. Agora, a primeira coisa que precisaremos é examinar todas as nossas áreas. Então, vou pegar o ST ou as áreas e vou fazer um loop. Digamos que seja uma estrutura, precisamos quebrar. Agora, torne isso mais fácil para nós. Temos uma regra simples de quantos blocos, quantas peças tem cada área. Não, podemos obter o comprimento dessa matriz, as coordenadas da sala da área e, na verdade, podemos promover a sala para uma variável local que vamos chamar. E vamos conectá-lo aqui. E do nosso comprimento, nosso comprimento inteiro. Vamos para qual int porque ele nos dá quantos blocos essa área tem? Oh, vamos ter uma regra para não zero peças. Na verdade, não precisamos do bloco zero. Vamos ter para um, dois ou três. E vamos remover o zero. Na verdade, para remover o zero, que pode iniciar o índice a partir de um. E vamos remover o ou quando estiver acima de três, como esse interruptor reagirá? Ele executará o cabo padrão. Aqui, vamos deixar o padrão. Se quiséssemos regras mais especiais, poderíamos ativar int e especificar os ACs que queremos aqui Por exemplo, não quereríamos quatro, precisaríamos de oito, gostaríamos de outros números específicos. Agora, vamos começar com nossas regras para áreas de um bloco. Então, o que precisamos é primeiro verificar se nosso caso, que é uma matriz, o que não importa. Mesmo que seja um, obteremos a primeira cópia, que é zero, que é a única cópia quando temos um tamanho de um, e vamos quebrar isso. Como é um ponto, é uma estrutura de dois números inteiros, e vamos verificar se eles são iguais a zero Aqui vamos usar a bola final, o que significa que ambas precisam ser verdadeiras para que isso funcione. Vamos colocar uma ramificação, vamos conectar isso, e vamos conectar a ramificação ao número um. É isso, ocupamos espaço na libido, podemos aumentar o limite de altura, mas podemos trabalhar Agora, quais são as possibilidades de ter um bloco? O que poderia ser isso? Então, isso pode ser doloroso. Não precisamos desse. Você. Latir. Agora, digamos que temos um bloco aqui, um ladrilho aqui, um ladrilho aqui, um ladrilho aqui, um ladrilho aqui, na verdade, faça isso. Eu vou fazer o Wonder Grid. Não. Digamos que temos um quarto aqui. Então temos algumas paredes aqui, e temos outro quarto aqui Esse estilo aqui pode estar conectando este quarto a este quarto. Isso é um corredor. O outro caso que poderíamos ter é que, digamos, por exemplo, ele não se conecte a esta sala. S. Então, isso é uma mentira aqui. Então, podemos chamar isso de quarto escondido. Vamos colocá-lo em uma opção especial por si só, como um ladrilho conectado a uma sala e não se conecta a mais nada. E a terceira opção seria o ladrilho inicial, sem conectar nada e ser como uma sala escondida, que não queremos que seja uma sala escondida É um ladrilho inicial. É por isso que estamos verificando o primeiro bloco aqui. Então, se for o primeiro bloco, devemos adicioná-lo a uma nova categoria, uma nova matriz da estrutura da sala ST. Vou duplicar todas as áreas. E eu vou por todos esses corredores S. Esses são os corredores ST. Vou deletar um deles. Corredores SD, e eu vou trazê-los aqui. Se isso for verdade, vou adicionar nosso estudo. Vou me separar e vou trazer estudos para cá e selecionar conectado à verdade. Agora, se apertarmos o play, podemos ver que há blocos com setas voltadas para as Mas o primeiro, não neste caso, porque continuou a partir daqui, então 012 na verdade são seis, adivinhando, quem está adivinhando, quem Sim. Continue em linha reta. Então, mas há momentos em que as setas estão apontando para a sala, aqui, temos um exemplo perfeito Esse ladrilho conecta os dois lados. Portanto, tem as duas flechas. Se fosse uma sala escondida , teria apenas um ladrilho. Seria mais parecido com este. Você tem uma seta apontando para a sala, e seria um obstáculo. Então, temos essas flechas, podemos decidir se nossos casos de estudo de um ladrilho são conectores ou uma sala escondida Não. Não pare. Há uma mensagem de erro. Qual foi a mensagem de erro? Adicione entrada de movimento. Controlador de cima para baixo. Ok, isso ocorre porque não consertamos o controle para a jogabilidade e tudo mais. Vamos corrigir isso mais tarde. Agora, o que precisamos é desse valor aqui, nosso estudo de caso, e precisamos das direções do bloco. Oh, vamos encontrá-lo em nossa masmorra. Mapa de esterco. E agora temos o ator. E do ator, podemos obter nossas instruções. Se eu entender os valores. Desta vez, vamos do lado dos valores. Poderíamos fazer isso de ambas as direções. O que realmente precisamos são os valores porque não nos importamos se é nordeste, sul ou oeste. Nós nos importamos com quantas flechas estão visíveis. Não nos importamos com a direção deles. Oh, para contar quantas flechas, vou usar um contador Vou criar uma variável local, vou chamá-la de contador local. E será do tipo inteiro. E quando vou executar meu loop de quatro nos valores, quero que comece do zero. Vou configurá-lo para zero antes do loop de quatro. Eu vou fazer cada loop. E conecte isso aqui. E a pergunta simples é: quantos desses e quantos não são? Vou colocar uma ramificação para conectar e vou configurar meu contador local de dois mais um. Não, quando isso acabar, vou perguntar com um galho. Meu encontro é um. Porque se não for um, é um corredor. Vou conectá-lo para adicionar um corredor. Se for um, então é um quarto escondido. Vou duplicar os corredores, a variável e nomeá-la nos Eu vou trazer isso aqui. Um pai. E vou adicionar a essa estrutura uma matriz de matrizes. O variável de estudo. E agora classificamos todas as nossas salas de ladrilho único como corredores ou Acho que esse é um bom ponto de ruptura por enquanto. Bem como você na próxima. Adeus. 40. Substituição de piso por categoria: Olá, bem-vindo ao workshop de Design de Jogos e ao Real Engine, cinco chamadas processuais Dungeon Action BZ Anteriormente, terminamos com nossa categoria de salas de um azulejo. Usamos o estudo que criamos no início, que é a matriz D de coordenadas dentro de nossas áreas STO. Nesse caso, este estudo tem apenas um bloco, pois estamos verificando o comprimento e alternando entre eles. E como temos esse bloco, estamos verificando se é o primeiro bloco. Se for o primeiro bloco, estamos adicionando-o à nossa coordenada em nossa de corredores, matriz E se não for, estamos verificando se é um bloco que tem uma ou mais saídas Se tiver mais de uma saída, é um corredor. Se tiver apenas uma saída, é uma sala escondida. Agora, vamos continuar com as estruturas de dois e três comprimentos, o que significa que essas áreas têm apenas dois ou três ladrilhos. Dissemos que vamos criar uma categoria especial para esses ladrilhos, que será chamada de varandas. E não é só que existem dois ou três comprimentos porque, por exemplo, jogando, talvez tenhamos sorte e obtenhamos este exemplo. Ch. Ok. Você vê esse. Este se conecta. Na verdade, não. Ele apenas conecta um quarto. Não, ele conecta dois quartos. Ele conecta uma porta aqui e uma porta aqui, e isso está no final. Como está conectando dois quartos, é um ladrilho de três tamanhos. Não deveria ser um corredor. Não deveria ser uma varanda. Deveria ser um corredor Aqui, temos uma sala secreta, e sua varanda seria essa, como uma sala conectada a dois azulejos e por uma porta, e eles não estão se conectando a nada mais. Em nosso conjunto de regras para os dois, também precisamos fazer a pergunta. Ele conecta mais de um quarto? Nesse caso, esse contador local não seria suficiente. E se estivermos verificando se é apenas o próximo, na verdade, vamos mostrá-lo em ação. Então, o que vamos precisar é de um novo balcão, chame-o de local agora. R. E vamos começar limpando essa matriz. Ainda não é uma matriz. Temos que selecioná-los aqui para dois conjuntos em uma matriz. S altere o tipo de variável. Vamos nos conectar a n três. Por que estamos limpando Porque toda vez que corremos para uma nova área SD, queremos que ela seja reiniciada Oh, vamos pegar nosso estudo e vamos fracassar em cada um. Agora, vamos encontrar uma cruz adjacente O que eu queria dizer antes é que quando estamos procurando por css adjacente, podemos estar verificando a mesma sala mais de uma vez, como dois cabos Dois ladrilhos podem estar na mesma sala. Oh, para verificar isso. O que vamos fazer é calcular cada loop dos adjacentes. Então, vamos verificar os vizinhos. Se eles pertencerem a um quarto. Não, na verdade, se ele contiver agora porque não podemos fazer isso com todas as portas da sala. Porque se eu fizer um contêiner aqui, Ray. O que eu contenho aqui. Eu quero saber em qual sala ela está sendo contida. Oh, eu preciso do quarto um, quarto dois, quarto três variáveis. E este é o nosso ST, todos os quartos. Os quartos do ST são cinzentos. Precisamos de nossa estrutura porque nossa estrutura diz que esta é a sala um. Esta é a sala dois, esta é a sala três. Então, vamos fazer um loop. Deste aqui. Além disso. Não vamos sair dos quartos. Você verifica o adjacente porque isso nos dá apenas quatro voltas, aqui serão quatro vezes. Como em todos os estudos, este resultará em mais dois cálculos. Acho que vamos quebrar isso. E agora podemos verificar se essas coordenadas estão contidas em qualquer matriz das salas ST. Ou vamos ser contidos. Eles gostam disso aqui, podem usar uma ramificação para verificar se isso é verdade ou não. Agora, a nova peça vem aqui. Não adicionaremos a essa matriz apenas o índice, que faz referência ao número do quarto pois o índice 12345 corresponde aos nossos quartos 12345 O que queremos fazer é único. Isso significa que, se a sala já existir nessa matriz, ela não a adicionará novamente. Vou corrigir isso aqui. Então, para mais informações, se fosse um conjunto, que é isso de novo, eu poderia ter dito isso antes. Se fosse um conjunto, só adicionaria itens exclusivos. Essa é a regra dos conjuntos. Mas as matrizes são mais manipuláveis. Não precisamos de mais nada. Mas quando tudo isso estiver concluído, perguntaremos a uma filial. Se nossa matriz de contador local um comprimento maior, na verdade, é igual a um. Porque se perguntarmos se é um , abordamos qualquer outro. Possibilidades. Se for um, é uma varanda. Ele se conecta apenas a um quarto. Se ele se conectar a mais de um, é corredor. Na quarta filial, vamos trazer os corredores ST. Nós vamos adicionar. Vamos dividir isso e trazer nosso estudo. Se não precisar de uma nova variável, vamos duplicar a da sala oculta. Está tudo bem. A mesma estrutura. É uma variedade de estruturas, salas ST. Vamos chamar isso de varandas ST. Em seguida, vamos adicionar um próximo estudo. E isso definirá nossas áreas que chamamos de varandas com base em nossas réguas Agora, para o resto das áreas, vamos fazer exatamente o mesmo. Mas com uma diferença, se eles estão conectados a um, não são mais varandas. São grandes áreas conectadas a um quarto. Mas vamos chamá-las de áreas isoladas. Vou apenas copiar e colar isso abaixo, conectando o pino padrão, que funciona com qualquer coisa abaixo de um ou acima de três. E vamos deletar essas varandas ST. Vamos duplicar varandas variáveis, chamá-las de ST ou áreas relacionadas E vamos trazer isso aqui. Portanto, as áreas conectadas a apenas uma sala são áreas isoladas quando são grandes o suficiente. E aqueles que não são nosso coordenador. Mas tudo o que fizemos até agora são dados. Não mudamos nada visualmente. Se formos e tudo mais e jogarmos. Não vamos ver nenhuma diferença, nada mudar. Mas armazenamos os dados de que precisamos para fazer as coisas acontecerem. Então, a próxima função que precisaremos no gerador de labirinto seria depois de categorizar as áreas, sugeri-las, fazer algo com elas E isso seria para adicionarmos nossos pisos. Vamos criar uma nova função. Vamos chamá-lo de adicionar andares. Ao adicionar pisos, quero dizer, vamos mudar o material que eles têm porque a malha estática permanecerá a mesma Por exemplo, vamos começar com as salas escondidas. Vamos comprar nossos quartos esten. Vamos para cada loop. Para cada quarto escondido que temos, vamos encontrar o ator Mac Dungeon Y. Precisávamos quebrar isso primeiro. Porque essa é a estrutura. Essa é uma matriz de fraturas, mesmo que tenha uma sala, é uma matriz de um índice Vamos percorrer esse único índice, ou podemos, na verdade, como sabemos que é um índice, podemos obter um índice zero e, em seguida, encontrar nossa masmorra Dungeon, teremos um andar estadual. Nós o nomeamos. E material fixo. Para loop. Vamos tentar fazer isso um pouco, torná-lo compacto. Elemento zero porque nosso piso tem apenas um elemento, e é esse que queremos mudar. O que seria para as salas de aquecimento. Que poderia ser selecionado. Vamos para as malhas do nosso sótão. Vamos procurar um que pareça bom para um. Este. Com a lava. Vamos fazer salas de jantar cobrindo lava. Na verdade, preciso definir a malha estática. Desculpe, não é o material. Não, vou configurar a sótão porque temos uma malha estática diferente Não é só um material. E eu vou mover isso para cá. Agora, vamos jogar. Tenha uma sala de cura que não mentisse. A razão, possivelmente, como sempre, que eu tenho um anúncio para adicionar um andar aqui. Depois de compilar e salvar novamente, temos uma ideia de que é o elevador Agora, por que isso aconteceu? Seja as áreas categorizadas. Não viemos aqui, eu pedi o primeiro quarto, mas o documento de identidade pergunta se você continha as áreas especiais. Em nosso elevador, os perímetros de nossos quartos, os perímetros de nossos quartos não são áreas especiais Mas o que precisamos fazer é adicionar aqui ou se for a primeira sala ou o estudo um, contém R A áreas de vitela, ladrilhos de vitela Deveria ser um corredor. Então, vamos compilar e salvar novamente. Sem quartos escondidos. Mais uma vez. Ok, aqui temos dois deles, temos um aqui que se conecta com esta sala, e temos um aqui também que se conecta com esta sala. Oh, eu acho que este é um bom ponto de parada para este. No próximo, continuaremos baseando os pisos em cada estilo e em algumas coisas que apresentam alguns problemas como este e os corrigiremos Porque precisaremos consertar algumas coisas. Por exemplo, precisaremos adicionar algo ao nosso labirinto nesta parte aqui. Mas eu discordo. Adeus, nos vemos na próxima. 41. Categorias de salas escondidas: Olá, bem-vindo ao Game Design Workshop, verdadeiro curso de criação de RPG de ação Procedural Dungeon do Engine Five RPG de ação Anteriormente, terminamos com nosso gerador, não com nosso gerador, mas com nossa função de áreas categorizadas Mas adicionamos as regras de varanda verificando quantos quartos cada estilo custa centavos e dois, e criamos uma matriz com uma matriz de contador local, qual adicionamos um valor exclusivo, que significa que, se o índice já tivesse sido adicionado, se, por exemplo, número um já tivesse sido adicionado, ele não seria adicionado novamente quando estivéssemos verificando outros blocos. Se não estivesse se conectando a mais de um quarto, seria um corredor e, se estivesse se conectando apenas a um quarto, seria uma varanda E fizemos o mesmo para categorizar áreas isoladas e corredores para salas maiores que três ladrilhos Também iniciamos a função de adicionar os pisos e adicionamos a malha oculta do sótão, e agora vamos continuar com as próximas. Oh, vamos começar com varandas. Vamos precisar de cada baixa novamente. Vamos precisar de nossas varandas, etc. E precisaremos quebrar o resultado. A partir desse resultado, precisamos errar porque essa era apenas uma variável, uma coordenada, então obtemos zero, mas, por aqui, precisamos passar por tudo isso Então, para cada loop, como este aqui, descobriremos que em nosso t realmente podemos copiar exatamente isso. Agora, vamos nos conectar. Para o piso, vamos escolher se não tínhamos varandas. Tivemos um sujo. Acho que é bom para varandas. Aqui está, este combinou A, B, três A, da6b. Incrível. Vamos fazer exatamente o mesmo para o próximo, que seria obter áreas isoladas. Bem, agora, para áreas isoladas, não seríamos exatamente os mesmos porque não queremos que elas tenham manteiga. Queremos torná-los um pouco mais especiais. Talvez no final deles em um ônibus ou algo assim. O que vamos fazer é fazer uma seleção aqui. Para o índice, vamos fazer um intervalo aleatório. São 23 andares deles? R. Tenho certeza de que devemos usar um pouco mais aqui. Vamos colocar o chão. Temos alguns normais. Normais e chamas, como os corredores normais, mas é Falando sobre corredores. Vamos fazer o piso do corredor. Eu vou trazê-los. Aqui. Aqui estão os corredores. Tudo bem. Começamos com o material do piso. Então, vamos pular essa etapa. Não precisamos fazer corredores. Não há motivo para adicioná-lo novamente. Mas precisamos arrumar os quartos. Portas perimetrais. Na verdade, poderíamos seguir todas as coordenadas, e poderíamos Isso são coordenadas. Não temos pausa. Podemos copiar e colar isso diretamente aqui. Entrar diretamente. Para os quartos, temos um piso de madeira. Este é Y. Então, combine BC D sete ou três Códigos nucleares. E acho que terminamos com o chão. Nós compilamos Ave. Nós podemos , na verdade, nós criamos, isso é muito lava. Muita lava. Tanta coisa. Não temos uma varanda aqui ou aqui. Nós temos uma varanda aqui. OK. Também precisamos fechar a base. Então, vamos para um gerador. Vamos abordar categorias, áreas de segmentos finos. Vamos até nossos traçados de linha e, em seguida vamos voltar para nossos andares. Faça os de lava. Oh, tudo bem. É por isso que quero dizer zero, M zero, mas torne os de lava menos possíveis. Adicione um extra para selecionar o piso novamente. Aqui fica 0-3. Os níveis são um pouco mais raros. Sim, isso parece bom. O que aconteceu aqui? Oh, esta é uma sala especial. É por isso que, e eu acho que nossos andares são. Agora que esta parte terminou de categorizar áreas, categorizar áreas e adicionar os pisos para elas, devemos prosseguir com nosso lobby Digamos que esse seja outro que eu não conheço. Vamos colocar 7,72. Só por causa disso. E atrasamos. Nossa barra de progresso nesta parte, 0,1 nesta parte, vai aumentando de nível em pedaço Move uma porcentagem dela. Se quiséssemos ser um pouco mais agradáveis visualmente, poderíamos ter criado um cronograma para aumentar da porcentagem atual para a porcentagem que desejávamos Mas isso é visual por causa do visual. Então, vamos continuar criando algumas portas. Porque, no momento, não podemos realmente passar de uma sala para outra. Não podemos nem começar do começo. São só portas. Em lugar nenhum Como dissemos, precisamos de algum código para fazer isso. Precisamos definir onde deve ser nossa porta em todo o nosso labirinto. Primeiro quarto Achei que fosse um esconderijo que não caía no chão, mas é o banheiro. Oh, o que vamos usar é a direção da seta para criar uma porta para cada sala a partir de seu segmento. E o Por exemplo, esse segmento se conecta a essa sala várias vezes, mas apenas uma vez deve ter uma porta. Este segmento se conecta a duas salas e deve ser criado em ambas as salas. Uma porta. Isso deve ser criado. Também está conectado a este quarto. É por isso que não é uma área especial onde esta é uma área especial. Muito fogo. Mas sim, ter algumas áreas seria apenas fogo também seria bom. Ah. Vamos criar nossa função para criar as portas ocultas. As portas escondidas da área do quarto. Você vai precisar de uma função. Vamos ligar para isso. Ela então vai. A primeira coisa que precisamos para isso são os quartos escondidos. Nós vamos conseguir isso. Vou percorrer todas as quatro polegadas. Laço. Vamos quebrar a estrutura. Precisamos encontrar em nossa masmorra as coordenadas. Vou pegar uma cópia de zero porque é um le tile. Para encontrar uma masmorra. E a partir daqui, vamos obter instruções. E a partir das instruções, vamos pegar as chaves. Isso para o corpo de fluxo, torne-o um pouco mais compacto. Quero saber em que direção tenho uma seta apontando para a parede. Esse caso seria fácil de fazer porque temos apenas uma direção que tem uma parede, uma parede da sala, e todas as outras direções são detritos bloqueados, outras coisas que não estão conectadas a Então, fazemos um loop para cada loop. Vamos combinar o valor com o índice quando for verdadeiro. Isso significa que é o único que tem uma flecha, o que significa que temos passagem. Oh, é uma porta. Vamos promover isso para uma variável local, vamos chamar essa variável local E agora temos uma direção na qual nosso quarto centenário se parece com uma porta. Oh, neste ladrilho, vamos pegar Queremos que os cinco vizinhos encontrem o adjacente e, desse adjacente, queremos a direção atual na nossa direção. Vamos trazer essa variável para cá. Você vai sair do RA, selecione o que eu erroneamente seleciono o curinga. Esse, não esse. Esse é sempre um valentão. Também diz isso na dica de ferramenta. Selecione. Para conectar isso, o índice, e temos o norte zero, é 213 Não, podemos selecionar diretamente o vizinho do nosso quarteirão que é a sala que precisa da porta. Então, vamos encontrar nosso quarto. Use este mapa de masmorra novamente com nossas coordenadas. A partir daqui, teremos ações opostas. Vamos encontrar a corrente oposta que queremos. Nós vamos ter um quarto oposto Do nosso quarto, Ó sala de azulejos, neste momento, nós o encontramos com nossa cruz adjacente. Da nossa sala na direção oposta e faça a seta acender. Isso significa que nossa masmorra nosso jogador tem pode passar por ela Vou conectar isso ao final desses quatro lóbulos, que são as chaves do bloco atual, porque não queremos conectá-lo no final depois que todos os blocos tiverem sido verificados Queremos conectá-lo ao bloco atual que estamos verificando. Jogue roots don't I. Hidden room novamente. Temos um quarto escondido aqui. Se eu entrar aqui, deveria ser uma flecha desse jeito. Acho que todos nós temos uma ideia de por que isso aconteceu. Temos que usar o gráfico ven e, após o carregamento, devemos adicionar a função de áreas de portas ocultas. Vamos compilar e jogar. Arte, espero que seja um quarto escondido. Vamos começar de novo. Não há espaço escondido novamente. Aqui temos um. Agora, novamente, não funcionou. E o motivo é simples. Adicionamos às direções que isso está ativado, não alternamos Então, vamos alternar. Dave, de uma sala de aquecimento para, na verdade. Agora, eu realmente nos mostra que aqui, eles deveriam ser adorados E também funciona, o resto está correto. Qualquer outra sala de aquecimento. Muito. Sim, temos um terceiro. Eu também estou aqui. Isso significa que está funcionando. Eu acho que isso é suficiente para este. Eu vou te ver na próxima. Tchau. 42. Função de troca de parede a porta: Olá, bem-vindo de volta ao Game Design Workshop e ao Real Engine Five procedural Dungeon action A Psy creation course Então, no anterior, terminamos com nossa função de adicionar andares. Adicionamos os pisos das varandas, com quatro enrolando as varandas ST e quebrando os elementos RA, e depois percorremos os elementos LA e adicionamos e configuramos a adicionamos e Agora, depois, fizemos isso para as áreas isoladas, também com o mesmo código exato, com a alteração de selecionamos por meio de um número inteiro aleatório sendo do piso de lava ou de um piso normal, e adicionamos o dobro do piso normal, que ele tivesse mais chances de apsonar Na verdade, podemos adicioná-lo mais uma vez. Aqui. Então, temos três deles e dois deles. A próxima coisa que fizemos foi iniciar nossa função de código de áreas de portas ocultas para colocar portas nas áreas ocultas. Examinamos nossa lista de quartos escondidos. Nós quebramos a estrutura para obter a matriz. Obtivemos o primeiro índice porque é uma sala de azulejos únicos e encontramos esse ladrilho em nossa masmorra Pegamos as direções e, a partir das instruções, descobrimos qual delas está ligada, que significa que ela tem acesso Não, isso significa que temos uma porta. E então, quando terminamos, fixamos as setas do bloco oposto, o bloco da sala, para ativar a flecha em direção à sala escondida Agora, o que precisamos fazer é criar uma função dentro da decoração DP, que é responsável pela adição de nossas paredes para substituir a porta pela parede da porta E vamos fazer isso aqui porque na decoração da BP, porque temos o índice da sala, que estamos usando para eleger qual tipo de parede Na verdade, nós realmente precisamos do índice da parede, o índice do quarto. Então, na função de paredes de troca, vamos também promover o índice da parede para uma variável Novamente, para aqueles que estão pesquisando onde estamos, estamos nas decorações de vice-presidente. Vamos criar uma função aqui e, antes de fazer isso, queremos que a função que já trocamos paredes promova a variável de índice de parede Porque vamos usar isso para decidir qual tipo de porta de parede queremos adicionar. Agora, vamos criar essa função. Vamos chamá-lo de Add door. Agora, nesta função, também precisaremos verificar se o nosso quarto individual que estamos criando está conectado ao nosso quarto porque há uma chance de que nosso quarto individual esteja aqui, girado, é nosso quarto individual esteja aqui, girado, claro, mas poderia ser assim, com base em nossas regras, isso com base em nossas regras, também é considerado um quarto oculto Mas essa sala não precisaria de uma porta. Pare aqui, volte para a decoração e adicione uma saída de parede. Quando abrirmos a porta, vamos voltar ao nosso gerador M, adicionando, a partir do mapa find dunge, nossa referência básica de blocos Nós vamos. Precisamos de uma criança. Decorações. Sim, esse é o nome. E a partir das decorações infantis, vamos ser atores E do ator infantil, vamos lançar duas decorações e fazer disso uma mistura pura E agora que temos a referência, vamos prolongar. Porta. Vamos conectá-lo aqui. Traga assim. Agora que temos uma saída, sabemos que temos essa saída de uma parede. Sabemos que quando isso acontece, a seguir, podemos fazer a pergunta: encontramos uma parede ou não? E se não encontrarmos uma parede, adicionaremos nossas coordenadas a todas as portas. Mas não vamos fazer isso agora. Nós vamos fazer isso depois. Vamos terminar com nossa função em. Não. Primeiro de tudo, vamos precisar da matriz de paredes. Porque queremos passar por todos eles. Então, vamos para cada um. Mas, como você sabe, quando atravessamos todas as paredes, precisamos de uma direção porque temos o sistema de rebocador de um elemento, assim como o componente de rebocador tem puxão E porque precisamos puxar, precisamos de uma direção. Então, vamos adicionar à nossa porta uma entrada de ereções E. Chame isso de ereção. Agora, lembre-se, isso precisa ser levado para amarrar, não para morder, e vamos adicionar isso aqui. Então precisamos de um galho. Vamos voltar ao nosso gerador de PP. E do nosso resultado oposto, vamos conectar isso aqui porque estamos testando a direção da nossa pilha que tem a sala escondida Estamos fazendo o oposto com o vizinho. Então, a renda, e isso nos dá o resultado do I, é a sala. Volte para as decorações. Então essa é a parte que precisamos perguntar se há uma guerra. Mas o que podemos fazer é arrastar isso aqui e definir como visível. Ou, na verdade, não está escondido novamente, oi no jogo, mas escondido no jogo. Vamos colocar um galho quando isso for verdade. E vamos selecionar um aqui ou b Se não estiver visível ou se estiver oculto novamente. Precisamos estar visíveis aqui. Não b porque se estivesse visível, tornaria verdadeiro e, em seguida, funcionaria como verdadeiro. Mas se estava escondido no ganho e é verdadeiro, significa que não podemos vê-lo. Então, precisamos do oposto. Mas nós temos isso. Precisamos criar uma variável local. Vamos chamar isso de parede de verdade. Porque não temos nenhuma parede aqui, e vamos conectá-la aqui também e defini-la como verdadeira quando nossa pergunta for verdadeira. Agora, uma coisa boa de saber é que podemos adicionar tags em tempo de execução. Vamos ver, por exemplo, se eu estava passando por todas as paredes de uma sala. Como sei qual é a parede da porta? Poderíamos ir até o gerador do labirinto. Vamos mostrar as duas formas, na verdade. Poderíamos ir aqui e faremos isso. Vamos adicionar essas coordenadas uma nova matriz chamada let's duplicate s empty. É uma matriz de pontos finais. Isso é o que nós queremos. Vamos chamar isso de todo nosso. Traga-o aqui e vamos adicionar as coordenadas. Do operador, desculpe Adicionar à matriz. Se isso for falso, se não tivermos parede, adicionamos as coordenadas de nossa porta, o que é resultado de nossa cruz encontrada adjacente. Ao mesmo tempo, poderíamos ter outra matriz. Vamos chamar isso tudo de ereções de portas. Vamos mudar o ponto para as direções. Mas, por exemplo, se eu trouxer isso aqui também e adicionar a direção oposta que queremos aqui. Não, se eu as estivesse adicionando assim, eu poderia ter duas matrizes correspondentes com todas as portas e sua direção Ou eu também poderia ter outra variável de mapa com pontos t, e o segundo valor seria de oito direções. Mas, como eu disse, podemos fazer com rebocadores. Podemos adicionar ao run us componentes, atores, tudo o que quisermos. Então, o que eu também posso fazer é arrastar do loop for do elemento da matriz, a parede que estamos manipulando aqui, e adicionar g tugs O que precisamos fazer é um pouco estranho Temos que obter tags, obter rebocadores de componentes, e isso vem como uma variável de matriz E como vem como uma variável, podemos, na verdade, que é nossa referência direta a essa variável, manipulá-la e expressá-la e colocar a porta traseira Agora, se passarmos por cada uma delas, cada uma das paredes, e no final, vamos fazer outro laço dianteiro. E solicite a lista de tags. Agora, na parede em que temos isso, vamos realmente imprimi-la. Mas não vamos testá-lo. É uma perda de tempo. É assim que está programado para funcionar. A próxima coisa que precisamos é definir a malha estática. Malha Tic. Isso poderia ter sido diferente. É mais visível o que conectamos. Sim. Vejo que isso está claro agora. Qual malha estática adicionamos? Nós vamos eleger. Para nosso índice, vamos escolher nosso índice de parede. Vamos adicionar um total de cinco variáveis. Vamos até nossas malhas estáticas e selecionar nossas portas de forma correspondente Agora, preciso verificar quais eram os dois correspondentes. Vamos ver o gráfico de Evan. Nós vamos construir quartos. E a partir daí, vamos trocar por paredes, que na verdade são decorações internas Eu poderia ter ficado lá. E vamos verificar. Então, o número zero é desse tipo. Então, se formos para um número zero, devemos adicionar esse tipo de parede ao select. Eu acho que é isso. Tudo bem 85a1 9f8d combinado. Surpreendente. Agora, o próximo. Vamos para. Não. Vamos parar com os muros. A próxima é a de madeira fácil de encontrar. A de madeira é Minha boca grande, fácil de encontrar. Ok. Sim, está aqui. Neste combinado b91xb. Não tenho certeza. Neste ano. Vamos para o próximo. A pedra são paredes. Isso, isso foi mais fácil de encontrar. Zero combinado E CC 57. Acho que basta nomear. As últimas seriam as paredes de tijolos. As paredes de tijolos. Não tenho certeza de qual é qual, mas não acho que isso importe. Vou escolher isso para o primeiro. Combinado 025159 blá, blá. E o outro seria esse. Ok. Agora, com base em nosso sistema posterior como entraremos nas salas de estar. Vamos precisar de algumas colisões extras aqui que vamos habilitar por meio dessa função Vamos até eles. Vamos precisar ir até a janela de exibição e adicionar, na verdade, podemos duplicar a caixa de colisão Traga-o rapidamente para cá e torne-o menor. Acho que está bem, bom tamanho. Talvez um pouco. Sim, tudo bem. Eu acho. Vou duplicar isso novamente. Vá girá-lo. Vou trazê-lo para todos os lugares onde deveria estar uma porta. Realmente não importa se é preciso ou não. Vou duplicar novamente, transmitir. E então eu vou duplicar isso também e colocá-lo aqui. Todos eles, por serem uma cópia da caixa, têm as mesmas configurações que adicionamos aqui. Portanto, eles não estão gerando eventos de sobreposição. Talvez isso seja um pouco mais. Mas está tudo bem. Oh, isso significa que em nossa porta aqui, devemos habilitar sua lesão E podemos realmente dar um passo simples. Vamos selecionar essa parede. Vamos colocar essa caixa nessa parede. Mas também continuamos nomeando isso. Então vamos colocar essa caixa nessa parede. Aqui, essa caixa nessa parede, e depois essa caixa nessa parede. Vou voltar para a função e, a partir da nossa malha estática, vou fazer com que as crianças obtenham os componentes infantis, não da caixa dois, como você pode ver, ela mostrou muitas opções. Uma delas era trazer uma determinada caixa. Às vezes, coisas reais podem prever o que você quer fazer. Mas de qualquer forma, no caso das crianças , vamos, vamos aumentar cada ciclo. Em seguida, vamos para o componente Rash. E gere eventos de sobreposição, é verdade. Agora, por que eu precisava escalar. A razão pela qual precisei lançar aqui é porque estou examinando todos os componentes que esse at mesh tem. E eu quero para a operação. Não é um componente de malha estática, é um componente de caixa. Desculpe pelo boxe. Componente da caixa. Isso não teria funcionado se fosse um mapa estático. Então eu não sei. Esse é o motivo porque eu não sei que tipo de caractere. Pode ter cerca de 520 crianças. Ok, não é bom ter tantos filhos, mas você não pode fazer isso. E vai ser um pouco mais pesado. Não sei que tipo de componentes eles são. Então, estou dizendo: você é o componente da caixa, se você é o gerador de eventos de sobreposição Não preciso marcar esses componentes. Não preciso nomear esses componentes. Eu sei que eles pertencem às paredes. Acho que esse é um bom ponto de discussão por enquanto. Eu vou te ver na próxima. Adeus 43. Colocação de porta e sigilo: Olá, bem-vindo ao workshop de design de jogos do curso de criação de RPG Dungeon Five Procedural Lensing ação Na lição anterior, terminamos com a função d e as áreas da porta adicionando a função de portas que chamamos das decorações da BP E também mostramos uma maneira de adicionar informações sobre as portas de uma forma que conhecíamos, criando uma matriz, adicionando as variáveis e criando uma matriz correspondente, também para que elas fossem preenchidas ao mesmo tempo. Então, seus índices correspondem um ao outro. Também adicionamos essa função, a porta que começamos a preencher para obter a direção de onde queremos que a porta seja adicionada. Atravessamos nossas paredes. Encontramos o componente que tem a etiqueta, a parede que tem a etiqueta de nossa direção, e fizemos uma pergunta se nossa parede é visível ou não, caso nossa sala escondida esteja localizada em algum lugar E continuamos escolhendo Na verdade, isso está errado. Alguns erros novamente. Quando era verdadeiro, queríamos defini-los como verdadeiro e, quando fosse falso, queríamos adicionar a tag ao componente, dizendo que esse componente é uma porta. Então, quando queremos examinar a matriz das paredes, podemos descobrir facilmente qual é a porta. Então, desconectamos agora isso e conectamos às cataratas e está tudo bem. Isso é o correto. E então adicionamos a malha estática, elegemos a malha apropriada e também adicionamos alguns componentes de caixa ou nossa mecânica de jogo Mas quando a porta é ativada, também ativamos os eventos de sobreposição em nossos novos componentes da caixa Agora, há mais uma coisa que devemos adicionar, e vou explicar por que precisamos adicionar uma malha estática. Mostre onde está a porta? Porque nossa câmera será de um ângulo de 45 graus. Se a porta está nessa parede, não podemos dizer. Não podemos dizer: Oh, aqui, há uma porta. Portanto, é preciso que o jogador perceba que, quando olhamos de cima, há uma porta aqui. Para fazer isso, vamos usar algumas garotas. Oh, vou apenas adicionar uma nova missão estática. Ele adicionou a parede porque eu selecionei a parede aqui, mas queremos a CGL Vamos encontrar o C l. Aqui está, certo? Isso é grande. Vamos torná-lo um pouco menor. Acho que 0,3. Talvez seja um pouco pequeno ou 0,4 pareça bom. Lembre-se de travar todo o eixo, para que ele se escale uniformemente, e vamos trazê-lo para onde estaria Base A altura da nossa palavra é 400. 93 80, talvez esteja tudo bem aí. Na verdade, para os Cgels, eu também vou usar rebocadores Poderíamos simplesmente cuidar dela quando criança, continuar com a outra onda que mostramos, mas vamos nos acostumar com os puxões Então isso é S. Esses são dois que colamos, rotacionamos. Vou negar o valor negado. Isso é um Norte. Vou verificar com a parede. Y. Vou girar, copiar e colar isso novamente Vou girá-lo em 90 graus. B Posição oeste B. Vou apenas copiar isso. Cole aqui. I. No meio do caminho, então dois então Sim. Me desculpe. Porque isso é meio. 380 Wu novamente. Direção. O 400 negado, é 400 e está no lugar certo O que precisamos fazer para todos é ou também transformar o jogo oculto em realidade. Porque queremos habilitá-los quando quisermos. Eu também vou, e realmente, vamos para a construção c. Traga-os aqui, faça uma matriz. E promova essa variável, todas essas garotas C. Tudo bem. Agora eu posso ir até a porta e pegar os Cgals e ignorar cada um deles Novamente, vou usar essa string esse nome de texto aqui como o componente puxado. Se isso acontecer, estamos em sua visibilidade Visibilidade de que o jogo oculto age de forma falsa. Visibilidade e ocultação no jogo são duas coisas diferentes. E eles são opostos. Escondido no jogo, sim, isso significa que você não pode ver. Visibilidade, sim, significa que você não pode vê-la. De qualquer forma, agora, antes de fazer isso, na verdade, precisamos fazer uma pergunta. É possível que estejamos em uma parede? Porque se estivermos em uma parede e não deveríamos ligar o CD porque haverá um CD passando no meio do ar Se não houver parede, basta sair sem nenhuma parede passar. Se for uma parede, passe pelos géis marinhos e ative o correto Agora, vamos compilar e salvar. E falhe. Tivemos que ter um acidente. Quando voltarmos, vamos continuar. Vamos testar. O mapa. O nível. Existe alguma sala secreta? Sim, há uma sala secreta, temos resíduos e temos nossa porta. Oh, a única coisa que resta a fazer é fazer isso para todo o resto. Oh, a próxima coisa que devemos acrescentar seriam as portas de área única. O que quero dizer com áreas únicas, como varandas e áreas isoladas, de uma regra comum Eles só se conectam a um quarto. O balcão aqui, área única aqui, isolado, temos outro quarto. Este é um bom mapa. De qualquer forma. Vamos adicionar as portas de área única. Quando eu tenho dois diferentes. Vamos criar uma função primeiro. Vamos usar o gráfico em caneta, separar as áreas das portas e adicionar uma nova função. Não, áreas de porta única. Como dissemos, temos duas matrizes dessas áreas. Temos as varandas e as áreas isoladas. Bem, eu poderia fazer uma quantidade diferente de loops para cada um deles e superar isso desse jeito Mas também há outra opção. duas matrizes tiverem o mesmo tipo de variável, você pode realmente anexá-las Isso significa que você os está mesclando em um, porque eu não quero bagunçar essas duas Vou criar uma nova variável local. Vou fazer disso um ponto de referência. Vai ser uma matriz, e vou chamá-la tal matriz. Eu vou trazê-lo aqui. Vou até uma caneta. E eu vou repetir, fazer de novo. Então, o que vou fazer é que isso não deve ser um ponto final Isso deve ser um quarto SD. Nenhum endpoint altera o tipo de variável porque essas matrizes têm espaço Não. Deixe-me desconectar, deixe-me compilar e reconectar a pilha, e agora elas podem Agora, o primeiro não, o primeiro pino é a matriz que vamos adicionar coisas e o segundo pino é a matriz que estamos adicionando. Então essa matriz se torna um total dessas duas. Se eu tivesse conectado as varandas aqui e conectado as áreas isoladas aqui, isso teria bagunçado nossa variável Agora, como tenho esse total de matrizes, posso descartar. Para cada loop para cada quarto, porque o que vamos fazer será o mesmo. Também precisaremos de outra variável. Será de número inteiro e será do tipo matriz Isso porque precisava ser uma matriz. Mas eu quero mostrar o código-chave, como programar algo de acordo com a necessidade dele. Eu vou te mostrar em um momento. Vamos nomear esse ex. Mamãe. Oh, eu fiz. Mas você tem um índice de quartos em outro lugar. Eu não gostei. Vou chamá-lo de Índice. Vai ficar bem. Compile e salve. E, na verdade, acho que esse é um bom ponto de parada para este. mostrarei o exagero desse Posteriormente, mostrarei o exagero desse código na próxima lição Adeus por enquanto. 44. Funções de área de porta única: Olá, bem-vindo de volta ao workshop de design de jogos e ao curso de criação de Don action ps procedural real engine five criação de Don action ps Anteriormente, criamos e terminamos, na verdade, com nossa função de adicionar porta. Adicionamos a peça que estamos verificando quando o laço de cada parede termina e habilitamos nossa caixa. Nossa caixa de porta. Estamos verificando qual das brânquias C tem a etiqueta do componente em que queremos a direção e estamos configurando-as como muito visíveis. Enquanto montamos as novas duas quedas escondidas. Agora, e saímos sem parede ou sem parede. Também criamos o início do nosso gerador principal de nossas áreas de porta única e explicamos um pouco sobre o acréscimo em uma matriz E agora vamos continuar com isso. E, como prometi, vou explicar a vocês um pouco de exagero com essa matriz de números inteiros Estou usando uma matriz de números inteiros para fazer isso porque o impacto será mínimo É uma boa oportunidade para explicar algumas coisas. Oh, vamos começar quebrando nossa postura. Então, obtemos a matriz de nossas coordenadas e, em seguida, fazemos um loop para cada uma delas. Para cada loop. Agora, temos uma função chamada in room index, que, se abrirmos, o que estamos fazendo é percorrer todas as salas da matriz St, ou as coordenadas das salas, e perguntar se as coordenadas que estamos inserindo pertencem a alguma delas Isso nos retorna se uma sala for encontrada e em qual índice de sala ela é. Vamos fechar essa função. Agora, considere as áreas de porta única. Agora, com isso, vamos colocar um brunch e conectá-lo aqui E digamos, se encontrarmos um quarto, o que faremos? Se não o fizermos, não faremos nada. Mas se isso for verdade, vamos fazer o overkey na sala de índice Então, vou perguntar se isso está contido. Contém um item. E o item seria o índice do quarto. Porque se estamos adicionando uma sala, se uma das coordenadas encontrar uma sala, não queremos adicionar o próximo bloco que também encontre uma sala, encontramos um lugar onde podemos criar uma porta Oh, quando eu faço isso, e eu sei que quero meu quarto seja único nesses recipientes. Se eu adicionar a essa matriz, você pode ouvir falar de Unique. Isso seria um exagero porque o motivo é que, quando ele tenta adicionar itens exclusivos, primeiro examinará todos os índices e depois decidirá se os adiciona ou não Agora, como mencionei, os conjuntos também têm essa funcionalidade, mas não são tão pesados quanto matrizes na adição de itens exclusivos Na verdade, eles podem aumentar desempenho ao adicionar uma peça exclusiva. Eles diminuiriam o desempenho na memória porque têm um sistema subjacente. O mecânico chamou sh tables. É algo mais profundo na programação sobre gerenciamento de memória, obtendo referências rápidas. De qualquer forma, conjuntos são melhores para adicionar coisas únicas. As matrizes de índice são melhores apenas adicionando normalmente. Então, aqui, eu simplesmente selecionaria adicionar, e seria mais rápido. Não que tenha a ver com nosso labirinto agora, mas acho que essa é uma boa informação Vou adicionar o índice da sala à matriz. E temos as portas e todas as direções. Como dissemos isso, dois precisam ser preenchidos ao mesmo tempo. Vamos adicionar a isso vou adicionar as coordenadas de. Eu vou acrescentar algo a isso também. Agora, para obter a direção, vamos apenas selecionar. E conhecemos nossa matriz de índices da sala de freios. Precisamos fazer a trapaça aqui novamente. Então, vou encontrar essa seleção de alguma outra função que usamos e simplesmente copiá-la de lá. Acho que o usamos em salas de campo. Penso no meu zelo em mostrar isso, esqueci Vamos verificar o ponto. Estamos obtendo todos os seus pontos. Sim, aqui está. Para cada um de seus pontos, não devemos ter vizinhos. Então, cruze a cruz adjacente. Por que e cruzar adjacentemente, e então precisamos fazer um loop nesses pontos. Vou conectar isso. E esta é a sala, como a cruz adjacente, que estamos verificando, é uma sala, não o azulejo. Não as coordenadas do ladrilho de onde viemos, mas a cruz adjacente. Porque sabemos que o azulejo de onde viemos é um corredor ou uma varanda, não um corredor, uma área isolada ou uma É por isso que precisamos da cruz adjacente e da cruz adjacente agora. Nesta, todas as portas também devem ser uma cruz adjacente, não a coordenada da sala Oh, estamos examinando todas as varandas e áreas isoladas Estamos obtendo as coordenadas de cada área segmentada. Estamos verificando os vizinhos e quando o vizinho é uma sala , adicionamos à sala de índice. Explicamos as coisas aqui. Agora, agora podemos realmente obter a direção porque do nordeste sudoeste, sabemos a direção da parede. Então, vou fazer o truque com uma seleção. Como você pode ver, isso não funciona. Mais uma vez, tenho a opção de me afastar em todas as direções. Vou trazer a última saída. Eu vou eleger a partir daqui. Vou conectar a última saída e a última saída e seguir para o nordeste sudeste oeste, nordeste sudeste oeste. Seja honesto, acho que não vamos usar essa variável, mas por que não usá-la? Quem sabe como você vai pensar em atualizar esse programa. Agora, tudo o que resta a fazer é realmente criar as portas. E para fazer isso, precisaremos de duas variáveis locais. Eles voltarão a ser o ponto final e a direção. Mas os que estão aqui têm todas as informações sobre todas as portas. A razão pela qual vamos criar os locais é porque vamos filtrar apenas para essa categoria, tudo o que criamos aqui. Então, podemos usá-los. Para encontrar o estilo apropriado e obter a direção correta da porta e das setas Mas vamos rolar para baixo, acessar as variáveis locais e adicionar duas novas. Vamos chamar a primeira porta. Devem ser coordenadas do tipo ponto e a outra deve ser ações , deve ser de direção. E nós vamos trazê-los no final aqui. E adicione exatamente as mesmas coisas que adicionamos aqui. Isso parece um pouco bom, esse pacote define pontos, mas tudo bem Agora, vamos continuar. Onde vamos chamar a criação de novas portas? Temos três opções. Temos a opção de criar logo após esse loop f, temos a opção de criar aqui ou aqui. Este é o loop fd que tem cada bloco, é uma coordenada, tem, mas digamos que cada bloco que está nessas duas matrizes, que são matrizes de muitas Eles têm listas de coordenadas. Então, se o adicionarmos em qualquer outro lugar, no final, isso significa que ele será executado, ele tentará adicionar os tos quantas vezes forem. Nós o adicionamos às coordenadas aqui, seria ainda pior porque está multiplicando isso por quantas peças estão em ação em sua dívida Ray, na verdade, usamos uma matriz. Então, o menor dano que podemos fazer é adicioná-lo aqui, porque tudo isso para cada loop que criamos são muitos cálculos Então, vamos trazer nossas portas. Aqui, vamos dar uma olhada. Para cada loop. Agora podemos encarar Me desculpe Não precisamos fechar a área adjacente. Precisamos encontrá-lo na masmorra. Encontre. E vamos obter direções e adicionar como verdadeiras, assim. O que vamos adicionar como verdadeiro será a direção com a obtenção do índice. Então, vamos adicionar a direção com a obtenção do índice porque essas duas matrizes estão correspondendo uma à outra A próxima coisa que precisamos fazer são flechas para cães. Ok. Ok. Abaixo e também na porta. Como precisamos de uma criança, então pegue decorações em comparação com uma praga e uma. E nessa direção, vamos conectar isso ou obter E deveria ser isso. Vamos jogar. A porta aqui. Ou porta aqui. Estou supondo Eles conectam isso. Sempre o mesmo, não é? Nas portas. É isso? Nas áreas das portas. Aqui está. Comece de novo. Não. Porta. Certo? Vamos descobrir isso. Por favor. Oh, vamos verificar nosso código. Então começamos, estamos adicionando que o falcão está isolado, estamos recuando nas fraturas, encontrando uma cruz adjacente, estamos adicionando à Continuar adicionando isso é um problema, porque se adicionarmos a mesma sala, sim, se formos a mesma sala, a mesma sala tem duas áreas isoladas. Digamos que uma área isolada e uma varanda, e depois sai por três portas Então, não será adicionado, mas precisamos redefinir essa sala de índice. Então, vamos ouvir isso antes de selecionarmos uma nova área. Agora, acrescentamos ao exo que isso não causaria um problema, mas o problema que tínhamos. Você está criando ereções. Adicionando portas. Aqui estamos pegando as portas, estamos obtendo a direção da porta. Em seguida, estamos alternando as flechas para que as flechas funcionem. Este deveria ter uma flecha aqui. Isso não acontece. As flechas também não. Ok. Você vê o que aconteceu aqui, então isso é o norte. Isso também não é para o norte. Ok. Então, basicamente, está aqui. Não fizemos o oposto porque, quando estamos pegando o vizinho uma direção, precisamos da direção oposta Sim, da companhia, isso faz sentido. Ilan salva. E desta vez, temos cachorros. Uma área isolada. Sim. Não é uma área isolada. É porque temos isso aqui, que é uma caixa especial. Então, entre isso e isso, ele considera que tem um bloqueio. Então essa é uma área isolada, e essa é uma área isolada. Mas também usamos os blocos especiais. Então, trabalhando de perto com o que eu disse. Então, temos portas em todos os lugares. Temos uma porta aqui. Deveríamos ter um aqui. Temos as vendas um pouco altas, um pouco dentro da parede Podemos fixá-lo rapidamente em nossas decorações, abaixá-las. 340. 30. Isso é tudo 30. Aquele 30 ed. H. Sim. Vamos analisar de cima, então esse problema. Isso é demais. Eu vou adivinhar por 20. H. Copie e salve. Para que não volte a acontecer. Parece bom. Está bem assim. Mas nós temos portas, e tínhamos uma no meio da nossa. Acho que deveríamos na próxima. Eu vejo você então. Adeus por enquanto. 45. Como conectar paredes de calabouço: Olá, bem-vindo de volta ao Game Design Workshop e ao curso real de criação de ARPs Procedural Dungeon Action Five ARPs Anteriormente, terminamos com nossa função de porta única. Também corrigimos alguns erros que aconteceram durante o processo. E o que realmente fizemos foi adicionar uma parte clara do nosso índice de sala no primeiro quarto loop antes de iniciarmos as coordenadas de cada área segmentada Em seguida, invertemos as direções porque estamos pegando os vizinhos E então usamos a matriz de portas que criamos aqui para obter a direção e adicioná-la ao ladrilho específico. Trocamos as setas e adicionamos nossa porta. Agora, vamos fazer isso de novo, mas desta vez para nossos corredores, que na verdade serão quase exatamente os mesmos Vamos para nossa função, áreas de porta única, e vamos duplicar isso e chamá-lo de áreas O que vamos mudar é que vamos excluir esses dois. Vamos deletar o templo A e adicionar aos nossos corredores um A. compilar Na verdade, vamos adicionar ao van gra também. Áreas de corredor, portas. Compile e salve, e vamos jogar. Agora, duas portas aqui, um momento de ação, mas funciona Agora, por que ele adicionou duas portas aqui e não habilitou o C aqui? Porque a diferença com os colisores é que, na verdade, queremos apenas um em cada corredor Em cada segmento do corredor, com cada cômodo que ele conecta, queremos apenas uma porta , mas agora ela adiciona o máximo possível quanto possível , porque é assim que codificamos essa parte Como você pode ver aqui, ele estava grampeado com a guelra C, mas vamos corrigir isso Vamos parar de jogar, ir até o gerador de maio, entrar nas portas da área do corredor e dar uma olhada nas regras Fora. Toda vez que estamos correndo para uma sala de descanso diferente, corredor Estamos adicionando uma porta e uma direção. Então, a primeira coisa que pode acontecer é que a mesma coordenada tenha duas direções O que vamos fazer para corrigir isso é conectar e abrir as portas no final quando terminarmos de adicionar tudo. Vamos adicioná-lo aqui, que será para cada adjacente. Jogue. Isso consertou um pouco nossas coisas. Temos uma porta aqui, temos uma porta aqui, mas temos uma CDL aqui, que é o problema que detectamos antes Acho que há uma certa direção nisso. Talvez não tenhamos colocado o puxador correto. Ou foi? Oeste oeste leste oeste. Portanto, esse sed que deveria ser fácil não tem a etiqueta e falha corretos. Uma coluna novamente, e agora está consertada. E se apertarmos play, portas e portas. Pensar porque esmagou, não salvou nada. O gerador H, as portas não salvaram a adição aqui. Eu o adicionei novamente. É por isso que devemos sempre economizar constantemente. Agora temos dois, apenas um por corredor Se ela ficar bem. Parece correto. C aqui. Este é um corredor aqui. Temos portas em todos os lugares. Agora, todos os nossos labirintos e salas estão conectados entre si e jogador pode navegar por todo o labirinto e por todas as Agora, já que terminamos com as portas, vamos aumentar nossa carga. Top, e eu vou copiar essa coisa aqui, base. Digamos que 85 são muitos. Isso também é quatro loops. Novamente, são muitas ações. Agora, qual seria nosso próximo passo na construção de nossa masmorra? Bem, nosso próximo passo seria descobrir as paredes externas, quais paredes são externas e quais paredes são internas. Então, com isso, quero dizer que essas paredes aqui são quando estamos esquecendo E essa e essa são paredes internas, enquanto essa ou essa é uma parede externa. Queremos que os internos os transformem em alguns adereços, algumas cruzes, algumas mesas, algumas cadeiras, alguns punhais, uma grande quantidade de adereços que basicamente bloquearão bloquearão Mas todos eles, alguns deles, podemos viver como eles são. Vai ser aleatório. Vá para fazer isso. Vamos ao nosso gerador de labirinto. Vamos interromper a jogabilidade e criar uma nova função que chamaremos de vento de paredes externas, que na verdade descobriremos que a interna também era, mas sim, é um bom nome. Não. Novamente, a primeira coisa que precisaremos são todas as coordenadas de nossa masmorra E nós vamos pegar as chaves. Claro, vamos sair deles. Para cada loop. E vamos encontrar a cruz adjacente a cada uma. E vamos pagar um loop para cada loop a partir da cruz adjacente. Agora, o que queremos é perguntar se a cruz adjacente faz parte da masmorra Então, vamos conter, perguntar se ele contém o mapa. O mapa será nossa masmorra. E vamos colocar um galho. Então, vamos começar a lógica de quando nossos vizinhos, nosso vizinho não está dentro da masmorra, é uma parede externa na direção do vizinho, é uma parede externa Para fazer isso. Vamos precisar das paredes, basicamente. Não, entenda. Desculpe, encontre a pilha correta, que é o ladrilho que estamos examinando Não é o vizinho. É o ladrilho que estamos examinando. Essa é a mais importante porque o vizinho não é válido. Vamos pegar as paredes. Como uma matriz para isso. Paredes. Não há matriz para isso. Me desculpe Eu quis dizer que precisamos da criança. A decoração tem as paredes, não o azulejo. Então, precisamos de uma criança. Vamos comprar decorações. Nós vamos ter um filho. E vamos converter as decorações em puro molde. E nós vamos ter paredes, e agora temos as paredes. Mas além das paredes, também precisamos da direção. Então, temos esse S EW, e precisamos ativá-lo , para encontrar o switch. Essa é a opção oposta. Podemos fazer isso do lado oposto aqui. Aqui. Eu conecto isso. Isso deveria ser norte, deveria ser sul, deveria ser leste e sul oeste. Aus, no momento, não queremos o oposto. E vamos atravessar cada parede. Vamos escolher o galho falso porque é quando ele não pertence à masmorra E vamos fazer uma matriz. Não. Para promovê-lo a variável. Clique em promover variável, executando essas paredes externas. Desconecte isso e traga as paredes externas. Vou adicionar essa parede. Vou criar outra matriz das direções de tipo. Então eu dou tapinhas em todas as direções. Vou fazer a montagem da parede interna. Além disso, vou adicionar essas informações. Apenas no caso de precisarmos. Talvez queiramos manipular. Talvez queiramos mudar a malha estática de todas as paredes. Talvez queiramos mudar alguns deles. Talvez faça uma aleatória, que mude algumas delas para uma forma que produza va, e então verificaremos se essa parede está em um ladrilho que está em uma área especial ou em uma área isolada, onde temos os blocos de lava. De qualquer forma, acho que esse é um bom ponto de parada. É assim que obtemos as paredes externas e continuaremos na próxima com um pouco mais de código aqui e adicionando mais alguns recursos visuais. Adeus por enquanto. Te vejo na próxima. 46. Decorações de parede: Olá, e bem-vindo de volta ao Game Design Workshop, rail Engine five, Procedural Dungeon action at Ps creation course Anteriormente, na última lição, terminamos com as portas da área do corredor Na verdade, copiamos e colamos as portas individuais e apenas mudamos algumas coisas. Na verdade, uma coisa. Usamos o conjunto de portas para adicionar portas ou cada uma delas descobrir adjacentes em vez de correr quando terminamos por todos os corredores Também iniciamos a função definida das paredes externas. Na verdade, fundamos todas as paredes externas e as direções delas e as adicionamos a uma lista. E, como dissemos, continuaremos adicionando mais alguns elementos visuais ao nosso labirinto Oh, nós vamos para a nossa pilha. Vamos até nossa janela de exibição e vamos tentar esconder essa lacuna terrível aqui. Faça isso. Vamos apenas clicar em uma parede. Vamos apenas adicionar arroz estático. Malha. Na verdade, não precisávamos clicar em uma parede. Precisávamos clicar na raiz. Então, não fazemos dela nenhuma raiz, apenas tocamos nela. Essas paredes devem ser irrelevantes para as outras paredes. Eles não deveriam ser crianças. Eles deveriam ser filhos da raiz. Agora, para essa malha estática, vamos para vegetação como vegetação É, é vegetação demoníaca. É um pouco compensado. Vamos redimensioná-lo. Na verdade, faça a rotação também. Vamos colocá-lo em algum lugar aqui, talvez um pouco na frente. O que queremos é apenas esconder essas linhas aqui. Oh, nós fazemos isso um pouco, talvez o bloqueio seja 1.1. Isso um pouco mais abaixo. Esse fato faz com que a parte seja mais chicoteada, mais grossa. Eu estarei mais perto da linha, então talvez até no topo da linha. Sim. Ele. Vamos copiar e colar. Vou mudar a rotação? Um. Novamente. quão preciso é você decidir quando fica bem, é o visual mínimo, então não teremos muito tempo. Elementos visuais. Certo? Acho que é bom o suficiente. Agora, vamos dar a eles algumas etiquetas. Então esse lado é o Leste. Então, este E, este lado, Norte-Sul. Então tem um S. Neste lado oeste. W, e esse lado é. Tudo bem. Agora, vamos ao nosso gerador Ms e às paredes externas finas. Como temos as partes externas, podemos apenas usar nosso ladrilho aqui Não precisamos fazer as decorações porque agora estamos em azulejos Podemos, precisamos fazer isso para obtê-lo e tentar novamente. Selecione isso. Nós pedimos, não fomos para. Não tenho certeza de como é essa idade. Não é West. O. Ok. Agora, escolha todos eles. Vamos ao roteiro. Vamos trazê-los, criar alguns valores e promover uma variável. Vamos ligar para eles em D também para medir o lixo. E a forma como mantemos o mesmo erro. Então, isso aqui, vamos voltar à minha geração e deixar isso de lado. No final. É e nós vamos e vamos fazer no final. As paredes, vou colocar o jogo em falso. Vou voltar para um azulejo, todos eles novamente e montar um jogo escondido. Verdadeiro. Agora, se jogarmos, não veremos nada porque essa função não está sendo executada. Então você sabe, a broca. Agora temos nossa folhagem, mas a temos em todos os lugares. Então, a razão é que eu simplesmente coloquei tudo como oculto, não é? O que queremos fazer é obter a direção de e para essa string. Vamos. Adquira este ano, como fizemos anteriormente em muitas coisas. Vou colocar o galho aqui. E se for verdade, mostre apenas a folhagem. Agora está correto. Nossa maça tem folhagem É muito mais. É por isso que vou relacionar isso. Vai ficar bem. Terminamos com esse detalhe. O próximo detalhe que devemos fazer é trocar as paredes internas por paredes de um tipo diferente. Oh, para fazer isso, vamos voltar ao nosso gerador principal. Vamos até nossa filial. Em nossas paredes de saída. As paredes, na verdade, nosso verdadeiro galho. Não, nossas quedas. Isso significa que isso pertence à masmorra, e vamos fazer outra pergunta Se pertencer à masmorra, talvez também seja um quarto Porque se for um quarto, não queremos mudar a parede. Queremos ter as paredes da sala. Não, vamos trazer os quartos, todas as chamadas de sala, que é um endpoint, e vamos ver se ele não contém isso, não os vizinhos, mas esse elemento, que é a chave que estamos testando Então, essa é a chave de um quarto. Se for um quarto, não fazemos nada. Se não for um quarto, vamos recuperar nossas paredes que temos aqui. Nós vamos para o F. O muro, que é um quarto. Vamos colocar a parede correta na direção, então devemos copiar isso. Escolha um nó. Ou aqui. Isso é conectá-lo ao índice da alça de forragem que se conecta à cruz fina adjacente E vamos para um Cs u e esses dois e conectamos isso aqui e selecionamos uma ramificação. Agora, é claro, o que faremos é definir a malha estática. Para a malha estática, seremos ect a partir de um número inteiro aleatório no intervalo O que seria de zero a três porque temos algumas coisas extras. Uma seria essa mesa combinada, eu acho. Isso é muito pequeno. Este A de 1938, três, quatro, use este Em seguida, combinado 9d57 47a7. Tenho certeza de que comemos mais. OK. Aqui estamos combinados 0d44 Lembre c17. E vamos usar a parede combinada real que temos. Então, deles será apenas uma parede. Agora, uma coisa extra que fazemos aqui, mas explicaremos mais tarde, quando chegar a hora, é que quando estamos no jogo e nosso personagem está por trás de alguma coisa, devemos ser capazes de ver uma figura de nosso personagem. E para fazer isso, vamos brincar um pouco com a profundidade do átomo e o valor, basicamente chamado de renderização de profundidade personalizada Então, não vamos falar muito sobre isso agora. Falaremos sobre isso quando chegar a hora, mas devemos habilitar as opções agora para que não precisemos voltar. Quando estamos em paredes internas, queremos ver basicamente a parte inferior do nosso personagem, e alguns dos ativos são um pouco mais altos, então, através deles, nosso personagem Se fizermos isso, obteremos o eu estático. Vamos definir a profundidade personalizada da renderização. Verdadeiro. Vamos conectar isso aqui. Além disso, queremos definir o valor do sencil. Acho que zero. Caso contrário, verificaremos depois. Quando chegar a hora, retornaremos e alteraremos esse valor. Agora, se eu pré-compilar e jogar, temos nossas caixas Temos nossas outras caixas aqui, as paredes internas ficaram um pouco mais interessantes. E nossa masmorra tem alguns adereços. Alguns deles estão um pouco sobrepostos, e notei que isso acontece também com os cantos de algumas paredes Talvez precisemos empurrar as paredes um pouco mais para fora. Mas acho que também está bem. O que poderíamos fazer para corrigir esse problema é ir até nossas decorações e o local, por exemplo, isso em x, seria quatro oh cinco, talvez Sim, este, quatro e cinco. Essa. Por quê? Eu fiz esse. Para. Talvez isso resolva um pouco. Que diabos. Sim, a esquina não está mais visível. Aqui é igual ao de madeira. Tudo bem, está bem. Hetils, acho que se brincarmos com os valores, podemos descobrir algum valor que seja melhor para tudo Mas, por enquanto, continuaremos construindo nosso gerador M. Há muito a ser feito. Continuaremos na próxima. Vamos ver você então. Adeus. 47. Ajustes de seta direcionais: Olá, e bem-vindo de volta ao cinco procedimentos de criação de Dungeon Action Apes do Game Design Workshop procedimentos de criação de Dungeon Action Apes Anteriormente, adicionamos nossos visuais maravilhosos dessas plantas aqui ao redor de nossos quarteirões E finalizamos o código para adicionar, tornando-os visíveis quando estão nas bordas, quando estão no perímetro das paredes externas, e na verdade mudamos os adereços nas paredes internas, também para ser uma variação absoluta dos adereços Agora, neste, o que vamos fazer é, e eu vou apertar play para mostrar isso. Precisamos consertar as setas do perímetro. Isso significa que algumas setas aqui estão corretas, outras não estão Nesse caso, quase tudo estava correto. Então, aqui, por exemplo, temos uma seta que aponta para aqui, mas na verdade podemos acessar por aqui. E isso não aconteceu muito neste, mas é um problema. Não devemos ter flechas apontando para lugares que não podemos ir Nós consertamos isso. Vamos criar uma nova função que percorrerá todo o labirinto e testará alguma colisão com o traçado de linha Então, sabemos se não pode ou não ir. Como essa é a forma final do nosso dg, o layout não mudará mais. Então, vamos criar uma nova função. Vamos chamar isso de coisas. Aros. E, na verdade, nesta função, vamos fazer algo diferente. Bem, quase diferente. A maneira como vamos manipular nossas variáveis, para mudar nossas setas de direção Criaremos uma matriz de ouro e uma direção ária e, como isso corresponderá entre elas, na verdade também uma matriz de pontos Seremos capazes de definir as direções independente de quantos estão errados em um empate Basicamente, é um pouco a mesma coisa que estamos fazendo sempre de uma maneira diferente. Portanto, não se trata de otimização ou não no momento. Trata-se de mostrar técnicas diferentes. Oh, vamos obter nossa variável de masmorra. Vamos pegar nossas chaves. Só chaves. E vamos fluir por cada um deles? Porque vamos percorrer toda a masmorra e encontrar vizinhos adjacentes E vamos acompanhar cada um deles também. Assim aqui. Aí vem a primeira pergunta. Esse vizinho pertence à masmorra? R: Vamos perguntar se estava contido? O calabouço E se não for, criaremos uma variável local, uma variável de buling, que será uma matriz Eu vou ligar, digamos que esses touros. E quando não estiver , adicionaremos quedas, é claro, falsas porque não contêm a masmorra, então não há acesso a ela Do falso. Se for verdade, vamos nos basear por canal. Vamos configurar para a câmera, não para a visibilidade. Para o local de partida, precisaremos do vizinho. Então, vamos encontrá-lo na masmorra. Um local. Na verdade, vamos adicionar um pouco de altura Z, S 25. Este é nosso começo e nosso fim é o bloco atual que estamos verificando. Vou conectar isso aqui. Fizemos isso antes, mais uma vez. Eu só vou colar. Conecte-se aqui, e esse é o fim da nossa tatuagem de linha. Vamos nos ramificar. Eu quero trazer isso aqui. Leia em voz alta. Aqui fora. Isso vai ser da filial dupla. Se atingiu alguma coisa, então, novamente, não temos acesso, então esse b será de Se não atingirmos Eu não acertei, vá continuar. Essa é a principal diferença, não é? Não. A próxima coisa que precisamos são as coordenadas. Mas vamos criar outra matriz. Todos esses pontos ou portas ou qualquer outra coisa. Será do tipo em pontos. Ok. E então vamos adicionar algo a partir de galhos ou paredes. Realmente não importa, porque todos eles precisam, mesmo que seja falso, precisamos das coordenadas para desligar isso. E as coordenadas seriam o bloco que somos, o bloco que estamos verificando. Agora, por fim, precisamos da direção. Vamos adicionar outra matriz. Eu chamo isso. Ereção. Vamos apenas colocar um tipo de ereção eletrônica, e vamos adicionar a necessidade de selecionar Vamos copiar o select de outro lugar. Nós o temos aqui. Encontre um externo. E vamos conectar o índice disso para cada loop para os vizinhos? Porque com base nos vizinhos, temos nosso nordeste sudoeste. Agora, essas são as três variáveis. vez, essa é uma maneira diferente de fazer isso, mas temos uma lista de bions, uma lista de pontos e uma lista de direções Não. Como vamos fazer com que cada bloco defina suas direções apropriadas? Do jeito que o configuramos agora, não tínhamos direções únicas, mas muitas em uma matriz. Isso significa que em cada bloco, estou correndo quatro vezes a linha. Isso significa que cada bloco produzirá quatro vezes o mesmo ponto final, mas corresponde a quatro direções diferentes e quatro booleanos diferentes Então, vamos fazer isso. Quando terminarmos tudo isso, vamos chamá-lo a partir dos quatro primeiros ciclos. Vamos ligar para outros quatro. Opa. Vamos conectar nossos pontos finais aqui. Dessa forma, é um pouco mais simples. Acho que são mais ações do que outras formas. De qualquer forma, vou pegar nossa masmorra para pegar nosso ladrilho Bem, encontre o ator selecionado, o ator armazenado, que é o bloco, e obteremos as direções. E vamos adicionar. A propósito, vamos adicioná-lo, é muito, muito simples. Vamos obter nossa variável de bions, e vamos obter nossa variável , nossas variáveis de matriz, bulions e direções, e obteremos uma cópia delas E porque eles correspondem ao nosso índice de matrizes, desconectando os índices aqui Um pequeno penhasco. Está tudo bem. E então totalizaremos o RoS. Essa seria a função de corrigir todas as nossas direções. Nós o conectamos. Agora, eu não tenho, é claro, eu não tenho. Fixe as setas. Compile e salve Vamos jogar e agora as flechas estão corrigidas. Cada direção que devemos ir tem uma seta, cada direção que não podemos ir. Ele não tem uma flecha. Ótimo. Eu acho que é isso para este. Te vejo na próxima. Tchau 48. Como esconder flechas de depuração e criar tochas: Olá, bem-vindo de volta ao workshop de design de jogos e cinco procedimentos do Real Engine RPG de ação Anteriormente, terminamos com nossa função de setas fixas. Na verdade, usamos uma maneira diferente desta vez. Armazenamos vários pulions e vários pontos e direções, matrizes correspondentes e nosso sistema de rastreamento de linhas, se há um E quando terminamos isso, analisamos nossos pontos e fizemos com que todos os nossos atores fizessem as alterações correspondentes. Agora, meio que terminamos com a parte informativa da indução com o gerenciamento de dados e tudo Uma última coisa pode ser esconder todas as flechas. Então, vamos ao nosso bloco BP. Vamos ao nosso gráfico de eventos clique com o botão direito do mouse e crie um evento de tempestade. Vamos dar um nome a esse evento. Esconda todas as flechas. A partir daqui, vamos pegar nossa seta norte, vamos pegar nossa seta leste. Vamos pegar nossa flecha e flecha oeste. Na verdade, devemos obter o número do bloco também porque queremos esconder isso. Não, vamos configurar e conectar tudo a ele. E o novo oculto será verdadeiro. Agora, vamos verificar se temos na decoração, algum texto. Acho que não. Não precisamos esconder nada aqui. Vamos compilar. Salve e compile. Sempre salve e compile É a terceira vez que isso acontece. E estamos de volta e vamos compilar, salvar e compilar, sempre salvando e compilando, porque no caso de travar, deveríamos ter Agora, o que vamos fazer é voltar ao nosso gerador de labirinto, criar uma nova função, essa Vamos pegar nosso labirinto. Desta vez, obteremos os valores porque os valores são os blocos, e vamos para o loop. Para cada loop, e vamos chamar flechas. Então, agora, vamos chamá-lo no gráfico. Flechas. Sem retrocesso e compilação. Vamos jogar. E precisa esconder crianças. Além disso, propague para crianças, isso ocultará as renderizações de texto que estão dentro das setas Vimos WS e tudo ficou, e agora temos mais uma visão do jogo Vamos apertar a luz. Finalmente chegou a hora de ver a luz. Agora, não vamos começar com o sol porque primeiro devemos iluminar o labirinto, porque se eu começar a brincar com a visibilidade do sol agora e configurá-lo para, tipo, um Então, quando estivermos olhando para o labirinto, não veremos muita coisa Tudo bem, mas vamos deixar em um por enquanto, está mais escuro do que deveria ser Certo. O que vamos fazer agora nesta lição é começar a iluminar nosso labirinto com algumas luzes personalizadas que respondemos Vamos até a pasta Blueprints. Vamos clicar em, criar uma nova pasta. Vamos chamar essa pasta de adereços. Vamos entrar nessa pasta. Na verdade, podemos mover o elevador também aqui, e podemos mover o baú grande também aqui. E podemos mover a introdução da BP também aqui. Então, para a geração do labirinto, na verdade, esses são os três blocos necessários, e o resto deles são adereços que estão fazendo coisas por nós Então, clicaremos com o botão direito do mouse novamente e selecionaremos a classe de impressão. Vou selecionar Ator. Vai ser a varanda da BP. Isso vai ser uma tocha. Abra, ancore-a aqui Vamos precisar de uma missão inicial. Vamos precisar de uma luz pontual. E, claro, precisaremos de um sistema de partículas. Para o sistema de partículas, vamos usar cascata porque nossas partículas são cascata para E é isso a partir dos componentes que precisamos. Eu vou para a missão estática. Vou escolher uma varanda. Vou selecionar o I can see porque é Esta é uma tocha grande, é uma tocha pequena Vou selecionar este tubo de cama de fileira. Fileira seja um tubo. Tudo bem? Agora, onde está aqui. O que precisamos é colocar a partícula na malha estática, caso ela se mova junto Eu não vou fazer o mesmo com a luz pontual, então eu vou fazer o mesmo com a luz pontual também E vamos selecionar primeiro o sistema de partículas. Vamos usar o modelo. Queremos o fogo P. É um pouco grande. São quatro. Certo? Mude a caneta de direção. Sim. Eu percorro 92 eixos. O que eu acho que é o tom. E então eu vou para a luz pontual. Na verdade, vou deixar assim porque mais tarde vamos criar um código para fazer parecer que está piscando, etc. Por enquanto, etc. Por enquanto, só queremos adicioná-lo ao nosso esterco, nele em nossa masmorra Vamos voltar ao gerador Mz e criar uma função Vamos chamá-lo de luzes P. E agora vem a pergunta: onde colocamos essas luzes O lugar onde vamos criá-los é próximo às portas, como esquerda e direita, ou um deles, ou nenhum deles Algumas portas podem não ter luz. Então, vamos precisar da fratura do quarto. Então, eu vou pegar o quarto S. Vou arrumar um quarto. E a partir daí, eu vou parar. E com isso, eu vou parar. A partir disso, vou dar uma volta. Então, fazemos isso para cada coordenada de sala. Agora, o que precisamos é encontrar o ator antes de tudo. Para isso, precisamos de nossa masmorra. E desse ator, nós realmente precisamos de nossas decorações. O ator realmente recebe decorações. E a partir disso, vamos obter e, a partir disso, vamos para as decorações Cust Eu vou fazer disso um pó puro. Isso. Agora, decorações F, nós realmente precisamos criar T, alguns pontos de cena Vamos ver nossa planta de decorações. Vamos para nossa janela de exibição. Vou fechar as setas aqui e adicionar uma cena que, como você pode ler, é apenas um componente que tem uma transformação que pode ser anexada ou anexar outros componentes também. É apenas um ponto, basicamente, um ponto que podemos definir. Eu vou eleger a cena, e vou movê-la para cá. Talvez para a esquerda para a direita. Só para esta, vou mudar isso para uma porta Para descobrir isso, vou selecionar a cena novamente, ou quase corrigir. Vou colocá-lo aqui, talvez aqui. Tudo bem. Vou copiar a cena, duplicá-la. Precisamos de uma cruz, e isso vai marcar a parede leste. Esta seria a parede leste A. Esquerda. Então EW L, e isso seria es, tudo bem. Agora, vamos mudar isso para o que era. Devo selecioná-lo aqui, encontrá-lo no navegador, deixar para trás na parede e arrastá-lo e soltá-lo aqui. Tudo bem. Eu vou pegar as cenas. Eu vou duplicá-los e vou movê-los de um lado para o outro. Eles estão na posição certa. Eles são. Quando desovarmos, seremos melhores. Vou dar um nome a isso. Ou um. Este será o W W L one. Eu vou fazer o mesmo para o norte e o leste. Eu vou adicionar. Para movê-lo até aqui. E vou verificar o deslocamento no outro, que era 140, enquanto o próximo era 145 Tudo bem se eles não forem simétricos porque alguns deles serão gerados, outros não serão Vou selecionar novamente o original, não é? Aqui está. Vou colocar 140 aqui. Vou duplicar, coloca 45. E eu vou nomear isso de norte. O rebocador. Isso é o sul. Então esta é a parede sul, esta parede esquerda. Vou duplicá-los. E eu vou e esta será a primeira parede à esquerda, que na verdade é oposta. Essa é a correta. Esse é o esquerdo. Também aconteceu isso W. O outro W L. Não que isso importe, mas por que não? Oh, eu vou compilar e salvar, e vamos deixar isso aqui para este Vamos fazer uma pausa e continuar na próxima. Adeus. 49. Luzes de tocha gerando: Olá, bem-vindo de volta ao workshop de Design de Jogos e ao verdadeiro curso de criação de ARPs Procedural Dungeon Action do Engine Five ARPs Procedural Dungeon Action Anteriormente, começamos com nossa função Lights Maze. Criamos o início do algoritmo, quais salas pesquisamos e como obtemos as informações delas. E também adicionamos alguns pontos reais ao nosso projeto de decoração para fixar as Ao mesmo tempo, também escondemos nossas flechas e criamos a planta da tocha Agora, vamos continuar. Vamos ao nosso gerador de labirinto e vamos às nossas luzes funcionais do labirinto Talvez antes disso, vamos fazer outra tarefa tediosa novamente. Vamos acrescentar algo mais aqui porque eu sei que não é o melhor, mas não é o melhor momento, mas temos que fazer isso. E essa tarefa tediosa é adicionar força às cenas. Não. Essas são as cenas do norte. Então, vamos puxar cada etiqueta. Nós vamos adicionar. Como você pode ver, posso selecionar os dois e vou adicioná-los aos dois. Vou selecionar os do Sul, vou adicionar um rebocador, vou selecionar S. Vou selecionar os do leste, adicionar o rebocador E, e os do oeste no rebocador elegem W. Tudo bem, a tarefa estudiosa é voltar às coisas mais interessantes Agora, como podemos saber onde está a porta? Se você se lembra, se colocarmos em nossas paredes um A, e partirmos de cada uma delas para um loop. Podemos pegar os rebocadores. E podemos verificar se ele contém o item, que na verdade diferencia maiúsculas de minúsculas. Então, quando adicionamos esse puxador às portas, como o adicionamos Vamos encontrar essa função, que estaria dentro das decorações a e era D O R. Então, vamos aqui, D 00 R. Agora, D 00 R. não precisamos saber exatamente onde está a porta, qual direção ou qualquer outra coisa Podemos apenas verificar qual porta tem uma porta de etiqueta. E a partir disso, porque sabemos que o primeiro rebocador é nosso nordeste sudoeste Podemos obter P de zero, que é o primeiro puxão. E então precisamos de um conjunto de luzes. Então, vamos voltar às decorações. Mais algumas tarefas tediosas. Vamos selecionar todos eles. A ordem não importa, já que vamos com rebocadores, acho que são todos eles. Vamos fazer uma matriz. Copiar. Ele é esse. Operações. E eles são oito, então está correto porque quatro lados, dois em cada, oito, promoverão essas duas lib Ts, ou talvez slots de luz de porta, porque podemos adicionar mais, quem sabe? Vamos compilar e salvar. Vamos voltar ao nosso gerador de labirinto e, a partir de nossa decoração, obteremos slots de luz nas portas Eu vou para cada um. Se for t, se contiver a porta, vamos usar o componente ug rebocador, na verdade, o componente tem um puxão, que será o puxão zero da nossa porta Eu vou para a filial, o circuito da enfermaria. E agora, porque precisaremos girar a luz porque a luz tem uma certa rotação própria Poderíamos usar um sistema elaborado com traços de linha e/ou coordenadas em negrito Mas não, o que vamos fazer é digitar os valores por conta própria, e o que corresponde à rotação correspondente. Porque temos apenas quatro rotações, basicamente. Cada um. Então, o que vamos fazer é mudar com base na etiqueta de nome. E isso é somente quando isso é verdade. Teremos quatro casos. Vou remover o pino de execução, e os casos seriam nossas instruções. Tudo isso seria norte, sul, leste e oeste. Salve, salve e compile. Agora, vou criar uma variável local personalizada, ou seja, luz, e ela será do tipo rotador Em seguida, vou configurá-lo para que cada um deles seja Southwest. E os valores são -90 para o norte, 0490 para o sul, zero para o leste e 180 para Então eu vou colocar um galho porque, como eu disse, alguns deles terão luz, alguns deles não terão luz, e eu vou fazer, e vou dar aula de ator. Vou dividir a colher vou conectar a podridão luminosa Para a rotação. E para localização, precisamos apenas da localização, a palavra localização da nossa cena. Então, vamos obter a localização e conectá-la aqui. E devemos selecionar a classe, a classe seria tocha Mais uma coisa que precisamos é algo que não usamos há muito tempo Precisamos que os atores destruam. Vamos adicionar a essa lista as luzes, porque quando criamos um novo labirinto, as luzes realmente têm um desempenho caro Então, vamos excluí-los. Vamos jogar. Vamos ver o que, na verdade. Vamos adicionar essa função no final dessa linha. Luzes do labirinto, e agora podemos ir jogar. E injete, e temos luzes. Eles estão muito longe. Alguns deles estão muito longe, outros não. Isso deve acabar. 70, eles também são grandes. Vamos voltar às decorações. Digamos quais são os pontos que eles são. Isso deveria ser 370 estava bem, eu acho, 370 isso -70. Isso parece interno. Fora, vamos torná-los um pouco menores primeiro. Então, vamos até a desova deles, na verdade. Não precisamos torná-los menores aqui. Podemos simplesmente torná-los menores, general. Quando o macho se acende, quando os geramos, reduzimos a escala 2,5 55. Vamos verificar novamente como eles se parecem. Eles são um pouco baixos e estão um pouco distantes. Não podemos ver o parente aqui. Não podemos ver o parente daqui. Claro, não podemos, vamos precisar usar as decorações e, na verdade, usar os valores aqui Vou colocar 20, o outro molhado. Coloque tudo em “T”. Este é “20”. Qual era o sul sul, acho que estava muito longe. Sim, por 20. E este também é o 20.Es, não tocamos em falso . Há muita coisa dentro Talvez devêssemos mudar tudo aqui para 30. 160 facilmente com baixo, então é 81 25 ou 30 ou 25280, está tudo bem E o outro? São cinco. Essa é a pior tarefa tediosa. Há maneiras melhores de fazer isso. Mas isso é o que escolhemos agora. Consertamos tudo, tudo está consertado e a água do sul. Tudo bem. Compile e salve, e vamos testar novamente. Eu acho que isso é muito bom. Mesmo que sejam um pouco, talvez 425. Se você quiser, pode alterá-lo para 425, talvez caiba um pouco melhor, mas acho que não ficará visível Então, eu acho que é isso para este. Eu vou te ver em seguida. Adeus 50. Efeito de cintilação da tocha: Olá, bem-vindo de volta ao workshop de Design de Jogos e desenvolva cinco Cs de criação de APs de ação do Procedural Dungeon APs de ação Anteriormente, adicionamos nossas tochas ao nosso labirinto. Criamos o código em luzes de labirinto para gerar nossas luzes. Usamos a matriz de paredes para obter a etiqueta do componente, se for norte, sul ou oeste. Também verificamos se a parede é uma porta porque, se não for uma porta, mostramos outra luz. E usamos algumas rotações de luz predefinidas e, com base na proibição de um branqueador, em um bilião, geramos nossa E então adicionamos atores para destruir. Nós discutimos um pouco onde está e como está , desculpe, a planta errada, as decorações, por meio de nossa planta de decorações, por meio de nossa planta de decorações, e usamos os pontos da cena Agora, vamos realmente brincar um pouco com a luz. Ah. Na verdade, vamos até nossa tocha BP Dave, porque não está salvo. Na verdade, salve tudo. E vamos para o nosso ponto de luz. Agora, tenho alguns valores em mente que testamos e como eles ficam no labirinto Eu vou usá-los. A intensidade seria de 258o4. Então, 25.804. E o raio de atenuação seria dois ou 37437. Agora, nossa cor de luz seria de x linear F F 58 47 FF. Agora você pode escolher a luz que quiser, mas para nós funcionou E vamos fazer com que o passeio de origem use 30. E vamos desmarcar sombras projetadas. Portanto, é um pouco mais ideal. Se você quiser, se o seu computador puder lidar com isso, você pode deixar isso ligado. Não vamos otimizar as luzes para ficarem invisíveis quando estivermos muito longe. Nós apenas deixamos isso para o motor fazer o que for necessário. Mas o que faremos é interpretar o criador trêmulo. Vamos começar a jogar e vamos adicionar uma linha do tempo Com quem você pode conversar com as luzes. Quem é a Rainha com as luzes? Foi Barbadi? Foi imbo? De qualquer forma, apenas uma referência de South Park, não importa. Oh, o que é um cronograma? Em resumo, seria uma ferramenta com a qual podemos manipular variáveis durante um determinado período de tempo Como fazemos isso? Bem, clicamos duas vezes na linha do tempo e podemos ver que ela tem algumas opções O que usaremos é a trilha de um carro alegórico. Os caminhões de vetores e pistas de eventos e faixas coloridas. Mas o que precisamos é de um carro alegórico. Agora, neste caminhão, vamos deslocar e clicar e criar alguns pontos. Débito. Acho que são pontos suficientes. Então, nosso primeiro e último ponto , então o tempo zero deve ser o valor zero. E usaremos o tempo atual, que é cinco, e o manteremos lá, então, quando cinco, o valor será novamente zero. Há outras opções aqui, mas a opção de que precisamos é a opção de loop. O que significa que, quando nossa linha do tempo for reproduzida, ela será reproduzida repetidamente, seja o que for Não. O que é essa trilha de fluxo que criamos nesses pontos. Então, esses pontos são basicamente nosso drive Alpha, o que significa que eles nos darão um valor de 0-1 Não devemos ir acima de um e dois menos um. Mas não deveria ser esse ponto. Vamos mudar esse ponto. Vamos ter dois pontos baixos. E então vamos dar uma volta e colocar as luzes, outros pontos, fazer com que pareça que está divagando, mesmo que não esteja, não sei se isso parece bom Na verdade, não precisamos ter um e menos um, e podemos ter em qualquer lugar que quisermos, mas se colocarmos valores altos e severos, isso aumentará exponencialmente a luz, etc Não, talvez esteja tudo bem. Talvez não seja. O que vamos fazer é selecionar todos eles clicar com o botão direito do mouse e usar a função automática, que os curvará um pouco. Portanto, não será instantâneo. Vamos deixar como está e verificaremos quando concluirmos nossa codificação aqui Então, vamos pegar a luz pontual e vamos acender a luz. Também vamos definir a intensidade. E vamos definir também a atenuação definida Essas são as variáveis que mudaremos na linha do tempo, que é uma maneira meio pesada de fazer isso Mas para nós, tudo vai ficar bem. Não temos muitas coisas em nossa masmorra. Oh, este é o retorno da nossa nova faixa. Nós não sentamos, estamos nele. O nome e o nome de Alpha. Esta é a nossa luz Alfa. Vamos deixar a cor linear, vamos deixar e, na verdade, outra flutuar O que é um b? A er pisa do valor A vai para B com base em um Alfa Unidade alfa que criamos. Conectado. Aqui, aqui. E agora vamos clicar em uma cor, que na verdade podemos copiar na luz pontual. Eu apenas perto da luz pontual, copio aqui e colo. Agora, para o segundo, vamos clicar nele e digitar o F F O. Com mais laranja. Podemos trocá-los mais tarde, se não parecerem bons. Vamos ver. E pela intensidade, estamos na verdade superando esses 25.000 Parecia muito, para ser honesto. Então, vai passar de 5.000. Eu também coloquei a luz 5000-6 mil. E do set no raio de inclinação 600-800. Na verdade, eles estão substituindo nossas configurações aqui. Portanto, esses devem ser os valores corretos. Vou colocar 600 aqui. Vamos compilar e salvar. Vamos jogar, como eles se parecem. Muita mudança. Muita mudança. Então, vamos voltar para nossas luzes. Essa cor está muito distante. Vamos escolher um próximo a esse. Talvez o cancelamento laranja baseado aqui. Vamos ver, não. Fica um pouco amarelo demais. Também é um pouco rápido demais. Mas está tudo bem. Acho que está tudo bem. Se quiser, você pode combinar com os valores e fazer com que pareçam melhores. Agora, mais coisas que podemos fazer nesse estilo neste modelo seria acessar a malha estática e desativar a geração de eventos de sobreposição porque não precisaremos Desligue completamente a colisão. Nós não queremos isso. E pelas luzes, acho que é por causa desse tipo de luz porque agora vamos adicionar outras luzes. Deixe-me te mostrar. Temos essas luzes maravilhosas aqui, mas precisamos estar surgindo no labirinto dos corredores Então, primeiro de tudo, vamos criar um esquema para adicionar essa mese estática. Vamos ver o conteúdo. Vamos ver plantas, vamos ver adereços, clicar com o botão direito do mouse e criar um novo tipo de ator de classe de projeto e chamá-lo de BP Vou abrir isso e adicionar uma malha estática, que será a luz do corredor Vamos encontrar a malha. Nós acabamos de chegar lá. Eu vou usar isso, e nós temos nossa luz. Agora, para torná-lo mais bonito, vamos adicionar algumas coisas Vamos adicionar mais cinzas estáticas, que não serão uma lanterna. Vamos chamar isso. Escudo. E vamos adicionar mais. Ela. Vamos chamar esse tipo de outra malha estática. Vamos chamar isso ou deixar de ser pai porque é paternidade Vamos chamar isso de posto terrestre. Para o escudo, acho que o chamamos de escudo. Eu vou trazê-lo aqui. Eu vou escolhê-lo, e depois vou trazê-lo para cá e vou mudá-lo. 2,5 porque é muito grande, talvez um pouco maior. 7,7 é cinco. Tudo bem. Vou aumentar um pouco. Agora vamos trazer as espadas. Vamos escolher o método estático. Espada Ford, tire-a. Deve estar aqui. Aqui está a arma. Vou adicioná-lo aqui. Também vamos colocá-lo em 2.7. Gale gire um pouco. Vou trazê-lo aqui. Desista. Se eu estiver aqui, vou pegar a segunda espada. Um pai. Eu não coloquei a arma de malha. Novamente, 0,7. Vou girá-lo um pouco Eu não quero isso no chão. Vamos colocar dessa forma. Para adicioná-lo aqui. E no gráfico de vm no início do jogo, vou trazer uma referência para cada um deles. E eu vou ver. Jogo ou cada um deles separadamente. Vou conectá-los. Cada um deles em um jogo oculto, e eu vou fazer um. Agora, o que é uma sequência? Uma sequência, é uma forma de organizar um pouco nossas ações. Mas temos que observar que, mesmo que diga zero, depois um, depois dois, isso não significa que os executará Ele os executará em ordem, mas não esperará que uma execução termine. No momento em que ele executa o primeiro, ele executará o segundo e, em seguida, executaremos o terceiro. Não esperará que a execução termine. Repito, porque se eu tiver alguma matemática aqui, por exemplo, digamos que a linha três esteja precisando deles, então a matemática provavelmente não será concluída quando a linha três for executada No novo oculto, vou selecionar o aleatório b. Então, cada luz terá uma combinação aleatória desses adereços visíveis Eu acho que é isso para este. No próximo, vamos adicioná-los no mapa. Tchau por enquanto, eles se importam. 51. Sistema de luz de corredor: Olá, bem-vindo de volta ao Game Design Workshop e real de criação de RPG de ação procedural Engine Five RPG de ação procedural Na lição anterior, adicionamos nosso modelo de luz do ridor. Nós o criamos. Adicionamos a malha estática da luz, do escudo, da espada, do tipo dois. E no início, jogue. Também criamos alguns códigos para tornar alguns dos adereços visíveis, alguns deles invisíveis. Vai ser aleatório. Também adicionamos uma função com uma linha do tempo, desculpe, na tocha BP, no início da reprodução, um pequeno código para jogar com a luz de Então parece um bando ou algo assim. Agora, vamos continuar adicionando as luzes do nosso corredor ao labirinto Ah. O que vamos fazer é primeiro eliminar as regras simples e depois fazer algo mais complexo. Oh, vamos precisar dos corredores, do conjunto de estruturas Então, são os corredores ST. Ok, vamos para cada volta a partir daí. E a primeira coisa que precisamos é quebrar a estrutura. Então, temos nossas coordenadas. De nossas coordenadas, precisamos saber se esse comprimento é maior que um. Porque se for um único ladrilho, não devemos adicionar uma luz. Não vai ficar bem. Agora, como não sabemos quantos blocos existem, o que podemos fazer é fazer quatro loops, não um para cada loop, mas um loop de quatro com o último índice, como o último índice do quatro loop. Então, por mais que tenham, esta é a última vez que você executará esses quatro loops. Mas essa seria nossa primeira parte. Estamos pegando as salas dos corredores, as coordenadas de qualquer corredor, quantas são, e estamos verificando se são mais de um, e se são mais de um, queremos dar uma volta de zero até A próxima coisa que devemos verificar é se há uma sala especial atual. Então, vamos perguntar se nossas coordenadas de posição atual dentro de nossas salas especiais. Agora, para fazer isso, vamos copiar as coordenadas que queremos. E a maneira como vamos fazer isso é usar esse índice, que vai de zero ao último índice dessa matriz. Mas isso corresponde corretamente. Não vai acontecer se contiver um item de matriz, que é a sala especial. Azulejos especiais. Essa seria a telha do elevador, aquela seria a telha da caixa, a telha do baú, e isso seria. Esses são os slots. Basicamente, não queremos gerar uma luz Não. Agora é hora de uma regra um pouco mais complicada. Deixe-me abrir a tinta. O que teremos é, digamos, em nossa grade, um labirinto Vamos ver se geramos uma luz aqui. O que fazemos é criar uma caixa ao redor dela. Pergunte, há alguma luz nesta caixa? Na verdade, antes de gerá-la, perguntaremos: há alguma luz nesta caixa Porque se há uma luz nesta caixa e estamos aqui, não deveríamos estar gerando oito. Então, isso nos ajudará a espaçar um pouco melhor como nossas luzes vão aparecer em nosso labirinto Então, vamos fazer isso. Vamos ver como vamos fazer isso. Vamos usar algo chamado de linha de base múltipla, caixa múltipla para Vamos ligar para falar sobre a primeira diferença. Não o múltiplo, mas a caixa entre o traço e a caixa A caixa é como a caixa de colisão. Os traços podem ser feitos em esferas, caixas, forradas. E até podemos criar algumas formas personalizadas com um pouco de esforço. Mas, por enquanto, vamos usar uma caixa. E o que é a parte múltipla? Isso significa que ele pode fazer muitas coisas e mantê-las em uma lista. É por isso que nossos aquecimentos de saída são de um tipo array. É um contêiner de matriz. Não, por onde começamos? Basicamente, vamos tirar o ator daqui, então vamos encontrar na masmorra Gin map, então obtemos o bloco atual que estamos testando. Vou conseguir a localização do ator. Esse tipo de local de guerra do tipo Dan. O motivo é que, quando obtemos a localização do ator, ela está sempre no mundo, porque o ator faz parte do mundo, quando obtemos de um componente, queremos a localização da guerra ou em relação à localização do ator, porque um componente pertence ao ator, o ator pertence ao mundo. Uma maneira de definir o início aqui, e esse também será o fim porque não vamos movê-lo. Basta pegar um carrapato, verifique o que está ao redor. 00 a metade do tamanho, vamos usar os valores 800, 801 Sua orientação está boa. Visibilidade, vamos verificar a câmera, e é basicamente isso para nosso rastreamento de várias caixas Agora, a partir dos nossos resultados de aquecimento, vamos para cada um. Mas antes de continuarmos, precisamos criar uma variedade local, que será do tipo banido. Vamos ligar para isso. Eu vou ser do tipo b. Vamos trazê-lo aqui e girá-lo antes de começarmos o loop. Agora, o que vamos fazer é quebrar nosso resultado de calor, cada um dos nossos resultados de calor porque essa matriz de sal, estamos quebrando cada um deles. O que vamos fazer é ir até o aquecedor e solicitar a aula. Nós vamos ter aula. E vamos verificar se sua classe é igual às luzes do nosso corredor Branch, corrija isso. Vou colocar isso aqui. Traga isso pequeno para cima. fechar isso para que pareça um pouco melhor. E agora, se for um corredor, então vamos acender a nota luminosa encontrada Isso realmente poderia funcionar com uma pausa, cada uma com uma pausa, porque é uma ação que, quando encontramos o que procuramos, deveria estar quebrando Não, vou conectar isso ao intervalo. Do falso, não precisamos fazer nada. E quando estiver concluído, vamos para o ônibus. Na verdade, precisamos de uma filial aqui. Caso contrário, isso não fará nada se não usarmos uma ramificação. Vamos trazer a luz, mas encontramos. Se isso for verdade, vamos primeiro verificar, vamos escolher a luz. Minha luz, luz de pad. E então vamos adicionar luzes. Não funciona assim, mas precisamos fazer com que os atores as destruam e adicionem. Nada do que geramos deve permanecer no mapa. Agora, para transformar, vamos dividir isso e conectar a localização do nosso ator. Agora, adicionamos as luzes. Vamos vê-los em nosso jogo. Eles não existem ou algo não correu bem. Vamos dar uma olhada. Vamos para nossa função. Os corredores. Eles são maiores do que um, sim, ou loop mais índice disso, e se pertencerem a blocos especiais, se não pertencerem a blocos especiais, sempre as pequenas coisas. Agora, eu vi luzes que são pequenas. E vamos consertar isso. Vamos pressionar Stop. Vamos até as luzes do nosso corredor e vamos aumentar essa altura para duas Vou mover o escudo novamente. Talvez meu fosse o correto ou do tipo também. Vou colocar isso aqui. O outro tipo. Coloque isso aqui, guarde um. Vamos compilar e salvar. Vou jogar. Essas luzes parecem. Parece bom. mover um pouco de espada, mas tudo bem Este tem duas espadas. Este tem um escudo, mais ou menos. Buracos. Por que cada três buracos Espere dois. B é aleatório e pode acontecer. Talvez possamos colocar algum galho no segundo tipo. Conecte essa bola aleatória aqui, para tornar a segunda espécie um pouco mais rara. Compile e salve, diminua um pouco as solas também. É muito alto. Tudo bem. Meu Deus, acho que está tudo bem porque eu vi isso um pouco redondo. Vou aumentar um pouco. Incline um pouco mais Queremos menos. Acho que o chão, mais baixo, pode ser bom, talvez não. Não vejo, não sabemos. As luzes. Então, parece bom. Quero dizer, vamos ser pi com vista, então quase tudo bem. Sim, eu acho que eles estão bem. Mas a única coisa que falta é a luz. Então, vamos adicionar a luz. Vamos ver a planta. Vamos até o poste de luz porque eles serão filhos do poste, e eu vou pressionar adicionar Vamos selecionar luz pontual. Esta é uma luz pontual enorme, vamos trazê-la aqui na lâmpada e vamos alterar as configurações para lúmens e reutilizar o gs 500 E a cor deveria ser para o 97 A. Parece bom. Agora, o rádio de atenuação deveria ser. 800 e o raio da fonte 50 e o raio suave até E vamos deixar as sombras projetadas porque acho que está tudo bem Agora, vou duplicar essa luz e movê-la para cá com as duas luzes acesas Vou compilar e salvar e vamos ver. Eu. Temos alguma iluminação em nosso labirinto, começando a ficar mais viva, mais parece um nível de jogo Certo. Eu acho que é isso para este. Eu vou te ver na próxima. Tchau. 52. Mecânica de armadilha e sistema de danos: Olá, e bem-vindo de volta ao Game Design Workshop Real Engine Five RBC do Game Design Workshop Real Engine Five Procedural Tangent Action Anteriormente, adicionamos algumas luzes em Armas. Na verdade, adicionamos todas as luzes, Mae. Hum, eles são um pouco quadrados porque estão projetando sombras. Mas eu prefiro deixar as coisas assim, em vez de não projetar sombras ou colocá-las em vários voos Poderíamos combater isso colocando uma luz pontual em cada lado, ou de outras formas. Mas, por enquanto, vamos deixar assim porque vamos adicionar mais algumas coisas. Vamos adicionar um pouco de neblina. Vamos adicionar efeitos de pós-processamento. Então, depois de tudo isso, podemos verificar como consertar as luzes. Agora, o que vamos fazer é acessar nosso gerador de labirintos e é hora de começar a trazer uma skin especial. Então, vamos criar uma função. Vamos chamar esse dono do adereço. Vamos ao gráfico principal e chame-o. . Agora, lembro quando eu disse que quando estivermos construindo o elevador, não vamos adiá-lo Vamos para o nosso elevador, para estar aqui. Vamos cortar isso a partir daqui. Vamos até nosso posponer e colá-lo. Também precisamos fazer o mesmo com nosso peito. Venha aqui. Eu vou pegar esses nós, vamos cortá-los, controlar C e colá-los com o controle V. Agora. Vamos criar um adereço que exibiremos na maioria das peças da masmorra Nós vamos desovar em corredores, e isso vai ser uma armadilha Então, quando o jogador pisar nele, seremos danificados. Vamos acessar nosso conteúdo. Vamos até nossa pasta de blueprints e nossa pasta prop, clicaremos com o botão direito do mouse e criaremos uma nova que se chamará BP p. Agora vamos abri-la. Para isso aqui. E antes de continuarmos com nossa armadilha. É a primeira vez que precisamos realmente tocar um pouco em nosso personagem. Então, vamos ao conteúdo. Vamos até o topo, vamos até plantas e abriremos nosso personagem PP de cima para baixo E só precisamos fazer uma coisa muito simples. A mesma coisa que fizemos com puxões nas paredes, precisamos fazer com o componente cápsula do player Então, selecionaremos o componente da cápsula, examinaremos seus detalhes e acessaremos os rebocadores E adicione a tag ou o player. E por que fazemos isso? O motivo é porque, por exemplo, digamos que, para o nosso jogador, teremos um ataque eu, eu, eu. Acho que é uma pronúncia correta. Então, teremos um ataque de mim. E esse meu ataque geraria uma colisão. Seja como for, queremos verificar o que está dentro do nosso ataque mental. Não vamos fazer isso, vai ser um ataque mágico. Não haverá uma espada que possamos usar com ela. Mas mesmo que fosse uma espada e pudéssemos balançá-la E se a espada tocasse o chão? Isso desencadearia uma armadilha? Não, não queremos que isso aconteça. Então, queremos poder perguntar: a cápsula real do jogador tocou nessa colisão Então, fazemos isso através do rebocador? Poderíamos verificar a transmissão para o player e pegar a cápsula e depois comparar o outro componente com a cápsula? Vamos demonstrar isso. Vamos para nossa armadilha. O que é o projeto? Aqui está. No final das contas, deveria estar aqui. Não. Para todas as armadilhas, precisaremos de uma colisão E eu vou usar uma colisão de caixa. Pois, vamos deixar assim. O visual mudará com base em nossas medidas, e vamos até a colisão da caixa e escolher a sobreposição inicial Não. Não examinaremos tudo, mas examinaremos os dois pinos que usaremos, o outro ator e o outro componente O outro ator se refere ao ator que começou a se sobrepor à caixa E isso significa, como expliquei, que incluiria o ataque de maio se fosse incluído em nosso player. Se eu desovar, vamos colocá-lo aqui, veja uma colisão. Digamos que eu o tenha aqui para verificar se há muitos ataques. Agora, se por algum motivo, por exemplo, aqui, fosse o gatilho acionaria a armadilha se eu perguntasse se o outro ator é o personagem de cima para baixo com um elenco, por exemplo Mas o que fizemos ao adicionar essa tag aqui, o P, é a desse nó, outro componente, o que significa qual componente do ator que se sobrepõe a mim se sobrepôs Se fosse a esfera, teria essa etiqueta P. Se fosse a cápsula de colisão, desculpe, não a esfera, seria a etiqueta P. Ela teria a etiqueta P. Podemos perguntar como ug Se tiver a tag P, podemos fazer o que quisermos. Agora, o que queremos para o personagem pegar o outro nó de ator. Mas, no nosso caso, vamos explicar um pouco como nossa armadilha vai funcionar. Deixe-me trazer dor. É hora dos desenhos incríveis. Deveríamos colocar músicas temáticas aqui ou algo assim. De qualquer forma, temos nossos destinos de armadilhas em algum lugar aqui no corredor, e temos nosso jogador que está Quando ele pisa na armadilha, queremos ativá-la Então, os passos na armadilha. Vamos chamar isso de duplicata primeiro. Ódio. Certo? Oh, quando o jogador pisar nela, vamos chamar isso de Fase um. Em seguida, isso é ativado. Agora, na fase dois, vamos aplicar o dano, que será ativado, mas atacando ou talvez deva ser maior e depois Não importa. A propósito, isso diz ataque. Não estou reconhecendo a palavra olhando para ela, mas ela diz ataque Então, devemos perguntar se o jogador ainda está na armadilha ou se não está na armadilha Se ele ainda estiver colidindo. Então, se ele estiver colidindo, vamos danificar o jogador Se ele não estiver colidindo , não danificaremos o jogador Então, se eu fosse, vamos voltar ao nosso evento para nosso evento sobreposição de colisão Se eu saísse quando ele estava sendo atacado, então se eu conectasse o outro ator, eu teria uma referência direta ao outro ator Então isso significaria qualquer ataque do outro ator . Então eu preciso de um cheque. O ator está realmente interessado em mim ou não? Há muitas maneiras de fazer isso. Na verdade, poderíamos dizer uma sobreposição final e manter uma referência a isso e quando terminamos a sobreposição, limpando essa referência Mas eu gostaria de demonstrar outro nó. Se eu pegar a caixa, pergunte ao ator sobreposto. Eu poderia filtrar a turma para ficar de cima para baixo. Ator, eu poderia obter uma referência direta, como se eu pudesse pegar a primeira cópia e perguntar, digamos, por exemplo, aplicar dano. Eu aplicaria dano a esse ator. Mas vamos usar personagens de cima para baixo também para a IA. Na verdade, neste caso, usaremos uma cópia e colagem. Não vamos usar uma criança, mas se fosse uma criança, havia uma chance de que isso desencadeasse o ator novamente. Então, na verdade, teríamos que fazer um loop. Se, por exemplo, fosse um jogo multijogador e quiséssemos que o caminhão danificasse apenas o jogador original. Precisaríamos fazer um primeiro loop e verificar se esse é o ator nosso jogador. Oh, receberemos um sinal de igualdade. Precisamos converter primeiro porque isso retorna uma referência ao objeto ator. Mesmo que estejamos filtrando nossa classe por meio de nosso personagem de cima para baixo, isso ainda retorna um a, um ator geral Oh, precisaríamos lançar dois jogadores ou um personagem caído. E então podemos, se isso for igual ao nosso jogador ligado, por exemplo. E então precisamos lançar a partir daqui também. Isso pode ser um elenco puro. Na verdade, ambos podem ser um elenco puro. Não há razão para eles não estarem na filial. Também poderíamos ter um puxão ou outra coisa, como se tivéssemos uma variável aqui, um bullying que pudéssemos pegar e verificar se o bullying Poderíamos puxar até a lagoa em si. Há muitas maneiras de fazer isso. Esse também é um deles porque tem dois casos, mas isso pode ser feito e não afetará muito nossa jogabilidade, porque não é tão complicado. Agora, o que precisamos fazer ou concluir isso é realmente conectar esse elemento da matriz ou obtê-lo do elenco. Realmente não importa aplicar danos. E o que é dano aplicado é apenas uma mensagem que o real envia para qualquer objeto, basicamente. É um sistema que a Epics nos forneceu. Agora, o dano básico deve ser um. E acho que explicamos muito nesta lição, e devemos conectar tudo isso e incluir tudo na próxima. Adeus por enquanto. Até a próxima. 53. Animação de armadilha e SFX: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco cursos processuais RPG de ação em Dungeon Anteriormente, começamos a criar nossa armadilha. Vamos para uma armadilha. E adicionamos uma colisão de caixa, e também adicionamos que ligamos da colisão de caixas que iniciam o evento de sobreposição Nós doamos a sobreposição. E perguntamos se o componente que está tocando a armadilha era a tag P. Agora, dissemos algumas coisas sobre sobreposição e como podemos obter uma referência ao personagem, obter os atores obter Esse foi o nó importante em que podemos obter a qualquer momento os atores sobrepostos E então fizemos um teste pesado para verificar se é nosso personagem. E se for nosso personagem, aplicamos algum dano com um nó predeterminado que Anil precisa aplicar, uma mecânica que pode Claro, podemos criar nossa própria mecânica, mas por que não cuidar disso Aproveite isso. Talvez eu não cuide disso. Aproveite. Oh, agora, se nossa armadilha foi ativada, vamos ver o gatilho desta vez Não gostaríamos de ativar novamente para causar danos instantâneos ao jogador repetidamente. Então, vamos criar uma massa variável. Vamos chamar isso de acionado. Vamos trazê-lo aqui. Eu poderia usar uma ramificação bk depois disso se p fosse acionado, mas vamos facilitar um pouco e colocar o bion final Se for acionado, se tiver o componente P lá. Se o componente que nos toca tem o rebocador P e não está acionado, então precisamos de um aqui Não, faça outra coisa, não faça nada. Não. A primeira coisa que devemos fazer é dizer que a armadilha foi acionada Mas agora podemos começar uma contagem regressiva quando ele atacará, quando a armadilha soltará o gatilho e atacará, basicamente Vai ser uma armadilha de espinhos, então vai empurrar um espigão para Vamos colocar um som de aviso. Vamos fazer um som para que o jogador saiba que a armadilha foi acionada Agora, o som seria, vamos usar libras. Aqui está. Eu não verifiquei isso. Quão alto é, então os usuários de fones de ouvido avisam Isso soa como a maior parte, em um p aqui. Isso é um som que não é exatamente um som, que é basicamente uma classe que permite que você faça algumas manipulações no som Agora, depois que o som for reproduzido, imediatamente após o momento em que o som começar a ser reproduzido, não espere que o som termine. Vamos fazer um atraso. Até acionarmos nossa armadilha. Vamos colocar zero ponto y. Sejamos generosos com nosso jogador. E depois, precisaremos criar um evento personalizado. Vamos chamar isso de acionado, acionado, retirado do bastão, ou ataque A está bem. Depois disso, atacaremos. B se não fosse uma armadilha para lagoas e estivéssemos saindo, poderia ser uma armadilha de flecha, por exemplo, atacar é bom Ambos estão atacando. Não vamos sentir um ataque agora. Continuaremos com essa lógica para finalizá-la. Vamos colocar isso mais longe. E depois do ataque, vamos tocar o som do ataque ou antes do ataque, será mais lógico, ou ao mesmo tempo. Assim, poderíamos colocar uma sequência e dizer: primeiro toque o som e depois ataque. E depois do ataque, vamos conectar nosso plop aqui para pegar o ator sobreposto e aplicar E você sabe o que, vamos redefinir também nossa armadilha e criar outro evento personalizado Vamos chamar isso de reversão. Então, depois de danificarmos o jogador, ou se não houver nenhum jogador causando dano a ninguém, vamos adiar. Digamos que 5 segundos. E depois de 5 segundos, vamos rearmar a armadilha. Então eu vou ligar de forma invertida. Por que eu chamo a reversão. Porque para o ataque, usaremos uma linha do tempo para reproduzir uma animação E com base nessa linha do tempo, vamos revertê-la e reinicializar Mas antes de começarmos com nosso código de linha do tempo, precisamos de algo para animar porque a linha do tempo será usada para animar a armadilha e nosso dano será causado e nosso A animação seria uma coisa separada. Então, vamos para nossa janela de visualização e vamos para medidas estáticas Duplique isso. Todo esse corpo. Vamos chamar isso. Espigões. Vamos encontrar nossas malhas s, que devem ser as malhas de pastas Eu realmente me pergunto qual seria o nome desse. O think tube Find Spike. Corpo da armadilha, vá pegar o tubo da armadilha. E para espinhos, vá até o tubo de armadilha sete. Certo? Como você pode ver, ponto de articulação deles está correto desde o início, como se nossa localização padrão do ator estivesse no meio dos picos, exatamente aqui em direção ao topo Então, eles crescerão um pouco do solo porque vamos criá-los um pouco do solo porque vamos criá-los no Isso significa que o solo estará neste lugar aqui. E os picos estão aparecendo um pouco, o que é incrível Agora, o que vamos fazer é obter nossos picos no evento de início de jogo Vamos obter a relativização, que significa obter a localização com o sistema de coordenadas desse projeto Não em comparação com o mundo, em comparação com esse projeto Mas quando os movemos relativamente ou obtemos uma localização em relação, estamos falando sobre essa entidade aqui, esse projeto, todos os x Y e Z desse projeto, e distâncias com base nesse centro desse projeto, esse Agora, vamos voltar. Vamos promover essa variável. Ele o nomeou perfeitamente para nós. Poderíamos ter especificado os picos, mas está tudo bem. Agora, vamos adicionar uma linha do tempo. Você precisará nomeá-lo, e vamos nos conectar novamente para jogar desde o início e reverter para vers ferment Na versão final , vamos mudar com base na direção em que a linha do tempo está indo À medida que entramos, à medida que mudamos para o sudoeste, essa é novamente uma mudança baseada na enumeração Essa é uma enumeração de dois valores para trás, e vamos conectar não a data, mas o final mas E quando estiver invertido e terminar, vamos desligar. Vamos desligar o gatilho Vamos desligar o Então isso significa que nosso caminhão pode ser reativado. Lembre-se de que a reversão é executada 5 segundos depois de tentar danificar o que estava nela Agora, jogamos a linha do tempo, vamos inserir a linha do tempo, vamos adicionar um caminhão, vamos adicionar um caminhão de fluxo E vamos colocar dois pontos. O primeiro estaria em zero valor zero, e o segundo estaria em 0,2 e de valor um. Vou clicar nesses dois Zoom para sentir a horizontal e a vertical e tornar nossa linha visível. E desta vez, como você pode ver, escolhi um valor menor do que nosso comprimento de cinco segundos. Agora, eu poderia mudar esse 2.2, mas posso usar apenas o último quadro-chave, que significa que ele usará o último ponto que eu datei Se eu tivesse mais caminhões , levaria o último ponto de mais tempo Agora, vamos voltar para a NRA. E aqui precisaremos adicionar um código muito simples para obter nossos picos e essa ação relativa Vamos apenas aprender do valor A ao B em um novo local. Vetores, e o A seria nossa localização relativa, a original O B seria que podemos realmente codificá-lo. Vamos selecionar os picos e, a partir do relativo, isso é zero, zero, zero, basicamente Queremos ir 20, 30, 30 seria oito. 30 aqui. Vamos conectar o Alpha ao nosso novo caminhão. Agora, a próxima coisa que devemos fazer é realmente possuir as armadilhas Eles estão bem, estão trabalhando. Ainda não temos um personagem, mas nossas armadilhas podem nos prejudicar Mas acho que isso é algo pelo qual vamos viver na próxima vez. Você é o adeus. 54. Função de Spawner de Prop: Olá, bem-vindo ao Game Design Workshop real engine five Procedural Dungeon Action PZ Anteriormente, terminamos com nosso evento de início de volta de componentes. Verificamos se a armadilha foi acionada e, se for nosso personagem, dissemos que a armadilha seria acionada se não fosse acionada , tocamos um som, esperamos, tocamos outro som e reproduzimos a animação do ataque E esquecemos de verificar se o jogador ainda está na armadilha Usamos uma linha do tempo para animar os picos dos componentes, que é uma matemática estática que adicionamos e a matemática estática da base da armadilha E usamos a localização relativa definida para mover os picos por meio do alerta e de nossa linha do tempo Também usamos uma chave que, quando a linha do tempo está invertida no evento de reversão, ela deve configurar a armadilha de que ela não seja Agora, vamos voltar ao nosso labirinto e montar nossa armadilha. Primeiro de tudo. Vamos precisar das coordenadas da nossa masmorra. E, na verdade, também precisaremos das chaves. Na verdade, vou obter os valores. Eu também. Vou até as chaves e os valores, e vou promover isso para duas variáveis, variáveis locais. Vou chamar isso de masmorra. Este, promova-o também para Dungeon Value. Antes de continuarmos, vamos falar um pouco sobre como nossa torneira funcionará. Nossa armadilha, nós só precisamos da armadilha, nós só precisamos da O primeiro passo seria examinar as coordenadas de nossa masmorra Então, vamos percorrer nossa masmorra. Azul desta vez. Eu não sei por quê. Então, vamos examinar as coordenadas da nossa masmorra. E vamos criar algumas regras para verificar se ele pertence aos blocos que queremos. Basicamente, o que queremos verificar é se é um quarto ou se é um quarto especial. Então não progrida. Não crie a armadilha. Aqui. Não crie a armadilha Então, o que vamos fazer? Isso, vamos chamar isso novamente de fase um. Coisa incrível, desenho. De qualquer forma, então, o que vamos fazer é criar uma função que levará um de nossos blocos às coordenadas, temos as coordenadas e sabemos que, se tivermos as coordenadas, podemos obter nosso ladrilho. Mas vamos pegar nosso azulejo. E para esse ladrilho, vamos obter a localização do piso. A partir desse local, vamos criar uma caixa. Porque se nosso ladrilho for esse, existe uma distância em que não queremos que uma trilha seja gerada, porque digamos que se ela aparecer aqui, o caminhão poderia ser assim E não queremos que isso aconteça. Portanto, essa extensão deve levar isso em consideração. Esta caixa que vamos criar usando, veremos quando a criarmos. Então esse é um dos motivos. Há muitos motivos, mas o único problema com esse sistema no momento é que, se criarmos uma armadilha e ela colidir com outra, consideraremos consideraremos Digamos que seja uma armadilha maior. Isso é o que podemos. É um recurso. É um recurso. Isso cria armadilhas maiores Então, sim, o único problema com isso é que isso pode ser criado. Existem maneiras de combatê-lo, como podemos verificar se, quando a armadilha aparecer, eu colido com Se eu colidir com outra armadilha, então me destrua. E então podemos ir até esse gerador de armadilhas e dizer menos um para as armadilhas que você gerou dizer menos um para as armadilhas Claro, isso também requer algo que eu não expliquei. Teremos um sistema que vai de zero a armadilhas MC geradas E nesta parte, as armadilhas MC que vamos gerar, vamos usar uma Vamos usar uma variável chamada nível do gerador, que será quantas masmorras geramos em Então, se isso for, por exemplo, um, poderíamos gerar no máximo duas armadilhas Se for dois, poderíamos gerar dois mais um, então no máximo três armadilhas ou agora mais mais três, então é igual Sim. De qualquer forma, isso é basicamente o que vamos fazer. Nós até isso. Criaremos esse sistema para poder usá-lo com vários elementos, não apenas com as armadilhas Talvez queiramos criar o total, mas talvez queiramos expandir isso adicionando algumas moedas de parafuso, por exemplo, ou uma bolsa ou algo que apareça aleatoriamente, e que também possa aparecer em uma armadilha Então, usaremos esse sistema, usaremos essa função para criar um sistema capaz de gerar o que quisermos com base no nível do gerador de geração e em algumas regras que criaremos Agora, vamos fazer isso. Abaixe isso. E a etapa de pressionar, como dissemos, é que vamos criar algumas regras para nossos raps especificamente quando queremos que eles os gerem, porque as regras de quando estamos gerando o item são uma parte diferente da função, mas apenas explique a função que geraremos neste lugar Porque se gerarmos, por exemplo, moedas, talvez queiramos regras diferentes dos lugares em que estamos gerando Então, a primeira parte é para o nós, quando temos o nós, a segunda parte é quantos e localmente onde os geraremos. Então, novamente, precisaremos de quatro loops para cada loop. Vamos pegar nossas chaves da masmorra e perguntar se essas chaves estavam contidas Com uma matriz, vá duplicá-la aqui. A primeira seria as coordenadas da sala. Coordenadas de uma sala. Não queremos isso em nenhum quarto. Só queremos isso do lado de fora em corredores, varandas, áreas especiais e não áreas especiais Desculpe. A segunda seria áreas especiais. Portanto, não queremos isso ou nenhum dos . Se não os quisermos em cada um deles, precisamos de um. Vamos pressionar uma filial, conectar este ano, conectar este ano, fazer isso aqui, e está desleixado, mas Temos nossa regra de não aparecer em blocos especiais ou coordenadas de salas Agora, precisaremos do nosso ladrilho, como dissemos, e para obter nosso ladrilho, essas duas matrizes correspondem uma à outra Se eu apenas obtivesse nossos valores e obtivesse p e usasse o índice desses quatro loops. Vou obter um índice válido, o índice correspondente do endpoint até o ator Agora, vamos criar nossa função e vamos chamá-la de telefone. Dois adereços. Você sabe, adereços interativos, adereços personalizados, algo assim O que precisaremos para entrada é uma variável chamada adereços Max Max Será do tipo inteiro, e precisaremos de uma variável de destino, que seria o bloco, seria o bloco PPP. Este é o ator que vamos usar para obter todo esse ator do t, porque estamos recebendo isso de fora. Se eu usar a flecha. Você pode ver, esse é um bom recurso do SO. Se eu passar de uma função para outra função, e eu só quero voltar e não me lembrar onde estou. Posso usar essa seta aqui, e ela me leva à seleção anterior, ao ponto anterior. Oh, o que eu queria dizer é que vamos obter esse alvo, esse valor daqui. E conecte-o aqui. Agora, por fim, para podermos gerar qualquer coisa, precisaremos de uma nova entrada E desta vez, será do tipo ator. Mas não será uma referência, será do tipo de referência de classe, o que significa que posso dizer qual tipo de ator de classe eu quero. Eu vou demonstrar isso. Vamos usar isso para gerar algo. Então, quando estamos gerando, a partir da classe, eu posso realmente inserir uma classe aqui, mas vamos definir isso exatamente do tipo de classe que eu quero Agora, antes de responder o ator, é claro, precisamos de algumas coisas extras. O que vamos fazer é criar uma variável local aqui. Vou chamar esse contador e número inteiro. O motivo é que, com esses adereços Mx, podemos usar o contador e os adereços Max, criar um Portanto, se o contador for igual aos nossos adereços x, pararemos Se não for igual, então vamos abranger. Agora, a próxima coisa que precisamos é de onde somos pequenos? Precisamos de uma localização. Aqui, obteremos a localização do nosso ator, que é a localização da maré. E agora temos que criar nossa caixa. O que usaremos é uma função pura chamada ponto d na caixa delimitadora. Isso significa que em um ponto desta caixa coordena-se com metade do tamanho sendo a metade do tamanho da caixa. Aqui, vamos usar 300300, O Z, vamos deixar como está Vou conectar isso. Para ser honesto, vou adicionar um pouco de altura. Por segurança nossas armadilhas estão um pouco mais visíveis Vou adicionar um vetor, vou adicionar um cinco aqui. Isso cria uma caixa de tamanho 600 basicamente porque nossa metade do tamanho é 300, mas não leva em conta o que falamos. Talvez vamos torná-lo um pouco menor. Vamos fazer com que caiba. Acho que nossa armadilha tem 100 comprimentos. Não tenho certeza de como verificamos esse material m3d. Eu não posso trazê-lo para o mundo e recontar caixas aqui porque a caixa, eu acho que está bem agora, está configurada para cinco, então eu disse para dez, um, dois, três, quatro, cinco, seis, sete, oito, é oito. Está tudo bem, está bem. 250 está bem. E agora nossas armadilhas não aparecerão nas bordas Existe uma opção automática para substituir o tratamento colegial. Por exemplo, sempre desovando, nem cosanos, tentam apenas colocalizar, mas sempre desovam Não podemos usar para ajudá-lo. Tentamos ajustar a localização, mas sempre geramos. E isso criará um espaçamento um pouco melhor. Agora, por fim, precisamos continuar essa função, mas acho que isso é algo que vamos deixar para a próxima vez A única coisa que precisamos mudar agora é apenas uma vantagem na otimização. Vamos para a armadilha da BP. Vamos até nossa caixa e vamos ver os detalhes das colisões Vamos selecionar uma colisão personalizada. Vamos optar por ignorar tudo, exceto o pom. Essa colisão só é acionada quando um poema se sobrepõe, colide com ele e todo o resto é ignorado colide com ele e todo o resto é ignorado. Eu acho que é isso para este. Eu vou te ver na próxima. Adeus. 55. Projeto de decoração de sala: Olá, bem-vindo ao Game Design Workshop, real de criação de RPG de ação em Engine Five Procedural Dungeon RPG de ação Anteriormente, começávamos com nossa própria função de adereços e continuamos armazenando o mapa do Dungeon como uma chave e um valor Em variáveis locais. E então continuamos com as regras de onde criar nossas armadilhas E começamos a criar a função que gerará adereços personalizados Usamos as entradas, os adereços máximos, o bloco de VP alvo e a classe que queremos gerar Criamos um contador em nossa função, no qual, na verdade, vou desconectar esse e apenas o máximo adereços porque simplesmente não gosto de ver a linha e, a partir daqui, vamos desconectar esse tipo mais a parte inferior, e aqui, vou apenas mirar E a razão pela qual posso fazer isso de novo é porque isso é uma função e os valores de entrada, podemos simplesmente chamá-los de variáveis. Agora, depois do contador, quando for verdade, vamos parar, não fazer nada, para que a função esteja completa. Antes disso, no falso, estaremos gerando nossos atores Agora, verificaremos se o ator é válido. Caso, por algum motivo, não seja. Ela não aparece, mesmo que criemos, tentemos nos ajustar e ainda colidir Se tivéssemos que tentar ajustar a localização, não telefonar se ainda estivesse colidindo , precisaríamos disso Mas se tentarmos ajustar a localização, mas sempre desovar, na verdade não precisamos disso Mas caso você queira experimentar, deixaremos que isso seja válido aqui porque, da forma como as colisões estão sendo tratadas aqui, elas precisam de um pouco nas plantas e com o que estão colidindo e como. Oh, queremos O que faremos é adicionar nosso ator que responde, nossa armadilha que criamos para que os atores destruam a Então, precisaremos encontrar a lista. Aqui está, e vamos adicionar o ator colher. Se for válido. Se não for válido, terminamos com isso. O que fazemos a seguir é promover a adição ao nosso contador mais um. E também precisamos definir o contador. Lembre-se de que o controle é para definir. Caso queiramos fazer a colher em uma panela se ela estiver colidindo, queremos experimentar isso mais tarde queremos experimentar Vamos apenas adicionar uma nova variável e vamos chamá-la de y e trice E vamos aumentar isso também mais um. Adquira também. Depois de cada adição, a ordem realmente não importa. Agora, vamos nos conectar a partir do não é válido aqui. Vamos adicionar às regras originais or ou b. E obteremos o trie plus Há o máximo aqui, aqui. Na verdade, não é mais, meu erro é maior do que os adereços Mx multiplicados Basicamente, varre duas vezes. Ele tenta adicionar o dobro dos adereços Mx caso os adereços não estejam sendo gerados Porque nosso primeiro contador conta quantos eles são gerados Nosso segundo contador X mostra como surgiu algo Porque depois de um ponto, como, digamos, por exemplo, no labirinto gerado ou no nível 25, esse número pode estar um sistema que não aparece quando está colidindo Estaria gerando cinco armadilhas em um ponto, por exemplo, ou não poderia se espalhar, na verdade, quando não estivesse colidindo, não conseguiria aparecer Pode haver tantas armadilhas que não seria possível gerar mais Então isso se tornaria infinito e bloquearia nosso carregamento. Isso vai parar por aí e nunca mais continuar. Basicamente, destrua nosso jogo. Então, depois disso, vamos conectar isso aqui, no início da ramificação, no início da ramificação, e ele completará nosso loop com uma contra falhas de duas vezes o número de nossos adereços Mx Agora, vamos chamá-lo em nossos adereços de Spooner. Vamos trazer adereços constantes para o filho. Vamos conectar isso aos postes. Acho que sim, porque se for nosso coordenado ou se for um ladrilho especial, não queremos que algo aconteça. Queremos quando não está. Agora, vou conectar os valores da masmorra ao alvo, que são nossas pilhas, as matrizes correspondentes Para a aula, vou selecionar a armadilha. Uma tropa. Vamos fazer os adereços Max. Agora, vamos criar uma nova variável. Vamos chamá-lo de nível de ator. Temos um nível de gerador? Ladrilhos, Tamanho máximo do labirinto, . Não, nós não temos. Então, devemos ter um nível de gerador, e vamos trazê-lo aqui. Agora, vamos fazer com que também e exponha no spawn, para que possamos progredir quando gerarmos Então, deixe-me lembrá-lo novamente, precisamos voltar ao menu principal, ir ao nosso gráfico. Compile e salve o mapa, salve e compile o labirinto primeiro, vá para o menu principal e só isso Labirinto. Agora temos o nível do gerador. Vamos começar do nível um. Vamos voltar ao nosso labirinto. Com esse nível de gerador, vamos adicioná-lo, digamos, mais um. Simplifique: o primeiro nível tem duas armadilhas, o segundo nível tem três e continua e continua Vamos demonstrar o que criamos. Vamos começar. E vamos subir. Aqui estamos. Uma armadilha aqui, uma armadilha aqui, a mistura De cima, não saberíamos muito bem o que saberíamos, mas vamos escondê-los com pouco de neblina e iluminação extra qualquer forma, vamos continuar fazendo alguns adereços para nossos quartos porque, no momento, iluminados, eles estão um pouco vazios Vamos realmente mostrar isso. Vamos às nossas decorações, vamos selecionar nosso teto e definir a visibilidade Para ser um jogo de visibilidade, desculpe, oculto. Acho que isso não vai esconder isso. O. Dissemos que era um jogo oculto de visibilidade, então agora podemos ver o que está acontecendo dentro de nossos quartos. Agora, se não tivéssemos essa luz de enfermaria, os quartos estariam muito escuros. Além dos adereços, precisamos jogar relâmpagos também nos quartos E desta vez, vamos criar outra forma. Não vamos adicionar isso da maneira que fizemos com esses adereços, com as armadilhas Vamos criar outra forma de fazer isso. Portanto, temos muitos exemplos de como preencher blocos basicamente em nosso labirinto Para isso, precisaremos de um novo modelo. Vá para adereços. Vamos clicar, criar uma nova classe de blueprint, digitar actor, será BP, room, Agora, vamos criar os adereços desta sala. Vamos até nosso gerador de labirinto. Na verdade, vamos interromper a jogabilidade. E da totalidade do nosso circuito pelo forte. Vamos apenas copiar isso para cada loop. E para a matriz, vamos escolher todas as ordenadas da sala Para todas as coordenadas da nossa sala, obteremos nossos valores. Na verdade, vamos pegar nossa masmorra. Isto é, eu vou encontrar o ator apropriado. Então, isso nos dará todo o ator, todo o ator da sala. Basicamente, todos os azulejos que pertencem aos quartos. A partir daí, vou ser o dono do Actor Plus. Vou dividir a transformação. Eu vou pegar e vou conectá-lo ao local. Para a aula, vamos selecionar os adereços da sala. Para ser honesto, precisamos de mais uma variável. Vamos para os adereços do nosso quarto. Vou abri-lo, abri-lo, ir para variáveis e criar direções. Seria um mapa da ereção. E o segundo seria o pulion temos em nossos ladrilhos, e vamos torná-lo comestível com incenso , exposto Vamos voltar ao gerador de labirintos. Vamos atualizar isso, na verdade, cai. E vamos obter a direção do nosso ladrilho, a matriz de direções e conectá-la aqui. Agora, estamos criando adereços de sala para cada ladrilho que é uma sala, e sabemos Então, sabemos onde temos uma parede e onde não temos uma parede. Eu acho que é isso para este. Então, a seguir, podemos explicar como esse plano vai funcionar Adeus por enquanto, então você é o próximo. 56. Noções básicas de Spawner de Prop: Olá, bem-vindo de volta ao workshop de design de jogos e ao curso processual R sine five de criação de Dungeon Action Anteriormente, terminamos com nossos adereços em adereços personalizados. Terminamos nosso ciclo adicionando nosso ator aos atores para destruir. Verificamos se o ator que geramos é válido; se for válido, estamos aumentando o contador Se não for válido, estamos aumentando as tentativas, o que também fazemos quando aumentamos o contador. O que tentamos , dissemos, será uma variável. Caso desejemos mudar isso para ajustar a localização, mas não desovar se estiver colidindo Continuamos com a criação de nossa matriz de salas A. Continuamos fazendo cada loop em todas as coordenadas da nossa sala e geramos a planta, criamos os adereços da sala BP, que é uma planta na qual criamos uma variável, chamada direções, e transferimos criamos uma variável, chamada direções, nossas coordenadas de ladrilho de nossa sala para Agora, como usamos esse ator e como usaremos essas direções? Vamos até esse ator. A primeira coisa que faremos é que, quando o ator for arado , obteremos nossa direção e examinaremos nossos valores Valores, e vamos fazer para cada loop a partir de valores. A próxima coisa que vamos perguntar é se o valor é verdadeiro ou não, quando é verdadeiro. Isso significa que podemos passar quando não é verdade, que há uma parede. Oh, vamos armazenar quantos temos quando não temos uma parede ou quantos vazios temos. Vamos chamar esse bar de vazio. Vamos torná-la uma variável de tipo único do tipo inteiro E quando pudermos andar, aumentaremos quando pudermos caminhar, aumentaremos isso em um. Agora, a segunda coisa que fazemos é criar outra variável desta vez de NRA, que será NRA inteira Então vamos chamar isso de “Não sei”, valsa. E vamos até aqui, e vamos adicionar índices que mostram que temos paredes Então, agora temos duas variáveis e temos quantos lugares vazios. Existem quantas entradas, saídas, passagens, tudo o que podemos percorrer, e também temos uma variável que quantas paredes existem em nosso Lembre-se, quando geramos isso, geramos um deles em cada Então, nosso quarto tem quatro azulejos. Isso significa que temos adereços de quarto P em todos os quartos. Portanto, cada quarto tem quatro adereços de quarto P, um em cada corredor Na última vez em que aparecemos com tochas, porque a primeira coisa que vamos gerar é nossa luz. Na verdade, vamos fazer duas coisas ao mesmo tempo, mas vamos fazer isso com uma sequência, basicamente, elas acontecerão simultaneamente Ah, quando criamos as varandas, usamos em nossa janela de exibição em nossa decoração em uma planta de declaração, usamos Essa é uma maneira de fazer as coisas. Outra forma de obter um local específico é realmente conhecer o local. Se sabemos que o centro do nosso projeto é zero, relativamente conhecemos alguns lugares, pois sabemos que nosso ladrilho é de 600 por 600 Sabemos que a meio caminho do centro está 300. Bem, vamos criar nosso novo modelo para a tocha. Vamos chamar isso de lanterna do quarto. Instantaneamente, posso ver a velha lanterna que usei e uma malha. Porque esse deveria ter sido o quarto que me incendiou. Vou abrir a tocha BB e vou trocar a malha pela tocha grande. Essa é a tocha correta Preciso limpar o píer, compilar e salvar, e vamos para a varanda do nosso quarto Criado aqui. Abra isso. Vou guardar tudo daqui a muito tempo desde que salvei. Eu vou adicionar. Na verdade, você sabe o que, eu posso ir até a grande tocha. A tocha BP, basta copiar. Essas coisas. Cole-os. mudar a estática para a pequena tocha e colocar a partícula em um nível mais baixo. Tudo bem. E agora também posso copiar e colar o comportamento do gráfico de eventos. O mesmo efeito. Jogue do início aqui, na verdade, não importa, pois essa é uma linha do tempo em loop. Seria se estivéssemos em alguns outros ambientes. De qualquer forma. Vamos mudar a volta da luz de 4 a 5 k. Vamos mudar o raio de 400 para compilar e salvar E agora temos nossa própria lanterna de quarto. Vamos voltar para os adereços do nosso quarto. E antes de propor qualquer ator, podemos realmente fazer algo diferente Podemos adicioná-lo quando criança. Vou adicionar um ator infantil. Vou chamá-la de lanterna de quarto. E vou definir sua classe como lanterna de sala. Se eu estiver seguro, agora posso ver o interior da planta. Não. Pergunta ou primeira regra. Isso seria se tivéssemos alguma parede. Vou pegar minhas paredes variáveis. Vou perguntar se o comprimento é maior que zero. Se não for maior que zero, vou destruir esse componente. Não precisamos mais disso. Este quarto não tem paredes. O que seria um quarto sem paredes? Seria uma sala que tem uma porta basicamente porque uma porta e não outras duas portas, uma, duas portas. Então, se você for pintar, seria uma sala que tem uma porta aqui e uma porta. Por aqui. Portanto, o resto da sala não teria paredes para isso. Isso estará aberto e o lado estará aberto. Basicamente, não tem paredes para adicionar uma tocha. Uma vez que nossas regras são baseadas em se o jogador pode se mover para cada lado. De volta à programação. Agora, a próxima coisa que precisamos é das direções. A partir disso, vamos pegar as chaves. Na verdade, aqui, vamos obter uma direção aleatória das paredes. Aleatório. Isso, se nos lembrarmos corretamente, armazenamos o índice do qual não tínhamos parede. Portanto, mesmo tendo duas ou três paredes, obtemos uma parede aleatória que substitui nossa tocha. Como eu disse, precisamos definir a localização relativa deste Nosso B, estamos definindo a localização com base nas coordenadas do projeto Porque sabemos que o tamanho da sala será inibidor. Agora, eu pré-calculei alguns locais que acho que estavam corretamente. Você pode criar o seu próprio. O que vamos usar é um conjunto. Para o índice, obteremos as direções. Temos uma parede norte, uma parede leste, uma parede sul e uma parede oeste. Para a parede norte, vou colocar 40, 150, e para o leste, vou colocar -340, 50, 250 é a altura e x e y são os eixos x e y. -40 para sul e 300 para x, y e 250 para z e 300 menos cem 42 Deixe-me continuar aqui. Cento 40 50. Agora, colocá-lo em um lugar, é como mover isso para lá e para lá. Nem sempre teremos a rotação correta. Novamente, temos que verificar qual deveria ser a rotação correta se estivesse aqui, qual deveria ser a rotação correta se estivesse aqui e assim por diante. Eu já fiz isso, então temos os valores e também vamos pegar a lanterna da sala e definir a relação Essa localização relativa. Oh, meu Deus. Quer digitar e desobedecer. Sem localização, desculpe, defina a rotação relativa. Como você pode ver, eu o obtive da linha de execução. Então, agora posso eleger a varanda do quarto porque ela tem um sistema que me dá algumas opções de tem um sistema que me dá redefinição que podem ser adequadas para mim E sim, isso é mais adequado para mim. E, novamente, vou selecionar Eu vou fazer isso. Agora, já que estamos usando duas vezes essa variável. Como eu tenho um aleatório aqui, ele terá um valor diferente aqui e aqui. Então eu tenho que promover isso como uma variável. Aqui. Eu vou para essa variável em uma direção aleatória. E eu vou trazer uma direção aleatória aqui. Aqui, aqui. Tudo bem. Agora, sobre as rotações, precisamos de 90 para o norte Precisamos de 180 para o leste, precisamos de menos nove. Sul e zero no oeste. E seria isso. Agora teríamos algumas luzes em nossos quartos. Vamos dar uma olhada nisso. E temos algumas luzes em nossos quartos. Se você quiser localizações diferentes, é claro, você pode experimentar com os números, eu os encontro ou não. Acho que isso vai ser para esse. Vamos continuar na próxima com o resto do propósito dos quartos. Tchau. 57. Conclusão da decoração do quarto: Olá, bem-vindo ao Game Design Workshop Under Engine five, RPG de ação Procedural Dungeon Anteriormente, criamos nosso evento Room Props Begin Play. Começamos a preenchê-lo. Mas extraímos nossos valores de nossas direções. Esquecemos e categorizamos quantas paredes estão vazias e quantas adicionamos, não quantas, mas os índices das paredes existentes em Em seguida, criamos nossa planta para nossa lanterna de quarto, que está aqui Copiamos e colamos o comportamento, mudamos um pouco com os valores copiamos e colamos também as malhas estáticas, as luzes Não. Depois, criamos uma pequena função aqui, mas função, uma cadeia de eventos, se você quiser. Mas verificamos quantas paredes temos. Se não tivermos paredes , destruiremos a lanterna da sala de componentes secundários que adicionamos à nossa planta Então, se for verdade e tivermos algumas paredes, então temos as direções, temos a direção aleatória. Paramos em uma direção aleatória e dissemos que a localização relativa e a rotação da sala diminuem em alguns valores que foram pré-calculados Agora, vamos fazer o mesmo com o resto dos itens da sala. Para isso, vamos fazer uma troca. Em int. O índice int começaria com um. Agora, pino padrão, e adicionaremos índices de até quatro. Isso é porque vamos trocar com base no vazio, e não podemos ter nada vazio. Podemos ter uma vazia, que é uma sala, que é assim, e temos a outra sala aqui e a outra sala aqui. Talvez devêssemos ter excluído o anterior, espaço. Então, a próxima sala estaria aqui, e a próxima sala estaria aqui, a lacuna aqui. Então, isso teria um vazio, e vamos começar com aquele. O que precisaremos adicionar às medidas estáticas. Vamos chamá-los de thatqu e thatqu B ou A um, mas vamos chamá-los de B. Se tivermos um Mt, minha regra que eu adicionei é que não teremos duas medidas estáticas Teremos um, usaremos dois no restante das opções. Oh, eu vou fazer isso sem parar. Então vamos pegar nossa malha estática. A M. E a partir disso, vamos selecionar de uma lista, vamos eleger. E para o índice, teremos um intervalo aleatório. O intervalo seria de zero a cinco. E vamos adicionar cinco opções. Ah, pelas opções. Na verdade, temos três, mas vamos jogar um pouco com suas chances de desovar Então, eu vou para o conteúdo. Eu vou para nossa mesa estática. Vou selecionar essa tabela. E tem mais uma mesa. E também há essa guia. Eu não acho que exista outro. Acho que essas são as três variações. E vamos jogar com as chances. Digamos que um deles tenha mais chances do que os outros. Mais um tem um extra. Isso seria tudo para este. E então precisamos definir a rotação relativa. Nós vamos fazer isso. Ação. O que queremos fazer aqui é com uma massa, iterador, só queremos mudar o ya Sempre um ângulo de giro da mesa. Vamos usar à distância. Vou usar 600 a 360. Agora, por que não mudamos de local? Porque quando abrangermos esse item, estaremos exatamente centralizados, estaremos aqui Mas o que estamos fazendo é mudar a rotação apenas para ter uma aleatória a cada vez. Agora, o que fazemos quando temos duas ou as paredes MT? Vamos obter nossas instruções. Vamos pegar nossas chaves. E então vamos atravessar nossas paredes. É claro que, com base em nosso elemento A, obteremos a direção apropriada. De nossas paredes, precisamos selecionar uma dessas duas medidas estáticas. Para fazer isso, vamos para o índice que seria nosso índice RA, porque estamos partindo de duas ou uma parede. Então, isso terá um ou dois. Eu não conectei isso quando executamos o terceiro. Na verdade, deixaremos a mesa estática, a segunda mesgana estática Ba, como em um MT, precisamos apenas de uma malha estática. Então fazemos quando há apenas uma parede, basicamente porque a outra teria sido uma saída. Vou conectar isso aqui. Vamos continuar. Precisamos dessas duas medidas estáticas. Caso haja apenas uma parede para colocar. Isso não executará o segundo índice, mas não precisamos que um seja válido aqui porque provavelmente não haverá erro. A próxima coisa que devemos fazer é aceitar o sótão, mesmo que A ou B sejam escolhidos três por meio desse índice A próxima coisa que devemos adicionar é o nó de seleção, agora temos muitas opções. Bem, novamente, são cinco, mas desta vez na verdade são cinco. Vou deletar isso. Vou trazer esse select, que já tem cinco. Vou conectar isso aqui. Eu vou. Aqui precisamos de um aleatório. Aleatório aqui, de zero a cinco. Um índice aleatório, e os três primeiros serão os que adicionamos. Os três primeiros são únicos. Único. Para o resto dos três, precisamos dessa combinação combinada com as caixas. Então esse com o capacete. Eu posso ver aquele vermelho em cima dela. É por isso que eu sei que é um com o capacete. Tem mais uma dessa, essa com as caixas maiores. Isso tem dois pequenos. Este tem um maior. Não tenho muita certeza. Abra isso. Agora tem três caixas. OK. Planta. E agora temos um deles. A próxima coisa que devemos fazer é no local relativo. Novamente, precisaremos de uma seleção. Seleção múltipla Para o índice, desta vez, precisamos da direção. Com base na direção, vamos mudar esses valores para 54 norte. A 54 leste, mas em y enésimo, e menos nos valores x e y correspondentes T seria a rotação relativa. R aqui. Isso apodrece aqui. Novamente, um seletor, gire para, nós apenas direções Vamos com -90 090180. Se compilarmos, verifique o nível. E verifique se nossos adereços surgiram. Sim, eles desovaram. Seus cantos, bordas. Agora temos alguns adereços nos quartos. Eu acho que parece bom. Eu pareço um pouco confuso em todos os lados. Então, vamos tentar corrigir isso por um segundo. E se os definirmos para um pouco maiores? 1,2? Além disso, eles parecem muito melhores agora. Eles sentem o lugar um pouco melhor. Eles têm uma pequena lacuna. As mesas não funcionam, mas acho que não conseguiremos realmente dizer que estamos jogando. Vamos ver se está, vamos consertá-lo. Não, o que fazemos com a quarta opção? A quarta opção seria a opção de ter portas. Não temos um deles agora. Felizmente, mas digamos que quando tivéssemos duas portas, não conseguiríamos colocar um fósforo estático aqui O que faremos é criar algumas caixas, criaremos caixas para elas e habilitaremos a física para que o jogador possa empurrar, mas isso é para a próxima vez, vou ver você e depois passar 58. Como adicionar itens de física às salas: Olá, bem-vindo de volta ao workshop de design de jogos e ao curso de criação de rbs procedural de Dungeon Action RBS em Real Engine Five RBS Anteriormente, criamos alguns códigos para nossos adereços de quarto. Adicionamos o código ao qual, com base em It, com base no número de paredes vazias, quando temos uma parede vazia, duas paredes vazias ou três paredes vazias, ajustamos nossas malhas estáticas, malha S para outra coisa E se não fosse necessário, no segundo em que fizemos com que ela destruísse duas caixas. Agora, escolhemos entre a mesão aleatória selecionada, tanto a função a entrada de eventos E no primeiro, definimos apenas uma rotação porque é um item. E na segunda, definimos uma localização e rotação relativas porque a queremos nas bordas da sala. Agora, a próxima coisa que devemos acrescentar, como eu disse, serão os objetos físicos. Para fazer isso, vamos obter nossa medida estática aqui. Vamos fazer um rato adicionar uma gota e, em seguida, vamos fazer cada loop. Vamos nos conectar. Aqui. Aqui. E nós percorremos nossas malhas estáticas que o que não façamos é que a estática seja uma das caixas Pegue um pouco aqui. Nós temos uma caixa. Vou deixá-lo aqui. E a próxima coisa que devemos fazer é ler aqui essa leitura aqui, depois aquele local. Agora, para a palavra localização, vou para a localização do ator , já que nosso ator está no topo do nosso quadro, e vou apenas adicionar um pouco dos eixos do set Tipo 20. É ainda um pouco maior do que antes, porque já adicionamos a altura de deslocamento a esse ator e, em seguida, vou fazer uma observação aleatória na caixa delimitadora Como fizemos antes, e com tamanhos 40, 40 e um. Vou definir isso como um local. Agora, a razão pela qual estou dando um pouco mais de altura é que eu quero, mas vamos habilitar a física e eles têm gravidade. Eles sempre cairão e cairão em um local aleatório, então não parecerão ter sido colocados no mesmo lugar todas as vezes. Agora, a próxima coisa que devemos fazer é criar um personagem. Não queremos que nosso personagem suba nessas caixas. Só queremos que eles sejam empurrados. E então vamos adicionar um rebocador . Nós vamos. Não. Esse puxador de componentes, desculpe, e vamos fazer uma matriz a partir daqui e colocar cabo de H como item de física, porque precisaremos desse puxador para empurrá-los com nossa meta Agora, a próxima coisa que deveríamos fazer seria talvez a física. Oh, não essa. Me imite. Não habilite a física, me imite. Eu quero que isso aconteça. Agora, vamos abrir um pouco de espaço. Já que temos esse mecânico quando não temos paredes. Quando essa planta for válida, quando não tiver paredes, ela executará esse mecânico, criará basicamente duas caixas O que podemos fazer demora um pouco e já criamos outro ator além do nosso ator. Com isso, podemos criar uma sala extra para caixas. Para fazer isso, vamos para as salas que têm dois ou três espaços vazios. Porque não queremos fazer isso sala que tem apenas um espaço vazio , serão duas ruidosas Mas quando temos duas maneiras de sair do nosso ladrilho ou três maneiras de sair de um ladrilho , ter caixas extras seria mais aceitável Então, para fazer isso, vamos até a conclusão desse ciclo de quatro. Vamos criar quase 30% talvez não seja 30%, mas vamos tentar. Então, vamos fazer uma troca , será de 30%. Ative o int. E vamos somar nove, na verdade, até o número nove, porque zero removerá o antigo. Na verdade, não precisamos de tantos. Isso? Porque é mais rápido do que excluir isso. Vou para apenas três deles. Você precisa de nove. Mas estamos apenas entrando. Alcance. Na verdade, vamos deixar o padrão para tudo isso. ignição. Temos de zero a nove e temos zero, um, dois. Tudo acima de dois acionará o padrão. O que significa um, dois e três P? O que eles fazem? Na verdade, eles são atores de spa da turma. O ator seria PP room plops. A transformação seria a localização do nosso ator. Dois, um. F aqui, de nossa direção, vamos compensar. Vamos somar nossos valores, o norte seria fechado, norte seria fechado leste seria fechado, sul seria fechado, aberto, desculpe, não fechado, aberto, então basicamente tudo estaria aberto. Usamos o sistema que criamos quando tudo está aberto, e isso abrangeria uma física extra, quadrados, ts, cria Agora, o único problema com isso é que quando estamos criando esta sala, Na verdade, vamos adicioná-lo aos nossos atores de destruição e ao matroide Temos a referência aqui e vamos adicioná-la ao leilão. Para destruir, traga-o aqui. Vamos listar. Agora, podemos destruir esta sala, mas não temos uma referência sobre essa sala extra que criamos. Mas não se preocupe. uma referência sobre esta sala que está recebendo isso e há uma ligação muito boa, como a chamamos. Existem eventos que você pode vincular: eles continuam ouvindo até que isso Quando isso acontece, eles continuam Eles recebem uma mensagem quando isso acontece. Oh, vamos arrastar a partir daqui e dizer: Não, não daqui, desculpe daqui , da linha de execução. Eu vou dizer, encontre e destrua. Porque quando esse ator está sendo destruído, não esse ator. Quando nosso ator que está gerando esse ator é destruído É por isso que um rascunho daqui e não do valor de retorno Precisamos de um evento. Digamos que não destruído. Quando nosso ator está sendo destruído, vamos até esse ator y. Mas dessa forma, garantimos que, quando nosso ator for destruído, esse projeto também será destruído Vamos, vamos jogar. Vamos ver se nossas caixas surgiram. Responde, pudemos ver um pouco de movimento, então a física está funcionando Agora, eles não são físicos perfeitos. Não brincamos com valores. É como se tentássemos entrar na sala, e ela vai ficar e depois bloqueá-la. Vamos caminhar devagar por aqui. Se formos machos, vamos empurrá-los de um lado para o outro. Sim. Falando sobre física perfeita. Não podemos ver caixas voando para fora do nosso labirinto, mesmo esponjando-as. Isso pode acontecer porque o amortecimento angular e a massa não são realmente isso , mas acho que estão bem Isso não acontece com frequência. E quando isso acontece, é engraçado. Você viu que este saiu na verdade, quase saiu da sala. Agora, quando começarmos a jogar, estaremos no teto. Então, pelo menos, eles ficarão lá. Mas com muitos ataques e tudo mais, eles podem sair do mapa. Eles ainda serão destruídos quando mudarmos de nível. Oh, eu acho que isso é tudo para este. Eu vou te ver na próxima. Adeus. 59. Como importar o Blueprint Revenant e Hellgate Tower: Olá, bem-vindo de volta ao Game Design Workshop e ao Curso de criação de ARPs Procedural Dungeon Action da quinta geração ARPs Procedural Dungeon Action Na última, criamos nossas caixas de quarto, as físicas, e as geramos por meio de nosso código Criamos uma matriz que formamos loops com nossas malhas estáticas Colocamos a malha estática em uma caixa. Definimos a palavra localização como um pouco mais alta do que a do ator, então elas caem. Definimos que o personagem não pode pisar e adicionamos uma tacha a ele, que é pH, para que possamos colocá-lo em nossos ataques máximos Também definimos a física simulada como verdadeira, para que eles executem a física Depois, adicionamos um pequeno mecanismo de trapaça, como aproveitamos nosso código para adicionar algumas caixas extras à nossa sala para dificultar a movimentação do caixas extras à nossa sala para jogador. Na verdade, usamos o laço duas paredes vazias e das três paredes vazias em nossos ladrilhos, de que, no final, geraria uma chance de aproximadamente 30% Penhore o mesmo ator com direções específicas. Ele sempre esvazia pela parede quatro e gerará nossas caixas novamente. Portanto, cada quarto tem a chance de ter caixas extras, exceto o quarto que tem apenas uma parede vazia. Agora, destrua esses atores, já que não temos uma referência a eles em nosso labirinto, usamos o evento bind on destroyed, que faz referência ao nosso próprio ator que o labirinto Então, quando esse ator for destruído, ele destruirá o ator que foi gerado Agora, vamos continuar construindo adereços extras em nossa masmorra. E o novo adereço que construiremos será o portão do inferno, a torre, uma planta que atacará o jogador quando estiver por perto com um ataque automático e será protegida Agora, para completar o código dessa torre, precisaríamos ter a IA e mais algumas coisas. Então, por enquanto, vamos apenas criar o visual para isso. Vamos acessar nosso conteúdo. Vamos ver as plantas. Vamos criar outro com todos esses inimigos. Talvez as armadilhas devessem estar nos inimigos. Mas você pode fazer isso facilmente. Podemos ir até os adereços, pegar nossas armadilhas e movê-las para os inimigos. Agora, quando estamos movendo alguma coisa no motor, é sempre bom acessar o conteúdo, clicar com o botão direito do mouse e corrigir os redirecionadores. É também quando estamos renomeando coisas. Isso ajuda o motor com os redirecionadores. Agora, o que são redirecionadores? Basicamente, links e caminhos para objetos em nosso conteúdo. Uma explicação aproximada novamente. Agora, vamos para nossa pasta Inimigos, clique com o botão direito do mouse e selecione plantas, tipo de ator, e vamos chamar isso de portão BP. Agora. Vamos adicionar uma malha estática. Para a malha, vamos selecionar o teto. Isso é grande. Não queremos que seja tão grande. Vamos transformá-lo em uma escala de 0,5 e girá-lo em 90 graus. Em seguida, vamos copiá-lo e colá-lo. Toque-o em si mesmo e gire o segundo em 90 graus desta vez no eixo y. Agora vamos selecionar os dois. E para o elemento, vamos usar o Mm. Mas o exemplo, o original. Agora, vamos usar uma partícula. Vamos até a raiz e uma partícula, que será novamente, em cascata, não na Para a partícula, precisaremos baixar nosso personagem Revenant. Vamos ao depilador. Vamos para a banheira da nossa biblioteca e vamos para o nosso cofre No cofre, vamos digitar Revenant. Caso você não tenha o ativo. Vamos ao mercado e procuraremos por Revenant Aragon Revenant aqui, e vamos adicioná-lo ao projeto, ou na verdade, para você, pode ser adicionado ao cartão porque, primeiro, precisamos adicioná-lo ao cartão e depois ele aparecerá em Agora, quando o tivermos em nossa biblioteca, pressionamos adicionar ao projeto, arrastaremos para o nosso projeto, geraremos o nome e adicionaremos ao projeto Isso pode demorar um pouco, então vou fazer uma pausa aqui e continuar depois Quando adicionarmos o personagem Revenant, uma nova pasta aparecerá em nosso conteúdo, que seria nosso modelo de Revenant A partir deste pacote, precisamos definir o sistema de partículas, que será o assado Não é suficiente. Cabeça assada vermelha. fermentado. Vermelho. Não há vermelho e temos que criá-lo. Sem problema. Vamos verificar o que queremos. Acho que é esse. E é um pouco pequeno. Precisamos escalá-lo e foi. Nós o matamos em todos os lugares. É por isso que um em x, 30 em y, 20 nesse, e para a localização menos y. Precisamos fazer algumas alterações Vou ser um, mas é preciso que haja algumas mudanças. Vamos abrir a partícula. E vamos deletar o do spawn, que é responsável por esse brilho Não queremos esse brilho. Não exclua isso. Não precisamos do emissor. Só preciso dessas chamas. Eu e eu economizo. Eu. Certo? Meio unilateral, em todo lugar. E tudo bem. Além da cor, acho que precisamos mudar a velocidade inicial também. Então, nós o tornamos mais uniforme. Primeiro de tudo, vamos mudar a cor. Vamos para a banheira de cor inicial, selecionamos não verde, nem azul, mas vermelho, digamos assim. Missiva, vamos fazer o mesmo aqui, faça. É mais avermelhado. Agora você vê o diferente, isso é assim , quanto mais chamativo. Mas em nosso projeto, é mais pegajoso. O motivo é porque eu mudei a escala em 30 20. É por isso que fiz a escala, para que fique mais parecida com isso. Eu posso reduzir a escala, mas eu gosto da arte pegajosa. De qualquer forma, vamos até aqui e alteramos a velocidade inicial. Então, ele se espalha um pouco mais. Ou distribuição. Não precisamos de um uniforme de fluxo. Precisamos de um vetor. O uniforme é de até o máximo. Essa é uma direção. Dessa forma, é uma linha. Mas o que usamos é um vetor. Eu pude ver isso. Vetor. Estou no rádio de velocidade inicial. Desculpe, eu quero que esteja na velocidade inicial. Sim, aqui temos um vetor. Ok, isso é um vetor, mas tem apenas um eixo no eixo. Precisamos aumentar a habilidade de colocar aqui e aqui menos dez menos dez Então, vamos e voltamos do nosso ponto de partida, transformamos em três basicamente todos os lados. Então, se voltarmos para o nosso poço, sem fazer nada, eu salvei isso. Sim, funciona? Vamos apenas adicionar um ícone de velocidade. Para fazer isso, vamos clicar com o botão direito do mouse e ir para velocidade em velocidade, vamos selecionar velocity con. Isso fará com que seja. Se voltarmos, eu salvei. Ele nem sabia disso. Acho que sei o que está acontecendo porque eu coloco x em um, colocamos isso em 30, 2015, 15 looks A. Eu vou diminuir isso também. 15 20 15 15 Sim. É um pouco demais, eu acho, marcá-lo um pouco mais baixo. 15 foi demais. E cinco. Quanto ao peso baixo. Não. Dez, estava bem com dez. Dez estava bem. Vamos deixar as coisas assim. Eu coloquei também. Certo? Realmente não sabe quem não sabe. Vamos reduzir sua vida útil, passar para vida útil e ir para no máximo 1-2 0,8. Não. Meu 0,5, vamos tê-lo 22,5. Oh, é ainda pior. Vou encontrar algumas configurações novas e vamos fazê-las na próxima. Adeus por enquanto. 60. Aula 3D 59 Visuais da Torre Hellgate e integração de labirinto: Olá, e bem-vindo de volta ao curso de criação do Game Design Workshop rail Engine Five Procedural Dungeon Action Apres Anteriormente, começamos a criar nosso projeto do Hell Gate. E ficamos com a partícula do nosso personagem revanescente. Então, joquei com os valores e achei isso aceitável. O que eu fiz foi o sistema de partículas, selecionei uma escala de dez para tudo, uniforme E na própria partícula, mudei a velocidade inicial para no máximo cinco, no mínimo, para menos cinco do O valor Y seria de cinco a menos cinco novamente, e o valor z seria cinco constante Agora, por toda a vida, adicionei 0,4 na distribuição mínima e 0,5 na máxima porque queremos um pouco de desequilíbrio, mas não tanto quanto antes E, por exemplo, mudei de dez para 20 na configuração da colher na taxa, então ela se estende na taxa E acho que também mudei a esfera. Não. Eu deixei um oito. Então, quais são as mudanças, eu acho que você deveria ter isso agora. E muito rapidamente, escala de dez na taxa de 20, vida útil de 0,4 e 0,5. O tamanho inicial deixamos como está. Velocidade inicial, mudamos 00-55 do mínimo 00 para menos cinco e menos cinco, e no eixo z cinco e Agora, a próxima coisa foi que mudamos a cor, de co, para vermelho. E adicionamos o código de velocidade. Agora que temos nossa partícula, vamos até nosso portão e precisamos adicionar mais algumas variáveis e componentes variáveis Vamos adicionar uma, uma luz pontual. Vamos deixar como está por enquanto, porque vamos manipular o código, provavelmente pegar o código da varanda Vamos adicionar uma cápsula, e a cápsula é apenas para colisão para que possamos realmente comê-la Então, vamos escalá-lo um pouco. Opa, eu o selecionei. E se não precisarmos assustar, podemos simplesmente ajustar os valores, 100 e digamos que os rádios da cápsula seriam Sim. Será aqui que atacaremos nosso ator. Agora, vamos usar isso para bater em nosso ator. Iremos até nossas medidas estáticas, selecionaremos as duas com controle e clicando nelas, e não faremos nenhuma colisão e não geraremos eventos de sobreposição, pois isso aumentaria nosso desempenho Agora, a próxima coisa que adicionaremos é um componente aqui, aqui uma colisão. Vamos deixá-lo como está por enquanto, porque vamos usá-lo para programar ataques e coisas assim Mas a próxima coisa que adicionaremos é um componente rotativo. Movimento rotativo. O que é movimento rotativo? É um componente que cria rotação. Ele tem algumas configurações predefinidas, mas vamos mudar mais ou menos em vez de 80 Se eu pressionar simular, você verá que ele girará E a razão é porque está girando todo o ator. Agora, o que queremos fazer é apenas girar essa malha do sótão. Não queremos rotacionar o ator inteiro. São muitas informações extras que não precisam ser alternadas Por exemplo, a cápsula, a luz e o quê e até mesmo a colisão esférica da qual decidiremos se enfrentaremos o jogador ou Então, o que faremos é selecionar o componente rotativo, acessar o gráfico de Ben, trazê-lo aqui, ao começar a jogar, e selecionar o componente de atualização Esse componente atualizado. E vamos conectá-lo aqui e, para o componente atualizado, vamos usar a raiz das duas malhas estáticas, que para nós agora é a malha estática um Vou conectá-lo aqui. Se eu acessar as janelas de exibição e a estimulação, ela também gira corretamente Então, parece que eu girei a malha estática de forma diferente do que em meus nós Porque se eu tivesse girado de uma maneira diferente, seria assim Faça. Sim, de alguma forma, eu estraguei tudo. Está se atualizando, está na mesma rotação, está girando de forma diferente Esses são momentos reais incríveis. Tudo isso aconteceu porque eu mudei as rotações aqui. Vou simplesmente reiniciar tudo. Um verdadeiro tem um problema quando estamos criando algo. Vou apenas girá-lo a partir daqui. Vou ser mãe disso e vou alternar isso Se eu simular. Eu só vou mudar 180 aqui. Acho que vai ser consertado. Sim, está consertado. Verifique os dois valores. Depende de como nos conectamos e com que rotação a criança está na malha. Nosso sistema altera automaticamente as rotações nas coordenadas locais com base na criança De qualquer forma, agora que temos algumas imagens em andamento, vamos colocá-las em nosso labirinto Ah. Deixamos esse criador profissional com as coordenadas de nosso quarto. E depois disso, vamos para cada um. Agora, onde geramos esse heliato? Vamos criar uma nova variável, variável temporária, local. Vamos chamá-lo de buracos de DM. Vai estar certo. E será de uma matriz de contêineres. Eu vou trazer aqui, para conectar isso aqui. Agora, quais serão nossos cabos de temperatura? Serão as áreas isoladas e as varandas. Nesses lugares, devemos ter inimigos. Vou trazer os cabos de temperatura e vou acrescentar e depois anexar anexar Conecte os aros das varandas. Não deveria ser um ponto final, eu deveria ser da estrutura, sala S, salas ST, um tipo de variável de mudança, certo? Porque nossas varandas conectam isso, se reconectam. Porque nossas varandas e áreas isoladas são basicamente listas de coordenadas Então conecte isso aqui, conecte isso aqui, desconecte isso e reconecte por precaução E agora vamos quebrar a estrutura e, para cada uma, para cada uma das coordenadas. E precisamos de algumas regras sobre como vamos criar esses portões de ele Quais são as regras deles para desovar? A regra será simples. Quando construímos nosso labirinto, bem, isso não aconteceu Nós temos um aqui. algumas caixas com esse símbolo. Então, perguntaremos. A caixa tem algum tipo de símbolo porque temos um que brilha demais, outro que brilha muito baixo, esse que acende e apaga Então, vamos escolher esses pontos para criar nossos portões do inferno. E usaremos a mesma técnica que usamos para as luzes. Portanto, eles não aparecem muito próximos um do outro. Agora, vamos voltar à nossa função. Vamos parar de jogar, pegar nossa masmorra e enrolar nossa peça atual Nosso ladrilho atual, vamos pegar o chão. No fundo, primeiro de tudo, vamos pegar materiais. Vamos pegar muitas coisas desse andar, então vou ler em voz alta no começo. Agora, se formos para nossos andares, para ver o conteúdo, vamos para nossos andares. Podemos ver que o elemento do CG é o elemento zero, e o mesmo se aplica a todos os materiais que podem ter esse CG como esse piso de terra batida, elemento Já que o projetamos assim, onde está o labirinto aqui, e sempre considere o elemento zero, esse material. Ah. Vamos perguntar se esse material é igual às nossas instâncias de material e material, isso seria GL, que é o CGL CGL em um e o g em dois de um Mas, como fui informado, ele não é usado em nenhuma situação padrão. Você vai colocar um galho. Você vai usar um nó, e vamos adicionar um pino extra a ele e conectar esses três. Mesmo que seja um deles, saberemos disso e continuaremos com nossa cadeia de eventos. Mas acho que esse é um bom ponto de parada para este. Eu vou te ver na próxima. Tchau 61. Fundamentos do item e tabelas de dados: Olá, bem-vindo de volta ao Game Design Workshop e Real Engine Five Procedural Dungeon Action Apes Anteriormente, terminamos com colocação de nossos portões do inferno. E quando começamos, também corrigimos. Com um ponto de interrupção. Na verdade, não usamos um ponto de interrupção para corrigi-lo, mas demonstramos o ponto de interrupção. Vou removê-lo. Retome a estimulação e resolveremos o problema com o material vazio e nulo Agora, temos alguns portões infernais, temos praticamente s. Há um erro aqui. Vamos descobrir por que isso acontece. Vamos voltar ao nosso labirinto. E não estamos perguntando em lugar nenhum Sim, estamos perguntando em nenhum lugar se as coordenadas são uma sala especial Então, vamos colocar um ou aqui ou um touro e também adicionar a regra de que nossas coordenadas estão contidas nas salas especiais. Azulejos especiais. Então, agora, isso não deve mais acontecer, porque se for um ladrilho especial ou estiver próximo a uma porta, vamos colocar o material em zero, vazio, e então ele não aparecerá. Vamos verificar novamente. Esta é uma sala escondida. É por isso que, como ninguém, não há portão. Então, tudo parece correto. E a próxima coisa que devemos fazer é começar a descascar o resto das coisas, como o elevador, a caixa, M e um pouco de nossa funcionalidade Mas para fazer isso. Preciso de mais uma coisa para se preparar. Precisamos criar os itens e os itens descartáveis, porque o elevador exigirá um item, a caixa exigirá que os itens sejam descartados e assim por diante Então, vamos começar acessando nossa pasta de blueprint botão direito do mouse e criando uma nova pasta Vamos chamar esses itens. Vamos entrar nessa pasta, clicar com o botão direito do mouse e criar um blueprint plus of plus actor E vamos chamar esse item da BP. Agora, esse item da planta da BP, vamos abri-lo. Esse plano se tornará todos os itens. E para fazer isso, vamos usar algo chamado tabela de dados que é para quem é novo. Uma tabela de dados é como uma coleção de dados em linhas e colunas. Basicamente, é semelhante a uma planilha. E é por isso que ele precisa de um formato nas colunas. E para usar um formato nas colunas, usamos uma estrutura. Vamos criar isso bem rápido. O que precisamos primeiro criar é uma estrutura, que possamos definir nossos lúmens em nossa tabela de dados Então, vamos usar uma estrutura, vamos chamá-la de itens ST. Vamos entrar nele. Agora, essa estrutura armazenará as informações de nossos itens. Por exemplo, a primeira coisa que precisamos é nome do item seja playnam O nome do item está bom. A segunda coisa que precisaremos é de um item, que item é uma maçã. OK. E esse item, o que ele tem para uma representação visual? Ele terá uma malha estática, então precisamos de uma malha estática. O nome do item deve ser do tipo string ou nome, mas string é melhor se tivermos itens com traços e qualquer outra coisa Então, precisamos da malha. Vamos chamá-lo de malha, e será do tipo. Malha estática. Malha estática simples, não componente de malha estática, e será referência de objeto. A próxima coisa que precisaremos é de um som de item. exemplo, que som esse item faz quando eu o pego, deixo cair ou uso. Poderíamos ter dois sons para isso, mas vamos usar apenas um som. Então, vamos ter o som do item. E a próxima coisa que precisaríamos seria uma imagem de inventário. Então, teríamos I Mach Vou primeiro criar os nomes e depois definir as variáveis. Elas não serão mensagens estáticas, é claro. Imagem do inventor do som dos itens. Agora, depois, teremos uma variável para explicar se podemos escolher isso no inventário ou não. Vamos chamá-lo de inventário. Então, o último penúltimo , na verdade , seria se o item fosse. Então, vamos chamá-lo de táxi. Não acho que essa seja a grafia. Talvez precise de um K. Não tenho certeza. Está tudo bem. Está tudo bem. E se for escalável , também precisamos de uma quantia Ah. Vamos chamar esse valor. Agora, o caso de ser adicionado ao inventário. Vamos ter captadores dourados. ouro não vai para um inventário, mas vai para um balcão na nossa tela. Oh, vamos selecionar isso agora. Vamos ao som. Precisa ser de und Bound cube porque estamos usando cubos de som E a imagem inventada deve ser do tipo textura. Na verdade, textura para D. A diferença entre textura e textura dois D é que a textura é uma categoria geral, que inclui mapas tubulares, duas detecções, alvos de renderização, texturas de volume, muitas coisas Onde a textura a d é especificada para uma imagem de duas texturas que estamos usando. Oh, eu vou guardar isso. Na verdade, vou fechar a rampa. Precisamos definir o Staab em ouro e também definir o valor em Então, isso é contar um, dois, 34, e Staab é sim ou não Vou salvar isso e fechar isso, e vamos voltar aos nossos itens. Oh, para o nosso projeto de item. Não, não, não, não vamos voltar ao nosso plano de itens. Você vai trazê-lo aqui. Vamos parar de correr antes porque não há necessidade de o jogo estar rodando. Agora, a próxima coisa que precisamos criar é uma tabela de dados, como dissemos, essa coleção de informações em linhas e colunas. Oh, nós vamos para onde está micelneous. Aqui está, millneous, e vamos escolher a tabela de dados Quando estamos escolhendo uma tabela de dados, é necessário escolher uma estrutura de linhas. Então, temos que definir nossas linhas. É por isso que criamos essa estrutura primeiro. Então, vamos selecionar nossos itens ST. R, vou nomear os itens do DT. Agora, vamos abrir isso. Como você pode ver, está praticamente vazio no momento, mas poderíamos importar de fonte externa se tivéssemos um documento CSV ou algo assim Acho que o Json também se aplica. Mas para nós, vamos apenas criar alguns itens. Vamos colocar manualmente seus valores e suas mensagens. E o que eu quero dizer? Vamos pressionar isso aqui. Vamos pressioná-lo umas seis vezes, teremos seis itens. E o primeiro item seria, digamos, um, e vamos chamá-lo de ouro. Agora, qual é o nome da linha? O nome da linha é usado para recuperar as informações de cada linha em suas colunas Mostraremos na prática como ele será usado, mas quando preenchermos essa tabela de dados. Ah, ou uma malha, nós temos uma bolsa, eu acho P, temos uma bolsa. E para o som do item, temos uma moeda. Aqui, temos uma moeda. Imagem do inventário, temos nossa bolsa. Não será um inventário duplo. Ele será adicionado em A UI em nossa porta de visualização, então não vou pressionar os dois inventários. E Saka blue, não é necessário, pois não é um item de inventário E para o valor, vamos selecionar um logo abaixo. Vamos criar um código para alterar essa quantidade, mas isso dependeria do inimigo, do baú, de quem o está soltando Agora, vamos criar o segundo item. Bem, isso vai ser eu dois. Essa seria nossa poção de maconha HP. Na verdade, sem s. Para a metanfetamina estática, acho que temos uma porção Você tem muita poção. Tudo é basicamente uma poção. Não, vamos pegar a poção vermelha. Para o som do item, temos um som de garrafa. Sim. Para nossa imagem de inventário, temos uma poção vermelha Agora, isso será adicionado ao inventário, e é, e é de um. Agora, nosso código criará uma quantidade infinita de pilhas Mas se quiséssemos um imposto MC, deveríamos tê-lo como uma variável em nossa matriz de estrutura. Então, seria uma opção em nossas colunas aqui. Agora, para o terceiro item, vamos nomeá-lo. Três. Vai ter o nome de velocidade. Poção. E para a partida, temos uma poção azul E para nossos itens, vamos usar as garrafas novamente. E para a imagem do inventário, temos a poção azul Vai ser um inventário. Mas digamos que a poção de velocidade seja empilhável Vai estar em um inventário. Uso único. Digamos que, da nossa poção azul, queiramos tomar dois goles para acabar com Então eu posso colocar uma quantidade de dois. Esse seria seu valor padrão. Quando eu o coloco no inventário, posso usá-lo duas vezes. Nosso quarto item seria I four. E isso seria uma poção que, quando a bebemos, ela explode, cria uma explosão Digamos que ao nosso redor, e isso mata todos os alvos ao nosso redor. Vamos chamar isso de poção da raiva. Vamos ajustar sua malha estática para essa poção marrom-acastanhada Vamos usar as garrafas novamente. E para inventário em março, temos Ocean dark red. Ok, marrom vermelho escuro , pode parecer diferente no mundo. Vamos ver. Então, vamos adicioná-lo ao inventário e ele será de uma única utilidade. Agora, para o nosso quinto item, será I cinco. E vamos chamar isso de poção. Porque isso aumentará nosso tempo disponível para continuar jogando. Se o tempo acabar, vamos morrer. Vamos usar a poção amarela. Vamos usar a garrafa. E para a imagem do inventário, vamos usar o amarelo do oceano. Estará em nosso inventário. Será na quantidade de um e não será empilhável Oh, para um último item, vamos chamá-lo de I six. E será do nome E. Terá a malha de teclas e o som do item Sim, a tecla soltará e o som do item Sim, aqui na nossa frente. O mapa do inventário também deve ser fundamental. É adicionado à quantidade de um e não é empilhável Vamos economizar. Vamos fechar nossa tabela de dados. E eu acho que é isso para este. Continuaremos na próxima, fazendo com que esse modelo de item possa se tornar qualquer coisa Adeus por enquanto. 62. Comportamento do item e widget de hover: Olá, bem-vindo de volta ao workshop de design de jogos, curso de RPG de ação em Dungeon com cinco procedimentos reais RPG de ação em Dungeon Por fim, saímos com a criação da tabela de dados e da estrutura da tabela de dados. Dissemos que as informações do nosso item seriam o nome do item, a malha, o som do item, a imagem do inventário, a pergunta T do inventário que temos, a pergunta empilhável que temos e um valor E então adicionamos que usamos essa estrutura para criar nossa tabela de dados para os volumes E então preenchemos a tabela de dados manualmente com os valores que queremos para os itens. E criamos o item do blueprint. Agora, vamos continuar com o item do blueprint. Nesta parte do tutorial, preencheremos os componentes e a deformação da construção. Então, quando propomos nosso item, ele terá as propriedades que desejamos Ah, vamos explicar um pouco como nossos itens funcionarão. Vou abrir a pintura. Digamos que esse aqui seja nosso ator. Esta é a planta do nosso item. Em primeiro lugar, ele terá a malha que o representaremos. Então, se fosse uma maçã, uma maçã verde, usaria a malha da maçã. Agora, como queremos que nossos itens sejam um pouco mais visíveis, também adicionaremos uma fonte de luz pontual, vamos fazer isso com azul. Isso é uma fonte de luz. Bem, vamos corrigir. Eu corrigi isso. Sem comentários. Essa é a lâmpada, essa é a fonte de luz. Mas a coisa específica essa fonte de luz terá é que ela ilumina apenas essa malha e isso não afeta o resto do mundo. A terceira coisa que precisaremos é mostrar o nome do item ao jogador. Então, criaremos um widget ao qual adicionaremos dois itens aos quais obteremos o nome Por fim, teremos uma colisão ao redor do item para saber quando nosso jogador está fora da colisão ou se está dentro da colisão, para poder escolher o item que esteja ao alcance entre o jogador e o Então, se o jogador estiver dentro dessa colisão, ele poderá pegá-la Se ele não estiver, ele não será capaz de escolhê-lo. Não, vamos fazer isso. Vamos precisar de uma malha. Vamos chamar esse item de malha. Você vai precisar de uma colisão de cerveja. Em torno do nosso item. Vamos ao nosso visor, para que possamos ver um pouco melhor Você vai precisar de uma luz pontual. E vamos precisar de um widget. Um widget, vamos fazer um pouco mais tarde. Vamos visitar Hide Debt. E para a malha do sótão, precisamos selecioná-la. Vamos ver os detalhes e ir até a colisão, e vamos selecionar atone Vamos ignorar tudo, exceto a visibilidade, Ama. Na verdade, não nos sobrepomos, estaremos bloqueando. A próxima coisa que devemos fazer é não deixar que ela projete sombras porque vai ser muito cara Nós vamos projetar sombras. Nós vamos desligá-lo. Agora é a hora de fazer o Lightning Channel. Vamos selecionar canais, quais são os canais de iluminação, quais desses canais estão iluminando esse item, e vamos selecionar o canal a ser ativo. Vamos para o nosso ponto de luz? Então temos canais aqui. Vamos selecionar os dois canais dois e vamos selecionar o canal zero. Então, tudo no mundo é afetado pelo canal zero. Mas essa luz não será emitida nesse canal. Ele emitirá para o canal dois, qual nossa malha foi projetada para obter luz Feche isso, feche, mude o mundo basicamente e volte ao nosso ponto de luz. Vou selecionar algumas configurações que predeterminamos 1280, knes, raio de atenuação sete, e o resto ficará Por fim, vamos selecionar a esfera e definir o raio da lança Mas esse será o raio em que poderemos pegar o item E esse é um código bastante simples. Então, o que vamos fazer é preencher rapidamente esse código. Comece o evento de sobreposição, vamos criar uma variável, uma variável de Boulan, chamadas capazes de escolher ou captar um intervalo ou qualquer outra coisa, capaz de escolher Vou configurá-lo para que eu escolha a sobreposição final. Eu queria escolher começar a sobreposição. Mas eu também preciso da sobreposição final, então vou trazer as duas Isso será verdade no início da sobreposição. Se nosso outro componente, ele tem o rebocador E, que é nossa cápsula de jogador, e se tiver a etiqueta P , o item a ser retirado E a mesma coisa que vamos fazer no final se sobrepõe. Apresse-se ao COVID e configure a mesa para pegar. E como queremos que essa esfera não faça mais nada com qualquer outra coisa, podemos alterar suas configurações de colisão também costumar ignorar tudo, exceto o p, ao qual ela se sobreporá Porque quando deixamos tudo no computador, ele calcula constantemente se a visibilidade esquentou, se a linha de rastreamento da câmera esquentou, se os inimigos auxiliares serão trocadilhos, então vamos verificar Mas nossa física, nossas caixas. Se tivéssemos veículos descritos , estaríamos calculando todas essas coisas constantemente, mesmo que a resposta fosse não Como isso não tem nenhuma colisão física nem nada, temos apenas em vez da física queriana Mas isso é por padrão. Não. A próxima coisa que precisamos é do widget Então, vamos criar rapidamente esse widget. Vamos para nossa pasta y e selecione o botão direito do mouse na interface do usuário, na planta do widget Vamos chamar isso de item W G. A. Na verdade, widget Item. Essa palavra. Palavra do item. Esse widget não precisará de muitas coisas. Então, vamos preenchê-lo bem rápido. Vamos abri-lo. É só que isso é do widget que não precisa de uma convas É porque somos alguém no mundo e podemos deixar que isso morra de acordo com nossa planta, por outros lugares, depois pela convas Mas o que vamos precisar é de um botão. E para o botão, precisamos de um xt. E o que vamos fazer é trapacear um pouco Vamos selecionar o estilo do botão , um de sua tonalidade, e selecionar o Alpha zero no modo normal, para que possamos ver somente o nome do item E quando estivermos pairando, vamos deixar a tonalidade ficar em 0,1 Está um pouco visível. Vemos algo por trás do nome. Digamos que, quando pressionamos, ele retorne ao zero. Alfa. Então, temos um loop por esses três como eu passei o mouse sobre eles. Foi o que eu posso ver. Passei o mouse sobre ele e, quando cliquei, voltei a ser como estava quando passei o Então, está tudo bem. Agora, como parece que o mundo realmente quer, porque queremos que esse widget seja mostrado acima da mensagem estática, acima de qualquer outra coisa, basicamente, isso em si Na verdade, vamos mostrá-lo na tela. Não vamos fazer com que ela realmente surja no mundo. E para fazer isso, vamos acessar nosso widget em nosso item E onde diz Top, onde deveria estar, em que espaço deveria ser colocado no mundo ou na tela? Não, vamos escolher a tela. E eu tenho alguns tamanhos de linha predeterminados, que seriam 240 Para a balança, vou escolher apenas duas em tudo. Também precisa ficar um pouco mais alto. Vamos colocar 112, está tudo bem. Mas ainda não podemos ver os resultados. Poderemos vê-los quando derrubarmos os itens. Ah. Vamos continuar com as informações de preenchimento automático da tela de construção. É a primeira vez que vamos usar nossa tabela de dados. Vamos obter dados. E na linha da tabela de dados, selecionaremos para Tabela de dados nossos itens DT da tabela de dados, e isso nos dá uma lista aqui, que na verdade não usaremos, e promoveremos o nome bruto para uma variável. Todo o nome bruto, nome bruto é um bom nome. Agora, se eu compilar, você pode ver que ele manteve seu valor original de I one Mas vamos querer mudar isso externamente, então vamos torná-lo editável por instância e exposto Mas quando estamos respondendo ao item, podemos alterar novamente nome desse item quando o gerarmos Assim, cada um dos atores que estão gerando o item pode ter uma ideia personalizada do que eles vão gerar Agora vou promover a divulgação de itens da lista bíblica. Dados. Este item conhece seus próprios dados. E vamos obter os itens e a malha estática, que é uma informação que precisamos dos nossos dados. Então, eu vou quebrar a estrutura. E conecte as informações da malha aqui. Vou conectar isso aqui. Agora, como você pode ver, eu vou para a janela de visualização e compilo. A pequena bolsa apareceu aqui. Porque nosso nome de linha padrão é I one. Se eu selecionar I dois, a poção vermelha aparece. Se eu selecionar I três, aparecerá um azul. Vamos verificar todos os 56. Ei, olha, tudo bem. Acho que esse é um bom ponto de ruptura por enquanto. Vamos continuar na próxima. Adeus 63. Como animar o Blueprint do peito: Olá, e bem-vindo de volta ao Game Design Workshop, Real Engine Five Procedural Dungeon Action ARB Anteriormente, terminamos com nosso item. Concluímos o código para classificar os dados do item por meio de nossa tabela de dados Usamos uma variável a para obter seu próprio nome, que também é exposta no spawn, para que possamos configurá-la quando estivermos gerando E a partir desses dados, usamos os dados na malha para definir o componente de malha estática do nosso projeto Também adicionamos o widget e criamos o widget, que são itens que usaremos para mostrar ao mundo, que dissemos que basicamente estarão na tela, que não precisemos fazer algumas partes extras Ele aparece acima de qualquer malha estática. Existem outras maneiras de fazer isso, mas seria necessário examinar materiais um pouco mais complicados. Vamos entrar nesse domínio para que nosso jogador possa ser visível através das paredes, mas queremos fazer isso nos widgets agora mesmo Ah, já que estamos nos itens, acho que é um bom momento para mostrar como vamos criá-los E acho que é hora de completar o baú, a planta do baú para demonstrar isso Vamos até nossos adereços, adereços pastas dentro das plantas da pasta e vamos abrir nosso Agora, se você se lembra, se formos para nossa janela de exibição, adicionamos nossa malha estática para o corpo do peito Mas também precisamos de uma capa, acho que se chama, a parte superior, em qualquer caso, que vamos animar quando abrirmos o baú Vou adicionar outra malha estática. E por sua propriedade de malha estática, vou selecionar a parte superior do peito. E eu vou posicioná-lo logo acima do peito. Como você pode ver, o pote de ervilha já está na borda da parte de trás Mas isso nos ajuda quando queremos girar seus saltos. Eu sou um idiota. Isso nos ajuda quando queremos girá-lo. E eu preciso mudar isso para cochilos de cinco pontos melhor Sim, acho que está tudo bem. Ali. Vou compilar e salvar Agora, como precisamos dele para o item, uma colisão com o item é o plaar na faixa de fúria, o mesmo que precisamos para o baú Então, vou copiar essa esfera do item da planta e colá-la no baú grande Vou deixar isso mais fácil porque essa é a mesma distância que queremos usar. E a próxima parte que vou copiar daqui é, na verdade o widget porque será o mesmo widget, vou colá-lo Além disso, vou precisar do código das colisões da esfera Vou copiar isso e vou trazê-lo aqui. Agora, essas duas variáveis essa única variável, na verdade não existe em nosso projeto Então, o que vou fazer é clicar com o botão direito do mouse e dizer, criar variável, capaz escolher como isso seria capaz de abrir. Então, para mudar isso. E essa parte fica ativa quando podemos interagir com ela. E agora, ao dizer interagir, abrimos um novo capítulo. É assim que vamos interagir com nossos itens. Nosso jogo é um jogo de clique do mouse ou é como um Daloclon Então, isso significa que, quando clicamos, queremos interagir com o que está embaixo do mouse Como estamos em visão isométrica e inclinada, não será muito simples fazer isso Teremos que fazer algumas contas, algumas matemáticas para chegar ao ponto que queremos Mas depois de todo esse cálculo, cálculos, o que importa é que enviemos um evento para interagir com esse adereço, a caixa ou com o item E a forma como vamos fazer isso é usando a interface de blueprint, uma interface de blueprint que vamos projetar para os itens Como nossos itens serão de diferentes tipos de atores, essa é uma boa maneira, uma ótima maneira de fazer isso. Existem outras maneiras de fazer isso, mas nesses tipos de cenários, interfaces de blueprint são comumente usadas e são uma técnica meio melhor Vamos ao nosso navegador de conteúdo. Vamos ver nossas plantas. Vamos para nossa pasta de BI. Vamos clicar com o botão direito do mouse e criar uma interface de projeto op. Aqui estamos. Vamos chamá-lo de item Bi Cs. Vamos abri-lo. Vamos criar um evento chamado Inter. Agora, temos essa interface, vamos adicioná-la às nossas plantas, baú grande e ao item BP. Para fazer isso, vamos começar pelo item BP. Vamos para as configurações do clube. Vamos até nossas interfaces implementadas, pressione Adicionar e selecione Eu interajo. Desculpe, o item chegou. Agora, vou compilar e salvar, e vou fazer o mesmo baú grande Eu fiz exatamente o mesmo tipo por meio interação quando o item chegou. Vamos compilar e salvar. Agora, em nossas funções, temos nossas interfaces. Vou abrir e clicar duas vezes na interação para criar um evento. Então, quando enviamos a mensagem para interagir, a primeira pergunta é: o jogador está ao alcance? Vou colocar uma ramificação e selecionar A para abrir conectada à ramificação. Agora, se estivermos ao alcance, precisamos saber se já interagimos porque, como a animação tocaremos para abrir o baú, não queremos reiniciar essa animação Criamos outro touro, um copiar/colar para abrir e nomeá-lo interagindo Eu vou trazer isso aqui. Vou selecionar uma nota t. E vou selecionar aqui uma nota e. Isso significa que temos que ser capazes de abrir e não devemos interagir Então, se isso for verdade, isso retornará falso e retornará falso. Isso é falso, então voltará a ser falso. Ambos precisam ser verdadeiros. A próxima coisa que vou fazer é começar a interagir. Agora, quando nosso peito se abrir, devemos tocar um som. Eu vou tocar som. E temos um som no peito. E a próxima coisa que precisamos fazer é usar o widget. Então eu vou fazer isso para ele, em seguida, jogar no widget. Na verdade, também podemos destruir esse componente porque ele não é mais necessário. Depois de sentarmos de forma invisível. E agora precisamos animar nosso peito. Então, vou trazer um cronograma. Vou conectá-lo para jogar desde início e entrar nesta linha do tempo Vou criar um caminhão de fluxo. Vou adicionar dois pontos à variável. O primeiro será zero e zero. A segunda seria, digamos, demora 1 segundo. Muito, digamos que aponte p 7 segundos, e o valor seria 1. Faça com que aumente o zoom. Vamos usar a última chuva ou não durará os 5 segundos inteiros. Vamos atualizar. Ah. Vamos trazer nossa malha, que é a parte superior da caixa. E vamos definir a rotação relativa. Agora, não precisamos armazenar variáveis nem nada. Nós codificamos isso. Vamos alertar Theat ou o Alpha, vamos usar o caminhão Vamos usar o caminho mais curto. Vamos verificar nosso baú. Agora, digamos 91 x. Queremos ir -20 Menos t. Eu quero ir de 90. Para 20. Agora, algumas coisas que precisamos fazer também são acessar nossa malha aática do corpo da raiz, e vamos até sua colisão e alterá-la Vamos selecionar a redefinição personalizada. Vou colocar tudo em ignorar, exceto a visibilidade, a câmera e o lago, porque queremos que o baú bloqueie nosso caminho. Não deveríamos ser capazes de passar por ela. Oh, eu vou deixar a parte superior, a capa sem colisão. Na verdade, se deixarmos que não haja colisão, pode haver uma chance pode haver uma chance de não conseguirmos clicar nele. Mas nós vemos. Eu não gostaria que o jogador fosse bloqueado pelo baú aberto. Mas veremos como isso funcionará. Agora, surge a pergunta: o que acontece quando eu abro o baú? O que acontece é que geraremos os itens. Sempre podemos definir uma quantidade prefixada de itens para serem sempre telefônicos assim Mas se tivermos as informações do nosso labirinto, podemos obter o nível do nosso labirinto e ajustá-lo adequadamente Então, vou criar uma nova variável. Vou chamá-lo de labirinto. Eu vou fazer isso do tipo gerador de labirinto. Seu gerador. Ah. Ok. Aqui estava a referência de objeto, o gerador de base, e vou expô-la no Sone e na edição de instância Na verdade, edição em primeira instância porque se não for editável por instância, isso criará um erro, como se eu desclicar aqui para compilar, ele dirá expor no filho, mas não instanciá-lo Tem que ser editável por instância. Novamente, quando estamos trazendo uma planta para o mapa, é uma instância da planta Então, se quisermos que o valor tenha números diferentes em cada instância, ele precisa ser editável por instância Agora, vamos voltar ao nosso gerador de labirinto. Vamos descobrir onde estamos gerando o baú, que eu acho que funciona em O começo no peito grande. Vou atualizar isso. Sem compilação. Dave. Vou me refrescar novamente. E aqui está. Então, para o gerador Mz, vamos usar saúde Agora temos uma referência ao nosso gerador Me em nosso peito. Eu acho que este é um bom ponto de parada para este. Eu vou te ver na próxima. Adeus. Ah. 64. Mecânica de peito e sistema de queda de itens: Olá, bem-vindo ao Game Design Workshop e Real Engine Five Procedural Dungeon Action Anteriormente, iniciamos nossa cadeia de eventos para nossas interações. Criamos uma interface de blueprint que chamamos de item coms E dentro dessa interface, criamos uma função chamada interact. Implementamos essa interface nosso baú grande e nas plantas de nossos itens e iniciamos a cadeia de eventos, o baú grande Então, após a interação do evento, perguntamos se estamos dentro do alcance e não estamos interagindo no momento E se a condição fosse aplicada, continuamos configurando interact como true, reproduzindo um som, ocultando o widget e também destruindo-o Em seguida, criamos uma linha do tempo para animar nossa melhor parada Também criamos uma variável chamada gerador Maze, que armazena a referência ao nosso gerador, aquele que semeou o Agora, vamos começar o evento de jogo e criar uma variável que chamaremos esse número máximo de itens Vamos configurá-lo no início do jogo para ter um alcance aleatório. Alcance aleatório. Vamos começar com um grande gesto. Deve conter pelo menos, digamos, três itens. Quando há espaço, o máximo deve ser nível do gerador de labirinto nível do gerador do nosso gerador de labirinto, deve ser o nível do nosso gerador mais três Então, na primeira vez, ele derrubaria 3-4 itens. Como nosso gerador principal não começa do zero, ele começa do um, se formos ao menu principal, podemos ver que, ao clicar no botão Iniciar, geramos o primeiro gerador, temos o nível do gerador em um Finalmente chegou a hora. Acesse nossa linha do tempo, o evento finalizado e nosso primeiro item Vamos usar o ator spawn da aula. Vamos dividir a transformação e obter um local de chamada. Para usar como ponto de desova para localização. Isso significa que nosso item realmente aparecerá dentro do nosso baú, como no zero, zero , as coordenadas locais dessa planta, que seriam “estamos aqui Mas isso não é um problema, porque vamos criar uma mecânica em nossos itens para encontrar um local próximo ao nosso peito Mas esse código estará em nossos itens. Não. Estamos respondendo ao primeiro item. Vai mostrar o item da classe P. E temos o nome da nossa linha, que é I six, que na verdade é nossa chave, não é? Porque I six é o padrão e é a chave. E este é o único lugar que vamos gerar a chave, vamos mantê-la em seis e vamos adicioná-la à nossa lista de destruição Para fazer isso, obteremos nossa referência do gerador de mapas. Vamos fazer com que os atores destruam a partir dele e vamos adicionar a essa matriz o valor de retorno do ator gerado Para o resto dos itens, vou apenas copiar o item phone actor BP Vou conectar a localização do ator e vamos criar um loop personalizado. Ou podemos até mesmo colocá-lo em um for loop act to tom or loop. E você viu o que aconteceu? Quando eu tenho esses dois conectados assim, mas eu queria um nó por trás desses dois. Então eu simplesmente arrasto daqui, eu faço ou loop node, e ele conecta automaticamente o que eu queria fazer. Mas é sempre bom verificar se as conexões estão corretas. Agora, para o último índice, vamos usar o número máximo de itens. Para o primeiro índice, usaremos o número um porque já geramos um item Então, se quisermos gerar três itens, devemos começar com um Porque se começasse do zero , geraríamos um item extra Agora, para cada item gerado, precisamos novamente adicionar atores para destruir uma base de cópia, este aceno de adição aqui Vamos agregar esse valor aqui e levar isso para os atores destruírem. Em frente a esse caminho. E a razão pela qual preciso fazer o oposto é que , quando eu me conecto, esse é um nó curinga. Então, qualquer coisa à qual eu me conecte, a primeira coisa que eu conecto, ela obterá o tipo de dados dessa coisa. Aqui, estamos retornando um tipo de objeto de item VP, enquanto nossos atores a serem destruídos são atores Um ator está acima na hierarquia do item VP. Portanto, não posso adicionar uma hierarquia acima a algo nas partes inferiores Quando eu conectei isso, ele se tornou um objeto de itens VP , onde o objeto do item não pode ser um ator, mas o ator pode ser um objeto do item Então eu vou desconectar isso, vou conectá-lo aqui, e depois conectar isso Todos os nossos atores que estamos criando estão sendo adicionados aos atores para serem destruídos Agora, quais itens eu seleciono a partir do ID bruto, nome, vou selecionar e, para o curinga, para itens, curinga aleatório. Vai ser 0-4, três a quatro cos 01234. E vamos começar com o ouro que eu tenho. Você sabe o que? Como sabemos que nossa tabela começa com I, o que posso fazer é usar um anel Se eu digitar corretamente,. O que significa um cordão de caneta? Significa que somos uma string pendente de A para a string B. Se eu colocar I aqui, e eu conectar o número inteiro anum aqui, e eu obtiver I e algum número, e eu posso conectar isso diretamente aqui, em vez de sentir que todos eles escolhem E essa seria a pedra de nossos itens quando clicássemos em nosso peito Vamos verificar tudo isso mais tarde e vamos depurar tudo o que for necessário Mas, por enquanto, vamos deixar como está. A única parte que falta no momento é o nome do baú no widget Porque temos um widget aqui. Quando aparece, precisamos ser um nome, e a classe do widget não é Estou no item. Sim, é o mesmo. Eu não selecionei a classe de widget nesses dois widgets. Você vai fazer isso agora. Vamos chamá-lo de W G. Item world. Isso é um widget Pi Save on Pile, e aqui faça o mesmo mundo. Dave e compile. Oh, meu Deus. É um movimento padrão porque está aqui e aqui. E vai automaticamente. De qualquer forma, vamos até o widget e vamos criar uma função No evento gráfico, é claro, o gráfico de eventos do designer. Vamos chamar essa função. Agora, isso é um pouco redundante novamente. Na verdade, vou falar com um designer primeiro. Vou selecionar o texto porque não é uma variável. Deve ser uma variável, para que eu possa usar o motor. Vamos nomeá-lo também para o item de texto real. E eu poderia estar em nossa planta e simplesmente pegá-la do widget, dessa parte, e simplesmente arrastar Também aqui está pronto. Bem, como você pode ver, está pronto, é a mesma função, basicamente. Mas eu não preciso arrastar o item t do widget dessa forma Não, isso vai complicar um pouco as coisas. Agora, para colocar o texto em nosso peito. Precisamos trazer nosso widget. E, como fizemos com o componente filho, precisamos obter o que está dentro do componente filho, o que é o ator? Qual é o ator infantil do componente infantil? O mesmo que precisamos fazer com o widget. Esses são componentes, componente widget, componente ator filho, componente de malha estática, mesmo aqui o mesmo, precisávamos adicionar que tipo de malha estática São células que guardam a informação, mas não sabem o que estão guardando. Temos que perguntar a eles. Para perguntar isso, vamos pegar um widget. E então precisamos ver se o widget que obtivemos é nosso mundo de itens do WG it, algo assim Então, vou lançar para o mundo de itens do WG. Sabemos que isso é tudo o que vamos conseguir. Vou convertê-lo em puro elenco. Mesmo que não, teremos sucesso, mas precisaríamos implementar algum código. Mas a partir daqui, vou só mandar uma mensagem. Agora está aqui assim, mais fácil. Menos nós. Quanto mais notas você tiver, mais a torre pode se tornar realmente uma torre de defesa após um ponto. Então, para o texto, vamos pegar peito, e pronto. Compile e salve E do ponto de vista da programação, nosso baú está pronto. Não poderemos jogar com ele agora. Não conseguiremos ver isso. Isso é uma chatice, mas o faremos quando nosso personagem estiver habilitado quando nosso personagem estiver habilitado e poderemos marcar tudo isso caso não funcione Adeus por enquanto, cante a próxima música para você. 65. Baús de sala escondidos: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco chamadas processuais Dungeon Action PZ Na lição anterior, terminamos de criar nosso grande baú VP Começamos armazenando uma variável do número de itens que adiamos e encontramos um valor aleatório entre três e Mx, que é o nível do gerador Em seguida, definimos o texto em nosso widget. E, finalmente, adicionamos a funcionalidade spawn actor no final de nossa linha do Adicionamos o primeiro item para ser a chave que sempre queremos descartar e, em seguida, adicionamos esse ator à matriz a ser destruída. Em seguida, criamos um loop de quatro com o número máximo de itens como último índice e o primeiro Índice um, como estão, pois geramos a primeira chave, o primeiro item, e depois continuamos gerando o resto dos itens e adicionando-os à lista de atores para destruir Criamos uma pend de I mais um inteiro aleatório de 0 a 4 para obter um item aleatório por meio do nome bruto, porque nossa tabela de dados se chama I e um número, e essa parte tem um Começamos do zero quando queremos começar do um e terminar no item cinco. Novamente, temos um intervalo de quatro porque nossa tabela de dados vai para itens da tabela de dados. Começamos com I um, dois, I seis, mas queremos gerar itens aleatórios de 1 a Agora, já que temos a caixa grande. Na verdade, podemos duplicá-lo e criar uma pequena caixa com ele Eu vou ver adereços. Vou até nosso baú grande, vou duplicá-lo e chamá-lo de baú PP. Nós vestimos o grande. Agora, vamos abrir isso. Vamos alterar algumas configurações. Vamos definir os itens mínimos para um e o gerador um mais um. Portanto, ele abrirá de um a dois itens e a cada nível mais. E como vamos gerá-la nas salas escondidas, vamos estabelecer uma regra de que essa sempre gera uma poção do tempo, que em nossa tabela de dados é Volte para o baú e coloque esses dois I cinco em vez de uma chave. Agora, vamos deixar o resto igual para que você possa colher duas porções de cada vez, isso realmente não importa E vamos até nosso gerador de labirinto. Nós vamos até o proponer. Vamos copiar esta parte, que tem os quartos, mas não precisamos dos quartos. Só precisamos de tudo isso. Não precisamos de instruções, mas vamos mudá-las. Vamos colar aqui. Para a matriz, precisamos dos quartos, eu acho, nós os nomeamos. Pegue nossas matrizes. Quartos Biden. Mas é um ST, então vou desconectar isso Vou conectar isso aqui. Estou aqui, vou fazer uma pausa e vou copiar o ritmo do quatro loop, conectá-lo assim. configuração clássica, e aqui em diante, precisamos fazer o teste de pressão arterial. Não precisamos das instruções. Precisamos conectar esses dois pinos aqui. E vamos colocar também outra regra aqui, colocando uma ramificação em que nossas coordenadas atuais não estão contidas na matriz de corredores especiais Portanto, caso um de nossos corredores especiais seja considerado oculto. Nós vamos dizer não. Nós não vamos gerá-lo. Vou conectar isso aqui ao completar este. Isso também pode ser feito em uma sequência. Cada sequência deve executar um desses segmentos. Mas vamos deixar assim por enquanto. Se formos jogar compilar, vamos ver se geramos o pequeno baú nas salas escondidas Enquanto estamos na sala escondida, aqui temos. Não há baú. Mas vemos o widget, mas há um baú Acho que é o baú final. Vamos encontrá-lo. Fim do baú. Aí está o baú. Aqui está. Parece um pouco pequeno. É um baú grande, mas parece um pouco pequeno. De qualquer forma, vamos descobrir por que ele não gerou o pequeno baú nos quartos escondidos Da jogabilidade. Vai ser algo simples novamente, provavelmente um galho falso. Sim, perguntei se contém e tem que conter, não. Isso deveria estar em falso. Vamos jogar. Eu vejo uma sala escondida aqui, e ela tem um baú, que parece o mesmo. Agora, vamos corrigir isso. Vamos até nosso novo baú. Acho que temos um baú diferente. Eu não vou pesquisar assim, vou para a pasta de malhas, as malhas estáticas aqui, nós estamos e tem outro baú Não. Agora vamos verificar novamente, e está aqui. Não é que tenhamos adicionado uma câmera. Oramos demais para Gap e ela foi adicionada. Vou usar isso na parte inferior e isso na parte superior. Vou trazê-los um pouco mais perto, para frente. E parece bom. Agora, eles pareciam um pouco pequenos. O que podemos fazer é ir até o baú grande e definir seu e para 1,5. Se for demais, 1,25. Da parte. Ok. Não, não está nada bem. Agora, está mais ok. Vamos fazer isso para este baú também 1,25 Tudo bem Enquanto. Vamos apertar play. Eu verifico e não vejo nenhum quarto escondido. Isso é um oculto. nosso baú pequeno e em algum lugar está o grande. Descubra isso também Aqui está. Como podemos ver, ele aparece ao lado de uma porta. Precisamos adicionar a regra para as portas desse baú também. E ainda é um pouco pequeno. Não é tão impressionante. A chave do peito deve ser maior, então vou torná-la 1,5 abaixo de 1,5. Mas parecia muito na escala de um baú pequeno. É isso aí, vamos para o nosso labirinto. Vamos até o local em que estamos usando as instruções do baú, que está logo no início da criação de núcleos para o peito. Nós temos as regras aqui. Estamos verificando se ele está contido nos blocos especiais. Precisamos trazer essa funcionalidade que fizemos com que fosse adjacente. Vamos conectar as coordenadas aqui. Coloque ou coloque porque, se for um ladrilho especial ou adjacente à porta, não o crie Não adicione o índice do tesouro. Compilando, salvando. jogar só para verificar o tamanho. Sabemos que a regra está funcionando. Aqui está, e é um pouco pequeno. É muito pequeno. Então, vamos ao extremo e colocamos a escala em dois, e isso será dois, o que quer que seja dois, menos que nosso jogador não consiga passar, mas vamos mudá-la novamente. Agora está tudo bem. Só para dar uma olhada. Nosso peito. Aqui está, certo. Este é um baú grande agora. Podemos encontrar isso facilmente nos corredores e identificá-lo. Este é colocado ao lado de uma torre, também do portão do inferno. De qualquer forma, na próxima lição, devemos começar a criar o mecanismo para que os itens sejam descartados. Mas antes disso, deixe-me fazer uma explicação bem rápida. Então, sabemos o que vamos fazer a seguir. Sabemos o que vamos programar. Eu vou trazer tinta. E vamos considerar que este é o nosso bloco novamente. Esta é a nossa pilha, e nosso baú aparece em algum lugar aqui. Agora, quando geramos nosso item, ele é serrado aqui no meio Se virmos três D V, digamos que esse arquivo fica assim, e temos nosso baú aqui, que está aberto. Nunca abordaria isso, mas de qualquer forma, e nosso item aparece aqui O que vamos criar é um sistema que, a partir do local em que o item é gerado, faremos com que um ponto aleatório no ar se torne polar E a partir desse ponto, vamos começar a traçar a linha em direção ao solo Mas vamos traçar uma linha em um raio ao redor da caixa. Vamos obter linhas contínuas, mas muitos pontos, muitos pontos ao redor da caixa, que definiremos o raio E quando encontrarmos o local onde podemos pousar o item, e ele estará no chão, diremos que esse é o lugar que você precisa ir. E para fazer isso, vamos fazer uma animação que o item vai daqui até aquele local. Mas isso é algo que eu vou fazer no próximo? Isso é o suficiente por enquanto. Adeus Te vejo então. 66. Animação de gota de itens perto do peito: Olá, bem-vindo ao workshop de Design de Jogos e ao verdadeiro curso de criação de RPG de ação Procedural Dungeon do Engine Five RPG de ação Anteriormente, adicionamos o pequeno baú e corrigimos alguns bugs que aconteciam durante o jogo. Na verdade, também aumentamos o tamanho deles. E uma coisa que não abordamos foi que, quando jogamos, na verdade víamos o widget da caixa grande e da caixa grande Caixa grande. Aqui está. O que aconteceu é que a caixa grande estava na verdade em nossa visão original. Você pode ver que ele apareceu agora. Se eu ejetar a posse novamente , jogue o jogo. Você pode ver que isso realmente está no lugar em que deveria estar. Mas se eu mover isso, eu movo a caixa novamente, você pode ver que a ponta da ferramenta do baú está acima dela E agora podemos realmente ver como ficaria. É um pouco grande, mas tudo bem. O que vamos fazer é configurá-lo então, para que não possamos vê-lo por padrão. Então, vamos até nossos widgets, o item de impressão azul, essa visibilidade, invisível E vamos fazer isso para a caixa, o baú grande, o widget, a visibilidade Visível e também para o peito pequeno. Temos visibilidade invisível. Agora, vamos voltar ao nosso item e criar a mecânica que explicamos Mecânica em que selecionaremos um ponto acima do item, lançaremos algumas linhas de rastreamento, encontraremos um local vazio e geraremos o item A maneira como vamos fazer isso é usar apenas uma caixa delimitadora E encontre o ponto dentro dessa caixa delimitadora. A desvantagem dessa técnica é que talvez a linha se fure para mostrar que está indo para lá, mas o item pare devido a colisão ou algo na caixa, ou pode até encontrar uma linha que esteja batendo na caixa e diga que isso é aceitável e Hum, pode haver maneiras de criar alguma função que criamos como um círculo e, em seguida, para esse círculo, vamos dar uma porcentagem de mais ou menos em direção a Ou o que poderíamos fazer é criar algum código para verificar se nossa caixa de ligação é um ponto que encontramos, como quando eu jogo uma linha daqui e ela cai aqui Pertence às coordenadas do centro até aqui? Por exemplo, criamos uma zona morta que não solta itens aqui. Mas não faremos essas coisas. Vamos simplesmente colocar uma caixa e ganhar um ponto na caixa. Isso seria suficiente agora. Não, vamos ao nosso item no início do jogo. Então, há algum tempo, falei sobre por que os loops e por que não devemos usá-los na jogabilidade Bem, para cada regra, há uma exceção. Há alguns motivos pelos quais precisamos usar il loops na jogabilidade, o que, na verdade, interromperá o jogo se não o fizerem Por exemplo, temos uma mecânica de quebra de jogo, como, por exemplo, nossa chave no momento, queremos ter 100% de certeza de que ela está caindo Não cairá para fora do mapa , não cairá em nenhum outro lugar , cairá e poderemos pegá-lo. Nosso sistema realmente não cobre isso, mas é uma exceção que poderíamos usar um loop wile para esses cálculos Eu encontro o lugar correto. Precisamos redefinir nossas regras, se isso está demorando, se isso está melhorando nosso jogo, se isso está fazendo alguma outra coisa, se isso está fazendo porque se não o fizéssemos, isso quebraria o Agora, é claro, há outros motivos para usar loops dentro da jogabilidade Algumas mais avançadas seriam alocar recursos, memória e, em termos gerais, mecanismos de quebra de jogos poderiam usar loops para garantir o resultado Oh, o que vamos fazer agora é criar uma variável do tipo vetor, que eu acho que não criamos uma antes. Esse é um vetor de três pontos, três números inteiros, e vamos nomear esse local de obtenção Lembre-se de que isso ocorre em todos os itens. Quando um item estiver surgindo, esse código será executado Vamos buscá-lo para cada local-alvo. É igual a zero, que é nossa variável padrão original. Esta será nossa condição para um ciclo selvagem. Vou conectar isso aqui. Agora, a segunda variável que vamos criar é nossa variável is, que será do tipo inteiro Não precisamos perguntar isso como condição porque, internamente, no loop corporal, mudaremos com base na localização do alvo, então isso interromperá nosso loop Não. A primeira coisa que o corpo faz é adicionar 12 ts. E agora as coisas complexas começarão a começar, um pouco complexas. Não é tão complexo. Vamos acelerar. Ajudar é importante. Sim. Pausa meu gel Não é uma corrida multiesférica, apenas um traço esférico, porque na primeira bateria queremos apenas um resultado de calor Não queremos obter uma lista deles. Não. O ponto de partida. Vamos descobrir a localização do nosso ator. E vamos adicionar a Z. Digamos que 200. Um pouco alto, mas está tudo bem. Mas agora criamos esse ponto aqui. Agora, para o nosso alvo, obteremos um ponto aleatório na caixa delimitadora. Não. Porque, como você pode ver, isso é completamente diferente. Isso requer navegação. Como pudemos ver , estava na guia de navegação, que está na guia AI. Não queremos isso em um ponto aleatório na caixa de fundação. Agora, para sua metade do tamanho, vamos usar o dobro do tamanho 600. É maior. Mas isso poderia jogá-lo internamente em outros blocos Então, vamos usar metade do tamanho desses 300, cento e um z. E obtemos um ponto. Basicamente, temos um ponto no chão nesse nível. Agora, se estamos aqui em cima, como apontar esse ponto? Não, vamos obter ou ou, que é uma direção em direção , e vamos multiplicar isso pelo nosso alcance Quanto subimos, se formos x, estamos começando daqui, quanto subimos? Porque se for uma direção de 0,1, digamos que todo o resto seja zero, então isso significa que no eixo x, vá 0,1, multiplicado pelo número seria essa direção Muito longe. Para fazer isso, vamos mudar isso para um número inteiro, e eu vou multiplicar por um número positivo Vamos multiplicar por menos, digamos 500. Então, em vez de subir, vamos descer. E se adicionarmos isso a esse ponto, chegaremos ao nosso destino final nesse ponto. Vou conectar isso a n. Vou definir o raio para, digamos, n. Então é uma bola um pouco grande, não apenas uma linha, porque se quisermos bater na caixa, devemos conhecê-la um pouco A próxima coisa que precisamos é , na verdade, o que vamos atingir? Não é isso se acertarmos. Portanto, não podemos colocar um galho aqui, digamos, odiamos que algo o gere lá Preciso saber se o que aquecemos é o que queremos, que é o chão. E faça isso, vamos apenas usar um puxão no chão. Vamos até nosso andar, que é o ladrilho da BP, ir até a janela de exibição, selecionar nosso piso, ir até rebocadores, o rebocador e vamos digitar Agora, de volta. Agora que adicionamos o rebocador F. Vamos voltar ao nosso item. Vamos verificar nosso resultado de aquecimento. Eu vou quebrar essa estrutura. Vou até o componente de aquecimento e perguntar se ele tem puxão. Vou colocar um galho aqui. E agora, não é a única pergunta que queremos fazer se for F, mas queremos perguntar se nossas tentativas também são , digamos, iguais a. Vamos tentar 30 vezes. Não se conecte aqui. Agora, será se tiver F ou se as tags estiverem acima de 30 ou iguais a 30. Em seguida, definiremos a localização alvo como nosso ponto de impacto, que é o ponto, o ponto real de impacto. E poderíamos definir o local que também não importaria muito. Mas por que não usar o ponto de impacto? Agora, apenas para uma demonstração, conecte essa condição. Basta conectar o 30 igual a 30. O que quer que aconteça, ele tenta 30 vezes, e vamos começar nosso jogo e vamos jogar. Vamos ejetar o navegador de conteúdo. Você vai trazer um item ao mundo. Faça isso. Mais uma vez , indo para o mundo. Oh, caso você não esteja vendo os pontos fora da câmera. Talvez eu tenha habilitado eles a desenhar o tipo de bug. Então, precisamos que isso seja persistente para ver as linhas. Agora, podemos ver que isso foi tentado 30 vezes para encontrar o chão ao redor. Mas isso está um pouco próximo do item. Então, vamos aumentar o tamanho do boi, vamos puxar cem, 600 Ele novamente. Vamos trazer outro item. Ok, agora eles estão um pouco mais espalhados. Ei, duplique isso. Duplicando aqui e movido para cá. Ao começar a jogar, você pode ver os dois pontos de fixação diferentes. Eu acho que está tudo bem. Talvez possamos torná-lo um pouco maior porque o baú está molhado no local aqui. Centenas de centenas. Oh, é muito grande. Eu trouxe isso para longe. Além disso, você vê que eles estão bem abaixo do item. Na verdade, isso ocorre porque eu aumento o alcance. Seja honesto, eu só queria mostrar um aumento no alcance. Na verdade, isso poderia funcionar assim. Seja, estamos ganhando um ponto com o item e depois vamos daqui para lá. Então, vamos jogar novamente. Isso vai longe demais. Esse valor está muito errado. Vamos usar o 300. Eu acho que 300 estava bem ou o 600 era o 600, não é? Traga isso aqui. Agora flui, o jogo flui. Ok, então precisamos disso, na verdade, nem tanto, eu preciso dele ligado, digamos 50 ou sim, vamos mantê-lo em 500. E o motivo é que o motivo pelo qual o meu correu é porque não estava funcionando Na verdade, foi. Mas quando chegou a 30 tri, isso não era válido, esquentava nada porque vamos sentir dor Se começarmos do topo e formos exatamente até lá. Não significa que estamos tocando lá. Isso significa que chegamos lá. Além disso, essa distância B é maior do que isso, desculpe. Essa distância, 300. Daqui para chegar ao chão. Precisamos desse alcance extra. Talvez eu tenha usado um pouco a explicação, mas precisamos do alcance extra para alcançar o chão porque estamos em um declive e porque precisamos atravessar o chão para tocar o chão, não ir até lá. Vamos conectar essa linha fina e, na verdade, vamos usar o alcance 600 Eu acho que estava parecendo melhor. Só mais um teste se ele esmagar, e vou deixá-lo aqui. Acho que nunca diga nunca. Eu trago isso aqui. Não vejo nada. Isso ainda está se movendo e eu estou me movendo, então não travou. Pode ter desligado o item aqui. Sim, eu desligo a linha de depuração. Ah. Vamos tentar novamente. O item. Cai porque eu o coloquei no meio do ar, para que ele não alcance o chão novamente. Se eu pudesse ejetar agora, você veria que a chave está muito, muito longe da masmorra Ok, vamos parar por aqui. Vamos testá-lo novamente no próximo. Tchau Te vejo então. 67. Animação de itens de acabamento com linhas do tempo: Olá, bem-vindo de volta ao workshop de design de jogos e ao processual de criação de espiões de ação de Dungeon com cinco procedimentos do R Engine espiões de ação de Dungeon Na lição anterior, demonstramos a importância de usar loops silvestres infinitos e ilimitados e por que devemos usá-los somente na mecânica básica Agora, estou tentando depurar algo. Estou tentando mostrar algumas coisas de uma forma muito longa, como adicionar itens como esse em tempo de execução, e especialmente quando eles começam com um loop wi é uma péssima ideia. Hum, excesso de confiança, talvez. Mas sim, muita coisa pode acontecer. Então, se eu for jogar de novo, vamos fazer mais profissão, e eu vou para o lado do chão. Vou trazer o item aqui. As linhas realmente tocarão o chão. Vamos encontrar nossa entrega. Sem itens. Traga-o aqui, e eu não ligo as linhas das malas. Dave, porque quando você está falhando, você está perdendo Além disso, quando você está travando, você precisa controlar, excluir e finalizar o projeto De qualquer forma, ele escreveu uma linha, mas na verdade não podemos dizer, então eu esperava muito por você. Sim. Eu acho que está tudo bem. Vamos parar. Vamos voltar ao nosso item. Esse é o widget. Item. Encontramos um ponto para soltar nossa chave para devolver nosso item, qualquer item. O que vem a seguir? A próxima coisa deve ser tornar nosso item visível, porque, sejamos honestos, um item parado lá até descobrir para onde vai, depois faz uma animação e vai para um lugar não é muito bonito porque digamos que 30 ts podem levar não meio segundo, mas 0,1 de segundo. O olho perceberá isso, veremos o item em que eles estão sentados e, de repente, se movendo. Então, vamos tornar nosso item visível e oculto no jogo, então é verdade. Isso está na malha do item. E depois do nosso i loop, vamos criar um evento personalizado. Vamos fazer isso em qualquer outro lugar. Anime o item. É assim que chamaremos esse evento. Porque agora vamos reproduzir a animação. Incompleto. Para animar o item. E a primeira coisa que vamos fazer é tornar nossa bagunça visível Visível. Que então seja falso. A próxima coisa que precisamos é armazenar a localização original do nosso ator, então vamos pegar o ator. Vamos promovê-lo para uma variedade. Eu o chamo de original porque precisamos animar daqui até lá Isso é daqui. Agora, tudo o que precisamos fazer é adicionar a linha do tempo. Agora, vamos conectá-lo para pagar desde o início. Vamos seguir nossa linha do tempo, criar um caminhão de fluxo Vamos precisar de pontos. Se eles estiverem doentes. O primeiro ponto seria zero valor zero. O segundo ponto seria 0,25 e um. Um. O terceiro ponto seria 0,5 a mais rápido. Eu acho que está tudo bem. O valor seria na verdade zero, então retornamos à base terrestre. E esse seria o nosso movimento. Que seja um pouco melhor. Agora, como eu havia selecionado este, ele estava tentando encaixar apenas este com o anterior porque eu pressionei o Zoom vertical também. Quando selecionamos alguns pontos e pressionamos esse zoom pzonal para vertical, ele tentará fazer os pontos que temos mais o anterior Agora, vamos selecionar todos eles, na verdade. o botão direito. Isso é automático. W para clicar na parte superior. Talvez torne o c um pouco mais parecido com isso. O primeiro também. Isso é bom. É um pouco maior do que o que vamos calcular. Agora, o que queremos é até este ponto que o item suba em linha reta e, em seguida, vá na direção em que queremos fazer isso. Precisamos voltar para tomar providências. Para mover o ator, não apenas a malha de itens, isso vai durar até o momento. Então, queremos deixar a Vector criar esse movimento. Então esse é o nosso Alfa. Vamos chamar esse movimento do golpe ao movimento, este é o nosso movimento Alpha. Dissemos, até 50%, basicamente, porque é 0,25, e sabemos disso Até 50%, queremos subir, então se for menor que 0,5. Queremos seguir uma determinada direção. O B, nosso alvo, precisaria mudar. Então, podemos colocar uma seleção aqui. A condição é que esse íon seja nosso Alfa, menos da metade. Se quisermos subir, deve ser nossa localização original. L. Digamos que 200 de altura. E se não for, então devemos ir até o alvo. Também vamos conectar o local de destino. Agora, vamos pensar nisso por um momento. O que nosso Alpha faz? Porque desde agora, usamos 0-1 Mas agora estamos usando 0-1 e novamente até zero. Isso significa que quando essa linha do tempo terminar, Alpha seria No Alpha s A. A seria o último ponto seria o fim desse leerp, porque esse Alpha voltará Então, não queremos isso em B. Na verdade, queremos isso em A porque nosso alvo é na verdade A. Então esse também tem que mudar. Esse seria nosso B real abaixo de 50%. Vamos 0-1 0-1 seria o mais 200. O que seria o Alfa, o verdadeiro ou inferior a isso? Bem, essa seria a localização original. Vamos rever tudo mais uma vez. A Se estivermos abaixo de 50% do Alfa, temos 0-1 ir de A para B. Se estiver abaixo de 50%, vamos do original para a nossa altura Se for depois de 0,5%, vamos de B para A, que seria nossa altura, e indo para A, que seria nossa localização alvo Espero que não tenha sido muito confuso, mas foi assim que fiz funcionar Mas chega disso, vamos fazer mais uma coisa aqui. Vamos adicionar outra faixa de fluxo. Desta vez, será uma trilha de fluxo muito simples. Além disso, a roda do mouse realmente não funciona aqui porque aumenta e diminui o zoom Você precisa ter a roda do mouse aqui para funcionar, se você já a tiver aqui, basta clicar e soltá-la. Não. Essa será uma trilha de fluxo simples. Teremos dois pontos de zero, valor zero. Vamos para 0,5 valor um, e não vamos esquecer de usar nosso último quadro k porque ambos estão em 0,5 0,51 E o que faremos é selecionar nossos itens. Vamos definir seu k como zero. Vamos trazê-lo aqui e definir três D. World Scale três D. Vamos gravar essas coisas Na verdade, está um pouco mais longe. Essas duas linhas não são necessárias. Podemos ler aqui. Eu recebo uma linha. Agora, na nova escala, vamos deixar Vector. Acho que todos nós podemos ver para onde isso está indo. Vamos usar o novo caminhão para Alpha ou B, vamos definir 111. Ah, o item ficará maior à medida que atingir sua meta e atingirá seu tamanho original. Então eu acho que isso seria para este. Eu vou te ver na próxima. Adeus 68. Mostrar widgets de itens e inventário: Olá, bem-vindo ao Game Design Workshop, no curso Procedural Dungeon, no engine five RPG de ação Anteriormente, basicamente animávamos nosso item de entrega. Então, como funciona no início do jogo, ele funcionará com monstros e quedas no peito Ou se as torres do inferno também caírem alguma coisa, é assim que os itens serão derrubados Por isso, criamos um evento personalizado chamado item animado. Usamos a malha do item para defini-lo como não oculto porque ele começa oculto. Armazenamos nossa localização original. Fizemos alguns métodos estranhos que explicamos para definir a localização E também aumentamos a malha de 0 a 1, para que pareça maior à medida que sai do peito Agora, a próxima coisa que devemos fazer é pegar nosso widget. Na verdade, isso pode acontecer em dois momentos diferentes. Isso poderia acontecer. Isso pode acontecer após a queda do item, então podemos usar a opção Concluído na linha do tempo ou antes Não, vou fazer isso antes que o item realmente caia, porque é assim que geralmente acontece, especialmente em todos os jogos Ablo. Basicamente, no modo multijogador, você não conseguia ver os itens caírem. Todo mundo os estava pegando no ar. Então, vamos manter isso assim. Vamos mostrar o widget no momento em que ele inicia a animação, basicamente Dessa forma, seria possível selecioná-lo a partir do momento em que pudéssemos clicar no widget Acho que em Diablo, até os widgets são animados, mas não vamos fazer isso Vamos chamar isso de evento personalizado. Widget. Mas precisamos preencher algumas informações aqui. Mas antes de tudo, vamos chamar esse evento show widget. Vamos falar aqui que chamaremos de item animado quando concluído. Vamos fazer uma sequência. E o primeiro seria um item animado. O segundo seria Mostrar widget. Ah. Primeiro de tudo, vamos pegar nosso widget Então pegue o widget. Como dissemos, este é um contêiner e o contêiner, precisamos pegar o widget e, em seguida, perguntar qual widget você é Então, vá para o mundo dos itens. Um mundo de dois itens e esse texto. Para nosso texto, precisamos dos dados do item. Precisamos quebrar a estrutura e conectar o nome do item. Ah. A próxima coisa que precisamos é de algo para ativar e desativar nossa visibilidade de widgid Então, vou criar uma função. E vamos chamá-lo de rígido. Vai precisar de uma entrada de y. Vamos chamar isso. E aqui, vou obter a referência do widget Vou dar visibilidade ao que quer que seja esse alfinete. Só que eu preciso gerar eventos de sobreposição. Para qualquer que seja a visibilidade, novamente, chame visibilidade assim, mas lembre. Além disso, precisamos que uma colisão termine com uma seleção aqui, e o seletor será basicamente isso Então é verdade. Precisamos apenas de consulta. Se for falso, não precisamos de colisão. Por que precisamos realizar essas duas etapas porque, mesmo que um widget seja invisível, há uma chance de que suas configurações de interação ainda permitam eventos de entrada Ao dizer isso, quero dizer, estou desativando a visibilidade do componente do widget, mas os widgets, na verdade, têm algumas outras configurações Por exemplo, se formos aqui e definirmos a visibilidade, você poderá ver que ela está visível, desmoronada, oculta e não testável pelo calor Isso significa que ele é visível e pode ser testado termicamente onde pode ser clicado nele Então, por que não deixar a colisão acontecer, também para ficar mais seguro Pode ser um pouco exagerado, mas com certeza é um exagero , mas é melhor prevenir do que remediar melhor prevenir do que remediar Isso não acrescenta muito, na verdade, faz com que faça menos cálculos. E, basicamente, até mesmo esse ator poderia, mesmo invisível, receber a entrada e enviá-la para o widget, então o widget pode nem ser responsável De qualquer forma, há muitos motivos pelos quais às vezes você coloca algum código extra apenas para cobrir algumas bases extras. Em vez de pesquisar, qual configuração estaria desativada. Às vezes, fechar algumas configurações raiz é melhor do que pesquisar subconfigurações Então, estou divagando. Vamos voltar ao que estamos fazendo. Então, estamos mostrando widgets e agora temos uma maneira de ativar e desativar nossa visibilidade Mas quando queremos que nossa visibilidade seja ativada e desativada em nossos itens no widget ou em nosso projeto O que vamos usar é passar o mouse sobre os eventos. Mas quando terminarmos de passar por alguma coisa, enviaremos uma mensagem com o mouse sobre você. E quando estivermos enviando quando estivermos fora desse objeto, enviaremos uma mensagem, A, apenas o mouse que sobrou sobre você. E essa será uma das nossas formas de dar visibilidade ao widget Então, o mouse passa o mouse. Outra forma de usá-lo é ter um botão. Vamos ter a esquerda em. Mas quando pressionamos, mostramos todos os itens que estão dentro da nossa janela de exibição E a maneira como vamos fazer isso é usando algo chamado despachante de eventos Agora, a forma como os despachos de eventos funcionam em um ambiente aproximado seria enviar uma mensagem para tudo e, se tudo ouvindo, faria alguma coisa U Talvez seja uma das coisas, é uma das formas mais pesadas de planejar a comunicação. Não deve ser usado em coisas constantes. Não pode ser usado, mas sim, é a coisa mais pesada das comunicações de planos Vamos deixar isso aí. Não, como fazemos isso? Vamos até nosso controlador porque agora precisamos entrar em nosso território de controle. Então, personagem de cima para baixo, pasta de cima para baixo, plantas e PP, controlador de cima para baixo Não. Não vamos estragar isso ainda. O que vamos fazer é criar uma entrada, que é deixada de fora. E isso vai ser uma entrada constante. Não vamos colocar entradas aprimoradas neste projeto. E aqui embaixo das funções, macros e variáveis, temos os despachantes de eventos Vamos clicar no despachante do evento e nos itens da estadia Talvez. Não, vou compilar E eu preciso adicionar à entrada. Vamos chamar isso de visibilidade de itens. E vamos chamar outro Alt press. Isso vai ser um pouco redundantemente pressionado com a tecla Alt. Poderíamos usar apenas um, mas vamos fazer isso com dois para deixar um pouco mais claro. Então, quando estou pressionando Alt, quero ver todos os itens. É assim que enviamos um evento. Criamos, fazemos nossas entradas e fazemos uma chamada quando queremos na linha de execução Mas quando pressionados, quero que os itens sejam visíveis e pressionados com a tecla Alt , solte uma cópia e cole e descarte esses dois, que sejam falsos Vamos compilar e salvar. Vamos fechar o controle do jogo. Não precisaremos dele em um futuro próximo. Lo, podemos fechar muitas coisas. Podemos fechar o menu principal. E vamos começar a fechar isso. Agora, o que precisamos fazer é obter uma referência ao nosso despachante de eventos, para que possamos encontrar algo Para obter uma referência a ela, precisamos do ator, do objeto que a contém. Então, eu vou pegar o controle deles. E vou pedir que o controle seja de cima para baixo porque, como nosso modo de jogo, nosso controlador get pair é geral, e queremos especificar de cima para baixo para obter o despachante Vincule um evento ao que chamamos de itens do Hogle. Evento ao total de itens, isso vinculará um evento aos seus despachos Vamos conectar isso aqui. Vamos trazê-lo até aqui e criar um evento personalizado partir do nó de eventos do bind Vamos chamar isso de itens. Ou o total de itens é meu. Não importa. Vamos conectar isso aqui. Vamos conectar a visibilidade aqui e promovê-la a uma variável. Donnie, que em algumas coisas já recebeu o nome de nós. Bem, vamos abrir espaço porque estamos muito próximos um do outro. Quando começamos a jogar, estamos executando o item animado e mostrando o widget definindo seu texto e vinculando o show ou ocultando em A próxima coisa que precisamos fazer são os binds ho e hover. Bem, não é vinculativo. O que realmente usamos são algumas funções extras em nossas comunicações de itens P. I. Oh, eu vou adicionar uma função extra. Vou chamar isso de início. Acabou. Vou fazer mais uma ligação e mais uma vez. Vamos voltar ao nosso item. Vamos para a nossa interface, clique em finalizar o mouse, clique duas vezes em iniciar Nós temos esses dois. Isso seria fácil. Vamos obter visibilidade com a visibilidade para o verdadeiro, obter visibilidade para o falso. Agora, por que a prensa alternativa era redundante? O motivo é que realmente não precisamos mudar o cursor do mouse para perguntar se a tecla Alt está desativada e, se não está, desligar a visibilidade Porque não queremos que Ed passe o mouse quando pressionamos Alt para interromper a visibilidade E a outra maneira de fazer isso, que na verdade é melhor, seria pegar o controle do player e pedir a entrada. E aqui podemos selecionar alt ou ter nossas informações de tecla personalizadas, que anularia o propósito de pressionar essa tecla alt. De qualquer forma, isso seria para este. Eu vou te ver na próxima. Adeus. 69. Pegue itens e adicione ao inventário: Olá, bem-vindo de volta ao criação do Game Design Workshop Real engine five Procedural Dungeon Action Arbis Anteriormente, concluímos a criação de nossos eventos do show widget Adicionamos o texto ao nosso widget, que é o nome do nosso item Também vinculamos um evento do nosso controlador de jogo, um despachante de eventos, e explicamos como ele E criamos a função de visibilidade do widget que também totaliza a colisão do componente widget de e, em seguida, criamos o início e o fim do mouse do evento e os codificamos com a visibilidade da peruca E ao passar o mouse sobre o evento, usamos a tecla de entrada leste para baixo para verificar se nossa alternativa está abaixada, para que, quando passamos o mouse sobre um item e terminamos o foco, ele não Agora vamos continuar com nosso outro evento de interface, que é o de interação. Oh, eu vou aproximá-lo do começo. Sala. Você não precisa desses dois. Tudo bem. Então, a primeira coisa que farei agora antes de começarmos a criar toda a cadeia de eventos, é o que precisamos fazer e começar a jogar, pegar nossos widgets, obter widgets do nosso componente de widget E vamos converter o item em peso para o elenco puro. E vamos pegar o botão. Não o temos porque eu ainda não o tornei uma variável. Então, vamos ao nosso widget. Vamos selecionar nosso botão, e o botão 31 será chamado de botão do item, e vamos torná-lo uma variável. Agora, posso chamá-lo de dentro do item. Botão Obter item. E vamos nos unir. Então, se estamos clicando em nosso widget, estamos fazendo na verdade o evento intell act. Mesmo que seja uma interface de blueprint, ela ainda tem esse delegado de saída que podemos conectar ao nosso Agora, a primeira pergunta deve ser estamos ao alcance de escolher? E isso seria interagir. Vamos promovê-lo como variável. E quando for verdade, vamos definir a interação como verdadeira Talvez abra um pouco mais de espaço. Talvez, indo mais longe, você possa ficar sem espaço em um espaço infinito. Sempre incrível. Agora, precisaremos executar uma função de nosso humor de jogo. Mas não vamos preencher essa função completamente agora. Então, vamos ao nosso Holder de cima para baixo. Vamos para nossa pasta Blueprints e ver nossos humores de jogo Vamos criar uma função, todo o inventário, e ela terá a entrada de um nome. Reivindique, e a saída seria um Ben, que seria escolhido. Por exemplo, se a escolhemos ou não. Vamos deixar como está quando estivermos fazendo o inventário, vamos começar a preenchê-lo. Bem, vamos voltar ao nosso item e do nosso set interagindo, vamos e precisamos de informações sobre o GM Al GM do modo de jogo inativo. Vamos converter em puro elenco. E vamos adicionar ao inventário. Agora, para nome bruto, vamos usar nosso nome bruto. E depois, vamos ramificar com base em se escolhemos o item ou não. Vamos começar com o. Oh, o que vai acontecer quando não estivermos escolhendo um item Vamos reproduzir uma animação novamente, vamos adicionar online. Vamos entrar nessa linha do tempo e vamos criar uma trilha de fluxo. As variáveis. O primeiro seria 00. O segundo seria 0,27, digamos que desta vez, e esse seria um, e o terceiro seria 0,6, que seria zero novamente. Agora, por que mais do que o cronograma anterior? Porque, já que não conseguimos pegar o item. Devemos indicar ao jogador que não é um item novo, caso matemos alguma coisa. Eu não sei. Escolha de design, considere a escolha de design. Eu considero que deveria ter uma animação mais longa porque não é captada, é algo para indicar ao jogador, isso não é normal. Quando você está soltando itens constantemente e, de repente , não consegue pegar algo, não deveria ser a animação usual que você vê mesmo um pouco de tempo Acho que mesmo um pouco de tempo ou mais tempo criaria um impacto Agora, o movimento seria muito fácil de fazer. Vamos para esse local. Vamos alertar o vetor. Eu uso essa nova faixa para Alpha e nossa. Esta localização final não deveria estar lá. Nossa localização alvo seria o Alpha, o A e a localização alvo plus. Como, digamos 150, seria RB. De onde estamos , subimos e depois descemos. E quando isso terminar, vamos nos transformar em interação Agora, se for verdade, se pegarmos o item, vamos usar o ator mais baixo. E isso seria. E isso conclui nosso código para nossos itens. Esse é todo o código dos itens. Agora, poderíamos começar com o inventário, mas precisamos fazer um pouco de pré-trabalho para iniciar o inventário em nosso modo de jogo. Então, quando estamos executando o inventário R two, qual agora clico para entrar no modo de jogo, precisamos ter algumas variáveis prontas. Uma dessas variáveis seria nosso nível de gon. Nível de gerador, nível de masmorra. Sim. Vai ser do tipo inteiro Para preencher esse nível tangente, vamos até nosso gerador e começaremos nosso jogo inicial e definiremos o modo de jogo Mova essa parte aqui. E vamos definir o nível de dangon para o nível do nosso gerador Traga-o aqui, conectando-se. Agora. A próxima coisa que precisamos. É um erro porque não foi compilado. Terminamos com os itens, compile a tabela. Vou fechar algumas banheiras. Existem muitos adereços. Não precisamos mais disso. De qualquer forma, agora eu posso ver. Então, estamos procurando o jogo antigo. Aqui estamos. Agora, a próxima variável que precisamos será de um mapa, basicamente. Com o primeiro, vamos transformá-lo em um mapa. A primeira chave seria nome, o que significa nosso item. E o segundo seria inteiro, que será o valor Vou nomear essa variável. Dobra. B, não precisamos guardar mais nada para nossos itens. Só precisamos saber qual item é e quantos desses itens eu tenho? Agora, estamos prontos para preencher essa função que faremos na próxima lição. Adeus por enquanto. Cante para você na próxima. 70. Contador de moedas e widget de coleta: Olá, bem-vindo de volta ao Game Design Workshop e ao curso de criação de ARPs de ação 95 Procedural Dungeon Anteriormente, terminamos com nosso item BP. Finalizamos nosso evento de interação e o vinculamos também clicando em nosso Widget Wood Item World Agora, quando estamos interagindo, perguntamos se somos capazes de escolher se estamos dentro alcance e se já estamos interagindo Se não estamos interagindo, estamos definindo a interação como verdadeira Estamos adicionando nosso item ao inventor. Estamos tentando adicionar o item ao estoque porque nosso valor de devolução foi retirado. Então, com base nisso, se não conseguirmos escolher o item, reproduzimos uma animação e, se escolhermos o item, destruímos nosso ator. Agora, depois, entramos no nosso modo de jogo e armazenamos o nível da masmorra por meio do nosso gerador Maze Vamos compilar isso, na verdade. E armazenamos o nível da masmorra no início do jogo e criamos um inventário variável, que é um mapa de nomes e números inteiros, nomes para a linha da tabela de dados e números inteiros para quantos temos Vamos continuar preenchendo nosso anúncio até o inventário. O que precisamos primeiro é nossa tabela de dados. Então, vamos obter dados. E para seu próprio nome, vamos conectá-lo a um nome. Para a tabela de dados, usaremos nossos itens de DT e, para nossa linha de saída, promoveremos isso para a variável local. Vamos chamá-lo de Data. Agora, vamos quebrar esse teta. E vamos fazer uma pergunta simples. Este item é aplicável Posso adicioná-lo ao inventário? Se eu não conseguir adicioná-lo ao inventário, significa que é ouro porque é nosso único item que não foi adicionado ao inventário. Isso significa que precisamos calcular quantas moedas vamos adicionar. Não. A primeira coisa que precisamos decidir é quantas moedas vamos adicionar. Oh, vamos subir nosso nível de masmorra. Vamos obter um intervalo aleatório. Vou começar com um e o nível da masmorra mais um. Na verdade, não vamos usar as moedas neste jogo. O que podemos fazer é que você pode fazer, se quiser, criar talvez uma loja de upgrade e criá-la em algum lugar ou colocar uma interface de usuário entre os níveis escolher algumas atualizações e gastar essas moedas Agora, vamos promover essa variável. Vamos nomear moedas e conectá-las às quedas. A próxima coisa que precisamos fazer é quando tivermos nosso widget para atualizá-lo Não, vamos começar a criar nosso widget de jogabilidade. Vamos para I. Vamos clicar e selecionar a interface do usuário, o esquema do widget, o widget er, e vamos chamá-lo de W G Eu vou abri-lo. Vou atracá-lo aqui. A primeira coisa que vou adicionar é um Canvas. Deixe-me ampliar por um segundo. Agora, para nossa interface de moedas, o que representará nossas moedas será uma caixa horizontal. E dentro dessa caixa horizontal, vamos adicionar um E o texto. A imagem seria para a imagem da nossa bolsa e nosso texto seria sobre quantas moedas temos Vamos selecionar os dois e configurar ambos para preencher com a diferença de que o texto deve ser alinhado no alinhamento central na horizontal e no alinhamento central e Para nossa imagem, vamos selecionar a bolsa. Deixe para lá um pouco mais. Certo? Agora, vamos tornar isso um pouco maior. Onde está nossa imagem e não sai muito. Acho que esse alfinete. Vamos selecionar nosso bloco de texto e colocar 30 nele. Quanto a, cabe quatro? Sim, quatro dígitos está bem. Até cinco dígitos estão bem. Vamos apenas três dígitos. Agora vamos usar as âncoras para ancorá-lo aqui. Podemos alterá-lo posteriormente em comparação com o resto da interface do usuário, mas agora, nós o temos aqui. E vamos transformar o bloco de texto em uma variável. Vamos chamar isso de pontos. Agora, vamos voltar ao jogo. E, na verdade, precisamos gerar esse widget. Então, vamos para o gráfico Even , como fizemos nos widgets anteriores Vamos criar um evento para clientes. Vamos chamá-lo de show game play. Vamos criar um widget. Vamos escolher a jogabilidade. O jogador proprietário é um controlador de jogador. Vamos promovê-la como uma variável. Vamos chamar isso de jogabilidade W. E vamos adicioná-lo à janela de visualização. Agora, vamos voltar para adicionar ao inventário, obter nossa referência da jogabilidade do WG e obter nosso texto de pontos Vamos definir o texto. Para o texto, vamos usar as moedas. Nosso próximo passo agora é novamente indicar que nosso jogador pegou alguma coisa. Novamente, precisaremos de um widget. Vamos usar o widget de jogabilidade novamente para isso. O que vamos fazer é duplicar essa bola horizontal, mas não dentro dela, mas não dentro dela, para enraizá-la no Canvas E eu vou fazer com que seja do tamanho aproximado. Eles têm aproximadamente o mesmo tamanho. E eu vou colocá-lo aqui. Vou colocar algumas âncoras em volta dela. Você pode colocar as âncoras do lado de fora, então aqui. O que eu vou fazer é reverter isso. Altere isso de 000 para escolhido em pontos. Isso é um pouco grande. Talvez precisemos de um formato ou tamanho menor. Oito. 28 se encaixa perfeitamente, e vamos animar isso Agora, para animar, vamos às animações. Como você pode ver, eu selecionei a caixa vertical, não algo dentro dela. Vou pressionar mais duas animações. Vou ligar para esse item, vou selecioná-lo, ir para rastrear. Como eu selecionei isso, posso realmente selecioná-lo como um elemento. Oh, eu vou selecionar a caixa horizontal. E eu vou pressionar mais e ele volta a se transformar, e agora eu posso manipular sua transformação ao longo do tempo Então, em zero, zero, vamos começar aqui. Digamos que em meio segundo, eu vou mover minha barra para meio segundo. Eu quero ter movido a tradução x aqui para 61, vamos limitá-la até Vou manter essa localização até, digamos, 0,8. Vou colocar esse copo aqui, e isso adicionará outra marca. Talvez 0,8 também seja. Vamos colocá-lo em um. Mude isso. Vou apenas arrastar isso, e vou arrastar também isso. Você precisa arrastar essa primeira ação. Acabamos de arrastar o ponto e ele sobreviveria. Eu abandonaria os dois. Agora, depois, preciso adicionar outro valor, na verdade, aqui em um, que seria nosso eixo y. Até 1,5, eu quero que isso seja reduzido. Quanto muito mais. Digamos que isso realmente não importe, porque também vamos desvanecê-lo Mas vamos deixar isso aqui, digamos 60. Agora eu quero adicionar uma faixa paga. Quando isso está acontecendo, talvez essa parte do ponto toupeira esteja bem. 0,9. F 0.9, eu quero adicionar uma nova faixa, que seria a opacidade de renderização Vamos partir de 120. É assim que animamos nosso widget. Mas queremos que isso seja reproduzido sempre que estivermos pegando alguma coisa Para isso, precisaremos de uma função. Mas vamos continuar com isso na próxima lição. Adeus por enquanto. Te vejo então. 71. Como corrigir a funcionalidade do contador de moedas: E bem-vindo ao workshop de design de jogos e ao motor real, cinco chamadas processuais de criação de Dungeon Action BZ Anteriormente, começamos a criar nosso anúncio para inventário em nossa função de modo de jogo. Então, usamos a tabela de dados para obter nosso temporário do nome da linha que está chegando, que vem do nosso item BP. Agora, começamos com uma filial questionando se esse é um item que está sendo adicionado ao estoque ou se é aplicável apenas em nosso caso, ouro Como é a única tabela que temos, criamos um código para randomizar quantas moedas obtemos E definimos esse valor em nosso widget, o que na verdade está errado porque precisamos uma variável de total de moedas para adicionar ao nosso widget de jogo, não a temporária que estamos recebendo Então, vamos promover essa variável. Faça com que totalize moedas. E nós conectamos isso. Vou desconectar isso, pegar as moedas temporárias e adicioná-las ao total de moedas Vou definir esse valor para o total de moedas. E então vou usar o total de moedas para adicionar ao widget Poderíamos ter usado essa peça para a próxima peça que projetamos. Também criamos o widget de jogabilidade. E no widget de jogabilidade, onde definimos o total de moedas, está esse valor aqui, esse texto aqui, que diz nosso total de moedas Agora, e tem esse ícone de bolsa. Em seguida, copiamos e colamos esse widget aqui, invertemos a ordem desses dois e nomeamos as moedas, deixamos que elas digam escolhidas Nós adicionamos um ícone. Agora, se adicionássemos um número aqui, escolhêssemos um número e depois o ícone, poderíamos ter usado nossa variável de moedas aqui para dizer quantas moedas pegamos. Mas como estamos usando apenas uma imagem, tudo bem. Não vamos usar essa variável para isso. Nós só vamos usá-lo para adicioná-lo ao total de moedas. Agora, para continuar com essa função. A próxima coisa que precisaremos, que será comum na ramificação verdadeira e na ramificação falsa, é atualizar para mostrar ao jogador que pegamos alguma coisa. E criamos a animação na guia Animação. Nós meio que trabalhamos um pouco rápido aqui. Então essa é a parte que contém as animações para quem é novo E quando clicamos em uma animação, obtemos seus caminhões, que são os elementos que vamos animar E isso aqui é a passagem do tempo, e definimos o que queremos que aconteça em cada caminhão, em cada elemento que queremos, na categoria específica que queremos. Há muitas categorias por aqui. Fora. Então, animamos isso, mas para reproduzi-lo, precisávamos de uma função. Não precisamos de uma função. Criaríamos um evento personalizado ou o realizaríamos até mesmo em outro lugar. Mas por que não tornar nossa vida um pouco mais fácil e colocá-la em uma função que possamos chamar com algumas entradas Depois, programando repetidamente quando necessário. Oh, vamos criar uma nova função. Vamos chamar esse item de função. Pickup. E vamos desenhar a partir da linha de execução, e eles reproduzem animação. Precisamos especificar uma animação. Se eu clicar aqui, não veremos nenhum porque eles estão nessa guia aqui, escolha e escolha. Vá pegar esta animação, C conectado aqui. E mais uma coisa que precisamos fazer antes de reproduzir a animação, porque é basicamente isso. É assim que reproduzimos uma animação. Vá para a banheira de design, selecione a imagem, a imagem do nosso item aqui e defina como variável. Vamos chamar esse item de imagem e voltar para representar graficamente nossa função, obter essa imagem do item e sair da textura. Não precisamos clicar em muito tamanho porque queríamos manter o tamanho que queremos. E essa, nossa textura que precisamos é ser, mas será a variável de entrada. Vou conectá-lo aqui. Vou criar a variável de textura aqui para nós. Vou compilar e salvar, e vamos voltar ao nosso melhor jogo da cidade Vamos obter nossa referência de jogabilidade de Wood you. Eu vou dizer coleta do item. Vamos conectá-lo aqui. E para a textura, precisamos de um pouco mais de espaço. Vamos obter nossos dados do termo t, que são os dados do item que armazenamos no início. Vou dividir isso e pegar nossa imagem de inventário e adicioná-la para pegar o item. Agora, quando a animação for reproduzida, ela terá a imagem apropriada de cada item. Agora vamos continuar com nossa próxima parte, a ramificação verdadeira se o item for selecionável, então é selecionável Podemos colocá-lo no inventário. A primeira pergunta deveria ser vamos colocar nosso inventário aqui. Isso existe em nosso inventário? Então, vou perguntar se ele pinta como fizemos com o Dungeon tantas vezes E o que ele conterá é o nome bruto que estamos inserindo Então, nome da linha aqui. Sim. Mas eu uso um monte. Deixe-os aqui parecerem um pouco melhores. Agora, vamos começar com uma ramificação que ela não contém no inventário. E a próxima pergunta que devemos fazer é que nosso item está cheio? Para nosso inventário, teremos quatro vagas. Então, vou copiar essa ramificação e perguntar se o tamanho do inventário é igual ou menor ou menor que três. Se forem três, ainda podemos adicionar mais um. Se for quatro, então vai ficar falso. Aqui, em falso, será muito fácil de concluir. Vamos apenas pegar nosso nó de retorno e dizer que o item não foi escolhido, ele reproduzirá nossa animação. O item não foi escolhido. Agora, se for verdade, vamos apenas obter nosso inventário. Vamos adicionar nosso item, que seria o nome da linha. E temos, a partir do temporário, vamos revelar isso. Nossos dados temporários. Nós temos a quantia. O próximo passo, novamente, deve ser a coleta do item. Vou conectar isso. Aqui, eu vou trazer isso aqui. Eu acho que está tudo bem. Vamos continuar com a ramificação verdadeira se ela já estiver contida. Não, vamos perguntar se o item está estável. Eu vou trazer isso para cá. Porque se não estiver estável, não adianta pegá-lo. Então, vamos trazer isso aqui. E, novamente, o nó de retorno dirá não escolhido, então o item será devolvido Estamos cheios desse item. Não queremos mais isso. Talvez queiramos, mas pode ser um único item de estoque. O que podemos fazer? Oh, o que acontece se for, e nós temos alguns deles no inventário. Vamos obter o inventário porque é com isso que estamos lidando. Vamos encontrar o nome da nossa linha. Qual é o nosso item. A partir disso, vamos promover nossa variável local, chamá-la de nomes viáveis, costais e terríveis Parece ser um tema neste cavalo. Quando você trabalha com mais pessoas do que loo, cada nome deve descrever basicamente para que serve Sempre deve haver atualizações nas variáveis sobre o que foi criado e tudo mais. É um bom equilíbrio, não exagere. De qualquer forma, agora vamos obter os dados da nossa barraca, quantidade. Bem, na verdade, o valor do item, você vê os dados do Tem, me confunde O valor do item a partir de nossos dados de Tem, então vamos aceitar mais. Vamos adicionar essa variável de item a esses dados de temperatura e vamos adicionar nosso mapa do nosso inventário O próprio nome deles. Não vou adicioná-lo novamente. Vou apenas atualizá-lo e a soma dessa adição. A próxima coisa que devemos fazer é retirar o item. Mas deve haver uma etapa entre isso e a coleta do item que nenhuma dessas ações precise Na verdade, essa ação também é necessária porque estamos adicionando algo novo ao inventário, que é atualizar a parte visual do inventário. Oh, vamos criar nosso inventário na próxima lição, e isso seria para esta. Eu vou te ver então. Adeus. 72. Visuais de inventário na jogabilidade: O Olá, e bem-vindo a ganhar um workshop de design, e um verdadeiro Engine five, processual Dungeon, RPG de ação, RPG de ação Anteriormente, continuamos nossa função de adicionar ao inventário. Fixamos nossa variável de moedas e pontos totais que eram necessários e continuamos criando uma função para a coleta do item Criamos uma entrada de textura. Definimos o pincel na imagem do item a partir do pincel recebido do item a partir da textura do item e reproduzimos a animação Agora, continuamos verificando a filial verdadeira, algumas regras e condições aqui, se ela já está contida, se nosso inventário está cheio ou não. Quando as condições não se aplicam, retornamos com false; quando as condições se aplicam, adicionamos à nossa matriz ou alteramos nosso valor. Novamente, basta adicionar porque ele é atualizado, já que é um mapa, e então continuamos jogando a coleta de itens Agora, uma versão melhor da coleta de itens seria colocá-lo em um widget separado e, enquanto ele é reproduzido, desaparece repentinamente e gera um novo quando você está Ou outro upgrade. Esse poderia ser um código muito mais detalhado com regras e tudo mais, criando coisas, basicamente criando entidades. Mas agora é nossa hora de criar um pequeno inventário. Então, vou usar uma caixa horizontal novamente. Vou colocá-lo aqui mesmo. Na verdade. Vamos trazê-lo aqui. Então eu vou trazer para que possamos usar as predefinições, sempre mais fácil E vamos dimensionar isso corretamente desta vez. Vai ser um inventário. Vai ser mais detalhado. Oh, para o tamanho X, vamos escolher cem, ou o tamanho inteligente, escolha 150 E para posicionamento, vamos escolher O. 50 e Y O -100 Porque eu acho que esse é um bom lugar para optar pelo inventário em nossa tela. Claro, vamos animá-lo também. Vai ser uma animação muito simples. Vamos às animações. Vamos adicionar um caminhão. Vamos chamar esse inventor Dou uma palavra e entro. Vamos criar uma trilha para essa caixa horizontal. Eu posso selecioná-lo assim porque eu o selecionei. Se você está ficando confuso, qual é qual, sempre podemos renomeá-los. Você sabe quando vai ser o. Caixa horizontal, e esta seria a caixa horizontal de moedas. Essa seria a caixa horizontal do inventário. Vamos voltar às nossas animações. Podemos ver que temos o correto e vamos adicionar um caminhão, que será transformado. O que vamos fazer é o primeiro, o primeiro segundo, estar em ação de zero segundo. Vai estar no X zero. Digamos que um tempo de p cinco. P 0,5 seria ótimo. Isso seria 900, eu acho, -900. E isso o traz até aqui. Eu acho que isso é bom o suficiente. Se estiver muito longe. Não tenho certeza. Acho que é um bom lugar. Você pode colocá-lo onde quiser, mas para nós, agora isso serve. Agora, para a parte interna, vamos redefinir a animação, selecione nossa caixa horizontal de inventário. Vamos adicionar quatro botões. Um, dois, três, quatro. Vamos também nomeá-los. Por que não? O B em um. E vamos escolher um com n dois. Três e quatro. Agora, vamos selecionar todos eles e vamos configurar como arquivo. Vamos selecionar o primeiro para definir seu estilo e, em seguida, vamos copiar essa base para os outros botões. Ou nossa imagem. Vamos às nossas texturas. E temos sim, este item, quadro um. Vamos deixar a tonalidade S, o quadrado está bom. Tonalidade para a normal , vamos deixar como está. Se você passar o mouse, vamos também copiar e provar a imagem. Então, para o oculto , vamos selecionar um tom amarelado e depois vamos colar a imagem novamente Para o prensado, vamos selecionar um tom esverdeado. Tudo bem. E agora vamos copiar e colar essa pilha, copiar, selecionar o botão, colar e colar Último botão, cole. Agora temos alguns recursos visuais. Agora, para dentro dos botões, vamos usar uma caixa de escala e colocar dentro do lado do botão, é filho do botão. Na caixa de escala, vou usar uma sobreposição. Nessa sobreposição, teremos uma imagem e um texto Agora, muito rápido, por que estamos usando cada parte. Imagem, precisamos para a imagem do item. Texto, necessário para a quantidade, e sobreposição, precisávamos ter o mapa atrás e o texto na frente Não, o que na verdade está feito. Eu sou apenas o oposto. Eu preciso ter o texto acima, eu acho. Eu deveria ter a mensagem. Esta imagem me permite alterá-la por um segundo. Escolha o texto. Sim, é cobrado. Portanto, o texto deve ser o segundo objeto dentro da sobreposição A caixa de balança, estamos usando a caixa de balança caso nossas imagens sejam grandes na caixa ou, para fazer com que o que uma caixa de balança faz, caiba dentro do recipiente que está sendo alimentado. Ele o dimensiona para caber no contêiner. Então, vamos copiar e colar a caixa de escala com seus filhos em todos os botões. Na verdade, vamos corrigir o primeiro, vou deletar o colado Corrija primeiro visualmente, porque se corrigirmos os visuais e depois copiarmos e colarmos, ele também terá os mesmos Então, vamos definir a sobreposição para preencher tudo e vamos definir a caixa de escala Também já está cheio. Em seguida, vamos configurar a imagem para preencher tudo, e o texto ficará no canto inferior direito. Em seguida, vamos selecionar mais uma opção aqui embaixo, que é a justificativa em que o texto começa e termina no meio E queremos, é claro, que o texto seja zero por enquanto. E, claro, devemos mudar o telefone para algo bem menor. O oito não é tão grande, não chega até o topo. Acho que é uma boa proporção para o número. Para a imagem, vamos às nossas texturas. E eu acho que é engraçado , acho engraçado, parece bem. Se eu selecionar a CGL ou até mesmo a textura HP, a primeira textura, parece que ela está bloqueada ou algo assim De qualquer forma, você pode escolher algo que pareça. Mas existem algumas regras especiais. Veja, temos um espaçamento em torno de nossas texturas. Então, ele se preenche bem com o fundo. Por exemplo, se eu trouxer a poção vermelha, você verá que ela se enche corretamente, enquanto que se eu trouxer, digamos, isso aqui ou aqui, ela esconde Então, talvez a parte de saúde esteja boa. Isso também é legal, mas os jogadores pensarão que há algo aqui em que clicar e tentarão clicar. Bem, parece mais que está trancado. De qualquer forma, vou selecionar isso. Vou copiar agora nossa caixa de escala porque definimos os atributos, vou colá-la. Vou colá-lo também em três, número quatro. Agora, vamos selecionar todas essas imagens e torná-las variáveis. Na verdade, precisamos nomeá-los. Nenhuma, duas, três, a capital desde que comecei com capitais. Quatro. Agora, a próxima coisa que precisaremos é acessar nosso gráfico e criar uma nova função que chamaremos de update. E, claro, vai precisar de uma entrada, e vai ser um nome, e vai ser um mapa. A segunda variável será um número inteiro porque esse é o nosso inventário Inventário. Acho que estamos encerrando, a próxima coisa que precisamos fazer é acessar nosso modo de jogo de cima para baixo e, a partir de nossa jogabilidade de WT, ligar para nosso inventário. Agora, podemos chamá-lo aqui ou podemos chamá-lo no final. Isso realmente não importa porque, como nossos pontos não atualizam nada no inventário , eles simplesmente farão uma atualização sem alterar nada. Mas poderíamos tê-lo aqui, mas isso é, digamos, mais ideal. Não é. Isso realmente não importa. Mas ele faz menos operações. Se tivéssemos um inventário muito grande, isso começaria a importar. Vamos trazer o inventário aqui, vamos conectá-lo aqui e o temos pronto para ser executado. E isso será tudo para este. Na próxima lição, concluiremos essa função. Adeus, C então. 73. Como atualizar visuais de inventário: Olá, bem-vindo ao Game Design Workshop e Real Engine Five Procedural Dungeon Action No último, paramos projetar nosso widget para nosso inventário, que está em nossa jogabilidade de widgets, aG gameplay Então, adicionamos algumas imagens. Adicionamos um texto para indicar quantos itens do item específico temos. Nós os adicionamos a uma sobreposição para fazer a sobreposição entre eles e adicionamos isso a uma caixa de escala, que pertence aos botões que adicionamos E adicionamos a caixa de balança para fazer com que a parte interna preencha o botão corretamente. Animamos nosso inventário usando uma trilha de tradução muito simples , apenas movendo o valor x, e começamos a criar nossa função de atualização de inventário. Ou seja, se eu puder encontrar o modo de jogo aqui, em nossa função de inventário A. Então, vamos começar a preencher isso. O que isso vai fazer? Vamos conversar sobre isso à medida que o construímos. A primeira coisa que isso fará é pegar nossas chaves. Basicamente, nossas linhas de itens. E depois disso, precisaremos também nossos valores para obter os valores, porque também precisamos atualizar os valores. Estamos obtendo nossas chaves para obter de nossos dados, os dados do item. Então, vamos promover cada uma de uma variável local, vamos chamar as chaves. Vamos promover isso também para uma variável. Vamos chamar esses valores. Ah. Vamos dar uma olhada em todas as teclas. Vou trazer as chaves para o loop. E vou obter a linha da tabela de linhas de dados dos itens da tabela de dados D. Na verdade, vou fazer um raio. Vou promover isso como uma variável local. Vamos chamar esse item de dados. Vou deletar esses dois e trazer os dados do item e em seguida, conectar a linha de saída aqui. Então, eu também tenho um raio com os dados do meu item. Agora, vou pegar as imagens do meu inventário. Em um, eu sou dois, três e quatro. Eu vou fazer uma matriz. Agora eu posso apertar todos os nossos botões com 14 voltas. F dois. Para cada um deles, vou fazer uma pergunta muito simples. O item é aca? Chegue aqui, conectado ao índice, eu vou quebrá-lo. Por que estou fazendo isso e como estou fazendo isso? Uma vez que nossos itens estão sendo adicionados à nossa matriz de estoque em uma determinada ordem, e esse pedido está sendo mantido por meio de nossas matrizes Então, mas em um, agrupamos para o índice zero de nossa matriz de inventário e assim por diante Então, se nossos itens são estáveis ou não, vamos começar se eles não estiverem estáveis. Eu preciso do texto, vamos voltar ao designer. Vamos selecionar nossos textos. Vou torná-los variáveis T, em um. O próximo seria em dois. quarto será no quarto 3. Agora, das variáveis, posso trazê-las aqui em certa ordem novamente, uma, duas, três, quatro. W para criar uma matriz. Deseja adicioná-los a essa matriz. Como essas matrizes são correspondentes, posso obter um índice que eu quero para o padrão específico que eu quero e torná-lo visível invisível Escondido, na verdade. Vou dizer que isso é falso. A próxima coisa que preciso fazer é obter nosso elemento de matriz. Isso vai ser um pouco. Essa é a textura do pincel. Conectado aqui, e para a textura do pincel, vou obtê-la dos dados do nosso item, inventariar um desconectado aqui e esta peça está pronta Estamos configurando aquela pequena madeira na parte inferior para ficar invisível e configurando a imagem da textura de acordo com a textura do nosso item Oh, se estiver visível, simplesmente obteremos nossos valores de nosso estoque, que são os valores. E vamos obter nossa textura da textura, desculpe. Vamos receber o texto para preencher o valor. Eu vou dizer mensagem de texto. Vou pegar nossos valores aqui, vou pegar uma cópia, o valor seria o índice que estamos executando. Obviamente, precisamos torná-lo visível para o caso de ser invisível. Quero dizer, o texto em que estamos adicionando um número e, em seguida, vamos definir a textura do pincel. Isso seria. Essa seria a nossa função que atualiza o inventário. Ele obtém nossos valores e chaves, nossas chaves e valores e, em seguida, cria uma lista de nossos itens atuais. Ele passa por nossos botões e aplica os números e as imagens ou os define de forma invisível Acho que depois de tudo isso, terminamos com nosso sistema de inventário. Agora, acho que depois de comer todas essas coisas, é hora de começar a gerar nosso personagem Podemos começar a testar algumas dessas mecânicas. Para fazer isso, precisamos criar algumas coisas para tornar a transação um pouco mais tranquila. Porque, como dissemos, temos esse carregamento. Neste carregamento, vamos criar uma animação, um caminhão de animação múltipla. Mas vamos chamá-lo de fade load. A primeira coisa que adicionaremos é nossa barra de carregamento, que adicionará visibilidade ao caminhão. Para caminhão, caminhão com barra de carregamento e outro tipo de caminhão, que é a visibilidade. Agora vai ficar escondido. Vamos selecionar agora o texto de carregamento da nossa animação no caminhão ou no elemento. E agora vamos adicionar o caminhão para manipular o elemento, com visibilidade novamente, tão escondida Por fim, vamos selecionar nossa imagem. Vamos voltar à animação, adicioná-la como um caminhão, adicionar o caminhão às suas propriedades. Vamos definir a opacidade da renderização. Vamos dar. Digamos que 2 segundos e meio, 25, vamos criar a diferença, e aqui será zero. Então, um a zero. Temos esses oito de nossa carga e tela. Vamos compilar e salvar. Vamos voltar ao nosso gerador de labirinto. Vamos chegar perto do fim. Estamos em 0,85 Vamos configurar a pasta errada. Eu defino uma porcentagem. Vamos esperar também um fragmento de segundo Vamos configurá-lo para um. Agora vamos chamar de pain loading. Vamos jogar na animação. Agora, vamos criar uma ramificação aqui. Na verdade, ramifique aqui, que esta condição seja no nível do gerador. Isso é igual a um. Se esse for o primeiro nível, faremos a animação de jogo do carregamento. Pois vamos removê-lo do pai. Então, o que precisamos agora. Vamos chamar isso de evento. Vou criar um player de eventos. Vamos ligar para cá. Jogador. E vamos pegar nossa animação e tempo. Mas sabemos quanto tempo essa animação leva, e vamos dar uma olhada. Mas podemos esperar até que a fase esteja completa e vamos colocar uma camada sobre o troll e Não, prepare-se. Rato. E isso possibilitará nossa jogabilidade. Mas surge a pergunta: escondemos nossa boca? Acho que não temos. Não, vamos. O início do jogo começa quando estamos mostrando o carregamento. Queremos esconder nosso mouse. Antes do carregamento do show, vamos configurar o mouse show como false. Vamos para nossa tela de carregamento e para o widget. Vamos selecionar nossas cavas e defini-las como visíveis. Se tudo estiver bem, não, ou não. Isso precisa conectar o alvo ao widget porque reproduz animate target é um widget do usuário Isso significa onde estou reproduzindo essa animação. Esta é a animação que estou reproduzindo, mas a quem ela pertence? Isso é o que ele precisava. Arquivo salve e pressione para iniciar o jogo. O jogo começa. Maravilhoso Eu acho que é isso para este. No próximo erro. Vamos trazê-lo aqui onde está. É um movimento artístico. Ainda não programamos essas coisas. É por isso que ele não gosta. Controlador inativo. Vamos corrigir isso mais tarde. Mas isso é tudo para este. Vamos continuar com a próxima. Adeus 74. Como gerar o zoom do jogador no cinema: Anteriormente, concluímos nossa função de atualização de inventário, que obtém nosso inventário. Ele adiciona nossas chaves e nossos valores para separar valores temporários. Examinamos nossas chaves e as adicionamos aos nossos dados de inventário. Analisamos os nomes das tabelas de chaves e os adicionamos aos dados do inventário. Em seguida, examinamos nossas imagens, os botões, basicamente, e sentimos as estatísticas de acordo. E depois disso, fomos para nossa tela de carregamento. Criamos uma animação simples com muitas entradas, muitos elementos diferentes Conseguimos que nossa imagem de fundo desapareça. Usamos o carregamento e nosso bloco de texto para não usá-los. Nós os colocamos como ocultos no início da animação, então eles desaparecem e depois começam a desaparecer Em nosso gerador de labirinto, preenchemos nossa porcentagem de carregamento E se o gerador estiver no nível um, isso significa que estamos no primeiro nível. Então, estamos reproduzindo a animação de fade do nosso inventário da nossa barra de carregamento e, em seguida, geramos nosso player Na verdade, criamos apenas uma função. Na verdade, ainda não criamos o jogador. Mas depois disso, chegamos ao horário final da nossa animação. Nós atrasamos e começamos a trabalhar com o mouse. E a próxima coisa que devemos fazer é pegar nosso carregamento. Nós nos mudamos com os pais. Não, vamos criar nosso jogador agora. A primeira coisa que precisaremos, imagine isso, serão as coordenadas da masmorra Vamos pegar nossa masmorra. Vamos encontrar nosso primeiro bloco, para dividir isso. Ele diz 00 por padrão, e vamos obter a localização. Vamos adicionar um pouco de altura a essa música pressionando Adicionar cem, e esse é o ponto de desova. Agora vamos usar o actor plus. O ator seria o ator. Vamos dividir a transformação nesse local de transformação. Se jogarmos assim, o que acontecerá é que provavelmente veremos o pom. E também a uma grande distância. Isso ocorre porque não temos controle sobre isso, porque nascemos em, é como qualquer outro ator que criamos é como qualquer outro ator que neste mundo Então, temos um novo erro. Disponível nos itens de Max. Qual foi o erro? Por que está tentando usar o gerador Maze Oh, provavelmente dentro do labirinto. Não temos o que é nosso grande baú em adereços, spa, adereços personalizados Não. Não. Eu simplesmente saio e vou direto para SP e nosso baú grande é Here, Maze generator self Era nosso peito grande ou era nosso peito pequeno? Vamos encontrar o baú pequeno. Sim, era um baú pequeno. Eu mesmo. Mas o baú grande. Provavelmente eu não mudei isso ou um peito grande. Precisamos de um baú aqui. Aqui. H. Por que não posso novamente, não posso ser inadimplente. Eu o seleciono dessa maneira. Não sei por que não gostei do outro jeito. E aqui precisamos de uma geração. Então é aqui que criamos o pequeno baú, basicamente. Eu não mudei a classe. Não sei por que Andel teve um problema tão grande. Ah, porque eu conectei o valor de retorno corretamente. Sim, é por isso. Então, vamos voltar ao nosso personagem de spawn e ver por que não podemos jogar nada, fazer nada Quando geramos qualquer outro ator, da mesma forma, ainda não conseguimos mover o outro ator nem nada Agora, patas e personagens têm uma habilidade específica chamada poder ser possuído E para possuir algo, precisamos do controlador do player. E do controle do jogador, arrastamos, que na verdade, como você pode ver na dica de ferramenta, ele se conecta ao controle do jogador e dá posse à pata a partir desse Isso significa que você pode mover essa pata basicamente. Há muito mais sobre possuir. Não vamos fazer isso agora. Mas se eu deixar assim, isso significa que posso mover meu personagem enquanto o fade out está acontecendo Vamos colocar um atraso aqui. E vamos usar a enti da animação. Agora, vamos apertar play, e você verá também a câmera trocada aqui. A câmera mudou um pouco e podemos realmente nos mover. Então nossos espigões não nos perfuram, só nos fazem rir. Vamos consertar isso. Mais tarde, isso. Vamos para nossa armadilha, vamos para nossos espigões. Como isso é apenas visual, devemos configurá-lo para que não haja colisão física Isso é algo que está acontecendo visualmente. Não queremos que ele gere eventos de sobreposição. Além disso, o corpo da armadilha também não precisa sofrer nenhuma colisão. Vamos para a colisão. Sem colisão. Não gere eventos de rap excessivo, compile e salve. Todas essas pequenas coisas simplesmente são adotadas porque existem muitas armadilhas e ainda existirão muitas. E perdemos o tempo e podemos jogar. É algo estranho com a animação. Vou verificar o que é. Podemos entrar nos quartos. Vamos consertar isso porque a câmera agora está estranha E como você pode ver, estou clicando aqui, então não estou indo corretamente. Esses são problemas de um controlador de ganho e há muitos problemas que precisamos corrigir. Quanto a essa tocha, por exemplo, ela se apaga facilmente. Deixe-me ver. Todas as tochas Todas as tochas. Então, vamos começar a consertar as coisas. Vamos começar com essa tocha que vemos como tudo o que encontramos Devemos consertá-lo instantaneamente. Então, vamos até as luzes do corredor. Vai diretamente. Então, adereços, adereços de quarto. Vamos até onde colocamos nossa tocha. Uma tocha, na verdade, é a primeira coisa que fazemos. Então eu devo ser isso. Lanterna Roo. Vamos mudar esses valores para, novamente, estamos nos adereços da sala de plantas, essa primeira parte da cadeia de eventos Qual era o problema aqui? Acho que são os três, 320. Vamos verificar com 320 e tudo mais. Jogo de pilha. está ainda mais longe. Deixe-me selecioná-lo. Eu vou até a criança. É filho de uma criança, então ele realmente não pode fazer isso. O que posso fazer é encontrar as plantações da sala. E a partir daí, a tocha. Então 20 era a direção errada. Isso é 375. Vamos verificar outra direção. Isso é. O que é esse? Está bem? Mas essa é a mesma direção. Essa. Encontrei no Sly clicando nele. 375. Sim, basicamente, esse é o valor. Ok, então 375, 375 menos 375 -75. Esses são os novos valores. Oh, vamos continuar. Vamos verificar primeiro, na verdade. Mas acho que agora vai ficar tudo bem. Essas tochas estão bem, elas estão dentro da parede, mas não importa, elas já estão melhores Isso está um pouco dentro da parede. Mas está tudo bem. Tudo bem. Não. Vamos continuar com nossa posse do poema. O que realmente acontece. O que podemos ver também é que, quando jogo, tenho uma luz diferente de quando estou possuído e possuo Como quando eu ejeto, de repente a luz fica incrível, quando eu não ejeto, a luz fica ruim Não. Vamos corrigir isso porque é uma interrupção instantânea do negócio. Não podemos fazer testes desse jeito. É muito feio Vamos ver nosso personagem de cima para baixo, plantas, personagem de cima para baixo , a câmera etc Vamos começar adicionando a exposição à luz. Isso significa que quanto mais tempo ficamos na luz, nosso olho é adotado, então a câmera cria um efeito como esse. Então, vamos procurar a postura. Vamos definir uma média máxima de 2,1. 0,1 pode ser um pouco menor. Vamos configurá-lo para um e verificar se precisamos diminuir a reprodução. E já ficou um pouco mais escuro. Se eu ejetar, podemos ver que a paleta de cores permanece a mesma, a iluminação, o que ela cria Tudo isso está resolvido. A razão pela qual funciona aqui dessa forma é porque não estamos usando as configurações do jogo. Na verdade, eu clico nele , não há muita diferença, e V zero, onde se eu colocar em um, vai ficar mais escuro, e se eu colocar em menos um, vai ficar mais claro Agora eu coloquei zero novamente. E isso é o nível de exposição. Isso é o que eu acho que E V significa. O que também precisamos fazer é criar uma pequena introdução porque ela vai de forma muito abrupta para o personagem Então, eu vou parar. Eu vou acrescentar algo. Adicione rapidamente ao projeto. Eu vou até a câmera. Ator, vou definir essa posição para 000 e sabe o que? Na verdade, vou subir e pressionar play. Eu vou rejeitar. Encontre a câmera. Eu acho que isso é. Cera. Não, isso é porque, como você pode ver, isso é 1520, enquanto nossa câmera estava em 300 Vou pegar essa câmera. Vou clicar nele, vou pilotar a câmera. Para colocá-lo em uma posição geral, talvez. Aqui, eu não sei. Esta será a nossa câmera interna que vai para o nosso player. Talvez de frente para o jogador. E ângulo. Sim, tudo bem. Agora vou pressionar A e isso salva a posição. Então, se eu pressionar parar, esta câmera está nessa posição. Agora vou para o plano de nível. Oh, nós tínhamos uma câmera. Eu esqueci disso. deletar a primeira câmera. Sim, isso deve interromper as conexões. E o plano de nível. Acabei de abri-lo na última. Eu vou escolher a câmera. Seja o nível e crie uma referência. Veja agora que ele foi atualizado porque não foi antes de configurar a câmera Isso é desconhecido porque eu apaguei a câmera anterior. Vou conectar isso. Vamos deletar isso. Vamos compilar e salvar. E aqui que geramos o jogador, vou fazer uma sequência antes do atraso E eu vou te emprestar e vamos desclicar em contextos sensíveis porque não podemos vê-lo Então, vou selecionar uma visualização sem brilho com um alvo de visualização sem brilho definir um alvo de visualização com uma visualização Agora, por que não apareceu? É porque não é uma função muito comum e tem um requisito. O requisito é o controle de reprodução. Então, se eu desenhar a partir daqui e obter o alvo de mesclagem de visualização, vamos ver a mistura com o alvo. Vamos ver o alvo com uma elevação suave e conectar isso aqui Você pode ver, nós o obtivemos instantaneamente, sem a sensibilidade ao contexto , porque ele pertence ao controlador do player e tem essa função, basicamente. Está na categoria player. Então, o tempo de mistura seria novamente nosso carregamento, nosso não carregamento, nosso pagamento pelo carregamento, e talvez -0,1 segundos quando terminasse, temos um ponto de 1 segundo para, essa é minha opinião E, por fim, precisamos conectar nosso novo alvo de visão ao nosso personagem, porque esse é o alvo que vamos ver Ele vai pegar nossa câmera atual e ir para outro alvo. Vamos testar essa peça. E meio que funciona. Eu acho que isso é suficiente para este. Vamos corrigir tudo no próximo porque precisamos corrigir algumas configurações, muitas configurações para corrigir. Nós vamos ver você então. Adeus. 75. Correções de colisão e detecção de azulejos de jogador: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco cursos processuais RPG de ação em Dungeon Anteriormente, criamos nossa mecânica de câmera que definíamos visualização e misturávamos nossa câmera original no nível que colocamos, e criamos uma referência dentro do plano de nível, que tínhamos anteriormente, mas criamos uma nova que realmente não importa E também completamos o código quando estamos surgindo para misturarmos entre os alvos e possuirmos o jogador quando a animação de fade out Agora, também brincamos um pouco e encontramos algumas coisas enquanto estávamos nos movimentando. Por exemplo, nosso jogador quando estamos dentro da sala, o mouse tem um comportamento estranho E quando estávamos na verdade, não tínhamos esse exemplo, mas quando estávamos passando por ladrilhos, o personagem estava fazendo um movimento estranho, especialmente entre a conexão dos ladrilhos Agora, vamos analisar por que essas coisas estão acontecendo. Em primeiro lugar, se eu ejetar, ainda posso selecionar coisas no menu Mostrar Mas se eu selecionar colisões, podemos ver instantaneamente o que está acontecendo Por exemplo, nossos arbustos aqui estão configurados como invisíveis, mas a colisão está ativada A mesma coisa acontece com nossos sigilos, que os chamamos de invisíveis, mas a colisão ainda está E isso prova que, ao tornar algo invisível ou oculto no jogo, não significa que estamos realmente fechando a colisão Outro problema que acontece é que, quando começamos a jogar, nossa exposição à luz é diferente da câmera do jogo. Então, vamos consertar essas coisas. Vamos selecionar nossa câmera em uma palavra. Vamos pesquisar a exposição, aqui está, e vamos definir exposição mínima e máxima para uma, assim como nossa câmera no jogo. Vou economizar. Agora, a seguir, vamos ao nosso arquivo DP , selecione o ns Ao eleger as videiras, vamos adotar o comportamento padrão porque elas não precisam gerar eventos de sobreposição Eles não precisam ser pisados pelo personagem. Eles não precisam ter nenhuma colisão. É só uma coisa visual. Assim, podemos configurar tudo para que não haja colisão. Vamos salvar e compilar. Agora, às vezes podemos sofrer um acidente ao fazer coisas com as videiras Espero que tenhamos corrigido isso no lançamento. Há um problema. Deixe-me te mostrar. Vou selecionar um ativo. Eu vou mostrar o Explorer. E no Explorer, vou para o curso Dungeon Jin, vou salvar e registrar um registro rápido para nós, por exemplo. Agora. Em nosso registro de falhas, se pudermos ver que há um erro de repetição, se você teve uma falha, que é sobre as videiras , apenas os mods opacos ou de mistura de máscaras são suportados atualmente, e temos os mods são suportados atualmente, de mistura É um problema translúcido como podemos ver nas folhas de pinheiro Acho que teremos corrigido isso no projeto, mas se isso acontecer, é só que o motor pode travar ao movê-los ou alterar as configurações deles. Agora, a próxima coisa que faríamos é acessar nossas decorações e selecionar nossos CDLs Eles selecionam todos eles, um, dois, três, quatro, selecionam todos, e eu também vou até a colisão e verificarei gerar mais pinos até não e o personagem pisar em não e sem colisão, porque, novamente, é Não deveríamos estar olhando para isso. Não deveríamos estar colidindo com ele. Bem, se eu pressionar play agora, esses problemas serão corrigidos. Então, se eu passar pelo ladrilho, você pode ver um movimento muito mais suave, e se eu for próximo às portas, não fico bloqueado pela colisão Acho que não estávamos sendo impedidos de participar desse caso. Agora, se eu entrar em uma sala, vamos tentar entrar em uma sala, você pode ver instantaneamente que o mouse tem alguns problemas aqui. Estou mirando tanto no meu personagem quanto no personagem que está se movendo para baixo. Por que isso? Novamente, definimos o teto para ser invisível. Na verdade, está aqui. Não podemos ver, mas está aqui, desativando as colisões. E ligue novamente, e você poderá vê-lo atualizado para mostrar que nosso teto está aqui. Para desativar as colisões, vamos iniciar nosso sistema para esconder e mostrar o teto de uma sala Mas antes de fazermos isso, basta uma pequena alteração em nossa câmera. Vamos até nossa câmera. Na verdade, vamos até nosso personagem, nossa primavera, não para a câmera. A mola é como uma vareta. É como um bastão que segura a câmera e tem algumas regras próprias. Vamos mudar o comprimento do braço alvo para 2.500. Então, temos alguma distância do nosso personagem. E então vamos mudar a rotação que também não precisa ser absoluta, vai ser relativa de -50, vamos mantê-la em -50, e para o eixo Z, o eixo azul, vamos adicionar 45 para fazer nossa visão isométrica do jogo A próxima coisa que vamos mudar é que vamos digitar lag, há um atraso de câmera ativado vamos desativar porque queremos que nosso personagem esteja sempre centralizado e não que a câmera mude o Porque se formos jogar agora, haverá um pequeno atraso em nossa câmera quando estamos nos movendo. Opa. Acho que me enganei sobre a localização absoluta Sim. Ele precisa estar em rotação absoluta. Então, vamos selecionar o Mundo 45. E agora, vamos voltar. Sim. Precisava ser absoluto. Você pode ver nosso personagem se mover, mas nossa câmera tem um atraso. Não é realmente o centro do nosso personagem. Ele demora até levar a câmera até o personagem. Então, vamos torná-lo mais parecido com um jogo de ablo sem esse atraso. Vamos ver um personagem. Vou selecionar Lug novamente. Vou desativar o conector da câmera. Então, agora, nosso personagem deve ficar no centro. Temos muito mais controle, como parar aqui, parar aqui. Sabemos o que estamos vendo. Certo. Agora, para iniciar o sistema para os quartos. A primeira coisa que precisaremos é criar uma variável em nosso personagem para armazenar onde nosso personagem está. Eu vou até nosso personagem. Vou clicar nas variáveis e vou criar uma nova variável. Vamos chamá-lo de ds, e será um ponto positivo. Agora, para dizer ao nosso personagem quais são nossas coordenadas, precisamos também acessar nosso modelo de blocos e criar aqui outro valor Vamos ligar para nós. Vamos mudar esse ponto também. A melhor jogada para armazenar esse ponto final seria quando gerássemos o ladrilho Vamos fazer com que seja editado e exposto nosso spawn, compilar, salvar e compilar e, em seguida, acessar nosso gerador de geração de labirintos compilar, salvar e compilar e, em seguida, acessar nosso gerador de geração de labirintos Vamos ao início da primeira fase, mas estamos gerando nossos blocos e precisamos atualizá-los Temos cordões de azulejos. E para cabos de ladrilho, vamos usar apenas as coordenadas de curvatura. Então, agora as informações foram passadas para o bloco. Como passamos isso para o jogador? Bem, nas decorações, temos uma colisão que poderíamos ter usado para outra coisa, mas agora vamos usá-la para isso Mas precisamos clicar em gerar eventos de sobreposição para ser verdade E para predefinições de colisão, nós a temos no Atom. Ignore tudo, exceto o jogador pon, o lago, basicamente. Essa é a nossa colisão de caixas em nossas decorações. Agora, a partir dessa colisão, vamos fazer com que os componentes comecem a se sobrepor Vamos verificar se o outro componente tem o puxador, que é o rebocador, vamos colocar um galho e, se tiver o rebocador, vamos escalar Personagem de cima para baixo. E do nosso personagem de cima para baixo, vamos para as coordenadas atuais. E para obter nossas coordenadas atuais, usaremos como bloco BP a referência do ladrilho ao qual as decorações pertencem e obteremos as coordenadas do ladrilho E vamos conectar isso aqui. Então, sempre que estamos entrando em um bloco, agora nosso jogador sabe em que estilo ele pisa. Agora, eu acho que esse é um bom ponto de ruptura para este. Eu vou te ver na próxima. Tchau tchau. 76. Mecânico de tetos de escondido: Olá, bem-vindo ao Game Design Workshop, real Engine five Procedural Dungeon action Bz Anteriormente, armazenávamos nossas coordenadas, nossas coordenadas de blocos, para nosso jogador. E para fazer isso, criamos uma variável val em nosso bloco BP. Aí está. Aqui está o bloco P, que é chamado de coordenadas do bloco, e nós construímos essa variável quando estamos gerando nosso bloco P a partir das coordenadas atuais Em seguida, criamos outra variável em nosso personagem, que são as coordenadas atuais, e usando a colisão de caixas de nossas decorações, alteramos algumas configurações da Criamos um evento de sobreposição inicial em que estamos verificando se o componente tem a tag de player e, se tiver, estamos fornecendo as coordenadas do bloco E agora vamos continuar usando essas informações para criar nosso sistema para ocultar nossos limites Não. Estamos nas coordenadas do projeto. Vamos nos lembrar do que criamos. Adicionamos algumas colisões aqui que serão usadas para detectar se o jogador está entrando em uma sala Vamos ver as configurações de colisão deles. Vamos gerar mais eventos. Sim. Vamos mudar de etapa, deixar a predefinição de sim e colisão, vamos personalizar novamente e ignorar tudo, exceto a enquete do jogador A próxima coisa que faremos é selecionar cada um deles e selecionar o evento de início após a volta e o evento de fim de volta do componente. Para ambos, precisamos começar a sobreposição e terminar a sobreposição. Poderia haver uma solução mais fácil vincularmos essas ações Mas vamos fazer isso algumas vezes e nos acostumar a adicionar cabos. Temos toda a sobreposição inicial e a sobreposição final. Vamos separá-los. Portanto, temos o final se sobrepondo e o início se sobrepondo A ordem realmente não importa. Novamente, o que estamos perguntando? Vamos fazer as sobreposições iniciais. Estamos perguntando se o outro componente é o player. Então, vamos pegar a etiqueta de veado P e nosso galho. E vamos copiar isso com base em todas as funções. Veja, eu quase cometi o erro lá, quase me conectei com o ator. Esse é o problema de não vincular as coisas às ações. Mas se você não errar, pode fazer isso em uma das ações repetitivas Então, por que o oeste não está funcionando? Então vamos ver que West não está trabalhando porque está conectado ao ator. Tudo bem. A próxima pergunta que devemos fazer é nosso teto visível. Mas essa é uma pergunta para tudo, então podemos conectá-la a todos. Vou colocar o galho aqui. Vou conectar todas as filiais t aqui. E da nossa variável de teto que eu trouxe daqui, vamos perguntar se é visivelmente Para a próxima parte, precisaremos de nossa referência tangente, obteremos nosso ladrilho e vamos começar com o nome de gerador O gerador de referência, e precisamos criar outra função em nosso gerador. Vamos ao nosso gerador de labirinto, criar uma nova função Vamos chamar essa função de room filling hydrom sep, ela precisará da entrada de um inteiro, que será o índice da sala, porque cada bloco sabe se é porque cada bloco sabe uma sala e tem um Então, se tratam de decorações, quando ligamos para um quarto aqui, precisamos também reservar nosso X. Sem índice de quartos, como? Desculpe, o índice do quarto está armazenado nas decorações. Ele é armazenado quando estamos adicionando as paredes. Na verdade, estamos habilitando a colisão no componente da caixa quando adicionamos as portas Qual componente da caixa permite a colisão. Paredes R A, bagunça do sótão, filhos das paredes. Então, estamos habilitando o componente da caixa, que são as entradas. Faz sentido. Mas se os tivéssemos habilitados aqui , isso dispararia mesmo que não fosse uma sala, e daria uma resposta de sala zero. Então, fecharemos o evento de geração de sobreposição dessas caixas Então, meu erro. É o grande programa que não vai mentir. E todas as nossas caixas internas precisam ter suas paredes de geração de eventos de sobreposição fechadas Então, eles só disparam quando estão em um quarto. Agora vou conectar o índice da sala aqui. Você sabe, pode não parecer porque estamos em plantas, mas estamos em alguns milhares de linhas de código e ainda mais Portanto, a memória é um ativo importante para um programador. Memória pessoal, memória biológica, não memória de computador. Bem, a memória do computador também é um grande ativo por si só. Agora, vamos esconder a função C das salas. Vamos completar essa função básica. Mas, novamente, precisaremos de algo extra para completar essa função. Isso seria um núcleo de interface de projeto. Então, vamos abrir nossos pentes de labirinto e adicionar uma nova função. Vamos chamar isso de D. Bem, isso é basicamente nosso teto, porque nosso gás o comando para esconder um teto vem das decorações Enviamos para um ponto central. Digamos que nosso labirinto porque temos as coordenadas da sala lá Escondemos os tetos deste quarto. E então nosso labirinto agora enviará uma mensagem para cada índice da sala para esconder seu próprio teto Portanto, é um pouco de ida e volta de informações. De qualquer forma, vamos para o nosso labirinto. Não, desculpe, para o nosso labirinto, e vamos promover o índice de espaço da variável, não uma variável local, mas uma variável real, variável permanente, real. Variável permanente. Vamos chamar isso de índice de quartos. A razão pela qual precisamos disso é porque quando estamos escondendo os tetos, precisaremos saber qual índice de sala precisamos esconder o teto Ah. Agora, também precisamos de uma referência de jogador e, como estamos gerando a referência dentro desse gráfico, em algum lugar Desapareça magicamente, faça com que desapareça, faça parecer que apareceu do nada, Faça desaparecer, basicamente, o erro que deixei aqui. De qualquer forma, para promover essa variável, vamos clicar com o botão direito do mouse e promover a variável. Vou chamar isso. Então, agora estamos mantendo uma referência ao nosso jogador. Vamos voltar ao limite máximo e obter nossa referência de jogador O que precisamos perguntar é bastante simples: é o nosso tempo atual? Acordes atuais Sim. São nossas coordenadas atuais, aquele jogador que está em pé. Não pertence ao índice de quartos em que estamos. Mas para fazer isso, vamos obter nossa matriz de salas ST, que é uma matriz com nossas coordenadas de sala com todas as salas e suas coordenadas. Vamos pegar uma cópia. Vou pegar o índice do quarto. E vamos perguntar se isso está contido. Ray está contido em uma matriz, desculpe o contrário. Isso acontece quando você pensa no futuro, não precisamos sair da sala. Precisamos apenas verificar se nossas co-coordenadas estão aqui. Na verdade, precisamos obter. E precisamos conectar a coordenada, isso precisa ser interrompido Bem, porque isso contém uma matriz, basicamente, é por isso que, e estamos verificando se a matriz contida está nas coordenadas da sala. Vou apertar um galho aqui, para colocar um galho. E a próxima coisa que precisamos fazer é, a partir das coordenadas da nossa sala, vamos para ho E, como dissemos, vamos esconder o teto. Agora, eu o conectei ao falso. Por que eu o conectei ao falso? O motivo é porque isso deve ser acionado quando entramos em uma sala. Não devemos pensar enquanto estamos dentro da sala, pois nossos quartos são compostos por quatro deles E isso significa que podemos ter outra porta a qual a colisão entra na sala Se passarmos por essas colisões, não queremos acioná-las novamente. Portanto, isso deve ser acionado apenas de fora para dentro. Claro, poderíamos ter enfrentado uma colisão como essa, mas por que não criar circunstâncias para que possamos usar algum código para verificar como podemos aplicar as regras Não, vamos pegar nossa masmorra. Vamos encontrar nossas coordenadas, nosso ator. Desse ator, que é o nosso título, basicamente. Vamos pegar nossas decorações, que é o recipiente do nosso ator de decorações. Precisamos contratar um ator e, a partir disso, vamos enviar uma mensagem. Vou enviar a mensagem que acabamos criar em nossa interface de blueprint Porque se eu enviar diretamente para o filme, isso não significa que o ator infantil o receba. E também se eu enviar para os Corans, isso é um contêiner. Não é o ator real. Então eu preciso do ator infantil. Vamos testar e temos outro acidente. Vamos ver novamente qual é o problema. Aberto ao acidente. Isso é ir para o arquivo g. Começamos a partir daqui. Usado em materiais válidos de máquinas não estáticas. Então, o material tem um problema. Sim, esses são os mesmos problemas anteriores. Ele tem a mistura e o opaco e seu modo de mesclagem foi especificado, translúcido e, portanto, não é problema Então, vamos corrigir isso, enviar e reiniciar. E como você pode ver, eu não salvei antes de compilar e salvar Então, eu vou fazer isso muito rapidamente novamente com camera alla, e pronto. Agora, antes de testarmos, vamos criar um código muito simples para ocultar o teto Vamos à nossa decoração e vamos adicionar nossa interface porque as decorações não a têm Então, vamos adicionar Mize, Pi, PI . Eu o implementei. Se você ainda não o implementou, basta adicionar I maze comes here A partir disso, vamos até a interface e selecionaremos as alturas. Vamos, por enquanto, então no jogo. Ainda teremos problemas de colisão, mas os tetos devem estar escondidos quando entrarmos na sala Além disso, vamos até nosso teto e descobrir sua visibilidade, o que está escondido no jogo, e vamos fazer isso ou não está mais escondido no jogo. Tem que ficar escondido quando jogamos. Quando entramos em uma sala. Vamos jogar. Espero que esteja tudo bem. O baú precisa da regra. Atingimos o teto, mas não podemos ficar felizes porque o baú precisa da regra para não aparecer na frente de uma porta Vamos adicionar isso rapidamente. Vamos ao nosso gerador de labirinto. Vamos até onde geramos o ninho, onde definimos as coordenadas para o baú E temos essa regra ao lado da porta. Mapa. Nós obtemos as coordenadas. Tentei tantas vezes que falhou e continuou, talvez porque temos essa regra, e essa regra está correta. Nós verificamos isso com as luzes. Talvez tenha tentado isso várias vezes e não consegui colocá-lo em lugar nenhum. Talvez tenha sido isso. Então, vamos jogar novamente. Agora, às vezes, as pérolas fecham, onde está um baú. Não está na frente de uma porta, talvez fosse só uma. Ótimo. Vamos parar aqui para esta. Eu vou cantar para você na próxima. Tchau tchau. 77. Mecânico de teto mostrar e esconder: Olá, bem-vindo ao curso de criação de Design Workshop e Real Engine five, Procedural Dungeon, RPG de ação Anteriormente, começamos com nosso mecânico de teto escondido. Criamos a função ym dentro do nosso gerador de labirinto, que armazena nossa sala atual, e ela verifica se as coordenadas atuais do jogador estão dentro da sala em que estamos tentando entrar Se não estiverem, estamos escondendo o teto. E depois, para esconder o teto, criamos uma interface de planta que usamos em nossas decorações de BP. Um minuto Não é isso. É isso, mas por enquanto apenas torna nosso teto invisível. Oh, vamos animar isso. Vamos criar uma animação para o teto se esconder, e a mesma animação que vamos usar para que ele apareça. Primeiro, vamos criar uma variável para que possamos saber o estado do teto. Vamos chamar isso de esconderijo. Em Hight say, vamos dizer que é verdade. Não. Não precisamos mais disso. Precisamos da referência do teto, mas depois, depois de definir o oculto, adicionaremos uma linha do tempo E vamos entrar na linha do tempo e criar uma trilha de fluxo a partir de 01, com tempo zero, zero ou zero e tempo 0,3 ou um Vamos usar o último quadro-chave. Só vai até aqui, e vamos escolher nosso teto e definir o vendaval Vamos conectá-lo para atualizar. O que vamos fazer são vetores de alerta. Vamos conectar nosso Alpha, nosso caminhão de fluxo de caminhões, e vamos para 111-001 É claro que, no final das contas, precisamos realmente do conjunto escondido. Vamos jogar em que vamos conseguir o eleito, onde está o escolhido? T. Para o nosso índice, vamos usar a direção. Se for para frente, queremos que fique oculto, sim, quando for para trás, queremos que não fique oculto E como sabemos que isso criará um problema de colisão, vamos até nosso teto e selecionaremos nenhuma colisão Já está feito. Mas se não for, porque eu tive um acidente. Não tenho certeza se fizemos isso anteriormente, o que precisamos fazer é não gerar eventos de sobreposição na verdade, e fazer com que a colisão caia em nosso teto novamente Se formos jogar agora, poderemos ver essa animação. Y. Agora, não volta atrás. Mas vamos consertar as trocas. Houve um atraso no quadro. Então, você pode ver agora o movimento sem colisão e, na verdade, nós o animamos para não estar A colisão realmente não importaria agora. Na verdade, podemos andar corretamente agora nos quartos dentro dos quartos. Então, vamos continuar criando nossas funções de ocultar teto. Deixe-me verificar por um segundo. Por que havia esse registro de molduras? Ei, acho que é só meu computador. Tenho alguns problemas lá. Eu posso ouvir os topos. Ah, sim. Não. Foi só um problema porque eu abri o projeto depois de ser esmagado Certo. Vamos consertar nossos tetos, basicamente. Vamos começar do lado oposto desta vez. Vamos até nossa interface de diagrama. Vamos adicionar a função. Não. Função teto, teto. Personagem D. Dissemos que o nome ruim é o tema desta vez. Vamos ligar, que é a nossa mensagem. Vamos definir o oculto como falso e reverter a partir do final. Apenas inverta, não do final, porque no caso de sairmos no momento em que estamos entrando, não queremos que comece do final, queremos que ela reverta de onde quer que esteja. E o mesmo acontece com o play, e é por isso que não o conectamos ao play desde o início. Agora, quando isso acontece? Bem, temos os eventos finais de sobreposição. Vamos torná-los mais compactos. Mas temos nossos eventos sobrepostos. Precisaremos fazer essa pergunta se o que está se sobrepondo é nosso personagem Conhecemos o procedimento, copiamos e colamos esses galhos. Novamente, vinculá-los teria sido uma opção melhor. A maneira como faríamos isso é criar uma matriz. Vamos pegar nossas caixas e encontrar uma sobreposição inicial em um loop for que tem todas as caixas e criar um evento personalizado que faz essas coisas Vamos continuar. Vamos conectar isso aqui. E vamos conectar isso aqui. E então precisaremos ir ao nosso gerador de labirinto. Crie uma nova função. Vamos chamar isso de ideia. Não. Passo de Roh Não precisaremos de uma entrada porque armazenamos a variável da sala atual e, depois de tudo isso, vou pegar qual é a referência do gerador aqui, vou copiar e colar a referência aqui e a sala definida quando tudo isso for verdadeiro. Agora vamos entrar no set do show room. Vamos encontrar nosso conjunto de funções hydrom. Vamos copiá-lo como está, sem o conjunto do inteiro, colá-lo aqui Ou nosso dispositivo que foi desconectado, precisamos de nossas hastes atuais. Em vez de nos escondermos, precisamos mostrar I. Então, vamos compilar e salvar. Vamos ao nosso jogo e vamos verificar se está funcionando. Eu me escondi e ele apareceu. Mas apareceu instantaneamente. E agora nem funcionou. Estou entrando e saindo. Entrou, o que aconteceu? Temos que incomodá-lo. Entrei, talvez eu tenha entrado demais e depois saído. Não? De qualquer forma, parece estar funcionando. O que realmente aconteceu lá? Será que eu ainda estou na colisão? Sim, provavelmente eu fiquei na colisão e não percebi Então, vamos seis da animação. Vamos até nossos esconderijos e ver o que está acontecendo. Um quarto tão cedo. Desculpe, não. Ou vou aqui. Vamos colocar um ponto de ruptura. Eles vão assim, vão assim. Aquele brinquedo é estranho? Ah. Oh, por que isso acontece? Isso acontece porque estou definindo a visibilidade no final. Então, ele reproduz a animação, mas mostra o teto no final. Então, basicamente, vamos fazer isso como está. Não faz aros Comente. Vamos deixar isso como e ir aqui e conectar isso aqui e tornar isso falso Agora podemos ver o teto antes da animação. Escondendo, Escondendo, Y, e acabamos com nosso teto. Oh, isso é tudo para este. Eu vou te ver na próxima. Adeus 78. Blueprint de visuais de elevador: Olá, bem-vindo ao Game Design Workshop real Engine, cinco processuais de criação de Dungeon Action Pz Anteriormente, terminamos com nossas funções de mostrar e ocultar o teto. Animamos nossos tetos, com nossa linha do tempo. Usamos a escala mundial definida para criar essa animação e, em seguida, criamos o evento de interface show C blueprint E definimos a identificação e as quedas. Colocamos o teto oculto em quedas, que possamos ver a animação, já que estamos escondidos em I. No final do evento de avanço, como no final do evento. E então conectamos os eventos em nossos eventos de sobreposição final Verificamos se é o nosso player que está se sobrepondo e criamos o teto de porca para formar o teto do espaço em nosso gerador de labirinto, que é exatamente o mesmo código do teto que é exatamente o mesmo código oculto Mas desta vez estamos mostrando o teto. A única diferença é que estamos usando as coordenadas atuais da sala, enquanto no teto oculto, estamos na verdade fazendo ping nessa coordenada Agora, vamos continuar criando nosso poço infinito, na verdade não infinito, como falamos no início. Mas tem uma possibilidade infinita. E vamos criar um labirinto. Vamos completar nosso elevador. Tenha muitas abas abertas. Vou começar a fechar todos eles. Bae, quanto mais abas você abre, ele realmente diminui seu FPS novamente se o seu computador não for Eu vou abrir o elevador. Vou ver as plantas, vou ver os adereços e vou escolher nosso Eu vou trazê-lo aqui. Além disso, precisaremos de um novo modelo. Vamos chamar isso de mecanismo de elevador BP. Tudo bem. Agora, esse mecanismo de elevador deveria realmente ter nossa roda de pinos aqui. Vou copiar isso e vou trazê-lo para cá. Agora, precisamos mudar a escala em. Vou desbloquear isso e vou definir 0,4 aqui e aqui 0,3 e em z 0,4. Então, é um pouco menor, e é um pouco. Agora, vamos ser um pouco criativos aqui e adicionar mais duas malhas estáticas, na verdade três Nas duas primeiras, vamos até nossas malhas, e há um dispositivo de tortura x. Aqui está, e vamos configurá-lo para este e mais um. Então, basicamente, vamos ter isso aqui e aqui, esse precisa ser girado. Ou perto. movimento das correntes é tudo o que parece, é algo que está funcionando. Sim, tudo bem. Então vou usar essa bagunça que temos vazia e pegar uma caixa Vou trazê-lo aqui. Para torná-lo um pouco mais fino. Assim, para trazê-lo aqui. E, na verdade, vou torná-lo polar. Vamos colocar um do outro lado, também, métrico. Eu gosto dessa roda aqui. Não vamos torná-lo simétrico. Eu gosto de ver isso. Se você quiser, pode torná-lo simétrico Acho que, do ponto de vista acima, é algo que consideraremos normal. Talvez possamos tornar isso um pouco maior. Esse eixo. Também este. Está tudo bem. Está tudo bem. Se quiser, você pode brincar mais com isso e torná-lo mais visível. O que vamos fazer é girar o componente, girar componente, girar E vamos até o gráfico uniforme, trazê-lo aqui, e vamos pegar nossa roda, que é, eu acho, a malha da planta. Se você quiser, você pode fazer isso, e vamos até aquele componente da nossa roda. Vamos para o nosso porto de visualização. Vamos para o nosso rotativo. Se jogarmos simulate, podemos vê-lo girando tudo. Deixe-me colocar isso no roteiro de construção. Oh, eu não mudei nada. Oh, veja como você pode cortar essa peça simulada. Vamos continuar a partir daqui. Agora, vamos voltar para o nosso elevador, e vamos mudar essa malha estática para a nossa plataforma de elevador. Nós temos uma metanfetamina para isso. Coma o cubo do elevador, aqui estamos. É isso mesmo. Agora vamos adicionar um ator infantil, que será o mecanismo do elevador. Agora vamos selecionar um site para colocar isso. Ao selecionar este site, traga-o para cá. Eu moro aqui. Sim, acho que está tudo bem. E agora precisamos de mais algumas coisas. Vamos precisar de algumas coisas para bloquear nosso jogador. É claro que também seremos jogadores locais para não podermos nos mover. Mas por que não permitir que ele se mova? escolha é nossa se queremos habilitar isso ou não e ter algumas paredes que impeçam o jogador de se mover. Então, vou adicionar mais medidas estáticas. Todas essas canetas. Um, e será que precisaremos desse avião de elevador ou da malha estática. Vamos girar isso e trazê-lo para cá. Talvez precise ser um pouco maior. Acho que está tudo bem, vamos copiar e colar isso aqui, vamos colar novamente e girar, trazer aqui, vamos pegar isso e colar, aqui Todos nós temos uma parede. Porque o que vamos fazer é quando o jogador entrar no elevador, vamos levantar isso. Agora, quando chegarmos ao próximo andar, precisaremos de outra malha estática. I. Não vai ser um avião, vai ser o cubo 031 do elevador antes de usarmos o 026 Então, essa seria nossa plataforma extensível, porque teremos um espaço do elevador até nosso ladrilho para caminhar Então, vamos estender uma plataforma como essa com base no lado que está disponível em nosso labirinto, que seria o bloco zero, e vamos estender essa plataforma para esse Deixe-me redefinir sua localização. E a próxima coisa que precisaremos é de uma câmera. E vamos colocar essa câmera. Eu continuo com dois E. Vamos colocar essa câmera acima do elevador. Vamos colocá-lo também um pouco para o lado ou para o lado. Este lado, e talvez um pouco mais baixo. Isso é bom. Então, quando subimos, podemos ver e vamos passar por isso, então não podemos mais ver o labirinto Não podemos ver a esquerda e a direita. Só vemos o elevador. Aqui também a inclinamos um pouco. Veremos quando fizermos a animação, veremos como ela fica. Agora, a próxima coisa que precisaremos é adicionar uma colisão, uma colisão de caixa, mas sabemos quando o jogador chegou ao centro E, na verdade, vamos deixar como está porque queremos ter certeza de que o jogador entrou. Não queremos que você o acione quando o jogador estiver aqui, queremos que você o acione quando o jogador estiver no centro. Talvez o tornemos ainda um pouco menor. Talvez o movamos em direção ao botão com o mecanismo, um pouco aqui. Sim, isso parece bom. Ah, mais uma coisa que devemos fazer é transmitir ao corpo os componentes necessários que queremos. Vamos vir esse corpo porque o corpo vai subir. Mas não queremos que a colisão aumente, por exemplo, com o corpo Não queremos que isso aconteça com o corpo. Mas como vamos ser , realmente não importa ser honesto, porque vamos usar a localização do ator. Mas você sabe o que? Vamos fazer isso da maneira mais difícil. Vamos usar o corpo, não a localização do ator, porque vamos mostrar as duas formas. Se usarmos a localização do ator, devemos separar esse ator filho Então essa parte está no chão, e então podemos mover o ator para cima. Mas vamos separá-lo apenas para mostrar como o separamos. E então vamos mover o corpo para cima. Mas se quisermos mover o corpo para cima , temos que cuidar das coisas que queremos mover com o corpo. Então essas seriam as cercas. Essa não seria a caixa. Não queremos a caixa. Essa seria a câmera. A câmera que queríamos mover conosco. Esse seria o avião do elevador e também a cerca para. Sim. Então, essas coisas precisariam ser colocadas no andar do elevador Acho que precisamos diminuir isso um pouco. Sim. Estava meio que se sobrepondo Ah. Esta é a configuração do nosso elevador, e acho que é um bom ponto de ruptura, e continuaremos na próxima para alimentar o código. Tchau. Te vejo então. 79. Gerar o próximo mecânico de labirinto: Olá, bem-vindo ao Gain Design Workshop, n real Engine five, Procedural Dungeon Action RPG Anteriormente, criamos o visual do nosso elevador. Também criamos o mecanismo do elevador BP, que é um visual que fará essa roda gire e se solte do Agora, atualizamos apenas a malha estática, que é responsável pela roda com nosso movimento giratório, e criamos nossa estrutura com nosso corpo e os componentes porque vamos mover nosso corpo, na verdade Agora, vamos começar com o que acontece quando colidimos com o e. Com o cubo de colisão. cubo de colisão Não. Um componente começa a se sobrepor, vamos fazer a primeira pergunta. É um jogador? Oh, tem um e colocou um galho. Se isso for verdade, precisamos verificar se nosso jogador tem a chave. Vamos começar o modo de jogo. Vamos lançar para o GM o modo de jogo de cima para baixo. Vamos convertê-lo em um elenco puro. E vamos obter o inventário. Em nosso inventário, encontraremos I six, que é o nome bruto da nossa tabela de dados ou da nossa chave. Agora, vamos usar uma ramificação e vamos conectá-la a, ela a encontrou ou não? Ah, vamos conectá-lo ao verdadeiro porque é um player e não o encontramos, então é bem simples. Nós tocamos um som e pronto. O som que vamos tocar tem algo a ver com o elevador. Falha no elevador. Falha no elevador Q porque queremos filas Sim, é isso mesmo. Se for verdade, faremos uma vez. Porque o que quer que aconteça depois daqui, não queremos repetir. Isso acontece. Não deveria haver nenhuma chance de isso acontecer novamente. Oh, a primeira coisa que faríamos é desativar o movimento do jogador. Mas como ainda não criamos essas coisas, vamos adicioná-las mais tarde. A próxima coisa que devemos fazer é pegar nosso ator infantil, que é nosso mecanismo de elevador e contratar um ator infantil, e vamos pegar o ator principal. Vamos manter o mundo. Mas a escala de localização e a rotação permanecem as mesmas. A próxima coisa que vamos fazer é usar mecanismo de poeira Vamos convertê-lo em um pó puro. A partir daqui, queremos o componente de movimento rotativo e vamos para essa taxa de rotação Dois -60. Começa a girar a roda, e eu vou definir o eixo M 62 y. Vamos realmente testar isso. Vamos encontrar nosso elevador. Isso significa compilar Na verdade, vamos abrir o menu principal e tornar nosso Ms um pouco menor. Menu principal. Aqui estamos. E vamos até os blocos e vamos definir isso para dez. Digamos que dez por enquanto. Eu vou compilar. Vamos apertar play. Um mapa muito pequeno. Eu criei um quarto. Interessante Novamente, você pode ver que ele não conseguiu encontrar um lugar válido para colocá-lo, então ele escolheu ficar ao lado de uma porta. Nosso personagem é muito, muito pequeno. De qualquer forma. Então, vou para cada. Isso não deveria estar girando desde o início. Então, vamos ao mecanismo do elevador e definamos a taxa de rotação para zero. Vamos compilar e salvar. Vamos jogar novamente. Ele tocou o santo. Ou isso é porque não temos o item ou o direito. Mas não está girando agora. É bom saber. Vamos trapacear um pouco e adicionar esse item em nosso inventário Vamos até nosso suporte, vamos ver nossas plantas Vamos para o nosso modo de jogo. Vamos selecionar nossa variável de inventário e somar I seis com a quantidade de um. Nosso salvamento de compilação Acho que vivemos a quantidade até zero quando não há quantidade. Vamos nos certificar de que vá para itens, itens dt, o valor chave um. Temos um em tudo. Ainda bem que eu adicionei um aqui. Compilando e vamos jogar, e agora temos a chave Isso com certeza precisa de um alerta de câmera diferente. Um aqui. Aqui está. E começou a girar a roda. Isso é bom. Agora, vamos remover essa chave do nosso inventário. Vamos voltar para o elevador dela. Vamos obter nossa referência de inventário que temos a partir daqui, vou redirecionar E então eu vou redirecionar para cá também. Vou remover os seis. Agora, ele foi removido, mas se tivermos nosso inventário aberto, essa madeira será atualizada. Precisamos atualizar nossos recursos visuais no inventário. Do nosso modo de jogo, vamos arrastar até aqui e vamos dar à jogabilidade nossa referência de widget, a jogabilidade do widget, e vamos fazer E o inventário seria este: sair daqui. Porque mesmo que estejamos apenas removendo-a aqui, essa variável foi atualizada. Agora, vamos também tocar um som. Vamos copiar isso. Vamos fazer let Unlock. Acho que é isso que jogamos aqui. Sim, desbloqueio do elevador. E agora é hora de propor o próximo labirinto. Então, qual seria a localização do nosso próximo? Bem, isso depende muito do que queremos. Por enquanto, eu apenas defino a localização, obtenho a localização do ator. E a partir disso, adicionei 2.500 unidades irreais ao Z. Ah. Vamos promover essa variável. Vamos chamar esse novo Centro. E por que um novo centro? Como nossos labirintos começam a ser construídos, as masmorras estão começando a ser construídas do centro em qualquer direção Não, vamos ligar para uma aula de polícia e vamos escolher nosso gerador Maze gen. E vamos dividir o local e conectar isso. Agora, temos várias opções aqui que precisamos concluir. Para concluí-las, precisamos saber qual nível estava o gerador anterior e algumas informações dele. O que vamos fazer é criar novamente um g de referência. Vamos fazer com que digite Me gen. M. Novamente, referência a objetos , é claro, e vamos trazê-la até aqui. A primeira coisa que precisamos são nossos estilos mac. Porque, com base nisso, vamos apenas adicionar um intervalo de números inteiros aleatório Isso seria de, digamos, um, dois, vamos obter o nível do nosso gerador. Um, dois níveis de gerador mais um. Nesse caso, um, 22, então seria um, dois, três, um, 24, um, cinco e assim um. Então, vamos conectar isso aqui, e o tamanho do estilo deve ser 600, isso significa que o padrão deve ser 600. Estou confuso. Temos o valor correto no menu principal. São 800. Por que estou preso a 600? Eu não sei Tamanho M F tamanho máximo, obtemos tamanho máximo. E como estamos adicionando uma quantidade maior, vamos sempre aumentá-la em um. Mas vamos fazer isso somente quando nossos estilos de mac não se encaixam em nosso mapa. Então, como se tivéssemos atingido o máximo. Vamos fazer menos e vamos multiplicar isso de t. Então, basicamente, isso é quantas peças podemos adicionar ao nosso labirinto E se isso for menor do que o que podemos colocar, então está tudo bem. Então, vamos fazer um tamanho de labirinto selecionado, vou usar isso como condição, e se for verdade, se for menor do que podemos caber, então escolhemos o tamanho máximo. Nós mantemos o mesmo. Quando não podemos, basta adicionar um. Vamos trazê-lo aqui, para que fique mais claro. Nós adicionamos um a todo o perímetro. Isso pode ser bom. Agora, é claro, precisamos de um nível de gerador, então vamos obter o nível do gerador e adicionar um a oito. E conecte isso aqui. Nosso gerador está atualizado agora. Vamos ver isso em ação. Temos um acidente maravilhoso ou está tudo funcionando perfeitamente? Então, vamos para o elevador. Personagem tão minúscula. E estamos mostrando a carga e a tela. Isso não é bom. E temos um congelamento. Eu vou controlar a exclusão. Provavelmente é um pouco louco. Esse é um loop infinito. Vou usar o gerenciador de tarefas e vou reabrir o projeto Isso geralmente acontece com loops. Eles podem destruir completamente o que você está fazendo. Mas há uma chance de que não tenha sido isso, porque temos nosso carregamento e, sem carregar, algumas coisas podem não funcionar. Vamos voltar. Eu acho que este é um bom ponto de parada para este. Vamos corrigir isso no próximo. Então você sabe? 80. Geração de labirinto contínua do primeiro azulejo: E bem-vindo ao workshop de design de jogos em Engine Five Procedural Dungeon Action ou Pz Anteriormente, começávamos com nosso evento de sobreposição de início do elevador, que quando entramos no elevador, verificamos se é o jogador E então verificamos se o jogador tem a chave que deveria ter. Se ele não tiver, tocamos um som como falhar. Você não pode continuar. Se ele tiver a chave, queremos os eventos que se seguirão. Portanto, não temos certeza disso , então temos certeza de que eles não funcionarão novamente. Para começar, começamos separando nosso ator filho, que é esse mecanismo aqui, e configuramos seu componente de movimento rotativo que adicionamos ao mecanismo do elevador para girar em -16 no eixo y. Em seguida, continuamos removendo a chave do inventário e atualizamos nosso inventário. Tocamos um som que o elevador destravou e criamos nosso novo labirinto, que apresentava E, para ser honesto, é claro, teve alguns problemas. Em primeiro lugar, não clicamos em Continuar. Não cliquei em Continuar porque estou fazendo o curso. Então, foi nesse botão de continuar chefe aqui que precisamos clicar para declarar a esse gerador que vamos continuar. Se essa não for a primeira peça, continue construindo. Também poderíamos ter verificado se o nível do gerador era o número um. Oh, nós também armazenamos Depois, subo para a masmorra, para o modo de jogo Poderíamos ter tirado isso do modo de jogo em vez de criar uma referência apenas para isso, mas de qualquer forma, o que precisamos fazer é conectar o continuum ao primeiro estilo Porque não queremos mostrar uma tela de inventário. Eu fui removido do meu pai. Então, toda vez que isso for chamado, provavelmente produzirá um erro, mas não nos importamos porque sabemos por que está lá. Se não quiséssemos ver o erro, poderíamos colocar um nó válido. Assim, antes da porcentagem definida, e vamos conectá-la aqui, se for válida, definimos a porcentagem, se não for válida, vamos para o próximo nó. Mas não vamos fazer isso. Vamos deixar que haja um erro, um erro controlado. Vamos ligar para isso. Quando está sendo chamado, são cerca de 5 horas. Está tudo bem. Agora, na primeira vez em nosso estilo spawn first, precisamos adicionar o código de geração do E por que é diferente? Vamos pintar. Ah. Quando aparecermos, digamos que seja para ampliar. Isso está fora. É simplesmente perfeito. Aqui. Digamos que esse é o nosso bloco que começa. Este é o nosso ladrilho que tem o elevador, então esta é a nossa plataforma do elevador. Quando subimos. Quando estamos gerando o próximo labirinto e subindo, ele aparece diretamente acima de nós ele aparece Então, se esse for o primeiro ladrilho, precisamos deslocá-lo em uma direção E diga a esse estilo que a direção em que deslocamos a direção oposta à direção para a qual o deslocamos é o que chamamos de introdução, onde na verdade temos nossa caixa que virá Então, compensando isso, criamos o centro da nossa masmorra, o bloco de introdução a partir de Então, vamos fazer isso bem rápido. O que vamos fazer é criar uma nova variável local. Mas vamos chamar a direção de deslocamento. Será da direção do tipo. Em seguida, vamos definir um item aleatório a partir de uma matriz. E vamos fazer matriz para escolher uma direção, que é em quatro, isso será nordeste sudoeste norte-sudoeste, e esse seria nosso deslocamento A próxima coisa que precisamos é de uma nova saída. Então, vamos fazer um loop selvagem novamente, ficando loucos. Para a condição, usaremos nossa última saída se não for igual, na verdade, duas da direção definida. Assim, o igual não é o operador. Embora isso seja verdade, não queremos continuar. Precisamos encontrar uma nova saída aleatória. Então, o que vamos fazer é última saída para qualquer valor aleatório que ele possa atribuir. Isso não precisa de nenhum Let's this. De qualquer forma, vamos continuar. Então, para ser honesto, o labirinto real não mudará o centro dele Nós apenas compensamos isso. Isso não significa que o que vamos compensar agora é o ator real Então, o que precisamos fazer é a localização do ator. Não vamos compensar o ladrilho. Vamos configurar o gerador. Então, quando ele gerar o ladrilho, ele será deslocado Isso faz sentido. E vamos selecionar Eu vou adicionar mais dois pinos, e o índice seria nossa direção de deslocamento Vamos trazê-lo. E agora precisamos fazer um deslocamento para nossa localização. Isso seria obter citação. Isso também é necessário para criá-lo ou remar a partir daqui. Vamos dividir isso. North estaria apenas adicionando o tamanho do ladrilho ao tamanho do ladrilho a x e o resto permaneceria o. Isso seria que o nordeste adicionaria o bloco ao y e o resto permaneceria o mesmo, x e ad. Tu estaria negando esse tamanho negativo xy, e o resto o s. Este é um espaguete incrível, esse é tamanho negativo xy, e o resto o s. Este é um espaguete incrível, esse é o nível de albonaa. U e o oposto para o oeste, tamanho do ladrilho aqui ou y e x e defina o mesmo, e isso será oeste. Agora compensamos isso, nosso ator. Agora, vamos copiar parte do código que temos abaixo porque precisamos dele. Precisamos do ladrilho da colher BP. Tile Cords, vamos dividir isso em 00. Precisamos adicioná-lo para destruir. Precisamos adicioná-lo ao mapa da masmorra, os cabos atuais. Precisamos do especial para adicioná-lo aos blocos especiais e não precisamos do resto. Nós trazemos isso aqui. Nossos cabos atuais padrão são 00, então está tudo bem. Vamos passar rapidamente pelos cabos atuais, sem problemas. Tudo bem. Bem próximo ao lado, Nordeste Oeste, vamos até cada um deles, para pegar os vizinhos. Digamos que o índice seja igual a. O que eu quero fazer é apenas adicionar a direção do deslocamento ao vazio forçado Vou me ramificar aqui. Se for igual a norte é zero, dois, dou é um, oeste é três, , e vamos adicionar dois R e a matriz será a mangueira I. E agora precisamos de uma referência ao elevador do nosso proprietário, o elevador que gerou esse labirinto Temos uma referência do elevador em algum lugar, temos a referência do elevador de desova Duplique isso. Vamos chamá-lo de elevador do proprietário. Um nome muito ruim aqui. Então, o que vamos fazer ir até nosso elevador e criar uma variante, chamá-la de ação Vai estar em ação. Porque vamos precisar dele mais tarde. Vamos tornar a instância do elevador do spa editável e expor no O elevador bactor novamente, vou atualizar isso. Temos o elevador Spin, vamos colocar um tel O elevador Son, aquele que nos gerou e o elevador de spawn, aquele que labirinto telefonando Vamos voltar. Um gerador. Um pequeno primeiro estilo. No final, vamos pegar nosso elevador de geradores e definir Conecte-o para concluir e vamos conectar a direção de deslocamento Agora temos nosso primeiro estilo em breve. Agora, se eu for jogar, comecei do zero. Caindo em muitas armadilhas. Vou ejetar lúpulo. Por favor. Certo? Isso era esperado. Vamos controlar Al delete close this program. E a terceira vez é o charme. Veremos na próxima lição por que isso não continuou. Adeus por enquanto. 81. Animação de elevador e efeitos sonoros: Olá. E bem-vindo ao Game Design Workshop e verdadeiro curso de criação de LPG de ação procedural Engine Five LPG de ação procedural Anteriormente, terminamos com nosso evento de primeiro bloco de desova Adicionamos o deslocamento com base em uma seleção aleatória da localização do nosso labirinto Então começamos a gerar o primeiro ladrilho. Nós o adicionamos às nossas listas, e também por causa da falha do PD. OK. Então, deixe-me adicioná-lo bem rápido novamente. Vamos para o elevador. Eu mantive as instruções aqui. Oh, pegue nosso gerado por elevador, não aquele gerado. Também guardamos isso. Então, vamos obter a dessa direção e definir a direção definida para nossa direção de deslocamento Agora, depois, tentamos jogar e ele bugou. Em primeiro lugar, vamos verificar onde estamos gerando o elevador, qual proponente. A primeira coisa que fazemos é não temos Vamos clicar em nossa variável geradora, vamos torná-la editável por instância e expor no spawn dentro do Vamos compilar e salvar, e eu vou atualizar isso Tor, e para gerador, vamos colocar self. Isso cobre até certo ponto. Vamos ao nosso gráfico de eventos. Vamos ao nosso evento Built, eu acho. Ou, não o construído. Eu usei o primeiro ladrilho novamente porque há um erro aqui. Queremos o oposto disso. Adicionamos a direção de deslocamento e eu usei o 02 com base em nossa cruz fina adjacente Precisamos do oposto disso. Então isso seria um. Então, o sul seria zero. Isso seria três, e o que seria dois. Agora, isso deve fazer com que porcos sejam problemas. Não sei se é melhor jogar um com o baú, vinho. O que é o elevador? Fora. Nós temos alguma coisa. Eles estão acima gerados, mas não estamos nos movendo Agora, como você pode ver, tudo lança uma sombra para corrigir isso. Vamos trapacear um pouco e abrir nosso ladrilho, selecionar nossas paredes principais e configurá-las para que não projetem sombras E vamos fazer isso também para o chão. E as videiras. compilar e salvar o jogo Um pouco de moldura aí. Vamos embora. Talvez devêssemos fazer essas caixas um pouco menores e tornar a agricultura um pouco maior. Onde está o elevador ali? Ah, a propósito, mudei meu tamanho máximo para 20 novamente em vez de dez. Eu meio que sou uma câmera. Então, não temos essas sombras enormes que tínhamos, mas temos um brilho Acho que o brilho vem dessa lava aqui embaixo dessa lava aqui Então, vamos trapacear um pouco novamente. Vamos sair para onde fica novamente. Vamos duplicar o piso. Baseie um andar, um pouco abaixo, para esconder lava. B novamente. Foi um belo brilho estar em Eu era o macaco. Brilho demoníaco. O que o chão é lava, então temos que esconder a lava. E sim, estou indo na direção correta. E agora não temos esse brilho. Não bloqueamos o player. Porque o mouse realmente bate aqui. Eu não consigo me mover Oh, é hora de fazer o elevador subir. Estou apenas verificando se ele foi encontrado no local correto. Sim, temos d aqui, então acho que o S&P é uma boa primeira peça, duas opções aqui para a esquerda ou para elevador e a caixa estão corretos. Passando algum tempo lá. Agora, vamos voltar para o nosso elevador. E você tem essa referência. E agora duas coisas precisam acontecer. Oh, vamos colocar uma sequência e vamos criar um evento. Vamos chamar isso de estações de eventos, e vamos chamá-lo de “a única”. E vamos concluir isso depois. Agora, a segunda coisa que precisa, a primeira coisa que precisa acontecer, é obtermos nosso controle de player. Assim, podemos puxar a nota que queremos, que é o espaço alvo da visão terrestre, alguma coisa. Visualize o alvo com a planta. Oh, o tempo do plano seria de 3 segundos, e o resto, vamos apenas nos dar uma olhada. Depois de começarmos a reproduzir as animações, vamos atrasar 2 segundos. E então vamos criar um bulion nas variáveis. Vamos chamar essa condição e vamos definir essa condição como verdadeira. Agora, o que essa condição fará? Vamos usar o evento tick para conduzir nossa animação. Nós vamos ter essa condição aqui. Essa é uma condição de qualidade. Nome um pouco melhor. Com base nessa condição, vamos determinar o quanto nosso elevador sobe. E, claro, eu estava brincando quando disse que vamos fazer isso da maneira mais difícil de mover o corpo e não o ator Vamos mover o ator. É muito, muito melhor, pois também desconectamos, separamos o ator infantil Mas explicaremos o que aconteceria se não fosse o ator e se movêssemos o espaço relativo do corpo. Ah. Quando nosso elevador está em movimento, queremos tocar um som. No momento, queremos apenas reproduzir som. Vamos criar um som porque nosso elevador pode funcionar por um segundo. Vamos fazer com que o elevador se mova de acordo com a parte de carregamento, ele esperaria que o labirinto concluído para chegar ao destino Porque se não fizermos isso, há uma chance de o elevador subir e chegar ao destino sem que o labirinto esteja totalmente construído E isso é algo que não queremos. Então, vamos ter um drive Alpha, como fizemos nos Lerbs, como fizemos nas linhas do tempo para controlar Oh, vamos começar com o som. O que precisamos fazer para que o som seja capaz de controlá-lo. Se eu fizer um som Lay. Eu não tenho controle sobre. Eu não tenho controle sobre isso. Eu só tenho controle sobre o volume, a praia, hora das estrelas e as configurações de simultaneidade, que é algo como colocar regras como tamanho de reverberação, onde está um pouco completo De qualquer forma, eu não tenho uma referência real ao som, onde se eu usar o som de criação, D. Então eu tenho esse valor de retorno, que é uma referência ao som que estou tocando, mas na verdade criando, ainda não estou tocando. Porque quando estou criando um som, preciso ordenar que ele faça o que eu quiser, basta criar uma variável de som, um canal de áudio básico. Então, vou promover isso, vamos colocar o som em primeiro lugar, elevar alguma coisa. Acho que é a máquina do elevador. Sim. É o sinal da máquina de elevador. Vou promover isso de forma variável. Vamos chamar isso de elevador. E agora vamos começar a jogar. Eu vou pressionar. Jogue. E só penso nesse som. Nós o configuramos para ser repetido. Então, isso é infinito. Ele precisa ser interrompido quando quisermos parar de jogar. Oh, vá salvar tudo. Caso Justin E vamos começar com nossas animações. Mas vamos fazer isso na próxima lição. Esse é um bom ponto de parada por enquanto. Esperamos ver você na próxima. Adeus. 82. Câmera cinematográfica para elevador: Olá, bem-vindo ao workshop de design e ao verdadeiro Engine five, Procedural Dungeon, RPG de ação Anteriormente, criamos as últimas partes do nosso evento de sobreposição inicial em nosso elevador Plantamos o alvo de visão com o nosso, que realmente precisa de mim aqui. Ele não se misturaria a nenhum alvo se não tivesse um novo alvo. Então, nos adaptamos à nossa nova meta e criamos o evento de animações iniciais que vamos experimentar nesta lição Usamos o atraso para configurar as coisas, nossas animações e tudo mais, e depois definimos a condição t como verdadeira Criamos o som, armazenamos em uma variável e o configuramos para tocar. E explicamos algumas coisas sobre como nosso movimento de elevador vai funcionar. Neste caso, vamos começar criando a animação. Vamos começar a animação. A primeira coisa que precisaremos é de um cronograma. Então, vamos adicionar um item e vamos entrar e criar uma nova trilha de fluxo. será uma trilha de fluxo muito pequena Novamente, será uma trilha de fluxo muito pequena , será hora zero, valor zero e 0,3, 0,3 é cinco. 0,3. Seria um. Vamos clicar. Use também o último quadro-chave. Volte aqui. Agora, vamos pegar nossos fãs. Vamos fazer? Vou conectar isso. Eu vou. Vou conectar isso para atualizar. E agora vamos conectar isso, para obter c. Eu vou dividir. Eu vou agir. E eu vou dividir o. Vou adicionar x e y. Agora, para o nosso t, é aqui que aprenderemos. Vamos deixar flutuar e vamos usar o caminhão novo O lugar onde queremos movê-los é do que quer que sejam agora, para zero. Para fazer isso, vamos começar a jogar. Exclua esse ato, não importa, e vamos pegar a primeira cerca, obter a localização relativa. Eu vou dividir isso. Vou promover o b and stay nesta região e vou conectá-lo aqui. Agora isso está armazenado. Vou voltar à linha do tempo e selecionar isso para Alpha, e B seria zero para A, não Alpha Alpha ainda é nosso novo caminhão, nosso caminhão de fluxo. Então, vamos ver se isso funciona. C play. Objeto. Vá pegar meu personagem porque eu não estou andando até lá. Eu vou trazer o personagem aqui. Eu retomo posse. O comando faz muita coisa, mas a cerca sobe e, sim, está funcionando. Então, o próximo passo é fazer o elevador subir. E para isso, vamos usar e. Agora, temos nossa condição. Se a condição for verdadeira, eu vou abastecer. Por outro lado, se fizéssemos uma relação aqui, definiríamos uma localização relativa e precisaríamos do corpo como referência. E isso levaria todo o resto conosco. Mas vamos apenas usar o set a location. Oh, para o novo local, precisamos ir entre o local atual e nosso local de destino. Então, precisaremos começar a jogar novamente. Acho que está acima de tudo, e nós vamos. Vamos promover esses dois filmes originais. A próxima coisa que faremos é adicionar a isso nossa altura, que queremos gerar o próximo labirinto, que seria mais Mas como precisamos ir um pouco mais alto, faríamos 2.900 Temos que cair, ter algum espaço para descer lá embaixo. Agora, vamos promover isso. Esse seria nosso parente preferido, Pat. Na verdade, não é relativo. Desculpe. Eu sou paciente. Agora, temos esses dois valores. Vamos voltar ao nosso Tiki Bent. Ah, quando temos uma linha do tempo, temos um vetor e vamos até nossa origem e nosso alvo Essa é a nossa origem e esse é o nosso alvo. E o Alpha geralmente está sendo definido por nosso caminhão de fluxo de cronograma Agora precisamos promover essa variável chamada max Alpha. Porque vamos configurar isso a partir do nosso gerador de labirinto, como fizemos com o carregamento E com base nisso, essa é a altura que o elevador tentará alcançar até que esse Alpha chegue ao número um. Então, é preciso ir completamente de A para B. Fazer isso. Vamos usar em constante. Que, como diz a dica, tenta atingir uma meta em uma taxa constante. Portanto, temos uma corrente e um alvo. Para o nosso atual, vamos receber uma vacação. E nosso alvo seria a erva, o resultado da erva Para nosso horário Delta, no momento, usaremos segundos Delta, que o torna um pouco confiável em termos de quadros Existe uma fórmula para torná-lo não confiável no quadro, a taxa de quadros não afetaria o movimento, mas não vamos fazer isso agora Para C, na velocidade terp, que é o passo dessa veia b, usaremos 350 Agora, a próxima coisa que devemos fazer é fazer uma pergunta. atingimos nossa meta, porque você atingiu nossa meta , devemos parar e reverter nossas animações, fazer as cercas Não, há muitas maneiras de fazer isso. Na verdade, podemos salvar nosso Alfa igual a um, mas vamos garantir que nossa localização de destino seja a mesma de nossa localização atual Vamos fazer um igual, desculpe, quase igual. Para aqueles que não viram que era esse fundo aqui, não exatamente igual, o quase igual, e vamos dar, digamos, 1010 e unidades reais, que são 10 centímetros Agora podemos mudar nossa condição também. Esse evento de palitos não aconteceria mais. A próxima coisa que devemos fazer é definir o comprimento da peça-alvo aqui. Em vez de vender pelo novo alvo, nosso controle de jogo, vamos ser controlados, e esse seria nosso novo alvo. Da câmera do elevador, retornamos ao jogador. Vamos colocar um 52 aqui no exponencial de mistura, que é ele controla a forma da curva, conforme você pode ler na dica de ferramenta de como ela funciona A próxima coisa que precisamos fazer é entrar no gerador do labirinto e criar uma nova função Vamos chamar isso dessa maneira. E vamos fazer com que nossos atores destruam. Somos Paul, olha. Vamos verificar se é válido. O motivo pelo qual estamos verificando se é válido é porque estamos até adicionando itens que vamos pegar. Se tivermos retirado o item , ele não é mais válido. Então, devemos verificar isso. Então o ator, se o ator for válido. Em seguida, montamos nosso filho elevador, que é o elevador do nível anterior. Aí está? Aí está. Esse elevador não deve ser destruído quando criamos o novo labirinto, porque se for destruído quando criarmos um novo labirinto, cairemos no nada, na verdade , em um vazio infinito Portanto, precisamos verificar se isso também é válido. A razão pela qual precisamos verificar é porque, se for o primeiro labirinto , ele não tem esse elevador Por fim, vamos simplesmente nos destruir. R. Vamos compilar. Dave Dave e compile. Dave tudo, na verdade. Vamos ver se está funcionando. Para conseguir um personagem. Eu vou mover o personagem e pegar o personagem. O elevador está aqui. Então, estou ficando ocupado e o ator não está se movendo. Isso é porque não definimos o pagamento. Abaixo O que precisamos fazer é, em nosso gerador de labirinto, onde quer que estejamos, defina a porcentagem de nossa carga, diferencie entre essas duas e a porcentagem definida em nosso elevador de ligação Ah. Isso é algo que faremos na próxima vez. Eu vou te ver então, adeus. 83. Como corrigir problemas de mistura de visão da câmera: Olá, bem-vindo ao Game Design Workshop e Real Engine Five Procedural Dungeon Action Anteriormente, terminamos com nossas animações de elevador. Concluímos a animação das cercas usando uma linha do tempo e um loop for para percorrer todas as cercas e definimos a localização relativa com base no Z e no zero originais Porque em nosso Z original, lá embaixo. Em seguida, continuamos com nosso evento t, quando nossa condição t é verdadeira, o que significa que podemos começar a nos mover. Movemos a localização do ator entre o original e o alvo no local de destino que deveríamos ir E usamos o Max Alpha para determinar a distância entre esses dois. E então usamos a constante de interpretação de baía da localização do nosso ator em direção ao alvo com um passo de 350 Em seguida, verificamos com um galho se atingimos nosso alvo e, se atingimos, misturamos a câmera de visualização e desligamos nossa condição t. Agora, vamos continuar com nosso gerador de labirinto, onde quer que tenhamos a porcentagem de carregamento definida para criar onde está o primeiro Aqui está o primeiro. Este está definido como zero. Zero, começamos, não precisamos fazer isso. Mas precisamos nos diferenciar na construção. Aqui, na verdade, colocamos o válido, o que nos dá basicamente a ramificação . Vamos abrir um pouco de espaço. Vamos precisar de mais espaço. Acho que é o suficiente, mais do que suficiente. Então, vamos lê-lo aqui e, na verdade, o carregamento ainda pode ser válido porque não esvaziamos a variável. Essa validade não é boa o suficiente. Precisamos de um galho. Mas se continuar, mas quando é, fazemos a coisa nova, quando é falsa, fazemos a porcentagem definida. E a novidade será comprar o elevador espontâneo. E aquele Alpha. Eu acho que isso é 0,4, vamos até 40%. Sim. Portanto, defina Max Alpha para 0,4. Nikki, uma coisinha aqui, quase não a viu, e eu gostaria de saber por que isso não se move Uma ramificação de cópia e o setter, e o segundo carregamento está aqui Podemos pular esse ato. Vá diretamente 0,5. Vamos para o galho, o falso vai para o velho. O verdadeiro é o novo, esse 2.5. Vamos seguir em frente. Vamos ficar com alguns deles. Vamos definir aqui 2.7. Aqui, o peso cai do velho para o novo. Isso está correto. Do Alpha, estamos passando exatamente para o próximo a partir da porcentagem definida. Claro, claro o suficiente. Vamos manter 85 e vamos fazer um. Na verdade, isso não precisa se conectar aqui. Não estamos penhorando um jogador, não estamos jogando nenhuma animação Não vamos fazer nada disso. Então, isso pode terminar aqui com, na verdade, um. Então, podemos mudar 0,7, vamos colocar 0,8. E isso seria suficiente. Devemos pensar duas vezes? Não, vamos jogar. Começar. Será que poderíamos pensar duas vezes? Não. Vamos jogar. Para. Vamos encontrar tudo por perto. Madeira. E vou receber dz novamente. Estamos nos mudando. Estamos nos movendo e o segundo labirinto é construído. E chegamos ao segundo labirinto. E o primeiro labirinto não é destruído. A música não parou de tocar. Ainda podemos interagir com isso. Primeiro de tudo. Vamos interromper a interação. O que fazemos aqui é colocá-lo em nossa colisão. Depois de fazer isso, pegue nossa caixa e fique habilitado para não colidir, que é o valor padrão Segunda coisa. Vamos corrigir essa tontura com a câmera que realmente me deixa Vamos aproximar um pouco mais a câmera. vamos enviar em rotação dois ou Dios desta vez, ao que parece Não. Acho que o primeiro zero foi o primeiro do dia de produção Vamos escolher isso. Aí está o elevador. Oh, labirinto estranho. Oi. Um pouco melhor. O que estou vendo é começar do lado oposto. Oh, por que está começando de forma tão estranha? Lá. D) Toda a câmera fica diretamente acima, digamos, 800. Digamos, 600. Tudo bem. Vamos sair com os pacientes. Hoo. Só vou cuidar da câmera 98 99. Eu posso movê-lo um pouco mais facilmente até aqui. Em rotação. Você tem novamente 108. Vou deixar 9000600, para que não tenhamos mais tempo Você pode colocá-lo onde quiser. Eu acho que isso seria bom. Personagem. Elevador, que eu não comprei para o personagem. Mas o chão. Eu mudei o, o personagem caiu. Onde está o elevador? Certo? Oh, está ainda pior do que nunca. Isso é incrível. Oito, conforme recomendado, é 60 -90 18 Os valores são: precisamos corrigir esse também. Como sou eu. Então, pesquisei um pouco sobre o que está acontecendo. É um problema de como o alvo de visão suave funciona com algo chamado Kimbal lock, que transforma a tela em curvas, basicamente em partes distantes da tela partes distantes da tela nordeste do sudoeste e O que acontece? Vamos ver. Agora, vou mover o jogador ao lado do elevador. Novamente, no chão. Agora, podemos fazer 123 círculos, basicamente. Como você pode ver, ele se fixa quase três vezes. Isso tem a ver com podridão, rotações relativas e O que vamos fazer e vai funcionar é pegar nossa câmera e girá-la em círculo 23 vezes completo Agora, se compilarmos e começarmos a jogar, eles consertam a trava do cardan em Elevador e quase consertado. Esta subida e descida do elevador de caixa até esta verificação de direção do jogador. E está consertado. Sim. Mas, a mesma coisa que precisamos fazer para começar o jogo. Isso significa que somos um semicírculo, digamos que uma vez isso w Oh, foi o oposto Vou desfazer a rotação na direção oposta. O. Em um círculo completo. Socorro. O que está acontecendo exatamente aqui? E eu vou ejetar a câmera. Eu estava olhando daqui, esses são os jogadores. A câmera está errada, deveria estar mais voltada para esse lado, que é a nossa câmera original. Vamos ver o que eu não preparei. De novo, vou movê-lo para este lado. Vou pressionar a posição K, David. Eu vou pilotar isso. Olhando corretamente, nosso jogador. Et, eu vou pressionar Kate tocando novamente. Sim, basicamente, acabamos de trazer a câmera para olhar mais do lado do jogador. Funcionou. Você pode jogar com rotações até obter um movimento adequado para você e para a posição, vamos deixar como está Vamos verificar se o elevador ainda está funcionando. Elevador. Tudo bem. Finalmente, nossas câmeras estão fixas. Acho que concordamos com este, consertando os lotes. Isso foi realmente crucial. E vamos parar por aqui e continuar na próxima. 84. Animação de elevador e entrada de inventário: Olá e bem-vindo ao workshop de Design de Jogos sob motor Five Procedural Dungeon action z creation calls Anteriormente, finalmente fixamos as rotações das câmeras Na verdade, podemos ter uma transação tranquila e não essa máquina de lavar louça. Não sei em que estávamos. E o elevador também é sim. E podemos chegar ao próximo andar. Mas o som continua tocando e as paredes não estão caindo. Então, vamos corrigir esses problemas. E mais uma coisa que menciono é que nosso labirinto anterior não estava sendo identificado. Então, vamos começar com isso porque o código para isso simplesmente não o chamamos Vamos obter nossa referência. E vamos chamar Destroy Maze. Labirinto anterior, que na verdade chamamos na verdade chamamos labirinto que será destruído, então destruir Labirinto seria um E vamos testar. Tipo, bom. A arte não acabou. S. Há uma pequena lacuna em Fine, e nosso labirinto anterior foi destruído, mas não nosso elevador atual Isso é bom. Não queremos que isso seja destruído porque não vamos cair em lugar nenhum Vamos continuar consertando o resto das coisas. A primeira coisa que vamos corrigir é a animação. Oh, precisamos derrubar as cercas. Vou usar esse carro. Pergunte aos homens. Vamos chamá-la de cerca. Ah. A primeira coisa que precisamos fazer é ouvir o som do elevador. Vamos parar a variável de áudio. Agora, vamos fazer isso porque queremos tocar o som de parada. E é algo de elevador, elevador, um Q, e então vamos tocar som. Apenas jogue. E então vamos conectar a extremidade reversa. Agora, isso os fará cair. Mas ainda não terminamos. Precisamos ampliar nossa plataforma. Não, vamos mudar de direção. E vamos conectar isso no final da linha do tempo espaço, nos pacotes acima, está aqui, acho que está tudo bem, e agora precisamos de uma nova linha do tempo de trás para frente O contrário, porque o motivo é quando pagamos de trás para frente, derrubando a cerca, não estendendo a plataforma E obteremos nosso avião elevador, que é nossa plataforma, e essa localização relativa. Agora, lembre-se, armazenamos uma variável chamada direção. E essa variável que armazenamos quando criamos o primeiro estilo em nossa geração de labirintos O primeiro estilo continuou. E essa direção foi a compensação que basicamente compensamos no primeiro estilo Então, temos essa direção, que é basicamente nossa saída . Então, para onde está nosso primeiro estilo que devemos estender. E é isso que vamos fazer com o novo local. Mas primeiro, temos que ir ao pronto-socorro, não engolir pessoas normais, desculpe Ert E precisamos adicionar um cronograma. Digamos que seja menos de dois segundos, leva 2 segundos 00 e um, vamos alimentar e também usar o último quadro-chave Não, vamos conectar esse Alpha e, para B, vamos selecionar e a condição em que o curinga do índice será nossa direção. Agora, para Alpha, precisamos da localização original da plataforma. Então, vamos para a placa inicial. Vamos obter nossa plataforma, vamos obter a localização relativa e vamos promovê-la como uma variável. Vamos chamá-lo de localização relativa. Talvez a realidade da plataforma original não importe. Vamos colocar isso aqui, vamos conectá-lo ao Alpha e, em seguida, vamos adicionar algo a ele. Bem, vamos adicionar para leste, norte e norte e oeste, vamos remover para que seja 300 em x ou norte, duplique isso, será zero em x e 300 em y ou leste, então vamos duplicar esses Vou conectar a plataforma à anterior e negar o x conectado ao sul, negar, o oeste conectado ao oeste Agora, isso meio que conclui nosso elevador. E eu digo meio que porque precisaremos mudar alguns estados do personagem para suportá-lo, basicamente para que ele não consiga se mover enquanto estiver no elevador Agora, a próxima coisa que devemos fazer é trazer nossa interface de usuário para o jogo. Já criamos a função para ele em nosso modo de jogo, que é uma jogabilidade. E a única coisa que precisamos fazer é ir até nosso personagem. Vamos abrir este plano e descobrir a jogabilidade. E obtenha o modo de jogo. Quanto ao modo de jogo desativado, converta para puro elenco, modo esta variável, conectada para ganhar jogo, isso como uma variável, sem jogabilidade. E isso traria R U Y quando começássemos o jogo. Agora podemos ver as moedas. Essa é a única coisa que podemos ver ainda porque não temos uma chave para trazer o inventário. Vamos fazer uma solução rápida para corrigir isso agora. Vamos trazer nosso inventário. Eu vou escapar. Vou abrir nosso controle de cima para baixo, onde usamos os itens de cola com o botão Alt. Agora, vou usar o This is the bottom que abrirá nosso inventário e o fechará. O que precisamos fazer é pressionar. Vamos nos reunir. Quando estivermos em A, abriremos um inventário, então obteremos nossa referência de inventário e faremos isso. Indo para o modo A. Lance o modo de ganho de cima para baixo, converta para puro elenco e, a partir disso, vamos atualizar a peruca A. Inventário. Vamos pegar nosso inventário. E então, do nosso jeito de jogar, vamos chamá-la de animação, e vamos jogar animação. Preciso de um pouco de espaço. Para uma proteção contra falhas. Vamos também Animação. Coloque um atraso. E então nós entendemos. E vamos aos nossos widgets de jogabilidade E precisamos de uma caixa horizontal dessa caixa horizontal. HB. Precisamos torná-la uma variável. Vamos voltar ao nosso controlador. B, inventário e ativado quando estivermos fechando, definiremos buracos. Não é verdade. Então precisamos jogar novamente, a animação. Vamos conectar a animação e precisamos conectar o alvo, que é a jogabilidade do widget Volte novamente, e desta vez vai para trás, não para frente. Agora, teoricamente, temos um erro. Ou se não tivéssemos compilado a jogabilidade. É por isso. Arquivo do Dave. Vamos jogar. Eu tenho um de imprensa. Temos nosso inventário, cujos botões não estão ótimos. Oh, eu acho que isso é uma solução para a próxima vez. Eu vou te ver então. Adeus. 85. Sistema Minimap: E bem-vindo ao workshop de design de jogos e ao curso de criação de RPG de ação em Dungeon com cinco procedimentos reais RPG de ação em Dungeon com cinco procedimentos reais Anteriormente, terminamos com nossa mecânica de elevadores, quase terminada Como dissemos, há mais algumas coisas que precisamos fazer para mudar os estados do personagem. Mas terminamos com o reverso da cerca. Paramos a música, o som do elevador, iniciamos um novo som e depois baixamos as grades com o mesmo código ao contrário da linha do tempo E então criamos nova linha do tempo com base no canal inverso da linha do tempo anterior, como quando a linha do tempo anterior termina contrário, executamos isso e adicionamos a localização relativa da nossa plataforma com base em alguns valores codificados por chapéu e a relativa, e adicionamos a localização relativa da nossa plataforma com base em a uma nova linha do tempo com base no canal inverso da linha do tempo anterior, como quando a linha do tempo anterior termina ao contrário, executamos isso e adicionamos a localização relativa da nossa plataforma com base em alguns valores codificados por chapéu e a relativa, a localização relativa original. Além disso, adicionamos nossa jogabilidade à nossa tela e criamos a chave para gerar o inventário, que na verdade está no controle de cima para baixo Então, agora começamos a fazer mais coisas no controle e logo muito, muito mais. E usamos o número um no teclado para alternar entre A e B, que significa A para atualizar o inventário e continuar a animação E com um atraso no horário de término, ele o ativa, e B faria o oposto, o desabilita e a animação é reproduzida ao contrário Ativar e desativar é porque não queremos poder pressionar as teclas enquanto a animação ainda está sendo reproduzida. Agora, vamos continuar corrigindo um dos erros que acabamos de ver, um dos problemas, que surge quando não temos imagens, exatamente o mesmo princípio. Quando não temos imagem, quando ela retorna, a textura do nosso item retorna nula e, em seguida, ele coloca uma imagem branca Então, o que vamos fazer é selecionar a textura desejada E então eu vou me conectar. A imagem do inventário aqui, talvez precisemos desconectá-la Mas para o índice do que precisamos, devemos verificar se essa imagem é igual a nada. Se for igual a nada, então selecionamos outra coisa. Se não for igual a nada, selecionamos a imagem do inventário. Outra coisa seria a imagem que selecionamos aqui. Eu vou até aqui, encontrá-lo. R, e depois vou voltar ao gráfico. E arraste e solte aqui. Agora, isso deveria ter resolvido nosso problema. Como eu, está corrigindo as imagens, e temos nossa chave porque adicionamos nossa chave ao inventário. Podemos ver uma pequena caixa branca ao redor, o que não é muito agradável. Oh, vamos corrigir isso também. Vamos começar a jogar. Vamos procurar um designer. Vamos até o primeiro botão e há um desenho ao redor da caixa. Ao pressionar G, você pode ver a visualização do jogo e vamos selecionar o primeiro botão novamente. Se eu mudar isso para imagem, então está corrigindo. Então, eu vou mudar isso para tudo, tudo. Mas o flutuante, o deprimido e o normal, às vezes não é um lenhador chato Tão desenhado como imagem em tudo. E vou copiar e colar esse bloco em tudo, copiar e pegar esse botão, vou colar. Vou colar aqui e vou colar aqui. E está consertado. Não temos mais borda branca. Para pressionar play. Vou trazer o inventário. Na primeira vez, o inventário chega, não está desativado, enquanto nas outras vezes ele é apresentado Vamos corrigir isso também. Deixe-me testá-lo novamente. Claro. Sim, a primeira vez que chega, não foi apresentada. Por padrão, devemos ter essa barra desativada. Finalmente desativado, precisamos desclicar em ativado, basicamente. Compile e salve, e esse problema também foi corrigido. Como estamos aqui consertando o inventário, vamos também adicionar nosso mínimo. Não, vamos precisar de uma sobreposição. Vamos trazê-lo para algum lugar aqui. Vamos soltá-lo no canto superior direito. Para a posição, vamos menos 370, posição y 50, o tempo seria Então, faz uma caixa. Agora, dentro dessa sobreposição, vamos adicionar um i. re duas imagens que eles vão sentir . Segunda imagem. Vamos nomear a segunda ordem das imagens, torná-la uma variável. Vamos fazer a primeira imagem que eu chamo de mínima. Faça disso uma variável. Para nossa fronteira, seja uma perda, temos nosso mapa de pedidos fantástico, fronteira mínima. Para o nosso minimapa, acho que temos um material. Não, nós não temos. Ou uma fronteira simples. Temos o alvo renderizado. O que significa o alvo renderizado? Não, vamos até nosso personagem e adicionaremos Is the capture ao componente. Agora, isso é basicamente uma câmera, mas não é uma câmera qualquer. Uma câmera com regras muito específicas que visa. Bem, não os alvos. Ele pode renderizar coisas específicas e não renderizar outras coisas. Mas ele não o mostra na janela de exibição. Não é uma câmera pela qual olhamos. Uma câmera que alimenta sua velocidade para algo chamado alvo de renderização de textura de renderização Então, esse é o nosso mínimo de arte. Vamos selecioná-lo no alvo de textura da câmera. E vamos realmente definir sua altura bem alta. Vamos configurá-lo para 3.000 303.000. Ele pode capturar uma grande distância ao nosso redor. Agora, vamos fazer mais uma verificação de que não temos realmente o material. Nós fazemos. Acho que temos que rezar para jogar novamente. Então, para fechar isso, agora vamos abri-lo novamente ou podemos evoluir para que esteja aqui E agora temos o alvo de renderização do minimapa do material. Mas vamos abrir por um segundo e vamos mudar uma coisa. Vamos selecionar nossa amostra de textura, como ela já está configurada para um minimapa, e agora vamos conectar, acho, a máscara de opacidade, ou Isso deve ser um, a forma, o círculo, deve ser um, e vamos economizar. Agora, supostamente, vamos selecionar o material em nosso minimapa mínimo que eu renderizo, e Agora, isso é um mínimo de três D, o que significa que é caro , mas podemos ficar um pouco por aqui. Vamos corrigir esse movimento para a esquerda e para a direita. E, mas temos um resultado. Não podemos ver o que está ao nosso redor. A razão pela qual não podemos usar uma técnica tradicional e usar texturas e coordenadas e tudo mais é porque nosso mapa está sendo gerado aleatoriamente Então, vamos precisar de três mínimos D. Há outras maneiras de fazer isso também, mas para nós, isso seria bom. Eu acho que este é um bom ponto de parada para este. Vamos continuar na próxima. Adeus. 86. Toques finais do minimapa e dica de ferramenta de inventário: Olá, bem-vindo a ganhar Design Workshop, real Engine five e Procedural Dungeon Action RPG Anteriormente, corrigimos alguns problemas com a aparência do nosso inventário. Usamos eles desenham nossa imagem em nosso estilo para remover as caixas brancas ao redor dos botões e corrigimos o problema de ter uma variável nula nessa textura quando definimos a imagem do inventário Então, precisamos de uma ramificação que, quando for nula, quando não for nada, use nossa imagem para nada No inventário de atualização de código. Não. Em seguida, adicionamos nossos elementos mínimos em nossa tela, que são uma sobreposição e duas imagens As duas imagens são uma para a borda, que escolhemos a imagem de fundo de fantasia que temos a imagem de borda e, para o material, escolhemos o material M minimum I, que é um material que criamos e alteramos algumas coisas dentro do material. Na verdade, mudamos uma coisa a forma do círculo deve ser o valor padrão de um, então o material deve ser escolhido porque ele foi projetado para um quadrado ou um círculo no mínimo Agora, não vamos economizar novamente. Adicionamos ao nosso personagem, render, esse não é o nosso personagem. Não, é um personagem. Está bem? Então, adicionamos nosso componente capturado, que é uma câmera especial que renderiza coisas específicas E definimos a meta de textura como sendo o RT mínimo, que é onde a alimentação da câmera está sendo projetada, digamos, mais ou menos isso Então, agora vamos filtrar um pouco o que a câmera grava. Porque agora, como podemos ver. Ele grava tudo. Podemos até ver o jogador. Não podemos realmente ver o jogador, mas podemos ver o jogador. O jogador está aqui. Eu gosto que ele registre isso. Mas, com certeza, não deveria estar gravando poemas. Não, vamos voltar ao nosso personagem. Vamos selecionar a câmera. Vamos para nossa categoria de captura de cena. Vamos clicar em Avançado. Digamos que não queremos gravar ESPs atmosféricos. Na verdade, não usamos isso. Não queremos a neblina. Ou nós temos. Eu não sei Se você quiser a esfera na atmosfera na neblina, você pode mantê-la. O que certamente não queremos são malhas esqueléticas. Talvez partículas que deletem os portões de cura, mas não importa, isso manterá as malhas longe dos portões de cura E deixamos todo o resto à vontade. Se estiver consumindo muito poder de processamento, talvez possamos remover alguns raios Mas se o seu computador aguentar, você pode deixar como está. Se isso não acontecer, continue verificando as coisas. Provavelmente a iluminação. Também a iluminação oculta, translucidez Sim. De qualquer forma, ou você sempre pode definir as configurações de escalabilidade do seu mecanismo para diminuir E isso resolveria maioria dos problemas se você tivesse um computador fraco. Agora, a próxima coisa que devemos fazer é ir até nosso personagem novamente, ir até nossa janela de exibição e corrigir o giro da câmera Então, vamos trazer nosso componente de captura de cena aqui para começar a jogar. Vamos permanecer absolutos, que é um nó que diz ao componente se ele deve seguir coordenadas mundiais ou coordenadas locais. E queremos seguir a rotação absoluta do mundo, para que continue o mesmo. Então, vamos usar isso, e agora nosso minimapa deve estar Sim Estável, mas está na nossa direção errada. Vamos até nossa câmera e selecione 45 graus aqui. Compile e salve, e vamos jogar. E agora está na direção correta. Poderíamos fazer com que o mínimo aparecesse no momento em que o larp da câmera terminasse Mas isso vai ficar bem por enquanto. Vamos deixar as coisas tranquilas. E seria bom se estivéssemos fechando os mínimos quando chegássemos ao elevador, porque podemos ver o labirinto do labirinto anterior desaparecer De qualquer forma, isso é engraçado, por causa da emissiva do baú, do material emissivo aqui, podemos ver essas águas no solo Não sei se eles estão visíveis de que é uma reunião. De qualquer forma, vamos mudar algum modelo em breve. Então, vamos emparelhar com ele. Agora que temos esse sistema aqui. Vamos colocar um ponto para o jogador também ver o jogador. Bem, vamos ao nosso personagem. Vamos adicionar um sprite de papel. Oh, vamos ao nosso personagem. Vamos adicionar um sprite de papel. E para o sprite de papel. Em nossas texturas, na verdade, podemos simplesmente selecionar o sprite de papel e selecioná-lo aqui Fora. Vamos girá-lo para ficar de frente corretamente com a seta do personagem apontando para o personagem, e vamos definir sua altura para 2.900 e sua escala 2.1 Em tudo, vamos compilar e salvar. Agora vamos jogar. Temos um mínimo. Temos um sprite de papel para mostrar nossa direção no mínimo Espere. E como vemos muitos baús sendo gerados no início, sem conseguirmos encontrar um lugar para desovar, vamos acessar nosso gerador de labirinto em nossa criação Vamos dividir isso novamente por dois e na verdade, apenas adicionar esse novo por divisão à primeira divisão. Então chegamos a 75%, e vamos conectar isso aqui. Vamos conectá-lo também aqui. E seria isso. Na verdade, também está aqui. E agora, espero que estejamos gerando melhor. Pressione o elevador. Oh, esta é uma serra muito bonita em comparação com onde estamos. Promissor, muito promissor. Agora, já que estamos no tópico da interface do usuário. Vamos adicionar algo mais ao nosso inventário. Vamos acrescentar algo que, quando passamos o mouse esses botões, nos fornece informações sobre o que estamos passando o Então, vamos fazer isso de forma muito simples. Vamos adicionar um bloco de texto de texto. Vamos trazê-lo para algum lugar aqui. Vamos verificar com a animação. Em algum lugar no meio do nosso inventário. Isso poderia estar aqui, eu acho. Podemos simplesmente observá-lo agora. Não precisa ser perfeito. Aqui está tudo bem. Vou fazer com que sua âncora também entre O centro fica aqui em cima. Então, vamos trazer a âncora aqui e definir alinhamento 2,5 e 0,5 Desculpe, deveria ser zero e o s ser menos. Não. Na verdade, correto. Ótimo. Não importa. Tamanho 200 porque esse é o tamanho que precisamos, e vamos definir a justificativa no meio. Por que eu não gosto Por que eu acho que é A, está completo. Essa é a posição em x e y e, em seguida, o alinhamento 5.5, não vimos que estava errado Agora, vamos seguir em frente. Está um pouco errado, mas está tudo bem. Vamos fazer disso tudo. Vamos chamar isso de g vamos criar uma função. Vamos criar uma nova função. Digamos que acabemos com a dica, e precisaremos de algumas informações Vai ser do tipo habilidade. Verificação de visibilidade. Sim. É disso que precisamos. Vou chamá-la de visibilidade. E precisaremos de outra entrada, que será inteira, e ela entrará Agora, vamos ter o modo homossexual. Vamos para a GM. Modo Dog Ga. Vamos nos converter em puro elenco e obteremos o ing. Agora, do inventário, vamos pegar as chaves. Nós vamos fazê-los aqui. E a partir da chave, obteremos o slot de inventário. Então vamos fazer uma pergunta. Nosso item existe? Para fazer isso, vamos usar o tamanho do nosso inventário e compará-lo com mais, um dos itens que estão chegando Estou fazendo mais um porque quando vou ligar para eles, vou chamá-los de botão zero, botão um, botão dois, botão três, e o comprimento começa com um. Então é por isso que eu sou mais um. Eu simplesmente não poderia fazer o zero, um, 23 e ir com 1234 Mas vamos nos acostumar a ter essas diferenças de contagem zero e, ao mesmo tempo, contagem normal com corte em um. Bem, vamos verificar se isso é maior ou igual. E isso, eu vou conectá-lo aqui. Agora, se for maior ou igual, se não for realmente, precisamos desse texto. Nós vamos trazê-lo aqui. Vou definir o texto. E vamos dizer que vou definir a habilidade para a visibilidade de entrada Agora, o que acontece quando é verdade? Bem, vamos pegar uma mesa. Fileira. E para a linha, vamos conectar esse get. Para essa tabela, usaremos itens e quebraremos o SD. Vamos copiar e colar esse código aqui. E vamos selecionar o nome aqui. Na verdade, não precisamos do resto, e a visibilidade será conectada aqui, que é a visibilidade de entrada que tiramos daqui. Foi assim que criamos a dica de ferramenta, a função que a torna visível ou invisível Agora, de onde vamos chamá-lo? Novamente, vai ser bem simples. Vamos até nossos botões e vamos entrar na lista e ver como precisamos torná-los variáveis. Portanto, precisamos deles ao pairar e ao passar o mouse. Vamos fazer isso com cada botão. Variável ao passar o mouse. Passe o mouse. Vá para o terceiro botão, é variável. Vamos para o quarto botão, é variável. Vamos de dentro do gráfico. Aqui, é muito mais rápido passar o mouse e o botão três passar o mouse e passar Vamos fazer uma boa lista para eles. Para colocá-los em ordem depois. Y. Então, temos o botão um, dois, três, quatro, e temos o botão de passar o mouse um, dois, três, Agora, trazemos a função de foco para cada padrão. Vamos de zero, um a três, e visivelmente ao contrário N seria seria aquele então I. Opa e se esconde E escondido. Vamos compensar e economizar Vamos jogar. Eu deveria ter dito que era invisível no começo. Mas quando eu vou para outras coisas eu vou e quando vou até a chave, eu vou até a chave. Quando estou fechando, ele desaparece. Quando estou abrindo, aparece. Só aparece depois de alguma coisa. D. Agora vamos definir como padrão a visibilidade padrão invisível, vamos para a visibilidade e defini-la como oculta. E agora temos nosso. Fizemos muita coisa nesta lição. Vamos continuar na próxima. Pod by now, até lá. 87. Sistema de saúde do jogador e widget: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon RPG de ação Anteriormente, configuramos um pouco as configurações do nosso componente de renderização em D em nosso personagem. Então, fomos até nossa câmera e dissemos o que ela deveria ser renderizada e o que não deveria ser renderizada Nós, eu cliquei na câmera. Eu queria clicar na captura de seno do componente. Usamos as configurações avançadas da captura de seno para acessar nossas bandeiras gerais desmarcamos partículas BSP e medidas esqueléticas E, como dissemos, também podemos selecionar outras coisas se não quisermos elas apareçam em nossa captura de pecado em nossos mínimos Agora, também adicionamos sprite de papel para representar nosso personagem no mínimo Então, quando jogamos, podemos ver nossa direção, podemos ver para onde estamos olhando no mínimo. Então, sabemos para onde estamos olhando. De qualquer forma, prosseguimos e mudamos nossa regra em nossa geração de labirintos sobre criar cordões para o Em vez de usar metade do labirinto, usamos cerca de 75% do labirinto para verificar onde deveríamos colocar nosso índice de tesouro Para conseguir isso, dividimos a divisão já existente do último índice por dois novamente por dois e adicionamos isso à primeira divisão. Ah. Depois, adicionamos em nosso widget de jogabilidade uma caixa de texto que conterá o nome do item de Hobart em nosso inventário Para fazer isso, usamos, na verdade nossos eventos de passar o mouse e desaspirar em nossos botões e criamos uma função que ocupa o espaço do inventário com base no botão que está passando o E fizemos algumas: criamos uma cadeia de eventos basicamente pegando o inventário do modo de jogo, verificando seu comprimento se é, se é maior ou igual ao item mais um solicitado, porque lembre-se o comprimento começa em zero, que significa que não há item e um, vencedor, temos um item. E então adicionamos um no espaço do inventário porque, quando dizemos qual botão estamos usando, na verdade usamos zero para começar. Eu uso zero para começar. Então zero mais um significa um, e se tivermos um comprimento de um, estamos bem. Não, o que calculamos que eu fiz aqui. De qualquer forma, quando não temos um item, dizemos nenhum, o texto diz não e definimos sua visibilidade Quando temos um item, obtemos o nome do item e o configuramos como nossa dica de ferramenta Agora, vamos continuar criando o uso dos itens. Por exemplo, quando eu clico em um item, algo acontece. E com isso, seremos capazes de, na verdade, preencher algumas mecânicas de nosso personagem Por exemplo, vamos começar com a parte de saúde e, quando usamos uma porção de saúde, precisamos adicionar um pouco de saúde ao nosso personagem. Isso requer um sistema de saúde que possamos adicionar ou remover saúde. E uma visualização disso para o nosso jogador. Não, vamos começar com a parte visual. A forma como configuramos nosso sistema para a parte visual é por meio de um material que alteramos um parâmetro interno para preencher o material até seu valor máximo ou zero. Oh, vamos mostrar como fazemos isso. Vamos pegar uma imagem. Vamos trazê-la aqui. Vamos fazer com que seja o oposto do mínimo. Então, posição, vou colocar 50, 50 ou y vezes x 256. 256. Talvez eu diminua isso um pouco mais. Aqui, as âncoras também devem ser seguras, talvez um pouco mais baixas Talvez o torne um pouco menor também. Sim, é por isso. Certo? Não está se alinhando, mas é um problema. Nosso material, vamos usar o M U I HP. Este material permite abrir o material. Tem esse parâmetro HP, que vai de 1 a 0 e muda a aparência da nossa barra de saúde Então, esse é um valor que vamos manipular por meio de nosso projeto Para fazer isso, vamos voltar à nossa jogabilidade de Wood. Vamos tornar isso viável. Vamos chamar isso de barra P. Não, é uma imagem e vamos ao nosso gráfico e criaremos uma nova função. Vamos chamar essa data de HP. Deveria ser um E aqui. Agora, precisaremos de uma entrada, que será do tipo float porque temos o valor de zero a um, e vamos chamar isso de HP A próxima coisa que faremos é obter nossa saúde, basicamente, um elemento, e obteremos material dinâmico. Que é um nó que nos permite acessar e manipular dinamicamente o material do material de qualquer coisa que quisermos na O que vamos fazer é definir um parâmetro por valor e vamos conectar o valor aqui. Na verdade, isso é p por cento. Porque não é o valor real da HP. É um valor escalar de 0 a 1 e é uma porcentagem Não é como se você tivesse 300 HP, retornaríamos 300 HP 50. Como não estamos retornando as contas. Retornaremos diretamente a porcentagem. A parte importante aqui é o nome do parâmetro. Isso deve ser digitado exatamente como no material. Vamos ver o material, acho que é o valor da HP. Y. Para estar sempre seguro, podemos escolher o parâmetro e simplesmente copiá-lo e colá-lo aqui Opa, cópia. Copie e cole. O que eu colei foi, na verdade, codificado porque o controle não funcionava aqui Quando pressionei o controle C, ele não funcionou por algum motivo. Talvez eu tenha imprimido isso para frente. Segundos, fragmento de segundos. Meu teclado é um pouco pegajoso, mecânico antigo. Agora, onde atualizamos esse valor? Se você se lembra de quando fizemos a armadilha, vamos aos adereços. Vamos abrir a armadilha. Não está aqui? um corredor, deveriam ser inimigos Então, em nossa pasta inimigos, temos a armadilha BP. Agora, quando aplicamos dano ao nosso inimigo, usamos o nó de aplicar dano. Então, se formos até nosso personagem, dano do Tipo A. Existe um evento de algum dano. Então, isso é acionado quando aplicamos qualquer tipo de dano e os tipos de dano. Poderíamos criar classes e tudo mais, mas não vamos fazer isso. Davis, volte para nosso personagem e recebemos alguns danos. Vamos criar uma função para remover a saúde. Então eu vou chamá-lo de Saúde. R e vai precisar de duas entradas, aqui, entradas, O será um bulion que diz adicionar, quando são dois, estamos adicionando, e um flutuador que é dano. A próxima coisa que precisaremos é de duas variáveis. Eles serão do tipo flutuador, e um será a saúde atual e o outro será a saúde máxima Na saúde do MCs, forneceremos um valor padrão, e esse valor padrão seria Agora, vamos definir o valor atual da saúde de Max no início do jogo. Então, vamos começar nosso jogo depois de definirmos o valor absoluto, vamos definir o valor atual da saúde de Max. E então vamos conectar nossa função e remover a saúde de qualquer dano. E vamos inserir nossa função. A primeira coisa que devemos saber é se estamos adicionando ou abstraindo danos, porque os danos também podem ocorrer Cure, vamos fazer um sinal negativo ou positivo. valor negativo deve estar na parte inferior, porque vamos obter Maxel, então Maxel menos o dano e, em seguida, Max health plus e, em seguida O dano seria o calcanhar. Vamos fazer uma seleção. Vamos conectar nosso anúncio aqui. P A, estamos adicionando. Se não for P A, é o pico B, então estamos subtraindo Vamos aumentar esse valor. Mas eixo, braçadeira, flutuam. Porque queremos dizer max. não queremos que ele ultrapasse nossa saúde MAC Basicamente, não queremos que ele ultrapasse nossa saúde MAC ou abaixo de zero. Vamos obter nossa saúde MAX e conectá-la a Mx, e o valor mínimo seria zero Não devemos subtrair abaixo de zero. E vamos definir nossa saúde atual. Agora, a próxima coisa que devemos fazer é dividir nossa saúde atual pela saúde máxima. E isso nos daria isso nos daria uma porcentagem de nossa saúde. Agora, vamos começar nosso modo homossexual. Vamos obter a jogabilidade do nosso widget. A partir disso, diremos que a HP atualiza a HP. Vamos nos conectar este ano e vamos conectar nossa porcentagem aqui. Arquivo, vamos pressionar. Eles salvam e compilam, na verdade, tudo. Vamos. Vamos ver se funciona. Nós vamos cair em uma armadilha. S. Mas, no momento, não temos certeza qual parte dessas ações não está funcionando. Vamos começar com nossa armadilha. Vamos para nossa armadilha. O que queremos verificar se estamos aplicando danos. Vou começar a verificação a partir daqui. Vamos considerar que todo o resto é acionado corretamente e queremos ver se isso causa danos. Chegamos a este lugar, então estamos causando danos. Vou parar porque há um atraso e remover o ponto de interrupção daqui. Vou até nosso personagem de cima para baixo e aplicar um ponto de interrupção no caso de qualquer dano. Agora, vamos encontrar a armadilha. Os bonés não aparecem nos quartos. Isso é algo bom. R, aplicamos danos. Nós havíamos removido. Esse valor é nove. R: Sofremos um dano. 0.9 atualize o HP. B. Estamos atualizando a HP, definindo o valor para 0,9. Nós temos o correto porque colado. O que? Ok, não dá uma prévia porque estou jogando. Eu deveria diminuir nossa saúde. Remova o ponto. Isso funciona, e eu não vejo isso. O copo tem um som errado. Cup está tocando um som errado no ataque. Vá em frente ao ataque. Não estamos tocando o som aqui. Ok, estamos tocando o som aqui. Este é um som correto. Colheita E. Vamos voltar ao material. Estamos conectando isso, se for 0,9, deve ficar assim, se for 0,8, deve ser assim. Zero. Vamos testar se o valor padrão é zero. Ele é atualizado? Sim, tem. Mas depois, isso não acontece. Sempre indo para 0,9. Vá até nosso personagem. Você pode ver que também podemos depurar durante o tempo de execução Eu posso ir até o meu personagem, eu posso selecionar o personagem. Isso tem apenas um nó. Não o veremos facilmente, mas se eu o trouxer aqui, será visível. Na verdade, podemos ver isso durante o tempo de execução. Mas funciona, o que faz. Ele avança. Vou colocar um ponto de interrupção aqui. Vou ver o valor 0,9. Toda vez que o valor chega a 0,9. OK. Isso é algo que vou resolver na próxima vez. Eu vou deixar isso aqui. Adeus por enquanto. 88. Poção de saúde de usabilidade de itens de inventário: Olá, bem-vindo ao workshop de Design de Jogos sob o motor de cinco chamadas processuais de criação de Dungeon Action Pz Anteriormente, começamos a criar nosso sistema de saúde. Adicionamos nossa imagem em nosso widget de que estamos manipulando seu parâmetro escalar, valor da HP obtendo a instância dinâmica, que é o valor da HP aqui Vamos reduzir isso para um. E então continuamos criando em nosso personagem evento Any Damage e a função de adicionar e remover saúde, o que, na verdade, cometi um grande erro aqui. Estou subtraindo e adicionando um valor à saúde MAX em vez da saúde atual Toda vez que aplicamos 0,1 de dano, na verdade estamos reduzindo nossa saúde MÁXIMA, então é sempre 90%. Agora, vamos conectar a saúde atual em vez da saúde MAX. Se formos verificar, isso deve estar funcionando. Então aqui. Certo? Sim. Está funcionando. Perder saúde também é uma grande quantidade de saúde. E finalmente temos o som correto na armadilha. Mudamos o som da reprodução aqui, após o atraso, que é o momento em que isso danificará o personagem. Ele toca antes da parte do gatilho e depois da parte com o ataque do espigão Vamos continuar com nossa parte de saúde. Para fazer isso, precisamos voltar ao nosso widgit de jogabilidade. E vamos precisar de nossos botões. Vamos selecionar o botão um. Na verdade, vamos fazer isso a partir do gráfico. Não precisamos apertar os botões agora. Sabemos que eles existem aqui. Então, vamos para o botão um e vamos pressionar Vamos fazer quando clicado E então o botão dois é clicado e o botão três clicado e o botão quatro t. Bem, nós temos isso para eventos A próxima coisa que precisamos fazer é criar uma função que chamaremos de use, e ela terá uma entrada do tipo inteiro Vamos chamar isso de trama. Então, vamos voltar ao seu gráfico de Ben. Em nossos botões, vamos usar essa função de uso. Vamos usar essa função de uso e conectar tudo, começando por 0-1, dois e três No momento, quando pressionamos nossos botões, eles executam essa função usando um, dois, três 0-3 Agora, vamos inserir a função. E precisaremos do nosso inventário. Portanto, armazenamos ao passar o mouse, não armazenamos, mas usamos esse código aqui para obter nosso inventário Então, vou copiar e colar isso em uso e vou converter para conversão pura novamente, e vou converter para conversão porque quando você copia e cola, as versões puras voltam ao normal Agora temos acesso ao nosso inventário e vamos pegar nossas chaves. E vamos promovê-los para nossa variável local. Vamos chamar essas chaves. E vamos obter nossos valores. E vamos promover isso para uma variável. Além disso, colete valores. Agora temos acesso aos nossos itens e aos nossos valores. Agora, o que vamos fazer é usar esse índice de itens para obter nossas chaves. Nós vamos conseguir. E vamos usar o índice I, s. Vamos obter nosso slot, não o índice de itens. Espaço de inventário, basicamente, e vamos trocar Com base nesse nome, temos que definir os nomes em nossas suítes. Vou entrar em detalhes, vamos remover o pino padrão, e acho que os itens que temos para usar são dois por porção, o por tempo e eu cinco por destruição. B Esse material foi compilado e salvo? Vamos verificar nossos itens por um segundo Lembro-me de que o I era para a saúde. Aí estão os itens. Aqui está. Os itens. Poções de saúde, poção para animais de estimação, poção era quatro e cinco OK. Mas o número um que estamos fazendo agora, que é o número dois, na verdade, são as poções. Vamos voltar para nossa Pam p. E quando é uma poção, precisamos verificar se nosso jogador está cheio de saúde ou Porque se o jogador estiver cheio de saúde, não deveríamos adicionar mais saúde. Mas mesmo que o façamos, devemos ter a opção de diferenciar se estamos adicionando ou não Bem, vamos colocar um galho. Vamos colocar o jogador. Isso nos dá diretamente o controle que somos e que nosso controlador está controlando. Vamos fazer com que o personagem, que na verdade é a classe do nosso lago, obtenha as variáveis que queremos Vamos conectar isso aqui, aqui, e vamos verificar se nossa saúde atual é igual à nossa saúde máxima , não definida Se forem iguais, não devemos fazer nada porque o personagem tem saúde total Se não forem iguais, devemos adicionar saúde e pressionar o anúncio. E agora vamos dar um valor às nossas poções. Digamos que eles se curam até ficarem saudáveis. Se quisermos beber poções enquanto estamos saudáveis, basta conectar isso aqui Ou se quisermos ter certeza de que faltam duas vidas, para usar uma poção, podemos criar mais regras aqui Para nós, manteremos exatamente essa regra, e a próxima coisa que faremos é obter nossos valores, que são quantas poções temos em nosso inventário Por aqui, e eu vou pegar nossos valores. Vou pegar nosso lote porque este é um espaço de inventário. E vamos fazer menos um, que é a poção que acabamos de usar Agora vamos verificar se isso é menor ou igual a zero e usar uma ramificação. Se não for menor que zero , obteremos nosso inventário novamente. Nós realmente promovemos isso como variável, mas isso realmente não importa. Converta para puro elenco novamente, comente. Elenco. Se não for zero, significa que ainda temos porções, vamos adicionar nosso item de slot. E o menos um dos nossos valores. Mas isso será subtraído por um. Sei que pode ser confuso o fato de estarmos adicionando, mas adicionar apenas atualiza o valor que já existe Agora, vamos atualizar o inventário do nosso inventário, que você vai usar. Inventário. Não importa que usemos a mesma variável que estamos chamando porque esses nós são duas coisas diferentes. Mas isso na verdade significa que ele também lançará gelo. Portanto, promover essa variável tornaria um pouco mais ideal. Talvez, em construção, estejamos promovendo essa variável e mantendo-a para que não a chamemos sempre. Mas, no momento, é um impacto mínimo em nosso jogo. Ah, a próxima coisa que precisamos fazer é atualizar nossa dica de ferramenta O que não é chamado de dica de ferramenta de atualização, é chamado de dica de ferramenta Tentaremos configurá-lo como visível e o slot em nosso slot. O motivo pelo qual isso funcionará é que, se entrarmos, verificaremos se esse item existe. Se o tivermos em nosso inventário. Se não o tivermos em nosso inventário , não enviaremos nenhum. Vamos voltar a usar Agora, o que acontece quando estamos em zero? Oh, o que acontece quando estamos em zero, precisamos remover do inventário. Oh, eu vou pegar nosso inventário novamente. Novamente, não importa que eu copie e cole esse código porque, mesmo que eu o arraste, ele o faria novamente. Agora eu vou me mudar. E para nossa remoção, vamos colocar nossas chaves no slot. Vamos colocar nossas chaves no slot. E então vamos apenas atualizar o inventário. Não, vamos testar isso. Vamos para o nosso modo de jogo, vamos selecionar nosso inventário e adicionar algumas porções, que são I dois, e vamos adicionar duas poções Vamos nos machucar. A poção está funcionando aqui, então eu. Nada está acontecendo, e vamos encontrar uma armadilha Eu vou usar um. Mas idiota, se machuque novamente. Muito pequeno, 90% realmente não aparece e 80% mostra demais. De qualquer forma, vamos usar a poção e ela desaparecerá. Um problema, o puxão aqui que temos, as duas porções, não apareceu Então, vamos dar uma olhada neste. Vamos ao nosso jogo. Vamos até o gráfico de Ben e não passar o mouse sobre o inventário de atualização, na verdade Podemos ir diretamente da função, d inventory, e queremos que, quando eu a defino como oculta, ela esteja visível. Mas agora, temos as duas poções. Nada acontece, colocando em um, um à esquerda, à esquerda. Por que aquele era tão grande? Acho que o tornamos um pouco grande demais. É um pouco compensado. Então, vamos corrigir esses dois. De certa forma, você está se perguntando como eu fiz essa coisa de tela cheia. Eu pressionei F 11. E se você pressionar a tecla Shift N F 11, ela ficará totalmente em tela cheia. Ele cobre até mesmo a barra do Windows que você não pode ver aqui. Mas sim, o Shift F 11 cobre isso completamente. O F 11 apenas fica em tela cheia sem a barra do Windows. De qualquer forma, vamos corrigir o problema visual. Sim, não parece bom. A razão para isso desaparece devido às regras de renderização. Então, isso iria um pouco para a esquerda. Eu acho que é isso. Sim. Então, vou trapacear e usar a transformação de renderização de tradução Não é um uso muito ideal, mas faremos por enquanto menos três Então, aqui. E vamos colar aqui. Você pode ver quando eu clico, porque é o mesmo tipo de elemento. Mesmo se eu clicar no botão também porque eles têm os mesmos tipos de elementos. Eu fiquei no fundo. Ele não redefine isso, o que é um recurso muito bom. Digamos que menos aqui também. Acho que agora eu queria dizer que eles parecem melhores, mas a maior parte. Sim, porque o tipo de lugar está em negrito. Então, vamos mudar isso para não . Eu não gosto do normal. Sim, o normal é melhor. Vamos usar. Podemos acabar menos otimizando o visual e tudo mais. Está tudo bem. Está tudo bem, está bem. Bem, eu acho que é isso para este. Eu vou te ver em seguida. Adeus 89. Barra de tempo de jogo e poção de tempo: Olá, bem-vindo ao workshop de design de jogos, real Engine five, processual Dungeon, RPG de ação e RPG de ação Na lição anterior, começamos com nossa mecânica de uso. Em nossa jogabilidade b, usamos o evento on click quatro botões e criamos uma função de uso, qual usamos a entrada de um número inteiro para determinar qual botão, basicamente qual slot do inventário estamos pressionando Dentro dessa função, obtivemos nosso inventário, que, do nosso modo de jogo, armazenamos as chaves e os valores em variáveis locais separadas. Depois disso, com base em nosso slot, obtemos de nossas chaves o nome da chave, que é nosso próprio nome, e estamos trocando com base nesses itens que temos. Eu dois, eu três, eu quatro e eu cinco. Em dois está a poção de saúde. Então, verificamos se nosso jogador está cheio de saúde. Porque se nosso jogador estiver cheio de saúde, não devemos beber a poção. E se a saúde não estiver cheia, usamos a função de remoção de saúde, para adicionar dois HP ao nosso jogador. Em seguida, verificamos os valores do slot atual, que são as poções de saúde, para ver se menos um está fazendo zero ou menor que Na verdade, menos de zero nunca deve ser acionado. E se tivermos poções basicamente, é isso que estamos verificando aqui Se tivermos poções ou se as poções estiverem ficando zero quando estamos usando, atualizamos nosso inventário adequadamente removendo ou adicionando a mesma chave ao E então atualizamos nosso inventário e também atualizamos a dica de foco Caso se torne zero, então diz que não. Agora, a ordem nos diz que devemos fazer a poção de velocidade agora, mas eu não quero começar com a mecânica dos personagens exatamente agora Então, já que estamos no widget de jogabilidade, vamos criar a poção do tempo, que praticamente é apenas duas variáveis Vamos fazer uma variável de flutuação. Vamos ligar para esse pai. Vamos duplicá-lo e chamá-lo de Max. O que vamos fazer é adicionar um valor ao tempo atual. Digamos que nossa poção única nos dê 60 segundos porque sairemos em segundos, e é para isso que devemos definir nossa hora atual Mas vamos apenas fixar , fixar o eixo. Desculpe, aperte o flutuador. Vamos conectar isso aqui, e nosso agrupamento seria nosso tempo máximo. E vamos dar o tempo máximo no valor padrão. Precisamos compilar para isso. E isso seria, digamos, 220. Digamos que seja 220 e estamos adicionando um minuto a cada vez. Estamos bebendo uma poção do tempo. E vamos conectar isso a cinco. Agora, a próxima coisa que deveria acontecer já está feita. Vamos conectar isso à ramificação aqui, e ela verificará se o slot de valor atual tem o suficiente e removerá ou adicionará se estiver sable, o que não é sable Acho que as poções do tempo são usadas uma vez. Se tudo for usado uma vez, exceto as poções e a poção de velocidade Então, vamos criar o indicador para a época, como precisávamos na interface do usuário. Vamos até p. Vamos usar a mesma técnica do material da barra de saúde. Então, vamos usar uma imagem. Vamos colocar a âncora no meio e no topo. Vamos definir a posição x -300, posição y 50 tamanho x 600, ou seja, y 60. E eu acho que é uma boa barra de tempo. Agora, para a aparição. Vamos escovar e vamos usar o mer. Material de instância. Agora temos nossa barra de tempo. Vamos programá-lo para fazer alguma coisa porque tê-lo não significa que ele faça alguma coisa. Então, vamos para o nosso gráfico. Vamos ver nosso gráfico de eventos. Vamos até a construção do evento, que é como começar a jogar ou criar plantas E agora vamos usar a. como hora por evento. Para quem é novo, o que é um cronômetro, é basicamente um nó usado para criar um evento cronometrado que acionará ação após uma duração específica, que, se clicarmos em Lupin, também pode ser configurada para se repetir em E da forma como o estamos usando, estamos criando um evento personalizado e vinculando esse evento por meio do delegado aqui ao nosso tempo Como seriam algumas informações extras que realmente não importam quantas vezes você as tem e onde as tem. Importa quantas ações eles realizam porque, por trás do código, eles são considerados um cronômetro único, como se houvesse uma escolha geral por trás de tudo que se acumula, explicado de forma aproximada, não exatamente assim, mas digamos que ele acumule as ações do Agora, em nossa teoria, vamos colocar alguns valores. Então, nosso cronômetro vai ficar rodando. Vai ser repetido a cada 1 segundo. Isso significa que o primeiro stick funcionará 1 segundo após o início do jogo. Então, vamos definir nosso horário atual. A cada 1 segundo, duas horas atuais menos uma. E então vamos perguntar se esse tempo é igual a zero. Na verdade, igual ou menor que zero. Menor ou igual. Peça material fotográfico aqui quando eu quiser uma nota rápida. Se for menor que zero, basicamente terminaremos o jogo do nosso jogador. O que não chamamos assim, faremos isso mais tarde. Agora, só mais uma informação. Não vamos fazer uma pausa ou vou colocar esse cronômetro, mas para fazer isso com cronômetros, temos um sistema chamado Handles, Ter Se eu promover essa variável, e vamos chamar isso de Timer ble e I Now, se eu chamar esse identificador em qualquer lugar, se eu tivesse acesso a ele, posso pausar ou e perguntar também se o cronômetro está É assim que estamos fazendo isso. E também há um item claro e inválido. Há mais algumas opções. Eu só queria adicionar isso. Eu não vou usar essa variável. Eu vou deletá-lo. Agora temos um cronômetro que faz a contagem regressiva e, quando estamos usando nosso item, aumentamos nosso Agora, ele não será atualizado instantaneamente, mas será atualizado basicamente instantaneamente, porque a cada segundo, cada segundo, ele é atualizado e o atualiza. Vamos voltar ao nosso cronômetro. Vamos precisar de uma função. E a função será muito simulada e será muito semelhante à qual queremos atualizar a HP. Vou duplicar isso. Todas essas atualizações. E em vez da barra, vou usar o. Há um bar. Não é uma variável. Vamos ao designer. Vamos selecioná-lo. Vamos fazer disso uma variável. Vamos trazê-lo aqui. Mas isso nos dá uma porcentagem de quando estamos fazendo os cálculos de saúde. Mas precisamos fazer os cálculos aqui por enquanto. Precisamos trazer a hora atual, vou precisar de x hora. Vamos dividir esses dois. Nós obtemos a porcentagem e vamos conectar isso aqui. Vamos deletar isso. E por algum motivo, tenho certeza de que esse valor seria o mesmo. Mas vamos verificar. Vamos verificar. Abrimos a instância. Então, sim, esse valor é o valor P. Então essa é nossa variável de parâmetro. Se abrirmos o material principal, podemos ver que esse é o parâmetro que estamos preenchendo e seu valor P. Então, estamos preenchendo o P do cronômetro. Não, eles querem culpar os outros por convenções de nomes, para ser honesto De qualquer forma, não precisamos mais dessa entrada porque estamos atualizando aqui. E vamos usar essa função antes de nossa ramificação. Vamos definir esse cronômetro de atualização. Agora, se quiséssemos ser realmente precisos, poderíamos copiar isso para nosso uso quando definíssemos a hora atual e ele seria atualizado instantaneamente. Não é complicado, mas acho que também não importaria Estamos usando a poção, como seria o próximo bastão. Fora. Vamos trapacear para testar nossa poção Vamos adicionar um novo item ao inventário. Vamos chamar isso de I five. Acho que cinco, e vai ser um. E eu vou compilar e jogar. Vamos salvar tudo antes de eu apertar play. Não importaríamos isso. Nós não falharíamos nisso. Não fizemos nenhum código. Ah, e ainda não está funcionando. Ah, porque não definimos a hora atual para nada. Então, eu realmente uso isso. Sim. Podemos ver que está funcionando. Mas precisamos definir a hora atual para o tempo máximo na construção. Ou outra coisa que podemos fazer, mas temos que alterá-la toda vez que nosso tempo máximo é 2:20. Podemos definir a hora atual para 220. Apenas usamos o tempo máximo definido até a hora atual e começamos a jogar ou construir, para que não precisemos alterar os dois valores todas as vezes. De qualquer forma, vamos deixar as coisas mais fáceis. Eu acho que é isso para este. Eu vou te ver na próxima. Adeus. 90. Poção de velocidade e efeitos de granulação: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon RPG de ação Anteriormente, adicionamos nosso cronômetro à nossa janela de exibição. Adicionamos a barra do cronômetro e adicionamos o evento Construct, que é o início do jogo dos Blueprints, definido por evento, que é um evento que acontece a cada determinado período de tempo E criamos um evento personalizado que fizemos para organizar. E usamos esse evento personalizado para definir a hora atual de -1 segundo. Em seguida, atualizamos nossa barra por meio do valor do parâmetro escalar, que é o valor de HP, e obtivemos a porcentagem de nosso tempo atual em nosso tempo máximo Em seguida, prosseguimos com nosso evento de uso Para concluir, agimos ao contrário Criamos o evento use primeiro, mas, de qualquer forma, continuamos a fazer o evento use. Quando usamos o item I five, que é uma parte do cronômetro, adicionamos 60 ao nosso tempo atual, 60 segundos Sim, basicamente 60 segundos. Estamos apertando nosso tempo máximo e, em seguida, atualizando nossos cronômetros, então essa é uma atualização instantânea e não espera nem um segundo. E então usamos o código que temos para as partes. Além disso. É um código comum. Para toda essa ação, haverá um código comum para verificar se temos outras partes no inventário e se não precisamos removê-las do nosso inventário e atualizar a dica de ferramenta de passar o mouse Agora, vamos fazer a parte da velocidade. Eu três. Não. Eu gosto de arrastar isso. O clique errado é incrível. Agora, para fazer isso, vamos até nosso personagem e vamos até nossas partículas. Bem, na verdade, configura uma partícula. Eu já me preparei para isso. Vamos precisar da porta principal P Revenant Frosting. Se isso faz algum sentido, essa é a partícula que precisamos Vamos selecioná-lo e, seguida, pressionar adicionar e eleger o sistema de partículas em cascata, e ele será adicionado ao nosso personagem Agora vamos torná-lo um pouco maior. Vamos configurá-lo para dois. E tudo bem. E vamos abrir nossa partícula. Faça algumas mudanças. Eu vou trazer a partícula aqui. O que queremos é esse MC carbonizado e vamos mudar a vida útil de um, 2,5 Eu vou te dizer em um segundo o porquê. E, basicamente, é quanto tempo dura a partícula desta parte da partícula, se a fecharmos, podemos ver que são as chamas reais Essa coisa. E também não vamos mudar o tamanho por vida. Sim, o tamanho por vida, vamos desativá-lo. É um tamanho único o tempo todo. contrário, se não o fizermos, deixe-me desclicar aqui Talvez prefiramos que seja assim, mas na verdade eu não. Parece que somos movidos a gás. Não queremos ser movidos a gás. Queremos ser corretores de apostas. Não sei, algo diferente. Então, não vamos excluí-lo, mas desativá-lo, pressionando este x aqui para desativá-lo, e agora é mais como uma aura, mais como uma trilha real que estamos vivendo Quando estamos estáticos, isso também mostra que temos isso ativado. Isso seria do lado da partícula. Vamos programar isso. Na verdade, mais uma configuração para o artigo. Vamos voltar para a partícula. Não queremos que ele seja ativado automaticamente. Então, vou avaliar a ativação e vou desativar a ativação automática. Queremos ativar isso. Não queremos que seja um estado constante. Vou compilar e salvar, e vamos voltar à nossa jogabilidade Não é nossa jogabilidade. Erro meu de novo, precisamos continuar com o personagem. Vamos ao gráfico de eventos e vamos criar eventos personalizados em algum lugar. Vou fazer um evento personalizado aqui. E vamos chamá-lo, eu não sei. DP. PD é um bom nome. Então, vamos pegar nossa porta principal P Revenant Frosting e ativá-la Também precisamos, na verdade, não precisamos ficar ativos. Nós só precisamos. Isso é apenas um nó de ativação. Não precisamos definir como ativo e também vamos redefini-lo Agora, vamos fazer também sua visibilidade, iden, e vamos ativá-la caso a visibilidade esteja aqui. Caso não termine e não comece corretamente, não comece abruptamente Parece melhor. Por exemplo, o que quero dizer são detalhes técnicos. Vamos pintar novamente. O que quero dizer é que, se tivermos nosso caráter e nosso efeito terminar aqui. Caso a ativação não comece a partir daqui. Para uma moldura, vemos isso. Não queremos ver isso imediatamente, queríamos ver a expansão pouco a pouco. É por isso que brincamos com a visibilidade, reinicializando-a e depois ligando-a Então, o que precisamos fazer é usar o movimento do nosso personagem O que é o componente de movimento do personagem? É específico para plantas de personagens. Por exemplo, esse projeto me deixou visível. Vamos para as configurações da aula. E veja, a classe principal é personagem, que quando estamos criando plantas, se eu for criar uma planta aqui, ela me pergunta: é um ator É um alfinete? É um personagem? Agora, personagens e um abaixo do lago, não estão nessa lista hierárquica, porque os personagens são lagos, mas os lagos não são todos Alguns dos lagos podem ser personagens. É como o diagrama de van, que significa que basicamente o personagem herda do lago, Pond não herda do E a coisa especial do personagem é esse componente de movimento do personagem, que serve basicamente para lidar com lógica de movimento de três personagens D. Pode ser usado por dois dias, mas vai ser meio difícil, pode precisar de alguns plugues. De qualquer forma. Então, isso, que é responsável pelo movimento do nosso personagem, tem várias configurações, uma quantidade infinita de configurações, se você quiser. Realmente. De qualquer forma, o que queremos de todas essas configurações é nossa velocidade máxima de caminhada. Então, por padrão, temos 600, e acho que é uma boa velocidade. Mas quando somos rápidos, vamos configurá-lo para algo maior Então, vamos definir a caminhada máxima. Velocidade. Digamos que até 900. Então, o que vamos fazer geralmente é colocar um atraso. Por exemplo, poderíamos colocar um atraso e, depois de, digamos, 14 segundos, redefinimos a velocidade máxima de movimento para 600 de volta à nossa velocidade original e definimos a visibilidade da partícula, duas Também poderíamos definir como desativar ou usar o outro nó que não usamos, definir act como negativo e depois redefini-lo, por exemplo. Mas também não poderíamos fazer nada, mas essa partícula manteria recursos, muito poucos Também depende da partícula. Então, vamos desativar. Só para economizar alguns recursos. Agora, esse atraso aqui funcionaria como um portão. Como se estivéssemos passando por isso, estamos definindo 900. Se o atraso estiver em execução, ele não avançará até que o atraso termine e poderá ser executado novamente. Mas se usarmos um atraso reajustável, reduza para 14. Isso significa que sempre que bebemos uma poção, o atraso reativa a contagem regressiva. Então, vamos fazer isso. Então, basicamente, se continuarmos encontrando poções definidas, continuaremos reativando essa contagem regressiva de Não adicionaremos tempo extra, apenas reativaremos os 40 segundos Agora, vamos chamar esse evento do nosso uso. Ou aqui. Vamos reduzir dois jogadores de BP do elenco, vamos ficar rápidos e vamos conectar o Speedy aqui ao Vamos compilar e salvar, e vamos trapacear Vamos para o nosso modo de jogo e trocar um item do inventário. Vamos definir esses dois I três, e I três tem dois usos por padrão. Vamos jogar. E estou me movendo normalmente. Estou abrindo inventário, gelo, garrafa azul, estou usando uma e tenho Speedy 13 segundos, 14 segundos. Na verdade, vamos reativar. Estou usando novamente e agora deve ser por alguns segundos. O que é o elevador? Ah, ratos. Logo aqui, elevador aqui. Masmorra de labirinto de ratos. Ah. Isso é tudo para este. Eu vou cantar para você na próxima. Adeus. 91. Poção de raiva e efeitos de granulação: Olá, bem-vindo ao Game Design Workshop er real engine five procedural Dungeon action Bz Anteriormente, adicionamos nosso evento rápido ao nosso personagem. Um evento que faz nosso personagem se mover mais rápido. Para fazer isso, adicionamos uma partícula ao nosso componente de classe de personagem, que é a porta Revenant Frost E mudamos algumas coisas na partícula, mudamos a vida útil e desativamos o tamanho Então, faz mais sentido que esteja se movendo conosco, deixando um rastro. Depois, seguimos em frente e criamos uma cadeia de eventos, ativamos a partícula, porque a configuramos para não ser ativada automaticamente nos detalhes Em seguida, definimos a visibilidade como verdadeira assim como a definimos como falsa, porque não queremos que seja , não queremos ver um quadro que seja da ativação anterior, como se não estivesse ativado, no último estado da partícula, por exemplo Agora, mudamos a velocidade de movimento do nosso personagem para 900, e depois com um atraso retrátil, o que significa que podemos beber outra poção e reiniciar o Reduzimos a velocidade após o atraso para 600, que ajustou a visibilidade para. Deveria ser falso, minha culpa, e desativamos a partícula Depois, acessamos nosso widget de jogabilidade e chamamos o evento Speedy por meio de nossa referência de personagem e conectamos a função às demais Do código que gerencia o anúncio e remove do inventário e atualiza nossos widgets Agora, uma coisa que notei é que nosso Speedy, mesmo que tenha duas cargas, mas não é tão numeroso E com base em nosso código , não funcionaria. Por exemplo, se o colocarmos em estoque, poderemos escolher mais poções e colocá-las sem parar E se, na verdade, o que precisamos fazer é criar um código personalizado para dizer que, se for o item I três, mostrar os estoques, que não faremos , deixaremos assim. Ou, se você quiser, também podemos usar nossa poção de velocidade em nossos itens Dt e definir a quantidade como um, e pronto Está consertado. Não precisamos ver um número. E agora vamos fazer o I four, que é a poção, que destruirá tudo Bem, isso realmente danificará, mas o dano será tão grande que destruirá tudo ao nosso redor E por tudo, não me refiro ao mapa. Não temos um mapa negativo. Quero dizer matar todos os inimigos e as torres, que chamamos de Portão do Inferno Para fazer isso, precisamos de outra partícula. Vamos escolher o mapa dessa bela explosão e trazê-lo aqui. Temos uma bela explosão. É basicamente para outra escala, mas aumentaremos seu tamanho e funcionará bem para nossos propósitos. Então, vamos até nosso personagem. E enquanto estamos sendo selecionados, vamos adicionar cascata Operações. O que está acontecendo? Sim, você não deve digitar anúncio sobre anúncio. Simplesmente não funciona e vamos ativar automaticamente. Na verdade, vamos deixar a ativação automática. Nós calculamos o tamanho e um grande. Vamos mudar sua escala para três. Queremos que isso afete uma grande área. Na verdade, vamos usar um teste chave para isso. Então, o que faremos é criar outro evento personalizado. Toda essa variedade. E pegue nosso artigo ou este, um , e diga ativar E definir que está definido como verdadeiro. Agora, o que vamos fazer é acessar um controlador, clicar com o botão direito do mouse e usar, digamos, o teclado básico. Barra base, aqui estamos. Vamos pegar nossa referência de personagem. Nós não temos nenhum. Não importa, vá para casa. O personagem ou o personagem dw se convertem em puro elenco ou raiva. E vamos compilar e jogar. E queremos que nossa partícula tenha k do tamanho de um ladrilho. Mas se eu estiver pressionando espaço. Sim, isso parece mais d. Esse parece do tamanho que queremos. Agora, para o alcance, para a área de dano, exemplo, vamos causar danos. Vamos usar uma esfera de colisão. Então, um medo de colisão. Colisão de esferas. Não. Eu vou colocar o jogo escondido em Falls. E então eu vou aumentar o raio para, digamos, 400 Sim, 400 parece que w. 500 parece melhor. Mas podemos verificar, pois ocultamos a visibilidade. Um 500 é um pouco demais. Então, vamos mudar para 400. Vamos jogar novamente. Sim, acho que visualmente, estamos nesse limite No entanto, não importa a distância do círculo, mas da lesão, vamos causar o mesmo dano em todos os lugares Então, isso parece bom. Mas não vamos deixar as coisas assim. Não vamos usá-lo como está. Sabemos que o raio de velocidade é 400. O que vamos fazer é mudar de 0 a 400. Na verdade, também podemos aumentar a distância de onde nos aquecemos. Não faremos esse código, mas isso pode ser feito facilmente. Quando temos uma esfera que está aumentando de tamanho. Agora, vamos definir sua colisão. Para ignorar algumas coisas. Vamos fazer isso de forma personalizada. Vamos ignorar a visibilidade, a câmera, a estática mundial, não a dinâmica mundial. Corpo físico, na verdade, vamos deixar o corpo físico também ligado e destrutivo Na verdade, vamos fechar também a dinâmica mundial. Qual é o nosso portão do inferno? Deixe-me me lembrar. Vamos até Blueprints. Vamos usar adereços para os inimigos. Vamos até o Portão do Inferno e selecionaremos sua própria cápsula. É uma colisão de damas. Vamos acessar as predefinições de colisão. É uma dinâmica mundial. Portanto, não queremos ignorar a dinâmica mundial. Então, vamos deixá-lo sobreposto. No corpo físico, vamos fazer as caixas se moverem com nossa porção de raiva A única coisa que precisamos mudar agora é de consulta para uma colisão. Vamos começar sem colisão. E quando estamos prestes a expandi-la, dissemos que era uma colisão Digamos raio para, digamos, um, não zero. Vamos colocá-lo em um. E agora, vamos voltar ao nosso código e adicionar uma linha do tempo. Não é um cronograma. Desculpe. Primeiro, precisamos ativar a colisão. Agora vamos pegar a esfera. Vamos continuar assim para obter a colisão de poções. E colisão ativada. E opte por variar apenas na física. Na, queremos física, porque decidimos colocar os itens de física em, e agora precisamos de um cronograma Então, cronograma. Vamos entrar. Vamos criar uma trilha de fluxo de 0,31 e zero, zero Claro, que usamos o último quadro-chave. O próximo passo seria acessar o gráfico de eventos, atualizar. Vamos pegar nossa colisão esférica, pote de taxas e o raio da esfera A está conectado para atualizar. Vamos aprender a partir de 12400 com o Alpha do nosso novo caminhão. Agora, quando terminarmos, obteremos aquela colisão novamente, basicamente aqueles dois não colidiram E vamos definir o raio da esfera também. 21. Agora, o que acontece quando nossa colisão de poção de raiva colide Vamos começar de novo, do nosso pote de raiva Vamos abrir um pouco de espaço. Tenha isso aqui. Faça um comentário sobre isso. Vamos enfurecer a maconha. Vamos colocar um comentário neste colli. E é isso por enquanto. Ah. Vamos selecionar nosso outro competidor e perguntar na verdade, não é o outro competidor, é o outro ator Porque agora vamos verificar a IA. Portanto, temos certeza de que a IA só tem a colisão de seu corpo e nada mais. Bem, o componente da cápsula. Então, vamos verificar se há um rebocador. Se o ator for puxado, vamos nos ramificar, fazer o if, e então vamos pegar nosso ator e aplicar dano E danos, vamos aplicar, digamos dez. Não usaremos os outros nós, e isso seria nossa colisão de poções, colisão de poções Agora, vamos chamar esse evento em nossa função de uso. Ou em quatro. Vamos chamar do nosso caractere de cima para baixo, a função H depende, na verdade, não da função, e então conectá-la aqui. Vamos criar uma trapaça em quatro de um. Vamos até nosso controlador e deletemos nosso demag. Para ser honesto, vamos até nosso portão do inferno e vamos até padrão do nosso ator no rebocador do portão do inferno, e vamos adicionar o rebocador e vamos Mas não temos um sistema de saúde em nossa torre. Devemos fazer isso na próxima vez. Vamos testar nossa porção. Uma poção de missão. Ela explode , desaparece e está tudo certo Isso está cheio. Isso é tudo para este. Eu vou te ver na próxima. Adeus 92. Música de combate e modo de combate Hellgate: Olá, bem-vindo ao workshop de design e ao verdadeiro Engine five, processual Dungeon, RPG de ação Anteriormente, adicionamos a funcionalidade de poção de raiva. Adicionamos a colisão de raiva ao nosso personagem, que é uma esfera que aumentará de tamanho com uma linha Adicionamos a marca remanescente e parte que aumentamos também em tamanho é a ativação do toto Sim, não deveria ser ativado automaticamente, compilado, e então concluímos a função, o evento, raiva, que ativa nossa partícula, diz que a colisão ativa na poção de raiva, usa uma linha do tempo para aumentar o tamanho da esfera e depois a desligamos novamente . Então, na colisão da esfera, quando ela colide com alguma, usamos uma etiqueta E para inimigo Se o outro ator de tag tiver a etiqueta E, nós nos ramificamos e aplicamos dano Depois, entramos em nossa jogabilidade, chamamos esse evento quando quatro itens quatro são usados e o conectamos à nossa função, à nossa cadeia de eventos, mas removemos a poção do inventário Agora, depois, fomos até nosso portão principal e colocamos a etiqueta E. Mas decidimos que não podemos usar, não podemos testar o portão do inferno ainda porque ele não tem código. Então, vamos começar a preencher um código no portão principal. Mas antes de fazermos isso, vamos explicar novamente o que temos aqui, o que criamos. Então, temos duas bagunças estáticas que representam a parte visual da porta principal e também uma partícula que também representa a parte visual E uma luz pontual para deixar tudo isso um pouco mais brilhante Poderíamos alterar algumas configurações na luz pontual, vamos enviá-la para Lumens. Digamos isso para 150. Digamos isso com uma cor avermelhada. Digamos isso com uma missiva avermelhada. Ele faz 1011. Vamos ver como fica. Uma grande mudança. B. O alcance da enorme variedade. Alcance 600. Oh, eu não mudei a cor. O que aconteceu aqui? Oh, o que eu sou? Estou sentado em uma enorme luz. Sim, isso não está acontecendo agora. Você pode deletar essa parte? Mudar uma missiva para luz me faz parecer que não sou muito. Sim, vamos reduzir sua atenuação para excem, e vamos reduzir a luz para alguma 0,1 verde e 0,1 azul. Teste. I. Há um brilho mais avermelhado nas paredes também. Quando vejo na terra, talvez pareça melhor. Novamente, nós temos isso. Poderia ser um pouco mais intenso, mas acho que está tudo bem. Agora, vamos voltar para o portão do inferno. Vamos selecionar. Mas antes de começarmos a programar, vamos nos lembrar do que construímos aqui Temos uma malha estática com uma malha estática quando criança e um sistema de partículas Essa é a nossa parte visual. O que representa é a parte visual do portão do inferno. Então, temos um ponto de luz que devemos alterar livremente suas opções, digamos que um raio geracional Digamos isso para nós e 150, e vamos mudar a cor clara para avermelhada escura Com um na parede, então, por favor. 05, certo. E acho que isso seria para a luz. E então temos uma cápsula. A luz, temos que deixá-la um pouco brilhante durante o período A cápsula é onde está nossa caixa de calor, mas podemos bater com o player porque enviamos essas duas mensagens de não colisão E a cápsula tem todas as colisões porque é uma cápsula, e então testamos Podemos otimizar o bit, mas isso não acontece. Então, temos uma colisão esférica, mas ainda não aumentamos seu tamanho O que essa colisão fará é detectar se o jogador está ao alcance de atirar ou Vamos otimizar sua saída de colisão. Vamos definir que não importa porque estamos sobrepostos Vamos configurá-lo como personalizado e ignorar tudo, exceto a página inicial. Agora, também, vamos definir essas duas malhas estáticas para não projetar sombras Não queremos que eles projetem sombras. E começamos a jogar para que nosso movimento rotativo seja atualizado nos conjuntos estáticos, para que eles girem. Agora, se compilarmos e salvarmos, vamos começar com nossa colisão A primeira coisa que precisamos fazer é calcular o raio da esfera. Vamos definir que o jogo oculto não é verdade. Vamos compilar. Vamos definir o raio padrão para, digamos, 100. Quão grande isso é. Além disso, em nosso jogador, devemos ir até nossa colisão de potes de raiva, que o jogo oculto seja verdadeiro porque eu não o virei Nós o desligamos para o tamanho, mas não o ligamos para escondê-lo novamente. Oh, eu vou compilar e salvar o personagem. Vamos jogar. 700 parece um pouco excessivo. Não nos pega quando desovamos, mas se nos movermos, ele começará Bem, isso pode começar porque a visibilidade será um problema, mas começará a nos atacar Bem, digamos que seja um pouco menor. Queremos um azulejo e, portanto, 600 talvez. Azulejo mais um pouco de um ladrilho. Quase 550, acho que será a chave. Então, 550 jogadas ect. Isso parece bom. Mas não vai nos atacar com isso. É um belo anel. Vamos deixar isso aí. Volte. E vamos fazer algo com essa colisão. Vamos escolher a sobreposição inicial. Vamos perguntar ao outro componente que é P para o nosso player. Vou colocar um galho. Faça a pergunta e , em seguida, criaremos uma variável. Vamos chamar isso de fogo. E eu vou tornar isso verdadeiro. Agora, precisaremos de uma sobreposição final, é claro, da esfera E vamos perguntar o mesmo e vai ser falso. A próxima coisa que devemos fazer é mudar nosso material em ambas as mensagens estáticas. Sequencie esse material para ser o que realmente temos no chão e ele está brilhando e voltando ao normal Instância C M. Acho que é o terceiro. E realmente um inferno. Veremos no jogo. Mas sim, acho que esse é o único. De qualquer forma, a próxima coisa que devemos fazer é sobrepor e fazer com que isso volte ao normal, isso seria o G M. Agora, o que queremos fazer também é mudar a música Quando estamos em combate, devemos ser alertados sobre isso. Isso é combate o. Então, vamos até nosso personagem e criemos um componente de áudio e áudio. Vamos congelar. Para isso, queremos o loop variável para isso. Este laço dourado de tigre relâmpago. Não queremos que ele seja ativado automaticamente, então vamos desativar a ativação automática. E vamos fazer um evento personalizado. E vamos chamar isso de play action autoyp. Música de ação. Algum espaço. Agora, a primeira pergunta é: a música está tocando? Muito mais do que isso. Jogando , então, se não estiver jogando, vamos desaparecer Vamos usar pings aqui. Vamos ter uma duração de teclado de 2 segundos e a hora de início em dois. Este é um dois porque tem uma introdução longa e queremos começar um pouco mais adiante Agora, vamos fazer uma festa de gala e vamos conectar essa calha a esse atraso Então, sempre que estivermos colidindo e, na verdade, quando estivermos sendo atacados, chamaremos esse evento Se o jogo só vai ser reativado, nosso resfriamento para sair do combate, por exemplo Vamos definir esses dois 15 segundos. E eu vou renomear essas duas n necessidades n talvez uma maiúscula A. Oh, o que fazemos depois do atraso Vamos acabar com nosso filme de ação. Música de ação. Foi um filme muito fácil. Seria ótimo, não é? Vou colocar dois aqui, sem duração. Vou compilar e salvar, e isso está praticamente pronto Oh, vamos vir aqui até nosso portão principal. E agora precisamos de uma referência ao personagem, que temos. É o outro ator aqui. Eu vou ser um personagem pop. Convertido em fundição pura. Vou tocar música de ação. Vou conectar isso aqui. Agora podemos testar quando estamos ao alcance e quando não estamos. Oh, vamos verificar isso. Não temos música. Vamos encontrar o portão do inferno aqui. No topo. Está tudo bem. Está tocando nossa música. Agora, vamos testá-lo um pouco mais rápido, porque 15 segundos, eu não quero esperar agora, e seria uma perda de tempo. Então, vamos até o nosso jogador. Vamos definir o valor legal para, digamos, 3 segundos. T. Não há portão do inferno. Eu escrevo de outra forma. Um ali. Certo? O material mudou. Vamos conferir a música. Um, dois, três, pararam. Vamos entrar e sair. Constantemente. Sim. Então, nosso mecânico está trabalhando E eu acho que esse é um bom ponto de parada para este. Vamos continuar na próxima. Adeus 93. Sistema de saúde Hellgate e morte: Olá, bem-vindo ao Game Design Workshop e ao Procedural Dungeon do Real Engine Five RPG de ação Anteriormente, criamos a cadeia de eventos para verificar se nosso personagem está ao alcance de nossa torre. Não, verificamos se ele tem o componente P, verificamos se é uma colisão capsual do nosso personagem e definimos uma variável para o que chamamos Em seguida, mudamos o material para um material que deixa de brilhar para o normal e depois o revertemos E criamos a mecânica play action music em nosso personagem, que começa a tocar com um desvanecimento ou desaparece quando o tempo Vamos voltar para 15. Pode ser muito tempo. Vamos voltar para dez. E então desaparecemos após 10 segundos, e não fomos atingidos, então ela desaparece Agora, vamos continuar com nosso sistema de saúde Health Gates. Como usamos para o personagem, qualquer dano. Vamos comentar isso. Uma música. Como usamos qualquer evento de dano para nosso personagem, o mesmo faremos para nossa torre, pois estamos aplicando danos quando estamos usando a poção e quando começaremos a atirar Um evento de dano, e precisaremos de duas variáveis, é claro, ou saúde atual e saúde máxima, elas serão números inteiros Não são números inteiros. Eu quis dizer carros alegóricos. Esse ponto decimal é importante e facilita as divisões Qualquer evento de dano recebido. Precisamos remover os danos de nossa saúde atual, não de nosso M. Vamos fazer um sinal negativo Vamos nos conectar. Na verdade, isso aqui e isso aqui porque estamos subtraindo nossa saúde atual Vou acumular carga. Vou definir nossa saúde atual, e a pinça, é claro, seria mínima para Mx Ao começar a jogar. Vamos configurar MC. Vamos definir a corrente para Mx. Vamos definir um valor na saúde do MC. Isso, digamos, cinco pontos de saúde. Precisamos compilar De saúde. Próximo. O que vamos fazer é fazer uma pergunta. Vamos voltar para nossos danos. Vamos colocar uma ramificação e verificar se isso é igual ou menos menor ou igual a zero. Porque temos nossa raiva e nosso ataque de mídia causará mais de um dano Nosso tiroteio causará um dano. Também queremos verificar se há menos de zero, mesmo se estivermos fixando, que torna isso obsoleto Mas de qualquer forma, se não estivermos apertando, vamos fazer uma sira Se não somos zero health tm. Não, vamos fazer uma vez. Desculpe, estou progredindo. Esses serão todos os nossos inimigos, aqueles que fazem isso. Antes de fazermos uma vez, pois fazemos uma. Vamos fazer algo complicado com isso com nosso portão de ajuda. O que faremos é reduzir o tamanho de nossas malhas Então, parece que está ficando menor sempre que o atacamos Vamos escolher essas duas bagunças. Na verdade, só precisamos do pai, que é o mesh one. Vamos deletar o outro e vamos ver todos os três D. O que vamos definir é porque estamos começando em 0,5. Na verdade, vamos rearmazenar isso como uma variável e começar a jogar. Como uma balança de parede. Vamos promover essa variável. Vamos chamá-lo de original. Aqui. Agora, o que vamos fazer para o mundo da cura de cenários é o larp. Por que vamos deixar? Porque vamos examinar o original, que seria B no nosso caso, e um quinto dele Vamos dividir. transformar isso em um número inteiro Vamos dividi-lo por 555. O Alpha seria a porcentagem da nossa saúde e da saúde atual. Vamos dividir esses dois. Então, como estamos começando com a porcentagem total, isso seria ir de B para A, porque cada dano reduzirá o Alfa. E toda vez que queremos mudar um quinto da escala original. E aqueles, vamos deixar para mais tarde, quando tivermos um pouco de IA. Agora, o que faremos quando chegarmos a esse ponto para criar um evento personalizado. Vamos chamar isso de morte, e vamos chamá-la daqui. Agora, vamos sentir a morte. O que vamos fazer é colocar um medidor no local. E a localização seria nossa lacuna na localização p. O medidor P seria uma explosão. Então, temos a explosão P, e será uma escala b maior, cinco. Vamos continuar com a destruição automática e a ativação automática. Agora, a próxima coisa que precisamos fazer é pegar nosso piso de ladrilho e redefinir seu material, não reiniciá-lo. Quando vamos até nosso ladrilho, quando temos um portão, temos um sábio no chão O que queremos é fazer com que a idade desapareça. Para fazer isso, precisamos de uma referência de bloco. Então, em nossa porta principal, vamos criar uma variável de bloco para chamá-la de pilha Será do tipo P. Eu serei uma referência de objeto, compilarei e salvarei, e iremos para o nosso labirinto que estamos gerando. W é o nosso labirinto gerando. W Aqui está, gerador de labirinto. Quando estamos criando os portões principais de nossos adereços, proprietário, que é Sim, este, o complexo Precisamos tornar a instância da variável editável e expor no Então, agora em nosso labirinto, o adereço onde desovamos, não é isso Quando criamos o portão do inferno, eu compilei isso? Eu não compilei. Queremos atualizar isso e agora temos nosso bloco Então, o que você conecta para o bloco? Bem. Sabemos aqui que estamos pegando as coordenadas. Então, vou conectar isso aqui. E vamos compilar e salvar, e agora temos nossa referência ao nosso bloco Então, vamos pegar nosso ladrilho, o ladrilho, vamos pegar o piso e o material ou elemento zero porque no elemento zero, temos o C e vamos configurá-lo como vazio. Seriam necessárias mais algumas ações sobre a IA. Mas quando tivermos nossa IA, estaremos concluindo. Basicamente, quando atacamos o T, o que a IA fará é definir automaticamente seu estado para atacar, então ela procurará o jogador e atacará o jogador. E, na morte, vamos libertá-lo basicamente. Criaremos um comportamento de que eles fujam, e talvez em algum momento eles mudem você de volta e/ou comecem a patrulhar algum lugar aleatoriamente, mas veremos o Since we have our death Na verdade, também precisamos destruir o ator. Porque se não destruirmos o ator , nosso portão ainda estará lá. Agora, compile e salve. Temos uma parte danificada que pode destruir esse portão. Vamos testá-lo. Estrondo. Sim, funciona. Ótimo. Acho que isso será para este. Eu vou te ver na próxima. Tchau. 94. Animação de bala Hellgate e sistema de segmentação: Olá, bem-vindo ao Game Design Workshop sob o motor Five Procedural Dungeon Action Pz Anteriormente, terminamos com nosso mecânico Hell Gates Health Adicionamos qualquer evento de dano e criamos duas variáveis, saúde do MX e integridade do portador Seguimos o procedimento para abstrair a saúde e verificar se estamos mortos ou não. Se estivermos mortos, estamos realizando nosso evento personalizado de morte, que gera um medidor eletrônico, coloca o material do solo em zero ou nada, o material CG, e então destrói Se não estamos mortos, estamos reduzindo nosso tamanho em um quinto, que não podemos verificar porque, na verdade, não podemos verificar se alterarmos o dano de nossa porção de ge. Então, se eu colocar o dano em quanta saúde temos? Nós temos cinco pontos de saúde. O que faremos é causar um dano e vamos colocar o atraso de 2 segundos. Vamos tornar isso um pouco infinito. Mas podemos interromper o tempo de jogo sempre que quisermos 2 segundos. Vamos encontrar um portão infernal. Não há portão do inferno. É bom que às vezes comece sem um portão infernal. Pressione uma porção de sálvia. Get Não, não funciona. Porque isso não é davibl. Vamos promover esse vegetal temporariamente. Depois de verificarmos a filial. Não diz mais nada. Eu vou assim aqui. R. Vamos verificar 12, três. Sim, está ficando cada vez menor e apertado. Então, funciona. Vamos voltar ao nosso personagem. Vamos excluir essa variável. Vamos conectar isso a. Vamos deixar esse atraso. Vamos separar a variável também a partir das variáveis, compilar e salvar, e voltar ao nosso portão Agora, vamos continuar fazendo o portão principal. Agora, eu começo a jogar. Vamos precisar fazer algumas coisas. Mas primeiro, vamos criar a bala que o portão l vai gerar Vamos ver as plantas, vamos criar uma nova pasta. Vamos chamar isso de ab. B. Digite-o e crie um novo blueprint. Vamos digitar actor, que será BP, L gate bullet. Agora vamos abri-lo. Vamos trazer isso até aqui. Dave, a primeira coisa que precisamos adicionar é o sistema de artigos. Ah. Vamos ao conteúdo, vamos pesquisar por ferrovias. Que vamos usar nesta trilha primária. Vamos realmente duplicar isso. Portanto, temos a trilha primária um. Vamos entrar nessa trilha primária. Vamos mudar a vida útil das cores da escala. Vá para íons, pontos de curva constantes, e vamos mudar tudo para algo amarelado, Vamos fazer com que seja missivo. Esta é uma cópia desta , cópia e colagem estão disponíveis Na verdade, e se mudarmos para uma constante vetorial e tornarmos avermelhada Melhor mudar para a constante vetorial, de todas as tangentes, será um pouco mais constante, não mudará muito, mas vai ficar tudo bem E 11 aqui. E vamos mudar a cor inicial ou algo avermelhado. 55 um pouco. R. Sim, isso é bom. Nós vamos economizar. Feche isso, vamos voltar para nossa bala do Hell Gate e vamos adicionar uma cascata, e aqui está Agora, precisamos de uma colisão, aqui precisamos. Pré-colisão. Vamos animar um pouco mais a festa. S. Collision não deve ser filha da partícula. Por colisão deve ser filha da podridão padrão. Isso é bom. Acho que vá aqui. Vamos fazer com que ele se mova. Não, precisamos otimizar um pouco da esfera primeiro. Vamos às colisões da esfera. Vamos verificar o átomo e vamos ignorar tudo, exceto lagoas. Compile e salve Agora vamos fazer com que ele se mova. O que precisaremos é um alvo, porque vamos traçar um cronograma de nossa posição até o alvo para ter um ritmo de filmagem ou viagem E o que fazemos é conseguir a localização do nosso ator. Mas o ator, não queremos que seja nós mesmos. Queremos a pata do jogador, então vamos fazer com que o jogador conecte essa localização de obtenção do ator E o que vamos criar é uma caixa ao redor do jogador. exemplo, alguns dos tiros perderão o jogador de propósito. Se eu atirar para a esquerda e para a direita, alguns deles vão para o jogador, mas a maioria deles vai para a esquerda e para a direita. Oh, vamos fazer um sinal de menos, digamos 100, digamos que estamos mirando no chão E então vamos obter um ponto aleatório na caixa delimitadora. Uma área ao redor do nosso jogador. Vamos definir esse 200 201, e vamos fazer uma seleção. Porque, como dissemos, alguns deles iriam para o nosso jogador. E vamos colocar isso na localização do ator. Aqui vamos fazer um sorteio aleatório : alguns deles estão mirando em nosso jogador, alguns deles estão mirando em outro lugar, e esse será nosso Então, vou promovê-lo para variável e chamá-lo de alvo. Vou conectar isso ao começar a jogar. Não precisamos dos outros dois, vou deletá-los. Eu entendo isso um pouco mais baixo. E agora precisamos da localização original dos atores. Então, vamos obter a localização do ator. Vou promovê-lo para um local original variável. E agora precisamos da linha do tempo, então adicione a linha do tempo. Neste momento, vamos fazer algo diferente. Vamos usar duas faixas de fluxo, uma delas para controlar a distância e a outra para controlar a altura do nosso projétil Então, vamos entrar na linha do tempo. Vamos adicionar duas faixas de fluxo. Poderíamos fazer isso com uma trilha vetorial, mas vamos usar apenas duas trilhas de fluxo. Acho que está mais claro o que cada um faz e é mais fácil configurá-los. Mas o primeiro seria 00,0 e valor zero, e o segundo seria quanto tempo nossa bala deveria estar Digamos que em algum lugar por aqui, seja lá o que for 0,85 Talvez seja muito 0,8. Ponto zero 0,8. Eu quero quase 75, então 0,8 soa bem e vale um. Vamos colocar isso aqui. Para a próxima faixa, vamos somar os pontos. O primeiro seria zero, zero. O segundo seria no intervalo, vamos chamar de meio tempo de 0,8 0,4 0,4. Isso seria um. E o último ponto seria 0,8 no valor zero. Agora, vamos preencher isso. O que eu queria dizer é que este é o que controla nossa distância da origem até o jogador, e este controlará apenas o eixo Z da altura da origem até a altura original. Agora, vamos aqui. O que vamos fazer é marcar um local. Vamos deixar o vetor. Vamos conectar a localização original a A. E vamos pegar nosso alvo. E vamos adicionar a altura que vamos controlar a partir da nossa faixa dois. Eu vou. Vamos conectar a faixa dois aqui, vamos conectar a faixa um aqui, vamos conectar isso aqui. E para os valores, vamos apenas adicionar 100 a Z. Quando terminarmos nossa linha do tempo, vamos colocar um medidor no local Y t. Isso é y. Em um medidor no local. Vamos escolher a explosão de partículas. Vamos escalá-lo para escalá-lo, na verdade, 2,5 0,55. Para a localização, vamos obter nosso alvo. E então vamos fazer esse show. Agora, há uma chance sermos destruídos antes disso, que é quando colidimos com o jogador Não, vamos fazer isso. Vamos pegar nossa colisão esférica, começar o evento de reinício da volta Vamos perguntar ao componente. Se o componente tiver aderência P, aplicaremos dano ao outro, que é o jogador Vou aplicar, digamos, p um dano, e depois vou copiar esse medidor no local. Ou aqui. Não usaremos o alvo. Estaremos na localização do ator em relação ao outro ator. Realmente, podemos usar o resultado da varredura e quebrá-lo, e podemos usar a localização, a localização do ponto de impacto Assim, podemos gerá-lo exatamente onde quisermos, porque o outro ator fornecerá o centro do nosso ator Oh, vamos usar o local do impacto e depois vamos destruir o ator, e não nos importamos com isso porque o ator já está destruído. Eu acho que este é um bom ponto de parada para este. Vamos continuar na próxima. Adeus 95. Tiro de bala Hellgate e SFX leve: Olá, bem-vindo ao workshop de design e ao verdadeiro Engine five, processual Dungeon, RPG de ação Sério, terminamos com nossa bala no portão do inferno. Adicionamos um efeito de partícula alteramos algumas configurações, basicamente, a vida útil muda de cor ao longo da vida útil, o que a tornamos constante, e depois alteramos também o tamanho inicial Em seguida, criamos nosso blueprint gate bullet, que usamos uma classe de ator, e adicionamos essa partícula e uma colisão esférica, que Se estivermos colidindo com o jogador, obtemos o resultado da varredura dessa colisão, obtemos o ponto de impacto preciso e o indicador de desova, aplicamos um dano ao jogador, 0,1 de dano, e então destruímos o ator 0,1 de dano, e então Agora, a forma como esse ator se move é que, no início do jogo, estamos armazenando uma localização alvo por meio da localização do nosso jogador, além um ponto aleatório ao redor dos pés do personagem, basicamente. E então armazenamos a localização original e usamos uma linha do tempo com um ponto muito rápido de zero a 0,8 para alcançar o alvo, e usamos as diferentes séries, usamos duas faixas de fluxo diferentes, uma delas para alterar a distância e a outra para controlar a altura Usamos a localização do ator definido para mover o ator. Então, se não atingirmos nosso alvo, não atingimos o jogador, na verdade, atingimos nosso alvo. Usamos a localização do medidor de desova para gerar uma explosão e depois destruímos Agora, vamos continuar em nosso portão do inferno e no evento start play para começar a criar a mecânica de tiro Então, vamos usar um evento de horário novamente. E vai aparecer a cada 0,3 segundos. O mecanismo de disparo rápido. Vou criar um evento personalizado. Vamos chamá-lo de dever. E vamos usar um galho decidir quando ele está realmente atirando ou não. E nós temos a condição, nós a chamamos de fogo. Vamos usar essa condição aqui. Mas nem sempre queremos filmar. É quando podemos atirar quando o jogador está ao alcance, mas o jogador está na linha de visão? Isso também é uma pergunta. Vamos fazer um traçado de linha? Por canal ou canal Tamela. E vamos usar a localização do ator para arte. Na verdade, vamos fazer o oposto. Vamos usar a localização ou extremidade do ator e não apenas a localização do ator, a localização da malha estática, porque é um pouco mais alta do que onde a planta se encontra. Estamos começando a partir daqui. Estamos terminando aí, na verdade, não começando, vamos ficar preocupados com a localização porque é um componente. Precisamos da localização das palavras da metáfora estática? Eu vou me levantar e do pônei, vamos conseguir a localização porque o pônei é um ator. Vou usar isso desde o início. Mas, na verdade , estamos indo do jogador até a torre, ela está visível? Podemos bater em alguma coisa? S. Vamos verificar isso? Esse é o componente que estamos aquecendo, vamos quebrar isso. Resultado do hit. Esse é o componente pelo qual estamos aquecendo o ator, então, por exemplo aquecemos nossa torre Isso é só se aquecermos alguma coisa. Primeira pergunta, realmente atingimos alguma coisa? Se aquecemos alguma coisa, ela tem o g E? Se isso acontecer, vamos para todos na sala de aula. Vamos dividir a transformação. Vamos obter a medida estática novamente. Localização da palavra. Esponja um pouco mais alto e agora precisamos tocar o som Agora, para som, não temos um som para isso, mas há um som irreal que eu acho adequado para esse uso, não é o melhor Vamos ver o conteúdo. E, como você pode ver, não há conteúdo do motor. Vamos para as configurações e selecionamos nenhum conteúdo do mecanismo. Teremos uma nova pasta chamada engine. Agora, não é recomendável alterar ou fazer nada nesse conteúdo se você não souber exatamente o que está fazendo. Porque isso pode bagunçar o motor, mas não podemos usar um som de lá E vamos usar a janela da mesa. O mais próximo. Sim, esse. Fechar a janela do Talk. E agora temos nosso fogo pronto. Vamos compilar e salvar. Eu não escolhi uma classe, P bullet. Aqui, escolhemos um ator, que é P H gate Bullet Vamos compilar e salvar. Caminho. As caixas são enormes. E não está atirando em nós. Por que não está atirando em nós? Vamos lá, eu aguento essa música. Muito para testar. Vamos até nosso portão principal. Agora, temos alguns portões principais. Digamos que tivéssemos mais. A maneira de fazer isso é selecionando esta. Vamos rejeitar, selecionar este, e podemos ir aqui e ver que está selecionado. Vamos ver o que está funcionando. Está batendo em alguma coisa. Não podemos E, essa classe tem uma tag? Deve ter uma etiqueta. Sim. Porque nosso casal não. Vamos fazer uma depuração desse traço para colocar o stent no player Vamos mover o jogador para perto de um portão infernal. Estamos batendo no jogador. Isso é um tempo porque pode ficar bem. Então, esse oposto realmente não funcionou. Então, vamos fazer o oposto. Vamos começar da malha como pessoas normais. Vamos apenas mostrar que o oposto geralmente também é bom. Desta vez, não é. Vamos mudar o ator para, e vamos lá . Agora isso está atingindo o jogador, mas ainda não está filmando Vamos dar uma olhada. O quê? Como estamos verificando o ator, precisamos verificar o componente como T, precisamos de algum som para T, precisamos de precisamos que possamos verificar se o som da filmagem está sendo reproduzido. Temos fogo de cuspe. Certo, vamos remover toda essa depuração, para que possamos ver isso com um pouco mais de clareza. Vamos até a esfera. Vamos nos esconder no jogo. Dois. O que mais precisamos para depurar as linhas. E só por falar nisso, vamos até nosso personagem e adicionar um componente de áudio. Vamos criar esse ambiente. Vamos escolher que seja de ambiente sonoro. Eu acho que é isso. Não tenho certeza. Sim, é isso mesmo. Ambiente, o Q, não o som, e ele será ativado automaticamente para ser ativado Vamos conferir. Um ambiente p. Não temos um portão do inferno Tudo bem Acelere o fogo. Ele fica um pouco no chão e depois explode Talvez pudéssemos colocar algum código para isso, mas não vamos. Tudo bem A próxima coisa que devemos fazer. Percebo que a iluminação está um pouco estática, essa ligeira sobrecarga. A janela de exibição foi movida. Essa luz aqui é um pouco estática, e temos um código para a luz para fazê-la piscar Está em nossas tochas. Vamos até nossas tochas. É a polícia que pega a tocha. Vou usar esse código aqui. Volte para o nosso portão do inferno. A bala Eu fecho a bala, não vamos precisar mais dela. Portão do inferno, e para colocar isso aqui. Vou colocar uma sequência. Eu o coloquei antes do evento de horário, para que possamos fazer essas ações em sequência. Certo. Agora, eu vou para a luz. Eu vou pegar a cor. Eu vou para A, cole. Vou colar e mudar um pouco, certo? E talvez mais laranja aqui, e a luz venha da densidade. Temos 100 150, digamos, aleatoriamente. Não, posso fazer aleatoriamente na atualização, isso será d e. O intervalo será de 700 a 800 Vamos aumentá-lo e remover alguns pontos. Vamos ficar com essa. Sim, tudo bem. E vamos verificar. Não há portão. Teremos um. E sim, agora, a luz, é claro, está muito melhor. Isso faz alguma coisa. Leia. Eu acho que é isso para este. Eu vou te ver na próxima. Tchau 96. Widgets personalizados de mouse e malha revenant: Olá, bem-vindo ao Game Design Workshop e Real Engine Five Procedural Dungeon Action Anteriormente, terminamos com nosso portão do inferno. Concluímos nosso evento de filmagem, que usa um horário definido por evento e aciona o evento de filmagem Então estamos perguntando se somos capazes de atirar. Se conseguirmos encontrar, lançamos uma linha de rastreamento da malha estática para o jogador. O oposto realmente não funcionou para nós. E então estamos perguntando se aquecemos alguma coisa. Agora, se for verdade, se aquecemos alguma coisa, estamos perguntando se esse é o jogador. E se for, estamos gerando uma bala do Hell Gate e tocando Também criamos, não criamos. Copiamos e colamos o código de nossas tochas, que faz a vida Mudamos um pouco a linha do tempo e mudamos um pouco os valores Então, agora, nossa luz do nosso portão do inferno também é uma animação, basicamente. Oh, nós vamos salvar isso. Acho que é hora de começar a criar mais coisas relacionadas a jogadores. Oh, vamos começar com o mouse. Vamos criar dois widgets. Um para eles passarem o mouse sobre os inimigos e outro para que fiquem normais. Então, vamos chamar o widget do usuário. Vamos selecionar a planta do widget, o widget do usuário, o mouse normal W G. Vou copiar e colar e chamá-lo de W G mouse. Agora, vamos acessar configurações do nosso projeto e pesquisar o cursor. E aqui temos nossos cursores de software, que podemos substituir com alguns Vamos adicionar dois deles. Na verdade, não nos permite adicionar um segundo porque ele tem que ser único. Mas o primeiro seria o padrão, e o segundo seria a cruz dela. Como você pode ver, estamos escolhendo a partir do set list. Agora, como padrão, vamos escolher o mouse normal W G; para a mira, vamos escolher o mouse W G. Attack, eu acho Ataque o mouse. Aqui está. Vamos fechar as configurações do projeto. Não precisamos mais deles. Eles salvam automaticamente o momento em que fazemos algumas alterações, e vamos abrir nossos dois widgets Vamos abrir o mouse normal e trazê-lo aqui. Vamos abrir o mouse de ataque também. Para o mouse normal, vamos colocar uma tela. E vamos usar uma imagem. E vamos até nosso mago e definiremos seu tamanho para 90. Queremos que seja uma caixa e, para o pincel ema, vamos selecionar UI mouse. Deve haver um mouse de interface de usuário. Parece que jogamos o suficiente e ele apareceu. Então, vamos escolher o mouse UI. Agora, poderíamos criar um código complexo e torná-lo vermelho. Mas o que vamos fazer é pressionar o Canvas, voltar para o mouse de ataque e colá-lo aqui , selecionar o mouse e ir até a tonalidade. Vamos torná-lo vermelho brilhante. E agora temos um mouse vermelho para segmentar em vez de criar qualquer tipo de código. Não. Basicamente, é isso a partir desta parte. O que precisa ser programado é a parte que muda cor quando estamos pairando Mas, para isso, precisamos primeiro alterar alguns códigos no controle do player. Então, não vamos fazer isso ainda. O que devemos fazer é finalmente ir até nosso personagem, mudar o modelo. Então, dentro do nosso personagem de cima para baixo, vamos para a janela de visualização Vamos ampliar um personagem e selecionar nossa malha. Agora, não vamos dar muitos detalhes sobre animação e malhas, porque vamos fazer com que elas funcionem para nós Ele usará o personagem modelo, que serve para algo com um uso completamente diferente Então, vamos fazer com que o personagem modelo funcione de acordo nosso conjunto de habilidades e com as habilidades e jogabilidade desejadas Para nossa malha, vamos selecionar nosso remanescente. E como você pode ver, está em uma posição muito estranha. Isso ocorre porque estamos usando o meu conjunto de dinheiro C, que precisamos mudar para o projeto do reverendo my E, como você pode ver, isso claramente mudou tudo. Agora, se compilarmos e pressionarmos play, veremos um problema no caráter de receita Vamos abrir o caractere de receita. Há algum código aqui que está obsoleto agora em dia. Pelo jeito, isso não existe mais nas configurações do projeto. Então, vamos excluir esses eventos que representam um problema. E vamos compilar esse plano e salvá-lo, e vamos pressionar play Então, agora temos nosso personagem Revenant em nosso jogo. Mas nossa arma é constantemente estendida, o que não é muito bom. Então, vamos corrigir isso. Também vou diminuir o som porque vamos testar muito. Oh, vamos abrir nosso plano de animação de personagens. Vamos abrir o Revenant Skeletal Mesh Act porque a persona Eles têm todos os esboços aqui, que podemos usar planta da animação, na montagem do palco ou na esquelética Podemos ir para cada categoria. Então, agora, vou analisar o plano, mas não quero que a BP Revenant Eu quero o plano de animação de Revenant. Vou selecionar isso e abri-lo. No momento, estamos dentro da locomoção, que está dentro do gráfico de animação, que determina em qual animação reproduzir Antes de começarmos a definir a animação, vamos para Evenra A razão pela qual recebemos um erro em um personagem que não estamos usando, o personagem Revenant, é porque há todos esses elencos aqui na animação inicializada do plano de evento para transmitir ao Então, como tem uma referência rígida, um elenco, na verdade, não uma referência rígida, eu me refiro a ela, então quando pressionamos play, ele verifica se está compilado ou não E não foi. Então, vou excluir isso porque não precisaremos da animação inicializada Não precisamos quando o carro BP envia, blá, blá. Nós não precisamos disso. E não fazemos isso e não fazemos a montagem simples no início, que é a intramontagem, e acho que não precisamos dos notificadores de animação de uma montagem e acho que não precisamos dos notificadores de animação Provavelmente criaremos a nossa própria. Eu vou deletar isso também. E a forma como vamos animar é que vamos tocar montagens Na verdade, vamos criar um enorme gráfico de animação com muitas funcionalidades. Então, em nossa locomoção, no gráfico de animação, vamos para a Temos a locomoção terrestre básica, que então se divide em um deslocamento entre as fendas da parte superior do corpo, e ela faz alguns planos estranhos que não vamos Em seguida, ele passa por tudo isso e nos dá a pose de saída. E o que vamos fazer é entrar locomoção terrestre e trocar a marcha lenta da marcha lenta, que é essa animação que tem a Portanto, não precisamos dessa marcha lenta com o canhão estendido, precisamos do circuito de marcha lenta sem combate E precisamos jogar. Vamos adicioná-lo aqui e compilar, e agora nosso ídolo está com uma arma apontada Então, vamos voltar e começar nossa corrida Agora, iniciamos nossa corrida, mas precisamos novamente da que não seja de combate Então, vamos avançar sem combate, que é o início do FWD, e vamos selecionar play, que, se clicarmos nele, será este Bem, este é o nosso começo de corrida. Agora, vamos voltar e ir para nossa parada de corrida, da qual precisamos novamente, a Non-Combat Então, combata Jog W e vamos jogar. E essa animação tem uma ótima animação de topo. Às vezes, ele volta porque não temos um sistema completo, mas está tudo bem. Por fim, vamos começar, e aqui podemos ver um espaço de mesclagem, que na verdade é multidirecional para forro Já que não precisaremos de tudo isso. Vamos voltar. Vamos deletar isso. Novamente, vamos usar o jog forward no o Dog forward, non combat, between play, que é essa animação constante em execução Agora, vamos salvar e voltar ao nosso jogo. Vamos apertar play. Também temos o novo mouse. E você pode ver agora que temos uma animação melhor para a águia andando e correndo Eu uso uma porção de morcego. Eu não tenho um. Eu acho que isso seria para este. Eu vou te ver na próxima. Tchau 97. Animação de impulso de física e ataque corpo a corpo: Olá, bem-vindo ao workshop de Design de Jogos e Real Engine Five Procedural Dungeon action is creation calls. Anteriormente, criamos nossos widgets para o mouse. Criamos o widget de ataque do mouse e o widget normal do mouse e os adicionamos às configurações do projeto ao software de cursor aos cursores do software Então, começamos a adicionar nosso modelo de Aragão ao nosso personagem E mudamos a classe de animação para ser o modelo de animação do Revenant Blueprint e a malha esquelética para o Fizemos algumas mudanças no plano da animação, que acessamos gráfico de animação dentro da locomoção terrestre, alteramos no Jog start jog stop e corremos para as stop e corremos Agora, vamos continuar me fazendo atacar. Mas antes de fazermos isso, notei que, quando estamos danificando com a poção de raiva, não aplicamos nenhum impulso aos itens de física, o que, como permitimos que os itens físicos fossem sobrepostos pela colisão de raiva, devemos fazer notei que, quando estamos danificando com a poção de raiva, não aplicamos nenhum impulso aos itens de física, o que, como permitimos que os itens físicos fossem sobrepostos pela colisão de raiva, devemos fazer isso também. Então, antes dessa ramificação aqui, vamos colocar uma sequência. E vamos colocar um galho e vamos copiar, na verdade, não queremos que o ator tenha um puxão É um componente. Nossos objetos físicos, as caixas, são componentes. Então, vamos para o componente e puxou , um componente tem puxão E a etiqueta será H. Se isso acontecer, obteremos o componente e o pulso. Se for verdade. Vamos precisar de mais espaço. Um pouco mais alto. Para nosso impulso, precisaremos dar algum número O que vamos fazer é dividir esse vetor em x y e z. Vamos obter uma carga aleatória no alcance. E vamos duplicar isso duas vezes duas vezes. Na verdade, entre os dois primeiros, vamos selecionar com base em uma bola aleatória. Isso estará se conectando em x e y. Isso estará se conectando em morto. Agora, para os valores, vamos colocar menos 220. E, na verdade, isso precisa ser menos 260, digamos, e isso deve ser menos 220, porque o máximo está próximo de zero Então, esse valor, já que estamos em menos, deve ser menor do que isso E vamos fazer o positivo aqui, que seria 220 no mínimo e 260 no máximo. E para o impulso de altura, vamos colocar 200 a 300 E agora, teoricamente, vamos verificar também a mudança de velocidade O que ele faz, basicamente, é como acumular a massa do objeto, se isso faz sentido, porque itens de física têm Mas é um pouco mais complicado do que isso, mas vamos considerar aproximadamente que isso acontece. Então, vamos jogar. Encontre algumas caixas do nosso inventário. Sim. Eles estão se movendo, estão recebendo um impulso. Agora, vamos usar esse código também em nosso ataque masculino. Mas vamos copiar e colar nesse momento. Agora, para criar um ataque A M, precisamos primeiro fazer um pré-trabalho. O que vamos fazer é acessar nossa pasta de esquemas em nossa pasta de enumerações e criar outra enumeração, que será Agora teremos a maioria dos estados, todos os estados basicamente em enumeração Mas é recomendável ter mais de um. Vamos chamar isso de estado do jogador. Nós vamos abri-lo. Traga-o aqui, e eu vou adicionar dois estados. Acho que é o exato. Vamos chamar o primeiro estado assim. Vamos ligar para o segundo estado. Normal, todo o terceiro estado A ou quando estamos mirando, vamos chamar o quinto, o quarto estado Stan, porque quando somos atingidos, queremos que um Mini Stan aconteça, e vamos chamar o último estado M. A maneira como vamos usar isso é principalmente não fazer coisas enquanto estamos em outro estado. A próxima coisa que vamos fazer é ir até nosso personagem e criar uma função para mudar o estado. Então, vamos chamá-la de mudança oito. Para a entrada, ela terá um estado de e-player. Essa data. Vamos criar uma variável do tipo player state. Vamos chamar isso também de jogador oito. Patê. Estado do jogador E. E vamos duplicar isso E vamos chamá-la de idade do estado do jogador. Oh, precisamos colocar essas coisas aqui. A primeira coisa que devemos fazer é definir estado do nosso jogador para o estado anterior. E a próxima coisa que fazemos é definir o desejo que está chegando ao nosso jogador Agora, eu não acho que vamos usar o estado anterior, mas por que não usá-lo? A próxima coisa que devemos fazer é realmente adicionar o estado ao nosso controlador de cima para baixo. E como usaremos a referência do controle com frequência, vamos começar a jogar. E aqui estamos salvando o modo de jogo inativo. Vamos X e Maro fazerem o mesmo com o controle do player. Não, vamos pegar o jogador e o elenco. Pronto para torná-lo um elenco puro. Promova essa variável. Conecte isso e agora temos uma referência ao nosso controlador. Agora vamos ao nosso controlador e criaremos uma variável. Vamos chamar esse jogador de oito. Jogadores oito. O estado do jogador B já é uma variável. O tipo será e estado do jogador. Compilar e salvar. Vamos voltar à nossa função e ao estado. Vamos obter nossa referência de controle de cima para baixo e ver os jogadores estaduais. Oito nosso estado. Oh, acabamos com isso. E a próxima coisa que devemos criar é nossa montagem de animação para o M Montage Oh, vamos configurar para st, que é a animação que queremos usar, e vamos clicar com o botão direito nela e fazer uma montagem de oito animações Agora, o que é uma montagem de animação? Vamos pintar por um segundo. Oh, vamos considerar que temos nosso personagem e nosso personagem correndo. Isso é uma animação. De qualquer forma. Então, nosso personagem está constantemente correndo. E, de repente, queremos jogar um ataque. E digamos que não queremos mudar o personagem do lixo para baixo. Queremos que essa parte seja a mesma. Então, podemos usar outro sistema chamado slots. Vá muito grande. Mas podemos usar outro sistema chamado slots, e podemos dizer que podemos simplesmente reproduzir uma animação sobre essa parte ou misturá-la com a parte abaixo. E aqui onde estão as montagens. Como estamos dizendo, reproduza essa animação. Vamos chamar de ataque um, e ele estende, por exemplo, braço assim e dá um soco Agora, usaremos essa parte para nós, mas as montagens também têm a habilidade de atacar, por exemplo, depois, e dar esse soco se o jogador continuar pressionando ou não E, basicamente, é uma ferramenta que nos ajuda a criar animações mais poderosas e não apenas mais poderosas, mas também nos permite controlar animações complexas. Por exemplo, combos de ataque, movimentos especiais, que podem ser acionados pela jogabilidade De qualquer forma, vamos entrar com isso. Então, estamos criando nossa montagem. Vamos abrir nossa montagem. Oh, queremos em algum lugar aqui, por exemplo, jogar para criar uma partícula ou reproduzir outra animação O que faríamos é criar algo chamado Vamos clicar com o botão direito do mouse. Na verdade, precisamos clicar aqui em notificar. Essa é a barra do notificador. E o que é um notificador? Basicamente, é um marcador que podemos colocar em pontos específicos da animação para acionar alguns eventos Então, vamos colocar um modificador de animação. Em algum lugar aqui. Tudo isso aqui, uma notificação, e vamos chamar uma nova notificação. Bem, não é partícula. Na verdade, é um ataque de eu, nosso projeto de eu que criaremos, mas vamos chamá-lo de partícula Agora, se eu tivesse outra animação aqui dentro, eu poderia trazê-la. Eu posso trazer outra animação. Esse foi um mau exemplo. O que faremos aqui dentro. E o que faremos aqui é criar um notificador, que na verdade é uma marca, um ponto em que podemos acionar alguns eventos que queremos que algo aconteça Podem ser sons. Pode ser outra animação. Por exemplo, se eu trouxer uma animação. Agora, essa é a mesma animação. Mas se eu trouxer até mesmo a mesma animação, e eu quiser dizer, faça de novo. Eu precisaria de algo notificador para explicar quando entrarmos em qual animação O que vamos fazer é, em algum lugar por aqui, criar um novo notificador Vamos ligar mais cedo. Ta. E agora temos esse notificador aqui, quando essa animação é colocada aqui, ela aciona isso Existe uma maneira de realmente encontrá-lo aqui. Sim, não aqui. Esse é o gráfico de animação. Desculpe, o gráfico de eventos deve estar no gráfico de eventos na parte de programação, não na parte de animação. Seja, isso é um evento. É uma coisa de programação, então meu evento notifica meu ataque. E isso seria acionado naquele momento. Mas como temos apenas um notificador, há outra maneira de chamá-lo E só para demonstrar isso por enquanto, vamos conectá-lo na próxima lição. Vamos até Pen gra em nosso personagem de jogador. Vamos criar um teclado espacial. Vamos usar o espaço do teclado. Nós fazemos o ataque M. Então, se as jogadas receberem esse início notificado e depois o término da notificação, receberemos nosso nome notificado para que possamos passar por aqui. Há muitas maneiras de fazer animações. Escolheremos alguns específicos apenas para fazer nosso personagem funcionar. Agora, eu acho que este é um bom ponto de parada para este. Continuaremos construindo nosso espaço e jogando a montagem e toda a lógica de nosso Meu ataque, além de criar um plano que será nosso Meu ataque na próxima lição Tchau. Te vejo então, 98. Colisões e efeitos de Blueprint de Ataque Corpo a Corpo: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon RPG de ação Anteriormente, criamos uma data personalizada para nosso jogador usando numeração e tendo nossos estados E continuamos criando um estado de mudança em nossa função de personagem Isso é chamado de estado de mudança, e estamos armazenando o estado anterior em uma variável. Estamos definindo o novo estado, o novo estado do jogador para o estado, e também estamos passando essas informações para o nosso controlador de cima para baixo, no qual criamos o estado do jogador, outra variável. Também criamos o estado anterior e o estado do jogador na variável personagem do jogador. Agora, começamos a criar nossa montagem de animação e criamos um modificador de animação Isso notificará nosso ataque eu quando uma de nossas partículas, o que dissemos, não será uma partícula Será um plano que terá alguma lógica. Agora, vamos fechar essa montagem. Vamos criar nosso ator masculino. Vamos para a pasta Habilidades, botão direito do mouse e criar uma nova classe de blueprint Vamos ser atores, e vamos chamá-lo de BP. Não vamos programá-lo agora. Vamos direto ao nosso colecionador. Vamos ao nosso evento espacial, o evento Bace Ball, e vamos mudar de acordo com nosso estado Vamos conectar isso na imprensa. É quando seremos capazes de fazer um ataque de cheiro. E o único lugar que queremos é quando estamos normais. Não, então a próxima coisa que vamos fazer do normal é mudar de estado. Vamos trazer nossa função de estado de mudança. Eu vou configurá-lo para mim. Então isso muda nosso estado de mim. Agora, se eu continuar pressionando a barra de espaço, ela não será acionada novamente. Agora, a próxima coisa que devemos fazer é tocar um som. Vamos tocar o som dois d, e vamos escolher como som o Fort Effort Swing Esforçando-se. Vamos usar o esforço de cantar. A razão pela qual vamos usar isso é porque ele tem várias asas diferentes. O que também é esse diálogo de diálogo? Ah. Sim, soará diferente toda vez que atacarmos. Agora, vamos ao nosso player, e depois do som, devemos tocar nossa montagem E para jogar Armonta, precisamos de um componente de bagunça esquelética Isso é necessário. Porque quem está tocando essa montagem? Isso é importante. Mas vamos nos conectar aqui. E para armontagem, vamos escolher nossa última montagem. Agora, antes de eu dizer que podemos usar o início notificado ou qualquer outro, ele será acionado sempre que qualquer notificador for usado E como temos uma, podemos simplesmente usar isso sem nenhum nome de notificador e dizer, classe acto, e essa seria nossa BP Ou a transformação, vamos dividir e precisamos de um local. Vamos pegar nossa malha. Obtenha a localização. Local do futebol, o que isso significa? Acho que estamos usando essa malha esquelética porque é de onde podemos obter um local de futebol Se formos ao nosso esqueleto, volte para a persona e vamos para o nosso esqueleto Podemos ver que há várias coisas extras, como O que é basicamente um slot? Quero dizer soquete, não um slot. Então, o que é um soquete Podemos ir até onde estamos, e focinharmos dois Você pode ver que há um soquete aqui também, que é algo ao qual podemos conectar algo, como um slot onde podemos colocar coisas E não precisa estar exatamente na escala. Como você pode ver, esta tomada aqui está muito longe, que pode ser suficiente para nós Mas acho que esse é o braço errado com o e r para encontrar o soquete e o R em nossa montagem Sim, é o outro r, o braço direito, não o esquerdo. Então, precisamos de R e R, arma, R. A, aqui estamos em r à direita, e R Uzle 1 Vamos usar esse focinho. Nome do soquete aqui. Pontuação muscular um. Vou voltar ao nosso personagem e usar o nome do soquete O que eu não fiz corretamente. Às vezes, o controle C simplesmente não quer operar. Focinho um Isso fornecerá a posição da palavra em que nosso soquete esteja nesse estado A próxima coisa que faremos é conectar nosso meacor ao nosso HD E então nosso ataque de homens segue um pouco . Vamos fazer um toque de pato Para o ator. Porque estamos gerando um ator e queremos associá-lo ao nosso E vamos manter a palavra. Isso significa que, quando viramos nosso eu, o ataque também gira, e o ator principal seria. Talvez possamos abusar um pouco de nosso ataque, nosso ataque e simplesmente dar meia volta quando estamos atacando e atingindo muitos inimigos Ah. Agora, a única coisa que resta a fazer é acalmar a frequência com que podemos me encontrar. Oh, vamos mudar de estado aqui depois de 1 segundo. Então, eu quero adiar. 1 segundo. E vamos mudar o estado para normal. Isso seria um problema se permitirmos que qualquer outra coisa acontecesse durante o ataque por e-mail, porque digamos, por exemplo, que eu esteja porque digamos, por exemplo, que estado AM e eu pressione o ataque por e-mail e, em seguida, volte para o estado AM instantaneamente Após 1 segundo, meu estado AM mudará para normal. Mas veremos como isso se desenrola e faremos as mudanças apropriadas. Vamos abrir nosso plano de ataque principal e nossas habilidades. Vamos adicionar uma esfera de colisão. Por colisão. Vamos fazer com que seja 100 e raio. Além disso, precisamos avançar um pouco. Uh, talvez aqui estivesse bem. Agora, por que avançamos, porque o centro do projeto é onde ele apareceria Então, precisamos que isso aqui não esteja aqui, porque isso se sobreporia ao nosso personagem Não gostamos de nos sobrepor a um personagem. Então, em algum lugar aqui seria adorável. Agora, a próxima coisa que precisamos é de uma partícula em cascata. Para o sistema de partículas, vamos usar o primário recorrente. Muitas primárias recorrentes. Queremos que o Revenant seja o principal personagem. Certo? Vamos torná-lo um pouco maior em relação a tudo isso. Eu vou falar sobre isso x em um e em dois. Oh, isso será um artigo. Ponto. Maior. Vamos ver como fica no mapa. Agora, a próxima coisa que adicionaremos é uma luz pontual. Faça com que produza um pouco mais de luz. Solte a área quando estamos apenas atacando. Bem, basicamente iluminou um pouco o chão. Vamos obter luz pontual, vamos definir o raio dois E vamos colocá-la um pouco mais abaixo. Aqui. Isso ilumina nossa área e também um pouco para frente. Não muito, porque você não quer ver nosso personagem, algo começando aqui e depois começando aqui. Você quer ver como começa na bacia. Precisamos mudar a cor também para algo avermelhado, tudo bem E vamos programar isso pode atacar. Agora, geralmente usamos destroy actor sempre que queremos algo. Mas isso também é outra forma. Vamos para a classe padrão. Isso é para toda a vida. Podemos ver que temos essa variável aqui, quanto tempo esse ator vive. Ero é para sempre. Mas se colocarmos 0,3, por exemplo, isso morrerá em 0,3 segundos. Esse ator, não precisamos destruir. Não precisamos chamar Destroy, nunca. O que precisamos fazer é ir para nossa esfera. Qual colisão, selecione personalizado. Vou ignorar tudo exceto a lagoa e o objeto físico. Na verdade, não precisamos ignorar a dinâmica, ela também é nossa porta do inferno. Na cápsula. Essa é a nossa colisão. Uma dinâmica. Ah. Agora, nossa esfera precisa fazer alguma coisa quando começa a se sobrepor Quando geramos atores, mesmo que o outro ator esteja dentro da esfera, isso acionará o evento de sobreposição inicial. Ah. Precisamos perguntar a outra tag de ator e, se o outro componente, fazer uma sequência. Faça isso separadamente. Um é para o inimigo. A outra é para P H., duas filiais físicas . não conseguimos sentir o papel do Ainda não conseguimos sentir o papel do inimigo porque nosso macho não causaria danos ao maior empurrão de volta para o nosso lado Mas podemos fazer a física. Vamos fazer, pois a física vai para o nosso personagem. Vou ser revestido. Aqui. Só precisamos adicionar flutuadores aleatórios e impulsivos Vamos voltar para mim, repita isso aqui. É verdade. Um objeto válido. Verifique também isso. Para o caso de ser destruído ou algo assim. Vamos nos conectar aqui. E isso seria. Na verdade, também precisamos conectar o alvo quem estamos comprando impulso E esse seria nosso outro componente. Vamos testar porque acho que teremos um problema com a rotação do nosso cheiro. Sou eu. Nada acontece porque habilitamos a entrada em nosso personagem. No final do beg play, vamos pegar a referência do controle do player e digamos que talvez eu conecte a referência do controle ao controle do player, alvo seria eu mesmo Vamos comparar. C, nada está acontecendo. Vamos verificar por quê? Acho que sei o porquê. Como o estado por padrão está morto, vamos configurá-lo como normal porque é nosso primeiro estado. Criou a variável, mas não criou um estado do jogador. Vamos testar novamente. Eu tenho som. Eu não tenho uma montagem. Ou vamos sair. Acho que, novamente, sei o motivo. Vamos para a montagem do nosso elenco e vamos aqui, como eu disse antes, precisamos usar um slot No momento, está em todo o espaço e é normal que aconteça com todo o corpo. Vá e confira nosso gráfico de animação. Veremos que isso não vai funcionar porque o corpo inteiro não tem basicamente um enredo. Mas precisamos fazer a ranhura da parte superior do corpo. Vamos pegar o fontage e traçar Tam. Parte superior do corpo. Pode congelar, mas nós compilamos e salvamos. Vai congelar. Não fez. Faça. Se eu parar de jogar. Ah. De qualquer forma, vamos ao nosso jogo. Acho que desta vez vai funcionar. Sim. Eu posso ver a explicação correta da animação. Mesmo que a prévia tenha congelado, isso não significa nada Há alguns problemas em mudar as coisas. Mas não estamos gerando a partícula. É porque isso não está desencadeando? Há uma chance. Vamos pegar um ponto de ruptura aqui, ou talvez a localização mundial do Mcle One Oh, acionando. Faça um pouco de reflexão e meio que descubra qual é o problema Quando criei uma notificação e adicionei uma nova notificação, esse é um notificador básico , diferente da montagem do plano Nosso nodo aqui. Que na dica de ferramenta, ele só funciona com o Lay Montage Notify e não com os esqueléticos Vamos mudar, excluir esse ataque M e vamos usar isso. Modificação de montagem. Vamos nomear M attack. Agora funcionaria. Sim, podemos ver como temos nosso artigo. Mas, como eu disse, temos um problema com a rotação. Não, para corrigir isso, iremos ao nosso PPM. Vamos começar nossa peça e vamos definir a rotação de atores. Para a nova rotação. Vamos descobrir por que uma rotação. E o início seria player po. Vamos fazer um Eu também vou obter o vetor direto. Que é um vetor que nos diz para onde estamos olhando, basicamente. Então, o início seria a localização do ponto e n seria a localização em que estamos mais o vetor direto para dar uma direção Outra rotação deve ser corrigida. Sim, ele fala. Eu não gosto do lugar onde está desovando. Mas eu gosto disso em alguns. Primeiro de tudo, vamos ver nossa taxa de jogo. Ok, eu já mudei isso. Deveríamos trocar dois, talvez dois por dia. Oito. Vamos deixar a taxa de inimigos em um ponto. Cinco e de um. Vamos escolher a localização do focinho em dois lugares. Acho que foi um pouco mais ousado. Mesmo que esteja na mão errada no momento em que estamos reproduzindo a animação. Oh, não, não. O focinho um era Mas vamos fazer com que ela troque um pouco mais tarde para nossa mão. Vamos talvez. Dave. Isso é melhor. A vida é um pouco intensa demais. Faria com que fosse um pouco mais baixo. Vamos definir. Certo? Vamos. Sim. Parece bom. Se ele mover as caixas, ele deve ser capaz de mover as caixas. Caixas nesta sala novamente. Salas. É a caixa. Existe, certo? Perfeito. Estamos movendo caixas. Ótimo. Eu acho que é isso para este. Te vejo na próxima. Adeus 99. Mecânica de mira estática e de tiro: Olá, bem-vindo ao Gain Design Workshop, n real Engine five, Procedural Dungeon Action RPG Anteriormente, terminamos com nosso ataque de mim. Criamos uma montagem de animação que usamos uma notificação de montagem do notificador para notificar quando queremos adiar nosso ataque de mim, e usamos também no esquema do personagem e no evento da barra de espaço para distinguir os estados do jogador, para possamos atacar somente quando estivermos normais Nós mudamos de estado imediatamente depois. Tocamos um som, tocamos a montagem e, no início, notificamos a montagem Criamos nosso VP May Attack e o anexamos ao ator Em seguida, esperamos 0,8 segundos e alteramos o estado Em nosso projeto Meu ataque, começamos definindo a rotação do ator em direção a onde a pata está olhando E então criamos o evento de sobreposição de início do componente com uma esfera com base em nossa colisão esférica que verifica se o ator tem é um objeto físico ou é um inimigo Como dissemos, o inimigo será preenchido mais tarde, e pronto. E nosso agente de ataque pode ser composto por uma luz, uma partícula e uma esfera de colisão. Agora, vamos continuar criando nosso mecanismo de disparo. Mas para isso, primeiro, precisamos fazer de um eu um mecanismo de mira Mas, para isso, precisamos criar um mecanismo de mira. Então, quando nosso personagem ainda está estudando, está passando de turno, por exemplo, podemos dizer que o personagem está mirando, então o colecionador pode Agora vamos colocar um comentário aqui. Vamos chamar isso de M e vamos criar nosso pânico. Como eu disse, vamos usar o botão shift, então vamos usar o shift esquerdo nos teclados E vamos criar um ouro que saberemos quando o turno estiver inativo ou não Nós vamos nos sentar e ser amigos. Agora, a próxima coisa que faremos é ativar o estado do jogador. Ah, qual? Em ambos. Quando seremos capazes de mirar? Bem, basicamente, quando estamos normais, ou já estamos mirando porque a animação não terminou, devemos ser capazes de mirar novamente. O que faremos, porém, é fazer com que nosso personagem se mova e mude uma coisa. Em nosso movimento de personagem, há um movimento orientado Aqui está a rotação orientada para o movimento, que significa que o personagem está orientando em direção ao nosso Quando estamos mirando, não queremos que isso aconteça Queremos que ele mire para onde nosso mouse está apontando. Então, temos que desligar isso. Vamos fazer a rotação para movimentos e depois mudar nosso estado. Agora, eu não vou me sentir mal porque precisamos que a montagem seja reproduzida primeiro e depois acionar isso, ativar isso, enquanto aqui, precisamos acionar isso e depois tocar a Vamos definir o estado como a. Para nossa mira, vamos usar a pose que tínhamos no início, que tem a arma estendida Vamos criar uma montagem a partir disso. Montagem de paciente E BE Montage. Na verdade, não precisamos, precisamos. Precisamos definir o slot, o slot padrão para ser parte superior do corpo, nome, parte superior do corpo. Agora, se quisermos redefinir isso, podemos simplesmente dizer que você trabalhou. Às vezes, ele volta. E agora, agora, se eu for para outro lugar e voltar para lá, funciona , e nossa montagem de elenco também funciona Como você pode ver, o que precisamos daqui é, na verdade, essa parte de baixo para A. Oh. Vamos voltar. Vamos paginar. Agora, também há um player no Montage, que é um nodo de classificação com menos opções Mas usamos isso porque, no final das contas, tem muito mais opções. Agora vamos usar a malha esquelética. Para montagem, vamos selecionar o ocioso. Agora, para diminuir a mira, você vai trapacear um pouco Use essa montagem. Normal, e nossa taxa seria menos um. Então, isso o forçará a jogar ao contrário. E depois disso, vamos mudar nosso estado depois de abaixarmos nossa arma, enquanto abaixamos a arma, a ajustamos para o normal Em seguida, devemos reorientar nosso movimento porque estamos em um estado normal Agora, aqui mais tarde, quando colocamos o mouse para ficar vermelho, quando estamos mirando em um inimigo Também o configuraremos para ficar vermelho quando, na verdade, ficar vermelho quando estamos mirando e virando normal quando não estamos mirando Então, quando estamos mirando, nosso mouse ficará constantemente vermelho, indicando que podemos, estamos prontos para atirar Vamos testar isso. Vamos apertar play. Eu pressiono Shift, podemos ver nossa arma. Mas, no momento, não estamos mirando. Então ele começou a se mover e apenas apontou para a arma. Mas, como você pode ver, se fecharmos o som, está muito alto. Como você pode ver, nosso objetivo de rotação funcionou como se não estivéssemos girando em direção ao movimento no momento Mas se eu desligá-lo, voltaremos ao nosso movimento Agora estamos meio que metralhando, o que não é ruim, mas não é o que queremos De qualquer forma, para que isso seja corrigido, precisamos entrar no controle do player e corrigir nosso movimento. Mas não vamos fazer isso agora. Vamos continuar com nosso mecanismo de disparo. Oh, vamos fazer isso. Bom para o seu personagem Vamos colocar aqui. Oi. Vamos usar o botão esquerdo da casa para criar nosso evento de ataque. A primeira coisa que faremos é alternar e declarar. Conjunto. Quando queremos atacar, estamos mirando. Oh, vamos fazer uma pergunta. É uma filial. Já estamos atacando? Vou promover essa variável e chamá-la de ataque Porque se já estivermos atacando, não devemos atacar novamente, isso deve ser um tempo de recarga, caso contrário, nossa arma funcionará como uma metralhadora o mais rápido que pudermos clicar Oh, se não estamos atacando, então vamos definir o ataque como A próxima coisa que vamos fazer é tocar nossa montagem. Desta vez, já temos uma montagem, chamada montagem feita por primarificador e alguns notificadores que não usaremos, mas tudo e alguns notificadores que não usaremos, E vamos trazer nossa malha. Aqui. Agora, a próxima coisa que vamos fazer é ampliar nossa bala. E antes de fazermos isso, vamos criar uma função chamada spa. Bala. Nós usamos isso. Mas não vamos usar isso agora. O que vamos fazer é completar nossa mecânica. Ah. Quando tocamos montagem, vamos para o spa Bala. Oh, a próxima coisa que precisamos fazer é redefinir quem está atacando mal. Precisamos de um relaxamento. Então, vamos colocar um atraso de, digamos, um ponto. E precisamos reiniciar. Vou criar um evento habitual. E esse reset. Puxe-o aqui. Isso precisa mudar com base no estado do jogador, porque, por exemplo, queremos fazer outra coisa quando estamos mirando e outra quando estamos atacando normalmente Por exemplo, quando passamos mouse sobre um inimigo e pressionamos o clique, o final é diferente do que se pressionássemos final é diferente do que se tecla shift e começássemos Agora, vamos mudar. É claro que, em ambos os estados, não precisamos atacar Mas quando estamos atacando normalmente, vamos definir isso também estatística, porque se ficarmos atordoados durante um ataque, poderemos reiniciar Agora, quando estamos atacando normalmente ou quando começamos, queremos abaixar nossa arma caso não estejamos atacando novamente, como se eu passasse o mouse sobre um inimigo e atirasse, e depois de passar o mouse, e depois de passar o mouse, você pode manter a mão levantada na posição de tiro, ela E para fazer isso, vamos trapacear um pouco novamente e escolher um evento personalizado Lower Gun E vamos conectá-lo a essa cadeia de eventos porque é isso que queremos que aconteça. Se isso for verdade, isso realmente não importa. Já está acontecendo. Vamos deixar isso acontecer novamente. Ah. Vamos chamar a arma mais baixa. Em ambas as situações, normal. E isso seria uma parte do nosso ataque de tiro com o botão esquerdo Mas vamos continuar com a bala, que é a próxima parte Em nossa próxima aula. Tchau 100. Modelo de bala do jogador e visuais: Olá, e bem-vindo ao Game Design Workshop e ao Real Engine cinco cursos processuais de criação de RPG de ação em Dungeon Anteriormente, começamos com nossa mecânica de tiro. Então, criamos o evento AM com o turno para a esquerda. Definimos a mira ou AM não está abaixado quando pressionamos e soltamos Estamos trocando com base no estado E. Estamos configurando o oriente para desligar, mudando o estado para AM e fazendo uma montagem, que traz nossa arma para o nosso lado, por exemplo Agora, quando lançamos, jogamos primeiro a montagem para abaixar a arma e depois mudamos os estados de volta Então, antes que o set nos apoie, sabemos que pelo menos começamos a abaixar nossa arma Agora, para ser honesto, essa rotação de orientação definida em relação ao movimento é meio decorativa aqui, só para demonstrar o que significa que quando estamos orientados com base no movimento, podemos realmente o personagem se virar e, quando não estamos, o personagem permanece estável e é mais parecido Deixe-me abaixar um pouco o som. Essa é a diferença com essa variável. O primeiro é basicamente metralhar. A outra é seguir a orientação para o movimento, seguir a rotação para o movimento. Bem, para nós, o que faremos é girar constantemente onde nosso mouse está Então, na verdade, isso não é necessário. Mas se ficar aqui, não afetará nosso código. Agora, a seguir, queremos usar o botão esquerdo do mouse. Para criar novamente uma cadeia de eventos com base no estado de nossos jogadores. Em seguida, perguntamos se estamos atacando e, se já estamos atacando , como se estivéssemos atirando, não faremos Mas se não estivermos filmando, vamos atirar. Então dissemos que atacando à verdade, reproduzimos a montagem de filmagem que criamos Na verdade, não criamos que isso existia , que estava filmando. E então prosseguimos com nossa função spawn bullet que deixamos não E depois de um atraso de 0,65, reiniciamos o ataque para que possamos atirar novamente. Mas quando estamos na mira, não estamos baixando a arma, o que é um evento Criamos e meio que hackeamos nossa maneira de criar um novo código e o usamos no turno lançado, que é nossa arma mais baixa Agora, vamos continuar preenchendo essa função e, para fazer isso, precisamos criar uma nova planta, vamos para as plantas Vamos falar sobre habilidades. Vamos clicar com o botão direito do mouse e criar uma nova classe de blueprint Agora, isso não é exatamente uma habilidade, mas Hel gate Bullet também não era uma habilidade Então, vamos chamar essa camada PP de bullet. Eu vou abrir isso. A primeira coisa que precisaremos é de uma partícula. Então, vamos adicionar um componente de partículas em cascata, que será de modelo e Mark, há muitas Marque o óleo. Há dois. Aquele é glacê, queremos o normal. Nós, nós temos uma boa bala aqui. Um efeito para nossa bala. Agora, a próxima coisa que precisamos é de um tubo de colisão. Uma esfera de colisão, na verdade, não um cubo. Vamos deixar seu raio em 32, dar muito para aquecer a área, não importa se aquecermos diretamente Vamos ser gentis com nossos jogadores. A próxima coisa que precisamos, que na verdade temos configurado em nosso BP ML, é esse ponto de vida aqui que queremos iluminar o chão enquanto a bala viaja Vamos voltar à nossa bala e colar essa luz. Talvez seja um pouco grande que seu raio de atonação seja Vamos aproximá-lo da bala, e acho que está tudo bem Por fim, o que precisamos é de um componente de movimento de projéteis. Agora, esse componente é tão o componente de movimento quanto o componente de rotação, é um componente com muitas opções. E a única coisa que precisamos mudar são, na verdade, duas coisas. É a rotação que segue a velocidade, mas queremos que o ator esteja sempre voltado para sua velocidade Além disso, queremos mudar a escala de gravidade do projétil para zero Talvez 0,1, nossas balas tenham uma inclinação descendente, Mas se for demais e pudermos ver que nossas balas estão caindo muito rápido no chão, devemos voltar a zero Agora, esse componente de movimento do projétil tem um vetor chamado velocidade, que significa em qual direção e a que velocidade estou Isso é algo que vamos calcular mais tarde. Mas o que vamos fazer é acessar nosso gráfico de eventos para começar a jogar, obter o movimento do projétil e uma velocidade Vou até esse pino e criarei uma nova variável, chamada de velocidade velocidade O que deveria ser. Então, vamos torná-lo um vetor. Vamos dividir isso para usemos apenas x e. Vamos criar essa variável, editar com incenso e expor em sp R A razão por trás disso é porque estamos em formato isométrico e com uma câmera inclinada. E isso significa obter a rotação correta e analisar para encontrar nossa velocidade, onde deveria nosso bullet co não é tão simples quanto um jogo pop-down Então, por enquanto, nossa velocidade aqui usaremos x e y. Mas acho que essas poucas informações serão úteis para mais tarde De qualquer forma, a próxima coisa que devemos fazer é verificar nossa colisão. Então, atingimos um inimigo? Vamos selecionar a esfera. Vamos começar eventos de sobreposição. E vamos verificar se o outro ator é válido antes de tudo. Porque se estivermos atirando em um inimigo que está morrendo, por exemplo, ele será destruído, não devemos fazer nada. Agora, a próxima coisa que devemos perguntar é: o outro componente tem puxão A etiqueta seria inimiga, e criamos uma ramificação. E se for um inimigo, devemos realmente aplicar dano. Vamos aplicar um dano de um. Não se esqueça de conectar o agente de danos. Então, o que vamos fazer é agir. Esse erro. Um T, provavelmente. E o que usaremos é o fim da marca novamente, como fizemos na explosão. Mas desta vez, vamos fazer com que seja muito menor, 444. E a localização seria a localização do nosso ator. Agora, se não atingirmos um inimigo, vamos apenas gerar Dmter Não vamos causar danos, a menos que tenhamos um terreno destrutível e depois sejamos reatores Então, atingimos um inimigo, aplicamos dano, geramos uma partícula Não atingimos um inimigo, apenas geramos uma partícula e destruímos Então, haveria um problema com essa configuração: quando estamos gerando uma bala, se ela não atingir nada, ela continuará para sempre Bem, na verdade não, mas sim. O que vamos fazer é acessar os padrões de nossa classe e nossa vida útil, e vamos configurá-la para Não sei Eu acho que é o suficiente. Agora, só para testar nossas balas Quando terminarmos, acho que isso seria para este. Eu vou te ver na próxima. Adeus 101. Tiro de jogador e efeitos visuais: Olá, bem-vindo de volta ao Game Design Workshop rail engine five Procedural Dungeon action at Ps Anteriormente, criamos nosso bullet blueprint. Oh, usamos uma partícula para mostrar o efeito de trilha e o efeito de bala E usamos a esfera para detectar colisões se estivermos colidindo com o meio ambiente ou com um inimigo E usamos a luz pontual para mostrar uma pequena luz vermelha não branca no chão enquanto a bala viaja Usamos o movimento do projétil para definir nossa escala de gravidade, e ele será responsável por controlar nosso movimento, nossa velocidade de bala, o movimento de nossas balas A partir de suas configurações, desligamos a escala de gravidade e definimos a rotação que segue a velocidade Nosso ator sempre olha para a velocidade. Agora, ao começar a jogar, não armazenamos. Estamos definindo a velocidade de movimento do projétil para uma variável que criamos como velocidade, e estamos usando x e y Nós o tornamos editável com incenso e exposto na desova. Quando estivermos gerando a bala, daremos velocidade daremos Depois, concluímos o evento de sobreposição que estamos perguntando se nosso ator com o qual colidimos é válido, que estamos verificando, basicamente, se o ator com o qual colidimos está pendente de ser Portanto, se estiver pendente de ser destruído, não faça nada com ele. E então verificamos com um galho se ele tem a etiqueta E, o que significa que é um inimigo. Então, aplicamos dano, se não for um inimigo, estamos apenas gerando uma partícula que também fazemos quando aplicamos dano, e então destruímos Por fim, mudamos a vida útil para, eu acho, 5 segundos, 5 segundos, para que nossas balas não saiam para sempre quando estivermos atirando Agora, vamos completar nosso evento spa bullet. Na verdade, função de bala de spa. A primeira coisa que precisamos fazer é criar um focinho falso E a razão é que, se formos até nossa malha esquelética, a busca pelo focinho Podemos ver que eles estão colocados em posições muito estranhas. Isso porque eles usam habilidades específicas, horários específicos, uma forma muito específica de serem usados. Então, não vamos usar isso. Vamos trapacear um pouco e criar um músculo em uma determinada posição que nossa arma alcançará E como vamos fazer isso? Vamos adicionar um componente senoidal ao nosso projeto e usar sua localização, vamos chamar esse músculo, vamos chamar esse músculo Cada local para gerar nossos efeitos para nossa filmagem. Então, vamos à nossa janela de exibição e ao local. Na verdade, tenho uma localização em mente que testei e parece boa. Vai ser 128 em x, vai ser -28 em y, e vai ser ou na verdade e oito em Z. Então é aqui que nossa arma alcança e está na ponta da arma, que é onde nosso músculo deveria estar Então, vamos voltar ao nosso marcador de spam e, usando essa variável muscular, obteremos a localização, a localização da palavra E vamos até um metro neste local. Vamos conectar esses dois locais. Para o medidor eletrônico, vamos usar o last shot muzzle flush. Há muito disso. Mas acho que só há um com esse nome. Os demais são locais, o que significa coordenadas locais e a cobertura. Então, sim. Última dose de muzzle flush. Agora, se formos brincar com isso, veremos instantaneamente um problema com o ze flush Novamente, é a rotação que deve fazer nossos personagens rodem, porque agora é o oposto. E também é um pouco grande. Eu queria testar o tamanho também. Então, vamos voltar. Vamos definir sua escala para 0,3. E a rotação. Vamos fazer nossa cápsula girar porque é para lá que estamos olhando. Mas agora isso deve estar funcionando bem. Estamos nos movendo depois de filmar. Mas isso é porque não fizemos as restrições movimento e, basicamente, os controles do jogador no controle. Porque todos os nossos controles são basicamente o mouse. Portanto, o mouse precisa de um pouco de código para decidir o que ele faz. Agora, vamos parar o jogo, vamos voltar. E a próxima coisa que vamos fazer é gerar novamente um metro Mas desta vez anexado. E desta vez, vamos usar o músculo para. Um lugar que segue porque esses pontos, esses são pontos de contato, que são os nomes dos soquetes do esqueleto que vimos acompanham o movimento do esqueleto onde Mas vamos colocá-lo novamente na localização do focinho E vamos manter a posição da palavra. Sim, apenas mantenha a posição da palavra. A rotação realmente não importa. E para o artigo, vamos selecionar o último ponto exuberante E vou modificá-lo um pouco porque não queremos o real Vamos encontrá-lo primeiro, local, por último Acho que é isso. Eu o quero trancado. Existe um desbloqueado Sim, existe. Um músculo baleado e bloqueado. É disso que precisamos. Vamos até essa partícula. O que vamos mudar é um detalhe muito pequeno. Vamos usar a droga e vamos mudar o valor de dois para, digamos, 0,5. É um pouco mais do que isso, menos resistência ao ar. Vamos fechar essa partícula. Vamos voltar. Pode ser um pouco grande. Vamos dar uma olhada. Talvez queiramos relaxar um pouco Nem coma. Vamos depurar isso. Bem, vamos voltar ao nosso projeto Veja o que está acontecendo. Ok, eu não o conectei ao componente. Estamos definindo qual osso bloquear, qual osso fixar, mas não estamos definindo qual malha. Então, vamos usar essa malha. Comp save. Então, vamos voltar e testar. Acho que o tamanho seria grande. Turno. Doente. Nós temos fumaça. Tudo bem. Certo. Está funcionando corretamente em todas as direções. Essa é outra maneira de fazer com que algo siga sua rotação. Você o anexa ao seu personagem. Agora, vamos continuar gerando nossa bala. Vamos telefonar da aula. Vamos dividir a transformação. Vamos selecionar nossa bala. A palavra localização deve ser nosso músculo novamente. E agora precisamos de uma velocidade de tiro. Agora, por enquanto, vamos usar apenas para ver nossas balas Vamos usar o vetor realmente avançado da cápsula. Deixe-me trazer a cápsula aqui. Vamos avançar para o vetor. Vamos multiplicar isso por uma velocidade que eu não tenho e 101.000 Vamos nos conectar à velocidade. Vamos filmar. Estamos atirando de forma irrelativa ao local onde nosso mouse está, estamos atirando e nossa bala Então, por fim, é claro, precisamos de um som Então, vamos aqui, e depois de gerarmos nossa bala, tocaremos o som D e usaremos o som do som da pistola Agora devemos ouvir o som das filmagens. Posso verificar se isso danifica isso, o que eu acho que não acontece. Deveria ser cinco comprimidos, não deveria? Então, vamos verificar isso. E acho que já sei o que é. Deveríamos ir até o portão do inferno primeiro. Os demônios puxam. Você vê? Temos o ator Tug Es na bala, eu peço a etiqueta do componente Portanto, não deveria pedir um componente. Deveria perguntar por um ator. Como tag E do componente. Mas agora, devemos ser capazes de filmar alguma coisa. Se conseguirmos chegar a um... há dois portões do inferno ali. Vamos embora. Sim. Não podemos destruir os portões do inferno. Estamos chegando lá. Oh, eu acho que seria um bom ponto de parada para este. Eu quero ver você na próxima. Tchau. 102. Animação e mecânica de morte do jogador: Olá, bem-vindo de volta ao workshop de design de jogos e de RPG de ação em Dungeon com cinco procedimentos reais RPG de ação em Dungeon No último, terminamos com a desova de nossa Nós terminamos. Entre aspas , porque precisamos da velocidade correta Então, o que fizemos foi gerar um medidor eletrônico em um focinho falso Criamos um local falso que chamaremos de focinho na frente de nosso personagem e geramos um medidor eletrônico lá E usamos a rotação das tampas para girar esse metro, que é o medidor que faz nosso focinho piscar Ah. Em seguida, começamos a gerar um emissor conectado e o acoplado também era a malha no músculo do soquete Então, temos nossa fumaça seguindo um pouco de nossa arma. Nosso movimento em nossa arma. Em seguida, criamos nosso ator de franga com a localização da prole como sendo a palavra localização do focinho e, em seguida, criamos uma velocidade falsa na frente E então tocamos um som. Agora, antes de continuarmos e fixarmos movimento do nosso personagem e para onde ele está realmente mirando, devemos completar o último Vamos colocar um comentário aqui. Animal de estimação Na verdade, atire. Eu estaria mais correto. Agora, a última coisa que precisamos é do nosso sistema de saúde. Nós o criamos até certo ponto. Mas não projetamos o que acontece. Não temos nosso stand. Não temos muitas partes que acontecem depois de sofrermos danos. Então, vamos continuar com essa lógica. A primeira coisa que dissemos é que estrelaremos nosso personagem quando recebermos algum dano. E isso significa que esse também deve ser um período de carência que não fiquemos atordoados; caso contrário, para que não fiquemos atordoados; caso contrário, ficaremos presos quando estivermos recebendo munição contínua , por exemplo, pela torre que dispara continuamente ou se muitos inimigos nos atingirem ao mesmo tempo Vamos colocar um galho aqui e vamos perguntar: podemos ficar olhando Vou promover essa variável, e vamos chamá-la de C B. Agora, na verdade, esse é um nome muito ruim. Vamos ligar para esfriar. Se Sn estiver esfriando, nós esfriamos, se S não estiver esfriando, fazemos outra coisa. A primeira coisa que fazemos é colocar o Stan no modo de resfriamento. Mas se isso disparar novamente, é a partir do t. A segunda coisa que devemos fazer é mudar nosso estado. T. A próxima coisa que devemos fazer é tocar um som de calor. Um som dois D. A razão pela qual estamos tocando apenas no Stun é que não queremos que cada calor produza um som, mas todo calor que nos atormenta deve emitir o Mas vamos usar o calor. Eu, Herm. Vamos usar um Hert Mel. E então vamos fazer uma pergunta se estamos mortos. Porque se não estivermos mortos , faremos outra coisa. Se estivermos mortos, vamos jogar morte, e jogar morte, se promovermos esse arial. Tudo isso morto. Vamos chamar isso de morto. Vamos criar um evento personalizado. Toda essa morte e chame isso de mentira. Agora, se não estamos mortos, queremos reproduzir um efeito de calor. Então, mostra visualmente também que nosso personagem recebeu calor. Nós fazemos isso. Vamos criar outra montagem. Bem, está pronto para aquecer. Na verdade, precisamos ser exemplares. Então, temos essa frente de reação térmica. Vamos criar uma montagem a partir de. Vamos entrar na montagem, os do grupo serão os slots superiores. Parte superior do corpo. Vamos voltar à nossa personagem e fazer sua montagem. Vamos selecionar nossa malha esquelética. E nossa montagem. Ele reage frontalmente. E agora, o que vamos fazer é não passar por essa cadeia de eventos, ou seja, quando pararmos de jogar as montas, fizermos as próximas coisas, escolheremos as completas e as interrompidas Então, se algo interrompe isso ou isso é concluído, então vamos fazer outra coisa. O que vamos fazer é obter o estado do nosso jogador, qual estado do jogador, porque esse resultado variará de acordo com o estado do jogador, um pouco, não muito. E se estivéssemos no normal A ou eu, queremos voltar à posição normal. Vamos mudar de estado novamente. Ao normal. Se fôssemos normais, se estivéssemos mirando porque isso interrompe nossa Se estamos tentando atirar e algo atira em nós e nos atinge, isso interrompe nossa mira, então devemos mirar novamente, e da mesma forma E o que vamos fazer depois vai atrasar um pouco. Digamos que 2,5 segundos. E então vamos configurar o não resfriamento, não gosto desse ruído e s. Eu não legal, pode ter sido um C. De qualquer forma, compile e salve Mas, basicamente, essa é nossa contagem regressiva para quando poderemos ficar surpresos novamente Agora, no caso, estamos surpresos. Se não saíssemos do nosso turno. Estou mirando e atirando e estou ficando atordoado. Ba, este é o caso quando estamos relaxando. Não podemos estar neste caso se ficamos surpresos com o que aconteceu aqui Eu conectei Eu conectei as coisas erradas. Lu enquanto isso acontecia. Isso está aqui. Então, agora somos estrelas, estamos nos levantando e mudando de estado. Então, quando estamos mudando de estado, não podemos estar na mira, então estaremos em pé. Mas se já estamos de pé e estamos mirando, isso deve interromper nossa mira, aconteça o que acontecer Mas se ficarmos atordoados e ainda estivermos pressionando a tecla Shift, devemos retornar ao nosso objetivo Mas vamos colocar um galho aqui. E se for falso, vamos nos conectar aqui, e se for verdade, vamos nos conectar aqui, e a condição é se ainda estamos mirando, então mire para baixo, se ainda estivermos pressionando a tecla shift Basicamente, quando estamos atordoados, não somos interrompidos de Mas se estamos mirando e já estamos atordoados , somos interrompidos Na segunda vez que algo nos ataca, na verdade quebramos nossa mira, que seria uma mecânica escondida dentro do jogo De qualquer forma, vamos continuar com nossa parte triste, nossa morte quando perdemos, o que quer que aconteça tem que acontecer uma vez. Então, dois de uma vez. A próxima coisa que devemos acontecer tocar o som da morte, então tocar o som para D. Na verdade, não deveria ser a primeira coisa, mas vamos emitir aquele som horrível logo no começo Acho que se chama dor. Dor dois. Bem, podemos escolher esforço, dor ou, provavelmente, essa é mais agressiva, mais morte. Agora, deveríamos interromper o movimento aqui, mas ainda não fizemos a parte do controle, então vamos fazer isso mais tarde e, claro, mudar nosso estado para morte, que é o padrão. E agora precisamos reproduzir uma animação. Então, vamos encontrar nossa animação de morte, então será a morte. Como uma morte para trás e uma morte para frente, acho que o avanço é melhor maioria dos casos, porque o inverso pareceria estranho em alguns casos, mas vamos criar uma montagem de animação a Vamos mudar sua ranhura para a parte superior do corpo. De novo, R, certo? Vamos voltar ao nosso personagem e fazer uma montagem. Vamos selecionar nossa malha esquelética. Vamos selecionar a montagem. E vamos remover nosso widget de jogabilidade da tela. Portanto, não há mais partes de saúde nem nada. Modo de jogo de cima para baixo. Aqui estamos. Jogabilidade. Mude-se do pai. Isso acontecerá instantaneamente. Não vamos esperar que a montagem termine nem notificaremos nada. O que precisamos fazer é criar um game over screen. Mas vamos fazer isso na próxima. Adeus por enquanto. Te vejo então. 103. Sistema de detecção de mouse: Olá, e bem-vindo de volta ao Game Design Workshop engine five Procedural Dungeon Action ApS Anteriormente, paramos com nossa função de morte, evento de morte, na verdade. E dissemos que precisamos de um fim de jogo que basicamente mostre quando morremos. Mas vamos começar do começo. Criamos a continuação de qualquer evento de dano que precisávamos adicionar e remover a saúde. Perguntamos se já estamos no Stun, se estamos no Stun cooldown. Se não estivermos no modo de resfriamento de atordoamento , estamos ativando o resfriamento do sol e ativando nosso modo de resfriamento para atordoamento E então tocamos um som, que indicará ao jogador que estamos atordoados Se estivermos em modo de atordoamento , vamos direto para perguntar se estamos mortos? Se estamos mortos, continuamos, somos o evento da morte. Se não estivermos mortos, estamos reproduzindo uma montagem de animação para mostrar que fomos atingidos, mas ela pode ser interrompida caminhando, se movendo ou qualquer outra coisa e E de forma completa ou ininterrupta, estamos mudando com base em nosso estado, o que fazemos? Então, basicamente, criamos uma mecânica oculta que, pela primeira vez, quando estamos mirando e atirando, voltamos à nossa mira para que possamos atirar Mas se estivermos no segundo golpe, o que significa que já estamos mirando porque ela não mudou de estado porque estávamos manchados , estamos voltando ao normal e interrompendo Em seguida, esperamos 2,5 segundos para ativar e desativar o atordoamento, então esse é o nosso período de carência para não ficarmos Em nosso evento death, fizemos isso uma vez, tocamos o som da morte, um som horrível, mudamos o estado para morte e tocamos nosso moa da Agora, vamos criar nosso widget Também removemos do widget principal o widget de jogabilidade, para que não vejamos mais a parte de saúde nem nada Ah, agora vamos criar nosso widget para nossa tela de game over basicamente Vamos para a interface do usuário. Vamos clicar. Vamos ver os widgets do usuário, o blueprint do widget do usuário e vamos acabar VÁ. Vamos abrir isso. E vamos trazer um Cvass. E uma mensagem. Escreva o fim do jogo. Vamos ancorá-lo no meio. Vamos compensar a posição x dois menos 175. Vamos mudar de posição por duas moscas. Digamos que tamanho x três e tamanho 89. Agora, vamos definir nosso tamanho em seis. Parece um pouco maior. Vou deixar em negrito. Vamos digitar por texto, fim do jogo. Na verdade, acho que é uma palavra. Depende do fim do jogo ou do fim do jogo com uma ou duas palavras. Se eu gosto de duas palavras, parece melhor. É um pouco definido com base no r, mas está tudo bem. Eu não acho que será perceptível. Agora, a próxima coisa que precisamos é descrever nossa pontuação. Vamos trazer um texto e vamos embrulhá-lo com uma caixa horizontal. Vamos duplicar esse texto. No primeiro texto, vamos digitar quatro pontos de base dois. E o próximo texto deve ser, digamos, um, dois, três, quatro, cinco, 50. Agora, vamos fazer com que a caixa vertical seja capaz de incluir isso Então, vamos ancorá-lo também no meio. Vamos definir o deslocamento menos 125. Aos cem, deveriam ser dois. É grande, mas está bem. O que podemos fazer é deixar isso cimentar os dois no campo. Esse alinhamento à direita é muito central Falso alinhamento à direita. Sim, isso já parece melhor. Isso será para nossa pontuação. Vamos criar uma variável do nosso texto 00 e vamos chamá-la de pontuação sublinhada É uma variável. Podemos configurá-lo para alguma coisa, e agora o que precisamos é de outra caixa horizontal. Traga-o para as cavas. Vamos definir sua gravata visualmente. Queremos que seja aqui embaixo. Nesta parte da tela até aqui, talvez. Vamos definir as compensações. Tudo se encaixa aqui. Agora, o que vamos colocar aqui dentro será uma caixa vertical. E dois espaços. Assim, podemos controlar a caixa vertical onde ela se alinha, e o espaço deve ser um no início, um abaixo da caixa vertical. Assim, podemos verificar tudo. E vamos mudar os dois espaços para 0,1. Então, demos esse espaço vazio nas laterais. Dentro da caixa vertical, vamos também colocar dois espaços e uma caixa horizontal novamente entre os dois espaços, e vamos definir Esta caixa, na verdade será a caixa que está segurando os botões. Que também precisam de alguns espaços. Vamos trazer os botões e os espaçadores. Precisamos de dois botões, um, dois. Vamos trazer alguns espaçadores novamente. 12, três, e vamos selecionar tudo para sentir. Certo? Agora, vamos mudar as laterais para 0,1 p. Acho que, por padrão, isso nos dá uma boa bacia para nossos botões. Agora, vamos escolher enviar o texto O aqui e outro aqui. Vamos chamar isso de menu principal. E o outro, vamos chamar isso de jogo de libras. Na verdade, simplesmente desista. O que vamos fazer é ir até, na verdade, precisamos pegar esses dois botões e selecionar cada um deles. O evento clicado. Vamos nomear esses padrões porque não tenho ideia do que é qual Então esse é o menu B, e esse é o B qui Agora os eventos são nomeados, então esse é o questionário que jogamos E este é o menu principal que abrimos no nível. Lembre-se do loop sobre o qual falamos no começo. Esse seria o nome do nosso nível. Vamos copiar e colar, é o nível do jogo. Pressionar recarrega tudo nos leva ao menu principal e sai Agora, o que queremos construir obter nossa pontuação T e uma xt. Vamos conectá-lo aqui. Nossa pontuação, o que usaremos para uma pontuação. Vamos usar nossas moedas para marcar pontos. Então, vamos obter um modo. Vou lançar de cima para baixo. Vamos converter para fundição pura e pegar nossas moedas. Total de moedas. Vamos conectar isso aqui. Então, nossa pontuação são nossas moedas. Vamos compilar e testar nosso sistema de morte. Na verdade, antes de verificarmos nosso sistema de morte. Vamos até nosso personagem bem rápido e mudar nossa saúde Mx para uma Então, morremos instantaneamente em uma armadilha e não esperamos por dez tiros Na verdade, vamos morrer ao lado disso. Não estamos morrendo. Vamos moldar o que está acontecendo. Isso ocorre porque estamos verificando a morte aqui, a variável morta, que devemos verificar se nossa vida é igual à morte, nossa vida atual é igual ou menor que zero. Se for, vamos também isso realidade. Agora, devemos ser capazes de morrer. A armadilha aqui. Oh, ele morreu, mas ainda podemos nos mover, como você pode ver. Mas não podemos sofrer mais danos. Mas nós morremos. Agora podemos nos mover porque precisamos fazer uma função de parada de movimento. Mas para fazer uma função de parada de movimento, precisamos controlar como nos movemos. Além disso, o widget não está aparecendo porque não o chamamos Então, vamos para a nossa morte. Vamos primeiro ao nosso jogo, nossa seção de criação de widgets Vamos criar um respiradouro personalizado. Vamos chamar esse evento de GO. Vamos copiar essa parte daqui e do controle de reprodução. VÁ aqui. Vamos promover essa variável. Na verdade, não precisamos promovê-lo. Porque vamos simplesmente reiniciar o jogo depois. Acabamos de abrir o menu principal novamente. Então, somamos a porta de visualização e, em seguida, vamos para o nosso modo de jogo e chamamos GO. Agora, temos a tela da morte. Sim. Tudo está um pouco diferente S. Mas está tudo bem. Podemos deixá-los um pouco confusos. Isso não é um produto final. Então eu acho que é isso para este. Na próxima, vamos consertar nosso movimento, que temos toda essa bolsa por todo esse tempo. Basicamente, quando estou mirando fora do mapa, agora que chegamos a esse lugar, pinte-o Se eu trouxer o registro de mensagens aqui, registre o registro de mensagens na janela A, registro de mensagens. Vamos esclarecer isso. Como isso vai acontecer. Você pode ver que não há erro, nenhum erro, nenhum erro. Se eu mover o mouse algum lugar onde ele não atinja nada. Deveria estar produzindo o erro, mas não está. Onde está esse erro? Eu realmente pensei que era isso. Agora, o que está acontecendo? Por que não temos, aqui está. Ok, então foi se eu clicar, vamos ler o erro. É melhor ler os erros primeiro. Uma entrada de movimento BP ou um acesso que não está tentando ler a propriedade, chame fun get p. Então, basicamente, ainda não possuímos nosso telefone É por isso que isso está acontecendo porque quando começamos a jogar e geramos o telefone, ainda não o possuímos . Tudo bem. Agora, outra coisa que quero mencionar é que se você tiver esse pool de streaming de textura acima de nove K, isso pode deixar seus gráficos um pouco ruins em alguns lugares. Agora, se você tem um computador forte, o motivo é que esse personagem tem quatro texturas de resolução K e, por padrão, temos muitas outras coisas com alta textura Como você pode ver, esse ícone aqui ficou um pouco confuso dessa vez Isso se deve ao pool de streaming de texturas. Então, como corrigir isso? Vamos pressionar a tecla tile, inx para um, e vamos pressionar R dot M. Dot texture. Não. Vou deixar que encontre o comando, texturas, streaming é piscina de vapor de texto O tamanho do nosso pool de streaming. Se definirmos isso como 3.000, por exemplo, nosso erro desaparecerá Nossas texturas também ficam claras. Mas isso significa que ele dedica três K Ram às nossas texturas. Lembre-se de que isso é V Ram, então essa é a memória da placa de vídeo. Não é a memória do computador. Se sua placa de vídeo não tiver muita RAM, eu não recomendaria aumentar o tamanho. Fora. Isso seria para este. Na próxima vez, vou ver você corrigindo esses erros separando o movimento e atirando com o mouse Vamos te ver então, adeus. 104. Interação avançada de mouse para itens: Olá, e bem-vindo de volta ao Game Design Workshop, curso cinco procedimentos do Real Engine RPG de ação em Dungeon Anteriormente, terminamos com nosso game over screen. Adicionamos nosso texto de fim de jogo, um texto para a pontuação mundial e um texto para nossa pontuação. Isso é um pouco diferente entre eles, mas não importa se você quer passar algum tempo consertando as posições, fique à vontade Agora, usamos dois botões para nosso Qi e para o menu principal, que reinicia nosso jogo Para reiniciar nosso jogo, usamos o nível aberto pelo nome, que reinicia tudo como falamos, e mostra novamente o menu principal e exclui tudo o que fizemos O Eu anterior. Agora, para nossa libra, acabamos de usar um jogo de libras, e pronto Para nossa pontuação no início do Construct, obtemos nosso total de moedas e definimos o texto. Agora, vamos começar com algo mais interessante. Vamos para o nosso controlador de player de cima para baixo. Neste controlador, vamos encontrar uma função chamada get location sob o cursor. Eu acabei com isso no começo. É esse aqui. Também podemos encontrá-lo aqui. Na verdade, isso está sob o dedo. Queremos, sob o cursor, este. Não usaremos o dedo inferior, então podemos excluí-lo e tudo o que for usado. Onde foi usado. Portanto, também não precisamos do evento de toque até que esteja tudo bem. Então, o que nossa localização get sob o cursor faz até agora? Então, o que ele faz é usar o resultado de obtenção de calor sob cursor por canal, e o canal fornece visibilidade e traços complexos, e nos fornece o resultado do calor. Como funciona nos bastidores, na verdade, cria uma linha de rastreamento da nossa câmera até a posição do cursor na tela e leva em consideração a profundidade e se atinge algo ou não. Então, o que queremos fazer na primeira etapa é duplicar isso, mas com uma esfera de rastreamento, para que possamos aumentar um pouco o tamanho do cursor do nosso clique Agora, mais uma razão pela qual vamos usar isso é que queremos ser capazes de criar uma lista que ignoraremos em caracteres. Por exemplo, nosso jogador. E falando sobre isso, vamos ao nosso personagem de cima para baixo. Na verdade, vamos criar uma variável primeiro nos controladores. Vamos chamar isso de referência. Como você pode ver, já está para mim no personagem VP de cima para baixo Se você precisar alterá-lo para P, caractere de cima para baixo. Uma referência de objeto. Isso porque eu estava testando algumas coisas e a última variável foi deixada aqui. Então, agora que temos nossa referência de jogo, vamos preenchê-la em nosso personagem de cima para baixo no início do jogo Vamos dar uma chance ao jogador. Vamos definir a referência de jogo e vamos nos conectar à referência de reprodução. E agora está povoado. Nossa referência está preenchida. E vamos voltar ao controle e, a partir de nossa referência de jogo, obteremos. Câmera, vamos obter uma localização mundial. Existe outra maneira de tornar nossa câmera irrelevante para a planta do jogador Poderíamos ter usado o gerenciador de câmeras. E a partir disso, poderíamos ter obtido a localização do AC, que nos dá a localização da nossa câmera. Mas dessa forma também está bem, é apenas tornar confiável para o nosso jogador E esse é o nosso começo. Agora, vamos trazer um traço esférico. Canal duplo. Vamos definir seu raio para 20 Nosso fim deve ser nossa localização, nossa localização de aquecimento do mouse. Mas e se o mouse não bater em alguma coisa? E se o mouse não estiver mirando em nada? Então, vamos ter uma filial para perguntar isso primeiro. Estamos odiando? Se estivermos aquecendo, crie a esfera. Se não estivermos aquecendo, faremos outra coisa. Vou desconectar essas coisas aqui porque vamos alterar os resultados de aquecimento com base em nossas necessidades Agora, o que fazemos quando não estamos odiando nada? Bem, o que fazemos é a posição do mouse, e também vamos no nascimento b para o mundo. A realocação para o espaço de palavras. A razão pela qual vou fazer isso é porque, quando não estamos atingindo nada, como podemos ver agora, precisamos reconectar algumas Certo? Como podemos ver agora, quando estou clicando em nada, nosso personagem não está se movendo, e podemos ver que o local está aqui. Podemos ver onde ele está realmente pensando, estamos aquecendo. A música tem que ser baixada. Já que quando está retornando falso, isso na verdade retorna zero. Precisamos mudar isso. Precisamos ser capazes de nos mover em direção ao mouse. Então, o que faremos é adicionar esse local, a palavra localização é uma multiplicação, não uma adição Esse é o anúncio. Tem esse símbolo de baixo, o torna um anúncio. Agora, porém, vamos multiplicar. Vamos multiplicar a direção. E vamos mudar isso para um número inteiro e vamos dar um intervalo nessa direção 3.300. POR 3.000. Vamos considerar o alcance da nossa câmera é de cerca de dois k, então queremos que ela seja pelo menos menor que o caractere, pelo menos na mesma altura do chão. Então, aproximadamente 3.000 estariam bem. E o que vamos fazer é promover essa variável, uma variável local. E vamos chamar isso de citação. Por exemplo, se eu quiser me conectar, vamos nos desconectar um pouco com a linha de rastreamento Se eu quiser conectar isso às cataratas, e depois conectá-lo aqui, e obter nossa localização de aquecimento ou a saída. Agora, e conecte isso aqui, agora devemos ser capazes de caminhar em direção aos penhascos No momento em que clico aqui, não, por que isso está acontecendo? Não faz sentido. Esse não é o controlador. Qual é o código original? Isso não acontece porque o código que é bal padrão diz que ele só se mova quando passarmos por um calor. Então, se eu conectar isso também, devemos caminhar em direção ao penhasco Sim, estamos caminhando em direção à nossa ruína. Está funcionando. Eu posso ver o chão aqui caindo. Vamos consertar isso mais tarde, ou vamos deixar como estão ? Realmente não importa. É apenas posicionar as paredes do ladrilho. Então, esse não é o controlador. Agora, acabamos de corrigir problema de que, se não estivermos enfrentando, ainda podemos avançar em direção ao nada Mas esse é apenas um dos problemas. Vamos desconectar isso, e vamos reconectar isso e desconectar Então, se não estamos batendo em algo, estamos configurando a localização do calor para qualquer que seja o mouse e a parte inferior E agora vamos continuar com essa lógica. Novamente, vamos perguntar, atingimos alguma coisa? Vou mudar isso para a câmera, o canal de rastreamento. Se não atingimos algo , significa que o mouse aquece algo, mas não devemos prestar atenção porque estamos em um canal diferente. Ah, isso significa que nossa localização deve se tornar uma localização de aquecimento do mouse. Então, vamos mudar nossa localização de aquecimento para a localização de aquecimento do mouse. Agora, como você pode imaginar, o espaguete aqui será maravilhoso ou um prato completo Vamos tentar mantê-lo o mais limpo possível. Vamos continuar. Como podemos ver, temos uma saída de calor. Vamos renomear isso para calor inimigo. Não, porque da forma como nosso sistema vai funcionar, não importa se é um inimigo atingido ou não se moverá, nós nos moveremos de qualquer maneira, não de qualquer maneira. Não. O que vamos fazer é promover essa variável, variável local, chamar isso. Isso. Inimigo é temperatura. Porque sabemos que temos um problema com o mesmo nome de nome. Vamos definir aqui que o inimigo não foi atingido. Seria isso se não tivéssemos uma câmera e se não tivéssemos filmagens. Agora, vamos filmar mais tarde. Vamos partir do ponto de vista de que não atingimos nada e não é um inimigo. Estamos apenas clicando no chão. Vamos perguntar: o que estamos encontrando é um item? Para fazer isso, vamos usar uma sequência. Porque o que quer que aconteça, 01 é a saída par, e nosso zero é, na verdade, a saída par, e nosso um seria outra coisa. Agora, isso realmente não deveria estar conectado aqui. Este estaria conectado aqui, porque não queremos mudar nossa localização de aquecimento, mas queremos desligar a temperatura de aquecimento do inimigo, que é desativada por padrão Então, mesmo se o conectássemos aqui, isso realmente não importaria porque, por padrão. Mas sejamos justos. Então, desligue isso. Agora, quando estamos verificando um item, devemos verificar se nosso ator térmico é válido. Vou quebrar nosso resultado de calor. Vou trazê-lo aqui e perguntar se o outro ator é válido. Esse seria o início de nossa jornada para detectar itens. Uma coisa que devemos fazer é, antes de continuarmos com o código, ir até nossos itens interativos até nosso baú grande, colocar o baú aqui Com o que mais estamos interagindo? Os adereços do quarto. Acho que é isso, e os itens, é claro, vamos para os itens e o item BP Vamos até Big chest plus defaults e procurar por tug. Vamos colocar a etiqueta I. Eu vou salvar isso, e vamos colocá-la também no baú. Eu procuro um item interativo, não sei. Interferência, este é o puxador que eu escolhi. Você pode escolher seus próprios rebocadores, é claro, lembre-se de colocá-los corretamente. Itens e baús da tag I porque podemos clicar neles como um item Agora, eu acho que este é um bom ponto de parada para este. Continuaremos na próxima com nosso código de quatro itens. Adeus. 105. Sistema de interação com o mouse e entradas: Olá, e bem-vindo de volta ao Game Design Workshop Real engine five Procedural Dangon Action Anteriormente, continuamos com a localização do mouse em Cursor. Função: basicamente, o calor do mouse resulta no resultado personalizado do calor do mouse que estamos criando, e começamos colocando o calor sob o cursor. Verificamos se estamos amarrando algo, se aquecemos algo e, se não o fizemos, se aquecemos algo e, se não o fizemos, estamos posicionando o mouse, retirando o anel para a localização do mundo e obtendo um ponto nessa direção, 3.000 na verdade no alcance dessa direção e definindo isso como nossa Agora, se atingirmos alguma coisa, estamos criando uma corrida esférica com raio de 20 que começa na nossa câmera e termina no resultado do calor do mouse Estamos perguntando se acertamos em alguma coisa novamente , porque desta vez estamos verificando o rastreamento da câmera. Agora, se atingimos algo, estamos ajustando o calor, se não atingimos algo, estamos verificando a localização, estamos configurando a localização para o resultado do cursor do mouse, resultado, e estamos configurando que não atingimos um inimigo. Em seguida, precisaremos fazer outras coisas e receberemos a nota de devolução. Mas a próxima coisa que deveríamos fazer, e começamos a fazer, era nosso sistema para verificar se estamos pairando alguma coisa ou E a primeira ação sobre isso é obter o resultado do nosso ator térmico. Além disso, passamos a adicionar ao nosso baú, nossa caixa, nosso baú, nosso baú grande e nossos itens, o puxador Oh, essa é a próxima coisa que verificaremos depois de verificarmos se o ator é válido. O ator tem o puxão I. Então, um puxão e o galho, e a letra I, e nós completamos esta pergunta Agora, vamos usar um galho de forse, que seria se o que estamos atingindo não fosse um item O que precisamos é de uma função. Então, vamos criar uma função. Vamos chamar essa função de ear em elect. Porque se não estamos atingindo algo com ele, então não temos um alvo Para preencher essa função, precisamos de duas variáveis. Não são locais, são normais. Nós vamos fazê-los e esse será o tipo de atuação. Esse seria nosso alvo anterior. Digamos que passemos o mouse porque estamos passando o mouse sobre os itens. Vamos nomear o outro progenitor. Então, o que fazemos com esses itens? Lembre-se de que, quando criamos o item PP, criamos essas duas mensagens de início e término , mensagens da interface de esquema Portanto, quando não estamos aspirando nosso item, devemos passar o mouse sobre todos os itens que estávamos Então, obteremos nossas prévias e obteremos nossas atuais E se nossas visualizações forem válidas, aqui, mouse sobre a mensagem Em seguida, verificaremos se o foco atual é válido. E vamos conectar o que não é válido do mouse sobre nós e, claro, também do mouse final Nós vamos fazer a mesma coisa com este. Vamos copiar a base este ano. Aproxime isso um pouco e terminaremos de passar o mouse sobre o que estamos pairando no momento E então vamos definir o atual como novo e o anterior como nulo, eles não são mais válidos. Vamos conectar o inválido também aqui. Caso isso seja válido e não seja válido, ou cobrimos todas as nossas bases. Agora, vamos voltar à nossa função e vamos chamar essa nova função. Item do carro selecionado em falso. Então, quando estamos cobrindo algo e não é um item, limpamos a seleção do item. Agora, se estivermos passando o mouse sobre algo, precisamos de uma pergunta. Nosso foco atual é o mesmo que o headactor? Isso é igual ao hover atual? Esse é o fator. E se for verdade, não fazemos nada. Se não for verdade, passaremos o mouse atual e voltaremos e voltaremos porque isso significa que lançamos algo novo Mas somente se isso for válido, se nosso último não foi, precisamos verificar se é válido. Porque, se for válido, precisamos definir o cursor do mouse para o foco atual Se não for válido, então esse erro de aquecimento, eu diria que você está tentando definir nulo como nulo Eu não gostaria disso. Agora, o que precisamos fazer é configurar nosso hover atual para aquecer um pouco Ace Não sei se você cortou. Eu tentei me conectar este ano e você não me deixou. E a razão é que esse é um ator, mas esse é um personagem de cima para baixo. Mudança. Referência do ator, altere o tipo de variável. Ótimo, sem falhas. Arent Hover e Previous serão ambos atores. Car Hover não deve ser o personagem de cima para baixo. Faz sentido, eu acho. Eu vou trazer isso aqui. Obviamente, se nosso foco atual não for válido, isso significa que vamos deixá-lo diretamente para o nosso ator atual E precisamos começar a passar o mouse sobre esse ator. Mas o ator sabe que está pairando. Você começa a interagir. Precisamos de outra função. Mas vamos chegar aqui e ligar para. E vamos preenchê-lo mais tarde. Por enquanto, vamos ao gráfico de eventos e à nossa entrada aprimorada, uma ação que a IA define como destino, clique. Agora, não vamos usar o consult, então vou desconectar O que vamos usar para nossa interação é o completo. Isso significa que eu cliquei e basicamente tem algumas regras sobre clicar no mesmo quadro e soltá-lo Mas, basicamente, funciona quando você clica, isso acontece. Não vamos usar o clique em espera e mais detalhes do que isso. Na verdade, estamos porque tem sido usado aqui, e vamos manter uma parte disso, mas mais tarde, não agora. Agora, o que vamos fazer é verificar se nosso a, nosso jogador, é válido. Portanto, não recebemos aquele erro incômodo que tivemos todo esse tempo. Eu quero o completo. Quando você desconecta algo, ele desaparece. O motivo é porque temos esse r aqui que mostra o resto das opções porque elas estão escondidas. Portanto, precisamos ser concluídos. Vamos nos conectar aqui. Na verdade, vamos copiar e colar no começo, então. O Trig não aciona esse erro incômodo. E não vamos usar o ator também. Vamos usar o stop move, mas vamos fazer nosso próprio. Nosso ator é válido, e vamos continuar conectando isso. O que vamos fazer é cada um no estado do jogador, porque temos o estado do jogador aqui e queremos interagir somente quando estivermos normais. Não queremos interagir quando estamos hackeando ou algo assim, não escolhemos itens aleatoriamente E, na verdade, vamos usar esse limite que temos. Vamos colocar um galho aqui. Então, se nosso tempo decorrido for menor que o limite Nós nos conectamos ao normal. Isso significa que, se eu clicar em um item por um período específico e não liberando, isso não acontecerá O Interact não acontecerá. Então, eu só preciso clicar e soltar para que a interação aconteça. Se eu estiver apenas passando o mouse com o botão de descanso clicado, não poderemos escolher itens Bem, na verdade, dessa forma, não deveríamos ser capazes de escolher itens. Se não usarmos esse nó, poderemos clicar em itens como passar o mouse sobre o m e decidir quando lançaremos e simplesmente corrigi-lo Mas vamos fazer com que você não possa escolher itens se tiver que segurá-los. Então, vamos usar duas ramificações aqui e vamos trazer essa função de interação. Agora, se deixarmos assim, toda vez que clicamos, estamos tentando interagir. Mas e se quisermos nos mudar? Como diferenciamos esses dois quando eu quero clicar e mover e quando eu quero clicar e pegar alguma coisa Bem, isso seria simples. Temos nosso foco atual aqui. Se isso for válido, então estamos interagindo. Se isso não for válido, estamos nos movendo ou atacando R: Vamos trazer isso aqui? Ansifle um pouco as coisas. Isso também é? Vamos nos conectar aqui. Adicione mais uma coisa, devemos adicionar esta pergunta: estamos passando o mouse sobre um item sobre a ramificação francesa sobre a ramificação acionadora um item sobre a ramificação francesa sobre a ramificação acionadora Baseie a mesma pergunta que queremos fazer no gatilho. Estamos passando o mouse sobre um item? Não estamos passando o mouse sobre um item. Vamos ver o que acontece mais tarde. Se estivermos passando o mouse sobre um item, não faremos nada porque queremos verificar quanto tempo estamos segurando o Basicamente, é um evento de lançamento único com um termo. Bem, não no lançamento, em um evento impresso com um ... algo entre esses dois. E isso poderia concluir quase concluir nosso sistema de interação. Precisamos interagir. Mas precisamos fazer algumas outras coisas primeiro. Então, vamos continuar com a próxima. Eu acho que esse é um bom ponto de partida para este. Eu quero ver você então. Adeus. 106. Sistema de interação de alcance mínimo: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon RPG de ação Anteriormente, quase terminamos com nossa sequência de interação. Na verdade, terminamos com nossa busca por itens se tivéssemos itens como parte da função. Mas verificamos se é válido. Verificamos se o ator cavou para não conectar o ator. Sim, precisamos conectar o ator. Se tem pato, o i, e verificamos com um galho Se não for um ator com I, estamos limpando todas as nossas seleções para uma função que termina itens atuais ou anteriores em ambos Em seguida, verificamos, a partir da ramificação verdadeira, se nosso alvo atual é o alvo que estamos atingindo Se for, não fazemos nada. Se não estiver, então estamos configurando nosso foco atual para terminar o foco Estamos configurando nosso foco atual para o foco anterior e, em seguida, configurando o item em que estamos passando o mouse e, em seguida, configurando o item em que estamos passando o foco atual e configurando nossa equipe para o mouse Agora, caso nosso foco atual não fosse válido, não tínhamos nada no alvo Estamos apenas configurando nosso foco atual para o ator-alvo Em seguida, passamos para nossa ação de aprimoramento de IA definir um clique de destino Isso é horrível. Ok. Usamos a ramificação completa da ação, que tem algumas regras próprias. E, basicamente, mantivemos a regra de que, se for pressionado em um determinado limite, não estaremos interagindo E não terminamos de interagir porque precisamos de algumas coisas extras. E uma das coisas extras é que excluímos a parada de movimento, então vamos criar nossa própria. Ah, vamos criar um evento personalizado. Vamos chamar isso de “stop”. Movendo-se. E vamos criar um bleion. Vamos chamar isso de bleion. Movendo-se. E vamos começar , amigos, porque quando paramos de nos mover, isso diminui Quando paramos de mover isso, queremos que isso seja verdade. E então vamos verificar. Ou verifique se o controle p é válido porque não queremos marcapassos antes do início do jogo E vamos adicionar uma entrada que seria zero se o ponto do controlador fosse válido. Mas isso nos faz parar de nos mover. E por que precisamos dessa variável? Bem, temos essa função de mover dois aqui. Nós não vamos usá-lo. Faremos nossa própria função no evento tick. Mas eu discordo. Ainda não estamos lá. Então, há alguns outros pontos que precisamos parar de mover, além de interagir. E isso seria quando estamos mirando, quando estamos morrendo Acho que quando estamos sofrendo algum dano. Então, vamos voltar ao nosso personagem. Vamos ao nosso objetivo. Precisamos da referência do controlador aqui, vamos trazer o controlador BP. Vamos avançar um pouco mais. Vamos nos mudar. O que nos traz até aqui. Agora, personagem, passamos, queremos que isso aconteça com qualquer dano, e isso seria depois de remover um pouco de saúde. E o último lugar, é claro, em que precisamos é quando morremos, coloque-o depois de tocarmos o som. Ok. Sim, depois de colocarmos agora, está tudo bem. Não importa, porque isso desativará nosso bullying e não poderemos ativá-lo novamente Ah. Adicionamos nossa parada de movimentação em todos os lugares necessários. Esse é o lugar sobre o qual começamos a falar, que vamos adicioná-lo, e essa seria a função de interação. Oh, o que nossa função de interação faz? Ele verifica se nossa corrente é válida. E então enviamos uma mensagem. Correto. E aqui pare de se mover. Então, basicamente, agora, podemos interagir com nossas coisas no mundo. Mas também porque estragamos essa função, provavelmente não conseguiremos nos mover Vamos verificar isso bem rápido. Sim, não podemos nos mover agora. Mas somos capazes de atirar e nos mover enquanto somos incríveis. E então não podemos nos mover. Surpreendente. Só funciona fora, dentro do labirinto, verdade não funciona, mas lá fora, estamos conseguindo um ponto que deveríamos estar conquistando De qualquer forma, isso importa porque já temos as ferramentas para corrigir isso. Só precisamos de um pouco de código extra. Nós temos o recurso. Quero dizer que precisamos. Não. O que vamos fazer é: Na verdade, precisamos de uma ramificação, mas precisamos apenas uma. Vamos excluir a seguinte. Não precisamos do seguinte. Precisamos do destino do elenco e somente do falso. Porque quando não atingimos um inimigo, é quando estamos andando. E não queremos andar em nenhuma situação. Queremos andar quando estamos em estado normal. Vamos alcançar o estado deles. Vamos nos conectar normalmente. Agora, se estivermos normais e estivermos atingindo um inimigo, vamos atirar. Isso é feito facilmente. O que vamos fazer para isso é ir ao nosso mecânico de tiro A filmagem está aqui. E, claro, vamos trapacear um pouco novamente. Vamos usar essa parte aqui porque essa pergunta é feita por meio do nosso controlador de pod de jogo e vamos fazer um evento personalizado. Ligue para isso. Dois e vamos nos conectar por aqui. Agora, a partir do controle do player, podemos chamar a partir da referência do player, shot. Agora, quando estamos focando em algo, somos capazes de atirar nele Mas, novamente, para atirar em algo, devemos ser capazes de mover. Então, quando temos um destino de cache salvo, quando temos nosso destino de cache salvo, que na verdade é nosso aquecimento ou localização do cursor, podemos começar a mover. E como vamos nos mover, já que excluímos a mudança para, basicamente, o que não adiciona um simples local de movimentação. Acho que o anterior adiciona apenas a entrada de movimento do anúncio. Na verdade, na função a seguir. Sim, eu tinha a entrada de adicionar movimento. Não. Vamos usar essa função, mas atualizei um pouco Porque vamos chamá-lo de ti, e isso seria adicionar constantemente um movimento à nossa localização atual. Vamos verificar x e y da localização do nosso lago. Então, vamos quebrar isso por aqui. Vamos descobrir o local de onde eles estão vindo. Esse vetor aqui, é claro, é localização do ator ainda presente, nossa lagoa. R: Vamos verificar se isso é quase igual, y é para x y com o x e y do nosso local de entrada Vamos com uma tolerância de 15, sendo esse valor correto porque o que faremos mais tarde significa que nosso personagem pode ter o braço realmente estendido por causa da arma. Se colocarmos nosso mouse nessa área, isso será um problema porque se estivermos tentando mirar aqui, nossa arma muscular estiver aqui. E isso cria um problema. Ele vai tentar atirar para dentro, e digamos que não, isso não é possível Então, criaremos uma área ao redor do jogador, que o mouse, na verdade, ao entrar nessa área, move para este lado ou para este lado com base em algumas regras ou para este lado ou com base em algumas regras. Teremos uma zona morta basicamente ao redor do nosso personagem. Agora, vamos verificar se isso é igual, quase igual aos dois, porque se um deles não for, mova-se. Mas se eles forem iguais, devemos mover duas dobras. Chegamos ao nosso destino. Voltar ao gráfico de eventos. Vamos chamar de evento ártico. Isso será chamado de perfram, e vamos fazer isso de forma válida Nosso personagem, os personagens aqui. E então vamos fazer uma sequência porque vamos adicionar algumas coisas a esse evento de tick. Agora, vamos colocar uma ramificação aqui, resto da sequência e perguntar se estamos nos movendo. Se estamos nos movendo, então estamos seguindo. Para o local, o destino do cache. Compile e salve. Teoricamente, agora podemos andar Não. Até mesmo o anterior. E ande. Eu sei o motivo porque nosso parafuso de estado limpo está totalmente normal, que não é atualizado porque não atualizamos o estado padrão do personagem, e o estado padrão do personagem é normal porque o alteramos Mas isso não acontece, então não atualiza o controlador. Agora podemos mover Não, e o ponto de retorno, sempre o centro do personagem, que está do lado de fora, não está. Claro, porque não concluímos essa parte da função. Essa parte da nossa parte mais importante é que ainda não completamos a parte da função. ainda não completamos a parte da função Se atingirmos um alvo, e ele não for um inimigo, o que faremos? Então, vamos fazer isso na próxima. E eu vou deixar você por enquanto. Tchau 107. Como finalizar a filmagem estática e apontar: Olá, bem-vindo ao Game Design Workshop e ao Real Engine, cinco chamadas processuais Dungeon Action PZ Anteriormente, começamos com nossa função de interação, mas acabamos terminando no movimento. Espero que também tenhamos finalizado a função de interação. Verificaremos quando podemos nos mover e eleger algum baú ou item. Agora, o que fizemos a seguir foi criar a mecânica de stop move, que na verdade transforma nossas barras de movimento em quedas e adiciona uma entrada de movimento de zero se nosso controle de jogador for Se o peão do nosso jogador for válido. Desculpe. Em seguida, concluímos que, em nosso gatilho, isso significa que, quando começamos a clicar, ele continua funcionando enquanto pressionamos o clique U, vamos repassar isso mais uma vez. Primeiro, verificamos se nosso jogador é válido, depois se nosso ho é válido porque, se estivermos passando o mouse sobre um item, não devemos nos mover em direção a esse Se quisermos avançar em direção a esse item, se, por exemplo, não estivermos no intervalo, podemos criar algum código aqui, se não estivermos no intervalo do item, se não estivermos indo em direção ao item, se não, o que queremos fazer com isso. Ah, então verificamos se nosso jogador está em estado normal. Então, quando nosso personagem está normal, verificamos se estamos atingindo um inimigo com o cursor ou, se não estamos, estamos ajustando a localização do nosso calor para o destino do lançamento e configurando a mudança para verdadeiro Se estivermos, estamos apenas filmando que criamos um evento personalizado aqui em Shoot from the branch porque não precisamos disso, e está seguindo a mesma lógica. Agora, voltando ao nosso controle, o motivo pelo qual estamos definindo o movimento como verdadeiro e definindo o destino do lançamento é porque nosso movimento é controlado pelo evento tick, qual perguntamos se o jogador é válido, se nossa referência ao jogador é válida e, em seguida, verificamos se estamos nos movendo ou não. Se estivermos, usamos a função follow que areal nos fornece, que leva o controlador de pares ao lago controlado, obtém sua localização, obtém um vetor de direção exclusivo de dois e fornece isso para adicionar entrada de movimento Atualizamos essa função verificando se chegamos ao nosso destino, verificando os valores x e y do destino e nossa localização atual E se for verdade, então não estamos mais nos movendo porque chegamos ao nosso destino. E descobrimos que ainda não podemos nos mover porque, se acessarmos nossa localização um get na função cursor, podemos ver que nossa localização get não está sendo definida quando atingimos algo com nossa linha de rastreamento Bem, essa lógica simplesmente não é. O que vamos fazer é obter nosso resultado de aquecimento aqui, na verdade, porque precisaremos de valores dele. Mas precisaremos perguntar se é o ator que aquecemos um inimigo. Então, como tag e. Mas se não tiver a tag E, então não estamos atingindo um inimigo Vamos fazer a lógica de atingir um inimigo mais tarde. Mas agora, por enquanto, vamos conectar o falso a aqui. Talvez precisemos levar isso um pouco mais adiante. Isso é bom. Isso começa a se tornar um espaguete do tamanho de uma porção familiar. Mas acho que está tudo bem. Agora, se entrarmos no jogo, podemos realmente nos mover, podemos atirar em Ida. Mas o problema está na mira. Não podemos mirar. Posso pressionar a tecla Shift e começar a atirar, mas não consigo mirar onde atiro. Vamos consertar isso. Vamos precisar por que isso persiste em movimento . Vou apenas colocar um é válido aqui Espero que isso resolva o problema. Sim, não há mais erros. Finalmente. Agora, precisaremos mirar para onde estamos atirando. E para fazer isso, na verdade, precisamos criar o sistema sobre o qual falamos que, entre um determinado intervalo, ele compensará nosso vetor direto e nossa mira, nossa rotação Vamos adicionar muito rapidamente à nossa localização de obtenção sob o cursor, pura. Precisamos mudar esse nome de qualquer maneira. Vamos adicionar duas variáveis na nota de retorno. Um deles seria um vetor. Vamos chamar isso de objetivo futuro. F, não é? Talvez. E então precisamos de outro vetor, mas rotador desta vez. Vamos chamar isso de Fation, que na verdade incluirá os normais, mas de qualquer forma, vamos promover esses dois em variáveis locais vamos chamá-los de Over Dame so FA e de início, de set so FA e de início, de Vamos configurá-los para alguma coisa. Vamos começar a demonstrar o problema, na verdade, o que está acontecendo aqui, aqui, para nossa compensação para A, obteremos nosso personagem Como referência, vamos obter vetor direto ou vetor direto. E para rotação. Vamos obter a localização do ator e obter nosso resultado de calor, que é copiá-lo, aqui está, obter nosso resultado de calor, e vamos descobrir a partir do ator, na verdade. Rotação. Nenhum parente, desculpe. Rotação, e ela começará com nosso personagem e terminará com nosso resultado de calor. Agora, para fazer isso funcionar, precisamos de algum código. Temos que definir em algum lugar a rotação, e iremos para nosso evento e, a partir daí, partiremos para um da nossa sequência. Então, vamos ativar o estado do jogador. Porque às vezes não queremos mudar nossa rotação de personagens. Basicamente, há apenas duas vezes em que queremos mudar a rotação do personagem. É da rota normal ou de A. Re até aqui. Eu posso conectar os dois e obteremos nossa referência de jogo e essa rotação. Rotação do carro. Precisaremos de algum espaço aqui. Um pouco mais. Eu acho que está tudo bem. Oh, o que vamos fazer é ir para o nosso inter. Vamos fazer com que seja constante. Isso significa girar em um valor constante com base em um tempo baseado em nosso Delta T. Para Delta T. Vamos usar o evento tick Isso torna o tipo de quadro relevante, mas está tudo bem. E para velocidade, vamos usar 100. Agora, qual é a nossa atual? Bem, vamos obter nossa referência de jogador. Vamos fazer a rotação. Na verdade, vamos usar isso ou a corrente, mas o alvo, não alteramos o x e o y. Vamos manter o mesmo, então vamos fazer isso. Nós vamos quebrar isso. O rolamento e o tom permanecerão os mesmos. Yo, que está mudando, será o único que está mudando. Então, vamos colocar a localização do mouse na função de ocorrência. Quebre isso. Vamos conectar isso. E mais uma coisa antes de terminarmos. Vamos voltar ao nosso personagem P de cima para baixo. Vamos até nossa bala de desova e mudar esse vetor dianteiro que tínhamos da cápsula, que é o vetor dianteiro de nossa bala Vamos pegar nossa referência de controle de player. Vamos começar sem o git. Não. Esse não é o nome. Deve fazer com que os pacientes cheguem os pacientes ao resultado com Kersor Essa é a nossa função. Mas esse. Vamos para nossa localização gt na função Kursor . Vamos verificar isso. Por padrão, essa função é protegida pelo especificador de acesso, o que significa que não pode ser chamada por mais nada. Vamos tornar isso público. Nós podemos acessá-lo. Vou obter a localização abaixo do Cursor, aqui estamos, e vamos colocar nossa mira frontal de deslocamento e nos conectar aqui Vamos jogar. Isso nos dará algum tipo de rotação. E como você pode ver, gire em direção ao meu mouse. Mas você vê que há um pequeno deslocamento na bala em comparação com o local onde eu clico Isso ocorre porque estamos em um mundo em três D e estamos tentando atingir um mundo em dois D. Então, em alguns lugares, está tudo bem, é direto, como se formos para esse ângulo, podemos ver que está direto na bala do mouse, o Há um ângulo que é quase direto, e qualquer outro ângulo, ele começa a realmente se deslocar Agora, vamos fazer a matemática necessária para alterar esse deslocamento fazer com que ele mire corretamente Então, vamos voltar ao nosso local de obtenção em ers pure, e precisaremos de muito espaço para arrastar até aqui. Talvez seja espaço suficiente, e vamos desconectar esses dois Vamos começar calculando a direção do nosso focinho. Vamos obter a referência do jogador e vamos pegar o focinho Do nosso focinho, obteremos a ação mundial. Na verdade, só precisamos do z aqui, vou quebrar isso. A direção em direção a dois seria nossa localização de aquecimento. Vamos pegar nossa localização de aquecimento. Vamos também quebrar isso. Por que fazemos isso? Por que precisamos encontrar a direção? Porque precisamos saber a direção da arma até o alvo para onde o mouse está apontando para ajustar a mira corretamente. Vamos fazer a subtração para encontrar a direção que menos Agora precisaremos calcular a direção da câmera até o git do mouse porque a perspectiva da câmera afeta a forma como vemos e miramos nos alvos devido à nossa visão isométrica O que realmente fazemos é converter a localização em espaço mundial. Vamos conectar o y também. É meio importante. E o próximo local que precisamos é a câmera, então pegamos nosso player. Temos nosso jogador aqui. Vamos pegar uma câmera. Vamos obter a localização da palavra. Subtraia esses dois Obtenha a direção da câmera em direção ao calor do mouse, a localização das palavras do mouse. O próximo passo seria normalizar essa escala. Agora, vamos normalizar os componentes z dessas duas diferenças para ajustar o vetor de direção, considerando as diferenças de altura entre a câmera e a arma e o alvo, porque todos esses três são eixos Z diferentes Agora, para aqueles que são novos em matemática, o que é normalização Bem, é o processo de ajustar valores medidos em escalas diferentes para uma escala comum, se isso fizer sentido Do jeito que vamos fazer isso, vamos quebrar esse resultado. Nós vamos dividir. É o resultado pelo z, a direção do resultado da direção do nosso músculo ao nosso calor em comparação com o nosso calor e o resultado da direção da nossa câmera e do mouse na tela. E o que precisamos fazer, precisamos torná-lo um vetor. É uma divisão em termos de elementos. Então, vamos mudar esse pino de saída para um vetor. Como você pode ver, essa divisão se tornou uma divisão elemento a elemento, que é um X dividido por x, A, então todos esses valores são iguais. E isso compensará nossas algas. Precisamos aumentar esse fator de acordo com a diferença entre a câmera e o mouse diferença entre a câmera e o mouse. Vamos multiplicar isso pelo resultado da subtração com essa direção, basicamente, e vamos ajustá-lo à nossa Então, vamos adicionar nossa localização de aquecimento aqui. Já que estamos usando nossos músculos. Vamos usar novamente nosso focinho, para ver a rotação com o novo deslocamento Vamos ter uma rotação mundial. Vamos nos conectar à arte. Então vamos conectar isso para encontrar e vamos conectar isso aqui, e vamos obter o mundo. Vá e conecte-o aqui. Mas ainda não terminamos, mas vamos ver o que criamos. Você vê onde eu clico, eu realmente miro. É aqui que a bala vai, onde eu clico. Mas se eu chegar muito perto do meu personagem, você pode ver que de repente uma bala veio por trás Este realmente colide com um personagem. Estamos atirando em nós mesmos. Acho que consigo fazer com que ele atire por trás novamente. Você viu que isso foi incrível? Além disso, nossa animação é empolgante. Você pode ver que a animação pega muito porque estamos muito perto do focinho Portanto, neste caso, a prioridade do modelo tem prioridade a rotação do modelo tem mais prioridade do que o cano porque estamos muito perto. Se eu for um pouco mais longe, está tudo bem. Se eu chegar muito perto, começamos a tremer e nossa filmagem fica muito ruim Agora, acho que isso é suficiente para este. Vamos corrigir isso no próximo. Adeus. 108. Sob mecânica inimiga Crude: Olá, e bem-vindo ao Game Design Workshop, verdadeiro curso de criação de RPG de ação com cinco procedimentos do Dungeon Engine RPG de ação com cinco procedimentos do Dungeon Anteriormente, terminamos com a matemática para nosso deslocamento de mira Obtivemos nossa direção do músculo para a direção do calor, e obtivemos nossa direção da localização da palavra até a localização da câmera até a localização do mouse na área da tela . Obtivemos a direção, normalizamos o eixo Z a partir desses dois, e demos a escala da direção com base na normalização aqui, e ajustamos a localização do calor para considerar o deslocamento das armas Então, adicionamos a localização do calor a esse resultado, essa direção de escala. Agora, mas precisamos resolver o problema que temos de que, quando estamos muito perto , a segmentação está muito, muito compensada Precisamos verificar apenas à distância se nosso resultado de comer é basicamente maior que uma distância ou menor que uma distância em comparação com nosso personagem. Crie um pequeno círculo sobre o qual falamos ao redor de nosso personagem. E eu tenho um valor em mente. Então, vamos colocar um galho aqui. C o Connect this to the branch, cai aqui. Vamos fazer uma representação aqui. E o que vamos fazer para que você se distancie menos. Para que serve menos? Vou pegar um vetor. Para fazer 107 aqui. Esse é o valor que eu descobri, eu paro de balançar e aparece basicamente como tendo No vetor 1, precisamos do nosso músculo. Vetor dois, precisamos do deslocamento de uma localização. E quando isso é dois, quando a distância é maior, então estamos mais perto do nosso personagem, esse círculo abaixo do caractere, porque isso é basicamente então estamos mais perto do nosso personagem, esse círculo abaixo do caractere, o raio Vamos nos conectar aqui primeiro de tudo. Precisaremos dos nós que temos aqui. Não precisamos da localização. Só precisamos dar uma olhada. E isso vai começar aqui. Isso será um vetor direto. Vamos trazer o fundo oposto, estará aqui. Certo? Vamos conectar isso, e nosso alvo é novamente o calor compensado Vamos nos conectar a esse calor aqui. E isso resolve tudo. Vamos usar argila. E, como podemos ver, podemos atirar perto de nossa carroça e ela atira em linha reta S. Temos tiros, agora podemos mirar para onde quisermos. Precisamos aumentar o tamanho da meta disso. É pequeno, tem um tamanho de caractere, e isso é uma coisa enorme. Mas agora podemos nos mover e atirar. Mas não podemos atirar quando estamos pairando sobre um alvo. Talvez devêssemos poder nos mudar para cá. Talvez não tenhamos feito a extensão da plataforma. Na verdade, não testamos. Nós fizemos isso. Nós fizemos isso, não fomos. Vamos falar com Deb mais tarde. O que devemos continuar é o que acontece quando estamos pairando sobre um inimigo Isso é meio importante. Nós simplesmente não queremos fotografar apenas pressionando a tecla Shift e atirando. Queremos ser capazes de filmar escolhendo também 100 jogos Então, temos um novo local de aquecimento. Agora temos uma localização térmica de um alvo. Não tenho no chão, que é o mouse. Se quiséssemos um calor mais específico, esse seria o ponto de impacto. Esse local seria, por exemplo, onde atingimos o alvo. Corpo duro. Mas para nós, isso realmente não importa, mas vamos promover isso em nosso local de aquecimento. Então, vou obter a localização do aquecimento. E eu vou configurá-lo para o ponto de impacto. Antes de começarmos a filmar ou qualquer coisa, precisamos verificar se estamos basicamente perdidos, se estamos na linha de visão, porque você não pode atirar pelas paredes. Tipo, ok, a localização do chapéu vem da nossa câmera para o mouse. Mas não sabe se nosso jogador tem uma parede entre ele, o mouse e o item. Então, o que faremos entre parênteses é escolhemos itens pelas Não vamos fazer isso para nossas filmagens. Então, vamos lançar um traçado de linha por canal. E a localização das estatísticas seria focinho. Vamos encontrar a localização da ala de focinheira. Onde a extremidade seria essa broca, corte fino, rotação. O alvo é a localização. Os começos são focinho, vetor. Vamos adicionar esse vetor avançado à nossa fase de localização da enfermaria. Precisamos dar um intervalo. Então, vamos multiplicar isso. Número inteiro, que é um intervalo de 2000. Em seguida, nós o adicionamos à localização do nosso quadro. Fard nesta faixa e na de, porque basicamente isso é um ponto Então, um ponto de distância, onde no mundo deveria estar essa distância. Também tem uma direção, é claro, porque é para frente, e isso é quanto. Um traço pode ser um pouco fácil. Talvez possamos, não importa. Vamos deixar a linha traçada. Eu diria que transformá-la em uma esfera com um raio, para que não possamos atirar por fendas muito pequenas, mas tudo bem, talvez a bala colida Se não colidir, devemos ignorar um ator. Então vá até, e o ator que estamos ignorando é nosso jogador Eu pego nossa referência de player e a conecto aqui. Agora, se aquecermos ou não, se aquecermos, isso significa que basicamente, não atingimos significa que não atingimos um inimigo, então devemos afastar o inimigo. Na verdade, não precisamos desligá-lo. Volte aqui. Então nosso coração é nossa localização subterrânea. Agora, se voltarmos nosso calor para nosso novo resultado, que seria o novo ponto de impacto, do canhão, do músculo ao inimigo. Se o ator tem um alvo tem um ator de tag, aqui está, como g. E. Vamos configurá-lo adequadamente porque podemos estar atingindo outras coisas, não inimigos Talvez estejamos batendo em paredes. E, na verdade, nosso canal de rastreamento deve ser a câmera, não a visibilidade, porque essa é a forma como configuramos as colisões do labirinto Agora, o que queremos fazer é limpar a seleção de itens. Porque neste momento, fotografar substituições, não queremos clicar para interagir com os Queremos que seja filmado. E o que resta é realmente definir nossos vetores e deslocamentos, e precisamos do nó de retorno também porque esse é um outro ponto no final da função Repace essa cópia e cole isso, precisamos de uma boa glucaração. Preciso de um Nós podemos para recriá-los. Aqui, aqui. E para nossa rotação, vamos obter a localização do nosso ator, nossa localização de jogo da localização dos atores dos controladores de am E para nosso alvo, é claro que precisamos de nossa localização térmica. Agora, para o início do nosso braço, precisamos do nosso macho, vamos pegar nosso focinho O que precisamos é focar no que aquecemos. Ah. Isso não é um traço térmico de linha. Este é um traço de calor esférico, o que aquecemos primeiro. Oh, nós vamos conseguir isso, A. Mas precisamos criar uma direção até lá. Para fazer isso, vamos remexer novamente, vamos para a rotação c, cujo alvo seria esse, e depois para o vetor dianteiro. Avance o vetor a partir dessas rotações e vamos conectar isso ao nosso deslocamento. E seria isso. Vamos filmar as coisas. E ainda não podemos filmar as coisas. O motivo pelo qual não terminou nosso evento de cliques. Não. Na verdade, esse não é o motivo. O motivo é que ainda não concluímos a mudança do tipo de mouse, qual também seremos responsáveis se estivermos atingindo um inimigo ou não, mas vamos terminar com o evento de clique porque sobraram poucos nós Bem, um ponto que devemos fazer é que o movimento diminui quando nosso limite é menor Isso é mudar para que possamos chutar e nos mover. Verdadeiro sobre verdadeiro, falso e falso. Então, isso realmente vai parar o pequeno bug que vimos. Mas eu cliquei e ele começou a se mover sem parar. Agora, se eu soltar meu mouse, ele para de se mover. E quando eu clico, antes de clicar mouse e soltá-lo, o personagem continuou se movendo Mas vamos terminar com nosso ataque. Era um pequeno parêntese. Vamos considerar isso como um parêntese para fazer o ataque. Precisamos pressionar o cursor para mudar de normal para cruzado e, ao mesmo tempo, mudar o estado do nosso personagem para mirar basicamente nosso evento de carrapatos, isso precisa acontecer constantemente. Movendo o mouse, precisamos saber instantaneamente se há algo embaixo de nós. Eu sou inimigo abaixo de nós. Vamos fazer uma filial. Vamos colocar nossa função get location em Cursor. E vamos conectá-lo. Sala. Então vamos fazer uma vez. Ambos ou caem, porque o que quer que aconteça precisa acontecer uma vez, e cada um se reiniciará. Vamos fazer uma sequência, copiar e colar as duas e a primeira coisa que eles fazem é reinicializar a outra. Agora, qual é a próxima coisa que eles fazem? Eles mudam o ritmo Se estivermos atingindo um inimigo, vamos cruzar o dela, que é o mouse que criamos Substituímos com nosso mouse vermelho. É isso. Aqui temos um problema. Se estamos mirando, não devemos mudar o cursor, então queremos selecionar Vamos verificar se o estado do nosso jogador é igual, é igual em igual. Duas da manhã. Se for verdade, então vamos manter a mira Se não for, voltaremos ao padrão. Se eu deixar assim, há um problema com o D real não competir. O que está funcionando. Trabalhando. Tudo bem? Acho que vamos resolver o próximo. E eu vou te ver então, adeus. 109. Correções de estêncil de pós-processo e detecção de inimigos: Olá, bem-vindo de volta ao workshop de Design de Jogos e cinco procedimentos do Real Engine RPs de ação em Dungeon Anteriormente, terminamos com nosso personagem de cima para baixo mirando parte de nosso controle Este não é um jogo. Isso é um personagem. Isso é um controlador. Então, terminamos com nossa parte da localização G sob a função sor em nosso controle de jogo. Mas se estamos mirando em um inimigo , estamos verificando Na verdade, estamos lançando uma linha de rastreamento do nosso local de impacto, que é o ponto de impacto Vá bem em direção ao ponto de impacto térmico do nosso músculo. Agora, se esse traçado de linha aquecer alguma coisa, significa que podemos ter um inimigo, podemos ter batido em uma parede. Nós não sabemos. Se não atingir nada, que provavelmente nunca é o caso, retornamos nosso calor ao normal e, em seguida, acontecem as próximas coisas. Mas se atingirmos algo, estamos verificando se é um inimigo ou não. Então isso define a variável temporária do inimigo térmico. Em seguida, saímos e limpamos a seleção do item porque, se tivéssemos um item em nossa seleção, não deveríamos tê-lo porque nosso clique interagiria em vez de atirar. E então continuamos definindo os deslocamentos de rotação e a do nosso músculo para o nosso ator térmico Temos o vetor direto de rotação azul fina para definir o vetor direto e vamos do nosso jogador até nosso local de aquecimento para encontrar a rotação para a qual precisamos estar voltados. Agora, tivemos alguns problemas. Na verdade, também finalizamos nosso evento de clique como um pequeno parêntese para interromper o movimento quando liberamos o clique porque ele estava se movendo constantemente E então mudamos para mudar o cursor do mouse com base no fato de estarmos atingindo um inimigo ou não, com a necessidade de realizar eventos de alguém com base nessa ramificação aqui, e eles se reiniciando e nós configurando o Agora, o que eu queria mostrar que não necessariamente acontece toda vez é que o mouse pode redefinir sua posição quando estamos alterando o widget Isso pode ter alguns problemas. Mas não conseguimos mostrar isso porque havia um problema com a segmentação. Acho que é um problema de colisão. Nós vamos verificar. Mas o que devemos fazer como solução alternativa, pode ser corrigido agora. Mas vamos estabelecer uma posição. E a posição que vamos colocar no mouse é a posição do mouse. Então, vamos conseguir uma posição. E portão. Ele arredonda esse carro alegórico. Ele faz isso automaticamente se você tentar conectá-lo a um número inteiro, e isso manterá nossa posição basicamente em vigor Ah. Vamos descobrir o que está acontecendo. Por que não pudemos fazer isso? Vamos recriar essa situação. Tínhamos um portão principal que não podíamos atirar. Há um portão do inferno. Vamos trazer o personagem do azulejo, o personagem. Ao lado do Hell Bop. Aqui ele atira em nós. Vou fechar o som novamente. E eu vou retomar a posse. Tudo bem. Quando eu seleciono um portão, nada acontece. Então, vamos ver o que está acontecendo em nossa segmentação. Vou pegar o controlador btn, desconectá-lo e trazê-lo aqui Isso o encaixe. Não tenho certeza. Desencaixe-o, talvez. Vou para a posição da função em Cursor. Essa é a função que queremos verificar. E o que nos importa é esse galho aqui , se ele pode encontrar um inimigo ou não. Agora, para mostrar o que está acontecendo. Precisamos clicar aqui. Pode dizer que não é o bug, mas também pode ser automático aqui. Agora podemos ver a linha do bug. Então, vamos trazê-lo aqui. Se eu não mirar em nada, tudo funciona corretamente. Mas se eu for até o alvo, sim, nada acontece. Não acho que seja porque temos uma pequena colisão. Acho que é porque deixei a colisão para ser explicada mais tarde Mas fizemos algumas explicações. Vamos para a cápsula. O que realmente precisamos fazer é alterar as predefinições de colisão para personalizadas e queremos bloquear a câmera Podemos nos sobrepor a qualquer outra coisa, mas queremos bloquear a câmera O canal de colisão da câmera, que é irrelevante para o que diz Acabamos de decidir que essa resposta de corrida será bloqueadora para nós e basearemos nossos resultados em. Realmente não importa por isso que escolhemos as câmeras , porque não importa o que diz aqui. Importa como escolhemos usar o sistema. Esses são apenas os conjuntos que o Unreal criou, mas é sensato usá-los conforme descritos pois há muitas mecânicas que funcionam com essa lógica que superam o motor Mas, novamente, quando você está criando suas próprias coisas, você pode fazer a programação que quiser. Pelo menos funciona e outras pessoas podem lê-lo. Vamos apertar play. Acho que isso resolverá o problema. Um mouse deve ficar vermelho quando descobrirmos portão L não tem neste mapa, então vou tentar novamente. Teremos muitas aqui. Na verdade, o rato fica vermelho. É como o portão, e eu posso fotografar e ler. Eu posso abrir lá. Minha saúde está e eu caio em uma armadilha. Onde está a saúde do meu MCs? Comece a jogar. Aqui estamos. A saúde de Max, digamos que remonta aos dez. Então, não morremos instantaneamente. Se você quiser ser realmente cruel, você pode morrer instantaneamente. Jogadores M podem morrer instantaneamente quando pisam em uma armadilha e têm um ponto de vida Agora, a última coisa que devemos fazer pelo nosso personagem seria acessar as configurações do projeto. Isso é para o Tencel Aston Depth Sil Pass e, em vez de habilitar, habilite-o com um estêncil A próxima coisa que faremos é subir ao nosso nível e apresentar um pós-processamento incorreto. C. Volume de pós-processamento e queremos selecionar o mundo das palavras. Qual era o nome? O que estamos procurando é ser infinito. Sim, liberta essa extensão infinita. A próxima coisa que precisamos fazer é acessar nossos materiais de processo. Encontre-os. Vamos adicionar um material a essa matriz. Seria nosso processo al. Meu processo de postagem. Acho que há um exemplo. Meu processo de pose, insisto, seria isso. E então devemos ir ao nosso personagem ou à nossa malha estática personalizada. Precisamos habilitar isso. Então, vamos pesquisar a profundidade personalizada da renderização. Sim, nós queremos isso, e vamos definir isso como 21. Agora, teoricamente, podemos ver nosso jogador atrás das paredes. Sim, aqui está. E a forma como funciona é que nosso material, vamos pegar o material por um segundo. Eu sei. Isso foi explicado para mim. Essa é a instância, essa. Então, basicamente, ela se esconde entre a cor básica e aquela que queremos que apareça atrás do alvo, B é esse E isso é decidido por uma máscara como essa daqui, que é a primeira parte sobre mudar o material em si, e isso é sobre o material que ela mostra basicamente. Então, porque temos o valor um, onde temos muitos valores únicos, mas de qualquer forma, acho que é esse, se fosse um valor diferente, acho que afetaria a profundidade de snsiil que dissemos, se eu entendi isso corretamente Então, basicamente, se isso fosse um dois em nosso personagem, isso deveria ser dois. E como tudo o mais no mundo é zero, veríamos os dois, por exemplo. Ou acho que funciona apenas com um e qualquer outra coisa no mundo. Sim, acho que é isso. Acho que tudo no mundo é zero. Então, como isso se tornou um, podemos vê-lo atrás das paredes. E, basicamente, isso é tudo para o nosso personagem. Nós terminamos nosso personagem. Então, agora o Turn tem um I e todas as coisas de depuração que precisamos fazer Vamos testar mais uma coisa. Ok, o elevador não está funcionando, mas o baú está funcionando? Eu não testei isso? Podemos pegar algum item? Eu tenho um este é o inventário. Deixe-me usar isso. Tem um baú aqui? Não. Onde está o baú? Aqui está, eu clico nele. Agora, eu não posso. Vamos ver o porquê por um segundo. Talvez, se for algo simples, possamos depurá-lo facilmente agora Controlador, estamos em nossa função. Por que seria uma colisão novamente? Vamos jogar. T. Vamos mover o rato diretamente para o peito. E eu não estou imaginando, acho que você não está colidindo Acho que é um problema de colisão novamente. Vamos até o nosso peito. Impressões digitais, baú grande. Não temos uma colisão. Acabamos de colocar esse baú aqui e o colocamos na parte inferior do de cima. Nossa massa vai atingir a de cima, não vai atingir a de baixo. Então, talvez eu tenha colocado isso na parte inferior. Eu vou copiar isso. Como você pode ver, você pode até mesmo copiar grupos inteiros com base neles. E trabalhando, copie porque só tem esse grupo pz Talvez eu precise copiar toda a colisão. Propriedades, como propriedades. Funciona, não funciona, não importa. Vamos tornar essas colisões verdadeiras. Então, só queremos bloquear tudo para bloquear a combinação de visibilidade e colisão de poms, como se fosse uma colisão Se for não, o No deixará sem colisão e não gerará eventos de sobreposição Acho que isso resolve o problema. Se isso não acontecer, vamos apenas enfrentar as colisões. Personagem ao lado da caixa, que é muito bonita com música mais próxima. Aqui. Ou não. Nem na parte inferior aqui, estou clicando na parte inferior, mas na verdade não faz nada. Então, vamos copiar essas configurações de colisão e fazer com que elas estejam bloqueando a câmera Você está bloqueando O , não funciona. Fato Em ambos os casos, é capaz. Onde deveria estar funcionando. Eu verifico novamente a partir daqui. Para voltar aqui. Vamos levar o personagem até o peito. Novamente, não está funcionando. Mas agora também temos que testar a linha de rastreamento. Precisamos depurar isso. Então, vamos selecionar. Digamos que para um quadro. Vamos ver se estamos batendo em alguma coisa com a caixa. Eu ejeto na minha caixa de ator. É um h. A ideia de que eu mudei o personagem, eu mudei de um ladrilho. Então, sim, na verdade, estamos acertando a caixa aqui. Eu verifico. Estamos acertando a caixa aqui. Então surge a pergunta: o que pedimos para que o ator Big tenha um puxão o que pedimos para que o ator Big tenha um puxão? Está correndo até aqui, vamos ver. Está correndo até aqui, vamos ver I. Vamos começar com a caixa, onde está a caixa? Ok. Não, ele não administra essa filial de jeito nenhum. Eu fiz alguns testes e, por algum motivo, e, por algum motivo, se eu conectá-lo do lado oposto, eu conecto primeiro, depois zero e depois um funciona, o que não faz sentido. Acho que é do objeto que somos, cada um que está aqui para o qual estamos testando Não sei por que isso não funciona. Maneira normal, mas sim, isso fez com que funcionasse. Então, zero deve descer e , em seguida, uma dessa parte esquerda. Acho que é porque esse existe, na verdade. Pense nisso. Esse existe, e esse não Então, basicamente, para resolvê-lo, poderíamos criar uma cadeia de eventos, mas acho que está tudo bem Já que está funcionando. Acho que essa é a razão pela qual acho que, porque essa sai e essa não, de alguma forma, garante que funcione antes dessa saída Acho que essa deve ser a lógica. De qualquer forma, vamos jogar. Na verdade, eu joquei e testei. Temos alguns outros problemas que resolveremos na aula e, em seguida, começaremos a fazer a IA. O personagem joga paredes, legal, onde está a caixa. I. Não consigo ver a dica e vamos verificar o porquê Mas se eu clicar, ele abre e fileira os itens em um só lugar. Vamos descobrir isso na próxima. Tchau 110. Correções de itens e Widget de Peito: Olá, bem-vindo ao Game Design Workshop under engine five, RPG de ação Procedural Dungeon Anteriormente, terminamos com nosso personagem e encontramos alguns bugs durante o jogo. Agora, vamos começar a corrigir esses bugs. Então, primeiro de tudo, vamos ao item da BP. E em nosso iop, quando estamos pesquisando palavras soltas, estamos testando a visibilidade. Câmera B. Agora, vamos testar nossas colisões. Agora, nossa colisão de itens seria Atom, bloqueando a visibilidade, bloqueando a câmera e a dinâmica da guerra, além cansarmos Agora, vamos para nossa esfera e, novamente, para nossas configurações ou configurações de colisão Então, isso deve ser simplesmente ignorar tudo, nada de física e se sobrepor ao personagem, porque esse é o Vamos ao nosso widget, que não tem colisões R Isso tem interface de usuário, mas vamos mudar isso sem colisão. Isso realmente não importa, já que o trazemos para a tela. Não gera eventos de sobreposição. Tudo bem Compilar. E vamos até nosso baú grande. Vamos corrigir isso primeiro. Vamos selecionar nossas duas malhas e elas digamos , gerar eventos físicos, se algo realmente souber Vamos deixar isso ligado. Vamos até as colisões ativadas Queremos que ambos não sejam físicos, sejam estáticos, e digamos que ambos estejam bloqueando tudo. Agora, vamos voltar ao nosso item e também aumentar a centena. Então, damos um pouco de alcance. Vamos fazer o ninho. Ao lado da caixa. Abra isso. Mais perto. A posição na tela pode ser, mas nem podemos ver os itens. Eles estão todos aqui? Eles ainda estão todos aqui. Isso não resolveu o problema, pode ser quando estamos movendo os itens em nossa linha do tempo para cá e o ev representando graficamente os Nós nos movemos com teletransporte. Não. Isso não é um inventário completo. Você não quer essa no item animado. Ou por aqui. Sim, o teleporte não está clicado aqui Pode ser porque, se isso acontecer, leva em consideração a colisão. E a caixa grande aqui, como se eu tivesse visto os itens se moverem. Parece que eles se movem, mas no final, eles voltam para o. Então, vamos para nossa linha do tempo, mas animamos o item E, para finalizar, vamos definir a localização do ator. Não atualize, termine até o destino final, onde obtive a localização. Vamos ver se isso funciona. Pode haver algo que o redefina. Isso está ao nosso lado. Sim, funcionou. Então eles ficam lá. Agradável. Ok. O texto é um pouco grande. Vamos clicar em. Um deles. Não consigo pegar ouro. Não, eu posso. Mas não está sendo destruído. Eu posso pegar ouro infinito. Então, na primeira vez que eu o pego, ele reproduz a animação do inventário completo. Interessante Agora, vamos escolher uma poção. Eu tenho poção, vamos usá-la. Por que continuar andando? Poção de raiva. Eu peguei-o, ele fica lá. Então parece que eles não estão se destruindo. Vamos consertar o widget por um segundo. Vamos remover todas essas linhas de rastreamento porque elas são boas de ver. Portanto, nossas linhas de rastreamento estão em nosso loop wi. E na lente, Dave. Vamos verificar por que eles não estão sendo destruídos. Quando eu os escolho, esse é o modo de jogo. inventário do copo quando cai e o alfinete vai para cá. E não voltar escolhido no final. Porque não retornamos o pico nas outras opções quando elas podem ser retiradas e estamos lotados ou com o estoque cheio Estamos retornando que não podemos colhê-lo, mas não sabemos que podemos pegá-lo quando o pegamos. Então, isso deve corrigir isso, vamos corrigir o widget por um segundo Vamos até I e vamos para o item antigo. Vamos mudar o tamanho para 21. Ousado. Tudo isso ousado. Existe outro. Vamos usar drop it as better e distribuir por padrão. Agora, eles deveriam ter uma aparência melhor. Essa linha que você vê aqui é porque eu não tenho a tela de carregamento. Realmente, eu não acho que seja isso. Mas vamos adicionar a tela de carregamento, então vamos abrir a tela de carregamento. Além disso. O que poderia ser. Oh, é visível. Você tem a tela de carregamento. Sim, nós temos. Então, vamos verificar quais são as linhas aqui. Vamos encontrar os itens. O é o baú aqui fora. Ao pegar o baú, os itens caem. Você pode vê-los voltando. Mas, por enquanto, está tudo bem. Eu posso pegá-los, eu fico destruído. Se havia ouro. Temos uma área secreta. Que você verificou. Por que não. Um jeito. Vamos copiar esse conjunto para um pequeno baú também. Vamos até o baú pequeno. Ambos. Eu vou um por um. Vou apenas copiar a colisão, isso e colar. Eu trabalho. Eu vou trabalhar. Só se apresse em superar isso. Essa deveria ser a categoria desse grupo, mas não funciona. De qualquer forma, um por um. Devemos ignorar tudo, bloquear a câmera e a visibilidade, bloquear p e corrigir. Sempre Jack só consulta, ambas estão ligadas, certo? Seria isso. Vamos testar os pontos. Eles estão sendo destruídos. Acho que eles serão destruídos. O que é essa linha? É muito chato. Uma fúria, uma fúria, uma moeda. Preciso que a moeda caia. Espere. Aqui estamos. Certo? Eu limpo o ouro. Eu entendi. Ótimo. Pegue as coisas, use-as. Pegue o resto. Eu já tenho uma chave. É por isso que eu posso pegar a chave. Isso aparece um pouco rápido, não é? Eu quero que seja um pouco mais lento. Eu posso ver o widget estourando, mas é muito rápido Isso é bom. Na segunda vez, ele roda um pouco rápido. Algo eu. Um pouco rápido. Então, primeiro de tudo, o baú não tem o widget exibido quando eu estou passando o mouse sobre eles Então, vamos escolher isso também. O que falta é o código para isso. Então, você vai copiar e colar o código do item BP: iniciar, passar o mouse e o evento e passar o mouse Vamos copiar isso. Ele tem essa função. Vamos copiar e colar a função primeiro. Então, visibilidade do widget, vamos até o baú, vá até as funções e cole Todas as variáveis existem, tudo é bom. Operações. Precisamos fechá-lo. Vá para o baú grande, cole aqui também, todas as variáveis estão boas, prontas para usar. Vamos ao nosso item. Copie isso. No gráfico de ventilação, cole-o aqui. Ou tenha uma boa aparência. Também no baú, até mesmo no gráfico, vou corrigi-lo aqui, agora devemos ter gs acima do peito. Algo quando a câmera muda, acho que quando seu glens cria isso com o peito Então, ou crie alguns cenários incríveis. Então, aqui está o widget. E eu estou clicando no widget e nada acontece. Se eu clicar no baú, algo acontece. Oshion. Oh, o mundo. Problema. O clique é assim. Eu entendi. Às vezes, isso significa um segundo clique. Acho que tem a ver com o foco. Você deve consertar isso também. Vamos parar. O monte de erros. Vamos preenchê-los. Qual visibilidade visibilidade é notabilidade, qual visibilidade Isso. Porque quando eu pego o item e o widget desaparece , precisamos de um válido aqui Quando temos que pegá-lo, ele está sendo destruído, então o widget não existe Ela tenta se esconder. Não tem problema. Vamos ver aqui a próxima. Propriedade dos widgets, não válida. Acho que isso é o, é o mesmo. Acho que, para a mesma visibilidade, visibilidade do widget, colisão, Então, isso estava acontecendo porque quando estávamos pegando um item, ele estava sendo destruído, e estávamos solicitando fazer tudo isso Então, eu acho que esse é um bom ponto de parada. Vamos continuar batendo na próxima. Adeus. 111. Correções de Widgets de itens e código de elevador: Olá, bem-vindo de volta ao Game Design Workshop Real engine arbsic de ação em Game Design Workshop Real engine five Procedural Dungeon Action Anteriormente, depuramos algumas coisas no jogo e agora vamos continuar com Agora, vamos selecionar nossa câmera. E o que devemos mudar é a restrição da proporção, porque essa pequena linha verde que aparece aqui é porque está tentando restringir a proporção e o pós-processamento com o suporte não combina realmente com Então, sim, vamos desativar isso e alterar o campo de visão para 55, que é a nossa câmera para o jogador, campo de visão 55. Então, agora, se jogarmos, não vemos mais essas linhas aqui para restringir a aspecto, torná-la cinematográfica e Pop, e vamos esconder essa linha de rastreamento da casa. Vamos obter a localização sob o cursor dentro do controlador optan e configurá-la para o bug E percebi que há um problema. Quando estou clicando nos itens e não paro, e a caixa é a caixa. Digamos que eu esteja me mudando e que o oficial queira um item. Não, eu parei. P. O problema que temos é que na primeira vez que clicamos no widget, isso não acontece, e na segunda vez que a rolagem é executada, ela é executada mais rápido Então, vamos consertá-lo. Em primeiro lugar, o problema com o baú, não realmente sobre, o foco é que o baú não tem um código vinculado para ser aberto quando clicamos nele O item funciona, da mesma forma que, se formos até o item, podemos ver que interagimos vinculadamente nos widgets Botão. Vamos copiar isso. Vamos até o nosso peito e interagir com base nesse COVID. Faça disso um elenco puro. Eu sou personalizado com o botão Bind Zoom. Conectado aqui. Copie além disso. Na verdade, precisamos começar a jogar primeiro. Vamos ligar para o botão. Agora temos isso copiado aqui. E vamos até o peito. Com base neste ano, vamos nos converter em puro elenco. Vamos nos conectar este ano e, ao começar a jogar, vamos encerrar o jogo. Bindon. Agora, vamos corrigir o problema de foco. Fazemos isso, vamos começar a jogar o controle. Onde está isso? Logo no mapa no contexto, comece a jogar. Então, o que queremos fazer é obter a autorreferência para si mesmo, ou seja, para o controlador, e inserir Ode e UI Ambos se concentram a qualquer momento. A única coisa que precisamos fazer é desclicar em SO durante a captura, para que, quando clicarmos em uma interface de usuário, o SO não desapareça Oh, Theven Pile. Vamos testar isso. Não há salas de teste. Cão de caça Por último que tenha um fim, aqueça, vá ser música. Ei, vamos trazer isso aqui. Eu simplesmente não vi. Funcionou instantaneamente. Agora, o que queremos é que isso funcione instantaneamente, então clique. Não, não funcionou instantaneamente. Agora funciona instantaneamente, mas não funcionou da primeira vez. Por que eles não ficam tão resfriados porque eu estou clicando na parte da raiva. Estou resfriado. Agora, o problema é que os itens em si não estão sendo clicados instantaneamente Vamos descobrir o porquê. Vamos fazer mais um teste. Talvez eu tenha feito algo errado. Eu acho que não. Clicando no baú, abre. Eu não tenho uma poção do tempo, vamos ficar com a poção do tempo. Estou clicando, ele desaparece e nada acontece. Aqui. Atire. Na segunda vez que funciona, mesmo que eu tenha Alt ou apenas tente clicar nele normalmente, no item e depois vá para o widget, ele ainda funciona Não acontece na primeira vez. Quero tentar passar do item para o widget pela primeira vez para deixar as coisas mais claras para mim Mas acho que tem algo a ver com nosso código e esse é o baú. Ei, vamos abrir do item para o widget. Mais rápido. A primeira vez que clico assim, funciona. Eu clico assim, ele desaparece. Então, quando eu pressiono, eu clico. A primeira vez que ele desaparece. Deve haver algum tipo de operação de pedido incorreta. Vamos verificar. 112. Ajustes de widget de itens e funcionalidade de elevador: Olá, bem-vindo de volta ao Game Design Workshop, curso real de criação de Procedural Dungeon action ps com cinco motores reais action ps Faça alguns testes vigorosos. Eu meio que percebo o que está acontecendo. É bem óbvio. Mas quando estamos selecionando, definindo visibilidade e temos foco, não estamos definindo qual item focar. Então, vamos pegar o controlador que obteremos do nosso lote de widgets, qual componente nossos widgets, obteremos Lembre-se de que isso é um componente. Esse é o objeto de entidade real, e vamos inserir Y, e vamos focar nisso. Agora, outra coisa que notei é a linha do tempo não está funcionando corretamente quando já temos um item em nosso inventário Porque conectamos essa peça. Ele precisa estar conectado ao jogo desde o início, porque quando estamos escolhendo um item novamente, ele não cabe em nosso inventário, cai ou, por algum motivo, não podemos colhê-lo Começa com o jogo e, quando termina pela primeira vez , nunca mais toca porque acabou. Mas precisamos dessa jogada desde o início. Agora, mais uma coisa que precisamos é ir para o nosso modo de jogo, e agora, acho que configuramos isso. Acho que definimos isso antes, definimos o modo de entrada do jogo e a interface do usuário e começamos a jogar e não ocultamos o cursor. Também não é o cursor y no item. Eles clicaram nisso? Pe eu não. Então, também não é cursor. Quando estamos configurando a visibilidade da peruca. O Isso seria, eu acho, vamos jogar. Tem o baú ali? Ileal não caiu, ótimo. Tipos de tigar, ser atacado. Oh, o que está acontecendo aqui? Isso é visível desde o início? Isso é por causa de, porque eu estou mirando no peito. OK. Sim, porque está ficando quando eu estou contendo isso. OK. Sim. Então, vamos abrir o baú. G, a chave. Então, funciona desde o início agora. Isso, eu estou tirando essa foto e estou pegando os itens novamente, fotografando, e funciona. Agradável. Jogando. Agora, a próxima coisa que precisamos verificar é o widget de jogabilidade Quando estamos reproduzindo a animação de pegar um item. Então, vamos continuar com sua jogabilidade, vamos encontrar a animação, a guia de animação, a escolha do item e encontrar referências. Ok, pegue o pincel de configuração de tamanho do item e avance. Vamos restaurar o estado porque toda vez ele deve ser reproduzido desde o início. Isso é necessário para restaurar o estado. Vamos pressionar, isso vai escolher uma estatística. É rápido É o personagem, é. O personagem está aqui, tocando em algumas armadilhas. Agora precisamos escolher itens em uma linha. Vamos escolher isso, e vamos escolher isso. E toca o meu. Aqui está um personagem que continua se movendo. Quando isso acontece? Quando não consigo chegar a um destino porque ele continua tentando. Certo? Acho que vamos deixar isso como está, realmente não importa. O que precisaremos fazer é consertar o elevador. Porque agora o elevador simplesmente não abre aquela plataforma, não é? Nós temos uma chave. Vamos para o nosso elevador. Vá rapidamente até aqui. Lugar. Comeu. O que acontece a seguir? Não. OK. Eu acho que isso é bem simples. Nós vamos para o elevador e eu não chamei o Pence. Eu ligo para Pence no final de um evento, qual o elevador alcança, perto do elevador. perto do elevador E ela. Esmagar Oh, espero não ter te esmagado, mas há uma razão para esse acidente Quando eu adicionei a cerca, ela precisa fazer uma vez após esse galho, caso contrário, ela continua reproduzindo a animação repetidamente. Ele continua rodando isso repetidamente, muito rápido por quadro, e ele quebra isso. E outra coisa que notei é que, quando estamos criando um labirinto, estamos gerando E estamos mantendo a referência assim. Mas quando estamos criando um novo labirinto, não temos essa referência Então, o que faremos é ir para o planeta inicial, certo? E quando continuar, vamos começar com nossos modos de jogo Temos uma referência sobre um modo de jogo aqui. Agora, nós não temos. Mas nós temos no controle, eu acho, um controle não está mais aqui, aqui está. Na tela. Então, temos uma referência de jogador. Sabemos que para o controle do jogo ter essa referência de jogador, ele já foi preenchido quando passamos para o nível dois, o gerador de labirinto de fatores, onde está Aqui está, e vamos pegar o controle do player. De cima para baixo. Converta animal de estimação. Vamos receber um pagador. E vamos definir nossa referência de jogo aqui para esta. Vá jogar. Tudo deve estar em ordem. O elevador está fechado. Nós já temos uma chave. Em seguida, esmague novamente. Ok, depois de um pouco de pesquisa, percebi que há duas coisas erradas. Primeiro de tudo, no labirinto, quando estamos criando o labirinto, estamos gerando o jogador e segurando a referência Mas quando estamos reabrindo um labirinto, não temos como ultrapassar essa referência de. Não definimos essa Então, o novo labirinto não sabe qual é o jogador. Então, para corrigir isso, vamos vir aqui no começo. Comece a jogar. Quando dizemos continuar, mas quando você continua no labirinto, vamos definir a referência do jogador, vamos pegar nosso controlador de jogador Nós vamos descer. Vamos fazer dele um elenco puro. Eu vou me conectar. Na verdade, vamos obter uma referência de jogo. E vamos conectar essa referência do player ao nosso player. Então, agora, o novo labirinto conhece um jogador. Agora, a próxima coisa que tem um problema é, aqui, aqui. Interessante. No início do evento de sobreposição, quando estamos gerando o Eu cometi um erro aqui. Quando estou pedindo o dobro do tamanho do labirinto, quantos ladrilhos ele pode caber basicamente Estou perguntando com o acompanhante. Então, se eu adicionar mais um, isso pode caber, e então eu vou em frente e não adiciono mais um porque ele se alimenta Então, eu deveria estar perguntando se o labirinto atual, e o que me deu a entender isso, é que, nas duas vezes em que tive um acidente, foi porque o labirinto em que tivemos esse erro foi criado aqui em cima É o único código de erro que realmente criamos. É incrível que isso tenha aquecido acidentalmente. Então, temos esse labirinto que não dá para construir mais. E quando nós dois percebemos que ele caiu, ele tem esse problema Então, sim, esse era o problema. Estava construindo mais do que podia suportar. Não aguento mais, e algumas de nossas regras aqui podem dizer que não podemos construir algo, talvez algum chicote tenha congelado Agora, vamos testar uma última vez. E o elevador. Ainda podemos nos mudar para cá, mas acho que está tudo bem, se não escaparmos por engano no começo, quando estamos entrando. Isso seria bom. Então, luz muito brilhante. Você altera as configurações da câmera. Vou para o segundo labirinto, vou pegar a chave. Vamos adicionar mais um pouco de tempo. Vamos ver essa coisa infinita acontecendo. Esse é o próximo labirinto. O. Quando eu ejeto, o labirinto abaixo foi destruído Algo ficou. O baú grande não é destruído. Provavelmente, quando adicionado , deveria estar aqui. Deveria haver um baú. Há um baú aqui. Os baús grandes precisam ser adicionados à lista de atores destruidores, e temos o terceiro labirinto e o que está ficando cada vez adicionados à lista de atores destruidores, e temos o terceiro labirinto e o que está ficando cada vez maior. Vamos para o lado O. Aqui. A chave. Um momento também na época. O que é o elevador? Aqui. Possivelmente, a próxima fase deve ser maior do que esta. Na verdade, é menor. Estamos reduzindo de tamanho? Estamos reduzindo de tamanho? Ou é maior? Só que este tem três quartos. Nós temos dois. Vamos dar o pontapé aqui. Maior, eu não sei. E parece o mesmo. Um. É a aparência. A chave do ator aqui. Três quartos. Quanto adicionamos todas as vezes? Acho que adicionamos três blocos toda vez. Dois. Não, vai ser aleatório, não é? Um, dois, três, quatro, cinco ou seis até oito até 12 13, 14, em 21. Dois, 22 e blocos. Vamos conferir o próximo. Feito isso desde o início, conte os blocos. Com a chave. A qualquer momento. Vamos passar um tempo. Tudo bem. No player parece maior agora, um, dois, três, quatro, cinco, 1012, 14, 15 2021, 23, 24, 26, 27, 29 e oito e, f. Oh, estamos adicionando caixas. Nós os estamos adicionando lentamente. Podemos aumentá-lo se quisermos, como o nível do gerador mais três a cada nível, e ele fica cada vez maior. Agora, nossa parte principal está pronta. A única coisa que precisamos adicionar é nossa IA e escolher um pouco nossas cores e luzes Oh, este será eu para este. Eu vou te ver na próxima. Adeus 113. Importação de personagens de Morigesh e sistema de saúde de IA: Olá, bem-vindo de volta ao Game Design Workshop e ao Rail Engine Five Procedural Dungeon Actional Anteriormente, terminamos com nossos bugs. Na verdade, não acabamos com nossos insetos. Tenho certeza de que encontraremos mais. Mas à medida que os encontrarmos, vamos consertá-los. Agora, é hora de começar nossa IA, o que significa que também precisamos explicar algumas coisas. Mas vamos começar criando uma pasta dentro de suas plantas Toda essa IA. Vamos entrar nessa pasta. E também, vamos fazer o download. Ah, não, a partir daqui. Nosso personagem Paragon, Morgue Mies, Marie, não tenho certeza de como é escrito, como é pronunciado, o que estará Se você não o tem, pode encontrá-lo gratuitamente no mercado, da mesma forma que mostramos nosso outro personagem Paragon, Revenant Ah. Vamos adicioná-lo ao projeto. Está aqui. Isso vai demorar um pouco. Ah. Agora que temos nosso personagem Paragon. Vamos voltar ao nosso, vamos verificar se o temos. Personagens hipotecários, áudio. Um herói. Certo. Sim. Tudo parece estar bem. Acabei de verificar as animações do resto das pastas, mas vamos para a nossa pasta A, que não existe Vou criá-lo novamente. Eu realmente pensei que sim. De qualquer forma. Nesta pasta, vamos ao nosso personagem Morgs. Personagens, diz Mig. Vamos duplicar esse player de hipoteca. Vamos arrastá-lo e soltá-lo na pasta AI. Oh, primeiro de tudo, temos nosso personagem. A IA precisa de um personagem. A segunda coisa que uma IA precisa é de um controlador, que seja o mesmo do jogador. Mas vamos clicar em AI Controller. Lá podemos usar Lue print e AI. E vamos selecionar AI Controller. Vamos dar uma olhada porque podemos ter controladores diferentes para inimigos diferentes E vamos renomear o personagem para I one Resumindo, o que é o controlador de IA? Ele foi projetado para governar o comportamento da IA, pois é para nosso personagem decidimos as entradas de nosso personagem, decidimos o que o jogador pressiona, na verdade, e o controle traduz isso para o personagem, para o I ou para qualquer Mas o mesmo acontece com o controlador da IA. Abrange o comportamento. Agora, a próxima coisa que precisamos é um comportamento de IA t. Vamos chamar isso de AI AIP one E o que é uma árvore de decisão, árvore de comportamento de IA? Bem, é uma estrutura de tomada de decisão. Podemos chamá-lo de algo assim. É uma árvore, organizada em t com vários nós que determinam o que a IA deve fazer, com base nas regras. E as árvores podem incluir outras árvores. Eles podem decidir administrar outras árvores e ser honestos realizar tarefas complexas e com uma maneira fácil de depurá-las. Agora, a árvore de comportamento vem com outra coisa chamada quadro-negro, que é responsável por manter os valores É um modelo de valores para a árvore de comportamento. Ele armazena os dados e é eficiente se comunicar com a árvore e os dados que armazenamos. Mas, para ser honesto, também é um pouco exagerado para nossa escala de IA, mas vamos usá-la apenas para mostrar como a estamos usando É mais projetado para ações de IA muito complexas. Bem, vamos chamar isso. Meu filho. E a próxima coisa que precisaremos é de um serviço e de algumas tarefas. O que é um serviço? É um tipo especial de nó decorador no comportamento realizar tarefas intervalos regulares, como fazer isso nesse período de tempo Por exemplo, usaremos hos para obter alguns atributos do nosso personagem e passá-los para a ala negra. E as tarefas são as coisas que elas são fundamentais para as árvores de comportamento. Eles representam cada ação ou conjunto de ações que a IA pode realizar. Por exemplo, usaremos um t prescrito, por exemplo, que é movido para o local, mas podemos criar uma tarefa Poderíamos fazer com que uma tarefa que seria muito mais complicada fosse transferida para um local, como se ela pudesse ter muitas outras regras. Mas vamos nos aprofundar nas tarefas e nos serviços ao criá-los. Porque, por enquanto, devemos inserir nosso personagem de IA. E faça com que ele compile. Para fazer isso, será algo muito fácil como selecionar tudo e excluí-lo Também excluiremos a contagem de contas, o que está atacando, o ataque de salvamento, a aparência básica , o turno básico e, claro, excluiremos a câmera polo e o boom da câmera Mas vamos adicionar algumas coisas mais tarde. Agora, poderíamos ter usado o modelo de terceira pessoa para fazer isso, mas duplicar e excluir muitas coisas consumiria mais tempo Oh, arquive e salve. Faça tudo isso. Vamos fechar tudo agora. Tenha o material de IA. Além disso, vamos abrir o controlador de IA do inimigo para fazer um gráfico uniforme. A única coisa que precisaremos aqui é o comportamento t. O comportamento t seria nosso t. Savors. Agora, esse é o único código que nosso controlador precisa ao redor da árvore. Vou fechar isso. Vamos abrir a árvore de IA. Quadro negro Agora, podemos acessar o quadro-negro a árvore de IA, esses dois topos aqui Na verdade, não precisamos que o quadro-negro seja aberto, não abra a árvore de IA Vamos voltar ao nosso inimigo da IA e criar algo simples. Digamos que sempre que soframos danos ou qualquer dano. Reduziremos nossa saúde. Ah, vamos criar duas variáveis. Uma seria b, seriam carros alegóricos, e a outra seria a saúde inerente E o próximo seria M Health. Oh, vamos pegar nosso C e saúde. Vamos subtrair. O dano. Vamos reduzir a flutuação para zero e maximizar a saúde. E, na verdade, vamos compilar e definir alguns valores padrão. Digamos que a saúde do MC seria Quantas eliminações a IA deve receber Digamos que três. Oh, vamos colocar três. Saúde. Vamos definir o valor de queda do t atual para três. Ou podemos começar a jogar e definir a saúde máxima para a saúde atual. Oh, vamos verificar se isso é menor ou igual a zero e vamos ramificar. Não vai tocar nenhum som. D, o que seria algo deste. Bananas atacam a xícara Guo Então é um ataque feminino, eu não sei. Parece um sucesso. E então vamos criar dois eventos para clientes. Replique isso, uma será chamada de morte. E o outro será chamado personagem de atordoamento depois de sermos atingidos e ainda estiver saudável, ficaremos atordoados ou atordoados E se não, vai morrer. Agora temos um sistema ou uma IA para ser danificado e/ou atordoado Eu acho que isso é suficiente para este. Vamos continuar na próxima. Tchau. 114. Retargeting de animações revenentes para Morigesh: Olá, bem-vindo de volta ao Game Design Workshop, real Engine five Procedural Dungeon RPG de ação Anteriormente, criamos nosso plano de inimigos da NI. Criamos nosso controlador inimigo de IA, nossa árvore de comportamento e nosso quadro-negro Então fomos em frente e criamos um código. Na verdade, excluímos primeiro o código que já estava aqui e alguns componentes. E então criamos um sistema de danos para reduzir nossa saúde sempre que formos danificados. E se for zero, nossa saúde, vamos morrer ou não, e vamos tocar um som e ficar atordoados Agora, continuamos com nossa mecânica. Precisamos novamente de uma máquina estatal. Então, vamos para nossa pasta de IA, escreveremos, clicaremos, acessaremos os esquemas e criaremos uma enumeração de enumeradores E vamos chamá-lo de E AI one states. Vamos entrar e adicionar alguns rebeldes. Digamos que nossos estados sejam patrulhas. Se essa é a grafia correta, mas não importa, Ataque Digamos que. Vamos também ter uma posição. Use a ortografia para atacar. Muitas palavras neste. Então, agora que temos os estados. Vamos voltar à nossa IA e aprimorá-la. Vamos datar a variável, vamos chamá-la de IA. Vai ser do tipo E oito, eu um estados. Agora, vamos terminar com nosso evento Stan porque vai ser fácil. Vamos perguntar se nosso estado atual é igual a stat e, se for, não faremos nada Se não for, vamos definir nosso estado e jogar Amontage Agora, vamos criar o Amontage. Vá encontrar nossa animação, mais. Mortgage e eu vamos procurar por t. Na verdade, precisamos criar uma montagem a partir dela, oito montagens de animação , e eu vou entrar na montagem e deixar o estado na parte superior do corpo, a fenda na parte superior do corpo fenda na parte superior do Porque realmente não precisamos fazer muita coisa nesse plano de animação porque ele está configurado para esse personagem. Isso é errado. Agora, quando ele abre o errado, podemos mudá-lo daqui, os três pontos aqui, vão para o que queremos Agora, isso já está usando o que nós meio queremos em gramas, tudo. E no gráfico de eventos, tudo está configurado para o jogador de Morigs. Não usaremos os ataques nem nada, mas também não teremos erros. Não, vamos voltar, vou deletar isso, fechar isso. Eu também vou fechar a montagem. Para a montagem, vamos escolher a frente térmica. Os dois. Vou arrastar e soltar isso aqui. Não sei por que existem dois. O outro deve ser o modelo. De qualquer forma. Então, essa é a montagem da peça A montagem mooch one. E precisamos conectar a malha esquelética, e eu vou trazer novamente o Montage. E agora, por que precisamos do mais avançado? Porque, quando concluído, queremos que isso seja concluído, que o estado volte ao ataque. Porque aconteça o que acontecer, mesmo a IA não perceba que há um jogador por perto, se um jogador atirar nela, ela mudará para atacar o jogador Basicamente, atire em direção ao jogador. Agora, vamos completar nossa morte. Em primeiro lugar, o que quer que aconteça precisa acontecer uma vez. Faça uma vez. Caso seja danificado novamente e isso seja acionado, precisamos de uma variável para saber que estamos mortos Temos um B. Vamos chamar isso de morte. Vamos definir isso como verdadeiro. A próxima coisa que vamos fazer é tocar um som. Sim. Para o som, precisamos gritar Mulher grita, aqui está. É um bom som de morte. Eu vou para uma colisão de atores na verdade, actocs para desativar O ator ativa a colisão para desativar a mariposa. De qualquer forma, vamos definir o ator. Pi desativado. Vamos fazer com que nosso personagem se mova porque é o mesmo que o ar. Vamos colocar a caminhada em zero. Na verdade, vamos definir a velocidade para zero também. A razão pela qual estamos fazendo isso, deixando a velocidade e o máximo caminharem até zero é para o caso de nosso gráfico de animação, afetado por essas variáveis, receber algum comando errado no último segundo, talvez alguma coisa Então, quando morremos, definimos isso para zero, e nada mais mudamos a animação. Agora, a próxima coisa que devemos fazer é tocar uma montagem. Bem, vamos encontrar a morte. Essa animação um pouco. Se tivéssemos uma partícula ou algo assim e ela desaparecesse, tudo bem Mas vamos fazer algo mais de uma vez. Acho que Um bar, qual é o nome dele? Revenant? Como uma morte melhor. Na verdade, nós o usamos aqui. Então, o que fazemos é acessar nosso navegador de conteúdo. Morte, esta é uma sequência de animação de morte anterior a Revenant. Vamos duplicar isso. Lubrifique. Aqui está. Vamos movê-lo para a pasta AI, para que possamos trabalhar com mais clareza. Eu o perdi agora. Alvo daqui até A. Aqui. Não, vou clicar no alvo, o que também o duplicará, mas o alvo seria vamos fazer o Arti E a fonte precisa de um retorno. Eu seria mota. Aqui vamos nós, um alvo de pressão. Vamos ver o que criamos com a IA. Não foi criado aqui. Acho que sim, está no conteúdo. Tudo bem. Isso parece bom. O esqueleto está um pouco esticado, mas está bem. Acho que é um pouco. Parece estar bem. Ah, Dave. Agora, a animação de retargeting geralmente não é tão fácil, mas os personagens Paragon estão bem A maioria deles, como Mortgage e qual é o nome dele, Revenant. Eu não deveria colocá-lo na pasta AI, ou agora porque as pastas de não funcionavam. Já existe. Oh, vamos renomear isso. Morte alvo. Ou é morte redirecionada, e podemos movê-la. E vamos fazer do oito uma montagem a partir disso. Vamos ligar, na verdade, reclamar uma multa. Vamos entrar na montagem, mudar o espaço do grupo para a parte superior do corpo Então, compile. Vamos voltar para o nosso inimigo e jogar montagem. Ton será nossa malha, e as montas serão as que acabamos de criar Agora, precisamos descartar alguns itens cujo código já existe, ou seja, nossos códigos podem ser componentes, mas copiando e colando, por enquanto, temos Não em nossos itens, cai em nosso peito. Eu vou até o nosso peito. E eu vou fazer o inventário. Este é o nosso código para descartar itens. OK. Sim, deveríamos fazer um comentário. Agora, a parte que precisamos é basicamente o fracasso aqui. preciso do gerador, mas não temos uma referência. Vamos apenas copiar isso. São esses itens do número x. Vamos torná-la uma variável estática de dois. Vamos colocar isso aqui. E alcance de 1 a 2. Definir os dois aqui realmente não importava, mas de qualquer forma. E para um gerador de labirinto, vamos apenas criar uma variável, colocá-la e editar a instância Ao responder à IA, podemos passar essa referência. A razão pela qual precisamos do gerador , é claro, é adicionar para destruir. Temos o baú aberto. Dissemos que isso não foi adicionado para ser destruído. Mas vamos corrigir isso em outra passagem de depuração. Fora. A última coisa que devemos fazer é depois que pudéssemos possuir nosso controlador. Faça isso, nós vamos. Sim. Taller Vamos comprar um controlador de IA Não somos mais jogadores. Nós somos eu. Vamos para Bs. Isso nos deixa um monte de controladores de IA que não fazem nada Mas poderíamos criar um sistema que a IA, que fosse ativada posteriormente, usasse um controlador despossuído Ah. Vamos deixar o corpo como está morto porque ele será destruído quando o mapa for deletado. Quando passarmos para o próximo nível, não importará que os corpos tenham sido deixados no nível anterior. Eles serão destruídos com isso. Eu acho que esse é um bom ponto de parada. Vamos continuar na próxima. Por A. 115. Verificação de alcance de IA e protetores Hellgate: Olá, bem-vindo de volta ao Game Design Workshop, curso R engine five Procedural Dungeon APs de ação Anteriormente, terminamos com nossos eventos e os da morte. Criamos um estado para IA e enumeração de datas, e dissemos que se o personagem não fosse manchado, então fique de pé, e jogamos uma montagem e uma versão completa dessa montagem Nós mudamos o estado para atacar. Agora, quando morremos, uma vez definimos uma variável como morta. Nós tocamos um som. colocamos a colisão, o tique-taque Basicamente, colocamos a colisão, o tique-taque e o movimento em zero e jogamos uma montagem que redirecionamos do outro personagem modelo Por alguma razão, eu ainda acho que o nome é Cabal. Talvez isso me lembre muito do sangue de um personagem, Caleb, porque eu sei que não é Talvez Cabal venha à minha mente. Eu não sei Caminho. Depois de jogarmos nossa montagem, colocamos um número máximo de itens aleatoriamente de 1 a 2 e recorremos ao nosso mecânico para soltar E temos aqui uma caneta que escolhe um item aleatório de 1 E então possuímos o controlador que dissemos, ele fará com que vários controladores não sejam excluídos, mas dará a oportunidade de criar um sistema para cada nova IA possua um controlador não utilizado Agora, vamos continuar com nosso mecanismo de detecção de jogadores. Para fazer isso, precisaremos de uma colisão esférica. Vamos para nossa janela de exibição. Na verdade, vemos isso, quão grande é. Vamos definir o número dois, algo como 900. Acho que essa deve ser uma boa variedade ao nosso redor. Essa colisão será nosso alcance e detecção do jogador. É uma área agradável. Oh, essa colisão está procurando apenas uma coisa novamente. Então, vamos às nossas configurações de colisão. Vamos mudar para personalizado, ignorar tudo, exceto lagoas. Mas também conhece as outras IAs, elas se sobrepõem. Eles criam. Você poderia avançar o código com alguma coisa. Talvez eles se comuniquem entre si. Eu não sei Uma é falta de saúde, outra vem e a cura. Vamos ver. Depende da sua imaginação. Não. Vamos fazer alguma coisa com essa esfera. Vamos precisar de um evento de sobreposição inicial e de um evento de sobreposição final Vamos começar com o começo. Em primeiro lugar, perguntamos se o outro componente é a colisão do jogador Especialmente, a cápsula. Então, puxe o outro componente. Fizemos isso tantas vezes. Agora, a próxima coisa que devemos fazer é criar uma variável no intervalo e configurá-la para quando isso for verdade. Depois, vamos lançar uma linha tase por canal. Temos visibilidade do jogador ou é porque o jogador estava atrás de uma parede e colidiu com a esfera Então, vamos começar no local. Vou terminar com nosso jogador. Então, um local. Vou conectar isso até o final. Vou ajustar a visibilidade para a câmera e vamos quebrar nosso resultado de aquecimento. Se o outro ator aqueceu g. Na verdade, não temos um ator para a tag. No entanto, podemos realmente fazer um ator igual e continuar de novo. Basta verificar se é o outro ator do peão. Se for o peão ou o bem, se não for o peão, faça nada, e se for um peão, vamos definir o estado para E agora que temos o telefone, podemos realmente pedir para tocar de cima para baixo sobre personagens e músicas de ação Então nossa ação começa. Agora, vamos acabar com a sobreposição, vai ser bem simples Vamos verificar se a sobreposição final é o personagem ou se o oponente tem um abraço P. O oponente tem um abraço P. Vamos colocar um galho e, se isso for verdade, vamos definir o alcance em amigos Um sistema que criamos aqui para detecção. Tudo pode ser criado também dentro da árvore de comportamento com um sistema complexo como o EQ S, que é um sistema de consulta de ambiente e outras formas pelas quais podemos comparar traços de linha aqui ou não Como eu disse, usar o quadro-negro e o processo de adicionar chaves, remover chaves, atualizar chaves é meio que um exagero para uma IA tão simples Então, vamos fazer uma mistura de ambos e falar sobre o meio ambiente, a próxima coisa que precisamos. Quando estamos no modo de ataque, jogador de repente sai da linha de visão. Precisamos de um mecanismo para saber, agora que o jogador está na linha de visão, atacar. Como os jogadores podem resolver isso, você sabe, eles podem simplesmente se esconder atrás dos cantos, eles podem se esconder, eles podem fazer muitas coisas. Portanto, nossa IA deve saber quando está à vista direta ou precisa se mover para fazer isso. Vamos começar nosso jogo inicial. E vamos fazer um Primer pi. Por exemplo, isso pode ser um serviço que funciona cada período específico de tempo e faz uma determinada coisa. Mas vamos também porque vamos usar um serviço para atualizar nossas informações, nossa saúde, nosso estado. Vamos fazer isso, porque jogamos com tempos anteriores, usamos níveis anteriores Eles veem como podemos iniciá-los e pará-los quando quisermos. Vamos promover esse pacote. Falamos que o controle, em parte, é o que controla o tempo e chamamos de controle como o tempo. E instantaneamente, eu vou pausá-lo. No momento em que é criado, está sendo colocado. Vamos colocar um tempo em 0,3. Vamos configurá-lo para parecer. Vamos criar um respiradouro personalizado. Dê um nome a esse look para player. O que ele vai fazer lançar uma linha de rastreamento Mas vamos copiar daqui. Isso é exatamente o que queríamos fazer. Nós também precisamos disso e isso é igual a um. Vamos copiar tudo isso. É isso que esse evento fará. Vamos lançar uma linha de rastreamento do ator para o personagem, para verificar se ela aqueceu nosso jogador Agora, o que acontece se for um jogador ou não, precisaremos de uma variável, tudo incluído, será uma variável de ouro Vou defini-lo como verdadeiro e, se não for, vou defini-lo como falso. Se for verdade, vamos verificar se estamos surpresos. Se não formos, vamos configurar nosso estado para atacar. Então esse seria o nosso mecanismo para proteger o jogador. Agora, a próxima coisa a fazer é realmente usar nossa IA. Para isso, também precisaremos de algumas variáveis. Vamos precisar de um local hospedeiro porque vamos criá-los nos portões Então, esse é o nosso anfitrião. I. E as IAs devem saber se o hospedeiro está morto. Então, se o jogador matar o portão do inferno, ele deve fazer alguma coisa. Vamos criar outra variável. Vai ser ouro, todo esse hospedeiro morto. Então, agora podemos terminar o código de nossos portões bloqueados. Vamos encontrar nossos portões principais. Vamos até Ben Graf começar a jogar. Na sequência, vamos adicionar outro nó. Vamos subir dessa vez. E o que vamos fazer é fazer um Ford Loop. Não é uma forma de loop. Seja como for, precisamos de uma quantidade aleatória de IA para gerar aleatoriamente. Alcance aleatório. Agora, vamos começar com um nível de gerador. Vamos pegar nossa referência de gerador, que não temos. Vamos criar um para isso. Vamos do tipo P. P maze gen Vamos expô-lo na colher. Vamos até seu telefone, que está em nosso gerador, imprime, gerador Maze O portão do inferno está aqui. Os portões do Hall são uma grande coisa por aqui. Eu compilei o pave, mas o labirinto. Essa é a linha do trice. Este é o patrocinador do Hall Gate. Então eu não achei isso errado. Vamos verificar. Então, vamos redefinir isso para Hell Gate. E agora vamos nos colocar no gerador. Compilando o bator, o portão, o jato Vamos subir de nível. Do gerador mínimo máximo Um. Coloque isso aleatoriamente. Escolha aleatoriamente. B mais um ou o nível do gerador. Agora, precisamos todos os personagens e ligar para plus. Personagens de IA. Na transformação não expus a localização do hospedeiro no gerador Eu não ligo o gerador. Vamos conectar isso aqui. Eu preciso expor. Isso é para expor a localização do host. Oito. E para a localização do anfitrião, vou obter a localização. Nós os geramos? Bem, lembre-se daquele ponto aleatório na caixa delimitadora. É isso que vamos usar. Ponto de cúpula em uma caixa delimitadora com metade do tamanho de 300, um, e o centro deve ser nossa localização de fatores, dado b de altura mais 40, digamos, seria nosso Agora vamos obter a referência do gerador, Troy, vou para At the AI Também precisamos de mais uma lista disso e promover essa variedade. Realmente mude de ator para um, isso não será uma questão de zumbis, nossa IA Vou conectar isso aqui. Precisamos apenas adicionar algo a isso. Adicione ops esse ator. Agora, quais atores destruir? Vamos chamar isso de meus zumbis. Não, não é IA, não é o nome da nossa IA. O que eu já chamo de zumbis e gosto. O que fazemos com esses zumbis? Quando morremos, quando o portão morrer. Você acha que a morte está aqui. Queremos os dois zumbis que morremos. Então, antes de destruirmos o ator, vamos usar a matriz M Zombies Essa destruição deve ser concluída, conectada a partir daqui. E para meus zumbis, vamos até aquele pai anfitrião , todos os zumbis, todos os inimigos, sabemos que o portão do inferno morreu E isso seria um. Acho que é o suficiente para este. Vamos continuar na próxima. Tchau 116. Tiro de balas com IA e mecânica de knockback: Olá, bem-vindo de volta ao workshop de design de jogos sobre real de criação de RPs de ação processuais de Dungeon no Engine Five RPs de ação processuais de Dungeon Anteriormente, criamos um sistema para detectar nosso player. Em nossa IA, adicionamos esse tubo de colisão que é responsável pela sobreposição inicial e final para verificar se o jogador está Então, ao começar a sobreposição, passamos por uma tase de linha para ver se nosso alvo é o jogador Podemos ter uma visibilidade direta para o jogador ou há algo intermediário? E se for, então começamos a atacar e começamos nosso filme de ação, nossa música de ação. Se não se sobrepusesse, apenas definimos o intervalo de Em seguida, criamos um cronômetro no início do jogo que colocamos , responsável por criar um sistema que verifica constantemente se o jogador está ao alcance ou Se for, se não formos Stan, estamos atacando. E esse sistema é um mecanismo que funciona ao longo do tempo, como um serviço, quando queremos e, quando queremos, podemos colocá-lo por meio de nossa alça lateral, que é responsável por gerenciar os cronômetros, basicamente Em seguida, concluímos nosso mecanismo de geração em nossas portas principais de nossa IA, usamos um loop for com nossa faixa aleatória de gêneros do nível do gerador, adicionando aleatoriamente um, no nível mais um, e depois usamos um apontamento usamos um loop for com nossa faixa aleatória de gêneros do nível do gerador, adicionando aleatoriamente faixa aleatória de gêneros do nível do aleatório em um ponto aleatório na caixa delimitadora para gerar nossa aleatório em um ponto aleatório IA ao redor nosso mecanismo de geração em nossas portas principais de nossa IA, usamos um loop for com nossa faixa aleatória de gêneros do nível do gerador, adicionando aleatoriamente um, no nível mais um, e depois usamos um apontamento aleatório em um ponto aleatório na caixa delimitadora para gerar nossa IA ao redor do portão do inferno. Nós os adicionamos a uma matriz de atores para destruir em Me, e os adicionamos a outra matriz para serem mysombies, como a chamávamos Então, quando o portão de cura morre, isso não é morte. Ou aqui está a morte. E o portão de cura morre. Ele passa por cada um dos zumbis, cada uma de nossas IAs Então, ei, eu morri. Ele define que a variável host está morta e, em seguida, age sozinha. Oh, vamos continuar fazendo a filmagem real. E o tiroteio real será realizado através da árvore. E para fazer isso, precisaremos de uma interface de modelo, que possa ser chamada para qualquer IA que a árvore esteja usando Vamos para nossa pasta AI. Vamos criar uma interface de diagrama. Vamos chamar isso de B I AI. Vamos abri-lo. É uma função. Isso se chama tachinha. Na verdade, vamos chamá-lo de filmar. Compile as configurações de Dave Bator A I nesta interface. Na Ai e agora temos nossa interface de IoT. Vamos clicar duas vezes no evento, a primeira coisa que devemos perguntar é se estamos mortos, porque se estivermos mortos, não atire. E se não estivermos mortos, vamos tocar uma montagem. Vamos criar essa montagem, acesse no navegador Vamos ao necrotério, necrotério , e procurar por Marie B. Há um ataque primário de montagem lento. Vamos dar uma olhada. Aqui parece bom. Nós vamos usar isso. Quando não estivermos mortos, vamos montar Advance Node Vamos usar a malha aceletal. Mais uma vez, solte-o aqui. A próxima coisa que precisamos fazer é atirar nossa bala. Vamos criar nossa bala. Vamos para nossa pasta Blueprints. Vamos para Habilidades. Vamos clicar com o botão direito do mouse. Vamos usar Blueprint class door e P AI bullet Oh, primeiro de tudo, vamos adicionar um sistema de partículas AD. Meu gás. Projétil. Aqui estamos. É o brilho da adaga. A próxima coisa que precisaremos. A malha estática seria uma adaga. Este perng vendeu o LP A M. Precisamos girá-lo um pouco. Gire a partícula Precisa girar a lâmina. É menor e mais particulado, então vamos reduzir para 1,5. Isso parece certo. E precisa de um material. É um tigre mágico. Aqui temos um tigre mágico. No momento, parece melhor. Podemos movê-lo um pouco. Essa linha, mas está bem. Não conseguiremos ver. Nós apenas vemos um brilho e uma adaga Agora, o que precisamos é desligar a colisão dessa adaga porque vamos usar uma cápsula de colisão para fazer a colisão Isso não gerará sobreposição. Não haverá colisão, e isso é uma cápsula Na verdade, não tem pais. A Sra. deveria estar ligada. Vamos girá-lo. É menor. Um pouco. Eu acho que está tudo bem. Escrevendo nesta cápsula só procura por pon, uma colisão. Na verdade, ele também busca paredes, tudo exceto próticas, blocos dinâmicos Sobreponha em. Não tenho certeza sobre a palavra dinâmica, se quisermos, porque talvez quiséssemos atravessar os portões do inferno. Vamos deixar as coisas mais fáceis. É mais fácil. E a última coisa que precisamos acrescentar é um movimento de projétil Precisaremos desligar a gravidade. Vamos definir a velocidade para zero. E a última coisa que precisamos fazer é começar a jogar, obter o movimento do projétil em alta velocidade e promovê-lo para uma variável que vamos exportar em E faça com que seja um incenso, edite, compile e salve. Vamos voltar à nossa IA e continuar após nossa montagem. Claro, o ator seria nossa arma de inteligência artificial. Não é uma bala É um marcador, mas está tudo bem. Não, nós o geramos e qual é a velocidade? Felizmente, se continuarmos com o comportamento, me desculpe. Para o nosso esqueleto. Há um soquete chamado pon pon r. Podemos usar isso. Uma boa localização. Vamos voltar à nossa IA e obter a localização do nosso mesh ckt. Aqui estão todas as velocidades. Nós só vamos continuar. Vou voltar à rotação. Vamos dar uma olhada na rotação. Vamos avançar . Ali mesmo. Vamos multiplicar o que será basicamente nossa cabeça da bala Então, vamos fazer um número inteiro, digamos 200, um pouco mais rápido que os jogadores Seria isso. Esse seria o nosso tiroteio. Agora, a filmagem do evento, como dissemos , será conduzida pela árvore. É por isso que é uma interface. Assim, a árvore pode ser enviada para algo irrelevante para o ator. O ator só precisará ter o inter No. Na verdade, podemos ir e verificar alguns telefones. Então, se formos jogar, obtemos vários erros em Mortgage, blueprint e Oh, é porque ele encontrou alguns erros. Como eu dupliquei o personagem depois o elenco no projeto de Morgmention, na verdade ocorrerão alguns erros porque eu dupliquei Sim. Então, vamos consertar isso. Obtenha o projeto do necrotério, seu original. Essa maneira ruim de procurá-lo. Personagem, heróis, Morges, jogador do necrotério, exclua tudo isso Vá até a planta. Vamos ver isso. Então, vamos isso. Isso e isso. Agora, está tudo bem. Não, podemos jogar. Vamos procurar um portão infernal. E temos três IAs. Ou nós temos três. Devemos ter um ou 21 porque é baseado em o. Sim, porque nosso loop for é baseado em zero. Vamos consertar isso. Vamos voltar para o nosso portão do inferno. De qualquer forma, é um erro muito básico ter acontecido. Bloqueie os inimigos. Zero a um significa dois. Vamos fazer isso com menos um. Vamos ser de zero a zero, o que significa um. E agora não temos portão do inferno. Novamente, temos um portão do inferno. Ela não nos quer dessa vez. Ei, nós temos um portão do inferno, e temos um inimigo lá. Certo? Vamos filmar isso. Vamos tentar matá-lo. Na verdade, estou acertando, mas na verdade não tem um fundo Tem som. Eu só quero fechar o som. Não tem o rebocador I. Eu vou para Atifs, nós vamos para os rebocadores, vamos adicionar o rebocador E, eu acho, não. Eu era para itens, interface, Away E é para o inimigo. Nós temos o rebocador, devemos ser capazes de matar um. Eles estão morrendo. Eles estão se levantando, mas estão morrendo. Os itens estão sendo gerados em zero, zero, zero. Vamos lá, agora. Vamos voltar à nossa IA e descobrir isso bem rápido. Morte, aqui está uma morte, um dilúvio. Claro, isso resultou em 000 porque não definimos um local. A localização seria simplesmente. Mas eles jogam itens. Então isso é legal. Sim, existe uma IA Tweet e mate-o e veja se ele derruba itens diretamente no portão, não importa. Agora, se eu estiver clicando nele e movendo o mouse, volto para cima, mas ele lança itens. Agora, o próximo evento que será conduzido por nossa interface é o evento de retração, que é algo que também já podemos testar Podemos usar isso, podemos usar a IA médica e ela fica bloqueada. Oh, vou acessar nossa interface azul, AI, e uma função chamada Porque essa também é uma mensagem universal. Vamos enviá-lo a partir do nosso ataque Mi, e ele precisa ser para cada IA, não apenas para essa. Ah, vai ser uma interface de agrupamento para enviá-la a qualquer ator Mas acho que esse é um bom ponto de parada por aqui. Vamos continuar na próxima. Adeus. 117. Mecânica de repulsão e atordoamento: Olá, bem-vindo de volta ao workshop de Design de Jogos, Real Engine Five Procedural Dungeon Action ARPZ Anteriormente, criamos o esquema de inteligência artificial de que é necessário uma partícula de malha estática ou nossa malha de raiva, uma partícula para fazê-la brilhar, uma cápsula que detecte o calor ou não calor e um movimento de projétil é necessário uma partícula de malha estática ou nossa malha de raiva, uma partícula para fazê-la brilhar, uma cápsula que detecte o calor ou não calor e um movimento de projétil cápsula que detecte o calor ou não calor e um . Para controlar sua velocidade. Agora, uma coisa que não fizemos foi cuidar da cápsula, mas quando você pressiona um jogador fazer alguma coisa, quando começamos um evento de volta, o que vamos fazer é dar o outro componente. E, na verdade, nós também precisamos, mas agora precisamos de um jogador. E precisamos de filiais. Primeiro, precisamos perguntar se o outro ator é válido. O outro ator é válido? Porque pode ser morto, pode estar sendo destruído ou algo assim. Então, o outro ator é válido? Então o outro ator é jogador? Se não for outro jogador, o outro ator é um inimigo? E se for nosso jogador, você vai aplicar dano ao outro ator. Dano de um. Vamos chamar article, meter , location.coin Para o medidor, vamos usar dot mortgage do Impact, que é uma pequena nuvem Agora, pequena nuvem verde. Se for se o outro ator for um inimigo, não devemos fazer nada. Eu deveria passar por isso. Mas se não for, vamos simplesmente formar essa nuvem. É claro que, por fim, vamos destruir um ator. Por exemplo, se não for um inimigo, for uma parede, você será destruído. Depois da nossa bala BP AI. Prosseguimos e criamos nossa IA de BI, que é nossa interface de modelo para IA, e criamos dois eventos, a filmagem que concluímos e a retrospectiva que vamos fazer agora Agora, para a filmagem, essa não é a filmagem. Isso é uma filmagem. verificando se o personagem está morto. Caso contrário, estamos fazendo uma montagem e gerando essa bala que criamos, bem, é mais provável que seja uma adaga de pingue-pongue E estamos escolhendo o local, o bolso de malha. Desculpe, eu clico. O soquete de massa nomeia a arma R e a velocidade entre ela e a localização do ator com a velocidade que escolhemos Agora, vamos continuar com nosso evento secundário. Não, vamos trazer o Pack. Na verdade, basta clicar duas vezes aqui na cara. Pegamos o evento e vamos definir o estado do personagem como um. Em seguida, vamos obter a localização, mantê-la temporariamente porque vamos nos mover para aquela localização em direção a outro lugar. Vamos tonificar esse local temporário. De volta. E então eu quero fazer outra variável. Vamos criá-lo, na verdade. Eu vou ser do tipo inteiro desse intervalo. Agora, nosso recuo pode ser um pouco confuso às vezes, e atravessar paredes, pode passar por A forma como poderíamos fazer isso seria com linhas de rastreamento e algumas regras mais caras e mais detalhadas, mas tudo bem. Eu vou fazer nosso anel aleatório no alcance, mas no alcance. E digamos 100-150. O que precisamos fazer é tocar uma montagem. Toque uma montagem e vamos criar A Montage. Você vai para nossa pasta Hipoteca. Esse é o Mack. Essa. E vamos criar uma montagem de animação, vamos abrir e eleger o slot da parte superior do corpo Dave s e volte para o nosso y. Eu posso soltar a montagem e essa malha esquelética, e agora temos uma animação Agora, à medida que essa animação acontece, vamos reproduzir uma linha do tempo E na atualização, vamos definir a localização. Vou alertar. Essa seria nossa alavanca temporária. Para B, precisamos de uma direção que vamos multiplicar com nosso intervalo de retorno Converta esse número inteiro, basicamente, a direção precisa vir internamente O que vamos fazer é adicionar um fator de entrada à nossa interface de impressão nba Essa direção. Compilador Dave Se voltarmos para nossa IA agora, nós a temos aqui e podemos trazê-la aqui. Agora, para nosso drive Alpha, vamos entrar na linha do tempo Vamos selecionar a moldura de esqui usada. Vamos adicionar um caminhão flutuante. Vamos adicionar dois pontos. Digamos que o tempo seria 000 primeiro ponto, segundo ponto seria 0,5, digamos um. E esse seria o nosso Alfa. Agora, quando estamos empacotando, a próxima coisa que deve acontecer é mudar estado após o pacote para atacar. E causamos danos a nós mesmos. Se quisermos realmente querer, fazemos isso. Se quisermos que os homens não causem danos, simplesmente não causamos danos a nós mesmos. Seria isso. Temos uma reviravolta. Oh, teste isso. Vá para ganhar nível. Precisamos adicioná-lo ao nosso cheiro. Vamos usar nossa habilidade de mim. Habilidades, onde está o eu. Bem, quando começamos a se sobrepor, e o outro ator é E, o outro ator, e recuamos. Para direção, vamos obter o vetor dianteiro do ator. Uma vez que isso é rotativo com base no personagem. Agora, vamos continuar o teste de que existe uma IA. Existe O. Realmente foi muito longe. Ele morreu. Eu fui até o chão. Achei isso muito alto. Ok, então precisamos corrigir isso. Vamos pausar o Optily. Se você não tentar ler e ter uma caneta lá, está tudo bem. Vamos fazer com que esta nota seja válida aqui. Se não for válido , tente fazer isso. Talvez porque não tenhamos possuído. Sim. O que há de errado com a batida que tem a ver com um ator ator paciente. ator ator paciente Quando o conectamos ao player, vamos abrir o plano do player por um segundo Vamos às plantas, ao nosso personagem principal. Responda a mim, estamos anexando isso. Eu próprio ator, então não. Espere, parece que está ligado. Ainda assim, ator. Estamos jogando, então devemos fazer ping desde o início, primeiro lugar. Ok. Sim, não estou adicionando a localização temporária à direção. Ele faz uma direção a partir daí. É por isso que ele retorna ao início do mapa? É por isso que quando eu derrubo Mack, ele voltou para o primeiro jogou no primeiro ladrilho aqui porque eu estava aqui e se jogou Então, tem uma direção, mas em que parte do mundo. Eu não especifiquei em que lugar do mundo. Temos o problema de texturização novamente. Então, nosso streaming em tamanho real 200. Você pode ver que o mapa aqui está mal texturizado, ótimo E vamos encontrar uma IA. Não há nenhum aqui. Ok. Há uma IA aqui. Ao lado dela. E agora o knock back funciona Estamos apoiando a IA. É muito chato ficar de pé, mas vamos resolver isso Eles deveriam. Parece incomodado Eu vou descobrir isso mais tarde. Vamos continuar fazendo a IA. Nenhuma parte traseira está funcionando, nossos problemas de filmagem, mas nossas costas estão funcionando também estão causando danos Agora, por fim, o que precisamos fazer antes de entrarmos em nossa decisão T é ativar tudo isso Precisamos criar mais dois eventos em nosso BI, I AI, o que realmente me permitirá pintar por um segundo. Não fazemos isso há muito tempo. Oh, digamos que nossa IA está aqui, e há uma parede aqui. E nosso jogador está atrás dessa parede. Agora, quando a IA tenta encontrar o jogador, ela se move como em algum lugar aqui, digamos que chegou a esse ponto. Sua direção seria, na verdade, não para cá, mas para o último lugar para onde ela se move. Mas queríamos nos voltar para o jogador. Então, vamos trapacear um pouco, e vamos usar a rotação, este é um R, estranho R, mas é um R. A rotação baseada no movimento, como usar a rotação E então, quando desligamos isso e usamos a rotação do controlador, que será ajustada para o jogador. Para a IA, se moverá para um ponto e se voltará para o jogador. E definiremos a taxa de rotação e tudo mais na decisão e na tomada de decisão do. O comportamento t. De qualquer forma, vamos voltar ao nosso projeto. E vamos adicionar esses dois eventos. Vamos para B I AI. Função. Vamos chamar esse controlador. Vamos fazer outro, o movimento gira. Vamos até a IA e convocamos esses dois eventos. Para compilar. Dave. Rotação do controlador, rotação do movimento Vamos fazer com que o nosso personagem se mova e obtenha a rotação desejada. O que? O Isso orienta a rotação para o movimento. Esses são os dois. Isso estará desativado e estará na base deles acima. Conecte o movimento do personagem, e isso será ativado e desativado. E seria isso. Nosso código aqui é praticamente feito dentro da IA. Vamos trazer isso até aqui. Também aqui está sozinho, e seria isso. Vamos compilar e salvar. E na próxima, vamos começar com nosso comportamento três. Tchau 118. Variáveis de quadro negro e configuração de árvore de comportamento: Olá, bem-vindo ao Game Design Workshop e ao Real Engine Five Procedural Dungeon Action LPG Anteriormente, terminamos com nossos eventos sobre IA, nossos eventos de BI, nosso evento de mensagens. Terminamos com knock Back. Configuramos nosso personagem para atordoar, definimos um local temporário, um alcance temporário de retração. Reproduzimos animação e, enquanto a animação está sendo reproduzida, reproduzimos uma linha do tempo de 0,5 É mais ou menos a hora da animação e a localização do ator correspondente, que usamos como direção por meio de nosso ataque por e-mail e adicionamos à localização principal. No final, eu esqueci, a imprensa correu, e para dar a direção em que lugar do mundo, passamos pelo local original para estar Agora, quando terminou, configuramos nosso modo de ataque de IA para dois e ele recebe um dano, que na verdade deveria ser o oposto. O motivo é que, bem, isso realmente não importa. Porque se recebermos um dano, ficaremos atordoados Então, sim, é por isso que isso importa porque se primeiro aplicarmos dano e prosseguirmos, qual é o evento de dano? Aqui está, recebemos um dano e ficaremos atordoados. E se já estamos surpresos, isso não nos machucará novamente. Então, depois disso, estamos mudando para atacar. É por isso que essa ordem é importante. Agora, isso meio que incomoda, porque isso não significa que vai esperar até o evento, porque está chamando esse evento. Está chamando de dano aplicado. Acho que não vai esperar. Não podemos colocar um pequeno atraso aqui. De 0,1. Então, para atacar, tenha mais certeza. De qualquer forma. Em seguida, criamos dois outros eventos nos quais estamos usando a rotação desejada do controlador, em vez do movimento orientado que usaremos para mirar em direção ao nosso alvo, nosso jogador. E tudo isso acontecerá no comportamento de IA três. Agora devemos realmente encher o quadro-negro primeiro. Mas antes de fazermos isso, deixe-me explicar algumas coisas. Pela raiz. Este é o primeiro nó executado quando executamos a árvore de comportamento, temos algumas opções. Temos o seletor, a sequência e o paralelo simples O que vamos usar é seletor e sequência, não mais ideais Em alguns casos, poderíamos ter usado um paralelo simples, mas esses são os dois mais comuns. Mas vamos trazer um seletor, e vamos trazer também uma sequência Vocês dois podem ver essas flechas aqui. Se eu trouxer a conexão à raiz dois, infelizmente, conecte apenas uma. Mas traga outro seletor só por causa disso. Você pode ver que temos uma ordem de operações 012. É assim que funciona. Então, se eu trouxer isso aqui, então isso se torna dois. Então, tanto os seletores quanto as sequências são executados da esquerda para a direita para concluir suas As diferenças entre o seletor e as sequências que, como diz na dica de ferramenta, ele deixará de executar quando um de seus filhos for bem-sucedido; quando for o contrário, continuará da esquerda para a direita até que um dos O que vamos usar para o primeiro nó será eleitor Eu vou para cá. Poderíamos ter usado uma sequência. Realmente não importa porque neste nó, sequência seletora ou paralelo, podemos colocar essas decorações, que significa quais são as condições desse Estou divagando. Vamos começar configurando nossas variáveis em nosso quadro-negro As variáveis aqui são chamadas de chaves e, basicamente, são a mesma coisa. Mas para atualizá-los, temos que fazer isso de uma certa maneira. Mas vamos adicioná-los primeiro. Vamos criar b, na verdade precisamos de três bs. Um, dois, três. Precisamos de dois vetores Precisamos também de uma enumeração de oito. Digamos que isso seja oito. Vamos, na verdade, P one estar morto. P dois seria melhor que Host morresse. O puxão três seria em oito. Não precisamos do intervalo porque ele terá outro específico, precisamos do intervalo. Por que não? Vamos ter também ao alcance. Nós podemos usá-lo. Em certo sentido. Ah. Os vetores devem ser hospedeiros O local e o outro devem ser movidos para o local. Agora, por fim, precisamos de um ator. Precisamos do inimigo como eles estão no inimigo. Então, o que faremos é criar um objeto. A diferença é que os objetos estão acima na hierarquia dos atores Não podemos ter atores específicos como uma variável aqui. Não podemos ter um tipo de chave, como alterar o objeto para, por exemplo, esse ator de caso, mas poderíamos alterá-lo para qualquer coisa que quiséssemos que fosse específica. Mas é melhor mantê-lo o mais generalizado possível. Só precisamos controlar se não devemos colocar o ator ou o objeto em algo que não esteja correto porque pode reverter as coisas. Isso pode causar falhas. Então, vamos salvar isso e , na verdade, voltar ao nosso comportamento Poderíamos ter ido até a banheira e caído. 119. Como configurar variáveis de quadro negro e árvores de comportamento de IA: Olá, bem-vindo ao Game Design Workshop n real engine five Procedural Dungeon Action PZ Às vezes, não é bom que você esteja editando um quadro-negro externo e o abra nele e cause algumas falhas De volta à nossa árvore. A primeira coisa deveria ser o leitor, mas isso realmente não importa porque ele executará apenas um serviço Vamos criar no novo serviço. Nomeie este serviço ES, PT service. Estou no serviço de polícia, nos chame. Abra, abra a página. O que precisamos é você receba o Tick AI Primeiro de tudo, vamos fazer uma sequência porque uma coisa não queremos que ela seja executada toda vez. E isso seria conseguir o ator como referência. Temos nossa variável em nosso quadro-negro, que temos como objeto Vamos chamar esse jogador ou inimigo. O par é inimigo do inimigo I, o que você quiser. Oh, vamos criar uma variável aqui. Vai ser um quadro negro, seletor. Agora vamos nomear esse seletor Inimigo. Vamos trazê-lo aqui. Vamos perguntar se é válido. Vamos fazer backup do valor de p. Como ator, esse valor do quadro-negro é um ator. Sabemos disso do Blackboard, que é objeto, mas ator da classe base realmente não importa E essa é uma parte importante quando adicionamos as teclas do Blackboard Blackboard para saber que tipo de valor elas são, que tipo de valor, que tipo de ator? Que tipo de variável, que tipo de variável elas são. Não. Vamos verificar se isso é válido. Vou conectá-lo aqui. Porque se eu estivesse pedindo esse valor e estivesse perguntando como vetor e fosse um ator , isso não funcionaria. Mas também há algo que nos dirá como se baseia. Vamos adicionar o serviço aqui para mostrar essa boa chance. Então, vou clicar com o botão direito do mouse, vou adicionar um serviço, e o serviço que vou adicionar é começar. Agora, se eu selecionar esse serviço, não expus a variável Isso também é algo muito importante. Temos que tornar as teclas do quadro-negro editáveis instantaneamente. Eles devem estar expostos ou a árvore pode vê-los. Então, agora temos o inimigo BB aqui, e precisamos dar a ele uma referência às nossas teclas do Blackboard, como você pode ver Então, qual chave é essa? Portanto, essa chave seria inimiga, que sabemos que é um objeto do tipo ator, e também correspondemos esse valor ao quadro-negro Agora, se alguma dessas mudanças de eventos não estiver correta, isso não funcionará. É por isso que digo que é meio exagerado usar quadros-negros para tarefas simples, mas também é uma boa maneira de mostrar quadros negros mas também é uma boa maneira de mostrar Vamos continuar. Quando não é válido, queremos que o quadro-negro digite essa chave novamente. Como objeto. Porque estamos tentando defini-lo como ator. Você pode ver que não existe. Então, essa é apenas uma maneira de contornar, basicamente, nós o salvamos como objeto e sabemos que tipo de objeto ele é. Vamos conectar isso aqui. E pelo valor, chegaremos lá. Agora, essa é a única coisa que funciona. A segunda coisa que precisamos fazer é atualizar todos os nossos valores. Para fazer isso, precisaremos adicionar uma interface de blueprint, adicionar uma função, acessar todos os Ts get e ela terá várias saídas Mas precisamos do nosso Bulin. Na verdade, precisamos copiar nossas chaves do quadro-negro. Então um está morto, o outro, liderado. O outro está dentro e está ao alcance. Então precisamos de mais um valor de E M, não. Um estado da EA I. E: Um afirma. Vamos chamar essa data. Por fim, precisamos de mais um, que seria o tipo ou será o local do host Agora, vamos voltar ao nosso personagem apenas para preencher essa última função. Há um personagem no topo para baixo, o personagem de IA, A bullet Está fechado ou vamos reabri-lo. Provavelmente durante o acidente. Não está fechado por aqui. Isso é. É isso que o torna muito pequeno. Vamos proibir isso aqui. Agora, vamos para nossa interface, vamos acessar Starts e conectar as chegadas corretas No alcance para dentro do alcance, dentro para o insight, morto para morto, hospedeiro para localização do hospedeiro, oito para o estado, e o hospedeiro está morto ou o hospedeiro está morto. Vamos voltar para o serviço. Vamos criar vários valores de chave de porta preta. O oito. Obtenha o estado de Suts. Então, seja esperto. E podemos ver o que é o quê? Precisamos de um morto. Precisamos de um poste morto. Todos devem ter BB na frente da chave Blackport. B dentro da faixa B. Como um r extra, duplique mais duas vezes B oito e B. Agora, precisamos obter todos esses valores Então, vamos começar com isso, que Blackward Kias precisa copiar e colar mais vezes E nós pegamos os bulions, pai, o bion, o alcance das Conecte isso e vamos conectar morto a morto hospedeiro, visão e alcance. Por fim, vamos definir essa chave preta como em ação. Vou trazer o estado até aqui. E coloque a chave da porta traseira como Vector e conecte isso aqui e isso aqui. Então, está tudo pronto. Em nosso serviço BTT BT. Tarefa BTT BT. Fora. Vamos fechar o serviço. Não precisamos mais disso. Vamos voltar para três, e temos que definir. Eu não os fiz posar, voltei para o serviço. Vamos expor tudo isso. Podemos clicar neste I aqui. Na verdade, não precisamos clicar aqui, mas podemos clicar no I aqui. Agora, de volta às três. Vamos selecionar o serviço. D eles compilam e agora podemos configurá-los todos. BT morto está morto. O sistema operacional morto é o host morto. Dentro está dentro, o intervalo I está no alcance, estado do AD e a localização do host é a localização do host. Isso atualizará nossas estatísticas, nosso quadro negro, pois podemos ver a cada 0,5 com desvio de um Eu acho que isso é um pouco baixo. Mas talvez devêssemos fazer isso um pouco mais rápido. Para fazer isso, vamos colocá-lo em 0,4 e desvio de um, e ele será executado a cada três, dois, 5 segundos, em vez de quatro a seis Ah. A próxima coisa é: o que fazemos com todas essas informações? Bem, eu acho que este é um bom ponto de parada para este. Passamos nossas referências, passamos nossas variáveis para nosso quadro-negro E na próxima, vamos começar a programar o que acontece com essas informações. 120. Comportamento de patrulha de IA e modo de pânico: Olá, bem-vindo ao workshop de Design de Jogos, curso real de criação de RPG de ação procedural Engine Five em Dungeon Anteriormente, criamos nosso serviço para atualizar nossas informações. E para fazer isso, usamos a função em nossa interface de blueprint, chamada Get Stats Nessa função, adicionamos algumas saídas e, em nosso personagem de IA , preenchemos essa função para transmitir nossas partidas Então, em nosso serviço, usamos o código apropriado para definir as teclas do quadro-negro , iniciando a partir de nosso pon controlado Agora, também definimos que o pagamento seja feito apenas uma vez se a chave do quadro-negro não for válida Agora, vamos continuar. Vamos criar um seletor que você pode ver Quando saímos da rota, temos muito mais Isso pode acontecer, por exemplo, executar o eQUS após o primeiro nó E não entraremos em muitos detalhes. Mas o primeiro seletor deve ter apenas um decorador, que seria um decorador de quadro-negro, o que significa uma condição de quadro-negro que significa Então, quando clicamos no decorador, que é basicamente uma regra para que isso continue, vamos usar a regra. Vamos clicar na regra. E vamos definir nossa consulta, que se a tecla do quadro-negro não estiver definida, a chave do quadro-negro seria ad Se estivermos mortos, não vamos continuar com isso, e isso abortará o tel. Isso significa que tudo o que está acontecendo, e continuamos até aqui, o que significa não fazer nada no nosso caso. Agora, para nosso primeiro eleitor, vamos usar ens. Essa pode ser a melhor primeira coisa que nosso seletor tenta, porque ela para quando os primeiros filhos são bem-sucedidos Portanto, nossa primeira tentativa de obter sucesso se estivermos no modo patrulha. E isso me lembra: vamos voltar à nossa IA e definir nosso estado como patrulha padrão Isso é tudo por padrão. Isso é muito importante porque se isso não for uma patrulha, nossa sequência não funcionará, eu não vou jogar Vamos adicionar a chave do corredor. Vamos definir a chave da porta preta como o estado da enumeração, e isso altera a consulta da chave e é igual ao valor da Ah, sim. Precisamos ir até o quadro negro. F the A, precisamos escolher um tipo, que seriam estados de IA. Todos os detalhes. Agora, vamos definir o valor E igual à patrulha. Essa é a condição para executar a sequência. Se isso falhar, ele passará para o próximo. O primeiro que tiver sucesso, ele entrará. Esse é o seletor. Agora, vamos fazer a sequência, o que significa duas coisas até que uma delas falhe. Não. A primeira coisa que precisamos fazer é executar uma tarefa que receberá um ponto aleatório. Vamos criar uma nova tarefa. Vamos chamá-la de tarefa BT. Vamos marcar dois locais aleatórios. E nós entramos nela. Agora. Vamos executar a IA, ou seja, quando, não expliquei muito. Aqui, recebemos um Tick AI de recebimento, que o tick determinou a partir de nossa linha do tempo Aqui, marcamos uma marca aqui onde isso recebe uma execução. Nosso expatriado chamará essa tarefa aqui. Então, vamos chamá-lo, na verdade. Podemos ver aqui nas tarefas, localização aleatória aleatória da tarefa DT Mas vamos preencher o código. Então esse é o ex que recebe IA. Receba o evento execute AI. Para isso, precisaremos de três variáveis dos quadros-negros Vamos criar três variáveis, valor do quadro-negro ou Mas estou tendo ou seletor O resto deles. Seletor de teclas. Queletor A primeira seria nossa mudança para a chave. O segundo seria o anfitrião. O terceiro seria nossa raiz, hospedeiro raiz. Tudo isso precisa estar na frente deles, só para estar correto. A palavra chave não é necessária. Vamos pegar nosso ponto de controle. Vamos obter a localização do ator e vamos selecionar. O valor seria se nosso anfitrião morresse. Valorize como banimento porque nosso anfitrião morto é um banimento. F B, vamos obter a localização do host, na verdade, localização do host, e vamos obter uma porta como vetor. Conecte-o aqui. Agora, a próxima coisa que vamos fazer é apontar em um raio alcançável e vamos definir o raio para O que isso faz? Ele nos diz que, se nosso anfitrião estiver morto, coloque um ponto aleatório ao redor do jogador. Se não estiver morto, coloque um ponto aleatório ao redor do hospedeiro. E então vamos ver o filme, filmes notáveis. De qualquer forma, Luck Kia é vetor, e isso é um resultado Agora, quando estamos executando uma tarefa, precisamos concluir as execuções. Bem, nem sempre, mas este precisa saber que é um sucesso de cavalos. Eu vejo por que não estamos impondo nenhuma condição aqui Se isso falhar ou for bem-sucedido, não importa para nós. Diremos que foi um sucesso. Nossa sequência pode executar a próxima tarefa, o que não complicaremos. Vamos usar apenas dois. Para a tecla Blackboard, vamos usar o movimento dois, A, vamos C. Agora é localização, não é localização. Não. O que precisamos fazer é cumprir nossa tarefa, verificar se temos. Eu não tornei isso público. Eles sempre precisam ser públicos, e podemos definir a mudança para a nossa localização, a localização nosso anfitrião para a nossa localização anfitriã, e o anfitrião está morto para o anfitrião está morto. Vamos fazer outra sequência a partir daqui. Coloque um decorador, um valor no quadro-negro e a condição seria que a raiz está morta, o host está E se não estiver definido, vamos entrar. E o que vamos fazer, por favor, espere 5 segundos. Então, quando está patrulhando e o anfitrião não está morto, espere 5 segundos. Se estiver patrulhando e o hospedeiro estiver morto, ele simplesmente correrá aleatoriamente pela nossa Por exemplo, criamos um modo de pânico. O anfitrião morreu, corremos aleatoriamente sem parar. Isso será um modo de pânico. Não vamos deixar de entrar em pânico. Vamos voltar para a patrulha, e ela entrará em pânico sozinha Então, só para repetir, estamos começando e verificando se não estamos mortos. Se não estamos mortos, estamos tentando ver se estamos patrulhando Se não estivermos patrulhando, faremos outra coisa. Se estamos patrulhando, estamos escolhendo um local aleatório ao nosso redor Nós nos mudamos para esse local. Se nosso anfitrião não estiver morto, esperamos. Se nosso anfitrião estiver morto, escolhemos outro local e corremos por aí. Agora, uma última coisa que devemos fazer, novamente, abortar a si mesmos. Então, quando as mudanças, isso aborta, s. E também quando o hospedeiro está morto, quando o hospedeiro está morto, abortamos isso, abortamos o peso. Uma coisa fácil de fazer é sequência de passagem CVI aqui, conectiva Aqui, vai ser o último porque, entre eles, vamos colocar filmagens. E o que vou fazer é, em vez de verificar a patrulha, vou verificar se há atordoamento E se estamos surpresos, não estamos fazendo nada que fosse isso Estamos surpresos. Eu sei, talvez você também esteja surpreso, mas é assim que funciona Essa é simples. E vamos deixar para si mesmos se mudarmos a condição de. Agora, acho que isso pode ser um bom ponto de ruptura. Na próxima, vamos fazer a lógica do tiro porque se não estivermos patrulhando devemos verificar se estamos atirando E, por fim, verificamos o atordoamento . Então, eu vou te ver então. Adeus. 121. Modo de ataque de IA e verificações de linha de visão: Olá, bem-vindo ao curso de criação de RPG de ação Procedural Dungeon do Game Design Workshop Under engine five RPG de ação Anteriormente, criamos a tarefa BT para escolher o local. Criamos três variáveis, as chaves de porta pretas, e uma delas é a localização do host. A outra é a mudança para o local e a outra é que o hospedeiro está morto. Então, se o anfitrião estiver morto, estamos escolhendo um local ao redor do nosso jogador. Se não estiver morto, estamos escolhendo um local próximo ao anfitrião. E estamos configurando esse local para nossa mudança. Em seguida, concluímos a execução com um quarto sucesso. Em nossa árvore, nós o adicionamos após a pergunta se o jogador está morto. Em nosso seletor, a primeira coisa que verificamos é se nossa IA está em estado de patrulha Se estiver em estado de patrulha, estamos escolhendo esse local aleatório para a tarefa Estamos usando essa tarefa, que é escolher um local aleatório. Nós nos mudamos para esse local. Se o hospedeiro estiver morto, estamos esperando 5 segundos. Se não estiver morto, continuamos funcionando em modo de pânico. E então adicionamos outra condição, outra sequência, se isso falhar. Ele tentará verificar se estamos atordoados e, se estivermos atordoados, não fará Não. Vamos criar nosso ataque agora mesmo. Mas desta vez, novamente, precisamos de um seletor. Porque vamos verificar entre duas coisas para verificar se estamos inserindo uma ou outra, porque o seletor para quando um de seus filhos é bem-sucedido, então ele não passa para o próximo Agora, vamos usar uma sequência, na verdade. Vamos colocar o valor do decorador Blackboard. Vamos selecionar o decorador, que seria a chave do quadro-negro, nosso estado é igual ao ataque Claro, isso vai abortar a si mesmo. Ah. Vamos pegar nossa sequência. A primeira coisa que devemos verificar é se nosso ator está ao alcance. Vamos listar a variável in range aqui. Coloque um decorador, quadro negro. Alcance. Na verdade, isso não está definido. Não estamos ao alcance se estivermos em um estado de ataque, e não estamos ao alcance Vamos entrar no alcance. Para fazer isso, precisaremos de outra tarefa. Vamos configurar isso para a prancha de surf também. Você sabe o que, na verdade, não vamos propor. Se não estivermos ao alcance, vamos tentar chegar ao alcance, aconteça o que acontecer. Mesmo que o jogador entre repentinamente em nosso alcance, ainda devemos ir para a posição que decidimos ir. Isso fará com que pareça que a IA vai fazer alguma coisa, vamos criar ansiedade. Vamos agora criar nossa tarefa, vamos chamá-la de passo em direção ao alvo. Nova tarefa, em ritmo, e vamos chamar essa enfermaria e entrar. Vamos usar o evento execute novamente. Exala IA E a primeira coisa que devemos fazer é, caso já tenhamos atacado e estejamos girando, configuramos a rotação para girar para o controlador Precisamos girar para a rotação do movimento. Estamos enviando para nosso plano de IA. Esta é a bala que, neste momento, vamos mover, e precisamos usar a rotação do oriente para Porque quando estivermos atacando, usaremos a rotação do oriente para controlar Não, serviço de laboratório, esse fator é tarefa. A próxima coisa que devemos fazer é fazer uma pergunta. Então, vamos colocar um galho Bem, a questão seria: podemos chegar a um ponto próximo ao nosso jogador? Encontramos um ponto Basicamente, vamos criar uma fórmula matemática novamente para criar um círculo ao redor do nosso personagem. E se conseguirmos alcançar um ponto nesse círculo, será verdade. Se não for , será falso e concluiremos a execução sem sucesso. Então, isso será executado novamente. Isso falhará. Então, quando o primeiro falha, aborta e, em seguida, todos os três são executados novamente e tentam encontrar outro ponto Oh, como fazemos isso? Bem, vamos começar com nossa fórmula circular. Então, vamos pegar Pi. Vamos multiplicá-lo por dois ou por um valor máximo e obteremos um intervalo flutuante E o mínimo seria Pi, e o máximo seria i quadrado, basicamente, pi quadrado, desculpe, dois Pi, do Pi quadrado, precisaríamos multiplicar por italf E a partir disso, vamos conseguir. Portanto, certifique-se de que seja um brilho e graus, e então obteremos um brilho senoidal que brilho senoidal Vamos multiplicar isso por 500. Então, esse seria basicamente o intervalo. E então precisamos adicioná-lo à nossa localização de jogador para ativar o jogador, obter uma localização para. E vamos até I Brake. Split é quando estamos escolhendo isso aqui. Freie escolhendo-o com o pino. E a partir do Z, vamos para ponto de arrasto aleatório no raio Não queremos isso por raio. Nós queremos isso. Na verdade, isso é um raio, não o 500 Também é para x, vamos usar isso, para, vamos usar isso e para y, vamos usar o sinal. Agora, vamos conectar isso à condição, o valor de retorno se encontramos ou não aquele local, se é um lote alcançável, e é, precisamos informar ao controlador da conexão, Às vezes, examinar os nós e o código pode ser difícil. Precisamos pegar esse controlador e definir ponto focal. Isso está correto este ano. E, claro, precisamos de um valor de chave de quadro-negro, então seletor de teclas de quadro preto Todos eles estão em MB até aqui e carecem de valor como vetor aqui. Na verdade, precisamos promover isso para uma variável porque, se a usarmos duas vezes, obteremos duas vezes em um ponto aleatório. E então vamos terminar. Acesso. Isso seria pedir para salvar. Vamos fazer a chave errada. Valorize o público, aderindo ao I ou editando. Vamos voltar para nossa tabela e partir da nossa sequência chamada de PTs até o alvo Vamos selecionar isso. Já arquivei? Vamos selecionar esta como nossa mudança para o local. Então, só precisamos passar para. Nós nos movemos para o local , onde temos a patrulha, então eu copio aqui, que tem a variável já definida Aqui. E seria isso do lado. Então, se estamos atacando e não estamos ao alcance, estamos encontrando um lugar aleatório Estamos tentando encontrar um lugar aleatório perto do jogador e ir para lá. Até encontrá-lo, estamos presos nesse circuito aqui. Agora, vamos continuar com a próxima. Vai ser uma sequência novamente. Este será executado com base em duas decorações. Aquele, o alcance estaria dentro do alcance. Vamos adicionar outra ou k. E essa também seria uma também seria surpresa, precisamos de outra tarefa aqui. Mas acho que esse é um bom ponto de parada para este. Vamos continuar na próxima. Adeus. 122. Volume de navegação de IA e otimização de caminho: Olá, bem-vindo de volta ao workshop de design de jogos e ao Real Engine Five, processual de criação de filmes de ação em Dungeon Anteriormente, começávamos colocando parte de nossa parte do nosso estado como igual a atacar nossa árvore de comportamento. Então, se for igual a um ataque, estamos verificando se nosso personagem está ao alcance ou não. Se não estiver ao alcance, estamos tentando encontrar um passo em direção ao personagem, ir para um local em direção ao personagem e nos mover para esse local. Como podemos conseguir isso? Bem, estamos configurando nosso movimento para rotação. Então, o personagem se move com base em sua rotação. E então estamos entendendo o personagem. Estamos fazendo algumas contas aqui para criar um círculo ao redor do personagem, e estamos verificando um raio de 200 em torno do ponto de 500 raios em que estamos criando o círculo, estamos fazendo o círculo e, a partir desse ponto, obtemos outro raio de 200, obtemos outro raio de 200 Não, a razão pela qual fazemos isso. Eu não expliquei muito isso porque realmente não queremos criticar o jogador e simplesmente ir aqui. Pegue este ponto e outros 200 raios talvez fiquemos um pouco mais longe do personagem Há mais chances de isso acontecer. Pode haver maneiras mais complexas fazer isso: mais fórmulas matemáticas, mais Mas acho que essa é uma boa solução para um resultado rápido. Então, depois disso, se não for verdade, retornaremos execute false. Então, nossa tetrac em um loop aqui até encontrar um ponto correto E se isso não acontecer, se encontrar o ponto correto, ele define o ponto focal local do mouse, definimos o valor da chave do quadro-negro e concluímos a execução como verdadeira Assim, podemos nos mudar para esse local. Em seguida, começamos com o que acontece se o carter estiver dentro do alcance e também estiver apertado Agora, como isso vai acontecer , como vamos jogar, vamos criar uma tarefa, uma tarefa para esperar, uma tarefa para atirar e uma tarefa para reiniciar a filmagem. Então, vamos começar com a manhã, nova tarefa, base de impressão. Vamos chamar isso de Am, é claro, precisaremos do recibo . Certifique-se de escolher a execução da IA, não apenas a execução Vamos enviar que precisamos rotação do controlador, então a mensagem do controlador. E vamos definir o ponto a partir do ponto. E vamos nos levantar e chamar atenção. Então, estamos usando a rotação do controlador. Estamos definindo o ponto focal e ele girará em direção a Então, vamos terminar a execução. Agora, falando sobre a rotação do controlador , que é o ponto. Existe uma maneira de controlar a velocidade de rotação. Então, se formos para nosso personagem de IA, vamos para o movimento do personagem e a rotação de tipos, há certas configurações aqui, e há uma delas chamada configurações de rotação do movimento do personagem, que agora está em 40, vamos reduzi-la para 360. Mas essa é a taxa de rotação, basicamente. Como você pode ver, a mudança na rotação por segundo usada quando o controle da rotação desejada ou a orientação do movimento estão definidos Mas isso controla a rotação em ambos os casos, ou o controle da rotação desejada ou a rotação do oriente para o movimento Agora, vamos voltar ao nosso BT e, quando terminarmos a execução, devemos forçar o sucesso. Vamos voltar aos nossos três e chamar essa tarefa. PTT A. A próxima coisa que devemos fazer é esperar. Agora, vamos mudar um pouco as configurações de peso. Espere aqui, então vamos esperar 0,2 segundos. Vamos dar a você um desvio aleatório de 0,1. Então, podemos esperar 2,3 segundos ou 0,1 segundo. E isso criará uma sensação aleatória de quando a IA está atacando E aí vem a próxima parte, que é que vamos filmar. Uma nova tarefa novamente. Seja a base de impressão. Vamos chamar isso de BT task shot. Vamos fazer a execução. IA. Isso é muito simples. O que precisamos fazer é obter nosso controle pm e mensagem, porque já criamos o código para fotografar. Agora, podemos colocar uma tarefa de peso em nossa camiseta, ou podemos realmente colocar um atraso aqui. Porque depois de filmarmos, devemos adiar. Vamos adiar para um intervalo aleatório. Intervalo flutuante aleatório, desculpe, de 1,4 a 1,1 0,6. Vamos terminar a execução. Estou fazendo isso assim e não consistente porque quero mostrar que é consistente porque quero mostrar que existem muitas maneiras de fazer as coisas. Não há uma maneira, e realmente não tem nenhuma diferença se eu colocar o peso aqui. Então, basicamente, a diferença é que talvez isso seja abortado se eu me abortar. Mas a tarefa também será abortada quando eu me abortar. Então, há muitas maneiras de fazer as coisas. Só precisa funcionar. Oh, vamos ligar para filmar. T é uma filmagem de tarefas. E agora vamos reiniciar a filmagem, então precisamos de uma nova tarefa para reinicializar a tarefa básica. E o que faremos é olhar para ela, porque vamos definir as variáveis, vamos até a árvore e mostrar isso Vamos definir essas variáveis como falsas. Então, que eles sejam definidos como verdadeiros. O carrapato precisa funcionar novamente. Será necessário verificar cada 0,3 ou 0,5 nesses números voltem a ser verdadeiros. Então, essa é outra maneira de criar um pequeno atraso. Agora, vamos reiniciar a filmagem. Vamos receber exsudos. IA. Na verdade, só precisamos criar duas variáveis, teclas do quadro-negro ou pretas Eleitor de teclas do Blackboard, e um deles será Bp. O outro seria a faixa PB. Isso também dá a oportunidade quando o jogador se move para fora do alcance. Esse atraso, esse atraso, por exemplo, quando saímos do alcance entre os segundos nos dá oportunidade para ações mais complexas, se quisermos. Então, vamos voltar a isso e ao valor de tração. Valores e execução final. Quanto ao fato de estarmos preparando essas duas quedas, devemos torná-las públicas. Podemos definir nossa IA para eles. Três aqui compilam. Acho Acho que estou escolhendo o evento errado. Sim, deve ser isso, então B neste set. E aqui, é claro, eles estão aqui. Alcance estreito. Basicamente, isso é para. 123. Volume de navegação e otimização: Olá, bem-vindo de volta ao workshop de Design de Jogos e ao curso de criação de AR Phys procedural de ação em Dungeon Five real Engine Five AR Phys procedural de ação em Dungeon Agora, para fazê-lo se mover e fazer todas as nossas coisas maravilhosas. Como você pode ver em cada tarefa para a qual precisávamos de um ponto aleatório ou de uma mudança, precisamos de dados nervosos, dos quais, na verdade, não precisamos porque eles podem obtê-los automaticamente. Mas o que vamos fazer é criar um volume enorme. Isso. Então, precisamos de outro volume de salto de malha Defina sua localização como 00. Vamos configurá-lo para quatro K em todos os lugares. Podemos aumentar muito sua altura porque estamos começando em 00, então talvez. Eu. Sim, são 30 K. Se for zero. Isso é o que faz com que nosso talvez não seja infinito porque não podemos mover os planos de volume de navegação em libras Como você pode ver, ele tenta aumentar o volume de navegação, mesmo que não haja nada nele. Mas precisamos fazer algumas mudanças. Eu vou construir. Nós vamos continuar depois. E deixe-me demonstrar por que precisamos dessas configurações. Esse é um grande volume de navegação. Em primeiro lugar, demonstramos que precisamos ir às configurações do projeto, algum momento, que é um cenário de nação, e queremos que seja dinâmico. Se eu pressionar Última coisa, precisamos mudar o parafuso reformulado para Is it run time generation, então eu estou bem Eu o obtive nas configurações do projeto. Agora, se eu apertar play, para ver um pouco encorpado. E se eu escolher a nação, então se eu escolher a navegação, você pode ver. É uma área grande. É navegação até mesmo nos telhados. Então, sim, é uma área grande, e quanto maior for o braço , mais áreas teremos, e vai ficar bagunçado. Vai ficar realmente enquadrada e toda essa IA se movendo em torno dela. Para mudar isso, vamos usar algo. Você não deveria ser honesto em fazer isso como este prédio em terra firme em uma enorme área de navegação. Mas qualquer outro sistema exigiria muito tempo e trabalho para ser concluído, além de mais Mas, com toda a justiça, é possível obter uma pequena otimização por meio de projetos e Para nós, o que vamos fazer, vou deixar a navegação, na verdade é ir para as configurações do projeto novamente. Vamos procurar invocadores. OK. Então, vamos usar essa configuração para gerar navegação somente em torno do invocador de navegação E o que é navegação em Okers? Então, basicamente, eles são uma ferramenta, uma ferramenta usada para gerar e gerenciar dinamicamente medidas de navegação, o que gerar e gerenciar dinamicamente medidas de navegação, significa basicamente em ambientes grandes ou de mundo aberto Vamos demonstrar isso. Vamos adicioná-lo ao nosso personagem. Vamos ao nosso personagem de cima para baixo. Adicione Voker, navegação no Vocer Vamos otimizá-la um pouco porque o raio de 3.000 é grande, então vou fazer um raio de remoção de 200 Você quer que o raio de remoção seja um pouco maior do que a geração, então ele cria uma trilha para removê-lo Então, vamos apertar play agora. L Vamos rejeitar. E você pode ver agora, a bagunça de navegação, o que está sendo calculado apenas em torno do nosso personagem Então, vamos fazer o mesmo com nossas IAs. O que é esse erro rastreado por jogador, porque a IA existe antes do jogador. Isso é um problema. Realmente não importa. É um erro nulo Você não conseguiu encontrar o jogador por um segundo. Vamos repetir. Na verdade, vamos voltar à nossa IA. Vamos adicionar o invocador Vamos definir o raio do ladrilho 2200-400. Vamos realmente ver a IA. Como eu posso? Não, nós não temos. Mas nós temos uma chave. Vamos ao que foi dito acima. Escuro novamente. Minhas algumas sombras Precisamos trocar a caminha para o elevador. Melhor. Também não há IA aqui? Existe IA. OK. Agora, podemos usar a IA se ela estiver fazendo alguma coisa. No momento, parece que está ficando. Oh, para Deba facilmente, vamos até a árvore. S. E não consigo encontrar, eu sei. Nós não dissemos aos nossos pons que eles estão sendo controlados basicamente por isso Porque se não definirmos que eles são IA, eles não saberão disso. Acho que faz sentido. Então, no detailb, no b padrão, basicamente, vou pesquisar o controlador de IA Em vez do controlador AI genérico A, vamos usar nosso único, AIC N one, e agora eles estão sendo controlados. Vamos começar de novo, e temos uma IA aqui. Mas, novamente, não faz nada. Desta vez por um motivo diferente. Não consigo encontrar muita coisa novamente. B. Mas eu tenho? Oh, esse é o personagem. Foi um erro meu. Vamos voltar para a IA. É aqui que precisa estar. Portanto, a IA precisa que a IA a controle, não o personagem. Então, vamos jogar. Ha. Vamos jogar novamente. Você tem IA. Ótimo. E isso não faz nada. E ainda há muita descoberta. Bem, isso faz sentido. Me desculpe Eu continuo esquecendo o básico Como a autoposse A acima do controlador inimigo de IA, esse é um lugar no mundo onde não estamos colocando a Estaríamos nos posicionando se estivéssemos depurando em um mapa diferente, mas agora fomos colocados ou gerados porque estamos gerando Nós, compilamos e economizamos, terceira vez, quarta vez, licença médica é o encanto E vamos ver se não está se movendo, está se movendo. Ótimo. Está em movimento, mas a animação não está sendo atualizada. Incrível. Bem, vamos corrigir isso na próxima. Vou ligar para ver você então. Adeus. 124. Comportamento de finalização de disparo e depuração: Olá, bem-vindo de volta ao Game Design Workshop, Rail Engine Five Procedural Dungeon action at Pred Anteriormente, terminamos com nossa IA e adicionamos também nosso volume de resposta de navegação e adicionamos também nossos revogadores de navegação Também concluímos nossas tarefas de BTT. Eu acho que eles foram explicados bem o suficiente. Agora, tínhamos alguns bugs para corrigir. Primeiro de tudo, vamos ver nossa IA aqui, onde está todo esse plano de animação de IA Onde todas essas informações estão sendo obtidas do proprietário do pw, tente obter o proprietário do peão Mas desta vez, nosso pobre dono não é um jogador. Então isso pode estar falhando. Mas o que vamos fazer é começar a jogar no blueprint. Vamos tentar conseguir o dono da Pw. E vamos pedir que AI AI e one criem e promovam esses dois personagens. Na verdade, vou chamá-lo de IA. O personagem foi capturado. E vamos mudar isso. Agora, a. A razão pela qual estamos fazendo isso é porque queremos mudar aqui, que quebra a forma como temos conectar aqui, isso acontece aqui. Em vez de obter o Acceler atual o que é essa busca aqui Para deletar isso aqui, e conectar o personagem ao movimento do nosso personagem. E o que vamos obter é a velocidade. O que será no final, e vamos conectar isso aqui. O motivo é porque a aceleração não estava realmente funcionando com a forma como nosso fretamento está se movendo. Então, vamos compilar, então, vamos jogar, e agora nossa IA deveria estar se movendo Não estou fazendo nada. Não, não, está se movendo. Ótimo, e está criando mais navegação Como você pode ver ao redor, ele pode se mover para qualquer outro lugar. Agora, vamos tentar atacá-lo. Ela nos vê, olha para nós. E ele não fez nada, o que nos transformou. Crie esse bug e veja o que está acontecendo. Abra o jogo. Esta guia. Vou ejetar daqui, vou selecioná-lo, selecionar a IA Porque para encontrá-lo aqui, aqui, você precisa selecioná-lo. Deveria dizer selecionado, bem, não é. Ok. Vamos tentar combinar qual IA é qual, porque há duas aqui, ou movimentos. Pesos. Ambos estão esperando. Acho que esse é esse. Este recuou completamente, porque este continua se movendo. Então, digamos, zero. Sim, o que na verdade não está fazendo nada. Por que não está fazendo nada? Na devolução. Eu filmaria por e é uma verificação constante engano, e é uma verificação constante da IA do estado selecionado ou o que temos? A é um Deixe-me tentar depurá-lo. Ok. Depois de um pouco de depuração, descobri que criei esse identificador aqui, mas nunca o usei mas nunca Não, basicamente, o que precisamos fazer é começar a nos sobrepor aqui E quando batemos com o jogador, estamos ao alcance, devemos começar nosso tempo. Reparamos o tempo de pausa pelo controle Quando o alcance está dentro do alcance, começamos a procurar E, claro, sobre morte sobre morte, aqui está, logo após a morte, vamos resolver o problema novamente, limpá-lo e invalidá-lo Não funciona mais, nem mesmo em pausa. Oh, o próximo lugar seria ir até nossa tarefa de PT e caminhar em direção ao alvo Mais uma vez, eu cometi um erro aqui. Eu não adicionei a localização dos punts do jogador. Esse é o básico, como esse intervalo em comparação com onde. Vou apenas adicionar. Adicione e isso x isso. Seja quando você tem razão, você precisa dizer em que lugar do mundo. Já superamos isso. Claro, o próximo lugar seria nosso também ter feito alguma coisa. Bala BP AI. Estou perguntando se o componente tem puxão E, ou seja , se o ator cavou porque o temos ator e não no tubo de colisão, a cápsula de colisão Acho que descobri o problema não conseguirmos atirar. Além disso, vamos até nosso personagem de cima para baixo do BP e, quando estamos sendo danificados e atordoados, ainda estamos vivos Eles são. Nós ligamos o estado. E se já estamos atordoados , partimos se estivermos pressionando sift. Se não estivermos pressionando shift, voltamos ao estado para mudar o estado para normal No entanto, se estamos passando por um turno, atrasamos e não esfriamos, o que não retornamos à manhã. Para conseguir isso, iremos até nosso mecânico am, criaremos um evento personalizado, am. Então, quando pressionamos o botão esquerdo, não precisamos fazer isso porque ele já está inativo, e vamos conectar isso aqui porque não queremos passar por esse teste Então, para a animação de morte de nosso inimigo que ele estava se levantando, precisamos encontrar nossas páginas de montagem animação de animação de montagem, e precisamos de Há Na verdade, nós o baseamos aqui. Essa animação precisa, onde tem essa opção, habilitar a mesclagem automática. Nós não queremos isso. Se quisermos que fique lá. O mesmo que fazemos alguns outros, assim como a animação knockb. Então, vamos até nossa animação de retrocesso e selecionar a mesclagem automática como falsa E até a morte do nosso personagem. Então, vamos para Revenant. Encontre a morte. Como a morte aqui, a morte não se mistura, e ao nosso fogo primário. Não queremos que se misture. E agora podemos fazer o teste. Ok. Me contou? P na torre. L - a torre. Sintonizando para mim. Então, um pouco , ele precisa seguir a rotação. Mais uma coisa. Novamente, no projétil da bala, vamos para o movimento do projétil, seguimos a rotação segue Eu coloquei um pouco de som. Veja o que está acontecendo lá. Exercício. Por favor. Está nas porções. Peito grande. Eu já tenho a chave. I. Próximo nível. Eu vejo no Mara 50 gramas. Temos vários anúncios abertos e fechados. 60 PS, certo? Acho que isso é causado pela IA e pelo volume de navegação. Em tempo de execução, seria um pouco melhor, talvez muito melhor. Inimigos pisando em armadilhas, outra IA outra É irritante isso o que está acontecendo aqui? Estou tentando me mudar para cá. Batendo no suporte corretamente. Mas eu estou aquecendo e ele está tentando se mover para onde eu estou aquecendo. Se eu clicar, continuo andando. Mas eu estou morrendo, estou ganhando uma pontuação, certo? Temos um problema de movimento e aquecimento. Mas acho que vamos precisar de outro terreno. Então, vamos deixar isso para então. Tchau Te vejo então. 125. Correções de erros finais e polimento de jogabilidade: Olá, bem-vindo de volta ao Game Design Workshop e ao curso real de criação de RPG de ação Procedural Dungeon Five RPG de ação Então, finalmente, em nossa última lição de depuração. Em primeiro lugar, vamos consertar o labirinto sem fim, na verdade, não infinito, mas com a correria do motor Então, o que acontece é que, quando colocamos a primeira peça, eu faço a pergunta errada, a direção externa, e não é igual à última saída Mas porque estamos compensando o labirinto com base na direção do deslocamento Nossa direção de deslocamento se torna basicamente o oposto. Nossa última saída não deve ser oposta à nossa direção de deslocamento porque, por exemplo, vamos para a direção norte, então a direção de deslocamento O é norte, mas sul se torna o t que não deveria ser igual sul se torna o ladrilho de onde viemos, o elevador. Então, como o sul se torna a telha do elevador, a última saída não deve ser o elevador. Seja quando isso acontece , ele cria um labirinto de tamanho um e quebra completamente o sistema e faz com que o motor falhe Então, o que faremos é selecionar o switch. E vamos usar a última saída aqui para que possamos pegar isso. E então eu vou desconectá-lo. Do norte, precisamos do sul, do leste, precisamos do oeste do sul, precisamos do norte e do oeste, precisamos do leste para o oposto da direção oposta. A última saída não deve ser igual ao oposto. Mas quando estamos exaltando o estilo, não deveria ser o elevador Então era isso que estava causando a queda do motor. Teve uma chance em quatro, é um bug muito ruim. Mas de qualquer forma, simplesmente lógico, foi só porque estamos caminhando nessa direção. Fora. Agora, o próximo bug que está acontecendo é que às vezes ele gera um labirinto que no próximo labirinto, o continue, você não consegue sair do primeiro E isso é porque estamos definindo a última saída, mas não estamos definindo as direções. Não estou definindo as direções. Então, basicamente, na primeira saída, estamos definindo a direção como verdadeira. Mas não estamos fazendo isso. Eu fiz a depuração aqui. Comentário de depuração Não estamos fazendo isso aqui. Vou colocar isso aqui. Vou levar isso um pouco mais longe. Mas agora temos que informar ao estilo que sua direção está aberta em direção à última saída, e vamos pegar a última saída, aqui. Então isso estava causando esse bug. Agora, paramos com alguns problemas de movimento, filmagem e problemas de movimento. Então, vamos primeiro ao controle do player. Por um erro que eu cometi. Bem, há muitas coisas que eu não detectei, mas em um tamanho de projeto, é claro, obtenha a localização em Kursor Então, em nossa função, obtenha a localização abaixo do Kursor, estou verificando a visibilidade para obtê-la sob a localização do Kursor Então, quando não está atingindo nada e quando não está levando em conta os aceleradores de esferas, isso retorna valores errados com base em outras colisões que existem em Então eu vou transformar isso para a câmera, e isso vai resolver isso. E depois vêm os problemas de filmagem. Então, quando estamos filmando, devemos parar de grampear Então, quando estivermos fotografando, quando estivermos em aprimorar a detecção de entrada , clique e ela será acionada. E estamos pairando sobre um alvo, estamos em um estado normal, estamos pairando sobre um alvo e estamos atirando Deveríamos parar o movimento. Porque se não paramos o movimento , ele é ativado antes e, como está ligado , continua se movendo. Portanto, devemos interromper o movimento. E outra coisa que incomoda é aqui quando estamos fazendo a mira Então, na mira, estamos verificando quando, neste momento, essa é a mudança que precisa ser feita Então, o que estamos fazendo é verificar se estamos sob o comando do inimigo, nosso Hursor está sob o controle de um inimigo, e então isso muda Mas se estamos aguentando, se estamos em um estado, não estamos mudando a meta. Estamos apenas configurando para mira, alvo vermelho. Esse não deveria ser o caso, para ser honesto , porque na chance de começarmos, uma das coisas que pode acontecer é que , quando pegamos Stan, AM muda temporariamente para Stan Então, isso aconteceria. Então, o que vou fazer é deletar isso e ir para a primeira pergunta e obter a referência do jogador, estou pronto para fazer uma. Então, se estivermos atingindo um inimigo ou se ele estiver abatido, então estamos tendo uma maldição cruzada Se não estivermos, então estamos com o cursor normal. Então, essa deve ser a mudança, e esse deve ser um ponto de controle central É melhor do que tê-lo como uma opção aqui, como se a primeira pergunta fosse aquela que muda as coisas. Então, vamos avançar para o nosso personagem de cima para baixo. E quando estamos mirando, também devemos interromper o movimento No turno para a esquerda, mire , etc., etc. Aqui, antes de tocarmos nossa montagem, vamos parar de nos mover, na verdade, mesmo antes dessas duas coisas Vamos obter nossa referência de controle de jogador, vou parar de me mover. Agora, há um movimento de parada para navegação, que não é nosso, caso você perca o clique e use isso em vez disso. É parar de se mover, não parar de se mover. Pare de se mover. Se eu ligar para o outro. Pare o movimento. Veja, é uma função diferente. alvo é o controlador quando o alvo é o controlador de cima para baixo da BP A lógica por trás disso é a IA e, para ser honesto, geralmente criamos nosso personagem para ser uma IA, que apenas muda de estado, mas isso é um pouco mais avançado. Agora, a próxima coisa que devemos fazer para acabar com o jogo é aqui, quando estamos reiniciando o ataque, quando estamos reiniciando o ataque, estamos abaixando Então, quando abaixamos a arma, aconteça o que acontecer, isso significa que ela mudará de estado para normal, mesmo se estivermos abaixando a arma porque fomos interrompidos ou porque disparamos e ele precisa reiniciar o ataque Então, aqui precisa de uma pergunta: eu abaixo minha arma ou não? E esse é o nosso objetivo. Se estivermos mirando para baixo e for verdade, não abaixe a arma. Se não for verdade, então abaixe a arma. É sobre falar sobre esse galho aqui, nós o usamos em outro lugar, o que é nosso dano. Então, quando estamos sofrendo dano, estamos nos voltando para o atordoamento, e há uma chance de não estarmos nos voltando para o atordoamento Depois disso, se não estivermos mortos. Se estamos mortos, nós apenas fazemos as coisas da morte. Mas se não estivermos mortos, estamos jogando a montagem térmica e, com base no estado do jogador, estamos mudando Se estamos ficando atordoados e vamos e a mira está baixa, estamos apenas definindo o atraso e iniciando o resfriamento, sem mudar nada Isso significa que continuaremos em estado de choque. Nós não queremos isso. O que queremos fazer é seguir o objetivo do estado. Se não estamos revertendo o estado , continuaremos parados, e é por isso que não podemos nos mover em alguns pontos lutando contra a IA Vamos ficar parados enquanto pressionamos a tecla Shift, e nada acontece. Ficamos em Stan para sempre até realmente mudarmos, e isso vai em direção ao outro galho. Então, basicamente, isso estava bloqueando nossos estados enquanto pressionávamos a tecla Shift, e espero que isso resolva 126. Remendo de bugs de jogabilidade principal: Olá, bem-vindo de volta ao Game Design Workshop, processual de criação de APIs de ação em Dungeon, motor L, cinco APIs de ação em Dungeon Agora, a próxima coisa é que nosso elevador tem um problema com nossa câmera. Tenho outros problemas, mas o mais claro é câmera, porque copiamos o processo de postagem e colamos, mas ele o configurou como um e um, mas não o habilitou Portanto, devemos permitir que a exposição em 11 no Min Max seja 11, e isso fixe a iluminação que se torna muito intensa. Agora, a última coisa que devemos fazer é adicionar nossa névoa. Vamos adicionar coisas, oito neblinas exponenciais. É isso que queremos. Vamos ler em voz alta. Se começarmos aqui, queremos que a neblina fique um pouco mais baixa Vamos jogar por um segundo. Agora, eu não configurei as coisas. Vamos definir os detalhes das pessoas. Vamos configurá-lo para -700. Vou aumentar isso, ficar mais visível porque isso é muito chato Deixe-me fechá-lo para isso. OK. Não há mais coisas aqui. Então, localização, -700, vamos colocar a densidade fk dois. Eu sei que o valor é 2,5, mas vamos ver. Eu bati em Alo, digamos 22. E seria isso. Vamos definir também. Vou dormir com algo avermelhado. Portanto, temos uma cor avermelhada na neblina. E acho que seria isso. Sim. Se eu, por favor, jogue agora. É um pouco mais escuro e um pouco e isso fica triste. Ah, e deixe-me ativar as flechas novamente porque podemos ver Na verdade, deixei isso da depuração. Vá para as setas de alternância, onde você está. Alternar setas. Eu debug, aqui estamos. Está bem? Está conectado a isso porque eu queria ver o que estava acontecendo enquanto eu estava depurando É um pouco mais escuro do que eu esperava, mas isso tornará as luzes também um pouco mais amigáveis Mas para ver o personagem um pouco melhor, vamos até o personagem na janela de exibição, porque o personagem não deveria ser tão sombrio Vamos colocar uma luz pontual aqui. Vamos chamar essa luz de caractere de raio de caractere E vamos mudar isso para lúmen, na verdade. 100 é muito, digamos que 50 é o raio 50. Poderíamos ter itens, por exemplo, que aumentem as doses desse blog Com raio 70, talvez 100, ele não seja sombreado do nosso personagem, 100 talvez esteja fora da fonte 50 ou comprimento 70 um pouco longe dos caracteres de Se você tiver uma visão errada, poderá perder um pouco os valores. E. O sapato criará algumas sombras. Está tudo bem. Está tudo bem. Não. Ainda é um pouco estranho Quero dizer, realmente focado no centro. Vamos mudar um pouco a cor para algo mais carnudo. Aqui. Oito. Talvez tenhamos colocado um pouco mais para cima Use esse 70. Quer saber, não vamos iluminar o personagem com isso, mas iluminar o chão ao redor do personagem. O que faremos é ir até o canal da luz. Deixe que ilumine o Canal 2, não nosso personagem. E rapidamente, vamos aos nossos azulejos. P ladrilho e vá para o nosso andar. O canal também será iluminado pelo canal um, basicamente não pelo segundo, porque é baseado em zero, canal um. Vamos ver como isso parece. Sim, temos um raio de luz e podemos aumentar um pouco os raios do nosso mapa Vamos ver os detalhes 1-4. Se nós fossemos um pouco demais, mas tudo fica muito mais visível. E quando vamos para as próximas sombras, podemos ver nossa luz. Tudo bem. Agora, não, seja honesto, é muito leve. Vamos colocar isso em 23. Luz em três. Eu vou ser um pouco esperta demais. Para dois que parecem resolver o problema. Muito, muito melhor. Agora, se eu for e me mudar para outro andar, o elevador. Aqui, do outro lado, temos a chave Pops. O personagem caiu, mas isso realmente não importa. Vou apenas elevar nossa localização. Personagem P down, aqui estamos e colamos. Também ativamos o elevador. Eu desço, fica um pouco mais claro porque a neblina realmente não segue Mas o que fazemos. Vamos voltar para o elevador e começar a jogar no elevador, onde está sempre bem com. Aí estamos. Ps. Aqui estamos. Vamos abrir todas as portas traseiras da aula. Vamos pegar a névoa de neblina, obteremos a primeira cópia que encontrarmos porque só temos uma, vamos promovê-la para uma variável chamada essa névoa variável Em nosso tickvn, quando estamos definindo a localização do ator. Vamos definir a localização ou localização dos nevoeiros. Vamos precisar de mais espaço. Vamos interferir com a constante, vamos manter a mesma velocidade Vamos conseguir a localização do ator. Aquele Delta T pai, vamos usar o Delta. A partir do alvo, vamos realmente usar isso exatamente isso. ' vai precisar de um novo original e de um novo alvo. Então, vou promover essa sobrevivência ao original. O último a conseguir. Vamos configurar isso quando as cercas estiverem sendo erguidas. Para ter certeza agora. Acho que essa animação inicial é a construção das cercas. Então, vamos pegar nossa neblina, eu vou conseguir uma localização Vou definir o local original da neblina para isso. E vamos adicionar a isso o que é a altura do labirinto. Nós adicionamos 2900. Nº 2500. Esse é o elevador, não é? Sim, esse é o ponto do elevador, ele deveria ir, e o labirinto está subindo quando respondemos ao Isso pode ser uma variável para 2500. Esse é o local da neblina, 22500. Vou copiar esse plus aqui para aqui. Isso, eu vou definir o local de destino para isso. Eu me conecto este ano, me conecto este ano. E isso era jogada a ser jogada. Tudo bem. E a neblina vem conosco. Não parece realmente uma névoa, mas dá essa coloração e sombreamento Ou havia uma enorme estrutura de pernas lá. Aconteceu. Você vê? Esse é o problema com s. Nós não corrigimos isso. Vamos corrigir isso por um segundo. Ailes. Eu realmente não gosto de ver isso. Onde está aqui. Vou pegar esse andar, basta movê-lo um pouco. Em palavras, não aparece de nenhum outro lugar. Está consertado. O que nossa neblina faz, basicamente, não é visível aqui, mas é visível aqui, então não podemos ver o final desses ladrilhos E a mesma coisa será se formos para o próximo andar, formos para o próximo andar. Veja que a mesma coisa acontecerá na próxima. Em primeiro lugar, isso desaparece um pouco. Agora podemos ver a borda do corte, mas vamos aqui. Veja que não há corte de borda. Há um problema aqui, podemos mover coisas e acho que há outros problemas que podem ser Esse baú? Não estou ao alcance. De qualquer forma, como você pode ver, existem insetos. Pronto para estar ao alcance. Acho que fornecemos as ferramentas para corrigir todos esses bugs. Agora. Outra coisa: aumentei um pouco meu FPS, como você pode ver, a maneira como fiz isso foi reduzir o volume do labirinto, o volume de navegação para 1.000 agora Isso não só não é o ideal, mas cria muitos problemas, uma enorme malha de navegação. Eu não usaria uma bagunça de navegação para essa quantidade de IA. Talvez eu tivesse escrito algum movimento personalizado para que eles se movessem e os bloqueassem no eixo, e não se movessem no eixo Z ou mesmo se estivessem se movendo no eixo Z, simplesmente movendo-se sem navegação, como alguns traços de linha, você pode ir lá, depois ir lá, algo assim, um sistema como esse. Agora, outra maneira de fazer isso, eu realmente não testei, mas poderíamos ter criado um nível, um nível de streaming que estamos carregando, que tem um volume de navegação, e mudamos muitas técnicas para fazer, basicamente, talvez escrever um volume de navegação personalizado no spl plus, talvez uma classe personalizada para ele, como usá-lo em uma classe diferente que você pode mover porque blueprints não oferecem a opção de mover esse volume Você também pode dividir os volumes dessa forma, porque se usarmos um volume de navegação, vamos aqui Phone act plus, há uma reformulação do Nav me, há outras coisas, mas não podemos gerar um Então, é bom escrever em Seps, além de algumas classes que você pode gerar com um volume de navegação. Basicamente, existem maneiras diferentes de fazer as coisas, mas a parte infinita, ter algo infinito não é realmente possível com as ferramentas que temos Nós meio que trapaceamos e criamos esse volume de navegação, e foi basicamente isso Obrigado por se juntar a nós nesta aventura real de Engine Five Blueprint qual construímos um gerador de motor completo para um jogo de cima para baixo, com inimigos, itens de coleta Esperamos que você goste do curso e aprenda muito ao longo do caminho. Seu feedback significa muito para nós. Então, se você pudesse deixar um comentário e compartilhar suas ideias, isso realmente nos ajudaria a melhorar e continuar oferecendo o melhor conteúdo possível. Obrigado novamente por seu apoio e mal podemos esperar para ver o que você cria.