Buscar

Desenvolvimento de Jogos Plataforma

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 62 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 62 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 62 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

DESENVOLVIMENTO DE JOGOSDESENVOLVIMENTO DE JOGOS
PARA WEBPARA WEB
DESENVOLVIMENTO DEDESENVOLVIMENTO DE
JOGOS MOBILE:JOGOS MOBILE:
CRIANDO UM JOGOCRIANDO UM JOGO
PLATAFORMAPLATAFORMA
Autor: Esp. Diego de Godoy Racero Escobar
Revisor : Deivt ih Cunha
IN IC IAR
introdução
Introdução
Tudo na vida tem seu nível de di�culdade e com o desenvolvimento de jogos
não poderia ser diferente. Mas é claro que, com o processo e ferramentas
certas, podemos diminuir essa di�culdade.
O desenvolvimento de jogos, em geral, é muito diverso e essa diversidade
vem da dose de criatividade que cada processo de desenvolvimento insere
em cada jogo.
Em uma analogia com a marcenaria, veremos que um marceneiro faz várias
mobílias de madeira, sua matéria-prima é a mesma, suas ferramentas
também, mas suas técnicas de uso da madeira vão variar com a necessidade
que a construção e o design da peça variarem.
Sendo assim, usaremos uma ferramenta que irá nos auxiliar no
desenvolvimento deste projeto. Com ela, conseguiremos acelerar o processo
do desenvolvimento de jogos em geral. Neste projeto, trabalharemos com 2D,
mas a ferramenta pode ir além disso.
Voltando a uma época na qual a parte boa dos videogames eram encontradas
em arcades, o mercado estava �cando saturado dos jogos do tipo “Space
Shooter” e a Nintendo ainda estava apostando suas �chas nesse tipo de jogo,
eis que no horizonte surge uma nova era dos jogos para arcade, a era dos
jogos plataforma (HARRIS, 2014).
Década de 1980, mais precisamente em 1981, a Nintendo estava prestes a
lançar o arcade com o jogo do gênero “Space Shooter” ou só “Shooter”; seu
nome era Radar Scope.
Jogos PlataformaJogos Plataforma
Em geral, as pessoas não conhecem esse jogo, pois alguns meses antes da
Nintendo enviar do Japão aos Estados Unidos três mil unidades do arcade
com o jogo “Radar Scope”, eles decidiram mudar a estratégia. A verdade era
que a Nintendo estava apostando muito nesse jogo, mas a era dos arcades
precisava de um novo tipo de jogo, então a Nintendo resolveu “ consertar ”
seu produto (HANSEN, 2016). “Parecia que todos os jogos que estavam por aí
que não eram Pac-Man eram um space shooter, e Radar Scope �cou perdido
na mistura impressionante que foi 1980” (HANSEN, 2016, p. 34, tradução
nossa).
Shigeru Miyamoto foi o homem escolhido para “ consertar ” o jogo, e o
resultado nós já conhecemos - foi o primeiro jogo do gênero plataforma
lançado no mercado.
No começo, Miyamoto queria criar um jogo do “Popeye”, mas algumas
complicações com os direitos autorais surgiram e, então, ele resolveu seu
problema mudando as características dos personagens. Nasceram três novos
personagens originais da Nintendo, “Jump Man”, “Lady” e “Donkey Kong”
saibamais
Saiba mais
Conheça melhor o jogo que deu lugar ao tão
aclamado game que revolucionou o mercado
de jogos para sempre, o Radar Scope. Esse é
o jogo que cedeu gentilmente o lugar para o
jogo Donkey Kong de Shigeru Miyamoto.
ACESSAR
https://nintendo.fandom.com/wiki/Radar_Scope
(HANSEN, 2016). Mais tarde, o “Jump Man” e a “Lady” �cariam conhecidos com
outros nomes, Jump Man se tornaria Mario e a Lady, a Princesa Peach.
Esse jogo �cou conhecido como revolucionário, pois, até seu surgimento,
ainda não existiam jogos com personagens que pudessem pular. O botão de
pulo foi inventado com o jogo Donkey Kong (HANSEN, 2016).
Apesar de o jogo Donkey Kong ser o primeiro do gênero plataforma, a função
de pular de uma plataforma para a outra só aparece na segunda fase do jogo;
na primeira fase, o “Jump Man” só pulava por cima dos barris que o Donkey
Kong atirava contra ele e subia as escadas para alcançar a “Lady”.
Shigeru Miyamoto tinha uma visão idealista de que os videogames deveriam
ser vistos da mesma forma que livros e �lmes, ou seja, o trabalho de quem
desenvolvia um jogo deveria ser tão valorizado quanto o de quem produzia
livros e �lmes (HARRIS, 2014).
saibamais
Saiba mais
Conheça o primeiro jogo que foi categorizado
como jogo plataforma, o Donkey Kong, de
1981. Criado por Shigeru Miyamoto, em seu
primeiro trabalho como Game Designer,
Miyamoto entregou um jogo revolucionário,
que elevou seu nome às alturas como
Designer de jogos.
ACESSAR
http://www.dedegames.com/pt/donkey-kong-arcade-return.html
Exemplos de Jogos Plataforma para
Mobile
Esta modalidade de jogo chamada de “Plataforma” é basicamente um jogo no
qual o jogador pode saltar de uma plataforma para outra, claro que o jogador
pode apenas andar de uma plataforma para a outra. No entanto, como vimos
anteriormente, junto ao surgimento dos jogos plataforma surgiu também a
possibilidade de pular com o personagem que jogamos. Logo, um jogo
plataforma é um jogo no qual o personagem controlado pelo jogador pode
saltar de uma plataforma para outra.
Levando isso em consideração, vamos fazer uma breve análise de três jogos
plataforma que estão no mercado hoje e têm jogabilidades diferentes e
estilos diferentes, tanto no gameplay quanto em suas histórias.
Mario Run
Mario Run é um jogo em que o personagem, já mundialmente conhecido,
Mario, corre do início ao �m da fase, e, apesar de o jogador ter vários
obstáculos, inimigos e itens que podem ser coletados, conta com apenas um
botão para apertar e realizar todos os movimentos dentro do jogo.
Todos os movimentos que podemos realizar no jogo Mario Run estão ligados
a realizar pulos no momento correto para que o personagem passe pela parte
da fase desejada e possa marcar combos, coletar itens e(ou) destruir inimigos.
A mecânica deste jogo é basicamente pular, mas o seu design aplica algumas
di�culdades em pular no tempo correto, manter uma certa sequência e evitar
ser pego por um inimigo, cair em algum buraco, ou algum tipo de armadilha,
ou seja, algum tipo de lugar que o personagem não pode cair, caso contrário,
ele perde uma vida.
Dessa forma, podemos ver um jogo plataforma muito diferente do padrão, e
quando dizemos padrão queremos nos referir ao clássico jogo “Donkey Kong”
de 1981. Podemos ver que o gênero/tipo de jogo classi�cado como
plataforma pode abranger vários tipos de design e jogabilidades diferentes.
Sword of Xolan
Sword of Xolan é o jogo mais próximo do jogo padrão que foi referido
anteriormente. Podemos pular de uma plataforma para outra, podemos
pegar itens que nos dão algum poder, como no “Donkey Kong”, em que o
personagem principal tinha a possibilidade de pegar a marreta para destruir
os barris que o Kong jogava.
Nesse jogo, temos NPCs que podemos resgatar, igual ao “Donkey Kong”. O
objetivo principal era salvar a princesa “Lady”. Há obstáculos que devemos
atravessar, mas o mais importante é que podemos nos mover livremente, ou
seja, diferente do Mario Run, onde só é possível pular, no Sword of Xolan,
podemos nos mover para frente, para trás, saltar, bater com a espada, lançar
uma determinada magia, coletar itens, destruir inimigos, resgatar os
prisioneiros e atravessar a fase do início até seu �m, quando saímos da fase e
os pontos são contados.
Basicamente, nos jogos plataforma, temos uma fase, a qual devemos
atravessá-la e, para isso, precisamos vencer suas di�culdades, e, no �m,
vencer o desa�o e, muitas vezes, conhecer uma história.
Once Upon a Tower
Once upon a tower é um jogo que traz uma aventura muito interessante.
Basicamente é a história de uma torre que aprisiona uma princesa. Além dos
inimigos e armadilhas pelo caminho dessa torre, existe um dragão que
desperta, no momento que iniciamos a descida da torre, e começa a
perseguir a personagem cuspindo fogo por grades nas paredes da torre. Caso
o jogador deixe a princesa parada por muito tempo em um lugar onde exista
uma janela gradeada, o dragão se posiciona para cuspir fogo nela, causando a
derrota do jogador - outro jogo que traz as mecânicas básicas de um clássico
jogo plataforma.
Além de pegar itens e poder fazer uso de outros, o jogo conta com inimigos e
as plataformas, mas uma das coisas mais interessantes que esse jogo traz em
seudesign e mecânica é que a princesa não pula, ela cai.
A personagem principal, a princesa, desce a torre, por isso o jogo traz em seu
gameplay a mecânica de destruir a plataforma que está embaixo da princesa
para que ela possa continuar a sua descida e, assim, escapar da torre. Esse
jogo é interessante, pois retira um dos elementos mais básicos dos jogos de
plataforma, que é a possibilidade de pular; a não ser que consideremos que,
ao destruir a plataforma que está abaixo dela, a princesa esteja pulando para
a plataforma inferior, mas claro que não né.
O pulo é um elemento básico nos jogos do tipo plataforma, mas, como esse
jogo demonstra, ele não é o que de�ne esse tipo de jogo. A de�nição básica
dos jogos plataforma são simplesmente as plataformas, não importando
quais tipos de mecânicas mais estejam envolvidas.
Contexto atual do mercado Mobile
Como este mercado é movido basicamente por meio da indústria de venda de
celulares, vale a pena começarmos a falar sobre a quantidade de pessoas no
mundo que fazem uso desse aparelho.
Uma pesquisa feita pelo repórter Jonas Valente para o site Agência Brasil traz
informações referentes à quantidade de pessoas do mundo que usam
aparelhos celulares; o número é impressionante - cerca de 5 bilhões de
pessoas fazem uso dessa tecnologia em todo o mundo. Hoje são 67% da
população mundial, e a pesquisa prevê o crescimento desse percentual para
71% até 2025 (VALENTE, 2019, on-line ).
Possivelmente, nem todos usam os celulares para jogar algum tipo de jogo,
mas esse número nos mostra o vasto mercado que é a indústria mobile. Os
celulares têm uma vantagem em relação a estarem ao lado de seus donos
basicamente 24 horas por dia, do momento que vamos dormir até
acordarmos no dia seguinte. A possibilidade de serem usados para passar o
tempo é muito grande e nada como um bom jogo para servir de passatempo.
Dos 100% de jogos vendidos no mundo para todas as plataformas, os
vendidos para celular ganham a liderança em vendas quando comparados às
outras plataformas de jogos, como computadores e consoles. Em 2016, foi
feita uma pesquisa sobre a plataforma favorita dos jogadores de videogames,
e o celular ganhou com 76%, competindo com computadores pessoais, jogos
on-line e consoles (CUSTOMER ..., 2016, on-line ).
Podemos pensar para qual tipo de plataforma mobile devemos desenvolver
jogos. Em geral, as pessoas podem lembrar das três principais, Android, IOS e
Windows Phone, mas, em relação a todos os celulares do mundo, o Android
está instalado em 88% deles (HOLST, 2019, on-line ).
Digamos que precisamos decidir entre essas três e escolher para qual
devemos lançar nosso primeiro jogo. Devemos levar em consideração o
mercado no qual desejamos entrar e qual o público-alvo que desejamos
atingir, mas vamos pensar agora em relação a aparelhos que têm um desses
três sistemas funcionando.
Vamos fazer uma breve comparação com os números que temos. Se a
quantidade de celulares do mundo está por volta de 5 bilhões e 88% desses
são celulares Android, teremos a quantia de 4.400.000,000 (quatro bilhões e
quatrocentos milhões) de aparelhos rodando com o sistema operacional
Android.
Como o Android leva uma enorme fatia do mercado, contra o segundo
colocado, que é o IOS com apenas 11.9% dos cinco bilhões de aparelhos,
nossa escolha �ca mais simples de ser feita, mas com a possibilidade de se
disponibilizar para as duas principais plataformas, sendo viabilizadas pela
Unity. Um jogo publicado em ambas as plataformas atingirá um total de
99.9% de todos os aparelhos disponíveis no mercado mundial.
Devemos lembrar que existem versões diferentes de Android e IOS. Por esse
motivo, devemos ter em mente a partir de qual versão do Android e do IOS
nosso produto poderá ser executado, mas ainda teremos uma enorme
quantidade de possíveis dispositivos para instalar e rodar nosso produto.
Com esses números �ca fácil de escolher o Android como melhor candidato
para os primeiros produtos, mas deve-se levar em consideração o seguinte:
caso você seja um usuário do IOS, há algum tempo, provavelmente tem
alguma ideia do tipo de aplicativo que melhor vende na plataforma desejada;
dê uma olhada na loja e veja os jogos que mais são vendidos ou baixados;
dessa forma, terá uma base melhor sobre qual tipo de jogo o público mais
gosta.
Leve em consideração que gostar do jogo que está fazendo é muito
importante, pois os melhores e mais vendidos começaram assim, com seus
desenvolvedores gostando do jogo e querendo fazer um jogo que eles
gostassem de jogar. Lembre-se de que a criação de um jogo é uma arte que
devemos praticar para que possamos nos aperfeiçoar nela; não há garantia
de sucesso em seu primeiro título, mas, com muito esforço e garra, você
poderá chegar lá.
Por que  jogar um jogo?
Responder a esta pergunta é uma tarefa muito importante para os criadores
de jogos - qual seria o gatilho de motivação que incentiva uma pessoa a jogar
um jogo, não importa a idade nem se é homem ou mulher.
Rouse, em seu livro “Game Design: Theory & Practice”, levanta algumas
perguntas pertinentes nesta área:
● Por que os jogadores jogam?
● Por que eles escolhem ligar o computador ou o console e
executar um jogo em vez de visitar o museu de arte ou assistir a
um �lme?
● O que há de único em jogos de computador em comparação
com outras mídias de entretenimento humano?
● O que os jogos oferecem que outras atividades não oferecem? (III
ROUSE, p. 2, 2005 , tradução nossa)
Essas perguntas podem ter várias respostas. Por exemplo, uma pessoa pode
jogar um jogo por causa da história e outro por causa de sua jogabilidade;
mas, no �m, a pessoa joga, pois os jogos nos possibilitam novas experiências
do conforto de nosso sofá.
Escolher ligar o computador ao invés de sair e ir ao cinema também pode ter
várias respostas diferentes. Podemos concluir que o jogador deseja ser
desa�ado. Em geral, os jogos digitais que são mais difíceis de serem resistidos
pelos jogadores são os que propõem a eles um desa�o (III ROUSE, 2005).
Os jogos nos fazem pensar e tentar novas soluções para os problemas
propostos por eles. Os jogadores esperam resolver diferentes mecanismos de
jogo. Mesmo que o desa�o esteja dentro de um jogo e não necessariamente
dentro de um livro, o jogador aprende com os seus desa�os. Podemos
concluir que os jogos desa�adores nos proporcionam experiências de
aprendizagem, por mais que sejam motivadas por desa�os dentro do mundo
virtual (III ROUSE, 2005).
Nos melhores jogos, os jogadores aprenderão lições através da
jogabilidade que podem ser aplicadas a outros aspectos de sua
vida, mesmo que não percebam. Isso pode signi�car que eles
podem aplicar métodos de resolução de problemas em seu
trabalho, usar suas habilidades espaciais aprimoradas para
organizar melhor seus móveis ou talvez até mesmo aprender uma
maior empatia por meio da representação de papéis (III ROUSE,
2005, p. 2-3, tradução nossa).
Um exemplo de motivação aos jogadores é encontrado em jogos de
progressão, que nos trazem novos ambientes, novas aventuras e maneiras de
testar nossas habilidades, que adquirimos com o passar do jogo. Os
jogadores têm mais uma maneira de interação com o jogo - a exploração das
suas fases; dessa forma, podem aproveitá-lo mais.
Existe a exploração de diferentes opções estratégicas em um jogo
como Civilization, diferentes tipos de recursos para manipular e
combinar em um jogo como Magic: The Gathering e a exploração
das personalidades dos personagens que você encontra em RPGs
como Wasteland ou Fallout (III ROUSE, 2005, p. 6, tradução nossa).
Jogadores que passaram por novas fases do jogo logo após desvendar um
mistério ou atravessar uma fase muito desa�adora podem sentir a
grati�cação de missão cumprida. Muitos jogadores, ao chegar a uma nova
fase, no primeiro momento só querem se vislumbrar com as novas paisagens
e ou inimigos e pensar como farão para vencer este novo desa�o. Nesses
jogos, em geral, os desa�os são progressivos, e o jogadorespera isso.
Os jogadores esperam ser desa�ados.
Mesmo que a exploração de um jogo não seja completamente essencial ao
que podemos chamar de experiência pura de jogo, a possibilidade de
explorar um mundo novo pode proporcionar ao jogador uma experiência de
jogo mais rica e, com ela, os jogos podem se destacar de uma forma diferente
dos �lmes e livros, fazendo com que o jogador possa ter uma participação
mais vivida na história (III ROUSE, 2005).
Diversos motivos podem levar uma pessoa a jogar um jogo. Uma das maiores
provas é a quantidade de títulos e gêneros existentes no mercado. Muitos
títulos diferentes do mesmo gênero tentam possibilitar ao jogador reviver
sensações que viveu nos outros títulos - esse é um dos motivos de existirem
tantos jogos de zumbi, por exemplo.
Mas, em geral, podemos encontrar alguns fatores similares entre os jogos; um
bom gameplay e mecânicas são ingredientes que precisam estar presentes
em todos, pois essas são as dinâmicas básicas para todos os jogos, por mais
simples que seja.
Uma breve ideia sobre Game Design
Quando analisamos os padrões que o mercado de jogos tem mantido em
vários títulos diferentes, podemos ver que possuem uma característica muito
importante para os jogadores: eles funcionam.
Esses padrões são mantidos em diferentes títulos de jogos e em diferentes
empresas que os produzem. Como exemplo, temos jogos de tiro em terceira
pessoa e em primeira pessoa. Um padrão mantido nesses dois tipos são os
controles de movimentação dos personagens (apesar de existir a
possibilidade de mudarmos quais serão as teclas do teclado que farão estes
movimentos, em geral os jogadores as mantêm). Para citar algumas, temos as
teclas “W, S, D, A” que, em geral, são usadas para movimentar o personagem
que o jogador controla. Essas são apenas algumas das teclas que são
mantidas há muito tempo como padrão em vários jogos.
Podemos imaginar a jornada de um jogador como uma carreira no mundo
dos jogadores de jogos. Em geral, quando um novo título é lançado, e um
jogador experiente o joga, ele espera encontrar determinados controles e
ações que já vem aprendendo e desenvolvendo no passar de sua carreira de
jogador. Quando esse novo título não traz os padrões desejados pelo jogador,
ele pode encontrar di�culdades e reagir de forma negativa ao experienciar o
jogo.
Quando não corroboramos a essas expectativas, entramos em
uma arriscada área cinzenta, pois o jogador pode achar que seu
jogo frustra sua experiência, pois o jogo vai contra o que eles
aprenderam durante suas carreiras. Por exemplo, os jogos de
estratégia em tempo real (Real Time Strategy RTS) permitem
selecionar um grupo de unidades para dar ordens. A possibilidade
de arrastar uma caixa de seleção em torno de um grupo de
unidades é um recurso esperado de qualquer título do RTS. Ao não
implementar esse recurso, você basicamente aposta contra seus
jogadores: antes de fazer isso, dedique algum tempo para pensar
se realmente faz sentido para o seu jogo negar o que outros jogos
provaram ter funcionado bem (SCOLASTICI, 2013, p. 149, tradução
nossa).
Fazer um bom design para seu jogo é uma tarefa que requer prática, mas é
uma parte essencial, pois, sem pensar como o jogo deve reagir a
determinados comandos e a determinadas ações do jogador, entramos numa
área cinzenta, que pode ser uma grande vantagem (ou desvantagem), ainda
mais se esta funcionalidade que implementamos (ou deixamos de
implementar) seja de grande uso nos gêneros de jogos mais jogados no
mercado.
Uma dica que devemos seguir é sempre fazer uma pesquisa de mercado para
compreender melhor nosso público-alvo. É importante lembrar que sempre
devemos pensar em qual público desejamos atingir com nosso produto, pois
assim como há algum tipo de música ou �lme que não são do nosso agrado,
existem jogos que serão considerados ruins ou chatos por algumas pessoas.
Portanto, os criadores dos produtos devem entender melhor o que seu
público-alvo deseja consumir, para que assim tenham um melhor resultado
nas vendas.
Game Design Mobile
Os jogos mobile têm suas características especí�cas quando pensamos em
mecânicas que funcionam bem nesse tipo de plataforma. Podemos ver em
diferentes títulos e gêneros que um dos padrões adotados pela maioria dos
jogos mobile são as telas com pouca informação em tempo de jogo. Claro que
sempre existem os títulos que são o ponto fora da curva, mas devemos nos
lembrar de que, nesse universo, os jogos mobile são executados em
dispositivos com telas muito menores que as telas de um computador
padrão; por esse motivo, devemos tomar cuidado com a quantidade de
informação que colocamos em tela.
A interface do usuário de um jogo deve ser projetada levando em
consideração dois aspectos: qual é a aparência do jogo e quais são
as ações que o personagem principal executará e como. Comece
de�nindo uma lista de funções que devem ser incluídas na interface
do usuário, como pontuação, vida útil disponível, valor do dinheiro
real e virtual, mira e mini-mapa, o que for absolutamente
necessário para ser exibido na interface dos jogos (SCOLASTICI,
2013, p. 155, tradução nossa).
Ao tomar qualquer decisão quanto a funcionalidade e informações que serão
exibidas na tela de seu jogo, lembre-se da aparência dele, tenha sempre em
mente como deve ser e como deseja que se comporte. Esse é um dos grandes
motivos de criarmos tantos documentos para nos guiar até a conclusão de
nosso projeto.
Nunca subestime um bom design e uma boa prototipagem.
Devemos tomar cuidado com as promessas que fazemos aos jogadores
quanto ao funcionamento de nossos jogos. Os controles e os grá�cos são dois
dos fatores que mais afetam a experiência do jogador. Os controles devem
ser intuitivos e de fácil adaptação, ou seja, fáceis de aprender. Se tiverem
algum tipo de demora nas ações e não atenderem prontamente aos
comandos do jogador, seu gameplay estará comprometido e este jogo não
terá muito sucesso no mercado (SCOLASTICI, 2013).
Nem todos os projetos de jogos têm o intuito de serem produtos de prateleira
de alguma loja de jogos ou lojas virtuais de venda; um exemplo é o Pokemon.
O projeto não foi iniciado com intuito de venda, ou seja, com sentido
comercial. O criador principal do jogo, Sr. Tajiri, não pensou na popularidade
do jogo quando o desenvolveu, ele queria fazer algo que gostaria de jogar.
Por sorte, o que ele queria jogar foi bem aceito no mercado e teve uma
aceitação grande. Uma característica que podemos ressaltar neste projeto do
Pokemon foi o amor e a vontade de desenvolver o produto e, no �nal, o
mercado aceitou muito bem (ROUSE, 2005).
E esse é o ponto: não fazer algo vender, algo muito popular, mas
amar algo e fazer algo que nós criadores possamos amar. É o
sentimento central que deveríamos ter ao criar jogos. Shigeru
Miyamoto, falando sobre a criação de Pokemon (ROUSE, 2005, p.
1).
A paixão pelo desenvolvimento de seu projeto é realmente uma parte muito
importante para o sucesso do desenvolvimento de qualquer tipo de projeto
em qualquer tipo de atividade.
Uma outra parte muito importante, ainda mais quando falamos de jogos
mobile, são as interfaces dos jogos. A interface do usuário é um elemento que
afeta muito o gameplay de um jogo, é a parte que vai de�nir como o jogador
interage com o jogo e como ele conclui as tarefas dadas pelo jogo
(SCOLASTICI, 2013).
Quando um jogo tem uma interface bem criada, ou seja, quando o design é
bem feito, um jogo de mecânicas simples pode se tornar mais interessante.
Dessa forma, o jogo consegue atender às expectativas do jogador
(SCOLASTICI, 2013).
É sempre uma surpresa agradável para um jogador quando ele
percebe que pode executar alguma ação especí�ca exatamente
como ele a imaginou através da interface do jogo: se você
conseguir agradar muitos jogadores desta forma, seu jogo subirá
nas paradas de vendas! (SCOLASTICI, 2013, p. 147, tradução
nossa).
Segundo Scolastici (2013), mesmo que um jogo tenha muitas mecânicas
inovadoras, novos recursos,qualidade nos grá�cos, som e história, mesmo
com tudo isso, se o jogo não tiver uma boa interface, que seja intuitiva e
agradável, tem uma possibilidade grande de não vender bem. Sendo assim,
devemos nos atentar a vários aspectos na criação dos jogos, mas
principalmente devemos criar uma interface limpa e intuitiva para nossos
jogos.
Não existem padrões para criação dos jogos ou regras prede�nidas em
relação à criação de uma interface. Diferentes jogos têm diferentes mecânicas
e existem diversas maneiras de se implementar controles para estes jogos.
Podemos perceber que existem alguns elementos da interface do jogador que
são compartilhados entre jogos, sem depender do gênero (SCOLASTICI, 2013).
Para abordar a tarefa corretamente, é uma boa prática investir
algum tempo em pesquisa. Um bom ponto de partida é estudar os
aspectos gerais do design de interação. O design afeta a forma das
ferramentas que usamos em nossas atividades cotidianas em
qualquer nível e a psicologia cognitiva investigou minuciosamente
os meios para projetar interações efetivas entre os seres humanos
e as ferramentas e instrumentos que eles usam (SCOLASTICI, 2013,
p.148, tradução nossa).
Como pudemos ver, o design da tela do jogo em um dispositivo mobile é uma
tarefa muito importante, por isso devemos nos dedicar a criar uma interface
que seja amigável, reativa e precisa. Os jogadores de dispositivos mobile têm
a necessidade de jogos que tenham um tempo de reação rápida; em geral,
são jogos mais dinâmicos.
Devemos nos dedicar mais a essa parte do jogo, pois, caso não agrade o
jogador, o resto do trabalho será perdido, muitas vezes, sem serem testados
de forma adequada por causa de uma interface mal planejada. Em outras
palavras, podemos ter uma ideia e uma história com uma ótima mecânica,
mas isso tudo só será apreciado pelo jogador se os controles tiverem o
mesmo nível de qualidade que o resto do jogo.
Devemos ter em mente o que já foi dito anteriormente: por mais que seja um
jogo simples de poucas mecânicas, precisa ter bons controles e uma boa
interface com o usuário. “Qualquer jogo deve fornecer ao jogador
informações para entender se ele está ganhando ou perdendo” (SCOLASTICI,
2013, p.148, tradução nossa).
Uma breve prototipação
A prototipação é um estágio muito importante na arte do desenvolvimento de
jogos. Mesmo que o desenvolvedor tenha todas as ferramentas para realizar
o desenvolvimento, sem um objetivo e caminho a seguir, o projeto não terá
para onde ir.
Breve prototipagem do jogo
Para simpli�car esta parte, vamos pensar em como o jogo deve ser, descrever
as funções e como o ambiente do jogo será montado. Nesse jogo plataforma,
teremos:
Personagem Principal
Rei
Inimigos
Itens coletáveis
Plataformas
Portas
Alavancas
Pulo
Ataque
Armadilhas
Mostrador de Vida
Mostrador de Pontos
Tela de Menu
Botão Start
Botão Créditos
O objetivo do jogo será descobrir a combinação correta de alavancas para que
possamos abrir as portas e o jogo prosseguir.
A ideia principal é que devemos salvar um Rei, que está localizado em alguma
parte do castelo.
Precisaremos também de algum tipo de controle para que o jogador possa
interagir com o jogo. Lembre-se de que estamos desenvolvendo um jogo para
um celular, ou seja, um aplicativo mobile, portanto devemos nos atentar para
algumas diferenças que somente os aplicativos mobile têm em relação ao
funcionamento do jogo e aparência. “Com tantos tamanhos de tela diferentes,
tão pouco espaço para trabalhar e nenhum padrão real no setor de
videogames, o design de interface é uma das partes mais difíceis da criação
de um jogo de sucesso” (SCOLASTICI, 2013, p.147, tradução nossa).
Em geral, os celulares têm boas resoluções de tela, e há celulares com
tamanhos de telas variados. Vamos pensar em um tamanho de tela
minimamente aceitável em relação a tamanho de aparelho (lembre-se que é
um celular, não um tablet). Vamos então pensar em um padrão de tela de 5
polegadas e usar uma tela com o tamanho de Full HD em pixel - ela �ca com
1920 de largura por 1080 de altura, no estilo de tela “Landscape”, ou
panorama.
A Figura 3.1 mostra o resultado ao qual desejamos chegar em nosso projeto
do jogo plataforma. É importante lembrar que a �gura é meramente
ilustrativa e, depois que você dominar todas as ferramentas, poderá
remodelar o jogo a seu gosto. Podemos ver na �gura:
Personagem
Inimigo
Itens coletáveis: Esmeraldas
Plataformas
Botões: Direita, Esquerda, Pulo, Ataque, Interação
Marcadores: Vida, Pontuação
Figura 3.1 - Print da Prototipagem
Fonte: Elaborada pelo autor.
Para compor este projeto, vamos usar assets diferentes. Na sequência, segue
uma lista de todos os nomes dos pacotes de assets que são disponibilizados
no site da Unity Asset Store. Inclua-os em seu projeto para que possa chegar
no mesmo resultado visual que o demonstrado aqui.
Lista:
Flat Platformer Template
Free Game Items
Medieval pixel art asset FREE
Tasty Characters - Castle Pack
Faça uma busca no site AssetStore da Unity com esses nomes, e encontrará
exatamente os mesmos pacotes.
Lembre-se de que pode encontrar imagens gratuitas em outros sites e(ou)
fazer as suas próprias imagens.
saibamais
Saiba mais
Este asset chamado “Trollnest” é o asset que
usamos para criar os botões de ataque, pulo,
interação, direita e esquerda. Perceba que os
botões direita e esquerda são iguais; basta
rotacioná-los para que �quem na posição
desejada. O botão de pulo é muito parecido
com os de direita e esquerda, mas as
imagens dentro do pacote são diferentes.
Saiba mais no link a seguir.
ACESSAR
https://assetstore.unity.com/packages/2d/gui/icons/trollnest-free-ui-buttons-140934
Para que possa usar essas imagens em seu projeto da Unity, basta arrastar a
imagem de dentro de uma pasta de seu computador direto para uma das
pastas de sua preferência dentro da aba “ Project ” dentro da Unity.
Nesse caso, sugiro que crie uma nova pasta onde irá agrupar as imagens;
assim, terá sempre um projeto bem organizado e vai encontrar as imagens de
forma mais fácil.
Tenha em mente que aqui queremos demonstrar a criação do jogo e, como
algumas mecânicas podem ser criadas, a parte principal será feita por você no
momento que dominar as técnicas apresentadas através dessas linhas. O
objetivo do material é salientar os aspectos de criação de um jogo e os
possíveis caminhos que pode você tomar. Sua criatividade fará o resto.
saibamais
Saiba mais
Para criarmos nossos projetos, devemos
lembrar que não é só a Unity que
disponibiliza conteúdos de forma gratuita. O
site itch.io, por exemplo, também tem muitos
conteúdos que podemos usar de forma
gratuita. Para que possamos ver isso em
ação, vamos usar esta imagem de coração
em nosso projeto. Será usada para
simbolizar a quantidade de vida que nosso
personagem ainda tem. Acesse o link a
seguir.
ACESSAR
https://gpway.itch.io/2d-hearts
praticar
Vamos Praticar
Na criação de um jogo, podemos ver que existem vários passos que devemos seguir
e muitos caminhos que podemos escolher até chegarmos à conclusão. Os desa�os
que o projeto vai nos apresentar com o passar do tempo serão conhecidos quando
chegarmos até eles. Pensando dessa forma, escolha a alternativa correta que traz a
parte mais importante na criação de um jogo.
a) Todo jogo precisa de uma boa história.
b) Todo jogo precisa de um bom personagem principal.
c) Todo jogo precisa de um bom inimigo.
d) Todo jogo precisa de boas mecânicas.
e) Todo jogo precisa de uma boa interface.
Vamos dar partida neste projeto. Com a nossa planta baixa, ou “Blueprint”,
podemos nos focar em preparar nossa ferramenta.
A primeira ação que devemos tomar após a criação do novo projeto e a Unity
�nalizar sua montagem e nos liberar para começar é a de�nição do “ Aspect
Ratio ”, ou seja, devemos de�nir a resolução da tela. Isso é feito na aba “
Game ”. Abaixo do nome da aba, vamos usar o tamanho em Full HD de (1920
x 1080) “Landscape”, ou panorama. Vamos de�nir uma tela deitada, poispara
o tipo de jogo que projetamos, será a melhor opção; além disso, precisamos
aproveitar o espaço da tela do celular.
Para que essas con�gurações sejam exibidas, precisamos mudar o “ build ” da
Unity. Seguiremos o caminho: File > Build Settings > selecionar a plataforma
Início doInício do
DesenvolvimentoDesenvolvimento
dos Jogosdos Jogos
Plataforma: NovasPlataforma: Novas
FerramentasFerramentas
Android e pressionar o botão “Switch Platform” e pronto; as opções de
tamanho de tela vão aparecer no “ Aspect Ratio ” da aba “ Game ”.
Lembre-se de que, apesar dos modelos mais novos virem equipados com
telas com resolução de 4K, as telas são pequenas, variando de 4 a 6 polegadas
nos modelos mais comuns. Por esse motivo, devemos aproveitar bem esse
espaço; não podemos nos esquecer de que os componentes da tela precisam
�car visíveis para que o jogador possa fazer uso deles.
Com a parte da resolução resolvida, vamos aprender uma nova
funcionalidade na Unity, o “ Tilemap ”.
saibamais
Saiba mais
Pesquisa sobre tamanho de tela de celular
pelo mundo revela que o tamanho médio de
tela é de 5 polegadas. Em geral, cada país ou
região tem suas próprias preferências e
descartam o uso de outros tamanhos de
celulares.
Esta pesquisa é interessante, pois quando
pensamos em fazer jogos para celular,
devemos saber que existem tamanhos que
serão muito pequenos para exibirem de
forma correta os botões e imagens
apresentados em nossos jogos. Saiba mais
acessando o link a seguir.
ACESSAR
https://www.tudocelular.com/android/noticias/n119931/tamanho-tela-mais-popular-mundo.html
O  “ Tilemap ” é um objeto que vamos criar dentro da nossa aba “ Hierarchy
”. Clique com o botão direito do mouse dentro desta aba, selecione o grupo
dos objetos 2D “ 2D Object ” e então o objeto “ Tilemap ”. Perceba que o
objeto que aparecerá terá o nome de “ Grid ” e, dentro dela, ou seja, sua “
child ” terá o nome de “ Tilemap ”.
Tilemap : É composto por uma “grid”, ou em português grade. Esta é
usada para dividir o espaço da tela; assim podemos montar o mapa
com os “ tiles ”. A tradução mais próxima para  “ Tilemap ” é mapa de
ladrilhos; é basicamente uma grade com espaços quadrados de
tamanhos iguais que devemos preencher com os “ tiles ”.
Vamos mudar o nome da “ child ” para “ Plataforma ”, pois será onde
colocaremos nossas plataformas, ou seja, será o local onde vamos colocar os
“tiles” nos quais o personagem, os inimigos e os itens irão �car em cima,
literalmente.
Ao lado do campo onde colocamos o nome do objeto, na aba “ Inspector ”,
veja que existe um campo chamado “ Static ”. Devemos marcar esse campo
para que a Unity entenda que os “ tiles ” desse objeto serão estáticos - não
desejamos que sejam movimentados.
Sabemos que você deve estar pensando: “mas eu queria fazer uma
plataforma que se movesse da direita para a esquerda igual às que aparecem
nos jogos do Mario”. Fique tranquilo! Veremos esse tipo de plataforma mais à
frente; vamos chegar lá.
Agora que selecionamos como estático, estes “ tiles ” vão reagir de modo
diferente à gravidade que teremos no jogo. Por exemplo, não vão cair da tela
do jogo, �carão travados estaticamente em seus lugares.
Abaixo do campo “ static ”, temos o campo “ layer ”. Nesse campo, devemos
criar o “ layer ” Plataformas no “ layer ” de posição 10.
Layer : A tradução desta palavra é “camada”. As camadas são usadas
para criar nossas fases do jogo. A câmera é usada para renderizar a
parte desejada da cena, também é usada para se saber a parte da
cena que deve ser iluminada.
Em seguida, no componente “ Tilemap Renderer ” no campo “ sorting layer
”, devemos criar também o “ layer ” Plataformas.
Sorting layer : Este campo trata da ordem dos “layers”, cuida da
sobreposição das camadas no momento da “renderização”.
Para que possamos desenhar o level/nível/fase, devemos colocar na tela da
Unity a janela “ Tile Palette ”. Para isso, devemos ir à barra superior da janela
da Unity no caminho: Window > 2D > Tile Palette . Podemos ver como fazer
na Figura 3.2.
Perceba que esta nova tela que criamos �cou solta, ou seja, �cou fora da tela
da Unity. Clique com o botão direito do mouse em cima do nome da tela e a
faça  virar uma aba da tela da Unity arrastando-a para baixo da aba “ Scene ”,
ao lado da aba “ Game ”.
Veja que, como já havíamos importado o “ Asset ” “ Medieval Pixel Art Asset
Free ” e ele traz consigo uma paleta de “ tiles ” que �ca na pasta
“Assets/Medieval_pixel_art_asset_FREE/palettes/Tiles_free.prefab”, a Unity a
reconhece e traz para dentro da nova aba “ Tile Palette ” este prefab com o
Figura 3.2 - Print Tile Palette
Fonte: Elaborada pelo autor.
nome de “ Tiles_free ”. Caso deseje criar ou selecionar outra paleta, isso pode
ser feito no campo logo abaixo do nome da aba “ Tile Palette ”. Esse campo
tem o nome da paleta selecionada ou está sem nome e pede para que seja
criada uma nova paleta. Para isso, clique no campo que está com o nome da
paleta e selecione “Create New Palette”. Uma aba abrirá abaixo do campo em
que você clicou com os campos: nome, grid e cell size.
Nome : nome da nova paleta.
Grid : modelo da grade que deseja criar. Essa grade é referente ao
tipo de tile que deseja importar para esta paleta: retangular ,
hexagonal ou isométrico .
Cell Size : refere-se ao tamanho do tile dentro da Grid. Em geral,
podemos deixá-lo em automático, para que a Unity possa detectar
automaticamente o tamanho das células de acordo com a imagem
que desejamos importar.
Podemos ver um exemplo na Figura 3.3, que traz a ilustração desta ação de
criar uma nova paleta. Perceba que, após clicar em uma nova tela, ela se
abrirá e nela devemos selecionar uma pasta para onde as informações serão
enviadas.
Figura 3.3 - Print Tile Palette: Criando paleta
Fonte: Elaborada pelo autor.
Cada um desses tiles tem o mesmo tamanho, portanto todos se encaixam
perfeitamente em relação aos seus tamanhos. Em geral, esta modalidade de
criação de jogo depende de tiles que sejam do mesmo tamanho; só
precisamos nos atentar aos tiles que formam combinações. A Figura 3.4 traz
um exemplo de algumas combinações, além das combinações que a paleta já
trouxe.
Figura 3.4 - Print Tile Palette
Fonte: Elaborada pelo autor.
Veja na Figura 3.4 que conseguimos formar com os tiles que já compõem a
paleta sequências de tiles que se encaixam bem; à esquerda a unidade que
usamos para compor a sequência de tiles que seguem à direita.
Podemos ver nesta Figura 3.4 que ela está ocupando toda a tela da Unity ou
boa parte dela. Para maximizar a aba “ Tile Palette ”, basta clicar com o botão
direito do mouse sobre seu nome e escolher a opção “Maximize”. Quando
quiser que a paleta volte ao tamanho anterior, basta fazer o mesmo processo.
Perceba que, quando a paleta está maximizada, um sinal azul aparecerá ao
lado esquerdo de “Maximize”. Isso indica que a paleta está selecionada,
portanto, ao clicar novamente em “Maximize”, o sinal será retirado. Teste esta
ação e veja o resultado. Você poderá ver que, dessa forma, �ca mais fácil
organizar os tiles dentro da paleta.
Provavelmente você deve estar se perguntando como fazer para criar
sequências de tiles como mostra a Figura 3.4. Trataremos disso, mas, antes,
vamos falar sobre as ferramentas presentes dentro da aba “Tile Palette”. Veja
na Figura 3.5 a barra de ferramentas que está presente dentro dessa  aba.
Figura 3.5 - Print Tile Palette: Ferramentas
Fonte: Elaborada pelo autor.
Vamos seguir os nomes, a sequência e as teclas de atalho de cada uma das
ferramentas para descrever suas funções:
Select Tool (S) : use esta ferramenta para selecionar um tile
desejado, ou mantenha o botão esquerdo do mouse apertado para
criar uma caixa de seleção maior e selecionar mais de um tile.
Perceba que, ao selecionar um tile, suas informações aparecem na
aba “ Inspector ”. Quando selecionamos um ou vários tiles, podemos
usar a ferramenta “ Move Tool ” para movê-los para outra posição na
“ Tile Palette ” ou na aba “Scene ”.
Move Tool (M) : para que esta ferramenta funcione, precisamos
fazer uma seleção de um ou mais de um tile com a ferramenta de
seleção “ Select Tool ”. Com a seleção feita, podemos então mover
estes tiles para outra posição na Scene. Da mesma forma, podemos
selecionar e mover um ou vários tiles na aba “ Tile Palette ”, mas,
para isso, é necessário que o modo de edição da aba “ Tile Palette ”
esteja ligado.
Paintbrush Tool (B) : para que a ferramenta pincel funcione,
precisamos selecionar um ou vários tiles. Para isso, pressione a tecla
“ Ctrl ” do teclado e clique no tile desejado tanto na aba “ Scene ”
quanto na aba “ Tile Palette ”. Para selecionar mais de um tile,
pressione a tecla   “Ctrl” e crie uma caixa de seleção do tamanho
desejado.
Box Fill Tool (U ): use esta ferramenta para selecionar um ou vários
tiles de uma só vez. Com a seleção feita, use a ferramenta para criar
uma ou várias réplicas da seleção que fez. Para isso, com a
ferramenta selecionada, clique na aba “ Scene ” e arraste o mouse,
gerando uma caixa de seleção que será preenchida com a seleção
feita anteriormente. Quando a caixa for maior que a seleção feita, os
tiles começarão a ser replicados. Teste para ver o funcionamento.
Picker Tool (I) : esta ferramenta é usada para copiar um ou vários
tiles, tanto da aba “ Scene ” quanto da aba “ Tile Palette ”. Após fazer
a seleção, a Unity fará a troca da ferramenta “ Picker Tool ” pela
ferramenta “ Paintbrush Tool ”.
Eraser Tool (D) : esta ferramenta é usada para apagar um ou vários
tiles da aba “ Scene ”, ou da aba “ Tile Palette ”, mas, para apagar da
aba “ Tile Palette ”, ela  precisa estar em modo de edição “Edit”. Para
fazer a ferramenta borracha ter o tamanho de mais de um tile, basta
clicar nela e arrastá-la na aba “ Tile Palette ” com o modo de edição
desligado, e depois usá-la na aba “ Scene ”. Para usá-la em um
tamanho maior na aba “ Tile Palette ”, basta, antes de ligar o modo
de edição, fazer a seleção da ferramenta e arrastá-la para que �que
do tamanho desejado; após isso, deve-se ligar o modo de edição.
Fill Tool (G) : esta ferramenta serve para preencher um espaço com
cópias do mesmo tile, e não conseguimos selecionar mais de um tile
por vez.
Uma dica : Para que compreenda melhor o funcionamento dessas
ferramentas, antes de começar a desenhar o jogo, faça alguns testes e
familiarize-se com as ferramentas antes de prosseguir.
Abaixo dessas ferramentas, temos a possibilidade de selecionar o “ Tilemap ”
que desejamos alterar no campo de nome “ Active Tilemap ”. Nesse campo,
apareceram todos os “ Tilemap ” que estão criados na “Grid” que está na aba
“ Hierarchy ”. Quando um “ Tilemap ” for selecionado, seu nome será
destacado pela Unity na aba “ Hierarchy ” com uma caixa amarela. Os tiles
que forem pintados na aba “ Scene ” pertencerão a esta camada do “ Tilemap
”. Isso signi�ca que, quando selecionamos o “ Tilemap ” que criamos com o
nome de “Plataforma” em que foi marcada a opção “ Static ”, todos os tiles
que forem pintados na aba “ Scene ” vão pertencer a este   “ Tilemap ” de
nome “Plataforma”.
Para que possamos selecionar um tile dentro da paleta “ Tile_Free ” e para
que seja possível criar novas formações de tiles dentro da paleta com os tiles
lá existentes, precisamos ligar o modo de edição. Para isso, devemos clicar no
botão “Edit” que �ca abaixo do nome da paleta e ao lado do seletor de
paletas; assim poderemos criar outras estruturas dentro da paleta, como
mostra a �gura 3.4.
Veja na Figura 3.8 que existem alguns tiles que estão em posições diferentes
dentro da paleta, estão inversos a outros que pertencem à mesma paleta.
Para que possa fazer isso, será necessário que abra a imagem que contém os
tiles que desejamos alterar em um editor de imagem; ela está localizada nesta
pasta:
“Assets/Medieval_pixel_art_asset_FREE/Textures/Medieval_tiles_free.png”.
Existem programas gratuitos muito bons na internet. Um de nossa
preferência é o “Paint.net”. Trata-se de um programa fácil de se usar e fácil de
se aprender a usar. Além disso, trabalha com camadas e, quando você
aprender a usá-lo de forma �uente, verá que é um ótimo editor para este tipo
de trabalho.
saibamais
Saiba mais
O programa Paint.net é muito versátil e
simples de se usar. Com pouco tempo de
prática, você verá que é um ótimo programa
para auxiliá-lo na edição de imagens para
este tipo de �nalidade de edição. Uma de
suas maiores vantagens é seu
funcionamento por camadas. Este
funcionamento é muito útil quando
desejamos criar cenários e até mesmo
desenhos com �ns de animação 2D. Acesse o
link a seguir.
ACESSAR
Não vamos entrar em muitos detalhes sobre como funciona um programa
editor de imagem, mas vamos compreender melhor sobre o funcionamento
da Unity quanto a incluir uma imagem de fora de um “ Asset ” que foi baixado
na “ Asset Store ”.
Veja na Figura 3.6 que, ao selecionar a imagem que foi alterada, a Unity não a
reconhece mais como um Atlas de imagens, ou seja, precisamos fazer as
divisões dos tiles desta imagem para que a Unity reconheça todos os tiles de
maneira individual e para que então possamos selecionar esta imagem e
fazer dela uma nova “ Tile Palette ”. Sendo assim, precisamos clicar no botão
“Sprite Editor” que está na aba “ Inspector ” do lado direito da tela. Essas
informações sobre a imagem vão aparecer quando �zermos a seleção da
imagem, ou seja, precisamos clicar na imagem e essas informações vão
aparecer na aba “ Inspector ”. Lembre-se: esta imagem já foi alterada em um
programa de edição.
https://www.getpaint.net/
A Figura 3.7 mostra a tela do “ Sprite Editor ”. No canto superior esquerdo,
temos o nome escrito na sua aba. Abaixo temos o botão “ Slice ”, que quer
dizer fatia. Esse é o botão que precisamos usar para fatiar a imagem que foi
editada. Após o fatiamento, a imagem será reconhecida pela Unity e
poderemos usar suas fatias como os tiles que conhecemos anteriormente.
Para fatiar essa imagem, precisamos saber quais são as dimensões dos tiles.
Como foi feita a sua edição no editor que foi mencionado anteriormente, sei
que cada tile tem o tamanho de 48x48 pixels e, como temos uma pequena
distância do primeiro tile do canto esquerdo superior da imagem, precisamos
saber esta distância também, que é de 16 pixels.
Podemos ver na aba que se abriu ao clicar no botão Slice que temos alguns
campos que precisam ser preenchidos para que possamos fazer o corte da
imagem. Vamos falar apenas dos campos que serão usados.
Os campos são:
Type : este campo deve ser selecionado como “ Grid by cell Size ”, ou
seja, quando selecionarmos o tamanho do “ Pixel Size ”, e do “ O�set
”, a grid será cortada de acordo com esses valores.
Pixel Size : é o tamanho da célula, ou seja, é o tamanho da imagem
que vai compor o tile; neste caso ( x = 48) e (y = 48).
Figura 3.6 - Print Edição de Imagem
Fonte: Elaborada pelo autor.
O�set : é o espaço que temos que dar de (x = 16) e (y = 16), pois a
imagem não está começando no primeiro pixel da �gura.
Pivot : este valor está como centro; ele representa o ponto de
rotação desta imagem. Imagine que deseja colocar uma �gura que
precisa ter a rotação em alguma parte da imagem. Para isso,
podemos arrastar o pivot ou pivô da imagem para onde for melhor.
Quando todos esses campos estiverem com seus valores preenchidos e
escolhidos, podemos clicar no botão “Slice”.
Para compreender melhor como funciona esta ferramenta de corte,
experimente outras con�gurações e veja o resultado. Se selecionar
automático, verá que o corte será feito em blocos de imagem. Podemos
selecionar este corte e pressionar a tecla delete do teclado e criar um novo
corte com o mouse, clicando com o botão direito do mouse e arrastando para
de�nir um tamanho. Após criar esse corte, poderá redimensioná-lo com o
mouse clicando em um de seus cantos, simbolizados por círculos azuis.
Perceba que, no meio desta seleção, existe um anel azul, que pode ser
movido para qualquer parte da seleção. Ele representa o pivôda imagem.
Podemos ver os cortes em verde na Figura 3.7; e no primeiro tile que está na
parte superior esquerda da imagem, podemos ver o pivô e os círculos azuis.
Por �m, precisamos con�rmar as alterações. Para isso, pressione o botão “
Apply ”, que �ca à direita da tela no canto superior.
Figura 3.7 - Print Editor de Imagem
Fonte: Elaborada pelo autor.
Após aplicar as alterações, podemos criar uma nova “ Tile Palette ”. Em
seguida, arrastar a nova imagem para dentro da aba “ Tile Palette ”, que a
imagem será importada e a paleta estará pronta para uso.
Selecione a imagem que acabou de fatiar, vá até a aba “ Inspector ” e
veri�que se o campo “ Pixel Per Unit ” está com o mesmo valor que
determinou para seu tile. Nesse caso, o valor era de 48. Caso não esteja com
esse valor, altere; caso contrário, terá problemas com tamanho da imagem do
pixel na tela do jogo.
Pintando Tilemap: Fundo e Plataforma
Veja na Figura 3.8 que existe uma ferramenta de foco. Ela  aparecerá na aba “
Hierarchy ” logo após criarmos o “ Tilemap ” que �ca dentro do objeto
chamado “Grid”. A ferramenta foco está situada no canto inferior direito da
aba “ Scene ”; seu único campo tem o nome de “ Focus On ”, que signi�ca
focar em. Ela serve para dar foco ou em um “ Tilemap ” ou na “Grid” inteira,
ou seja, em todos os “ Tilemaps ”  que estão na grid. Ainda existe mais uma
opção, que é não dar foco em nenhum “ None ”.
Este foco serve para salientar em qual “ Tilemap ” estamos desenhando os
tiles. Dessa forma, quando pintamos um tile na aba “ Scene ”, �ca colorido,
pois o “ Tilemap ” que estamos pintando está focado, igual mostra na Figura
3.8. Podemos ver na �gura que existe uma parede atrás dos tiles que estão
coloridos. Essa parede está em outro “ Tilemap ” e o foco está no “ Tilemap ”
onde estão os tijolos coloridos. Assim �ca mais difícil pintarmos os tiles em “
Tilemaps ” errados, pois vamos ver mais à frente que vamos dividir em
camadas de tiles. Os tiles que são plataforma e terão colisão �carão em um “
Tilemap ” diferente dos tiles que vão compor o fundo da fase.
Agora que sabemos como usar a paleta e o foco, podemos pintar nosso
cenário. É interessante começar a construção do nível através dos tiles que
serão usados para colisão, ou seja, vamos começar com o chão, as paredes, o
teto e as plataformas e depois pintamos o fundo.
Um aspecto importante é saber qual será o tamanho do nosso personagem, o
tamanho dos inimigos e qualquer outro objeto de nosso jogo que se
movimenta de um lado para o outro, para que não façamos todo o trabalho e
depois tenhamos que refazê-lo pelo fato de o personagem não passar por
algum lugar que deveria passar; a mesma coisa com os inimigos e todo o
resto.
Veja na Figura 3.9 um esboço de como deve �car o primeiro nível. Aqui vamos
ensinar ao jogador as mecânicas básicas do jogo.
Figura 3.8 - Print Tile Palette: Ferramentas
Fonte: Elaborada pelo autor.
Vamos de�nir a altura do personagem em dois tiles de altura e um tile de
largura. Assim podemos de�nir quais espaços o personagem poderá ocupar;
as passagens para o personagem vão depender do level design que você
escolher fazer.
O level design é simplesmente fazer o design das fases do jogo, saber onde
vão �car as plataformas que o jogador poderá usar para pular e chegar ao seu
objetivo e tudo mais que vai compor a fase. Nesse caso, o objetivo será
chegar até as alavancas e liberar as portas. Assim, o jogador poderá avançar
no jogo e chegar ao objetivo �nal, que é encontrar o Rei.
Antes de continuarmos, uma dica rápida: caso feche, por acidente, uma das
abas principais, como a aba “ Inspector ”, você poderá reabri-la seguindo este
caminho: Windows > General > Inspector , ou usando as teclas de atalho
(Ctrl + 3).
Em seguida, precisamos fazer com que os tiles da plataforma possibilitem a
colisão. Para isso, precisamos adicionar um componente “ Rigidbody 2D ”,
alterar o campo “ Body Type ” para “ Static ” e marcar o campo “ Simulated ”.
Body Type : existem três opções de tipo de corpo (Body Type):
Dinâmico (Dynamic), Cinemático (Kinematic) e Estático(Static). Cada
Figura 3.9 - Print Fase 1
Fonte: Elaborada pelo autor.
corpo de�ne como o componente Rigidbody 2D reagirá à colisão, à
movimentação, à rotação e à escala.
Simulated : ativando esta opção, será habilitada ao Rigidbody 2D e a
todos os colliders que estiverem atrelados ao mesmo objeto a
interação com a física quando o jogo estiver rodando. Ela precisa
estar ativada para que as simulações físicas sejam feitas.
Para concluir, precisamos adicionar o componente “ Tilemap Collider 2D ”.
Nele não precisamos modi�car nada.
Até aqui só criamos nosso “ Tilemap ” das plataformas e paredes. Vamos criar
mais um “ Tilemap ” dentro do objeto “Grid” que está na aba “ Hierarchy ”.
Vamos chamá-lo de “ Plano_De_Fundo ”. Nosso plano de fundo é o “ Tilemap
” que terá os detalhes da fase. Esses detalhes não terão colisão com o
personagem. Sendo assim, não precisaremos adicionar no “Plano_De_Fundo”
componentes de colisão nem de corpo físico.
Agora que temos dois “ Tilemap ” dentro do objeto “Grid”, teremos o fundo
do jogo e a parte das plataformas. A Figura 3.9 demonstra o resultado a que
podemos chegar com estes dois “ Tilemap ” juntos.
Para garantir a renderização correta, crie para o “Plano_De_Fundo” um novo “
Sorting Layer ”, “ Tag ” e “ Layer ”. Veja que a ordem do “ Sorting Layer ”
deve ser do que vai �car no fundo para quem vai �car na frente, ou seja, o “
Sorting Layer ” do plano de fundo deve ser o último da lista. O campo “
Sorting Layer ” é que vai determinar qual será renderizado primeiro.
saibamais
Saiba mais
Pesquisa mostra a porcentagem de homens
e mulheres que jogam algum tipo de jogo em
seus dispositivos mobiles. A pesquisa feita
em 2016 mostra a porcentagem de pessoas
que jogam algum tipo de jogo em vários tipos
de consoles. Por incrível que pareça, o celular
é a plataforma mais utilizada para jogar. Os
motivos para criar jogos para dispositivos
mobile só crescem. Saiba mais acessando o
link a seguir.
ACESSAR
praticar
Vamos Praticar
Para pintar os tiles na tela do jogo dentro do projeto da Unity, precisamos de uma
aba especí�ca para que seja possível criar e manipular novas paletas de tiles. Essa
aba é a Tile Palette. Precisamos dela sempre que for necessário criar uma nova fase
no projeto. Selecione a alternativa que traz qual é o caminho que devemos seguir
para criar uma Tile Palette.
https://www.mobilegamer.com.br/2016/07/gamer-brasileiros-gastam-de-5-a-15-reais-em-jogos-para-celular.html
a) Scene> Palette >Tile Palette
b) GameObject> 2D>Tile Palette
c) Hierarchy> 2D Object> Tile Palette
d) Window> 2D> Tile Palette
e) Window> Tile> Tile Palette
Neste ponto, já temos um esboço de um nível pronto para receber o
personagem principal. É com ele que vamos testar se o nível está funcionando
da forma correta e se podemos continuar a produção do projeto sem
problemas com o level design.
Para criar o personagem principal, vamos começar com um objeto vazio;
vamos mudar o nome dele para “ Player ”. Em seguida, vamos colocar
algumas “ Sprites ” dentro deste objeto “ Player ”, uma “ Sprite ” para o
corpo, para cada braço, para cada perna e uma para a espada. As “ Sprites ”
dos braços vamos colocar dentro de outro objeto. Então devemos criar um
novo objeto vazio dentro do “ Player ”, de nome “ Arms ”. O nome em inglês é
só para não usar o “ç” e nenhum tipo de acento, nada que não tenha no
idioma inglês. Pelos motivos já sabidos, isso pode gerar con�ito depois, por
isso evitamos acentos e outras letras que não estejam no alfabeto americano.
Após criar e nomear o objeto “ Arms ”, arraste as duas “ Sprites ” dos braços
Criando eCriando e
Parametrizando oParametrizando o
PersonagemPersonagem
PrincipalPrincipal
para dentro dela. Os braços podemos dar o nome de “ Arm D ”, que é o braço
direito e ao braço esquerdo daremos o nome de “ Arm E ”. Para as pernas, a
mesma coisa. Crie um novoobjeto vazio dentro do “ Player ”, dê o nome a
este objeto de “ Pernas ”, arraste as pernas para dentro dele, e dê o nome das
pernas de “ Perna D ” e “ Perna E ”. Por �m, crie um objeto vazio dentro do “
Player ” chamado “ Arma ”. Dentro dele, arraste a “ Sprite ” “Espada” para
dentro e mude o nome da “ Sprite ” para “Espada”.
Neste ponto, não temos imagem nenhuma dentro dos objetos “ Sprite ”.
Vamos usar as que estão nesta pasta: “Assets/Flat Platformer
Template/Sprites/Characters.png”>. Aqui temos quatro personagens de cores
diferentes, espadas diferentes e um cavalo. Escolha o personagem da cor que
preferir e monte dentro das “ Sprites ” correspondentes. No �nal, deverá ter
um resultado parecido com o da Figura 3.10.
Figura 3.10 - Print do Personagem Principal
Fonte: Elaborada pelo autor.
A cor que escolher é irrelevante, pois vamos usar outro “ Asset ” para
construir o inimigo. Caso não tenha escolhido o cavalo, o seu personagem
deve ter �cado muito parecido com este; monte-o da maneira que achar mais
interessante.
Vamos fazer o nosso personagem ganhar vida. Adicione ao objeto “ Player ”
uma “ Tag ” e um “ Layer ”, com o nome de “ Player ”. Em seguida, adicione ao
objeto “ Player ”  um componente “ Rigidbody 2D ”. Nesse componente, deixe
parametrizado da seguinte forma: Body Type = Dynamic, Simulated =
marcado, Mass = 3, Gravity Scale = 2, Collision Detection = Continuous,
Interpolate = Interpolate. No campo Constraints, clique na seta para que ele
se abra e marque apenas o Freeze Rotation Z.
Body Type : aqui de�nimos o tipo do corpo (Rigidbody) que vamos
trabalhar. De�nindo o corpo como dinâmico (Dynamic), estamos
avisando para a Unity que este corpo pode se mexer, ao contrário do
estático.
Mass : aqui de�nimos a massa corpórea do componente Rigidbody.
Gravity Scale : podemos marcar a gravidade por meio de um valor
escalar; com isso, escolher o grau que o corpo será afetado pela
gravidade.
Collision Detection : escolhendo a forma contínua (Continuous),
informamos para a Unity que esta colisão será analisada mais vezes
do que a discreta (Discrete).
Freeze Rotation : tente posicionar o personagem na beirada de uma
plataforma. Sem marcar esta opção, verá que ele vai tender para o
lado que estiver mais fora da plataforma e cairá deitado. Marcando
esta opção, evitaremos a rotação no eixo Z.
Em seguida, no objeto “ Corpo ”, adicione um componente “Box Collider 2D”,
ajuste este componente para que �que o mais próximo possível dos limites
do corpo do personagem.
No objeto “ Pernas ”, adicione um componente “ Capsule Collider 2D ”, altere
o campo Direction para Horizontal e deixe-o dois ou três pixel acima da linha
do pé do personagem e uns 10 pixel acima do limite de onde acaba o corpo.
Ele �cará reto na parte de cima e na parte de baixo, mas arredondado nas
laterais. Isso nos ajudará  a fazer o personagem andar com mais �uidez.
Por �m, adicione um novo objeto vazio e dê a ele o nome de “ Down ”;
adicione um componente “ Box Collider 2D ” e deixe-o com a largura das
pernas do personagem, mas com a altura bem baixa, como se fosse um
sapato; e deixe a parte de baixo do componente um pouco abaixo do limite
do pé do personagem. Para �nalizar, ligue o campo “ Is Trigger ” do
componente.
Deixe o personagem em algum lugar alto e execute o jogo, para que, quando
o jogo for executado, ele possa cair em cima de uma plataforma e, dessa
forma, vamos testar a sua colisão.
Fazendo o Personagem Se Mover
Vamos criar um “ Script ” dentro do objeto “ Player ” e dar a ele o nome de “
Player Move ”. Dentro desse novo “ Script ”, vamos colar o código a seguir.
Vamos falar sobre o código:
[Range(0, 10000f)] : este comando determina a criação de uma barra
que será usada para determinar o valor de 0 a 10000 de uma
variável. Essa barra aparecerá no Script dentro da aba Inspector.
Dir : variável booleana, que determina a direção. Se é verdadeiro, vai
para um lado; se falso, vai para o outro. Variáveis booleanas só têm
dois valores válidos, verdadeiro ou falso.
Awake() : este método é executado logo após o objeto ser criado
pela Unity dentro do jogo sendo executado.
Input.GetAxisRaw : recebe um valor bruto que pode ser -1, 0 ou 1;
precisa ser suavizado. Este valor muda com a direção que o
personagem aponta, e �ca em zero quando ele está parado.
Input.GetKeyDown(KeyCode.Space) : para nossos primeiros testes,
vamos receber as teclas do teclado de um computador, depois será
só alterar para o botão que �cará na tela. Recebe sinal da tecla
espaço.
Time.�xedDeltaTime: o intervalo em segundos em que a física e
outras atualizações de taxa de quadros �xa são executados. O
 método FixedUpdate é executado neste intervalo.
