Skip to content

Histórico de Desenvolvimento

Felipe edited this page Nov 26, 2022 · 20 revisions

Essa página é atualizada a cada modificação e atualização do projeto. Ela serve principalmente para manter registrado todas as adições e modificações que forem sendo realizadas, assim como créditos necessários, para me facilitar de escrever o relatório de projeto no futuro.

0 - Mecânicas base

Busca pelo tutorial certo

Para o projeto funcionar, ele precisa basicamente de um mapa (a praça) em que o usuário consegue colocar e mover itens por ali (o mobiliário urbano). A ideia original era entregar apenas um protótipo para essa disciplina, porém um protótipo no Figma não permite que a principal interação ocorra: o usuário não seria capaz de efetivamente colocar os itens onde ele quisesse no mapa, apenas onde o mobiliário já estivessem definidos previamente no protótipo. O plano então partiu para desenvolver em Unity o programa, considerando que eu já tinha alguma experiência prévia com ele, mas não muito extensa. O problema, então, era desenvolver um programa de considerável complexidade sem ter muito conhecimento de programação; a solução veio de um tipo de jogo que, a primeira vista, parece bastante diferente: os Tower Defense.

Tower Defense é uma categoria de jogos em que o jogador precisa posicionar várias torres no mapa, que atiram nos inimigos que estão um caminho entre elas, tentando a todo custo atravessar o mapa completo. Por mais que a temática de guerra seja muito diferente do proposto nesse projeto, a base do gameplay é bem similar: ambos os jogos possuem um mapa e itens que você deve posicionar nele. O plano então, para contornar minha falta de conhecimento técnico para programar esse projeto, foi de utilizar tutoriais gratuitos de Tower Defense disponíveis na internet e modificá-los, colocando itens de mobiliário urbano no lugar das armas e o mapa das praças no lugar de um campo de batalha.

O primeiro tutorial considerado foi a cena de exemplo da própria Unity, usada pela empresa para mostrar do que a game engine é capaz. Esse template, por ser usado pela própria empresa como exemplo, é complexo demais, apresentando efeitos e mecânicas muito elaboradas que seriam muito difíceis de polir e reduzir para usar nesse projeto.

Encontrei então, nas minhas pesquisas, um tutorial que prometia ser ainda melhor do que os de Tower Defense, um guia para construir um simples construtor de cidades no Unity. Comecei a acompanhar então a série de vídeos do canal Sunny Valley Studios, porém esse guia também acabou sendo deixado de lado. A maneira como o código ia sendo construído era muito matemática, se utilizando demasiadamente de contas e cálculos fora do meu nível de compreensão para cumprir as tarefas básicas. Sem entender o código não seria possível editá-lo posteriormente, então voltei para a busca por um novo tutorial na internet.

Primeiro conceito

Foi aí que encontrei a série de vídeos How to make a Tower Defense in Unity (2021) do canal Rytech. Esse vídeo possuía de cara uma vantagem grande em relação aos outros dois, que era a maneira como os elementos são posicionados no mapa. Enquanto que todos os outros guias e vídeos que eu encontrei se utilizavam de um grid fixo, em que o jogador precisava posicionar seus itens em uma tabela de quadradinhos pré-definidos, nesse vídeo os objetos são colocados de forma livre pelo mapa, abrindo muito mais opções e maneiras de posicionamento do mobiliário. Além disso, por mais que o código não seja simples, ele é escrito de uma maneira que, pessoalmente, eu achei muito mais compreensível, o que possibilita que edições sejam feitas no futuro para transformar esse Tower Defense no editor de praças desejado.

Depois de alguns dias, o tutorial foi concluído. Eu segui do vídeo todos os trechos sobre a edição e posicionamento de itens no mapa, enquanto ignorei os vídeos sobre armas, inimigos e combate, já que esses não são usados no projeto. No fim, o programa ficou assim:

