عرض النتيجة
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 2 من 56.
إن text الخاص بنصّ ما هو سلسلة نصية، لذا يجب تحويل الرقم إلى نص قبل عرضه. يؤدي ضمّه إلى سلسلة نصية باستخدام + إلى ذلك: تصبح "Wood: " + wood هي Wood: 12 عندما تكون قيمة wood هي 12، وwood.ToString() هي 12. أما قيمة int وحدها فلا تصلح: يفشل woodText.text = wood; مع الخطأ CS0029، لا يمكن تحويل النوع 'int' ضمنيًا إلى 'string'.
تُخزَّن القيمة العددية في حقل int، والنص يعرضها فحسب. تعيد إحدى الدوال كتابة النص انطلاقًا من الحقل؛ وكل تغيير في الرقم يستدعيها، وكذلك Start()، لذا يعرض الإطار الأول القيمة الفعلية بدلًا مما أُدخِل في Inspector. هنا، يؤدي الضغط على Space إلى تقطيع 3 جذوع:
public TMP_Text woodText;
private int wood;
void Start()
{
ShowWood();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
wood += 3;
ShowWood();
}
}
void ShowWood()
{
woodText.text = "Wood: " + wood;
}لا يتغير النص إلا عندما تتغير قيمة wood. إعادة كتابته في كل Update() ستبدو كما هي، لكنها ستنشئ سلسلة نصية جديدة 60 مرة في الثانية بلا داعٍ. والترتيب مهم: استدعاء ShowWood() قبل wood += 3 سيعرض العدد القديم، أي سيتأخر ضغطة واحدة.
التحدي
سهليزرع البستاني الأشجار. حرّك الشخصية باستخدام مفاتيح الأسهم، واضغط على Space لزراعة شتلة ما دامت هناك بذور متبقية، كما يفعل Gardener.cs بالفعل. اعرض الأعداد على الشاشة؛ يربط المشهد بين seedsText وtreesText:
- يعرض
seedsTextالبذور المتبقية، مثلSeeds: 4، ويعرضtreesTextالأشجار المزروعة، مثلTrees: 1. - يكون كلاهما صحيحًا منذ الإطار الأول وبعد كل عملية زراعة. يضبط Inspector عدد بذور البستاني على 5، رغم أن النصين في المشهد لا يزالان يعرضان
Seeds: 10وTrees: ?. - اكتب دالة واحدة تضبط كلا النصين، واستدعها في كل موضع تحتاج إليه.
اضغط على تشغيل، وازرع حتى تنفد البذور، ثم اضغط على تحقّق.
جرّب بنفسك
using UnityEngine;
using TMPro;
public class Gardener : MonoBehaviour
{
public float speed = 4f;
public int seeds = 10;
public GameObject saplingPrefab;
public TMP_Text seedsText;
public TMP_Text treesText;
private int trees;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
{
Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
Instantiate(saplingPrefab, spot, Quaternion.identity);
seeds--;
trees++;
}
}
// اعرض Seeds: وTrees: في النصين بدءًا من الإطار الأول
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك