1. Grupo:

  • Denise Calsavara Paiva de Oliveira 0040451221026
  • Claudio Neco 0040441223021
  • Falzer Gabriel Pires Francisco 0040451221028
  • Luciano Nunes de Almeida 0040441023019

2. Dispositivo:

  • Android

3. Projeto:

  • Global Warming

4. Resumo:

  • O projeto propõe um jogo para Android no estilo runner, onde o personagem corre indefinidamente desviando de obstaculos e conseguindo bônus para facilitar a trajetória. A visão será estilo plataforma porém não pretende ser completamente 2D, e sim utilizar modelos 3D.
  • A história mostra o um personagem fugindo do aquecimento global. O personagem encontra-se em um determinado ambiente e sua temperatura aumenta conforme o tempo até chegar em uma determinada temperatura que o personagem morre. Isso pode ser evitado recolhendo os bônus que aparecem ao longo da tragetória devolver a vida ao personagem.

5. Software utilizado:


6. Metodologia:

Para ter uma base na confecção do jogo, o grupo pretende utilizar um tutorial de Unity de um jogo estilo runner encontrado no site Cat Like Coding. Nesse tutorial algumas funções da mecânica do jogo já estão em funcionamento porém pretende-se mudar certas funcionalidades, como a velocidade do personagem, que no tutorial ele ganha aceleração com os pulos, contudo, no começo a velocidade é tão baixa que é comum o cubo cair entre os espaços da plataforma. É necessário que sua aceleração seja constante e que seja alterada quando o personagem encosta em determinadas plataformas que podem reduzir sua velocidade.

O tutorial possui somente um boost, que é um pulo extra quando o personagem já está no ar. Pretende-se inserir um novo boost que faz com que sua temperatura diminua.

As plataformas do tutorial são geradas pelo código porém o calculo de sua altura faz com que elas sejam geradas em alturas muito próximas uma da outra fazendo com que o jogo fique muito monótomo pois dependendo da velocidade do personagem ele consegue pular várias plataformas em um único pulo.

O fundo também é gerado pro código, que aleatoriamente escolhe dimensões para um cubo grande. Pelo fato de o jogo se passar em abientes frios, pretende-se fazer com que o fundo fique menos quadrado, pois da forma que se encontra no tutorial, parecem mais prédios do que montanhas.

O Blender será utilizado para modelagem do personagem de principal e para criação das plataformas, porém pretende-se utilizar o máximo possível de funções que já estão no próprio Unity para não precisar exportar os modelos do Blender para o Unity.

Um jogo precisa também ter uma trilha sonora bem como efeitos sonoros para cada situação. Para isso pretende-se utilizar o Audacity e o VirtualDJ.

O maior desafio é fazer um jogo em 3D para Android que não fique pesado e consiga funcionar com fluidez em um celular.

7. Desenvolvimento


No decorrer do trabalho o grupo resolveu mudar o estilo do jogo. Pretendia-se antes desenvolver utilizando elementos 3D, porém utilizou-se elementos 2D. Foi também alterado o projeto de personagem de um cubo para uma gota, criada no Photoshop e em 2D.

Ao invés de utilizar o tutorial Cat Like Coding, como mencionado acima, utilizou-se o tutorial em 2D, o 2D Infinite Runner.

Através deste tutorial alterou-se alguns elementos para que se adequasse aos objetivos do grupo. O robô foi substituído pelo sprite de uma gota, que inicialmente seria uma gota apenas com pés, porém o grupo optou por fazê-la humanóide, com braços, pernas, tronco e cabeça, em forma de gota e ainda após essa versão humanóide chegou-se na versão final, parecida com a primeira.

O jogo portanto é uma gota que foge do aquecimento global em uma cidade claramente poluída. Ao longo de sua trajetória, sua barra de vida vai diminuindo conforme o tempo e se essa barra ficar vazia, o personagem morre. As pequenas gotas que aparecem servem para recuperar um pouco de sua vida, daí a importância de coletá-las. O jogador também perde se o personagem cair em um buraco ou se esbarrar nas barreiras, como antenas, ar-condicionados, caixa d'água e etc.

7.1 Conceito do Personagem

Inicialmente o o personagem seria um cubo de gelo. Porém logo em seguida foi alterado para uma gota, sendo sua primeira versão, contendo somente a cabeça e pés, sendo sua animação feita no próprio Unity, conforme imagem abaixo:
gotinha.png
Personagem Versão 1

A segunda ideia foi fazer a gotinha com mais membros para que seus movimentos se tornassem mais fluidos. Resolveu-se então fazer braços, pernas, cabeças e tronco.mas a animação seria feita frame por frame:
141_01_gota_humanoide.png
Personagem Versão 2

E por último, chegou-se na versão final do personagem, que agora é próximo da primeira versão, porém tem mãos também:


141_01_gota_versao_final.png
Personagem Versão Final

7.2 Música e efeitos sonoros

