142.06.+Decode+Hunters

=**Membros do grupo:**=


 * Felipe Augusto Masteguim Bedana 0040961313011
 * Guilherme Celestino de Lima 0040961313018
 * Igor Matheus de Castro Santana 0040961313020
 * Rachel Barato Gama 0040961313033

= Dispositivo = Os dispositivos a quais o projeto será disponibilizado serão //smartphones// com sistema operacional Android.

= Projeto = O projeto consiste em um jogo de nome //Padawan's Quest//, onde o jogador controla uma pessoa presa em um labirinto e deve encontrar a saída. Os movimentos do personagem serão feitos através de setas na tela do dispositivo.

= Resumo = O jogo desenvolvido no projeto consiste em um personagem preso em um labirinto, sem memória, e precisa descobrir porque está ali e como pode sair. Nessa jornada o jogador enfrenta desafios propostos por quem seja que o colocou ali para achar uma maneira de sair do labirinto. No decorrer do jogo, o protagonista descobre que é um jovem //padawan//, que teve suas memórias bloqueadas para ser testado no labirinto, onde ele reaprende os ensinamentos da Ordem Jedi. O jogo é um //first person// de exploração e //puzzle,// e seus controles consistem em controlar o personagem na área demarcada do lado esquerdo, enquanto a área demarcada do lado direito se controla a câmera (onde também com dois toques na tela o personagem pula), além de um botão de ação.

=Software/Materiais Utilizados= São utilizados no projeto os seguintes softwares/materiais:


 * Unity4**: Unity é um ecossistema de desenvolvimento de jogos criado pela Unity Technologies: um mecanismo de renderização totalmente integrado com um conjunto de ferramentas para criar conteúdos interativos em 3D e 2D. O motor cresceu a partir de uma adição de um suporte para a plataforma Mac OS X e depois se tornou um motor multi-plataforma. Esta poderosa engine possui uma estrutura robusta porém descomplicada, possibilitando a criação de diversos cenários e efeitos com poucos cliques. Sua interface é WYSIWYG (what you see is what you get, ou em português, o que você vê é o que possui). Permitindo uma visualização prévia e precisa do visual e funções finais do game. Os //GameObjects// (objetos do jogo) são a entidade central do Unity, pois representam tudo que existe no cenário e agrupa entidades de uma mesma hierarquia (desta forma se uma move-se, todas movem-se, etc.). //GameObjects// são criados através de componentes que possuem as mais diversas funções, tais como física (controla movimentação), translação (controla a posição do objeto), renderização (desenha os objetos na tela).


 * [|Blender 3D]:** Blender é um programa de computador de código aberto, desenvolvido pela Blender Foundation, para modelagem, animação, texturização, composição, renderização, edição de vídeo e criação de aplicações interativas em 3D, tais como jogos, apresentações e outros, através de seu motor de jogo integrado, o Blender Game Engine.


 * Photoshop CS5:** O Photoshop é o software de desenho e edição de imagens mais conhecido do mundo, desenvolvido pela Adobe. Permite manipulação de imagens em nível profissional, e é utilizado em todo tipo de uso: desenho vetorial, manipulação de fotos, efeitos especiais, etc. A versão CS5 foi lançada em 2010, trazendo novos recursos ao conhecido programa.

=Metodologia= O aprendizado necessário para a confecção do jogo é feito através de video-tutorias de jogos em Unity no canal do //youtube// Games Indie, os vídeos tutoriais do próprio site da Unity e vídeus aula no youtube sobre Blender.

=Desenvolvimento=

**O começo:**
Logo de início tivemos um grande choque de realidade. Não tínhamos ideia de como começar pois ninguém de nosso grupo havia mexido mais do que colocar um quadrado na tela com o Unity. Então começamos bem básico, desde colocar um terreno e um cubo no cenário. Até ai tudo bem, tudo muito fácil, então procuramos como fazer aquele cubo se movimentar e acabamos trombando com os scripts. Aprendemos a usar os Inputs do teclado para fazer o pequeno cubo a se movimentar pra frente e com isso os movimentos de Translação e Transformação dos Objetos. No final da primeira fase de nosso aprendizado para realmente começar a tentar desenvolver o projeto ficou algo assim:

Android:
Então pensamos, agora podemos ver como funciona no celular! Não havia comandos Inputs para se usar no celular. Tudo teria de ser programado... Seguimos então aprendendo os comandos para de usar no celular e o que funciona ou não nos dispositivos Mobile. Havia uma limitação muito grande se comparado com a versão PC. Acabamos utilizando o First Person Controls do Unity que já vem pré-pronto com os toques de movimento e editamos seu script para atender as necessidades. Ao acabar essa fase de teste, tínhamos movimentos tridimensionais incluindo o pulo e um botão de usar que ao chegar num ponto X e o ativar ele abria um portão. Esta fase acabou formando esta interface:

