Baixe o app para aproveitar ainda mais
Prévia do material em texto
09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 1/53 DESENVOLVIMENTO DE JOGOS PARADESENVOLVIMENTO DE JOGOS PARA WEBWEB DESENVOLVIMENTO DE JOGOSDESENVOLVIMENTO DE JOGOS WEB: INÍCIO DA JORNADA DOWEB: INÍCIO DA JORNADA DO GAMEDEVGAMEDEV Autor: Esp. Diego Escobar R e v i s o r : D e i v t i h C u n h a I N I C I A R 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 2/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 3/53 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, 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. Introdução aoIntrodução ao Desenvolvimento de JogosDesenvolvimento de Jogos WebWeb 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 4/53 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. 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 5/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 6/53 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 mercadoem 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 7/53 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 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 8/53 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. 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 9/53 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; 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 10/53 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. 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, 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 https://www.fabricadejogos.net/posts/tipos-de-prototipagem-para-desenvolvimento-de-jogos-digitais/ 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 11/53 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: 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. Loca�on = Local: onde o projeto �cará dentro de seu computador. Organiza�on: 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 Analy�cs: 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: 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 12/53 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.2 - Print da tela de criação de projeto da Unity Fonte: Elaborada pelo autor. Figura 1.3 - Print da tela com projeto recém-criado Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 13/53 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 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 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 + Shi� + 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 14/53 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 Unity, que poderá ser baixado e instalado. A Figura 1.6 mostra essa página com essa aba aberta. saiba mais Saiba mais Existem vários outros “Assets” disponibilizados pela Unity, versões pagas e gratuitas. ACESSAR https://assetstore.unity.com/top-assets/top-free 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 15/53 É 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: 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 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”: Figura 1.5 - Print da página da Unity Asset Store Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 16/53 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. 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 17/53 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.8 - Imagens usadas no jogo Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 18/53 Como os botões que vamos usar são da Unity, não precisamos de �guras para prototipagem dessas telas. ti Figura 1.11 - Terceira onda/wave Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 19/53 praticarVamos 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 dememória. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 20/53 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 21/53 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 seu jogo. 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 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 22/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 23/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 24/53 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). 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 25/53 Para fazeruso 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 Figura 1.15 - Unity selecionando Game Objetc que deseja criar Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 26/53 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 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 Sta�ons/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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 27/53 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 rapidamente se o jogador, em vez de outros objetos, está colidindo com as moedas (THORN, 2018, p. 85, tradução nossa). 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 28/53 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 Detec�on” em Discrete. O “Polygon 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 29/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 30/53 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”. RigidBody 2D: esse componente é o responsável por alterar as propriedades do componente Transform. Podemos alterar os valores diretamente no componente Transform, 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 31/53 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 32/53 praticarVamos 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 33/53 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. Ele está como “Create Empty”. Dê o nome dele de Tiro. Dentro dele, crie um objeto 3D chamado “Quad”. Nesse objeto, chamado “Quad”, arraste a imagem do Tiro, que foi descrita anteriormente. 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”. Space Shooter:Space Shooter: FuncionalidadesFuncionalidades 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 34/53 Ajuste o campo “Shader” do componente “Default-Material”. Ao adicionarmos a imagem, ele deve se chamar “Projec�le Sharp”. No campo “Shader”, selecione “Legacy Shader”, depois “Transparent” e, por �m, “Diffuse”. 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 “Offset” , veri�que se o valor do campo “Direc�on” está como “ver�cal” 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 “Direc�onal 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: o primeiro fará ele se mover quando for atirado pela nave, o outro fará o Tiro ser destruído quando sair da tela do jogo. 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. Offset: é um valor que referencia a distância entre o componente e a posição de origem, nesse caso o próprio objeto. Direc�on: é a direção para onde a cápsula está apontada, vertical ou horizontal. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 35/53 Veja o “Script” de movimentação do Tiro: Veja o “Script” que destrói o Tiro quando sai da tela: 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”. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 36/53 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 sempre será sobreposto por alguns objetos e sobrepor outros. Nesse caso, a nave vai sobrepor 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 Figura 1.19 - Ordem da pilha Fonte: Elaborada pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 37/53 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 “Par�cles” e, por �m, “Addi�ve”. 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: 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 38/53 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 Shi� 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 39/53 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 “fimTela”. 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 “fimTela” é 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. Lembre-se de que os campos onde os valores de “gerencia_Inicio”, “fimTela” 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 “fimTela” para os campos dentro do componente “Script” de cada parallax. Figura 1.21 - Sequência do objeto Parallax1. Fonte: Print feito pelo autor. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 40/53 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 “fimTela” está sendo representado pelas setas verde e vermelha. praticarVamos Praticar 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 41/53 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 jogosespaciais 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 42/53 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. 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. PowerUpsPowerUps 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 43/53 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 44/53 cima igual à nave do jogador, e precisamos rotacionar a nave inimiga. Para isso, mude o valor do eixo z do componente “Transform” no campo “Rota�on” 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. StartCorou�ne: inicia uma rotina secundária através do IEnumerator. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 45/53 IEnumerator: coloca o método dentro de uma ordem que pode ser chamado pelo StartCorou�ne. Instan�ate: faz um clone do objeto original que indicamos. WaitForSeconds: suspende a corotina por uma quantidade de tempo em segundos. praticarVamos 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. 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 46/53 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 47/53 indicações Material Complementar L IVRO 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 48/53 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. A C E S S A R https://www.youtube.com/watch?v=20hUmq66StA 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 49/53 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. LEAD game designer. Get in Media, [2019]. Disponível em: http://getinmedia.com/careers/lead-game-designer. Acesso em: 18 nov. 2019. https://docs.unity3d.com/ScriptReference/ https://docs.unity3d.com/Manual/class-GameObject.html http://getinmedia.com/careers/lead-game-designer 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 50/53 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 proto�pagem: 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. 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 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 51/53 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 52/53 09/10/2020 Ead.br https://unifacs.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 53/53
Compartilhar