Cheguei então a uma etapa em que era possível mover a câmera pelo ambiente e posicionar os itens em qualquer lugar disponível do mapa, sendo o posicionamento bloqueado se o item estiver sobre um caminho ou sobre outro objeto colocado anteriormente.

image Vídeo: https://user-images.githubusercontent.com/47862856/187093543-41407d9b-74b6-4d2d-9cb8-a542bdd8f604.mp4

Mudança para a praça real

Com a interação base funcionando em um cenário fictício, o desenvolvimento partiu então para o uso do cenário real, a praça Barão de Corumbá, na plataforma. Para isso, foi utilizada a primeira metade do tutorial em vídeo Create any City in Blender in 20 Minutes, do canal CG Geek. Nele, utilizando os dados do Open Street Map por meio de serviços como o Mapbox, foi gerado um clone do relevo e de alguns prédios da região selecionada. O primeiro problema encontrado foi que diversos prédios estão faltando, deixando vazios no mapa, e os que foram importados possuem geometria muito simples e erros na altura. Esses detalhes vão ser corrigidos mais para frente do projeto, já que por enquanto a proposta é apenas validar as mecânicas básicas do sistema.

As ferramentas do teste anterior foram replicadas aqui, e com uma praça moldada no Blender, o mesmo sistema funciona agora em uma mini cópia virtual da região da Tijuca:

image Vídeo: https://user-images.githubusercontent.com/47862856/187093559-42a0c4cb-9c6d-4a2e-9e74-4cd813e69b56.mp4


Recomeço de novo

Por mais que o tutorial anterior parecesse promissor, ele trabalhava apenas a movimentação e posicionamento dos objetos no cenário e nada além. Com o andamento do desenvolvimento, percebi uma série de funções que a plataforma precisaria ter, como mover ou deletar um objeto já posicionado, rotacionar os elementos, movimentação da câmera, dentre outras questões. Foi aí que encontrei ao acaso, enquanto navegava na internet por lazer, um diferente tutorial, que cobria todas essas questões e ainda adicionava outras: o vídeo How to make a simple BUILDING SYSTEM in Unity C#! do canal Ludorem Studios.

Ao concluir a série de três tutoriais, possuía uma cópia exata do projeto desenvolvido no guia do canal. Nele é possível adicionar e mover os objetos, selecionar aqueles já posicionados, adicionando uma linha branca ao redor para destacar, e rotacionar os itens.

Screenshot_20220904-142520_rePraa Screenshot_20220904-142527_rePraa
Mapa para posicionamento de objetos Menu de seleção de um objeto

Ida à praça 2

Seguindo o mesmo processo da versão anterior, o passo seguinte foi novamente mudar a ambientação do projeto para a praça escolhida.

Screenshot_20220904-140946_rePraa Screenshot_20220904-140955_rePraa
Mapa alterado para a praça real Menu de seleção da gangorra

Vídeo: https://user-images.githubusercontent.com/47862856/189159277-7fce7f5b-7d98-4455-8e06-c34db2aa7946.mp4

Adição do mobiliário

Screenshot_20220905-190546_rePraa Screenshot_20220905-190600_rePraa
Adição de outras peças do mobiliário Menu de seleção do poste

Teste do menu móvel

Screenshot_20220908-075852_rePraa

Screenshot_20220908-080005_rePraa Screenshot_20220908-080018_rePraa
Menu móvel próximo do objeto selecionado Menu longe do objeto pelo zoom da câmera alterado

Vídeo: https://user-images.githubusercontent.com/47862856/189159293-48e13b44-661f-480f-9fa0-9cdb851003cc.mp4

Mudanças na interface

Screenshot_20220908-105413_rePraa Screenshot_20220908-142941_rePraa
Menu de objetos e seleção movido e reorganizados Objeto banco adicionado junto da nova interface

