Lambda
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 7 di 56.
AddListener accetta un metodo senza parametri. Per fare in modo che un clic chiami Paint(Color.red), che accetta un colore, scrivi il metodo direttamente sul posto: () => Paint(Color.red). Questa è una lambda, un metodo senza nome. () contiene i suoi parametri, nessuno in questo caso, e dopo => viene il suo corpo: un’istruzione oppure un blocco in { } per più istruzioni:
public Button redButton;
public Button blueButton;
public Button resetButton;
public Renderer lamp;
private int changes;
void Start()
{
redButton.onClick.AddListener(() => Paint(Color.red));
blueButton.onClick.AddListener(() => Paint(Color.blue));
resetButton.onClick.AddListener(() =>
{
changes = 0;
lamp.material.color = Color.white;
});
}
void Paint(Color color)
{
lamp.material.color = color;
changes++;
}Un solo metodo Paint serve entrambi i pulsanti dei colori, e ciascuna lambda passa il proprio colore. Una lambda acquisisce le variabili che usa: non ne copia i valori, li legge quando viene eseguita. La lambda di ripristino imposta il campo changes ogni volta che viene cliccata, molto tempo dopo la fine di Start().
Questo può coglierti in un ciclo. Con swatches[i].onClick.AddListener(() => Paint(colors[i])); tutte le lambda acquisiscono lo stesso i e, quando qualcuno fa clic, il ciclo è già terminato con i uguale a colors.Length: ogni campione genera un’eccezione IndexOutOfRangeException. Una variabile dichiarata all’interno del ciclo è nuova a ogni iterazione, quindi copia i in una variabile e acquisisci la copia:
for (int i = 0; i < swatches.Length; i++)
{
int index = i;
swatches[i].onClick.AddListener(() => Paint(colors[index]));
}Sfida
FacileIl caveau si apre con un codice di tre cifre. Keypad.cs ha già Press(int digit), che aggiunge una cifra al codice sullo schermo e, dopo tre cifre, apre la porta oppure mostra Wrong, e ShowCode(), che mostra ciò che è stato digitato finora. Collega i pulsanti in Start():
keyscontiene i quattro pulsanti delle cifre in ordine:keys[0]digita 1,keys[1]digita 2,keys[2]digita 3 ekeys[3]digita 4. Collegali in un ciclofor, ciascuno con una lambda che chiamaPress.clearButton, con una lambda, svuota il codice digitato finora (entered) e lo mostra conShowCode().
Il codice è 312. Premi Play, apri il caveau, poi premi Check.
Provalo tu
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class Keypad : MonoBehaviour
{
public Button[] keys;
public Button clearButton;
public TMP_Text codeText;
public GameObject door;
public string secret = "312";
private string entered = "";
void Start()
{
ShowCode();
// Collega ogni tasto a Press con la rispettiva cifra e clearButton alla cancellazione del codice
}
void Press(int digit)
{
entered += digit;
ShowCode();
if (entered.Length == 3)
{
if (entered == secret)
{
door.SetActive(false);
codeText.text = "Open";
}
else
{
codeText.text = "Wrong";
}
entered = "";
}
}
void ShowCode()
{
codeText.text = "Code: " + entered;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input