Menu
CoddyTech

الوقت غير المتدرّج

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

تظل اللعبة المتوقفة مؤقتًا أو المُبطأة بحاجة إلى ساعة حقيقية لبعض الأمور: قائمة إيقاف مؤقت تتحرك رسومها، وعدّ تنازلي قبل استئناف اللعب، وتجميد يجب أن ينتهي تلقائيًا. تمثل Time.unscaledDeltaTime الزمن الحقيقي منذ الإطار السابق، مهما كانت قيمة Time.timeScale، وتمثل Time.unscaledTime الزمن الحقيقي منذ بدء اللعبة. تدير قائمة الإيقاف المؤقت هذه عجلة التحميل باستخدام الزمن الحقيقي، لذا تدور العجلة أثناء إيقاف اللعبة مؤقتًا:

void Update()
{
    wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime);   // نصف دورة في الثانية، سواء كان متوقفًا مؤقتًا أم لا
}

تستخدم الروتينات المشتركة الزوج نفسه. يحسب WaitForSeconds زمن اللعبة، لذا عند Time.timeScale = 0 لا ينتهي أبدًا؛ أما WaitForSecondsRealtime فيحسب الثواني الحقيقية. عند بدء تشغيل هذا الروتين المشترك عند فتح القائمة، يومض عنوان القائمة كل نصف ثانية:

IEnumerator Blink()
{
    while (true)
    {
        title.SetActive(!title.activeSelf);
        yield return new WaitForSecondsRealtime(0.5f);
    }
}

استخدم القيم المُقاسة لزمن اللعبة للعب، الذي ينبغي أن يتوقف عندما تتوقف اللعبة، واستخدم القيم غير المُقاسة لما يجب أن يستمر أثناء الإيقاف المؤقت أو الإبطاء: القوائم ورسومها المتحركة والمؤقتات التي تنهي الإيقاف المؤقت. لا يوجد إصدار من Invoke يعمل بالزمن الحقيقي: فهو يحسب زمن اللعبة دائمًا.

challenge icon

التحدي

متوسط

أضف إيقافًا لحظيًا للسندان: تتجمد اللعبة بأكملها للحظة عند سقوطه.

  1. في Anvil.cs، اكتب IEnumerator HitStop(): Time.timeScale = 0f;، ثم yield return new WaitForSecondsRealtime(freezeTime);، ثم أعد تعيينها إلى 1f.
  2. اكتب void OnCollisionEnter(Collision collision) بحيث تستدعي StartCoroutine(HitStop());.

اضغط على «العب» وأسقط السندان باستخدام مفتاح المسافة: يؤدي كل ارتطام إلى تجميد اللعبة لمدة 0.3 ثانية. ثم اضغط على «تحقق».

جرّب بنفسك

using System.Collections;
using UnityEngine;

public class Anvil : MonoBehaviour
{
    public float freezeTime = 0.3f;

    // أوقف اللعبة مؤقتًا لمدة freezeTime ثانية حقيقية عندما يصطدم السندان بشيء ما
}

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

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