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.