M4 - Unity
M4 - Unity
01 A COMPETÊNCIA
➔ bem vindos a “desenvolver jogos digitais de baixa e média complexidade utilizando motores gráficos
3d”
➔ ou… “unity”.... ou “lab3d”!
➔ nessa competência, aprenderemos tudo que for fundamental para a criação de um jogo na unity :)
02 INSTALAÇÃO
➔ os laboratórios já estão equipados para o uso da unity, mas em casa, vocês terão que instalar a
unity hub e a unity (versão lts mais nova)
➔ unity hub é o programa responsável pelo gerenciamento dos projetos e instalações da unity (é
comum ter mais de uma versão da unity instalada!)
➔ unity é a game engine em si! é o que usaremos nessa competência.
Project
04 GAMEOBJECTS
➔ a base de qualquer jogo na unity
➔ todos os objetos presentes numa cena são gameobjects
◆ main camera
◆ directional light
◆ o player, inimigos, moedas, etc.
➔ os gameobjects podem (e devem) ter seus comportamentos alterados a partir de componentes
05 COMPONENTES
➔ componentes são responsáveis por alterar o comportamento de gameobjects
➔ directional light é um gameobject, mas que assume o comportamento de luz direcional por ter o
componente “light”
➔ main camera também é um gameobject, mas funciona como uma câmera por possuir o
componente camera
➔ do mesmo jeito, outros gameobjects podem assumir diversos comportamentos ao utilizar
diferentes componentes
➔ também é possível criar componentes utilizando programação, mais sobre isso já já!
06 CRIAÇÃO DE GAMEOBJECTS
➔ na hierarquia, através do botão +, é possível criar
diversos objetos prontos.
➔ experimente ir no menu de criação (+) → 3d object →
cube
➔ nesse exemplo, criamos um cubo, mas é possível criar
muito mais que isso!
➔ esferas, cilindros, cápsulas e planos…
➔ figuras 2d…
➔ efeitos e sistema de partículas…
➔ objetos que trabalham com áudio…
➔ terrenos…
➔ interface de usuário…
07 NAVEGAÇÃO
➔ agora que já sabemos criar objetos e encher nosso cenário, é interessante aprender a se
movimentar pela cena criada
➔ primeiro, com o botão esquerdo do mouse, clique em qualquer lugar da cena (visão de dev)
➔ depois, pressionando (e segurando) o botão direito do mouse, use as teclas wasd para
movimentar a câmera (nossa visão)
➔ também é possível usar as teclas q e e para ajudar na movimentação
08 PRATICANDO
➔ crie um cenário repleto de objetos: cubos, cilindros, esferas, o que der na mente!
➔ navegue pelo cenário
➔ modifique as opções de rotação e escala dos objetos
09 MATERIAIS
➔ agora que já sabemos criar objetos e encher nossa cena, é hora de dar uma corzinha e
personalidade pros objetos!
➔ para isso, trabalharemos com materiais!
➔ materiais são responsáveis por mudar a aparência dos objetos, alterando propriedades como a
cor, capacidade de reflexão, entre outras.
10 CRIANDO MATERIAIS
➔ a criação de materiais é feita de uma forma um pouco
diferente do que já vimos até agora
➔ antes, para criar objetos, acessamos o menu de criação da
hierarquia (através do +)
➔ dessa vez, criaremos um arquivo que representa o material
➔ na janela project → + → material
➔ o comportamento (propriedades, aparência) de um material é
definido pelo seu shader
➔ quando um material é criado, usa o shader padrão (standard)
➔ esse shader tem algumas propriedades bacanas de mexer!
◆ albedo: cor
◆ metallic: quão metálico é o material
◆ smoothness: quão suave (ou não-rugoso)
◆ maps: mapas para textura
◆ emission: se é um material que emite luz ou não
11 USANDO MATERIAIS
➔ depois de criar o material, para aplicá-lo num objeto, basta clicar e arrastar o material para cima do
objeto
➔ você pode arrastar tanto para o objeto na hierarquia, como também para o objeto na cena
➔ também é possível alterar o material clicando num objeto que usa o material
➔ atenção: alterar um material faz com que todos os objetos que usam esse material sejam
alterados também
12 TEXTURAS
➔ uma outra forma de pintar materiais é usando texturas
➔ texturas são imagens usadas na criação de materiais, servindo para adicionar detalhes mais
complexos para os materiais
➔ texturas podem ser fotos, pinturas, atlas de cores…
13 USANDO TEXTURAS
➔ dessa vez, precisaremos importar uma imagem, que será nossa textura
➔ vamos criar uma no paint :)
➔ depois de criar a imagem, temos que carregar a imagem para dentro da pasta de assets do projeto
➔ aí, é só carregar a textura (imagem) para um objeto – isso fará com que um material seja criado.
➔ esse material irá usar a textura como cor base (albedo)!
➔ continua sendo possível editar as propriedades do material, mesmo usando textura
14 OUTROS RECURSOS
➔ na maioria das vezes, texturas feitas no paint não serão o suficiente!
➔ o ideal é criar texturas apropriadas de acordo com cada objeto e sua malha/uv, utilizando
ferramentas de edição de imagem (photoshop, krita, gimp ou o próprio blender)
➔ …e às vezes, precisamos mesmo é de texturas realistas
➔ podemos usar os sites [Link] e [Link]
➔ nos sites, podemos baixar até texturas com qualidades decentes ou até 4k
➔ depois, é salvar, jogar no projeto e usar!
15 TERRAIN
➔ a unity possui um bom sistema de criação
de terrenos
➔ é mais uma ferramenta que pode ser usada
na criação de cenários
➔ terrenos são malhas 3d facilmente
alteráveis, que são usados em paisagens
➔ é possível criar montanhas, editar alturas,
pintar o terreno com texturas, criar árvores
e detalhamento, entre outras opções!
16 CRIANDO UM TERRENO
➔ utilizando o menu de criação de objetos da hierarquia,
podemos escolher 3d object → terrain
➔ um terreno imenso será criado!
➔ para evitar problemas de processamento, memória, é
necessário diminuí-lo
➔ selecione o terreno, escolha a última opção nos botões do
inspector (terrain settings)
➔ em mesh resolution, altere o terrain width e length para 100.
17 PRINCIPAIS OPÇÕES
em ordem, temos
➔ criar terrenos vizinhos
➔ ferramentas de terreno
◆ pintar textura
◆ pintar buracos
◆ “carimbar” terreno
◆ suavizar terreno
◆ subir ou descer terreno
◆ alterar altura
➔ adicionar árvores
➔ adicionar detalhes (ex: flores, pedras, grama)
➔ configurações do terreno
2 3
27 STARTER ASSETS
➔ a unity disponibiliza dois controladores de
personagem que vão nos introduzir a algumas outras
ferramentas importantes
➔ controlador em primeira pessoa:
[Link]
arter-assets-first-person-character-controller-urp-196
525
➔ controlador em terceira pessoa:
➔ [Link]
arter-assets-third-person-character-controller-urp-196
526
➔ atenção: se certifique de adquirir o asset na mesma
conta que você usa na unity hub
28 IMPORTANDO OS CONTROLADORES
➔ depois de adquirir os assets, vá no menu de pacotes da unity
➔ window → package manager
➔ na janela, troque a opção “unity registry” por “my assets”
➔ procure o asset escolhido (first person ou third person)
➔ nesse .pdf (e durante as aulas), trabalharemos com o
controlador em terceira pessoa (third person controller)
➔ faça o download e depois importe
➔ escolha a opção install/upgrade, isso vai baixar outros
pacotes necessários para o funcionamento
➔ durante o import, será necessário reiniciar a unity
➔ verifique se foi criada uma pasta “StarterAssets” no projeto. se não, volte no package manager,
selecione o asset que você havia escolhido e clique em import novamente
➔ import na janelinha que aparece de novo
29 UTILIZANDO OS CONTROLADORES
➔ o asset vem repleto de pastas, scripts e outros arquivos
➔ para simplificar, não vai ser explicado o que é absolutamente tudo
➔ mas para usar o asset, vamos na pasta StarterAssets → ThirdPersonController →
Prefabs
➔ de lá, vamos arrastar o NestedParentArmature_Unpack.prefab para dentro do cenário
➔ na hierarquia, vamos selecionar esse objeto, clicar com o botão direito, prefab → unpack
➔ podemos deletar os elementos “UI_Canvas” e “UI_EventSystem”
➔ aproveite e delete também a MainCamera QUE JÁ EXISTIA NO CENÁRIO, mantenha a que
veio dentro do prefab
➔ os elementos que restam são:
◆ MainCamera (é a câmera)
◆ PlayerFollowCamera (é o objeto que a câmera segue, usa o Cinemachine para seguir
o player (falaremos mais sobre Cinemachine no futuro))
◆ PlayerArmature (é o personagem)
➔ arraste os objetos restantes para fora do NestedParentArmature_Unpack, por motivos de
organização
➔ remova o objeto NestedParentArmature_Unpack da hierarquia
30 POSSÍVEL PROBLEMA
➔ é possível que seu personagem esteja com essa aparência
➔ para corrigir, vamos em edit → project settings → graphics
➔ na opção “scriptable render pipeline settings” precisamos clicar no círculo à direita
➔ escolha “StarterAssetsURPAsset” e depois “continue”
➔ possivelmente o problema “inverteu”
➔ agora, vá em window → rendering → render pipeline converter
➔ selecione todas as opções
➔ initialize and convert
➔ voltando em edit → project
settings → graphics é
possível escolher uma
nova configuração de
qualidade
➔ as configurações são de
acordo com a qualidade
desejada: baixa (low),
média (medium), alta
(high), ultra…
31 MODIFICANDO VALORES DO CONTROLADOR
➔ depois de muito trabalho, nosso personagem
está pronto!
➔ é só dar play na unity e andar pelo cenário!
➔ o asset é bastante customizável, e é possível
editar valores como a força do pulo, a
velocidade, velocidade de corrida, etc.
➔ ao selecionar o PlayerArmature, é possível ver,
no inspector, todas as variáveis que podem ser
alteradas. use suas habilidades no inglês para
saber o que é cada coisa!
35 PREFABS
➔ prefabs são objetos “pré-fabricados”, que são um pouco mais complexos que os objetos comuns
➔ bons candidatos para prefab são objetos que se repetem, que são usados em diferentes níveis, objetos
que são criados durante o jogo…
➔ nossa moeda é um objeto mais complexo e que se repete bastante durante o jogo!
37 TIPOS DE COLISÃO
➔ existem dois tipos de colisão:
➔ collisions, que são colisões físicas (exemplo: personagem bate numa parede)
➔ triggers, ou gatilhos, que são colisões por overlap/sobreposição (exemplo: personagem encosta
numa moeda, num portal…)
➔ hoje trabalharemos apenas com triggers, já que a complexidade dos collisions não é necessária
38 SEU PRIMEIRO SCRIPT
➔ agora, FINALMENTE, começaremos a programar!
➔ vamos criar uma pastinha para os scripts (podemos chamar de Scripts)
➔ criaremos scripts para criar comportamentos que não existem por padrão na unity
➔ no nosso caso, vamos modelar o comportamento de uma moeda!
➔ dentro da pasta, vamos no menu de criação de arquivos (+) → c# script → escolha o
nome Moeda
➔ é importante seguir algumas convenções na hora de criar scripts!
➔ primeira letra maiúscula, sem números, sem espaço, sem acentos, sem cedilha…
➔ para editá-lo, clique duas vezes.
➔ o visual studio deve abrir, mas pode demorar um pouquinho.
bibliotecas
utilizadas
➔ dentro (entre os { }) do método Start(), vamos fazer a unity imprimir uma mensagem
➔ o [Link] funciona como o [Link] do C#, a diferença é que vai aparecer na
janela console, como veremos em breve
➔ os códigos devem ser escritos da mesma forma como indicado!
➔ não se esqueça de salvar!!! (ctrl + s)
➔ vamos ver se funcionou?
40 EVENTO DE COLISÃO
➔ a unity tem alguns métodos prontos, com assinaturas fixas, que são usados
automaticamente
➔ um desses métodos prontos é o OnTriggerEnter(Collider other)
➔ esse método é usado quando um objeto encosta em outro + ambos têm colisores + pelo
menos um deles usa colisor trigger + e pelo menos um usa o componente rigidbody (no
nosso caso, o nosso player já tem esses componentes implicitamente)
➔ vamos editar nosso script da moeda
➔ a mensagem “encostou na moeda” só deve ser apresentada quando um objeto que segue
os requisitos encostar na moeda
41 DESTRUIÇÃO DE OBJETOS
➔ já conseguimos “pegar” a moeda
➔ normalmente, quando coletamos um item, ele é deletado do cenário
➔ é possível fazer isso utilizando a função Destroy, como abaixo:
42 SCRIPT “JOGADOR”
➔ vamos criar um script Jogador, responsável por
guardar a pontuação do jogador
➔ já sabemos criar scripts ;)
➔ no script Jogador, iremos criar uma variável do tipo
inteiro chamada moedas
➔ podemos também deletar os métodos Start() e
Update(), já que não iremos usá-los
➔ não se esqueça de adicionar o script ao objeto do
jogador!
➔ precisamos que o script Moeda manipule o valor de
moedas sempre que uma moeda for coletada 1
➔ e aqui vem uma parte complicada…
2 3
➔ precisamos dizer para a unity: 4
➔ “ó. sabe quem colidiu com a moeda? pronto. (1)
➔ acesse o componente “Jogador” desse objeto (2)
➔ e adicione UMA moeda. (3)
➔ depois, aproveita e me diz quantas moedas eu já
peguei.” (4)
➔ prontinho! vamos testar
➔ e vamos problematizar 😨
46 OPÇÕES
➔ diversos objetos prontos estão disponíveis para uso
➔ algumas opções importantes:
◆ image → imagem → background, logo, ícones…
◆ text (textmeshpro) → texto | textmeshpro é uma extensão
◆ raw image → usado para colocar imagens a partir de texturas (não usaremos)
◆ slider → barrinha deslizante (carregamento, volume)
◆ button → botões (botão de jogar, sair)
◆ canvas → o canvas em si (explicado acima)
◆ event system → é o responsável por ler eventos de clique
49 EVENTSYSTEM
➔ ao selecionar o eventsystem, vocês podem ver uma grande mensagem de erro falando sobre o
sistema de input
➔ isso acontece porque nosso projeto está usando o novo sistema de input (que veio com com o
asset do personagem)
➔ se for o caso, é só clicar em replace with inputsystemuiinputmodule
➔ pronto, vamos deixar o eventsystem quieto!
50 TEXT (TMP)
➔ o objeto text apresenta texto na tela
➔ textmeshpro é uma extensão, um pacote, que melhora o componente text, com mais opções
➔ ao selecionar o objeto, podemos editar o texto que ele apresenta
➔ dica 1: no canto superior direito da janela scene, podemos selecionar a opção 2d, para que nossa
visão fique em 2d (como o canvas)
➔ dica 2: podemos, em seguida, clicar duas vezes no objeto canvas, para que preencha toda a tela
➔ como nosso texto vai representar apenas um número (quantidade de moedas), podemos
substituir por “0” (vai facilitar nossa vida depois), mas poderia ser qualquer coisa
51 POSICIONAMENTO
➔ é possível mover os elementos de interface para um local mais apropriado (ainda bem, né)
➔ para mover elementos de interface, a melhor ferramenta é a rect tool, que pode ser acessada
usando a tecla T
➔ mova o texto para algum canto apropriado na tela
➔ agora, vamos fazer um teste!
➔ vá para a aba game
➔ troque a terceira opção (talvez esteja em free aspect)
➔ veja como o texto se comporta
➔ veja como a posição relativa se torna bem menor, o que diminui as discrepâncias que podem
haver com diferentes resoluções
53 PROGRAMAÇÃO DE INTERFACE
➔ a programação de interface não é tão diferente do que já fizemos até então
➔ já trabalhamos com variáveis, modificação de valores, referências
➔ para atualizar o valor na tela, tudo que a gente precisa é:
➔ ter um elemento de texto na cena ✅
➔ ter um contador de moedas ✅
➔ saber programar ✅✅✅
➔ criar uma referência, no código, para o elemento de texto ❌
➔ atualizar o elemento de texto ❌
➔ vamos abrir o script do jogador (aquele que guarda a quantidade de moedas)
➔ lá, vamos precisar criar um método, já que dessa vez nossa instrução é um pouquinho mais
complexa
54 MÉTODO: ATUALIZARHUD
➔ o objetivo do nosso método é atualizar a hud, portanto, é interessante escolher um nome que
demonstre isso
➔ que tal AtualizarHUD? (public void AtualizarHUD())
➔ toda vez que a gente pegar uma moeda, a gente atualiza a hud, o que significa que a gente vai
modificar o texto da hud para ficar igual a quantidade de moedas
55 CHAMANDO O MÉTODO
➔ o método não se executa sozinho! é preciso chamar o método
➔ qual o momento apropriado para fazer isso?
➔ é interessante que a interface seja atualizada sempre que a gente pegue uma moeda…
➔ então, por enquanto, podemos mandar a moeda atualizar a interface, já que é a moeda que sabe
quando é coletada
56 COMPLETANDO A REFERÊNCIA
➔ lembram da linha de código “public TMP_Text moedasHUD;”?
➔ esse campo, por ser público, permite que a gente determine o valor (nesse caso, o objeto)
➔ vamos precisar carregar (clicar + arrastar) o nosso objeto de texto para a caixinha que apareceu
na unity, dentro do componente jogador
➔ depois disso… é só testar!
➔ pronto!
➔ tudo funcionando
➔ tudo bonitinho
➔ só nos resta agora criar o menu inicial! coletarmoeda aumenta as moedas e executa
atualizarhud, que altera o texto do elemento de texto
➔ (e fazer a build – a versão executável do jogo)
➔ de novidades, temos:
◆ o uso de image como imagem de fundo pode ser facilitado
usando a âncora de esticar
◆ isso faz com que a imagem possa preencher toda a tela
➔ uso de botões
◆ é “só” criar e editar suas propriedades
◆ o objeto de texto do botão é um gameobject separado, que
fica dentro do botão
64 CONFIGURAÇÕES DA BUILD
➔ voltando na janela build settings, clique no botão player settings
➔ nessa janela, podemos mudar o nome do produto (nome do nosso
jogo) e também mudar o ícone
➔ existem diversas outras configurações, mas não vamos nos
aprofundar nelas aqui
65 FAZENDO A BUILD
➔ voltando na janela build settings, clique no botão build
➔ crie uma nova pasta e dê um nome apropriado (por exemplo:
Build)
➔ selecione a pasta e pronto, a unity vai começar o processo de
criar a build
➔ depois de finalizado, você terá uma pasta com diversos
arquivos
➔ para jogar, execute o arquivo <nome do seu jogo>.exe, no meu
caso: meu jogo!!.exe
➔ ah, evite caracteres especiais no nome do jogo, incluindo “!”
➔ …se não conseguir fechar seu jogo, você pode pressionar alt +
f4
66 COMPARTILHANDO A BUILD
➔ para que outras pessoas joguem seu jogo, é necessário enviar TODOS os arquivos presentes
nessa pasta
➔ portanto, faça uma pasta compactada (.zip, .rar) com TODO o conteúdo e envie
➔ NÃO adianta enviar apenas o [Link]
67 COMPARTILHANDO O PROJETO
➔ feche a unity
➔ vá na pasta do seu projeto (pode ser descoberta pela unity hub → projects → … 3 pontinhos →
show in explorer
➔ abra a pasta do projeto, apague a pasta Library e faça uma pasta compactada com todo o resto
das pastas/arquivos
➔ envie a pasta compactada (.zip, .rar)
68 SEGUNDA FASE
➔ nessa segunda fase, vocês terão que elevar seu jogo para o próximo nível!
➔ mecânicas únicas, mais desafios, mais recompensas, mais sistemas, e jogos mais completos e
divertidos
➔ nessa fase, aprenderemos sobre: animação, animação de personagens, áudio, mais ferramentas
de criação de cenário, raycasts, input de usuário (sistema velho e sistema novo), controle de
versão, sistema de partículas, movimentação com inteligência artificial, pós-processamento,
69 ANIMAÇÃO
➔ animação vai nos permitir mover, rotacionar e até mudar propriedades sem ter que
necessariamente programar essa movimentação
➔ podemos usar as ferramentas de animação para animar objetos simples, como portas, moedas,
plataformas
➔ e também objetos mais complexos, como o personagem principal, inimigos, npcs…
➔ vamos começar do simples: vamos animar a moeda!
parâmetros
para transições
74 MAIS ANIMAÇÕES…
➔ experimentem criar mais animações
➔ sugestão: portas e plataformas móveis – atenção: alguns problemas podem surgir!
➔ mas também poderia ser: janelas, espinhos, baús, inimigos simples, elementos de interface…
➔ agora, se formos animar a plataforma, estaremos modificando apenas a posição local dela, e não
a global. desse jeito, podemos criar várias plataformas com a mesma animação, mas ao
posicionar o objeto plataformago em cantos diferentes, a plataforma irá fazer sua animação
corretamente, sempre levando em consideração apenas a sua posição relativa (relativa ao
plataformago)
➔ abaixo um exemplo de como ficam os valores da plataforma (veja que só o Y está sendo editado)
77 TRANSIÇÃO DE ANIMAÇÃO
➔ vamo ver na aula
79 PROGRAMANDO PARÂMETROS
➔ vamo ver na aula (abrindo porta)
80 IMPORTANDO UM PERSONAGEM
➔ vamo ver na aula (sapo véi)
81 ANIMAÇÕES DO PERSONAGEM
➔ vamo ver na aula
84 MODIFICANDO ANIMAÇÕES DO
PERSONAGEM IMPORTADO
➔ vamo ver na aula
85 BLEND TREES
➔ vamo ver na aula
86 ÁUDIO
➔ trabalhar com áudio é relativamente tranquilo, mas na maior
parte do parte do tempo envolve programar alguma coisa
➔ afinal de contas, precisamos determinar quando um áudio
será executado, e isso tende a ser feito na programação
➔ antes, podemos dividir “áudio” em duas categorias:
◆ música de fundo (geralmente tocada em loop)
◆ efeito sonoro pontual (feedback – ao coletar moedas,
sofrer dano…)
➔ uma última coisa que precisamos entender são os
pré-requisitos para um áudio ser executado
◆ precisamos de um audio listener (geralmente já tá na
câmera) – responsável por OUVIR os sons
◆ também de um audio source (fonte do áudio) – pode
ser um objeto vazio, a moeda que foi coletada…
qualquer coisa.
◆ por fim, precisamos de um audio clip – é o arquivo de
som que será executado
87 AUDIOSOURCE
➔ o componente audio listener dispensa apresentações, mas só porque não dá pra
fazer nada com ele
➔ já o audio source tem um bocado de configurações!
clipe de áudio
mutar o source
volume
tom
definição se é 2d ou 3d
89 EFEITOS SONOROS
➔ clipes de áudio pontuais podem ser chamados de efeitos sonoros,
também conhecidos como sfx
➔ a configuração deles acaba sendo o oposto de uma trilha sonora, já
que normalmente não são executadas on awake e nem são
reproduzidos em loop
➔ nesse caso, quando queremos que um efeito sonoro seja
reproduzido, precisamos fazer isso na programação
➔ mesmo esquema de sempre: referência ao objeto que tem um
audiosource, acessa o objeto e executa algum método (nesse caso:
play)
➔ atenção! se você tentar executar um som e em seguida destruir o
objeto que está executando o som, a emissão de som será
interrompida!
90 + CRIAÇÃO DE CENÁRIO
➔ a unity disponibiliza outras ferramentas de criação de cenário
➔ nem tudo se resume a cubos, esferas e cilindros :)
➔ vamos utilizar a ferramenta probuilder, que permite modelagem “leve”, texturização e mais
algumas coisinhas
➔ atenção! o probuilder não substitui a modelagem em ferramentas como blender!
➔ o probuilder pode ser usado para prototipar um cenário, fazer testes rápidos, etc.
➔ para utilizar o probuilder, precisamos importar o pacote antes
➔ window → package manager → packages: unity registry → probuilder
91 PROBUILDER
➔ após importar o probuilder, precisamos acessá-lo!
➔ ao escolher a opção probuilder window, uma janelinha será
aberta com várias opções
➔ antes de tudo, sugiro clicar e arrastar a janelinha e colocar
do lado esquerdo da janela da unity
➔ vai ficar assim
➔ agora é usar a curiosidade e a criatividade!
➔ mesmo assim, apresento algumas ferramentas
➔ new shape permite que uma nova forma seja criada
92 USANDO MATERIAIS
➔ para trabalhar com materiais, escolha a opção material
editor
➔ arraste o material desejado para a paleta de materiais (ou
pesquise clicando no círculo)
➔ após selecionar os materiais, é possível aplicar os
materiais clicando numa face de um objeto e usando o
atalho apropriado (alt + 2, por exemplo)
93 OUTRAS OPÇÕES
➔ são muitas opções!!!
➔ inclusive, quando você troca entre vértice, aresta e face, mais opções
aparecem
➔ então o melhor jeito de descobrir é explorar, ler e traduzir as ferramentas e
experimentar :)
94 SISTEMA DE PARTÍCULAS
➔ a unity tem um sistema de partículas bem completinho, que
permite a criação de efeitos visuais complexos
➔ esses efeitos visuais podem servir como feedback visual
para o jogador, podem embelezar o cenário, explicitar o
trajeto de um objeto, reforçar algum aspecto de uma
habilidade, podem ser usados na ambientação, etc.
➔ existe uma área específica dentro do mundo do
desenvolvimento de jogos que estuda e aplica sistema de
partículas (além de outras coisas, como shaders): a arte
técnica / tech art (teremos mais sobre isso no curso!!!)
➔ para criar nosso primeiríssimo sistema de partículas, iremos
no menu de criação de gameobjects (na hierarquia!) →
effects → particle system
➔ …acabou, agora é “””””””””só“”””””””” fazer algo bonitinho
95 FAZENDO UM FOGUINHO
➔ aqui eu aposto que vocês conseguem fazer algo melhor que eu
➔ …mas vou tentar mostrar algo
➔ selecione o sistema de partículas recém criado
➔ altere duration para 1, é a duração de um ciclo do sistema
➔ start lifetime → 1, isso representa o tempo de vida de cada partícula
➔ start speed → 1, é a velocidade da partícula
➔ start size → 0.5, o tamanho da partícula
➔ vá na aba emission e aumente rate over time para 50, isso é a
quantidade de partículas geradas por segundo
➔ em shape, diminua o ângulo (angle) do cone para 10
➔ também dá para diminuir o raio (radius) do cone… talvez para 1
➔ marque a opção color over lifetime e crie um degradê de amarelo
para vermelho
➔ e… é só
➔ tenho certeza que dá pra fazer algo melhor, que tal modificar as
cores, size over lifetime, rotation over lifetime, ou até alterar
algumas propriedades que já mexemos, como emission e shape?
96 TRAIL
➔ esse é mais um efeito que pode ser criado do mesmo jeito que o sistema de partículas
➔ sempre que esse objeto é movido, ele deixa um rastro que dura alguns segundos
➔ o rastro, duração e um monte de coisa são completamente configuráveis
97 URP
➔ o universal render pipeline, ou urp, é uma configuração de
renderização que pode ser usada para melhorar o visual do jogo
➔ o urp fornece diversas opções de customização, como alterações
nas luzes, sombras, criação de shaders (sombreadores – ou como
um material é apresentado), também permite o uso de efeitos
visuais mais complexos e o uso de pós-processamento
➔ se você está usando o personagem passado na competência (o do pacote starter assets), ou importou
algum outro asset, é bem possível que seu projeto já tenha urp
➔ para ter certeza, vá em window → package manager → packages → unity registry → universal rp
➔ se a opção import ou install estiver disponível, então é porque seu projeto não está usando urp
98 INSTALAÇÃO
➔ antes de tudo, faça backup!
➔ o momento pós-instalação do urp pode ser um pouco
aterrorizante, então é melhor fazer o backup para evitar qualquer
desespero ou problema :)
➔ (basta fechar o projeto, fazer um .zip ou .rar do projeto e deixar
num canto guardadinho)
➔ de volta à unity, volte ao package manager e instale o urp
➔ vá no menu de criação de assets → rendering → urp asset (with
universal renderer)
➔ por fim, vá em edit → project settings → graphics
➔ no primeiro campo (scriptable render pipeline settings), clique
no círculo e escolha o asset criado → continue
➔ isso pode demorar um pouquinho
➔ …esse deve ser seu projeto depois do urp
➔ para corrigir: window → rendering → render pipeline converter
➔ seleciona os três primeiros (rendering settings, material
upgrade, readonly material converter) → initialize and convert
➔ se você estava usando o probuilder, é possível que os materiais
não tenham sido convertidos automaticamente (mas só os
materiais que o probuilder implementa por conta própria)
➔ você terá que ajustar esses materiais manualmente (crie novos
materiais e os atribua para os modelos)
99 PÓS-PROCESSAMENTO
➔ o nosso único uso para o urp, nesse primeiro momento, será a aplicação de
pós-processamento
➔ podemos entender o pós-processamento como filtros do photoshop que são aplicados ao
jogo inteiro
➔ é possível alterar cores, saturação, adicionar efeitos de movimento, adicionar brilho… um
bocado de coisa!
➔ para começar, vá no menu de criação de objetos (na hierarquia) → volume → global volume
➔ no objeto criado, vá no inspector e clique em new (new profile)
➔ depois, é só adicionar overrides e escolher os efeitos desejados
➔ experimente vários!
➔ por último, selecione sua câmera e marque a opção post processing (dentro de rendering)
➔ …deve funcionar
➔ no exemplo abaixo foi adicionado um efeito de color adjustment, e escolhido o color filter na
cor vermelha
➔ importante: na hora de criar o “volume”, escolhemos a opção global para que fosse aplicado
em todo o jogo, porém, é possível criar volumes locais, que só são aplicados a certos locais
(por exemplo: debaixo d’água)
1
3
?
4
5
➔ 1) o jogador se aproxima da moeda – em seguida, a moeda acessa o script Jogador, presente no objeto
que encostou nela, e utiliza o método “SetMoedaProxima”, passando ela própria como parâmetro… ou
seja: ela tá dizendo: “jogador, sou eu que tô perto de você!”
➔ 2) o script Jogador guarda (salva, deixa na memória) essa informação de quem é a moeda que está
próxima
➔ 3) >>SE<< o jogador pressionar E e também >>SE<< existir uma moeda próxima do jogador, é executado
o método ColetarMoeda(), e em seguida a moeda é destruída e o script Jogador volta a não conhecer
nenhuma moeda próxima
➔ 4) o funcionamento do método ColetarMoeda() vocês já conhecem: a quantidade de moedas é
aumentado e a HUD é atualizada (AtualizarHUD())
➔ 5) atualização da HUD
➔ ?) caso o jogador vá para longe da moeda, a moeda diz para o jogador: “ei, pois então me esqueça…”, e o
jogador passa a não saber se existe alguma moeda por perto
➔ MUITA ATENÇÃO: é importante notar que esse script NÃO é perfeito, e pode falhar em algumas
situações
➔ por exemplo: como o script se comporta caso o jogador esteja próximo de duas moedas ao mesmo
tempo? o que acontece se tentar coletar? e se tentar coletar duas vezes? você pode tentar replicar essa
situação ;)
4 2
1
3
5 A 6
B
7
➔ nessa aba agents, podemos configurar os agentes que vão usar o sistema
de navegação – é possível definir diferentes tipos de agentes, assim como o
nome, raio, altura, altura de degrau que consegue subir, angulação de
rampas
➔ na aba areas, dá para configurar diferentes áreas e o custo de andar por elas
– quanto maior o custo, mais o sistema vai evitar andar por essas áreas
➔ com isso explicado, vamos selecionar o chão do cenário e adicionar o
componente navmeshsurface e pressionar o botão bake
➔ a cada frame, o update define o destino (ou seja, o canto que o inimigo está tentando ir) para a posição
do alvo
➔ o alvo pode ser qualquer coisa! nesse caso, eu escolhi que fosse o player
➔ ou seja, o inimigo vai ficar sempre procurando o player
➔ é importante também especificar quem é o navmeshagent que está sendo controlado, já que a unity não
sabe de tudo ;)
➔ para isso, é só jogar o próprio objeto do inimigo dentro do campo agent, no inspector
➔ atenção!!! essa é a implementação mais simples possível!
➔ dentro do script inimigo, você deve fazer uma lógica mais complexa, afinal, você não quer que todos os
inimigos na cena sigam seu personagem, em todos os momentos
➔ poderia criar um campo de visão (utilizando raycast ou colisores), ou usar algum evento (por exemplo:
quando o jogador passar por uma porta específica, aí um inimigo começa a seguir), etc.