Quindi ho riscontrato un problema nel gioco a cui sto lavorando, ma sembra essere una cosa piuttosto fondamentale che probabilmente si presenta in molti giochi.
Il mio gioco richiede che alcune funzioni di gioco si verifichino in un momento specifico durante l'animazione del personaggio. E così, come dice il titolo, mi chiedo quali siano alcune buone tecniche e strategie fondamentali per sincronizzare eventi / funzioni / azioni relative al gameplay a punti specifici nell'animazione di un personaggio.
Ecco alcuni semplici esempi di ciò di cui sto parlando in vari tipi di giochi:
Il tuo personaggio ricarica la sua pistola in uno sparatutto . Il tuo personaggio gioca la sua animazione di "ricarica", ma è importante che la funzione che imposta la variabile corrente di Ammo sia chiamata solo nel momento esatto in cui il caricatore viene scambiato e l'arma è armato. Questo potrebbe essere un punto nel mezzo dell'animazione di ricarica.
In un gioco di ruolo a turni i tuoi personaggi si trovano in una linea di fronte a una linea di nemici. Quando ti viene comandato di attaccare, uno dei tuoi personaggi corre / salta su uno dei nemici e lancia la loro spada gigante prima di correre / saltare di nuovo in piedi. Vuoi assicurarti che il nemico sia danneggiato nel momento esatto in cui viene riprodotta l'animazione di taglio - un punto tra correre e tornare indietro.
In un gioco invisibile , il tuo personaggio può intrufolarsi e interagire con computer e pulsanti nel mondo. Forse c'è un pulsante che spegne l'alimentatore delle luci dell'avamposto che stai infiltrando. Quando si preme il pulsante di azione, il personaggio si allunga e preme il pulsante, quindi torna alla posizione di riposo. Si desidera che le luci si spengano nel punto esatto nell'animazione "push_button" quando si preme il pulsante.
Certo, il mio caso particolare è molto simile al secondo esempio , in cui ho creato un'animazione in cui il mio personaggio a turni si lancia in avanti durante un attacco e voglio che il danno sia applicato nel momento esatto in cui l'animazione sembra prendere contatto . Perché il mio gioco usa un sistema a turni (immagina qualcosa come Final Fantasy o Fire Emblem) Voglio il danno / guarigione / magia / ecc. da applicare al momento giusto durante l'animazione di ciascun personaggio, anche se in realtà non utilizzo collisioni / hitbox.
Dovrei menzionare che sto realizzando il mio gioco in un motore di gioco popolare e che in questo momento lo sto gestendo utilizzando i loro eventi di animazione o le notifiche per ottenere qualcosa vicino ai risultati desiderati: il mio personaggio esegue un certo comando e attiva un l'animazione specifica del comando (ovvero: "command_command") e le risorse di animazione per ciascuno dei miei comandi devono includere un evento di animazione / notifica "callback" nella funzione ExecuteCommand dei miei caratteri. In altre parole: il personaggio dice che l'animazione dell'attacco deve essere riprodotta, quindi l'animazione dell'attacco emette un evento / notifica la richiamata nel personaggio nel momento esatto durante l'animazione quando il danno deve essere inflitto.
Onestamente, per ora funziona, ma sembra sbagliato - come se mi perdessi una parte del quadro più grande qui! Parte del motivo per cui questo metodo sembra sbagliato è che accoppia la logica di gioco alle risorse di animazione; se la mia risorsa di animazione dimentica di includere un evento / callback ExecuteCommand (), il comando non verrà eseguito correttamente e sarà necessario un codice aggiuntivo per verificare se l'animazione di un comando è terminata senza eseguire il comando. È disordinato e significa che il mio gameplay ha una strana dipendenza dalle sue risorse. Ovviamente voglio che il danno si verifichi in un punto specifico durante l'animazione dell'attacco, ma mi sento davvero strano nel chiamare il codice di gioco all'interno delle risorse dell'animazione.
Quindi cosa sto trascurando qui? Quali sono alcune buone tecniche generali per gestire questo tipo di situazioni in cui desideri che determinate azioni di gioco importanti si verifichino in momenti specifici durante le animazioni?
Modifica: per chiarire, questa non è una domanda specifica per il motore né sto cercando progetti / tecniche specifici per il motore. Sono interessato alle tecniche generali di sincronizzazione di animazione / gameplay che potresti utilizzare nei tuoi progetti di gioco indipendentemente dalle tecnologie utilizzate.