Menu
CoddyTech

זמן ללא שינוי קנה מידה

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 35 מתוך 56.

גם משחק שמושהה או מואט עדיין זקוק לשעון אמיתי עבור דברים מסוימים: תפריט השהיה עם אנימציה, ספירה לאחור לפני שהמשחק ממשיך, הקפאה שחייבת להסתיים מעצמה. Time.unscaledDeltaTime הוא הזמן האמיתי מאז הפריים האחרון, ללא קשר לערך של Time.timeScale, ו־Time.unscaledTime הוא הזמן האמיתי מאז שהמשחק התחיל. תפריט ההשהיה הזה מסובב את גלגל הטעינה שלו באמצעות זמן אמיתי, ולכן הגלגל מסתובב בזמן שהמשחק מושהה:

void Update()
{
    wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime);   // חצי סיבוב בשנייה, בין אם המשחק מושהה ובין אם לא
}

ל־Coroutines יש את אותו זוג. WaitForSeconds סופר את זמן המשחק, ולכן כאשר Time.timeScale = 0 הוא לעולם לא מסתיים; WaitForSecondsRealtime סופר שניות אמיתיות. ה־Coroutine הזה, שמתחיל כשהתפריט נפתח, מהבהב את כותרת התפריט מדי חצי שנייה:

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

השתמשו בערכים המותאמים למשחק עבור המשחקיות, שאמורה להיעצר כשהמשחק נעצר, ובערכים שאינם מותאמים עבור מה שחייב להמשיך לפעול בזמן שהמשחק מושהה או מואט: תפריטים, האנימציות שלהם וטיימרים שמסיימים השהיה. ל־Invoke אין גרסה המבוססת על זמן אמיתי: הוא תמיד סופר את זמן המשחק.

challenge icon

אתגר

בינוני

עצירת פגיעה גורמת למכה חזקה להרגיש חזקה: כל המשחק קופא לרגע בעת הפגיעה. החצים מזיזים את המשגר, ומקש הרווח מפיל ממנו סדן (Dropper.cs, מוכן). כתבו את Anvil.cs, שכל סדן נושא:

  • כשהסדן פוגע במשהו, הקפיאו את המשחק: Time.timeScale 0.
  • כעבור freezeTime שניות בזמן אמת (0.3 בחלון Inspector), החזירו אותו ל-1.

לחצו על Play, הפילו כמה סדנים, ואז לחצו על Check.

נסו בעצמכם

using System.Collections;
using UnityEngine;

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

    // הקפא את המשחק למשך freezeTime שניות בזמן אמת כשהסדן פוגע במשהו
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה בונים משחקים אמיתיים