الحركة البطيئة
جزء من قسم بناء ألعاب حقيقية في رحلة 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 دون تغيير.
التحدي
متوسطيعبر مذنب السماء، ويُطلقه 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;
// حركة بطيئة ما دام هناك شيء داخل المنطقة
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك