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

الحركة البطيئة

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

تكون Time.timeScale بين 0 و1 حركةً بطيئة. عند 0.25، تساوي Time.deltaTime ربع زمن الإطار الفعلي، لذا فإن سيارة تتحرك باستخدام speed * Time.deltaTime تقطع ربع المسافة في كل ثانية فعلية، وتطير الأجسام الصلبة وتسقط بسرعة تساوي ربع سرعتها، وتستمر WaitForSeconds(1f) لمدة 4 ثوانٍ فعلية. أما إذا تجاوزت القيمة 1، فتعمل اللعبة بسرعة: القيمة 2 تعني ضعف السرعة.

تحتاج الفيزياء إلى سطر إضافي. لا تزال كل خطوة فيزيائية تحرك اللعبة بمقدار Time.fixedDeltaTime، أي 0.02 ثانية من وقت اللعبة، وعند 0.25 تستغرق هذه الخطوات 0.08 ثانية فعلية: تُشغَّل FixedUpdate() 12.5 مرة فقط في الثانية الفعلية، لذا تتحرك الأجسام إطارًا واحدًا من كل خمسة إطارات وتصبح الحركة متقطعة. قلّص مدة الخطوة بالعامل نفسه، وأعد القيمتين إلى وضعهما السابق بعد ذلك، لأن Unity لا يعيد ضبط fixedDeltaTime تلقائيًا أبدًا. يبطئ هذا النص البرمجي اللعبة أثناء الضغط على Space:

float normalStep;

void Awake()
{
    normalStep = Time.fixedDeltaTime;   // 0.02 في مشروع جديد
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Time.timeScale = 0.25f;
        Time.fixedDeltaTime = normalStep * Time.timeScale;
    }
    if (Input.GetKeyUp(KeyCode.Space))
    {
        Time.timeScale = 1f;
        Time.fixedDeltaTime = normalStep;
    }
}

مع الخطوة الأصغر، تظل الفيزياء تنفّذ 50 خطوة في الثانية الفعلية، وتغطي كل خطوة ربع وقت اللعبة، لذا تبقى الحركة البطيئة سلسة. تُقاس الخطوة بثواني اللعبة، لذا يستمر عمل الكود في FixedUpdate() الذي يستخدم Time.deltaTime دون تغيير.

challenge icon

التحدي

متوسط

يعبر مذنب السماء، ويُطلقه Space من اليسار (Launcher.cs، جاهز). وفي طريقه يمر عبر SlowZone، وهي صندوق مُشغِّل، وينبغي أن يُعرَض هذا الجزء من رحلته بالحركة البطيئة. اكتب SlowZone.cs:

  • عندما يدخل شيء ما المنطقة، يسير وقت اللعبة وفق slowScale (0.4 في Inspector)، وتقل خطوة الفيزياء بالعامل نفسه انطلاقًا من 0.02، لكي يستمر المذنب في الحركة بسلاسة.
  • عندما يغادر المنطقة، يعود الوقت إلى سرعته الطبيعية، وتعود خطوة الفيزياء إلى 0.02.

اضغط تشغيل، ثم اضغط Space وشاهد المذنب وهو يعبر المنطقة، ثم اضغط تحقّق.

جرّب بنفسك

using UnityEngine;

public class SlowZone : MonoBehaviour
{
    public float slowScale = 0.4f;

    // حركة بطيئة ما دام هناك شيء داخل المنطقة
}
quiz iconاختبر نفسك

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

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