Menu
CoddyTech

כפתורים ו-onClick

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 6 מתוך 56.

GameObject > UI > Button - TextMeshPro מוסיף כפתור: תמונה שעליה אפשר ללחוץ, רכיב Button וילד Text (TMP) עבור התווית שלו. onClick של Button הוא אירוע, רשימה של מתודות שהוא קורא להן כשמשחררים לחיצה מעליו. סקריפט מוסיף לרשימה את המתודה שלו באמצעות AddListener, פעם אחת, בתוך Start(). Button נמצא במרחב השמות UnityEngine.UI:

using UnityEngine;
using UnityEngine.UI;

public class Doorbell : MonoBehaviour
{
    public Button bellButton;
    private int rings;

    void Start()
    {
        bellButton.onClick.AddListener(Ring);
    }

    void Ring()
    {
        rings++;
        Debug.Log("Ding! " + rings);
    }
}

AddListener(Ring) מעביר את המתודה עצמה, ללא סוגריים. AddListener(Ring()) היה קורא ל-Ring מיד ומעביר את מה שהיא מחזירה, כלומר כלום, ולכן הקוד לא מתקמפל: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. מאזין אינו מקבל פרמטרים ומחזיר void. אם מוסיפים אותו בתוך Update(), אותה מתודה תתווסף לרשימה שוב בכל פריים, ולחיצה אחת תצלצל מאות פעמים. לחיצה נחשבת רק כשהיא מתבצעת על הכפתור עצמו, ואילו Input.GetMouseButtonDown(0) הוא true עבור לחיצה בכל מקום.

המאפיין interactable של כפתור קובע אם אפשר להשתמש בו. bellButton.interactable = false; צובע אותו בגוון Disabled Color, והמאזינים שלו לא יופעלו עד שהערך יוחזר ל-true, כך שהשחקן רואה אילו כפתורים פועלים כרגע. בטלפון, נוגעים באותם כפתורים.

challenge icon

אתגר

קל

למעלית במגדל יש כפתור למעלה וכפתור למטה. כתבו את Lift.cs (הסצנה מקשרת את upButton, את downButton ואת floorText):

  • ב־Start(), חברו את upButton לשיטה שמעלה את המעלית קומה אחת, ואת downButton לשיטה שמורידה אותה קומה אחת.
  • הקומות נעות מ־0 עד topFloor (3). המעלית עומדת בגובה y = קומה כפול floorHeight (3), ולכן בקומה 2 ערך y שלה הוא 6. ערכי x ו־z נשארים כפי שהם.
  • החל מרגע ההתחלה, floorText מציג את הקומה, למשל Floor: 2.
  • בקומה העליונה אי אפשר ללחוץ על כפתור העלייה, ובקומה 0 אי אפשר ללחוץ על כפתור הירידה.

לחצו על Play, עלו לקומה העליונה וחזרו למטה, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Lift : MonoBehaviour
{
    public Button upButton;
    public Button downButton;
    public TMP_Text floorText;
    public int topFloor = 3;
    public float floorHeight = 3f;
    private int floor;

    void Start()
    {
        // חברו את upButton ואת downButton למתודות שמזיזות את המעלית קומה אחת
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה בונים משחקים אמיתיים