sábado, 25 de julho de 2020

Um jogo simples em Unreal C++

Nos artigos da Parte I vamos programar um jogo para ver os conceitos de Unreal C++ na prática. Será o mesmo jogo de coletar estátuas que criei para os meus tutoriais de Blueprints, assim você poderá comparar as implementações feitas em Blueprints e em C++. 

O jogo é baseado no modelo Third Person da Unreal Engine. Existem algumas modificações que fiz no jogo para a implementação em C++, mas o resultado final do jogo será semelhante à versão em Blueprint. Esta é uma imagem do jogo:



As regras do jogo são as seguintes:
  • O jogador precisa coletar os itens que aparecem no cenário antes do tempo acabar.
  • O tempo inicial é de 30 segundos.
  • O jogo acaba quando o tempo esgotar.
  • A cada 5 itens coletados, o nível do jogador aumenta e é adicionado 15 segundos ao tempo.
  • O nível do jogador começa em 1 e o nível máximo que o jogador pode alcançar é o nível 5.
  • Os itens espalhados no cenário mudam de posição periodicamente.
  • Quando um item aparece em uma posição, ele ficará lá por um período de tempo que depende do nível do jogador. O número de segundos para um item mudar de posição é o resultado da expressão 6 - Nível do Jogador. Por exemplo, se o nível do jogador for 2 então o item ficará em uma posição por 4 segundos (6 - 2).
  • Quando o jogador pega um item, outro é criado em uma posição  aleatória.
  • Os pontos que o jogador recebe ao coletar um item é calculado pela expressão 10 X Nível do Jogador. Por exemplo, no nível do jogador 3, cada item valerá 30 pontos (10 X 3).
  • Os valores de tempo, pontos e nível do jogador serão desenhados na tela.


O jogo utiliza quatro classes C++ que são as seguintes:

  • TutoProjectGameMode: Esta classe controla o estado do jogo e mantém algumas variáveis, como as que são usadas para tempo, pontos e nível do jogador.
  • TutoProjectCollectable: É uma classe do tipo Actor que representa o item que pode ser coletado pelo jogador. Ela checa a colisão com o jogador e possui a lógica para mudar sua posição periodicamente. 
  • TutoProjectCharacter: Classe que representa o jogador e é parte do modelo de projeto Third Person.
  • TutoProjectHUD: Classe responsável por desenhar os valores de tempo, pontos e nível do jogador na tela.

Além das classes C++, será criado um Blueprint usando como classe pai a classe C++ TutoProjectCollectable.

O jogo foi feito utilizando a Unreal Engine versão 4.25. O projeto com código fonte está disponível neste link:

Ao abrir o projeto pela primeira vez, aparecerá uma mensagem perguntando se deseja fazer o rebuild dos módulos. Clique no botão Sim.