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 فورًا ويمرر القيمة التي يعيدها، وهي لا شيء، ولذلك لن يُجمَّع: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. لا يأخذ المستمع أي معاملات ويعيد void. إذا أُضيف في Update()، فسينضم الأسلوب نفسه إلى القائمة مجددًا في كل إطار، وسيؤدي النقر مرة واحدة إلى إصدار صوت الجرس مئات المرات. لا يُحتسب النقر إلا على الزر نفسه، بينما تكون Input.GetMouseButtonDown(0) صحيحة عند النقر في أي مكان.

تحدد خاصية 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 بدوال تحرّك المصعد طابقًا واحدًا
    }
}

جميع دروس إنشاء ألعاب حقيقية

تدرّب بنفسك: Playground لـ Unity