Desenvolvendo o projeto final
A partir deste ponto cada um do grupo ficou responsável por uma parte: Criar os modelos do labirinto, os scripts, montar o cenário, adaptação dos scripts para mobile. Enfim, foi um trabalho árduo até conseguir deixar tudo montado. Desenvolvimento dos scripts (agradecimentos especiais ao Victor Alcântara que tem muito mais conhecimento em Unity e nos ajudou a fazê-los.

Implementação do Labirinto + Câmaras:



Detalhes Adicionais:
Mesmo "acabando" o labirinto e o teletransporte para os puzzles tinha algo a ser feito. O jogo só podia ser fechado através do botão de fechar tarefa no celular. O jogo precisava de um menu! Mais várias horas de tutoriais no youtube e finalmente acabou assim: Menu

Créditos

Tecnologias aplicadas no desenvolvimento do jogo:
Mais especificamente, as tecnologias utilizas para o projeto foram:


 * Simulação de dinâmica dos corpos rígidos:** Os objetos movem-se em um cenário 3D, de acordo com as leis da física (força, gravidade, impulso, etc.) e rotacionam de forma realista. Um exemplo desta tecnologia é o cubo movido por telecinese.

//Ambient:// é a luz que ilumina o objeto por inteiro //Diffuse:// é a luz que ilumina o objeto de acordo com a direção do ponto do triângulo ao ponto de luz. A fórmula da luz diffuse pega o vetor normal do triângulo e o vetor normalizado do ponto do triângulo à luz e tira o cosseno entre eles. Depois multiplica este cosseno pela cor do pixel. //Specular:// o componente //specular// adiciona uma camada de realismo à cena, mostrando fortes reflexos da luz quando olhado por um ângulo de 45º desfazendo-se ao mudar de ângulo.
 * Simulação de iluminação:** Utilizando uma técnica de renderização conhecida por forward rendering, o sistema de renderização calcula quais triângulos são atingidos pelas luzes e utilizando o modelo de ilumanição de Pong. Este modelo divide o material (a “cor” do triângulo) em, normalmente, três componentes: //ambient//, //diffuse// e //specular.//

A engine Unity permite uma personalização extensa de tal recurso, oferecendo opções para mudar velocidade, cor, tempo de vida, tamanho, etc. das patículas. Este efeito está presente sempre que o jogador sai de um teletransporte.
 * Efeito de partículas:** Os efeitos de partículas aumentam o realismo do jogo criando bolhas, faíscas, gotas d’água, etc.


 * //Lens Flare://** O efeito de Lens Flare busca simular o efeito do olho humano ao olhar diretamente para um forte ponto de luz, produzindo feixes e “bolhas”, conforme o exemplo abaixo:

No jogo, tal efeito está presente em menor intensidade em quase todas as fontes de luz.


 * Scripting:** Talvez a ferramenta mais poderosa do Unity, a capacidade de criar scripts permite à equipe de desenvolvimento criar funcionalidades novas e relacionar as entidades de forma não previstas pela equipe de desenvolvimento da engine. A Unity suporta várias linguagens como C#, Javascript, Ruby, etc. O jogo utiliza scripts para tudo, desde movimentos da câmera até o abrir de uma porta.

Desenvolvendo o cenário principal: o labirinto
O jogo acontece todo em um grande labirinto, que pode ser dividido em três labirintos menores e um ponto final, todos conectados. Para a criação deste cenário utilizando o Blender foi necessário primeiramente gerar os mapas pelo aplicativo //online// "Maze Generator". Com os labirintos gerados, foi sobreposta a imagem dos mesmos e feito um labirinto direto no Blender, como pode ser visto nas imagens a seguir.





Feito os labirintos foram necessárias modificações para que os três pudessem se juntar, formando um único cenário principal. Quando tudo esta va pronto foi só expandir verticalmente o cenário para que ele se tornasse 3D, conforme ilustra a seguinte imagem:



Como o labirinto foi totalmente desenhado no Blender e só depois exportado ao Unity, o programa não era capaz de reconhecer a textura ou de aplicar a colisão do objeto corretamente. Foi preciso voltar ao Blender, reestruturar algumas partes do labirinto, tornando suas paredes sólidas, e fazer o mapeamento da estrutura, concertando e rotacionando partes que estavam mapeadas incorretamente. Após o mapeamento e aplicação da textura, era necessário transferi-lo novamente para o Unity, mas os bugs de colisões ainda aconteciam. Voltando ao Blender, foi aplicada a física diretamente por lá e tornada toda a estrutura sólida, o que corrigiu os erros e proporcionou o sucesso da operação.

=Resultados=

O resultado não foi o esperado por conta de vários impedimentos existentes nas ferramentas utilizadas e bugs encontrados no decorrer do desenvolvimento. Por causa do amadorismo do grupo e a falta de experiência, houve uma impossibilidade de corrigir os bugs em um curto espaço de tempo, além do nível de dificuldade encontrado em desenvolver scripts para um jogo de plataforma Android. Porém o resultado final ainda pode ser considerado satisfatório, uma vez que o jogo funciona com sucesso nos celulares, embora não completo.

=Conclusão=

Com o trabalho desenvolvido foi possível chegar a conclusão que a criação de um jogo, mesmo com a ajuda de diferentes softwares, principalmente engines, pode ser complicada por diversos fatores, exigindo foco, gestão de tempo, conhecimento e principalmente, trabalho em equipe. Saber dividir o trabalho, confiar nos colegas, gerir o tempo, dedicar um bom tempo aos estudos da engine e ajudar uns aos outros foi essencial. Por isso o desenvolvimento deve ser um trabalho em grupo, sempre agindo em conjunto e sintonia para obter o melhor resultado possível.