Tutorial Space Shooter Godot: Áudio, Efeitos Sonoros e Publicação - Parte 10
Aprenda a criar um jogo Space Shooter de forma simples e prática com a Godot. Aprenda as funcionalidades da Engine e faça seu jogo um sucesso.
E estamos chegando ao nosso último post meus amigos. Hoje vamos incluir as músicas e efeitos sonoros no nosso jogo. Também vou explicar rapidamente como exportar o seu jogo para Web, isto é bastante útil para Game Jam's ou para tornar seu jogo mais acessível à todos.
Antes de começar, deixa eu retomar os ítens que planejamos no início da nossa jornada para vermos o que mudou ao longo destes 2 meses de trabalho:
- Será um jogo no estilo Space Shooter Infinito onde o jogador tem como objetivo matar naves inimigas para ganhar pontos; - ✔
- Terá um fundo em Parallax ambientando o jogador no espaço sideral; - ✔
- Deve ter mais de um tipo de inimigo e eles devem ser gerados de forma aleatória, tanto em relação à tempo quanto ao tipo; - ✔
- As naves do player e inimigos devem apresentar feedback visual e sonoro quando atingidas; - ✔ (hoje faremos o feedback sonoro)
- O jogo deve ter um menu de entrada, tela de game over, permitir pausar e retomar o jogo; - ✔ (parcial, não incluímos pause)
- A pontuação e energia do jogador deve ser apresentada constantemente na tela e atualizada conforme os eventos do jogo. - ✔
Nem todos os ítens foram feitos 100%, mas como eu falei lá no começo é importante se permitir mudar de direção ao longo do caminho, não ficar preso à definições iniciais mas sim ter uma linha guia e se adaptar conforme a vontade.
Enfim, tá na hora de começarmos a brincadeira, então segurem-se em suas poltronas, aqueçam os motores e bora fechar a série com chave de ouro, né?
Passo 12 - Áudio e Efeitos Sonoros
Adicionaremos trilhas sonoras e efeitos sonoros espaciais para dar vida à aventura estelar.
Vamos definir a lista de áudios diferentes que temos que ter em nosso jogo:
- Música de background para o jogo;
- Efeito sonoro de tiro laser;
- Efeito sonoro de explosão do inimigo;
- Efeito sonoro de explosão da nave de jogador;
- Efeito sonoro de colisão com o escudo;
- Efeitos sonoros dos botões na tela inicial e de game over;
Olhando para a lista, percebemos que há dois tipos diferentes de sons, um que deve ser constante e em loop (música de background) e os outros que são de execução única por evento. Vou explicar como fazer os dois tipos com exemplos, mas sugiro que você faça a configuração de todos os sons do seu jogo e não apenas os que vou indicar.
Vamos começar adicionando aos assets do nosso jogo os áudios que vamos usar. A música de background eu baixei lá no site do OpenGameArt.com, os sons de laser eu vou usar dos assets do Kenney mesmo.
Para tentar deixar um pouquinho mais organizado, criei uma sub pasta Audio dentro da pasta de assets, desse jeito aqui:
Para a música em background, selecione o áudio correspondente e na aba Import selecione a opção loop para que este áudio fique executando em loop durante todo o jogo.
Vamos criar uma nova cena com o nó raíz do tipo AudioStreamPlayer e associar este áudio em auto-play como o recurso desta cena, também ajustei o volume para não ficar muito alto e sim em um volume agradável ao jogador. Desse jeito aqui:
Salve esta cena na pasta de autoloads e inclua na configuração do projeto esta cena para ser carregada no início do seu jogo. Lembre-se que tudo que é definido como autoload fica disponível para ser acessado de qualquer outra cena do seu jogo, desta forma independente se você está na tela de Menu, tela do Jogo ou tela de Game Over o áudio de background será sempre o mesmo.
Só para te lembrar onde a cena foi carregada como autoload:
O próximo passo é criar um container na cena do game para armazenar os dfemais áudios que serão utilizados no nosso jogo, cada um com um nó separado. Crie o container como um nó do tipo Node e crie filhos do tipo AudioStreamPlayer para cada um dos áudios que vai utilizar.
Caso queira incluir áudio nos botões também será necessário criar um container na cena de Menu com os áudios correspondentes.
Caso você utilize os mesmos áudios em diferentes cenas, você pode definir todos em uma cena autoload para ficar acessível de qualquer lugar e disparar sua execução como fizemos para o disparo dos sinais definidos em autoload. Por simplificação não usaremos esta abordagem no tutorial.
Sua cena do game deve ter um novo container parecido com isso aqui:
O próximo passo é disparar o áudio conforme os eventos de disparo do laser, explosão de inimigos e do jogador e contato do inimigo com o escudo. Primeiro crie referência aos nós dos efeitos sonoros:
...
@onready var laser_sfx = $Audios/LaserSFX
@onready var player_explosion_sfx = $Audios/PlayerExplosionSFX
@onready var enemy_explosion_sfx = $Audios/EnemyExplosionSFX
@onready var shield_sfx = $Audios/ShieldSFX
...
Agora temos que adicionar aos eventos os sons correspondentes:
...
func _on_player_laser_shot(laser_scene, location):
var laser = laser_scene.instantiate()
laser.global_position = location
laser_container.add_child(laser)
laser_sfx.play()
...
func _on_hit_explode(location):
var particle = particles_scene.instantiate()
particle.global_position = location
particle_container.add_child(particle)
enemy_explosion_sfx.play()
...
func _on_player_killed():
player_explosion_sfx.play()
await get_tree().create_timr(1.25).timeout
$GameOverScreen.set_score(score)
$GameOverScreen.set_high_score(high_score)
save_game()
$GameOverScreen.visible = true
...
Para o som do escudo sendo tocado temos como opção incluir um sinal à partir do nó Player ou gerar o efeito sonoro no próprio nó Player na função que valida se deve ou não gerar dano ao jogador, vou deixar este ponto para você tentar fazer sozinho. Se tiver alguma dúvida coloca nos comentários aí em baixo e assim que possível eu respondo pra você.
E com isso seu jogo está pronto para ser publicado!!! Então bora dar uma olhada em como fazer a publicação do seu jogo para Web (outras plataformas seguem um processo similar de publicação, mas não vou entrar em detalhe aqui).
Passo 13 - Exportação do Jogo
A última etapa é exportar nosso Space Shooter para diferentes plataformas, permitindo que outros jogadores desfrutem da exploração espacial.
O primeiro passo para exportar seu jogo é garantir que os templates de exportação estejam instalados. Não vou entrar em detalhes de como eles funcionam, mas basicamente são modelos que capturam as configurações do seu jogo e geram arquivos compatíveis com as plataformas que você quer exportar.
Se você baixou o Godot via Steam, é possível que estes arquivos de exportação já estejam disponíveis, caso contrário garanta que seu computador tem pelo menos 1Gb de espaço disponível pois estes arquivos de exportação são meio grandinhos.
No menu principal selecione Editor > Manage Export Templates. Na tela que se abre clique em Download and Install para instalar a versão mais recente compatível com a versão de Godot que você está utilizando:
Uma vez instalados, você pode selecionar o menu Project > Export... e na tela que é apresentada incluir as opções de exportação que você queira:
Não é necessário alterar parâmetros para gerar a exportação web, mas você pode brincar com as configurações caso tenha conhecimentos mais profundos de como exportar seu jogo para web.
Como eu sou bem noob no assunto vamos no simples, ok? A única coisa que faço, muito mais por organização, é definir uma pasta separada para o arquivo exportado. E gerar os arquivos com o nome padrão:
E voilà!!! Você já tem todos os arquivos necessários para rodar seu jogo no navegador!!! Mais ou menos, né? Porque se você tentar abrir o arquivo gerado no seu navegador nada vai funcionar:
Este erro acontece porque não há um servidor no seu computador para executar o jogo... Você tem duas alternativas:
- Criar um servidor no seu computador para rodar seu jogo;
- Subir o jogo em alguma plataforma que permita a execução do jogo.
No nosso caso vamos subir os arquivos para o itch.io e deixar disponível para as pessoas jogarem à partir de lá:
Leia as instruções de como subir seu jogo no itch.io, configure de acordo com as suas preferências. No meu caso coloquei para abrir em uma tela maximizada quando o usuário clicar para jogar:
O link para o jogo tá aqui, fique à vontade para ver o resultado "final", deixe seu feedback por lá e me siga também. E é isso... acabamos nosso primeiro jogo!!!
Espero muito que você tenha gostado do material disponibilizado e que tenha ajudado você à entender um pouquinho mais do que o Godot Engine é capaz de fazer. Se gostou do que viu, deixe seu comentário, pedido de novos tutoriais ou sugestão de assuntos à serem abordados posteriormente.
Inscreva-se, comente, divulgue e participe conosco.