Criando um FPS old school no Unity

Um dia desses ouvindo o 99 Vidas sobre Doom, Quake e Duke Nuken bateu aquela vontade de implementar um jogo nesse estilo, só pela diversão! Ontem resolvi pegar o Unity e ver o que dava pra fazer. Nesse post vou mostrar um pouco do que implementei de ontem pra hoje.

A ideia inicial é implementar um FPS usando as mecânicas desses jogos antigos. Sendo assim, a principal diferença em relação à maioria dos FPS do mundo é a ausência de mira no mouse. Aqui só é possível mirar no eixo horizontal. Eu fiz isso por dois motivos: pra manter um estilo parecido com o Doom original e porque pretendo, no futuro, aproveitar essa base em um jogo de iPhone (pelo que eu andei vendo, jogos em primeira pessoa funcionam mais ou menos bem no iPhone usando esse estilo de controle – vide Wolfenstein 3D).

A programação foi toda feita por mim, não usei nenhum script pronto. Pra arte, eu usei algumas texturas do Doom (retiradas principalmente deste site), a arma é do Duke Nuken 3D e os sons eu arrumei por aí – isso não é importante.

Bem, e o quê tem no jogo? Resumidamente, eis a lista das funções implementadas:

  • Controle do personagem em primeira pessoa: o personagem anda para frente e para trás, esquerda e direita, e pode girar ao redor do eixo Y para ambos os lados também;
  • Função de tiro: uso o raycast do Unity pra testar se os tiros acertaram os NPCs da cena (usando uma layer específica pra isso, garantindo que o raio não vai ser testado contra todos os objetos da cena);
  • Animação de tiro: eu fiz a animação de tiro usando aquele meu componente de sprite 2D. A arma não é um objeto 3D, mas sim uma imagem chapada na tela que é animada quadro a quadro quando um tiro é disparado;
  • Morte dos NPCs: quando um tiro acerta um NPC, este recebe um dano e desaparece da cena quando sua energia e zerada;
  • Apresentação dos NPCs: nessa versão, os NPCs aparecem como aquelas placas de estandes de tiro. Quando o jogador entra em um trigger, os NPCs associados ao trigger são ativados;
  • Diferentes tipos de porta: as portas no jogo impedem o progresso do jogador. Eu programei três tipos de porta. A normal é aberta quando o jogador se aproxima e entra no seu trigger. A porta com chave funciona da mesma forma, mas exige que o jogador tenha a chave da mesma cor no seu inventario. Por fim, tem umas portas que se abrem somente quando todos os NPCs da área foram mortos;
  • Chaves e inventario: por hora, o inventário serve só pra guardar as chaves que o jogador coletou. O inventario é consultado nas portas que exigem uma chave pra abrir. A chave tem um script fica rotacionando o objeto, pra dar um efeito visual melhor;
  • Cronômetro: na demo que eu montei, o objetivo é alcançar o final da fase no menor tempo possível. A contagem de tempo se inicia quando o jogador entra no trigger de início do cronômetro e termina quando ele toca o trigger de final.

Devido ao tempo de desenvolvimento bem curto (foram 24 horas corridas, mas nesse meio tempo eu parei pra fazer várias outras coisas, dormi, vim de Niterói pra Teresópolis…) e à falta de planejamento (fui implementando as funções conforme ia pensando em coisas interessantes pra fazer, ao invés de planejar tudo antes), até que o resultado ficou legal. A ideia agora é fazer uma fase mais elaborada e adicionar NPCs com inteligência artificial. Tem ainda muitas funções pra implementar, como uso de múltiplas armas, munição limitada e controle de energia do jogador. Mais pra frente também pretendo fazer uns testes com multiplayer.

Quem se interessar, pode testar o jogo diretamente no navegador através desse link: FPS Demo. Os controles são:

  • W, S: para para frente/para trás;
  • A, D: vira para esquerda/direita;
  • Q, E: anda para esquerda/direita;
  • Espaço: atira;
  • Shift esquerdo (segurando): corre.
Bookmark the permalink.

3 Comments

  1. Maneiro Diego! Parabéns!

  2. Pingback: Vídeo da demo de FPS no Unity » Diego Barboza

Comments are closed