<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Desenvolvimento de jogos - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Desenvolvimento de jogos - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 28 May 2026 20:37:48 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/desenvolvimento-de-jogos/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ O derradeiro guia para principiantes sobre desenvolvimento de jogos em Unity ]]>
                </title>
                <description>
                    <![CDATA[ > Tradução em português europeu O Unity é uma ótima ferramenta para criar protótipos de tudo, desde jogos até visualizações interativas. Neste artigo, analisamos tudo o que precisas saber para começar a utilizar o Unity. Primeiro, um pouco sobre mim: sou um programador amador em Unity, modelador 3D e designer ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-derradeiro-guia-para-principiantes-sobre-desenvolvimento-de-jogos-em-unity/</link>
                <guid isPermaLink="false">658ed8ecc1446303e73c9756</guid>
                
                    <category>
                        <![CDATA[ Desenvolvimento de jogos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Afonso Branco ]]>
                </dc:creator>
                <pubDate>Wed, 22 May 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/5f9ca41d740569d1a4ca6043.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-ultimate-beginners-guide-to-game-development-in-unity-f9bfe972c2b5/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Ultimate Beginners Guide To Game Development In Unity</a>
      </p><blockquote>Tradução em português europeu</blockquote><p>O Unity é uma ótima ferramenta para criar protótipos de tudo, desde jogos até visualizações interativas. Neste artigo, analisamos tudo o que precisas saber para começar a utilizar o Unity.</p><p>Primeiro, um pouco sobre mim: sou um programador amador em Unity, modelador 3D e designer gráfico, que já trabalho com Unity e Blender há mais de 5 anos. Agora, sou aluno de Matemática Financeira na Universidade College Dublin e, ocasionalmente, faço design gráfico, protótipos para a web e protótipos de jogos como <em>freelance</em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC.png" class="kg-image" alt="Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC.png 800w" sizes="(min-width: 720px) 720px" width="800" height="630" loading="lazy"><figcaption>Arte conceptual é uma das fases iniciais no processo de desenvolvimento de games. Nos últimos anos, tive muita exposição a todas as áreas do desenvolvimento de jogos. Consulta o meu <a href="http://hugodolan.com/portfolio" rel="noopener">portfólio</a> de gráficos, UX, arte conceptual, desenvolvimento de jogos e outros…</figcaption></figure><h3 id="introdu-o"><strong>Introdução</strong></h3><p>Este artigo é para aqueles que nunca utilizaram o Unity, mas que tenham alguma experiência em programação ou design/desenvolvimento para a web. No final deste artigo, deves ter uma boa compreensão geral do motor (em inglês, <em>engine</em>), assim como de todas as funções e código necessários para começar a criar um jogo básico.</p><h3 id="por-que-o-unity"><strong>Por que o Unity?</strong></h3><h4 id="se-quiseres-criar-jogos"><strong>Se quiseres criar jogos</strong></h4><p>Existem apenas algumas opções quando falamos de desenvolvimento de jogos independentes. As três escolhas principais, se quiseres desenvolver jogos, são o Unreal, o Unity ou o GameMaker.</p><p>O Unity é provavelmente a opção menos restritiva entre as 3 plataformas. Este fornece-te um produto muito cru logo à partida, mas é muito flexível, bem documentado e altamente extensível para criar basicamente qualquer género de jogo que possas imaginar.</p><p>Existem bastantes jogos muito bem-sucedidos, como o <em>Escape from Tarkov</em> (Atirador), <em>Monument Valley</em> (Puzzle) e o <em>This War of Mine</em> (Estratégia/Sobrevivência), todos criados com o Unity.</p><p>Na realidade, o motor em que crias o teu primeiro jogo provavelmente não é muito importante. Por isso, o meu conselho é que escolhas um e sigas com esse.</p><h4 id="se-quiseres-criar-prot-tipos-de-experi-ncias-de-utilizador"><strong>Se quiseres criar protótipos de experiências de utilizador</strong></h4><p>Visto que o Unity é apenas um motor com algumas físicas, animações e renderização 3D em tempo real, também é um ótimo espaço para criar protótipos completos e interativos para estudos de Experiências de Utilizador (UX – do inglês, <em>User Experience</em>).</p><p>O Unity tem suporte total para Realidade Virtual e Realidade Aumentada. Ele pode, então, ser uma ótima ferramenta para explorar arquitetura, automatizações e simulações com os clientes.</p><h3 id="sec-es-deste-artigo"><strong><strong><strong>Sec</strong></strong>ções<strong><strong> </strong></strong>deste artigo</strong></h3><ul><li><strong>Por que o<strong> Unity?</strong></strong></li><li><strong>Janela de edição do <strong>Unity</strong></strong></li><li><strong>Objetos de jogo do <strong>Unity</strong></strong></li><li><strong>Componentes incorporados do <strong>Unity</strong></strong></li><li><strong>Criar componentes personalizados</strong></li><li><strong>Estrutura de MonoComportamento</strong></li><li><strong>Manipular<strong> GameObjects</strong></strong></li><li><strong><strong>Raycasting</strong></strong></li><li><strong>Deteção de colisão</strong></li><li><strong>Características avançadas</strong></li><li><strong>Conselhos para iniciantes</strong></li><li><strong>Bons recursos e comunidades</strong></li><li><strong><strong>Conclusã</strong>o</strong></li></ul><h3 id="janela-de-edi-o-do-unity"><strong>Janela de edição do <strong><strong>Unity</strong></strong></strong></h3><p>A janela de edição é dividida em várias secções. Vamos abordar isto muito brevemente porque vamos referir esta janela constantemente ao longo deste artigo. Se já te sentires à vontade com isto, podes passar esta parte à frente!</p><p><strong>Vista da cena<strong>:</strong> </strong>permite a colocação e o movimento de GameObjects na cena</p><p><strong>Vista do jogo<strong>:</strong> </strong>permite visualizar como o jogador verá a cena a partir da câmara</p><p><strong><strong>Inspetor:</strong> </strong>fornece detalhes sobre o GameObject selecionado na cena</p><p><strong>Recursos<strong> </strong>e<strong> </strong>p<strong>rojet</strong>o<strong>:</strong> </strong>todos os pré-fabricados, texturas, modelos, scripts e outros estão armazenados aqui</p><p><strong><strong>Hierar</strong>quia<strong>:</strong> </strong>permite colocar e estruturar GameObjects dentro da cena</p><p>Agora, estamos prontos para começar!</p><h3 id="objetos-de-jogo-do-unity"><strong>Objetos de jogo do Unity</strong></h3><h4 id="o-que-s-o-os-gameobjects"><strong>O que são os GameObjects</strong></h4><p>Os GameObjects são o bloco de construção principal para tudo no motor de jogos Unity. O nome quase que revela tudo:</p><blockquote>Tudo o que colocares dentro de uma cena no Unity deve estar envolvida por um "game object" (objeto de jogo).</blockquote><p>Se tiveres experiência em design para a web, podes pensar em GameObjects muito como elementos &lt;div&gt;! Recipientes extremamente aborrecidos, mas altamente extensíveis, para criar funcionalidades ou visuais complexos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/vlXNfFyr4lsQgC-DL05daoOtSWT35ZFUcA1l.png" class="kg-image" alt="vlXNfFyr4lsQgC-DL05daoOtSWT35ZFUcA1l" width="432" height="446" loading="lazy"><figcaption>Tirei isto diretamente da janela de edição do Unity só para provar este ponto.</figcaption></figure><p>Praticamente tudo, desde efeitos de partículas, câmaras, jogadores, elementos de Interface de Utilizador, … (a lista continua) é um GameObject.</p><h4 id="criar-hierarquia"><strong>Criar hierarquia</strong></h4><p>Tal com uma &lt;div&gt; em desenvolvimento para a web, um GameObject também é um recipiente. Tal como colocas &lt;div&gt;s umas dentro de outras para criar layouts variados e desejáveis ou abstrações, podes querer fazer o mesmo com os objetos de jogo.</p><blockquote>A lógica por trás da colocação de game objects uns dentro de outros é muito parecida com o que é feito em desenvolvimento para a web, vou fornecer alguns exemplos…</blockquote><p><strong>Desorganização<strong> </strong>e<strong> </strong>e<strong>ficiê</strong>ncia</strong></p><blockquote><em><strong>Analogia com a w</strong><em><strong><strong>eb: </strong></strong></em>tens muitos elementos semelhantes que podem ser gerados dinamicamente em tempo real em resposta a interações de utilizadores e desejam manter as coisas organizadas<em>.</em></em></blockquote><blockquote><strong><em>Tradução do </em><strong><em><em>Unity: </em></em></strong></strong><em>estás a criar uma cópia do<em> Minecraft </em>e tens muitos blocos na cena<em>, </em>então precisas de adicionar e remover<em> </em>'pedaços'<em> </em>de blocos da cena por questões de desempenho<em>. </em>Então, faz sentido ter cada pedaço associado a um <em>GameObject</em> pai vazio<em>, </em>visto que remover o pedaço pai remove todos os blocos filhos<em>.</em></em></blockquote><p><strong>Posicionamento</strong></p><blockquote><em><strong>Analogia com a w</strong><em><strong><strong>eb: </strong></strong></em>queres manter a posição do conteúdo contido<em> </em>'<em>relativ</em>o'<em> </em>ao recipiente e não à página da web<em>.</em></em></blockquote><blockquote><em><strong>Tradução do </strong><em><strong><strong>Unity:</strong></strong> </em>criaste um conjunto de drones ajudantes que pairam à volta do jogador<em>. </em>Preferias claramente não escrever código para indicar aos drones para seguir o jogador. Então, em vez disso, instancias os drones como filhos do <em>game object</em> </em>do jogador<em><em>.</em></em></blockquote><h3 id="componentes-incorporados-do-unity"><strong>Componentes incorporados do Unity</strong></h3><h4 id="o-modelo-de-componente-do-ator"><strong>O Modelo de componente do ator</strong></h4><p>Os GameObjects por si só são bastante inúteis — tal como vimos, são praticamente apenas recipientes. De maneira a fornecer funcionalidade, temos de adicionar componentes, que são essencialmente scripts escritos em C# ou em Javascript.</p><p>O Unity funciona com base num modelo de componente de ator – simplificando, os GameObjects são os atores e os componentes são os teus scripts.</p><p>Se já tiveres alguma vez criado uma aplicação para a web, estarás à vontade com a ideia de criar pequenos componentes reutilizáveis, tais como botões, elementos de formulário, layouts flexíveis que têm várias diretrizes diferentes e propriedades personalizáveis. Depois, podes montar estes pequenos componentes em páginas da web maiores.</p><p>A grande vantagem dessa abordagem é o nível de reutilização e canais de comunicação claramente definidos entre elementos. Tal como em desenvolvimento de jogos, queremos minimizar o risco de efeitos secundários indesejados. Pequenos erros tendem a ficar fora do controlo se não tivermos cuidado e são extremamente difíceis de depurar. Por isso, criar componentes pequenos, robustos e reutilizáveis é crucial.</p><h4 id="componentes-chave-incorporados"><strong>Componentes chave incorporados</strong></h4><p>Acho que está na hora de mostrar alguns exemplos dos componentes incorporados fornecidos pelo motor de jogos Unity.</p><ul><li><strong><strong>MeshFilter: </strong></strong>permite-te atribuir materiais a uma malha (em inglês, <em>mesh</em>) 3D para um GameObject</li><li><strong><strong>MeshRender: </strong></strong>permite-te atribuir materiais a uma malha 3D</li><li><strong><strong>[Box | Mesh]Collider: </strong></strong>ativa a deteção do GameObject durante colisões</li><li><strong><strong>Rigidbody: </strong></strong>aciona uma simulação física realista para ser aplicada num GameObjects com malhas 3d e aciona eventos de deteção em colisões de caixas</li><li><strong><strong>Light: </strong></strong>ilumina partes da tua cena</li><li><strong><strong>Camera: </strong></strong>define a vista do jogador para ser anexada a um GameObject</li><li>Vários componentes de tela da Interface de Utilizador para exibir Interfaces Gráficas de Utilizador</li></ul><p>Existem muitos mais, mas estes são os principais que precisas conhecer. Uma dica é que podes aceder a todos os documentos através do manual do Unity e na referência de scripting <em>off-line</em>, onde quer que estejas:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f.png" class="kg-image" alt="CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f.png 704w" width="704" height="196" loading="lazy"><figcaption>Apenas clica na secção <em>help</em>, os documentos por norma são bastante bons</figcaption></figure><h3 id="criar-componentes-personalizados"><strong>Criar componentes personalizados</strong></h3><p>Os componentes incorporados controlam primeiramente a física e o visual, mas, para realmente criar um jogo, vais precisar de aceitar inputs do utilizador e manipular esses componentes padrão assim como os próprios GameObjects.</p><blockquote>Para começar a criar componentes, vai até ao GameObject desejado &gt; Add Component (Adicionar componente) &gt; escreve o nome do teu novo componente na barra de pesquisa &gt; new script (novo script) (C#).</blockquote><p>Como recomendação geral, eu desaconselho utilizar Javascript no Unity. Não foi mantido atualizado com todas as coisas boas que vieram com o ES6 e a maioria das coisas mais avançadas depende de coisas em C# transferidas para Javascript… Por experiência própria, torna-se simplesmente numa solução alternativa gigantesca.</p><h3 id="estrutura-de-um-monocomportamento"><strong>Estrutura de um MonoComportamento</strong></h3><h4 id="fun-es-chave"><strong>Funções-chave</strong></h4><p>Todos os componentes herdam da classe do MonoComportamento. Ela inclui vários métodos predefinidos, principalmente:</p><ul><li><strong><strong>void Start()</strong></strong>, que é chamado quando um objeto que contém o script é instanciado na cena. Isso é útil sempre que queremos executar algum código de inicialização (por exemplo, definir o equipamento de um jogador após este ser colocado num jogo).</li><li><strong><strong>void Update()</strong></strong>, que é chamado a cada <em>frame</em>. É aqui que fica a parte do código que envolve o input do utilizador, atualizando várias propriedades como o movimento de um jogador na cena.</li></ul><h4 id="vari-veis-do-inspetor"><strong>Variáveis do inspetor</strong></h4><p>Por vezes, queremos tornar os componentes o mais flexíveis possível. Por exemplo, todas as armas podem ter um dano diferente, cadência de tiro, se tem visão etc. Embora todas as armas sejam essencialmente a mesma coisa, podemos querer ser capazes de criar rapidamente diferentes variedades no editor do Unity.</p><p>Outro exemplo onde podemos querer fazer isso é quando criamos um componente da Interface de Utilizador, que acompanha os movimentos do rato do utilizador e coloca o cursor na janela. Aqui, podemos querer controlar a sensibilidade dos movimentos do cursor (se o utilizador está a utilizar um joystick ou controlador x um rato de computador). Então, faria sentido ter essa variável fácil de alterar, tanto no modo de edição como durante o tempo de execução.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/ARiWcy5AEsVyRicp7demoZnzQR0MjPQnFzXJ.png" class="kg-image" alt="ARiWcy5AEsVyRicp7demoZnzQR0MjPQnFzXJ" width="598" height="232" loading="lazy"><figcaption>Variáveis na janela de inspeção pode ser alteradas a qualquer momento durante a execução ou no modo de edição. Observação: alterações feitas durante a execução não serão permanentes.</figcaption></figure><p>Podemos fazer isso facilmente ao declará-las como variáveis públicas no corpo do componente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ.png" class="kg-image" alt="dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="475" loading="lazy"><figcaption>Observa como podemos fazer com que as variáveis tenham diferentes níveis de acesso. Privadas, públicas, ou públicas mas não visíveis na janela de inspeção.</figcaption></figure><h4 id="aceitar-inputs-de-utilizador"><strong>Aceitar inputs de utilizador</strong></h4><p>Como é óbvio, queremos que o nosso jogo responda a inputs de utilizador. Uma das maneiras mais comuns de se fazer isso é utilizar os seguintes métodos na função Update() de um componente (ou noutro local que queiras):</p><ul><li>Input.GetKey(KeyCode.W): retorna verdadeiro quando a tecla W está a ser pressionada</li><li>Input.GetKeyDown(KeyCode.W): retorna verdadeiro quando a tecla W é pressionada pela primeira vez</li><li>Input.GetAxis("Vertical"), Input.GetAxis("Horizontal") Retorna entre -1,1 a partir do movimento de input do rato</li></ul><h3 id="manipular-gameobjects"><strong>Manipular GameObjects</strong></h3><p>Assim que recebermos inputs do utilizador, vamos querer que os GameObjects na nossa cena respondam. Existem vários tipos de respostas que podemos considerar:</p><ul><li>Translação, rotação, escala</li><li>Criar GameObjects</li><li>Enviar mensagens a GameObjects/componentes existentes</li></ul><h4 id="transforma-es"><strong>Transformações</strong></h4><p>Todos os GameObjects têm uma propriedade <em>transform</em>, que permite que várias manipulações úteis sejam realizadas no <em>game object</em> atual.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d.png" class="kg-image" alt="cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d.png 800w" sizes="(min-width: 720px) 720px" width="800" height="226" loading="lazy"></figure><p>Os métodos são bastante auto-explicativos, basta observar que utilizamos &nbsp;<em><em>gameObject</em></em> em minúsculas para nos referirmos ao GameObject que detém essa instância em específico do componente.</p><p>Por norma, é boa prática utilizar <em><em>local[Position,Rotation] </em></em>em vez da posição/rotação global de um objeto. Isso, geralmente, torna mais fácil mover objetos num modo que faça sentido, pois o eixo do espaço local estará orientado e centrado no objeto pai e não na origem do mundo e direções x, y e z.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW.png" class="kg-image" alt="sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW.png 800w" sizes="(min-width: 720px) 720px" width="800" height="482" loading="lazy"><figcaption>Os benefícios do espaço local ficam um pouco mais óbvios com um diagrama!</figcaption></figure><p>Caso precises de fazer a conversão entre espaço local ou global (que é geralmente o caso), podes utilizar o seguinte:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw.png" class="kg-image" alt="vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="145" loading="lazy"></figure><p>Como podes imaginar, existe alguma álgebra linear bastante simples atrás disso, indicada pelo 'Inverse' no nome do método.</p><h4 id="criar-gameobjects"><strong>Criar GameObjects</strong></h4><p>Visto que os GameObjects são basicamente tudo na tua cena, podes querer ser capaz de gerá-los na hora. Por exemplo, se o teu jogador tiver um género de um lançador de projéteis, podes querer ser capaz de criar projéteis na hora, que vão ter a sua própria lógica encapsulada para voar, efetuar dano etc…</p><p>Primeiro, precisamos de introduzir a noção de um<em><em> Prefab</em></em>. Podemos criar esses ao arrastar qualquer GameObject na hierarquia da cena para a pasta dos assets.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/BEBGqpePGsVgtEY5y89WrnLAbdZjPHZiagjZ.png" class="kg-image" alt="BEBGqpePGsVgtEY5y89WrnLAbdZjPHZiagjZ" width="164" height="150" loading="lazy"><figcaption>O aspeto de um prefab no separador dos assets</figcaption></figure><p>Isso, basicamente, armazena um <em>template</em> do objeto que tínhamos na cena, com todas as mesmas configurações.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp.png" class="kg-image" alt="wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp.png 800w" sizes="(min-width: 720px) 720px" width="800" height="293" loading="lazy"><figcaption>Um exemplo de um objeto de tijolo personalizado, que é utilizado para gerar dinamicamente tijolos de Lego numa cena. Tem um conjunto de componentes anexados a ele com vários valores predefinidos.</figcaption></figure><p>Assim que tivermos estes componentes <em>prefab,</em> podemos atribuí-los a variáveis de inspeção (como abordamos anteriormente) em qualquer componente na cena. Então, podemos criar GameObjects como especificado pelo <em>prefab</em> a qualquer altura.</p><p>Podemos realizar 'Instanciação' do <em>prefab</em> e manipulá-lo para a localização desejada na cena e estabelecer as relações hierárquicas necessárias.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj.png" class="kg-image" alt="xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj.png 800w" sizes="(min-width: 720px) 720px" width="800" height="286" loading="lazy"></figure><h3 id="aceder-a-outros-gameobjects-e-componentes"><strong>Aceder a outros GameObjects e componentes</strong></h3><p>Por vezes, precisamos de comunicar com outros GameObjects assim como os seus componentes associados. Assim que tiveres uma referência a um <em>game object</em>, isso fica muito simples.</p><blockquote>ComponentName comp = some_game_object.GetComponent&lt;ComponentName&gt;();</blockquote><p>Depois disso, podes aceder a quaisquer métodos/variáveis públicos do componente de maneira a manipular o GameObject. Essa é a parte mais direta, no entanto. Obter realmente a referência para o GameObject pode ser feito de várias formas diferentes…</p><h4 id="aceder-atrav-s-de-vari-vel-de-inspe-o"><strong>Aceder através de variável de inspeção</strong></h4><p>Esta é a maneira mais direta. Cria simplesmente uma variável pública para o GameObject, tal como demonstramos anteriormente com os prefabs, e arrasta-a manualmente para o componente através do inspetor. De seguida, acede à variável tal como acima.</p><h4 id="aceder-atrav-s-de-tags"><strong>Aceder através de tags</strong></h4><p>Podemos atribuir tags a GameObjects ou prefabs através do inspetor e depois utilizar as funções <em>find</em> do game object para localizar as referências para eles.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g.png" class="kg-image" alt="9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g.png 628w" width="628" height="166" loading="lazy"></figure><p>Isso é simplesmente feito como abaixo.</p><blockquote>GameObject some_game_object = GameObject.FindGameObjectWithTag(“Brick”);</blockquote><h4 id="aceder-atrav-s-do-atributo-transform"><strong>Aceder através do atributo <em>transform</em></strong></h4><p>Se quisermos aceder a componentes em algum objeto pai, podemos simplesmente fazer isto através do atributo <em>transform</em>.</p><blockquote>ComponentName comp = gameObject.transform.parent.GetComponent&lt;ComponentName&gt;();</blockquote><h4 id="aceder-atrav-s-de-fun-es-sendmessage"><strong>Aceder através de funções SendMessage</strong></h4><p>Como alternativa, se quisermos enviar uma mensagem a muitos outros componentes ou desejarmos enviar uma mensagem a um objeto que está bastante acima na hierarquia, podemos utilizar as funções de envio de mensagem, que aceitam o nome da função, seguido pelos argumentos.</p><blockquote>gameObject.SendMessage("MethodName",params); // Mensagem de Broadcast</blockquote><blockquote>gameObject.SendMessageUpwards("MethodName", params); // Apenas recebido por componentes que estão hierarquicamente acima.</blockquote><h3 id="raycasting"><strong><em>Raycasting</em></strong></h3><p>Podes ter ouvido falar disso antes, quando as pessoas comparam jogos de FPS que são 'baseados em físicas' ou 'baseados em raios'. <em>Raycasting</em> é essencialmente como ter um laser que, quando entra em contacto com um 'collider' ou 'rigidbody', retorna um 'hit' e passa de volta os detalhes do objeto.</p><p>Existem dois cenários onde isto é útil (existem provavelmente muitos mais):</p><ol><li>Se estivesses a desenhar um sistema de armas para um jogo, poderias utilizar <em>raycasting</em> para detetar a colisão e até mesmo personalizar o comprimento do raio de modo a que as armas corpo-a-corpo 'atinjam' apenas a curtas distâncias.</li><li>Criar um raio desde o ponteiro do rato até um ponto num espaço 3D, ou seja, se desejares que o utilizador seja capaz de selecionar unidades com o seu rato num jogo de estratégia.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB.png" class="kg-image" alt="GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB.png 800w" sizes="(min-width: 720px) 720px" width="800" height="453" loading="lazy"><figcaption>Exemplo 2 detalhado acima</figcaption></figure><p>Como podes ver, o código para isso é um pouco mais complicado. A coisa principal a compreender é que, para criar um raio para onde o rato está a apontar num espaço 3D, é necessária a transformação ScreenPointToRay. A razão para isso é que a câmara está a renderizar um espaço 3D como uma janela 2D no ecrã do teu computador. Então, existe naturalmente uma projeção envolvida para transferir de volta para 3D.</p><h3 id="dete-o-de-colis-o"><strong>Deteção de colisão</strong></h3><p>Anteriormente, mencionamos os componentes <em>Collider</em> e <em>Rigidbody,</em> que podem ser adicionados a um objeto. A regra para colisões é que um objeto na colisão deve ter um <em>rigidbody</em> e o outro deve ter um <em>collider</em> (ou ambos terem os dois componentes). Repara que, ao utilizar <em>raycasting</em>, os raios vão interagir apenas com objetos com componentes <em>collider</em> anexados.</p><p>Assim que fizermos a configuração dentro de qualquer componente personalizado anexado ao objeto, podemos utilizar os métodos OnCollisionEnter, OnCollisionStay e OnCollisionExit para responder a colisões. Assim que tivermos a informação de colisão, podemos obter o GameObject responsável e utilizar o que aprendemos anteriormente para interagir também com componentes anexados a ele.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt.png" class="kg-image" alt="ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt.png 776w" sizes="(min-width: 720px) 720px" width="776" height="134" loading="lazy"></figure><p>Uma coisa a ter em conta é que os <em>rigid-bodies</em> fornecem físicas como gravidade aos objetos. Então, se desejares desligar isto, vais precisar de marcar o <em><em>is_kinematic</em></em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB.png" class="kg-image" alt="I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB.png 606w" width="606" height="338" loading="lazy"><figcaption>Marca a caixa <em>is kinematic</em> para desativar físicas não desejadas mas manter uma boa deteção de colisão.</figcaption></figure><h3 id="caracter-sticas-avan-adas"><strong>Características avançadas</strong></h3><p>Não vamos abordar nada disto para já, mas talvez num artigo futuro — isso é apenas para ficares a par da sua existência.</p><h4 id="criar-interfaces-gr-ficas-de-utilizador-gui-"><strong>Criar interfaces gráficas de utilizador (GUI)</strong></h4><p>O Unity tem um motor de UI completo para definir a GUI do teu jogo. Por norma, esses componentes funcionam de maneira muito semelhante ao resto do motor.</p><h4 id="estender-o-editor-do-unity"><strong>Estender o editor do Unity</strong></h4><p>O Unity permite-te adicionar botões personalizados aos teus inspetores para que possas afetar o mundo no modo de edição. Por exemplo, para ajudar com a construção do mundo, podes desenvolver uma janela personalizada de ferramentas para criar casas modulares.</p><h4 id="anima-o"><strong>Animação</strong></h4><p>O Unity tem um sistema de animação baseado em gráficos que te permite juntar e controlar animações em vários objetos, tais como jogadores a implementar um sistema de animação com base nos ossos.</p><h4 id="materiais-e-pbr"><strong>Materiais e PBR</strong></h4><p>O Unity funciona num motor de renderização com base em físicas que permite ter luzes em tempo real e materiais realistas. A realidade é que vais aprender primeiro modelação 3D ou vais utilizar modelos já feitos e otimizados por alguém, de modo a criares algo que realmente tenha bom aspeto.</p><h3 id="dicas-para-principiantes"><strong>Dicas para principiantes</strong></h3><p>Se estiveres a planear criar o teu primeiro jogo, não subestimes a complexidade e o tempo que leva a escrever até o mais trivial dos jogos. Lembra-te que a maior parte dos jogos lançados na Steam têm equipas a trabalhar neles durante anos a tempo inteiro!</p><p>Escolhe um conceito simples e divide-o em pequenos objetivos alcançáveis. É altamente recomendado dividir o teu jogo em tantos componentes independentes quanto possível, pois é muito menos provável encontrares erros se mantiveres os componentes simples em vez de blocos de código monolíticos.</p><p>Antes de avançares para a escrita de qualquer código para qualquer parte do teu jogo, pesquisa o que outras pessoas fizeram antes para resolver o mesmo problema — é provável que tenham uma solução bastante mais otimizada.</p><h3 id="bons-recursos-e-comunidades"><strong>Bons recursos e comunidades</strong></h3><p>O desenvolvimento de jogos tem uma das melhores comunidades de todas. Existem muitos profissionais altamente habilitados na indústria, que fornecem conteúdo gratuitamente ou por quase nada. É uma área que requer modeladores 3D, artistas conceptuais, designers de jogos, programadores e assim adiante. Abaixo, coloquei os links para alguns recursos gerais ótimos (em inglês) que encontrei para cada um desses campos:</p><p><strong>Arte Conceptual</strong></p><ul><li><a href="https://www.youtube.com/channel/UCbdyjrrJAjDIACjCsjAGFAA" rel="noopener">Feng Zhu Design School</a> (mais de 90 horas de tutoriais de arte conceptual)</li><li><a href="https://www.youtube.com/channel/UCm9pCim4dDN4KJZUILGizgA" rel="noopener">Tyler Edlin Art</a> (ótima comunidade de arte BST com feedback de profissionais em desafios mensais)</li><li><a href="https://www.youtube.com/channel/UCyGGrJ-wQlvcWujLKHzB42w" rel="noopener">Art Cafe</a> (entrevistas e <em>workshops</em> com artistas conceptuais famosos)</li><li><a href="https://www.youtube.com/channel/UCmRm1xtLIpBhuWjTyD411pA" rel="noopener">Trent Kaniuga</a> (ilustrador e artista 2D que também está a criar o seu próprio jogo)</li></ul><p><strong>Modelação <strong>3D</strong></strong></p><ul><li><a href="https://cgcookie.com/course/mesh-modeling-bootcamp/?utm_source=youtube&amp;utm_medium=social&amp;utm_campaign=course&amp;utm_term=description&amp;utm_content=modeling-bootcamp-lessons" rel="noopener">CG Cookie</a> (melhores princípios básicos de malhas 3D no Blender – eles têm muitos outros excelentes conteúdos para o Blender)</li><li><a href="https://www.youtube.com/channel/UCDmOobbSOonY66M6fsJO7GQ" rel="noopener">Tor Frick</a> (modeladores de <em>Hard Surface</em> e escultores no Blender)</li><li><a href="https://www.youtube.com/channel/UCVA3cYOgsTN4hs3v7pjne7w" rel="noopener">Gleb Alexandrov</a> (pequenos tutoriais potentes sobre renderização no Blender)</li></ul><p><strong><strong>Des</strong>envolvimento de jogos</strong></p><ul><li><a href="https://www.youtube.com/watch?v=juJikoClDxw&amp;list=PLIhLvue17Sd7riA8vb8h1kP3jCFS_qtTM" rel="noopener">DoubleFine Amnesia Fortnight</a> (programadores de jogos que fazem maratonas de duas semanas a programar e gravam todo o seu processo de design)</li><li><a href="https://www.youtube.com/channel/UCqJ-Xo29CKyLTjn6z2XwYAw" rel="noopener">GameMakers Toolkit</a> (examina princípios de design de jogos)</li></ul><p><strong>Programação</strong></p><ul><li><a href="https://www.youtube.com/channel/UCaTznQhurW5AaiYPbhEA-KA" rel="noopener">Série Handmade Hero no canal Molly Rocket</a> (como criar um jogo e motor a partir do zero em C)</li><li><a href="https://www.youtube.com/channel/UCCuoqzrsHlwv1YyPKLuMDUQ" rel="noopener">Jonathan Blow</a> (programador independente que faz <em>livestreams</em> do seu desenvolvimento de jogos)</li><li><a href="https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA" rel="noopener">Brackeys</a> (bons tutoriais de Unity)</li></ul><h3 id="conclus-o"><strong>Conclusão</strong></h3><p>Espero que tenhas gostado deste tutorial! Também faço um pouco de design gráfico, assim como protótipos de jogos e Interfaces de Utilizador. </p><p>Se o tutorial foi do teu agrado, dá uma vista de olhos ao <strong><a href="https://hugodolandesigns.portfoliobox.net/"></a><a href="https://hugodolandesigns.portfoliobox.net/">p<strong>ortf</strong>ó<strong>li</strong>o</a> do autor</strong>! Ele também está presente no<strong><strong> </strong><a href="https://www.linkedin.com/in/hugo-dolan-62971a174/">L<strong>inke</strong>dI<strong>n</strong></a></strong>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O que é o desenvolvimento de jogos? ]]>
                </title>
                <description>
                    <![CDATA[ O desenvolvimento de jogos é a arte de criar jogos e descreve o planejamento, desenvolvimento e o lançamento de um jogo. Pode envolver a geração de conceitos, design, criação, teste e o lançamento em si. Ao criar jogos, é importante pensar sobre a mecânica do jogo, recompensas, engajamento dos jogadores ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-que-e-o-desenvolvimento-de-jogos/</link>
                <guid isPermaLink="false">663ad9620e369603f905eb14</guid>
                
                    <category>
                        <![CDATA[ Desenvolvimento de jogos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 08 May 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/5f9c9e6b740569d1a4ca3cfb.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/what-is-game-development/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What Is Game Development?</a>
      </p><p>O desenvolvimento de jogos é a arte de criar jogos e descreve o planejamento, desenvolvimento e o lançamento de um jogo. Pode envolver a geração de conceitos, design, criação, teste e o lançamento em si. Ao criar jogos, é importante pensar sobre a mecânica do jogo, recompensas, engajamento dos jogadores e design de níveis.</p><p>Um desenvolvedor de jogos pode ser um programador, um designer de sons, um artista, um designer ou tantas outras funções que estão disponíveis no setor.</p><p>O desenvolvimento de jogos pode ser feito por estúdios de desenvolvimento de jogos gigantes, mas também por indivíduos. Pode ser pequeno ou grande, como você quiser. Basta que ele permita ao jogador interagir com seu conteúdo e ser capaz de manipular os elementos do jogo. É o que você precisa para chamá-lo de "<em>game</em>".</p><p>Para se envolver no desenvolvimento de jogos, você não precisa escrever código. Artistas podem criar e desenhar partes do jogo, enquanto um desenvolvedor se concentra, por exemplo, em programar uma barra de vida. Um testador pode estar envolvido em conferir se o jogo funciona conforme o esperado.</p><p>Para resolver problemas que os <em>frameworks </em>de jogos costumavam ter, foram criadas ferramentas como o libGDX e o OpenGL. Eles ajudaram o desenvolvimento de jogos a ser muito mais rápido e mais fácil, fornecendo diversas funções pré-prontas e recursos. Porém, ainda costumava ser difícil entrar no setor ou compreender um <em>framework </em>para alguém vindo de um histórico que não fosse da área da programação, o que é um caso comum no cenário de desenvolvimento de jogos hoje em dia.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/maxresdefault.jpg" class="kg-image" alt="maxresdefault" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/maxresdefault.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/05/maxresdefault.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/maxresdefault.jpg 1280w" sizes="(min-width: 720px) 720px" width="1280" height="720" loading="lazy"></figure><p>Foi quando as engines de jogos como Construct, Game Maker, Unity e Unreal foram desenvolvidas. Em geral, uma engine tem tudo o que um <em>framework</em> costumava ter, mas com uma abordagem muito mais amigável, usando uma interface gráfica de usuário (ou GUI) e auxiliando com o desenvolvimento gráfico do jogo.</p><p>Em alguns casos, como no Game Maker e no Construct, a quantidade de funções pré-fabricadas é tão grande que pessoas sem nenhum conhecimento em programação poderia construir um jogo do zero, o que aumentou o número de envolvidos na área e tornou o desenvolvimento de jogos acessível a, praticamente, qualquer um.</p><h2 id="engines-de-jogos"><strong>Engines de jogos</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/05/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/05/image.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/05/image.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/05/image.png 1296w" sizes="(min-width: 720px) 720px" width="1296" height="645" loading="lazy"></figure><p>Muitos desenvolvedores escolhem desenvolver jogos, hoje, usando uma Engine de desenvolvimento de jogos.</p><p>Engines de jogos podem tornar o processo de criação de um jogo muito mais fácil e permitir que desenvolvedores reutilizem várias funcionalidades. Elas também são responsáveis pela renderização dos gráficos 2D e 3D, pela física e pela detecção de colisões, efeitos sonoros, <em>scripts</em> e muito mais.</p><p>Algumas engines de jogos têm uma curva de aprendizagem bastante acentuada, como a CryEngine e a Unreal Engine. Outras ferramentas, no entanto, são bastante acessíveis para os iniciantes. Algumas delas sequer precisam que você consiga escrever código para criar seu próprio jogo, como, por exemplo, a Construct.</p><p>A engine de jogos Unity se encontra em algum lugar no meio do caminho. Embora seja fácil de utilizar para iniciantes, alguns jogos comerciais bastante conhecidos já foram criados usando a Unity (por exemplo, <em>Overcooked</em> e <em>Superhot</em>).</p><p>A engine de jogos BuildBox serve basicamente para o desenvolvimento de jogos supercasuais.</p><h3 id="engines-de-jogos-conhecidas"><strong><strong><strong>Engines</strong> de jogos conhecidas</strong></strong></h3><ul><li>CryEngine</li><li>Engine Unreal </li><li>Engine Unity Game </li><li>Game Maker</li><li>Construct 3</li><li>Twine</li><li>Source</li><li>Frostbite</li><li>Buildbox</li></ul><h3 id="mais-informa-es-em-ingl-s-"><strong><strong>Mais informações (em inglês)</strong></strong></h3><ul><li><a href="https://github.com/Kavex/GameDev-Resources">Uma lista incrível de recursos para desenvolvimento de jogos</a></li><li><a href="http://www.fromdev.com/2013/07/game-development-books.html">Livros de programação de jogos</a></li><li><a href="https://www.opengl.org/">Framework OpenGL</a></li><li><a href="https://www.scirra.com/">Engine de jogos Construct</a></li><li><a href="https://www.yoyogames.com/gamemaker">Engine Game Maker</a></li><li><a href="https://unity3d.com/">Engine Unity3D</a></li><li><a href="https://www.unrealengine.com/en-US/what-is-unreal-engine-4">Engine Unreal</a></li><li><a href="https://www.buildbox.com/">BuildBox</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Você já pode jogar o Learn to Code RPG, versão 1.5, com novas horas de jogo ]]>
                </title>
                <description>
                    <![CDATA[ Saudações da equipe de desenvolvedores do Learn to Code RPG! Somos Lynn, KayLa e Nielda. Temos trabalhado arduamente na construção de novas aventuras para nossos personagens. Tenho o prazer de anunciar o lançamento do Learn to Code RPG v1.5, um ano após o lançamento do Learn to Code RPG v1 ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/voce-ja-pode-jogar-o-learn-to-code-rpg-versao-1-5-com-novas-horas-de-jogo/</link>
                <guid isPermaLink="false">63a9c13844e27f060d7a47fd</guid>
                
                    <category>
                        <![CDATA[ Desenvolvimento de jogos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael Fontenelle ]]>
                </dc:creator>
                <pubDate>Mon, 06 Feb 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/splash-2-lowres-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-to-code-rpg-1-5-update/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn to Code RPG Version 1.5 is Now Playable with Hours of New Gameplay</a>
      </p><p>Saudações da equipe de desenvolvedores do Learn to Code RPG! Somos Lynn, KayLa e Nielda. Temos trabalhado arduamente na construção de novas aventuras para nossos personagens.</p><p>Tenho o prazer de anunciar o lançamento do <strong>Learn to Code RPG v1.5</strong>, um ano após o lançamento do Learn to Code RPG v1 (curiosidade: estamos chamando de v1.5 em vez de v2 porque temos grandes planos para a v2, que planejamos lançar em breve).</p><h2 id="o-que-o-learn-to-code-rpg">O que é o Learn to Code RPG?</h2><p>O <strong>Learn to Code RPG</strong> é um jogo de romance visual (do inglês, <em>visual novel</em>) interativo onde você aprenderá a programar sozinho, fará amigos na indústria de tecnologia e perseguirá seu sonho de trabalhar com desenvolvimento de software. 🎯</p><p>O jogo, agora, tem:</p><ul><li>Mais horas de jogo 🎮</li><li>Arte e música originais 🎨</li><li>Mais de mil questões sobre ciência da computação 📚</li><li>Mais de 50 conquistas que você pode desbloquear 🏆</li><li>6 finais diferentes 👀</li><li>Mais de 10 personagens com os quais você pode fazer amizade, além de um gato adorável 🐱</li><li>Minijogos 👾</li><li>Um sistema de reputação, um sistema de dinheiro e itens divertidos que você pode comprar para seu gato e personalizar seu quarto 🏠</li></ul><h2 id="trailer-do-jogo-learn-to-code-rpg-v1-5">Trailer do jogo Learn to Code RPG v1.5</h2><p>Você também pode assistir ao trailer do jogo abaixo e compartilhar o vídeo do YouTube com amigos e amigas:</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/vDfcMD99Kdg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Learn To Code RPG v1.5 - Game Promo" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="voc-pode-baixar-o-jogo-e-jog-lo-gratuitamente-ele-est-dispon-vel-para-pc-mac-e-linux-na-itch-io-e-para-android-na-google-play-store-">Você pode baixar o jogo e jogá-lo gratuitamente. Ele está disponível para PC, Mac e Linux, na <a href="https://freecodecamp.itch.io/learn-to-code-rpg">itch.io</a>, e para Android, na <a href="https://play.google.com/store/apps/details?id=org.freecodecamp.learntocoderpg&amp;hl=en_US&amp;gl=US&amp;pli=1">Google Play Store</a>.</h2><p>Se você quiser saber mais sobre o jogo em si e sobre o processo de desenvolvimento, continue lendo.</p><p>Agora, vamos ver alguns aspectos da história, personagens, gráficos e código. Tenho certeza de que você vai gostar e pode até se inspirar a programar seu próprio videogame.</p><h2 id="como-o-learntocoderpg-foi-da-v1-para-a-v1-5">Como o LearnToCodeRPG foi da v1 para a v1.5</h2><h3 id="a-equipe">A equipe</h3><p>Quando Lynn criou a v1, ela estava trabalhando sozinha no jogo, fazendo malabarismos com a escrita, a programação e a criação de alguns ativos.</p><p>Com este lançamento, para dar a Lynn mais tempo para se concentrar no código, KayLa cuidou da redação e Nielda ajudou a pensar nos recursos e na criação dos recursos de arte.</p><p>Quer ver uma exemplo de trabalho em equipe? Aqui está um para você, a loja de itens. Depois de comprar os móveis da loja, o jogador verá os móveis em seu quarto.</p><ul><li>Lynn programou a loja, os itens e a personalização do quarto</li><li>KayLa e Nielda tiveram ideias para os itens</li><li>KayLa escreveu textos divertidos para os itens</li><li>Nielda criou todas as imagens – a sala e os itens – analisando ativos em 3D e aplicando texturas sobre eles</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/room.gif" class="kg-image" alt="room" width="1169" height="653" loading="lazy"></figure><h3 id="a-hist-ria-central-do-learn-to-code-rpg">A história central do Learn to Code RPG</h3><p>Na v1 (ou a versão que chamamos de Prólogo), a história começa quando nossa protagonista, Lydia, decide conseguir um emprego na indústria de tecnologia. Ela precisa aprender a codificar, fazer amigos na indústria, encontrar mentores, enfrentar entrevistas técnicas e, ao final, chegar ao seu objetivo – um novo emprego em desenvolvimento de software.</p><p>Construindo a partir da história do Prólogo, na v1.5 (ou o que chamamos de Arco I), Lydia começa a trabalhar como desenvolvedora <em>full-stack</em>. Ela, agora, precisa interagir com seus novos colegas no dia a dia e reagir aos eventos que surgem.</p><p>Ela enfrentará todas as coisas que um engenheiro de software do mundo real enfrenta – mudanças nos requisitos do projeto, comunicação com gerentes de projeto, aprendizado com desenvolvedores seniores e assim por diante.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screen-Shot-2022-12-20-at-18.37.09.png" class="kg-image" alt="Screen-Shot-2022-12-20-at-18.37.09" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Screen-Shot-2022-12-20-at-18.37.09.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Screen-Shot-2022-12-20-at-18.37.09.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screen-Shot-2022-12-20-at-18.37.09.png 1290w" sizes="(min-width: 1200px) 1200px" width="1290" height="797" loading="lazy"><figcaption>Esta cena parece familiar no trabalho com tecnologia?</figcaption></figure><p>Fora do trabalho, Lydia também pode ir ao Hacker Space com os amigos que ela fez quando estava aprendendo a programar.</p><p>No Hacker Space, Lydia pode encontrar velhos conhecidos, que também estão procurando emprego. Ela pode decidir se deve ou não os indicar para empregos.</p><p>Ela também pode retribuir à comunidade, orientando alunos do ensino médio em seus projetos.</p><p>Nunca faltam coisas divertidas para se fazer no Hacker Space. 😄</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/itch2.png" class="kg-image" alt="itch2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/itch2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/itch2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/itch2.png 1290w" sizes="(min-width: 1200px) 1200px" width="1290" height="797" loading="lazy"></figure><h3 id="os-personagens">Os personagens</h3><p>Para dar mais profundidade aos personagens, fizemos um <em>brainstorming</em> usando o formato de cartão de personagem mostrado abaixo. Aqui está o cartão de personagem para Lydia:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Screen-Shot-2022-12-20-at-19.46.02.png" class="kg-image" alt="Screen-Shot-2022-12-20-at-19.46.02" width="543" height="755" loading="lazy"></figure><p>Lydia conhece muitos novos colegas neste arco e nossa lista de personagens foi bastante expandida.</p><p>Ao criar os personagens, às vezes, nosso artista, o Noa, experimenta variações de cores e estilos de cabelo até chegar a um design que nos agrade:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/mala-3.jpg" class="kg-image" alt="mala-3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/mala-3.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/mala-3.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/02/mala-3.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/mala-3.jpg 1700w" sizes="(min-width: 1200px) 1200px" width="1700" height="1123" loading="lazy"><figcaption>Designs diferentes da Mala. Qual é o seu favorito?</figcaption></figure><p>Aqui você também verá uma prévia de um dos muitos personagens e suas muitas expressões:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/darius-4.jpg" class="kg-image" alt="darius-4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/darius-4.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/darius-4.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/02/darius-4.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/darius-4.jpg 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="282" loading="lazy"><figcaption>As várias expressões faciais de Darius</figcaption></figure><p>Claro, o favorito de todos, Mint, o gatinho, ainda é o suporte emocional mais importante para este arco de história. 🐱</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/mint_small.gif" class="kg-image" alt="mint_small" width="200" height="200" loading="lazy"></figure><h3 id="os-gr-ficos">Os gráficos</h3><p>Agora, passamos para outros gráficos além da arte de <em>sprites</em> de personagens. Assim como na v1, novamente criamos imagens de fundo aplicando um filtro semelhante à aquarela às imagens do mundo real.</p><p>Como muitas histórias acontecem na empresa em que Lydia trabalha, também tentamos encontrar imagens nos bancos de imagens que fossem coerentes com o esquema de cores, como as abaixo:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Untitled-design.png" class="kg-image" alt="Untitled-design" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/02/Untitled-design.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/02/Untitled-design.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/02/Untitled-design.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/02/Untitled-design.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="564" loading="lazy"><figcaption>Imagens de plano de fundo da empresa na qual Lydia está trabalhando</figcaption></figure><h3 id="o-c-digo">O código</h3><p>Assim como na v1, usamos o mecanismo de jogo com o qual estamos mais familiarizados, o Ren'Py Visual Novel Engine.</p><p>Durante este ano de desenvolvimento, uma notícia realmente empolgante para a comunidade do Ren'Py é que o Ren'Py 8 agora oferece suporte ao Python 3. Isso é fascinante!</p><p>Comparado ao Python 2.7 (que usamos no Ren'Py 7.4, quando desenvolvemos o Learn to Code RPG v1), o Python 3 traz muitos novos recursos que impactam positivamente nosso desenvolvimento.</p><p>Isso também significa que tivemos que gastar um pouco de tempo para migrar do Python 2.7 para o Python 3 em nosso projeto (foi um pequeno <em>commit</em> no Git, acredite 🤓).</p><p>Agora, algumas estatísticas interessantes: o <em>linter</em> integrado do Ren'Py é perfeito para coletar estatísticas para comparações entre a v1 e a v1.5:</p><pre><code># v1
Ren'Py 7.4.8.1895 lint report, generated at: Fri Dec 17 22:11:43 2021
Statistics:
The game contains 1,335 dialogue blocks, containing 15,390 words and 85,105 characters, for an average of 11.5 words and 64 characters per block.
The game contains 40 menus, 20 images, and 49 screens.

# v1.5
Ren'Py 8.0.3.22090809 lint report, generated at: Tue Dec 20 19:22:05 2022
Statistics:
The game contains 3,339 dialogue blocks, containing 41,214 words and 220,501
characters, for an average of 12.3 words and 66 characters per block.
The game contains 68 menus, 19 images, and 51 screens.</code></pre><p>Pelas estatísticas, podemos ver que quase triplicamos o conteúdo da história. Uau! 🤩</p><h2 id="as-etapas-para-o-learntocoderpg-da-v1-5-v2">As etapas para o LearnToCodeRPG: da v1.5 à v2</h2><p>Viva! Após um ano inteiro de desenvolvimento, levamos a v1 a novos patamares e agora apresentamos a você o <strong>Learn to Code RPG v1.5</strong>.</p><p>O que é mais empolgante: estamos apenas começando. Assim como Quincy sempre gosta de dizer, o céu é o limite. ✈️</p><p>Aqui estão algumas coisas que você pode esperar na v2 (ou até antes, entre a v1.5 e a v2):</p><ul><li>🌎 Localização: todo o texto da v1 foi totalmente traduzido para o português e temos uma comunidade ativa trabalhando na tradução do jogo para outros idiomas do mundo. Você também pode ajudar, começando por <a href="https://contribute.freecodecamp.org/#/how-to-translate-files?id=translate-the-learntocode-rpg">aqui</a>.</li><li>🎭 Mais histórias e personagens: temos mais de 10 personagens planejados e alguns já desenhados</li><li>📚 Banco expandido de perguntas do questionário e repetição espaçada para ajudá-lo a aprender com mais eficiência.</li><li>💻 Atualização automática interna ao jogo para se manter atualizado com as últimas correções de bugs, recursos e histórias.</li><li>... e muito mais em nossa lista de desejos! 🎁</li></ul><p>Por último, mas não menos importante, esperamos que você goste de jogar este jogo tanto quanto nós gostamos de desenvolvê-lo! 🥳</p><h3 id="links-textos-em-ingl-s-">Links (textos em inglês)</h3><p>Você pode encontrar o jogo na itch.io, aqui:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://freecodecamp.itch.io/learn-to-code-rpg"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Learn to Code RPG by freeCodeCamp.org</div><div class="kg-bookmark-description">Learn to code and get a dev job 🎯</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://img.itch.zone/aW1nLzc3MTM5MzYucG5n/32x32%23/E7o8zJ.png" width="32" height="32" alt="E7o8zJ" loading="lazy"><span class="kg-bookmark-publisher">itch.io</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://img.itch.zone/aW1nLzc2OTc2ODcucG5n/original/KGkTTn.png" width="1920" height="1080" alt="KGkTTn" loading="lazy"></div></a></figure><p>Este é o repositório do GitHub com todo o código:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/freeCodeCamp/LearnToCodeRPG"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - freeCodeCamp/LearnToCodeRPG: A visual novel video game where you learn to code and get a dev job 🎯</div><div class="kg-bookmark-description">A visual novel video game where you learn to code and get a dev job 🎯 - GitHub - freeCodeCamp/LearnToCodeRPG: A visual novel video game where you learn to code and get a dev job 🎯</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" width="32" height="32" alt="favicon" loading="lazy"><span class="kg-bookmark-author">freeCodeCamp</span><span class="kg-bookmark-publisher">GitHub</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/d383f2c278e0d7bbd93a41e02cc1d7be193c31d3ddc563f16bf150e86c4a8e04/freeCodeCamp/LearnToCodeRPG" width="600" height="400" alt="LearnToCodeRPG" loading="lazy"></div></a></figure><p>Se você ainda não leu sobre como a v1 do jogo tomou forma, aqui está um artigo para você:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.freecodecamp.org/news/learn-to-code-rpg/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Learn to Code RPG – A Visual Novel Video Game Where you Learn Computer Science Concepts</div><div class="kg-bookmark-description">Learn to Code RPG is an interactive visual novel game where you will teach yourself to code, make friends in the tech industry, and pursue your dream of becoming a developer.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://cdn.freecodecamp.org/universal/favicons/favicon.ico" width="48" height="48" alt="favicon" loading="lazy"><span class="kg-bookmark-author">Lynn Zheng</span><span class="kg-bookmark-publisher">freeCodeCamp.org</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.freecodecamp.org/news/content/images/2021/12/Splash-Art.png" width="600" height="400" alt="Splash-Art" loading="lazy"></div></a></figure><p>E aqui está o kit de imprensa oficial do jogo:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.freecodecamp.org/news/learn-to-code-rpg-press-kit/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Learn to Code RPG – Press Kit</div><div class="kg-bookmark-description">This is the press kit for the game, Learn to Code RPG.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://cdn.freecodecamp.org/universal/favicons/favicon.ico" width="48" height="48" alt="favicon" loading="lazy"><span class="kg-bookmark-author">Lynn Zheng</span><span class="kg-bookmark-publisher">freeCodeCamp.org</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.freecodecamp.org/news/content/images/2021/12/Splash-Art-1.png" width="600" height="400" alt="Splash-Art-1" loading="lazy"></div></a></figure><p>Se estiver interessado em criar um Visual Novel Game, confira este meu artigo:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.freecodecamp.org/news/use-python-to-create-a-visual-novel/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to Make a Visual Novel Game in 10 Minutes – Python Ren’Py Tutorial</div><div class="kg-bookmark-description">Do you have a story idea that you’d like to turn into a novel? How about addingvisual appeal and interactivity to that novel? A Visual Novel [https://en.wikipedia.org/wiki/Visual_novel] might be the gamegenre you are looking for. And this tutorial is here to help set you up in 10minutes, with m…</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://cdn.freecodecamp.org/universal/favicons/favicon.ico" width="48" height="48" alt="favicon" loading="lazy"><span class="kg-bookmark-author">Lynn Zheng</span><span class="kg-bookmark-publisher">freeCodeCamp.org</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screen-Shot-2021-06-21-at-14.23.10-1.png" width="600" height="400" alt="Screen-Shot-2021-06-21-at-14.23.10-1" loading="lazy"></div></a></figure><p>Esperamos que você goste de aprender sobre como é trabalhar com tecnologia jogando o Learn to Code RPG. 🧑‍💻</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
