- Alex Ferri
Coyote Time
INTRODUZIONE
Quando si parla di videogiochi, la gente spesso si lamenta dei controlli troppo poco reattivi.
Ma cosa rende allora i controlli piacevoli?
La risposta più ovvia è che i controlli dovrebbero sempre fare ciò che il giocatore sta pensando di fare.
Devono essere prevedibili per l'utente a seconda dei suoi input.
Il problema è che i giocatori sono essere umani, e come tali, possono fare piccoli errori di tempismo che producono un risultato inaspettato.
Da un punto di vista di programmazione l'azione visualizzata sullo schermo è coerente, ma nella mente del giocatore, il gioco lo ha "imbrogliato".
Questa è una sensazione terribile da esperienziare come giocatore, quindi dobbiamo trovare il modo di mitigare i casi in cui i controlli non reagiscono nel modo in cui sono stati pensati.
È qui che l'aggiunta di un certo margine di manovra ai controlli sotto forma di timer (o frame extra per eseguire le azioni) aiuta i controlli ad essere più “confortevoli”.
Questi concetti possono essere utilizzati in molte situazioni e in qualsiasi genere di gioco per eseguire azioni come saltare, attaccare oppure interagire con i menu.
In questo articolo parlerò di una meccanica, presente principalmente nei platform, chiamata Coyote Time.
Una tecnica che permette ai vostri giochi platform di essere meno “punitivi”.
COYOTE TIME IN PRATICA
Ai giocatori piace massimizzare i loro salti nei giochi platform, portandoli ad aspettare fino all'ultimo momento (di solito al bordo del terreno) per saltare.
Se fatto bene, il giocatore eseguirà un salto che coprirà una bella distanza.
Tuttavia, se fatto male, il personaggio cadrà semplicemente senza effettuare alcun salto, di solito uccidendolo con spuntoni strategicamente posizionati sotto. Quanta frustrazione!
Per risolvere questo problema, possiamo implementare quello che viene chiamato Coyote Time.
Questa caratteristica aggiunge la possibilità al giocatore di saltare anche dopo che il suo personaggio non tocca più il terreno, per qualche frame di gioco in più.
Ecco un esempio di come appare la demo quando il coyote time è assente:
E qui invece attivo:
Vediamo ora come implementarlo tecnicamente:
Il funzionamento del Coyote Time è molto semplice.
In pratica quando il player non tocca più il suolo, andremo ad incrementare un timer.
Se il giocatore sarà in grado di premere il tasto per saltare nel range di frame giusto, verrà effettuato il salto anche dopo aver lasciato il bordo del terreno.
Vediamo ora un esempio di codice:
private void CoyoteJump() {
if (!onGround) {
coyoteTimer += Time.deltaTime;
if (jumpKey && (coyoteTimer <= coyoteBuffer) {
Jump();
coyoteTimer = 0f;
}
} else {
coyoteTimer = 0f;
}
}
Prima di tutto ci assicuriamo che il player non stia toccando il terreno.
In questo caso andiamo ad incrementare il coyoteTimer.
Dopo di che verifichiamo che il giocatore prema il tasto per saltare e che il coyoteTimer sia nel range limite per poter effettuare il salto in aria.
Se la condizione sarà vera, effettuiamo il salto e azzeriamo il coyoteTimer per poterlo riutilizzare la prossima volta.
Importante azzerare il coyoteTimer anche dopo aver toccato nuovamente il suolo, questo perchè non è detto che riusciamo sempre ad effettuare il Coyote Jump e quindi ad azzerare il timer.
Un consiglio è quello di settare il coyoteBuffer a piccoli valori, giusto quel poco per permettere al giocatore di saltare dopo pochi frame da quando ha lasciato il suolo.
CONCLUSIONE
Il Coyote Time può davvero migliorare il feeling del vostro platform.
Sperimentate con il codice e trovate i settaggi che fanno più al caso vostro. Siate creativi!
Esistono altri piccoli trucchetti per migliorare l'esperienza di gioco. Continuate a seguire il Blog per altri trucchi di Game Design.
Alla prossima!
Reference: https://www.youtube.com/watch?v=NmJXB-WkaCc