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

بيانات الأعداء

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

تحتوي لعبة الدفاع عن الأبراج على أنواع من الأعداء: جنود مشاة، وعدّاؤون سريعون، ودبابات بطيئة. يمشي كل جندي مشاة بالسرعة نفسها ويبدأ بالصحة نفسها، لذا تنتمي هذه القيم إلى النوع، لا إلى عدو واحد. توضع في أصل ScriptableObject، واحد لكل نوع، ويشير إليه كل عدو من هذا النوع. غيّر الأصل، وسيتغير معه كل عدو من ذلك النوع.

يجب ألا يحتفظ الأصل بحالة عدو واحد. فالجندي الذي تلقى ضربة صحته أقل من صحة الجندي الذي خلفه، لذا يحتفظ الأصل بقيمة maxHealth، أي الصحة التي يبدأ بها جندي المشاة، وينسخها كل عدو إلى حقل خاص به. وتقسم لعبة سباق السيارات بيانات السيارة بالطريقة نفسها:

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

تشترك كل السيارات من طراز واحد في CarData واحد، وتستهلك كل منها fuel الخاص بها. أما كتابة data.tankSize -= used فستستنزف خزان كل سيارة من ذلك الطراز دفعة واحدة، وفي المحرر سيبقى التغيير في الأصل بعد Play. تعمل Awake فور إنشاء الكائن، لذا تكون النسخة جاهزة قبل أن يتمكن أي شيء من استخدامها.

challenge icon

التحدي

سهل

ينضم Runner إلى Grunt: أسرع، وبصحة أقل. أنشئ أصلًا خاصًا لكل نوع.

  1. في EnemyData.cs، اجعل إنشاء EnemyData ممكنًا من قائمة Create، باستخدام اسم القائمة Tower Defense/Enemy Data، وأضف إليه الحقول العامة speed (من النوع float) وmaxHealth وreward (من النوع int).
  2. في Enemy.cs، استبدل الحقل speed بحقل عام data من النوع EnemyData، واجعل الحركة بسرعة data.speed.
  3. أضف متغير int خاصًا health، واجعل قيمته مساوية لـ maxHealth في الأصل ضمن Awake.

يحتوي المشروع على أصل GruntData (السرعة 2، الصحة 9، المكافأة 5) وأصل RunnerData (السرعة 3.5، الصحة 5، المكافأة 3)، ويُعيّن Inspector أصلًا لكل عدو. اضغط Play وشاهد Runner وهو يتجاوز Grunt، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;

// يأتي لاحقًا: إحصائيات نوع واحد من الأعداء، بوصفها أصلًا.
public class EnemyData : ScriptableObject
{
}
quiz iconاختبر نفسك

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

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