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

تعمل المكوّنات معًا

جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 4 من 50.

لا تزال المكوّنات الصغيرة بحاجة إلى بعضها. يحتاج Jetpack إلى Fuel على الكائن نفسه، لذا يعثر على Fuel مرة واحدة في Awake، ويحتفظ به في حقل، ويتواصل معه من خلال طريقتين عامتين صغيرتين:

public class Fuel : MonoBehaviour
{
    public float amount = 10f;

    public bool IsEmpty()
    {
        return amount <= 0f;
    }

    public void Burn(float units)
    {
        amount = Mathf.Max(amount - units, 0f);
    }
}
[RequireComponent(typeof(Fuel))]
public class Jetpack : MonoBehaviour
{
    public float lift = 4f;
    private Fuel fuel;

    void Awake()
    {
        fuel = GetComponent<Fuel>();
    }

    void Update()
    {
        if (Keyboard.current.spaceKey.isPressed && !fuel.IsEmpty())
        {
            fuel.Burn(Time.deltaTime);
            transform.position += Vector3.up * lift * Time.deltaTime;
        }
    }
}

تجعل [RequireComponent(typeof(Fuel))] Unity يضيف Fuel كلما أُضيف Jetpack، سواء في المحرر أو باستخدام AddComponent، وترفض إزالة Fuel ما دام Jetpack موجودًا. يتحقق Unity من ذلك لحظة إضافة Jetpack فقط، لذا فإن Jetpack الذي كان موجودًا على كائن قبل كتابة السمة يحتفظ بإعداده القديم. المكان المناسب لجلبه هو Awake: إذ يُشغَّل مرة واحدة، وتكون جميع مكوّنات الكائن نفسه موجودة عندها.

لا يغيّر Jetpack القيمة amount بنفسه أبدًا. يحدد Fuel معنى الحرق، مثل عدم الانخفاض مطلقًا عن 0، ولا يفعل Jetpack سوى الاستعلام. إذا عرض Fuel لاحقًا مقياسًا أو أعاد التعبئة من العناصر الملتقطة، فلن يحتاج Jetpack إلى التغيير.

challenge icon

التحدي

سهل

اندفاع المتزلجة مجاني: يدفعها مفتاح Space إلى الأمام 3 وحدات (+z) كلما ضغطت عليه. اجعليه يستهلك قدرة التحمّل. تتحرك بالأسهم (Mover.cs جاهز)، وملف Stamina.cs يعيد بالفعل ملء current بمقدار regen في الثانية، حتى max (100).

  • في Stamina، أضيفي دالة عامة bool TrySpend(float cost). إذا كانت current أكبر من cost أو تساويه، فإنها تطرح cost من current وتعيد true؛ وإلا، تترك current كما هي وتعيد false.
  • اجعلي Dash يتطلب وجود Stamina على الكائن، بحيث تضيف Unity واحدًا كلما أُضيف Dash. اجلبيه مرة واحدة في Awake وخزّنيه في حقل.
  • تكلفة الاندفاع هي cost (تضبطها نافذة Inspector على 40). لا تنفذ Space اندفاعًا إلا عندما توافق TrySpend، وإلا فسجّلي Too tired.

اضغطي Play ونفّذي الاندفاع حتى تتعب، ثم اضغطي Check.

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Dash : MonoBehaviour
{
    public float distance = 3f;
    public float cost = 40f;

    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            transform.position += Vector3.forward * distance;
        }
    }
}
quiz iconاختبر نفسك

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

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