Então, me deparei com um problema no jogo em que estou trabalhando, mas parece ser uma coisa bastante fundamental que provavelmente aparece em muitos jogos.
Meu jogo exige que alguma função de jogabilidade ocorra em um momento muito específico durante uma animação de personagem. E assim, como diz o título, estou me perguntando quais são algumas boas técnicas e estratégias fundamentais para sincronizar eventos / funções / ações relacionadas à jogabilidade em pontos específicos da animação de um personagem.
Aqui estão alguns exemplos simples do que estou falando em vários tipos de jogos:
Seu personagem recarrega sua arma em um atirador . Seu personagem reproduz sua animação de 'recarga', mas é importante que a função que define a variável currentAmmo seja chamada apenas no momento exato após a troca da revista e a arma estar armada. Isso pode ser um ponto no meio da animação de recarga.
Em um RPG baseado em turnos, seus personagens ficam em uma linha de frente para uma linha de inimigos. Quando ordenado a atacar, um de seus personagens corre / pula para um dos inimigos e corta sua espada gigante antes de correr / pulando de volta ao seu lugar de pé. Você quer ter certeza de que o inimigo está danificado no momento exato em que a animação cortante é reproduzida - algum ponto entre subir e voltar.
Em um jogo furtivo , seu personagem pode se infiltrar e interagir com computadores e botões do mundo. Talvez haja um botão que apague a fonte de alimentação das luzes do posto avançado que você está se infiltrando. Quando o botão de ação é pressionado, seu personagem estende a mão e aperta o botão e, em seguida, retorna à posição inativa. Você deseja que as luzes se apaguem no ponto exato da animação 'push_button' quando o botão é pressionado.
É certo que meu caso particular é mais parecido com o segundo exemplo , no qual criei uma animação em que meu personagem baseado em turnos avança durante um ataque e quero que o dano seja aplicado no momento exato em que a animação parece estar fazendo contato . Porque meu jogo usando um sistema baseado em turnos (imagine algo como Final Fantasy ou Fire Emblem) eu quero o dano / cura / magia / etc. para ser aplicado no momento correto durante cada animação de personagem, mesmo que eu não esteja usando colisões / hitboxes.
Devo mencionar que estou criando meu jogo em um mecanismo de jogo popular, e que agora estou lidando com isso usando seus eventos de animação ou notificações para alcançar algo próximo aos resultados desejados - meu personagem executa um determinado comando e aciona um a animação específica do comando (ou seja: 'attack_command') e os recursos de animação de cada um dos meus comandos devem incluir um evento de animação / notificar 'callback' na função ExecuteCommand dos meus caracteres. Em outras palavras - o personagem diz à animação de ataque para executar e, em seguida, a animação de ataque emite um evento / notifica o retorno de chamada no personagem no momento exato da animação em que o dano deve ser causado.
Honestamente, isso funciona por enquanto, mas parece errado - como se eu estivesse perdendo parte de uma imagem maior aqui! Parte da razão pela qual esse método parece errado é que ele associa a lógica do jogo aos recursos de animação; se meu recurso de animação esquecer de incluir um evento / retorno de chamada ExecuteCommand (), o comando não será executado corretamente e será necessário um código extra para verificar se uma animação de comando foi concluída sem executar o comando. É uma bagunça e significa que minha jogabilidade tem uma estranha dependência de seus ativos. É claro que quero que o dano ocorra em um ponto específico durante minha animação de ataque, mas me sinto muito estranho ao chamar o código de jogo dentro dos recursos de animação.
Então, o que eu estou negligenciando aqui? Quais são algumas boas técnicas gerais para lidar com esses tipos de situações nas quais você deseja que certas ações importantes de jogabilidade ocorram em horários específicos durante as animações?
Editar: para esclarecer, esta não é uma pergunta específica de mecanismo nem estou procurando projetos / técnicas específicos de mecanismo. Estou interessado em técnicas gerais de sincronização de animação / jogabilidade que podem ser usadas em seus projetos de jogos, independentemente das tecnologias usadas.