Agora, galera,
a gente já tem
um sistema funcionando bem legal
aqui dentro de um level só.
Só que agora,
eu quero expandir
um pouco o nosso pensamento
para gente se encaixar
em outras situações.
"Que tipo de situação, Daniel?"
Vamos supor que esse sistema
todo que a gente tem na mão,
a gente quer usar em outros levels.
Eu posso simplesmente
selecionar todo mundo
e dar aquele bom e velho
Control C, Control V?
Claro que pode.
Só que eu quero deixar
uma forma mais profissional.
Se, de repente,
você está trabalhando
com outro programador,
vocês vão querer, de repente,
compartilhar um arquivo ou outro.
Então, é por isso que eu vou
expandir um pouco mais
a linha de raciocínio da classe.
Então, aqui, gente,
nós temos
o nosso Level Blueprint,
que é onde tem todas
essas regras aqui.
E a gente tem
basicamente um coletável,
vamos dizer assim.
Daria até para melhorar
o aspecto desse coletável,
deixando-o, de repente,
visualmente
A gente pode até de, repente,
vir aqui embaixo,
na parte de "Rendering"
e desligá-lo.
Ou, no caso,
ligar o "Actor Hidden in Game",
Que é para ele ficar
com mais carinha de coletável mesmo.
Então, você vai esbarrar nele
e ele vai ser deletado.
Essa briga que ele faz,
ele meio que dá uma teimada,
é porque justamente
a colisão dele vem antes
do próprio trigger box.
Então, por isso que justamente
em uma linha de raciocínio dessa,
a gente dá uma engordada
na trigger box,
que é para garantir
que ele vai colidir primeiro
com a box para aí, sim,
ele deletar a tal da esfera.
Então, sim, isso aqui agora
é um sistema de coletável.
O que eu quero começar
a apresentar para vocês
é algo que não fique preso no level.
Qual é uma boa prática?
Aliás, uma excelente prática
para o desenvolvimento de jogos?
É no Level Blueprint,
você programar coisas
que tenham a ver com o level.
Então, desafios que vão ter
dentro do level.
Você tem um sistema de coletável,
como, de repente,
uma moeda, uma arma,
que você quer coletar
e tudo mais.
Esse sistema, nessa mecânica,
ela vai ser repetida em outros levels.
Aliás, essa é a graça do jogo.
É você ter vários sistemas
que vão funcionar
em vários universos diferentes.
Então, por isso que agora,
eu quero mostrar para vocês
para valer mesmo,
a tal da classe.
Vamos aqui no nosso Content Drawer,
vamos começar a customizar
esses caras aqui.
A gente pode vir aqui em "Content",
que é a raiz do nosso projeto.
Eu vou apertar
o botão direito aqui,
"New Folder".
Vamos antes de tudo
ser pessoas organizadas.
Eu vou chamar esse cara aqui
de "Collectibles".
Para quem quiser botar
tudo em português,
beleza.
É coletáveis.
O meu convite é sempre já tentar
aproveitar para treinar o inglês,
por mais que você esteja
um pouco enferrujado,
porque o mercado
é todo em inglês, né?
As vagas, as melhores vagas,
vão ser lá fora justamente.
Então, collectibles.
Vamos entrar aqui nesse cara.
Botão direito novamente,
"Blueprint Class".
Olha o cara que eu estou falando.
Na verdade, ele juntou dois caras
que eu já estou falando aqui,
que são o sistema de blueprint,
que é a linguagem que a gente
está utilizando para fazer
a comunicação
entre nós e a máquina,
e uma classe.
Vamos criar aqui.
Só que antes,
ele vai me dar uma tela,
a famosa floating bar,
perguntando que tipo de blueprint.
Como é uma boa prática
da Unreal, da Epic,
eles gostam de facilitar
a vida do desenvolvedor,
então, eles vão dar sempre
um kit de ferramentas
já meio mastigado,
que é para facilitar
a vida do desenvolvedor.
Então, vocês vão reparar
aqui o seguinte:
tem vários tipos de classes aqui.
Você tem um "Actor",
você tem um "Pawn",
você tem um "Character",
você tem o "Player Controller"
e por aí vai.
Ou seja, cada um vai ser
um tipo de classe
para momentos específicos.
Então, o Actor,
a ideia dele,
é você fazer um arquivo,
em que você pode jogá-lo
para dentro do seu level.
Para esse arquivo ser algo
que você pode colocar
em qualquer level,
porque ele é um ator.
Um ator, ele não pode
interpretar qualquer filme,
qualquer peça de teatro?
Essa é a ideia, essa é a logística.
Então, ele é uma classe de um ator
que tem as regras
dentro do universo dele,
só que ele pode funcionar
em qualquer level.
Só que muitas vezes,
vamos supor aqui que esse ator,
ele não é mais um objeto.
Ele passa a ser, de repente,
algo que você pode controlar.
É por isso que ele,
aliás, eu gosto dos ícones
que eles escolhem.
Você pode ver
que o ícone do Pawn
é uma peça de xadrez.
O que acontece?
Quando você está
com um tabuleiro de xadrez
ali na sua frente,
o que acontece?
Você é a mente ali
que está raciocinando,
está pensando nas suas estratégias.
Só que para você colocar
a sua estratégia em ação,
você vai precisar possuir,
dar o Pawn,
justamente,
controlar algumas peças
para ir de pouco em pouco,
você vai executando
toda a sua estratégia.
Então, às vezes existe uma regra,
assim como no jogo de xadrez,
em qualquer jogo
de tabuleiro, basicamente,
as movimentações seguem regras.
Então, esse Pawn,
é justamente o momento,
em que você está
colocando regras, eventos,
condições, sistemas, mecânicas
para o ato de controlar algo.
Então, imagina um jogo
que ele está 3D
e do nada você esbarra
em uma coisa e ele vira 2D.
Já aconteceu isso
em jogo com você,
tenho certeza.
Mario Party, antigão, lá do 64,
Game Cube, Nintendo WII,
e as mecânicas trocavam toda hora.
Ou seja, o sistema de Pawn,
ele vai mudando,
o character muda.
Então, às vezes você tem
personagens
que vão ter regras diferentes.
Então, tem um personagem,
que, na verdade, vai ser inimigo,
ele não vai ser o jogador principal.
Então, por isso que ele
dá uma classe diferente.
Você tem um controle,
a maneira de você utilizar
a usabilidade às vezes muda,
Então, é por isso que nós temos
aqui vários camaradas
bem diferentes
e vão apresentar ferramentas
diferentes para nós.
Por último, eu só queria
falar para vocês
do Game Mode.
O Game Mode é um tipo de classe
em que a gente vai colocar
as regras do jogo.
Ele é um código
que a Unreal toda hora o lê.
Ela sempre o consulta:
"Game Mode está certo isso aqui?"
Então, beleza.
Ela é como se fosse
uma consulta geral.
É o grande diretor é o Game Mode.
Vamos começar
com um Actor.
Uma boa prática que a gente faz,
a nomenclatura que a gente
costuma seguir em jogos é:
"BP", de Blueprint,
em letra maiúscula, underline.
Qual é a ocasião?
Então, "Collectable".
Esse aqui, gente,
é o que a gente chama
de parent class.
É uma classe pai.
Eu vou fazer aqui um coletável pai.
"Como assim Pai, Daniel?"
A ideia aqui do desenvolvedor,
uma brincadeira
que a gente costuma fazer
entre desenvolvedores é
que o desenvolvedor
parece que é uma raça
meio preguiçosa.
Por quê?
Às vezes ele gosta
de programa um camarada só
para depois ele só replicar.
É uma brincadeira,
mas é uma brincadeira muito efetiva,
ou seja, você vai sofrer uma vez
só com a linha de raciocínio.
Depois, você vai replicá-la.
Então, esse aqui vai ser
o nosso father,
o nosso pai.
A gente pode abri-lo.
E ele vai ter uma cara,
ele vai ter justamente
"Viewport", "Construction Script"
e "Event Graph".
Olha só que legal.
E pode ser que esses caras aqui,
eles tenham sumido.
Pode ser que aconteça
isso aqui, olha:
já aconteceu no meu Unreal.
Então, "Palma, palma,
não priemos cânico",
como diria o nosso
Chapolin Colorado.
A gente vê no lado esquerdo aqui
em "My Blueprint"
e você tem "Functions",
"Constructions Script".
Você pode ligá-lo aqui.
Ou se, de repente,
quem sumiu foi o Event Graphic.
Você pode clicar duas vezes aqui.
Pode mudar de ordem.
Enfim, fiquem à vontade.
E assim como nas outras
partes aqui da Unreal,
a gente tinha lá,
por exemplo, um outliner,
que é uma lista das coisas.
A gente tem aqui também
os nossos componentes.
Dá para a gente começar a compor
tudo o que precisa visualmente
para, de repente, fazer uma moeda.
Eu vou usar um exemplo
de uma moeda.
Então, a gente vai precisar,
de pelo menos duas coisas:
uma arte da moeda
e a caixa de colisão,
que é o que a gente
já tinha começado a fazer.
De repente, dá pra colocar
até uma partícula
de efeito especial
para fazer um brilho.
Dá para colocar
justamente empilhando aqui.
Cada componente visual
pode ser justamente uma peça.
Então, vamos dar um "Add" aqui.
Eu posso começar com "Cylinder".
Cylinder em inglês começa com y,
então, c, y, l,
para você começar
a procurar cylinder,
e dá para a gente só dar
uma leve customizada nele aqui.
Vamos apertar "E"
para poder rotacionar.
Rotaciona aqui 90°.
Vamos com a escala.
Dá uma amassada nele.
E aí, é o seguinte:
Caso vocês tenham
criado esse projeto
com o Starter Content,
a gente vai poder colocar
uma camarada aqui
chamada Gold Material.
Você vem aqui em "Material",
do lado "M_Metal_Gold".
"Daniel, acho que eu estava
meio distraído.
Eu acho que eu esqueci de ticar
a caixa do Starter Content.
E aí, lascou a vida?
Eu preciso deletar
esse projeto e criar outro?"
Não precisa.
Aqui em Content Drawer,
esse aqui é um aviso
para quem esqueceu de ligar
o Contente Drawer.
Você pode vir aqui em "Add",
"Add Feature or Content Pack".
E aí, você vem aqui
em "Content", "Start Content",
você o traz para dentro
do seu projeto.
Esse aqui é só
para vocês verem que a Unreal
dá umas opções
na hora de criar o projeto,
mas nenhuma é assim,
tipo para você
se arrepender amargamente.
Então, fiquem tranquilos.
E aí, galera, o que precisa fazer?
Para fechar esse núcleo aqui,
a gente vai precisar trazer
todo esse camarada,
só que agora para cá.
O que está faltando aqui?
Está faltando a caixa de colisão.
Então, vamos dar um "Add".
Aqui não chama mais trigger.
Ele troca o nome.
Ele troca o nome
para "Box Collision".
Fechou?
Então, a colisão,
como já tava explicando antes aqui,
Vamos deixá-la "gordinha".
Por que ela precisa o quê?
Por que eu estou brincando
de ela ser "gordinha"?
Porque ela precisa estar sempre
para fora da malha 3D,
que é para você justamente colidir
com ela primeiro de tudo.
Então, com esse cara aqui feito,
lembra que a gente pode selecionar
esses casos aqui e deletar.
Vamos na "Event Graph"
e deleta todo mundo.
Lembra que eu tinha começado
a fazer uma linha de raciocínio,
em que eu selecionava
uma trigger box,
vinha aqui no Level Blueprint
e eu adicionava eventos para ele?
Mesma coisa, não muda.
Seleciona a box.
Se quiser renomear até F2,
"Box", sei lá, "BoxCollision".
Evita ficar usando espaço
no nome das coisas,
em qualquer coisa digital,
eu recomendo super.
Então, botão direito
enquanto ele está selecionado
"Add Event for Box Collision".
Colocou esse cara.
"Daniel, pera, pera, espera aí.
Estou vendo uma diferença aí, cara.
O nó é o mesmo propósito,
mas ele tem muito mais opções".
Sim.
Quando você entra em uma classe,
você pode fazer algo
muito mais nichado,
muito mais específico,
com muito mais ferramenta.
É mais profissional.
Eu estou afirmando para vocês.
É muito mais profissional
trabalhar dessa forma.
Gente, segue o barco.
Vamos brincar de programador agora.
Vou até programar de uma forma
um pouco mais rápida,
obviamente, dando todo
o contexto para vocês.
Então, eu vou criar esse cara,
dar um destroy
na minha box colisão
e na minha moeda.
Então, vamos lá.
Do "Other Actor",
eu posso já puxar dele
"cast to third Person",
dá uma seta para cima,
Enter nesse cara.
Pode ver que ele
já pluga o evento, olha.
Lembrando que a linha branca
é a pergunta: o que eu vou fazer?
E a linha azul é a pergunta:
para quem?
Esse quem está colidindo
com esse quem,
realizando esse o quê.
É isso que ele está fazendo.
Desse cara aqui,
eu posso dar agora
um Destroy Actor.
Ou melhor ainda,
quando eu estou
dentro de uma classe,
eu posso dar um Destroy, o quê?
"Component".
Eu posso selecionar alguém
para destruir,
eu posso destruir todo mundo,
o Actor inteiro
que é o "BP_Collectible"
ou deletar só alguém.
Vamos começar, de repente,
só com sei lá,
deixa eu trocar esse cylinder aqui.
Deixa eu chamá-lo
de "Coin", de moeda.
Então, "Destroy Component",
eu vou deletar a Coin.
Então, ele vai trazer aqui
somente a coin.
O único problema é que é legal
você também deletar o box collision.
Ou seja, se você vai
destruir só a moeda,
a colisão ainda está lá.
Ou seja, se você já tem
um contador de moeda,
ele vai ficar sempre disparando.
Então, vamos selecioná-la
também e deletar esse cara aqui.
"Compile".
Vamos voltar aqui
para o nosso level
Pode deletar esses caras, tá?
Ah, Perdão.
Vamos só voltar aqui
no third person,
no Level Blueprint,
vamos deletar esses caras,
esses códigos aqui.
porque agora estamos fazendo-o
de uma maneira mais profissional.
Vamos lá no Content Drawer.
Olha aqui a nossa moeda.
Então, lembra o que eu
falei para vocês, olha.
Agora a gente tem um cara
que é imparcial.
Se eu fizer um outro level,
fizer o boss final aqui,
fizer um outro level,
eu posso usar essa classe aqui.
Então, eu posso destrui-la.
Então, galera,
a gente começou
a fazer uma classe de uma forma
muito mais profissional.
Se você parar para pensar
a classe aqui,
ela está funcionando perfeitamente
por um sistema
de uma moeda,
que a gente pode usar
em qualquer level.
Essa é a viagem.
E se você pirar mais
ainda a cabeça,
o que vai acontecer?
Você vai poder, de repente,
criar qualquer coisa
que você pode coletar.
Então, de repente,
você quer fazer
uma coleta de uma arma,
uma coleta de alguma vestimenta,
qualquer coisa
que vá sumir do cenário
e pode, de repente,
entrar no inventário,
é essa a forma
que a gente tem que fazer.
Maravilha?
Então, convido vocês aí a arriscar.
Troca um pouco a arte,
troca um pouco o material,
espalha um pouco mais.
Dá para vocês agora
replicarem várias vezes
e você vai começar
a ter uma cara
muito mais próxima de um jogo.