Sistema de diálogos no Unity

Muito bem, no vídeo abaixo eu mostro brevemente o funcionamento de um sisteminha de diálogos que eu fiz para usar no Unity. A ideia desse sistema é permitir mostrar pro jogador uma sequência de falas para contar uma história. Por enquanto, é possível apenas exibir um texto sequencial, não há interação do jogador (exceto pela opção de acelerar o texto) nem múltiplos caminhos. Como bifurcações na história não é algo que eu preciso por agora, não devo implementar essa funcionalidade tão cedo, mas é algo que pode ser interessante de mexer no futuro.

No mais, o sistema também permite configurar diversos parâmetros nos blocos de texto pra obter diferentes resultados em diferentes situações (além de diálogos, eu também pretendo usar isto para exibir textos de ajuda nos menus do jogo). Entre os parâmetros disponíveis, é possível ativar/desativar a quebra automática de linhas (que move para linha seguinte quando o limite de caracteres ou a largura máxima estoura) e também um limite de linhas exibidas simultaneamente. Também é possível configurar o alinhamento do texto (esquerda, direita ou centralizado), a velocidade do rolamento e se os blocos de texto devem avançar automaticamente depois de um tempo ou não (com esta opção desligada, o jogador precisa apertar um botão para prosseguir, como em vários RPGs antigos).

Para dar mais dinamismo e poder ser usado em uma cutscene, por exemplo, é possível mover o texto pela tela. Usando o método Camera.WorldToScreenPoint, é bem simples de atrelar a posição de um texto na tela à de um objeto na cena (em 2D ou 3D) e fazer o texto seguir um personagem ou algo do tipo.

Adicionando buracos de bala em um FPS

Continuando na minha demo de FPS, implementei dessa vez marcas de bala nas paredes e portas.

A marca de bala é feita com um objeto texturizado e pra posicionar no cenário eu uso o resultado do raycast do Unity, que retorna o objeto interceptado, o ponto de interseção e a normal naquele ponto. Com esses dados, eu posiciono a marca de forma que ela fique na frente do objeto acertado.

Como uma forma de otimização, as marcas de bala são guardadas em uma lista que pode ter seu tamanho máximo configurado para qualquer valor. Quando o tamanho máximo for atingido, os objetos mais antigos são destruídos liberando memória. Dessa forma, é possível gerar marcas de bala no cenário sem se preocupar em ter estouro de memória e problemas de desempenho.

No vídeo abaixo tem uma demonstração dessa nova função, com os buracos de bala sendo gerados nas superfícies atingidas por tiros e sendo removidos quando o tamanho máximo da lista é atingido. Pra deixar a demonstração mais fácil, eu limitei a cinco itens o máximo da lista, mas esse valor pode ser bem maior.

 

Estou disponibilizando também a demo atualizada aqui: FPS Demo.

Vídeo da demo de FPS no Unity

Conforme eu comentei antes, estou fazendo uma demo de um FPS no estilo dos primeiros jogos do gênero. A ideia é usar essa demo pra estudar algumas coisas sobre desenvolvimento de jogos e Unity, ter mais um item pra adicionar no portfólio e, quem sabe, transformá-lo em algo que as pessoas realmente queiram jogar.

Mas vamos fazer uma coisa por vez. Por hora, deixo vocês com um vídeo da fase demo que montei até agora. Nessa fase, há um contador de tempo disparado ao pisar sobre a faixa de largada e inimigos aparecem no cenário bloqueando as portas até chegar na faixa de chegada, onde o tempo para de correr. Quem se interessar, pode jogar aqui: FPS Demo.