Buscar

Desenvolvimento de Jogos Web

Prévia do material em texto

DESENVOLVIMENTO DE JOGOS PARADESENVOLVIMENTO DE JOGOS PARA
WEBWEB
DESENVOLVIMENTO DEDESENVOLVIMENTO DE
JOGOS WEB: INÍCIO DAJOGOS WEB: INÍCIO DA
JORNADA DO GAMEDEVJORNADA DO GAMEDEV
Autor: Esp. Diego 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.
No princípio da web , desenvolvedores de sites e a�ns só precisavam se
preocupar com telas de computadores desktop (computador de mesa), que,
em geral, tinham o mesmo tamanho, 14 polegadas. Sendo assim, os designers
de sites conseguiam manter um padrão de tamanho e exponencialidade
deles. Também não havia preocupação em executar o conteúdo desses sites
em diversos tipos e tamanhos diferentes de telas.
Nos dias atuais, não só computadores desktop têm acesso aos conteúdos dos
sites alocados na Internet, mas também dispositivos com tamanhos variados
de tela, e isso se tornou uma preocupação com relação à maneira que o
conteúdo estava disposto nas web pages (páginas da web ).
O desenvolvimento de conteúdo web para celulares é um novo paradigma.
Quando comparado ao modelo antigo de desenvolvimento web , precisamos
estar atentos principalmente à resolução das telas e seu funcionamento em
relação a aceitar interação de um dispositivo móvel.
Quando pensamos em desenvolvimento de jogos para web e queremos que
esses funcionem em várias plataformas, por exemplo, desktop e mobile ,
Introdução aoIntrodução ao
Desenvolvimento deDesenvolvimento de
Jogos WebJogos Web
precisamos nos atentar se a plataforma na qual vamos disponibilizar esse
jogo se preocupa com a disponibilização de conteúdos multiplataforma; caso
contrário, teremos problemas de incompatibilidade de dispositivos.
Contexto Atual do “Game Dev para Web”
Segundo Tom Greenaway, um “Lead Game” do Google, responsável pelo
desenvolvimento de jogos para a web, os jogos web precisam ser de fácil
acesso, ou seja, devemos permitir ao jogador chegar ao jogo da maneira mais
fácil possível, precisão viabilizar um carregamento de conteúdo rápido o
“load” do jogo. Jogos web precisão explorar aquilo que eles têm de mais forte
e mitigar ao máximo seus pontos fracos (READ PLAYER…, 2019).
Pontos fortes:
fácil de compartilhar; basta enviar o link do site.
quase todos os dispositivos hoje em dia tem acesso a um web
browser , o nosso querido navegador.
praticamente não existem restrições físicas nem digitais para a
produção, disponibilização e monetização de nossos jogos.
saiba mais
Saiba mais
Itch.io é um site que se preocupa com essas
necessidades, direcionado à hospedagem de
jogos do tipo HTML5, que são voltados para a
web , conteúdos como áudios, efeitos
sonoros, game arte, entre outros conteúdos.
ACESSAR
https://itch.io/
Pontos negativos:
A web é um ambiente de muita descon�ança. Os usuários não se
sentem à vontade para fazer pagamentos em websites avulsos.
Há di�culdade em entregar o conteúdo certo ao dispositivo certo. Por
ser multiplataforma, precisamos nos atentar com vários tipos de
con�gurações para que possamos atingir o maior número de
dispositivos possível.
Precisa de um acesso à Internet para acessar os conteúdos e mantê-
los funcionando.
O que é uma Engine?
Game engine ou motor de jogos são ferramentas de desenvolvimento de
jogos projetadas para acelerar o processo de desenvolvimento de jogos,
reduzir custos, diminuir a complexidade no desenvolvimento e o tempo de
chegada de seu produto no mercado. Podemos pensar nelas como um
conjunto de ferramentas e bibliotecas.
Essas ferramentas de software criam uma camada de abstração
além das tarefas mais comuns no desenvolvimento de videogames.
As camadas de abstração são empacotadas em ferramentas
projetadas para funcionar como componentes interoperáveis que
podem ser substituídos completamente ou estendidos por
componentes adicionais de terceiros (HALPERN, 2019, p. 1,
tradução nossa).
Ou seja, as game engines , além de reduzirem nosso esforço no
desenvolvimento de um jogo, trazem-nos muitos benefícios, e um deles é a
redução de conhecimento que é necessário ter para desenvolver um jogo, nos
trazem muitas funcionalidades prontas, prede�nidas e vários recursos
prontos para serem usados em nosso desenvolvimento.
Porque usar uma Engine?
“É incrivelmente difícil de se fazer um jogo” (WHY YOU..., 2017, on-line ),
palavras de Yan Chernikov, ou Cherno, como se autointitula em seus vídeos
no YouTube. Segundo sua conta do LinkedIn, Cherno é um engenheiro de
software na EA Games em Melbourne, na Austrália, há quatro anos.
Cherno mantém um canal no YouTube no qual cria conteúdos para
desenvolvedores de jogos e aspirantes ao desenvolvimento. No vídeo
publicado em 2017, intitulado Why you NEED to use a GAME ENGINE (Por que
você PRECISA usar um MOTOR DE JOGOS), Cherno enfatiza as vantagens de se
desenvolver jogos utilizando os motores de jogos que estão disponíveis no
mercado, e um dos maiores motivos é que uma ferramenta como essa facilita
muito o trabalho do desenvolvedor de jogos em vários aspectos, como
acelerar a produção dos jogos e facilitá-la ao desenvolvedor e disponibilizar o
jogo para várias plataformas, entre outros.
Cherno deixa bem claro, em seu depoimento, que fazer um jogo totalmente
sozinho, mesmo tendo uma ferramenta como uma Engine à disposição,
somente por orgulho de dizer “Eu �z isso tudo sozinho, mesmo que tenha
levado 20 vezes mais tempo” (WHY YOU..., 2017, on-line , tradução nossa), é
uma besteira. Utilizar uma game engine é uma estratégia de negócio e mesmo
as maiores empresas do mundo em termos de videogames cometem erros
enormes, muitas vezes precisam �car corrigindo problemas de
compatibilidade em seus jogos e problemas que surgem por diversos
motivos, enquanto a Engine tem uma grande equipe de desenvolvedores ao
dispor, que busca sanar tais erros e estão sempre procurando aperfeiçoar a
ferramenta.
Para Cherno (2017, on-line ), quem deseja desenvolver jogos precisa tomar
uma decisão: se deseja fazer jogos ou se deseja programar ferramentas para
criar jogos, pois existe uma grande diferença em criar jogos e fazer as
ferramentas para que esse desenvolvimento seja possível.
Mas Cherno (2017, on-line ) levanta um ponto interessante em relação a
desenvolver uma game engine sozinho ou em um time. Ele deixa claro que,
caso as ferramentas que estão disponíveis no mercado não consigam atender
às necessidades de seu projeto, claramente precisamos desenvolver essa
ferramenta nós mesmos, mas isso é um campo muito especí�co e, em geral,
essas pessoas já têm muita experiência em desenvolver jogos para sentir essa
necessidade.
Portanto, fazer uso de uma ferramenta que vai nos poupar tempo de forma
gratuita é uma vantagem, pois ela nos aproxima do mercado em relação à
competitividade da qualidade da ferramenta que estamos usando, bem como
em relação à velocidade de desenvolvimento do produto e de lançamento do
produto no mercado.
Unity, um motor de Jogos
Vamos começar a apresentação da Unity citando algumas das plataformas
pelas quais ela têm possibilidade de disponibilizar um jogo. Devemos sempre
lembrar que diferentes plataformas exigem parametrizações diferentes. Por
exemplo, temos os consoles,e cada console tem um controle com botões
diferentes, os quais o mercado já padronizou algumas funcionalidades. Isso
não nos impede de criarmos novas ações para eles, mas devemos lembrar
que um controle de videogame é diferente de um teclado e um mouse.
saiba mais
Saiba mais
Conheça alguns dos produtos desenvolvidos
com a Unity. Jogos, animações e ferramentas
são algumas das possibilidades que a Unity
traz com seu arsenal de possibilidades para o
desenvolvimento de produtos para o
entretenimento em geral.
ACESSAR
https://unity.com/pt/madewith
Vejamos algumas plataformas que a Unity tem compatibilidade:
Mobile: Android, IOS.
Desktops: Windows, Linux.
Web: WebGL “Páginas da web”.
Consoles: PS4, Xbox One, 3DS.
Entre outras, a Unity Engine hoje já possibilita compatibilidade com
mais de 20 plataformas diferentes (UNITY PARA..., 2019).
A Unity é um motor de jogos, sendo uma das melhores ferramentas do tipo
disponíveis no mercado. Como já foi visto antes, utilizar uma ferramenta
como essa só nos traz vantagens. Desse modo, teremos muito mais tempo
para enfrentar os desa�os de fazer o design de nossos jogos do que nos
preocuparmos com problemas de compatibilidade entre as plataformas que
desejamos atingir com nosso produto.
saiba mais
Saiba mais
Conheça alguns títulos de jogos web dos
últimos anos, e veja a evolução de técnicas,
jogabilidade e diversidade que os jogos web
têm atingido, e também jogos feitos com a
Unity.
ASS I ST IR
Uma Visão sobre Prototipação de Jogos
Digitais
Uma parte muito importante no desenvolvimento de qualquer jogo para
qualquer plataforma, de qualquer gênero, é a prototipação dele.
Para isso, devemos nos atentar a alguns pontos muito importantes no
desenvolvimento de um jogo, como o design do game.
Design de Games
Para Schuytema (2016, p. 3), “Design de games é a planta baixa de um game.
Designer é a pessoa designada para criar a planta baixa e, a partir dela, com a
combinação adequada de talento e esforço, surgirá um game”.
É exatamente isso que faremos com a prototipagem de nosso jogo: criaremos
nossa planta baixa, ou o mapa que nos guiará pelos caminhos que
planejamos para nosso jogo. Essa parte é muito importante, pois não adianta
só ter a Unity, sons, imagens e os outros componentes do jogo. É preciso
também ter uma ideia do que queremos construir e como esse jogo deve
parecer, por isso fazemos a prototipagem.
Apesar de ter sido projetado para ser produzido como um jogo
digital 2D, em seu primeiro teste para validar e avaliar o conceitos
gerais da mecânica, foi utilizado um protótipo analógico, ou seja,
físico. Esta opção deu-se pelo fato de um modelo físico - utilizando
recursos mais acessíveis como papel, EVA, canetas coloridas e
brinquedos - não onera em demasia a equipe e pode ser
produzido em um período de tempo bem reduzido (SATO, 2010, p.
79).
Existem várias maneiras de se prototipar um jogo, e uma das mais usadas e
também a mais fácil é a “ paper prototyping ”. Essa prototipagem requer lápis e
papel. Devemos desenhar nossas telas e interações que desejamos ter em
nosso jogo. Consiste basicamente em criar as possíveis interações humano-
máquina, em que tentamos provar que as mecânicas as quais desejamos
inserir em nosso jogo serão divertidas e aplicáveis. Precisamos fazer esses
testes para que possamos ter nossa planta baixa e com ela chegar ao �m de
nosso projeto.
Desta forma, desde o início do game design, o protótipo se faz
presente e necessário para visualizar melhor as ideias propostas e
estabelecê-las no projeto como conceitos. No entanto, a
prototipagem não se restringe somente a testar os conceitos gerais
de jogos. Em vários casos, após se estabelecer o conceito geral,
alguns testes são necessários para veri�car a viabilidade da
representação de uma determinada situação no jogo a �m de
conferir credibilidade ao elemento proposto (SATO, 2010, p. 79).
Precisamos descrever como o jogo será. O título já temos: “ Space Shooter ”.
O jogo terá:
controle do jogo será feito pelo teclado;
mouse será apenas para apertar botões;
tela de Menu principal, com botão Start; e
tela de GameOver com botão Restart.
Além disso,
serão três tipos de naves inimigas, cada uma representando uma
onda/wave;
as naves inimigas não vão atirar, somente passar pela tela;
cada nave inimiga terá uma quantidade de vida diferente;
quando qualquer nave for destruída uma animação de partículas vai
aparecer no local da explosão;
os asteroides farão parte do parallax junto com as nuvens de poeira;
a nave do jogador vai atirar sozinha; isso facilita caso deseje levar o
jogo para a plataforma mobile;
todo início de onda/wave trará um PowerUp;
para a nave do jogador morrer, precisa colidir com uma nave inimiga,
apenas uma vez;
o tiro terá um valor numérico de dano, que será aumentado com o
PowerUp e os inimigos terão vida;
cada nave inimiga que for destruída contará uma pontuação;
vamos colocar efeitos sonoros e música no jogo;
quando acabarem as ondas/waves, aparecerá a palavra �m junto ao
botão Restart.
saiba mais
Saiba mais
Descubra outras maneiras de prototipagem
de jogos e aprofunde o seu conhecimento
com relação a prototipagens de jogos em
geral.
ACESSAR
Usaremos a Unity, portanto teremos acesso a uma diversidade de materiais
gratuitos desenvolvidos para a Unity e disponibilizados de maneira muito fácil
de se fazer download e acoplar ao projeto. Vamos fazer uma prototipagem
utilizando um editor de imagem, que é basicamente a mesma ideia da “ paper
prototyping ”, só que digital. Simplesmente, criamos telas digitais para que
tenhamos uma maneira de sabermos o que desejamos fazer e “mais ou
menos” quais funcionalidades e telas devemos criar.
Bom, vamos começar pela lista de ferramentas:
Unity, vamos usar a versão Personal , a versão mais atualizada, que é
gratuita até certo ponto. Para mais informações, devemos ler todo o
contrato, mas, basicamente, ela é gratuita até alcançarmos uma
determinada quantia em lucro de venda dos jogos feitos com ela.
Sendo assim, para usá-la precisamos aceitar os termos de contrato,
instalar e fazer uma conta para acesso dela. Na Figura 1.1, vemos a
tela de download :
https://www.fabricadejogos.net/posts/tipos-de-prototipagem-para-desenvolvimento-de-jogos-digitais/
Ao �nalizar a instalação da Unity, no momento de abri-la pela primeira vez,
será necessário fazer o login; em seguida, podemos criar nosso primeiro
projeto. Para criarmos nosso primeiro projeto, as seguintes informações
devem ser preenchidas.
Project name = nome do Projeto.
Location = Local : onde o projeto �cará dentro de seu computador.
Organization : será o nome que escolheu para sua conta da Unity.
Template : 2D, indica o modelo de jogo que desejamos criar.
Add Asset Package : como esse é nosso primeiro projeto não
faremos uso desta função agora.
Enable Unity Analytics : quando está ligado, no modo “On”, permite
a Unity fazer análises em seu projeto e fazer possíveis sugestões.
Na Figura 1.2, observa-se a imagem da tela de criação do projeto:
Figura 1.1 - Print da página de download da Unity
Fonte: Elaborada pelo autor.
Figura 1.2 - Print da tela de criação de projeto da Unity
Fonte: Elaborada pelo autor.
Quando �nalizar essa parte, e criar o projeto, a Unity irá iniciar o processo de
geração do projeto. As primeiras informações que estarão contidas neste
projeto serão:
Pasta: Favorites, que tem um ícone de estrela, não mexeremos nela.
Pasta: Assets.
Sub-Pasta: Scenes, que �ca dentro da pasta Assets.
Arquivo SampleScene, que �ca dentro da pasta Scene. Esse arquivo é
o responsável por armazenar uma cena.
Pasta: Packages, armazena bibliotecas e a�ns; em geral, não
mexeremos nela.
A Figura 1.3 mostra a Unity logo após a criação do projeto:
Figura 1.3 - Print da tela com projeto recém-criado
Fonte: Elaborada pelo autor.
A “ Scene ” traz uma visualização dos objetos que estão em seu jogo. Podem
ser usados com várias �nalidades, menus, níveis individuais, entre outras
coisas. Na documentação da “Scene”/cena, a Unityexplicita que podemos
pensar em cada “ Scene ” como um nível individual. “Pense em cada arquivo
de cena exclusivo como um nível único” (SCENES, 2019, on-line ). Essas cenas
são onde podemos colocar nossos objetos, cenários e obstáculos, entre
outros.
Para trabalhar com a Unity, é necessário aprender a manipular e modi�car os
objetos da cena. A própria documentação da Unity traz essa visão como uma
necessidade básica para quem está querendo trabalhar com a Unity (THE
SCENE..., 2019, on-line ).
Em um projeto recém-criado, encontraremos dois objetos dentro da “ Scene ”:
uma câmera e uma luz direcional. A câmera pode variar entre ortográ�ca 2D
ou perspectiva 3D, e a luz direcional geralmente é usada para representar o
sol da “ Scene ”. Com apenas uma luz direcional, podemos iluminar toda a “
Scene ”.
Essa cena não estará salva. Para isso, podemos seguir o caminho ( File > Save
As ) e escolher um caminho em seu computador, ou no Windows podemos
pressionar as teclas: Ctrl + Shift + S , para abrir a mesma tela para salvar.
Perceba na Figura 1.3 que, na barra da janela, em seguida ao ícone da Unity,
temos a versão da Unity, logo após, o modelo Personal, o nome da “Scene”
que está dentro da pasta Assets/Scene, o nome do projeto, a plataforma na
qual está apontada e, por �m, o modelo do directX que a Unity está usando.
Com a Unity instalada e o projeto criado, podemos procurar pelos conteúdos
gratuitos que ela disponibiliza. A Figura 1.4 mostra a tela de busca dos Assets.
Existem algumas categorias com as quais podemos re�nar nossa busca, por
preço, conteúdos 3D ou 2D, conteúdos gratuitos, mas, mesmo sem essas
categorias, podemos simplesmente escrever uma palavra como “ Space ” para
fazer uma busca sobre esse tema.
Figura 1.4 - Print da página da Unity Asset Store
Fonte: Elaborada pelo autor.
saiba mais
Saiba mais
Existem vários outros “Assets”
disponibilizados pela Unity, versões pagas e
gratuitas.
ACESSAR
Nosso primeiro jogo será um “ Space Shooter ”, um jogo de nave espacial de
tiro, bem simples, mas com começo, meio e �m. Para isso, utilizaremos esses
“ Assets ” Space-Kit, basta acessar o site da “Unity Assets Store”, buscar “2D
Space Kit” e clicar em “Add to my assets”.
Com a Unity aberta, acesse o link do “ Space-Kit ” e clique no botão “azul”,
chamado “Open in Unity”. A Figura 1.5 mostra essa página com esse botão.
Essa ação abrirá uma aba no navegador com outro botão “Abrir URL”; em
seguida, o endereço URL que está selecionando. Ele abrirá o conteúdo na
https://assetstore.unity.com/top-assets/top-free
Unity, que poderá ser baixado e instalado. A Figura 1.6 mostra essa página
com essa aba aberta.
É muito importante frisar que, para o botão “Open in Unity” aparecer na
página dos Assets, como demonstra a Figura 1.5, é preciso estar logado em
sua conta da Unity nessa página:
Figura 1.5 - Print da página da Unity Asset Store
Fonte: Elaborada pelo autor.
Ao clicar no botão da aba que abrirá na página dos “ Assests ” da Unity, como
demonstrado na Figura 1.6, estará escrito “Abrir URL: em seguida a url”, que
abrirá a tela de download dentro da Unity. Agora, com a Unity aberta, a aba
“Asset Store” estará aberta com o site do “Asset” e com o botão de download
do “Asset”, aparecerá nesse caso, a imagem do “ Space-Kit ”, e ao lado da
imagem o botão azul escrito download , após o download ser concluído, o
botão mudará para “Import”, que signi�ca importar. Clicando nesse botão, a
Figura 1.6 - Print da página da Unity Asset Store, com aba aberta
Fonte: Elaborada pelo autor.
Unity iniciará o processo de   importação do pacote. Por �m, uma tela será
aberta dentro da Unity chamada “Import Unity Package”. Nesta tela, serão
listados todos os conteúdos do pacote. E, para �nalizar a importação, será
necessário clicar no botão “Import”, desta vez situado na tela “Import Unity
Package”. A Figura 1.7 traz a tela da Unity com a tela “Import Unity Package”:
Quando os conteúdos que mencionamos acima forem importados e incluídos
no projeto, uma nova pasta vai aparecer dentro da pasta “Assets”, a pasta “2D
Space Kit”. Usaremos as imagens das naves, fundos e tudo o mais que estiver
disponível dentro desse pacote, para fazer nossa prototipagem de baixo nível.
Depois que a prototipagem estiver pronta, daremos inicio ao passo a passo
com a Unity.
Ao �nalizar o download e adicionar a pasta “2D Space Kit” em seu projeto,
usaremos em nossa prototipagem as seguintes imagens:
Plano de fundo : Pasta - Assets/2D Space kit/Backgrounds/2.png.
Nave : Pasta - Assets/2D Space kit/Ships and Stations/Cruiser 3.png.
Asteroides : Pasta - Assets/2D Space kit/Asteroids/Asteroid 1.png.
Inimigo 1 : Pasta - Assets/2D Space kit/Ships and Stations/Alien
1.png.
Figura 1.7 - Print da tela da Unity com tela “Import Unity Package”
Fonte: Elaborada pelo autor.
Inimigo 2 : Pasta - Assets/2D Space kit/Ships and Stations/Alien
2.png.
Inimigo 3 : Pasta - Assets/2D Space kit/Ships and Stations/Alien
3.png.
Tiro : Pasta - Assets/2D Space kit/Particles (Sprites)/ Projectile
Sharp.png.
Poeira : Pasta - Assets/2D Space kit/Dust and Nebula/DustCloud.png.
Em seguida, a Figura 1.8 traz todos os componentes que serão usados para
realizar a prototipagem do “Space Shooter”, três naves inimigas, uma nave
para o jogador, poeira espacial, que será usada para fazer o parallax, um
meteoro, que também será usado no parallax, o tiro e o plano de fundo.
Figura 1.8 - Imagens usadas no jogo
Fonte: Elaborada pelo autor.
As Figuras 1.9, 1.10 e 1.11, a seguir, foram montadas com um editor de
imagem que divide as imagens em camadas. Dessa forma, conseguimos
montar essas imagens que representam o resultado �nal que o jogo deverá
ter.
Figura 1.9 - Primeira onda/wave
Fonte: Elaborada pelo autor.
Figura 1.10 - Segunda onda/wave
Fonte: Elaborada pelo autor.
Figura 1.11 - Terceira onda/wave
Fonte: Elaborada pelo autor.
Como os botões que vamos usar são da Unity, não precisamos de �guras para
prototipagem dessas telas.
praticar
Vamos Praticar
No momento da criação de um jogo, devem-se levar em consideração vários
aspectos que estão envolvidos com a aparência do jogo e com a sua jogabilidade,
mas existem alguns que, se não forem bem construídos, podem gerar problemas no
momento de disponibilizar/exportar o jogo para múltiplas plataformas. Sendo
assim, assinale a alternativa que apresenta um dos aspectos apresentados.
a) Paleta de cores do jogo.
b) Resolução do jogo.
c) Jogabilidade.
d) Possibilidade de multijogadores.
e) Consumo de memória.
Com a prototipagem feita, poderemos iniciar o desenvolvimento do “Space
Shooter”. Precisamos usar as imagens que foram citadas anteriormente e
montá-las de forma a gerar o mesmo resultado da prototipagem.
Com a Unity rodando, devemos abrir a pasta ” Assets ”, que �ca na aba “
Project ”, na qual está a pasta “ Scenes ”. Lá encontraremos nossa cena, que é
a parte principal do projeto, e essa parte será onde nosso jogo inicia sua
criação.
A Figura 1.12 mostra a Unity aberta com o Layout Default “padrão”
selecionado. Há números verdes e vermelhos e retângulos com as mesmas
cores. Vejamos o que cada um signi�ca.
Space Shooter, Início doSpace Shooter, Início do
DesenvolvimentoDesenvolvimento
Vamos iniciar com os números verdes:
1. Nesse campo, podemos trocar o layout da tela da Unity. O layout é
como a tela é apresentada. Podemos também modi�car o Layout e
salvá-lo.
2. Na aba “ Game ”, vemos como a câmera do jogo vai visualizá-lo e
como isso �cará no �nal. Ela representa o jogo sendo executado, e
podemos testá-lo antes de passar para alguma plataforma.
3. Nesse campo, podemos mudar a visão da câmera e informar que ela
�cará em formato 2D . Caso esteja desmarcado, a câmera �ca em
formato 3D . Lembrando que isso não vai mudar a visualização da
câmera do jogo, que é a imagem que aparece na aba “ Game ”, e
mudará somente a câmera da aba “ Scene ” para esta visão 3D.
4. A aba “ Scene ” traz uma visualização dos objetos que estão em seujogo. Podem ser usados com várias �nalidades, menus e níveis
individuais, entre outras coisas. Na documentação da “Scene”/cena, a
Unity explicita que podemos pensar em cada “ Scene ” como um nível
individual. “Pense em cada arquivo de cena exclusivo como um nível
único” (SCENES, 2019, on-line ). Essas cenas são o local onde podemos
colocar nossos objetos, cenários e obstáculos, entre outros.
Para trabalhar com a Unity, é necessário aprender a manipular e
modi�car os objetos da cena. A própria documentação da Unity traz
Figura 1.12 - Unity Default/Padrão
Fonte: Elaborada pelo autor.
essa visão como uma necessidade básica para quem está querendo
trabalhar com a Unity (THE SCENE VIEW, 2019, on-line ).
5. Esse ícone é a nossa “ Scene ”, onde todo o jogo é montado.
6. Essa é a pasta onde a “ Scene ” �ca, e, quando necessário criar outra “
Scene ”. O ideal é criá-la na mesma pasta que a existente.
7. Essa é nossa pasta “ Assets ”, que �ca dentro da aba “ Project ”. Essa
pasta armazena todos os conteúdos que podemos usar na criação de
nosso jogo. Os conteúdos que baixamos com os links anteriores
�carão nessa pasta, em suas respectivas pastas, mas nada nos
impede de arrastar novos arquivos para essa pasta, ou mesmo criar
uma nova.
8. A aba “ Inspector ” guarda todos os componentes que o objeto pode
ter. Podemos adicionar novos componentes, como colisor, scripts e
luz, en�m, vários tipos de componentes a um determinado objeto.
O componente “ Script ” é muito importante. Ele possibilita que o código
programado com a linguagem C# seja usado pela Unity e possa fazer efeito
em objetos da “ Scene ”, ajudando a controlar, criar rotinas e condições para
ocorrerem ações.
Números vermelhos:
1. A aba “ Hierarchy ” ou hierarquia contém todos os conteúdos que
irão compor o jogo. Botões, player , planos de fundo, efeitos e tudo o
mais que vai compor o jogo deve estar dentro dessa aba. Podemos
dizer que ela contém uma lista de todos os objetos que compõem a “
Scene ”.
2. Nesse espaço logo abaixo da aba “ Hierarchy ”, temos o create.
Podemos clicar nele, e uma tela se abrirá no local do clique, em que
poderemos escolher criar algum elemento 2D, 3D, efeitos, áudio e
luz, entre outros tipos de componentes que podem compor a cena e
serem usados no jogo. Encontramos também o componente “
NewScene ”.
3. A câmera do jogo é o ponto que visualiza tudo o que aparece dentro
do jogo. Ela mostra a imagem que aparece na tela do computador
quando o jogo é jogado. A visão da câmera aparece na aba “ Game ”.
Chegamos ao retângulo vermelho no meio da tela. Ele mostra três botões:
Play, Pause e Step:
Botão Play : inicia o jogo. Representa a ação de executar o jogo, é
como se estivéssemos pedindo para que o jogo fosse iniciado.
Botão Pause : faz o jogo �car pausado, parado.
Botão Step : esse botão faz as ações do jogo serem puladas uma a
uma em sequência, frame a frame.
Depois de nos familiarizarmos com parte da tela inicial da Unity, vamos iniciar
nossa jornada no desenvolvimento do jogo “ Space Shooter ”. Como já
�zemos as devidas importações do pacote “ 2D Space Kit ”, podemos usar seu
conteúdo.
Devemos encontrar a imagem de fundo que está na pasta – Assets/2D Space
kit/Backgrounds/2.png . O nome da imagem é 2.png . Caso queira utilizar
outra imagem para fazer essa parte, �que à vontade, pois existem várias
outras imagens interessantes nesta pasta.
Encontrando o plano de fundo, podemos utilizá-lo de duas maneiras:
Podemos arrastá-lo para dentro da Aba “ Scene ”.
Podemos arrastá-lo para dentro da aba “ Hierarchy ” (que quer dizer
hierarquia), dentro do projeto.
Adicionando o objeto a “ Scene ” ou direto na “ Hierarchy ”, o objeto
aparecerá na tela da aba “ Game ”. Vamos tentar? A Figura 1.13 demonstra o
processo de inserir a imagem direto a aba “ Scene ”. Vamos tentar inseri-la na
“ Hierarchy ”?
Caso arraste o objeto que deseja inserir na aba “ Hierarchy ” para cima do
objeto câmera que lá está, veremos que a Unity permitirá esse movimento e
os objetos �caram agrupados como pastas. Mais à frente, quando falarmos
do parallax, falaremos sobre essa ação com detalhes. Caso clique com o
botão direito do mouse dentro da área da aba “ Hierarchy ”, ou na ação de “
create ” que está abaixo do nome da aba “ Hierarchy ”, veremos que existem
vários tipos de objetos pré de�nidos pela Unity, que podemos usar como
peças na construção do jogo.
Sendo assim, podemos perceber na Figura 1.13 que existe abaixo do nome da
aba “ Game ”, um retângulo vermelho, que apresenta o campo que de�ne a
proporção de nossa tela. Abrindo-o, veremos vários valores prede�nidos.
Escolha o valor que melhor se encaixe com seu gosto. Por exemplo, o valor de
5:10 ou 6:10 se encaixa melhor com uma tela de celular; já um valor de 16:9
�caria melhor em uma tela de um desktop . Clicando na área que o retângulo
destaca, será aberta uma função na qual, ao �nal, teremos um ícone com um
sinal de mais (+). Clicando nele, poderemos de�nir uma nova proporção de
tela.
Figura 1.13 - Unity arrastando imagem para a Scene
Fonte: Elaborada pelo autor.
A Figura 1.14 traz alguns botões que são usados para girar, aumentar,
diminuir e movimentar os objetos que estão dentro da “ Scene ”. O conjunto
desses botões é chamado de “ Transform Toolset ”, ou conjunto de
ferramentas de transformação.
Na Figura 1.14, temos na sequência em que aparecem:
Hand Tool : quando selecionado, move todo o cenário do jogo.
Move Tool : quando selecionado, podemos mover um objeto da cena
do jogo para posicioná-lo.
Rotate Tool : quando selecionado, podemos rotacionar um objeto na
cena do jogo.
Scale Tool : quando selecionado, podemos maximizar ou minimizar
um objeto na cena do jogo.
Rect Tool : quando selecionado, assume que estamos tratando um
objeto bidimensional. Pode ser usado para maximizar ou minimizar
de forma diferente a disponível na opção anterior.
Move, Rotate ou Scale Selected Objects : quando selecionado,
possibilita ao mesmo tempo rotacionar mover ou maximizar. É mais
usado para objetos 3D (HALPERN, 2019).
Figura 1.14 - Transform Toolset
Fonte: Elaborada pelo autor.
Para fazer uso dessas funções, devemos sempre selecioná-las, e também
selecionar um objeto. Assim, podemos usar a aba “ Scene ” para fazer uso
dessas funções.
“Dica: os seis controles no Transform Toolset são mapeados individualmente
para as seis teclas a seguir: Q, W, E, R, T, Y. Use essas teclas de atalho para
alternar rapidamente entre as ferramentas” (HALPERN, 2019, p. 25, tradução
nossa).
Tente mover a imagem de fundo que já foi colocada na “ Scene ” e veja como
esses botões funcionam.
A Figura 1.15 mostra a ação de clicar com o botão direito dentro dos limites
da aba “ Hierarchy ”. Dessa forma, podemos escolher um novo tipo de objeto
que fará parte da hierarquia de nosso jogo.
Criando a Nave do Jogador
Vamos começar apresentado uma das partes mais usadas na Unity, o “
GameObject ”. Para reconhecer um, é simples. Todo “ GameObject ” tem um
componente “ Transform ” nele, que serve para indicar o posicionamento do
objeto na “ Scene ”. A Unity não permite que esse componente seja deletado
(GAMEOBJECT, 2019).
GameObjects são os objetos fundamentais da Unity que
representam personagens, objetos e cenários. Eles não realizam
muito em si, mas atuam como contêineres para componentes, que
implementam as reais funcionalidades (GAMEOBJECT, 2019, on-line,
tradução nossa).
Quando criamos ou arrastamos um objeto para dentro de outro, a Unity
entende isso como um agrupamento de objetos. Esse objeto que está dentro
do outro é chamado de “ child ”, ou seja, ele vira �lho do objeto que o
armazena, e esse objeto que está contendo outro se transforma em um
container, pois ele contém outros objetos.
Podemos ver que existem vários tipos de “ GameObjects ” que podemos
fazer uso, mas, para exempli�car, vemos que, na Figura 1.15, escolhemos o
grupo de objetos 2D e está selecionada a opção do objeto “ Sprite ”. Esse
objeto é o equivalente a um espaço para uma imagem, pois,para aparecer
Figura 1.15 - Unity selecionando Game Objetc que deseja criar
Fonte: Elaborada pelo autor.
alguma imagem dentro do “ Sprite ”, devemos indicar seu caminho na aba “
Inspector ”, dentro do componente “ Sprite Renderer ”, no campo “ Sprite ”,
ou podemos simplesmente arrastar a imagem .jpg, .png, entre outras, para
cima do campo “ Sprite ” desse componente, que a imagem seria direcionada.
Mas lembre que, para arrastar uma imagem para o campo “ Sprite ”, a
imagem precisa estar dentro do projeto, assim como a tentativa de manipular
outros arquivos. Esses devem estar dentro da Unity, aparecendo na pasta “
Assets ”.
O componente “ Sprite Renderer ” é o responsável por pintar as imagens 2D
na tela da Unity e gerenciar também a ordem de pintura dessas imagens.
Já que aprendemos a colocar objetos na tela, vamos colocar alguns outros
para treinar. Coloque a nave dentro da tela, arraste a imagem da nave que
está na pasta “ Assets/2D Space kit/Ships and Stations/Cruiser 3.png ” para
dentro da “ Scene ”. Uma dica: clique em cima da aba “ Game ” e a arraste
para o lado. Você verá que pode posicioná-la igual ao exemplo da Figura 1.13.
Dessa forma, sempre teremos a visão da aba “ Scene ” e da aba “ Game ”, ao
mesmo tempo.
Agora que o “ Cruiser 3 ” apareceu na aba “ Hierarchy ”, selecione-o e vá até a
aba “Inspector” e selecione no campo “ Tag ” a “ Tag ” Player. Usaremos a “
Tag ” para encontrar os objetos no momento da colisão. A Figura 1.16 traz um
exemplo.
A aba “Inspector” é um editor de propriedades de “ GameObjects ”, situada à
direita da tela da Unity, logo abaixo de onde selecionamos o layout da tela da
Unity. O “Inspector” é sensível ao contexto do objeto. Quando o jogo está
rodando, podemos ver, por exemplo, os valores do componente “Transform”
como posição serem modi�cados pelas ações do jogo (THORN, 2018, tradução
nossa).
O recurso Tag permite marcar objetos especí�cos na cena com
tags ou rótulos especí�cos, permitindo que esses objetos sejam
facilmente identi�cados no código, para que possamos veri�car
saiba mais
Saiba mais
Descubra outros tipos de câmeras para
jogos. Cada tipo de câmera tem seu
propósito e necessidade. Com a evolução dos
jogos digitais, vários tipos de câmeras foram
aparecendo no mercado e neste vídeo são
listadas oito tipos de câmeras.
ASS I ST IR
Figura 1.16 - Inspector
Fonte: Elaborada pelo autor.
rapidamente se o jogador, em vez de outros objetos, está colidindo
com as moedas (THORN, 2018, p. 85, tradução nossa).
1. Tag: clique e escolha a opção Player. Caso não tenha, clique em Add
Tag, para adicionar uma nova Tag.
2. Uma boa prática é sempre tentar manter os objetos centralizados ao
máximo possível, como o jogador. Nesse caso, a nave é nosso objeto
central. Clique na engrenagem do componente “ Transform ” e
selecione a primeira opção “ Reset ”, para trazer a nave para o eixo
em x, y, z e zerar também a rotação e de�nir como 1 a escala do
objeto selecionado. Faça isso apenas uma vez, e, a partir desse início,
comece a de�nir novas formas ao seu objeto. Por exemplo, vou
diminuir o tamanho da minha nave para 0.6 no campo “ Scale ” ou
escala.
Para manter a equivalência das distâncias da nave, devemos diminuí-
la por igual nos três eixos da escala. Para facilitar, clique na bolinha
do canto da imagem com o mouse e com o teclado pressione a tecla
“Shift”. Agora, arraste o mouse que a imagem vai diminuir com
equivalência.
3. Por �m, vemos o campo “ Order in Layer ”, ordem na camada, ou
seja, todo o objeto que estiver na cena e tenha uma imagem ligada a
ele. Esse terá o componente “ Sprite Renderer ”, o qual traz consigo
uma ordem de “ Render ”. Em jogos 2D, a Unity organiza as imagens
da cena em camadas, e elas de�nem quais objetos vão aparecer por
cima dos outros.
Vamos experimentar. A nave e o plano de fundo têm esse campo.
Mude o número de um deles e veja como funciona. Lembre-se que o
menor valor é o primeiro layer que é zero, e temos um limite maior
do que precisamos usar, sendo no total de 32 “Layers” ou camadas,
que vão de 0 a 31.
A nave �cará no “ Layer ” 1 e o fundo �cará no “ Layer ” 0.
Após centralizar a nave, devemos mover a câmera para deixar a nave mais
próxima da borda inferior da tela. Para isso, selecione o objeto câmera na aba
“ Hierarchy ” e mova a câmera usando a opção “ Move Tool ” até que a nave
esteja mais próxima da borda inferior da câmera.
Por �m, podemos adicionar à nave um detector de colisão. Basicamente, é um
componente que vai demarcar um campo ao redor de um objeto do jogo.
Toda vez que dois detectores de colisão colidirem, a Unity saberá que houve
uma colisão e fará a ação dela ocorrer. Para adicionar esse componente,
selecione o objeto da nave na aba “ Hierarchy ” ou clicando na cena. Em
seguida, vá até a aba “ Inspector ” e clique no botão “ Add Component ” e
vamos adicionar dois componentes,. Para buscar esses componentes, só
precisamos escrever os nomes no campo de busca que vai aparecer após
clicar o botão. O “ Rigidbody 2D ” possibilita o movimento dentro da “ Scene ”.
Devemos veri�car se o campo “ Body Type ” está em Dynamic, “ Gravity Scale
” em 0 (zero) e “ Collision Detection ” em Discrete. O “ Polygon Collider 2D ”
veri�ca nossa colisão. Nesse, precisamos selecionar o campo “ Is Trigger ”, e
esse campo nos ajudará a fazer a colisão funcionar de maneira mais simples.
Para �nalizar, vamos fazer a nave se mover dentro de nossa tela por meio de “
inputs ” do teclado. Os “ inputs ” ocorrem quando pressionamos um botão
do teclado ou clicamos com o mouse . Selecione a nave e, com a “ Move Tool ”,
mova a nave até as bordas da tela que aparece na aba “ Game ”. Vamos
encontrar alguns valores, direita = 2, esquerda = -2, cima = 7 e baixo = -1.
Esses valores podem ser diferentes para cada tamanho diferente de tela e
nave. O importante é que os valores que forem informados nestes campos
mantenham a nave do jogador dentro da tela. A Figura 1.17 mostra as
posições que queremos mapear. Daremos os nomes dessas posições em
relação a seus eixos, xMin e xMax, yMin e yMax. Guarde esses valores, pois
vamos usá-los no “ Script ” que vamos criar agora. Antes, crie na pasta “
Assets ” uma nova pasta e a nomeie como “Scripts”. Adicione um novo
componente à nave, o componente “ New Script ”. Clique nele e dê o nome
de “ PlayerGerente ”. Seu conteúdo é o código “ C# ” (lemos “ se-sharp ”).
Para abrir esse “ Script ” no Visual Studio, basta darmos um clique duplo no
campo “ Script ” do componente “ Script ”.
O código a seguir pode ser colado dentro desse novo “ Script ” que criamos.
UnityEngine : biblioteca que possibilita o código C# a conversar com
os componentes da Unity.
Serializable : serialização é um processo que transforma os dados
ou um objeto em um formato que a Unity pode armazenar e
reconstruir em outro momento.
FixedUpdate : os cálculos de atualização de física são processados
imediatamente após esse Update. Aplicando os cálculos de
movimento dentro de FixedUpdate, não precisamos multiplicar seus
valores por Time.deltaTime. Seu tempo de execução é feito em um
tempo con�ável, independentemente da taxa dos frames.
Input : classe responsável por receber valores que entram no jogo.
GetAxis : recebe valores mapeados pela Unity. Estes valores são as
teclas W, S, seta para cima, seta para baixo dos eixos horizontais, e
teclas A, D, seta direita e seta esquerda verticais.
gameObject.GetComponent<> : GameObject é o objeto ao qual o
Script está vinculado, e o GetComponente busca o determinado
componente que esse objeto tem em seu “Inspector”, informando o
tipo do componente desta forma: <Nome do Componente>.
Transform : esse componente determina a posição, rotação e escala
de cada objeto da cena. Todos os “ GameObject ” tem um
componente desse na aba “ Inspector ”.
Figura 1.17 - Aba Game
Fonte: Elaborada pelo autor.
RigidBody 2D : esse componente é o responsável por alterar as
propriedades do componente Transform. Podemos alterar os valores
diretamente no componenteTransform, mas, em relação à colisão,
isso não é muito interessante. Devemos alterar os valores desse
componente somente caso não exista um RigidBody. Esse
componente é muito necessário para que a colisão possa funcionar
agindo junto com o componente collider.
Para uma variável aparecer no componente “ Script ” dentro do “ Inspector ”,
é preciso declará-la como public = pública como, podemos ver na Figura 1.18.
saiba mais
Saiba mais
Para saber mais, veja, neste vídeo,
informações importantes sobre o
funcionamento de vetores nos jogos digitais,
vetores 2D e 3D:
ASS I ST IR
Veja na Figura 1.18 o resultado que desejamos alcançar. Nela, podemos
observar o componente Script PlayerGerente aberto e dentro dele os
campos Velocidade e Limites; em sequência, os campos xMin, xMax, yMin,
yMax.
Figura 1.18 - Nave em posição e Script preenchido
Fonte: Elaborada pelo autor.
praticar
Vamos Praticar
Observando atentamente a tela da Unity, podemos notar que ela tem uma grande
quantidade de funções e ferramentas. Na aba Scene , existe um botão com a
inscrição 2D . Escolha a alternativa que traz a informação correta sobre a ação que
esse botão tem.
a) Esse botão funciona para ativar a possibilidade de adicionar a cena objetos
2D.
b) Esse botão funciona para selecionar todos os objetos 2D da cena do jogo.
c) Esse botão funciona para esconder os objetos 2D da cena.
d) Esse botão funciona para identi�car para a Unity, quando será adicionada
a cena um objeto 2D.
e) Esse botão funciona para fazer a visão da aba Scene �car em 2D ou 3D.
Agora que sabemos manipular objetos, inserir novos componentes e receber
botões do teclado e compreendemos uma parte essencial da Unity, vamos
fazer uso desse aprendizado para criar os tiros da nave e o parallax.
Atirando com a Nave
Primeiro, precisamos criar nosso Tiro. Na aba “ Project ”, crie uma nova pasta,
clique com o botão direito na pasta “ Assets ”, selecione “ Create ” e depois “
Folder ”, que é pasta em inglês. Dê um nome a essa pasta, por exemplo: “
Prefab ”.
Ao adicionar um novo objeto, lembre-se sempre de resetar o componente “
Transform ” dele e depois pode posicioná-lo.
Na aba “ Hierarchy ”, crie um objeto vazio. Em inglês, a opção aparece como “
Create Empty ”. Dê o nome dele de Tiro. Dentro dele, crie um objeto 3D
chamado “ Quad ”. Localize a imagem “ Projectile Sharp ” na aba “ Project >
Space Shooter:Space Shooter:
FuncionalidadesFuncionalidades
Assets > 2D Space Kit > Particles (Sprites) ” e arraste-a para o objeto “Quad”
pela aba “Scene” . Em seguida, clique novamente no objeto “ Quad ”.
Perceba que ao adicionar um objeto dentro do outro o primeiro objeto agora
tem uma seta ao lado do nome na aba “ Hierarchy ”, em que podemos clicar
para esconder ou mostrar seu interior, nesse caso o objeto “ Quad ”.
Ajuste o campo “ Shader ” do componente “ Default Material ”, que após
adicionar a imagem, se chamará “ Projectile Sharp ”. Em substituição do “
Standard ”, selecione “Legacy Shader” > “Transparent” e por �m, “ Di�use
”.
Selecione o Tiro, adicione nele dois componentes, “ Rigidbody 2D ”, troque o
valor da gravidade para zero(0) e, no “ Capsule Collider 2D ”, clique no botão
do campo “ Edit Collider ”. Será possível editar o tamanho em largura e altura
dessa cápsula. Quando terminar de ajustar a cápsula de forma que mantenha
o desenho do Tiro dentro dela e �que o mais justo possível, altere para
zero(0) os valores dos campos x e y do campo “ O�set ” , veri�que se o valor
do campo “ Direction ” está como “ vertical ” e marque a caixa do campo ” Is
Trigger ”.
Quando a propriedade “ Is Trigger ” está marcada, o colisor �ca sendo usado
para disparar um evento e �ca sendo ignorado pelo motor de física da Unity.
Olhando para esse objeto na aba “ Scene ”, podemos ver que ele agora não é
mais um quadrado e já tomou a forma da imagem. Para mudarmos a cor
desse Tiro, selecione o “ Quad ” dentro do objeto Tiro, e dentro dele adicione
um objeto luz (em inglês, está como “ Light ”). Selecione a luz “ Directional
Light ”. Na aba “ Inspector ” da luz, veja que, no componente “ Light ”, existe
um campo “ Color ”, que está branco. Clique nele e escolha uma cor. Agora,
precisamos adicionar dois “Scripts” ao Tiro: Nomear o primeiro como
MoverTiro – (fará o tiro se mover quando for arremessado pela nave) e o
segundo como DestroiTiro – (que fará o tiro ser destruído quando sair da tela
do jogo).
Veja o script MoverTiro:
Veja o script DestroiTiro:
//OBS: Caso ao executar o jogo, você perceber o erro “
MissingReferenceException: The object of type 'GameObject' has been destroyed
but you are still trying to access it. ” Você pode desabilitar o script DestroiTiro
pela aba Inspector, desmarcando a caixinha do componente até avançar no
tutorial.
Shader : basicamente, é quem calcula pixel a pixel como a cor da luz
que atinge o material.
Default-Material : o material de�ne como o objeto re�ete a luz.
O�set : é um valor que referencia a distância entre o componente e
a posição de origem, nesse caso o próprio objeto.
Direction : é a direção para onde a cápsula está apontada, vertical ou
horizontal.
reflita
Re�ita
Podemos ver que existe uma pequena complexidade para
fazer a Unity funcionar da maneira que desejamos, mas leve
em consideração que a utilização de uma Engine com a
�nalidade de desenvolver um jogo é uma das melhores saídas
que existem hoje no mercado de desenvolvimento de jogos.
De uma forma ou de outra, sempre existirá um nível de
complexidade, mas lembre-se de que, para criar a Unity,
existem dezenas de pro�ssionais bem treinados a �m de
construir o melhor produto do mercado e sempre continuar a
inová-lo.
Por �m, para que possamos usar esse objeto Tiro em outras naves, arraste-o
da aba “ Hierarchy ” para a pasta que criamos no início, a pasta “ Prefab ”.
Dessa forma, sempre que precisarmos dele, basta arrastá-lo para uma nova
posição. Chamamos esse tipo de objeto de “ Prefabs ”. São “ Game Objects ”
que foram pré-fabricados e já estão prontos para uso. Quando um “ Prefab ”
contém outros objetos dentro dele, ele se transforma em um container.
Sendo assim, teremos cópias dele em vários lugares. Quando for para um
inimigo, podemos alterar sua cor, tendo Tiros de cores diferentes.
Para que esse Tiro funcione em nossa nave, precisamos fazer alguns ajustes.
Clique na nave e dentro dela adicione um objeto vazio. Dê o nome dele de “
SpawnShoot ” e o posicione na ponta da nave, na posição onde deseja que o
Tiro saia. Para ajudar a posicionar o “ SpawnShoot ”, jogue o tiro dentro do “
SpawnShoot ” para que ele �que visível, e depois delete o Tiro quando ele
estiver posicionado.
Para que a nave possa atirar, precisamos criar um novo “ Script ” para a nave.
Repita o processo de criação de “ Script ” visto anteriormente e dê o nome
dele de “ Player Tiro ”. Dentro desse “ Script ”, cole o código a seguir nele.
Arraste o “ SpawnShoot ” e o Tiro para seus locais correspondentes dentro
desse novo “ Script ”, ajuste um valor para a variável “ Tempo_Entre_Tiros ”
(uma sugestão é 0.25) e troque a “ Tag ” para Tiro. Caso não tenha,  adicione-
a.
Parallax
Antes de posicionar os objetos, lembre-se de sempre de resetar seus valores
do componente “ Transform ” na aba “ Inspector ”.
Para criarmos o efeito de Parallax, precisamos fazer uma camada ou mais de
uma que se mova entre a nave e o fundo do jogo. Imagine que o jogo é uma
pilha de papéis, o fundo do jogo é o primeiro papel dessa pilha e a nave do
jogador é o papel que está no topo dessa pilha. O efeito parallax deve �car
entre o papel que está na base da pilha e o papel que está no topo da pilha. A
Figura 1.19 demonstra a ordem dessa pilha:
Podemos pensar, então, que, no momento da Unity pintar um objeto na tela,
esse objeto já deve vir na ordem em que ele vai ser pintado. Dessa forma, ele
Figura 1.19 - Ordem da pilha
Fonte: Elaborada pelo autor.
sempre será sobreposto por alguns objetos e sobrepor outros. Nesse caso, a
nave vaisobrepor a poeira e o fundo da tela.
Precisamos seguir uma receita que nos guie até a �nalização desse efeito.
Sabemos que o parallax precisa ter um movimento contínuo, então devemos
fazer uma emenda na qual ele acabe e continue, sem que o jogador perceba
essa emenda.
Uma coisa muito importante: o “ Quad ” é um objeto 3D, portanto não possui
o componente “ Sprite Render ”. Sendo assim, não há como ajustar quem
aparece primeiro de maneira 2D, então devemos mexer no valor do eixo z da
nave e do “ Gerencia Parallax ”. Colocando o eixo z com o valor de 0 ou -1
deve ser o su�ciente. Caso não seja, procure um valor que �que bom para seu
jogo. Lembre-se da pilha que ordena os objetos.
Vamos criar um objeto vazio na aba “ Hierarchy ”, o qual terá o nome de “
Gerencia Parallax ”. Não devemos usar acentos em nomes de objetos ou
variáveis, ou qualquer outra coisa que entrar em contato com a lógica do
jogo, pois isso pode gerar erros no futuro.
Dentro do objeto que acabamos de criar, criaremos outro objeto vazio, ao
qual daremos o nome de “ Parallax 1 ”. Dentro desse, criaremos um objeto
3D do tipo “ Quad ”. Quando ele estiver pronto, podemos copiá-lo e criaremos
no total três nuvens, às quais daremos o nome de “nuvem 1”, “nuvem 2” e
“nuvem 3”. Faremos uma organização de forma aleatória, o que nos parecer
melhor. Lembre-se de que um dos ingredientes de um jogo é a criatividade.
Agora, encontre a imagem de nuvem que separamos anteriormente e arraste
para o “ Quad ” que está na aba “ Scene ”. Caso contrário, não funcionará da
forma correta. Veremos que nosso “ Quad ” agora tem o formato da nuvem
de poeira, no campo “ Shader ” dentro do componente “ Default-Material ”,
que deve estar com o nome de “ DustCloud 1 ”, que �ca na aba “ Inspector ”
desse “ Quad ”.
Selecione o “ Shader ”, “ Mobile ” depois “ Particles ” e, por �m, “ Additive ”.
Com essa formação pronta, selecione a nuvem e pressione “ Ctrl + c ” depois “
Ctrl + v ” (o famoso copiar e colar ) e crie mais duas nuvens. Posicione-as da
maneira que mais agradar visualmente. Podemos ver um exemplo na Figura
1.20:
Figura 1.20 - Nuvens de poeira
Fonte: Elaborada pelo autor.
Na Figura 1.20, podemos observar que na aba “ Scene ” as nuvens estão
destacadas com a borda laranja, pois elas estão selecionadas. Para selecionar
mais de um objeto, precisamos pressionar a tecla Shift e clicar nos outros
objetos que desejamos selecionar.
Com essas três nuvens selecionadas, repita o processo de copiar e colar e
arraste-as novas nuvens para cima da tela no eixo y . Para isso, use a função “
Move Tool ”, deixe-as próximas da borda superior da tela, mantendo a
formação que fez. Para que o efeito parallax funcione de maneira �uida,
repita esse processo mais uma vez e leve essas três novas nuvens além das
anteriores e também mantenha proximidade. Por �m, é preciso criar dentro
do objeto “ Parallax 1 ” um objeto vazio, e posicioná-lo no �nal dessa
formação de nuvens que fez, um pouco distante da última nuvem dessa
sequência. Para esse novo objeto, podemos dar o nome de “ gerencia_Inicio
”. A Figura 1.21 demonstra essa formação e deixa os objetos selecionados
para que possamos ver como estão dispostos na “ Scene ”. O objeto
“gerencia_Inicio” está posicionado no local onde estão as setas verde e
vermelha, que representam os eixos X e Y .
Perceba na Figura 1.21 que o objeto mais distante é o “ gerencia_Inicio ”. Ele
é utilizado para sabermos para onde a próxima sequência de parallax deve
ser movida e �carem em um loop enquanto o jogo estiver sendo executado.
Adicione o “ Script ” a seguir no objeto “ Parallax 1 ”.
Agora, podemos selecionar o objeto “ Parallax 1 ”, copiá-lo e colá-lo dentro do
objeto “ Gerencia Parallax ”. Precisamos mover esse novo parallax para além
das nuvens existentes. Agora, com “ Parallax 1 ” e “ Parallax 2 ” posicionados,
precisamos gerenciar o “ �mTela ”. Esse objeto vazio deve ser criado dentro
do objeto “ Gerencia Parallax ” e posicionado além dos limites da borda
inferior da tela, para que, quando nossas nuvens chegarem até ele, elas
possam voltar para cima onde está o objeto “ gerencia_Inicio ”, que segue a
cauda de cada um dos parallax que criamos, o 1 e o 2, como podemos ver no
exemplo da �gura 1.22. O “ �mTela ” é igual para os dois parallax, mas o
“gerencia_Inicio” deve ser ligado ao “ Parallax 1 ” no “gerencia_Inicio” do “
Parallax 2 ” e vice-versa.
Esse processo do parallax necessita de alguns testes e ajustes, para que as
nuvens possam passar e fazer a volta de maneira �uida. Para testar,
precisamos apertar o botão de “ Play ” da Unity e ver se tudo ocorre de
maneira correta.
Figura 1.21 - Sequência do objeto Parallax1.
Fonte: Print feito pelo autor.
Lembre-se de que os campos onde os valores de “ gerencia_Inicio ”, “ �mTela
” e a “ velocidade ” das nuvens, iriam aparecer no “Script” criado em “
Parallax 1 ” e “ Parallax 2 ”. Podemos deixar a velocidade deles em 0.1 e, para
os outros dois valores, podemos arrastar os objetos “ gerencia_Inicio ” e “
�mTela ” para os campos dentro do componente “ Script ” de cada parallax.
Uma dica: a nave pode �car no eixo z = -1, e o objeto “ Gerencia Parallax ”
com o valor do eixo z = -0.8953174. Lembre-se sempre de que esses valores
são demonstrativos. Você pode e deve alterar esses valores para que eles
representem melhor o seu jogo. A Figura 1.22 representa bem essa formação,
e novamente, como o objeto que marca o �m da tela não tem imagem igual
aos objetos que marcam o início, dessa vez o objeto “ �mTela ” está sendo
representado pelas setas verde e vermelha.
praticar
Vamos Praticar
Figura 1.22 - Sequência do objeto Parallax1 e Parallax2
Fonte: Print feito pelo autor.
No desenvolvimento de jogos, existem vários tipo de efeitos que podemos criar, um
que é muito usado no desenvolvimento de jogos 2d é o efeito de “parallax”. Este
efeito é muito simples de ser criado e dá um toque especial ao jogo. Escolha a
alternativa que indica a de�nição do efeito parallax.
a) O parallax é um efeito que podemos criar para dar a impressão de
movimento 2D ao jogo. Dessa forma, podemos criar uma ilusão de
movimento bidimensional.
b) O parallax é um efeito que podemos adicionar somente a jogos espaciais,
pois ele cria o efeito de espaço profundo ao jogo. Praticamente todos os
jogos espaciais usam este efeito.
c) O parallax é um efeito que nos dá profundidade em jogos 2D. Como o jogo
é feito em camadas, algumas delas se movimentam em velocidades
diferentes dando o efeito de profundidade.
d) O parallax é um efeito que nos ajuda a criar jogos em geral. Sem esse
efeito é praticamente impossível criar um jogo que seja agradável.
e) O parallax é um efeito que nos proporciona engajamento no jogo, técnica
muito usada para ganhar mercado e jogadores; sem ele, um jogo não é
vendável.
Para criarmos um “ PowerUp ” (ou em português um aumento de poder),
precisamos fazer algumas alterações em nossos “ Scripts ” e adicionar
algumas modi�cações. Vamos começar pela nave: precisamos adicionar ao “
Script ” “ PlayerTiros ” as seguintes informações.
Antes do método Update(), devemos adicionar:
Dentro do Update, devemos adicionar esse código. Já existem códigos dentro
do Update. Adicione esse após o código existente no Update:
Perceba que cada classe e método dentro de um “ Script ” tem seu espaço
determinado com chaves. “{“ indica a abertura e “}” indica o fechamento, tanto
de classes quanto de métodos.
Classe : na Unity, uma classe armazena o código de um “Script”. Ela
pode conter variáveis, métodos e seus respectivos valores e códigos.
PowerUpsPowerUps
Método : eles servem para conter funcionalidades que iremos
programar, como atirar com a nave, ou mover a nave, dentre outros.
Variáveis : são usadas para conter valores, que podem ser
numéricos, ou até outros objetos, como um RigidBody 2D.
Agora, precisamos criar um objeto para ser nosso “ PowerUp ”. De tempos
em tempos, ele deve aparecer na tela. Escolhi criar o “ PowerUp ”com uma
réplica da nave que estamos usando para o jogador, porém com um tamanho
menor. Para mudar o tamanho da nave, use a ferramenta “ Scale Tool ”. Vá
até a pasta onde encontramos a nave da primeira vez. Aqui está o caminho
“Assets/2D Space kit/Ships and Stations/Cruiser 3.png”. Arraste a imagem da
nave para a aba “ Hierarchy ” e mude o nome desse objeto para “ PowerUp ”.
Crie nesse objeto um “Script” chamado “ PowerUp ”, apague os métodos
Updates e start e coloque esses métodos a seguir dentro da classe “ PowerUp
” que está dentro do “ Script ”.
Veri�que se sua nave está usando a “ Tag ” Player, pois esse método gerencia
a colisão entre dois objetos que tenham colisão. Para isso, devemos adicionar
em nosso objeto “ PowerUp ” um corpo de colisão, o componente “ Polygon
Collider 2d ”. Marque a caixa do campo “ Is Trigger ”, e um “ Rigidbody 2D ”.
Lembre-se de zerar a gravidade e, por �m, troque a “ Tag ” para PowerUp.
Agora, podemos transformar o “ PowerUp ” em um “ Prefab ”, arrastando-o
da aba “ Hierarchy ” para a pasta efeitos.
Space Shooter: Enfrentando Inimigos
Vamos criar um pouco de ação em nosso jogo. Para isso, vamos criar os
inimigos e suas “ waves ”; em português, “ waves ” são ondas. Junto dessas “
waves ”, vamos colocar nosso “ PowerUp ”.
Inimigos
Para criar nossos “ Prefabs ” dos inimigos, precisamos arrastar a imagem da
nave do primeiro inimigo para a aba “ Hierarchy ”. Ao �nal desse processo,
vamos conseguir fazer cópias desse “ Prefab ” e mudar a imagem, valor de
vida e tudo o mais que for necessário para criarmos outros inimigos.
Em seguida, devemos ajustar o campo “ Order in Layer ” para 1, mudar a “
Tag ” para Inimigo e sempre nos lembrar de antes de tudo resetar os valores
do componente “ Transform ”. Precisamos adicionar o componente “
Rigidbody 2D ” zerar a gravidade e adicionar o componente “ Polygon
Collision 2D ” e marcar a caixa do campo “ Is Trigger ”. Com isso pronto,
precisamos criar um novo “ Script ”. Daremos a ele o nome de “
Nave_Inimigo ”. Precisamos ver qual é o lado da frente da imagem; em geral,
as naves estão apontadas para cima igual à nave do jogador, e precisamos
rotacionar a nave inimiga. Para isso, mude o valor do eixo z do componente “
Transform ” no campo “ Rotation ” para 180.
Lembre-se de utilizar a ferramenta “ Scale Tool ” para aumentar ou diminuir o
tamanho das naves inimigas.
Nesse “ Script ”, teremos as variáveis vida e velocidade.
Vejamos o “ Script ”, a seguir:
Para concluir, podemos fazer cópias desse inimigo “Alient 1” e trocar as
imagens das naves e os valores de vida e velocidade de cada um. Para mudar
a imagem do objeto inimigo, basta arrastar a imagem desejada para o campo
“ Sprite ” do componente “ Sprite Render ”. Por �m, arraste esses objetos
para a pasta que estamos usando para armazenar os “ Prefabs ”, a pasta
efeitos. Perceba que, ao gerar um “ Prefab ”, uma seta mais à direita do nome
do “ Prefab ” surge, e essa nos leva ao ambiente de edição do “ Prefab ”.
Teste-a para ver como funciona.
Waves de Inimigos com PowerUps
Com os inimigos e o PowerUp prontos, podemos agora criar um objeto vazio
para gerenciá-los dentro do jogo. Vamos criar um novo objeto vazio, e vamos
chamá-lo de “ Gerencia_Ondas ”. Nesse novo objeto, vamos criar um “ Script
“ e vamos chamá-lo de “Controle”. Esse “ Script ” terá a possibilidade de
gerenciar as ondas dos inimigos e no início de cada onda teremos um “
PowerUp ”. Também vamos controlar a posição de início das ondas,
quantidade de naves por onda, tempo de espera, entre as ondas, tempo de
espera para início da primeira onda e as posições dos “ PowerUps ”.
Vejamos o “ Script ” a seguir:
posInimigos : esse vetor armazena um valor inicial para as naves
inimigas, porém esse valor é usado para gerar um campo onde as
naves devem ser geradas aleatoriamente, e a mesma coisa é feita
com o vetor posPowerUps . Devemos informar o valor de X igual ao
valor que usamos para manter a nave dentro da tela. Nesse caso, foi
o valor 2, e o valor de Y é o valor em que naves vão iniciar, ou seja,
será a distância dela até chegar a borda superior da tela do jogo.
StartCoroutine : inicia uma rotina secundária através do
IEnumerator .
IEnumerator : coloca o método dentro de uma ordem que pode ser
chamado pelo StartCoroutine .
Instantiate : faz um clone do objeto original que indicamos.
WaitForSeconds : suspende a corotina por uma quantidade de
tempo em segundos.
praticar
Vamos Praticar
Vimos vários tipos de objetos que podem ser criados com a Unity, objetos 2D, 3D,
textos e vários outros, e que cada objeto tem uma função predeterminada pela
Unity e tem seu modo de ser usado. Em relação a isso, selecione a alternativa que
traz o passo a passo de como gerar um novo objeto na Unity.
a) Para gerar um novo objeto, devemos clicar na aba Game e, em seguida,
clicar com o botão direito do mouse em seu interior. Assim, parecerá uma
caixa na qual estarão listados os possíveis objetos. Selecione um e pronto;
criamos um novo objeto.
b) Para gerar um novo objeto, devemos clicar na aba Cena e, em seguida,
clicar com o botão direito do mouse em seu interior. Assim, aparecerá uma
caixa na qual estarão listados os possíveis objetos. Selecione um e pronto,
criamos um novo objeto.
c) Para gerar um novo objeto, devemos clicar na aba Console e, em seguida,
clicar com o botão direito do mouse em seu interior. Assim, aparecerá uma
caixa na qual estarão listados os possíveis objetos. Selecione um e pronto,
criamos um novo objeto.
d) Para gerar um novo objeto, devemos clicar na aba “Inspector”/inspetor e,
em seguida, clicar com o botão direito do mouse em seu interior. Assim,
aparecerá uma caixa na qual estarão listados os possíveis objetos. Selecione
um e pronto, criamos um novo objeto.
e) Para gerar um novo objeto, devemos clicar na aba “Hierarchy”hierarquia e,
em seguida, clicar com o botão direito do mouse em seu interior. Assim,
aparecerá uma caixa na qual estarão listados os possíveis objetos. Selecione
um e pronto, criamos um novo objeto.
indicações
Material
Complementar
LIVRO
Unity Total: Fundamentos Essenciais
Autores : Rafael Henrique Capati e Joberth Morais de
Andrade
Editora : Kindle
Comentário : o livro traz princípios essenciais, descreve
os Game Objects e seus componentes, mostra modelos
2D e 3D, materiais e texturas e fala sobre terrenos,
ambientes externos, luzes e tudo o mais para se criar
um game na unity.
WEB
Playing Hard
Ano : 2018
Comentário : esse documentário conta a história de
Jason Vandenberghe, Game Producer do jogo For
Honor. Mostra os bastidores da indústria de jogos
pro�ssionais e narra a jornada de desenvolver um jogo
tão grande, do começo ao �m. Foram cinco anos até
seu lançamento.
ACESSAR
https://www.youtube.com/watch?v=20hUmq66StA
conclusão
Conclusão
Para iniciar nossa jornada no desenvolvimento de jogos 2D usando a Unity,
vimos o básico sobre como utilizar a Unity, como criar um objeto e tratá-lo de
maneira que podemos movimentá-lo utilizando o teclado do computador ou
criar um objeto que o próprio código irá se encarrega de movê-lo. Para isso,
�zemos uso de “Scripts” que são escritos com a linguagem C# . Criamos
conteiners de objetos e também vimos uma maneira de criar o efeito de
parallax e ondas de inimigos, iguais ou diferentes, com tempo e quantidade.
referências
Referências
Bibliográ�cas
DOCUMENTATION. Unity .Disponível em:
https://docs.unity3d.com/ScriptReference/ . Acesso em: 18 nov. 2019.
GAMEOBJECT. Unity . Disponível em: https://docs.unity3d.com/Manual/class-
GameObject.html . Acesso em: 20 nov. 2019.
HALPERN, J. Developing 2D Games with Unity : independent game
programming with C#. New York: Apress, 2019.
https://docs.unity3d.com/ScriptReference/
https://docs.unity3d.com/Manual/class-GameObject.html
LEAD game designer. Get in Media , [2019]. Disponível em:
http://getinmedia.com/careers/lead-game-designer . Acesso em: 18 nov. 2019.
READY player web: building modern web games. [S. l.: s. n.],2019. 1 vídeo (7
min 38 s). Publicado pelo canal Chrome Dev Summit. Disponível em:
https://www.youtube.com/watch?v=5_ySzSDnyYI . Acesso em: 18 nov. 2019.
SATO, A. K. O. Game design e prototipagem : conceitos e aplicações ao longo
do processo projetual. Florianópolis, SC: SBGames, 2010. Disponível em:
http://www.sbgames.org/papers/sbgames10/artanddesign/Full_A&D_10.pdf .
Acesso em: 3 dez. 2019.
SCENES. Unity . Disponível em:
https://docs.unity3d.com/560/Documentation/Manual/CreatingScenes.html .
Acesso em: 25 nov. 2019.
SCHUYTEMA, P. Design de games : uma abordagem prática. São Paulo:
Cengage Learning, 2016.
THE scene view. Unity . Disponível em:
https://docs.unity3d.com/560/Documentation/Manual/UsingTheSceneView.html
. Acesso em: 25 nov. 2019.
THORN, A. Unity 2018 By Example . 2. ed, Birmingham, UK: Packt, 2018.
UNITY para dispositivo móvel. Unity , [2019]. Disponível em:
https://unity3d.com/pt/unity/features/multiplatform . Acesso em: 20 nov.
2019.
WHY you need to use a game engine. [ S. l.: s. n. ]. 1 vídeo (1 min 1 s).
Publicado pelo canal The Cherno. Disponível em:
https://www.youtube.com/watch?v=QQ9MTzrsldo . Acesso em: 25 nov. 2019.
http://getinmedia.com/careers/lead-game-designer
https://www.youtube.com/watch?v=5_ySzSDnyYI
http://www.sbgames.org/papers/sbgames10/artanddesign/Full_A&D_10.pdf
https://docs.unity3d.com/560/Documentation/Manual/CreatingScenes.html
https://docs.unity3d.com/560/Documentation/Manual/UsingTheSceneView.html
https://unity3d.com/pt/unity/features/multiplatform
https://www.youtube.com/watch?v=QQ9MTzrsldo

Continue navegando