Menu
CoddyTech

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

جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 35 من 60.

تُعدّ قيمة 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

التحدي

متوسط

العب رحلة المذنب عبر SlowZone بالحركة البطيئة.

  1. في SlowZone.cs، اكتب void OnTriggerEnter(Collider other): عيّن Time.timeScale إلى slowScale وTime.fixedDeltaTime إلى 0.02f * slowScale.
  2. اكتب void OnTriggerExit(Collider other): أعدهما إلى 1f و0.02f.

اضغط على «العب» ومفتاح المسافة: ينزلق المذنب عبر المنطقة بسرعة 0.4. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

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

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

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

تدرّب بنفسك: Playground لـ Unity