<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Jogos · Game Developer</title><link>https://gamedeveloper.com.br/categories/jogos/</link><description>Jogos · Desenvolvimento de jogos por Bruno Cicanci</description><generator>Hugo</generator><language>pt-BR</language><copyright>© 2009–2026 Game Developer por Bruno Cicanci. Todos os direitos reservados.</copyright><lastBuildDate>Fri, 10 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://gamedeveloper.com.br/categories/jogos/rss.xml" rel="self" type="application/rss+xml"/><item><title>Minha participação no Ludum Dare #58</title><link>https://gamedeveloper.com.br/ludum-dare-58/</link><guid>https://gamedeveloper.com.br/ludum-dare-58/</guid><pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate><category>Jogos</category><description>Apesar de participar da game jam Ludum Dare há mais de uma década, ainda continuo aprendendo como finalizar um projeto em um tempo tão curto.&#10;</description><content:encoded>&lt;p&gt;Apesar de participar da game jam Ludum Dare há mais de uma década, ainda continuo aprendendo como finalizar um projeto em um tempo tão curto.&lt;/p&gt;&#10;&lt;p&gt;Lembro da primeira vez que participei de uma game jam, lá em 2015. Na época eu já trabalhava na indústria de jogos há cerca de cinco anos, com nomes como Glu e Electronic Arts no currículo, mas as game jams sempre me ensinaram algo novo sobre desenvolvimento de jogos.&lt;/p&gt;&#10;&lt;p&gt;Como mencionei no meu &lt;a href="https://gamedeveloper.com.br/esta-semana-comeca-o-ludum-dare-58" &gt;artigo anterior&lt;/a&gt;, decidi participar da última edição da game jam &lt;a href="https://ldjam.com/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;. Desta vez, o tema escolhido pelos participantes foi &lt;strong&gt;Collector&lt;/strong&gt;.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Conceito do jogo&#10; &lt;div id="conceito-do-jogo" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#conceito-do-jogo" aria-label="Âncora"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Assim que o tema foi revelado, começou a contagem regressiva de 48 horas. &lt;strong&gt;Collector&lt;/strong&gt; foi o tema mais votado de uma lista que os participantes geram e votam durante a semana anterior à game jam. Como essa lista é divulgada antes, costumo me preparar pensando no que poderia fazer com base nas 16 possibilidades.&lt;/p&gt;&#10;&lt;p&gt;Minha ideia original era criar um jogo &lt;strong&gt;roguelike&lt;/strong&gt; em que o jogador coletaria cartas deixadas pelos inimigos e as usaria para melhorar seus poderes e habilidades. Antes de cada novo nível, o jogador escolheria algumas das cartas coletadas e usaria as habilidades dessas cartas para avançar e conquistar mais cartas ao final.&lt;/p&gt;&#10;&lt;p&gt;Como dá pra ver na imagem abaixo, rascunhei a ideia no papel, listando tudo o que veio à cabeça, sem pensar muito na viabilidade naquele momento. Esse processo ajuda bastante a tirar as ideias da cabeça e colocá-las no papel, deixando tudo mais claro e fácil de visualizar.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2025/10/ld58-game-concept.webp"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Do papel ao Unity&#10; &lt;div id="do-papel-ao-unity" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#do-papel-ao-unity" aria-label="Âncora"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Assim que a ideia ficou um pouco mais concreta, comecei a desenvolver na minha &lt;strong&gt;game engine&lt;/strong&gt; de escolha: Unity. Uso o Unity desde 2009, quando a versão 3.0 foi lançada, então é sempre minha escolha segura.&lt;/p&gt;&#10;&lt;p&gt;Meu conselho pra quem quer participar de uma game jam, seja iniciante ou profissional, é: use uma engine que você já conheça e tenha alguma experiência. Fazer um jogo em tão pouco tempo, com um tema que você só descobre na hora, já é difícil o bastante — então é importante eliminar qualquer complicação desnecessária do processo.&lt;/p&gt;&#10;&lt;p&gt;Costumo preferir fazer jogos 2D nas game jams, porque é mais fácil pra eu desenhar algo simples e colocar no jogo (até porque não tenho nenhuma habilidade artística). Porém, dessa vez decidi fazer um jogo 3D. Sabendo das minhas limitações, optei por usar apenas objetos geométricos básicos do Unity e criar materials diferentes pra mudar as cores. Também adicionei alguns &lt;strong&gt;spotlights&lt;/strong&gt; nos objetos pra dar mais destaque.&lt;/p&gt;&#10;&lt;p&gt;Comecei criando uma cena de testes — algo que sempre faço pra experimentar ideias. Na imagem abaixo dá pra ver a cena: basicamente um &lt;strong&gt;plane&lt;/strong&gt; servindo de chão e quatro cubos esticados formando as paredes. O jogador é um cilindro amarelo e os inimigos são cubos vermelhos e azuis — tudo bem simples, pra eu conseguir focar na jogabilidade.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2025/10/ld58-unity-editor.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Conforme comecei a programar, também fui ajustando a ideia e reduzindo bastante o escopo, pra garantir que conseguiria terminar algo dentro do prazo.&lt;/p&gt;&#10;&lt;p&gt;A jogabilidade mudou pra algo mais simples: inimigos surgem na cena e perseguem o jogador. Quando colidem, ambos causam dano ao longo do tempo até que um deles morra ou o jogador se afaste.&lt;/p&gt;&#10;&lt;p&gt;Mantive o conceito de coletar cartas, mas na nova versão do jogo os inimigos deixam cair cartas das suas respectivas cores (que chamei de cartas de Fogo e Gelo). Quando o jogador coleta uma carta, sua vida é restaurada para 5 pontos.&lt;/p&gt;&#10;&lt;p&gt;Esse é o &lt;strong&gt;core loop&lt;/strong&gt; do jogo: o jogador precisa atacar os inimigos, mas também fugir quando mais de um começa a persegui-lo. Os inimigos vermelhos e azuis têm valores diferentes de ataque, vida e velocidade — assim como o jogador.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2025/10/ld58-game.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;A imagem acima mostra a versão final que fiz upload no site do Ludum Dare dentro das 48 horas. Não tive muito tempo pra balancear o jogo, então as partidas acabaram ficando mais curtas do que eu esperava se acumular muitos inimigos na tela.&lt;/p&gt;&#10;&lt;p&gt;Apesar de o resultado final ser bem mais simples do que o conceito inicial, consegui desenvolver um jogo durante o fim de semana. Por causa dos inimigos e cartas vermelhas e azuis, o nome que escolhi foi Fire &amp;amp; Ice.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Lições de uma game jam&#10; &lt;div id="lições-de-uma-game-jam" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#li%c3%a7%c3%b5es-de-uma-game-jam" aria-label="Âncora"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Depois de mais uma game jam, acho que meus conselhos e aprendizados continuam praticamente os mesmos das participações anteriores. Aqui vão algumas coisas que fiz e que funcionaram bem:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Pense em ideias de jogos com base na lista de possíveis temas antes da game jam começar.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Use uma game engine que você já conheça e tenha experiência.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Faça rascunhos da sua ideia pra ter uma visão mais clara do que vai criar.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;É normal mudar o conceito do jogo depois que começar, mas tente fechar o core loop o quanto antes pra poder melhorar o jogo a partir daí.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Exporte o jogo para web (se possível), assim outras pessoas conseguem jogar sem precisar fazer download.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;E aqui vão as coisas que fiz errado e quero evitar da próxima vez:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Ter que criar tudo do zero em 48 horas já é difícil o bastante, então fazer um jogo 3D não ajuda. Na próxima, vou ficar no 2D — é mais fácil deixar visualmente agradável e com menos problemas de colisão.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Falando em colisão, tive vários problemas que só percebi depois de enviar o jogo. Usando 2D, boa parte disso nem teria acontecido.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Como sempre, participar da game jam foi uma ótima experiência. Sou um grande fã do Ludum Dare e fico feliz de ter algo completo o suficiente pra compartilhar. Ainda estou aprendendo a fazer melhor a cada edição, e tenho certeza de que na próxima vai sair ainda melhor.&lt;/p&gt;&#10;&lt;p&gt;Você pode jogar Fire &amp;amp; Ice &lt;a href="https://ldjam.com/events/ludum-dare/58/fire-ice" target="_blank" rel="noreferrer"&gt;aqui&lt;/a&gt;. O código-fonte está disponível no meu &lt;a href="https://github.com/cicanci/game-unity-ld58" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; (um dos requisitos do modo Compo).&lt;/p&gt;&#10;&lt;p&gt;Se você perdeu esta edição do &lt;a href="https://ldjam.com/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, recomendo ficar de olho na próxima, que vai acontecer em abril de 2026.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2025/10/ld58-game.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #44</title><link>https://gamedeveloper.com.br/ludum-dare-44/</link><guid>https://gamedeveloper.com.br/ludum-dare-44/</guid><pubDate>Sat, 04 May 2019 00:00:00 +0000</pubDate><category>Jogos</category><description>Depois de não participar das últimas 3 edições do Ludum Dare, decidi tentar fazer um jogo em 48 horas na edição 44. Demorei um pouco pra pensar em uma ideia, e depois de executá-la achei que não ficou bom e decidi não terminar e publicar o jogo na página do evento.&#10;</description><content:encoded>&lt;p&gt;Depois de não participar das últimas 3 edições do &lt;a href="https://ldjam.com/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, decidi tentar fazer um jogo em 48 horas na &lt;a href="https://ldjam.com/events/ludum-dare/44/" target="_blank" rel="noreferrer"&gt;edição 44&lt;/a&gt;. Demorei um pouco pra pensar em uma ideia, e depois de executá-la achei que não ficou bom e decidi não terminar e publicar o jogo na página do evento.&lt;/p&gt;&#10;&lt;p&gt;Até tive tempo para me dedicar no jogo, e não demorei muito para achar algo que combinava com o tema &lt;em&gt;Your life is currency&lt;/em&gt; (sua vida é moeda, em tradução livre). Meu problema foi acreditar que minha primeira ideia já seria interessante e comecei a desenvolver sem pensar muito. É exatamente pra isso que serve protótipos: validar uma ideia antes de desenvolver, porém não havia muito tempo para validar uma ideia antes de fazer um jogo em 48 horas.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2019/05/ld44-design.webp" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Design"&#10; src="https://gamedeveloper.com.br/images/2019/05/ld44-design.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Minha ideia era faz um um jogo onde o jogador estava sempre atacando os inimigos, e vice-versa. Com dois botões, aumentar ataque e aumentar defesa, o jogador poderia causar mais dano ou resistir mais aos ataques do inimigo. Porém, esses upgrates lhe custariam vida, e seria necessário balançar o quanto de vida poderia ser usada para upgrades uma vez que os inimigos iriam atacar sem parar. Minha ideia era fazer algo no formato de waves, onde após derrotar alguns inimigos a vida do jogador seria restaurada para uma próxima wave - sempre com inimgos cada vez mais fortes.&lt;/p&gt;&#10;&lt;p&gt;Depois de fazer uma primeira batalha do jogador contra um inimigo achei que ficou bem chato e confuso para saber em qual momento o upgrade valeria a pena - sem falar na dificuldade absurda que seria balancear isso e não deixar o jogador apenas gastar tudo em defesa e esperar sentado as coisas acontecerem.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2019/05/ld44.gif" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Programação"&#10; src="https://gamedeveloper.com.br/images/2019/05/ld44.gif"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Decidi usar a boa e velha &lt;a href="https://unity.com/" target="_blank" rel="noreferrer"&gt;Unity&lt;/a&gt; para realmente não perder tempo relembrando ou pesquisando coisas relacionadas a uma engine ou framework durante a game jam. Apesar de não ter muitos desafios técnicos, gostei da maneira que organizei os atributos padrões do jogador e do inimigo, já pensando em variações que poderiam ser facilmente configuradas através do &lt;em&gt;ScriptableObject&lt;/em&gt; que criei. Isso também ajudou bastante para testar o balanceamento do jogador, já que seus atraibutos base estavam em um arquivo.&lt;/p&gt;&#10;&lt;p&gt;Outro destaque foi a fórmula para calcular o dano considerando a defesa. Eu pesquisei na internet mas perdi o link da fonte, porém deve ser uma fórmula bem comum para jogos de RPG: &lt;code&gt;ataqueRecebido * ataqueRecebido / (ataqueRecebido + defesa)&lt;/code&gt;. Como podem ver o no gif acima, o dano é reduzido/aumentado de acordo com os upgrades feitos no jogador. O código do projeto está disponível no &lt;a href="https://github.com/cicanci/game-unity-ld44" target="_blank" rel="noreferrer"&gt;meu GitHub&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Não cheguei tão longe para pensar na arte do jogo, mas minha ideia era fazer a base do jogo em 2D e depois mudar para 3D com cubos se atacando e usar algumas coisas como &lt;em&gt;Camera Shake&lt;/em&gt; e partículas para o feedback dos ataques dados e recebidos. Como não sou artista seria algo bem básico, e também seria meu primeiro jogo 3D em um ludum dare.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Apesar de não ter enviado o jogo para a game jam não fiquei frustrado. Pelo contrário, ao perceber que o jogo ficaria ruim e parar de trabalhar nele me poupei da frustação. Talvez desse pra pensar em outro jogo e fazer algo bem simples, mas também não queria ter esse desgaste no meu fim de semana. As vezes as coisas não dão certo, e mesmo falhar é uma grande lição para próximas vezes. Com certeza estarei mais preprado para a próxima vez, e mesmo depois de 10 participações ainda tenho muito para aprender em game jams.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2019/05/capa-ld44.webp" medium="image"/></item><item><title>Minha não participação no Ludum Dare #41</title><link>https://gamedeveloper.com.br/ludum-dare-41/</link><guid>https://gamedeveloper.com.br/ludum-dare-41/</guid><pubDate>Thu, 17 May 2018 00:00:00 +0000</pubDate><category>Jogos</category><description>Depois de 9 edições do Ludum Dare, 6 em que participei e 3 em que falhei, decidi não participar desta que seria minha décima vez. Mesmo não participando quis escrever este post sobre algumas coisas que queria compartilhar.&#10;</description><content:encoded>&lt;p&gt;Depois de 9 edições do &lt;a href="https://ldjam.com/events/ludum-dare/41/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, 6 em que participei e 3 em que falhei, decidi não participar desta que seria minha décima vez. Mesmo não participando quis escrever este post sobre algumas coisas que queria compartilhar.&lt;/p&gt;&#10;&lt;p&gt;O tema desta edição foi &lt;em&gt;Combine 2 Incompatible Genres&lt;/em&gt; (Combine 2 gêneros incompatíveis), e pelos jogos que foram desenvolvidos durante o &lt;a href="https://ldjam.com/events/ludum-dare/41/games" target="_blank" rel="noreferrer"&gt;Ludum Dare #41&lt;/a&gt; percebi que mesmo pensando em temas diferentes os participantes conseguiram criar jogos interessantes. Eu pessoalmente não acho que existam gêneros que são incompatíveis, tudo depende da ideia e da execução.&lt;/p&gt;&#10;&lt;p&gt;Nas últimas edições do Ludum Dare reparei que alguns temas as vezes se repetem durante as fases finais onde votamos em todas as sugestões, inclusive temas escolhidos em edições anteriores aparecem com a chance de se repetir em uma nova edição. Na minha opinião, temas que já foram usados deveriam ficar de fora das votações.&lt;/p&gt;&#10;&lt;p&gt;Acho que depois de tantas edições os participantes acabam sempre colocando as mesmas sugestões, então pra quem participou de algumas delas acaba percebendo que os temas repetem. Não sei se isso é algo ruim, mas acaba um pouco com a criatividade para novos temas. Sei que não combina com o formato do Ludum Dare, mas hoje eu acho que seria mais divertido se o organizado da game jam escolhesse o tema, sem votação. Acho que assim seria algo realmente diferente.&lt;/p&gt;&#10;&lt;p&gt;Faz quase 1 mês que terminou o Ludum Dare #41, mas comecei a escrever este post naquela semana e só agora voltei e terminei. Tomara que eu consiga participar da edição #42 daqui alguns meses, e que desta vez eu termine o jogo.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2018/05/ld41.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #40</title><link>https://gamedeveloper.com.br/ludum-dare-40/</link><guid>https://gamedeveloper.com.br/ludum-dare-40/</guid><pubDate>Thu, 07 Dec 2017 00:00:00 +0000</pubDate><category>Jogos</category><description>Semana passada foi a edição de número 40 do Ludum Dare, e minha nona participação nesta game jam. Repetindo meu desempenho da edição anterior, eu falhei em terminar meu jogo.&#10;</description><content:encoded>&lt;p&gt;Semana passada foi a edição de número 40 do &lt;a href="https://ldjam.com/events/ludum-dare/40/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, e minha nona participação nesta game jam. Repetindo meu desempenho da &lt;a href="https://gamedeveloper.com.br/ludum-dare-39/" &gt;edição anterior&lt;/a&gt;, eu falhei em terminar meu jogo.&lt;/p&gt;&#10;&lt;p&gt;Desta vez o tema foi &lt;em&gt;The more you have, the worse it is&lt;/em&gt; (Quanto mais você tem, pior é) e como mencionei no post anterior decidi utilizar a Unity, o que teve suas vantagens e desvantagens. &lt;a href="https://ldjam.com/events/ludum-dare/40/kings-duty/" target="_blank" rel="noreferrer"&gt;Neste link&lt;/a&gt; você pode ver detalhes sobre o meu jogo incompleto, o King's Duty. Seu código fonte no &lt;a href="https://github.com/cicanci/game-unity-ld40" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Minha ideia era fazer um jogo de gerenciamento de recursos onde o jogador tinha que controlar os recursos do seu reino para que não tivesse muito de um único tipo, o que fazia ele ter pouco dos demais e levaria seu reino ao declínio (considerando que eu tivesse acertado o balanceamento para ter esse resultado). Os recursos que defini foram Água, Comida e Ouro, sendo que esta era minha ideia inicial para a produção deles baseada na alocação de trabalhadores:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Produzir 1 unidade de água = consumia 1 unidade de comida e 1 unidade de ouro;&lt;/li&gt;&#10;&lt;li&gt;Produzir 1 unidade de comida = consumia 1 unidade de água e 1 unidade de ouro;&lt;/li&gt;&#10;&lt;li&gt;Produzir 1 unidade de água = ouro 1 unidade de água e 1 unidade de comida;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;O jogador seleciona uma célula do tabuleiro que representa o seu reino e adicionar trabalhadores para gerar o recurso que ele deseja e também para proteger seu reino dos ataques de inimigos que podem sugir ao redor do reino e tentarão destruir os recursos e as células que contem os trabalhadores. Não cheguei a pensar muito no combate, mas provavelmente faria algo simples como um inimigo seria destruído por um trabalhador, mas levaria ele junto. Se tivessem mais inimigos do que trabalhadores em uma célula, aquele local seria tomado pelo inimigo e o jogador não poderia mais colocar trabalhardores lá.&lt;/p&gt;&#10;&lt;p&gt;Não cheguei a testar se o balanceamento estava correto, mas estes eram os valores iniciais de produção. Para ajudar nisso utilizei um recurso bem legal da Unity chamado &lt;a href="https://docs.unity3d.com/Manual/UnityAnalyticsRemoteSettings.html" target="_blank" rel="noreferrer"&gt;Remote Settings&lt;/a&gt;, que fica localizado no serviço &lt;a href="https://analytics.cloud.unity3d.com/remote_settings/" target="_blank" rel="noreferrer"&gt;Unity Analytics&lt;/a&gt;. Este recurso permite criar variáveis do tipo string, int, float ou bolean e definir um valor para os tipos de build Development e Release. Quando o jogo é iniciado, é possível buscar estes valores de acordo com o tipo da build, facilitando bastante ajustar detalhes do jogo sem ter que gerar uma nova build.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2017/12/remotesettings.webp" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Remote Settings"&#10; src="https://gamedeveloper.com.br/images/2017/12/remotesettings.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;A versão gratuita da Unity já te dá acesso a isso, basta criar um projeto e habilitar o recurso de Analytics. Para este jogo decidi criar variáveis para cada recurso de valor inicial, produção por segundo e valor máximo (9 variáveis ao todo). Também criei um define para ignorar o remote settings e poder testar com valores locais, sem precisar ficar alterando os valores no site e fazer sync para aplicar. Nem preciso dizer que me empolguei tanto em brincar com isso que percebi que era algo overkill para uma game jam só depois de já gastar algum tempo nisso, mas é bem útil para jogos.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Esta foi outra parte que me fez perder tempo por que não consegui me desapegar e fazer código de qualquer jeito, então acabei pensando um pouco demais em cada linha que escrevi. Claro que não é o melhor código do mundo, mas com certeza não deveria ter perdido tempo pensando em deixar ele tão flexível. Em uma game jam de apenas 48 horas, e participando sozinho, o ideal seria pensar em fazer um código de protótipo: descartável e direto ao ponto. O código que fiz está reutilizável para eu continuar este jogo, inclusive a estrutura do projeto e dos prefabs usam algumas das melhores práticas que aprendi na &lt;a href="http://www.aquiris.com.br/" target="_blank" rel="noreferrer"&gt;Aquiris&lt;/a&gt; e que pretendo compartilhar por aqui em posts sobre Unity, &lt;a href="https://gamedeveloper.com.br/unity-melhores-praticas-1/" &gt;com este aqui&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Este foi o primeiro jogo 3D que fiz para uma game jam, o que pelo menos planejei fazer. A arte é bem simples, basicamente um tabuleiro quadrado com cubos para cada célula e cubos menores para indicar ocupações do jogador e dos inimigos. Assim como na minha participação anterior, busquei um padrão de cores para deixar o jogo com um visual legal, apesar de simples. Esta foi a &lt;a href="https://color.adobe.com/pt/The-Color-of-Traffic-color-theme-2589902/" target="_blank" rel="noreferrer"&gt;paleta de cores&lt;/a&gt; que utilizei, e buscar uma um padrão de cores tem sido uma boa prática para fazer algo simples e visualmente agradável. Não cheguei a trabalhar muito na interface, foi apenas uma área com informações e botões para adicionar trabalhadores em uma célula.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Pelo tamanho da descrição do game design da pra ver que tentei fazer algo maior do que fiz em minhas participações anteriores e, apesar de ter perdido tempo com o remote settings e escrevendo código flexível, eu acho que teria conseguido terminar pelo menos algo jogável se estivesse mais motivado. Ainda preciso resolver isso para poder participar do próximo Ludum Dare, e até avançar em meus projetos pessoais.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2017/12/ld40.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #39</title><link>https://gamedeveloper.com.br/ludum-dare-39/</link><guid>https://gamedeveloper.com.br/ludum-dare-39/</guid><pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate><category>Jogos</category><description>E chegou ao fim mais um Ludum Dare, e minha oitava participação nesta game jam teve uma novidade: eu falhei.&#10;</description><content:encoded>&lt;p&gt;E chegou ao fim mais um &lt;a href="https://ldjam.com/events/ludum-dare/39/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, e minha oitava participação nesta game jam teve uma novidade: eu falhei.&lt;/p&gt;&#10;&lt;p&gt;O tema desta edição foi &lt;em&gt;Running out of Power&lt;/em&gt; e, das opções que poderiam ter ganhado a votação para o tema, foi uma das que eu achei mais sem graça. Porém, isso não foi desculpa para eu ter falhado, e até que pensei em algo legal para fazer (se tivesse conseguido terminar).&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://ldjam.com/events/ludum-dare/39/$44698/" target="_blank" rel="noreferrer"&gt;Neste link&lt;/a&gt; você pode baixar o meu jogo incompleto para Android e MacOS, e também ver seu código fonte no &lt;a href="https://github.com/cicanci/game-corona-ld39" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2017/08/ld39-ideia.webp" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Weight of Darkness"&#10; src="https://gamedeveloper.com.br/images/2017/08/ld39-ideia.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;A ideia do jogo foi baseada na primeira parte da raid &amp;quot;Crota's End&amp;quot; do &lt;a href="https://www.destinythegame.com/br/pt/home" target="_blank" rel="noreferrer"&gt;Destiny&lt;/a&gt;, chamada &amp;quot;The Abyss&amp;quot; (vídeo abaixo). Minha ideia era ter uma caminho de cristais que escureciam a tela quando sua energia era drenada pelo jogador ficando próximo dela. Quando metade do cristal tivesse apagado, uma seta nele iria indica o caminho para o próximo cristal, até a saída da fase. Porém, uma vez que a a tela ficasse escura, ela só iria voltar a ficar clara quando o jogador chegasse no próximo crista. Isso tudo com monstros aparecendo de todos os lados. O nome do jogo, Weight of Darkness, é o nome do debuff que o jogador recebe e fica mais lento na raid do Destiny.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/UzYY2LGo8zQ" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;A mecânica era bem simples, o jogador tocaria na tela para movimentar o personagem (e a câmera acompanharia o seu movimento), e o tiro da arma seria automático. Os monstros morreriam com poucos tiros, mas viriam de todos os lados e o jogador teria apenas uma vida. Não era uma ideia totalmente original, mas foi algo dentro do tema que teria sido possível fazer.&lt;/p&gt;&#10;&lt;p&gt;Na página do jogo classifiquei ele como &amp;quot;não terminado&amp;quot;, e a versão que está lá tem apenas o motimento do personagem e o tiro automático. Também tem um monstro parado ao lado do jogador, que não faz nada mas é &amp;quot;empurrado&amp;quot; pelos tiros.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Escolhi utilizar &lt;a href="https://coronalabs.com" target="_blank" rel="noreferrer"&gt;Corona SDK&lt;/a&gt; e a linguagem de programação &lt;a href="https://www.lua.org" target="_blank" rel="noreferrer"&gt;Lua&lt;/a&gt;, que não é algo novo pra mim, mas não usava esse framework para fazer jogos há uns 4 anos. Minha participação no &lt;a href="https://gamedeveloper.com.br/ludum-dare-35/" &gt;Ludum Dare 35&lt;/a&gt; foi o jogo com o maior conteúdo que fiz em game jams, e por ter utilizado Lua e Defold dei uma chance para o Corona SDK.&lt;/p&gt;&#10;&lt;p&gt;Escolher o Corona SDK não foi uma decisão ruim, e provavelmente vou querer dar outra chance para este framework em alguma outra game jam, mas desta vez não consegui produzir algo com ele. Isto também não foi o motivo de eu ter falhado.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Acredite ou não, eu demorei mais pra desenhar os o personagem, o monstro e o cristal do que programar essa pequena parte do jogo incompleto. Uma das coisas que fiz quando comecei a arte foi pesquisar uma paleta de cores escuras, e a imagem abaixo foi uma boa escolha para o padrão de cores que eu tinha em mente para o jogo. Já fiz isso em outras participações, e ajuda bastante pessoas que não tem noção de arte (como eu) a combinar cores.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2017/08/ld39-colors.webp" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Weight of Darkness"&#10; src="https://gamedeveloper.com.br/images/2017/08/ld39-colors.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Eu até comecei bem pensando em uma ideia simples o suficiente para fazer sozinho em um fim de semana, e até a arte estava aceitável para colocar no jogo. Tinha até planejado gravar uma pequena trilha sonora com minha guitarra, algo que faz tempo que não faço em uma game jam, mas nada disso foi suficiente pra me motivar a fazer este jogo. Até tinha pensando em desistir de submeter o jogo para a modalidade de 48 horas, e deixar pra terminar na segunda-feira a noite e colocar na modalidade de 72 horas, mas não consegui e deixei o jogo marcado como &amp;quot;não terminado&amp;quot;.&lt;/p&gt;&#10;&lt;p&gt;Daqui a 4 meses será o Ludum Dare 40 e, como sempre, vou tentar participar e fazer algo legal. Minhas últimas &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;participações&lt;/a&gt; não foram tão boas como as minhas primeiras, na minha opinião. Eu sempre estou aprendendo uma lição nova a cada participação, e desta vez foi que não importa game design, arte e programação se você não esta motivado a dar o seu melhor.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2017/08/weightofdarkness1.webp" medium="image"/></item><item><title>Final Frontier: Refactoring e GitHub</title><link>https://gamedeveloper.com.br/final-frontier-refactoring/</link><guid>https://gamedeveloper.com.br/final-frontier-refactoring/</guid><pubDate>Fri, 14 Jul 2017 00:00:00 +0000</pubDate><category>Jogos</category><description>Desde o último post sobre o andamento do Final Frontier, há quase 4 meses atrás, comecei a descartar código e assets que eram temporários para o protótipo, e assim começar a desenvolver o projeto como um jogo. Naquele post falei sobre o início do GDD do projeto, que foi o primeiro passo para organizar as ideias que tenho para o jogo e comparar com o que eu testei através do protótipo.&#10;</description><content:encoded>&lt;p&gt;Desde o &lt;a href="https://gamedeveloper.com.br/final-frontier-gdd/" &gt;último post&lt;/a&gt; sobre o andamento do Final Frontier, há quase 4 meses atrás, comecei a descartar código e assets que eram temporários para o protótipo, e assim começar a desenvolver o projeto como um jogo. Naquele post falei sobre o início do GDD do projeto, que foi o primeiro passo para organizar as ideias que tenho para o jogo e comparar com o que eu testei através do protótipo.&lt;/p&gt;&#10;&lt;p&gt;Após aquele post comecei um branch novo do projeto para limpar tudo que era temporário, e até acabei adicionando um novo modelo de nave e refazendo o controle dela. Todo o resto, interface do menu e asteroides, foram removidos por que não tinham sido desenvolvidos pensando em fazer parte do jogo final.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Refactoring preguiçoso&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Como mencionei acima, a ideia do refactoring era primeiramente limpar o projeto de assets e código que eu não iria utilizar. Consegui remover quase tudo, deixei apenas algumas coisas para serem usadas como referência daqui pra frente. A estrutura do projeto foi reorganizada e escrevi um código novo para o controle da nave, que está melhor mas não com o feel que eu quero.&lt;/p&gt;&#10;&lt;p&gt;Uma das mudanças visuais foi remover o modelo de nave que estava usando por um novo, que é modular e vai permitir que eu mude as partes da nave de acordo com cada upgrade que o jogador selecionar no inventário. O novo asset pack, &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/73167" target="_blank" rel="noreferrer"&gt;Modular Spaceship 1: StarSparrow&lt;/a&gt;, também é gratuito e permite mudar partes e cores das naves. A mesma empresa que fez esse asset pack gratuito tem um outro bem maior e com mais conteúdo que é pago, o &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/81341" target="_blank" rel="noreferrer"&gt;Modular Spaceships Collection&lt;/a&gt;. Como o projeto fica em um repositótio público, não posso colocar assets pagos, mas quem sabe um dia eu não faço um repositório privado para poder colocar essas naves e lançar o jogo.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gamedeveloper.com.br/images/2017/07/ff-modular-ships.webp" &gt;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Modular Spaceship 1: StarSparrow"&#10; src="https://gamedeveloper.com.br/images/2017/07/ff-modular-ships.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Outra mudança é que o jogo agora tem 4 scenes, sendo duas antes do jogo e duas para o jogo em si. Hoje elas são apenas uma estrutura, mas que no futuro será expandida.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;scene_init: Possui scripts de sistemas que precisam ser iniciados com o jogo (ainda não está em uso)&lt;/li&gt;&#10;&lt;li&gt;scene_loading: Scene para carregamento dos assets (hoje ta com um timer fake de 3 segundos)&lt;/li&gt;&#10;&lt;li&gt;scene_ui: UI do jogo onde vão ficar elementos de interface e menu (hoje tem só o contador de FPS)&lt;/li&gt;&#10;&lt;li&gt;scene_game: Scene principal do jogo carregada junto com a UI usando &lt;a href="https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html" target="_blank" rel="noreferrer"&gt;LoadSceneMode.Additive&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Por fim, implementei um contador de frames por segundo que vi &lt;a href="http://catlikecoding.com/unity/tutorials/frames-per-second/" target="_blank" rel="noreferrer"&gt;neste tutorial&lt;/a&gt;. Achei algumas coisas bem legais nesse tutorial, como ter a separação de valor máximo, médio e mínimo da contagem de frames por segundo, e o uso de um array de strings para não fazer conversão de o valor do FPS para string em cada frame. Recomendo dar uma lida no artigo e até implementar eu um projeto, é bem útil e simples ter um contador de FPS desde o início.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Features do GitHub&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Outra novidade, que vai deixar o desenvolvimento do jogo mais organizado e fácil de acompanhar é o uso de duas features do GitHub: Pull Request (PR) e Issues. Ante seu estava trabalhando direto no branch principal do projeto, mas agora vou criar um branch separado para cada feature nova. Antes de criar o branch, vou criar um &lt;a href="https://github.com/cicanci/game-unity-ff/issues/2" target="_blank" rel="noreferrer"&gt;Issue no projeto&lt;/a&gt;, que vai servir para listar o que eu quero fazer naquela feature. Quando terminar a feature, eu &lt;a href="https://github.com/cicanci/game-unity-ff/pull/1" target="_blank" rel="noreferrer"&gt;abro um PR&lt;/a&gt; mencionando a Issue, e no PR é possível ver todos os commits e arquivos que foram modificados no branch que será/foi mergeado no branch principal. Além disso, o status da Issue pode ser acompanhado no &lt;a href="https://github.com/cicanci/game-unity-ff/projects/1" target="_blank" rel="noreferrer"&gt;board do projeto&lt;/a&gt; no GitHub também.&lt;/p&gt;&#10;&lt;p&gt;Se tudo o que eu disse no parágrafo acima não faz sentido, recomendo dar uma lida no livro &lt;a href="https://gamedeveloper.com.br/introducao-ao-github-guia-nao-tecnico/" &gt;Introdução ao GitHub: um guia que não é técnico&lt;/a&gt; e conhecer as features que o GitHub oferece para os desenvolvedores. O &lt;a href="https://github.com" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; é muito mais do que apenas um lugar para manter o repositório dos seus projetos, ele também possui ótimas features para ajudar na organização e desenvolvimento. O &lt;a href="https://bitbucket.org" target="_blank" rel="noreferrer"&gt;BitBucket&lt;/a&gt;, outro serviço para manter repositórios git, também possui algumas features similares.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximo passo&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Atualmente estou trabalhando na próxima feature, que é implementar controle da nave através de touch e testar o jogo em um Android. É uma feature simples que não deve tomar muito tempo, e a ideia daqui pra frente é justamente esta: manter tudo simples para o que projeto não fique muito tempo parado por ter uma feature longa em desenvolvimento. Diferente dos posts anteriores, onde eu adicionei o link do último commit do projeto até a data da publicação do post, a partir de agora vou sempre adicionar o link da Issue que eu criei, e nela é possível ver seu status e se já foi integrada ao branch principal. A Issue atual é &lt;a href="https://github.com/cicanci/game-unity-ff/issues/3" target="_blank" rel="noreferrer"&gt;Touch controls and Android test&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no repositório do &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; e no &lt;a href="https://github.com/cicanci/game-unity-ff/projects/1" target="_blank" rel="noreferrer"&gt;board&lt;/a&gt; do projeto. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2017/07/ff-new-ship.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #38</title><link>https://gamedeveloper.com.br/ludum-dare-38/</link><guid>https://gamedeveloper.com.br/ludum-dare-38/</guid><pubDate>Mon, 24 Apr 2017 00:00:00 +0000</pubDate><category>Jogos</category><description>No fim de semana passo aconteceu a edição número 38 da game jam Ludum Dare, comemorando seus 15 anos de existência. Desta vez o tema foi "A Small World" (um mundo pequeno), e eu tentei fazer algo não muito óbvio.&#10;</description><content:encoded>&lt;p&gt;No fim de semana passo aconteceu a edição número 38 da game jam &lt;a href="https://ldjam.com/events/ludum-dare/38/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, comemorando seus 15 anos de existência. Desta vez o tema foi &amp;quot;A Small World&amp;quot; (um mundo pequeno), e eu tentei fazer algo não muito óbvio.&lt;/p&gt;&#10;&lt;p&gt;Tive mais ou menos 4 horas para trabalhar nesse jogo, então decidi usar a &lt;a href="http://unity3d.com" target="_blank" rel="noreferrer"&gt;Unity&lt;/a&gt; para não perder tempo e focar em fazer algo dentro do tema e foco no gameplay.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://ldjam.com/events/ludum-dare/38/$23519" target="_blank" rel="noreferrer"&gt;Neste link&lt;/a&gt; você pode baixar o jogo para Android, MacOS, Linux e Windows, e também o seu código fonte.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Como tive pouco tempo para pensar em um jogo, decidi for em pensar apenas em uma mecânica que estivesse dentro do tema. Minha ideia foi fazer algo estilo faroeste onde dois pistoleiros se enfrentam em uma disputa de sacar e atirar por que o mundo é pequeno demais para ambos. Pra deixar a mecânica mais interessante o jogador só pode atirar se o inimigo estiver sacado a arma também, caso contrário não é um &amp;quot;fair play&amp;quot;. A mesma regra vale para o inimigo, que pode atirar no jogador quando ele sacar a arma. Nada muito complicado, apenas um conceito/protótipo de uma mecânica que achei interessante para o tema.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Tenho que admitir que apesar de ser um jogo simples, eu pedir um certo tempo escrevendo &amp;quot;código bonito&amp;quot;. Neste caso bonito quer dizer simples e legível, não sofisticado ou com design patterns. Não tenho muito o que falar aqui, funciona :P&lt;/p&gt;&#10;&lt;p&gt;O Unity Cloud Build funcionou muito bem para gerar as builds de Android, Windows, Linux e MacOS sem eu precisar parar para compilar o projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Não sou artista, e acho que os jogos que fiz antes com estilo pixel art ficaram mais legais, mas pelo menos consegui passar a mensagem que eu queria. Apesar de parecer bonecos de porta de banheiro com chapéu estranho, as animações simples ajudaram a deixar as ações dos personagens simples de entender. Novamente, nada complicado aqui.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Na minha participação anterior eu tive todo o fim de semana livre e não consegui fazer algo muito legal, desta vez tive bem menos tempo mas consegui focar em uma mecânica que acreditei ser um bom conceito dentro do tema. Provavelmente com mais tempo teria feito algo maior e mais polido, mantendo a base simples e talvez adicionando uma opção de multiplayer.&lt;/p&gt;&#10;&lt;p&gt;Hoje também é um dia importante para o blog, pois é seu aniversário de 8 anos! Há 8 anos atrás comecei um simples blog pessoal para contar o que eu estava começando a aprender sobre desenvolvimento de jogos, que já passou por mudanças de hospedagem e tecnologia. Essa semana vou fazer um post sobre os 8 anos de blog, mas queria deixar isso registrado aqui. Obriado por acompanhar meus posts!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2017/04/faroeste.webp" medium="image"/></item><item><title>Final Frontier: Game Design Document</title><link>https://gamedeveloper.com.br/final-frontier-gdd/</link><guid>https://gamedeveloper.com.br/final-frontier-gdd/</guid><pubDate>Thu, 30 Mar 2017 00:00:00 +0000</pubDate><category>Jogos</category><description>Estes 3 primeiros meses de 2017 foram bem parados para o blog mas logo vou voltar a postar com mais frequencia, principalmente posts sobre o andamento deste projeto (que também ficou parado nos últimos meses). Uma das coisas que deixei pendente no último post foi terminar uma primeira versão de um GDD (Game Design Document) para o projeto, com algumas informações importantes que eu tinha em um caderno.&#10;</description><content:encoded>&lt;p&gt;Estes 3 primeiros meses de 2017 foram bem parados para o blog mas logo vou voltar a postar com mais frequencia, principalmente posts sobre o andamento deste projeto (que também ficou parado nos últimos meses). Uma das coisas que deixei pendente no último post foi terminar uma primeira versão de um GDD (Game Design Document) para o projeto, com algumas informações importantes que eu tinha em um caderno.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Primeiro GDD&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Uma das coisas que deixei pendente no &lt;a href="https://gamedeveloper.com.br/final-frontier-algumas-mudancas-no-projeto/" &gt;último post&lt;/a&gt; foi terminar uma primeira versão de um GDD (Game Design Document) para o projeto, com algumas informações importantes que eu tinha em um caderno. Para manter tudo em um mesmo lugar, eu comecei o GDD em uma &lt;a href="https://github.com/cicanci/game-unity-ff/wiki/GDD" target="_blank" rel="noreferrer"&gt;wiki&lt;/a&gt; dentro do repositório do projeto no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, assim fica mais fácil para acessar do que deixar um documento público no Google Drive.&lt;/p&gt;&#10;&lt;p&gt;Um GDD não é um documento definitivo, ele costuma mudar bastante durante o desenvolvimento de um jogo. Por isso decidi escrever uma primeira versão bem básica para ter um ponto de partida, e enquanto o desenvolvimento do projeto avançar ou manter este documento atualizado. No meu caso não vale a pena ficar muito tempo escrevendo um GDD, por que eu não pensei em todo jogo ainda, mas valeu a pena passar para o arquivo minhas anotações.&lt;/p&gt;&#10;&lt;p&gt;Usei como base um modelo de GDD de 10 páginas que está no final do livro &lt;a href="https://gamedeveloper.com.br/level-up-game-design/" &gt;Level Up: Um guia para o design de grandes jogos&lt;/a&gt;, do &lt;a href="https://gamedeveloper.com.br/entrevista-scott-rogers/" &gt;Scott Rogers&lt;/a&gt;. Neste livro existe também um modelo de uma página e outro bem maior e com mais detalhes, porém achei suficiente começar me baseando no modelo intermediário. Recomendo bastante este livro de game design, o conteúdo é muito bom e ele é fácil de achar em livrarias grandes.&lt;/p&gt;&#10;&lt;p&gt;O GDD está divido em 10 partes, sendo que cada uma corresponde a uma página do modelo:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Página de título&lt;/li&gt;&#10;&lt;li&gt;História e gameplay&lt;/li&gt;&#10;&lt;li&gt;Fluxo de jogo&lt;/li&gt;&#10;&lt;li&gt;Personagens e controles&lt;/li&gt;&#10;&lt;li&gt;Conceitos de gameplay e características de plataforma&lt;/li&gt;&#10;&lt;li&gt;Mundo do jogo&lt;/li&gt;&#10;&lt;li&gt;Interface&lt;/li&gt;&#10;&lt;li&gt;Mecânicas e power-ups&lt;/li&gt;&#10;&lt;li&gt;Inimigos e bosses&lt;/li&gt;&#10;&lt;li&gt;Cutscenes, materiais bônus e concorrência&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Apesar de simples é um ótimo modelo para começar a colocar as ideias do jogo em ordem, e a partir disso é possível expandir e adicionar mais detalhes sobre o projeto. Este é o meu objetivo, porém este GDD deve ficar sem atualizações até que grande parte do conteúdo desde documento já esteja implementado no jogo. Como todo conteúdo do projeto está em inglês, e o GDD está no mesmo repositório, decidi escrever em inglês.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;De volta a Unity&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Com minhas anotações ordanizadas em um GDD chegou a hora de voltar a programar, mas com uma noção mais clara de onde quero chegar. Vou mantar as &lt;a href="https://github.com/cicanci/game-unity-ff/projects/1?fullscreen=true" target="_blank" rel="noreferrer"&gt;tarefas&lt;/a&gt; do projeto atualizadas no repositório do projeto também, mas não vou planejar com muita antecedência tudo que pretendo fazer. Pelo menos o que está em andamento e o que foi desenvolvido estarão atualizados.&lt;/p&gt;&#10;&lt;p&gt;Embora eu tenha ficado uns 4 meses sem desenvolver este projeto, isso foi algo bom por que neste período aprendi bastante coisa legal que pretendo colocar em prática. Como escrevi no post anterior devo organizar melhor o projeto para que ele não seja só um playground, e eu nem vou chamar ele de protótipo mais. Final Frontier será um jogo completo, só não sei dizer quando terminarei ou até onde quero chegar, mas espero que eu consiga mostrar seu desenvolvimento aqui no blog.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Estou ansioso para continuar este projeto e postar sobre seu progresso aqui no blog! O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/12/capa-ff-camera-big.webp" medium="image"/></item><item><title>Final Frontier: Algumas mudanças no projeto</title><link>https://gamedeveloper.com.br/final-frontier-algumas-mudancas-no-projeto/</link><guid>https://gamedeveloper.com.br/final-frontier-algumas-mudancas-no-projeto/</guid><pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Faz um mês que não escrevo sobre o andamento deste projeto por que ele está parado no momento, mas por alguns bons motivos. Agora está mais claro pra mim onde quero chegar com este projeto, e também como quero fazer isso.&#10;</description><content:encoded>&lt;p&gt;Faz um mês que não escrevo sobre o andamento deste projeto por que ele está parado no momento, mas por alguns bons motivos. Agora está mais claro pra mim onde quero chegar com este projeto, e também como quero fazer isso.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;O novo rumo do projeto&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;No &lt;a href="https://gamedeveloper.com.br/inicio-do-projeto-final-frontier/" &gt;primeiro post&lt;/a&gt; sobre este projeto eu falei de algumas referências que tinha para este projeto, e também que não sabia ao certo o que este jogo seria. Agora as coisas estão mais clara pra mim, e agora vou começar a escrever um &lt;a href="https://github.com/cicanci/game-unity-ff/wiki/GDD" target="_blank" rel="noreferrer"&gt;GDD&lt;/a&gt; com tudo que planejo fazer para uma primeira versão e organizar as &lt;a href="https://github.com/cicanci/game-unity-ff/projects/1?fullscreen=true" target="_blank" rel="noreferrer"&gt;tarefas&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Encontrei uma referência que é o gameplay que tenho em mente para este jogo, o &lt;a href="http://www.gof3manticore.com/release/" target="_blank" rel="noreferrer"&gt;Galaxy On Fire 3 - Manticore&lt;/a&gt; (vídeo abaixo). Os controles em um dispositivo móvel são muito bons, e o gameplay tem muitos elementos que eu quero colocar no meu jogo. Provavelmente esta será minha maior referência para o gameplay, assim como o &lt;a href="https://www.destinythegame.com/" target="_blank" rel="noreferrer"&gt;Destiny&lt;/a&gt; é para a interface do jogo. Pretendo fazer este jogo com as plataformas mobile e desktop em mente, então os controles precisam ser bons em qualquer lugar.&lt;/p&gt;&#10;&lt;p&gt;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/xdTP3zVbLog" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;O desenvolvimento na Unity&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Agora que eu tenho uma noção melhor do que o jogo será, não faz muito sentindo continuar com a ideia de descobrir uma mecânica em um playground. Por isso boa parte dos scripts de teste serão removidos do projeto, e tudo será refeito como um protótipo. Neste caso, não será um protótipo totalmente com um código que pode ser jogado fora, pois muitas coisas podem ser feitas de uma maneira melhor para agilizar a implementação do jogo na Unity (como utilizar prefabs sempre que possível).&lt;/p&gt;&#10;&lt;p&gt;O protótipo será algo jogável e próximo de um jogo final, porém provavelmente não terá integrações com backend, redes sociais, multiplayer, e qualquer outra coisa que tire o foco do gameplay single player. A ideia é ter algo que não precise de conexão para ser jogado, e que seja divertido por um bom tempo.&lt;/p&gt;&#10;&lt;p&gt;Quero implementar algumas coisas mais avançadas na arquitetura do jogo e explicar como estas coisas funcionam em um projeto Unity. Um exemplo disso é algo chamado dependency injection que foi utilizado no Pokemon Go através do framework &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/17758" target="_blank" rel="noreferrer"&gt;Zenject&lt;/a&gt;, como pode ser visto na palestra abaixo do Unite deste ano. Outro exemplo é o padrão de troca de mensagens e busca de serviços utilizando o framework &lt;a href="https://github.com/Claytonious/Frictionless" target="_blank" rel="noreferrer"&gt;Frictionless&lt;/a&gt;, que já está em uso no projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/8hru629dkRY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Este post foi mais um update do projeto e um pouco sobre seu rumo em 2017. Pretendo focar mais em seu desenvolvimento e tentar definir todo trabalho que será realizado para que eu possa ter uma data de término. O que vai acontecer depois eu não faço ideia, mas primeiro preciso chegar lá.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/12/capa-ff-camera-big.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #37</title><link>https://gamedeveloper.com.br/ludum-dare-37/</link><guid>https://gamedeveloper.com.br/ludum-dare-37/</guid><pubDate>Tue, 13 Dec 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Mais uma edição da game jam Ludum Dare passou, e desta vez o tema escolhido foi One Room (um quarto/espaço/local). Demorei para pensar no que fazer, e uma das opções que quase desenvolvi foi uma versão simplificada do jogo de tabuleiro Detetive em um quarto de hotel, algo meio adventure game. Como isso iria exigir mais arte do que consigo produzir (por ser programador), eu descartei a ideia.&#10;</description><content:encoded>&lt;p&gt;Mais uma edição da game jam &lt;a href="http://ludumdare.com/compo/" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt; passou, e desta vez o tema escolhido foi One Room (um quarto/espaço/local). Demorei para pensar no que fazer, e uma das opções que quase desenvolvi foi uma versão simplificada do jogo de tabuleiro Detetive em um quarto de hotel, algo meio &lt;em&gt;adventure game&lt;/em&gt;. Como isso iria exigir mais arte do que consigo produzir (por ser programador), eu descartei a ideia.&lt;/p&gt;&#10;&lt;p&gt;Com o tempo se esgotando ao meio dia do domingo decidi fazer algo simples para poder terminar um jogo nesta edição do &lt;a href="http://ludumdare.com/compo/ludum-dare-37/?action=preview&amp;amp;uid=52021" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt;, então minha ideia foi fazer um jogo onde com cavaleiro fica no centro de uma sala defendendo cookies de monstros que querem roubar. Assim nasceu o jogo monocromático &lt;em&gt;&lt;a href="http://ludumdare.com/compo/ludum-dare-37/?action=preview&amp;amp;uid=52021" target="_blank" rel="noreferrer"&gt;That's My Cookie&lt;/a&gt;&lt;/em&gt; (aquele é o meu cookie), que demorou pouco menos de 8 horas para ser produzido.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="http://ludumdare.com/compo/ludum-dare-37/?action=preview&amp;amp;uid=52021" target="_blank" rel="noreferrer"&gt;Neste link&lt;/a&gt; você pode baixar o jogo para Android, macOS e Windows, e também o seu código fonte.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/12/ld37-menu.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;A ideia era simples: uma sala, o jogador controla o cavaleiro para atacar os monstros e os monstros vão em direção ao cookie (não ao jogador). Um monstro entra na sala por uma das 4 portas e tenta ir em direção aos 3 cookies no centro da sala, e o jogador deve matar o monstro antes dele pegar o cookie.&lt;/p&gt;&#10;&lt;p&gt;Eu quiz simplificar os controles e que fosse algo simples de jogar em um dispositivo móvel, então para jogar basta clicar ou tocar na tela e o cavaleiro vai naquela direção. Para simplificar ainda mais, o cavaleiro muda para o modo ataque enquanto se move, e volta para o estado parado se o jogador não tocar na tela.&lt;/p&gt;&#10;&lt;p&gt;Quando os monstros pegarem os 3 cookies o jogo termina e a pontuação do jogador é o número de monstros que ele conseguiu matar antes de roubarem seus cookies. É um fim triste para o jogador, mas os monstros ficaram felizes com os cookies (olha a imagem da tela de game over).&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/12/ld37-gameplay.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Eu estava planejando utilizar o &lt;a href="http://www.yoyogames.com/gamemaker" target="_blank" rel="noreferrer"&gt;GameMaker&lt;/a&gt; ou a &lt;a href="https://www.garagegames.com/products/torque-2d" target="_blank" rel="noreferrer"&gt;Torque 2D&lt;/a&gt; neste Ludum Dare, porém os dois softwares funcionam apenas em Windows e no momento estou só com meu Macbook. Por isso acabei escolhendo utilizar a &lt;a href="http://www.cocos2d-x.org/" target="_blank" rel="noreferrer"&gt;cocos2d-x&lt;/a&gt; novamente e fazer o jogo em C++. Como tinha pouco tempo para fazer, já que demorei para pensar no que fazer, acabei ganhando tempo utilizando algo que eu já conhecia.&lt;/p&gt;&#10;&lt;p&gt;Fazer os monstros terem um caminho único, em direção ao cookie, facilitou bastante a programação. Não precisei me preocupar em fazer o monstro perseguir o jogador, ele apenas vai em direção ao cookie. O spawn deles também foi bem simples e eu utilizei o mesmo monstro sempre, sem precisar instanciar novos monstros todo vez que for necessário fazer ele aparecer pela porta.&lt;/p&gt;&#10;&lt;p&gt;Desta vez organizei melhor o projeto criando cenas diferentes para cada tela (início, jogo e game over) e criando classes para cada camada da tela. Tentei evitar utilizar singleton para acessar os objetos, mas não tive como fugir disso já que tinha pouco tempo e precisava de algo rápido.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/12/ld37-gameover.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Não sei explicar por que decidi fazer o jogo monocromático, mas acabei ganhando tempo não precisando pensar em cores para o jogo. O personagem tem apenas duas animações, uma parado e uma em ataque, e elas são trocadas de acordo com a ação do usuário. Na verdade nem posso chamar isso de animação, por que não utilizei uma classe de animação da cocos2d-x, são apenas dois sprites que ficam visíveis de acordo com o estado do input.&lt;/p&gt;&#10;&lt;p&gt;As telas de início e game over são duas imagens que fiz no Photoshop, não são montadas no jogo, por isso na tela de game over não aparecer a pontuação do jogador.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Não foi minha melhor participação, mas também não foi minha pior (eu acho). Além de não saber o que fazer eu estava desanimado para participar, e fiz um pouco obrigado. Tive o fim de semana todo livre, mas só comecei a fazer algo no meio dia do domingo. Provavelmente se eu estivesse motivado faria esse mesmo jogo na metade do tempo, ou usaria os dois dias para fazer um jogo maior e mais ambicioso.&lt;/p&gt;&#10;&lt;p&gt;Terminei o jogo às 19h e não queria mais trabalhar nele, fiquei mais uma hora para montar a página no Ludum Dare e gerar as builds. O prazo terminaria meia noite, mas eu não estava com vontade de continuar e nem quis fazer música ou efeitos sonoros para o jogo. Infelizmente, isso acontece.&lt;/p&gt;&#10;&lt;p&gt;O próximo Ludum Dare vai ser em comemoração aos 15 anos do game jam, e vou tentar me preparar melhor. Provavelmente usarei alguma engine que eu já conheço para tentar focar mais no game design, fazer algo mais divertido.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/12/ld37-menu.webp" medium="image"/></item><item><title>Final Frontier: Upgrades e Save Game</title><link>https://gamedeveloper.com.br/final-frontier-upgrades-e-save-game/</link><guid>https://gamedeveloper.com.br/final-frontier-upgrades-e-save-game/</guid><pubDate>Sun, 20 Nov 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Estou um pouco atrasado com este projeto, mas ele não está parado! Neste último fim de semana tive mais tempo para trabalhar no projeto, e comecei a mover algumas coisas de playground para prototype. Isto significa que a fase de experimentar coisas está chegando ao fim e que logo (eu espero!) todos os testes que fiz serão um protótipo jogável.&#10;</description><content:encoded>&lt;p&gt;Estou um pouco atrasado com este projeto, mas ele não está parado! Neste último fim de semana tive mais tempo para trabalhar no projeto, e comecei a mover algumas coisas de &lt;code&gt;playground&lt;/code&gt; para &lt;code&gt;prototype&lt;/code&gt;. Isto significa que a fase de experimentar coisas está chegando ao fim e que logo (eu espero!) todos os testes que fiz serão um protótipo jogável.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Itens de Upgrade&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Existe um recurso no Unity que eu gosto muito de usar, os &lt;a href="https://unity3d.com/pt/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects" target="_blank" rel="noreferrer"&gt;Scriptable Objects&lt;/a&gt;. Eles são arquivos para armazenar dados gerados a partir de classes que pode ter qualquer coisa, desde que seja serializado. O vídeo abaixo é um treinamento da Unity e um excelente tutorial explicando como usar este recurso, vale a pena assistir!&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/9gscwiS3xsU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;Eu fiz uma classe para definir algumas características dos itens, como ID, bonus, tipo, e outras coisas que nem sei se vou usar mas coloquei para ter mais dados para testar. Também criei uma outra classe para armazenar todos os itens, assim eu posso selecionar qualquer item a partir de algum filtro usando &lt;a href="https://msdn.microsoft.com/en-us/library/bb397906.aspx" target="_blank" rel="noreferrer"&gt;LINQ&lt;/a&gt;.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/11/item-attack.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/11/item-list.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Salvando o progresso do jogo&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Ainda é cedo para o jogo ter um progresso para ser salvo, mas comecei a construir a base para poder montar o inventário baseado em um arquivo com os dados do jogador. Fiz uma classe para armazenar as informações básicas da nave, como nível, nome e classe, e uma matrix para armazenar itens por slot (10 slots na interface com 10 itens em cada). O video abaixo, também de um treinamento da Unity, é um excelente tutorial mostrando as diferenças entre usar o &lt;code&gt;PlayerPrefs&lt;/code&gt; e serializar dados em uma classe.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/J6FfcJpbPXE" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;&lt;strong&gt;Itens na interface&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Criei um &lt;code&gt;prefab&lt;/code&gt; com apenas um texto para testar adicionar os itens carregados a partir do save game na interface. Estou armazenando o ID do item como string, e usando LINQ busco por este ID na lista de scriptable objects.&lt;/p&gt;&#10;&lt;p&gt;Eu recomendo dar uma olhada no &lt;a href="https://github.com/cicanci/game-unity-ff/tree/2de5902000b812baeefe2d1ab6a34a257c86c339" target="_blank" rel="noreferrer"&gt;código do jogo&lt;/a&gt; no projeto para ver como isto foi implementado. Lembrando que este código é apenas um teste, e ainda será melhorado. Abaixo está o resultado de carregar os itens na interface, o próximo passo é carregar mais itens em cada slot e permitir alterar o item ativo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/11/intenvario-itens.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Framework Frictioness&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;O &lt;a href="https://github.com/Claytonious/Frictionless" target="_blank" rel="noreferrer"&gt;Frictioness&lt;/a&gt; é um excelente framework para criar instâncias de classes como um serviço e enviar/receber mensagens. Por enquanto estou usando apenas o serviço &lt;code&gt;RegisterSingleton&lt;/code&gt; para criar uma instância única da classe &lt;code&gt;DataManager&lt;/code&gt;, mas em breve irei utilizar o serviço de &lt;code&gt;RouteMessage&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Utilizar o Frictioness permite implementar uma maneira melhor de compartilhar instâncias e eventos pelo projeto do que referenciar ou passar objetos como parâmetros para classes static, como um singleton padrão. Nos próximos posts vou explicar mais sobre este framework e sua implementação quando adicionar mais coisas no projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Se você olhar o &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;código&lt;/a&gt; vai ver que tudo citado neste post requer um pouco mais trabalho do que parece, principalmente por eu ter desenvolvido tudo sem uma definição clara. Agora eu que estou começando a trabalhar mais no protótipo do jogo sinto a falta de ter pelo menos um &lt;a href="https://github.com/cicanci/game-unity-ff/wiki/GDD" target="_blank" rel="noreferrer"&gt;GDD&lt;/a&gt; definindo algumas coisas básicas do jogo.&lt;/p&gt;&#10;&lt;p&gt;Outra coisa que me incomoda é o fato de eu ainda estar trabalhando na &lt;a href="https://github.com/cicanci/game-unity-ff/projects/1" target="_blank" rel="noreferrer"&gt;tarefa&lt;/a&gt; de interface do inventário. Claro que não é um inventário simples, mas gostaria de terminar isso logo e voltar ao gameplay. Provavelmente no próximo post da série devo estar próximo de terminar a mecânica básica do inventário, e vou poder integrá-lo com o jogo.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/2de5902000b812baeefe2d1ab6a34a257c86c339" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/11/inventario-itens-capa.webp" medium="image"/></item><item><title>Final Frontier: Organizando tarefas</title><link>https://gamedeveloper.com.br/final-frontier-organizando-tarefas/</link><guid>https://gamedeveloper.com.br/final-frontier-organizando-tarefas/</guid><pubDate>Fri, 04 Nov 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>No post anterior sobre o projeto houve pouco progresso por que meus dias estavam corridos, porém estas duas últimas semana foram ainda mais corridas e não conseguir trabalhar projeto na Unity, porém conseguir pelo menos organizar as tarefas do projeto.&#10;</description><content:encoded>&lt;p&gt;No &lt;a href="https://gamedeveloper.com.br/final-frontier-detalhes-do-inventario/" &gt;post anterior&lt;/a&gt; sobre o projeto houve pouco progresso por que meus dias estavam corridos, porém estas duas últimas semana foram ainda mais corridas e não conseguir trabalhar projeto na Unity, porém conseguir pelo menos organizar as tarefas do projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Organizando a casa&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Quando comecei o projeto, há 4 meses atrás, estava pensando em criar um projeto no &lt;a href="https://trello.com/" target="_blank" rel="noreferrer"&gt;trello&lt;/a&gt; para organizar as tarefas e deixar público o andamento do projeto em um board. Porém, mês passado o GitHub lançou um &lt;a href="https://techcrunch.com/2016/09/14/github-gets-built-in-project-management-tools-and-support-for-reviews/" target="_blank" rel="noreferrer"&gt;mini-trello&lt;/a&gt; para organizar tarefas de um repositório. Apesar de ser limitado, é bem útil pois cada tarefa pode ser ligada com um issue e associado a um pull request.&lt;/p&gt;&#10;&lt;p&gt;Como o repositório está no GitHub e eu pretendo usar seus recursos, como a &lt;a href="https://github.com/cicanci/game-unity-ff/wiki" target="_blank" rel="noreferrer"&gt;Wiki&lt;/a&gt; para o GDD, achei que faz sentido manter a organização de tarefas lá, assim fica tudo no mesmo lugar. Outra feature legal é que cada repositório pode ter vários projetos. Eu criei um projeto para o protótipo, depois posso criar um para bugs, releases, e qualquer outra coisa que fizer sentido.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Mini Scrum&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Estou usando alguns conceitos de scrum, embora minha sprint seja indeterminada. No board criar as colunas de To Do (o que deve ser feito na sprint), Doing (o que está sendo feito) e Done (tudo que já foi feito em todas sprints do projeto). Adicionei também uma coluna chamada Backlog onde vou colocar tarefas que ainda não estão na sprint atual, mas um dia entrarão em alguma sprint. Por enquanto tem pouco coisa lá, mas agora que tenho um lugar para organizar o projeto mais tarefas irão surgir.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/11/github-project.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/cicanci/game-unity-ff/projects/1?fullscreen=true" target="_blank" rel="noreferrer"&gt;Neste link&lt;/a&gt; você pode acompanhar o desenvolvimento do projeto. É um board básico simples, porém é o essencial para este momento do projeto. Assim ficará mais clara pra mim e para você aonde o projeto está indo, o que está sendo feito e o que será feito. Como sempre, qualquer sugestão é sempre bem vinda!&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Semana que vem vou fazer um post sobre o que fez eu não conseguir trabalhar neste projeto nas últimas duas semanas. Espero que nas próximas duas semanas eu consiga trabalhar mais neste projeto, não vejo a hora de poder ter algo jogável para compartilhar aqui.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/11/github-project-capa.webp" medium="image"/></item><item><title>Final Frontier: Detalhes do Inventário</title><link>https://gamedeveloper.com.br/final-frontier-detalhes-do-inventario/</link><guid>https://gamedeveloper.com.br/final-frontier-detalhes-do-inventario/</guid><pubDate>Wed, 19 Oct 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>No post anterior fiz o inventário expandir quando o cursor estiver em cima de um slot. Desta vez comecei a adicionar alguns detalhes visuais, além de definir o que cada coluna da interface terá em relação a nave.&#10;</description><content:encoded>&lt;p&gt;No &lt;a href="https://gamedeveloper.com.br/final-frontier-expandindo-o-inventario/" &gt;post anterior&lt;/a&gt; fiz o inventário expandir quando o cursor estiver em cima de um slot. Desta vez comecei a adicionar alguns detalhes visuais, além de definir o que cada coluna da interface terá em relação a nave.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Partes da nave&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;A coluna da direita está dividida em cinto parte: asa esquerda, asa direita, frente, corpo e motor. Cada uma destas partes formarão a nave, possibilitando diversas combinações com diferentes pedaços. Isto também possibilitará a nave ter o mesmo conjunto ou ser totalmente sem padrão. As partes terão diferentes raridades e durabilidades, como uma armadura de um jogo de RPG. Ainda falta definir muitas coisas, mas quero que isto seja customizável e colecionável.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/10/nave-partes-ui.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Upgrades da nave&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Na coluna da esquerda estarão upgrades e armas que farão a nave ter um poder ofensivo maior, uma defesa maior, uma velocidade maior, entre outras coisas. As partes da nave irão influenciar, por exemplo uma nave com partes grandes será mais lenta do que uma nave com partes menores, e o upgrade de velocidade irá afetar ambas as naves de maneiras diferentes. Ainda não defini quais serão os upgrades, mas a ideia é que cada pedaço e upgrades afetarão o gameplay de uma maneira única (e balanceada, espero!).&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Este post foi mais curto do que os anteriores, não tive muito tempo livre para trabalhar neste projeto por causa de um outro jogo que estou desenvolvendo e uma outra novidade que vou contar em outro post mais pra frente. No próximo post espero ter finalizado o básico dos upgrades para poder integrar a tela de interface no jogo e continuar o desenvolvimento do gameplay.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/d6b00065338a33fbdf1cd75843b111117fbbe05a" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/10/nave-partes-ui-capa.webp" medium="image"/></item><item><title>Final Frontier: Expandindo o Inventário</title><link>https://gamedeveloper.com.br/final-frontier-expandindo-o-inventario/</link><guid>https://gamedeveloper.com.br/final-frontier-expandindo-o-inventario/</guid><pubDate>Wed, 05 Oct 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>No post anterior demonstrei como iniciei o desenvolvimento da interface do inventário da nave, baseado na interface do jogo Destiny. O inventário ainda não, e desta vez comecei a adicionar mais funções na interface.&#10;</description><content:encoded>&lt;p&gt;No &lt;a href="https://gamedeveloper.com.br/final-frontier-interface-da-nave/" &gt;post anterior&lt;/a&gt; demonstrei como iniciei o desenvolvimento da interface do inventário da nave, baseado na interface do jogo Destiny. O inventário ainda não, e desta vez comecei a adicionar mais funções na interface.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Melhorias no inventário&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Até o último post alguns itens na interface eram apenas uma imagem estática, porém estes precisavam ser elementos de interface dinâmicos para serem modificados pelos itens colocados em cada slot. Por ser apenas um protótipo utilizei o slider da Unity para criar as barras de cada status, e no script que controla estes valores é possível modificá-los através do editor. Para exibir os controles abaixo basta adicionar &lt;code&gt;[Range(x, y)]&lt;/code&gt; acima da declaração da variável, onde x é o valor mínimo e y o valor máximo, de acordo com o tipo da variável (int, float, etc).&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/10/unity-editor-range.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Modifiquei também o movimento da interface e da nave de acordo com o movimento do cursor. No post anterior coloquei um GIF mostrado como estava funcionando, e um durante a última semana achei que estava estranho. Modifiquei o movimento para ficar limitado a área do jogo (antes estava considerando mesmo o cursor fora do jogo), adicionei limites para a movimentação e deixei o movimento no geral mais suave. Este tipo de melhoria não faz sentido em um protótipo, porém estava atrapalhando o desenvolvimento do próximo item, que era expandir cada slot para mostrar as opções dele. Ah, também mudei o nome da nave para uma do jogo &lt;a href="http://www.starrealms.com/" target="_blank" rel="noreferrer"&gt;Star Realms&lt;/a&gt;.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/10/ff-ui-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Expandindo cada slot&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Uma das features mais legais da interface do jogo Destiny é a expansão de cada slot revelando opções de armas ou armaduras para serem equipadas quando o cursor está em cima do item ativo. No caso do Destiny a solução é bem sofisticada, e inclusive possui um atrito que reduz o movimento do cursor quando ele passa por cima de um slot. No meu caso, quero algo simples e que funcione para alterar upgrades da nave no meu protótipo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/10/ff-ui-expand-right.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Utilizei os mesmos botões das colunas de slots, porém tive que reduzir seu tamanho para caber na tela. Criei um &lt;code&gt;Panel&lt;/code&gt; como &lt;code&gt;Horizontal Layout Group&lt;/code&gt; e adicionei três outros panels como &lt;code&gt;Vertical Layout Group&lt;/code&gt;, contendo três botões em cada. O resultado é um conjunto com nove items em cada slot.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/10/ff-ui-expand-left.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Esconder e exibir este panel no momento correto foi um pouco demorado, tive problemas utilizando &lt;code&gt;OnPointerExit&lt;/code&gt; para esconder o panel, pois ele deveria ficar visível quando o cursor sair do panel mas está em cima do slot. A solução final ficou no script &lt;code&gt;TestItem&lt;/code&gt;, onde na hora de esconder o panel eu verifico a direção do movimento e se ele está em cima do slot antes de esconder. Por ser um protótipo não tem problema, mas na versão final do jogo eu imagino que esta interface vai dar um bom trabalho para ficar do jeito que eu imagino.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Algumas tools para o editor&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Esta semana no &lt;a href="http://www.unity3d.com/learn/tutorials/topics/scripting/creating-basic-editor-tools" target="_blank" rel="noreferrer"&gt;Live Training&lt;/a&gt; da Unity (que acontece a cada duas semanas) o tema foi como criar ferramentas básicas para o editor da Unity. O video abaixo mostra como fazer algumas coisas básicas como converter &lt;code&gt;Texture2D&lt;/code&gt; para &lt;code&gt;Sprite&lt;/code&gt; dependendo do diretório que o arquivo for importado, selecionar objetos por &lt;code&gt;Tag&lt;/code&gt; e criar objetos de maneira mais fácil e customizável. Recomendo assistir, adicionei as tools do vídeo no projeto para ajudar no desenvolvimento.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/L24GKk1qQD4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Ainda existem muitas coisas para fazer na interface antes de voltar ao gameplay como: adicionar alguns upgrades nos slots, mudar o upgrade ativo e fazer os upgrades afetarem os status da nave (ataque, defesa, velocidade e carga). Depois disso volto a programar o gameplay e fazer estes status serem modificadores da nave durante o jogo. Também pretendo adicionar suporte ao controle do Xbox e Steam para mover o cursor, por enquanto apenas o mouse está funcionando. Além disso, preciso dar uma geral em alguns scripts que estão com código antigo comentado e alguns que nem estão sendo usados.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/cef46194d21abebb813c3a1ba590fdced552031c" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/10/ff-ui-capa.webp" medium="image"/></item><item><title>Final Frontier: Interface do inventário</title><link>https://gamedeveloper.com.br/final-frontier-interface-da-nave/</link><guid>https://gamedeveloper.com.br/final-frontier-interface-da-nave/</guid><pubDate>Wed, 21 Sep 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Os últimos posts foram sobre o desenvolvimento da mecânica do jogo, que por enquanto é apenas uma nave atirando em caixas que explodem. Este mês coloquei o gameplay um pouco de lado para trabalhar na interface de usuário (UI) do jogo, e comecei pela principal tela: upgrade e informações sobre a nave.&#10;</description><content:encoded>&lt;p&gt;Os &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;últimos posts&lt;/a&gt; foram sobre o desenvolvimento da mecânica do jogo, que por enquanto é apenas uma nave atirando em caixas que explodem. Este mês coloquei o gameplay um pouco de lado para trabalhar na interface de usuário (UI) do jogo, e comecei pela principal tela: upgrade e informações sobre a nave.&lt;/p&gt;&#10;&lt;p&gt;Quando eu penso na interface para gerenciar os upgrades da nave, na hora me vem na cabeça a interface do jogo &lt;a href="https://www.destinythegame.com" target="_blank" rel="noreferrer"&gt;Destiny&lt;/a&gt;. A ideia de usar um cursor para controlar a tela em um jogo de console foi bem arriscada, mas deu muito certo, e o melhor de tudo é que funcionaria bem em desktops. No caso de dispositivos móveis, basta remover o cursor e usar touch e drag para realizar as mesmas ações.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Inspiração para a interface&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Toda semana procuro assistir alguns videos de palestras no canal da &lt;a href="https://www.youtube.com/channel/UC0JB7TSe49lg56u6qH8y_MQ" target="_blank" rel="noreferrer"&gt;GDC no YouTube&lt;/a&gt;, e há algum tempo assisti o video abaixo, onde o designer de interface do Destiny conta como foi o processo para chegar no resultado que vemos hoje no jogo. Isto sem dúvidas me inspirou a começar a trabalhar na UI do meu jogo.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/zp4NZ8i80QI" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;A interface do jogo &lt;a href="http://www.no-mans-sky.com/" target="_blank" rel="noreferrer"&gt;No Man's Sky&lt;/a&gt; também é interessante para o que eu quero fazer, e muito similar a interface do Destiny em alguns aspectos, mas acredito que para o meu jogo não iria funcionar. Gosto da ideia de carregar alguns upgrades separados por tipo e selecionar um para ser o ativo para aquele determinado tipo, como o Destiny faz.&lt;/p&gt;&#10;&lt;p&gt;Há duas semanas a Unity lançou o video abaixo sobre criação de menus na Unity, que é algo que eu já sabia mas assisti mesmo assim por que sempre acabo aprendendo algo novo. Graças ao video descobri um novo pacote gratuito na asset store da Unity, o &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/25468" target="_blank" rel="noreferrer"&gt;Unity Samples: UI&lt;/a&gt;, que tem artes com estilo futurista para UI e combinam muito bem com a ideia do jogo.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/OWtQnZsSdEU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;&lt;strong&gt;Criando a interface&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Para não bagunçar a scene que estou usando para criar e testar o gameplay, criei uma nova scene chamada PlaygroundUI, onde comecei a trabalhar na UI para o gerenciamento de upgrades da nave. Antes de começar a criar a UI na Unity montei a imagem abaixo no Photoshop, pra ter uma noção de como ficaria antes de começar a montar direto na game engine.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-ui-test.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Importei esta imagem na Unity e comecei a montar a UI por cima dela. Esta é uma boa dica para posicionar os elementos de uma nova UI sem perder muito tempo arrastando ou calculado sua localização. É como copiar um desenho com uma outra folha por cima, facilita bastante o trabalho. Utilizei os botões do asset que baixei e deixei com a cor branca transparente para os slots de upgrade, e adicionei umas labels para o textos. Apenas os status abaixo da nave permaneceram uma imagem por enquanto. O resultado na Unity está na imagem abaixo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-ui-temp.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Com a UI pronta adicionei o modelo da nave e posicionei de uma maneira semelhante ao personagem no jogo Destiny, e coloquei um planeta bem grande atrás. Fiz um script simples para fazer o planeta girar lentamente e adicionei umas partículas do mesmo asset da UI, foram coisas simples mas que deixam o protótipo com uma cara ainda melhor.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Movimentando a interface&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Por fim, comecei a fazer a UI se mover de acordo com a direção do cursor (também igual ao Destiny). A ideia era fazer a UI seguir a direção do cursor, porém fazer a nave ir na direção oposta. Ainda não terminei, preciso encontrar os melhores valores para a movimentação, mas no git abaixo é possível ver um pouco de como está ficando.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-ui-animation.gif"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Me desculpe pelo gif horrível, é a primeira vez que tento exportar um video em gif e ficou maior do que eu esperava (3MB). Segui este &lt;a href="https://gist.github.com/dergachev/4627207" target="_blank" rel="noreferrer"&gt;tutorial&lt;/a&gt;, mas se alguém tiver uma sugestão de tool ou outra maneira de fazer isso deixe um comentário no post.&lt;/p&gt;&#10;&lt;p&gt;Para o movimento fiz um script chamado &lt;code&gt;TestInventory&lt;/code&gt; que serve para ambos &lt;code&gt;GameObject&lt;/code&gt; e &lt;code&gt;UI&lt;/code&gt;, pois cada um tem um componente diferente para controlar o movimento, &lt;code&gt;Transform&lt;/code&gt; e &lt;code&gt;RectTransform&lt;/code&gt;, respectivamente. Pelo script é possível configurar o tipo do objeto, velocidade horizontal e vertical, e se o objeto deve ir para o sentido normal ou oposto ao cursor.&lt;/p&gt;&#10;&lt;p&gt;Para a movimentação utilizei &lt;code&gt;Translate&lt;/code&gt; através de uma &lt;a href="https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html" target="_blank" rel="noreferrer"&gt;Coroutine&lt;/a&gt; quando o mouse se movimenta pela tela. Também é possível fazer a movimentação com &lt;code&gt;Lerp&lt;/code&gt;, mas optei para usar o &lt;code&gt;Translate&lt;/code&gt; no protótipo.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos Passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Acho que foi um bom início para a UI do inventário, pelo menos tenho uma ideia melhor de qual caminho seguir. A interface do Destiny é uma boa base para o meu jogo, mas é claro que ao longo do desenvolvimento vou modificar para ficar de acordo com meu jogo. Os próximos posts provavelmente serão sobre a UI, devo adicionar mais interação com o usuário e customizações nos slots. Quando estiver com o mínimo de recursos que eu preciso, vou adicioná-la na scene do jogo. Como podem ver na minha segunda lista de tarefas abaixo, agora a prioridade é a UI do jogo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-task-list-2.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/8ae4b2b4c3ff79095ef98dca22612450c1c9b870" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/09/ff-ui-capa.webp" medium="image"/></item><item><title>Final Frontier: Raycast, Spawn e MoSCoW</title><link>https://gamedeveloper.com.br/final-frontier-raycast-e-spawn/</link><guid>https://gamedeveloper.com.br/final-frontier-raycast-e-spawn/</guid><pubDate>Thu, 08 Sep 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Faz um mês desde o último post sobre o andamento deste projeto, mas ele não está parado. Mês passado teve o Ludum Dare #36 e realizei uma palestra na USP sobre Game Jams, então meu tempo livre (e os posts do blog) foram voltados a estes eventos. Agora que tudo passou, vamos voltar ao Final Frontier.&#10;</description><content:encoded>&lt;p&gt;Faz um mês desde o &lt;a href="https://gamedeveloper.com.br/final-frontier-camera-e-controle/" &gt;último post&lt;/a&gt; sobre o andamento deste projeto, mas ele não está parado. Mês passado teve o &lt;a href="https://gamedeveloper.com.br/ludum-dare-36/" &gt;Ludum Dare #36&lt;/a&gt; e realizei uma &lt;a href="https://gamedeveloper.com.br/game-jams-como-fazer-um-jogo-em-48h/" &gt;palestra na USP sobre Game Jams&lt;/a&gt;, então meu tempo livre (e os posts do blog) foram voltados a estes eventos. Agora que tudo passou, vamos voltar ao &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Desta vez vou falar sobre a substituição da colisão de objetos do tiro por Raycast, uma classe para fazer Spawn de objetos usando o design pattern Prototype e o início da organização das tarefas do projeto usando o método MoSCoW.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Substituindo colisão do tiro por Raycast&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;No último post sobre o andamento do jogo eu mencionei que iria adicionar uma mira no centro da tela para o jogador ter uma noção melhor de onde está atirando. Eu adicionei, porém o tiro ficou estranho. Como a nave está em constante movimento, o tiro (que é uma bola) estava indo bem fora da mira se a nave estivesse virando. Geralmente no início do projeto do protótipo não devemos perder tempo em melhorias, mas neste caso faria toda diferença ter um tiro mais consistente.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-shoot-1-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Por isso decidi implementar a técnica de &lt;a href="https://unity3d.com/pt/learn/tutorials/topics/physics/raycasting" target="_blank" rel="noreferrer"&gt;Raycast&lt;/a&gt; para determinar se hoje a colisão com o objeto (então explodi-lo). A Unity tem bastante coisa implementada para auxiliar no uso do Raycast, então não é algo complicado de implementar, apenas leva um tempo para ajustar. Para desenhar a linha do tiro, que seria como um laser, pesquisei como fazer e encontrei &lt;a href="https://unity3d.com/pt/learn/tutorials/lets-try/shooting-with-raycasts" target="_blank" rel="noreferrer"&gt;este excelente tutorial da Unity&lt;/a&gt; (video abaixo) que cobre também como fazer o Raycast.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/AGd16aspnPA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;O resultado final ficou muito melhor do que o tiro com as bolinhas. Não é algo final, talvez eu mude isto mesmo durante o protótipo, mas agora está mais consistente para eu poder continuar desenvolvendo o jogo, principalmente para adicionar novos objetos para serem destruídos. O video abaixo também é uma ótima referencia para o uso de Raycast na Unity.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/mpxim8YbsMk" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;&lt;strong&gt;Spawner de objetos com prototype&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Agora que o tiro está bem melhor, decidi adicionar mais objetos para o jogador atirar. Por enquanto ainda estou utilizando a mesma caixa do início do projeto, porém criei um spawn aleatório. No momento limitei para gerar 10 grupos contendo 4 caixas (2x2) ao redor da nave, em qualquer direção. Antes estava usando um grupo de 9 caixas (3x3) e o frame rate caia demais na explosão, e por ser apenas um teste não vale a pena perder tempo nisso agora, então reduzi para menos caixas (que depois vai ser um asteroide ou algum outro objeto no espaço).&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-shoot-2-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;O spawn de objetos é algo muito simples de fazer utilizando o design pattern &lt;a href="http://gameprogrammingpatterns.com/prototype.html" target="_blank" rel="noreferrer"&gt;Prototype&lt;/a&gt;, principalmente na Unity onde o protótipo é um prefab. Utilizei o mesmo conceito em alguns jogos que fiz usando Unity em dois &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Ludum Dare&lt;/a&gt;, então copiei o código de lá e adicionei ao projeto.&lt;/p&gt;&#10;&lt;p&gt;Reaproveitar código de outros projetos, mesmo classes pequenas como esta que utilizei, ajudam a ganhar tempo por dois motivos: não perder tempo escrevendo o código e não perder tempo testando o código. É sempre bom ter alguns códigos prontos e, de preferência, escritos para serem reaproveitados em diferentes projetos. Algo ainda mais sofisticado seria criar módulos ou plugins (no caso da Unity), muitas empresas fazem isto para reaproveitar códigos que podem estar em qualquer projeto. Por isso, sempre é bom seguir o princípio &lt;a href="https://gamedeveloper.com.br/mantenha-tudo-simples/" &gt;K.I.S.S.&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Método MoSCoW&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Antes de pensar em fazer um &lt;a href="https://gamedeveloper.com.br/game-design-document/" &gt;GDD&lt;/a&gt;, é legal listar algumas ideias do que será o jogo. Eu fiz uma longa lista de features que gostaria de colocar no jogo, isto não significa que estão na versão final mas serão testadas durante a fase de prototipagem. Esta lista, que podemos chamar de backlog, contém diversas tarefas que podem ser &lt;a href="https://gamedeveloper.com.br/definicao-de-prioridade-de-tarefas/" &gt;divididas em partes menores&lt;/a&gt;. É o mesmo conceito de definir as tarefas de uma sprint no &lt;a href="https://gamedeveloper.com.br/aprenda-o-que-e-scrum/" &gt;Scrum&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Mais tarde vou começar a criar o GDD na &lt;a href="https://github.com/cicanci/game-unity-ff/wiki" target="_blank" rel="noreferrer"&gt;Wiki do projeto no GitHub&lt;/a&gt;, além de fazer um controle das tarefas utilizando &lt;a href="https://trello.com/" target="_blank" rel="noreferrer"&gt;Trello&lt;/a&gt;. Mas, por enquanto, vou utilizar papel e caneta, e um método chamado &lt;a href="https://en.wikipedia.org/wiki/MoSCoW_method" target="_blank" rel="noreferrer"&gt;MoSCoW&lt;/a&gt;. Este método consiste em classificar as features ou tarefas em 4 tipos:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Must have: importante e obrigatório&lt;/li&gt;&#10;&lt;li&gt;Should have: importante, mas não necessário&lt;/li&gt;&#10;&lt;li&gt;Could have: desejável, mas não importante&lt;/li&gt;&#10;&lt;li&gt;Won't have: importante NÃO ter&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Isto é algo bem simples que ajuda a organizar a prioridade de tarefas, mas sem burocracias ou dependência de uma ferramenta específica. Apenas anote os itens em cada uma das classificações e pronto, ai está sua lista de tarefas organizada. A ideia do &amp;quot;Won't have&amp;quot; é que não se deve perder tempo com as tarefas nesta classificação. Um exemplo disso seriam tarefas relacionadas a melhorias e polimentos não necessários em um protótipo.&lt;/p&gt;&#10;&lt;p&gt;Abaixo está a lista que montei para esta primeira parte do projeto desde seu início, e o número #01 indica que é a primeira lista. &amp;quot;Nice to have&amp;quot; e &amp;quot;Good to have&amp;quot; equivalem a &amp;quot;Should have&amp;quot; e &amp;quot;Could have&amp;quot;, respectivamente, e não tem o &amp;quot;Won't have&amp;quot;. Aprendi a separar as tarefas desta maneira com um produtor quando trabalhava na EA, sem saber que isto se chamava MoSCoW (e que tinha o Won't have).&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/09/ff-tasks-01.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;No verso desta folha adicionei uma lista chamada &amp;quot;Backlog&amp;quot; para listar ideias que tive durante o desenvolvimento das tarefas, assim posso planejar a próxima lista considerando estas ideas como possíveis tarefas.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos Passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Agora que o tiro está bem melhor, e com uma mira para auxiliar sua direção, o próximo passo vai ser melhorar um pouco o movimento da nave, pois ela está saindo da tela com frequência e ficando em uma posição errada quando volta. É um detalhe que precisa ser arrumado antes de começar a pensar em adicionar features como inimigos ao protótipo. Outra coisa que quero fazer é uma interação com o planeja que está no cenário, fazendo aparecer um tela quando o jogador se aproximar do planeja e exibindo algumas ações disponíveis.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/bfd1d40aead023b34f4d908fbe034eb25101c532" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/09/ff-capa-shoot.webp" medium="image"/></item><item><title>Minha participação no Ludum Dare #36</title><link>https://gamedeveloper.com.br/ludum-dare-36/</link><guid>https://gamedeveloper.com.br/ludum-dare-36/</guid><pubDate>Tue, 30 Aug 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Pela quinta vez consecutiva participei do Ludum Dare na competição de fazer um jogo sozinho em 48 horas. Desta vez o tema era Ancient Technology (tecnologia antiga) e depois de descartar ideias relacionadas ao Egito e Idade da Pedra (que eram meio obvias para o tema), acabei lembrando de um episódio da série Vikings onde eles usavam uma pedra para achar o sol em dias nublados, e meu jogo foi baseado nisso.&#10;</description><content:encoded>&lt;p&gt;Pela quinta vez consecutiva participei do &lt;a href="http://ludumdare.com/compo/ludum-dare-36/?action=preview&amp;amp;uid=52021" target="_blank" rel="noreferrer"&gt;Ludum Dare&lt;/a&gt; na competição de fazer um jogo sozinho em 48 horas. Desta vez o tema era Ancient Technology (tecnologia antiga) e depois de descartar ideias relacionadas ao Egito e Idade da Pedra (que eram meio obvias para o tema), acabei lembrando de um episódio da série &lt;a href="http://www.imdb.com/title/tt2306299/" target="_blank" rel="noreferrer"&gt;Vikings&lt;/a&gt; onde eles usavam uma pedra para achar o sol em dias nublados, e meu jogo foi baseado nisso.&lt;/p&gt;&#10;&lt;p&gt;Antes de iniciar fiz uma pequena pesquisa para a entender como esta pedra conhecida como &lt;a href="https://en.wikipedia.org/wiki/Sunstone" target="_blank" rel="noreferrer"&gt;Sunstone&lt;/a&gt; era utilizada. Parece que não é certo que foram utilizadas historicamente, porém existem evidências que foram encontradas em navios naufragados e a região mais comum de encontrá-la é na Islândia, um lugar bem conhecido pelos Vikings. O video abaixo é um dos melhores que encontrei que explica um pouco sobre este assunto.&lt;/p&gt;&#10;&lt;iframe width="720" height="400" src="https://www.youtube.com/embed/CXu8hozezOY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;&lt;strong&gt;Game Design&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Desta vez foi a maior prioridade do meu projeto, pensar bem no game design do jogo. Depois de ficar duas horas pensando no tema e chegando na conclusão acima, fiquei mais umas 2 ou 3 horas pensando na jogabilidade. Pensei em bastante coisa para este jogo, e achei que daria para fazer tudo, mas infelizmente não deu para fazer tudo.&lt;/p&gt;&#10;&lt;p&gt;A mecânica base do jogo é você encontrar o sol movendo a Sunstone pela tela. Quando os dois pontos ficam pretos na mesma intensidade (conforme imagem abaixo), lá é onde o sol está. Além desta informação o jogo fala a posição do sol: nascendo ou se pondo. Com estas duas informações é possível encontrar a direção em que você está navegando, e é assim que se acredita que Vikings navegaram antes da invenção do compasso.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/sunstone-2.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;O jogo te dá um objetivo: ir para uma direção e uma determinada distancia do centro do mapa, que é a posição inicial do jogo. Para tornar o jogo simples eu assumi que o sol sempre nasce no LESTE e sempre se poem no OESTE. Assim, é possível saber exatamente onde fica a direção do objetivo e chegar na ilha para entregar as encomendas, ganhar 10 pontos e receber uma nova missão. Além disso, o jogador ganha um upgrade do navio, que pode ser aumentar a velocidade em 10 ou aumentar a pontuação em 1.&lt;/p&gt;&#10;&lt;p&gt;Infelizmente levei boa parte dos dois dias para programar esta mecânica e fazer a arte necessária, então o resto do jogo saiu bem diferente do que planejei. A ideia inicial era que o jogador poderia escolher qual missão queria, sendo que elas iriam variar entre perto, médio e longe, e a distancia e recompensa seriam diferentes para cada uma. Também pensei em um upgrade de carga que faria o jogador poder aceitar entregas maiores.&lt;/p&gt;&#10;&lt;p&gt;O jogo terminaria em 7 dias de trabalho, sendo que cada dia o jogador teria 12 horas para fazer as missões, que consumiriam as horas de acordo com a distância navegada. No fim, não foi possível fazer nada disso e implementei uma pontuação simples onde o jogador tem 5 minutes (300 segundos) para fazer o máximo de pontos até o tempo acabar.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/sunstone-4.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Programação&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Repeti o mesmo erro consciente de usar uma engine/framework que não uso há um tempo ou que é novo para mim. No &lt;a href="https://gamedeveloper.com.br/ludum-dare-35/" &gt;Ludum Dare anterior&lt;/a&gt; utilizei a Defold, que era nova pra mim. Desta vez utilizei uma velha conhecida, porém que não usava há alguns anos, a &lt;a href="http://www.cocos2d-x.org/" target="_blank" rel="noreferrer"&gt;Cocos2d-x&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Atualmente a Cocos2d-x está na versão 3.12, e na última vez que utilizei estava na versão 2.X. Muita coisa mudou, muita mesmo, desde nome de classes até a maneira de utilizar algumas coisas. Na época nem tinha suporte ao C++11 e hoje está presente em praticamente tudo neste framework. Acabei não tendo tempo de me atualizar, então comecei a utilizar a versão mais nova da Cocos2d-x mais ou menos do jeito que eu lembrava, e sempre que esbarrava em algo consultava a documentação online (que hoje está muito boa e completa).&lt;/p&gt;&#10;&lt;p&gt;Desta vez decidi que o foco do meu jogo seria mobile, então desenvolvi no Mac OS X usando Xcode, sempre testando no emulador e em um aparelho Android. A Cocos2d-x está muito melhor hoje, e é bem simples compilar e testar outras plataformas sem precisar abrir outra IDE ou tools utilizando a linha de comando. Devido essa facilidade, era bem rápido testar. Eu desenvolvia no Xcode e testava no emulado, mas quando necessário rodava um simples comando para fazer o deploy e testar em um aparelho Android. Depois da compilação inicial que demora alguns minutos fica bem rápido, compilando apenas as alterações no código.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/sunstone-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Nos últimos anos trabalhei muito com Unity, usando C#, e com HTML5, usando Javascript, e estava sentido falta de programar em C++. Praticamente desde a EA fechou em 2013 eu não programava em C++, e é uma sensação incrível pra mim. Vou tentar utilizar C++ com mais frequência, e também me atualizar com o C++11.&lt;/p&gt;&#10;&lt;p&gt;Este foi o primeiro Ludum Dare que utilizei um framework para fazer o jogo, sendo que nos quatro anteriores utilizei três vezes a Unity e uma vez a Defold, ambas game engines. Desenvolver um jogo sem algumas facilidades visuais que uma game engine tem dá mais trabalho, mas mesmo assim não me arrependo de ter utilizado a Cocos2d-x. Mas me arrependo de não ter utilizado algumas tools externas como &lt;a href="https://www.codeandweb.com/texturepacker" target="_blank" rel="noreferrer"&gt;TexturePacker&lt;/a&gt; e &lt;a href="http://www.mapeditor.org/" target="_blank" rel="noreferrer"&gt;Tiled&lt;/a&gt; para me ajudar no desenvolvimento.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/sunstone-3-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Arte&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Não fiquei tão feliz com a arte como na &lt;a href="https://gamedeveloper.com.br/ludum-dare-35/" &gt;minha participação anterior&lt;/a&gt;, mas mesmo assim foi muito melhor do que minhas demais participações. Mesmo sendo uma arte simples, fique feliz com o meu barco e a ilha. As nuvens foram um detalhe legal, e se você reparar elas se movem lentamente pela tela, sem tampar o campo de visão no centro da tela. Minha Sunstone ficou aceitável, porém não fazia ideia de como representá-la e esta foi minha melhor arte.&lt;/p&gt;&#10;&lt;p&gt;Infelizmente não consegui fazer música e efeitos sonoros. Esta foi a primeira vez que não coloquei nem efeitos sonoros, e a segunda vez que não coloquei música em um jogo no Ludum Dare. Acabei deixando para depois e não sobrou tempo, sendo que fiz a mecânica de pontuação na última meia hora antes das 48 horas acabarem.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/sunstone-5.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Na minha última participação fique feliz com a programação e a arte, mas deixei o game design de lado. Desta vez foquei tanto no game design que pensei em um jogo grande demais para eu fazer em 48 horas, e isso acabou afetando a arte (ficou simples e sem som) e a programação (nas últimas horas a qualidade do código ficou bem ruim). Não fiquei feliz com o resultado, mas ainda assim fiquei feliz em ter participado e pelas lições que aprendi desta vez.&lt;/p&gt;&#10;&lt;p&gt;Esta foi a primeira vez que não fiz uma build para Web, e sinceramente isto não fez falta. O jogo está funcionando bem em aparelhos Android, iOS (infelizmente não tem como colocar uma build para download, mas da pra compilar o projeto e testar), Mac e Windows (se você não viu esta build lá é por que ainda não atualizei, preciso compilar em um Windows).&lt;/p&gt;&#10;&lt;p&gt;Ainda não encontrei um equilíbrio bom entre Arte, Programação e Game Design, mas acredito que estou chegando perto de saber a dose certa de atenção que devo ter em cada área para fazer um jogo completo em 48 horas. Desta vez tive praticamente as 48 horas livres, dormi bastante de sexta pra sábado e pouco de sábado para domingo. No fim não foi um grande problema, pois mesmo com 48 horas sem dormir o jogo ainda estaria grade demais para eu fazer em 48 horas do jeito que imaginei.&lt;/p&gt;&#10;&lt;p&gt;O código do jogo está disponível no &lt;a href="https://github.com/cicanci/game-cocos2dx-ld36" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; e na &lt;a href="http://ludumdare.com/compo/ludum-dare-36/?action=preview&amp;amp;uid=52021" target="_blank" rel="noreferrer"&gt;página do jogo no Ludum Dare&lt;/a&gt; existem mais informações sobre como baixar e jogar. O próximo Ludum Dare será em dezembro e já estou bem ansioso! Talvez eu tente novamente utilizando C++, porém ainda estou em dúvida se utilizo Unreal Engine ou chuto o balde e tento fazer algo no Linux (já trabalhei usando Ubuntu e Debian para programar backend, mas nunca um jogo). Talvez eu mude de ideia até lá e utilize algo diferente, ou algo que já usei. Na verdade não sei ainda, mas já estou ansioso para a próxima vez.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/08/sunstone-3.webp" medium="image"/></item><item><title>Final Frontier: Câmera e controle</title><link>https://gamedeveloper.com.br/final-frontier-camera-e-controle/</link><guid>https://gamedeveloper.com.br/final-frontier-camera-e-controle/</guid><pubDate>Wed, 03 Aug 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>No último post deste série sobre o desenvolvimento do meu jogo Final Frontier falei sobre o novo skybox e melhorei a destruição da caixa que representa um asteroide. Desta vez trabalhei em melhorias para a câmera e o controle da nave, além de alterar novamente o skybox e adicionar um planeta.&#10;</description><content:encoded>&lt;p&gt;No último &lt;a href="https://gamedeveloper.com.br/final-frontier-skybox-e-mais-destruicao/" &gt;post&lt;/a&gt; deste série sobre o desenvolvimento do meu jogo &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt; falei sobre o novo skybox e melhorei a destruição da caixa que representa um asteroide. Desta vez trabalhei em melhorias para a câmera e o controle da nave, além de alterar novamente o skybox e adicionar um planeta.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Um planeta na galáxia&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Um skybox adiciona detalhes incríveis ao jogo, e muitas vezes o jogador não repara na arte que está acima de suas cabeças. O mapa da Lua no jogo &lt;a href="https://www.destinythegame.com/" target="_blank" rel="noreferrer"&gt;Destiny&lt;/a&gt; tem um skybox incrível, com a Terra e a ISS destruída em destaque no céu.&lt;/p&gt;&#10;&lt;p&gt;Eu decidi mudar o skybox para outra opção do mesmo asset pack, desta vez com uma névoa verde que adiciona mais detalhes. Também adicionei um novo asset pack gratuito chamado &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/38913" target="_blank" rel="noreferrer"&gt;Vast Outer Space&lt;/a&gt;, que contém modelos de planetas, asteroides e algumas partículas. Adicionei o planeta abaixo, ele parece próximo mas está bem longe e aumentei o modelo 1000 vezes. Também alterei o &lt;code&gt;Clipping Planes&lt;/code&gt; da câmera, aumentando o &lt;code&gt;Far&lt;/code&gt; para 10000, assim o planeta aparece ao fundo mesmo estando bem longe.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/planeta-novo.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Pilotando a nave&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Até então o controle da nave era algo temporário, até mesmo para um quase protótipo. Decidi pesquisar como eu gostaria que o controle da minha nave fosse, e usei como referência alguns jogos que gostava de jogar no Nintendo 64 e Playstation 2. Estava em dúvida entre: &lt;a href="https://www.youtube.com/watch?v=GhQp8le67Xo" target="_blank" rel="noreferrer"&gt;Star Fox 64&lt;/a&gt;, onde a a câmera fica fixa seguindo a nave; &lt;a href="https://www.youtube.com/watch?v=V0zjmj4rf3U" target="_blank" rel="noreferrer"&gt;Star Wars Rogue Squadron&lt;/a&gt;, onde o jogador tem mais liberdade porém com variação de zoom na nave; Star Wars Starfighter (video abaixo), onde encontrei a melhor referência para o que eu quero fazer no Final Frontier.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/fv4e_vvwY6c" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;Eu poderia modificar o código que fiz para a movimentação da nave, adicionando ainda mais linhas de código, mas decidi pesquisar outras maneiras de controlar a nave. Mesmo sendo um código temporário, muitas linhas de código podem dificultar implementar novas features, portanto decidi melhorar esta parte do código. Usei como referência o video abaixo, que ensina a fazer um jogo simples de pilotar aviões.&lt;/p&gt;&#10;&lt;iframe style="width: 100%" height="400" src="https://www.youtube.com/embed/lCulq9J0Y9E" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&#10;&lt;p&gt;O resultado final, que foi uma mistura do que eu tinha feito com novas coisas do video acima, ficou bem melhor do que eu esperava. Além dos direcionais do teclado agora também é possível controlar usando um controle conectado ao computador, testei com o Xbox 360 Controller for Windows e o Steam Controller. Para deixar o tiro mais simples e reduzir uma verificação no código adicionei o botão &lt;code&gt;space&lt;/code&gt; como um trigger para o botão &lt;code&gt;Fire1&lt;/code&gt; no &lt;code&gt;Input Manager&lt;/code&gt; (Edit &amp;gt; Project Settings &amp;gt; Input).&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/input-manager.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Câmera&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Na versão anterior do controle da nave a câmera estava dentro do prefab da nave, o que dava a impressão de uma câmera dura seguindo a nave. Como alterei o controle, foi natural também adaptar a câmera para esta nova situação. Decidi tentar usar o &lt;a href="https://docs.unity3d.com/ScriptReference/Transform.LookAt.html" target="_blank" rel="noreferrer"&gt;LookAt&lt;/a&gt; como é mostrado no video acima, mas não funcionou muito bem no meu caso, pois quando a nave dava um loop a câmera girava e ficava de cabeça para baixo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/nave-erro-camera.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Meu erro foi assumir que tudo do video acima funcionaria no meu caso, porém a câmera tem um comportamento diferente, então removi o &lt;code&gt;LookAt&lt;/code&gt; e fiz a rotação da câmera ser a mesma da nave, o que ficou exatamente como eu queria. Ajustei a distância da câmera adicionando um offset no script, assim ela ficou um pouco mais afastada, além de dar um efeito legal ao rodar o jogo (a nave sai de trás da câmera e vai para o local do offset).&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/08/ff-camera.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Agora que a movimentação da nave está melhor vou começar a trabalhar em uma mira na tela, para o jogador saber onde está atirando, e vou substituir a caixa branca por um modelo de asteroide. Provavelmente vou dar uma pesquisada em algum efeito de partícula para a nave e os tiros, substituindo as bolas brancas por algo que faça mais sentido ser atirado por uma nave no espaço.&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; e neste &lt;a href="https://github.com/cicanci/game-unity-ff/tree/3e8ab71d0ae3410b50dac9e7873c48aa0e0e0b4a" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt; você pode ver as alterações no projeto até este post. Todos os posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/08/capa-ff-camera-big.webp" medium="image"/></item><item><title>Final Frontier: Skybox e mais destruição</title><link>https://gamedeveloper.com.br/final-frontier-skybox-e-mais-destruicao/</link><guid>https://gamedeveloper.com.br/final-frontier-skybox-e-mais-destruicao/</guid><pubDate>Wed, 20 Jul 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>No post anterior sobre o meu projeto Final Frontier eu escrevi sobre como estava utilizando o playground para testar o gameplay e como fiz um modelo 3D feito no Blender ser destruído na Unity. Nest post vou falar sobre skybox e algumas melhorias que fiz para a destruição ser maior, além de outros detalhes sobre a organização do projeto na Unity.&#10;</description><content:encoded>&lt;p&gt;No &lt;a href="https://gamedeveloper.com.br/final-frontier-playground-e-destruicao/" &gt;post anterior&lt;/a&gt; sobre o meu projeto Final Frontier eu escrevi sobre como estava utilizando o playground para testar o gameplay e como fiz um modelo 3D feito no Blender ser destruído na Unity. Nest post vou falar sobre skybox e algumas melhorias que fiz para a destruição ser maior, além de outros detalhes sobre a organização do projeto na Unity.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Ao infinito e além&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Skybox_%28video_games%29" target="_blank" rel="noreferrer"&gt;Skybox&lt;/a&gt; é o nome da textura que fica no &amp;quot;fundo&amp;quot; do cenário renderizado pela câmera principal. O skybox padrão da Unity é um céu azul e um &amp;quot;chão&amp;quot; marrom no horizonte e, além de eu achar feio, este skybox padrão não combinava com meu jogo. Então, fui na &lt;a href="https://www.assetstore.unity3d.com/" target="_blank" rel="noreferrer"&gt;Asset Store&lt;/a&gt; procurar uma opção gratuita e que fizesse mais sentido e foi então que encontrei o incrível &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/3392" target="_blank" rel="noreferrer"&gt;Skybox Volume 2 (Nebula)&lt;/a&gt;!&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-skybox-1.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Esta coleção de skyboxes possui 7 opções diferentes, todas bem interessantes e muito bem detalhadas. Por enquanto vou utilizar o Stars01 (imagem acima), mas vou colocar alguns exemplos abaixo de outras opções que eu gostei. Apesar de todas opções serem bem legais é bom manter no projeto apenas as que serão utilizadas por que esta coleção tem 80MB. Por enquanto vou deixar todas, mas ao longo do projeto provavelmente vou remover as que não irei utilizar. Existem outros assets no diretório &lt;code&gt;Standard Assets&lt;/code&gt; que não estou usando e logo vou remover do projeto também.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-skybox-2.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-skybox-3.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Adicionando mais destruição&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;No post anterior eu tinha colocado apenas uma caixa que, quando o tiro colide com ela, o modelo 3D é substituído pela versão &amp;quot;destruída&amp;quot; e a física é aplicada nela para que os pedaços voem pelo ar. Desta vez decidi fazer uma parede de caixas que explode as demais quando os destroços de uma voarem após a colisão com o tiro, e o resultado fica conforme a sequencia abaixo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-antes-explosao.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-explosao.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-capa-3.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Muitos modelos 3D voando pelo cenário com física para colisão podem fazer o jogo ficar pesado. Não é o caso para o meu jogo ainda, mas quando mais objetos estiverem no cenário, mais modelos serão desenhados na tela, o que pode ser um problema para alguns aparelhos com hardware limitado. É muito cedo para se preocupar em otimizar isso, pois ainda nem sei como o jogo será, mas fiz algumas alterações para minimizar este problema.&lt;/p&gt;&#10;&lt;p&gt;O modelo do tiro e dos da caixa destruída são removidos da cena pelo método da &lt;a href="https://docs.unity3d.com/ScriptReference/Object.Destroy.html" target="_blank" rel="noreferrer"&gt;Unity&lt;/a&gt; chamado &lt;code&gt;Destroy(gameObject, timer)&lt;/code&gt;, onde o &lt;code&gt;timer&lt;/code&gt; é o tempo para que o objeto seja destruído após sua criação. Nada demais, mas já ajuda a manter a memória livre de objetos desnecessários.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Organizando a casa&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Uma das alterações que fiz, seguindo a sugestão do leitor Felipe, foi colocar os assets baixados em um diretório separado ao invés de deixá-los jogados no projeto. Não tinha feito isso antes por ter apenas o &lt;a href="https://www.assetstore.unity3d.com/en/#!/content/4392" target="_blank" rel="noreferrer"&gt;Astra Starship Fleet Package&lt;/a&gt; no projeto, mas agora com o Skybox Volume 2 (Nebula) já faz mais sentido começar a organizar melhor. Ambos assets estão na pasta &lt;code&gt;ThirdParty Assets&lt;/code&gt;, como mostra a imagem abaixo. Geralmente utilizo este nome ou algo parecido para esta pasta.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/ff-organizacao.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Outra alteração que fiz foi criar um novo prefab chamado &lt;code&gt;TestAsteroidGroup&lt;/code&gt;, e adicionei 9 caixas dentro dele para formar a parede. É sempre bom criar prefabs para agrupar objetos, mesmo sendo outros prefabs. Outro detalhe visto na imagem acima é que estou colocando prefabs e scripts em diretórios com o mesmo nome da minha cena &lt;code&gt;Playground&lt;/code&gt;. Estou fazendo isto por que quero manter tudo usado no playground separado do protótipo, mas sem a necessidade de criar um novo projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Eu mencionei no post passado mas acabei não tendo tempo de trabalhar na movimentação da nave, pelo menos não na implementação. Pesquisei algumas opções de controle e câmera, e no próximo post vou falar mais sobre isto. Se eu tiver tempo também quero começar a fazer um sistema simples de spawn para os meteoros (e talvez até achar assets para substituir as caixas).&lt;/p&gt;&#10;&lt;p&gt;O andamento do projeto pode ser conferido no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, e &lt;a href="https://github.com/cicanci/game-unity-ff/tree/8cd709c9bea93b397767636e421b7d2a4c1afce8" target="_blank" rel="noreferrer"&gt;neste link&lt;/a&gt; você pode ver as alterações no projeto até este post (também sugestão do leitor Felipe). Todos posts desta série sobre meu projeto podem ser vistos na tag &lt;a href="https://gamedeveloper.com.br/categories/jogos/" &gt;Final Frontier&lt;/a&gt;, e como sempre qualquer sugestão ou opinião é bem vinda!&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/07/ff-capa-3.webp" medium="image"/></item><item><title>Final Frontier: Playground e destruição</title><link>https://gamedeveloper.com.br/final-frontier-playground-e-destruicao/</link><guid>https://gamedeveloper.com.br/final-frontier-playground-e-destruicao/</guid><pubDate>Wed, 06 Jul 2016 00:00:00 +0000</pubDate><category>Jogos</category><description>Este é o segundo post sobre o jogo que estou desenvolvendo no meu tempo livre, o Final Frontier. Neste post vou falar sobre como estou usando o playground para descobrir a mecânica do jogo e também como fiz um modelo 3D ser destruído.&#10;</description><content:encoded>&lt;p&gt;Este é o segundo post sobre o jogo que estou desenvolvendo no meu tempo livre, o &lt;a href="https://gamedeveloper.com.br/inicio-do-projeto-final-frontier/" &gt;Final Frontier&lt;/a&gt;. Neste post vou falar sobre como estou usando o playground para descobrir a mecânica do jogo e também como fiz um modelo 3D ser destruído.&lt;/p&gt;&#10;&lt;p&gt;O jogo está em desenvolvimento publicamente no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt;, então dependendo de quando você ler este post pode ser que muita coisa tenha mudado. Mesmo assim, as dicas aqui podem ser aplicadas em seu projeto.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Como brincar no playground&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Como disse no post anterior, o &lt;a href="https://gamedeveloper.com.br/como-ser-um-programador-de-jogos-playground/" &gt;playground&lt;/a&gt; não é um &lt;a href="https://gamedeveloper.com.br/como-ser-um-programador-de-jogos-prototipos/" &gt;protótipo&lt;/a&gt;. O playground é usado para experimentar ideias, enquanto o protótipo é usado para validar o gameplay. Por isso, existem algumas boas práticas que eu gosto de seguir aqui.&lt;/p&gt;&#10;&lt;p&gt;A primeira dica é deixar bem claro o que pertence ao playground no projeto. Como o playground pode fazer parte do projeto de um protótipo ou da versão final, é comum utilizar scripts e assets de test ou finais no playground. No meu caso eu estou usando este playground antes de iniciar o desenvolvimento do protótipo, então decidi separar prefabs e scripts em uma pasta &amp;quot;Playground&amp;quot;.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/project-organization.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Os scripts estão dentro de um namespace chamado &amp;quot;Playground&amp;quot;, e quando usados exibem o log de warning abaixo. Este é uma dica que aprendi recentemente lendo a &lt;a href="https://gamedeveloper.com.br/dicas-de-john-romero/" &gt;entrevista do John Romero&lt;/a&gt;, onde ele fala que é sempre bom exibir na tela o que está acontecendo, principalmente o que não é esperado. Como este projeto deve crescer e ter muitos scripts e prefabs, eu quero ter certeza de que algum prefab com script de playground será esquecido no jogo.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/playground-warnings.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;É sempre bom criar opções para debug visual enquanto o projeto está rodando e aproveitando os recursos do editor da Unity. Na imagem abaixo eu criei um &lt;code&gt;Boolean&lt;/code&gt; chamado &lt;code&gt;cameraFollow&lt;/code&gt; que pode ser habilitado durante a execução para fazer a câmera do jogo deixar de seguir a nave. Eu não coloquei o objeto da câmera dentro da nave para que durante sua movimentação não dê a impressão ser &amp;quot;dura&amp;quot;. Isso vai fazer mais sentido quando implementar o controle completo da nave.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/spaceship-script.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Destruindo objetos 3D&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Destruição de objetos e cenário é algo que sempre quis implementar mas nunca tive uma oportunidade. Pode parecer algo muito complicado mas na verdade é simples de entender a idéia por trás. Basicamente você tem dois modelos: um normal e um &amp;quot;destruído&amp;quot;, e quando o objeto é destruído você substitui pelo modelo destruído e aplica alguma física nos destroços se necessário.&lt;/p&gt;&#10;&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://gamedeveloper.com.br/images/2016/07/blender-block.webp"&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;Como eu quero utilizar apenas ferramentas e assets gratuitos neste projeto, escolhi utilizar o blender para fazer um moledo de um cubo inteiro e um cubo destruído. O video abaixo ensina como fazer isto no blender e como adicionar a física necessária na Unity, mas basicamente você precisa aplicar &lt;code&gt;Cell Fracture&lt;/code&gt; com &lt;code&gt;Noise&lt;/code&gt; no modelo e importar na Unity adicionando um &lt;code&gt;Mesh Collider&lt;/code&gt; em cada pedaço.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Próximos passos&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Vou tentar escrever um post sobre este projeto a cada duas semanas. Como costumo publicar um post por semana vou intercalar posts sobre o andamento do projeto com o conteúdo do blog, assim consigo falar do projeto e ainda mostrar técnicas e dicas que estou usando em seu desenvolvimento.&lt;/p&gt;&#10;&lt;p&gt;Fique a vontade para baixar o projeto no &lt;a href="https://github.com/cicanci/game-unity-ff" target="_blank" rel="noreferrer"&gt;GitHub&lt;/a&gt; e comentar aqui no post suas opiniões e sugestões. Para o próximo post pretendo implementar o controle da nave, spawn de asteroides pelo caminho e mais alguns detalhes no playground. Embora demore duas semanas para eu publicar o próximo post, você pode acompanhar meu trabalho no jogo pelo GitHub, pois sempre que possível vou trabalhar neste projeto durante a semana.&lt;/p&gt;</content:encoded><media:content url="https://gamedeveloper.com.br/images/2016/07/ff-prototype-2.webp" medium="image"/></item></channel></rss>