O software Audacity foi utilizado para selecionar os trechos que melhor atendiam ao proposito do jogo. Com o mesmo foi feito o corte de trechos da música.
O Software VirtualDJ foi utilizado para remixar as partes selecionadas, fazendo com que a música adquirisse uma melhor imersão ao ambiente do jogo.
A Trilha sonora do jogo foi baseada na música Axel F de Harold Faltermeyer. A música foi selecionada, pois ela se encaixa ao clima apresentado no jogo, em que o personagem está em um ambiente urbano.
Os efeitos sonoros foram encontrados no site: Freesfx e SoundBible e foram editados através do VirtualDJ fazendo com que os mesmos se encaixassem melhor com o jogo.

7.3 Geradores e destruidores


O projeto acabou sendo reformado por completo. Na versão em 3D existia um script que calculava o local que seria gerado a próxima plataforma, contudo na versão 2D, existem geradores de plataforma, que no caso do Global Warming, são as casas. Esses geradores são simplesmente um objeto qualquer (um plano) que é colocado em determinados locais da tela e em uma determinada quantia de tempo, esses objetos chamam as casas aleatoriamente. Para isso é atrelado a esse objeto um script de gerador.

A figura abaixo é o objeto gerador de plataformas (casas). Cada elemento é um grupo de casas. Ao gerar a próxima plataforma, o script seleciona qual dos quadros vão ser inseridos.
141_01_gerador_casas.png

Da mesma forma também funciona os power up que aparecem ao longo da corrida para que o personagem os colete fazendo assim com que sua vida aumente, evitando sua morte.
Assim como existe o gerador, existe também um destruidor, pois ao passo que o personagem avança na tela, os objetos pelos quais ele já passou precisam ser apagados da memória para que não sobrecarregue o aparelho. Para isso o princípio é parecido com os geradores. Ha um objeto, um plano, que possui uma caixa de colisão. O objeto possui um trigger, ou seja, quando algo colide com sua caixa de colisão ele executa uma determinada ação. Para o caso do destruidor, ele apaga tudo o que enconstar. Devido a esse princípio foram criados 2 destruidores, um ficando na vertical, que apaga as plataformas, e outro ficando na horizontal, abaixo das casas, assim quando o personagem cair no vão entre duas plataformas, encosta neste destruidor destruindo então o personagem, fazendo com que o jogo termine.

7.4 Animação
A animação do personagem é feita utilizando a máquina de estados. Apesar de ter o estado Idle, o mesmo não é utilizado pelo motivo de o jogo ser do tipo Runner, ou seja, o personagem está sempre movimentando-se para frente e nunca pára.

É possível notar também que existe os estados walk, crounch e crounchwalk, também nenhum desses estados são utilizados. Os estados que possuem uma animação são run e jumpGota.
141_01_state_machine.png
Máquina de estados


É notável que o personagem possui o pulo e o pulo duplo, ou seja, pode pular uma segunda vez enquanto estiver no primeiro pulo. A cada update é verificado se o personagem está tocando no chão, sendo portanto, só possível pular se o personagem estiver no chão ou se aquele for o primeiro pulo. No momento do pulo, a variável booleana que verifica se o personagem está no chão, torna-se falsa.

7.5 Scroll Background

Para que o background se mova, foi utilizado o desenho como sendo a textura da forma geométrica plano. Essa forma foi posicionada na cena e vinculada à ela um script que fizesse a forma mover-se. O background portanto, possui um atributo chamado speed (velocidade). A função scrollBackground é chamada na função update, portanto a cada update, a sua posição é calculada somente no eixo x através da multiplicação do atributo velocidade com o tempo.

É possível notar que o as montanhas movem-se em uma velocidade e os prédios em outra. Isso se deve ao fato de cada background ser uma forma geométrica planar e possuir um valor diferente no atributo speed.

7.6 Start e Game Over

Cada cena possui um numero de nível. Esse número serve para identificar cada cena quando o script precisar chamá-las. É assim que funciona o inicio. A função start chama a função que carrega o nível passando como parâmetro o número 1, que é o menu principal. Na figura abaixo é possível notar que a cena1 é o nível 0, ou seja quando o jogador acionar o botão jogar, o script irá utilizar a função loadLevel passando como parâmetro o número 0. Por sua vez, quando o personagem morre, ou seja, quando o personagem colide com o destruidor, a função que carrega o nível irá chamar a cena de game over passando como parâmetro o número 2.

141_01_build_settings.png
Level numbers

Considerações Finais

Considerando que para o grupo esse foi o primeiro jogo desenvolvido, várias dificuldades que de início pareciam impossíveis foram superadas através de exaustivas pesquisas na internet, fórum sobre jogos, fóruns oficiais ou não do Unity e principalmente, através de tutoriais.

O grupo chegou à conclusão de que é possível desenvolver um jogo completamente funcional e com boa aparência em um curto período de tempo se as tarefas forem bem distribuídas e bem executadas pelos integrantes.

Apesar disso não houve tempo hábil para fazer mais fases e fazer um melhor polimento, porém para lançá-lo oficialmente, o grupo pretende implementar fases diferentes, acrescentar conquistas que podem ser acumuladas pelo jogador e adicionar detalhes menos perceptíveis mas que podem fazer diferença na percepção de imersão do jogador.