Unity 3D – Key Sequence Input – Advanced – JavaScript
NOTA BENE: in tutti gli script seguenti la sequenza VERRA’ RESETTATA in caso di errore!
Attach this script to a Gameobject in the scene
Sequence of 4 Keys – Advanced
KeySequenceInput.js
// La sequenza di tasti corretta, per allungarla aggiungere altri elementi all'array
private var konamiCode = ["UpArrow", "RightArrow", "DownArrow", "LeftArrow"]; // combinazione da eseguire
private var currentPos : int = 0; // il valore iniziale dell'indice dell'array
private var inKonami : boolean = false; // è false perchè può diventare true solo con la sequenza corretta di tasti
// Controlla quali tasti sono correntemente premuti INIZIO ########################################
// Questa funzione controlla TUTTO l'input utente, infatti non vi sono altri GetKey nel codice!
function OnGUI () {
var e : Event = Event.current;
// if è un evento da tastiera AND
// c'è un input da tastiera o mouse AND
// inKonami è falso AND
// è diverso da None
// invia a konamiFunction() il valore del tasto rilevato
if (e.isKey && Input.anyKeyDown && !inKonami && e.keyCode.ToString()!="None") {
konamiFunction (e.keyCode);
}
}
// Controlla quali tasti sono correntemente premuti FINE ###########################################
function Update () {
if (inKonami) { // se la variabile inKonami è true,
//Sequenza corretta, fai qualcosa...
Debug.Log("Right Sequence!");
}
}// END Update()
// Controlla la sequenza INIZIO #####################################################################
function konamiFunction (incomingKey) {// riceve il valore del tasto rilevato
// converte il valore in stringa e lo inserisce in una variabile
// la conversione è necessaria per confrontarla con le stringhe contenute nell'array
var incomingKeyString = incomingKey.ToString();
// se il tasto corrisponde alla sequenza INIZIO
if(incomingKeyString==konamiCode[currentPos]) {
print("Unlocked part "+(currentPos+1)+"/"+konamiCode.length+" with "+incomingKeyString);
currentPos++; // incrementa l'indice dell'array per verificare il tasto successivo
if((currentPos+1)>konamiCode.length){
// se l'indice dell'array+1 è > della lunghezza dell'array
// ricordarsi che il valore iniziale dell'indice è 0
// tutta la sequenza è corretta perchè sono arrivato a verificare anche l'ultimo keyCode della sequenza
// assegna true alla variabile inKonami
print("You master Konami.");
inKonami=true;
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
// altrimenti se il tasto non corrisponde alla sequenza
} else {
print("You fail Konami at position "+(currentPos+1)+", find the ninja in you.");
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
}// END konamiFunction()
// Controlla la sequenza FINE ######################################################################
Play and input UpArrow – RightArrow – DownArrow – LeftArrow
Sequence of 4 Keys – Advanced – CountDown
// La sequenza di tasti corretta, per allungarla aggiungere altri elementi all'array
private var konamiCode = ["UpArrow", "RightArrow", "DownArrow", "LeftArrow"]; // combinazione da eseguire
private var currentPos : int = 0; // il valore iniziale dell'indice dell'array
private var inKonami : boolean = false; // è false perchè può diventare true solo con la sequenza corretta di tasti
private var endTime : float; // countdown variable
private var endGame : boolean = false; // verifica la fine del gioco
function Start()
{
endTime = Time.time + 3; // countdown variable: 3 seconds to type the right sequence!
}
// Controlla quali tasti sono correntemente premuti INIZIO ########################################
// Questa funzione controlla TUTTO l'input utente, infatti non vi sono altri GetKey nel codice!
function OnGUI () {
var e : Event = Event.current;
// if è un evento da tastiera AND
// c'è un input da tastiera o mouse AND
// inKonami è falso AND
// è diverso da None AND
// endGame è false -> continua a inviare i codici dei tasti solo finchè la partita è in corso
// invia a konamiFunction() il valore del tasto rilevato
if (e.isKey && Input.anyKeyDown && !inKonami && e.keyCode.ToString()!="None" && !endGame) {
konamiFunction (e.keyCode);
}
}
// Controlla quali tasti sono correntemente premuti FINE ###########################################
// COUNTDOWN START #########################
function CountDown () {
var timeLeft : int = endTime - Time.time;
// We do not need negative time
if (timeLeft < 0){
timeLeft = 0;
Debug.Log("End of Time"); // tempo scaduto
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
endGame = true; // finisce il gioco
// Retry or Abort...
}
}// END CountDown()
// COUNTDOWN END ###########################
function Update () {
CountDown (); // ho solo x secondi per digitare la sequenza
if (inKonami) { // se la variabile inKonami è true,
// Sequenza corretta, fai qualcosa...
Debug.Log("Right Sequence!");
}
}// END Update()
// Controlla la sequenza INIZIO #####################################################################
function konamiFunction (incomingKey) {// riceve il valore del tasto rilevato
// converte il valore in stringa e lo inserisce in una variabile
// la conversione è necessaria per confrontarla con le stringhe contenute nell'array
var incomingKeyString = incomingKey.ToString();
// se il tasto corrisponde alla sequenza INIZIO
if(incomingKeyString==konamiCode[currentPos]) {
print("Unlocked part "+(currentPos+1)+"/"+konamiCode.length+" with "+incomingKeyString);
currentPos++; // incrementa l'indice dell'array per verificare il tasto successivo
if((currentPos+1)>konamiCode.length){
// se l'indice dell'array+1 è > della lunghezza dell'array
// ricordarsi che il valore iniziale dell'indice è 0
// tutta la sequenza è corretta perchè sono arrivato a verificare anche l'ultimo keyCode della sequenza
// assegna true alla variabile inKonami
print("You master Konami.");
inKonami=true;
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
// altrimenti se il tasto non corrisponde alla sequenza
} else {
print("You fail Konami at position "+(currentPos+1)+", find the ninja in you.");
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
}// END konamiFunction()
// Controlla la sequenza FINE ######################################################################
Play and input UpArrow – RightArrow – DownArrow – LeftArrow within 3 seconds
Come funziona?
1. function OnGUI () … Event.current -> rileva gli input dell’utente e li invia a
2. function konamiFunction (incomingKey) -> riceve gli input per verificare la correttezza della sequenza
a. scorre l’array konamiCode[] per confrontarlo con la sequenza inviata da function OnGUI ()
b. se errata resetta la sequenza e bisogna ricominciarla da capo
c. se è corretta assegna ‘true’ alla variabile booleana inKonami
3. function Update()
a. controlla se ‘inKonami’ è vera -> la sequenza è corretta
b. richiama CountDown()
4. CountDown() fa scorrere il tempo da 3 a 0 secondi
a. finchè c’è tempo non fa nulla
b. se scade il tempo resetta la sequenza e assegna ‘true’ alla variabile booleana endGame
5. OnGUI () … Event.current … quando la variabile endGame è ‘true’ termina l’invio dei dati, infatti li spedisce solo finchè è falsa … !endgame
Quindi:
– !endgame -> false
– endgame -> true
Sequence of 4 Keys – Advanced – CountDown – Infinite Sequencer
// La sequenza di tasti corretta, per allungarla aggiungere altri elementi all'array
// e correggere la generazione casuale della sequenza -> var randomCode = ...
private var konamiCode = ["UpArrow", "RightArrow", "DownArrow", "LeftArrow"]; // combinazione da eseguire
private var currentPos : int = 0; // il valore iniziale dell'indice dell'array
private var inKonami : boolean = false; // è false perchè può diventare true solo con la sequenza corretta di tasti
private var endTime : float; // countdown variable
private var endGame : boolean = false; // verifica la fine del gioco
private var sequenceNum : int = 0; // numero di sequenza completata con successo
function Start()
{
endTime = Time.time + 30; // countdown variable: 30 seconds to type the right sequence!
Debug.Log("First Sequence is " + konamiCode[0] + " " + konamiCode[1] + " " + konamiCode[2] + " " + konamiCode[3]);
}
// Controlla quali tasti sono correntemente premuti INIZIO ########################################
// Questa funzione controlla TUTTO l'input utente, infatti non vi sono altri GetKey nel codice!
function OnGUI () {
var e : Event = Event.current;
// if è un evento da tastiera AND
// c'è un input da tastiera o mouse AND
// inKonami è falso AND
// è diverso da None AND
// endGame è false -> continua a inviare i codici dei tasti solo finchè la partita è in corso
// invia a konamiFunction() il valore del tasto rilevato
if (e.isKey && Input.anyKeyDown && !inKonami && e.keyCode.ToString()!="None" && !endGame) {
konamiFunction (e.keyCode);
}
}
// Controlla quali tasti sono correntemente premuti FINE ###########################################
// COUNTDOWN START #########################
function CountDown () {
var timeLeft : int = endTime - Time.time;
// We do not need negative time
if (timeLeft < 0){
timeLeft = 0;
Debug.Log("End of Time"); // tempo scaduto
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
endGame = true; // finisce il gioco
// Retry or Abort...
}
}// END CountDown()
// COUNTDOWN END ###########################
function Update () {
CountDown (); // ho solo x secondi per digitare la sequenza
if (inKonami) { // se la variabile inKonami è true,
// Sequenza corretta, fai qualcosa...
Debug.Log("Right Sequence!");
inKonami=false; // reset variable
// QUI aggiungere SFX, Time, Coins e così via... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// crea una nuova sequenza casuale INIZIO ----------------------------------------------------------------
var randomCode = ["UpArrow", "RightArrow", "DownArrow", "LeftArrow"]; // tasti ammessi nella combinazione, il primo ha indice 0 l'ultimo 3
var irndFirst : int = Random.Range(0, 3); // first index random
var irndSecond : int = Random.Range(0, 3); // second index random
var irndThird : int = Random.Range(0, 3); // third index random
var irndFourth : int = Random.Range(0, 3); // fourth index random
// Multidimensional Array! Yeah!
konamiCode = [randomCode[irndFirst], randomCode[irndSecond], randomCode[irndThird], randomCode[irndFourth]];
// crea una nuova sequenza casuale FINE -------------------------------------------------------------------
// visualizza la nuova sequenza
sequenceNum++; // incrementa il numero di sequenze completate con successo
Debug.Log("Sequence number " + sequenceNum + " is " + konamiCode[0] + " " + konamiCode[1] + " " + konamiCode[2] + " " + konamiCode[3]);
// QUI variare il materiale degli oggetti utilizzati come rappresentazione grafica dei bottoni ++++++++++++
}// END inKonami
}// END Update()
// Controlla la sequenza INIZIO #####################################################################
function konamiFunction (incomingKey) {// riceve il valore del tasto rilevato
// converte il valore in stringa e lo inserisce in una variabile
// la conversione è necessaria per confrontarla con le stringhe contenute nell'array
var incomingKeyString = incomingKey.ToString();
// se il tasto corrisponde alla sequenza INIZIO
if(incomingKeyString==konamiCode[currentPos]) {
print("Unlocked part "+(currentPos+1)+"/"+konamiCode.length+" with "+incomingKeyString);
// QUI aggiungere SFX positivo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
currentPos++; // incrementa l'indice dell'array per verificare il tasto successivo
if((currentPos+1)>konamiCode.length){
// se l'indice dell'array+1 è > della lunghezza dell'array
// ricordarsi che il valore iniziale dell'indice è 0
// tutta la sequenza è corretta perchè sono arrivato a verificare anche l'ultimo keyCode della sequenza
// assegna true alla variabile inKonami
print("You master Konami.");
inKonami=true;
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
// altrimenti se il tasto non corrisponde alla sequenza
} else {
print("You fail Konami at position "+(currentPos+1)+", find the ninja in you.");
// QUI aggiungere SFX negativo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
currentPos=0; // resetta l'indice dell'array, resetta la sequenza
}
}// END konamiFunction()
// Controlla la sequenza FINE ######################################################################
Come funziona?
1. function OnGUI () … Event.current -> rileva gli input dell’utente e li invia a konamiFunction()
2. function konamiFunction (incomingKey) -> riceve gli input per verificare la correttezza della sequenza
a. scorre l’array konamiCode[] per confrontarlo con la sequenza inviata da function OnGUI ()
b. se errata resetta la sequenza e bisogna ricominciarla da capo
c. se è corretta assegna ‘true’ alla variabile booleana inKonami
3. function Update()
a. controlla se ‘inKonami’ è vera -> la sequenza è corretta
– resetta a ‘false’ inKonami altrimenti OnGUI() non può funzionare per controllare una nuova sequenza
– con un array multidimensionale crea una nuova sequenza random
– conteggia il numero di sequenze riuscite con successo
b. richiama CountDown()
4. CountDown() fa scorrere il tempo da 30 a 0 secondi
a. finchè c’è tempo non fa nulla
b. se scade il tempo resetta la sequenza e assegna ‘true’ alla variabile booleana endGame
5. OnGUI () … Event.current … quando la variabile endGame è ‘true’ termina l’invio dei dati, infatti li spedisce solo finchè è falsa … !endgame
Quindi:
– !endgame -> false
– endgame -> true