Buscar

Game Engine un2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

GAME ENGINEGAME ENGINE
CRIAÇÃO E PRODUÇÃOCRIAÇÃO E PRODUÇÃO
AUDIOVISUALAUDIOVISUAL
Autor: Me. George Santiago Alves
Revisor : I van Dimitry R . Zyr ianof f
IN IC IAR
introdução
Introdução
A Física é parte integrante dos jogos de computador, e os jogos, em si,
abrangem muitos aspectos dessa área: desde as famosas Leis de Newton até
a dinâmica dos corpos. A Física permite de�nir o comportamento dos corpos
rígidos, garante que o movimento seja realista ou surreal. O Unity
disponibiliza diversos componentes de Física, para auxiliar no processo de
desenvolvimento de um jogo. Apenas mudando parâmetros no Inspector, é
possível de�nir a massa dos corpos, garantir colisões, alterar o atrito de
superfícies, o comportamento de corpos rígidos e o tratamento de colisões.
Além de componentes físicos, o Unity possui componentes visuais para
organizar a interface do usuário (chamada HUD), rotinas para trabalhar com
efeitos sonoros e elementos para de�nir a iluminação dos corpos. Nesta
unidade, estudaremos os principais componentes relacionados à Física,
interface, áudio e iluminação dos objetos. Lembre-se de que é necessária a
prática constante, para garantir a excelência pro�ssional.
A física, em jogos, é projetada para reproduzir as leis físicas da natureza, seja
simulando suas leis para criar movimento realista ou alterando as
propriedades para criar novidades na jogabilidade. O Unity tem mecanismos
que fornecem componentes para lidar com a simulação da física. Permite que
o usuário manipule parâmetros para alterar o comportamento de um objeto,
sendo possível alcançar o realismo ou o surrealismo em um jogo. A engine
tem mecanismos separados para lidar com física em jogos 2D e 3D. O
funcionamento dos componentes é idêntico, a diferença é a dimensão extra
em jogos 3D. Como exemplo, há o componente Box Collider, para física em
jogos tridimensionais e, de maneira análoga, o Box Collider 2D, para jogos
bidimensionais. Nas próximas subseções, serão descritos os componentes
responsáveis pela gravidade, força e colisões com física.
Rigidbody
O Rigidbody é um componente que permite que forças físicas atuem sobre o
comportamento de um GameObject. Após habilitar esse componente no
FísicaFísica
objeto, por exemplo, a gravidade passa a atuar sobre o corpo. Vamos usar um
exemplo prático para simular esse conceito?
O que acontece? Nada, a gravidade não está atuando sobre o
objeto. Vamos mudar isso.
Enquanto o projeto estiver em tempo de execução, os elementos alterados
em cena – por exemplo, adicionar componentes ou mudar as propriedades
de variáveis – retornarão ao seu estado padrão, quando o projeto deixar de
ser executado. É uma característica da engine , que permite testar
parâmetros, componentes e outros elementos, sem modi�car a cena original.
Posteriormente, falaremos sobre comandos que permitem alterar e de�nir o
comportamento dos objetos (parâmetros, posição, propriedades, adicionar
componentes) em tempo de execução.
Adicione novamente o componente ao cubo. Agora, vamos conhecer as
propriedades do Rigidbody (Figura 2.2).
Mass: representa a massa do objeto. Quanto maior o valor, mais
força é necessária para movimentar o objeto. Ou seja, quanto maior
a massa, maior será a inércia de um objeto. Por padrão, o Unity
utiliza a medida de massa em quilogramas.
Drag: propriedade que controla o quanto a resistência do ar afeta o
objeto. Se aumentarmos o valor do drag e executarmos o projeto, o
cubo tende a cair lentamente.
Angular drag : propriedade que controla a resistência do ar enquanto
o objeto estiver girando. Quanto maior o valor, mais torque será
necessário para girar o objeto.
Use Gravity: se ativado, a força da gravidade passa a atuar sobre o
objeto.
Is Kinematic: se ativado, controla a in�uência da física sobre o corpo
rígido, as forças e colisões não afetarão o objeto, mas permite que o
corpo rígido interaja com a física de outros objetos. Por exemplo, em
jogos de plataforma, como Super Mario, o personagem principal é
afetado pela gravidade, mas, as plataformas se movimentam
livremente, permitem que o personagem pule sobre elas e a
gravidade não tem in�uência sobre o seu comportamento.
Figura 2.1 - Cube
Fonte: Elaborada pelo autor.
Interpolate: é a propriedade usada quando o usuário está tendo
problemas com o movimento do objeto. Habilitando essa opção, a
propriedade suaviza o efeito da física, utilizando uma taxa de
quadros �xa. Interpolar suaviza o movimento do objeto com base na
taxa de quadro anterior. O Extrapolar suaviza o movimento com base
em uma estimativa do próximo quadro. A física é executada em taxas
de quadros variáveis, por consequência, objetos em cena podem
sofrer instabilidade. Isso ocorre pela falta de sincronismo entre os
vários elementos em cena. ]
Collision detection: propriedade utilizada para garantir que objetos
em movimento rápido sejam detectados por outros objetos. São
quatro tipos de con�gurações, e o discrete é o valor padrão para
colisões normais. O continuous é usado para objetos com velocidade
rápida e com colisão contra objetos estáticos (sem um corpo rígido
ou com a propriedade isKinematic ativada). O continuous dynamic é
usado quando um objeto colide contra um objeto móvel, por
exemplo, com Is Kinematic desativado. O objeto usará a detecção de
colisões contra objetos estáticos (sem corpo rígido) e, usará a
con�guração discrete em colisões normais. Por �m, temos o
continuous speculative , usado para detecção de colisão em objetos
dinâmicos e cinemáticos.
Constraints: impede que o objeto se movimento e rotacione no eixo
marcado (x, y e z).
Além das propriedades, é possível controlar os corpos rígidos usando scripts
para adicionar forças ou toque. Aplicar uma força usando script permite que o
usuário de�na valores para aceleração, impulso, alteração de velocidade,
duração, entre outros. Por padrão, o Unity só aplica força em corpos rígidos
ativos.
Colliders
O collider , ou colisor, é um componente que permite que um objeto do jogo
ao qual está anexado reaja a outros colisores. Em outras palavras, de�ne a
forma de um objeto, para �ns de colisões físicas. O componente collider
de�ne o comportamento das colisões em corpos rígidos. Por padrão, os
colisores já são habilitados automaticamente em 3D Objects ( cube , sphere ,
capsule e cylinder ). Se dois objetos colidirem, a física somente atuará se
ambos estiverem com um collider anexado; caso contrário, passarão um pelo
outro. Vamos testar? Usaremos o exemplo anterior para para ilustrar esse
conceito:
1º - Com o Unity aberto e um cubo adicionado em cena, adicione um plano
(GameObject > 3D object > Plane).
Figura 2.2 - Rigidbody
Fonte: Elaborada pelo autor.
2º - Garanta que o plano esteja embaixo do cubo. Para isso, você pode
manipular a posição do objeto no inspector (Figura 2.3). Não se esqueça de
anexar o componente Rigidbody e marcar a propriedade Is Kinematic no
plano. Essa con�guração vai garantir que a física não atue sobre o plano, mas
que o objeto tenha interação com a física de outros objetos.
3º Clique em Play para executar o projeto e observe que o cubo começa a cair
e tem uma colisão com o plano. Se você desativar o box collider do cubo ou o
isKinematic do plano (a propriedade use gravity precisa ser desativada, caso
contrário, a gravidade vai atuar sobre o plano),  o cubo vai atravessar o objeto.
A massa dos dois corpos determina como os objetos reagirão a essa colisão.
Figura 2.3 - Plano
Fonte: Elaborada pelo autor.
Dependendo da forma do objeto, cada collider é de�nido pela sua forma e
tamanho. Mas é possível utilizar alterar a estrutura do collider e de�nir sua
forma e tamanho, conforme necessidade. Para isso, basta acessar a
propriedade "Edit Collider" e alterar os valores dos parâmetros "Center" e
"Size”, para adicionar colliders de diferentes formas ( mesh ). Porém, as
propriedades são as mesmas para os diversos colliders . No inspector, em box
collider , observe as propriedades do colisor:
Is Trigger: é umgatilho que, quando habilitado, não registra uma
colisão com um corpo rígido. Após a colisão, é possível saber quando
o objeto atravessou. Essa propriedade é útil em diversas situações,
por exemplo, detectar se o personagem está em determinado local
ou se chegou a determinado destino. Em um jogo, o isTrigger pode
ser o gatinho para um save automático, a chamada para um
cinematic e detectar se o personagem está no limite de uma área,
garantindo que possa interagir com um objeto.
Material: permite adicionar um material de física para simular
diferentes superfícies. O collider precisa simular as propriedades dos
objetos; suas interações devem ser representadas de acordo com o
material anexado. Por exemplo, uma superfície escorregadia
oferecerá pouco atrito a um objeto, enquanto a areia terá maior
atrito.
Center e Size: responsáveis pelo tamanho e posição do colisor no
objeto.
Physic Material
O Physic Material é o componente responsável por de�nir os efeitos de atrito
entre objetos. Vamos adicionar o componente no cubo em cena:
1º - Selecione Assets > Create > Physic Material.
2º Por padrão, o Physic Material é adicionado à janela Project. Arraste-o para a
propriedade material no cubo (Figura 2.4). Esse componente, por exemplo,
pode fazer o cubo saltar, ao colidir com o plano. Para isso, em Physic Material,
altere o valor de Bounciness para o 1 (valor máximo da propriedade) e
execute o projeto.
Observe que o cubo salta algumas vezes até a inércia. O Bounciness de�ne o
quanto uma superfície rebate um objeto sem perda de energia. O valor 0
garante que o objeto não seja rebatido; o valor 1 garante que objeto seja
empurrado de volta a sua origem.
A propriedade Dynamic Friction é usada quando um objeto está em
movimento. O valor 0 garante que a superfície seja lisa, enquanto o valor 1
impõe uma resistência na superfície, como areia, grama, carpete etc.
O Static Friction de�ne o quanto de atrito tem uma superfície, propriedade
usada em objetos estáticos; o valor 1 impõe uma resistência que torna a
movimentação menos deslizante, enquanto o valor 0 garante que a superfície
deslize facilmente.
Figura 2.4 - Physic Material
Fonte: Elaborada pelo autor.
Com o physic material, é possível simular o atrito de diversas superfícies, por
exemplo: gelo, metal, borracha, madeira, dentre outros. Além disso, é possível
de�nir parâmetros para fricção zero ou máxima de um objeto. Para isso, o
usuário pode testar os vários parâmetros do Physic Material para simular ou
criar sua própria superfície. Entretanto, é possível importar o ativo standard
assets da Unity store , que contém uma coleção de recursos para auxiliar os
iniciantes em seus projetos. Dentre os quais, disponibiliza modelos de physic
materials prontos.
Na loja de ativos do Unity, é possível encontrar diversos materiais para serem
usados nos mais variados projetos de jogos digitais. É possível simular
praticamente qualquer superfície ou artefato de um ambiente real. Como um
exercício prático, localize, na Asset Store, um ativo pelo qual você possa
simular o efeito de um espelho.
saiba mais
Saiba mais
Para �xar o conteúdo e adquirir novas
habilidades é preciso prática. O Unity é um
game engine com diversos recursos. É
necessária a prática constante, para
aprender as práticas recomendadas. O Unity
Learn fornece diversos tutoriais gratuitos
sobre os principais componentes da engine.
Acesse o link a seguir, para compreender a
fundo o funcionamento de diversos
componentes físicos do Unity:
ACESSAR
https://learn.unity.com/tutorial/3d-physics#
atividade
Atividade
Leia o excerto a seguir:
“A física é parte da nossa experiência de vida. Nossos cérebros são condicionados
ao longo da vida para reconhecer o movimento baseado em física como sendo o
movimento correto. Faz sentido, então, que os usuários se tornem mais imersos em
alguns tipos de jogos quando os objetos se movem de maneira realista. Quando
adequado, há uma série de maneiras para criar um movimento realista para um
jogo".
RABIN, S. Introdução ao desenvolvimento de games . Programação: técnica,
linguagem e arquitetura. Tradução da 2ª edição norte-americana. Cengage learning,
2012. p. 373.
Com base no trecho e nos componentes para trabalhar com física no Unity Editor,
analise as a�rmativas a seguir:
I. Drag é uma propriedade que controla a resistência do ar enquanto o objeto
estiver girando.
II. O Interpolate é uma propriedade que controla a in�uência da física sobre o corpo
rígido; as forças e colisões não afetarão o objeto.
III. O continuous dynamic é usado quando um objeto colide contra um objeto móvel,
por exemplo, com IsKinematic desativado.
IV. O Constraints impede que o objeto se movimente e rotacione no eixo marcado
(x, y e z).
Está correto o que se a�rma em:
a) III e IV, apenas.
b) I e II, apenas.
c) I, II e IV, apenas.
d) I, III e IV, apenas.
e) I, II, III, apenas.
Antes de tudo, precisamos compreender que a atmosfera de um jogo é a
combinação de enredo, mecânica, jogabilidade, grá�cos, música e capacidade
do jogador de tomar decisões. Todos esses elementos precisam ter uma
conexão, e isso, por sua vez, dá ao jogador a imersão através dos seus
sentidos.
Dentre esses elementos, há o desenvolvimento e integração do áudio, um
processo técnico de composição criativa, que cria um grau de realismo
su�ciente para que o usuário se sinta imerso em um jogo. Seja em um jogo
que simula um ambiente realista ou surreal, o som tem um papel
fundamental, que pode determinar o sucesso ou o fracasso de um jogo.
O sistema de áudio da Unity é �exível e permite importar a maioria dos
formatos de arquivos de áudio, além de possuir recursos próprios para
reproduzir sons, mixagem e masterização de áudio em tempo real. A engine
também faz detecção e gravação de áudio por microfone. Esse sistema
permite que o usuário interaja com o jogo, conforme as entradas de áudio.
Por exemplo, usar palavras para acionar eventos especí�cos em jogo.
ÁudioÁudio
Antes de conhecermos os principais componentes para lidar com áudio no
Unity, precisamos compreender a teoria básica do som. Em um ambiente real,
um som é emitido por uma fonte e captado por um ouvinte. Ambos, emitir e
perceber sons, dependem de inúmeros fatores. Por exemplo, um ser humano
tem a noção de distância, direção e qualidade sonora. Conforme o ambiente,
essa percepção é alterada: em locais fechados, o som terá eco, mas, ao ar
livre, não terá. Ou seja, em um jogo, o som muda de acordo com o ambiente.
Outro fator a ser considerado é o Efeito Doppler, que é o resultado do
aumento ou diminuição da frequência sonora (além da luz ou ondulações em
superfície d'água), à medida que há movimento relativo entre a fonte sonora
e o observador (objeto). O efeito doppler é importante em jogos, ainda mais
em jogos tridimensionais. Dependendo do ambiente, o jogador poderá ouvir
o som de diversas maneiras.
Mas como funcionam os efeitos de áudio no Unity? A engine exige que as
fontes de áudios sejam anexadas às fontes emissoras, por exemplo, os
elementos em cena que emitem sons. Para essa �nalidade, é anexado, ao
objeto, o componente audio source . Para a captação do áudio (fonte
receptora), é necessário anexar o componente audio source . Por exemplo, por
padrão, é recomendado anexar o audio source na câmera principal do jogo.
Em um jogo 3D, a câmera principal acompanha o personagem do jogador. É
possível, pelo uso de componentes, con�gurar a intensidade do som e a
direção, simulando o efeito doppler . Nas próximas subseções, será descrito
cada um desses componentes.
Audio Listener
Esse componente atua como receptor, recebendo as informações de
qualquer fonte de áudio ( audio source ). Quando o componente é anexado a
um GamObject e as fontes de áudio estiverem próximas, o componente fará a
leitura dos sons e enviará os dados ao alto-falante.
A engine só permite um audio listener por cena. Por padrão, o componente é
adicionado à câmera principal. A ferramenta trabalha em conjuntocom o
audio source e o audio clip . Quando o emissor é uma fonte tridimensional, o
audio listener simula de forma dinâmica sua orientação, posição e distância.
Para adicionar o componente em cena, basta:
Selecionar o objeto > Add Component > Audio > Audio Source.
Audio Source
O audio source vai reproduzir um arquivo de áudio do componente audio clip
na cena. O arquivo será reproduzido para o receptor ( audio listener ). O
componente pode reproduzir qualquer arquivo do componente Audio Clip,
além de, con�gurá-lo para reprodução em modo 2D, 3D ou híbrido (
SpatialBlend ). O componente ainda permite alterações na propagação e
controle ativo entre as saídas de áudio nos alto-falantes. Além disso, é
possível aplicar �ltros, de�nir reverberação e controlar as fonte de áudio com
curvas de níveis. Agora, abra um projeto no Unity e adicione o componente
audio source em um GameObject . Para adicionar, basta selecionar um objeto
em cena > Add Component > digitar “Audio Source” e anexar ao objeto. Logo
após, adicione o componente, importe o recurso da asset store “Free Sound
E�ects Pack”, produzido por Olivier Girardot. Por �m, adicione o componente
audio listener na câmera principal da cena.
AudioClip: arquivo de referência que será reproduzido pelo
componente Audio Source. Na janela de projeto, na pasta do ativo
“Free Sound E�ects Pack”, localize o arquivo” Dragon Spit Fire 1” e
selecione e arraste para a propriedade AudioClip. É possível procurar
o arquivo de referência diretamente pela propriedade: basta
selecionar AudioClip e buscar o arquivo. A propriedade mostrará
apenas arquivos compatíveis. Agora, execute o projeto. O áudio será
chamado uma única vez e reproduzido imediatamente.
Output: por padrão, a saída de áudio tem como referência o audio
listener . Mas é possível enviar o arquivo para o componente audio
mixer . O mixer é responsável por editar as várias fontes de áudio da
cena, sendo possível aplicar �ltros e efeitos de masterização de
áudio.
Mute: quando ativo, o arquivo de referência continua sendo
reproduzido, mas sem áudio.
Bypass E�ects: propriedade que ignora os efeitos aplicados ao
arquivo de referência.
Play On Awake: quando a propriedade está habilitada, o arquivo de
referência será reproduzido logo após a cena ser iniciada. Se
desativado, o usuário somente poderá ativar a propriedade via script
.
Loop: é uma estrutura que permite que o arquivo de áudio seja
reproduzido após a sua conclusão.
Volume: estrutura de controle da intensidade do áudio. Como
referência, o valor 1 representa o volume máximo até um metro do
objeto.
Na Figura 2.5, observe as principais propriedades do Audio Source :
Figura 2.5 - Audio Source
Fonte: Elaborada pelo autor.
Além das propriedades básicas, há o Rollo� Mode (Figura 2.6), um grá�co
para controlar o quão rápido a intensidade do áudio diminui. Existem três
modos padrões: Logarithmic , Linear e Custom Rollo� . No Logarithmic, quanto
mais próximo o receptor estiver do emissor, mais alto o som será. O Linear
permite personalizar o quão intenso serão os sons a longa distância. Custom
Rollo� permite personalizar o comportamento da fonte de áudio.
De maneira sucinta, existem 4 passos essenciais para criar uma nova fonte de
áudio. Primeiramente, o usuário precisa importar os arquivos de áudio para o
projeto. Logo após, criar um objeto vazio na cena, selecioná-lo, no inspector >
Component > Audio > Audio Source. Por último, no inspector, localize a
propriedade "Audio Clipe" e atribua um clipe de áudio.
Audio Clip
O audio clipe disponibiliza os dados do arquivo de referência usado pelo
Audio Source. Antes de continuarmos, selecione o arquivo Dragon Spit Fire 1
na pasta “Free Sound E�ects Pack". No inspector, observe as propriedades do
Audio Clipe (Figura 2.7).
Figura 2.6 - Rollo� Mode
Fonte: Elaborada pelo autor.
Após importar um arquivo de áudio, o Unity criará automaticamente o audio
clipe associado ao componente audio source . Atualmente, a versão 2019.3.0a4
do Unity suporta os seguintes arquivos de áudio: .mp3, .ogg, .wav, .ai� / .aif,
.it, .xm, .s3m e mod. Vamos analisar as opções de personalização e as
principais propriedades do audio clipe :
Force to mono: quando ativada, o arquivo de áudio será mixado em
uma faixa de canal único. Dentre os benefícios, há a economia de
espaço quando o arquivo de referência tem uma faixa de audio
maior. Por padrão, recomenda-se ativar a opção para todos os ativos
de áudio (com curta duração), exceto os arquivos de música. Após
ativado, a opção Normalize �ca disponível e permite reproduzir os
níveis de volume dos arquivos de áudio de forma normalizada.
Load in background: propriedade desativada por padrão. Se ativada,
o arquivo de áudio será carregado em segundo plano, sem
interferência no encadeamento atual.
Load Type: propriedade usada pelo Unity para reproduzir arquivos
de áudio em tempo de execução. É possível escolher entre três
opções distintas: Decompress on Load, Compressed in Memory e
Streaming. O Decompress descompacta os arquivos de áudio assim
que a cena ou o audio source forem chamados. Por padrão, é
recomendado usar esta opção em arquivos com tamanho reduzido,
Figura 2.7 - Audio Clip
Fonte: Elaborada pelo autor.
para evitar sobrecarga no desempenho do jogo. Por exemplo,
descompactar arquivos de áudio com codi�cação Vorbis fará o jogo
utilizar cerca de dez vez mais memória do que armazená-los
compactados. O Compressed in Memory mantém os arquivos de
áudio compactados na memória até a descompactação em tempo de
execução. É recomendado ativar essa opção em arquivos de áudio
com tamanhos maiores, pois, os arquivos são descompactados em
tempo real. por �m, o Streaming codi�ca o arquivo de áudio em
tempo real. Durante a instalação ou execução do projeto, o método
armazena o arquivo de áudio em um local persistente no dispositivo
do usuário.
Compression Format: permite escolher o formato especí�co do
arquivo de áudio que será usado em tempo de execução. Por padrão,
a engine possui três formatos: PCM, ADPCM e Vorbis/MP3. O PCM é
um formato especí�co para arquivos.
O PCM é um formato especí�co para arquivos com tamanho
reduzido. Esse formato oferece alta qualidade no arquivo de áudio,
portanto, o tamanho do arquivo é maior. O ADPCM é um formato
recomendado para sons que precisam ser reproduzidos
constantemente, em intervalos curtos, como o som de um disparo de
arma de fogo. A opção mantém a qualidade do arquivo, sem utilizar
maiores taxas de compactação. O vorbis/mp3 gera arquivos
compactados com tamanho reduzido, mas com qualidade sonora
maior do que as outros formatos.
É possível reproduzir o arquivo de áudio diretamente da interface do Unity. Se
o usuário clicar duas vezes em um ativo de áudio, ele será reproduzido em
uma fonte externa. Na interface do Audio Clip , são disponibilizadas três
opções: AutoPlay , Loop e Play . Selecionando o AutoPlay , reproduzirá de forma
automática qualquer arquivo de áudio selecionado na interface do Unity. O
loop reproduz o arquivo selecionado de forma contínua. O Play reproduzirá o
arquivo imediatamente.
Os principais componentes da interface são: Canvas, Basic Layout, Visual
Components e Interaction Components. Nas próximas subseções, será
descrito cada um desses componentes.
Canvas
Para criar uma interface, precisamos de um um local onde colocaremos os
elementos presentes na cena. Para isso, usaremos o Canvas, uma área onde
todos os elementos da interface do usuário devem estar. Para fazer isso, vá
ao menu do Unity > GameObject > UI > Canvas. O componente é
automaticamente adicionado em cena. Selecione-o e pressione a tecla F para
exibir o componente na frente da câmera principal (Figura 2.8).
Interface Grá�ca (HUD)Interface Grá�ca (HUD)
A área Canvas é exibida como um retângulo na janela scene . Os elementos da
interface do usuário, no Canvas, são renderizados por uma ordem
hierárquica. O primeiro objeto �lho, ou subclasse, é renderizado
primeiramente; o segundo objeto �lho é o próximo, e assimpor diante. Se
algum elemento for posicionado no mesmo local, ou seja, se sobrepuseram, o
último objeto aparecerá em cima do objeto anterior.
O Canvas possui três modos de renderização:
O Screen Space – câmera, nesse modo, a tela é renderizada em um
um plano perpendicular à câmera principal. O Canvas é posicionado
a uma determinada distância da câmera. Os elementos da interface
do usuário são renderizados e visualizados por essa câmera.
Diferentemente do modo overlay , a câmera afeta o posicionamento
da interface do usuário. A interface será ofuscada por qualquer
elemento 3D em cena que esteja na frente do plano de visualização
da interface.
O overlay (ou sobreposição) é um modo de renderização em que a
tela da interface será renderizada sobre todos os outros elementos
visuais. Se a tela for redimensionada, o Canvas altera sua estrutura
para se adequar à nova resolução. Por consequência, todos os
elementos em cena são reorganizados. Essa propriedade é conhecida
Figura 2.8 - Canvas
Fonte: Elaborada pelo autor.
como tela responsiva. Pondere: onde essa con�guração é útil? Pense
por um momento: existem diversas resoluções de tela em
dispositivos móveis, por exemplo, smartphones e tablets . É necessária
uma boa proporção em qualquer tela, ou seja, algo que se enquadre
automaticamente em qualquer screen .
Por �m, temos o World Space , que é o modo de renderização que
torna o comportamento do Canvas igual a qualquer objeto em cena.
Esse é o único modo que permite que o usuário de�na manualmente
o tamanho da tela, usando o Rect Transform.
São propriedades importantes disponíveis no inspector para edição, que
determinam o comportamento da interface do usuário.
Os elementos da interface do usuário serão renderizados conforme o
posicionamento 3D em cena. Esse tipo de interface é conhecido como
diegético, por fazer parte do mundo do jogo.
Figura 2.9 - Rect Transform
Fonte: Elaborada pelo autor.
saiba mais
Saiba mais
O design de interface é um aspecto
fundamental em qualquer jogo, pelo qual o
jogador interage com os elementos do jogo.
A Teoria da Diegese adaptada aos jogos é um
conceito que estabelece que todos os
elementos da interface do usuário existem
no jogo, ou seja, a interface é visualizada pelo
avatar do jogo. Para compreender essa teoria
aplicada à construção de interfaces, leia o
artigo a seguir, na íntegra:
ACESSAR
Para compreender o funcionamento dos componentes estudados, acesse a
loja de assets do Unity e importe o ativo o�cial "Unity Samples: UI", para
visualizar, na prática, um exemplo de projeto, mostrando os aspectos do
sistema de interface do Unity.
Basic Layout
Em princípio, o Canvas permite que qualquer elemento da interface do
usuário seja posicionado e redimensionado, de acordo com as necessidades
do projeto. A barra de ferramentas da interface do Unity pode ser usada para
manipular os elementos do Canvas, assim como qualquer objeto em cena.
Para testarmos algumas propriedades do Canvas, será necessária a criação de
um elemento dentro do Canvas. Para isso, criaremos um button , um botão
padrão que pode ser clicado pelo usuário para acionar um evento especí�co.
1º - Na interface do Unity, com um Canvas adicionado à cena, selecione-o,
clique com o botão direito do mouse > UI > button. O elemento button será
adicionado em cena como subclasse do Canvas.
https://www.sbgames.org/sbgames2017/papers/ArtesDesignFull/174586.pdf
2º - No inspector, canto superior esquerdo do component Rect Transform,
clique em Anchor presets (Figura 2.10).
Esse componente contém prede�nições do Anchor, ou âncora. É um elemento
da interface do usuário que de�ne os parâmetros para um deslocamento �xo
do elemento. Por exemplo, se a âncora do objeto button for de�nida nas
bordas direitas do Canvas e este for redimensionado para a esquerda, o
button terá seu deslocamento para a esquerda (Figura 2.11).
Caso o usuário de�na a âncora nas bordas esquerdas e desloque o Canvas
para direita, o button permanecerá na sua posição original. É possível de�nir
manualmente a âncora de qualquer elemento em cena ou utilizar as
Figura 2.10 - Anchor presets
Fonte: Elaborada pelo autor.
Figura 2.11 - Anchor presets
Fonte: Elaborada pelo autor.
prede�nições do Anchor. Com esse elemento, é possível selecionar
rapidamente as principais con�gurações da âncora. Como exercício, selecione
o button e teste cada prede�nição de âncora. Não se esqueça de dimensionar
o Canvas para observar o comportamento do button .
Visual Components
Os principais componentes visuais da interface do usuário são texto ( text ) e
imagem ( image ). O componente texto pode ser adicionado da seguinte
forma:
1º - Selecionando o objeto Canvas > botão direito do mouse > UI > Text (Figura
1.12).
2º - No inspector, as suas principais propriedades são de�nir a fonte do texto.
Por padrão, o Unity utiliza a fonte Arial. Mas é possível importar novas fontes
para o projeto, do tipo TrueType (.ttf) e OpenType (.otf).
Para importar novas fontes, você pode ir à janela de projeto > Asset > Import
New Asset. Além de de�nir o tipo da fonte, é possível con�gurar o estilo. Por
padrão, existem os estilos normal, bold (negrito), italic (tipo cursiva, inclina-se
ligeiramente para a direita) e bold and italic . Existem parâmetros para de�nir
o alinhamento do texto, a cor da fonte, a possibilidade de controlar os
estouros horizontais ( horizontal over�ow ) e verticais ( vertical over�ow ), ou
seja, é possível de�nir o comportamento do texto de acordo com o
redimensionamento do Canvas.
Figura 2.12 - Text
Fonte: Elaborada pelo autor.
O componente imagem possui a opção de receber um sprite (objeto grá�co),
de�nir sua cor e preservar as proporções originais da imagem. O componente
Imagem pode ser adicionado selecionando o objeto Canvas > botão direito do
mouse > UI > image .
Interaction Components
Esses componentes são responsáveis pela interação entre o usuário e a
interface do jogo, acionando eventos de acordo com os Inputs, podendo ser,
mouse , teclado, joystick e telas de toque. Os principais componentes da
interface de usuário são:
Button: componente responsável por acionar um evento especí�co.
Por exemplo, acessar as con�gurações do jogo, salvar ou carregar os
dados do personagem, con�rmar determinada ação, abrir o
inventário ou qualquer menu dentro do jogo, entre outros. O button
trabalha com um sistema de eventos, entretanto, é preciso de�nir
parâmetros em um script e anexar ao objeto button . O componente
button pode ser adicionado selecionando o objeto Canvas > botão
direito do mouse > UI > button .
Toggle: é uma caixa de seleção que retorna os valores verdadeiro ou
falso. O usuário pode alternar entre ativada ou desativada.
Dependendo do valor, um evento é acionado. Por exemplo, ativar a
opção isKinematic do componente Rigidbody, dentro do jogo,
possibilita habilitar determina con�guração, deixar visível barras de
habilidades, objetos na interface do usuário, dentre outros. O
componente Toggle, pode ser adicionado selecionando o objeto
Canvas > botão direito do mouse > UI > Toggle.
Slider: o slide é um controle deslizante, que o usuário pode alternar
entre o valor mínimo (0) e máximo (1). Esse tipo de componente é
amplamente utilizado no controle de intensidade de elementos
audiovisuais, como o volume da música de fundo, sons do ambiente,
iluminação, brilho, dentre outros. O componente Slider pode ser
adicionado selecionando o objeto Canvas > botão direito do mouse >
UI > Slider.
Dropdown: um menu suspenso, contendo uma lista de opções
selecionáveis. Cada opção aciona determinado evento, por exemplo,
o próprio menu do Unity é um dropdown , que, quando clicado, uma
lista de opções é habilitada para o usuário selecionar. O componente
Dropdown pode ser adicionado selecionando o objeto Canvas >
botão direito do mouse > UI > Dropdown.
Input Field: uma caixa de texto interativa e editável, que permite que
o usuário edite o texto usando caracteres. Por exemplo, o campo de
entrada de texto, como o nomedo usuário, a senha, escolha do
nome do avatar, dentre outros. O componente Input Field pode ser
adicionado selecionando o objeto Canvas > botão direito do mouse >
UI > Input Field.
Todos esses componentes trabalham com o UnityEvent, um sistema de
evento que de�ne qual ação será acionada após o interação entre o
componente e o usuário. Posteriormente, trabalharemos com o sistema de
evento do Unity e suas interações via script .
saiba mais
Saiba mais
Vamos praticar? São inúmeros os
componentes que auxiliam no
desenvolvimento de interface do usuário.
Mas como esses componentes são utilizados
em jogos? Saiba que é possível desenvolver
qualquer elemento interativo na interface do
usuário, desde botões, menus, listas
suspensas ou elementos não interativos,
como barras de life, mana, stamina, dentre
outros. Acesse o link a seguir, para
compreender o funcionamento dos
componentes do Unity, além de aprender
como desenvolver uma barra de vida.
ACESSAR
Os componentes da interface do usuário (UI) da engine disponibilizam
recursos importantes para a construção de experiências visuais simples e
intuitivas. Cada componente possui diversas �nalidades, sendo possível
organizá-los, posicioná-los ou estilizá-los, de acordo com o projeto. Por isso,
estude-os, um a um, para compreender o seu comportamento conforme o
gênero e estilo do jogo.
https://www.youtube.com/watch?v=WvANy8Kp6Cs
O Unity é uma engine que oferece um sistema completo para iniciantes. São
inúmeras as ferramentas para criar um projeto do zero. Desde recursos,
como componentes para trabalhar com física, componentes visuais para criar
interfaces interativas e iluminação. Esse último recurso, a iluminação, é
essencial para que o jogador possa ver a cena e distinguir os elementos de
um cenário. Mas não apenas isso: a luz afeta as emoções (DARWICH;
TOURINHO, 2005).
Diversas técnicas de iluminação oriundas do cinema, ilustração e teatro são
usadas para aperfeiçoar o componente emocional nos jogos. O Unity possui
um sistema de iluminação global, que permite manipular o comportamento
da luz sobre as superfícies, além de controlar a intensidade, a cor, o contraste,
a sombra, a direção e outros efeitos de iluminação. Compreender esses
recursos permite entender como a luz afeta a estética do jogo e a experiência
do usuário.
Antes de falarmos sobre os principais componentes de iluminação no Unity,
re�ita: como enxergamos a luz? Ou melhor: como enxergamos as cores? Para
IluminaçãoIluminação
respondermos a essa pergunta, precisamos compreender como funciona o
comportamento da luz.
A luz é uma forma de energia eletromagnética. O olho humano saudável é
capaz de detectar apenas um curto intervalo do espectro de radiação
eletromagnética. O espectro visível é uma faixa de comprimento de onda
situado entre 400 (violeta) a 700 nanômetros (vermelho) (POZZER, 2008).
Portanto, o sistema �siológico interpreta as variações do comprimento de
onda e as associa a uma cor.
Cada cor é uma combinação de diferentes elementos absorvidos pela retina e
codi�cados pelo cérebro. A cor é uma sensação produzida pelo cérebro; já a
luz é uma radiação eletromagnética. A luz viaja diretamente pelo meio, pois
não existem substâncias no vácuo. No entanto, na presença de diferentes
materiais, a luz se comporta de maneira diferente. Em contato com algum
objeto ou substância, parte da luz é absorvida e convertida em energia. Se o
material for transparente (tipos de gases como o ar, líquidos como a água,
plásticos, vidros, entre outros), a luz propaga-se de forma retilínea no interior
sem sofrer interferência.
Mas se o material é translúcido (vidro fosco, papel, nuvens etc.), a luz
propaga-se de forma irregular. Além de transparente e translúcido, o material
pode ser opaco (madeira, metais, concreto, tijolos etc.), que não permite a
propagação da luz.
Assim, para calcular a incidência e sombreamento de um objeto no Unity, é
preciso de�nir o comportamento da luz. Portanto, é necessário conhecer a
intensidade, direção e cor da luz (na Figura 2.13, é possível entender o
comportamento da luz). O Unity fornece parâmetros em seus componentes
de iluminação, para que o usuário possa atribuir propriedades únicas a seus
objetos em cena. Por padrão, os componentes principais de iluminação no
Unity (Point Lights, Spot Lights, Directional Lights e Area Lights) são em tempo
real. O grande benefício do sistema é que a luz incide diretamente sobre o
objeto. Assim, a luz é atualizada a cada quadro em cena. Portanto, mesmo
que um objeto se movimento no ambiente, a luz o acompanha e é atualizada
imediatamente.
Figura 2.13 - Sombreamento de um objeto
Fonte: Tutorial de… (2020, on-line).
Antes de falarmos sobre os componentes de iluminação no Unity, precisamos
conhecer a janela geral de iluminação. Para isso, basta acessar o menu do
Unity >Window > Rendering > Lighting Settings (Figura 2.14). A janela contém
propriedades e parâmetros para controle da iluminação global da Unity. A
iluminação global é um sistema que de�ne o comportamento da luz. Assim, é
possível controlar como a luz é re�etida diretamente sobre um objeto (luz
direta) ou em outras superfícies (luz indireta).
A janela de iluminação possui três guias:
Scene: guia responsável por controlar a iluminação geral da cena,
sendo possível atribuir um material para skybox (bem como o
gradiente, cor e a intensidade), desabilitar o sistema global de
iluminação em tempo real, dentre outros. Essas propriedades não
de�nem o comportamento dos objetos individuais. Os efeitos são
aplicados ao ambiente da cena.
Realtime lightmaps: use essa guia para visualizar as texturas usadas
pelo sistema global de iluminação. Por padrão (iluminação em tempo
real), não é possível visualizar nenhum artefato nessa guia. É
necessário habilitar as opções baked lighting e mixed lighting . O
primeiro é um componente utilizado em um ambiente local, em que
o usuário pode de�nir os parâmetros com base nos objetos em cena.
Quando o usuário utiliza esse recurso, o Unity faz um cálculo prévio
da iluminação antes do tempo de execução normal. Portanto, a
engine não inclui o modo baked em cálculos de iluminação em tempo
de execução. Por consequência, a sobrecarga no tempo de execução
é minimizada. O mixed lighting é um tipo de iluminação mista, cujas
propriedades do componente alteram a cor e a intensidade de um
objeto durante o tempo de execução. Mas é preciso de�nir os limites
para esse comportamento. O sistema de iluminação mista trabalha
com objetos estáticos ou dinâmicos, fornecendo iluminação direta e
indireta para os objetos em cena. Todos os objetos dinâmicos
iluminados por um componente mixed sempre projetarão sombras
em tempo de execução em outros objetos em cena dinâmicos.
Baked lightmaps: por �m, temos a guia de objetos. O componente é
utilizado para visualizar as texturas do objeto selecionado, incluindo
as máscaras de luz do sistema global de iluminação e o mapa de
sombras.
Figura 2.14 - Lighting Settings
Fonte: Elaborada pelo autor.
É possível alterar as cores da luz de um ambiente com base na temperatura.
Para compreender o funcionamento desse sistema, acesse a loja de assets do
Unity e importe o ativo "Light Temperature" produzido por Muka Schultze. O
recurso possui um algoritmo que transforma uma temperatura especí�ca em
uma cor RGB.
Além da janela de con�guração geral de iluminação, a engine possui tipos de
luz que o usuário pode escolher para a cena do jogo: Point Lights, Spot Lights,
Directional Lights e Area Lights. Para adicionar o componente em cena, basta
acessar o menu do Unity > GameObjects > Light > “escolher o tipo de luz”.
Independentemente da escolha do usuário, é possível alterar o tipo de luz
diretamente do Inspector (propriedade light ). Observe a �gura 2.15, para
associar ao comportamento de cada um dos tipos de luz no Unity:
Point lights: essa luz é localizada em um ponto especí�co no espaço,
enviando luz igualmente em todas as direções. Esse tipo de luz é
utilizadopara simular objetos que incidem luz em pontos especí�cos,
por exemplo: lâmpadas, luminárias, LEDs etc. O usuário pode de�nir
o tamanho, a cor, intensidade, sombras, dentre outros. A intensidade
da luz diminui, de acordo com a distância estabelecida pelo usuário.
Spot Lights: uma luz pontual que é restringida a um ângulo
especí�co. O usuário pode de�nir o centro do cone em que aponta a
direção da luz, bem como a largura do ângulo do cone. A intensidade
da luz é mais forte no centro do cone e diminui nas suas
extremidades. Esse tipo de luz é utilizado em objetos que restringem
saiba mais
Saiba mais
Para compreender o funcionamento do
sistema de iluminação e sombreamento no
Unity com mais detalhes, acesse o link a
seguir, que possui diversos tutoriais
disponibilizados pela Unity Technologies e
possbilita que o usuário tenha noções
básicas e intermediárias sobre os sistemas
de iluminação global, materiais e o
sombreamento padrão na engine.
ACESSAR
https://learn.unity.com/tutorial/rendering-and-shading
a iluminação pelo ângulo, por exemplo: lanternas, faróis, holofotes,
dentre outros.
Directional Lights: a luz direcional é utilizada para simular grandes e
distantes fontes de luz. Geralmente, é localizada fora do alcance do
ambiente do jogo. É comum simular os efeitos do sol ou de objetos
que não possuem identi�cação usando luz direcional.
Diferentemente dos outros modos, a luz direcional ilumina todos os
objetos em cena, na mesma direção e mesmo ângulo. Observe que a
intensidade da luz nos objetos não diminui conforme a distância.
Área: por último, temos a luz de área, que representa uma luz
demarcada por um espaço, geralmente, retangular ou em disco. Não
é possível visualizar a luz em tempo de execução, pois o cálculo sobre
o processador é intenso. Assim, esse tipo de luz é utilizado em mapas
de luz.
Figura 2.15 - Tipos de luz no Unity
Fonte: Elaborada pelo autor.
Assim como os outros componentes disponibilizados pela Unity, é possível
alterar diversos parâmetros, para de�nir o comportamento da luz em uma
cena. Mas é necessário de�nir o comportamento de iluminação de um
ambiente. Por exemplo, quais objetos em cena são emissores de Luz, qual o
comportamento da luz direta e indireta, a iluminação será realista ou baseada
em parâmetros únicos, dentre outros. Além disso, é possível de�nir o grau de
profundidade e realismo de uma sombra. A engine de�ne automaticamente a
direção e a forma das sombras de um objeto, dependendo da intensidade da
luz e dos objetos em cena. Mas é possível alterar o tipo de sombra nas
propriedades do componente de luz.
Atualmente, a versão 2019.2 do Unity possui dois tipos de sombra: soft e hard
shadows . Ambas são localizadas na propriedade Light do componente de luz
adicionada na cena. O soft shadow de�ne as bordas das sombras dos objetos
como suaves; já o hard shadow aumenta a intensidade das bordas
(comportamento menos realista das sombras, mas que exige menos tempo
de processamento). Para conhecer as propriedades de iluminação no Unity
com mais detalhes, importe o ativo "Mountain Race Track: night" produzido
por Niandrei, da loja de ativos do Unity. O ativo é composto de uma cena
noturna de uma pista de corrida nas montanhas. Após importar o ativo,
observe as fontes de luz da cena. Feito isso, altere os pontos de iluminação da
cena para compreender os efeitos de luz nos objetos. Não se esqueça de criar
novas fontes de luz, alterando suas con�gurações para observar o
comportamento das sombras da cena.
reflita
Re�ita
Levando em consideração os assuntos abordados ao longo da
unidade sobre o Unity, re�ita sobre a in�uência e relação
entre o sistema de física e iluminação na engine.
indicações
Material
Complementar
LIVRO
Introdução ao desenvolvimento de games.
Volume 3: entendendo o universo dos jogos
Editora: Cengage Learning
Autor: Steve Rabin
ISBN: 978-8522111435
Comentário: terceiro volume da coleção de livros que
aborda a introdução ao desenvolvimento de games .
Nesta terceira parte, o leitor compreenderá os
principais tópicos acerca de temas na área de artes.
Para isso, o autor aborda as perspectivas e interação
entre as áreas audiovisuais e a produção de um jogo
eletrônico.
LIVRO
Manual de produção de jogos digitais
Editora: Bookman
Ano: 2012
Autor: Heather M. Chandler
ISBN: 978-8540701830
Comentário: um guia completo da produção de jogos
digitais, mas do ponto de vista do produtor, do líder do
projeto, o que está atrás das cortinas do projeto.
Apresenta tópicos gerais desde a pré-produção, testes
até o marketing, além de mostrar em detalhe um
projeto, na prática.
FILME
The movie
Ano: 2014
Comentário: documentário criado de uma campanha
no Kickstarter, uma plataforma de crowdfunding, ou
�nanciamento coletivo. A mídia mostra a evolução e o
desenvolvimento da indústria dos videogames,
explorando o desenvolvimento de diversos dos maiores
jogos já produzidos, com entrevista dos seus
respectivos criadores.
Para saber mais sobre o �lme, acesse o trailer:
ACESSAR
http://www.adorocinema.com/filmes/filme-229741/trailer-19541753/
conclusão
Conclusão
Não existe uma fórmula para fazer um bom jogo, nem mesmo prever se será
popular e rentável. A�nal, a indústria de jogos é considerada o setor mais
lucrativo do entretenimento no mundo. Por isso, antes de conceber um jogo,
é necessário estudar a metodologia utilizada para criar jogos com sucesso
consolidado. O Unity é uma engine utilizada por diversas empresas de
pequeno e grande portes, cujas principais características são a quantidade de
componentes na sua interface, lojas de ativo, extensa documentação e
comunidade ativa em fóruns da empresa. Nesta unidade, discutimos os
principais componentes da interface do Unity, desde as propriedades físicas
dos objetos à teoria da iluminação em cenas. Dominar uma ferramenta leva
tempo. É necessário, desde o início, consolidar a teoria com a prática. Para
isso, é preciso dedicar tempo a estudar a arquitetura do Unity, incluindo os
seus componentes, script, cenas, propriedades, objetos e interações entre os
elementos da interface. A interface do Unity é �exível e intuitiva para
iniciantes, mas sem um entendimento básico e uma prática adequada, o
usuário passará horas intermináveis corrigindo bugs na interface. Aprofundar
no tema estudado é fundamental para compreender os conceitos abordados
nesta unidade.
referências
Referências
Bibliográ�cas
DARWICH, R.; TOURINHO, E. Respostas emocionais à luz do modo causal de
seleção por conseqüências. Revista Brasileira de Terapia Comportamental
e Cognitiva , v. 7, n. 1, p. 107-118, 2005.
POZZER, C. T. Fundamentos de cor . Disponível em:
https://docplayer.com.br/34710055-Fundamentos-de-cor-1-cor.html. Acesso
em: 20 dez. 2019.
TUTORIAL de Pixel Art para iniciantes III dithering pontilhado em objetos
esféricos. The 8bit Zone , [2020]. Disponível em:
https://the8bitzone.wordpress.com/category/sombra-e-luz/ . Acesso em: 21
jan. 2020.
https://the8bitzone.wordpress.com/category/sombra-e-luz/

Continue navegando