الأزرار وonClick
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 6 من 56.
يضيف 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، وبذلك يرى اللاعب أي الأزرار تعمل حاليًا. على الهاتف، يُنقر على الأزرار نفسها باللمس.
التحدي
سهليحتوي المصعد في البرج على زر للصعود وآخر للنزول. اكتب Lift.cs (يربط المشهد upButton وdownButton وfloorText):
- في
Start()، اربطupButtonبطريقة ترفع المصعد طابقًا واحدًا، وdownButtonبطريقة تنزله طابقًا واحدًا. - تتراوح الطوابق من 0 إلى
topFloor(3). يقف المصعد عند y = الطابق ×floorHeight(3)، لذا يكون y عند الطابق 2 هو 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 بدوال تحرّك المصعد طابقًا واحدًا
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك