Unreal Engine 5 — curso para iniciantes | 3D College | Skillshare

Velocidade de reprodução


1.0x


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

Unreal Engine 5 — curso para iniciantes

teacher avatar 3D College, A perfect place to grow!

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação

      2:52

    • 2.

      Baixando o UE5

      3:10

    • 3.

      Crie seu projeto

      2:06

    • 4.

      Navegação no UE5, teclas de atalho e fundamentos

      13:43

    • 5.

      Atores no UE5

      8:42

    • 6.

      Gerenciando atores e objetos

      4:49

    • 7.

      Modelagem

      10:26

    • 8.

      Trabalhando com materiais

      8:45

    • 9.

      Materiais personalizados

      25:18

    • 10.

      Sistema de iluminação

      18:30

    • 11.

      Noções básicas de blueprint

      16:50

    • 12.

      Gráfico de eventos

      22:00

    • 13.

      Variáveis de BP

      23:57

    • 14.

      Funções de BP

      39:48

    • 15.

      Crie paisagem

      12:07

    • 16.

      Material principal

      12:59

    • 17.

      Folhagem

      31:59

    • 18.

      Configuração de cena

      37:19

    • 19.

      Blueprints para jogos 01

      34:32

    • 20.

      Blueprints para jogos 02

      10:32

    • 21.

      Blueprints para jogos 03

      26:54

    • 22.

      Interações entre os atores

      43:28

    • 23.

      Interface de blueprint

      44:26

    • 24.

      Jogabilidade

      32:20

    • 25.

      Personagem em terceira pessoa

      33:41

    • 26.

      Widget BP

      23:37

    • 27.

      Editor de widgets

      16:19

    • 28.

      Sistema de pontuação

      15:14

    • 29.

      Cronômetro

      12:54

    • 30.

      Funções adicionais

      22:08

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

104

Estudantes

--

Sobre este curso

Comece sua jornada como desenvolvedor de jogos com o Unreal Engine 5 — curso completo para iniciantes — possivelmente o curso mais atualizado e abrangente disponível online.

Por que escolher este curso?

Quando comecei minha jornada com o Unreal Engine, tive acesso a uma imensa quantidade de informações sobre como trabalhar com o motor. No entanto, percebi rapidamente que a maioria dos recursos disponíveis, até mesmo cursos completos, não descrevem todo o processo de uma maneira lógica e compreensível. É por isso que criei este curso: para dar a iniciantes como você um caminho claro, passo a passo, para dominar os fundamentos.

Aqui está o que você vai aprender:

  • Aprenda desenvolvimento de jogos usando o Unreal Engine 5 e blueprints
  • Aprenda a baixar e instalar o Unreal Engine 5
  • Aprenda os fundamentos do UE5: navegue pela interface, use ferramentas essenciais e configure seu primeiro projeto.
  • Aprenda sobre atores, malhas e objetos essenciais para criar seu jogo
  • Como usar os Blueprints para criar interações, eventos e mecânicas de jogo — sem necessidade de programação
  • Crie e personalize materiais do Unreal Engine 5
  • Como criar paisagens e povoá-las com folhagem usando materiais principais
  • Crie um minigame, configure o movimento do personagem, interações e loops de jogo
  • Crie um sistema de widgets

Se você quiser trabalhar com o Unreal Engine em seus projetos ou mesmo se tornar um desenvolvedor independente, este curso será a escolha perfeita para você. Quer você seja um iniciante completo ou queira aprimorar suas habilidades, este curso foi projetado para fornecer a você o conhecimento essencial e a experiência prática necessárias para criar e gerenciar projetos no Unreal Engine 5 da maneira certa.

Vamos mergulhar e começar a criar com o Unreal Engine 5!

Conheça seu professor

Teacher Profile Image

3D College

A perfect place to grow!

Professor

Hello,

3D College was created with beginner artists in mind, those who want to start their journey with Unreal Engine or become indie developers. We design courses that have helped hundreds of students gain new knowledge and skills. As 3D artists with years of professional experience, we strive to share the expertise we've gained while working on professional productions. In the coming months, new artists will join our team of instructors, currently preparing courses for both beginner and intermediate level students.

My name is Martin Grochowiak, and I am the founder of 3D College. I have been involved in photography, 2D, and 3D graphics for many years. I specialize in working with Unreal Engine 5 and, over the years, have had the privilege of creating and leading projects... Visualizar o perfil completo

Level: All Levels

Nota do curso

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

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

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

Transcrições

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