Menu
CoddyTech
flag Ar iconالعربيةdown icon

عرض النتيجة

جزء من قسم بناء ألعاب حقيقية في رحلة 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 سيعرض العدد القديم، أي سيتأخر ضغطة واحدة.

challenge icon

التحدي

سهل

يزرع البستاني الأشجار. حرّك الشخصية باستخدام مفاتيح الأسهم، واضغط على 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: في النصين بدءًا من الإطار الأول
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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