Menu
CoddyTech

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]));
}
challenge icon

Tantangan

Mudah

Brankas 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():

  • keys berisi empat tombol digit secara berurutan: keys[0] mengetik 1, keys[1] mengetik 2, keys[2] mengetik 3, dan keys[3] mengetik 4. Hubungkan tombol-tombol tersebut dalam for loop, masing-masing dengan lambda yang memanggil Press.
  • clearButton, dengan satu lambda, menghapus kode yang sudah diketik (entered) dan menampilkannya dengan ShowCode().

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;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Membangun Game Sungguhan