Buscar

4 PROGRAMAÇÃO PARA JOGOS 2D

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

Programação para jogos 2D
Unidade 4 - Projeto de jogo autoral
Autor: Vanessa Pereira do Nascimento
Revisor técnico: Renato Medeiros
Iniciar
Introdução
O desenvolvimento do jogo de plataforma, iniciado na unidade anterior, trouxe novos desa�os
para a programação. Além da já conhecida movimentação para esquerda e para a direita,
adicionamos ao nosso personagem a habilidade de pular. A montagem do level também
possibilitou o conhecimento de se trabalhar com um tilemap , montando todo o cenário do jogo a
partir de diferentes blocos de imagens.
A estrutura de um jogo de plataforma apresenta ainda outros elementos presentes na
programação de jogos 2D, como por exemplo: inimigos, ataques, coleta de materiais, contagem
de vidas e de pontuação. A criação desses scripts será abordada durante esta unidade, e,
conforme apresentado na unidade 3, é importante a execução de testes de jogabilidade durante
toda a produção do jogo.
Durante esta unidade, os exercícios serão exempli�cados por meio da incrementação no projeto
do jogo de plataforma. Você será incentivado a modi�car os elementos trabalhados, a �m de
trilhar o caminho na produção de seu próprio jogo. Com a intenção de oferecer ferramentas para
o desenvolvimento de um game autoral, esta unidade abordará a elaboração da documentação
necessária para o desenvolvimento de um projeto, além das especi�cações para exportação do
arquivo �nal.
Nesta última etapa da disciplina, você entrará em contato com mais elementos essenciais para a
programação de jogos 2D. A partir de agora, comece a imaginar como poderá incrementar seu
jogo com os seguintes conhecimentos: inserção de sons, adição de inteligência arti�cial e
montagem da interface do usuário.
Bons estudos!
1. Sonoridade do jogo
A presença do som em um game é tão importante quanto seus grá�cos. Você imaginou como
seria a experiência de jogar sua versão de Breakout com sons da bola rebatendo, da marcação de
pontos e até mesmo do jogo iniciando? Ainda que o jogo possa ser jogado sem qualquer
sonoridade, a experiência da jogabilidade é modi�cada com a presença de sons.
Nos primeiros games criados nas décadas de 70 e 80, seja para �iperamas ou para consoles, a
inserção de sons era limitada pela capacidade tecnológica do hardware envolvido. Com o advento
das mídias de CD e DVD, além da tecnologia atual de streaming nos jogos, já não há problema de
memória ou execução de sons durante um game. Atualmente, a preocupação com a sonoridade
no design de jogos é com a estética, isto é, em como a jogabilidade afeta os sentidos do jogador.
Tanto a visão quanto a audição são afetadas por jogos em diferentes plataformas. O tato, apesar
de parecer estar mais ligado a jogos não digitais, pode ser afetado, por exemplo,  pela vibração de
controles.
É importante ressaltar que a combinação de elementos de diferentes sentidos contribui para uma
maior acessibilidade do jogo. Ao indicar que o jogador entrou em uma área perigosa, podemos
modi�car a sonoridade do ambiente, mas também indicar a mudança através de pistas visuais,
garantindo, por exemplo, a comunicação com um jogador que tenha de�ciência auditiva.
Como a estética pode afetar os jogadores de maneiras diferentes, já que cada um carrega um
repertório próprio, é importante conhecer as maneiras de se trabalhar com sons em um jogo,
garantindo que outra função dos sons em um jogo seja alcançada: a comunicação. Um som que
indica perigo, por exemplo, pode assustar mais ou menos um jogador, mas pode ser importante
para a jogabilidade que todos os jogadores identi�quem que há um perigo iminente.
A comunicação com o jogador, por meio da sonoridade do game, se dá a todo momento. Os
grá�cos de um jogo podem indicar um determinado grau de realismo, mas se os sons remeterem
a um universo fantástico, por exemplo, o jogador entenderá o descolamento da realidade. Claro
que para isso também devem ser trabalhados os demais elementos da gameplay: montagem dos
levels, desa�os, narrativa, etc. Se a sonoridade do jogo parecer descolada de todos os demais
elementos, pode ser provocada uma estranheza na jogabilidade, prejudicando a experiência do
jogador.
Isso acontece porque o jogador é levado a acreditar no universo proposto em um game. Dessa
maneira, é possível ensiná-lo, por meio dos sons (assim como ocorre com as imagens), qual o
funcionamento desse universo. O jogador identi�ca os sons de uma fonte e pode aprender que
naquele ambiente funciona daquela maneira, aquele ser faz determinado ruído, assim como seu
pulo determinado som.
Uma possibilidade da utilização de sons a partir dessa aprendizagem, por exemplo, é a execução
de um som no momento em que o personagem coleta um item. A sonoridade pode parecer
positiva e a pista visual pode ser o desaparecimento do item e a soma de pontos no placar. Ao
obter esse retorno sonoro algumas vezes, o jogador relaciona a coleta do item à escuta desse
som. Quando ele estiver em um ambiente onde não consiga visualizar o item - como dentro de
uma sala escura ou atrás de uma parede -, mas ouvir o mesmo som, saberá que ali havia aquele
item já conhecido. A pista visual nesse caso poderá ser apenas a soma da pontuação. Isso
ensinará mais ao jogador sobre a coleta de itens no jogo, o que o levará a percorrer o ambiente
de maneira diferente, procurando também onde não se vê.
1.1 Música, ambientação e efeitos sonoros
A sonoridade em uma game pode ser dividida em: trilha musical, sons de ambientação e efeitos
sonoros. As três categorias coexistem durante a jogabilidade, e, assim como em obras
audiovisuais, podem ser classi�cadas em sons diegéticos e não diegéticos. A diegese está
relacionada com o universo �ccional proposto, dessa maneira, todos os sons que podem ser
ouvidos pelos personagens ali representados são diegéticos, como são os efeitos ambientais e
sonoros por exemplo. A trilha musical costuma ser um tipo de som não diegético, já que é ouvida
apenas pelo jogador, não estando integrada ao espaço de seu personagem na tela. Apesar desse
Você quer ler
Com um capítulo dedicado à sonoridade nos games, o livro Level UP : um guia para o design
de grandes jogos, de Scott Rogers, é uma espécie de manual para os desenvolvedores. Por
meio de uma linguagem acessível, o autor apresenta não somente o universo sonoro, mas
todas as etapas do design de games. Criação de personagens, level design , documentação
necessária e todos os demais elementos da gameplay são abordados durante o livro. 
padrão é possível, por exemplo, que uma música seja utilizada como som diegético, ao ser tocada
no ambiente do próprio personagem.
A escolha de uma música de fundo normalmente está relacionada com o level criado, podendo
sofrer modi�cações de acordo com o momento da jogabilidade: aviso, situação de combate,
exploração, vitória, etc. Para estimular o jogador a continuar, é importante que a música seja mais
dinâmica do que a ação que ocorre na tela. Isso não signi�ca que não deva existir silêncio na
trilha, mas que esse deve ser explorado no momento certo, como para causar uma apreensão
por exemplo. As decisões estéticas relacionadas com a musicalidade do jogo costumam ser
atribuídas a um diretor musical, que poderá escolher entre a produção de músicas originais ou
licenciar alguma preexistente.
Os efeitos ambientais e sonoros são classi�cados ainda em on e o� screen, quando sua fonte é
identi�cada na tela ou não, respectivamente. É importante ressaltar que em um game há
elementos que são visíveis no jogo mas não produzem sons, assim como podem haver sons de
fontes que não estão visíveis. Isso varia muito nos games, já que apresentam um ambiente de
navegação não-linear, modi�cando o que aparece na tela de acordo com a movimentação do
jogador. Por isso os sons são disparados em determinadas áreas ou situações do jogo, ao invés
de serem disparados após passado algum tempo de jogo, como em um �lme linear, por exemplo.
Os sons de ambientação podem estar o� screen, já que tem como objetivo situaro jogador
naquele universo. Já os efeitos sonoros estão ligados à narrativa, aos objetos, pessoas e coisas.
Os efeitos sonoros podem incluir som diegéticos como o ataque de um personagem, como
também não diegéticos, como a coleta de pontos. Eles ainda podem indicar as conquistas e
derrotas do personagem, as interações do jogador, dentre tantos outros estados possíveis da
jogabilidade.
Em um projeto de jogo podemos utilizar sons oriundos de bibliotecas pagas, como também de
repositórios livre na internet. Em um projeto maior é comum a participação de um designer de
sons, pro�ssional responsável por criar novos efeitos sonoros.
1.2 Programando sons na Unity
A partir das informações sobre a inserção de sons em um game, planeje como você poderá
sonorizar o projeto de jogo de plataforma iniciado na unidade anterior. Neste tópico, será
abordada a programação necessária para executar um som relacionado a um evento do jogo,
como a coleta de um item, e uma trilha musical em looping, isto é, que se repete após ser
concluída. Com as orientações apresentadas nesta aula você estará apto a adicionar diferentes
sons em todo seu projeto, trilhando o caminho para a criação de um game autoral.
Assim como �zemos para inserir grá�cos no jogo, foi escolhido o site Open Game Art (disponível
em https://opengameart.org /) como fonte de materiais livres de direitos autorais padrão, isto é,
com diferentes licenças de utilização, incluindo até mesmo a possibilidade de reaproveitamento
de sons para �nalidade comercial.
Na game engine Unity é possível importar diversos tipos de arquivos de áudio, incluindo os mais
populares: .mp3, .wav, .ogg, .aif, dentre outros. Faça download de ao menos uma música e um
efeito sonoro para inserção no seu jogo. Após baixar os arquivos, abra o projeto de jogo de
plataforma na Unity e insira os arquivos de áudio em uma pasta especí�ca, para melhor
organização.
Primeiro vamos adicionar a música de fundo, já que para isso não há necessidade de inserir
programação em script. Arraste seu asset , correspondente a trilha musical, para o painel
Hierarchy. Na janela Inspector , observe que um dos componentes desse Game Object criado é o
Audio Source. No campo AudioClip desse componente, automaticamente foi associado o arquivo
de música que originou a criação do objeto. Isso acontece devido ao asset já se tratar de um
arquivo de som. Para associarmos um som a qualquer Game object que não seja o próprio som,
devemos adicionar o componente Audio Source no painel Inspector . Faremos esse exercício mais
adiante ainda neste tópico.
Ainda na janela Inspector do objeto da sua trilha musical, marque a opção Play on Awake, para
que o som seja executado no momento que o objeto for criado na cena. Nesse caso, o objeto é
criado logo que a cena é iniciada, já que está presente em sua hierarquia. Marque também a
opção Loop, para que a música seja repetida logo após ser concluída. Pronto, seu jogo já toca
uma música de fundo.
1.2.1 Efeitos sonoros: input do jogador
Agora vamos adicionar um efeito sonoro que será associado a uma interação do jogador. Para
este exercício incluiremos um som para o pulo do personagem, logo após a tecla de espaço ter
sido pressionada. Antes de incluir o código no script Jogador, adicione o componente Audio Source
ao seu objeto Jogador na cena. Para associar o asset correspondente, arraste o efeito sonoro
escolhido para o campo AudioClip do componente Audio Source .
Abra o script Jogador e logo antes do método Start , após as variáveis já criadas, declare esta nova
variável:
public AudioSource somPulo;
https://opengameart.org/
A expressão indica que a variável nomeada de somPulo recebe um objeto da classe AudioSource .
Dessa maneira, podemos utilizá-la como um atributo de Jogador para acessar os métodos da
classe AudioSource , como Play (tocar), por exemplo. Esse método deverá ser chamado dentro da
condicional que veri�ca o momento que a tecla de espaço é pressionada. A expressão que vamos
adicionar é a seguinte:
somPulo.Play();
Sendo somPulo a variável criada do tipo AudioSource e Play seu método invocado. O código �nal
do método puloJogador, criado na unidade anterior, deverá ter �cado dessa maneira:
Agora seu personagem emitirá o som escolhido no momento do seu pulo. Para o último exercício
de inserção de sons, vamos adicionar elementos coletáveis que irão emitir um som ao serem
coletados e desaparecer logo depois.
1.2.2 Efeitos sonoros: interação entre objetos
Caso ainda não tenha feito, insira ao menos um novo objeto em seu game que possa ser coletado
pelo personagem. No pacote de grá�cos utilizado na unidade anterior, por exemplo, há uma
pasta chamada Items, com diversas opções. Caso você queira espalhar várias unidades de um
mesmo item, considere a possibilidade de criar um prefab, facilitando assim a edição em massa.
Dessa vez o script criado servirá para executar sons de maneira independente a seus objetos. Isso
será feito para garantir que o efeito sonoro de um item sendo coletado seja tocado até o �m,
independentemente do item já ter desaparecido da tela. Para a colisão com o personagem e sua
destruição logo após esse evento, utilizaremos o método Destroy(this.gameObject). Para que a
colisão seja identi�cada, não esqueça de adicionar um componente Collider em seu item.
Agora crie um prefab do efeito sonoro escolhido. Lembre-se que para isso você deverá arrastá-lo
para a janela Hierarchy e logo depois, dessa janela para uma pasta do painel Project. O prefab
pode ser arrastado para qualquer pasta, mas é recomendado manter a organização do projeto.
Caso ainda não tenha, você pode adicionar uma pasta chamada Prefabs, por exemplo.
Antes de programar o script do item em si, vamos criar um gerenciador do jogo, para tocar o som
de maneira independente ao objeto item. Crie um script chamado GameManager e o associe a
um GameObject vazio. dentro desse script vamos programar a criação de um objeto do tipo
prefab do som escolhido, dentro de um novo método. Será criada uma variável do tipo
GameObject, já que trata-se de um prefab, não mais de um AudioSource. O código do
GameManager para essa inserção de som deverá ser o seguinte:
Antes do método Start, você pode ver a declaração da variável prefabItem. Ela é utilizada dentro
do método criado, o somItem. Localizado logo abaixo do método Update, o somItem cria uma
instância do prefabItem na mesma posição que for chamado, nesse caso ele será invocado por
um script próprio do objeto Item. Selecione o Game Object vazio, que foi associado ao script
GameManager e no campo Prefab Item, relacionado à variável criada, insira o prefab do áudio,
diretamente dos assets no painel Project.
Agora precisamos invocar o método somItem, a partir do seu objeto escolhido como item. Crie
um script para esse objeto e não esqueça de associá-lo como um de seus componentes. No
painel Inspector do seu item, marque a opção Is Trigger, para que seu Collider funcione como
disparador de um evento, não como uma barreira física para nosso Jogador.
No script do item adicione o seguinte método, dentro das chaves da classe mas abaixo e fora do
método Update:
Dessa maneira, utilizamos expressões já conhecidas para assim que os objetos colidirem, no caso
Item com Jogador, um som ser tocado e o objeto ser destruído. Observe que o método somItem é
invocado a partir do script GameManager, assim garantimos que o som tocará até o �nal, pois
não é um atributo do objeto Item, mas sim outro objeto instanciado na cena. Logo após a
invocação do método, o objeto Item é destruído.
Apesar de terem sido incluídos apenas três sons durante esta aula, com os métodos abordados
você poderá adicionar sons a partir de diferentes interações do game.
2. Inteligência artificial
Inteligência arti�cial (IA) é o ramo de pesquisa que desenvolve soluções que simulam a
inteligência humana. Por meio de dispositivos tecnológicos que envolvem hardware e software, a
IA em games está presente mesmo nas formas maissimpli�cadas. Qualquer personagem não
jogável, também chamado pelo acrônimo NPC (do inglês, non-player character), pode apresentar
movimentação própria e reagir ao ambiente de determinada maneira. Para que isso seja possível,
é necessário inserir alguma programação de IA nesse personagem. Observe que não
consideramos aqui questões especí�cas como o que é inteligência, ou qual grau de inteligência
está envolvido.
De maneira geral, a IA está presente nos jogos digitais por meio de três categorias: modelagem de
personagens (NPCs); geração de conteúdo procedural (PCG); e jogando o jogo (game playing).
A programação de NPCs é a categoria mais presente nos jogos, sendo possível ser adicionada
com pouca experiência em uma linguagem de programação. Já a geração de conteúdo
procedural, do inglês procedural content generation (PCG), requer maior conhecimento de
programação para ser feita. Ela é utilizada para criar automaticamente e aleatoriamente levels,
inimigos, itens coletáveis, dentre outros objetos presentes no game. Essa geração de conteúdo
ocorre em tempo real, durante   a jogabilidade, portanto, se difere da exibição de conteúdo
randômico, que apenas é sorteado quando e onde será exibido, dentro de um número limitado
de possibilidades.
A última categoria, a game playing, envolve conhecimento avançado de programação, já que está
mais próxima do comportamento humano. Nessa categoria estão as experiências com IA que são
capazes de jogar os jogos, muitas vezes aprendendo a cada nova execução.
Para os estudos desta disciplina, nos limitaremos a programar as formas simples de inteligência
arti�cal: os NPCs.
2.1 Inimigos
Vamos programar uma movimentação de NPC que pode ser aproveitada em diversas áreas de
um jogo. Adicione um novo objeto para ser o inimigo. Não esqueça de adicionar um Collider e um
componente RigidBody 2D. Crie um novo script para ele e associe ao Game Object criado.
Para veri�car a direção que o personagem se movimenta e então indicar sua mudança, insira dois
Game Objects vazios. Eles servirão apenas como identi�cadores de colisão, assim como o objeto
que inserimos para veri�car se o Jogador encosta no chão. Adicione um collider em cada um
deles. Posicione-os nos locais correspondentes aos limites de movimentação de seu inimigo,
como por exemplo, um à sua esquerda e outra à sua direita. Dessa maneira, faremos com que
nosso objeto mude de direção no momento que tocar em um de seus limitadores.
Figura 1- Limitadores de movimento do inimigo. Foi adicionado um ícone visível somente no painel Scene, para
exempli�cação. Fonte: a autora, 2020.
Selecione a opção Is Trigger em ambos os objetos vazios que foram criados. Ainda no painel
Inspector, adicione também uma Tag chamada Sentido para ambos os Game Objects. No script
do inimigo, vamos criar variáveis para sua velocidade, sua direção e a opção de inverter seu
sprite.
Figura 2 - Script do inimigo. Fonte: a autora, 2020.
Observe que na linha 20 o método movimentaInimigo é invocado dentro do Update. Esse
método, entre as linhas 22 e 34, é responsável por: movimentar o inimigo para direita ou para a
esquerda e inverter seu sprite quando necessário. A variável do tipo booleana, que indica
verdadeiro ou falso, foi chamada de direita. Nesse caso, se ela for verdadeira, o inimigo deverá se
movimentar para a direita. Como o sprite utilizado é virado para a esquerda por padrão, ele será
invertido caso a variável direita seja verdadeira.
O que determina o valor dessa variável é o método entre as linhas 36 e 42. Já utilizado
anteriormente durante esta disciplina, ele veri�ca se a colisão ocorreu entre um objeto com uma
determinada Tag, nesse caso a Tag Sentido. Caso essa condição seja verdadeira, ele irá alterar o
valor da variável direita. Observe que na linha 40 temos uma notação que ainda não utilizamos:
! direita
O ponto de exclamação, antes do nome da variável, indica que seu valor será sempre o oposto do
atual. Portanto, caso a variável seja true, ao encostar se tornará false, e vice versa.
Para que o inimigo seja derrotado, vamos adicionar ao Jogador a capacidade de pular em cima
dele. Crie novamente um Game Object vazio, mas agora como �lho do Jogador, dentro do painel
Hierarchy. Adicione a ele um Circle Collider 2D com um pequeno raio, como 0.1. Crie uma Tag
chamada Arma, por exemplo. Dessa maneira, toda vez que um objeto utilizar essa Tag o inimigo
será derrotado. Adicione uma nova condicional dentro do método OnTriggerEnter2D, no script do
inimigo:
Para testar essa nova habilidade, você pode modi�car as con�gurações de pulo do Jogador na
variável Pulo e na opção Gravity Scale do componente Rigidbody 2D. Teste, por exemplo, com os
valores 10 e 2, respectivamente.
3. HUD - Heads-up display
A interface do usuário (User Interface - UI) em um game se refere a toda mediação existente entre
o jogador e o próprio jogo. Formada por hardware, tanto aquele responsável pelo processamento
quanto seus periféricos, e software, a interface do usuário (UI) é composta também pela GUI
(Graphical User Interface), a interface grá�ca do usuário.
A GUI é especi�camente a parte da interface que comunica com o jogador por meio de elementos
grá�cos. A tela de início, pausa, game over, créditos, dentre outras, fazem parte da interface
grá�ca do jogo. Já as informações que são dispostas durante a jogabilidade compõem o HUD
(Heads-up display). Também formado por elementos grá�cos com a �nalidade de comunicar ao
jogador, o HUD, sendo parte da GUI, é assim chamado pela sua semelhança com as telas de
navegação de aeronaves, nas quais as informações aparecem �xas na tela, enquanto o mapa se
modi�ca de acordo com sua movimentação.
Em um game, o HUD pode �xar na tela do jogador informações úteis enquanto ele navega pelo
espaço. Ainda que ele possa ocultar parte ou todas as informações, ela é atualizada em tempo
real e permite a visualização do jogo. O HUD pode apresentar informações mais ou menos
cruciais para a jogabilidade, podendo oferecer ao jogador a possibilidade de ocultá-las, liberando
assim o espaço da tela. Portanto, para que o HUD não acabe obstruindo a jogabilidade, é
importante que seus elementos façam parte da composição da tela do jogo, ou �quem visíveis
somente quando necessário.
Para o caso de um menu, é recomendado oferecer opções para facilitar o acesso do jogador,
fazendo com que a escolha de opções seja feita da maneira mais rápida possível. Isso se deve ao
fato do jogador precisar focar seu tempo na jogabilidade em si, não na procura de opções de
menu. A facilidade de navegação no HUD está associada à utilização de elementos reconhecíveis
no universo dos games, como por exemplo, ícone de coração para indicar vida, de caveira para
indicar perigo ou ainda de moeda para indicar recompensa. Claro que assim como vimos sobre a
inserção de sons, a escolha de grá�cos para um jogo está relacionada a toda a jogabilidade
proposta, podendo ser apreendida pelo jogador.
A localização dos ícones na tela também podem ajudar o jogador a entender o HUD, como por
exemplo, o padrão de exibir a quantidade de vidas restantes no canto superior esquerdo da tela.
O conhecimento desses padrões pode ser adquirido por meio de estudos em game design e com
a observação de diferentes HUDs. Não somente a localização dos ícones, mas seu tamanho,
alinhamento, contraste e legibilidade das fontes, devem ser estudados para a criação de HUDs
que comuniquem com o jogador da melhor maneira possível em seu jogo.
Agora que você tem mais informações sobre a interface do usuário em um jogo, pense em como
e quais elementos poderão ser exibidos em seu projeto. Considere dispor na tela informação
contextual de uma área especí�ca do jogo, como por exemplo, um ícone que só aparece quando
o personagem se aproxima de algo. Pense também na inserção de ícones fundamentais para esse
jogo de plataforma, como a contagem de vidas e de pontuação. No HUD ainda podem ser
adicionadas informações sobre a coletade determinados itens, o carregamento de um poder
especial, a escolha de armas e munição, dentre tantas outras possibilidades nos games.
Você quer ver
O BIG Festival ( Brazil's Independent Games Festival) é um importante festival de jogos
independentes. Com grande destaque em toda a América Latina, o BIG Festival atua como
3.1 Programação da HUD
Para exempli�car a criação da HUD retomaremos uma construção feita na unidade 2 desta
disciplina. Durante a criação do jogo Breakout , exibimos a pontuação do jogador e a quantidade
de tentativas. Desta vez, utilizaremos uma variável para contar as vidas perdidas e assim indicar o
game over.
Primeiro vamos inserir a programação já conhecida, aquela da soma de pontos. Clique no menu
GameObject > UI > Text . Altere as propriedades do seu texto na janela Inspector . Lembre-se que
as dimensões do Canvas são diferentes das da sua cena. Para visualizar o posicionamento dos
elementos da HUD, utilize o painel Game .
Para a programação da HUD utilizaremos o script GameManager. Para trabalhar com classes e
métodos relacionados ao Canvas, associe o script com a área da Unity que trabalha com a
interface do usuário, inserindo no topo do código, logo abaixo de UnityEngine, a expressão:
using UnityEngine.UI;
Agora que podemos modi�car o objeto texto, você precisará criar duas variáveis: uma que
contará os pontos e outra que exibirá a informação textual no HUD. Assim como na HUD do jogo
Breakout , nesse projeto a variável Placar, que é da classe Text , exibirá a contagem somada pela
variável pontos. Segue a estrutura da declaração das variáveis e do novo método:
um ponto de encontro entre desenvolvedores, produtores, �nanciadores e jogadores. No
site o�cial, você pode conferir a programação dos eventos, além da gameplay de cada um
dos games indicados e premiados nas diversas categorias do festival. Disponível em: <
www.bigfestival.com.br >. 
http://www.bigfestival.com.br/
O método Pontua, somará um valor ao placar cada vez que for executado, exibindo na sequência
seu resultado no Placar. Esse método deverá ser invocado nos momentos de pontuação do seu
jogo. Nesse exemplo, ele foi incluído no script Inimigo, dentro da colisão entre o Inimigo e a arma
do Jogador, através da expressão: FindObjectOfType<gamemanager>().Pontua();</gamemanager>
Segue o código atualizado da colisão entre os dois objetos:
O mesmo método também foi invocado no momento da colisão dos itens com o Jogador, dentro
do script Item :
Para exibir a informação sobre as vidas disponíveis, utilizaremos outro tipo de elemento. Clique
no menu GameObject > UI > Image . Selecione esse novo Game Object no painel de hierarquia. Na
janela Inspector , adicione um asset do tipo sprite no campo Image. No exemplo da �gura 3, foi
adicionado o ícone do coração, correspondente a quantidade de vidas disponíveis.
Ajuste as dimensões de seu ícone na tela, sempre veri�cando seu posicionamento �nal no painel
Game . No painel de hierarquia, clique com o botão direito do mouse sobre o Game Object Image
e clique em Duplicate. Dessa maneira, você criará um cópia já com as dimensões atualizadas de
seu ícone. Repita esse processo quantas vezes forem necessárias, adicionando a quantidade de
vidas disponíveis em seu jogo. Posicione cada um dos novos elementos, utilizando a Move Tool.
Figura 3 - HUD informando a quantidade de vidas disponíveis e a pontuação do jogador. Fonte: a autora, 2020.
Abra o script GameManager para iniciarmos a programação da contagem de vidas. Logo abaixo
da declaração das demais variáveis do código, insira:
public int contagemVidas;
public Image[] imagemVidas;
A primeira variável será utilizada para subtrair a quantidade de vidas disponíveis. A segunda
variável é da classe Image e é do tipo array, isto é, um conjunto de dados, ao invés de somente
um valor. Nesse caso, nosso conjunto de dados é a quantidade de ícones de coração. Retorne
para a interface da Unity e dê o valor correspondente para primeira variável, disponível no painel
Inspector do Game Object associado ao script GameManager. Em nosso exemplo, foi inserido o
número 3, indicando que o jogo iniciará com 3 vidas.
Ainda no painel Inspector, con�gure a variável imagemVidas, indicando seu comprimento (Size),
também para 3. De�na seus elementos (Element 0, 1 e 2) arrastando cada um dos ícones
correspondentes, a partir do painel Hierarchy. Em um array, a contagem dos seus elementos
inicia no 0, por esse motivo nossos 3 ícones são associados dessa maneira.
Retorne para o script GameManager e adicione um novo método:
Figura 4: Trecho do script GameManager contendo o método que calcula e exibe as vidas disponíveis. Fonte: a autora,
2020.
Nesse novo método foi utilizado o laço for, responsável por condições que acontecem repetidas
vezes, cada vez com uma iteração diferente. Um iterador permite que a lista do array seja
percorrida e veri�cada a cada execução do laço. Dentro dos parênteses do laço for, temos 3
argumentos. O primeiro (int i = 0;), indica que o iterador é uma variável, do tipo número inteiro, e
que seu valor inicial é 0. O segundo argumento (i < imagemVidas.Length;), indica a condição que
determinará se o laço será ou não executado. Nesse caso, o laço só será executado se o valor do
iterador for menor do que o comprimento do array imagemVidas, que nesse caso é 3 (elementos
0, 1 e 2).
O terceiro argumento (i++), acrescenta um ao valor do iterador após cada execução do laço. Isso
signi�ca que após a primeira execução, o iterador será 1, assim sucessivamente até chegar ao
número 3. Quando o iterador tiver esse valor, a condição do laço não será mais verdadeira,
impedindo sua execução.
Dentro do laço for, temos a condicional que veri�ca se o valor do iterador é menor do que a
variável contagemVidas. Essa variável é alterada na linha 39 da �gura 4, e será executada a cada
invocação do método Vidas. Podemos invocar o método Vidas por meio da expressão:
FindObjectOfType <gamemanager>().Vidas();</gamemanager>
Ele poderá ser invocado dentro de um método de colisão entre o Jogador e o Inimigo, por
exemplo, ou onde mais o personagem perder vidas. Caso o valor do iterador seja menor que a
variável contagemVidas, a visibilidade da variável imagemVidas (que é o array dos ícones) será
habilitada, e terá o mesmo comprimento indicado pelo iterador. Dessa maneira, se o iterador for
0, 1 ou 2, o laço será executado. Caso o jogador tenha 1, 2 ou 3 vidas, os ícones de coração
correspondentes serão exibidos na tela.
3.2 Programação da GUI
Para que o jogo possa ser jogado novamente, vamos adicionar uma tela de game over com um
botão de reinício do jogo. Clique no menu Assets > Create > Scene e  renomeie para GameOver.
Não esqueça de manter organizadas as pastas do painel Project.
Nessa nova cena, insira um novo GameObject > UI > Button. Como um elemento da HUD, ele será
adicionado junto a um Canvas. Você poderá adicionar outros elementos para compor sua cena,
como um texto Game Over ou um background. Aproveite também para editar as propriedades
desses elementos no painel Inspector, alterando suas dimensões, cores e posicionamento na tela.
Para inserirmos a programação do botão crie um novo GameObject vazio. Crie um script
chamado Menu e associe a esse novo objeto. Dessa maneira, caso você tenha mais botões
poderá inserir todas as ações nesse mesmo script.
Dentro do script Menu, indique que trabalharemos com gerenciamento de cenas nesse código.
Para isso, insira antes da classe Button a expressão:
using UnityEngine.SceneManagement;
Assim como foi feito no projeto Breakout , adicionaremos o carregamento de uma nova cena a
partir do método LoadScene . Para isso, crie um novo método chamado Reinicia:
Com o método programado, precisamos associá-lo ao clique do botão. No painel Inspector do
objeto Button, encontre o componente Button. No campo On Click, clique em + para adicionar um
novo método. Arraste o Game Object vazio que contém o script Menu no campo None (Object).Clique no campo No Function > Menu para associar o método Reinicia que foi criado. A partir de
agora seu botão invocará o método Reinicia quando for clicado.
Vamos adicionar o mesmo método LoadScene para carregar a cena Game Over, isso quando o
jogador perder a última vida. No script GameManager, na linha 40 da �gura 4, adicione:
Para que nosso Jogador de fato perca uma vida ao encostar no inimigo, adicione uma Tag Inimigo
nesse objeto. Agora insira o seguinte código no script do Jogador:
Pronto, agora o método Vidas será invocado cada vez que nosso personagem encostar no
inimigo. Ele também será colocado de volta à sua posição inicial no jogo, nesse caso, -5 no eixo x
e -3 em y.
4. Planejamento de um jogo autoral
Durante esta disciplina, você praticou a programação para jogos 2D através de pequenos
exercícios na Unity. Executados em menor escala, tais exercícios não formaram um jogo completo
de plataforma, porém, você poderá aplicar cada ponto que foi aqui abordado na criação de um
novo jogo.
Com o conhecimento de adicionar novas cenas e transitar entre elas, é possível criar várias fases
para um jogo, adicionando diversos inimigos. Os pontos abordados na criação do HUD poderão
ser aproveitados para criar uma tela de menu com mais opções, ou ainda mais elementos
grá�cos transmitindo informações para o jogador.
A criação de métodos e a declaração de variáveis, por exemplo, podem ser aplicadas para as mais
diversas interações entre objetos. Assim como a veri�cação de colisões, que durante as aulas foi
utilizada para: derrotar o inimigo, identi�car se o jogador está no chão, coletar itens, modi�car a
direção do inimigo, pontuar e perder vidas.
Antes de estruturar os códigos que deverão ser inseridos nos scripts de um jogo autoral, ou até
mesmo antes de pesquisar grá�cos e sons para inserir em um jogo, é preciso saber o que será
utilizado e como cada elemento contribuirá com a gameplay. Esse planejamento no design de
jogos é estruturado em um documento chamado de Game Design Document, mais conhecido
pela sigla GDD.
4.1 GDD - Game Design Document
O GDD apresenta todas as informações do jogo, do conceito às especi�cações técnicas, é criado
antes do desenvolvimento de qualquer jogo. Esse documento é utilizado como referência durante
toda a produção do jogo. A organização de seus tópicos pode variar, mas é fundamental que
apresente os seguintes tópicos:
• Apresentação geral: título, contato do desenvolvedor, conceito, público alvo, resumo; 
• Gameplay : objetivos, desa�o e �uxo do jogo; 
• Mecânica: movimentações, ações e física; 
• História e narrativa: história central do jogo, desenvolvimento dos personagens e descrição do
universo proposto; 
• Levels : mapas, descrição da física envolvida e objetivos especí�cos; 
• Interface: parte grá�ca, sonora e os controles de interação; 
• Inteligência arti�cial: NPCs inimigos ou não, detecção de colisões; 
• Especi�cações técnicas: engine, hardware e softwares envolvidos; 
• Arte do jogo: arte conceitual, descrição dos personagens e ambientações; 
• Gerenciamento do projeto de jogo: cronograma de desenvolvimento, orçamento e etapa de
testes; 
• Concorrência: análise de mercado para lançamento do jogo.
Ao preencher o GDD de seu projeto, você poderá se organizar melhor para o desenvolvimento e
até mesmo se inspirar durante a criação, já que será levado a re�etir sobre cada etapa do jogo.
4.2 Fechando o jogo
Após o desenvolvimento do jogo, é necessário criar uma versão executável, a build . Apesar de ser
possível jogar uma prévia do game na própria engine, somente com a build que teremos certeza
de que todas as funcionalidades do game estão ou não, de acordo com o planejado. Por esse
motivo, vimos no capítulo sobre os testes que estes são realizados com a veri�cação de builds, ao
longo de todo o desenvolvimento do jogo.
Para fechar o jogo na Unity , é necessário ter instalado um módulo correspondente a plataforma
desejada. No Unity Hub , clique em Installs > menu da versão utilizada > Add Modules. Você poderá
escolher dentre as diversas plataformas sejam de consoles ou sistemas operacionais de desktops
e dispositivos móveis. Escolha o sistema operacional de seu computador para poder testar o jogo
facilmente.
Na Unity, clique em File > Build Settings > Add Open Scenes. Após adicionar as cenas que serão
fechadas na build , clique na plataforma desejada e em Switch Platform > Build And Run .
Parabéns! Você concluiu seu projeto e executou sua primeira build ! Continue desenvolvendo
novos jogos com base no que pôde aprender durante esta disciplina.
Você quer ler
Podemos encontrar diversos modelos de GDD na internet. O Template General Game Design
Document , compartilhado pelo desenvolvedor Alex Pizzini e disponível para qualquer pessoa
localizar e acessar, é um modelo completo, com todos os tópicos a serem preenchidos pela
equipe envolvida em um projeto de jogo. Disponível em: <
https://docs.google.com/document/d/1K8JKFPtEA08EutfHK3U_3wDDn2SWvJdpue0rmjiX4a0/edit
> 
Para traduzir o documento, faça download e utilize a opção de tradução de documentos do
Google Tradutor. Disponível em: < https://translate.google.com.br/?hl=pt-
BR#view=home&op=docs&sl=en&tl=pt > 
https://docs.google.com/document/d/1K8JKFPtEA08EutfHK3U_3wDDn2SWvJdpue0rmjiX4a0/edit
https://translate.google.com.br/?hl=pt-BR#view=home&op=docs&sl=en&tl=pt
Síntese
A programação para jogos 2D envolve diferentes áreas do conhecimento em design de games.
Ainda que o foco seja a criação de scripts, é importante conhecer as possibilidades de se
trabalhar com elementos grá�cos, sons, interface do usuário e até mesmo produção de um
documento de game design, o GDD. Ao identi�car as possibilidades de criação em jogos 2D, o
programador pode contribuir mais ativamente em uma equipe de desenvolvedores.
A Unity, como é comum em uma game engine, facilita o próprio processo de codi�cação, já que
oferece classes prontas, com a física embutida e outros recursos úteis ao desenvolvimento de
games.
Durante os estudos para esta disciplina, você foi introduzido à Programação Orientada a Objetos,
desde seus conceitos à aplicação em projetos de jogos. A game engine escolhida, a Unity,
proporcionou exercitar a codi�cação em C#, ao mesmo tempo em que permitiu a montagem dos
demais elementos necessários na criação de jogos, como a inserção de grá�cos e sons.
Por meio dos projetos de jogos desenvolvidos, foram exempli�cadas diversas etapas da criação
de jogos 2D. Já que a movimentação de personagens, adição de física, montagem de level e
veri�cação de bugs, por exemplo, são fundamentais nesse processo.
Nesta unidade, completamos seus estudos em programação de jogos 2D com a abordagem dos
seguintes tópicos:
• Inserção de sons; 
• inteligência arti�cial; 
• interface do usuário; 
• Documento de Game Design; 
• Fechamento do jogo.
Download do PDF da unidade
Bibliografia
PEREIRA, Venita. Learning Unity 2D Game Development by Example. UK: Packt Publishing,
2014. 
ROGERS, Scott. Level UP : um guia para o design de grandes jogos. São Paulo: Blucher, 2012.
Disponível em Laureate Digital. 
SANTAELLA, Lucia; FEITOZA, Mirna. Org. Mapa do Jogo : A diversidade cultural dos games. São
Paulo: Cengage Learning, 2009. 
https://docs.unity3d.com (Documentação da Unity) 
https://docs.unity3d.com/

Continue navegando