Menu
CoddyTech

כפתורים ו-onClick

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

GameObject > UI > Button - TextMeshPro מוסיף כפתור: תמונה שאפשר ללחוץ עליה, רכיב Button וילד Text (TMP) שמשמש כתווית שלו. onClick של הכפתור הוא אירוע, כלומר רשימה של מתודות שהוא קורא להן כשמשחררים את הלחיצה מעליו. סקריפט מוסיף לרשימה את המתודה שלו באמצעות 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 מיד ומעביר את הערך שהיא מחזירה, שהוא כלום, ולכן הקוד לא מתקמפל: ארגומנט 1: לא ניתן להמיר מ-'void' ל-'UnityEngine.Events.UnityAction'. מאזין לא מקבל פרמטרים ומחזיר void. אם מוסיפים אותו בתוך Update(), אותה מתודה תתווסף לרשימה שוב בכל פריים, ולחיצה אחת תפעיל את הצלצול מאות פעמים. לחיצה נספרת רק כשהיא מתבצעת על הכפתור עצמו, ואילו Input.GetMouseButtonDown(0) מחזיר true בלחיצה בכל מקום.

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

challenge icon

אתגר

קל

הפוך את כפתורי העלייה והירידה של המעלית לפעילים.

  1. ב־Start(), חבר את upButton אל GoUp (floor++) ואת downButton אל GoDown (floor--) באמצעות onClick.AddListener.
  2. כתוב את ShowFloor(), שנקראת ב־Start() ואחרי כל תזוזה: ערך ה־y של המעלית הוא floor * floorHeight, והטקסט ב־floorText הוא Floor: 2.
  3. אפשר ללחוץ על כפתור העלייה כשהמעלית מתחת ל־topFloor, ועל כפתור הירידה כשהיא מעל 0.

לחץ על „שחק”: כפתור העלייה יהפוך לאפור בקומה העליונה. לאחר מכן לחץ על „בדיקה”.

נסו בעצמכם

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 למתודות שמזיזות את המעלית קומה אחת
    }
}

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

תרגלו בעצמכם: Unity אונליין