ביטויי למבדה
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 7 מתוך 60.
AddListener מקבלת מתודה ללא פרמטרים. כדי לגרום ללחיצה לקרוא ל־Paint(Color.red), שמקבלת צבע, כתוב את המתודה במקום: () => Paint(Color.red). זוהי למבדה, מתודה ללא שם. () מכילה את הפרמטרים שלה — אין כאן כאלה — ואחרי => מופיע הגוף שלה: פקודה אחת, או בלוק בתוך { } עבור כמה פקודות:
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++;
}מתודת Paint אחת משמשת את שני כפתורי הצבע, וכל למבדה מעבירה את הצבע שלה. למבדה לוכדת את המשתנים שבהם היא משתמשת: היא לא מעתיקה את הערכים שלהם, אלא קוראת אותם כשהיא מופעלת. למבדת האיפוס מאפסת את השדה changes בכל לחיצה, הרבה אחרי שהפעולה Start() הסתיימה.
הדבר הזה עלול לתפוס אותך בלולאה. עם swatches[i].onClick.AddListener(() => Paint(colors[i])); כל הלמבּדות לוכדות את אותו i, ועד שמישהו לוחץ, הלולאה מסתיימת כש־i שווה ל־colors.Length: כל דוגמית צבע גורמת ל־IndexOutOfRangeException. משתנה שמוצהר בתוך הלולאה הוא משתנה חדש בכל איטרציה, לכן העתק את i למשתנה ושמור בלמבדה את ההעתק:
for (int i = 0; i < swatches.Length; i++)
{
int index = i;
swatches[i].onClick.AddListener(() => Paint(colors[index]));
}אתגר
קלחברי את לוח המקשים של הכספת בתוך Start().
- עברִי בלולאה על
keysבאמצעותfor. בתוך הלולאה, הכריזי עלint digit = i + 1;וחברי אתkeys[i]אל() => Press(digit). - חברי את
clearButtonללמדה אחת שמגדירה אתentered = ""וקוראת ל־ShowCode().
לחצי על שחק והקלידי 3, 1, 2: המסך מציג Open. אחר כך לחצי על בדיקה.
נסו בעצמכם
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();
// חברו כל מקש ל-Press עם הספרה שלו, ואת clearButton לפעולה שמנקה את הקוד
}
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;
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעותתרגלו בעצמכם: Unity אונליין