J'ai donc rencontré un problème dans le jeu sur lequel je travaille, mais cela semble être une chose assez fondamentale qui se pose probablement dans de nombreux jeux.
Mon jeu nécessite que certaines fonctions de gameplay se produisent à un moment très précis au cours d'une animation de personnage. Et donc, comme le titre l'indique, je me demande quelles sont les bonnes techniques et stratégies fondamentales pour synchroniser les événements / fonctions / actions liés au gameplay à des points spécifiques de l'animation d'un personnage.
Voici quelques exemples simples de ce dont je parle dans différents types de jeux:
Votre personnage recharge son arme dans un jeu de tir . Votre personnage joue son animation de «rechargement», mais il est important que la fonction qui définit la variable currentAmmo ne soit appelée qu'au moment exact après l'échange du chargeur et l'armement de l'arme. Cela pourrait être un certain point au milieu de l'animation de rechargement.
Dans un RPG au tour par tour, vos personnages sont alignés face à une ligne d'ennemis. Lorsqu'il vous est ordonné d'attaquer, l'un de vos personnages court / saute vers l'un des ennemis et coupe son épée géante avant de courir / sauter à sa place debout. Vous voulez vous assurer que l' ennemi est endommagé au moment exact où l'animation coupante est jouée - un certain point entre la montée et la marche arrière.
Dans un jeu furtif , votre personnage peut se faufiler et interagir avec des ordinateurs et des boutons dans le monde. Il y a peut-être un bouton qui coupe l'alimentation des lumières de l'avant-poste que vous infiltrez. Lorsque le bouton d'action est enfoncé, votre personnage tend la main et appuie sur le bouton, puis revient à sa position de repos. Vous voulez que les lumières s'éteignent au point exact de l'animation 'push_button' lorsque le bouton est enfoncé.
Certes, mon cas particulier ressemble davantage au deuxième exemple , dans lequel j'ai créé une animation où mon personnage au tour par tour se précipite pendant une attaque et je veux que les dégâts soient appliqués au moment exact où l'animation semble entrer en contact. . Parce que mon jeu utilise un système au tour par tour (imaginez quelque chose comme Final Fantasy ou Fire Emblem), je veux les dégâts / guérison / magie / etc. à appliquer au bon moment pendant chaque animation de personnage même si je n'utilise pas réellement de collision / hitbox.
Je dois mentionner que je crée mon jeu dans un moteur de jeu populaire et que pour le moment je gère cela en utilisant leurs événements d' animation ou notifie pour obtenir quelque chose proche des résultats souhaités - mon personnage exécute une certaine commande et déclenche un l'animation spécifique à la commande (par exemple: 'attack_command') et les ressources d'animation pour chacune de mes commandes doivent inclure un événement d'animation / notifier un 'rappel' dans la fonction ExecuteCommand de mes personnages. En d'autres termes - le personnage indique à l'animation d'attaque de jouer, puis l'animation d'attaque émet un événement / notifie un rappel au personnage au moment exact de l'animation où les dégâts doivent être infligés.
Honnêtement, cela fonctionne pour le moment, mais cela ne me semble pas juste - comme s'il me manque une partie de la vue d'ensemble ici! Une partie de la raison pour laquelle cette méthode semble erronée est qu'elle associe la logique du jeu aux actifs d'animation; si mon actif d'animation oublie d'inclure un événement / rappel ExecuteCommand (), la commande ne s'exécutera pas correctement et du code supplémentaire est nécessaire pour vérifier si une animation de commande s'est terminée sans exécuter la commande. C'est désordonné et cela signifie que mon gameplay a une étrange dépendance sur ses actifs. Bien sûr, je veux que les dégâts se produisent à un moment précis de mon animation d'attaque, mais je me sens vraiment bizarre d'appeler du code de gameplay dans les ressources d'animation.
Alors qu'est-ce que je néglige ici? Quelles sont les bonnes techniques générales pour gérer ces types de situations dans lesquelles vous souhaitez que certaines actions de gameplay importantes se produisent à des moments spécifiques pendant les animations?
Edit: Pour clarifier, ce n'est pas une question spécifique au moteur et je ne recherche pas de conceptions / techniques spécifiques au moteur. Je m'intéresse aux techniques générales de synchronisation animation / gameplay que l'on pourrait utiliser dans vos projets de jeu quelles que soient les technologies utilisées.