المال
الدرس 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 قبل إنشاء أي نسخة منه، لتحديد ما إذا كان ينبغي إنشاؤها.
التحدي
متوسطيبدأ اللاعب ومعه 150 من المال، وتكلفة ArrowTower هي 50.
- في
Tower، أضفcostمن النوع int واجعله عامًا. عيّن قيمته إلى 50 في العنصر الأولي ArrowTower. - في
GameManager، أضفstartMoneyمن النوع int واجعله متسلسلًا، وأضفmoneyTextمن النوع TMP_Text واجعله متسلسلًا، وأضفmoneyمن النوع int واجعله خاصًا، على أن يبدأ بقيمةstartMoney. اعرضه بالشكلMoney: 150عند البدء وبعد كل تغيير. - أضف
public bool TrySpend(int amount): عندما تكونamountأكبر من المال، أرجع false ولا تغيّر شيئًا؛ وإلا اطرح المبلغ، واعرض المال، ثم أرجع true. - في
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;
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.