Transcrições
1. UE5 FC01 01 Promoção: Olá, bem-vindo ao
curso completo para iniciantes do Unreal Engine Five Meu nome é Alona Bazade e
eu serei sua instrutora. Se você quiser trabalhar
com o Unreal Engine e se tornar um desenvolvedor de jogos, este curso será
a escolha perfeita para você. Aqui está
o que você aprenderá. Fundamentos. Nesta seção, você aprenderá o básico
do Unreal Engine cinco Começaremos explorando
a interface, as ferramentas
essenciais de navegação e teclas de atalho para
melhorar seu fluxo de trabalho. Atores. Os atores são
os alicerces de qualquer projeto de motor Unreal Neste capítulo,
você mergulhará no conceito de atores,
malhas e objetos Você entenderá como eles interagem e como gerenciar
suas dependências Materiais. Os materiais são a chave para criar um projeto visual
envolvente. Nesta seção,
você aprenderá como
criar e modificar materiais
no Unreal Engine Modelagem. O Unreal Engine oferece ferramentas de modelagem
poderosas, e esta seção
apresentará você a elas. Você aprenderá a modelar
diretamente no mecanismo, criar ativos e
manipulá-los para
atender às necessidades do seu projeto. Sistema de iluminação sistema de
iluminação Unreal Engines é um de seus recursos mais
poderosos Você aprenderá a criar configurações de
iluminação usando
pontos direcionais e Também exploraremos a
iluminação
dinâmica e declarada e aprenderemos como
otimizar sua cena. Plantas. Os
esquemas permitem que você crie mecânicas
de jogo complexas sem escrever uma
única linha de código Abordaremos o
roteiro visual em detalhes, ensinando como
configurar interações, eventos e gatilhos
entre atores Paisagem e material principal. Esta seção é sobre criação de
ambientes. Você aprenderá a construir vastas paisagens e
terrenos para seus projetos Em seguida, aplique o sistema de
material principal para preencher
automaticamente
seu ambiente com biomas e Jogabilidade. Neste capítulo, vamos nos concentrar na mecânica de
jogo Você aprenderá a criar
interações entre seu personagem e o
ambiente. Mini-jogo. Nesta seção final, você juntará tudo
para criar um minijogo Esse projeto prático
ajudará você a entender todo
o fluxo de trabalho,
desde a configuração de
um projeto até a criação de
ambientes, programação de interações e a finalização de um nível jogável Este curso foi estruturado
para fornecer uma abordagem passo a passo
para aprender o Unreal Engine Com exemplos práticos
do mundo real, você obterá não apenas habilidades
técnicas, mas também uma compreensão mais profunda de como abordar um processo de
desenvolvimento de jogos. Vamos mergulhar e começar a criar com o Unreal
Engine five. Mamãe.
2. UE5 01: Bem-vindo às
cinco lojas básicas do Unreal Engine. Nas próximas horas, analisaremos a configuração do
projeto, a navegação da
interface, a configuração do
ambiente e a criação de
objetos e atores interativos Ao final deste curso, você deverá ser capaz de usar
confortavelmente o Unreal Engine cinco e ter uma
compreensão básica de todas as funções principais
do Unreal Este curso não requer
nenhum conhecimento prévio sobre morte
irreal em jogos,
C plus ou CSA Antes de
prosseguirmos com a palestra, precisamos baixar o
UnreleEngine Se você já tem o
Unreal Engine instalado, fique à vontade para ignorar este vídeo
e pular a próxima aula Para baixar o Unreal
Engine, primeiro precisamos baixar o
Epicamesauncher Você pode fazer isso acessando unrealengine.com e clicando
no botão Download Se você não sabe como fazer
isso ou tem problemas para
entender, clique na tinta de
instalação do WatchOWT na
tela à direita Isso o levará a um vídeo
do YouTube que
explicará e
acompanhará o processo. Agora que a Epic Games
está instalada, vamos instalar o motor em si. Clique no Unreal
Engine, toque
no lado esquerdo e vá para Biblioteca Aqui, você pode escolher qual mecanismo
Unreal precisamos. Usaremos o Unreal Engine cinco pontos quatro para este curso Para fins de demonstração, vou baixar cinco pontos três. Mas aqui, você precisa
clicar em cinco pontos quatro. Depois de clicar e
selecionar a versão do seu mecanismo, clique no botão Instalar E agora precisamos selecionar uma
pasta para o motor Unreal. Certifique-se de selecionar a unidade
SSD, se você tiver uma, e clique em Opções Se você rolar para baixo, poderá ter essas quatro opções
selecionadas por padrão. A menos que você esteja interessado em desenvolver para essa plataforma
específica, verifique-os, pois isso reduzirá o tamanho necessário para
seu mecanismo unreal Certifique-se de manter o conteúdo
inicial, pacotes
de modelos e recursos e fonte do mecanismo
ativados Você não precisa de
símbolos do editor para depuração. Clique em Aplicar e clique em Instalar. Real Engine Five agora vai
se instalar no seu PC.
3. UE5 02: Agora, vamos começar
criando um novo projeto. Clique no botão de lançamento e aguarde um momento
enquanto ele é inicializado Aqui, temos uma seleção
de modelos
que podemos usar, fornecidos pela Unreal Temos várias
seleções aqui para jogos,
filmes, vídeos, arquitetura,
automóveis e simulação Para o propósito deste curso, usaremos o modelo de jogos cert
person Certifique-se de nomear seu projeto e lembre-se
de que você não pode usar espaço e que o nome deve ter menos de 20
letras e caracteres. Agora temos que selecionar
os padrões do projeto. Clique no blueprint, na área de
trabalho, no Maximum e
continue com o conteúdo inicial. Não
usaremos corridas de tarifas, mas para ter em mente que, se seu projeto exigir
isso, você deveria. Tudo isso pode ser alterado
a partir do projeto após sua criação. Portanto, caso você precise alterar algo que possa
ser feito posteriormente. Clique no botão Criar. Reserve um momento para
criar seu projeto. E agora seu
projeto irreal está pronto. Nos vemos na próxima palestra.
4. UE5 FC03: Agora, vamos falar sobre as janelas que temos
disponíveis para nós. No lado esquerdo, temos a janela
Place Actors. É uma janela que permite
arrastar e soltar qualquer ator,
objeto, forma ou luz, qualquer coisa na
sua cena com facilidade. Você também pode criar seu
próprio SSP aqui simplesmente arrastar e soltar
na cena No lado direito,
temos o World Outliner. O que o World Outliner faz? World Outliner é uma
lista de todos os objetos ou atores existentes em
sua cena no Você pode clicar neles aqui e selecioná-los automaticamente
no nível. Você pode clicar aqui e
ver o nome. É muito útil
organizar seu layout. Então, por exemplo, todos os blocos
estão dentro da pasta de blocos. Você pode ocultá-los em
combinação em vez de clicar neles
individualmente e
ocultá-los do nível ou
excluí-los ou movê-los. Você pode clicar ou, assim, em
vários objetos
ao mesmo tempo para
movê-los ao mesmo
tempo. É muito útil. Você pode se mover por todas as janelas na cena
irreal do motor Por exemplo, você pode pegar
o contorno, destacá-lo, criar uma janela separada ou anexá-lo
em outro lugar, talvez na parte inferior da tela ou
talvez queira colocá-lo Depende de você, na verdade. Você
pode removê-lo. Se você quiser. E se quiser de volta, você sempre pode ir até a
janela, tocar na parte superior e encontrar a janela
que acabou de remover. Você também pode ter várias janelas
da mesma coisa. Então, o outliner está de volta, e eu prefiro que esteja à direita Também temos um painel de detalhes. Portanto, quando você seleciona um
objeto, obtém
informações detalhadas aqui. Então, deixe-me mover isso aqui. Ainda por cima, como eu prefiro. E agora temos acesso
às informações
sobre esse objeto. Como você pode ver, conforme eu movo isso, o
local da transformação aqui muda. Eu posso inserir manualmente
qualquer valor que eu quiser. Eu posso girá-lo a partir
daqui, se eu quiser,
ou escalá-lo para cima ou para baixo. Se eu quiser escalá-lo uniformemente, posso clicar nesse
botão de bloqueio e escalá-lo dessa maneira Também há materiais
aqui e malhas. Então, aqui, se você
tem um objeto
na cena que deseja manter
toda a localização transformada e o excesso de escala, mas deseja alterar a malha, você pode clicar aqui e pesquisar ou simplesmente escolher a malha para a qual
deseja alterná-lo. Então, agora eu quero
trocá-la por esta cadeira. Então eu cliquei na cadeira. Agora temos uma cadeira. Vamos analisar isso de perto. E sim, agora temos
uma cadeira na cena. Se eu quiser desfazer isso,
eu sempre posso controlar Z. Agora eu tenho meu Se eu quiser mudar o material, posso simplesmente escolher um
material daqui. Vamos experimentar essa rainha 01. E agora nosso cubo
parece diferente. Vamos usar um tom amarelado
com um pouco de metal por enquanto. É o mesmo material que
foi usado para a cadeira. Agora que terminamos de
analisar os detalhes e o esboço, vamos falar sobre a gaveta de conteúdo Você pode clicar na gaveta de
conteúdo aqui, que permitirá que você veja todos os ativos disponíveis para
você em seu projeto O conteúdo inicial
contém muitas malhas, materiais, adereços e
partículas
úteis para aprender
Unreal Engine
e, se você quiser, apenas
criar um protótipo de nível para seu Aqui, vamos aos adereços, e temos várias
malhas que podemos usar Então, vamos colocar uma mesa. E basta arrastá-lo e
soltá-lo na cena,
aguarde um momento para
compilar os shaders E agora você tem uma
cadeira na tela. Se você quiser ter
seu navegador de conteúdo visível o tempo todo e não
se esconder, você pode clicar no botão Doc
in Layout aqui. Isso permitirá que você tenha
um navegador de conteúdo na tela o tempo todo. Você pode colocá-lo em
sua segunda tela ou, como todas as outras janelas, basta
anexá-lo em algum lugar. Então, eu prefiro tê-lo
abaixo da minha tela. Se você tiver algum problema com seu layout ou
digamos que de alguma forma excluiu as janelas e não se lembra de seus
nomes ou de como restaurá-las, o que você pode fazer é clicar
na guia Janela na parte superior. Clique em Carregar layout e clique
no layout do Editor padrão. Isso restaurará o layout real. Você pode clicar em Espaço de Controle e recuperar seu navegador de
conteúdo, seu painel de detalhes
e os contornos Você pode notar que não temos mais a guia
Colocar atores. Isso porque esse é
o layout
padrão Unreal four classic, qual realmente não precisamos A guia Place Actors
também pode ser acessada aqui. Tudo o que está
no lugar, atores, mais ou menos, pode
ser acessado aqui, e você sempre pode
clicar na forma desejada ou em um objeto e fazer com que ele
apareça na sua cena. Há muitas
outras janelas
na guia Windows que
falaremos nas próximas palestras Mais alguns detalhes sobre
a interface irreal. Se você tiver um objeto selecionado
e o mover,
verá que ele está se movendo em um determinado incremento,
como se estivesse se encaixando Isso ocorre porque temos
essa opção aqui ativada. Se você aumentar o encaixe, ele só se encaixará em incrementos
de Se você colocar como um, verá que tem
um movimento suave. E se você simplesmente
desativá-lo, terá ainda mais movimentos
incrementais Pessoalmente, gosto
de mantê-lo em um ou dez com o objetivo de ter uma localização uniforme
para meus objetos na cena. Você pode fazer o mesmo com
rotação e escala. Também temos
opções de janela de visualização aqui. Se você clicar nas opções da janela de
visualização aqui, três linhas no lado esquerdo, você terá muitas
opções disponíveis para você Falaremos sobre eles
nas próximas palestras, mas o que você
provavelmente deve ter em mente
é a porcentagem da tela Se você tiver a
porcentagem de tela ativada, você pode clicar em Substituição personalizada e clicar na
porcentagem de tela desejada Se você observar o fundo aqui
nas linhas dos objetos, se eu reduzir minha porcentagem de
tela, as linhas ficarão borradas em vermelho. Isso ocorre porque agora
está renderizando apenas 25% dos polígonos
disponíveis na capa Se você colocar 200, ele os renderizará
em uma resolução mais alta. Eu recomendo mantê-lo em
100 para ter uma boa qualidade. O que é uma boa referência
sobre a aparência do seu jogo. Obviamente, se o seu jogo tem resolução
mais baixa e
as configurações ativadas, você também pode
ter uma boa ideia colocando, digamos, se o seu jogo tiver uma resolução de 50%, basta colocá-lo aqui, e agora é assim
que ficará se seu jogo tiver apenas
50% de resolução ou
25 ou 200, digamos, quatro
K. Vamos discutir isso
nas próximas palestras Há também guias de modo de seleção,
paisagem, folhagem,
malha, modelagem, fratura, escovação
e animação, que também discutiremos
na próxima Aqui, se você pressionar o botão play ou
OP no teclado, isso entrará no modo play. O que o modo de jogo faz é
essencialmente simular seu jogo. Selecionamos o
modelo de terceira pessoa, então temos tudo
pré-configurado para uma terceira pessoa. Você pode se movimentar
usando o salto WAST. E,
dependendo do modelo, alguns modelos podem
ter uma arma que pode
atirar ou um veículo com o qual você pode se mover ou
objetos voadores com os quais você pode voar. Agora, vamos falar sobre
interface e navegação irreais. Para se mover pela câmera, segure o botão direito do mouse. Se você quiser avançar, clique em W S para trás, esquerda,
A, direita, T, Q E para baixo para cima Você pode rolar para cima para aumentar ou diminuir a velocidade de
movimento da câmera. Ou você pode clicar e selecionar
a velocidade da câmera aqui. Também temos Gizmos para mover os
objetos na cena Por padrão, se você tiver
selecionado Objects Gizmo, você não verá nada Se você clicar em W ou clicar
no ícone Selecionar e traduzir
objetos na parte superior, você obterá essas setas Essas setas podem ser usadas
para se mover ao redor do objeto. Ou você pode clicar no círculo e movê-lo em três espaços D. Você também pode clicar no
Iki ou neste ícone na parte superior, selecionar e girar objetos, que permitirá que você
use Também há
objetos em escala Gizmo. Clique em R ou clique neste ícone na parte superior e você poderá dimensionar seus
objetos conforme desejar. Para ocultar seu Gizmo, você sempre pode
clicar no botão Cue ou clicar no ícone Selecionar Objetos no topo aqui para ocultar seu Gizmo e garantir que, por
acidente, não acidente,
5. UE5 FC03 01: Bem-vindo à palestra.
Nesta palestra, falaremos
mais detalhadamente sobre como manipular atores
e objetos na cena Já abordamos o assunto no
vídeo anterior, mas neste vídeo, vamos nos
aprofundar em como usar as teclas de atalho e os parâmetros
para manipulá-lo Portanto, temos uma tabela aqui, que pode ser manipulada com nossos aparelhos, conforme discutido
no vídeo anterior Movimento, rotação e escala
Também podemos clicar e segurar a
tecla Alt para duplicar o objeto Você também pode clicar
com a tecla Shift para vários objetos mover a tecla
Alt para duplicar
vários objetos Se você segurar a tecla Shift
e mover seus objetos, sua câmera
se moverá junto com ela. Se você pressionar Shift e Alkey ao
mesmo tempo em
que move seu objeto, você criará uma duplicata
e sua câmera
se moverá com um
duplicador recém-criado do Se você escolher vários objetos, como fiz agora, e
tentar girá-los, a rotação acontecerá em torno
do último objeto selecionado Você pode definir facilmente qual é olhando
onde está seu aparelho Se quisermos alterar a malha
do objeto enquanto mantemos sua localização e os parâmetros de
transformação dos parâmetros, você pode fazer isso aqui
na malha estática. Digamos que queremos transformar
essa mesa em uma cadeira. Felizmente, ele é fornecido
no conteúdo inicial, então podemos clicar nele
aqui e teremos Agora, se tentarmos encontrar
a localização do ativo para a qual
usamos essa mesa ou cadeira e você não tiver certeza onde ela estava localizada no
seu navegador de conteúdo, você sempre poderá clicar
nesse ícone aqui e ele o levará diretamente
ao local do ativo. Assim, agora podemos ver o conteúdo, conteúdo
iniciado e
os adereços na pasta E o que podemos fazer aqui clicar em um objeto. Vamos colocar a segunda
mesa e clicar
no sofá em nosso navegador de conteúdo e aqui no painel de detalhes Enquanto isso estiver selecionado
no navegador de conteúdo, clique nessa aróquia Isso transformará automaticamente a malha selecionada em ativo que
selecionamos
no navegador de conteúdo. Isso funciona não apenas para malhas, mas também para materiais e outros tipos de
ativos que
podem ser usados no navegador de
conteúdo Digamos que queremos mudar
isso para outra coisa. Então, vamos repetir o processo. Digamos, vamos pegar uma estátua e transformar
esse objeto em estátua. E agora temos uma estátua
para colocar na mesa, o que podemos fazer muito bem E digamos que
queremos uma segunda cadeira. Uma maneira fácil de fazer isso. Clique em
ser selecionado automaticamente. Clique aqui e seja. Agora temos nossa cadeira,
o sofá e a lâmpada ou o que quer que esse copo
deva ser Agora, vamos falar sobre como
manipular seus materiais. Então, de forma semelhante. Digamos que selecione este sofá e temos uma
pasta de materiais aqui Esses são
materiais padrão que vêm com o conteúdo inicial
do motor Unreal E temos opções aqui. Como você pode ver, temos
um material chamado Cadeira, que está sendo usado
para este sofá Vamos mudar esse material
para outra coisa. Agora, vamos tentar. Como você pode ver, tudo o que
preciso
fazer é clicar no material
e clicar no ícone. Mas você também pode arrastar o
material no próprio objeto. Você também pode selecioná-lo na
lista, se desejar. Talvez seja necessário esperar que ele seja compilado e você sempre pode, como eu disse antes, clicar
nele e ditá-lo em cima
de algum material Vamos fazer com que seja dourado. Há opções adicionais aqui no
painel de detalhes sobre seu objeto. Em primeiro lugar, se
você notar que há uma balança e perto da balança,
há um ícone de cadeado. Se você não o tiver
bloqueado e tentar
dimensionar um objeto, ele será dimensionado somente em uma direção em um
eixo para ser preciso. Se você bloqueá-lo e
seguir sua transformação, ele o fará de maneira uniforme. Lembre-se de que você sempre
pode digitar a resolução
desejada, os valores desejados. E se você o
estiver usando com alguns números
ou escalas complicados , lembre-se. Você pode fazer coisas assim. Digamos que um mais 00 ponto cinco. O irreal fará
a missa por você. Se você quiser dobrar a escala, basta clicar em multiplicar
e dois. Então, duplique. Você pode dividir
e multiplicar. Você pode fazer todas as operações em massa com os valores que o
irreal fornece E não se limita
apenas aos detalhes de um painel. Ele pode ser usado praticamente em
qualquer lugar no irreal. Temos outras opções aqui
no painel de detalhes, que não serão
abordadas agora. Nós os abordaremos mais tarde. Agora, vamos fazer uma tarefa. Você tem acesso ao
seu conteúdo inicial e a todos os acessórios nele contidos Vá para a pasta Props e selecione as malhas que
você quiser, malhas estáticas Arraste-os,
solte-os na cena e crie um pequeno conjunto
da maneira que desejar. Basta testar suas ferramentas
e se acostumar com elas.
6. UE5 FC03 02: Si. Agora, vamos falar sobre como
manter nossa cena organizada. Como você pode ver, eu montei uma cena simples aqui com três cadeiras, uma
mesa e um abajur. Então, vamos pegar
todos eles e movê-los. Então, se você quiser mover nossos objetos como um conjunto
durante o nível, temos que clicar em
cada um deles clicando com a tecla Shift, um por
um , ou movê-los de forma independente, que é demorado
e ineficiente Em vez disso, o que você
gostaria de fazer é clicar com a tecla Shift em todos eles. E pressione Control G, agrupe-os. Agora eles são um grupo de atores, então eles são movidos como um só
e selecionados como um. Você pode mudar G para
desagrupá-los e Control
G para agrupá-los. Você pode clicar com o botão direito do mouse,
ir para grupos e
grupos ou clicar com o botão direito do mouse
e clicar em grupo. mesma coisa. Você também pode fazer isso a partir do delineador
do lado direito Como você pode ver,
temos uma guia de atores de grupo aqui, que é essa. Agora, antes de mudarmos um, há uma dica que eu
gostaria de lhe dar. Se você quiser mover um único objeto
de todos os outros objetos, mas não quiser
desagrupá-los todos e
agrupá-los novamente, que pode ser
demorado quando você tem talvez 40 malhas em
um único grupo, o que você pode fazer é
clicar
nessas configurações na nessas configurações na Vá para Uma seleção de grupo. Clique nele e agora a
seleção de grupos está desativada. Isso ainda é um grupo de atores, mas agora você pode
selecioná-los individualmente. Agora, digamos que
eu queira
aproximá-lo e este também. E agora eu posso clicar em Ir para configurações e clicar em
Permitir seleção de grupos, e agora posso
selecioná-los novamente como um grupo. Isso é bastante eficiente
quando você
tem muitas medidas na
cena que estão
agrupadas e você não quer desagrupá-las e
agrupá-las novamente E agora podemos
movê-lo facilmente para qualquer lugar que quisermos. A cena, vamos mantê-la aqui. Agora, outra forma de
organizar nossos atores
é por pastas. A cena irreal desse nível já
tem pastas padrão, mas os atores que adicionamos
não são adicionados à pasta Então, vamos criar uma pasta. Você pode criar uma
pasta clicando
nessa pasta com um
ícone de adição no canto superior direito. Clique nele e, se você tiver
o objeto selecionado, ele será automaticamente
adicionado à pasta. Vamos renomear isso para,
digamos, por mobília. E vamos adicionar esse
sofá aqui também. O que podemos fazer é tornar isso maior mais fácil de ver.
Temos
essa pasta aqui. Você pode simplesmente arrastar
isso para a pasta. Agora, nossos móveis estão
agrupados com outros. Mas essa mobília não faz
parte do ator agrupado. É um ator separado
na mesma pasta. Portanto, não confunda agrupar atores com apenas ter os mesmos atores na mesma pasta.
Há coisas diferentes. Se quiser, você pode criar
subpastas fazendo isso. Então, digamos que o primeiro set, e vamos colocar o
ator do nosso grupo no set um. Outra pequena tarefa. Vamos fazer uma limpeza. Pegue suas
cenas criadas anteriormente e organize-as. Crie pastas, crie grupos, se fizer sentido agrupá-los, e certifique-se de
ter uma cena fácil e limpa que possa ser facilmente
navegada pelo Depois de terminar, passe para
a próxima palestra.
7. UE5 FC03 03: Bem vindo de volta. Como você pode ver, criei um cenário
simples usando os adereços na pasta de conteúdo
inicial E eu fiz algumas folhagens do lado de fora, agrupei-as, adicionei
alguns móveis no interior
e, obviamente, as
agrupei com sondas adicionais, fontes de
luz e paredes de vidro, alguns pilares, como você pode ver, e fiz uma limpeza
removendo muita bagunça da
cena Adicionou uma porta e uma moldura de porta e modelou essa caixa simples
usando ferramentas de modelagem irreais Agora vamos falar brevemente sobre as ferramentas de modelagem
dentro do unrele Unreal tem suas
ferramentas básicas de modelagem que você pode usar, mas o Unreal five dot four tem
ferramentas de modelagem adicionais disponíveis para você, mas você precisa
habilitá-las a partir dos plug-ins Se você clicar em Editar e
vá para a seção de plug-ins. Todos esses são plug-ins
disponíveis no unrele. Alguns são integrados, o que significa que o UnRel os fornece por padrão Eles podem estar ligados ou desligados. E alguns são instalados
a partir do marketplace ou plug-ins
personalizados que você ou
outra pessoa possa ter criado. Portanto, há muitos
plug-ins aqui, então não examinaremos todos eles um
por um, modelagem de pesquisa. Depois de pesquisar a modelagem, você obterá várias ferramentas de
modelagem. Eu recomendo
ferramentas de modelagem Modo editor e modo de
modelagem Editor de malha estática. Os dois. Ambas são versões beta, então provavelmente
serão aprimoradas no futuro
com a dica irreal de desenvolvimento Depois de habilitá-lo, solicitarei uma reinicialização. Como eu já o
habilitei, não preciso fazer isso,
basta clicar no botão
Reiniciar e
aguardar um minuto para
que ele seja reinicializado Depois que seu unreal
for reinicializado, vá até a guia na parte superior e
clique em Modo de modelagem Como você também pode mudar cinco
para alternar instantaneamente para ele. Nas ferramentas de modelagem,
temos muitas coisas. Não entraremos em detalhes sobre
cada uma delas, mas qualquer pessoa familiarizada com modelagem verá
muitas ferramentas familiares. Então, se você quiser apenas criar uma forma básica para
bloquear por bloqueio, quero dizer apenas uma malha de
espaço reservado que
será usada para projetar
seu nível Você pode simplesmente usar
ferramentas de modelagem dentro da bobina. Então, do jeito que eu criei este, vamos recriá-lo
em uma escala menor Antes de tudo, basta
clicar na forma desejada. No nosso caso, uma caixa. Você também pode fazer retângulo,
mas, como você pode ver, é apenas um plano, não é útil Nós pegamos uma caixa. E precisamos definir a
altura e a largura do livro. Por padrão, é
de 1 a 2 mil, mas você pode digitar valores
mais altos, se necessário. Então, no nosso caso,
vamos fazer com que seja 500. Mantenha as coisas simples. Vamos subir
. Mova-o ao redor. E eu não quero que seja tão pequeno, então vamos aumentá-lo
vertical e horizontalmente, e eu não quero que fique tão doente,
para que eu
possa reduzir a altura Então, vamos fazer isso 20. Você pode aumentar a subdivisão para aumentar a qualidade
do modelo, mas como o estamos usando apenas para
prototipagem,
não precisamos fazer isso prototipagem,
não precisamos fazer Agora, depois de terminarmos de selecionar a
forma geral que queremos. E temos um tipo de saída, uma malha estática, que é
exatamente o que precisamos. Poderíamos atribuir um
material aqui imediatamente, mas deixaremos para
depois e clicaremos em Aceitar. A menos que você clique em Aceitar, essa malha não será gerada. E depois de clicarmos em Aceitar, agora é uma malha gerada
existente em nosso nível. E se você clicar nela e
clicar aqui para encontrar essa malha, veremos que você tem uma pasta gerada e
sua pasta
gerada tem
todas as malhas de que você precisa Agora, vamos voltar
à modelagem. Então, como você pode ver,
é apenas uma forma. Você pode pensar que a melhor
maneira de fazer isso é criar outra forma para fazer uma parede do
lado direito do lado esquerdo. Mas se você prestar atenção, essa é uma malha inteira. Então, se formos
movê-lo, é uma malha inteira. Não é só um avião. Então, a maneira de fazer isso usando
a maneira mais simples possível é clicar na malha
e ir para a modelagem. Bem, modele a forma e
clique no grupo de polietileno Editar. Essas opções na parte superior,
e a maioria das opções, na
verdade, não estarão
disponíveis para você, a menos que você habilite o plug-in de modelagem
de plug-ins na seção de plug-ins. Depois de selecionar a malha e clicar em edição de
poligrupos O que precisamos fazer
é clicar em um rosto. Para obter informações, esses
pontos são chamados de vértices. Essas linhas são chamadas de bordas, e essa face ao
lado das malhas,
essencialmente, é chamada de faces Então clicamos na face aqui
e clicamos em Extrude. O que o Extrude faz é criar uma nova face e
digamos assim A razão pela qual fizemos isso é que, se olharmos para o modelo abaixo, se tentarmos extrudi-lo aqui, extrudará inteiro Precisamos de algo menor. Então, nós a extrudamos levemente e agora temos um ritmo de linha que podemos usar para
extrudar E agora temos um
lado da parede. Podemos repetir esse processo
aqui e extrudar novamente. E novamente, e
agora temos uma forma similar. Nesse caso, não
modelei a parte traseira
do Já havia uma parede lá, mas podemos fazer isso
aqui se você quiser. Você pode usar ferramentas de extrusão para criar qualquer tipo
de formato que desejar Como você pode ver, você pode criar formas
complexas se quiser. Há muitas ferramentas aqui que você pode usar para
modificar seus modelos. Você pode usar push pull,
que é uma função semelhante, mas tecnicamente
diferente que pode realmente reduzir Tecnicamente, como é chamado. Ele puxa ou empurra o modelo. Há um chanfro, que
não é muito útil aqui porque eu não
selecionei nenhuma borda, clique e selecione o chanfro para Não há
muitos polígonos, então não parece bom,
mas como você pode ver, modificamos a
forma do modelo Não vamos tocar nisso
e podemos simplesmente
cancelá-lo e eu também cancelarei. Novamente, porque eu
não salvei o modelo. No momento em que cancelei
, cancelou todos eles. Certifique-se de clicar em,
exceto no seu modelo, para ser salvo. Eu não preciso desse modelo,
então vou apenas removê-lo. Mas eu gostaria de ver
o que você criou. E não se esqueça de
limpar seus modelos. Como não vou mais
usá-lo , vou
simplesmente excluí-lo. Eu provavelmente poderia renomeá-lo para
algo mais razoável, mas como não
vou manter isso por muito tempo, não
vou me preocupar Agora, temos um conjunto simples que não parece
muito atraente por causa da
cor e da iluminação É apenas cinza com
grade, não é a melhor aparência. E vamos mudar tudo
isso na próxima palestra.
8. UE5 FC04 01: Bem vindo de volta. Nesta palestra,
falaremos sobre materiais,
como aplicá-los, como criá-los e como
modificar materiais existentes Felizmente, a Unreal nos
forneceu materiais
no conteúdo inicial, que usaremos para E depois disso, mostrarei como criar materiais básicos Como você pode ver neste nível, o material de textura baseado em grade embora seja útil para o desenvolvimento , considerando o tamanho e a localização
dos ativos que você coloca, não
é muito bonito Então, vamos mudar
isso. Primeiro de tudo, esse andar aqui
não parece muito bom. Eu gostaria de
transformá-lo em algo que fizesse mais sentido
estar no chão, e temos alguns materiais aqui. Eu poderia usar, eu acho, concreto
moído. Vamos ver. Vamos usar paralelepípedos, lisos, semelhantes, e colocá-los aqui. Hmm. Isso parece muito estranho. E a razão pela qual
isso aconteceu
é porque o material
está esticado. Se você abrir o material em si, você pode vê-lo aqui,
parece bom. E se você colocar uma forma
básica simples de, digamos, um cubo e aplicar
o mesmo material Isso também parece muito bom. A razão pela qual isso acontece
é por causa da diferença de UV. Este piso não é realmente
otimizado para esse material. Então, o que podemos fazer aqui, podemos abrir nosso material e este é um nó material
para esse material em particular. Isso é muito complicado, mas não precisamos de
muita coisa daqui. O que precisamos encontrar é
encontrar o nó coordenado da textura. Então, tudo o que você precisa fazer é encontrar isso e
ladrilhar seu material. Quanto maior o número, mais
espremidas são as texturas. Você pode fazer isso aqui ou aqui. Clique em exceto. Reserve o momento para que fique seguro.
E agora vamos ver. É muito melhor,
mas ainda é muito grande. Então, vamos multiplicar por
dez vezes novamente. Talvez 50 e 50. E seguro agora. Vamos esperar um
momento. Idealmente, você não
gostaria de editar ladrilhos nos materiais
individuais e usar material de instância Mas explicarei quais
exemplos são os materiais mais tarde. Ok. Isso poderia ser melhor
se o classificássemos aleatoriamente , mas
isso deve ser bom
para fins de demonstração. Agora temos um piso
térreo liso. E agora vamos ver isso aqui. Eu realmente não gosto
desse material. Então, vamos usar outra coisa. Poderíamos usar algo
sofisticado como esse material aqui para ter esse visual
futurista Este material usa luzes
emissivas. Desculpe, material emissivo
que produz luzes. Se você for até o material, verá que há um nódulo de
cor emissivo que
está sendo aplicado Analisaremos isso
mais tarde com mais detalhes. Mas vamos, por enquanto,
aumentar o ladrilho. Digamos que cinco por
cinco deve ser bom. Vamos aceitar. Mais uma vez,
espere um momento. Parece muito melhor. algo de um filme de ficção científica Mas, como adicionaremos
luzes a essa cena mais tarde, não
gostaríamos que isso entrasse conflito com
as fontes de luz Então, apesar de parecer tão legal, escolha um material mais simples Digamos, por exemplo, que
tal isso? Parece semelhante, mas não
há luzes. Ou talvez. Devemos fazer isso da madeira. Também poderíamos fazer isso
da madeira. Vamos fazer isso da
madeira. Dê o momento. Mas não parece
bom. Vamos ficar com isso. Metal preto, metal em grade. Isso é um pouco grande demais, então vamos ladrilhar um pouco mais. Então, vamos fazer 88 e ver. Deve ser bom
o suficiente. Neste andar. Desculpe, tudo isso também precisa ter o
material alterado. Vamos nos inscrever aqui também. Isso deve ficar bem.
Talvez um pouco escuro demais, mas quem se importa. Bom o suficiente. Como você pode ver,
mudamos a aparência de toda
a cena. Mas todos esses materiais já existem
no kit inicial Os materiais nem
sempre são fornecidos e haverá momentos em que você mesmo
desejará criá-los. Então, vamos criar um material. Vamos para nossa pasta de conteúdo. Crie uma nova pasta
chamada material. Abra-o e
clique com o botão direito do mouse ou clique em Mais. Você pode clicar com o botão direito do mouse
e criar um material acessando aqui o material
e clicando no material. Há muitas coisas aqui que são para os cursos futuros. Clique no material.
Vamos chamar isso básico: M entendido, pontuação básica. M significa material. É bom ter convenções de
nomenclatura para seus materiais em geral M geralmente é para materiais. Então, abrimos e é
isso que obtemos. Temos saída, essencialmente, e antes da saída,
temos substrato. O substrato é uma função de material
específica irreal que foi adicionada recentemente
9. UE5 02: Você pode notar que a aparência de
seus materiais é
um pouco diferente da minha. Você tem um nó
de saída diferente, porque não
tem materiais de substrato habilitados. Você não precisa usar
isso especificamente
e, independentemente de usá-lo ou não, a
funcionalidade básica do material, como criá-lo, é a mesma. O substrato é uma função de
material expandida para criar materiais
em camadas
que são muito úteis e exclusivos do Unreal
Engine Eu habilitei por padrão, o que eu recomendaria aprender se você estiver interessado
na criação de material. Agora, voltando
aos materiais. Temos algumas opções aqui. Ignoraremos tudo do
lado direito, que é principalmente
específico do substrato, e nos
concentraremos principalmente aqui. Cor base, metálica, rugosidade
especular, cor e normais do MSF A cor base é, como
é chamada de cor base. No lado esquerdo, temos
uma prévia da malha SR. Como você pode ver
corretamente,
não há nada nele, então
é apenas branco. Vamos adicionar uma cor a isso. Da maneira que você pode fazer isso, você pode clicar com o botão
direito do mouse no gráfico do
material. Este é o
gráfico do material, conforme mencionado aqui. E você pode tentar encontrar o nó de
textura, etc., mas basta simplesmente segurar três no teclado, no
teclado numérico e clicar O que isso faz é criar um valor constante que você
pode usar para selecionar uma cor. Então, isso é baseado em RGB. Então, vamos selecionar vermelho. Podemos ajustar a cor
aqui da maneira que quisermos. Se você tem um
código X ou um código X RGB, você já sabe,
basta copiar, colar e digitar E digamos vermelho. Como você pode ver, nada
mudou aqui porque ainda
não conectamos nosso nó Vamos conectar nosso nó de
cores base aqui. E agora nosso material é vermelho. Mas digamos que queremos
torná-lo mais metálico. Precisamos agregar
valor ao metal. Normalmente, o valor nem sempre
é, mas geralmente vai de 0 a 1, o que significa que precisamos de um valor
flutuante para inseri-lo Esses foram os valores sic, que geraram uma cor. Mas aqui só precisamos de um valor. Então, o que precisamos fazer é
segurar um e clicar, o que criará
um único valor, que será o float Vamos colocar nosso
nó de valor zero no metálico. Nada mudou muito porque o valor metálico
atualmente está em zero, o que significa que é o mais
não metálico possível E, como mencionei anteriormente, um geralmente é o valor
máximo. Então, vamos colocar um aqui e
clicar em N. Espere um momento. Agora, de repente,
é muito diferente. Sempre podemos colocar um valor
entre zero ponto cinco. Então, vamos continuar assim ou agora. Queremos que brilhe e
que seja diferente. Então, a propósito, você pode verificar
os valores padrão aqui. Então, como você pode ver, valor padrão
especular
é zero ponto cinco, o que significa que esse é um
valor especular de 05 no momento Vamos adicionar mais fluido
e colocá-lo em especular. Agora temos o
valor especular de zero. E faça isso, você poderá notar muita
diferença na tela, mas é bastante útil para superfícies
não metálicas Como o
tornamos metálico, não poderemos vê-lo Então, vamos fazer
zero metálico e um especular. E agora reduza o especular para
zero para ver a diferença. Você vê? O material
está muito fosco agora Não está mais
brilhando porque é um material não metálico sem
especular Portanto, não brilhará
e refletirá a luz de volta. Mas eu prefiro
que meu material seja metálico por enquanto,
então vamos fazer dele um E o especular não importa quando o material é totalmente
metálico na maioria dos casos Então, agora vamos dar uma
olhada na rugosidade. O valor da diferença de rugosidade também
é zero ponto cinco. Então, colocamos a rugosidade em zero, o que significa que ela é tão
lisa quanto um vidro e é muito refletiva
porque é um material metálico,
totalmente metálico, com Se você reduzir o valor
metálico, repente, é apenas
um objeto liso Se você tem um para especular, tem um pouco de brilho,
mas não é tanto quanto era quando
era totalmente metálico Então, agora vamos fotografar um, zero. E, novamente, essa é uma esfera metálica muito
lisa. especular não importa quando
temos um objeto metálico, então vamos mantê-lo em zero E o que acontece se
aumentarmos nossa aspereza? Se você colocar rugosidade em uma, ela terá a mesma
textura de um A coisa mais próxima do valor de uma pessoa
na vida real é o giz Para quem não
sabe o que é giz,
é uma ferramenta usada para
escrever no quadro-negro Mas isso é demais. Então, vamos colocar em um valor menor. Digamos 07. Não queremos que
seja muito reflexivo, mas queremos que seja reflexivo Talvez um pouco mais. Desculpe, precisamos diminuí-lo
porque está ao contrário. Quanto menos valor temos,
mais reflexivo ele é. Não, um pouco mais. E,
sim, isso é bom Não é muito reflexivo. Não
e agora temos um normal. Portanto, neste caso, como estamos apenas criando
um material colorido simples, normal não é tão
útil para nós, mas os normais são usados para calcular certos valores
no espaço tangente Normalmente, as texturas normais são usadas em conjunto com o normal, e o valor zero, um raramente é usado por Então, vamos dar uma olhada na
aplicação de um normal. Digamos, Ah, sim, esse paralelepípedo que demos uma olhada recentemente Então, temos esse
nodo normal vindo aqui. Portanto, temos uma textura normal. Essa textura normal é importante para que a
textura do paralelepípedo apareça adequadamente. Então, agora vamos dar uma olhada no mapa. Nós temos esse material, ou. E nesse material, se dermos uma
olhada na textura normal, essa é uma textura normal para o material que
usamos no chão. E digamos que o removemos ou
o alteramos em outra
coisa, certo? Então, vamos mudar isso para o normal de um paralelepípedo diferente ou
até mesmo seixos. E aplique. De repente, parece
um pouco diferente. Há algo errado
com o material. Vamos fazer isso de novo. Desta vez, vamos
transformá-lo
completamente na textura de um
concreto e aplicar Agora, essas linhas estranhas
no material,
que são do normal dos paralelepípedos É muito importante que
os normais combinem com a textura. Precisamos aplicá-lo. Eu controlo as duas vezes para restaurar
o que tínhamos inicialmente. As texturas normais
geralmente são criadas por artistas de textura ou modeladores Se você quiser aprender
como fazer isso sozinho, recomendo
pesquisar as informações relacionadas à modelagem e textura ou os cursos em nossa lista de cursos. É muito aprofundado e pode ser o
mais complicado possível, por isso não abordaremos
isso neste curso. Mas se você estiver interessado,
por favor, dê seu feedback. Podemos apressar um novo curso
neste tópico específico. Então, vamos fechar isso e
voltar ao material. Agora, parece o
mesmo de antes. Vamos voltar ao
nosso material básico. Estávamos criando aqui,
temos algo interessante. Temos uma
cor emissiva. O que isso significa? cor emissiva é essencialmente um material que brilha
e produz luz Então, se adicionarmos um valor
e o colocarmos aqui, e em zero, ele não fará nada. Se você colocar talvez em cinco, agora está brilhando intensamente Se você colocar, digamos,
5.000, podemos ficar cegos. Como você pode ver, ele
está emitindo
muita luz no momento E esse material
não foi feito para ser brilhante, então simplesmente não faremos isso E mantê-lo em zero é, o que é por padrão. Então, removemos isso.
Também temos opacidade Se você adicionar uma
nota flutuante, minhas desculpas, eu adiciono outro valor
flutuante coloco em opacidade
e coloco em zero, a cor do material simplesmente
não aparecerá porque
está em zero Se você colocar em,
digamos, zero ponto sete, você tem um pouco opaco É meio difícil de ver, então
fica em zero ponto dois. É menos opaco. Nesse caso,
não vamos usar isso,
mas, independentemente disso, é importante entender como
os materiais funcionam em geral. Se você quiser fazer um
material opaco ou translúcido, vamos dar uma olhada no
material do vidro Então, o vidro que tínhamos é um material de conteúdo
inicial, o material de vidro Vamos dar uma olhada
no material de vidro. Temos
índice de reflexão e refração. Minhas desculpas. Temos nosso modelo de sombreamento de
substrato E aqui temos opacidade,
e a opacidade é 0,35 Também temos
refração adicional, etc., que faz
modificações adicionais para editar a superfície
do objeto Isso está muito acima do nível
intermediário, então vamos pular isso Se você der uma olhada aqui, temos um material muito
interessante que é quase todo preto. Temos um valor
especular de dez Como eu disse, geralmente também
fica entre zero, mas às vezes você pode ir mais alto. No caso de especular, é um valor de dez Temos uma rugosidade de zero
porque isso é vidro e temos opacidade
de Por ser um
material preto com opacidade, parece um vidro E se você remover
essa refração aqui, como você pode ver, ela não
mudou quase nada Portanto, não se preocupe muito
com a refração no momento E se mudarmos
essa opacidade para uma, essa não é mais uma classe
transparente Mudamos o
especulativo para um, é muito fraco. Não há uma maneira
garantida de obter o resultado específico que você
deseja, com um material. Portanto, o melhor curso de ação é entender as
funções básicas do material, o que elas significam, e
tentar mexer até
conseguir o que deseja Agora, por enquanto, vamos fechar isso. Nós não vamos economizar. E
vamos voltar a isso. Então, aqui estamos de volta, e agora temos esse material. E queremos que esse material seja
aplicado na baixa temperatura. Há opções adicionais
aqui para aditivos mascarados, etc., que serão
abordadas nos cursos futuros E vamos guardar isso
e matar o amor. Agora, digamos que
queremos que essas caixas
tenham a mesma cor do material
recém-criado. Vamos aqui, selecionamos e aplicamos. Oh, agora, de repente,
temos duas caixas com um
material que acabamos de criar. É muito simples
aplicar o
material criado ao nível. Mas digamos que queremos
ter um material metálico, mas queremos que
cada um tenha uma cor diferente ou uma quantidade diferente de
rugosidade
ou Queremos que alguns talvez
este seja amarelo, este seja verde, este seja branco. Isso não importa. Isso significa que criamos um novo
material para
cada tipo e variação? Não. É aqui que entram os
exemplos materiais. Então, se você tem um material e quer ter várias
versões desse material, por exemplo, como eu disse, quero que tudo
esteja aqui exatamente igual, exceto
a cor. Então, eu quero a mesma quantidade de superfície refletiva, metálica,
etc., e a única coisa que eu quero que seja diferente
é a O que posso fazer é clicar com o botão direito do mouse
no material e criar
uma instância do material. Agora, o que isso significa? A instância material é
filha de um material e obtém todos os seus parâmetros
do próprio material. Então, agora vamos aplicar isso
a todas essas medidas. Então, agora temos uma instância
material. Há vários benefícios em ter uma instância material. Ele é mais otimizado e é mais fácil de
mudar em tempo de execução. Então, agora vamos separar isso por um segundo e dar uma
olhada nisso, certo? Correto. Então, no momento, não
temos nada
em nosso material. Porque não adicionamos nenhuma propriedade que
deveríamos adicionar e alterar
do material. Existem algumas
opções padrão que o Real tem para você, mas elas não são o que queremos. Então, como adicionamos opções aqui para alterar durante o processo? Vamos ao material em si e encontramos os
parâmetros que queremos. E neste caso, neste,
queremos mudar de cor. Então, clicamos com o botão direito nele. E converta em parâmetro. Então, precisamos nomeá-lo. Isso é cor, então
é simples de nomear. E agora temos um parâmetro
chamado cor, correto? E o valor padrão para
esse material é vermelho. Isso é tudo o que temos
que fazer. Lembre-se de que você pode fazer isso para qualquer
outro parâmetro. Você pode fazer isso para rugosidade,
metal, etc. Voltamos e abrimos o material novamente.
Vamos torná-lo maior. Agora temos uma cor. Então, se clicarmos aqui e
mudarmos a cor aqui, ela muda instantaneamente
a cor de todas as malhas aplicadas com
esse material exato Você pode alterá-lo facilmente. Mas você pode estar se perguntando, espere, mas eu não quero que todos
sejam da mesma cor. justo. Crie mais
instâncias desse mesmo material. E essa pode ser uma instância
material, duas, e aplicar essa. E essa pode ser a instância
material três. E digamos que isso é aplicado a este e
este é amarelo. Vamos, mais uma vez, criar uma
instância de material, nomeá-la. Este, vamos fazer o nome quatro, abri-lo, trocá-lo, verde. E vamos aplicar isso a isso. Agora temos quatro materiais
de cores diferentes. Então você pode estar se perguntando: qual é a vantagem
de fazer isso? Porque basicamente
criamos várias instâncias de
materiais. Eu não poderia simplesmente criar
vários materiais? Não. Então, em primeiro lugar, as instâncias de
materiais
são mais otimizadas, o que significa que elas consomem
menos recursos do
que se você tivesse
vários materiais. Em segundo lugar, agora,
temos quatro materiais, exemplos, para ser correto, que estão sendo aplicados
a essas caixas. E digamos que pegamos essa instância material e
queremos mudar alguma coisa. Mas há benefícios adicionais aqui se você quiser
alterar todos eles. Digamos que houve uma
diferença de opinião mais tarde e queremos garantir que nenhum
desses materiais
coloridos seja metálico Então, queremos que eles sejam difíceis e mudamos isso nos
pais, exceto um momento. Volte e agora todos
eles não são metálicos. Portanto, agora temos flexibilidade para editar materiais no pai, o que alterará instantaneamente todos os valores que não estão sendo modificados na instância ou, se você quiser alterar um material
específico apenas em uma
instância específica da malha, basta editar
isso. Como eu disse, podemos fazer isso não apenas com cores, podemos fazer
isso com qualquer coisa. Então, digamos que seja metálico, então podemos clicar com o botão direito
nele e converter em parâmetro Chame esse parâmetro de
metálico, salve. Lembre-se de que esse é
um material principal. Agora, se você abrir alguma
das instâncias que
criamos
anteriormente, temos uma opção aqui ou
metálica, que podemos alterar Portanto, tenha em mente. Vamos torná-lo mais visível. Fique de olho nessa caixa azul
e vamos trocar a metálica Agora temos apenas um
deles, não metálico. Obviamente, é melhor ter apenas zero
em vez de negativo. Assim, podemos modificar facilmente nossos materiais e nossas instâncias de
materiais dessa forma. E essa é a
maneira recomendada de fazer isso. Então, agora vamos salvar isso e
dar uma olhada. É simples. Não é nada muito difícil e parece muito bom para algo que criamos
em alguns minutos. Agora, antes de passarmos
para a próxima palestra, vamos fazer outra tarefa Com o conhecimento que você adquiriu, crie materiais e
decore sua cena. Boa sorte e até
a próxima palestra.
10. UE5 01: Bem-vindo de volta ao curso. Nesta palestra, falaremos sobre raios, suas diferenças e como
colocá-los na cena Antes de discutirmos os raios que podem ser configurados na cena, vamos dar uma olhada
no que já existe na cena por
padrão neste modelo, que é a luz direcional E esse relâmpago
aqui é o sol. Se você acessar as configurações, painel de
detalhes para ser mais preciso e alterar
a intensidade. Vou aumentar a luz do sol ou diminuí-la
dependendo do valor que você colocar. Em zero, não há
luz, essencialmente. E, por um lado, é muito baixo. Pessoalmente, prefiro três, como você pode ver, mas você pode
alterar o valor conforme quiser. A cor da luz, como é
compreensível pelo nome, muda a luz da cor Desculpe, cor da luz. Você pode ver, podemos dar à
nossa cena uma vibração diferente, ou agora vamos mantê-la como está O ângulo da fonte
realmente não importa muito. O ângulo padrão aqui, o ângulo da fonte, é o
mesmo do próprio sol. E se sua principal fonte
de luz for o sol, você pode muito bem
mantê-la nesse valor. Isso também não é algo com
que você deva se preocupar. Você pode aumentar a
temperatura ou diminuí-la, o que afetará a tonalidade da cor Novamente, não é algo com que você realmente
deva se
preocupar neste momento. E podemos ignorar
o resto disso. Poderíamos remover as sombras, o que removerá todas as sombras
projetadas por essa fonte de luz Quando você tem várias fontes
de luz na cena, você pode preferir uma sombra
específica daquela fonte de
luz específica Então, nesse caso, você pode simplesmente desativar outras
e manter essa, ou você pode ter várias luzes projetando sombras de
várias fontes. E esse objeto terá
várias sombras. Mas é melhor não
ter centenas de luzes, todas elas
projetando sombras em um espaço apertado, porque isso é
apenas um desperdício de computação, como a otimização do seu jogo E, obviamente, afetar o
mundo é meio obrigatório na maioria dos casos. Ok, agora vamos falar sobre
as luzes que, na verdade, são algo que você pode simplesmente
colocar na cena de
uma maneira menor. Então, se voltarmos a esse conjunto que temos aqui
, está muito escuro. E digamos que queremos que o sol não esteja tão
alto no ar. Queremos algo como o pôr do sol. Podemos mudar a direção
do sol facilmente
pressionando Control E, desculpe, controle L e girando
a direção do sol Então, vamos fazer algo assim. Estou me movendo ao redor do mouse enquanto mantenho pressionada a tecla
control. Sim, vamos fazer isso, Lexis. Cada vez mais sombrio, e agora faz mais sentido
ter raios Você sempre pode tocar luzes, clicar neste ícone na
parte superior e ir para as luzes. Ou você pode clicar
na guia Janela aqui, colocar atores e ir até
a banheira de luz. Vou ficar com
Lexis só para ter mais facilidade em explicar
o que cada um deles faz. Já falamos sobre luz
direcional. Você, pessoalmente, não gostaria ter muitas
luzes direcionais na cena Então, geralmente uma luz direcional da fonte de luz principal, o sol, é suficiente, mas você pode querer ter
várias luzes menores Então, vamos falar primeiro sobre a luz
pontual. Isso é luz pontual.
Essa luz tem um raio. Vamos levá-la para fora, para
a câmera, por um segundo. O círculo ao redor
define seu raio. Vamos esconder nossa
luz do sol por um segundo, que possamos enxergar com
mais facilidade. O raio da fonte e o raio da fonte flexível estão
interligados. Se o rádio de origem for zero, o rádio de fonte virtual não fará nada. Então, para fins de demonstração, vamos diminuí-lo e
aumentar a fonte de rádio. Não precisa
ser tão grande para ter qualquer efeito em rádios de
fonte virtual Pode ser literalmente um. Quando eu aumentar
ou diminuir isso, você notará
a diferença
nos raios
nesses objetos distantes Vamos fazer assim. O que mudou foi a queda em que raio começa a
ter cada vez menos luz Normalmente, não é algo que você precise moldar demais. Você pode manter as coisas simples. E, por enquanto, vamos dar uma olhada no último,
que é o comprimento da fonte. Então, se colocarmos o raio da fonte
assim, é muito grande. Vamos fazer isso fazer isso. Essencialmente, dá-lhe a altura. Então, em vez de uma lâmpada aqui, agora é gigante , parece um
elevador gigante que emite luz Na verdade, não é algo que você precise se intrometer demais e pode
ignorá-lo na maioria das vezes E vamos restaurar essa
luz para algo adequado. Fica maior. Vamos
torná-lo um pouco maior, eu acho. E, novamente, é o
mesmo de antes, o mundo
afetivo fica obscurecido ou não. Podemos ignorar tudo isso. Agora, vamos dar uma olhada
no próximo tipo de luz,
que é o holofote Você pode estar se perguntando
o que o Spotlight faz. É uma fonte de luz que, como você pode
ver pela forma vamos aumentar a
intensidade dela É uma luz que afeta
apenas uma determinada área. Xis. Vamos mover o painel de detalhes para
cima para facilitar a visualização. Você pode aumentar o raio de
atenção aumentar
a lente Você pode girá-lo.
Como você pode ver, o eixo X
realmente não faz muita coisa. Mas você pode
girá-lo nos eixos Y e Z, dê uma olhada em M para colocar
sua luz da maneira que quiser É o tipo de luz mais comumente
usado em jogos, em geral em
cenas, porque se sua lâmpada estiver em uma
determinada direção ou sua fonte de luz estiver voltada
para um
ator ou direção específica, é mais fácil
usar a luz para esses propósitos. E temos outras
coisas aqui, que é o ângulo interno do núcleo, como você pode ver, aumenta
ou diminui o ângulo co. O que o cone interno e o
externo fazem é que cone
interno é onde a
luz está mais brilhante Portanto, a intensidade de 160
que temos aqui é aplicada
ao cone interno. Então, vamos fazer 40? E o contras externo é onde
a queda começa. Então, se tivermos 40 40, teremos um fluxo muito acentuado. Se tivermos o núcleo interno em 20, enquanto f apagado em 40, teremos uma luz suave mais suave com um f desligado após o núcleo
interno de 20 Se estivermos em zero, tudo
ficará macio. Portanto, você pode
transformá-lo essencialmente em cinco para focar em um determinado
objeto, se houver algum. Digamos que temos
esses cubos aqui. E se eu parar de
clicar na luz, agora temos uma luz
focada nos objetos. Portanto, podemos aumentar o raio porque parece
um pouco pequeno demais e podemos reduzir ainda mais o
ângulo do cone externo Mas não tão pequeno, temos um objeto que está suspeitamente
iluminado em sua cena O resto das opções
são as mesmas de antes. A fonte de comprimento
realmente não faz muita coisa nesse caso. E podemos passar
para nossa próxima luz, que é luz retangular Então, o que a luz retangular
faz é uma fonte de luz
na forma de um retângulo Então, vamos girar isso para
iluminar o chão. E vamos aumentar o
tamanho da fonte para que seja mais fácil de ver. E também, vamos mudar o rádio da
cena. É mais fácil enxergar. Ao contrário dos slides anteriores,
essa é uma forma específica. Portanto, se alterarmos a
altura ou a largura da fonte, teremos uma
forma específica para nossa fonte de luz. Então, a luz agora está focada
nessa direção. Se você mudar isso, segundo, assim e colocar o ângulo
da porta do celeiro como menor, será uma sombra
retangular muito nítida Em seguida, diminua o comprimento ou aumente-o dependendo de quão nítidas ou quadradas você deseja que
suas sombras sejam E você pode fazer isso assim para obter um
tipo muito específico de sombra. Agora, antes de prosseguirmos
para a próxima palestra, adicione alguns pontos de luz
à sua cena Essa será sua tarefa por enquanto. Se você não tiver
nenhuma fonte de luz, certifique-se de adicionar algumas. Seja criativo. Você pode adicionar
qualquer coisa. Pode ser uma lâmpada. Pode ser uma tocha.
Pode ser uma lareira. Faça o que quiser
com isso, seja criativo. Não pense demais e
vá até o ponto mais complexo. Apenas mantenha as coisas simples.
Falaremos sobre como fazer raios
complexos com
interatividade na próxima Então, por enquanto,
certifique-se de ter algum espaço onde você possa adicionar suas
luzes e movê-las. Talvez adicione um pouco de cor
à sua cena. Você pode querer fazer uma discoteca, colorida, o que quiser. Divirta-se e nos vemos
na próxima palestra.
11. UE5 FC06 01: Bem vindo de volta. Nesta palestra, falaremos
sobre projetos Então, para começar, de
onde paramos, essas lâmpadas na parede, queremos adicionar luz a elas, mas queremos adicionar luz, digamos, de cores
ou intensidades diferentes, ou talvez até formas Poderíamos simplesmente
adicionar manualmente um a cada um, como fizemos com esta
lâmpada no teto. Mas isso é muito demorado. E se você não tiver seis, mas 600 luzes
em sua cena? É aqui que entram o modelo e
a funcionalidade. Para transformar esse objeto
em uma planta, vamos clicar nesse botão aqui Isso converte esse ator em uma classe de
blueprint reutilizável.
Então, vamos clicar aqui. Isso solicitará
uma subclasse. Você pode simplesmente clicar em Selecionar. Este é um Masacor estático
e esse é um ator, será um Mahcor estático de
qualquer maneira, então está tudo bem E temos essa visão. Esta é uma janela de visualização onde
podemos ver nosso objeto, modificá-lo, etc E talvez o que seja ainda mais interessante seja esse gráfico de eventos. Também temos um roteiro de
construção, sobre
o qual falarei
na próxima palestra. Então, esse é o nosso gráfico de eventos. Antes de prosseguirmos, preciso
explicar o que é um projeto, o que é um ator e
como tudo funciona blueprints são um sistema de código
visual criado para ajudar pessoas que desejam economizar tempo ou
têm problemas de codificação fazerem seu trabalho sem
precisar codificar em C
plus ou C sharp em
algum outro mecanismo A forma como isso funciona
é que esses projetos são essencialmente uma função
incorporada aos seus atores E a pergunta: o
que são atores? Cada objeto em sua
cena é um ator, e a cena é o seu nível. Então, esse vasto vazio, que é o meu
nível, cada cubo,
vidro, luz, tudo, até mesmo
os pedaços
de grama estragados , Embora isso possa criar um
equívoco por
atores como atores humanos ou personagens
na linguagem do
código no motor, atores são tudo em
sua cena em três D, com
algumas pequenas exceções Por exemplo, neste material, a cor não é um ator. É apenas uma
adição visual ao seu ator. Seria o mesmo para decalques ou partículas que são produzidas, como todos os subprodutos de outros atores na cena que não são realmente Ou propósito,
mesmo que interativos, eles não são algo que você possa simplesmente colocar em
seu nível como estão Por exemplo, digamos que temos um personagem que
atira bolas de fogo O personagem
em si é ator. A bola de fogo que ela atirou é um ator se for
feita como um projétil Mas as imagens da chama
ao redor do objeto, que é um projétil, não
são atores Eles são apenas componentes, e esse
componente específico é a partícula. A próxima pergunta é: qual é o propósito dos
atores no nível? Atores, como eu disse antes, podem ser qualquer coisa no seu nível. Há grama, suas paredes, seus pisos, seus personagens. Eles são tudo o que você
precisa ter em seu nível. E os atores são diferentes. Alguns atores
nem estão visíveis. O ator não precisa estar
visível para ser relevante. E o que são plantas? E vamos ver qual é a
diferença entre essa lâmpada, que é apenas uma
malha estática e essa lâmpada p, que agora é uma planta A diferença é que
essa malha estática tem funcionalidade
limitada ao
que uma malha estática pode fazer. Então, como você pode ver, temos nosso painel de detalhes. Temos nossos parâmetros,
transformação, etc., algumas configurações básicas sobre como os mecanismos devem interagir
com esse objeto Pode ser muito complicado passar por todos eles repentinamente, então não vamos
abordar isso neste momento. E, honestamente, você não precisa tocar na maioria das coisas
no painel de detalhes, a menos que saiba exatamente
o que está fazendo Mas os atores, que
são plantas, podem conter qualquer tipo
de funcionalidade Por exemplo, se eu quiser
explodir essa lâmpada, eu posso. Se eu quiser fazer com que ele se
mova, voe ou faça qualquer coisa, na
verdade, posso fazer tudo
isso por meio da planta Obviamente, existem
limitações sobre o que você pode e o que não pode fazer e
como você deseja fazer. Mas a liberdade é sua para fazer o que
quiser com esse objeto. No nosso caso, queremos que esse objeto emita
luz. Isso é um abajur. E o que podemos fazer para fazer isso é o mesmo que fizemos
na aula anterior, podemos adicionar uma luz Então, vamos adicionar uma luz
direcional. Oh, minhas desculpas. Holofote. E queremos que o
holofote esteja voltado para cima, e queremos que esteja exatamente
onde a fonte de luz está Se você tiver problemas para se
mover com o
mouse e aplicar zoom, você pode rolar para baixo, reduzir ou aumentar
a velocidade do mouse, ou você pode simplesmente clicar no topo
aqui e reduzi-la aqui Vamos colocar assim. Você verá que a velocidade da boca agora é menor, o que é bastante útil quando você está trabalhando com objetos
menores. Além disso, se você se perder e não tiver certeza de
onde está seu objeto, você sempre pode clicar
nele e pressionar a tecla FK E se você pressionar FK, ele aumentará o zoom e você
poderá ver seu objeto Obviamente, essa função também
funciona no amor. Portanto, se você tiver
selecionado e se mover, pressione FK, ele voltará ao objeto selecionado, o que é bastante
útil quando você tem vários objetos na cena
ou seu nível é grande demais para lembrar onde o objeto estava ou você perdeu o objeto enquanto o
arrastava Talvez esteja embaixo
do chão e você perdido a seleção e não
consiga mais vê-la. E você pode simplesmente pressionar essa tecla ou seu objeto está correto. Então, agora vamos voltar
ao projeto. E adicionamos essa luz
à cena, certo? Correto. E você pode notar que esse holofote está sob
o componente de malha estática, que significa que o holofote
agora está conectado à própria malha
estática Se reduzirmos o objeto, etc., os filhos mais velhos
dele se moverão Então, vamos adicionar um cubo. Esse cubo é muito grande, então vamos torná-lo um pouco menor Esse cubo agora está conectado ao componente de malha
de pilha. Portanto, se você aumentar o componente de malha de
pilha, embora seja cinco, esse cubo
também aumentará de tamanho Portanto, isso é muito útil
porque, essencialmente, você está criando um
ator escalável e
uniformemente escalável
que herdará todas as suas propriedades do pai quando você
o
modificar Vamos excluir esse
cubo e compilar, salve por precaução Agora temos a lâmpada
e a própria fonte de luz, o holofote Podemos editá-lo aqui e agora mudando
os rádios, etc Então, vamos reduzir o raio. Eu não quero que seja
uma luz muito forte. Vamos colocar o valor
de 500 e compilar. Depois de compilarmos, você pode voltar ao
nível e dar uma olhada Oh, temos uma luz muito fraca. Eu gostaria que fosse
talvez um pouco mais forte. Então, aumente
a intensidade para, digamos, t. e suba.
Ainda é um pouco mais forte, mas eu não gosto da forma. Talvez seja porque
eu o perdi. Um pouco, sim. É um pouco melhor. E digamos que eu queira que seja vermelho. Agora está vermelho. Mas também poderíamos ter feito isso pelo método usual apenas
anexando-o, correto Aqui. Por que faríamos isso assim se é
muito incômodo Porque podemos adicionar
funcionalidade. Então, em vez de torná-la vermelha por padrão,
vou torná-la branca e tornarei a
intensidade de 20 K, apenas para que
corresponda à lâmpada vendida. Perdão. O
raio de atenção está bom para mim, e vou compilá-lo e
passar para o gráfico de eventos E é aqui que a coisa mais
interessante acontece. Antes de prosseguirmos,
explicarei quais são os eventos. Então, esses são os
três eventos padrão que o Unreal colocará
para você imediatamente. E os eventos são essencialmente
gatilhos que começam como um script. Então, por exemplo, esse
evento de início de jogo
começará de jogo
começará quando esse ator estiver no
nível e o nível começar. Então, se esse ator não
estiver no nível,
isso não fará nada. O ator precisa estar no
nível para que isso comece. Então isso começa, e
digamos que adicione um nó de string de impressão, podemos adicionar um nó de string de impressão aqui e fazer com que
ele diga olá olá. Portanto, print string
é uma função de bug que permite depurar testar
essencialmente as funções
se elas são acionadas ou não Nesse caso,
vamos apenas mantê-lo em hello
hello , compilar e
voltar ao nível Quando pressionamos play, recebemos olá porque o evento
começou no momento que, se eu removesse isso do
nível e pressionasse play, não
há olá
porque o nível a lâmpada em si
não está no nível, então isso não será acionado. Se eu de alguma forma gerar ou criar essa planta no meio do nível, isso
começará novamente Essencialmente, isso é
o que acontece quando esse ator é inicializado
e criado Em seguida, está a sobreposição de atores de eventos. Então, para entender a sobreposição, primeiro precisamos
entender a colisão Se olharmos para o objeto, vamos escolher essa loja. Digamos que esta loja. Esta
loja tem uma colisão. Então, a maneira mais fácil
de ver isso é clicar aqui e
clicar em colisão do jogador, que significa colisão que
afeta o personagem do jogador Também há colisão de
visibilidade. Você deve ter notado que
há uma pequena diferença
entre a colisão visível
e a colisão do jogador Isso ocorre porque essa grama
no chão não
colide com o jogador Então, se nos movimentarmos, eles não nos impedem,
não podem interagir com eles. Mas com essa história,
e com toda a honestidade, o
resto dos objetos
da cena sim Isso se deve à forma como a colisão é
configurada para esses objetos, que abordaremos
no próximo capítulo Mas, independentemente disso,
voltando ao ponto, esse objeto colidiu E, por padrão, esse
objeto não faz nada. Se você quiser adicionar
funcionalidade à loja, primeiro precisaremos converter
a loja em um modelo Então,
o que podemos fazer para fazer isso é clicar neste botão aqui, e eu vou manter
o nome como está agora. É uma boa prática fazer nossos arquivos de nomes por convenção de
nomenclatura Normalmente, os projetos são chamados de BP. E agora temos
essa nova planta, e essa planta é uma porta Se você fechar o projeto e não conseguir encontrar
seu blueprint, você sempre poderá acessar
seu navegador de conteúdo e encontrar seu blueprint Nesse caso,
não gosto que
esteja especificamente nessa pasta. Então,
o que eu vou fazer é movê-lo para
a pasta de conteúdo e ir para
cá para o meu conteúdo. E, novamente, não está
organizado se
tivermos várias plantas aqui, todas ocupando espaço, então vou criar uma pasta,
chamá-la de planta Hum, vamos fazer disso
plantas, só para ser. E vamos renomear
essa lâmpada também. E coloque-os em nossa pasta de
plantas. Portanto, é mais fácil
para nós encontrarmos no futuro. Ok, agora, essa porta não
tem colisão. Para ser mais específico,
ele tem uma colisão, mas está apenas
bloqueando o jogador Não podemos realmente abrir a porta. Se quisermos abrir a porta, idealmente, quando nos aproximarmos dela, a porta deve simplesmente abrir. Poderíamos ter adicionado alguma interatividade, como
pressionar E para abrir a porta, como na maioria dos jogos, mas também poderíamos
torná-la uma porta automática Então, como fazemos isso? Então, primeiro de tudo, vamos ao evento Craft e não
vamos jogar
nem começar a jogar. Então, vamos removê-los.
12. UE5 FC02: for, antes de
começarmos a programar aqui, Seja como for, antes de
começarmos a programar aqui, é uma boa prática testar se suas
suposições Então, vamos colocar uma
string impressa dizendo olá. Então, esperamos que, quando o ator se sobreponha à porta,
recebamos o
gatilho de saudação Então, vamos até a porta
e nada acontece. Podemos perguntar por quê? Porque há uma diferença entre
colisão e sobreposição sobreposição pressupõe que os objetos passem uns pelos outros e essencialmente, se sobreponham
em um determinado ponto Mas a colisão impede que
isso aconteça. Então, o que fazemos voltar à planta e
dar uma olhada no visor Como essa porta é um objeto sólido, não
podemos simplesmente
passar por ela para se sobrepor ao personagem do
nosso jogador A propósito, acabei de notar que
a porta está invertida. Então, vamos apenas. Isso
é embaraçoso, mas vamos pedir desculpas Olha,
gire-o na direção certa. Não sei, talvez
haja algumas portas que tenham uma à esquerda. Eu nunca vi um até agora.
Além de portas duplas. Ok, então vamos
voltar para a porta. E aqui, precisamos
adicionar uma caixa de colisão. Não usaremos esta caixa especificamente
para colisões. Isso é apenas uma caixa
para acionar um evento. Então, vamos escalá-lo
do tamanho que quisermos. Onde será acionado se o personagem
do jogador bater nele. Você pode simplesmente fazer isso assim. E eu não quero que esse evento
seja acionado depois de
entrarmos na sala. Eu quero que ele permaneça aberto. Então, vamos fazer
assim, para que eu não precise me
preocupar com o outro
lado da porta. Então, logicamente falando,
agora o propósito disso é quando nós, o personagem do jogador, nos
sobrepomos a essa
caixa invisível, a porta se abrirá Mas antes que possamos fazer isso, vamos remover isso e clicar
na caixa que criamos. Essa é a caixa que criamos. E no lado direito do painel de detalhes, você verá que temos eventos. Eles são feitos automaticamente pelo Unreal para facilitar sua
vida, para
que você possa economizar tempo e
clicar no que precisa No nosso caso, precisamos que os
componentes comecem a se sobrepor. Você pode perguntar: o que
você quer dizer com componente e esse componente é
tudo dentro do ator. Esse projeto em si
está atuando como ator. Esse componente de malha estática
aqui é o núcleo, essencialmente o
componente raiz do ator. Ele não pode ser excluído.
Ele não pode ser removido. Ele pode ser alterado, mas
o ideal é que a raiz do componente seja o
centro de tudo. E a parte da porta em si
é parte da porta, e a moldura da porta é,
na verdade, a raiz da cena. Portanto, essa parte interna
da porta é apenas um componente de malha
estática tocado. E o mesmo vale para a caixa. Poderíamos adicionar
uma quantidade infinita de poços, não realmente infinitos por
motivos computacionais, mas muitos componentes
adicionais, mas, neste caso, não
precisamos deles. E podemos ver aqui, diz: No componente
começa a se sobrepor, e no final, você pode ver que há uma caixa Este é apenas o nome da
colisão que criamos. Então, se mudarmos o nome para,
digamos, você receberá isso. Gosto mais da caixa,
fazia mais sentido. Colocamos isso agora
aqui, imprimimos uma string e testamos se isso realmente
acionará
o evento de sobreposição Então voltamos ao nível, pressionamos play, voltamos para a caixa. Oh, temos o
olá no canto superior esquerdo. Como você pode ver, isso é acionado várias vezes toda vez que entramos na sobreposição Então, vamos voltar
ao plano. Agora confirmamos que isso
realmente funciona como queremos. Poderíamos adicionar muitos limites sobre o que pode acionar
especificamente abertura
dessa porta ou
quantas vezes ela pode ser aberta, fechada ou queremos
abri-la e fechar
automaticamente depois? Podemos fazer cada
um desses cenários, mas vamos
manter as coisas simples. Só vamos abrir
a porta quando nos
aproximarmos da porta. Então, agora, como você diria que a porta deveria
se abrir aqui? Para que a porta se abra, digamos que queremos que essa porta
se abra, digamos, em palavras,
você só precisaria
girá-la em um ângulo de 90 Talvez realisticamente,
seria algo como 80, mas eu prefiro 90 graus Então, o que podemos fazer
é ir aqui destruir esse nó da porta SM A propósito, esse
nó tor agora é uma variável. Aja aqui no gráfico de eventos. E antes de irmos para a lua, deixe-me
explicar o que são variáveis. As variáveis são a
parte mais básica do processo de codificação, não apenas no Unreal, mas também no SimplusPlst As variáveis são essencialmente,
você poderia dizer, colocar soldas ou conteúdo de informações
que são usadas para codificar Por exemplo, como
na massa, digamos você seria como X mais Y ou
X multiplicado por Y, Y é igual a Z.
Essa é a mesma lógica. Este é o nosso X. Este é o nosso Y. O
outro será o nosso Z. E quando codificamos, não
precisamos sempre referenciar ou colocar todas as informações
associadas ao objeto Podemos simplesmente colocar isso
como uma alça ou etiqueta ou, da forma que você
quiser, é mais fácil
de entender. Agora é nossa porta. A porta AEM aqui, é uma referência a
esse AMDR
e essa porta asm
agora está referenciada aqui Agora, o que podemos fazer com isso antes de precisarmos entender
o que estamos tentando fazer. Queremos girar essa porta
em 90 graus no eixo Z. -90 graus para ser mais específico no
eixo Z. Como podemos fazer isso? Então, para isso, precisamos
obter um cronograma. Então, cronograma e adicione-o aqui. Agora, você pode perguntar:
qual é o cronograma? Essencialmente, as horas extras são
acionadas, como eventos, a porta. Não queremos que a porta se abra
repentinamente. Então, se, por exemplo,
pegarmos essa porta SM e, digamos, tomarmos uma nota dela e
pedirmos desculpa, rotação. E coloque a rotação
relativa definida em -90 no gatilho do evento Ele abrirá instantaneamente, mas essa não é
a aparência que queremos. Você não gostaria de
ter esse tipo de gatilho
repentino na sua porta. Então, agora, como podemos corrigir isso? Então, queremos que essa porta
se abra com o tempo. Então, digamos, 2 segundos. E a forma como fazemos
é com um cronograma. Portanto, temos esse
nó que define rotação
relativa do
componente ao qual está conectado. Neste caso, é uma porta SM. Essa porta é o alvo
dessa função. E o que essa função faz é girar o objeto em
qualquer valor que inserimos Podemos aumentá-lo para
os nós adicionais, mas isso não é relevante agora. Então, vamos dar uma olhada no
que estamos modificando aqui. Estamos modificando o eixo Z. Nós realmente não nos
importamos com X e Y. Então, o que podemos fazer é
clicar com o botão direito do mouse e dividir esse pino de estrutura. Então, o que fizemos foi
basicamente dividir esse valor vetorial de rotação
em três valores flutuantes, que isso automaticamente
converte de volta A razão pela qual estamos
fazendo isso é porque estamos
modificando apenas um
valor específico de três, então não precisamos
inserir três valores Pegamos esse
pino de execução e o colocamos em ação. A razão pela qual eu o
coloco em jogo e não jogo desde início é porque
queremos que isso aconteça
essencialmente apenas uma vez. Isso será reproduzido, terminará e permanecerá finalizado. Se o colocarmos em
prática desde o início, ele começará toda
vez que
isso for acionado, essa linha do tempo
começará do início, mas não a queremos, então vamos
colocá-la em jogo E agora temos essa localização relativa do conjunto de
portas ASM e precisamos atualizar essa localização relativa definida com um valor que
obteremos da linha do tempo Então, precisamos decidir qual valor vamos produzir
disso para essa flutuação
relativa Clicamos duas vezes na
linha do tempo e ela se
abrirá assim e
clicamos nessa faixa adicional Porque estamos modificando
apenas um valor. Nós realmente não
precisamos de uma trilha vetorial que contenha três vals. Você pode simplesmente usar um
simples controle de fluxo. Então, temos essa faixa e vamos renomeá-la como eixo Z. E aqui precisamos adicionar um horário. Portanto, a duração do tempo atualmente
é de 5 segundos. Vamos testá-lo com 5 segundos. E o valor, não
temos nenhum valor aqui. É só uma
linha reta, nada acontecendo. Então, da maneira como fazemos isso, clicamos uma vez
para adicionar um nó. Então, o começo
será zero. Não é rotação. Então, colocamos em zero, o valor também será zero. E vamos adicionar um segundo nó, que estará no marcador cinco Vamos diminuir o zoom. Isso
adicionará 5 segundos. Pode colocar a hora manual, e o valor será 90 -90 porque estamos usando
um número negativo Portanto, este é um
gráfico muito direto de zero a
-90 em 5 segundos. E vamos compilá-lo,
voltar ao gráfico de eventos. E agora temos esse
eixo Z da linha do tempo. É uma saída do valor que essa função nos
dará a cada segundo, não apenas a cada segundo,
como cada quadro que
precisaremos inserir aqui. Então, agora, esse valor Z pelo qual essa função de
rotação relativa definida é responsável está sendo
atualizado por essa linha do tempo Então, compilamos esse cofre por precaução e
voltamos ao nosso amor Agora, quando acionarmos isso, a porta se
abrirá lentamente muito, muito lentamente. E agora estamos aqui. Se não tivéssemos jogado, mas jogado desde o início apertando
o gatilho e pressionando, voltando ao teste,
teríamos essa
situação estranha em que, isso está se abrindo,
eu saio e volto e tudo bem,
está abrindo novamente Eu volto e tudo bem, como você pode ver, isso
é, na melhor das hipóteses, uma brincadeira No início, uma porta
automatizada com defeito. Então, não queremos isso. Então, fazemos essa peça. E você pode pensar, se eu quiser
fechar a porta? E é uma pergunta razoável. E se a primeira vez que eu passar
pelo I quando eu entrar, eu quiser que ele se abra, e quando eu sair, eu quiser que ele feche. Isso pode ser feito. A maneira como isso
pode ser feito é bem fácil. Assim, poderíamos adicionar variáveis
adicionais
que digam se é verdade ou não que
estamos dentro ou fora, etc., caso haja várias saídas
do prédio No nosso caso, temos
apenas uma entrada, então vamos simplificar. Se eu sair
desse ponto, e eu também precisar sair
desse ponto, correto? E vamos fazer com que
a porta permaneça aberta. Talvez só queiramos
que tenha um pouco de ar. O que podemos fazer é criar um nó aqui chamado
flip-flop.
Chinelo. O que esse nó faz é na primeira vez que esse
evento é acionado, ele será reproduzido desde o início. E na segunda vez que esse
evento for acionado, ele será revertido a partir do final. Agora, vamos testá-lo
e dar uma olhada. Como você pode ver, isso é
acionado todas as vezes. O ator se sobrepõe, e não é isso que
queremos da nossa porta Então, o que podemos fazer para corrigir isso? Há várias maneiras de
fazer isso, como sempre. O que podemos fazer é adicionar uma variável
muito simples que diz se a porta está aberta
no momento ou se
a animação parou de ser
reproduzida ou não. Então, o que podemos fazer é
criar uma variável que diz que eu posso abrir portas fechadas.
O valor do ouro Portanto, os valores do ouro são valores que
apenas dizem sim ou não Então, neste caso, podemos abrir
o valor de fechamento e Bulim? Queremos que isso aconteça
quando a animação
parar de ser reproduzida. Então, como implementamos isso? Você pode pressionar P e clicar, o que criará um nó de ramificação. Então, o que o galho
faz é colocar isso no galho. E adicione esse valor aqui. Queremos que o
valor padrão disso seja
verdadeiro porque a porta geralmente
está fechada. No início, queremos que
isso seja acionado pelo menos uma vez. E se for verdade, queremos que isso aconteça. E se estiver tocando, queremos que seja falso, para não
seja
acionado pela segunda vez. Então, o que
fazemos antes de prosseguirmos para aqui, criamos e
arrastamos isso e colocamos porta
aberta fechada aqui e
colocamos o valor de I em fs. Crie uma cópia
desta segunda
e faça o mesmo. Queremos que isso seja falso em
ambos os casos porque, dessa forma, isso não pode ser acionado
pela segunda vez, mas queremos que ele feche depois de terminar de abrir. Então, o que fazemos é fazer isso de novo. terminar, isso
definirá isso como verdadeiro e esse será o
fim dessa linha. Agora, vamos testá-lo dessa
forma. E vamos embora. R. Isso não é acionado
novamente, como você pode ver. E quando eu o
acionei novamente, ele fechou. Então, podemos acionar
isso. Vá para dentro. E quando
sairmos, nós o reativaremos, e
ele fechará novamente. Obviamente, essa não é a solução
mais ideal para isso. Você não gostaria de ter
sua porta aberta e, ok, eu vou voltar e voltar,
e agora a porta está se
fechando para o seu rosto. Existem
maneiras mais razoáveis de fazer isso. Podemos adicionar gatilhos nos
dois lados da porta,
por exemplo, você pode duplicar isso e
adicionar outro Esta se abrirá
quando entrarmos, ela será acionada e
fecharemos a porta depois de entrarmos
ou vice-versa, ou podemos revertê-la usando a combinação de
plantas ou nós Mas isso é bom o suficiente para o que estamos
tentando alcançar aqui. Essa é uma maneira muito básica e não otimizada
de abrir uma porta. E isso é que há
muitos detalhes nessa função simples que consiste em
abrir a loja. Poderíamos ter feito isso de uma
forma muito mais simples, mas haveria
menos para explicar, então tivemos que ficar com essa solução estranha e
complicada Agora, foi assim que abrimos a porta e
entramos. Como você pode ver, isso
se deve às plantas. As plantas nos permitem criar funções
da maneira que quisermos Eu poderia fazer isso apenas uma porta simples com animação
de abertura e fechamento. Poderíamos fazer isso de várias maneiras. Podemos fazer com que essa porta reconheça esse personagem e se
abra somente para esse personagem. Você pode ter, digamos, MPCs ou
personagens não jogáveis no jogo, e esses personagens
podem ou não acionar a loja, dependendo do
nível de acesso que eles têm Talvez você queira que um personagem
específico passe por essa
loja, mas outros sabem. Talvez você precise de um
item específico para fazer isso. Tudo depende de como você quer fazer isso
e da sua criatividade.
13. UE5 FC06 03: Bem, isso geralmente é
chamado apenas de expor a variável ao
editor, essencialmente Esse não é realmente o nome
correto. É editável por instância. Você pode perguntar o que o
Eposon spawn faz? Então, se tivermos um ator que gera outros
atores no nível Então, por exemplo, neste caso, vamos gerar o ator da classe e selecionar o
ator de desova como essa mesma lâmpada Agora temos essa lâmpada
que podemos gerar, certo? E se definirmos isso. Minhas desculpas. Só
precisamos colocar um valor aqui. E nesse caso, vou simplesmente pular o
processo e expor no Se eu compilar, mas essa exposição
em span não estará disponível. Digamos que eu apenas o selecione. Isso não vai aparecer aqui, mesmo se eu compilar Mas se eu colocar spawn exposto, agora de repente eu tenho
essa função Então, isso significa que eu posso
criar um ator que gera um ator específico
com os parâmetros que eu quero Como isso é útil, você pode perguntar? Digamos que você tenha um jogo
em que atira projéteis, fogo, gelo, eletricidade,
sei lá, feixe de laser A cor é a única
coisa diferente entre
seus projéteis E essa cor é definida
por ator após a desova, semelhante ao que temos aqui Quando eles surgem,
eles definem sua
cor clara, etc Mas se você quiser
definir a cor
da luz desse projétil após a
desova, especificamente, dependendo dos parâmetros, certos parâmetros que você
possa ter em seu jogo, você pode usar essa opção de exposição ao
desovar para ter essa opção disponível
ao expô-lo desovar para ter essa opção disponível
ao E, obviamente, a menos que
você precise disso, deixe isso de fora. Ok, agora vamos voltar ao que estamos tentando fazer
aqui em nosso nível. Voltando às
plantas
que temos, e se você quiser não
defini-las individualmente, mas sempre
ter uma cor aleatória Talvez você queira apenas
procurá-lo e pesquisar cores
aleatórias, e
você obterá isso. A cor linear define uma tonalidade aleatória. O que você precisa fazer é colocar
sua cor clara aqui. E isso de volta aqui e coloque isso
aqui e aperte play, e eles são aleatórios
todas as vezes Para entender o que
esse nó faz, toda vez que
esse nó é executado, ele define um valor aleatório
para essa variável, e essa variável é definida como uma cor clara no início da reprodução de um
evento. Você pode se perguntar por que o conjunto de cores não é o
mesmo para todos eles. Editamos apenas uma opção, um blueprint, e eles estão
todos no mesmo blueprint Então, por que o valor é
diferente para cada um? Isso ocorre porque esse processo é chamado para cada
ator individualmente. Então, se você jogar, jogar, vá para o Blueprint Você verá esse nó. Vamos repetir esse processo. Essa linha vermelha é uma função
que acabou de ser acionada. E se você der uma
olhada na parte superior aqui, temos laboratórios diferentes e você pode selecionar qualquer um deles. Vamos selecionar o segundo e
clicar na cor da luz, etc., tudo
está no lugar e você pode notar a diferença E você pode até
conferir os outros. Mas se você prestar atenção aqui, quando eu passo o mouse sobre
a cor da luz, os valores aqui são
diferentes para cada uma E isso porque embora sejam todos
o mesmo modelo, eles individualizam seus
atores individuais na cena Então, quando um evento é realizado, evento é realizado para
cada um separadamente. Portanto, se você tem um objeto com, digamos, esse evento específico
muito simples de dois nós e tem 100
do mesmo objeto, lembre-se de
que,
durante o início do evento,
você executa não dois nós da função de
complexidade, mas 200. Portanto, certifique-se de não
bagunçar demais sua cena. existem maneiras de otimizar isso Obviamente, existem maneiras de otimizar isso. Você pode sequenciar. Você pode combinar todos os
atores em um grupo de atores. Por exemplo, em vez de ter 100 plantas individuais de uma
luz, talvez
você possa ter
um sistema de iluminação para toda a
sua cidade e fazer todas
as luzes compartilhem
a mesma planta Então, na realidade, ele
se torna um modelo que está sendo aplicado a
todas as luzes da sua cidade Mas, novamente, se
é otimizado ou não,
mais fácil de usar ou não, se necessário,
depende do seu jogo, sua criatividade e,
mais importante, quando se trata de
otimização, da sua engenhosidade Agora temos essa função
que não é ruim. Toda vez que damos uma
olhada nesta sala, ela tem uma cor diferente, e talvez seja elegante o suficiente. Talvez isso seja tudo que você quer. Eu quero que seja um pouco mais
brilhante, então é 240. Vamos ver se isso
mudou alguma coisa. Só um pouco. Vamos mudar pouco
o raio e o
ângulo da atentana, talvez Sim, isso é mais do meu agrado. Mas eu quero que isso não
fique obsoleto. Portanto, isso permanecerá
exatamente
da mesma forma pelo resto do jogo até que eu o desligue e
comece novamente. Era um jogo, seria como entrar em uma sala,
e
a sala tem todas
essas cores diferentes, e cada vez que você entra naquela sala e
aquela sala é carregada no
jogo ou o nível se abre, você obtém cores diferentes Pode ser um pouco chato. Então, vamos fazer com que eles mudem de
cor constantemente. Se nos lembrarmos do Event tick, se você adicionar tudo o que temos
aqui no link do evento, vez de os eventos começarem a ser jogados, obteremos algo
muito diferente. Mas acredito que todos podemos
concordar que isso é demais. Isso está machucando meus olhos. Como tal, isso não é o ideal. Sim, isso muda constantemente, mas eu não
quero que mude muito. E isso acontece apenas uma vez. Precisamos de um meio termo
entre horas extras, função de
reajuste e apenas horas individuais
no início. Há muitas maneiras
de fazer isso. Você pode adicionar cronogramas, convocar eventos, etc Mas a maneira mais fácil
nesse caso específico é
adicionar uma nota de atraso. O que o atraso faz é esperar
um certo período de tempo, e esse tempo é referenciado
aqui, duração por duração E depois de
decorrido esse tempo, ele é executado. Digamos, vamos
colocar isso em 1 segundo. Agora, vamos dar uma olhada
nisso e pensar no que isso faz. Durante o início do jogo, ou
seja, quando esse ator
está na cena e jogo começa ou
quando esse ator é criado ou gerado, isso é acionado Definimos uma cor aleatória para
nossa variável de cor clara, que é definida como uma cor clara para nosso componente de
holofote E há um atraso. Aqui. E passa 1 segundo e esse atraso é executado,
mas não há nada aqui Queremos repetir esse processo. Queremos selecionar
uma nova cor aleatória e selecionar defini-la
como uma nova luz. Então, o que podemos fazer é pegar esse
pino de execução e colocá-lo aqui. Mas, de repente, é muito
desconfortável olhar para isso. O que podemos fazer aqui é
adicionar um nó reescrito. Vamos adicionar esse nó aqui e rastrear
isso até aqui. Rastreie esse nó
daqui até aqui. E organize isso um pouco melhor. Agora, temos um nó que é executado novamente aqui por
atraso após 1 segundo E vamos ver o que acontece. Vamos voltar ao
nível e apertar play. Isso é muito mais
agradável aos olhos. Agora, vamos falar um pouco
sobre a organização do plano. Se você não é o
único na equipe ou se deseja apenas
mantê-la organizada, que é uma boa prática
geral para sempre ter seu código organizado,
há coisas que você pode fazer. Um deles, como
mostrei antes, é um nó reescrito para
facilitar a visualização de onde vão os pinos de
execução Portanto, neste caso, o
pino de execução passou de atraso para um nó de matiz
aleatório de cor linear definido Mas isso realmente não
explica o que isso faz. E para uma pessoa que o examina
pela primeira
vez, precisará ler
o código para entendê-lo. E se você tiver um código
muito complicado centenas
de nós, que não é incomum, a pessoa que dá uma olhada no código
terá dificuldades Para facilitar para eles, você pode selecionar todo o
seu código e clicar no botão
C. Isso é comum. Para pessoas que estão familiarizadas com a codificação em plus
plus ou C sharp, ou em qualquer linguagem de programação, isso está fazendo exatamente a mesma coisa Isso não adiciona nenhum custo
ao projeto que está
empacotado para implantação Aqui na seção de comentários. Nós apenas nomeamos isso. Digamos que a função Light But change. Não tenho certeza do que está
acontecendo com meu teclado. E agora temos isso e
podemos mudar a cor também. Queremos torná-lo diferente ou apenas um código de cores ou funções. Eu prefiro verde, e não
queremos adicionar esses eventos início de jogo a isso porque o início do
evento
funcionará independentemente
desse código interno. E agora, como tudo isso está
dentro desta seção de comando, você pode simplesmente
movê-los todos juntos. O que é útil quando
você tem muitas
anotações no seu lavatório. Há mais uma coisa sobre isso que preciso
mencionar antes de prosseguirmos. Esta nota de atraso aqui, você deve prestar atenção. Isso tem um ícone aqui. Se você ler,
há um texto no final.
As notas latentes
só podem ser colocadas em gráficos de eventos Você pode se perguntar por que isso está aqui. Para essas notas
familiarizadas com a codificação, terei
que explicar o que é uma macro A macro e as funções são praticamente
iguais às que temos aqui, mas a diferença é que elas
acontecem instantaneamente e não podem
ser sensíveis ao tempo. Com isso, quero dizer,
digamos que temos uma função, e não quero dizer isso. Esses são nós em uma sequência. Uma função, se fôssemos
criar uma aqui,
digamos, criamos, clique neste ícone de
planos, crie uma função e chame
essa função, vamos chamá-la de teste
enquanto estamos testando. Agora temos uma
função chamada teste. Uma função pode ser
chamada como um evento ou um nó para ser mais precisa
dentro do seu blueprint E eu quero que tudo isso
aconteça dentro da função. Eu poderia simplesmente copiar isso e
arrastá-lo para o teste. Mas é muito mais fácil remover isso e clicar em todos eles
, clicar com o botão direito do mouse
e fechar para funcionar. Você notará que isso falhará. A razão pela qual isso
falhou é devido
ao nó de atraso. Nós descartamos isso Vamos fazer isso de novo. Desta vez sem demora, o nó selecionado
, contraia a função. Agora temos uma nova função e vamos copiar
o nome dela. E renomeie essa nova função
para função de mudança de luz. E então comece a jogar, isso
parece mais organizado, e também é
uma ótima maneira de fazer isso se você quiser reutilizar essa função especificamente
em vários lugares Imagine que você tem uma luz e vários
gatilhos possíveis para mudar Normalmente, o que você
precisaria fazer, você precisaria copiar e colar. Você pode realmente remover esse nó
reescrito. Você precisaria copiar e
colar essa função. Para cada um desses gatilhos. Portanto, para cada evento que
tenha a possibilidade de
alterar a cor da luz
para uma cor aleatória, precisaríamos
copiá-los e colá-los e colocá-los ao redor
do gráfico de eventos, que, muito rapidamente, tornará muito desorganizado Mas o que é mais
importante do que otimizado. Uma função otimizada é uma função lenta e uma
função lenta torna o jogo lento, e ninguém gosta de um jogo lento. Agora temos essa função de
mudança de luz e podemos enganar esse
mesmo código por vários meios. Talvez você tenha um
jogo em que, digamos, quando você toca na luz, ela muda para uma cor aleatória. Quando você talvez execute uma determinada ação, como pular, ela muda para
uma cor diferente Ou talvez você atire nele. E digamos que você tenha todas as três possibilidades mencionadas
no mesmo jogo e queira fazer as três com
o mesmo ator. Você criará três eventos
separados e
copiará e colará o mesmo espaguete
de código Não. O que você usará é
essa função de mudança de luz. Agora, você pode se perguntar, mas, ok, se eu tiver várias maneiras de
acionar essa função, gostaria de ter
mais controle sobre ela Por exemplo, no cenário
mencionado acima, se você pode fotografar como uma luz
e quiser que a
luz mude para, digamos, a cor vermelha
como se estivesse danificada, você não pode fazer isso
com esta função porque a configuramos aleatoriamente
todas as vezes. Portanto, não
haveria diferença real entre fotografar
essa, digamos, lâmpada, que aciona essa função, ou digamos que
andar por aí, ou talvez haja apenas outro
gatilho, não importa Você precisaria de mais
controle sobre isso. Você gostaria de definir essa cor de luz
dependendo de como o evento é acionado sem copiar todas
essas funções em todos os lugares. É aqui que entram as entradas e saídas das
funções Então, como você pode ver aqui, temos a função de mudança de luz e não há entradas lá O alvo é próprio
neste caso, obviamente, mas pode ser
outra coisa se for lançado elenco fundido será explicado
na próxima estrutura. Podemos clicar na função
de mudança de luz
e adicionar uma entrada. Além disso, podemos adicionar uma saída, mas, neste caso,
vamos nos concentrar na entrada. Vamos adicionar uma entrada. A entrada, nesse caso,
é uma variável. Agora, essa cor de luz é uma variável chamada cor linear
clara. Então, queremos que isso
seja exatamente o mesmo. Então, podemos simplesmente
digitar em cores lineares. E vamos chamá-lo apenas de cor. E agora, de repente, temos uma função de mudança de luz com um nó de cor que
podemos colocar na cor da luz
definida em vez de
usar a variável de cor da luz. Eu vou, por enquanto, separar isso. Podemos reutilizá-lo mais tarde. E podemos compilar. Agora, se você voltar
ao gráfico de eventos, notará, espere,
temos uma cor. Agora temos uma maneira de
ditar a cor que ela
terá por meio de uma função Então, vamos fazer isso. Digamos que, durante os eventos que
começam a ser reproduzidos, quando a função é chamada, ela fica vermelha. Salve, compile,
volte ao nível, pressione play. Ok, funciona. Mas costumávamos ter cores
aleatórias. Então isso é o que estava nos
permitindo fazer isso. Então, o que
podemos fazer é cortar isso
daqui, compilar e voltar E isso chegou aqui por enquanto.
14. Funções de BP: Agora, temos isso como
uma função separada. Então, vamos fazer a função de
colapso, chamá-la de cor aleatória E agora temos
essa cor aleatória. E para essa função de
cor aleatória, queremos ter saídas
em vez de entradas Agora temos esse nó
de retorno de saída. E quando arrastarmos isso aqui
e colorirmos essa compilação com cores claras, salve por precaução E agora temos essa
função com uma saída. Para testar, podemos fazer isso facilmente. Vamos garantir que
tudo esteja conectado. Vamos ter certeza. OK.
Vamos voltar ao nível. Sim. Funciona como deveria. Mas não havia nenhuma razão real para separá-los, você pode pensar. Eles eram uma função. Foi mais otimizado para ser uma função em vez
de duas funções. Mas é aí que entra a utilidade. O que estou tentando fazer agora, quando abrirmos a porta, todas as cores serão vermelhas. Quando a porta se fechar, todas as cores serão verdes E quando você está
dentro da sala
ou mesmo do lado de fora e a porta não está sendo
interagida, elas mudam de
cor aleatoriamente a qualquer momento, digamos, em um atraso de
cinco segundos Para que isso aconteça, vamos
reorganizar nosso código. Temos a função de mudança de luz, e essa função de mudança de luz, tudo o que ela precisa é de uma entrada de cor. Temos um evento para começar a ser jogado, e o que podemos fazer
é colocar isso aqui e adicionar um atraso de cinco
segundos aqui. Talvez nem cinco
segundos de atraso, vamos lá. Sim, vamos trabalhar
nisso mais tarde. Então, o que podemos fazer aqui
é adicionar um novo evento, e ele precisa ser
um evento personalizado. E vamos chamar
esse evento de Porta Aberta. Porta. Vamos criar
outro evento e, novamente, evento
personalizado e
chamá-lo de porta fechada. Vamos ter certeza de que está tudo bem. Aqui, temos essa função
que usa essa cor aleatória. Agora, precisamos
ter essa função
aqui? É a pergunta. Na verdade, não. Você pode
remover isso e isso. E vamos separá-los todos uns dos outros e
cantar sobre isso logicamente O jogo começa, obtemos
uma cor aleatória. Então, obtemos essa cor aleatória. Não vamos adicionar
aleatoriedade por enquanto. A porta se abre e
temos a cor verde. Está bem? Então, precisamos dessa pequena
mudança de função novamente. Mas desta vez, nós predefinimos para, digamos, porta aberta, de cor
vermelha, como um sinal de alerta de que alguém
está entrando na sala E para portas fechadas, digamos que seja apenas verde. Sim, eu concordo. E digamos que não podemos mudar a cor ou,
para ser mais específico, randomizar a cor
das luzes enquanto elas estão abrindo ou fechando Então, vamos adicionar uma variável. A porta está interagida. E adicione-o como um touro. E vamos fazer uma filial. Até o final dessa cor. Se a porta estiver sendo
interagida no momento, o valor padrão do
tom
deve ser falso Nós randomizamos nossa cor
e a alteramos para cores
aleatórias com atraso Atraso F. E vamos fazer com
que esse atraso seja de 30 segundos, tudo bem. Ou, sim, deve ficar bem. Se a porta não estiver
sendo interagida , ela não faz nada Para porta aberta e porta fechada. Quando esses eventos são acionados, queremos fazer com que essa porta
se torne verdadeira Então, o que fazemos, obtemos dois
conjuntos de interação de conjuntos. Nós os definimos como verdadeiros, para que não sejam
aleatórios no meio, e continuamos nosso processo E se verificarmos a planta
da nossa porta, teremos um cronograma de 5 segundos Portanto, para que a porta termine de
abrir ou fechar, leva 5 segundos. Então, o que podemos fazer é adicionar
um atraso de 5 segundos. Uma segunda vez ou você pode
simplesmente combiná-las porque essas duas operações
não podem acontecer
ao mesmo tempo que
configuramos no esquema
do Tor
com este plop, pois não é possível interagir com ela enquanto uma função
não tiver Agora, vamos voltar. E após 5 segundos de atraso, acionamos o set novamente. E depois de configurarmos para cair e passarem 5 segundos, queremos recuperar as cores
aleatórias. Então, vamos reutilizar isso e
arrastar isso para uma cor aleatória. E para fazer com que pareça bom, talvez até mesmo em um nódulo de
podridão vermelha para tornar as curvas um pouco mais fáceis para os olhos, só
para facilitar o tempo OK. Agora, esse trabalho será a questão principal?
A resposta é não. Por quê? Sim, as luzes
estão mudando de cor, mas não
interagiram com a porta. A razão pela qual isso aconteceu que nós realmente não
acionamos a porta. Nós o chamamos de
porta aberta, porta fechada, mas isso é apenas um nome Acabamos de chamá-lo dessa forma. Na verdade, não adicionamos
nada para acionar isso. Agora, a pergunta é: como
acionamos essa função? É aqui que, pela
simplicidade do curso, simplesmente não usaremos
interfaces e usaremos casts. E vou explicar o que
eles são em um momento. Mas antes disso,
vamos pegar isso e isso, quando temos
esse plano aqui, temos no A, jogando desde o início e no B, reverso
a partir do final Então, quando B está acontecendo, estamos fechando a porta
e A está acontecendo, estamos abrindo a porta. Queremos ter a cor vermelha na abertura e a cor verde no fechamento. Para fazer isso, precisamos adicionar um pino de
execução aqui
que nos permita fazer isso, mas ele já está adquirido Da forma como fazemos isso por sequenciamento, clique com
o botão direito do mouse na sequência
e clique nela E o que fazemos é colocá-lo aqui e colocar em primeiro lugar
nossa jogada desde o início. Queremos que isso aconteça primeiro e fazemos isso de novo, e em uma sequência reversa em
zero do final para o nosso projeto Isso está se transformando em código
espaguete, mas estamos fazendo
isso apenas com o propósito de
aprender, então está tudo bem Idealmente, você
otimizaria todo esse código, mas é bom para prototipagem
rápida Agora temos isso pronto. A questão é o que fazemos aqui. A sequência nos permite fazer certas
execuções uma por uma. Na verdade, não espera que um termine de iniciar
o outro. É mais um gatilho. Eu vou colocar esses gatilhos em
zero primeiro, 1 segundo. Obviamente, queremos abrir
a porta, então colocamos de zero a sete
jogadas desde o início. E em uma, precisamos de alguma forma
chamar essas duas funções. Precisamos chamar essa função de porta
aberta. Da maneira como podemos fazer isso,
em nosso nível particular, essa loja e essa lâmpada sempre
existirão ao
mesmo tempo. Dessa forma, eles já estão
na memória do seu PC. Então, podemos usar o casting. Deixe-me primeiro moldar a planta das duas lâmpadas
fundidas. Classe. A razão pela qual não
vamos às lâmpadas e às aulas é porque queremos usá-la em todas as lâmpadas, não
em uma específica. Então, estamos migrando para
a classe blueprint
e, obviamente, precisamos do
lampll Isso faz. Essa fundição, mesmo que você não faça nada
do outro lado, ou mesmo que você
simplesmente a deixe
assim , sem pino de execução, sempre carregará a
lâmpada na memória. Dessa forma, você precisa
ter cuidado ao usá-lo, não apenas transmitindo para a classe, mas também para
instâncias individuais do mesmo ator. Ao carregá-la na memória, toda vez que a loja
existir na cena, a lâmpada ficará na
memória e ocupará algum espaço. E mesmo que você não tenha
nenhuma lâmpada na cena, se você tiver essa porta de planta
específica, que tem um molde na lâmpada,
ela ficará na memória Então, se você clicar com o botão direito do mouse
e acessar o Mapa de Tamanhos, isso mostrará quanto espaço ocupa no seu jogo. Isso não é muito, você pode pensar. São apenas 3 megabytes. Novamente, esse é um modelo muito
simples, mas está no tamanho do disco Essencialmente, quanto espaço
ele ocupa no seu disco rígido. E se você quiser verificar quanto espaço
ocupa na sua RAM, sua memória,
clique aqui, tamanho da memória. E, como você pode ver, são necessários
11 megabytes da sua memória. Se você tem apenas
um desses objetos, não
é muito importante, mas se você tem
centenas de objetos que são lançados para
cada objeto diferente, e geralmente eles mais de 11 megabytes, de repente, sua RAM fica
cheia de arquivos e dados que nem mesmo
vai usar porque essas classes nem
sempre estão no nível Portanto, você precisa ter certeza de que, se
vai escalar para algo, algo
sempre está no mesmo nível, com qualquer ator que esteja
realmente fazendo o elenco. Por exemplo, jogar para o personagem do
jogador geralmente é sempre bom porque na maioria dos jogos, ele
está sempre carregado no nível
do personagem com o
qual você está jogando. Pode ser um problema se você tiver vários personagens e cada um
deles funcionar forma diferente e tiver
suas próprias plantas Mas no caso de
ter apenas um personagem de jogador, um mesmo personagem em todos
os níveis, você pode lançar
seu personagem com segurança. Mas, como eu disse, neste caso, essa lâmpada, mesmo que você a
remova da cena, a porta pode permanecer, mas a lâmpada ainda estará
carregada na memória. Portanto, você deve se
certificar de ter isso em mente. Ok, agora nós
o lançamos na lâmpada
e, a partir da lâmpada, queremos uma função específica. Mas você pode notar que não podemos
realmente fazer isso diretamente porque essa classe de projeto é toda planta da lâmpada Não é uma instância ou
uma instância específica. Então, em vez disso, precisaríamos contratar todos os
atores da classe. O que está fazendo exatamente a mesma coisa, mas obteremos
uma matriz em vez disso. Então, fazemos exatamente a mesma coisa, o que, novamente, é muito simples. Isso vai ser uma referência para todos eles, para
todos os atores. Isso simplesmente não é obter
a referência direta
à classe em si. Então, vamos fazer a lâmpada e agora
temos todas as lâmpadas aqui, mas agora elas são uma matriz
na forma de matriz. Então, o que é uma matriz? Matriz é um conjunto de várias
variáveis em um só lugar. Por exemplo, uma
matriz de, digamos, malhas pode conter uma quantidade
infinita de malhas, e elas são matrizes
começando de zero, por exemplo, indexando de zero,
um, dois, três, quatro, etc., até
infinito E as matrizes são muito
importantes para entender se você vai criar um jogo complexo ou
mesmo um jogo simples Agora, nesse caso,
essa matriz aqui que
estava sendo gerada por essa função está
obtendo todos os ativos, para todos os esquemas dessa classe Então, todas as referências
dessa classe no nível. Em nosso nível, temos seis lâmpadas, e isso nos dará seis
atores na matriz. O que vamos fazer adicionar para cada loop, o
que significa que, para cada
item na matriz, vamos converter
para a planta da lâmpada Agora, você pode notar
que isso tem uma cor diferente porque agora
não é uma classe específica. Esse é um
objeto específico na matriz. Então, por exemplo,
no primeiro loop, vamos obter a
parede da lâmpada no índice zero. Lâmpada de índice zero, isso
fornecerá uma nota, mas a razão pela qual
isso está nos dando essa nota é porque estamos lançando para algo
que já está sendo emitido. Mas você pode perceber que não
há outros erros. Você pode colocá-lo
diretamente desta forma
e, lembre-se de que ainda é um elenco. Mas essa é apenas uma maneira de usar o elenco
de um ator individual. Se você tiver apenas uma
lâmpada no plano de nível, vol,
basta usar o casting direto.
Não há problema. Mas se você tiver vários,
talvez queira usar um elemento de matriz e ver
se é o mesmo objeto. Por exemplo, se você
tem, digamos, uma matriz de vários atores, mas nem todos os atores são iguais. Por exemplo, temos
uma matriz que contém cinco portas e cinco lâmpadas. Se você simplesmente arrastar
isso aqui desta forma, ele pode não encontrar o ator
necessário. Mas se fizermos assim
e fizermos isso assim,
isso só será acionado se
o elenco for bem-sucedido. E se o elenco for
bem-sucedido, quero dizer, se o molde for uma lâmpada e não
a porta, isso funcionará. E se houver outra coisa
na matriz, isso falhará. Mas lembre-se de que você pode criar suas próprias variáveis
na forma de matriz. Você pode clicar na variável. Vamos selecionar uma
variável de flutuação. E aqui no canto superior direito, você pode clicar nele e
converter em uma matriz. E você pode usar depois
de compilar essa matriz, você pode adicionar quantas instâncias
dessa matriz quiser Então, queremos, digamos, uma matriz de valores, cinco, 12, 14, oito,
dois e um. E se você adicionar essa matriz à baixa e obter um novo R, por
exemplo, assim, você pode usar para
cada função p para cada função de loop para obter o
próximo valor na ordem de zero, um, dois,
três, quatro, cinco, para qualquer outra finalidade
que você precise, lembre-se de matrizes,
sim, você pode obter
uma matriz de itens, essencialmente obtendo vários
itens por algum tipo de funcione como uma informação e
use para cada loop nelas, ou você pode criar suas
próprias matrizes com valores
específicos ou referências de
atores
e usá-las. Independentemente disso, neste caso, usaremos esta nota
porque quero validar que
a matriz que estou recebendo é, na verdade, a planta de
queda da lâmpada, mesmo que seja desnecessária
neste caso, porque todos sabemos que
estamos obtendo especificamente os itens específicos da matriz e
todos eles serão laboratórios E vamos compilar
agora, o que isso faz? Quando abrimos a porta, fazemos com que todos os atores das lâmpadas, e todas as lâmpadas, uma a uma no mesmo instante, essencialmente
moldura, passem por esse loop, e esses loops chamam a função chamada
nem todas as funções, meu evento de porta aberta
na planta Então, vamos voltar para o poste da
lâmpada e apertar play. Ok, agora estamos vendo
que está tudo bem, tudo está sendo aleatório Oh, enquanto a porta está se
abrindo, ela está vermelha. Agora vamos esperar. Depois que a porta se fecha, ela começa de novo E digamos que espere 5
segundos e funciona. E quando saímos, ainda não está funcionando porque não
adicionamos nada a isso. Então, vamos ver e fazer isso de novo. Podemos simplesmente copiar isso
para economizar tempo. E podemos convocar o mesmo
evento e, no final, alterá-lo para fechar a porta. Acho que o nomeei. E se você acha que é sensível ao contexto,
agora é um tipo de problema. Quando você tiver ativado, enquanto estiver procurando
por um nome de função ou nome de evento específico para um blueprint diferente,
ele pode não aparecer Então, podemos simplesmente desativá-lo e você verá o blueprint da classe Pvolve, e vamos usar isso
e podemos fazer Além disso, você pode arrastá-lo
diretamente aqui e fechar a porta. Novamente, como você pode ver,
ele não aparecerá. Então, agora temos isso
funcionando também, e tudo está
como deveria estar. E nós temos isso. A porta está se
abrindo. Quando entramos nele. Agora, novamente, cores aleatórias. Quando saímos disso, é verde. Agora, vamos adicionar
mais uma pequena modificação à nossa porta para que possamos ter
uma porta mais funcional. Temos isso no início da sobreposição de início do
componente. E quando entramos e
saímos pela primeira
vez , esse chinelo. Tínhamos duas saídas ou se quisermos fechar a porta
depois de entrarmos na sala, precisaríamos fazer isso de
uma maneira diferente, pois o
gatilho está do lado de fora E mesmo que não fosse, a
porta se fechando em nosso rosto realmente não
faria muito sentido. Quando estamos tentando fazer
algo estranho, como, vamos fazer isso uma vez, esperar Digamos que abrimos a
porta, vamos para outro lugar
e, da próxima vez que voltarmos, a porta se feche na nossa frente. Isso realmente não faz sentido. Então, o que queremos fazer em vez disso
é ter uma porta que se abra quando nos aproximamos e feche automaticamente
quando partimos. Como fazemos isso? Usamos algo semelhante a
competent start overlap Mas, em vez disso, vamos
clicar nessa porta SM, voltar aqui e
Uncompetent end overlap Isso faz a mesma
coisa que essa função. Mas precisamos ter certeza de que o
compramos para o evento certo. Precisamos dele para a caixa. Essa é exatamente
a mesma funcionalidade. Mas agora, quando terminarmos de
sobrepor, isso será acionado. O que significa que não
precisamos mais desse galho logo no
início ou desse chinelo. Porque não é mais
uma questão se
podemos ou não fazer isso
invertendo uma sequência Agora, agora temos um problema
diferente. Quando queremos começar
essa funcionalidade, precisamos ter
agora duas ramificações. Então, copiamos isso e
isso adicionado aqui, e fazemos isso e fazemos isso. Mas vamos
testá-lo e ver como funciona
depois de editarmos nossa caixa. Agora, como
queremos que ela contenha a porta dos dois
lados, precisamos precisá-la e vamos aumentá-la
caso alguém diga: Não
vamos fazer isso muito grande e
testar como funciona Chegamos perto, ele começa a se abrir. Se você chegar
perto, tudo começa de novo. Agora, a razão para
isso acontecer é que não temos nosso anterior, ele pode ser o gatilho adequado para ele. Vamos dar uma
olhada no nosso gráfico de eventos. Então, quando ele se sobrepõe, se ele pode abrir e
fechar a porta, ele
aciona e configura isso Não, você não pode abrir e fechar. E essa linha do tempo começa e quando é acionada
novamente, Mas o que precisamos agora
é um pouco diferente. Não queremos que isso aconteça
mais dessa maneira. Se separarmos nossa abertura aqui e expandi-la, xis É aqui que seu segundo
monitor é muito útil ao trabalhar com plantas
irreais Você pode
encaixá-lo na tela. Pessoalmente, gosto de ter
tela. Para mim mesma. Vamos começar. E é meio difícil de ver, mas
estamos abrindo a porta. Ok, agora está abrindo. E nos movemos, está fechando. Mas quando entramos novamente,
ele não é acionado. Mas vai começar de novo. E agora vamos esperar um
segundo e voltar. É instantaneamente
enfiado em nosso rosto. Agora, a
razão pela qual isso aconteceu sempre
jogamos desde o início e
jogamos ao contrário desde o final, que não faz muito
sentido neste caso, porque e se a porta estiver meio aberta quando
nos aproximarmos dela? Então, em vez disso, vamos
jogar e reverter. O que vai acontecer agora é quando
tocamos ou agora está tocando E então examinamos os versos. Mas agora temos um problema
diferente. Quando eu vou embora, ele não começa a fechar imediatamente.
Isso acaba com isso. E da próxima vez que eu for
embora, ele fecha. Você pode querer
mantê-lo assim. Isso é mais do que funcional e fecha e se abre. Mas vamos ajustá-lo um pouco. Em vez de ter
essa ramificação agora, que nos diz quando podemos
abrir ou fechar a porta, vamos removê-la e colocá-la diretamente em
uma sequência como esta. Isso remove qualquer
abertura condicional da função e vamos ver o que acontece agora Pressionamos play, estamos fechados e ele abre, e quando
vamos embora, ele fecha. E nós podemos entrar. Está sem lábios entramos
e ele se abre. O único problema é que o
tornamos muito lento. Então, vamos voltar
à nossa linha do tempo e fazer com que seja de 3
segundos em vez de cinco E também precisamos alterar o valor do segundo uma vez
e torná-lo três. Então, ele gira em 3 segundos. Mas isso significa que também precisamos
editar os atrasos na porta aberta, e vamos fazer com que sejam
3 segundos também Esta é a função Inside Lamp
Bull. Então, vamos ver o que acontece agora. Começamos o jogo. Vemos as luzes mudando de cor
aleatoriamente. Nós fechamos a
porta. Está abrindo. Ao abrir, está tudo vermelho. Quando está fechando, é verde. E agora estamos no tear
com muitas luzes. Agora também podemos alterar
o material desta caixa aqui e,
digamos, adicionar esta. Com emissão reduzida. material emissivo é, como
mencionamos anteriormente, é um material brilhante O brilho do material é
multiplicado aqui, como você pode ver. Então, podemos reduzi-lo. Nós apenas dividimos esse valor. Algo que eu
recomendaria fazer
na instância material
em vez do material em si. Mas digamos que vamos
dividir por dez vezes. Vamos ver o que acontece. Sim, é menos brilhante. Portanto, há menos brilho, mas talvez um pouco demais. Então, vamos comer quatro
vezes menos e aplicar. Eu ainda quero que um pouco de
brilho esteja lá. Sim. E vamos aplicar o
mesmo material aqui também. Talvez não. Novamente, a gosto. Vou deixar isso aqui
como está, guarde isso. E agora temos uma
cena estranha em que temos isso com algumas luzes aleatórias no meio do nada
para nosso prazer As plantas são um assunto muito,
muito caro. Você pode fazer qualquer coisa
na planta. Há uma infinidade de
nós que você pode
contorcer, contorcer e adicionar
sua própria Fizemos essa
função simples de porta de várias maneiras. Demos uma olhada nas luzes, como podemos fazer isso de várias
maneiras. E a coisa mais importante que
você precisa entender é como tudo
é flexível no desenvolvimento de jogos. Você não encontrará soluções
simples
e, mesmo que, no futuro, tente encontrar informações sobre
como fazer algo específico,
por exemplo, temos
esses cubos aqui
e, quando eu
os toco, eles caem. São cubos simples com
a física ativada
e sem plantas Mas você também pode fazer
isso com plantas. A diferença quando
você precisa fazer isso são projetos e quando você
pode simplesmente habilitar a física, que será explicado
na próxima palestra, é o que diferencia um bom
desenvolvedor de um ruim Você precisa entender
quando precisa usar o quê, como e por quê. Há infinitas maneiras
de fazer a mesma coisa. E a complexidade
que você deseja fazer isso depende do que você precisa e de
qual é o seu prazo. Nesse caso, vamos dar
uma olhada em nossas lâmpadas. Sim, isso funciona, e foi
assim que eu mostrei para fazer isso. Mas isso não é o ideal. Temos muitos nós. Novamente, não os organizamos. Temos uma variável que,
em vez de chegar aqui, poderíamos ter herdado
de outro lugar. Não precisávamos realmente
usar moldes para isso. Poderíamos ter usado interfaces, que serão explicadas
na próxima palestra. E tudo isso foi
criado para criar liberdade. Você fez várias
coisas de várias maneiras, e tudo se resume ao que você quer fazer e
como você quer fazer Não se limite
com seus projetos. E quando você pesquisa informações em fóruns,
em formulários comunitários, talvez no YouTube, no Google, e encontra a coisa
específica de
que precisa, lembre-se de que talvez haja
uma maneira melhor de fazer isso. Como mostrei
nesta palestra, nesta loja e
nesta lâmpada, fizemos isso É uma coisa tão simples, mas ainda tem infinitas
maneiras de fazer isso. Nos vemos na próxima palestra,
onde vamos
realmente criar uma pequena cena
interativa, que pode ser usada para
prototipar um jogo simples, e você terá total liberdade sobre o que deseja fazer e como
deseja Mas antes disso,
teremos uma tarefa. Essa tarefa vai ser
um pouco mais difícil. E nessa tarefa, vamos usar todo o nosso conhecimento
que aprendemos até agora para criar e animar ainda mais sua cena Eu mostrei algumas coisas sobre como você pode
fazer em plantas Não foi muito, pois as plantas
são um tópico muito caro. Mas você pode aplicar
o que mostrei
na palestra até agora às cenas que você criou
anteriormente, ou pode simplesmente ser
criativo e
experimentar a funcionalidade de blueprint e criar o que quiser Não tenha medo de cometer
erros ou experimentar. A única maneira de realmente
aprender o irreal é realmente
tentar fazer
isso e ver se funciona Até mesmo os melhores desenvolvedores testarão as coisas várias vezes antes
de fazê-las funcionar. Nos vemos na próxima
palestra. E divirta-se.
15. UE5 FC07 01: Bem vindo de volta. Neste capítulo,
vamos falar sobre como fazer uma
cena do zero. Vamos tentar criar alguns elementos de jogabilidade usando todo o conhecimento
que adquirimos até agora. Além disso, abordarei mais
algumas funcionalidades
de cada aspecto do irreal Até agora,
criamos materiais. Aprendemos como
aplicá-las e instanciá-las, como configurar o
raio em nossa cena, como criar plantas e como criar interatividade entre plantas Mas fizemos tudo isso com
base no nosso modelo já
existente. E se você quiser criar
algo do zero? Então, para fazer isso,
vamos primeiro decidir o que queremos esconder dessa criação que já fizemos. Se você tiver algum ator ou
objeto em sua cena, gostaria de
transferir para a próxima. Tenha isso em mente. E no meu caso, quero levar alguns desses cubos
comigo para o próximo nível. E eu vou
usá-los como modelo, então vou clicar nele,
transformá-los em um projeto, transformá-los em um projeto, mudar o nome e
chamá-lo de Cube Eu vou salvá-lo. A razão pela qual estou fazendo isso é
porque precisarei dela
na próxima seção da palestra. Então, para criar um novo mapa, primeiro, vamos
mantê-lo organizado, criar uma pasta, chamá-la de nível. E agora vamos
criar um novo nível. Você pode criar um nível a partir
daqui e simplesmente clicar no nível, mas isso sempre ficará em branco, pois
não há nada no nível. Se você quiser ter um
modelo para um nível, clique em
Novo nível na parte superior e poderá escolher. Você quer um nível de partição de
mundo aberto? Você quer um nível de partição de
mundo aberto vazio? Você quer um nível básico ou com alguns ativos nele ou um nível básico
vazio A diferença entre
partições e níveis básicos é que os níveis partição
geralmente são destinados mundos
abertos que são muito grandes. E você gostaria de
otimizar sua jogabilidade basicamente
dividindo este
mundo em partições, essencialmente partes para
descarregar e carregar no jogo, dependendo da proximidade
ou do estado do No nosso caso,
não vamos fazer isso. Poderíamos usar apenas o básico,
mas vou selecionar o nível
vazio para mostrar como
isso é feito do zero. Vamos clicar em Criar e salvar. E agora estamos
no nível vazio. Talvez seja difícil de ver, mas não
há nada aqui
além dessa grade. E a primeira ideia, talvez seja
adicionar um pouco de luz à cena. Mas se você apenas adicionar luz, digamos,
luz reacional, isso não fará muita Precisamos adicionar o sol, esfera
do céu, tudo o que existia por padrão
no nível anterior. Faça isso, você precisa ir até a janela e o misturador de
luz ambiental. Clique nele e
você obterá isso. Vamos primeiro criar a
clarabóia, a luz atmosférica. Você
já pode editar as configurações se quiser, mas devo apenas
mantê-las como padrão por enquanto,
criar uma atmosfera, criar uma multidão volumétrica
e
criar uma névoa de altura E, de repente,
temos algo muito parecido com o que tínhamos
no nível anterior. Esses são apenas espaços reservados para o delineador, onde
temos nosso Então, vamos colocá-los
todos em uma pasta. E vamos chamar essa
pasta de clarabóia. A seguir, aprenderemos
como
criar um ambiente
para nossa cena. Há duas maneiras de
criar nosso ambiente. A primeira é usar
algumas medidas básicas para criar paredes de piso, como
no modelo anterior. Ou você pode criar uma paisagem. Para criar uma paisagem,
clique no topo aqui, no modo de
seleção e
clique em Paisagem. Você obterá essa grade
na sua janela de visualização. E no lado esquerdo, temos
nossas opções para a grade. Esse é o tamanho
da sua paisagem. Isso pode parecer pequeno, mas se você tiver em mente
que suas malhas não devem ser muito grandes em primeiro
lugar, isso é muito grande E paisagens, embora otimizadas ainda
são permitidas em
seu desempenho. Portanto, a menos que
você precise deles, não os
torne muito grandes. Eu quero isso menor. Então, vamos reduzir
esse tamanho dividindo por e dividindo
por dois novamente. Isso é mais do que suficiente para mim. Poderíamos diminuí-lo,
mas, por enquanto, deve ficar bem. E também podemos
pré-selecionar nossos materiais. Então, vamos selecionar o terreno. Vamos ver, cascalho. Eu gosto mais de cascalho. E vamos clicar em Preencher mundo. Minhas desculpas. Sem Fill world. Crie. Vamos clicar em Criar. Se você clicar em Preencher Mundo, ele preencherá o mundo inteiro com a paisagem, o que não
é o que queremos. Ótimo. E agora
temos uma paisagem. Como você pode ver, agora é mais evidente que é bem grande. Mas isso é muito direto. E eu quero adicionar algumas
montanhas e outras coisas nas laterais para que eu possa bloquear a
visão e deixá-la clara. Não é isso. Não há
extremo sul da Terra. Esta não é uma Terra plana. Então, o que podemos fazer é
usar esculturas. Então, vamos clicar nele. E nós temos um pincel.
Eu quero que seja maior. Então, vou
aumentar o tamanho do pincel e clicar
com o botão esquerdo do mouse. Talvez meu pincel fosse muito grande. Sim. Vamos aumentar a sequência de ferramentas do
pincel. E vamos esculpir essa
paisagem aleatoriamente. Tudo que eu preciso é não ter uma linha final que pareça ruim
e algo assim. Talvez um pouco mais aqui. Agora, se olharmos
a partir dessa visão, vamos torná-la maior aqui. Eu, por engano, cliquei neste
local, mas vamos consertá-lo. Eu poderia controlar para desfazer isso. Mas também posso clicar com a
tecla Shift
para reverter e, em vez disso, criar esse poço. Ou eu posso clicar
nessa ferramenta de achatar aqui
na parte superior e clicar nela Agora, do jeito que a ferramenta de achatar funciona, você clica em um
ponto e depois mover o mouse enquanto
segura o botão do mouse, ele também o achata. Então, clicaremos
aqui e nos moveremos, e como você pode ver,
tudo está sendo nivelado até este ponto Clique aqui primeiro
e mova meu mouse, ele se achatará até
a posição inicial Então, agora temos essa terra. Agora vamos adicionar colinas e topos
aleatórios, apenas alguns tipos de falsificações
que estamos fazendo Vamos adicionar um grande aqui. Talvez seja um pouco grande demais, então vamos colocar alguns amassados
no chão e cair. E agora temos uma paisagem
que você pode usar para nossos propósitos. Obviamente, isso é apenas
algo que fiz em alguns minutos sem
pensar muito ou me esforçar,
mas você pode criar o que
quiser. Há muitas ferramentas aqui disponíveis para você.
Você pode corroê-lo. Você pode usar a hidro para criar
uma simulação de erosão. Por exemplo, vamos
escolher essa pedra aqui, e você pode ver que ela está
mudando ligeiramente de forma. Isso está simulando a
erosão pela chuva. Esta é apenas a erosão do solo que se move
de cima para baixo Então, essas são apenas
muitas ferramentas que você pode usar. Você pode simplesmente usar o ruído. Você pode selecionar o tipo de
ruído que deseja, etc. Você pode usar mapas de altura se souber como
obtê-los ou usá-los. Há muitas coisas que você
pode fazer e criar. E, por enquanto,
vamos mantê-lo aqui. E o que podemos fazer também, se não quisermos ter todo esse solo
e talvez queiramos uma cor ou
montanha diferente e talvez
queiramos que o mais alto esteja esse cascalho, mas abaixo de um pouco de grama,
podemos fazer isso Para esses dois, precisamos
criar um material em camadas, que faremos em breve
16. UE5 02: Agora, vamos criar nosso material. Da maneira como
faremos isso, criaremos um material mestre para paisagem. Então, vamos até o suporte
de materiais. Criamos anteriormente, criamos um novo material
chamado M underscore MM significa material mestre, e vamos chamá-lo de paisagem. Sublinha Matt. Guarde isso. Quando salvamos algo no novo nível pela primeira vez, ele
pedirá um nome. Certifique-se de fazer isso
caso você sofra acidentes
reais e perca todo o seu progresso no nível E vamos chamá-lo,
considere que você é livre para chamá-lo que quiser. E
agora isso está salvo. Salve novamente, apenas gase
ou guarde todos os materiais. Abrimos esse slot de material. Nós realmente não nos importamos com o
substrato neste momento. Vamos deixar isso para mais tarde. Agora precisamos
criar um material. Então, do jeito que
decidi usar cascalho e grama,
teremos duas camadas Você pode ter quantas
camadas quiser. Mas lembre-se de não tornar isso muito complexo devido aos custos
de desempenho. A maneira como fazemos isso é que precisamos de combinações de
camadas ou paisagens. Misturas de camadas de paisagem. Adicionamos isso e arrastamos
isso para nossa cor base, obtemos a e adicionamos elementos iguais
às camadas que queremos
em nosso caso também. E duplicamos isso e
copiamos o pass novamente para os normais. Se o seu jogo não
tem valores normais, como tal, se tudo é
simples, por exemplo, como no Minecraft, por exemplo, você realmente não precisa tanto de
normais. E por ser um material
paisagístico, é bom não ter muito brilho na paisagem Então, vamos forçar a
redução do valor de um. Isso também pode ser modificado com camada Billions, como
todas as outras coisas, mas vamos
manter isso muito simples. E agora temos duas camadas. Digamos que cascalho
para o primeiro. Eu
provavelmente deveria tê-los nomeado antes de duplicar, só para não ter que fazer esse
processo duas vezes E vamos chamar esse
segundo de latão. Basta copiar o passe para
aqui e t por enquanto. Salvamos isso e eu já abri o material de grama
e o material de cascalho que
vou usar E o que eu realmente
preciso fazer é copiar o que está aqui para
cores básicas e normais. Esses dois materiais são
feitos por padrão por desenrolar. Então, convenientemente, eles já os separaram. Tudo na parte inferior
aqui vai para o normal junto com a
nota coordenada do texto. Então, o que
podemos fazer, podemos simplesmente copiar tudo isso Acesse nosso material paisagístico, cole tudo isso aqui. Vamos garantir que
tudo esteja correto. Então, fora do nodo larp, temos que basear as cores Então, fazemos exatamente a mesma coisa. Nós o adicionamos à mistura da camada de
grama. Ou o nó larp. E a partir
desse nó lp na parte inferior, temos o normal. Isso pode parecer um pouco
desorganizado porque esse material irreal padrão
contém muitos nós Mas vamos
mantê-los um pouco afastados. E vamos colocá-los todos um pouco
abaixo para ter um espaço livre. Feche esse material de grama agora. Sim, não nos
importamos com esse material. E vamos fazer o
mesmo com o cascalho, e fazemos exatamente a mesma coisa Nós copiamos isso. Nós
colamos isso aqui. Vamos arrastá-lo para o material. E aqui, arrastamos isso. Vamos dar uma olhada nisso. Temos que multiplicar pela cor base. E vamos ver o que tínhamos aqui. Tivemos a rugosidade modificada. E nós temos isso normal. Talvez soubesse disso porque
esse material de cascalho tem rugosidade e a grama tem uma
rugosidade padrão Não podemos usá-lo como está, então adicionaremos uma
mistura adicional de camadas desta vez para obter aspereza Vamos adicionar essa
rugosidade ao cascalho. E como a grama tem
rugosidade de um, vamos apenas adicionar
o valor de Não precisa complicar demais
isso e economizamos. Esperamos um segundo,
voltamos ao nosso mapa de demonstração e selecionamos nossa paisagem. Descemos
no painel de detalhes e
temos um material paisagístico. Clique no nosso material principal
e coloque-o aqui. Você verá que realmente
não temos nenhuma cor em nosso material
principal. Vamos para a paisagem
e vamos pintar. Atualmente, se tentarmos
pintar, não funcionará. Para fazer isso, precisamos
criar informações da camada. Clique no ícone de adição. Você pode fazer uma camada
mesclada com peso, uma camada mesclada sem peso Nós realmente não nos importamos muito com o
peso neste caso. Então, vamos fazer um mapa de demonstração. Também podemos colocá-lo na pasta de
materiais , apenas por conveniência. E fazemos isso de novo
para a grama. E, novamente, vou
colocá-lo no material. E agora eu posso selecionar um material, digamos, cascalho e tinta Você percebe que isso parece estranho. Se eu pressionar aqui e capinar, fica muito brilhante. Isso é um pouco
brilhante demais para o meu gosto. Então, vamos voltar ao modo de
seleção e clicar
na luz direcional, reduzi-la para três, conforme eu prefiro E agora temos menos luz. Guarde por um segundo. E vamos dar uma olhada em nosso valor especular
metálico e Nossa rugosidade deve ser
boa, especialmente para grama. Precisamos dar uma olhada no
peso do mapa. Portanto, temos cascalho, mas vamos primeiro pintar os
lugares em que queremos ter grama Podemos cuidar disso mais tarde. Eu quero que essas áreas abaixo tenham grama
com menor elevação. As elevações de Ira podem estar
cheias de cascalho. O. Interessante. apenas clicar com a tecla Shift
e remover esta parte. O fato de o cascalho não
parecer correto é preocupante. Vamos pré-visualizar o nó. Você pode visualizar o nó
do material
clicando neste ícone, e nós o temos em preto. O que é preocupante. Vamos dar uma olhada no material
de cascalho. OK. Temos um nó
que não está conectado. Oh, está faltando uma nota. Talvez eu tenha errado
e copiado o nó. Talvez não, eu
estraguei o nodo. Vamos ver como fica agora. Isso ainda
não parece correto. Vamos dar uma olhada novamente. Para simplificar,
vou simplesmente remover essa parte do nó. Volte para esse grupo de multidões, copie tudo isso novamente, volte para o
material. Copie o passe. Temos um OK, precisa vir disso, e B precisa vir disso. Acredito que perdi
esta nota aqui da última vez. Aplicar. Vamos dar uma olhada. Sim. Isso está mais de acordo
com o que eu queria. E agora posso clicar com a tecla Shift para apagar essa camada
ou simplesmente clicar para adicionar Não vamos
pintá-lo perfeitamente aqui. Mas, como você pode, ainda
temos esses valores aqui, broches, achatados, etc. Você também pode atribuir folhagem para gerar em uma
determinada camada, se desejar Nesse caso, não
vamos fazer isso por enquanto. Nós economizaremos. E, por enquanto, isso deve ficar bem. Por enquanto, isso deve estar bem.
17. UE5 FC07 03: Agora, esse campo aqui
parece muito árido. Isso ocorre porque
não temos folhagem. Não temos grama, não
temos arbustos,
não temos nada. Também poderíamos usar a folhagem e criar uma folhagem
ou obter uma folhagem ativa.
Nós poderíamos criá-lo. Poderíamos fazer isso sozinhos e plantá-los manualmente em
todo o lugar. Isso não é uma coisa difícil de fazer. Podemos criar apenas,
digamos, folhagem de malha estática. E vamos ver. Vamos criar uma nova pasta. Ligue para isso. Folhagem. E vamos chamá-lo de Folage Underscoe Mamãe. O ator Wolage
ressalta Bush Vamos abrir isso e ir até a
malha e selecionar um pouco de Bush. Agora, salvamos isso. E se clicar
e começar a pintar,
pintaremos manualmente esse
empurrão ao redor do nível Espere um segundo
para que ele termine o download. Compilando shaders,
seja mais preciso. E agora podemos simplesmente
colocá-los em todos os lugares. Podemos removê-los se quisermos
e apagá-los, etc. Remover é bem
diferente de apagar. E você pode adicionar parâmetros aqui. Digamos
que queremos menos densidade. Então, digamos que dez raios ou 100. E o que está aqui agora? Minhas desculpas. Eu deveria
ter escolhido a tinta. Agora temos menos folhagem. Temos
parâmetros adicionais aqui, ou é escala. Você pode não ter a média e a
máxima. Isso é para randomizar Então, digamos que
temos zero ponto cinco
e, apenas para demonstração,
digamos oito. Alguns tolos agora são muito grandes, alguns tolos são muito pequenos Podemos torná-los móveis, etc., mas, honestamente, não é
recomendável
mantê-los É melhor tê-los estáticos. E temos uma colisão.
Você realmente não quer ter uma colisão na folhagem devido a problemas óbvios de
otimização Você não quer que seu
carro se mova e fique preso em um pedaço de grama a menos que um determinado tipo de folhagem
precise colidir Você não deve usar a colisão Independentemente disso, eu não
quero usar isso dessa forma. O que vou fazer em vez disso remover
parte dos raios. Da forma como a remoção
funciona, você precisa selecionar a filmagem
e clicar em Remover, mas não a salvamos
lá Então, vamos apenas apagá-lo
manualmente para limpar a cena. Poderíamos pintar manualmente todo
o nível com isso, mas essa não é uma forma realmente
eficiente de nosso tempo. Obviamente, se você está tentando criar uma bela paisagem, você quer microgerenciar
cada detalhe O posicionamento manual
faz muito sentido. Você pode colocá-los em singles apenas clicando
neste único botão, ou você pode colocá-los no preenchimento, basta preencher toda a
área com ele. Mas eu não quero
perder tempo com isso. Então, o que vamos
fazer é, em vez disso gerar folhagem com Para isso, primeiro,
precisamos criar um ator chamado
Landscape Grass type. Eu já criei um, mas vou demonstrar novamente. Vamos para Foolage. Vá para a seção Folagem
e temos o tipo de
grama de paisagem Nós criamos isso.
Vamos chamá-lo de LG. Vamos usar Grass e T
e chamar isso de push. A razão pela qual eu chamo isso de empurrar é porque só
teremos empurrar, mas você pode ter vários elementos de
grama aqui. No nosso caso, vou apenas
adicionar Bush, então eu o
chamei de Bush. Mas você pode ter um conjunto de gramíneas
diferentes juntas, então você pode simplesmente
gerá-las com uma grama Aqui, selecionamos nosso ator Busch. E o motivo pelo qual estou
usando é
porque ele só está disponível
no conteúdo inicial Você pode criar seus próprios arbustos. Você pode adicionar algo
da Asset Store, do Fab, em qualquer lugar que quiser E vamos salvar isso. Podemos editar a
densidade da grama. Podemos usar, novamente, o mesmo conceito similar
aqui, tamanho máximo mínimo. E vamos fazer o tamanho máximo dois. A distância de chamada é importante. A que distância você
quer ver sua grama. Vou deixá-lo
por enquanto em dez K, mas você pode querer
reduzi-lo ou
aumentá-lo , dependendo da importância
desse tipo de grama para você. E você pode notar que não
há colisão aqui. A desvantagem, bem,
talvez a desvantagem, dependendo do seu jogo
de usar isso para gerar sua grama ou folhagem, você
não pode adicionar colisão Então, vamos voltar ao
nosso material principal. Eu nem sei.
Isso era cascalho Então, vamos voltar ao
nosso material principal. Clique com o botão direito e chame a saída de grama do Grass
Landscape. Você pode perceber que não
há lugar para isso. Não há
nó de saída para isso. Isso atua como um nó adicional de saída
final. E precisamos adicionar nossa
grama aqui. Pressão LTG Agora, vamos dar uma olhada em
nosso Just give a moment. Você pode notar que nada
realmente aconteceu. Isso ocorre porque não temos nada na seção de entrada. Agora, precisamos explicar
aos materiais
onde gerar as mensagens estáticas para a bucha. Anteriormente,
convertemos em tipo de grama. Não podemos simplesmente inserir essas informações
aqui porque essa é uma combinação
de combinações de camadas e não há uma maneira real gerar posicionamento
a
partir de nossos nós anteriores Para fazer isso, precisamos de um nó
de amostra, amostrador. Ou amostra da camada Paisagem da camada. E precisamos colocar isso. E aqui precisamos
digitar o nome da camada. Essa camada, nesse
caso, é grama. Você pode simplesmente copiar
pastas ou digitá-las. E seguro. Vamos ver. De repente,
temos muita grama gerada onde estava
nosso material de grama. Eu ainda acho que está
um pouco claro demais. Deixe-me reduzir um pouco mais o
brilho. E como você pode ver, eu não precisei pintar isso, e você pode argumentar
que é muito denso. Podemos reduzir a densidade da grama. Então, digamos que eu não quero muito, eu só quero dez e economizar. E agora eu tenho um pouco de grama. Eu quero que eles geralmente
sejam um pouco menores. Então, vamos dizer 02 e máximo em um. Agora temos grama que é
otimizada até certo ponto e podemos simplesmente colocá-la automaticamente
usando um material. Obviamente, podemos criar
várias camadas e cada uma delas pode ter suas próprias notas. Para produzir malhas. Então, vamos fazer outro
desta vez para cascalho. Eu quero pedras pequenas. Vamos ver se eu tenho alguma pedra como malha no conteúdo inicial. Pedra. Nós temos uma pedra, eu acredito. Vamos dar uma
olhada nisso. É uma pedra. Então, vamos passar pelo processo
novamente, desta vez mais rápido. Vamos até nossa folhagem,
crie um tipo de vestido de
paisagem de filagem Chame isso de LGTunderscore, rock. Abra isso, adicione um elemento, faça esse elemento balançar, reduza, digamos, o tamanho
0-2 para um como antes, e eu não
quero que seja denso também, mas faça 20 Guarde isso e vamos ao
nosso material paisagístico. Aqui, podemos adicionar
um segundo elemento. E podemos criar um
novo nome de parâmetro, sampler, inseri-lo Poderíamos fazer com que dois tipos diferentes de folhagem
desovassem em uma amostra de camada, mas queremos que haja sujeira na camada de
cascalho e na grama
ou, especificamente,
arbustos na camada ou, especificamente,
arbustos na Então, o que precisamos fazer
é o mesmo de antes, copiamos o cascalho, o nome do
parâmetro, colocamos em um segundo nó,
vamos até aqui, vamos para o nosso segundo
elemento, chamado cascalho Entre, salve. Vamos voltar ao nosso nível. Não há nada.
Talvez esteja se perguntando por quê. Voltamos ao nosso material. Temos cascalho, grama e paisagem, mas não temos esse segundo tipo de
paisagem selecionado, rocha
LGD selecionada
e temos Agora, você pode notar que ele
também está
produzindo pedras na grama porque esses materiais são colocados em camadas uns sobre
os outros Eles são camadas. O que significa que as informações que o material está recebendo aqui estão incorretas. Nós temos pedras, e temos pedras e grama. Você pode se perguntar por que
isso está acontecendo. Antes de tudo, vamos
reduzir a quantidade de pedras e seu
tamanho é demais. Vamos fazer com que seja talvez quatro e
o tamanho possa ser zero ponto um. Parece que eu o desfiz por engano e zero ponto f. Não
quero pedras grandes Eu quero pedras pequenas. vamos adicionar um pouco mais de pedras
aqui ou talvez demais. Sim, pequenas pedras
aqui e ali. Eles não parecem
bons. O fato serem todos da mesma
escala, eu não gosto, então vamos adicionar um gratuito
tornando-o gratuito,
isso significa que sua escala em todas as
direções é aleatória Vamos fazer isso assim,
economize, e provavelmente as pedras
parecerão mais diferentes. E eu não gosto que
eles sejam altos, então vamos introduzir essa
escala em zero d dois. Portanto, não temos pedras altas. Sim. Agora temos
seixos, etc., e vamos editar seus
clusters também, o que talvez possamos fazer aqui Não, isso dificilmente eu preciso de
quase nenhuma diferença. Vamos restaurá-lo como está. Faça um pouco mais. Eu não quero uma distância legal. Eu quero rotações aleatórias. Infelizmente, isso é mais ou menos
uma limitação de
não termos muitas variações de rocha Independentemente disso, vamos
deixar como está. E agora a questão principal é por que temos pedras na grama? Isso ocorre porque a
forma como as camadas funcionam. Quando estávamos pintando, tínhamos esses dois pontos fortes
aqui em zero ponto três, que significa que essa grama
aqui é pesada Apesar de usarmos camadas não
pesadas, essa grama aqui é
realmente pesada e agora
temos o valor de
zero ponto três na grama e zero ponto sete
no A maneira mais fácil de
corrigir isso é
remover as
informações de cascalho daqui ou da linha de ferramentas 1 clicar na grama e
pintá-la novamente. Mas mesmo que tenhamos uma grama, ainda não
é o ideal. Queremos remover as informações do
cascalho. Então, clicamos em Shift e removemos
as informações do cascalho. Agora, se removermos as informações de
cascalho, não
teremos pedras e nossa grama ficará mais verde Unreal está misturando nossos
dois materiais, o que é uma ótima
funcionalidade Mas quando você usa isso para
produzir pedras e grama, isso pode ser um obstáculo Portanto, cabe a
você decidir se vai usá-los como material para
produzir a folhagem ou usar folhagem
para pintar o tolete e
colocá-lo manualmente no nível Agora, vamos limpar a cena
um pouco de forma rápida. Vamos lá, eu não quero nenhuma
grama aqui ao lado. Vamos ter um vazamento principal vamos remover o cascalho Também removemos a
grama, ela ficará preta. Então significa preto, o que significa que
não há informações aqui. Então, se eu colocar cascalho
e grama aqui, você verá que no meio
eles se misturam Podemos usar isso para, em primeiro lugar
, remover isso. Clique com a tecla Shift para excluir
as informações da camada. Eu não quero que o cascalho esteja aqui. O que podemos fazer aqui é adicionar uma camada de cascalho. Os lados. As colinas e a
grama também ficam nas laterais, e apenas a grama no meio. O que vamos nos dar é uma
camada com folhagem de grama apenas em uma mistura de
grama e cascalho Então, pedras e folhagens
e só pedras. Você pode, novamente, usar
várias camadas, usá-las como quiser, criar o que
quiser criar. Agora, vamos salvar isso. Não vamos perder mais tempo com essa geração de paisagens. E lembre-se de que
as informações da camada para esse posicionamento da pintura na paisagem são
esses dois arquivos. Certifique-se de não excluí-los ou movê-los de onde
deveriam. Geralmente, não é uma
boa ideia tocá-los. Você realmente não precisa fazer
nada com eles, normalmente. Dessa forma, não toque
neles, a menos que
seja absolutamente necessário e você esteja ciente do
que está fazendo. Agora podemos passar a
criar em nossa cena. Então agora temos uma paisagem. Em seguida, quero
criar algo que possamos criar nossos elementos de jogo, mas não
temos malhas E com isso, quero dizer, não
temos blocos, etc., e honestamente, não quero usar várias caixas para Então, vamos
voltar à ferramenta de modelagem. E uma ferramenta de modelagem,
vamos criar nós mesmos. Vamos criar uma plataforma para
nós mesmos. Podemos começar com um cubo ou uma caixa, se você
quiser chamá-lo Vamos colocá-lo aqui e
podemos fazer com que sua altura seja 100. Minhas desculpas. Mil.
Talvez seja um pouco grande demais. Vamos fazer com que sejam 500. E vamos ver, podemos
alinhá-lo com o chão. Alinhamos os alvos diretamente
no solo. Devo
mantê-lo localmente. Não precisa ser muito
criativo aqui. Agora, temos isso ativado. Vamos colocar isso um pouco
no chão e
podemos modelar isso ainda mais para
criar nossa própria plataforma Podemos poligrupar, editar isso, podemos ampliar para ser
mais preciso, extrudar Selecione o espaço e vamos ver. O que podemos fazer aqui é empurrar
ou puxar essa cara aqui. Vamos fazer isso ainda mais. Vamos fazer dela uma grande plataforma. Nenhuma razão real
para torná-lo pequeno. E extrude-o novamente. Talvez eu tenha clicado errado em alguma coisa. Vamos clicar nesse ritmo novamente, extrudar um pouco e
clicar nele , extrudar Essa será nossa parte
da nossa plataforma. Agora vamos avançar nessa fase. Talvez eu devesse ter
insistido um pouco mais. Estou fazendo sucesso para o
caso de precisarmos. Mas, honestamente, você é livre para fazer isso da maneira
que quiser, da forma que quiser Você deve ter notado
que eu cometi um erro. Não tenho pernas para essa parte porque
não extrudei um rosto adequado Eu poderia adicionar borda adicional, etc., mas em vez disso, o que
vou fazer é clicar aqui e
extrudar E vou extrudar um pouco novamente, criar uma passagem
adicional Vou clicar na face inferior
da fase recém-criada e
extrudá-la novamente, no chão E agora eu tenho isso aqui, que eu posso facilmente
extrudar novamente. Olha, tenha em mente. A razão pela qual estou fazendo isso é apenas para
economizar tempo. Como eu não quero modelar, toda
a plataforma. Isso é muito útil
para bloquear e criar amostras
para o ambiente, que posteriormente você pode pedir seus modeladores ou
criativos criem ou, se quiser se
admirar , você
mesmo pode fazer Agora, temos isso, e as ideias disso estão
ligadas aqui
à montanha e temos isso. Provavelmente deveríamos mover
essa parte para dentro. Então, vamos fazer isso. O que podemos fazer é
selecionar todas essas faces. E basta movê-los para cá. Agora temos uma plataforma
que clica em Aceitar. E podemos ainda mais editar
grupos de poligrupos ,
criando pilares Se você quiser, como você pode ver, você simplesmente não pode mover isso. Você pode extrudar depois de selecioná-la corretamente,
ao contrário do que eu fiz Então, vamos extrudar isso, criar algum tipo de arena Essa é a ideia, pelo
menos no meu caso. É só um pouco maior. Extrude novamente para criar polígonos
adicionais ou
para ter faces mais caras Preciso empurrar até aqui Isso pode ter sido muito longo, mas saberemos em um segundo. Você pode pressioná-lo novamente. Edite isso um pouco. Pode fazer o mesmo aqui. Agora, neste caso, estou apenas
observando todo o processo. Portanto, não é o ideal. Não. Eu só vou comer isso aqui. No pilar extrude ligeiramente, é novamente uma face inferior No fundo da parede.
Está um pouco desalinhado, então está e vamos juntar todos eles. E
deve ficar bem. Agora, vamos fazer a
edição de poligrupos, extrudar a face. Selecione o pilar e
extrude-o novamente. A altura está um pouco errada. Então, vamos torná-lo um pouco mais alto. Você também pode selecionar as bordas. Para movê-los, você
deseja alterar o tamanho e pode
selecioná-los com a tecla Shift para selecionar várias
arestas ao mesmo tempo. Você deseja modificar
o tamanho do rosto. Isso é de conhecimento comum quando você tem experiência
com modelagem. E agora podemos extrudar. Novamente, está um pouco desalinhado, mas não estamos
tentando ser perfeitos aqui, então podemos simplesmente fazer isso E vou
deixar as coisas assim. Vou modificar um
pouco o
posicionamento desses vértices reduzindo a
posição deles aqui. Sim, eu não sou o melhor
arquiteto, mas tudo bem. Só que agora vamos selecionar um
material para essa plataforma. Acho que algo como uma
bola de gude deve ficar bem. Nós poderíamos. Vamos ver como fica. Não é o ideal, pois não
temos UVs adequados. Então, vamos criar um
novo material para isso. Acesse os materiais. Vamos ver como nosso material básico
se parece com isso. Sim, os UVs básicos estão bem. Você pode criar um material. Chame isso de formulário de sublinhado. Salve Los como material de plataforma. E agora podemos trabalhar em
material para essa plataforma. Salvar.
18. UE5 FC07 04: Agora, vamos fazer um
material de substrato para nossa plataforma. Você pode perguntar por quê? nunca
abordamos o assunto, e essa é uma boa oportunidade. O material de substrato é
um novo tipo de material ou você poderia dizer que a função do
material que eles introduziram é irreal,
e é uma forma de colocar materiais em é irreal,
e é uma forma de colocar camadas sem realmente usar várias fontes de material, e ele analisa e calcula as
camadas com seus alfas, com as luzes e os
reflexos juntos para nos
dar resultados de altíssima Então, primeiro de tudo, precisamos de uma placa, já que removi as entradas de
material padrão anteriores, e precisamos de uma segunda se
estivermos fazendo uma placa de duas camadas,
o que vamos E precisamos de uma camada de
substrato vertical. Colocamos assim, isso
aqui e isso aqui. Isso é o que
vamos fazer por enquanto. Agora, isso tem algumas opções
semelhantes
às originais. Então, vamos primeiro adicionar nossas cores. O albedo difuso é o mesmo da nota colorida
anterior. Então, vamos fazer com que,
por enquanto, seja azul, adicionar um diferente e
adicioná-lo ao albedo difuso E vamos torná-lo amarelo por enquanto. Vamos
mudar isso mais tarde. Vamos adicionar uma rugosidade
porque quero que esse material
superior seja muito brilhante Vamos fazer com que seja 05005. E nós o temos
como um azul brilhante. Mas não podemos realmente ver
o amarelo. Para fazer isso. Precisamos adicionar esse auxiliar de nó
específico. Há dois deles. Precisamos do segundo. E
aqui nós os deixamos aqui. E espere um momento.
Agora, de repente, esse material parece
muito diferente. Vamos salvá-lo. Você pode ver que é uma
camada de dois materiais. E se você olhar de
cima, onde a luz é refletida, você pode ver o
brilho com bastante facilidade. E se você olhar para baixo, temos uma cor mais escura Poderíamos mudar a cor
para torná-la mais clara. Digamos, azul escuro e,
digamos, roxo profundo. É muito fácil ver dessa maneira. Mas o mais importante
é que podemos adicionar valores normais. As normais servem para adicionar texturas, então podemos simplesmente adicionar uma amostra de
nó de textura e adicionar uma E acredito que compramos alguns do irreal Sartbrek para
paralelepípedos Ah, sim, temos pessoas normais. Para paralelepípedos, também temos pedras
lisas. Vamos adicionar os lisos
e esperar um segundo. E agora temos um
material em camadas com suavidade. Agora vamos transformar a cor em algo que realmente
gostaríamos de ver. Eu quero cores mais brilhantes
com alguns tons mais escuros. Vamos fazer isso em azul. Eu quero essencialmente duas camadas. Agora vamos aplicar isso. Vamos voltar ao nível
e ver como fica. Vamos dar o momento. E vamos selecionar nosso novo material
e colocá-lo aqui. Obviamente, precisamos
ajustar o ladrilho, mas agora temos um material muito
diferente É um ladrilho ajustado. Significativamente. Então, coordenada
extra Adicione TUE, o
único que tenho aqui. Vamos fazer com que seja um número muito alto. Vamos empatar dez vezes. Salvar Salvar Salvar automaticamente
também se aplica. E nós temos esse material agora. Parece que
há uma folha de vidro e você a olha
de uma direção, que é a ponta dos materiais do
substrato. Seria muito difícil obter esse efeito específico se você fizesse isso com materiais
comuns. Mas isso pode ser muito
difícil para os olhos. Então, o que podemos fazer, vamos
testá-lo com cores diferentes. Mas temos preto com um pouco, digamos, de
vermelho brilhante por baixo Vamos voltar para Bem, preto em si não é
muito colorido,
mas o fato de termos
esse parâmetro de rugosidade
aqui afeta sua aparência Então, se fôssemos
aumentar a rugosidade, digamos que para um e, de repente, aplicássemos esse material,
temos um Mas não queremos que seja tão difícil. Vamos reverter isso, e nós realmente
não queremos que seja preto. Vamos fazer algo
sofisticado e fazer com que duas cores brilhantes colidam uma
com a outra como tal E temos essa nota de estilo. Vamos aumentá-lo ainda mais. Eu quero ainda mais
pedras menores na calçada. E vamos esperar um momento. E agora temos esse material, acho
que estou bem com ele. Você pode adicionar várias
cores, várias camadas
e ser criativo. Obviamente, e ser criativo. Obviamente o substrato por si só
tem várias opções. Você também pode, por exemplo, editar a rugosidade da
segunda camada Portanto, se você tornar a segunda rugosidade
real zero, a segunda camada
ficará muito brilhante Então, de repente, há mais
brilho na segunda camada, e se invertermos isso um pouco, a camada superior não
terá nenhum brilho,
mas a camada inferior terá. Então, ele vai comer o brilho. Mas se também pudermos fazer isso, a rugosidade aqui pode
ter um valor semelhante E adicione uma doença à camada. Então, qual é a espessura da camada superior. Então, quando temos
essa doença máxima em zero significa que essencialmente a doença
principal não existe, não veremos Então, vamos provar um
ponto, aplicar e ver. Temos um material
amarelo muito brilhante. Mas se colocarmos em
algo parecido com um, é muito doentio
para ver o amarelo. Mas se colocarmos zero ponto
cinco, ainda estamos muito doentes. Zero ponto um. Talvez ainda
seja muito grande. A lógica aqui é muito doentia
para ver através do objeto. Em zero.01, você mal consegue ver e mal
vê e mal
vê E se você reduzir um pouco
mais, aposto que quero dizer dez vezes. Agora está tudo amarelo. Você pode
simplesmente colocá-lo em algo cinco e ajustar o quanto deseja que
o material seja Cro. Mas deve ser um número
muito pequeno. Infelizmente, o unreal não
tem uma documentação sobre o quão pequeno deve ser o
valor padrão, mas podemos apenas testá-lo e dar uma olhada nele enquanto
exploramos. 02 é muito grosso, e talvez devêssemos
ter um valor de sete Novamente,
também poderíamos desativá-lo e
ver a diferença, como você pode ver, um pouco mais de
amarelo, um pouco mais de azul. Infelizmente, não sei qual é a
doença padrão,
mas vou presumir que esteja em algum lugar
1-2 Provavelmente um.500 15. Sim. Algo nas laterais. Eu quero que fique mais amarelo, então vou colocá-lo em 05. Aplicar. Dê uma olhada nisso. Agora, o azul e
o amarelo não são uma boa combinação, mas vamos deixá-la
por enquanto porque quero testar e mostrar como fica com um normal
diferente aplicado. Então, a segunda camada
que temos essencialmente se parece com uma camada de
rochas por causa dessa textura
normal que temos aqui. Mas também podemos adicionar uma
textura na primeira camada. Então, se colocarmos isso aqui
e conectarmos ao normal, minhas desculpas,
precisamos de um nó de textura Nós o colocamos aqui. E vamos adicionar um nó de
textura diferente para que possamos simplesmente pesquisar por N. Não
queremos argila. Existe algum normal interessante? Vamos dar uma olhada na ferrugem. Ferrugem como textura normal. Vamos aplicá-lo. Talvez
precisemos adicionar ladrilhos. Agora temos essa coisa estranha de
ferrugem no topo. Não gosto de colocar isso em blocos, então vamos
adicionar um nó de textura Vamos identificar isso
também. Aplique-o. nodos de ferrugem normais
podem não ser os melhores, mas de repente temos essas
imperfeições Parece que um
bloco de água está congelado acima do caminho de
paralelepípedos,
mas o caminho em si E tudo isso é feito
com material simples. Se você simplesmente
remover esse material, parece uma pedra de bloco. Mas aqui. Agora, o que podemos fazer
é selecionar algo
que faça mais sentido. Com um paralelepípedo,
basalto normal. E vamos mudar
as cores também. Azul não é uma boa cor. Vamos fazer com que seja algo parecido cor
marrom marrom misturada com Vamos ver. Vamos fazer um material colorido
para colorir, aplique
isso Talvez seja um pouco brilhante demais. Sim, isso é um pouco brilhante demais. Então, vamos reduzir
a saturação e
deixá-la um pouco
mais escura, talvez um pouco Você também pode escolher essa
cor. Vamos pegar a saturação
e colocá-la abaixo. Eles são muito semelhantes às cores, o que é totalmente
adequado para o nosso propósito. Sim, isso deve ficar bem. Agora parece que o
esquema de cores não está muito distante. Poderíamos tornar as coisas um pouco mais
obscuras em ambas as contas. Podemos, o que é mais importante, reduzir o aumento da rugosidade para
torná-la menos brilhante Então, vamos chegar até aqui. E esse pode ser um
simples. Salve Ok, agora está
muito menos brilhante. Não queremos que seja
metálico nem nada. Existem
parâmetros adicionais, como, por exemplo, se você colocar a rugosidade da penugem aqui
e, digamos, a quantidade da Vamos dar uma olhada
neles e colocá-los em um e reduzir a
rugosidade Vamos fazer um
também e adicionar uma cor. Digamos vermelho. Nós obteremos uma tonalidade adicional. Mas isso é um pouco demais, então vamos reduzir a
quantidade de penugem para zero ponto cinco, talvez até zero ponto dois para adicionar um pouco de
vermelhidão ao material E agora temos um material
que é uma combinação de três cores, duas normais. Ele tem vários
parâmetros de rugosidade. E não abordamos
muitas configurações adicionais aqui. E há várias
maneiras de fazer isso. Podemos adicionar uma camada
vertical adicional e adicionar mais
uma placa de substrato e colocá-las em camadas novamente e
adicionar ainda mais normais,
ainda mais cores, ainda mais como rugosidade adicional,
UVs, etc Existem infinitas maneiras usar isso para criar materiais de boa
aparência, e o Unreal tem uma demonstração de material de
substrato que você pode baixar
gratuitamente e conferir na seção
de educação
e tutorial no fab ou no Unreal
Lunch, há exemplos Seção na qual você pode
clicar e dar uma olhada. Não acredito que o Unreal tenha amostras de
substrato
no conteúdo inicial. Sim, eles não têm,
mas você pode baixá-los
e dar uma olhada neles. De qualquer forma, por enquanto,
digamos que
terminamos nossa cena. Em seguida, queremos adicionar um
elemento de jogabilidade na cena. Então, primeiro, precisamos
garantir que nosso personagem funcione. Vamos apertar play e nossos personagens aparecem
no meio da tela Por quê? Se subirmos mais alto
e pressionarmos play, nosso personagem aparecerá de
onde está nossa câmera A razão pela qual isso acontece
é porque não
temos um determinado
indicador na cena. E esse ator é chamado
aqui, deixe-me ver. Personagem. 1 segundo. Nó inicial do jogador, este. Portanto, esse
nó inicial do jogador define onde seu
personagem começa novamente. Obviamente, você pode
sobrescrevê-lo como no jogo salvando arquivos ou
apenas alguns gatilhos Mas, geralmente, isso é
apenas um ponto de partida. E agora, independentemente de
onde nossa câmera esteja, nosso jogador
sempre aparecerá nesse ponto Certifique-se de que isso não esteja
realmente em uma posição correta. Se você colocar algo assim, você
cairá no chão. Portanto, você precisa garantir que a partida do jogador esteja
na posição correta para não se sobrepor demais a
outros objetos. E sim, temos isso, agora
podemos fazer algumas coisas de jogabilidade. Podemos nos mover pela cena porque criamos essas
rochas com nossos materiais. Eles não têm colisão, o que, para ser honesto, não
queremos em
primeiro lugar E antes de começarmos, vamos adicionar algum tipo de maneira de
escalar essa parte, mesmo que não a usemos
apenas para fins visuais. Então, vamos para nossa aba de atores
locais. Nas janelas, vá
para colocar atores. E vamos às formas básicas. Eu acredito que tínhamos uma
escada em algum lugar, sim. curvas, senhor.
E vamos usar isso. Isso é uma malha de pincel. Então, isso não é realmente uma malha. É mais como uma ferramenta de modelagem
combinada com malha estática. E você pode simplesmente aumentar
a quantidade de etapas que ele tem. Vamos aumentar a altura para 80 e o número de degraus
para, digamos, 50. Oh, talvez eu tenha exagerado. Digamos que o número de etapas
deva ser algo como 35, 32, um. Faça isso. Deve ficar bem. Talvez vamos ampliá-lo. É menos da cena. E vamos usar, vamos
ficar com isso, Lexis. E depois de
alinhá-la como quisermos, podemos criar uma malha estática
e, vejamos, mantê-la
na malha gerada E agora isso é
convertido em malha, e podemos usar nosso material, que usamos aqui, basta
clicar em Bowe, clicar nessa malha e
clicar em Usar Selecionar ativo
no navegador E agora temos a
mesma malha aplicada aqui. Como essa malha
é muito menor, o ladrilho
também é muito pequeno, mas está bom E agora, caso caiamos, como acabei de fazer, poderíamos subir, mas essa malha
não tem colisão Então, clicamos nele,
clicamos na colisão e precisamos selecionar a predefinição de
colisão para bloquear tudo, pois é E eu só queria isso. Temos algum espaço vazio lá. Podemos consertá-lo em um segundo. Mas ainda não funciona. Agora, a pergunta pode ser por que isso não funciona, o que mostrarei em um segundo Então isso é um pincel. Nós o criamos a partir do pincel
básico, certo? E se você verificar a luz e acessar a colisão do jogador, isso
não significa uma colisão A razão pela qual
criamos essa malha, mas nunca colocamos
uma colisão nela Então, o que você pode fazer é abrir a malha que
geramos e clicar
na colisão de jogadores, e não há nada, e clicar na colisão na
parte inferior superior para criar uma Então, há uma colisão esférica. Tem cápsula, tem caixa. Então, se você clicar na
caixa colisão simplificada, isso não é o ideal Então, só para demonstrar
como vai ficar, vamos
começar nossa jogada por perto, para
que não precisemos andar muito. Agora estamos nos movendo no ar. O motivo é porque
há uma colisão, tem
a forma de uma
caixa embaixo de E isso não é ideal
para nossos propósitos. Apenas uma
regra geral, lembre-se de que as únicas coisas que você pode tocar
na cena são cenas
que tenham colisão Unreal gera certas
colisões por padrão, supondo que você precise delas Mas há certos
casos em que, como esse, ele não está sendo gerado porque geralmente é
usado para prototipagem, não para o layout real da cena Agora, para fazer uma
colisão adequada para isso, o ideal é criá-la de forma personalizada em um software de modelagem
ou simplesmente contornar sua colisão sozinho
usando algumas ferramentas, ferramentas modelagem etc Mas, em vez disso, o que
vamos fazer remover nossa colisão
ineficiente C na colisão e
converta bookis colision e clicaremos em
Oto box collision,
out convexa collision, minhas desculpas E no lado direito,
selecionamos a qualidade
e, na verdade, não nos importamos
muito com essa qualidade, e clicaremos em Aplicar. Talvez você queira reduzir certas colisões até agora
, mas agora isso está deformado Se você fizer com que seja muito baixo,
isso ficará muito ruim. Como você pode ver, isso
nem é uma colisão total. Então, vamos colocar os
padrões e o pré-fornecimento. Isso não é realmente ideal. Como você pode ver, existem
vértices extras, etc. Há linhas de colisão
que não fazem sentido, mas isso é apenas para fins de
prototipagem, então podemos
deixar como está e agora podemos nos mover Agora temos essa escada,
que, para ser sincero, não
vamos realmente usar porque
pretendo abranger toda essa
área com uma Portanto, o jogador não pode simplesmente
pular para fora da camada. Muitos jogos, você deve se
lembrar, se você é um jogador proficiente, têm áreas fora dos limites com paredes
invisíveis E a razão pela qual isso é feito é os desenvolvedores não querem que você
vá aonde
não deveria ir. Por exemplo, neste caso, eu estou escalando essa montanha e se eu for além
dessa montanha, não
há nada lá,
e eu vou cair fora dos limites e, quando chegar a um
determinado ponto no mapa,
o ator será destruído Eu ficarei infinitamente preso
na animação a seguir. Obviamente, isso não é o ideal e não queremos
que isso aconteça. Então, geralmente adicionamos colisões
invisíveis, para que você não possa sair dela Novamente, isso pode ser feito
facilmente, colocando atores e
podemos simplesmente
procurá-los digitando o bloqueio Agora temos o volume de bloqueio. Então, adicionamos essa
queda ao nível, podemos remover nossos setores de jogo. Você também pode clicar
aqui e acessar os volumes e acessar o
volume de bloqueio ou simplesmente pesquisar aqui. Então, temos esse volume de
bloqueio agora, tudo o
que realmente
precisamos fazer é aumentar a escala para ser mais preciso, e vamos fazer isso. E apenas para fins de
demonstração, vou torná-la muito grande em todos os lados e colocar essa parede
invisível no meio. Então, vamos apertar play e tentar entrar
no meio da cena. Você pode ver algo familiar. Eu não sou capaz de ir
além desse ponto. Visualmente,
não faz nenhum sentido, mas há um volume bloqueado aqui que está impedindo
meu movimento. Então, o que precisamos fazer em vez disso é reduzi-lo,
torná-lo mais longo e colocá-lo de
forma que abranja A maneira mais fácil de fazer isso é usar colisão de
jogadores para ver exatamente onde o jogador não pode e não consegue
se mover E não queremos que o jogador
vá além disso. Vamos torná-los ainda maiores. E podemos mudar os cliques
com todas as direções. Podemos clicar com a tecla Shift aqui novamente. A rotação é de 90%. Agradável. Gradue e
mude novamente e
mova-o até aqui. E agora, embora isso possa parecer uma chave porque elas não
estão perfeitamente alinhadas, para ser honesto, elas
não importam
tanto quanto não as
veremos aqui Obviamente, você
gostaria de ter suas caixas de colisão precisas Mas, para prototipagem,
você não deve realmente
se preocupar com isso No que diz respeito à prototipagem,
durante o desenvolvimento do jogo, é muito importante prototipar e testar
seus Na maioria dos casos, o motivo pelo qual o jogo é lançado
e não é divertido é porque ele não foi prototipado e testado adequadamente
no estágio inicial E quando os desenvolvedores percebem que seu jogo não
é realmente divertido, eles têm uma escolha. Eles precisam continuar desenvolvendo o jogo
que sabem que
não é divertido ou tentar, de
alguma forma, torná-lo divertido. Ou eles simplesmente avançam
e o lançam como está,
ou, embora seja o mais ideal
do ponto de vista,
você sabe, da moralidade, eles precisam reiniciar todo
o projeto Então, a melhor maneira de saber se o que você está fazendo é divertido
ou não é criar um jogo. E para transformar seu
conceito central de jogabilidade, mesmo que seus modelos não
pareçam nada, o que você precisa fazer é
usar o que você tem em mãos, criar um protótipo rápido do
que você está tentando criar e transformá-lo em um jogo Então, o que estamos fazendo aqui agora temos um
ambiente aleatório com é que
temos um
ambiente aleatório com
algumas folhagens e detritos aleatórios, etc., rochas, e essa plataforma muito
aleatória, provavelmente, na opinião da maioria das pessoas, na opinião da maioria das pessoas,
muito feia, que vamos usar
como Estou tentando me certificar de
usar todas as oportunidades possíveis para explicar a
funcionalidade adicional das ferramentas disponíveis
para você na cena. Dessa forma, vamos
fazer algumas coisas diferentes. Não queremos que seja
a hora da luz. Então, o que vamos
fazer é
controlar L e torná-lo mais escuro Vou torná-lo
ainda mais escuro mais tarde. Vamos adicionar fontes de
luz aqui em cima em todas essas linhas. E essas fontes de luz
atuarão como nossas principais
fontes de luz. E isso será
principalmente um elemento visual, e a cor da luz
mudará dependendo do
que fizermos no jogo. Então, minha ideia atualmente
é muito simples. Teremos alguns objetos
físicos, como esferas, e vamos
empurrar esses
objetos físicos para uma determinada parte
da arena que se moverá E seu objetivo é
colocar uma certa quantidade de bolas na arena
e, depois de
terminar, você está livre
para entrar nesta plataforma. E esse será o
fim do nosso jogo. Teremos
alguns interativos. E vamos
ter um portal aqui onde está nossa escada E provavelmente
adicionaremos algumas paredes aqui para garantir que
você não possa realmente
sair sem
depender excessivamente do volume de bloqueio que é apenas um bloco reto Vamos adicionar alguma
estrutura, essencialmente, e vamos
adicionar algumas portas aqui, algo que
funciona como uma porta,
como algo que é um
portão ou uma cerca. Sim, a cerca é a maioria , então agora vamos discutir
o que precisamos para isso. Precisamos de uma fonte de luz. Vamos reutilizar nosso plano anterior
com algumas diferenças Vamos usar
uma cerca para adicionar
uma ilusão de que, digamos,
houve uma colisão e ela está bloqueando nosso
movimento externo Vamos usar
adereços que temos em mãos e precisaremos de objetos
físicos, que terão formas
básicas regulares, como esferas E precisaremos criar
algumas plantas para nos movermos em nossa zona, que basicamente
funcionará como um portão Você precisa marcar pontos em. E esse será o conceito
básico de jogabilidade desta demonstração. Essencialmente, este é um protótipo de jogo muito
simples estamos fazendo apenas
para ver se é um, que provavelmente é
a parte mais importante do desenvolvimento do jogo para ver se você pode criar algo divertido Enquanto eu estou lhe mostrando
como fazer tudo isso, você não é forçado a repetir
meu passo a passo. Você pode criar algo
divertido imediatamente. Estou tentando
garantir que possamos aprender o
máximo possível sobre o processo
de
desenvolvimento de jogos de forma irreal, bem, também tentando não
perder muito tempo E, para ter em mente, tudo isso é básico. Cada elemento
do irreal é muito complicado se você
cavar o suficiente, cavar fundo o suficiente Por exemplo, a forma como a luz funciona, como as sombras funcionam? Como as funções do material funcionam? Como posso criar materiais
que se movem? Imagine cada jogo que você já jogou
ou viu em sua vida. Cada coisa
relativamente simples jogos,
na lógica, nas funções, se você tentar
implementá-la em um jogo, de repente, surgem muitos pontos que você não tem ideia de
como fazer ou como funcionam O mais importante,
como desenvolvedor de jogos, é
entender como as engrenagens se
encaixam Como um objeto
interage com outro, como um material reflete a luz, como as sombras funcionam em conjunto com
a luz, como a paisagem,
as malhas, as malhas estáticas, os personagens podem
interagir uns com os Como você pode simplesmente abrir uma porta simples que seja
diferente para cada jogo? Lembre-se de
como tudo é feito. E na próxima palestra, vamos criar
nossos elementos de jogo Por enquanto, vamos terminar de
montar nossa cena.
19. UE5 05: Agora, vamos começar adicionando
algumas luzes à nossa cena. Eu já usei nossa lâmpada criada
anteriormente, aumentei a
escala, girei para baixo
e, dependendo da cena, fique à vontade para fazer o mesmo Só para encontrar uma posição relativa onde você gostaria
de ter suas luzes. Agora, você pode dar uma olhada na tela
e perceber de repente
: Ah, há muito
espaço para cobrir. Eu teria que
adicionar manualmente essa luz,
digamos, a cada cem unidades ou a cada 500 unidades para
cobrir toda a minha cena. Você pode, por todos os meios, fazer isso. Mas o problema é que
essas luzes que vamos
adicionar
à nossa cena à serão muitas por causa do tamanho
da cena que fiz, e levaria
muito tempo
para eu colocá-las todas manualmente. Em vez disso, o que
vamos fazer é criar
uma função e ter
um script de construção executado para essa função que possa colocar
esses atores em nossa cena. Então, vamos fazer isso. Antes
de tudo, vamos criar um novo ator. E vai
ser só um ator. Vamos chamá-lo de chave de luz
BP. Abra e salve por precaução. Para fins visuais, vamos adicionar algo aqui que possa atuar. Vamos adicionar uma seta para que possamos ver em que
direção está o X. Se você está se perguntando como
ficaria no nível, se adicionássemos isso aqui para tornar o syn root
padrão, compile Teremos
essa seta vermelha
que mostra para onde essa
planta está olhando, o que será útil Podemos ampliar isso, para que seja mais fácil de ver. O ator em si
não importará , pois será usado apenas para construção. Então, a razão pela qual criamos
esse ator é porque, se criarmos aqui no script de
construção,
ele será executado em cada
cópia desse projeto Mas eu só quero um
ator que tenha uma certa quantidade
de atores leves
e, depois disso, vou remover esse ator para que eu
não possa fazer isso incitando Então, o que vamos
fazer é ler Construction Script, e alguns de vocês podem já
ter tentado, mas se você for ao spa actor depois da aula,
talvez eu clique em Lamp, Blueprint e, para, digamos,
obter a transformação do ator,
anexe-a aqui e aqui Você pode estar pensando:
Ok, tudo que eu preciso fazer é isso. E se eu for ao meu
mapa de níveis e pressionar play, haverá uma segunda luz. Vou simulá-lo, para
não precisar esfriar dessa forma. Bem, você está tecnicamente
correto. É gerado Obviamente, não dissemos como desovar, mas há um problema Eu ainda coloquei apenas um ator e esse ator está
ligado a esse ator. Então, acabamos de fazer isso
com uma etapa extra. Agora, sua ideia pode ser, ok, e se usarmos o script
de construção? É disso que se trata. Você não pode copiar diretamente o ator gerado no script
de construção Isso ocorre por motivos de compensação, por motivos computacionais, porque pode facilmente quebrar o motor Se você cria um ator que cria um ator
que cria um ator
, geralmente
não é uma boa ideia. Agora, o que podemos fazer
para que isso aconteça? Não podemos usar isso e
não podemos usar isso porque
não queremos que esteja no jogo, queremos que seja antes do jogo. E o roteiro de construção acontece antes da criação do ator. Isso acontece antes de
começar o jogo ou até mesmo de fazer qualquer coisa
na jogabilidade. Para fazer isso, precisamos
criar uma função. Então, vamos criar uma função. Vamos chamá-lo de ator de spawn. De alguma forma,
eles conseguiram estragar tudo. E vamos até o script de
construção e
chamaremos a função spawn actor E vamos copiar isso e colocá-lo dentro da nossa função
spawn actor Não aqui. Fator de Espanha. Vamos
fazer assim por enquanto, compilar e
voltar ao nível,
e você pode ver, espere,
nada aconteça Isso ocorre porque essa função não
é algo que deva ser chamado pelo script de construção
em primeiro lugar Então, o que teremos que
fazer é clicar em spawn actor
e
clicar em chamar no Editor Isso significa que agora isso pode ser chamado antes do início da
reprodução do evento durante o editor. Então, vamos voltar. E temos esse ator
selecionado como gerador de luz. E agora temos um botão
chamado spawn Actor. Você clica nele,
temos um ator que aparece. Isso é
exatamente o que precisamos, e agora
você pode
mover esse ator, clicar novamente
e aparecer novamente. Agora, isso ainda não é
exatamente o que precisamos. Mas antes de tudo, vamos obter valor ou resistir à
rotação e escala. Aqui, precisamos ter certeza de que obtemos os valores corretos para
o ator de spawn Então, ator que estamos tentando criar. Para entender como isso funciona, primeiro, vamos dar uma
olhada nesse nó. Esse nó é chamado
get actor transform. Transformar significa a rotação, localização e escala
do ator. Nesse caso, o destino
desse nó em si. Então isso significa que está
recebendo esses atores. Com isso, quero dizer, esse ator de
flecha que criamos. E ele está obtendo seus valores de rotação,
localização e escala, e estamos
colocando-o neste novo nó aqui, que está criando o nó da lâmpada com os parâmetros descendentes Portanto, está basicamente copiando exatamente
os mesmos valores
do próprio ator. Mas isso nem
sempre é o que precisamos. Então, neste caso, particularmente, precisamos editar sua
rotação e localização. Podemos manter a escala
como está porque a escala padrão para
esse ator é cinco, como
configuramos anteriormente aqui, e a escala para a
lâmpada também é cinco, então não
precisamos realmente alterá-la, mas podemos fazer isso a partir da
função aqui, se quisermos. Primeiro de tudo, vamos nos
dividir. A razão pela qual
fazemos isso é porque
não podemos editar todos
esses nove valores ao mesmo tempo com facilidade. Então, nós os dividimos e agora temos parâmetros
individuais que podemos anexar uns
aos outros. Podemos simplesmente colocar a
escala como ela está, mas precisamos modificar nossa
localização e rotação. Então, o que podemos fazer para a rotação,
você pode querer. Ah, ok, vou apenas adicionar o valor que
eu quero em cima dela e talvez até mais. Mas você pode perceber
que isso não funciona com rotação. Se você fizer isso com
vetor, funcionará. Agora, o motivo é
porque a rotação geralmente não
é apenas um valor. Portanto, a rotação dos atores é em graus e não
em valores flutuantes, geralmente Então, o que precisamos fazer em vez disso, vamos colocar
isso aqui como está por enquanto e vamos dividir
ainda mais strtin e vamos dividir strtin
aqui também Então, se você der uma
olhada em nossos rotadores, aqui temos uma
rotação de -180 para a lâmpada e 179,
bem, que na verdade é
apenas um erro de flutuação, 180 para o nosso Z. Mas se movermos nosso ator
aqui e, digamos,
girá-lo aqui temos uma
rotação de -180 para a lâmpada e 179,
bem, que na verdade é
apenas um erro de flutuação,
180 para o nosso Z.
Mas se movermos nosso ator
aqui e, digamos,
girá-lo 90 graus. Agora é 90, 180 Então, o que
queremos é que seja sempre -180, mas queremos que o eixo
seja modificável Então,
o que vamos fazer manter Y como está. Não há razão real para mudar isso. E para X, podemos simplesmente
colocar o valor de -180. Quanto a Z, vamos
adicionar E o que
vamos adicionar aqui é,
vamos dar uma olhada. Se fôssemos reverter Z, isso aumentará e
precisaremos olhar para baixo. Então faça com que seja 108. Posso ter cometido um erro, mas saberemos em breve. Então, vamos dar uma olhada
nisso indo para o nosso nível. Isso é por enquanto. E clique aqui e clique em
Spawnctor Sim, eu cometi um erro. Você pode notar que esse
é um valor incorreto. São 90. O motivo é porque o
valor padrão para isso é 90. Então, eu deveria ter calculado a diferença
entre eles em vez disso, e para 180 e 0000 80. Então, para que fique exatamente do
jeito que eu quero eu precisaria
girá-lo mais Eu preciso de mais -90 graus. Então, vamos fazer -180 e
ver como funciona agora. Novamente, isso não está correto. Estamos obtendo o X correto, mas não estamos obtendo
a rotação correta aqui porque estamos adicionando
o -180 em cima de Vamos tentar -170. Compile e vamos tentar agora. Vamos remover esse
e criar o ator. Agora está como deveria. Então, o problema é que tínhamos 90 graus
positivos por
padrão nesse ator, e precisamos que a
diferença entre esse e esse vetor de amplitude seja 270. Agora, vamos voltar e tentar fazer
uso desse ator. Então, se eu quiser que todos
os atores se alinhem com este, eu preciso dos ases para
isso e coloque-o aqui. Copiar e colar. E
vamos tentar agora. Sim, é mais
ou menos o mesmo. Agora, para garantir que nossos outros
excessos também estejam corretos, vamos apenas copiá-los e
colocá-los até que fiquem um em cima do
outro e, depois disso, vamos movê-los Agora, seus
pontos de origem são os mesmos, e agora podemos movê-los
e clicar no ator Span. Agora, é apenas um setor de
abrangência e está cheio de
atores funcionais que podemos usar. Agora, ainda não é
exatamente o que precisamos. Isso ainda significa que
tecnicamente será um pouco mais fácil do que arrastar o ator
necessário
todas as vezes Ainda significa que precisamos
arrastar essa seta por
toda parte e
repetir esse processo Existe uma maneira de
tornar isso ainda mais fácil. Então, agora que podemos gerar esse
setor em qualquer lugar que quisermos, vamos colocá-lo aqui como
o ponto de origem e modificar ainda mais
nosso projeto Você deve ter notado que temos esse nó de localização de transformação. Então, se colocarmos um valor
adicional aqui, digamos que isso esteja no eixo
Y atualmente. Então, se você colocar um eixo
Y adicional, como, digamos 500 unidades e pressionar spawnctor, nós o
geraremos Digamos que queremos gerar
500 lâmpadas a cada 500. Unidades. Agora vamos dar uma
olhada em nosso projeto aqui. Temos isso aqui
que é responsável pela nossa localização Y, localização do eixo Y. E o que queremos que seja
para o primeiro ator
criado seja 500. O segundo está em 1.000, terceiro em 1.500 e
assim por diante e assim por diante Isso significa que precisamos adicionar 500 a esse valor toda vez que ele se repete, mas também precisamos adicionar algum tipo de limite a ele, porque não queremos que isso
aconteça infinitamente Então, o que podemos fazer aqui, podemos pressionar a tecla N e
clicar na planta Isso criará esse
nó chamado D N, ou
seja, fazer
uma certa quantidade de vezes e essa certa quantidade de
tempo é esse valor aqui. Vamos pegar
isso e começar bem. E esse será
nosso balcão. O que vamos fazer é fazer isso, digamos, por enquanto três vezes. E cada vez que fizermos isso, o número inteiro será obviamente zero,
um, dois, três A razão pela qual começa com zeros com o número inteiro e os
inteiros começam E precisamos ter certeza de que
editamos esse valor, certo? Então, vamos
dividir essa estrutura e obter
esse valor
multiplicado por 500 e colocá-lo aqui O que está acontecendo
agora é que,
dependendo da iteração
desse processo, ele pegará esse valor, multiplicará por 500 e
colocará esse ator
no valor desse Então, vamos voltar ao
nível e ver como ele funciona. Vamos remover essa lâmpada primeiro
e clicar em Spawn Actor. Agora, você pode perceber que isso não
está funcionando corretamente. Porque não temos
isso voltando para o. Este spa em si
não o repete. Você precisa acabar isso, apenas limita
quantas vezes isso pode acontecer. Então,
o que vamos adicionar adicionar um
nó raiz vermelho aqui para torná-lo limpo, e vamos colocá-lo de
volta aqui e vamos
movê-lo para ter alguns
símbolos de organização, que podemos usar mais
neste projeto E agora vamos voltar, compilar, e vamos remover
isso agora e clicar em Spactor que temos agora Se você der uma olhada no valor da
localização aqui, a diferença será exatamente 500 Agora, isso é
exatamente o que precisamos. Agora, só precisamos ter algum tipo de cálculo sobre quantos desses
atores precisamos. E digamos que vou
dar uma olhada e
digamos que eu queira 15 Eu posso simplesmente clicar em 15 aqui, compilá-lo e salvá-lo para o
caso de salvá-lo também geração de vários atores pode
travar seu PC, dependendo
da lógica que você inseriu e das especificações do seu PC, E acredito que coloquei em
negrito corretamente. Sim, agora temos
15 lâmpadas com uma. Há um pouco de brilho
saindo das luzes que criamos por causa
dos materiais que temos, que consertaremos mais tarde. Agora, queremos que isso se repita novamente, mas desta
vez em outras paredes, e podemos simplesmente pegar esse
ator que temos e movê-lo. E agora, desta vez, vamos
colocá-lo aqui
no lado esquerdo. Agora, quando clicarmos novamente
nesta parte inferior, teremos esse spawn
nessa linha específica Você pode estar se perguntando: Ok, por que ela surgiu
dessa maneira e não na mesma direção da
flecha na vez anterior A razão pela qual isso acontece
é porque, durante a rotação
desse ator no projeto que
criamos,
controlamos as teses É da transformação do ator. Estamos adicionando com força localização da
transformação
em um eixo diferente Na verdade, não estamos usando nenhuma direcionalidade
sobre onde ela deve aparecer Nós poderíamos fazer isso acontecer. Poderíamos obter a rotação
atual do ator, obter a rotação da seta, por exemplo, e
colocá-la como um valor. Mas tudo o que estamos tentando fazer aqui é
fazê-las em linha reta. E essa linha verde é o eixo Y, e a azul é Z, e a vermelha é X, e nossa grande
seta vermelha está no X. Então, se você quiser
aparecer no X,
tudo o que precisamos fazer é
colocá-la aqui, compilar e pressionar Agora, o posicionamento da
minha flecha está um pouco confuso. Então, vamos colocar as coisas
assim novamente. Vamos ver se eles parecem
bem. Eles estão bem. E agora o que
podemos fazer, podemos simplesmente movê-lo até lá. Agora, precisamos girar isso e garantir que você ignore
as flutuações da luz Isso se deve às configurações de clarabóia
e exposição. E agora, novamente, precisamos
que isso aconteça no eixo Y. Mas desta vez, se
fizermos assim, compilar e clicar em Spawctor,
isso será A razão pela qual isso acontece é porque temos um valor
positivo e passamos do
Y X positivo para um negativo. Minhas desculpas, de
negativo a positivo, valor maior Então, em vez disso, o que você pode
fazer é colocar um sinal de menos aqui, compilar, como spactar,
e agora temos luzes Obviamente, eles não estão posicionados
corretamente no momento. Sim, muito melhor. E agora fazemos
exatamente a mesma coisa. Novamente, nós o movemos. A razão pela qual
estamos girando isso e nos movendo
é porque estamos obtendo a rotação real
a partir da rotação do ator Dessa forma, não precisamos
girá-lo novamente todas as vezes. E agora vamos espaçar novamente
e, obviamente, isso estará errado. Precisamos que eles estejam
no eixo X agora. Então, o que vamos
fazer como antes, vamos apenas
mover isso do Xxxs e, se tentarmos de novo, tudo bem Então, ao fazer um roteiro de
construção uma vez, acredito que perdi um pouco
essas lâmpadas, então tenho que
colocá-las manualmente no chão Oh, não, eu fiz a geometria um pouco errado.
Deve ficar bem. Não estamos buscando
a perfeição aqui, estamos apenas em um E a melhor parte aqui é fazer um roteiro de
construção, apenas para atores de spa, como fizemos agora é que o ator de span si não
precisa permanecer no nível. Podemos removê-lo do nível, e temos todas essas luzes do
modelo de ator
configuradas e agora podemos ajustá-las. Então, antes de fazermos isso,
vamos selecionar todos eles. E eu gostaria de
adicioná-los todos à pasta. Luzes. E agora podemos simplesmente
entrar em qualquer projeto. Desculpe, não é uma planta, clique na planta de qualquer lâmpada, vamos direto para ela e agora podemos ajustar
o Então, vamos ajustar os valores. Poderíamos tornar esses valores editáveis e fazer isso a
partir do editor, etc., mas também podemos
fazer isso nos programas aqui Então, vamos fazer isso. Vamos ver como fica quando
fazemos isso dessa maneira, compilando. Como temos
muitos vetores, a compilação pode levar muito
tempo E vamos reduzir o alcance do cone. Eu quero que eles sejam como
holofotes e cheguem aos 30. Eu quero que sejam 30 também. Compilar. Veja como eles estão agora. Eu gostaria de girar um
pouco
esse holofote , então selecione esse holofote especificamente e Vamos ver os rostos
aqui dessa maneira. Então, quando você tem sete graus, compila com o
momento, eu não quero Acredito que temos luz
extra aqui. Remova-o. Só para verificar se eles têm alguma
luz extra aqui. Nós fazemos. E agora temos a configuração da luz talvez até um pouco mais de 60. Esses slides agora precisam de
um pouco mais de raio. Então, vamos fazer com que seja 35. E quanto à adesão,
vamos torná-la 35. núcleo interno pode ser Vamos apenas um. O sofrimento pode ser 25. Compile-o e volte. Isso não é o que eu
quero do cone. Vamos voltar para talvez 25
e 2.500 deveriam funcionar. E agora, se você jogar, existem cores diferentes, e elas devem mudar de cor
porque é assim que as
configuramos em nosso projeto
anterior Agora, vamos dar uma
olhada em nossos holofotes e mudei meus valores para
15 15 na autenticação de 2004 E agora temos
esse resultado em que temos holofotes,
essas cores E agora, o que vou tentar fazer é movê-los enquanto
movem a cena. Mas antes disso,
não gosto do fato nosso material ser dessa cor. Se você tiver
luzes em movimento, gostaria de deixar meu
material um pouco mais escuro E talvez isso seja um pouco escuro
demais em primeiro lugar. Vamos torná-lo um pouco mais claro
, mas não tão brilhante. Assim, podemos ver tudo, mas não podemos
cegar nossos olhos Eu não quero sombras
do sol, então vamos movê-las até chegarmos a uma posição em
que estejamos felizes Algo parecido com
isso? Não. Esse tipo de coisa que você simplesmente marca até conseguir
do jeito que você quer. Sim, isso é muito melhor. Agora, eu não quero porque teremos muitas
cores para as luzes, eu não quero que as
cores se choquem,
então vou torná-la
uma cor mais escura E vamos colocar a rugosidade em uma, porque não
quero que o material
brilhe muito. Vamos fazer com uma cor mais escura
para que você saiba, vamos fazer azul C. Vamos ver.
Azul escuro. O primeiro. A segunda cor
pode ser muito mais escura. Talvez você pudesse
fazer isso ainda mais sombrio. Salve e dê uma olhada. Está tudo bem. E agora aperte play. Agora temos cores que
são bem fáceis de ver, e agora eu quero
movê-las um pouco. Então, vamos criar
uma nova função para isso. E vamos fazer isso aqui
com um cronograma. Então, o que vamos fazer aqui é
criar uma linha do tempo e adicionar
um nó de sequência aqui Teremos uma sequência. Vamos fazer isso uma vez
e vamos adicionar um nó
do once. Faça uma vez. Espere, desculpas. Não precisamos fazer isso uma vez.
Só precisamos de um cronograma. Hora : Sim. Minhas desculpas Não sei por que tenho que
procurá-lo por tanto tempo. Mas vamos fazer
assim para que não atrapalhe. Teremos um cronograma. E nesta linha do tempo,
vamos jogá-la desde o início e depois
de terminar, vamos ter um
atraso de, digamos,
1 segundo e
vamos 1 segundo e
vamos jogá-la novamente Agora, vamos fazer uma peça. Então, a razão pela qual
vamos fazer isso é adicionar uma faixa e
adicionar uma trilha vetorial. E vamos ser um pouco
criativos com a linha do tempo. Então,
podemos ter agora Z, X e Y, e vamos fazer algo um
pouco diferente. Vamos criar uma
variável e vamos
randomizar esses
valores na linha do tempo
20. UE5 FC07 06: Agora, se dermos uma olhada nessa
linha do tempo que acabamos de criar, temos alguns vetores que podemos colocar aqui
e
podemos transferir
esses vetores para a rotação de
nossos holofotes de luz para nos movermos
ao redor das luzes Mas, como esse é apenas
um conjunto de valores que você
insere eles seriam sempre os
mesmos. Então, toda vez que o
cronograma terminava. Jogaríamos desde o início ou de onde parou da última vez, e tudo recomeçaria. Isso não é o que eu
quero para esse nível. Quero que as luzes se
movam um pouco em determinadas direções
aleatoriamente e voltem Então, vamos mudar
a forma como usamos nossa linha do tempo. Abriremos nossa linha do tempo e removeremos essa
trilha que acabamos de criar para vetores verdes e
adicionaremos uma faixa
flutuante E essa pista flutuante ficará entre, digamos que, por enquanto,
vamos mantê-la como está Vamos chamá-lo de Alpha. Vamos compilá-lo, voltar ao gráfico de eventos E agora temos um valor flutuante que não leva a lugar nenhum no momento Nós vamos fazer isso. Vamos
colocá-lo em Vamos fazer isso. As luzes giram por 8 segundos
e, em 8 segundos, o valor passará dos cliques de mudança de
unidade O valor passará de zero, 28. Oito segundos. Marca de oito segundos, vamos para oito. E vamos
garantir que a configuração esteja correta. Sim, temos a configuração
correta. Então, clicamos com a tecla Shift
no ponto-chave em
zero no valor de tempo zero para
em 8 segundos no valor um Então, agora esse nó alfa aqui nos permite
colocar o valor 0-1, e o valor será
0-1 em 8 segundos Bem, vamos remover essas
linhas para mantê-las organizadas. E vamos adicionar
um nó vetorial arp. Então, vetor de arp. E vamos colocar
nosso Alpha aqui. Agora, para explicar o que o arp faz, função
arp essencialmente
vai do valor A para o valor B gradualmente,
dependendo do valor alfa Alfa geralmente é um valor 0-1. E em zero, é A, em
um, é B.
E isso é útil quando se
usa essa linha do tempo para alterar gradualmente a localização ou rotação ou qualquer coisa na verdade Você quer fazer isso ao longo do tempo
sem usar eventi. No final das contas, em primeiro lugar, não
será tão
fácil quanto usar o LAP E em segundo lugar, é
mais desempenho. Então, por enquanto, vamos testá-lo, vamos
ter um valor. Jogaremos desde o início e imprimiremos uma string com esse valor. Oh, não, não podemos prever. Temos muitas
luzes na cena. Então, em vez disso, o que
vamos fazer é mover as luzes. Agora, precisamos obter rotação, mas por meu erro,
criei um vetor larp. Em vez disso, vamos consertar esse
rotador de arpa, pois vamos
trabalhar com E vamos obter a
rotação do holofote. Não se desculpe, minhas desculpas. Defina a rotação. Definir rotação relativa, creio
eu, é a correta. A diferença entre
uma rotação relativa
e uma rotação mundial é a rotação em relação
à sua mãe
seria a rotação do holofote
em relação à malha estática Mas a rotação mundial seria uma rotação no próprio mundo. Pode ser um pouco complicado de
entender imediatamente, mas é exatamente o que é. Você precisa testar as diferenças
ao usar o irreal, então vamos colocar isso aqui Então, o que isso fará,
obteremos um valor entre zero e B e o Alpha fará
isso por nós, girando lentamente Agora, por enquanto, vamos
colocar valores fixos. O valor dos holofotes
atualmente é 90 Y, e o resto deles é zero, zero Digamos que queremos que
isso vá de 90 a 30. Vamos compilá-lo, salvá-lo, voltar ao nível
e pressionar play Nada está acontecendo. Agora,
a pergunta interessante é que
nada está acontecendo porque não
estamos mudando o valor ou é interessante. Vamos parar. O problema é que os holofotes não
são móveis no momento. Então, vamos voltar,
clicar e mover. Agora, isso é mais pesado
computacionalmente, mas para o que
estamos tentando fazer Agora temos holofotes
que se movem. Como eles desapareceram porque não têm raio suficiente, podemos aumentar esse
raio com bastante facilidade Então, vamos para a janela de exibição. E atualmente temos 2000. Vamos fazer 8.000 por enquanto,
descansar, compilar e voltar Vamos ver como funciona agora. E vamos ver como as luzes
estão configuradas atualmente. Então, estamos recebendo
essa luz estranha. Novamente, é principalmente por causa
da forma como ele é girado. Agora vamos dar uma olhada em nossas luzes e ver por que esses artefatos estranhos
começam a Não temos uma sombra adequada. Então, quando giramos isso,
a luz em si, está bem, mas na verdade
estamos girando apenas o holofote da planta Na verdade, não
giramos a lâmpada. Então, quando fazemos isso, obtemos um corte e a
razão para esse corte é
porque a luz está colidindo com a malha e está nos dando esse corte estranho Para evitar isso, podemos modificar os canais de
luz, etc., para não colidir com
a luz da malha, ignorá-la nos canais de luz e talvez possamos até criar uma nova malha que
não nos cause esse problema Mas a maneira mais fácil de fazer
correções é usar o holofote, movê-lo um pouco para fora da
malha, salvar e pressionar E agora, teremos
esse tipo de alcance. Agora, está cobrindo totalmente toda
a área, que é exatamente o que eu queria. Mas não queremos que isso aconteça todas as vezes
exatamente da mesma maneira. O que vamos fazer agora, primeiro de tudo, vou
organizar isso um pouco. Eu não gostei de como está
confuso. E nós vamos ter esse lenode e
vamos mover
tudo isso para baixo. Destaque aqui. Agora, o valor que obtemos do
que inserimos com força é a localização original ou
rotação da luz, que é 90, e
o reduzimos para 30 para
movê-la pela Mas se quisermos
fornecer uma faixa mais ampla, precisamos também
alterar outro valor. Então, se você colocar
assim e aumentar a rotação no eixo Z, também
podemos dar movimento para a esquerda
e para a direita. Então, vamos ver agora, a rotação que
gostaríamos de dar está entre 90 e -90 Portanto, temos uma faixa de rotação. Então, o que podemos fazer, podemos
dar uma rotação Z menos,
por exemplo, e uma rotação P 90 Novamente, isso não é definitivo. Só estou fazendo isso
para uma demonstração. E se pressionarmos play, agora
temos luzes giratórias
21. UE5 FC07 07: Temos nossa luz
aqui e queremos
substituir todas as nossas referências
a isso por isso. Então, o que podemos fazer é acessar nossas lâmpadas,
selecionar todas, clicar com o botão direito do mouse e substituir os atores selecionados por BPight Podemos copiar propriedades
ou ignorá-las, não
vamos copiar propriedades, então vamos
clicar aqui e substituí-las. Vamos esperar um segundo e agora substituímos
todos eles. Eles estão todos ampliados
com muita coisa. Então, vamos reduzi-los. Vamos fazer uma escala E agora todos eles também
estão bem dimensionados Eu também gostaria de fazê-los um pouco, sim, vamos
largar um pouco e mudar. Sem rotação, reinicie a rotação. Além disso, vamos girar 90
graus -90 graus. E agora substituímos todas as nossas
luzes e podemos testar nossa lógica de
cubo novamente. Vamos colocar desta forma
e selecionar novamente nossas luzes. E podemos simplesmente clicar em Alvo
e direcionar esse cubo. Pressione play. Nada acontece quando removemos Even Tick disso. Vamos adicioná-lo por um segundo. Descanse, compile,
salve, salve também. Agora, todas as luzes em nossa
cena seguem esse cubo. O que é muito bom. Agora, vamos deixar esse evento de
anotações em paz por Esta é a nossa função
de seguir o alvo. Vamos adicioná-los todos
em um único comentário. Siga as metas. Vamos manter
isso assim por enquanto. E vamos voltar ao nosso projeto de lâmpada e começar a
copiar algumas funcionalidades Vamos remover isso, pois não
precisamos dele. Precisaremos disso para luzes
aleatórias como tal. Vamos usar isso. Não desejo
usar array para isso,
pois, em vez disso, usarei valores
flutuantes e inteiros aleatórios valores
flutuantes Então, vou copiar
isso e colocá-lo aqui. Se eu compilar,
obterei alguns erros,
criarei a variável, criarei a
variável novamente, compilarei Agora está
funcionando como deveria. E agora temos um holofote, então isso só ganha valor com nossos holofotes aqui, pois
eles compartilham o nome E vamos testar isso
e ver como funciona. Desde o início do
evento, não
há valor
aqui no momento, então vamos adicionar algo
em breve, vamos apertar play. Nada está acontecendo. Na verdade, não. As luzes estão apenas olhando para um local
estranho Então, vamos flexionar isso. Então, deveria
ser -90, vamos ver. Nossas luzes são interessantes. Oh, se você não o tiver
preso à placa inicial de Evan. Minhas desculpas. Essa
não é a correta. Eu continuo misturando a
planta da lâmpada com uma nova. Vamos embora. Ainda não está
funcionando como deveria. Então, vamos dar uma olhada nisso. Cronograma de Fui jogar. E na linha do tempo, estamos fazendo algo errado ir direto para esse valor, deveríamos
definir a rotação relativa Depois disso, indo para
esse valor, vamos jogar. Ok, agora eles estão
olhando para baixo. Ainda não temos cores aleatórias
ou qualquer outra configuração, então vamos
corrigi-las em um segundo. E temos nosso
cronograma, nosso atraso. Isso é muito desorganizado e torna tudo mais
complicado do que deveria, então vamos
organizar isso um pouco Vamos mudar
todo esse posicionamento. Vamos adicionar um comentário em
cima dele agora e
chamá-lo de chamá-lo motor
aleatório, mas. Vamos compilar isso e agora o organizamos Vamos dividir
esse pino de estrutura e vamos
randomizá-lo Slot aleatório no alcance. X, como descobrimos anteriormente, não importa muito para
as luzes. Mamãe. Agora, vamos examinar nossos valores. O que? Vamos selecionar os valores dos
holofotes para o
caso de podermos selecionar todos os projetos,
pois eles podem verificar
se a atuação está
correta para E
garantiremos que nossos holofotes
sejam. Nossos holofotes aqui
têm rotações estranhas Vamos consertá-los também. Nós
corrigimos isso a partir da planta Eu vou consertar isso para todos eles. Portanto, certifique-se de que não
tenhamos rotações aleatórias estranhas. Vamos clicar no holofote
para testá-lo e dar uma olhada. Y X é claro, pois XXs também
é importante, e Z importará quando
começarmos do zero Portanto, todos os nossos Xs importam
neste caso, como deveriam. Agora, a questão é quanto é o alcance que
queremos que eles tenham? Então, digamos que eu não
quero que a lâmpada tenha mais de 40 -40 ou zero Agora, -90 e 40. Então, para o eixo Y,
que é este, mínimo deve ser -90, MX deve ser Vamos restaurá-lo.
Para nosso valor X. Novamente, vamos fazer 40 e -40. Não quero que tenha um alcance
muito grande pois faz com que as
luzes se borrem
umas nas outras -40
e , quanto ao eixo Z, é praticamente 180 graus Então, vamos fazer -90,
ainda 90 positivos, é apenas uma rotação gradual, e nós a queremos apenas em um lado, então estamos limitando o intervalo Então, agora, salve tudo por
precaução, espião. Eu tenho luzes se
movendo aleatoriamente. Veja o que está acontecendo com
nossos holofotes aqui. Nós temos dois. Vamos
ver, certifique-se. Este é um valor de zero
no momento, luz, holofote e assim por diante. Isso é zero, e é -90 e mais 40 Cometemos um erro com o YXS? Menos oh, oh, esse é o problema. -40 a -90. Eu cometi um erro
ao ganhar peso. Isso deve estar
correto, eu acredito. O número que queremos está entre -90 e -40. Vamos testar novamente. Interessante a maneira como eles
se movem fora dos rádios. Z está bem. X. Também está bem. Acho que é
uma combinação de três valores aleatórios que
está criando Então, se você colocar X em zero para Não, zero, não. Então, talvez tenhamos certeza de que
não podemos nem mesmo entrar em -90. Vamos fazer com que seja menos, digamos
zero. Zero pode ser demais. Então, vamos dizer menos e
obter um valor que seja OK. A razão pela qual algumas luzes começam
a se apagar é por causa da forma como
o Spotlight está
recebendo seus números Então, se você copiar esse
número, colar, clicar no Spotlight
e colar esse número, obteremos
o mesmo valor, e o valor X não é o motivo O valor Y é. Como você pode ver, agora copiamos esse valor porque, diferentemente dos atores leves
anteriores, esses atores compartilham a
forma como são moldados. E a forma como implementamos
nosso ator desta vez dificulta
a saída usando os
mesmos parâmetros. Então, o que precisamos fazer é
gerenciar o eixo Y. Vamos fazer isso dessa maneira. Temos os eixos X e Z
para nossas travessuras. Então, se você colocar o eixo Y em 50, por exemplo, tenho certeza de que ele nem
funcionará corretamente. Nosso holofote está indo para 50, o
que é 50 em todo o céu Então, vamos fazer com que seja -50. Compile e pressione play. Novamente, -50 nesta parte
da cena está totalmente acima. A única maneira de
realmente resolver isso é destacando nossos
holofotes aqui Nós nos separamos. Mudamos a rotação para zero, vamos deixá-la voltada para cima, o que
não é o que queremos E se você
removê-lo da
própria malha , compile e reinicie Agora, como o
removemos da malha estática, ele não absorve
mais a rotação da malha estática. Então,
agora eles estão em zero. Então, vamos tentar agora. Agora temos o problema de eles seguirem apenas na direção
negativa, então vamos voltar aos nossos holofotes e ver
os valores de que precisamos agora O valor -60
neste lado está dentro. E se olharmos para esta localização, agora, 60 positivos estão dentro. Não queremos que ele
seja
muito aleatório e saia dos limites
no eixo Y. Então, em vez disso, o que
podemos fazer é fazer um valor no meio. Dois eixos e
menos cert e cert. Vamos compilar isso e jogar. Isso terá. Embora
algumas luzes
se apenas devido
à forma como o randomizador funciona Isso é bom. Vamos
reduzir o limite de valor para todos eles, pois não
queremos que eles ultrapassem demais
os limites,
e vou até reduzir
isso para 20 e 20, pois prefiro que
eles lembrem que, por dentro x é bom, pois é apenas rotação de
cem e 80 graus E teremos essas luzes
estranhas girando, algumas delas
se apagando, o que é bom Como você pode ver, eles estão
circulando aleatoriamente. Não é a solução mais ideal, obviamente, mas está tudo bem. Também poderíamos adicionar
funcionalidades adicionais para
fazer com que eles visassem apenas esse local
intermediário, mas isso exigiria que
fizéssemos muitas matemáticas
vetoriais complicadas, o que não faremos Nesse caso,
também poderíamos fazer cálculos com base no vetor direto. Então, por exemplo, poderíamos
fazê-los calcular seu vetor
direto e mirar
apenas no local para
onde estão olhando, mas não é isso que faremos neste caso. Agora, vamos testar isso. Selecionamos nosso cubo e agora vamos pegar o
evento B e jogar E aqui, vamos, por enquanto, adicionar marcador de
eventos e ver
como funcionaria. E funciona como deveria, exceto essa
luz, eu acredito, e isso é porque eu
modifiquei suas configurações de luz e esqueci de colocá-la de
volta nesta também Lembre-se de quais
atores você modificou. Modifique este, que não
estava funcionando corretamente, e este, que
não estava funcionando corretamente. E agora, tudo
deve estar como está. Agora, basicamente terminamos
com o posicionamento aleatório da luz, o que é bom por enquanto. Vamos adicionar
uma sequência aqui, e essa será 01. Para zero, vamos
adicionar nossa cor aleatória. Vamos começar a
jogar e, no zero, ativamos essa função aleatória de
mudança de cor. Então, vamos copiar isso
e copiá-lo de volta aqui. Quando você estiver copiando a função, eles pedirão para
criar ou não fazer nada. Nós o criamos e
teremos isso no topo. Vamos colocá-lo aqui. Remova esta nota por enquanto. Temos isso primeiro e
temos nossa filial. Vamos criar essa variável, pois
precisaremos dela mais tarde. Mudaremos o
nome mais tarde. E temos essa funcionalidade de
cores aleatórias incorporada e
compilada por precaução Vamos garantir que nossas variáveis sejam nomeadas corretamente. a rotação
com rotação relativa,
temos o alvo. As plantas não são necessárias. Compile e vamos dar uma
olhada em nosso nó de cores aleatório. E vamos dar uma olhada em nossa função polar
aleatória aqui. Nós temos isso, que
vamos apenas copiar. Você provavelmente poderia copiar tudo e
colocá-lo de volta aqui em escala. Desligue, retire novamente. Vamos criar
essa variável,
criar uma cor de luz variável. Compilar. Voltar à luz
pode mudar de cor, definir a cor da luz, Poppy,
seja educada Aquela função de mudança de luz,
aquela cor clara, pilha de
estouro que
vai colocar sua Agora vamos testá-lo.
E está funcionando. E temos uma mudança aleatória de cor cada poucos segundos, como
fizemos anteriormente. Embora as luzes se apagando dos
limites sejam irritantes,
não afetarão tanto nossa jogabilidade, pois teremos funcionalidade adicional de
iluminação, que faz com que a luz
siga certos atores Agora, também tínhamos essa funcionalidade aqui para
fechar portas abertas Vamos copiar isso, mas
vamos reutilizá-lo mais tarde Altere a função e não
pudemos copiar o atraso. Podemos simplesmente adicioná-lo nós mesmos. Não podemos. Minhas desculpas Não podemos
porque está na função. Precisaremos adicionar aqui. E vamos comentar
esta seção também. Cor aleatória. Vamos torná-lo roxo.
Cor aleatória de Tesaro E agora temos eventos de portas abertas e
eventos de portas fechadas, mas vou renomeá-los. Um deles
será localizado no alvo. O outro é o Target score. E vamos
mudar isso para dois. Vamos ver qual seria
o nome correto para um alvo que está sendo gerado pelo Target Alvo chamado gerado. E nós vamos ter isso. Por enquanto, vamos
deixar as coisas assim. Mais tarde
, vamos reutilizar isso agora, temos nosso sistema de luz Vamos selecionar um
Speedbard, aperte play. E do ponto de
vista em primeira pessoa, isso parece bom. Há alguma luz
circulando na cena e temos nosso
cubo no meio Uma das coisas que eu quero
fazer agora é que
a luz atinja nosso personagem quando ele
estiver se movendo. Então, vamos adicionar um nó I. E se o alvo estiver próximo, a luz seguirá
o jogador alvo. E se o alvo
não estiver perto o suficiente, vamos
randomizar a luz Então, se você se lembra
desse alvo que tínhamos, vamos remover esse
nó-alvo daqui agora. Ou, para ser mais específico, precisamos adicionar um nó de ator definido, um
nó de destino definido. Então, vamos definir o nó de destino. E vamos configurá-lo
para que precisamos de uma entrada aqui. Vamos definir
o personagem do jogador. Então, por enquanto, vamos
fazer isso dessa maneira. Quando os
eventos começarem, o jogo do evento começar, vamos
defini-lo como nossa meta. A marcação do evento fará com que a rotação do
ator siga. Ou agora vamos
remover a linha do tempo. E aperte play. Assim que o jogo começa, colocamos todas as luzes focadas
no personagem do jogador.
Não é isso que queremos. Queremos que apenas as
luzes mais próximas estejam entre, digamos, as 500
unidades mais próximas para seguir o ator.
22. UE5 FC07 08: Agora, a forma como você
calcula a distância entre dois atores nos três
mundos é por vetores Então, o que precisamos fazer para isso é obter o personagem do jogador. Nós o temos aqui. Então, por enquanto, vamos
copiá-lo. E obteremos a localização do ator. Copie isso novamente,
coloque isso e aqui. E vamos subtrair um do outro e obter o vetor Oh, não precisamos de links
vetoriais vetoriais. Então, por enquanto, imprima uma string com esse valor. E vamos colocá-lo
em um ventiq agora. Compile, salve e reproduza novamente. Oh, minhas desculpas. Precisamos ter certeza de colocá-lo na string,
não na duração. Compile, pressione play. Então, como você pode ver, as luzes estão
calculando a distância entre o personagem
e elas mesmas E a unidade mais próxima que eu posso
ver aqui é de 1.400. Agora, o que podemos fazer é ter
esse valor que estamos obtendo. E se esse valor for menor,
h, digamos 2.500
ou até mesmo 2.000 É verdade que se esse valor for
menor que 2000 no eventi, vamos fazer dessa maneira Se for verdade, faremos com que as luzes sigam o
personagem e pressione play. Agora você vê
que temos luzes nos seguindo
e, se nos movermos,
as luzes mais próximas nos
seguirão instantaneamente. E quando saímos da faixa, à
medida que a distância aumenta, agora
o valor do bulling cai, ele não está mais nos seguindo Obviamente, não queremos
que isso aconteça instantaneamente. Usaremos um cronograma
para isso em um momento. Mas, por enquanto, tudo bem, pois estamos apenas testando
o sistema de segmentação Novamente, estou percebendo
que temos uma luz aqui que eu dobro os valores. Vamos restaurar
isso, salvá-lo e outro aqui. Não sei por que
ajustei tantos valores, mas é isso que é Certifique-se de limpar depois de editar os valores
para fins de teste e não faça como eu. Agora, essa lógica funciona. Podemos obter a localização, a distância, a
distância do ato para ficar claro. Mas não queremos que esteja
no Aventi. Tudo bem. E o que precisamos agora é de uma funcionalidade adequada de acompanhamento do
alvo. Vamos expandir isso um pouco e ter tudo dentro, e vamos adicionar um pouco mais de
espaço para que possamos trabalhar. problema que temos agora é
quando devemos receber essa verificação e quando devemos começar a receber a
rotação e como? Não queremos fazer
isso com o evento, pois é uma grande apresentação Em vez disso, o que
podemos fazer é verificá-lo em vez de cada
quadro a cada poucos segundos. E da maneira que podemos fazer isso facilmente, podemos fazer isso na sequência aqui e realmente evitar que
essa linha do tempo aconteça Em segundo lugar, vamos remover isso. Claro. Então, vamos
resolver isso
tão bem quanto
precisaremos dele mais tarde. Temos essas cores aleatórias que nem sempre ativamos, então não vamos tocá-las, mas só queremos que
elas sejam acionadas. Vamos fazer isso segundos lá fora, se
não houver nenhum jogador alvo. Assim, você pode colocar um nó de ramificação aqui e executá-lo
pela ramificação. E se for falso, teremos essa
função como anteriormente. E se for verdade, vamos colocar isso na seção inferior, onde seguiremos o personagem
do jogador. Agora, a maneira de fazer
isso é deixar eu colocá-lo de volta no valor aqui em
vez de ter duas ramificações, é desnecessário. Vamos adicionar uma linha do tempo. E essa linha do tempo agora pode
funcionar de maneira semelhante. Vamos
ter ter um rotador
larp E vamos colocar
nosso Alpha aqui e ver a rotação. A nova rotação será essa
e a rotação dos atores. Nesse caso, queremos que a
luz siga totalmente acesa, não apenas os holofotes Dessa forma, vamos alterar
alguns parâmetros aqui. Estávamos movendo apenas os
holofotes. Mas com nossa nova luz, podemos mover
toda a luz em si. Não estamos limitados
aos nossos holofotes, então vamos resolver
isso antes de prosseguirmos Esse parâmetro relativo é bom, mas deve ser apenas
rotação, não relativo. E vamos
conseguir a localização dos atores. Rotação de atores. Obtenha o ator de rotação. Vamos colocar esses atores em rotação. Nós
vamos nos inscrever. Eles vão configurá-lo
e, no final,
não girar o holofote, pois não há nenhuma razão real para fazer isso
apenas com o holofote.
Vamos copiar
isso novamente e
definir a rotação, a rotação do ator e o próprio ator, obtemos um novo valor de rotação
e o atualizamos Agora vamos tentar
novamente, aperte play. As luzes estão se
movendo como deveriam. Alguns deles
permaneceram no local porque tínhamos o nó da ramificação. Nós nos movemos por aqui e as luzes das quais estamos mais próximos
não se moverão. Mas a lista está
funcionando como deveria. Vamos dar uma olhada
usando simular e
ver como as luzes Sim, eles estão se movendo. Todos. Ok. Agora, tivemos um erro e
esse modo de erro porque
estávamos tentando acessar
o personagem e ator
do jogador não existia quando estávamos simulando,
o que é bom Nós realmente não precisamos
disso durante as simulações. E aqui, é verdade, vamos
tentar de verdade. Isso será acionado aqui. Nossa segunda linha do tempo
será acionada. E esse cronograma
pode ser mais curto. Então, vamos fazer isso em 1 segundo. E o valor disso também
pode ser um. Queremos que as luzes
reajam instantaneamente quando
o jogador estiver por perto para mostrar que ele deve iluminá-lo. E temos esse nodo larp, que agora
calcula a localização do ator
e a localização dos alvos, e estamos definindo nosso alvo
como personagem do jogador, é isso que
vamos fazer Então, se o comprimento do vetor
entre for próximo o suficiente, vamos definir nossa meta Depois de
definirmos nossa meta, vamos jogar do início. Vamos reduzir nossa rotação atual, o que
faremos por justiça Ao configurá-lo, obviamente, vamos definir
nossa própria rotação. E essa rotação
será usada para esconder à medida que
avançamos na linha do tempo. Basicamente, estamos fazendo
exatamente o que fizemos aqui, mas com apenas algumas Então, vamos
fazer isso dessa maneira. Agora, vamos testá-lo. O PlesPlay não está funcionando como deveria. Temos nossos Alfas,
jogamos desde o início. Não temos nossas atualizações. Isso ocorre porque
não adicionamos esse nó aqui. Precisamos atualizar isso
e, provavelmente,
se, quando terminar, adicionar retorno ao nó da
ramificação na parte superior. Aperte play. Agora, é muito estranho. Não estamos obtendo os
valores adequados e, como você pode ver, as luzes no topo estão
em uma direção estranha Vamos dar uma olhada no
que está acontecendo aqui. Estamos obtendo a rotação
de atores, ou seja, eu, e estamos obtendo a
localização entre eu e B. Mas estamos atualizando a cada quadro, o que
não é o que queremos. Queremos definir a
rotação ou RB. Podemos simplesmente copiar esse valor. E coloque aqui. Mas recombine o pino da estrutura. Coloque o valor do ritmo aqui. Valor de rotação B aqui, jogue do início,
coloque o valor em B. Vamos organizar isso um pouco mais. Existem muitos códigos de
espaguete. Retorne valor para isso. Compilar, salvar, é jogar. Agora, à medida que nos movemos, quando eles não estiverem
mais próximos o suficiente, eles se aleatoriamente Enquanto eles estão perto de nós, por eles, quero dizer
as fontes de luz. Eles começarão a reagir. Agora, o problema é que as luzes
que estão no meio de rotação
aleatória não
voltarão a disparar e
darão uma segunda olhada em nós A razão pela qual isso está
acontecendo é a maneira como
configuramos nosso nó de ramificação. Nosso nó de ramificação começa aqui, e nossas luzes aleatórias não o
verificam a cada segundo, cada 8 segundos, devido à
forma como nossa linha do tempo está configurada Portanto, agora temos um pequeno problema em que
precisamos interromper esse processo
no meio e
ativar
esse nó de ramificação para verificar se está funcionando como deveria ou
se deveria seguir A maneira de fazer
isso é
chamá-la outra filial aqui
no meio. Eu realmente não gosto da aparência
desse código de pacote, mas vamos deixá-lo por enquanto Infelizmente, não podemos transformar nossos
cronogramas em funções. Agora, temos essa
luz que está sendo atualizada a cada segundo, a
cada quadro, na verdade. Então, depois que isso for feito, após cada atualização,
poderíamos verificar novamente nossa ramificação Vamos compilar e
ver o que acontece. Isso criou um loop infinito. Como tal, isso não pode ser aplicado. Loops infinitos travarão
instantaneamente seu PC. Portanto, precisamos criar uma maneira
que não gere um loop
infinito, e a maneira mais fácil de fazer isso
é obter um nó de atraso. No final, faça com que ele seja acionado
a cada 1 segundo. Poderíamos fazer isso mais baixo,
mas isso deve ficar bem. E coloque no galho. Compile, jogue. Porque
há um nó de atraso lá. Isso não é mais um loop
infinito, pois
não é acionado infinitamente a
cada segundo Então, agora somos alvos e, quando não somos
mais alvos, eles se randomizam,
ou pelo menos deveriam Vamos ver o que está acontecendo. No centro do mapa, ele não deve ser
capaz de nos atingir. Vamos ver o que acontece.
As luzes agora são aleatórias. Mas como não demos a eles um grande alcance para randomização, as luzes se movem no último local em
que andamos Então, eles estão tentando nos seguir
e, depois de
terminarem de nos equipar, estão tentando
seguir apenas nessa direção Então, em vez disso, o que vamos
fazer é editar os valores
no intervalo aleatório. E a forma como temos esses
valores, aqui, certo? Temos esses
valores aleatórios na faixa flutuante, nos eixos Y e Z. Mas o que é mais importante
é, tipo, o eixo? Como esse é o responsável
por ficar mais claro, Y e X Xs são os responsáveis por luzes
saírem demais do campo. Essa é a razão pela qual
reduzimos seu valor de intervalo
flutuante aleatório Agora, precisamos
descobrir uma maneira de
garantir que o que acabou de acontecer
não aconteça. O que aconteceu aqui foi que
obtivemos a rotação do ator, e depois de definirmos
a rotação do ator, esse A aqui se tornou a
nova rotação do ator. Como esse A é sua
nova rotação de ator, eles não estão redefinindo
seus parâmetros iniciais Dessa forma, o que podemos fazer é
simplesmente, em vez de obter rotação do
ator toda
vez, ou, para deixar claro, quando
terminarmos essa rotação, podemos executar um nó de ramificação
novamente na mesma ramificação. Como eu não gosto da
forma como isso está configurado, vamos tentar fazer isso novamente, vamos copiá-lo, colocar uma versão dele aqui, adicionar um branch node e vamos testar a
mesma coisa se for verdadeira,
se for falsa, e
isso estará concluído quando passar 1 segundo ao mirar no Se isso for falso, pois não está mais no alcance
e quando estiver no alcance, se estiver no alcance,
vamos apenas redefinir tudo aqui
na camada inferior. E se for falso, o que vamos fazer
é redefinir a rotação para
A, para que ela
possa começar do
ponto inicial. Portanto, a rotação inicial nosso holofote é
zero, zero, zero Podemos fazer exatamente o mesmo, então podemos definir nossa rotação. Aqui às 000, e isso deve
ser tudo o que precisamos fazer. Depois disso, podemos
simplesmente conectá-lo aqui. Agora, vamos ver como
isso vai funcionar. Todos nós temos um gatilho contra nós. Eles se movem,
perdem o alvo. E depois de
perderem o alvo, não estão
funcionando adequadamente. Eles ainda estão
praticamente no alto. E a razão é porque eu fiz a rotação do holofote
em vez da malha real, que estamos usando, que
deveria ser -90 Sempre
verifique seus valores e vamos tentar novamente. Estamos fazendo isso de novo. No
momento em que perdem os alvos, devem voltar
aos valores iniciais. Eles não deveriam ser interessantes. Novamente, eles fazem o mesmo. Eles
seguem corretamente o alvo, mas são demais. Ah, esse é outro
problema que temos porque alteraremos
os valores posteriormente. Inicialmente, o alcance da luz foi calculado
a partir dos holofotes Novamente, tenho alguns holofotes aqui que toquei
e não restaurei Sempre limpe após o teste para não acabar
em uma situação como essa. Isso é bastante comum,
mas, no
entanto, não é uma boa
prática não limpar. Vamos restaurá-lo. E temos nossa malha
que, desculpe, é
o ator, que está
sendo completamente girada Então, se você observar nossa
rotação menos xs, isso remonta Não queremos isso. -90 , então agora temos que você também pode dar
uma olhada Você tem menos nove. T a rotação
original desse fator é 180. Y. Eu zero, zero, novamente, todos
esses são problemas dos meus testes que eu não
resolvi anteriormente Essa é a mais correta. Portanto, temos a mesma
situação aqui. Você tem um eixo X que é
totalmente negativo. Temos zero e novamente
zero. Não sei por quê. Os lábios estão se abrindo. E
temos esse problema aqui. Nada disso realmente
importa muito. Como se apenas
simulássemos, estamos obtendo um resultado semelhante ao que tínhamos anteriormente Agora, o maior problema é quando o jogador não
está no nível, então o que podemos fazer é
adicionar um nó válido. Então, temos o que podemos fazer é
adicionar um nó válido. Então, se o alvo for válido, o que podemos fazer em vez disso é
se o alvo
é válido, não é válido,
continuamos aqui. Se for válido, vamos para a filial. Isso é temporário, pois
não quero receber o mesmo
erro todas as vezes. Vamos apenas
verificar as luzes novamente, ter
certeza de que estamos fazendo
tudo corretamente. As luzes estão se movendo
demais em certas direções. Novamente, o maior problema é que
Z está aumentando em número, embora deva
permanecer em -90 Nós vamos descontrolar. Não precisamos
mais disso. Nós testamos, então precisamos dele e garantimos que
o problema não ocorresse. Então, em vez de ter
esses valores muito altos, teremos o mínimo
de -90 e o máximo de -60 Vamos ver o que acontece agora. Eles estão se movendo muito
perto do alcance. Então, em vez disso, vamos
fazer isso um pouco mais. Vamos fazer positivo para
cinco. Vamos jogar. Também podemos
pegar o meio termo e torná-lo de 45 a -45, que o tornará aleatório em
todas as direções O que é bom. Agora, vamos jogar isso de novo,
ver como funciona. E depois do momento, eles perdem a direcionalidade Eles devem voltar
à forma como deveriam funcionar anteriormente. Mãe, ele. Então, vamos ver o que está
acontecendo aqui. Temos nossa estação. Então, no momento em que isso termina, verificamos se
estamos além da faixa de 2000, como quando isso é falso, vamos simular isso e dar uma olhada no que
está acontecendo aqui Vamos selecionar essa luz, que é o número 28. Vamos expandir isso
e apertar play. E para nossa depuração, ator, selecione 26. O que está acontecendo agora? Isso está apenas se repetindo, definindo sua própria rotação
depois de terminar, e o atraso é criado Oh, ok, esse é o problema. Nunca chegamos à nota final , pois isso sempre
remonta e cria um
problema em que está sempre tocando. Ok. Assim sendo, o que precisamos
fazer é fazer com que esse
atraso realmente aconteça. Desculpe, o pino de execução desse atraso não remonta totalmente e simplesmente funciona da maneira correta. Então, o que podemos fazer
é, então temos isso. Quando termina, temos esse atraso e,
quando temos isso, definimos a rotação real
e, depois
que tudo estiver concluído, precisamos
verificar o nó da ramificação. Em vez de
encaminhá-lo diretamente para trás, o que podemos fazer é
adicionar esse nó de ramificação novamente. E antes de prosseguirmos, vamos
organizar adequadamente todos esses nós. A única maneira de fazer isso é obter esse
valor e torná-lo
uma variável para que não precisemos uma variável para que não precisemos fazer tudo isso de novo,
todas as vezes. Então, o que podemos
fazer é transformar isso em variável, transformá-lo em uma variável, e precisamos definir
essa variável. Nem tudo isso. Ao transformar
tudo isso em função, vamos reduzi-lo a funcionar. Chame isso de distância até a camada. Distância a ser limpa. E quando precisamos disso, precisamos dele antes desse galho. E toda vez que
precisarmos disso, podemos simplesmente colocar
essa função. Em vez de ter
esse tipo de código, isso é
simplesmente Então, o que fazemos,
distanciar o jogador, arrastá-lo e soltá-lo. E fazemos isso de novo aqui,
à distância do jogador. Isso apenas verificará a
distância até o jogador, se for Então, do jeito que vamos ver,
se a distância até o jogador
for menor que 2000 unidades. Menos de 2000. Definimos esse valor e
retornamos essa nota. Então, aqui, se a distância
for menor que 2000 unidades, tudo isso acontece
como acontecia anteriormente. E aqui, depois que isso é atualizado, segundo passa, o
atraso acontece
e, após o atraso, obtemos
uma distância até o jogador. Se a distância até
o jogador atualmente, após esse 1 segundo
de atraso durante a atualização desta linha do tempo,
for menor que 2000, voltamos e verificamos novamente ou
nem precisamos verificar, vamos direto para a ramificação, conforme
já configuramos Verifica a distância
até o jogador e vamos se ele cair, nada acontece, e tudo isso continua funcionando
até que isso termine. Então, agora vamos tentar novamente. E vamos vê-los e pressionar. Isso acontece. Isso está marcado. Esperamos até que termine, o que será de 8 segundos. Após 8 segundos, ele
termina e se restaura. Perfeito. Se testar,
você pode perceber que suas luzes
não funcionarão corretamente, e esse é o motivo. Da forma como essas funções funcionam, elas só produzem esse valor quando são
realmente acionadas. E quando temos a verdade aqui e
voltamos atrás, se não verificarmos o valor
da distância até o jogador, essa função
não funcionará corretamente. E o que precisamos fazer
é garantir que apenas todos os nós que chegam até aqui cheguem até aqui,
e devemos
garantir que,
antes que a ramificação seja acionada,
acionemos a distância
até o evento do jogador Dessa forma, poderemos
garantir que o valor, que é verdadeiro ou falso
da distância até a função do
jogador, seja
realmente preciso. Então, vamos compilar, jogar e voltar ao nível e
ver como funciona E depois que não conseguem nos encontrar, eles voltam para suas rotações
aleatórias
e, quando nos aproximamos, eles nos notam e
começam a nos seguir Agora, obviamente, poderíamos
ajustá-lo para
tornar as luzes mais precisas Talvez você não queira limitar ainda mais
o alcance, etc., mas vamos
mantê-lo assim por enquanto, pois também
mudaremos as luzes e a funcionalidade
dependendo da jogabilidade Na verdade
, isso não será tão aleatório
constantemente porque as luzes
ao redor se concentrarão
nos objetivos se os
objetivos estiverem próximos Antes de
começarmos a implementar elementos de
jogabilidade, vamos modificar nossa
luz mais uma vez. Temos luzes que se movem ao redor do nível e fazemos com que elas
saiam do nível. A razão pela qual isso
está acontecendo é porque damos a eles números
aleatórios Dessa forma, eles realmente não têm nenhum ponto no mapa em que
estejam tentando se concentrar. É uma solução fácil,
especialmente o que
já implementamos .
Pare a simulação. E poderíamos dar a eles um valor
e modificar esse valor por
esse valor aleatório para garantir que os coloquemos
em uma determinada área, todas as luzes se concentram
em uma determinada área. O que também podemos fazer usar nosso alvo já
estabelecido para obter alvo e usá-lo como um espaço reservado para
a luz focar Então, já temos essa lógica aqui que criamos anteriormente. Vamos pegar isso
e aplicar aqui. Agora, temos essa
visão final da rotação
e temos esses flutuadores aleatórios que fornecem mensagens aleatórias
para esse valor de rotação
que está O que podemos fazer é
combinar esses dois rotadores, que nos dará um valor
que não é completamente aleatório Agora vamos combinar os rotadores A e B, e inserir esse valor de
retorno combinado em P. Agora vamos dar uma
olhada em nosso nível Ainda há alguma
aleatoriedade no nível, mas
todos tentarão se concentrar na luz
do alvo E quando o alvo está se
movendo, eles se movem com ele. Obviamente, não queremos que
esse cubo seja o alvo. Dessa forma, o que podemos fazer é que isso ainda esteja
no centro do nível, mais ou menos, e podemos
forçar a redução desse valor. E o que podemos fazer é copiar esse local. Volte para o BP Lit, remova get actor location
do alvo e divida o strcm. Vamos dar
uma olhada em nossos valores aqui X Por quê? E uma compilação prévia. Eles se comportarão
de maneira semelhante, mas não terão mais
como alvo esse cubo específico Agora eles estão apenas girando
na direção geral em torno onde esse cubo estava
inicialmente localizado Você também pode atingir
o nível em si ou simplesmente tornar
esse cubo invisível, largá-lo e encerrar o dia, mas não há razão
para complicar demais quando você pode codificar os valores, podemos fazer isso de várias
maneiras, mas isso simplesmente funciona Agora, vamos organizar nosso código para que tenhamos mais facilidade na próxima vez em que
realmente precisarmos disso. Vamos converter algumas das
coisas aqui em funções. Não podemos adicionar um cronograma
às funções. Vamos fazer isso, converter em função, reduzir a
função especificamente. Vamos chamar isso de rotação,
geração aleatória. Isso está aqui apenas para manter
tudo organizado. E vou renomear essa
função. Adequadamente. Certifique-se de testar seus
projetos sempre. E se funcionar como deveria, você pode simplesmente continuar. Sim, a maioria das luzes
é direcionada para dentro. Também podemos reduzir os valores de aleatoriedade para que não
vá muito além do que queremos. Isso deve
ser razoável o suficiente Vamos fazer com que seja de 20 a 20. Embora números aleatórios sejam bons, fazer com que eles
subam demais não é o ideal E agora temos esse efeito de
discoteca. Ignoramos o
erro. É porque o jogador não está
realmente no nível. Você pode adicionar um nó válido, mas isso não será realmente necessário quando
terminarmos com isso. Então, vamos fazer isso também. E desta vez, o que
vamos fazer é entrar
em colapso em uma função também, mas é uma função diferente, pois é uma função que está
olhando para o jogador, e vamos selecionar todos
eles, reduzir a função. Localização do jogador encontrada. Só vou nomeá-lo dessa
forma. Está tudo bem. Podemos voltar ao gráfico de eventos, ver se precisamos
organizar mais alguma coisa. As seções de comando agora
são muito grandes, então vamos reduzi-las. Vamos ver. Não podemos
colocar essa linha na função, pois é
um evento relacionado ao tempo, e não há nenhuma razão real para transformar esses dois
nós em função, pois não vamos
realmente reutilizá-los demais. Nós os temos de uma
certa maneira aqui, mas eles não são uma forma
realmente eficiente de colocá-los em uma função. Isso pode permanecer como está. Esses atrasos não podem ser adicionados
à função ou às macros. E agora temos um
pouco mais claro. Ainda temos esses
nós percorrendo todo o caminho, mas está tudo bem. Provavelmente poderíamos fazer com que parecesse melhor se nos
reorganizássemos mais, mas não quero perder
muito tempo aqui Temos nossas configurações de cores aqui
e, a seguir,
vamos editá-las quando realmente implementarmos elementos de
jogabilidade. Então
23. UE5 FC08 01: Agora, vamos começar a
criar nossa interface. Clique com o botão direito na pasta vazia. Eu já criei a pasta
Interface, criei a sua própria e
chamo sua interface Blueprint BPI for
Blueprint, e vou
chamá-la Compile-o,
salve-o por precaução e entraremos em uma nova função
aqui na interface Vamos renomeá-lo
e chamá-lo de placar de gol. Por que eu tinha L? Eu não sei Então, temos essa interface agora. Vamos criar mais um, e o próximo
não vamos realmente usar, mas vou apenas
demonstrar como ele pode ser usado. Vamos
chamá-lo de interagido. E desta vez
vamos adicionar um nó de saída e
um nó de entrada. Um nó de entrada será, digamos, um arctor de camadas Vamos ver o que podemos Primeiro, o que podemos usar, podemos usar esse caráter
pessoal. Isso vai
ser apenas para demonstração. Na verdade, não vamos
usá-lo e, para saída, vamos apenas adicionar um
valor de bulling de algo Na verdade, não vamos usá-lo. Vou removê-lo mais tarde. Então, vamos
salvar isso. E agora
temos um com saída, outro sem saída
e vamos ver. Nosso placar de gols não tem uma saída e nosso
Interactive tem uma saída. Então, o que vamos fazer vá para BP Goal e, nas configurações da
classe, vá para as interfaces implementadas no painel de detalhes
no lado direito e clique aqui para
encontrar nossa pontuação de meta do PPI Nós o compilamos e agora
temos essa etapa aqui. É chamado de interfaces. Expanda-o e você
verá duas novas opções aqui. Primeiro, vamos ao gráfico de
eventos e clique
em Interativo. Temos essa função que tem entrada de player e
alguma saída. O objetivo disso é criar uma função amplamente disponível que possa ser modificada
em cada blueprint Portanto, a função interativa
que criamos pode ser usada para, digamos que temos nossas
entradas e saídas,
obviamente, e podemos,
em nossos gráficos de eventos,
chamar esse evento, por exemplo, digamos que quem interagiu, possa ser E no nó do jogador, podemos adicionar a referência
do jogador que fez isso. Ou você pode adicionar um evento
interativo que diga, por exemplo, moedas Imagine que você está usando
uma loja em um jogo e tem
um evento interativo, e esse valor diz moedas, que é verificar quantas
moedas seu personagem tem. E aqui, digamos que o item que você está
tentando comprar custa 100 moedas, você pode adicionar menos de um nó. Na verdade, vou
mudar esse valor de ouro aqui para flutuar, só
para demonstrar Moedas. Compile e compile
novamente, compile-o, recompile E a razão desse erro é
que não há valor aqui. E digamos que as moedas que temos menores
que 50 ou sejam iguais ao item com o qual você
está interagindo Esse será um valor verdadeiro
ou falso, que resultará em todos
os valores falsos. Portanto,
a entrada para a
moeda que você está recebendo permanece assim porque ainda não a
salvamos, então vamos salvá-la. Da próxima vez que gerarmos esse
evento, isso funcionará bem. Isso nos permite obter
informações ou variáveis, etc., de outros
atores que têm a interatividade habilitada pela interface e
obter facilmente suas variáveis sem precisar
realmente recorrer
ao ator e obter seus
valores saindo daqui,
obtendo moedas, etc Nós
realmente não precisaremos disso. O que precisamos é dessa meta. Você não pode arrastar isso, o que você pode fazer é
implementar um evento. Agora, o que isso faz, quando a pontuação da chamada do evento é
chamada via interface, essencialmente por um ator
diferente, esse evento será acionado. Nesse caso, o que queremos que
aconteça é ter a pontuação do gol desse
evento. Vamos remover essa interação
, pois não a
usaremos no projeto de luz Então, vamos deixar de lado a planta telefone e a planta da luz mais
tarde Vamos acessar
as configurações da classe na interface, novamente, na mesma interface, pois eles terão a mesma interface em
todos os lugares, compilá-la Não precisamos ter um evento único
em que possamos jogar. Queremos que aconteça no evento
Goal Scroll. Então, vamos
pegar isso e colocá-lo, vamos
compilar esse salvamento E aqui no PPG. Vamos remover essas coisas, vá para o gráfico de eventos. Não precisamos que isso
seja acionado aqui. Precisamos acioná-lo
em todas as outras interfaces. Então, se formos até a partitura e
clicarmos na mensagem Call sCorr, isso chamará esse evento
na seção de destino dos
atores que o interagem Agora, você pode estar se perguntando quem está
desencadeando esse evento No nosso caso, é esse arco. Então, na verdade, vamos apenas
para fins de
demonstração, vou colocar isso como estamos chamando esse evento de meta, então vamos arrastar
isso daqui para aqui. E você pode estar assumindo que
isso funcionará conforme o esperado, mas não porque
estamos mirando no evento de bola,
e a bola em si não
tem nada a ver É um ator vazio com apenas um
componente de malha estática em cima dele. Mas precisamos que você interaja com esse gerador de luz,
desculpe, gerador ousado E para que isso aconteça, precisamos interagir
diretamente com ele ,
colocando-o como alvo. Mas isso envolveria fundição, o que é bom, neste caso, pois já
estabelecemos que elas
existirão no mesmo nível. Mas também podemos pular
isso fazendo com que todos os atores tenham uma interface E a interface
que queremos selecionar é a pontuação
do gol do PPI, e
vamos colocá-la aqui. Então, o que isso fará é que,
quando isso for acionado, ele verificará todos os
atores no nível, e todos os atores no
nível que tenham essa interface ativada terão seu
evento de pontuação de gol acionado. Isso não é recomendado para
uso em operações baseadas no tempo Se você estiver em um evento, é muito provável
que seu PC trave se você
tiver muitos fatores E, se possível,
você gostaria de segmentar
diretamente se
for uma opção disponível. E, na verdade, o elenco
pode ser bom se houver uma garantia de que eles estarão
no mesmo nível
que estabelecemos aqui. Agora, você pode perguntar se
esse é o propósito, por que estamos fazendo isso dessa maneira? Por que não podemos simplesmente usar o casting? Isso ocorre porque se você
tem um personagem de jogador, e seu personagem de jogador
tem uma interface ativada, e digamos que temos essa
função chamada interagir, digamos que pegar objetos. Então, para essa bola, quando eu interajo com ela, digamos, eu simplesmente a pego. Mas também posso interagir
com esse portão e fazê-lo explodir ou
interagir com o MPC, conversar com ele ou interagir
com outras coisas Posso fazer uma chamada de evento,
cujas chamadas interagem. E a forma como esse evento funciona não é definida
pelo personagem do meu jogador, mas pelos próprios atores, o que faremos agora. Já adicionamos esse evento. Vamos ver se eu não
esqueci de fazer nada, isso deve apenas acionar e devemos pegar uma bola nova. Sim. Temos uma bola nova. E se pudermos repetir esse
processo, infinitamente, como toda vez que fizermos isso, ganharemos uma nova bola E compramos uma lâmpada nova. Vamos modificar nosso coelho de desova em
tigela. Vamos adicionar um nó, transformá-lo em três. Então, quando isso é acionado, voltamos e passamos
pelo processo novamente. E toda vez que isso é
acionado, vamos sequenciar. Redefinimos nossa contagem aqui
para que ela possa funcionar novamente e a refazemos. Vamos testá-lo.
Reproduzir em vermelho. Ela explode. Recebemos três bolas novas e podemos fazer exatamente a
mesma coisa novamente. Você ganha mais três bolas e pode repetir esse processo quantas
vezes quiser. Agora, você deve ter notado que eles aparecem diretamente um
em cima do outro, e tudo bem,
mas não é exatamente o que eu gostaria de ver
todas as vezes Como tal, vou
mudá-los, você sabe, não só
mudarei seu tamanho, mas também mudarei um pouco
sua localização após o intervalo. Então, vou adicionar esse vetor. Não tocaremos
muito no Z ou, na verdade,
podemos muito bem. Então, vamos torná-lo
aleatório novamente. Vamos obter uma flutuação aleatória no alcance. Carregar. Ao alcance. Novamente, vamos copiar
isso três vezes. Não queremos tocar muito no eixo
Z. Não queremos que ele vá para baixo. Dessa forma, vamos fazer com que
fique entre zero
ou, na verdade, essa é mistura de uma gota do
céu de zero e 200. O eixo Y pode ser -50 mais 50. E X pode ser o mesmo. Você pode aumentar os números
para fazer mais variações, etc., mas tudo
bem E não vamos esquecer de
colocá-lo, compilar, pressionar, reproduzir. Temos nosso jogo inicial. Nada acontece.
Nós temos nossa bola. Vamos fazer isso uma vez. Recebemos três bolas. E o som Agora vamos
mudar seus tamanhos aleatoriamente. Podemos fazer exatamente a mesma
coisa que fizemos aqui. Mas, em vez de usar três nós de alcance,
vamos usar um, e vamos
criar no mínimo um, e no máximo, vamos fazer com
que seja três vezes maior. Vamos inserir isso
em todos os três valores aqui. Compile, salve, pressione
play e teste novamente. Vamos fazer isso de novo. E agora temos cérebros, e eles têm tamanhos diferentes E ainda devemos ser capazes de interagir com eles. Nós somos. E agora com a marcha confinada, temos mais três bolas e podemos repetir
esse processo para encher nosso campo Como não estabelecemos nenhum limite, ele
será infinito Poderíamos adicionar um número infinito de bolas ou limitá-lo uma certa quantidade
fazendo o aceno novamente, mas não há nenhuma necessidade real, pois não vamos realmente
publicar esse esquema, pois isso serve apenas para fins de
demonstração Agora, temos nossas
interfaces sendo chamadas. Vamos fazer isso com luzes também. Vá para as configurações da classe,
implemente a interface. Novamente, implementaremos exatamente
a mesma interface. Nós só temos um,
compile-o, salve. Você pode se perguntar quais
são os outros. São
interfaces padrão fornecidas pelo mecanismo que
não abordaremos neste curso. De qualquer forma,
vamos querer adicionar essa
interação aqui. Especificamente, temos a pontuação
alvo aqui. Então, primeiro de tudo, vamos
mudar isso. E vamos remover isso em nossa interface e implementá-lo. Eu gostaria que eles simplesmente
aparecessem na sua frente, mas isso é o que é. Vamos arrastar isso para dentro, e o que vai
acontecer é que
vamos modificar isso um pouco,
pois temos uma geração aleatória de
cores aqui e temos um alvo gerado aqui Manteremos a
mesma lógica que usamos no nível
anterior. Se o alvo for
gerado por 3 segundos, por 3 segundos, ele será definido como falso e,
se for falso, continuaremos com nossa
operação para cores aleatórias Se não estiver,
vamos mantê-lo verde. Vamos experimentá-lo agora. Vamos apertar play. E quando o colocarmos, todas as luzes
ficarão verdes por 3 segundos. E na próxima
vez que o randomizador for ativado, tudo deverá voltar
às cores aleatórias Mas o problema é
que, na verdade, não temos um reacionador para essa operação de cores
aleatórias. Dessa forma, quando for verdade, voltaremos
ao nó de atraso e passaremos pelo processo
novamente até que seja verdade, e ele iniciará o loop novamente. Vamos tentar de novo. Vamos jogar. Vamos colocar nossa
bola no círculo. Um, dois, três, quatro, e
recuperamos nossas luzes. Cores aleatórias. Agora, seria chato se
tivéssemos essa arena enorme, e esse objetivo sempre
estivesse em um só lugar Então, em vez disso, vamos adicionar
funcionalidades adicionais à meta e
teletransportá-la ao redor do nível E cada vez que ele se teletransporta
ao redor
do nível, as luzes ao redor dão uma
olhada nele, o que nos permitirá essencialmente reconhecer
instantaneamente onde ele está Vamos combinar
essencialmente a interface e
a segmentação, que inicialmente adicionamos às luzes Com o portão em si. Agora, temos esse portão e gostaríamos
que ele aparecesse em, digamos, quatro locais
diferentes Poderíamos fazer localizações
aleatórias infinitas, etc., mas
não é uma boa ideia que
sejam completamente aleatórias O que vamos
fazer é criar uma matriz,
e nessa matriz, teremos possíveis
localizações para essa marcha, e vamos
examiná-las uma a uma, e quando não
houver mais elementos na
fenda da matriz, reiniciaremos isso Poderíamos fazer isso de forma controlada para ser exatamente o mesmo
todas as vezes, mas também poderíamos
fazer isso de forma aleatória Portanto, há variações
possíveis aleatórias e obteremos uma escolha aleatória entre as possíveis variações. Agora vamos voltar ao nosso objetivo. Primeiro de tudo, vamos fazer isso toda vez que toda a operação
aqui terminar, vamos teletransportar esse ator Então, vamos personalizar a chamada
e criar um novo evento. Evento personalizado. Vamos chamar isso de teleporte. E o que vamos fazer agora definir a transformação forma para o próprio ator, que é um novo valor de
transformação. E o que vamos fazer calcular os lugares onde vamos
colocá-lo todas as vezes. E nesse caso, acredito que de alguma forma consegui saber que é porque há um erro de compilação,
então ele não pode aparecer Lá embaixo, vamos remover isso. Assim, eu poderia calcular manualmente
o espaço aqui, o espaço aqui, espaço aqui e o espaço aqui e usar a planta para colocar
diretamente em locais
predefinidos Ou o que posso fazer é
acessar as formas básicas e descobrir que acredito que
existe um nó chamado target, a menos que
elas sejam removidas na versão
mais recente. Sim, nós o temos
aqui. Ponto alvo. O que podemos fazer, podemos
usar esse ponto alvo. E eu vou ligar para nós, temos
esse único ponto alvo aqui. Há uma marca aqui. É bem pequeno, mas
vamos até aqui do
outro lado da tela, e vamos pegar
outro desses,
colocá-lo de volta aqui e
movê-lo até aqui. Posteriormente
, organizaremos suas
localizações e colocaremos a última aqui. Agora temos quatro
pontos-alvo. Nós podemos definir. Podemos voltar ao nosso objetivo. Podemos criar um local de obtenção. Em primeiro lugar, vamos garantir que
tenhamos uma referência para eles. Então, alvo. Lance o ponto-alvo On e vamos
promovê-lo para variável. Ou agora, vou
remover isso. Vou converter
isso em matriz. Eu vou compilá-lo.
Vou adicionar quatro elementos. E depois que eu terminar de
adicionar quatro elementos, obteremos essa matriz,
obteremos um ponto de partida Vamos adicionar para
cada loop. Por enquanto, vamos
usá-lo apenas para testá-lo e vamos expor isso E o que faremos, selecionaremos o alvo. E devemos ter isso
como ponto alvo aqui. Vamos
selecioná-los um por um. Indo para o ponto alvo. Um, dois, três e quatro. Agora temos alvos
um, dois, três, quatro. Vamos salvar,
voltar e salvar novamente,
caso
consigamos transformar o ator
e colocá-lo aqui. E esse teleporte, por enquanto, apenas para fins de teste, vamos executá-lo
assim que o evento começar a jogar Acredito que o temos em cima, mas não o estamos usando. Dessa forma, podemos apenas testá-lo,
compilar, salvar e reiniciar o jogo Portanto, ele deve desaparecer
da nossa localização e aparecer aqui A razão pela qual ele aparece
no ar, em primeiro lugar, porque nosso alvo não está colidindo e vamos
fazer assim Agora vamos jogar novamente. Perfeito. E precisamos garantir que ele seja girado
da maneira correta E agora nós o temos. Ainda está um pouco no ar. Então, vamos arrastá-lo
pela parte alvo até o chão. Vamos ver se está tudo
bem agora e, se estiver, simplesmente, parece bom. Agora, vamos fazer a transformação
Z desse alvo. Vamos copiar. E vamos
aplicá-lo a todos os outros. Isso foi em torno de 75 705, então
eu apenas uso isso diretamente. Agora, precisamos ter certeza de que nossas rotações também
estão corretas Dessa forma, o que
podemos fazer é obter um específico
primeiro passando por um. Nesse caso, acho que
podemos apenas obter uma cópia. E se colocarmos
assim, ele sempre obterá o
primeiro na linha que já
temos. Então, vamos fazer um, que na verdade é o segundo, compilar, vamos jogar e
ver onde ele surgiu. Ele surgiu nessa direção. A transformação está
obviamente incorreta. Como tal, vamos clicar neste segundo e
girá-lo para a esquerda Então, a linha vermelha está desse lado. E vamos dar uma
olhada neste também, e
provavelmente será o mesmo, então vamos fazer. Então, vamos tentar com o
segundo, compilar, salvar e pressionar play Ok, eu cometi um erro.
Vamos tentar de novo. Vamos voltar. Parece bom. Agora, certifique-se de que temos
o mesmo para este, que é o número três. Compile, pressione play
e está funcionando bem. Inicialmente, coloquei isso
um pouco ao contrário,
para que não fosse acionado mas como
estamos movendo
demais, vamos
mantê-lo no meio Sim. Compile-o,
salve-o e pressione play Agora, vamos corrigir a lógica disso. E para não nos confundir, vamos fechar esta e ir
ao BPG e pegar aleatoriamente Interessante Item de matriz aleatória. Vamos garantir que seja sempre
aleatório. Vamos obter um elemento aleatório
desses quatro pontos a cada vez Nós já os predefinimos. Já temos as
rotações, etc. E o que
vamos fazer a seguir, obviamente, primeiro,
vamos testá-lo. Ele
desapareceu naquele local quando adicionamos o Evans Baking Play Precisamos acionar isso
chamando o evento de teleporte, e isso é bem fácil Vamos apenas ligar para o evento de
teleporte daqui Vamos chamar a
função Telepot. Vamos salvar o jogo
e, vamos ver, o temos
à nossa frente. Nós o colocamos. B três
bolas e um novo portão. E a seguir, o que vamos
fazer é
acessar nossa interface e chamar uma nova função e chamá-la de nova interessante. Novo andar ou dourado. Compile-o, salve-o. Isso
adicionará isso automaticamente a todos os atores com
a interface. Nesse caso,
queremos que eles estejam iluminados, então você pode simplesmente
clicar em qualquer luz acessar sua planta Expanda a interface. E em vez de localizar o alvo, vamos movê-lo e implementar um evento
chamado Nova meta. E o evento New goal
fará várias coisas. Em primeiro lugar, faremos com que
isso aconteça com uma nova meta. E vamos
atacar o novo portão. Mas primeiro, vamos até aqui. E depois que o teletransporte estiver concluído, pegaremos todos os atores com
a interface e os listaremos
aqui e chamaremos esse
evento de Nova mensagem de meta O alvo são todos os atores que
têm essa interface ativada. Agora, vamos testá-lo. No momento em que colocamos a bola, todas as luzes devem ficar vermelhas. Eles sabem. Agora, queremos que as luzes
mais próximas do novo portão se concentrem nele, para que
possamos mudar instantaneamente nosso foco para o novo portão. E o jeito que fazemos
é ir para a nossa luz. Não precisamos mais da lógica do L
Spanner. Aqui, se você se lembra, tínhamos essa funcionalidade em que tínhamos distância do jogador. Vamos copiar isso ou topcates e chamá-lo de
distância até Vamos compilar isso e
voltar para Avent Graft. Vamos usar essa
distância para chegar aqui. Do jeito que isso vai funcionar, precisamos colocar um
personagem aqui,
inicialmente, mas o que precisamos
fazer agora é pegar o ator. Poderíamos codificá-lo, mas,
como mencionei primeiro, não
queremos referências
físicas Então, o que vamos
fazer em vez disso, vamos usar o BPG
e, na interface, vamos adicionar uma entrada e vamos chamá-la target sorry, actor reference Vamos pegar a reprodução de
referência do objeto ator e chamar actor ref, compilá-la e salvá-la E se dermos uma
olhada em nossa meta de BP, agora
temos um teto de atores E, nesse caso, será eu mesmo. Como estamos recebendo uma nova referência, queremos
obter o portão em si. Voltamos à
planta da luz,
salvo ou não, voltamos
ao gráfico de eventos Se, por algum motivo, você
perder ou tiver
muitas opções aqui, basta fechá-las e encontrar o gráfico do evento aqui
no canto superior esquerdo. E na distância até o portão, precisamos de uma entrada. Então, vamos adicionar entradas. Minhas desculpas.
Vamos precisar de uma entrada, e vamos
chamar essa entrada de referência de
ator , referência de
ator. E essa nova
referência de ator será o portão. E se você voltar ao gráfico
aqui, o que vamos fazer,
obviamente, vamos
acionar isso para garantir que nossas cores aleatórias parem e
obtenhamos a cor vermelha por um segundo. E quando tudo isso acontecer, obteremos a meta do evento de referência Ni e a colocaremos no portão. Quem aciona esse
evento é o portão,
e o portão fará
referência a si mesmo, e a interface
transferirá essas informações para o nosso
evento aqui nas luzes Então, vamos
ter isso aqui. E o que mais
vamos fazer, vamos adicionar uma saída
adicional, e essa saída também será porta ou podemos realmente pular essa parte porque já temos a
referência no esquema Não há razão para
complicar demais. O que vamos fazer é nos
distanciar até o portão. E se a distância até o portão
for essencialmente por ramal, é
verdade, ou essa é uma distância de se
for menor que 2000, certo? Nós vamos colocar isso aqui. Então, se a distância entre e o portão
for menor que 2000, ele obterá esse valor, lingote, e esse lingote definirá se
está próximo ou E se for, obteremos
nosso nó-alvo definido, que acredito que
tínhamos aqui em algum lugar
na seção de jogadores. Defina a rotação do ator ou o
jogador distanciado depois de configurá-la? Sim. Fizemos isso
para obter a localização do ator. Ah, sim, nós não nos sentamos lá. Nós o definimos aqui e definiremos nossa nova meta que, a propósito, eu poderia ter encontrado uma nota, mas é sempre melhor ler seu plano Estabeleceremos nossa nova meta. Essencialmente, se
estiver perto o suficiente, definiremos nossa nova
meta no portão e realizaremos esse evento forma
semelhante ao
que tivemos aqui. Vamos definir nossa nova rotação e
obter nossa própria rotação. O que podemos fazer facilmente é duplicar
essa função também e fazer com que ela encontre a rotação da porta E adicione uma entrada aqui ou ator ou ator, chame-a de porta apenas para ter certeza de que inserimos apenas
a referência de marcha aqui, role para cima em nossa
função de marcha, rotação da porta Estabelecemos nossa meta. Nós o entendemos como referência Vamos fazer sua jogada pegar personagem
do jogador e
defini-lo como alvo. Você obterá a nova rotação dos
alvos. Não há
mais razão para configurá-lo, pois podemos obter isso Nesse caso, o eu aqui não está sendo
usado porque não precisávamos dele. E podemos copiar a lógica exata que
temos para a linha do tempo abaixo aqui para
a linha E vamos copiar isso Vamos
copiar este lugar aqui e
usá-lo desde o início. Nossas saídas serão A e B, e todo o resto
deve permanecer como está Por enquanto, vamos testá-lo. Nós fazemos isso. Nós colocamos isso. Ela explode. Os portões próximos deveriam se concentrar nisso,
mas não o fizeram. Vamos ver por que isso acontece. E vamos voltar ao nib print. Agora, isso é acionado. Isso
também é acionado. Nós acionamos isso. Definimos a geração de alvos
e a razão pela qual
isso continua sendo acionado e a razão pela qual é que
não estamos realmente impedindo que
isso aconteça Com isso, quero dizer o movimento
aleatório da luz. Precisamos adicionar essa nota
aqui e adicioná-la aqui. E se isso for falso, como dissemos aqui, isso não deve ser acionado, e isso só deve ser
acionado se for verdade. E, por padrão,
parece que vamos
verificar isso por precaução. Ok, isso não
está acontecendo atualmente. Vamos ver que minhas habilidades
superiores de jogo não brilharam por
aqui. Estamos ficando vermelhos. E esses atores estão olhando em direções diferentes das
que deveriam. Vamos ver o que está acontecendo aqui. Nossa saída A está aqui, que é nossa rotação atual. Oh, não precisamos fazer a rotação
dos alvos. Isso é um erro da minha parte. Vamos tentar de novo. E agora temos esse interessante
interativo. Temos a rotação B aqui. Vamos colocá-lo de lado e
temos uma rotação, que deve ser sua
própria rotação atual. Vamos dar uma olhada em nosso evento, da forma como ele acontece aqui. Pegamos nossos
valores de saída, A e B, colocamos e temos Alpha,
temos o rotador Alpha e obtemos a rotação do setter, da mesma forma que fazemos aqui A única diferença
seria que , quando o
atualizássemos e
terminássemos, precisamos ter
certeza de que voltou
a ser finalizado. Verdadeiro. E o cronograma
para isso é de 1 segundo. Vamos fazer isso em 3 segundos. Compile, salve e
volte ao gráfico de eventos.
24. UE5 FC08 02: Vamos dar uma olhada no
que há de errado com nosso projeto. Só
para verificar novamente. Temos esse
intervalo alvo quando é verdade,
ele deve parar de ser acionado, pois não queremos
aumentar, portanto, ele
não deve ser acionado Deve ser acionado como falso. E, na verdade, nada
deveria acontecer
e devemos
obter cores aleatórias, e devemos
obter cores aleatórias a menos que elas já
apareçam nos próximos 3 segundos. Aqui fazemos exatamente a mesma
coisa. Temos um atraso. Após o atraso serial,
ele cai novamente, então tudo isso pode funcionar
como antes. Vamos dar uma olhada em
nossa distância até o portão. É como deveria ser. Vamos dar uma olhada nisso,
e aqui está o problema. Precisamos colocá-lo
aqui também. Experimente e salve. Vamos ver se funciona agora. Só precisamos das luzes mais
próximas do portão para fixá-lo. O que eles fizeram, mas
demorou bastante. Isso pode ser principalmente porque temos muitos cronogramas em
execução ao mesmo tempo E embora jogar
desde o início seja bom, precisamos impedir esses outros eventos ou cronogramas sejam reproduzidos
quando fizermos isso, pois eles precisam ser
pausados ou Agora, a maneira de
fazer isso é garantir que, primeiro lugar, tenhamos uma
maneira de interagir com eles. Então, vamos adicionar uma sequência. E nessa sequência, vamos arrastar isso para dentro. Quando está tudo bem, basicamente, há um
novo alvo sendo localizado, primeiro
paramos todos os
cronogramas existentes E isso não deve acontecer
no evento para começar a jogar. Não. Isso deve acontecer no
evento, em vez de uma nova meta. Portanto, isso não deve acontecer aqui em dobras,
onde você vai fazer Por que eu removi isso? Podemos simplesmente
colocá-lo aqui por enquanto. Isso está muito desorganizado
no momento, mas não vamos perder
muito tempo com isso Vamos pegar isso e colocar aqui. Então, quando uma nova meta é acionada, essas duas são interrompidas
instantaneamente e, em vez disso, fazemos com que nossas luzes se concentrem
nas luzes. Então, vamos fazer isso. Eles aparecem. E vamos ver. Eles iniciam seu movimento
aleatório. Não, pois não adicionamos nenhuma informação
adicional. Então, primeiro de tudo, vamos
garantir que mais luzes possam bloquear a
Fox, pois
queremos que fique claro que
algo está acontecendo. Em seguida, depois de tudo isso ter sido finalizado e
terminarmos nossa jogada, precisamos
voltar à sequência zero aqui Vamos jogar e
ver de novo. Nós fazemos isso. Eu, vamos nos concentrar nisso. Agora, vamos alterar
algumas configurações novamente. Esse é um código muito
desorganizado, que organizaremos mais tarde Vamos dar uma olhada no
que nosso código faz. Pegamos nossas luzes, obtemos nossa rotação, etc., e lembramos que isso
ocorre por luz, então não é como se todas as luzes fossem afetadas ao
mesmo tempo Luzes que não estão próximas
o suficiente não devem ser afetadas, então precisamos mudar
o posicionamento para isso. Node se o alvo
for gerado e se a distância até o portão for
verdadeira, isso deve ser acionado E depois que isso interrompe
os outros dois, reaproveitamos isso e as luzes que estão próximas
ao novo portão devem
funcionar em vez disso Nosso portão se concentrou instantaneamente. Nesse caso, nossos
portões respondem aqui. Vamos ter certeza de que
estamos fazendo isso de novo. Também o reutilizaremos novamente, e o que faremos
é garantir apenas as luzes ao redor do portão estejam vermelhas
em vez de todas elas, pois não serve
para que todas sejam vermelhas Então, em vez disso, o que
vamos fazer nos mover quando isso é
acionado e quando o
gol é marcado,
quando o gol é marcado, todos
eles ficam acionado e quando o
gol é marcado, quando o gol é marcado, todos verdes
é meio legal Legal. É como torcer. E vamos
garantir que tenhamos tempo
suficiente para que as luzes
fiquem verdes quando marcarmos. Vamos ver as plantas. Vamos até nosso objetivo. E antes que o teletransporte aconteça, vamos adiar Atraso e temos 3
segundos de luz verde. Então, vamos fazer isso em 3
segundos também. Teleporte verde. Então, antes que o
evento de teletransporte seja convocado, que chamaremos assim e
tudo isso acontecerá, teremos 3 segundos
de luz verde Eu sou muito ruim nesse jogo. Vamos modificar a velocidade
do player um pouco mais tarde. E fazemos isso, 3
segundos de luz verde. Ele desaparece e,
depois de desaparecer, todas as luzes devem
se concentrar nele. Sim. Agora, vamos ver qual
é o problema aqui. Esse evento,
a distância até o portão, tem um erro, e vamos ver por que
esse erro aconteceu. Nosso evento de distância até o portão é chamado aqui. Mas para que isso seja funcional, não
temos
muito o que fazer. Então, vamos dar uma olhada no. O nó de acesso Roy Red
provavelmente é o portão. Menos de 2000, vamos ser leiloados. Então, eles estão tentando ler
o nodo chamado portão. E, a propósito, agora são
menos de 3.000, mas é pecado E em vez de menos de,
vamos ligar para ss. Esse é o valor
que ele está tentando ler. E se você der uma
olhada no gráfico,
o alvo após a criação da nova
meta, ele obtém uma referência
para a nova meta, e essa referência vai
da distância até o portão. E se estiver
mais próximo do que um determinado intervalo, primeiro, vamos garantir que
nossos valores de mudança de luz
realmente venham depois disso. Então, vamos guardar isso por enquanto e fazer com que esse nó de ramificação
esteja antes de tudo isso. Nós temos essa distância. Se for menor, continuamos e, a partir daí, vamos fazer isso e, a partir daqui, vamos para a sequência e essa sequência de operações
deve ser mais correta. Vamos testá-lo. Nós
temos isso, deixamos isso. Temos essa tela, uma, duas, três, ela desaparece Se estiverem próximos, devem mudar de cor e ficar vermelhos. Mas, por algum motivo,
eles não o fizeram Agora, vamos resolver todos os problemas que
temos com essa luz
e acabar com isso. A razão pela qual isso não está funcionando da maneira que
queremos é porque
há várias interações aqui mas não seguem a
sequência corretamente. Então, primeiro de tudo,
vamos
garantir que embora
precisemos começar a jogar um evento, não
queiramos que
esses nós venham de todos
os lugares todas as vezes. Então, em vez disso, vamos
clicar em evento constante. Que você pode simplesmente ligar. Vamos chamar de evento constante
e podemos simplesmente chamá-lo de reinício. Essencialmente, reinicie toda a
operação desde o
início. Isso será acionado toda
vez que a reinicialização for chamada, e podemos colocá-la aqui, por exemplo, art, call function. E vamos limpar bastante
nossa cena aqui. Temos esse gatilho de sequência e temos esse
gatilho de sequência a partir daqui, volte para nosso player distanciado Vamos garantir que isso em vez de ir
para nosso
player distante , seja reiniciado Então, vamos chamar essa
função aqui novamente. Podemos simplesmente copiar isso
e colar aqui. Então, quando tudo isso aqui termina e termina, testamos nossa distância
até o jogador e se tudo estiver
como deveria, reiniciamos toda a operação. Vamos dar uma olhada aqui novamente. Temos reinício,
temos uma sequência que se diferencia aqui, temos eventos que são executados E quando tudo isso terminar, reiniciaremos nosso nó Interrompemos esses dois eventos aqui. Mas em vez de usar isso
, podemos criar um evento personalizado. Pare e podemos controlar minhas biologias.
Podemos acabar com isso
até E em vez de ter esse nó, vá até aqui, o que
podemos fazer é removê-lo. É verdade, isso simplesmente segue. Usamos o nó de parada
para parar este e adicionamos uma sequência aqui. Paramos essa na parte superior e paramos
essa na parte inferior. Muito mais limpo. Código de espaguete Não temos mais nada que realmente
precisemos limpar aqui
na fileira de baixo, e podemos simplesmente
movê-lo um pouco. E aqui, vamos dar uma olhada. Estamos parando com isso
quando precisamos. Temos esse atraso que remonta à geração
aleatória. Em vez disso, vamos chamar nossa função de
reinicialização novamente. Então, para verificar. Há um atraso depois
que tudo termina e
reiniciamos tudo novamente e
depois reiniciamos tudo Vamos passar por todo
esse processo mais uma vez. Obteremos nossa nova cor aleatória. Isso acionará. Vamos garantir que tudo aqui esteja
dentro da seção de comentários. Temos ramificações duplas
para a distância até jogador e a distância se o novo alvo estiver
disponível ou não. Essa é apenas uma
maneira mais limpa de fazer isso, então não precisamos
ter esse pesadelo Poderíamos criar funções, etc., para compactá-lo ainda
mais, mas acredito que está tudo bem A propósito, você pode clicar com o
botão direito do mouse e clicar com o botão esquerdo do mouse
e clicar com o botão direito do mouse
e clicar com do
mouse para alterar
os níveis de zoom. E tudo aqui está bem. Agora, temos tudo organizado, mas vamos mudar alguma coisa. Devemos levar isso adiante. E vamos, por enquanto, destruir nossas referências
aqui e desanexar Vamos arrastar todo o nosso
larp, etc.,
rotação, tudo aqui, para o gráfico de eventos, Novo evento de meta E vamos usar nossa
variável alvo e defini-la aqui. Dessa forma, não precisamos
referenciar a interface
todas as vezes. Nós recebemos isso uma vez. E toda vez que precisamos dele, nós o pegamos
do set aqui, e fazemos isso aqui também. E quando jogamos, quando
terminamos de jogar, definimos o giro alvo
e reiniciamos E antes de
contornarmos as luzes, queremos deixá-las vermelhas. Como tal, vamos movê-los
para cá. E no canto direito, nós o movemos e
jogamos desde o início. E quando isso
terminar, novamente, temos como alvo girar, atrasar E acredito que
precisaremos modificar isso
novamente apenas para ter certeza. Mas vamos compilar.
Selecione pressione play. Vamos ver o que acontece. Nós movemos nossa bola, tudo fica verde. Recebemos bolas novas. Tudo está focando isso. Mas agora eles estão presos nela. A razão pela qual isso está acontecendo
é porque esse valor está aqui. Vamos ver o que acontece novamente. Nós o movemos de um lado para o outro. Eu sou um jogador muito ruim, então vamos jogá-lo
diretamente na frente dele. Nós explodimos tudo.
Tudo está verde, é acionado novamente. E nós os temos aqui, mas eles não têm
a cor correta. Então, isso ocorre parcialmente porque temos muitos nós
de reinicialização. Isso acontece quando
termina e são 3 segundos. Esse gatilho avança
e o próximo gatilho acontece no BPG, no BPLTe Se dermos uma olhada em
nossa meta de evento aqui, 3 segundos de atraso na
geração do alvo . Na verdade, isso não está
reativando Mas, em vez disso, isso tem um atraso. Então, em vez disso,
vamos remover isso. E nós removemos o galho aqui. Adicionamos esse atraso, mas depois disso, vamos adicionar
nosso nó de reinicialização, call. E aqui,
vamos garantir que nossa reinicialização não seja
chamada quando não precisarmos dela. Temos nossa filial
indo até aqui. Isso nunca deve ir
para um jogador distanciado. T deve ir para a filial inicialmente. E se for verdade, isso não
deve ser acionado. Ou vamos verificar novamente nosso ouro. Quando é falso,
isso deve ser acionado. Quando é verdade, não
deve ser acionado. E quando a radiação
e a geração aleatórias estão presentes, a rotação do
detector,
nós a atrasamos Estamos obtendo rotação de distância,
estamos passando. E quando obtivermos isso, vamos
remover isso daqui e adicionar nó de reinicialização
adicional aqui. Se for verdade, compile. Temos a sequência que interrompe essas duas linhas do tempo e,
depois que elas são interrompidas, elas não são
atualizadas em tempo real Dessa forma, podemos simplesmente
movê-lo um pouco. Estamos recebendo uma transferência
real
e, quando isso termina, ele verifica se está
perto do jogador ou não Se for falso, definimos
nossa rotação como padrão, o que não
precisamos mais fazer porque modificamos
nosso sistema de luz
e, se for falso, reiniciamos nosso sistema de iluminação. Então, vamos tentar novamente. Tudo está funcionando
como deveria. Quando estou perto das
luzes, elas apontam para mim, eu as coloco e vamos
ver como elas reagem novamente. Eles estão reagindo ao portão e
concentrando-o como deveriam. E depois que
terminar de jogar, eles devem começar a se movimentar. E a razão pela qual isso
não está acontecendo é porque não
estamos interrompendo essa operação em
nenhum momento. Então, estamos atualizando
e, quando terminar,
está reiniciando Mas precisamos definir o spawn
alvo falso antes de terminá-lo Você precisa ter certeza de
que está configurado para cair para que as luzes afetadas pelo portão possam voltar a
funcionar. Colocamos essa bola e
aproveitamos o momento. Desapareceu. As luzes estão olhando para ela e as luzes estão
funcionando novamente, mas agora temos um
problema de cores. Agora, vamos corrigir isso também e terminamos com
o sistema de iluminação. Quando a cor do evento é acionada, obtemos o spawn do nosso alvo e configuramos as luzes para verdes Vamos reafirmar isso. Fazemos isso,
um, dois, mas as luzes do jogador
alvo
mudam instantaneamente de cor. Agora, isso está acontecendo por
uma razão muito simples. Também temos nossa nota de reinício repetindo essa sequência de
cores aleatória Então, se simplesmente arrastarmos isso
daqui e colocarmos aqui, isso deve resolver todos os
nossos problemas restantes. Vamos fazer isso e obtemos luz verde e
nossa luz
verde está aqui, obtemos nossas
cores aleatórias e cores do portão. Agora, não estamos recuperando
nossas cores aleatórias. O motivo é que nenhum evento agora
está reativando a
obtenção de cores aleatórias, o que podemos
fazer facilmente sozinhos, garantindo quando essa sequência terminar e
terminar aqui, chamemos um evento que
inicia cores aleatórias Então, vamos chamar de evento personalizado. Chame-o de chamador aleatório B set. Novamente, não é o
melhor sentido de nomenclatura, mas vamos
continuar com ele E vamos chamar esse evento aqui no
topo, onde editamos nossa luz. E aqui, quando clicamos
na meta, nesse caso, não
precisamos, porque depois de acionarmos esse evento, colocamos esse evento no topo, então você simplesmente não pode
reiniciá-lo aqui, e ele deve funcionar bem. Nós acionamos isso,
as luzes nos seguem quando estamos perto. Os portões giram ali, as luzes
ficam vermelhas ao redor e eles se movem novamente. A luz verde aqui
permanece como deveria, porque depois que essa
luz verde é acionada sozinha, se eles não estiverem por perto, eles não serão reiniciados Portanto, precisamos adicionar essa redefinição de luz
verde aqui. Agora, se o adicionarmos diretamente, isso meio que o sobrescreverá É por isso que entender o sequenciamento no
blueprint é tão importante Você pode pensar: Ah,
eu já fiz isso, mas o sequenciamento
em si pode ser um problema Eles recebem cores aleatórias
e esta fica verde. Só para garantir que o
resto permaneça verde enquanto o verde está
sendo focado. Vamos fazer isso com um atraso de 6 segundos. Isso diz 3 segundos e
temos um atraso de três segundos
antes que isso comece. Portanto, as luzes que
não estão fechadas ficarão vermelhas. E só para ter certeza de que podemos ver definitivamente o verde meu vermelho. Vamos pegar o local
e definir a intensidade. Vamos reiniciá-lo. Novamente, geralmente
temos 40.000. Vamos fazer com que sejam 80.000. E vamos copiar isso novamente. E quando
terminarmos e estivermos fazendo tudo isso, voltaremos para 40.000 Então, quando
terminamos nossa operação e o evento no portão, nós os devolvemos. Vamos anotar isso. Nós o colocamos. Nós entendemos nossa
cor, enquanto a marcha. A
luminosidade da marcha aumentou, e vamos fazer com que nossa
redução de atentana Agora, a única coisa a
mudar é a cor em si. E não vamos
torná-lo vermelho brilhante, torná-lo vermelho mais escuro,
combinar, jogar, salvar E nós colocamos isso. Pegamos
nossas luzes, cadê nosso presente É nosso portão. Diferença,
mas isso deve ser suficiente. Poderíamos e acho que
devemos alterar o
nível de intensidade de lúmen padrão para esses 20, e vamos
reduzi-lo para que
não haja muitas luzes
caindo em cascata por todo E agora vamos tentar novamente. Temos essas luzes e, repente, temos luzes vermelhas aqui. E acho que poderíamos fazer com que as luzes
vermelhas permaneçam por mais tempo, mas, novamente, isso é apenas uma
questão de escolha neste momento, e eu não quero perder
mais tempo com a luz. Então, vamos parar randomizar tudo o que está
na luz aqui agora, e vamos usar comentários e outras coisas para
organizar o evento Então, marque luz verde. E esses
serão serão novos alvos. Vamos
fazer com que este seja vermelho. E esse verde. Vamos alterá-los, ver se temos mais alguma coisa. Temos nossa meta, seguimos a
meta ou, para ser mais específico. Siga claramente, temos nosso movimento aleatório de luz e nossa cor aleatória
para as luzes. E isso é suficiente. Temos nossos novos eventos, somos nossos distribuidores de eventos
que chamam esses eventos E agora vamos garantir que
tenhamos piscinas suficientes
na cena no
início do jogo. Então, o que
podemos fazer, podemos adicionar Não, podemos deixar
este no campo. A mensagem de erro foi porque a
referenciamos por padrão Nós realmente não
precisamos neste momento, mas podemos deixar isso
de lado. Não é problema. Então, vamos tê-lo aqui. Quero gerar várias bolas durante o início do evento. Então, vamos adicionar muito
mais bolas à cena. Só para ver a cena. E o que vou
fazer é porque adicionei muitos bolspwers
e não quero realmente
criar
um jogo equilibrado Também estamos fazendo isso para fins de
demonstração. Afinal, o que vou fazer é, em vez de fazer
esse evento N vezes, adicionar start
play e, ao começar a jogar, vou fazer N, essencialmente fazendo esse
evento três vezes. E no placar do gol do evento, vou reiniciar e fazer isso de novo. Então, logo
no início do jogo, isso gerará
muitas bolas para eu usar E se eu marcar um gol, o que é meio difícil para mim por algum motivo, vamos experimentar. Nós adicionamos essa bola e Bam.
Temos muito mais coragem. O que também podemos fazer é levar todos os nossos patrocinadores de bola aqui Clique com a tecla Shift e
coloque-os no ar. E acredito que vamos
centralizar isso um pouco mais. E agora eles
cairão do céu, e vamos adicioná-los
em uma pasta, chame-a de A underscore Spooners Não preciso usar
sublinhado nos nomes das pastas, mas é apenas uma força do hábito, e teremos
uma bola verde por vez e nossa
data inicial está aí, então podemos começar
colocando essas duas aqui e podemos começar nosso jogo lexis E quando começamos nosso jogo, temos muitas bolas
para contornar. Nós podemos movê-los. E
quando colocamos uma, obtemos ainda mais bolas, e as bolas não podem sair do campo porque temos uma
colisão lá E agora temos um jogo de gerar bolas
infinitamente
até você se afogar nela Agora, terminamos com os raios, os elementos de marcha e jogabilidade, as interações entre eles, e vamos interromper adições
de
jogabilidade neste
25. UE5 FC08 03: Agora, vamos falar sobre personagens em terceira pessoa e
o que podemos fazer com eles. Nesse caso, o personagem em terceira
pessoa é nosso modelo irreal que nos é
fornecido Vou explicar alguns
dos parâmetros que você pode adicionar a ele e alguns componentes úteis que podemos usar para nossos atores, e talvez possamos até colocar alguns como decoração
no rótulo. Se você voltar para
sua pasta de conteúdo, plantas em
terceira pessoa,
encontrará seu
personagem em terceira pessoa, abra-o E você notará que
há muitas coisas aqui sobre salto, movimento ações
aprimoradas de entrada, que não serão
explicadas neste curso, mas são uma nova maneira irreal de adicionar informações aos atores É um tópico para
o próximo curso. E aqui temos nossa
janela de visualização, nosso personagem, caixa de colisão de
nossos personagens ou o componente de cápsula, e nossa câmera que segue o personagem, nosso componente de
movimento do personagem Então é nisso que
vamos nos concentrar hoje. Temos um componente de
movimento de personagens aqui
e, se você der uma
olhada no painel de detalhes, verá muitas
coisas que podem ser úteis. Então, temos nossa aceleração. Temos nossa velocidade de movimento, velocidade de
natação, etc Não vamos nos
concentrar em cada um deles. O que precisamos é nossa velocidade. Portanto, temos uma velocidade máxima
de 500 no momento, que eu não acho particularmente alta o suficiente para navegar
nessa área enorme Parece muito lento.
Vamos aumentá-lo. Então, vamos aumentá-lo em, digamos, e torná-lo
1.500 e torná-lo 2.000 Vamos ver o jogo agora. Agora, nosso personagem está
se movendo muito mais rápido e talvez possamos
até marcar alguma coisa. E quando atingimos algo, nossa velocidade de movimento diminui um pouco, mas podemos pegar nossas
bolas e navegar por elas. Vamos tentar novamente. Agora podemos encontrar nossa marcha diferente e
fazê-la novamente para sim E podemos repetir isso
quantas vezes quisermos e preencher
toda a tela visível. Agora, você pode notar que agora temos uma velocidade
máxima de 20 k, conforme
eu coloquei anteriormente Mas se eu controlar Z e
colocá-lo de volta em 500 ou controlar Y
também, as diferenças
aqui são enormes. O fato de você poder simplesmente ir a
uma velocidade cada maior é porque temos uma
certa aceleração
e, a menos que eu bata em alguma coisa, ela cairá, diminuiremos
a velocidade máxima, digamos, vamos
dividi-la por dois. Acredito que esse número era
muito alto para nossos propósitos. Então, vamos ver, e ainda
temos uma velocidade alta o suficiente. Mas e se você quiser ter uma certa aceleração , mas não quiser atingir instantaneamente
a alta velocidade possível. É aqui que entra nossa
aceleração. E se você der uma
olhada em nossa aceleração, nossa aceleração máxima atualmente
é de 1.500 Se colocarmos em um número
maior, digamos,
5.000, compile e pressione play Obteremos uma velocidade de aumento instantânea, e ela aumentará cada mais até
atingirmos nossa velocidade máxima, que acredito que
já seja muito alta. Então, vamos colocar a aceleração 3.000 e garantir que nossa velocidade máxima não esteja nem
perto desse número ridículo Nós o reinicializamos, é muito lento, então vamos dizer o que
podemos fazer aqui? Por padrão? Creio que foram 500. E vamos multiplicar por
, digamos, seis. E nossa aceleração máxima
pode ser multiplicada por dois. Temos
opções adicionais aqui para gravidade, quanta gravidade deve ser
aplicada a esse personagem, poderíamos reduzi-la, o
que nos permitiria pular mais alto e nossa queda
seria mais lenta O que podemos fazer é
aumentar nossa velocidade de salto. Então, vamos dobrar nossa velocidade
de salto
e, digamos, triplicá-la Compile-o, pressione play, e agora temos um salto do Superman, e podemos realmente
pular fora dos limites, não é algo
que
eu gostaria Então, vamos reduzir nosso
salto em 300 (padrão e vamos fazer isso Etapa. Então, vamos voltar. Temos um salto alto. Eu
gostaria pular
alto o suficiente para
pular sobre as bolas, mas não alto o suficiente para que eu
possa sair do nível. Eu sempre poderia adicionar uma
bola ambulante no topo do nível, mas não vamos fazer isso, pois
limitamos propositalmente nosso salto Instância. Temos um
controle aéreo que nos permite ajustar quanto podemos
controlar o personagem enquanto ele se move, e temos muito mais
configurações para voar, nadar e interagir com a
física. E é nisso que eu
quero me concentrar. Temos um jogo em que
movemos objetos baseados na física. Então, vamos esconder todas essas opções que realmente
não precisamos. E vamos nos concentrar
apenas em nossa física. Como você pode ver, há muitas opções
aqui que levariam
uma eternidade para serem usadas. Então, vamos
pesquisar a física. E temos nossas opções de
interações físicas. Permitimos a interação
física, o que é verdade, precisamos dela. E o que temos para Alvin se
limita a um objeto físico. Então, quando atingimos um objeto ou colidimos
com ele, para ser específico, aplicamos uma força de 500 a ele Se aumentarmos para algo como 5.000,
compilar e jogar e interagirmos com um objeto, digamos que ele esteja recebendo muito mais força
aplicada do que antes E se adicionarmos uma quantidade
ridícula aqui, digamos que isso acontecerá,
elas
evaporarão instantaneamente no momento em que as
tocarmos, o
que pode parecer engraçado, que pode parecer engraçado, mas não é ideal quando tudo que você toca explode e cai no
esquecimento em Mas eu quero um impacto extra quando tocamos as esferas Dessa forma, vamos
apertar play e vamos ver. Nossa força agora é suficiente para arrastar várias bolas
ao mesmo tempo e
podemos simplesmente nos mover. E com nossa velocidade aumentada, podemos repetir isso
quantas palavras quisermos Agora, aqui
também podemos clicar nisso e, se aumentarmos a força
mínima de toque, essencialmente a quantidade
mínima de força que podemos aplicar a
algo como, digamos 2000 e digamos que também
seja nosso máximo agora. Se você compilar e pressionar play, teremos essa interação
estranha Na verdade, não estamos
fazendo muita diferença. Você pode se perguntar o que
é isso nesse caso. Essa é a quantidade
de força aplicada, não a força de impulso Dessa forma, não é
exatamente a mesma coisa. É um cálculo baseado
na quantidade de força. Se você está tentando adicionar força
adicional por quilograma, o que é útil para simulação
física, mas não é algo que
ajudará quando se trata empurrar objetos reais Vamos garantir que ainda tenhamos nossas opções ativadas
conforme queríamos e agora
sairemos desta seção. E vamos falar
brevemente sobre objetos,
componentes, componentes do ator
, para ficar claro. Então, já criamos alguns
projetos. E vamos criar mais um. E este que
vamos fazer de ator, vamos chamar de teste por enquanto, porque
não vamos mantê-lo. Vamos adicionar uma malha, e digamos que adicionamos
uma malha estática aqui, e podemos transformar essa malha estática em vamos fazer essa pirâmide Vamos também adicionar o
material para isso, porque não?
Nós compilamos isso E se você clicar em
Adicionar aqui na parte superior, encontrará muitos
componentes que você pode adicionar. Temos elementos de IA, temos sinais de áudio, temos formas adicionais,
câmera, braço de mola, etc Todos eles são muito úteis e têm suas próprias coberturas Mas o que vamos
falar aqui é movimento. Temos flutuação, enterro, movimento de projétil
e movimento rotativo Movimento de projétil quando
aplicado a um ator, vamos colocá-lo de
volta no nível Se você é um
movimento de projétil, aqui. Aplicado. Em seguida, vamos
para a velocidade do projeto, e digamos que a
velocidade do projeto seja 10.000. Vamos torná-lo um número
menor para que
possamos não ter
problemas em vê-lo, e a velocidade máxima é como 2000, mesmo ponto de antes, aceleração e velocidade máxima. E o que podemos fazer é desativar a gravidade
nisso, se quisermos ,
para que nunca tenha atração
gravitacional nem nada, mas vamos deixar
como está e pressionar simular Esses eventos nos
causarão muitos erros, pois não
há nenhum personagem de jogador, mas você deve ter notado que, vez de ficar em um só lugar, ele avançou. A razão pela qual essa economia é devido ao movimento do projétil Isso é
considerado um projétil. E se reduzirmos a escala de gravidade para zero,
compile e pressione play Isso simplesmente
avançará para o infinito pois não tem nenhuma
gravidade de projeto aplicada a ele, a menos que realmente atinja
algo e
se destrua como um projétil
que você precisaria
adicionar na
seção de planta do projétil Isso irá Isso é muito útil para
criar jogos, obviamente. Onde você quer
ter projéteis, balas, talvez algum tipo
de esfera ou objeto, se você estiver fazendo dois jogos D, não dois D como A, onde você quer ter alguns
atores interativos que você possa gerar e destruir
e eles precisam se mover Você pode usar apenas o movimento do
projétil. Agora, vamos dar uma olhada
na outra opção de movimento. Este é um movimento rotativo, e o que o
movimento rotativo faz é girar em
uma certa taxa em uma
determinada Então, se voltarmos ao nível
e vamos torná-lo maior, vamos torná-lo muito maior. E vamos apertar play. Você notará que ele está se
movendo em seu espaço. Você pode usar isso como
decoração no ambiente. Se você quiser que alguns
objetos simplesmente girem, ou você pode usá-los como
um elemento de jogabilidade Depende de você. Mas tudo o que isso faz é girar o
ator em um só lugar É mais comumente usado
para picapes, como moedas,
heltrops, kits de metanfetamina e outras coisas nos jogos em que você tem
essa picape
girando em um só lugar essa picape
girando em um só Isso pode ser usado para
evitar que você precise adicionar elementos
adicionais ao
seu projeto, a não ser
apenas o movimento de rotação
para girá-los E isso economiza tempo
para uma coisa muito simples, que geralmente leva muito mais tempo porque você
precisa chamar um evento que gira um objeto
em um determinado raio em uma direção,
em cada quadro do jogo Você pode simplesmente pular tudo
isso e adicionar isso. Portanto, se você precisar de algo para
girar em um só lugar,
use o movimento rotativo Em vez disso, você não precisa
usar matemática vetorial complicada. E isso é praticamente tudo o
que precisamos lembrar: o Unreal é uma ferramenta muito, muito cara
para desenvolvimento de jogos Tem de tudo. Tipo, tem tantas coisas sobre as quais nem falamos, nem mencionamos. Tentei cobrir o
máximo que pude, e vou reduzir ao
mínimo a complexidade. Mas todos vocês precisam começar
em algum lugar para aprender esse motor. E para seguir em frente, você precisa, antes de tudo, aprender esses conjuntos de habilidades muito básicas. E o mais importante é que você precise
entender como os atores, como o código, como tudo no mundo dos CDs interage
entre si Assim, você pode planejar seu caminho para o que você está realmente
tentando criar. Não comece com
ideias muito complexas. Mesmo as
coisas mais simples nos jogos
geralmente são um
processo complicado de integrar, e algumas
coisas muito complicadas podem, na verdade, ser simples. É contra-intuitivo
na maioria dos casos. A coisa mais difícil
nesse protótipo que fizemos foram, na verdade, as interações de
luz O fato de termos que
fazê-las tantas vezes em tantas variações é apenas uma prova de quão difíceis são
os sistemas de luz em todos os
jogos em geral Normalmente, você
nem gostaria de ter tantas luzes, pois
é inteligente em termos de desempenho E nesse nível, a coisa mais simples de fazer era na verdade, o próprio
elemento de jogabilidade, que era apenas empurrar as bolas para o portal e
fazê-las explodir No momento em que você adiciona alguma complexidade ao seu nível, pois várias luzes interagem com algum
outro ator, etc., o jogo de repente se torna uma tarefa
de
engenharia em que
você tenta garantir que não use muitos recursos, mas, ao
mesmo tempo,
está tentando criar
algo que tenha uma tenta garantir que não use muitos recursos, mas, ao
mesmo tempo, boa aparência, seja divertido e para todos os efeitos
e propósitos,
o jogo dos seus sonhos. Há muito mais para cobrir. Dessa forma, lançaremos cursos de
nível
intermediário e especializado no futuro. E também teremos cursos
individuais para
algumas disciplinas que
exigem que seus cursos
individuais passem por elas,
como material, iluminação por si só, animação, sobre a
qual nem falamos neste curso,
como criar animações, como aplicar animações, como fazer IA E por IA, quero dizer não apenas IA para movimentação dos
personagens no jogo,
mas também a própria IA, mas também a própria IA, como a programação
baseada em notas generativas de IA Você pode fazer muitas
coisas no Unreal,
além de jogos, você
pode fazer a produção de filmes Você pode fazer simulações por
motivos científicos, se quiser E o Unreal continua adicionando mais e mais funções
ao motor Portanto, sempre há novos
tópicos para explorar. E há uma infinidade de
oportunidades para você melhorar Lembre-se de que você não precisa saber
tudo de forma irreal Você precisa entender o irreal
a ponto de
poder trabalhar com ele Mas, a menos que você seja um desenvolvedor
independente de jogos ou esteja tentando ser
desenvolvedor de jogos, não
precisa conhecer
todos os aspectos do motor O que eu
recomendaria para você começar a aprender o básico. E depois de confiar no básico, comece a
experimentar. Tente criar algo interessante,
procure informações. Se você não entende
alguma coisa ou precisa de uma
orientação adequada para isso, sempre
ficaremos felizes em responder suas perguntas e fique à
vontade para conferir nossos
outros novos cursos Sempre haverá
mais para aprender. E, a certa altura, talvez
você precise decidir
se vai se especializar
em um determinado campo do motor e trabalhar
em equipe com outras pessoas
para desenvolver seu jogo, ou se vai analisar seu jogo e trabalhar nele sozinho Não abordamos o uso ativos do
mercado
neste curso, pois quero
usar o mínimo possível de
interferência externa. Porque quando você está aprendendo, é importante aprender o básico antes
de começar e baixar um material
mestre complicado que você nem
entenderá, mesmo que o veja Novamente, sinta-se à vontade para experimentar. Não há nada de errado nisso, mas certifique-se de que seus
princípios básicos sejam sólidos Meu nome é Al Jun
Ab lazade e estou feliz que você tenha
concluído meu curso, e estou feliz em ajudar
novos desenvolvedores de jogos e talvez apenas usuários casuais do
Unreal Engine melhorar seu E se você tiver alguma dúvida, sinta-se à vontade para perguntar
na seção de comentários, e eu ficaria
mais do que feliz em ver suas próprias criações, sem
motivo para ter vergonha Tudo o que você compartilha é
melhor do que nada. Obrigado pelo seu tempo e espero ver
todos vocês em minhas novas palestras Alguns tópicos adicionais para qualquer pessoa interessada
no desenvolvimento de jogos. Quando você está iniciando o processo de desenvolvimento do
jogo, pode
parecer muito
complicado, pode parecer muito assustador e
complicado, mas você não
precisa ter medo disso O processo de desenvolvimento do jogo é uma interação muito complexa de diferentes campos, como massa, criatividade e
representação artística de seu próprio gosto. Habilidades de codificação combinadas
com animação, modelagem , qualidades de
produção,
como planejamento , redação
de
histórias, há muitas coisas em um único jogo e, honestamente, o jogo
pode ser tão complexo e difícil quanto você quiser ou tão simples quanto
você quiser Você não precisa
criar um jogo difícil para aprender a fazer um jogo. É melhor começar
com algo pequeno. E a maior
razão pela qual muitos desenvolvedores de jogos estão
tendo muitos
problemas é um planejamento deficiente, escopo muito amplo e
a tentativa de fazer muitas coisas ao mesmo tempo E no processo
desse projeto, à medida que
desenvolvem esse jogo, eles perdem motivação,
perdem tempo, perdem dinheiro. E tudo isso faz
parte da jornada. Eles estão tentando o objetivo final
de ser um desenvolvedor de jogos, talvez lançando um jogo de muito sucesso
e ficando rico, ou você pode estar apenas
tentando criar um jogo sozinho ou gostaria de jogar
ou para outras pessoas para quem
gostaria de mostrar seu jogo Independentemente do seu raciocínio sobre o que você está tentando fazer, quando você começa a aprender
qualquer mecanismo de jogo, não se limitando especificamente ao Unreal
Engine, mas ainda aplicável, comece Escolha uma ideia simples, escolha um jogo simples, que você possa terminar em
idealmente alguns meses, no máximo meio ano, terminá-lo. Não precisa ser bom. Não precisa ser perfeito. Você pode ter quantos bugs
e erros quiser. Apenas certifique-se de que o jogo
tenha um início, um meio e um fim, e que tudo esteja mais ou menos
funcionando como deveria. E isso por si só é
uma grande conquista em que a maioria dos desenvolvedores de
jogos falha. Lançar um jogo, mesmo que seja ruim,
é uma conquista quando
você está fazendo isso sozinho. É um tópico diferente: se
você faz parte da empresa e é uma grande empresa
com centenas de trabalhadores, está tentando criar um jogo.
Esse é um tópico diferente. Mas quando você está aprendendo e onde está como desenvolvedor de jogos, não vá
imediatamente para MMORPGs, jogos
multijogador ou mecânicas excessivamente onde está como desenvolvedor de jogos, não vá
imediatamente para MMORPGs, jogos
multijogador ou mecânicas excessivamente
complicadas de seu jogo.
Basta começar de forma simples. Faça um jogo de terror, faça um Mio, faça um jogo de plataforma, o que pode ser complicado, mas mantenha as coisas simples O processo de desenvolvimento de jogos pode ser um dos
campos mais difíceis em geral, porque requer
muitas disciplinas que geralmente não
interagem umas com Você pode precisar de uma música muito jazzística para o jogo que tem em mente Mas você pode não ter as
habilidades necessárias para produzir essa música. Portanto, você terá que aprender a fazer essa música, além de como
fazer o jogo sozinho, ou talvez precise comprar ativos que nem sempre são
exatamente o que você deseja, que é a opção mais
razoável. Na maioria dos casos, encontre
alguém que possa fazer essa música e esteja disposto
a ajudá-lo em seu projeto. Você não precisa fazer isso sozinho. Você sempre pode conseguir que algumas
pessoas o ajudem. Pode custar dinheiro, a menos que
sejam seus amigos ou familiares. E você precisa se
lembrar de que, embora os jogos em si sejam divertidos jogar, fáceis de
ver e dizer
: Ah, você sabe, no próximo grande jogo, farei uma cópia melhor de um jogo já existente e o tornarei muito
melhor do que aquele. Vou pegar as mesmas
ideias, os mesmos princípios, torná-los um pouco mais diferentes, ser mais complexos
e torná-los maiores. Alguém já antes de mim, quão difícil pode ser? Essa é uma boa armadilha
para entrar. Você acha que é
fácil de fazer, mas, na realidade, há muito trabalho em segundo plano em muitos
jogos que parece simples. Você pode dar uma olhada nos jogos
mais simples que geralmente são jogos de
tiro da
implementação e jogos de terror Você tem um cara que
atira em outras pessoas, e você pode estar pensando: Ok, tudo que eu preciso é um cara
que se move, uma arma, uma bala E outras pessoas para escolher
o E você pode estar assumindo que isso é tudo que você
precisa. Em certo sentido, é. Mas quando você começar a
implementar isso em seu jogo enquanto
tenta
aprimorá-lo, notará
que muitas coisas não parecem certas. Você deveria ter ido, mas não parece
tão impressionante. Você olha para o ambiente, é algo que está
faltando nele. Isso ocorre porque
muitos detalhes em muitos jogos não são realmente aparentes
à primeira vista. Por exemplo, no exemplo
mais curto anterior que
acabei de mencionar, a arma pode ter uma
estrutura de impacto quando você atira nela. Pode ser o som.
Pode ser o VFX Pode ser o tremor da câmera que
você sente ao disparar a arma. O ambiente pode
precisar de mais vento, talvez algumas
presas adicionais ou variações nele IA pode parecer estúpida, pois eles estão apenas atacando você e atirando
enquanto estão
parados, enquanto um jogo
feito por profissionais pode ter uma IA que está
tentando se proteger ativamente e atirar em você de uma posição melhor ou
fugir de você quando
está com baixo ou alto HP. Infelizmente, há muitos
jogos que ignoram muitos
aspectos do jogo
apenas tentando copiar jogos já existentes Mas você não precisa copiar os
gêneros de jogos já existentes ou mesmo os elementos do jogo Sinta-se à vontade para experimentar
e fazer o que quiser. Não há nada
que impeça você de criar um jogo do tipo
Game of Thrones e todos
são atores sendo doces, pedras, pedras
ou rosquinhas,
para todos, nós nos importamos E você pode simplesmente pegar esse conceito estranho
e transformá-lo em um jogo Você pode transformá-lo em um jogo de tiro, você pode fazer um
RPG tático, etc Embora essa ideia que acabei de mencionar possa ser
complexa de implementar, não
há nenhuma
razão real pela qual você não possa, a não ser a
quantidade de esforço e
tempo que você investirá nela. Você tem total liberdade criativa para criar o que quiser. Não se limite a copiar um modelo ou o trabalho de
outra pessoa. Basta ser criativo. Apaixone-se pelo que você está
tentando fazer. Não tente copiar o trabalho de
outra pessoa. Isso não é uma escola. Isso não é um exame. Você não precisa
passar em uma determinada nota e não tem como fazer isso apenas copiando diretamente o trabalho de
outra pessoa. Você pode tentar melhorar o trabalho de
outra pessoa se
inspirando no
trabalho dela e
melhorando-o até o ponto que
agora não é mais o
trabalho dela, é o seu trabalho. E a próxima pessoa que
vai jogar um jogo vai olhar para o seu trabalho e
dizer: Isso é impressionante. Vou copiá-lo e eles
copiarão os elementos do seu jogo. E
provavelmente falharão porque
nada é original
na maioria dos casos. Para mantê-lo simples e
curto, seja criativo. Não tenha medo de experimentar. Não há motivo real para copiar e
colar o trabalho de outras pessoas. E não exagere no escopo seus projetos e simplesmente comece
algo e termine. E o primeiro
jogo que você terminar fazer parecerá muito diferente e
provavelmente não será bom. Pode não vender. Pode receber críticas negativas. Não leve isso a sério. Faça isso com uma
atitude profissional, melhore. Os críticos criticam e usam isso como combustível para
melhorar ainda mais seu jogo. Não desista no
meio do caminho. Você está embarcando em uma jornada muito longa. Mas acredito que vale a pena trilhar esse caminho e podemos percorrê-lo juntos Obrigado pelo seu tempo. Espero ver você na próxima palestra
e espero que, mesmo que
não esteja na palestra, eu veja seu
trabalho no futuro Dessa forma, sinta-se à vontade para compartilhar seus projetos
se estiver trabalhando em alguma ou apenas em uma amostra
nas plataformas sociais. E se você tiver alguma dúvida,
sinta-se à vontade para entrar em contato. Estou mais do que feliz em ajudar. Como colega desenvolvedor,
seria uma honra ajudar todos vocês a
criar algo interessante. Veja aqui e divirta-se.
26. UE5 01: Olá, e bem-vindo
de volta à palestra. Nesta palestra, vamos adicionar elementos de interface de usuário aos nossos jogos Então, neste jogo, atualmente, temos nossas bolas, temos nossos postes, mas na verdade
não temos pontos, HP
ou qualquer outro
elemento de interface de usuário na tela,
e vamos adicioná-los
com o sistema de widgets do Unreal Então, para fazer isso primeiro, vamos criar uma pasta. Vamos para a pasta de
chamadas do blueprint
e criar uma pasta de informações
e chamá-la de widgets Ou apenas um widget deve funcionar. Aqui, clicamos com o botão direito do mouse e
aqui vamos para a interface. Interface do usuário e clique
em Widget Blueprint. Vou chamá-lo apenas de sublinhado
do UI Widget, UI. Isso é tudo. Você receberá esse menu de widget, que é o
menu de designer do widget Você também tem um gráfico,
que é muito semelhante ao blueprint, com
pequenas diferenças Então, para entender
como o widget funciona, primeiro precisamos criar nossos elementos de
interface de usuário no widget E depois que esse
widget for criado, nós o anexaremos
ao nosso ponto de vista Então, nossa tela em uma
determinada posição. Agora, vamos decidir
primeiro o que
teremos como widget Por exemplo, vamos
adicionar uma pontuação de
quantos pontos marcamos. Vamos ver os pontos que marcamos. Conseguimos um ponto
para cada esfera, entramos no portão. Podemos criar um
widget para calcular nossa velocidade e nos mostrar a que
velocidade estamos correndo E, honestamente,
poderíamos fazer muito mais coisas. Talvez também possamos calcular o
tempo decorrido
e, na verdade, adicionar o final do
jogo a este minijogo Agora, primeiro de tudo, vamos adicionar essas coisas aqui. Agora que temos
essa interface de widget, vamos dar uma olhada nos
elementos do lado esquerdo Você pode notar que temos elementos que podem ser úteis para nossa interface de usuário. Portanto, temos controles deslizantes, temos imagens,
botões, etc Imagine isso sendo um
botão que você usaria. Então, digamos que ele possa ter um
texto chamado Iniciar. E quando você clica aqui, algo acontece, etc Por enquanto, vou
excluir isso. Você pode simplesmente colocar o
elemento desejado e colocá-lo onde quiser
na tela e codificar
a lógica para ele. Mas o melhor uso dos elementos
da interface do usuário é quando eles estão em um determinado
painel ou tela, se eles tiverem algo como uma lista de um inventário ou se você quiser que o widget seja movido de uma parte
da tela para outra Por exemplo, imagine algumas caixas de bate-papo em jogos
multijogador. E clique na caixa de
bate-papo e
mova-a para que isso seja possível, ela precisa ter um painel de widgets que você possa simplesmente mover E, obviamente, você
precisaria codificar como ele deveria
ser movido, mas não vamos nos aprofundar
muito no widget O widget de uso mais geral que temos é chamado de painel Canvas E o painel Canvas aqui tem
um desempenho bastante pesado. Provavelmente não é a melhor maneira de fazer isso se você estiver tentando
otimizar suas interfaces de usuário. Se você tem muitos elementos de interface de usuário em seu jogo e todos eles
estão usando painéis Canvas, e você está constantemente
atualizando todos eles, isso adicionará uma
quantidade surpreendente de custo ao uso da CPU. E pode até começar a
atrasar seu PC, etc., e você
pode se perguntar por que seu jogo está atrasado quando você otimizou Provavelmente é
porque você errou aqui ao colocar muitas
interfaces de usuário com painéis de tela Novamente, o
custo do desempenho não é muito alto, mas ainda assim pode ficar muito alto, dependendo
da complexidade que você o torna. Então, por enquanto,
vamos usar apenas o painel Canvas. E como você pode ver, temos esse painel Canvas, mas não
temos nada dentro. Por enquanto, vou redimensioná-lo. Vamos voltar ao nosso nível. Então,
vamos imaginar o que vamos precisar. Temos nosso personagem aqui, e temos nosso personagem,
e a propósito, se você pressionar F oito, você recuperará o mouse enquanto esse personagem ainda estiver
no meio do jogo. E se você clicar,
poderá mover as coisas. Então é simular, é uma
espécie de mistura entre
simular e simplesmente jogar Basta pressionar F oito depois de
iniciar a simulação. Então você pode testar coisas. E dessa forma, as referências ao personagem do jogador não serão interrompidas porque ele ainda existe. É só que não estamos
controlando isso no momento. Então agora temos nosso personagem, e tínhamos uma visão muito boa
dessa câmera, certo? E eu vou
apertar Fight. Só para que você possa ver meu mouse. Digamos que queremos um texto no canto superior direito que diga
quantas pontuações obtivemos
e, digamos, no
canto inferior direito, queremos ter um valor que mostre a rapidez com que
estamos nos movendo. No centro da
parte superior da tela, você também pode passar um tempo , só por
causa Então, eu posso te mostrar como criar widgets baseados na
segunda vez. Agora, agora devemos ter
uma ideia do que precisamos. Então, vamos criar nosso widget. Primeiro, vamos adicionar um bloco de texto aqui como espaço reservado por enquanto E vamos ver. Tudo o que precisaremos
realmente são caixas de texto, mas
também vou
adicionar uma imagem para
mostrar como usá-la Também poderíamos fazer uma barra de
progresso. Sim, vamos fazer uma mistura de todos eles, mesmo que seja desnecessário
para este minijogo que temos, só para que eu possa mostrar E vamos chamar esse bloco de texto. No canto superior direito, teremos
nossa pontuação, certo? Então, vamos marcar pontos. Por enquanto, isso é apenas um
espaço reservado. E digamos que
temos uma barra de progresso e, em vez disso,
vamos colocá-la aqui. Digamos que, se
alcançarmos a pontuação, obteremos uma barra de progresso. E digamos que quando
atingirmos a pontuação de dez, essa barra de progresso se
encherá e,
essencialmente, venceremos o jogo ou
cumpriremos a missão ou qualquer outra coisa. E essa imagem pode ser apenas
um elemento de interface de usuário que podemos usar, e vamos colocá-la aqui. Vamos apenas
tê-lo em uma determinada cor ou com uma determinada imagem
com alguns números. Então, precisaremos de um texto. E se eu arrastar e
soltar aqui, você notará que ela
não foi anexada à imagem porque, embora
as telas possam ter filhos, essa imagem em si
não pode ter Então, eu precisaria
colocá-lo perfeitamente em cima, de preferência. Ou eu precisaria,
mas talvez você não, dependendo do
tamanho da tela, isso possa ficar na posição certa. Então, se eu colocar um texto
aqui como espaço reservado, só vai mudar. 1 segundo Ah, sim, vamos mudar a cor do texto
para que você possa vê-lo. Se eu mover minha tela, o texto pode sair da
posição com bastante facilidade, especialmente se eu não colocar o painel
adequado em um painel adequado. Então, o que eu posso fazer é
criar uma caixa ou uma sobreposição. Então, eu posso adicionar uma sobreposição aqui. E dentro dessa sobreposição, posso adicionar essa imagem e posso adicionar essa caixa de texto Agora, essa sobreposição está atuando como uma borda para nosso
livro didático e nossa imagem, e vamos aumentar nossa Vamos colocá-lo no
centro. E vamos ver. Você pode notar algo
interessante aqui. Não consigo redimensioná-lo
diretamente com facilidade porque é muito pequeno Então, em vez disso, vamos fazer o que
podemos fazer, podemos clicar aqui
neste botão, preencher. Se você apenas
centralizá-la, essa imagem vazia que adicionamos
não tem uma imagem real dentro dela, então não há nenhuma referência
para ela obter. Então, o que você pode fazer é simplesmente
colocar isso como pano de fundo e ampliá-lo Esse bloco de texto pode
estar no meio. Poderíamos ampliá-lo, mas isso realmente
não ajuda
muito no texto,
e o colocamos diretamente de centro
a centro alinhando-o Poderíamos editar o preenchimento, etc., para fazer isso Por exemplo, se tivermos isso assim e adicionarmos
um preenchimento de 50, ele se moverá 500,
seria algo assim, mas não há
razão para fazer isso Se você quiser apenas
centralizá-lo, basta
centralizá-lo fazendo isso. E agora, isso sempre permanecerá no centro
desse widget de sobreposição,
e você pode simplesmente colocar esse widget de
sobreposição onde quisermos E esse
widget de sobreposição que vamos
usar pode ser selecionado e colocado exatamente onde
queremos que esteja Agora, eu gosto que minhas posições
sejam valores sólidos, vamos colocar assim. Agora, nosso bloco de texto
sempre estará aqui,
independentemente do tamanho, etc., da tela ou do dispositivo
com
o qual você está jogando, e tudo bem painel Canvas em si,
como você pode ver, é que colocamos esses widgets
fora dele, e eu cometi um erro ao
clicar em Eu deveria clicar na sobreposição em
vez de apenas na imagem, e vamos movê-los para Você pode verificar o
tamanho da tela especificamente se quiser aqui, se estiver tentando
combinar um tamanho de tela específico, ou pode simplesmente clicar no ajuste personalizado e
inserir,
por exemplo , 180,
54 como 180, certo? Portanto, esse é o
tamanho de tela que eu pretendo. Obviamente, posso simplesmente
clicar em Ajustar tela, que seria minha tela. E aqui na parte inferior, mostramos nossa escala de DPI, que você pode
configurar se quiser Mas não é necessário, então vamos pular essa parte e focar no
que estamos fazendo aqui Então, vamos voltar ao
que estamos fazendo. Temos nossa pontuação.
Temos nossa barra de progresso. Também podemos adicionar um tempo
depois disso, vamos pedir desculpas Por que estou arrastando isso
daqui? Eu preciso disso daqui. Ok, então vamos no
tempo decorrido aqui ou talvez para mantê-lo
limpo, vamos adicioná-lo Não, não, não, vamos fazer isso no meio da tela. Agora, temos Esta
será a nossa vez, então vou
mudar o nome por enquanto, então me lembro por que o
coloquei lá. Isso não vai ser. Você
pode colocar o conteúdo de seus contêineres
aqui a partir daqui e
modificá-los, sua posição. Sua cor, sua sombra, se precisarem de alguma imagem, há muitas coisas
aqui que você pode conferir. Você pode trocar o telefone. Você precisaria baixar telefones se quiser
seus telefones personalizados. Você pode usar
tipos de letra, etc., como tamanhos de letras em itálico, tudo o que quiser
alterar, você pode fazer isso aqui E sempre, você pode simplesmente
chamá-lo de “clique no tamanho do conteúdo”. Nesse caso, o tamanho do widget
corresponderá ao conteúdo, o que é importante se você tiver um widget com uma mecânica como clicar
no elemento do widget Digamos que você tenha um ícone. E se você quiser
clicar no ícone e quiser, digamos, arrastá-lo pelo inventário ou simplesmente ativá-lo ou qualquer outra coisa, talvez
queira apenas dimensionar o widget
para o conteúdo Dessa forma, o widget tem exatamente o
mesmo tamanho do que você vê. Obviamente, você poderia
fingir fazendo uma imagem transparente no
fundo torná-la maior, mas é por isso que
você faria essa bobagem, certo? Portanto, lembre-se de que essa é uma boa maneira de
garantir que o tamanho da sua interface
corresponda ao conteúdo. Então, desta vez, se eu adicionar
letras extras e por centro, agora meu widget é maior Ou seja, posso simplesmente pressionar
a parte X desse widget, e ele ainda
acionará o evento que criaremos para que seja
uma função ou qualquer outra coisa Agora, vamos voltar. Agora, temos nosso widget, que não está realmente
funcional no momento Então, vamos fazer isso. Primeiro de tudo, vamos garantir que
façamos algo com
essa tag de imagem aqui. Temos esse widget, que é apenas um pincel
de cor branca Não temos uma
imagem configurada para isso. Então, vamos selecionar uma
imagem ou textura aleatória que temos. Eu não tenho nenhum
widget carregado,
mas, honestamente, eu poderia
fazer isso com qualquer textura Então, vamos ver. Vamos
usar um widget irreal por enquanto Apenas usar o logotipo vermelho pode
não ser a melhor escolha. Vamos fazer isso, sim. E podemos mover isso aqui. Agora que penso
nisso, pode ser uma má ideia usar esse logotipo porque está
dificultando a visualização da textura. Vamos descobrir que você
também pode usar materiais, mas isso não funcionará. Você precisaria
criar um material de interface de usuário, sobre
o qual falaremos mais tarde. Então, por enquanto,
basta escolher essa cor. Basta escolher uma textura aleatória. E sim, vamos fazer isso. Textura estranha. Eu nem tenho certeza para que serve. Nós vamos usar isso. E temos essa barra de progresso aqui. A forma como a barra de progresso funciona é semelhante à esperada, mas você precisa inserir os
valores necessários para, você sabe, preencher o progresso. Em primeiro lugar, temos
a cor padrão
e a cor de preenchimento. E o que você
precisa fazer para fazer isso. Ok, vamos, por enquanto, remover isso. Fique de olho
nessa barra de progresso. Temos o progresso de 0%. Se eu aumentar isso, você verá que está aumentando
na tela aqui. Mas você pode notar que,
embora diga porcentagem, é o valor de zero, um, zero sendo zero,
um sendo 100%. Portanto, você não pode simplesmente
inserir um valor de 50%. Você precisaria
converter seu valor uma porcentagem e converter essa porcentagem
em um valor 010-1 e colocar o valor aqui dessa Eu vou te mostrar como
vincular valores mais tarde. Temos nossas opções, como queremos que nosso
progresso seja sentido. Então, digamos que o preenchimento
a partir do centro seja
algo assim. Cheio da horizontal. Esse pode ser um bom sistema não apenas
para pessoas que estão progredindo, mas também para a quantidade de barulho que
você está fazendo, se
quiser . Isso é
da vertical até a parte inferior. Obviamente, você pode alterar a
forma dessa barra de progresso, então você pode simplesmente
fazer algo
assim ou parar no final, obviamente. Vamos mantê-lo
da esquerda para a direita e vamos fazer com que seja do
jeito que era antes. Há outras
coisas que você pode fazer, mas não vamos nos
preocupar muito com elas. Poderíamos adicionar uma borda. Então, quanto da
barra de progresso pode ser preenchida, etc. Não vamos nos
preocupar com eles. Eu não gosto da cor
azul para isso. Vamos torná-lo vermelho. Por enquanto, talvez eu
deva torná-lo verde, mas vamos mantê-lo assim. E aqui temos nossa
pontuação e nosso tempo, e temos nosso
bloco de texto para velocidade Portanto, precisaremos
criar algumas
funcionalidades adicionais para que todas elas sejam
atualizadas no jogo. Os widgets podem ser
usados como elementos de menu,
podem ser como elementos de interface do usuário O objetivo deles é permitir que você acione algo,
algum código que
você pré-codificou, ou apenas mantê-lo atualizado e disponível para você como
fonte de informação, certo? Imagine um jogo simples,
como quanto HP você tem, quantas vidas você ainda tem, como
itens de inventário, início, menu de pausa, menu de
configurações, tudo o que é
interativo ou apenas fornecendo informações como um É um widget irreal. Então, temos isso, mas não temos nenhuma lógica
associada a eles. A razão é porque não os
criamos. Precisaremos criar
nossos elementos de interface do usuário. Desculpe, eu sou lógica. Primeiro de tudo, vamos remover esse evento E temos aqui a
pré-construção do evento e a construção do evento. É semelhante ao início do
evento, mas a diferença é que as interfaces de usuário precisam ser construídas
para funcionar. Então você pode perguntar quando
eu sou construído, isso
não
acontece automaticamente quando eu começo o jogo? Não. Então a resposta para isso é não. Ele precisa ser gerado e
anexado à tela,
essencialmente, à nossa
janela de visualização por meio E a forma mais comum de fazer isso é no personagem
do jogador. Então, se acessarmos nosso
conteúdo e usarmos nosso plano de terceira pessoa,
esse é o nosso personagem Só para ter certeza de que estou
vendo a planta correta, vou ampliá-la pressionar play. Sim, sou gigantesco Talvez esse seja o tamanho adequado. Então, estamos analisando
o modelo correto. Aqui, precisaríamos
adicionar um evento para criar nosso widget de interface de usuário e anexá-lo ao nosso painel de exibição, o que
faremos no próximo vídeo
27. UE5 02: Agora, vamos criar nosso widget. Vamos criá-lo aqui. Primeiro, encontramos um nó chamado
criar widget e adicionar a. Nós o juntamos. E aqui selecionamos o
widgit que criamos. Então, nós o chamamos underscore UI, não é
o melhor nome para isso, mas queremos
adicioná-lo ao início do evento. Então, vamos cortar isso. Eu
fiz o evento começar a jogar, e temos algumas
coisas acontecendo aqui, o que está tudo bem. Podemos simplesmente adicioná-lo apenas para garantir que não
estraguemos tudo. Podemos adicionar um nó sequenciador. Podemos colocar isso aqui, isso, e aqui podemos adicionar nossa lógica de
criação de widget de interface Assim que o jogo começa o jogo adiciona entradas padrão
ao personagem do jogador, que é apenas ter em mente isso foi criado pela Unreal, e o contexto de mapeamento e sistema de entrada
aprimorado farão parte
do curso intermediário no futuro Como há muitos detalhes, não
quero complicar demais
esse curso. Saiba que isso
aqui é responsável por garantir que suas entradas sejam registradas quando você
estiver jogando o jogo Então pulando, se movendo,
etc., tudo. Eles pegam seu subsistema local de
entradas aprimorado e adicionam o contexto de mapeamento a ele para que você possa trabalhar com Então, o que fazemos aqui, o jogo começa,
o jogador cria desculpas E a primeira sequência
faz a entrada e a segunda sequência
faz a janela de visualização E isso acontece instantaneamente, praticamente, então você
notará a diferença. Então, por enquanto, vamos compilar, salvar e pressionar play Nossa interface de usuário está
na verdade na tela. Mas você pode notar que está em uma posição meio
estranha. E isso ocorre porque
precisamos ajustar nosso designer de interface. Antes de tudo, vamos nos certificar de
ancorar nossos elementos Então, o que a ancoragem faz, ancoragem
garante que seus elementos permaneçam em uma determinada
parte da tela, e você pode fazer isso clicando
aqui e clicando no canto superior direito aqui e Ou você pode simplesmente clicar
aqui e clicar aqui. Portanto, essa pontuação agora está sempre
ancorada nesse ponto. Eu poderia movê-lo,
mas não adianta. Portanto, essa pontuação agora está sempre
ancorada nesse ponto. Vamos fazer isso com o nosso e eu quero que
seja de tamanho uniforme. Vou apenas dimensionar o conteúdo, torná-lo mais fácil de gerenciar. Então, os tamanhos aqui não
importam mais, pois o tamanho do conteúdo, e vamos fazer com
que seja em torno de 100 em Z, desculpe, X, e digamos 100, não quero que apareça totalmente na tela. Isso tem o mesmo problema. Precisamos ancorá-lo
em um determinado ponto. Então clique em Ancorar, clique
no canto superior direito e agora está ancorado no canto superior
direito Você pode se perguntar qual é
a diferença entre ancorar algo
e não ancorá-lo A diferença é que, se o tamanho da
tela for diferente, emergência é a tela do celular. Onde esse widget deve ser colocado em relação
ao tamanho da tela Então, se o canto da tela
estiver na linha certa aqui, tela do celular teria
uma cor diferente, vamos lá. Digamos que o tamanho do iPhone móvel,
em muitos casos, no momento em que o
mudei para o tamanho da tela do
celular, retirei
esse widget de interface do usuário da janela de visualização Então, se eu estivesse jogando isso em um celular, para ser mais específico,
eu pego o iPhone five S, esse widget não seria visto porque eu
não o ancorei de qualquer Mas esse widget aqui
se moveu junto com a tela porque está ancorado no canto superior direito da Esse é o objetivo da ancoragem. Você ancora seus widgets em uma parte específica
da tela Portanto, quando sua tela está
em tamanhos diferentes, claro, em dispositivos diferentes, ela sempre permanece em uma posição relativa a
essa parte da tela Portanto, se você quiser que algo
esteja sempre
no canto superior direito,
fixe-o no canto superior direito Se você quiser que algo esteja sempre
no centro
da tela,
fixe-o no centro Você tem opções aqui. Então, apenas faça isso. Agora,
vamos ver isso, por exemplo, e o que
vamos fazer, primeiro de tudo, vamos não
gostar do tamanho da tela, obviamente, então
vamos restaurar. E o que vamos fazer
é que você perceba que eu
realmente não consigo ancorar esse texto ou
essa imagem porque eles estão
dentro do painel de sobreposição Portanto, esse painel de sobreposição é o
que precisa ser ancorado, não os Então eu vou fazer isso no canto inferior direito. E, obviamente, quando
eu movo minha sobreposição, ela também move meu widget Vamos fazer isso -100 e menos 150. Na verdade, acho que
200 seria melhor. Agora, também vamos mover
isso para o mesmo lugar, para que possamos fazer
100. Talvez não. Pelo tamanho do conteúdo,
ele será muito pequeno porque não
tem seu tamanho real. Vamos fazer isso por 100 e zero. Não 100. E quanto a Y, vamos fazer com que seja 200. Na verdade, vamos fazer 400. E o tempo, queremos que ele seja
ancorado no centro, no topo, ou você pode
fazer assim Mas eu quero o
meio da parte superior, não a parte superior inteira. Então, eu vou fazer isso assim. Além disso, isso dá
uma boa indicação de onde está o centro
do nível, então eu posso simplesmente colocá-lo aqui. Eu poderia me posicionar em zero, zero, mas isso será na
âncora superior, o que não é o ideal Então, vamos movê-lo
assim, torná-lo 100. Vamos
dimensionar o conteúdo
e melhorá-lo em -50 a 25 Ok, agora eles estão posicionados
corretamente. Agora compilamos, salvamos, pressionamos play e nossos
widgets estão prontos Mas você pode notar que os
widgets não estão fazendo nada no momento
porque ainda
não adicionamos nenhuma lógica a eles. Fizemos tudo o que precisávamos aqui
no segmento de interface do usuário do widget, então vamos
salvá-lo por enquanto e sair Primeiro, precisamos entender
como isso vai funcionar. Esses dois estão essencialmente
tentando obter um valor semelhante e informações
semelhantes. Essa é uma
barra de progresso do total. Então, do que você gosta, digamos que você precise de dez pontos. Portanto, esse será um valor
percentual da sua pontuação atual
e um valor de dez. Então, digamos que você tenha
quatro pontos, quatro pontos. Isso deve estar em 40%. Então, esses dois exigem o mesmo valor
para fazer seus cálculos. Este requer velocidade. Então, nossa velocidade atual, que obteremos em um segundo E este é apenas o tempo
decorrido desde o início do jogo. Portanto, esse é um tempo Delta. Isso é velocidade, e
esses dois estão apenas procurando um valor que possam
usar para mostrar suas pontuações Agora, a forma como
marcamos foi
chutando uma
bola para este O que podemos fazer é algo
bem simples, na verdade. Poderíamos transmitir para essa interface de usuário. Essa interface está sempre disponível no nível porque faz parte da
sua interface principal, certo? Existem outras maneiras de
fazer isso para ficar bem claro. Você pode fazer isso dentro
do próprio widget, você pode adicionar a lógica aqui Mas a forma mais comum de marcar pontos e
calcular é fazendo o casting na interface do usuário
ou fazendo isso a partir do jogador, pois já temos uma referência a isso dentro do personagem do
jogador, que é o que
faremos quando adicionarmos nossa
interface ao personagem
do jogador Então, vamos adicionar uma interface. E acredito que a chamamos de
interface Tutorial BP. Oh, não, não, não. Minhas desculpas Esqueci o nome da
interface que estamos usando, então vamos garantir que eu
selecione a correta Há muitas interfaces
irreais. Vamos verificar. Se você
esqueceu como eu, qual era o nome
da planta Acabei de pegar a planta e verificar o nome
da interface Ok, então o gol do BPI. Ok. Vamos aqui
e adicionar nossa interface. o gol do BPI, compile, salve, e temos
nosso placar de gols aqui Então, o que vamos
fazer é quando a pontuação do gol acontece, evento chamado de pontuação. Vamos obter essa
referência do widget aqui. Então, para isso, vamos garantir que tenhamos
esse valor sempre à mão. Nós o chamamos de widget. UI de sublinhado. E vamos colocá-lo
aqui. E, obviamente, nós o configuramos também. Então, isso provavelmente é
feito ao contrário. Vamos configurá-lo e
depois de configurá-lo, pegar esse valor e
colocá-lo dessa forma. Obviamente, se você não tiver
certeza sobre seu código, é melhor testá-lo. Vamos voltar. Então, agora temos uma referência de widget
que podemos usar, certo? Então, pontuação da teleconferência do evento. Quando isso acontece, queremos que a pontuação mude
no widget de interface do usuário Então,
o que vamos fazer é voltar para nossa interface de usuário e ir para o modo de edição de
gráficos. Vamos deletar esses dois. Por enquanto, não
temos nenhum evento
planejado para o GameStar E aqui, vamos
criar uma variável e vamos
chamá-la de pontuação. E vamos
transformá-lo em valor flutuante ou valor inteiro,
dependendo do que precisamos, mas vamos torná-lo
flutuante neste caso Apenas mantenha as coisas simples.
E o que vai acontecer quando esse evento acontecer, evento chamado
pontuação, obteremos nosso valor, o valor da pontuação e mais um. Então, vamos obter essa pontuação e
defini-la em mais um. Obviamente, também precisamos obter sua pontuação. Então você poderia simplesmente fazer isso. Eu não acredito nisso,
há uma vantagem direta. Oh, não, nós? Como vamos fazer apenas mais
um, você pode fazer isso. Então,
o que isso faz em vez disso é
que, aliás, demorei muito
tempo para me deparar com isso. Não sei por que isso tornou
minha vida muito mais fácil. Então, se você apenas adicionar um e
colocar, defina isso aqui, certo? Além disso, pegar esse valor, adicionar um mais um ao valor
existente e
defini-lo também pode ser
feito por esse nó. Se tudo o que você está fazendo é adicionar um mais um a um valor flutuante, basta acompanhar algo ou qualquer outra coisa, você
pode simplesmente usar isso Isso adiciona um ao valor
da pontuação que já temos no widget e o
define como quer que seja Então, se for um, torna-se dois, se for dois, torna-se
três, etc Então, vamos pular
essa parte e, em vez disso, vamos definir esse
valor diretamente mais um E, obviamente,
precisaremos
testá-lo depois de termos
nossa funcionalidade. Agora, voltando ao nosso designer, vou mostrar como vincular
valores aos não valores,
minhas desculpas, variáveis
à lógica que você criou
28. UE5 03: Bem-vindo de volta.
Continuando de onde paramos. Por enquanto, vamos pegar o texto da pontuação aqui. E vincule esse texto
ao nosso valor flutuante. Então, a forma como a vinculação funciona é
você vincular esse texto aqui, ou
seja, em vez de
inserir manualmente esse
texto aqui, o que fazemos em vez disso, vamos apenas
substituí-lo por uma variável ou
algum outro resultado Então, no momento em que clico em Vincular, obtemos uma função
aqui chamada get text E você pode notar que
não há nada no gráfico de
eventos aqui, mas temos essa função. Esta função foi projetada
para funcionar apenas para esse tipo
específico de texto de partitura aqui. E é chamado de Obter
texto por padrão. Vai ficar confuso se tivermos vários textos get, então vamos
substituir o nome algo como Underscore score Bem, eu não preciso de
sublinhado aqui. Mas vamos obter pontuação e precisamos de um valor de retorno
na forma do texto. Temos nossa pontuação aqui, e o que vamos fazer é obter nossa pontuação. E esse valor de pontuação é automaticamente convertido
em texto e colocado na interface do usuário. Portanto, nosso valor de pontuação padrão
é zero, e vamos começar. Agora temos um zero na
parte superior da tela. Então, vamos garantir que eu possa alguma forma colocar uma
bola no portão. E mudou para um. Nossa marcha mudou
e agora são duas E agora podemos fazer isso novo e, desta vez,
serão três. Então, essa interface superior
agora mostra nossa pontuação, mas é apenas um número. Você pode querer,
vou adicionar outro widget que adiciona um texto que
diz: Ah, pontuação Então é como marcar dois pontos e o número que vem depois Isso é um erro comum. Como pessoas que não conhecem certos nós
nos widgets criam Em
vez disso, o que você precisa fazer é acrescentar. Minhas desculpas. Essa é essa. Sim. Então, precisamos acrescentar, mas precisamos ter certeza de que essa
é a função correta Então aqui está o texto. O que precisamos
acrescentar é uma string. Então, acrescente uma string. E colocamos esse A em B. Desculpe, colocamos esse valor em B e colocamos isso em
nosso valor de retorno aqui. E aqui para A,
anotamos a pontuação e pronto. O que isso faz é alterar o valor do texto
em valor de string, colocá-lo em B e, a partir daqui, colocamos esse valor e o
combinamos com uma
pontuação de texto, a string aqui , digitamos, e ela
retorna como texto após
convertê-la da string Vou explicar o motivo pelo qual
estamos fazendo isso depois de testá-lo. Então, agora temos
sublinhado zero. E se só então
obtivermos a pontuação um. Podemos fazer isso quantas
vezes quisermos e sempre
funcionará como deveria. Agora, você pode notar
que recebemos uma mensagem. Pegamos esse texto, o
convertemos em string e convertemos novamente em texto. A razão pela qual
fizemos isso é que, a menos que você altere isso para texto
primeiro, isso acontecerá. Se você alterá-lo para string, para string, e nós o
inserirmos diretamente aqui desta forma. Compile, pressione play. Você notará que
agora temos zero ponto zero. O valor flutuante, por padrão, tem um
ponto zero adicional depois dele, que é removido quando fazemos
isso por meio da conversão em texto Como eu não precisava do valor de
ponto zero, usei apenas o Lexis Também poderíamos, é claro, tentar fazer isso com valores
inteiros Por exemplo, se
você quiser criar, digamos, uma variável de
valor inteiro, vamos ter uma
variável de pontuação, certo? Então, se pegarmos isso e
, em vez disso, duplicarmos isso, remova o mais novo crie um valor inteiro e
insira o E para fins de teste, vou definir o valor
padrão para isso. Mais uma vez, obtenha o pré-padrão. Tudo bem. Alteramos esse valor para,
digamos, um, compilar E se eu tirar
uma corda dela,
como Cp, aperte play,
eu pego uma. O que talvez devêssemos
usar aqui com toda a honestidade, mas eu quero que você se
lembre da diferença Os valores flutuantes são
como se houvesse números
adicionais que você pode ter depois de zero,
como zero ponto em alguma coisa Valores inteiros são números
inteiros. Você não pode simplesmente
tê-los como zero ponto cinco. Ou um ponto cinco ou dois
pontos dois ou qualquer outra coisa. Então, neste caso, como estamos usando um sistema baseado em
pontuação, podemos simplesmente usar um
valor inteiro em vez de flutuante, e podemos pular Mas se seu jogo exigir um valor que precise
ser capaz de dividi-lo, multiplique-o, etc Então, se você vai
fazer algum tipo de operação em
massa
nela, por exemplo, você precisa de um valor de zero ponto dois ou cinco ponto sete
ou algo parecido, você não pode usar o
número inteiro como um todo Você precisaria usar float. E se você usa float, precisa ter certeza
de fazer isso dessa maneira, ou você sempre pode verificar
esses valores, certo? Então,
mostrarei novamente uma maneira de usar float, se você quiser, se
precisar usar float, mas não quiser
mostrar severamente os valores inteiros O que você pode fazer é reduzir
os dígitos fractais Pressionamos play e agora
não vemos nossos dígitos fractais, mas ainda é um valor flutuante Então, ainda estamos usando um flutuador, mas não temos mais um
ponto zero ou 20 ou qualquer outra coisa E você pode usar esse
mesmo valor para fazer outras operações e aplicar
o mesmo valor em outro
lugar sem bagunçar estética visual da
sua interface de usuário, onde você não quer que zero ponto zero,
etc., fractais Então, vamos remover esse número inteiro porque não
precisamos mais dele Vou mantê-lo como flutuador. Não há nenhuma razão real para não fazê-lo
e obviamente o
convertemos em flutuador, etc., mas ainda assim poderíamos colocá-lo
diretamente,
e ainda estaria tudo bem e ainda estaria tudo Portanto, não há ponto
um, nem ponto nada. E podemos simplesmente usá-lo como está
e colocar um. E, obviamente, queremos
que seja assim. E vamos nos manter um pouco
organizados. É uma linha simples. Vamos jogar, testar. Tudo está bem. Nossa função funciona. Oh, eu errei. Apenas para fins de teste, eu provavelmente deveria ter
feito portões maiores. Ok, sim,
funciona. Agora, essa é nossa lógica de widget
para esse widget, não
vemos mais aqui,
essa, a pontuação Você pode notar que está
muito pequeno no momento porque me certifiquei de que
é um conteúdo dimensionado, que eu gosto de fazer, a
menos que não precise, mas ainda assim isso
realmente não importa no nosso caso, então vou
mantê-lo léxico Mais fácil para mim. Em seguida, queremos
gerenciar esse. Progresso, barra de progresso. Não sei por que o
mudei de lugar. E nessa barra de progresso, usaremos o mesmo valor. Por valor, quero dizer o
valor assustador, o flutuador criado. Mas aqui não precisamos vincular o valor diretamente porque como expliquei
no vídeo anterior, estamos fazendo isso por progresso,
e nosso progresso é de 0 Então, se vincularmos
esse valor à pontuação, como fiz agora,
compilar e pressionar play momento, está em zero
e, no momento
em que eu marcar algum ponto, ele será preenchido até
o máximo, pois nosso valor de um significa 100%. Portanto, precisamos ter certeza de
criar uma nova ligação para isso. E essa nova encadernação
obterá nossa pontuação. E digamos que vamos criar
outro valor de fio dental e chamá-lo, digamos, de marcar gol Então essa é a pontuação que estamos tentando alcançar para terminar o jogo. Normalmente, você não faria
isso diretamente no widget. Você obteria esse valor no modo
de jogo ou em
outro lugar em que sua lógica ditasse quantos
pontos você precisa, mas não vamos aplicar vários níveis com várias lógicas, então vou
simplificar Precisamos de dez pontos para este jogo seja considerado
completo, como o nível terminado. E, como tal, o que
vamos fazer é
compilá-lo e colocar o valor padrão de
pontuação de gol em dez Agora, precisamos obter uma
porcentagem desse valor. Você pode tentar
pesquisar como porcentagem, mas isso é apenas um texto. Ele é convertido em texto. Então, o que vamos fazer
em vez disso é pegar nosso valor e
dividi-lo por pontuação. Desculpe, multiplique por
pontuação e divida por 100. Então, multiplicamos por pontuação, 100. Desculpe, multiplicamos por pontuação e dividimos por 100 Isso deve nos dar o valor. A menos que eu me
lembre mal de como a porcentagem funciona, isso deve nos dar o valor
de que precisamos Vamos testá-lo. Agora, toda vez que eu colocar
outra esfera, obterei mais uma
barra de progresso. Porque cada vez que eu
recebo uma pontuação, agora, ela me dá 10% da barra, que é exatamente o que queríamos. E se eu fosse bom nesse jogo, talvez fosse mais fácil. De qualquer forma, agora temos nosso
segundo widget funcionando. E a única coisa que realmente
fizemos foi adicionar esse cálculo de
porcentagem flutuante e adicionar uma variável
que é nosso objetivo final Podemos obter isso
do modo de jogo ou instância do
jogo ou de qualquer
ator que você esteja criando que
precise que algo aconteça ou que o widget reaja
de forma mais específica Mas isso não é necessário para o nosso minijogo, então
vamos deixar um set A seguir, vamos dar uma olhada aqui. Nós temos tempo. Se seu jogo tem elementos
relacionados ao tempo, digamos que você tenha
um jogo de corrida, tenha um mecanismo de interface de usuário que
precise
de algum tipo de
controle de tempo . É assim que
faremos isso no próximo vídeo
29. UE5 04: Bem vindo de volta. Neste vídeo, vamos converter
esse espaço reservado para widget que
temos aqui em um cronômetro real
que simplesmente Agora, o problema de fazer
isso é que o cronômetro é algo
que acontece a cada clique. Então, idealmente, você não
gostaria de ter muitas ações no cronômetro, porque se você acessar o
gráfico de eventos e obtivermos nossa marca, isso precisará ser acionado
essencialmente a cada segundo e atualizar nosso valor para o cronômetro, o
que, idealmente, não é
algo que você gostaria E se você estiver fazendo isso, qualquer forma, é melhor
provavelmente ter alguma
maneira de pará-lo, o processo de marcação quando
você não precisar dele ou opções
alternativas de marcação (se estiver relacionado a algum tipo de
evento ou algo assim). Para que você possa ativar desativar essa marcação, você pode até adicionar uma
linha do tempo se for apenas 10 segundos ou 20 segundos, para que você não precise se preocupar sobre Evan tomando
todas as vezes. Evan Ts acrescenta
que muitas coisas custam muito quando
são muitas. Agora, com
o propósito disso, vamos. Temos esse tempo aqui, e precisamos vincular isso E antes que eu esqueça, vamos nos
certificar de renomear
o anterior Pontuação G, obtenha porcentagem. Nós já fizemos isso. Então, vamos criar uma nova encadernação. Por esse tempo. E isso vai
para nossa nova encadernação, digamos que tenha decorrido o tempo O tempo passou. Agora, essa função
deve nos fornecer um valor de texto de um tempo
que já passou. Então, vamos
criar uma variável, chamar make sure it float after Vamos chamar isso de tempo, vamos convertê-lo em flutuante
e adicionar esse valor Precisamos atualizar nosso valor de tempo pelo
tempo do jogo em milissegundos. Então, vamos pegar o horário da Delta. E o que o Delta Time faz, Delta Ts é a quantidade de tempo decorrido após o início do jogo
essencial. Então, se você adicionar isso por
Delta Delta Time e definir, é
mais fácil fazer
assim e
configurá-lo e inserimos isso como um valor de texto.
Vamos ver o que acontece. 1 segundo. Contexto. Oh, essa não
é a hora correta do Delta. Precisamos de um horário Delta para
obter segundos Delta mundiais. O que é bastante confuso, pois seus nomes são tão semelhantes De qualquer forma, nosso
widget está muito alto. Vamos garantir que você
possa realmente ver isso. E vamos ver a posição ampla,
vamos colocá-la em algum lugar, Lex. Compile, pressione play. Então, agora temos um
tempo que está passando e continuará correndo Mas isso não é exatamente o que
queremos. Então,
o que vamos fazer é converter esse tempo segundos
de tempo em string. Isso o
converterá automaticamente para o formato de
minutos, etc Então, agora, segundos, minutos,
agora temos um horário no topo. Você também pode criar
um cronômetro de contagem regressiva, por exemplo, se quiser
ter, digamos, 20 segundos para marcar um ponto
e, se não marcar um ponto em segundos, você perde o jogo, etc., ou se quiser ter o máximo de tempo que eles possam passar
em um determinado nível,
você pode fazer isso da maneira Se você quiser fazer a contagem regressiva,
tudo o que você precisa fazer é subtrair esse valor,
lançá-lo em segundos e
aplicar esse valor em
vez tudo o que você precisa fazer é subtrair esse valor, lançá-lo em segundos e
aplicar esse valor E você precisaria definir um valor
padrão para o tempo no valor que
deseja que seja o máximo de segundos. Então, digamos que eu queira
ter 30 segundos no máximo. Então eu faço 30 segundos, e agora meu tempo está acabando, eu tenho apenas 22 segundos. Obviamente, não temos
nenhuma lógica aplicada
para realmente o
fim do jogo ou qualquer outra coisa, e realmente não queremos
isso nesse caso, então
vou removê-lo. E agora, o que poderíamos
fazer também é se você não quiser que seja tão
chocante de certa forma, se você não quiser esse
valor flutuante no final,
tudo o que precisamos fazer é fazer
a mesma coisa que mencionei
anteriormente Nós convertemos em vez de
usar valores flutuantes, usamos números inteiros, e vou
demonstrar um simples Vamos dar
tempo. convertê-lo em número inteiro Vamos colocar isso em um horário. E, na verdade, o que
podemos fazer em vez disso é converter isso em número inteiro Conversão. Oh, não é tão divertido. Vamos fazer isso.
Será mais rápido. E definimos esse valor
e colocamos esse valor como 2 segundos em uma string. Foi um erro estranho, mas
agora entendemos isso por segundo. Você pode perceber que
ainda não é o que queremos. Ainda temos pontos zeros. Então, o que podemos fazer em vez disso, podemos remover isso e remover
isso também, virar portas. Se você se lembra de nossa função
anterior, da forma como eu mostro,
temos isso aparente e tivemos que flutuar o texto Então, o que podemos fazer em vez disso, temos que digitar
uma string aqui de qualquer maneira, mas queremos que seja
de float para string O que você pode fazer é criar um acréscimo por, vamos apenas copiar nossos nós de acréscimo para que eu não precise digitá-lo Então, o que poderíamos fazer
é simplesmente acrescentar e fazer uma combinação
de anexos para ser como,
Oh, ok, esse primeiro valor de
tempo é minutos,
o segundo valor de tempo Com isso, precisaríamos
prendê-lo, dividi-lo. Toda vez que
chega a 60 segundos, você o define como zero e o coloca em um valor. Você pode fazer isso de várias maneiras. Se você não quer esse zero
, só para ficar claro. E, obviamente, se você
conhece C plus, você também pode editar a funcionalidade
Ciplus e criar uma em que ela faça
exatamente a mesma coisa, mas urnique menos dois valores E também podemos sempre
remover parte
da string para
que ela não tenha
nenhum valor fraturado Mas eu pessoalmente não me importo. Não me importo que o tempo
tenha milissegundos, especialmente se você é um corredor de
velocidade ou Vamos nos certificar de que colocamos nosso valor de
tempo de volta em zero. Começamos no tempo zero e excluímos nosso número inteiro,
compilamos e Agora temos um widget que nos
diz o tempo passado. Temos nossa barra de progresso, nossa pontuação total, todas
elas estão desalinhadas, Portanto, terei que alinhá-los se quiser
alguma clareza visual Então, vamos colocar 20 só um pouco. Eu quero que o ponto final
seja o mesmo que a pontuação. Sim, na verdade, bom o suficiente. Não é o ideal, mas
não precisa ser. Estamos apenas prototipando coisas. E agora temos nosso cronograma. Temos nossa pontuação. Temos nossa barra de progresso. Agora vamos mudar
nosso valor de velocidade. Agora, esse vai
ser um pouco diferente porque a velocidade que estamos obtendo é do personagem em
terceira pessoa. Então, o movimento que estamos tentando obter é a velocidade do personagem em
terceira pessoa Então, o que precisamos fazer, digamos, verificar se desculpe. Velocidade. Então, o que vamos fazer é
calcular a velocidade E, como você pode ver, não
é disso que precisamos. Essa não é uma
saída que possamos usar. Então, em vez disso, o que vamos
fazer Para todos os propósitos pretendidos, poderíamos facilmente obter
nossa velocidade atual personagem pessoal
de Sirt
dentro do projeto estelar Mas isso não é o que
queremos, na verdade. Em um jogo, normalmente você
teria algum tipo de valor em um jogo em que gostaria de ver sua velocidade . Por exemplo, se você
estiver dirigindo um carro ou se for um jogo você está calculando a
velocidade ou qualquer outra coisa, quando estiver voando, já
teria algum tipo de valor de
fio dental associado a ele
que ditaria velocidade com
que seu personagem
vai ou não Nesse caso, não o temos. Estamos apenas usando um sistema de movimento
básico irreal, e o que podemos fazer é
aumentar nossa velocidade Se eu disser 1 segundo, responda minha pergunta. Isso funciona como parâmetro, então também não está correto. Então,
vamos fazer o gráfico de eventos aqui. E no gráfico de eventos, a propósito, se você percebeu
que não usamos essa marca que tínhamos antes, certifique-se de excluí-la
se não precisar dela. Isso aumenta o custo apenas por existir. Vamos acelerar e
criar uma nova encadernação. E vamos
chamar isso de vinculação onde obteremos velocidade. Agora, a velocidade que estamos tentando obter pertence ao personagem do
jogador, e mostrarei como isso é
feito no próximo vídeo.
30. UE5 05: Bem vindo de volta. Agora,
continuando, estamos tentando obter um valor para nossa velocidade que teremos
aqui na parte inferior direita,
na parte superior do widget Precisamos obter a velocidade de
movimento do nosso personagem de terceiro jogador. E, como mostrei
no vídeo anterior, não
há uma
maneira direta de dizer
: Oh, me dê a velocidade do movimento. Precisamos
passar por alguns cocôs e vou movê-los do personagem de terceira pessoa
para o próprio widget Então, se eu quiser modificar as propriedades do
widget, posso simplesmente fazer isso a partir do widget O que vamos fazer é obter o personagem do jogador. E a razão pela qual estamos comprando esse personagem é porque estamos tentando encontrar uma velocidade para o personagem do
jogador. Se você estivesse
tentando pegar algum tipo de inimigo ou objeto no nível, o ideal seria obter
o valor diretamente desse objeto e,
de alguma forma,
transferi-lo para o widget via interface ou modo de jogo Por exemplo, se for necessário, geralmente não é uma boa ideia que todos esses cálculos aconteçam
constantemente, a menos que
sejam parte integrante do seu jogo Você provavelmente não deveria fazer isso. Novamente, é muito caro
para um retorno muito pequeno. Mas, novamente, em alguns jogos é
necessário, então você faz isso. Então, precisamos da velocidade do nosso jogador, então estamos obtendo nosso personagem de
jogador, e o que precisamos
é de sua velocidade Se obtivermos velocidade e tivermos aqui na parte
inferior, obtenha velocidade E se simplesmente o
colocarmos em retorno
e compilarmos, pressione play, você verá que estamos
obtendo valores XYZ porque a velocidade geralmente é boa, geralmente
não
é calculada Estamos nos movendo a uma
certa velocidade, X em XY ou Z no mundo dos três D. Mas não é
disso que precisamos. Como se não quiséssemos colocar
nosso XYZ na janela de exibição. Então, o que
precisamos fazer é obter um link vetorial. E agora esse valor é a nossa velocidade. Vamos ver, aperte play. E agora, essa é a nossa velocidade. Você pode estar se perguntando
por que está ficando preso em 3.000 e por que está se
movendo mais devagar, subindo Em primeiro lugar, temos um valor fractal no
final, o que é normal, mas você também pode notar que
temos uma velocidade máxima de 3.000, e isso acontece por causa
da planta, do movimento do
personagem
e da velocidade máxima enviamos anteriormente Portanto, nossa velocidade máxima de vax é 3.000. Tem 3.000 centímetros. É essencialmente
30 metros/segundo. Agora, não queremos que seja colocado
diretamente
nesse tipo de valor. Então, o que vamos
fazer em vez disso, vamos
convertê-lo em texto em texto. Vamos garantir que não
tenhamos fractais. Não os quero
na minha interface de usuário para acelerar. E por si só,
antes mesmo de fazermos isso, dividirei esse valor por 100 porque não quero que minha velocidade seja
mostrada em centímetros. Eu quero que isso importe. Agora, o que isso vai nos
dar é um valor de um a 30 sendo nossa velocidade. Às vezes, sobe um
pouco porque estou voando e outras coisas, mas
isso é compreensível Isso é apenas calcular
minha velocidade total. Então, agora
vamos fazer algo que já
fizemos no anterior. Vamos acrescentar
Vamos acrescentar o
valor e depois do valor, vamos adicionar, vamos fazer menos E vou adicionar
espaço extra ao espaçamento. Eu vou colocá-lo de volta. Vou compilá-lo,
salvá-lo e pressionar play. E agora eu tenho um widget
que me diz minha velocidade. Há muito mais que você
pode fazer com widgets. Portanto, os widgets também agem
como elementos do menu. Então, se você quiser
clicar em um botão ou, você sabe, gerenciar seu inventário, verificar o mapa,
clicar nos elementos do mapa,
etc., nos jogos, você precisaria de algum tipo de interatividade com E normalmente criamos widgets
diferentes
e os aplicamos, os
removemos da cena como tela conforme necessário ou
removendo o widget Então, por exemplo, temos nosso widget aqui,
criamos esse widget Também poderíamos
eliminar o widget. Então, Widget, se você acessar
os comandos do widget aqui. Você removeu do pai, você pode usá-lo para simplesmente removê-lo ou definir a visibilidade como invisível ou simplesmente movê-lo para
fora da tela. Idealmente, se for um widget que consome CPU, etc., você gostaria de
removê-lo completamente Então, remova e, se você ler a descrição, ela a removerá de
tudo, essencialmente. Está sendo removido do
contêiner, etc. A menos que você precise, você provavelmente deve removê-lo. E no nosso caso, esse widget é algo que deve
permanecer sempre na tela Se quiser
ocultar certos elementos
do widget, você pode fazer isso
dentro do
próprio widget adicionando algumas chamadas, etc., acessando
o widget e chamando o widget e Temos nossa referência de
interface de usuário de widget aqui. Então, se eu quiser, digamos, obter uma determinada função. Vamos tomar aquele por um tempo. Então, temos o
tempo de co-função decorrido. Assim, você pode acessar
o elemento do widget,
como a funcionalidade, de
acordo com a referência que
temos aqui quando
criamos o widget Assim, você sempre pode
gerenciar os elementos do widget, destacar partes específicas dele ou elementos apenas transmitindo para Desculpe, apenas usando
a referência dele. Agora, se você quiser clicar em criar algum tipo
de interatividade aqui, o que precisaríamos
fazer é, por exemplo, adicionar uma parte inferior. Vou
adicionar um botão aqui E nesse botão, eu adicionaria um evento
chamado On clicked Então, quando esse botão é clicado, algo deve acontecer Então, eu vou apenas
fazer uma sequência de caracteres impressa. E aqui vamos nós. E eu quero que ele diga olá
quando eu clicar neste botão. Compile, PrescoPlay, pressione play
e, como você pode ver,
eu posso clicar nele Mas quando eu começo meu jogo, eu perdia a entrada do mouse. A razão pela qual
consegui clicar nele é que quando eu jogo, eu
ainda tinha meu mouse, mas você não teria esse
mouse quando realmente começasse o jogo se estivesse jogando
com um teclado, etc., porque isso
só funcionará dentro do Unreal Editor
até eu clicar nele E agora, se eu quiser
clicar no widget novamente, preciso do Fight e
clicar aqui Mas não é assim que
funcionaria no jogo, especialmente se for um widget que aparece no
meio do Para garantir que você possa realmente clicar nisso,
o que você faria, os widgets que exigem que
você possa clicar teriam um evento
que permitiria que você
clicasse nele Então, adicionarei um evento chamado Construct me e minha miserável construção de evento de
digitação O que isso faz é acionado quando o
widget é criado Isso não deve, de forma
alguma, fazer parte dos elementos
do widget de interface do usuário Estou apenas mostrando aqui para que
você saiba como é feito. Idealmente, você criaria
isso em um widget diferente. Então, quando o evento é contratado, obtemos o controlador do jogador Vamos movê-lo. E e coloque o mouse em Esperar. Não é isso. Minhas desculpas Precisamos obter o
controlador do player a partir disso, não dos bits de execução. Isso é apenas uma função pura. E aqui, o que
fazemos é obter o cursor do mouse. E nós fazemos isso e compilamos, pressionamos e pressionamos play Então, agora, enquanto esse widget está
na tela ou não, enquanto ele está
começando a ser criado, ainda
tenho minhas entradas
disponíveis para mim no meu teclado, mas também posso clicar nesse botão e criar
o botão Hello Mas, obviamente, imagine isso
sendo um inventário ou um mapa, etc., e você não quer que ele esteja constantemente
na tela, correto Portanto, você gostaria de
desativar essa entrada do mouse e remover esse elemento
do widget da tela Então, primeiro de tudo, vamos ancorar isso para que não fique no
meio da tela Sim, muito melhor. Então, quando eu pressiono play agora, agora
é o canto inferior direito. Primeiro, agora que está pronto, vamos usar esse widget E sabemos que esse widget
é nosso Botão 01. Vamos até o nosso Botão
01 e aqui está. Em vez de vender olá, vamos ver
o que podemos fazer com isso. Isso é apenas um widget, então
podemos, eu acho, removê-lo. Sim. Então, vamos ver o que
acontece quando clicamos nele agora, quando o removemos do
pai e ele desaparece. Mas ainda temos o mouse
no meio da tela,
obviamente, isso é uma solução
muito fácil. Pegamos esse cursor do mouse
e o configuramos para fs. E o alvo deve ser o
controlador do jogador, obviamente. E quando pressionamos Play agora e clicamos nesse botão,
ele agora desaparece Agora, isso é útil quando
você tem, digamos, uma interface de usuário na qual deseja clicar e que
tem algo como, digamos, quando você
tem um determinado item, ele aparece na sua interface do usuário. Você clica nele, você o consome
e ele desaparece. Obviamente, você pode escrever toda a lógica, como: Ah, se você não tem mais
esse item, remova-o
ou, se quiser tempo passou, ele expirou Depende de você. Você pode criar
o que quiser com ele. Mas eu pessoalmente não preciso dessa funcionalidade neste. E, como tal, eu
removi tudo isso. Mas tenha em mente. É assim que você pode criar
seus elementos de menu. Você pode colocar um texto, você
pode clicar nos botões. Você pode adicionar uma grade
, ou seja, se você
acessar nosso Canvas aqui, temos nosso
painel de grade, por exemplo. E dentro desse painel de grade, posso adicionar várias outras coisas. Então eu posso adicionar o botão um, botão dois, botão três É difícil ver agora, mas você verá em um segundo. E eu vou apenas avaliá-los. Eu posso colocá-los em fileiras. E agora eu tenho quatro botões. Em uma fileira diferente. Eu posso
movê-los se eu quiser. Como você pode ver. Agora, se você quiser que seu tamanho
seja maior, etc., basta fazer isso
no painel de grade, vamos dimensionar o
conteúdo em si Então, será apenas
o tamanho do conteúdo
ou, em vez disso, você pode acessar seus botões e, a
partir dos botões, alterar a forma como
eles são acolchoados, desaparecem, etc E você não está se limitando
a apenas adicionar botões. Você também pode adicionar uma
imagem aqui. E se sua imagem for, digamos, Espere.
Isso não é imagem. Essa é uma imagem HDR. Meu biólogo. Vamos apenas adicionar
uma textura, uma textura regular. E essa textura é muito grande, então de repente está cobrindo todo
o widget Você pode reduzir o tamanho. Se você quiser, e no meu caso, eu não quero nenhuma imagem, então vou
pular os botões Se eu for ao painel de grade, você verá
que temos nosso tamanho aqui. Vou aumentar o
tamanho para algo assim, e podemos
posicioná-lo onde você quiser. Vou ancorar
no canto inferior esquerdo por enquanto e posicioná-lo 000 e depois movê-lo como eu quiser, algo como
aqui, o que é bom Agora podemos clicar nos botões. Podemos mudar suas
cores se quisermos. Eu entendo que é
meio difícil ver daqui , então temos nossas colunas. Temos nossas linhas onde
queremos que isso seja colocado. E tenha em mente que
isso é uma grade. Então, esse
é um sistema baseado em grade, e há
botões na grade. Se você quiser elementos de menu mais alinhados com o
que você está acostumado, o que você pode fazer é 1 segundo. Eu acredito que foi esse. E se eu adicionar botões aqui, sim. Se eu adicionar botões aqui. Agora, eu quero que eles sejam
horizontais, não verticais,
então, desculpe, eu os quero
verticais, não horizontais. Agora eu os tenho na horizontal. Não, eu só vou
colar essa parte inferior. E agora eu tenho cinco espaços de elementos de
interface dentro dessa sobreposição, e posso adicionar textos em cima
deles se eu quiser fazer cada um E digamos que este seja
o início do jogo. Sim, não é Star Game, você entendeu. Opções, saia do jogo, como extras, etc., o que quiser
da sua caixa Stack de jogos Sinta-se à vontade para experimentar. Há muitas
coisas que você pode fazer. Imagine qualquer jogo que você
já jogou ou viu, lá seus olhos e
tente pensar em como
eles fizeram isso acontecer. Como eles? Como você
usaria o
sistema de widgets no Unreal para obter os mesmos resultados e se faria
sentido que eles estivessem
no mesmo widget ou parte
de um widget Além disso, lembre-se de que você pode adicionar outros widgets
aos seus widgets Então, se você tiver um widget
diferente, que vamos
criar em um segundo Novamente, apenas para fins de
demonstração, na verdade não
vou clicar
e criar um widget, mas vamos chamar o widget do
usuário e Isso é só SS, só para que
eu possa encontrá-lo facilmente. E aqui, se eu quiser
adicionar um widget, eu poderia simplesmente adicioná-lo aqui E eu tenho meu widget SS aqui. E se eu abrir meu widget SS agora, e neste aqui, eu adicionar um painel, vou
adicionar uma tela só
porque é mais rápido E eu vou adicionar uma
imagem ou, na verdade, um texto. Vou ancorar o
centro do texto e apenas digitar o texto, compilar, pressionar salvar, vamos jogar E você pode não estar no
canto superior esquerdo, eu tenho SSSS. Eu o ancorei aqui. Você pode
perguntar por que não está aqui, e no canto superior esquerdo, garota,
eu não o ancorei Eu também o ancoro aqui no
centro e o posiciono Então, veja agora, eu tenho um widget dentro de um widget, que é útil quando você tem sistema de
inventário ou algum tipo de menu que se sobrepõe, como um menu com Isso é muito útil. Além disso, permite codificá-los independentemente um do outro e você pode removê-los
quando não forem necessários,
etc., ou se alguns widgets forem específicos para determinados níveis, você pode usá-los lá e
removê-los posteriormente Existem várias maneiras de
usar seus widgets, e o sistema de widgets em
geral é muito caro Como se houvesse muitas
coisas aqui que você pode usar, mas você só
precisaria testá-las para ver
o que deseja fazer. E não há uma
solução única para todas. Você pode adicionar um círculo
, etc., que é apenas um bom
widget. Eu gosto de usar. Você pode usar isso como tela de
carregamento ou qualquer outra coisa. Você pode adicionar mais
elementos, menos elementos. Por exemplo, imagine que você faz um
jogo e a quantidade de pontos representa a
quantidade de HPs que você tem Você pode simplesmente
aumentá-los ou diminuir a quantidade com a
quantidade de HB que você tem Há muita coisa que você pode fazer.
A imaginação não tem limitações, então fique à vontade para experimentar. Isso será tudo para a introdução do
widget
neste curso básico. Teremos uma explicação mais
aprofundada sobre widgets e como criar elementos de
jogo complicados
no curso intermediário, que será lançado no futuro Espero que você tenha aprendido alguma coisa e aproveite seu tempo aqui. Se você tiver alguma dúvida,
sinta-se à vontade para entrar em contato. Eu farei o meu melhor para ajudá-lo. Obrigado e espero que
você tenha um bom dia.