الأزرار و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، وبذلك يرى اللاعب أي الأزرار يعمل في الوقت الحالي. وعلى الهاتف، يُنقَر على الأزرار نفسها.
التحدي
سهلاجعل زري «لأعلى» و«لأسفل» في المصعد يعملان.
- في
Start()، اربطupButtonبـGoUp(floor++) وdownButtonبـGoDown(floor--) باستخدامonClick.AddListener. - اكتب
ShowFloor()، واستدعِها فيStart()وبعد كل حركة: تكون قيمة y للمصعدfloor * floorHeight، ويعرضfloorTextالنصFloor: 2. - يكون زر «لأعلى» قابلًا للتفاعل عندما تكون القيمة أقل من
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 بدوال تحرّك المصعد طابقًا واحدًا
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity