Lambda
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 7 dari 56.
AddListener menerima method tanpa parameter. Agar klik memanggil Paint(Color.red), yang menerima warna, tulis method langsung di tempat: () => Paint(Color.red). Itu adalah lambda, method tanpa nama. () menampung parameternya, tidak ada parameter di sini, dan setelah => terdapat isi method: satu pernyataan, atau sebuah blok dalam { } untuk beberapa pernyataan:
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++;
}Satu method Paint melayani kedua tombol warna, dan setiap lambda meneruskan warnanya sendiri. Lambda menangkap variabel yang digunakannya: lambda tidak menyalin nilainya, tetapi membacanya saat dijalankan. Lambda reset menetapkan field changes setiap kali diklik, lama setelah Start() selesai.
Hal itu bisa menjebakmu dalam perulangan. Dengan swatches[i].onClick.AddListener(() => Paint(colors[i]));, setiap lambda menangkap i yang sama, dan saat seseorang mengeklik, perulangan sudah selesai dengan nilai i sama dengan colors.Length: setiap swatch memunculkan IndexOutOfRangeException. Variabel yang dideklarasikan di dalam perulangan adalah variabel baru pada setiap iterasi, jadi salin i ke variabel tersebut dan tangkap salinannya:
for (int i = 0; i < swatches.Length; i++)
{
int index = i;
swatches[i].onClick.AddListener(() => Paint(colors[index]));
}Tantangan
MudahBrankas terbuka dengan kode tiga digit. Keypad.cs sudah memiliki Press(int digit), yang menambahkan satu digit ke kode di layar dan, setelah tiga digit, membuka pintu atau menampilkan Wrong, serta ShowCode(), yang menampilkan apa yang sudah diketik. Hubungkan tombol-tombol di Start():
keysberisi empat tombol digit secara berurutan:keys[0]mengetik 1,keys[1]mengetik 2,keys[2]mengetik 3, dankeys[3]mengetik 4. Hubungkan tombol-tombol tersebut dalam for loop, masing-masing dengan lambda yang memanggilPress.clearButton, dengan satu lambda, menghapus kode yang sudah diketik (entered) dan menampilkannya denganShowCode().
Kodenya adalah 312. Tekan Mainkan, buka brankas, lalu tekan Periksa.
Coba sendiri
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();
// Hubungkan setiap tombol ke Press dengan digitnya, dan clearButton untuk menghapus kode
}
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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Membangun Game Sungguhan
4Scene dan Level
Muat SceneMulai Ulang LevelLevel BerikutnyaPertahankan Antar-SceneRekap: Pilih Level10Proyek: Platformer 3D
LintasanPlatform Bergerak2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di Bank