ZIM - Prototipando a idéia
Autor: Márcio Freitas | Publicado: 2012-04-27T12:46:00-07:00



Faz pouco mais de 20 dias que comecei um projeto pessoal
chamado "Zim".

Como de praxe, fiquei obcecado pelo projeto que acabou
tomando (com muito prazer) todo o meu tempo livre, e tem sido um ótimo
exercício de programação e game design.


Conceitos básicos do jogo

Zim é um puzzle game jogo em terceira pessoa sendo desenvolvido sobre Uity3D/C# onde o
personagem utilizaria algumas poucas habilidades especiais para concluir cada
fase.



Decidir quais habilidades o personagem teria, foi um
exercício de game design bem interessante, simplesmente por que é difícil
descartar boas idéias. Durante esta etapa, me pareceu que muitas habilidades
deixaria o jogador confuso. por isso acabei limitando todas as (centenas) de
possibilidades a apenas 3:



Um lançador de gel vermelho: O gel repele tudo que toca,
logo, pisar no gel, impulsionaria o personagem para cima.
Um lançador de óleo: Enquanto estiver sobre o óleo, o
personagem correria mais rápido. Quanto mais longo o caminho com óleo, maior a
velocidade que o personagem poderia atingir.
&nbsp;Uma "arma magnética", que poderia segurar
objetos e arremessá-los.




Com as habilidades definidas ficou claro também algumas coisas divertidas que poderiam ser feitas. Com o gel por exemplo poderíamos alcançar plataformas mais altas:








E com o óleo seria possível ganhar velocidade para vencer obstáculos:





E como o personagem estaria constantemente saltando de um lado para o outro, ficou óbvio que precisava de algum desafio enquanto estivesse "solto no ar" e a idéia mais simples foi um jato de vapor que empurrasse o jogador impedindo-o de aterrissar onde planejava





No caso da arma magnética, seria utilizada para mover todo tipo de plataformas e &nbsp;posicionar objetos em posições específicas como uma bateria num slot ou lançar um objeto contra um inimigo.



Prototipando - Gel, Óleo e Controles

O primeiro teste foi usando o FirstPersonCharacterController da Unity3D mas logo ficou claro que para atingir os efeitos de física do gel e do óleo precisaria escrever um controlador de personagem totalmente baseado em física, onde o personagem fosse um RigidBody. &nbsp;



Com o controlador do personagem funcionando, restou fazer a lógica do gel e do óleo. Ambos afetam o vetor velocity de todo RigidBody em que tocam, sempre considerando as normais e a direção do movimento. O resultado é impulso e aceleração instantâneo!

O primeiro resultado satisfatório ficou assim:








Neste ponto a mecânica básica estava funcionando mas o óleo não poderia ser aquela "geléia" azul!

Decidi fazê-lo como um decalque, ou seja, um plano com uma imagem alinhado a superfície. Entretanto isso trouxe problemas, já que as vezes o decalque extrapolava as bordas da face onde havia sido aplicado. Algo parecido com a imagem ao lado.





Por simplicidade, decidi não apelar pra uma engine de decalques e contornar o problema alterando os Bounds do decalque no momento em que era aplicado. Apesar de ter restrições a solução funcionou muito bem. Com o problema do decalque solucionado, o óleo estava de cara nova. Nas imagens abaixo, da pra ver o óleo aplicado bem perto das bordas da rampa sem extrapolar os limites.











&nbsp;Prototipando - Câmera Orbital, Câmera Fixa e desobstrução do campo de visão
Fiz os primeiros testes com perspectiva de primeira pessoa, mas a intenção é criar um game em terceira pessoa, então passo seguinte foi criar uma câmera orbital de terceira pessoa e um sistema para esmaecer objetos que se obstruem a visão do jogador. Além disso criei regiões onde a câmera estaria fixa num ponto específico, dando um ar mais dramático a cena. Note que ainda não tenho um modelo decente para o personagem, por isso nos vídeos a seguir o personagem será representado com uma cápsula, apenas para termos idéia das dimensões do personagem final.





Prototipando - Jato de vapor, e Sentinelas
Quase todo livro de game design que já li, &nbsp;começou tentando definir o que é "divertitdo" e por que as pessoas jogam. E um dos fatores que sempre está presente nas definições dadas é o desafio.
Por isso a etapa seguinte, foi incluir alguns obstáculos. De início teremos 2 tipos de obstáculos:


Jatos de vapor
Sentinelas


Os jatos de vapor&nbsp;são emitidos por tubos de metal espalhados pela fase. Conforme havia planejado os jatos de vapor empurram o personagem impedindo e atrapalhando a sua trajetória.

O sistema dos jatos foi feito para ser simples de ser adicionado na fase. A quantidade de jatos, &nbsp;intervalo entre eles, a duração e força do jato são configurados direto no editor.


&nbsp;Apesar de serem primariamente um obstáculo do jogo, também se mostraram bons efeitos decorativos para a fase







Enquanto os&nbsp;jatos de vapor&nbsp;são&nbsp;intermitentes e causem pouco dano por si só, os Sentinelas&nbsp;são fachos contínuos de laser letais para o jogador. Os lasers permanecem na mesma posição patrulhando seu derredor mas travará a mira no jogador caso cruze seu facho. Alguns segundos sob a mira dos lasers é suficiente para reduzir seu life a zero.

Apesar do laser só poder mirar em uma direção, certas superfícies podem refleti-lo, criando obstáculos dinâmicos (e mortais mua-ha-ha!!)





















Prototipando&nbsp;- Juntando tudo
No final da criação dos lasers, já tinha elementos suficientes para arriscar projetar um level de testes unindo tudo que foi desenvolvido até o momento mais algumas outras features essenciais como checkpoints e pickups.&nbsp;E o resultado é esse:



Conclusão

Muita coisa ainda precisa ser feita, desenvolvida e até mesmo revista, mas estou bastante satisfeito com o resultado. Farei um novo post tão logo tenha boas novidades para mostrar.&nbsp;



Até!