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

المال

الدرس 6 من 18 في دورة لعبة Unity: الدفاع عن الأبراج على Coddy.

تكلّف الأبراج أموالًا. الأموال لدى GameManager، ويطلب BuildManager منه الدفع. الطلب والدفع خطوة واحدة: دالة تتحقق من المال، وتأخذه إذا كان المبلغ كافيًا، وتُخبرك باستخدام bool بما إذا كانت قد فعلت ذلك، على غرار إجابة Dictionary.TryGetValue. محفظة آلة البيع:

public bool TryPay(int price)
{
    if (price > coins)
    {
        return false;
    }

    coins -= price;
    coinText.text = coins + " coins";
    return true;
}

لا يستطيع أي مستدعٍ الدفع دون إجراء التحقق، ولا ينخفض عدد العملات أبدًا عن الصفر، إذ لا شيء آخر يغيّره. يوجد السعر في الـprefab: حقل في السكربت الخاص به، يُضبط في Inspector الخاص بالـprefab. الـprefab كائن مُحمَّل مثل أي كائن آخر، لذا يمكن قراءة snackPrefab.price قبل إنشاء أي نسخة منه، لتحديد ما إذا كان ينبغي إنشاؤها.

challenge icon

التحدي

متوسط

يبدأ اللاعب ومعه 150 من المال، وتكلفة ArrowTower هي 50.

  1. في Tower، أضف cost من النوع int واجعله عامًا. عيّن قيمته إلى 50 في العنصر الأولي ArrowTower.
  2. في GameManager، أضف startMoney من النوع int واجعله متسلسلًا، وأضف moneyText من النوع TMP_Text واجعله متسلسلًا، وأضف money من النوع int واجعله خاصًا، على أن يبدأ بقيمة startMoney. اعرضه بالشكل Money: 150 عند البدء وبعد كل تغيير.
  3. أضف public bool TrySpend(int amount): عندما تكون amount أكبر من المال، أرجع false ولا تغيّر شيئًا؛ وإلا اطرح المبلغ، واعرض المال، ثم أرجع true.
  4. في BuildManager، أضف حقلًا متسلسلًا باسم game (من النوع GameManager). لا تحصل المنصة الشاغرة على برج إلا عندما تدفع game.TrySpend تكلفة العنصر الأولي cost؛ وإلا، سجّل Not enough money.

اضغط Play وابنِ الأبراج حتى ينفد المال، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private int startLives = 20;
    [SerializeField] private TMP_Text livesText;

    private int lives;

    void OnEnable()
    {
        Enemy.ReachedBase += OnReachedBase;
    }

    void OnDisable()
    {
        Enemy.ReachedBase -= OnReachedBase;
    }

    void Start()
    {
        lives = startLives;
        ShowLives();
    }

    void OnReachedBase(Enemy enemy)
    {
        lives -= enemy.data.damage;
        ShowLives();
    }

    void ShowLives()
    {
        livesText.text = "Lives: " + lives;
    }
}
quiz iconاختبر نفسك

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

جميع دروس لعبة Unity: الدفاع عن الأبراج