MovePlayer() : método que gerencia a movimentação do
personagem.
targetVelocity : é a velocidade alvo da velocidade que desejamos
alcançar.
SmoothDamp() : Método que gradualmente muda o valor do vetor
próximo ao valor desejado com o passar do tempo.
Flip() : método que gerencia a mudança da imagem do personagem
da direita para esquerda e vice-versa.
Se tiver parametrizado da forma correta, o personagem deve ser capaz de
pular e se mover da esquerda para a direita pela plataforma e inverter a
imagem de acordo com o lado para onde ele está seguindo.
Para �nalizar, vamos fazer a câmera seguir o personagem pelo jogo,
centralizando na tela. Crie um “ Script ” dentro do objeto câmera que está na
aba “ Hierarchy ” e adicione o código a seguir.
Vamos comentar o código:
public Transform player : campo que será criado no Script da
câmera para que seja mais simples encontrar o player.
public Vector3 o�set : valor que deve ser ajustado para determinar
a distância da câmera. Nesse caso, devemos colocar -5 na variável Z.
public �oat smoothSpeed = 0.12f : valor que será usado para
suavizar o movimento da câmera ao seguir o personagem.
Vector3 posDesejada = player.position + o�set : posição em que
desejamos que a câmera seja posicionada.
Vector3.Lerp() : Interpolação Linear: é o processo de ir do ponto A
para o ponto B de maneira suave.
praticar
Vamos Praticar
Na utilização de código para escrever programas e jogos em geral, são usados
vários tipos de comandos, classes e métodos. Sempre que falamos de um código,
ele precisa estar dentro de um método, ou de uma classe. Sendo assim, qual é o
funcionamento de uma variável booleana dentro de um código?
a) A variável booleana serve para dizer se algo é verdadeiro ou falso. A.
b) A variável booleana serve para marcar o tempo de um update do jogo.
c) A variável booleana serve para marcar a quantidade de vida do
personagem.
d) A variável booleana serve para marcar a velocidade de um golpe.
e) A variável booleana serve para receber qualquer tipo de valor.
O objetivo deste jogo é salvar o Re. Para isso, o jogador precisa descobrir as
combinações corretas de alavancas que estão espalhadas pela fase. Sendo
assim, precisamos criar objetos com alavancas e portas que possam interagir
umas com as outras, ou seja, quando determinada alavanca for acionada ou
uma série delas for colocada na posição correta, a porta deve ser liberada
para ser aberta pelo jogador.
Portas: On/O� e Saída
Para colocar uma porta dentro do jogo, precisamos criar na aba “ Hierarchy ”
um objeto “ Sprite ” e mudar o nome dele para “ Porta_On/O� ”, pois esta
porta terá dois estados: fechada ou aberta. Dentro da porta, crie um
componente “ Box Collider 2D ”. No componente collider, ative o campo “ Is
Trigger ”, pois precisamos saber quando o personagem estiver no ponto
correto. Para que seja possível abrir a porta, arraste a imagem que está neste
caminho
“Assets/Medieval_pixel_art_asset_FREE/Textures/Medieval_props_free_1.png”
Portas, Alavancas ePortas, Alavancas e
ItensItens
para o campo “ Sprite ” do componente “ Sprite Renderer ” da porta, ou
clique no círculo do lado direito do mesmo campo para abrir uma lista de
imagens que estão contidas em seu projeto e encontrar a imagem desejada
pelo nome.
Em seguida,   crie um novo “ Script ”chamado “ PlayerInRange ” dentro do
objeto porta e cole o código a seguir no “ Script ”.
Vamos comentar o código:
public bool inRange = false : variável que armazena o valor
verdadeiro ou falso, que informa se o personagem está dentro do
campo de ação da porta.
private bool isPorta_Aberta : variável que armazena valor que
informa se a Sprite da porta mudou de fechada para aberta.
public bool[] Combination : esta lista de variáveis booleanas é
usada para que o desenvolvedor decida qual será a combinação
necessária das alavancas para abrir determinada porta. O tamanho
dessa lista deve ser determinado pelo programador na aba “
Inspector ” do mesmo objeto.
public Alavanca[] Alavanca : esta lista de Objetos Alavanca precisa
ter o seu tamanho determinado pelo programador na aba “
Inspector ”. Lembre-se de que o tamanho desta lista deve ser o
mesmo tamanho da lista “ Combination ”, pois as duas serão
comparadas para saber se a porta está destravada. Ao informar o
mesmo tamanho da lista   “ Combination ”, surgirão espaços para
que possamos arrastar as alavancas que estão dentro da aba “
Hierarchy ”, para que a lista saiba quais são as alavancas cujo valor
ela deverá saber.
public bool[] On_O� : esta lista serve somente para que o
programador possa ver se a Alavanca que será ativada dentro do
jogo realmente está sendo ativada. No momento que mover a
alavanca no jogo rodando, poderá conferir seu estado na aba “
Inspector ” da porta à qual a Alavanca está atrelada.
private int contadore = 0: este contador é usado no código para
veri�car quantas alavancas estão de acordo com a contagem feita na
comparação com a lista “ Combination ”. Caso a posição das
alavancas não esteja de acordo com a   lista “ Combination ”, a
contagem será menor. Sendo assim, a porta não �cará liberada para
ser aberta.
public bool StarGate = false: esta variável booleana deve ser
marcada quando uma determinada porta for usada para levar até a
outra porta. Caso contrário, a porta abrirá, mas não levará a lugar
nenhum.
public Transform Player : neste campo devemos arrastar o
personagem principal, pois precisamos alterar o valor de sua posição
para enviar o personagem para a outra porta, dando a impressão de
que o personagem atravessou a porta e chegou até a outra.
public Transform playerTo : este campo é muito importante.
Trataremos dele mais adiante quando falarmos sobre a outra porta,
mas ele é o campo que vai armazenar a posição a qual o personagem
será enviado, ou seja, este valor estará posicionado próximo à outra
porta para onde desejamos que o personagem seja enviado. Fique
atento(a), pois este campo não irá armazenar a posição da porta para
onde o personagem será transportado, mas sim um outro objeto que
será “ child ” desta outra porta que deverá ser arrastado para este
campo.
public Sprite portaAberta : sprite que armazena a imagem da porta
aberta, esta imagem será inserida no campo Sprite do componente
SpriteRenderer no momento que a porta for aberta, mas, para isso,
será necessário primeiro arrastar a imagem que está nesta pasta:
“Assets/Medieval_pixel_art_asset_FREE/Textures/Medieval_props_free_
para o campo “ portaAberta ” que está presente na aba “ Inspector ”
do objeto porta.
try {} catch {} : o comando “ try ” necessariamente precisa ser
seguido por um “ catch ”. Este comando “ try ” quer dizer tentar; é
usado para gerenciamento de erros, ou seja, quando sabemos que
existe a possibilidade de ocorrer um erro em nosso programa,
podemos escrever o comando “ try ” e escrever o código que pode
dar erro dentro do “ try ”. No caso desse código, o possível erro que
ocorre é relacionado a não informar as alavancas, por exemplo (claro
que devemos usar este comando com certa cautela). O comando que
está na sequência, o “ catch ”, serve para pegar os erros, ou seja,
sempre que ocorrer um erro, será direcionado ao “ catch ”, onde
podemos tratar este possível erro por meio de código.
if(Input.GetKeyDown(KeyCode.E)&&inRange&&Alavanca.GetComp
().getAlavanca()) : este “IF” percebe quando o teclado é pressionado
na tecla “E” e veri�ca se a variável booleana inRange é verdadeira e
veri�ca se a variável booleana que informa se a alavanca foi acionada
é verdadeira.
gameObject.GetComponent<SpriteRenderer>().sprite =
portaAberta: esta linha de código altera o Sprite do objeto porta pelo
Sprite de porta aberta.
OnTriggerExit2D() : este método é chamado assim que a colisão do
componente collider �naliza, ou seja, a colisão ou a sobreposição
acaba.
Lembre-se de que é de extrema importância informar na aba “ Inspector ” do
objeto porta a quantidade de alavancas que vamos usar para abrir esta porta,
arrastá-las para os espaços determinados dentro do “ Inspector ” da porta e
marcar os campos do “ Combination ” escrito em inglês, pois “combinação”
usa “ç” e “~”, e precisamos evitar estas letras e acentos em nome de variáveis,
métodos e classes.
Devemos lembrar também que o campo “ StarGate ” precisa ser marcado
caso deseje que sua porta leve o personagem para outra porta, e também
precisamos arrastar para os campos abaixo do “ StarGate ” o personagem e o
“ child ” da porta destino.
A Figura 3.11 traz o resultado desejado para o “ Inspector ” da porta “ on/o�
”.
Figura 3.11 - Print Inspector porta on o�
Fonte: Elaborada pelo autor.
Perceba na Figura 3.11 que, ao lado esquerdo dos campos “ Combination ” e
“ Alavanca ”, temos uma seta. Ao clicarmos nela, o campo será estendido,
trazendo informações extras sobre ele.
Antes de marcarmos qualquer coisa nesses campos, perceba que existe um
campo interno a eles que tem o nome de “ size ” que, em português, signi�ca
tamanho. Esse campo deve ser preenchido pelo programador na aba “
Inspector ”. Ele marca a quantidade de alavancas que desejamos colocar na
determinada porta e faz a mesma ação para o campo “ Combination ”.
Devemos nos lembrar de que os campos “size” de ambos os campos “
Combination ” e “ Alavanca ” precisam ter o mesmo valor; caso contrário,
ocorrerá um erro de lógica no código do “ Script ” “ PlayerInRange ”, pois ele
vai comparar os valores de ambos os campos para determinar se a porta
poderá ser aberta ou não.
Vamos falar agora sobre a porta de saída. Existem duas diferenças básicas
entre a porta de saída e a porta “ on/o� ”; são elas:
O “ Script ”: a porta de saída não terá um Script atrelado a ele.
A “ Child ”: a porta de saída será usada apenas para armazenar uma “
child ” que será chamada de “ Destino ”; ela marcará o ponto para
onde o personagem deverá ser transportado e, claro, simbolizar este
ponto com uma porta.
Veja que a porta “ on/o� ” não tem este “ child ”, portanto, caso queira que
uma porta “ on/o� ” possa ser usada como porta de saída, precisará colocar
um “ child ” dentro dela.
Este objeto que é “ child ” da porta de saída é apenas um objeto vazio criado
normalmente pela Unity, com o objetivo de ser usado para informar a posição
para onde o personagem deve ser enviado.
Tome cuidado com o posicionamento deste “ child ”, teste a altura de onde
ele será posicionado, pois, caso seja posicionado muito alto, o personagem
cairá ao atravessar a porta e, caso seja posicionado muito baixo, o box collider
do personagem �cará preso no box collider do tile no chão.
Esse tipo de movimentação precisa ser feita diretamente no componente
transformer, mas exclusivamente dessa forma, pois se trata de uma
movimentação cuja colisão desejamos que não funcione neste momento.
Tente fazer esta movimentação da mesma forma que fazemos para mover o
personagem, através do “ Rigidbody 2D ”, e verá que o resultado não será o
esperado.
Lembre-se sempre: para fazer o personagem andar pelo cenário do jogo, para
coletar itens, ou seja, mover-se do ponto A para o ponto B, é necessário fazer
isso por meio do componente “ Rigidbody 2D ”, pois, caso contrário, terá
muitos problemas com a colisão, já que não será mais o componente “
Transform ” que seguirá o movimento do componente “ Rigidbody 2D ”; será
o oposto e, como o componente que é o responsávelpelo gerenciamento da
colisão é o componente “ Rigidbody 2D ” junto com um componente “
Collider ”, mover um objeto colisivo através do cenário fazendo as mudanças
de movimentação diretamente no componente “ Transform ”  gerará um mal
funcionamento da colisão.
Para fazer o teste mencionado, pode usar este comando:
GameObject_Player.GetComponent<Rigidbody2D>().MovePosition(new
Vector2(playerTo.position.x, playerTo.position.y)); .
Para este teste, as mudanças �carão por sua conta, e não se esqueça de, após
�nalizar as duas portas, arrastá-las para a pasta dos seus prefabs.
Alavancas
As alavancas são uma das partes mais simples deste processo. Primeiro
precisa criar um novo objeto “ Sprite ”. No componente “ Sprite Renderer ”,
em seu campo “ Sprite ”, arraste a imagem da alavanca desarmada. Podemos
reflita
Re�ita
Ao re�etir sobre a movimentação do
personagem utilizando diretamente o
componente “ Transform ”, veja como
a utilização dele pode ser prejudicial
ao bom funcionamento de um corpo
colisivo. Teste esta tese. Até agora
todos os objetos que precisavam se
mover do ponto A para o ponto B
foram movidos através do
componente “ Rigidbody 2D ”, pois,
caso contrário, a colisão �caria
“Quebrada”, ou seja, não funcionaria
da forma correta.
Re�ita sobre isso e faça seus testes.
encontrar esta imagem dentro desta pasta:
“Assets/Medieval_pixel_art_asset_FREE/Textures/Medieval_props_free_11.png”.
Em sequência, podemos criar um novo “ Script ” na alavanca com o nome de
“Alavanca ” e colar o código a seguir dentro dele:
Vamos comentar o código:
private bool alavanca = false : esta variável booleana informa se a
alavanca está ativada ou desativada.
private bool inRange = false : esta variável booleana informa se o
personagem do jogador está próximo o su�ciente para ativar a
alavanca.
public Sprite alavanca_On : este sprite irá armazenar a imagem da
alavanca ativada, para que, posteriormente, quando o jogador ativar
a alavanca, o código possa fazer a troca da imagem da alavanca
desativada pela imagem da alavanca ativada. A imagem que será
usada para mostrar a alavanca ativada está nesta pasta:
“Assets/Medieval_pixel_art_asset_FREE/Textures/Medieval_props_free_
gameObject.GetComponent<SpriteRenderer>().sprite =
alavanca_On : esta linha de código é a linha responsável por fazer a
troca da imagem das alavancas.
OnTriggerEnter2D : este método é o responsável por ativar a
variável booleana que informa se o jogador está dentro do alcance
para ativar a alavanca.
OnTriggerExit2D : quando o jogador sair do alcance da alavanca,
este método entra em ação desativando a possibilidade de interagir
com a alavanca ao trocar de verdadeiro para falso a variável
booleana “ InRange ”, ou seja, quando o collider que está atrelado ao
personagem sair de cima, ou no momento que o collider do
personagem não estiver mais sobrepondo o collider da alavanca, este
método será ativado.
Itens
Este objeto em particular será animado mais à frente. Por questões de
funcionamento da animação, precisamos criar um objeto vazio e, como “ child
” deste objeto vazio, criamos uma “ Sprite ” e daremos a ela o nome de “
Esmeralda_P ”, pois existe a possibilidade de colocarmos a outra esmeralda
maior.
Como só faremos a animação no polimento do jogo, vamos colocar a imagem
da esmeralda no campo “ Sprite ” do componente “ Sprite Renderer ”. A
imagem pode ser encontrada nesta pasta: “Assets/Free Game
Items/300dpi/gem_1.png”. Em seguida, adicione ao objeto “ Esmeralda_P ” um
collider de sua escolha, e ative o “ IsTrigger ” deste collider. Perceba que não
adicionamos um corpo rígido ao “ Rigidbody 2D ”, pois não desejamos mover
este objeto, mas desejamos saber quando o personagem irá sobrepô-lo. Para
isso, usaremos o “ IsTrigger ” do componente collider. Em relação ao
componente collider, podemos usar o “ Box ”, “ Circle ” ou o “ Polygon ”.
Perceba que na pasta “ Free Game Items ” existem três pastas com
conteúdos iguais, mas com tamanhos diferentes. Veja que os tamanhos das
imagens estão referenciados nas pastas. Por isso, vamos utilizar a maior
imagem para garantir uma melhor qualidade no resultado �nal.
Para �nalizar esta parte, vamos fazer o personagem coletar a esmeralda. Para
isso, precisamos criar um novo “ Script ” no objeto “ Player ”, que vamos
chamar de “ Coletor ”. A seguir, o código do “ Script ”:
Vamos comentar o código:
Debug.Log("Esmeralda_P") : esta linha de código irá mostrar uma
mensagem na aba console; a mensagem será " Esmeralda_P ",
exatamente o conteúdo do método “ Log ”. Este método é o
responsável por enviar a mensagem para o console da Unity. Em
geral, usamos o “ Debug.Log() ” para veri�car se o código está
ativando determinada função dentro do “ Script ”; o “ Debug.Log() ”
pode ser usado dentro dos limites de um método.
Perceba que no código anterior não tivemos muito o que comentar, pois já
conhecemos bem seu funcionamento.
saibamais
Saiba mais
Existe uma maneira de medir o tamanho da
tela do celular para saber quantas polegadas
ele tem. As dimensões de um celular são
muito importantes para o desenvolvedor de
jogos. Dependendo do tamanho, precisamos
mudar o design do jogo, retirar algumas
funcionalidades e, às vezes, mudar
mecânicas de jogo. Saiba mais acessando o
link a seguir.
ACESSAR
https://olhardigital.com.br/dicas_e_tutoriais/noticia/como-e-feita-a-medicao-do-tamanho-da-tela-de-um-celular/66582
praticar
Vamos Praticar
A Unity tem muitos componentes collider. Cada um traz o campo “ IsTrigger ”, ou
em português, “ É Gatilho ”. A ação desse campo pode ser usada com várias
�nalidades. Em geral, seu uso dependerá do tipo de objeto e do jogo que
estivermos desenvolvendo. Diante disso, escolha a alternativa que traz a informação
correta sobre o método “ OnTriggerExit2D ”.
a) Este método é usado para saber quando o collider foi ativado.
b) Este método não faz parte do funcionamento de um collider.
c) Este método é usado dentro do componente “Sprite”.
d) Este método é usado quando acaba a sobreposição do collider.
e) Este método é usado apenas Tilemap Collider 2d.
indicações
Material
Complementar
LIVRO
The Art of Game Design: A Book of Lenses,
Third Edition
Jesse Schell
Editora: A K Peters/CRC Press
Comentário: Neste livro sobre game design, podemos
encontrar muitas informações válidas sobre o
desenvolvimento de jogos em geral. Uma parte das
muitas partes interessantes deste livro é sobre a
triangularidade. O autor trata sobre os benefícios de se
dar uma recompensa pequena pelo pequeno desa�o e
uma recompensa grande pelo desa�o maior. Entre
outras coisas, Jesse Schell trata das nuances de se
desenvolver um jogo bem estruturado e não pecar nas
exceções.
WEB
BGS 2019 - Brasil Game Show - Entrevista
John Romero - Criador do Doom
Ano: 2019
Comentário: Entrevista com o criador do game DOOM
John Romero. Esta entrevista ocorreu na BGS (Brasil
Game Show) de 2019. Nesta entrevista, John Romero
comenta sobre sua carreira de desenvolvedor de jogos
e responde a algumas perguntas sobre di�culdades e
acerto em sua carreira.
Entrevista disponível no link a seguir.
ACESSAR
https://www.youtube.com/watch?v=fKdMYYqC55s
conclusão
Conclusão
Nesta unidade, aprendemos um pouco sobre a história dos jogos plataforma
e iniciamos nossa própria jornada em direção ao mundo que engloba este
gênero tão icônico no universo dos jogos. Vimos uma análise de três títulos
diferentes de jogos plataforma para os dispositivos mobile, e buscamos
entender por que o mercado de jogos para dispositivos mobile é tão lucrativo.
Aprendemos a iniciar nosso projeto, com a construção das plataformas na
quais o jogador deve pisar, vimos como criar e utilizar os famosos “tiles”,
como colocá-los na tela e como fazê-los colisivos; aprendemos como fazer
uma passagem através de uma porta que nos leva até outra sala dentro do
jogo e que, para usar estas portas, precisamos acionar alavancas e acertar
suas combinações. Por �m, conseguimos coletar itens pelo jogo,

Continue navegando