Lançamento da versão 0.0.1-alpha: https://github.com/Feliperpvieira/rePraca/releases/tag/v0.0.1-alpha

Praça com jardim

Screenshot_20220919-124613_rePraa Screenshot_20220909-221418_rePraa
Praça com jardim nas proporções reais Praça e jardim ocupados com móveis

Movimento da câmera com objetos

Até agora não era possível mover a câmera enquanto movia um objeto, pois o deslize do dedo para arrastar o objeto de um ponto a outro acabava movimentando a câmera no sentido oposto. O código foi então modificado e agora possui 2 diferentes formas de movimentação: a tradicional, que ocorre quando não há nenhum objeto sendo movido e funciona pelo arrastar do dedo na tela; e a nova maneira, que ocorre quando você movimenta um objeto. Nela, a câmera se movimenta de acordo com o canto da tela que o seu dedo está, ou seja, se você estiver arrastando o dedo para o topo da tela, a câmera irá se mover para o topo.

Vídeo: https://user-images.githubusercontent.com/47862856/191061107-463cd800-689d-4b63-8a02-3d5a779afb82.mp4

1 - Interface

Com as principais mecânicas da base da plataforma já funcionais, foi hora de partir para a melhoria da interface e parte gráfica do aplicativo.

Ícones por palavras

Screenshot_20220919-125052_rePraa Screenshot_20220919-125057_rePraa
Botão de informação e edição ao selecionar objeto Botões para remover, girar e posicionar objetos

A lista de objetos para serem posicionados foi movido para dentro do botão "Objetos +" no topo da tela. Essa tela ainda está em estágio primário:

Screenshot_20220919-125104_rePraa

Botões de sistema X objetos

A interface passou por novas mudanças. A tipografia foi alterada para Cabin e o botão de Adicionar + objetos foi movido para o canto inferior direito, abrindo o espaço no topo da tela para os botões de status do sistema: informações, dia e noite, ângulo de câmera e concluir.

image

A tela de adicionar objetos sofreu leves ajustes e agora possui um scroll horizontal. Ela ainda está longe de concluída.

image

Ângulo de câmera

O botão de alterar ângulo de câmera agora está funcional e varia a visão entre topo (90⁰) e inclinado (40⁰)

Vídeo: https://user-images.githubusercontent.com/47862856/195900306-30e7eba7-e35f-40c1-951e-05aee2913237.mp4

Novos objetos

Escorrega e bicicletário em U invertido adicionados

image

Atualizado para Android Adaptive Icons

icon antes icon depois
Antes Depois

O ícone agora é construído por um ícone em primeiro plano e um fundo atrás, separados, que são montados pelo Android

3-mesa 3-fundo
Ícone Fundo

Dia e noite, Noite e dia

image image
Dia Noite
Vídeo: https://youtu.be/02aII1p8VhA

Ficha de informações

Screenshot_20221027-094544_rePraa Screenshot_20221027-094557_rePraa Vídeo: https://youtu.be/2DXhBzQ76hg

Ajuste posterior:

Screenshot_20221103-124849_rePraa

Captura da praça

Screenshot_20221103-124857_rePraa

Tela reformulada posteriormente: Screenshot_20221125-173609_rePraa

Informações da praça

Screenshot_20221106-134308_rePraa

Adição do menu: Screenshot_20221125-175121_rePraa

Guia de ajuda

Screenshot_20221125-175132_rePraa

Novos objetos

Screenshot_20221106-173632_rePraa

Splash screen refeita

Screenshot_20221125-173457_rePraa

Tela inicial

Screenshot_20221125-173503_rePraa

Ainda mais objetos

Screenshot_20221125-180213_rePraa

v0.2.0-beta lançada https://github.com/Feliperpvieira/rePraca/releases/tag/v0.2.0-beta

Vídeo: https://youtu.be/WHm0KwVIdy4?list=PLVfOx-8w-BCbejEK0nGP93X7UIQ96n0Fp