השהיה באמצעות timeScale
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 34 מתוך 60.
Time.timeScale קובע באיזו מהירות זמן המשחק עובר: 1 היא מהירות רגילה ו־0 עוצר אותו. בערך 0, Time.deltaTime הוא 0, ולכן כל תנועה שנכתבת בתור speed * Time.deltaTime נעצרת. FixedUpdate() כבר לא נקראת, ולכן גופים קשיחים נשארים תלויים באוויר, וגם WaitForSeconds ו־Invoke ממתינים, מכיוון שהם סופרים את זמן המשחק. הסקריפט הזה מפעיל ומכבה את ההשהיה באמצעות כפתור שרשימת On Click שלו קוראת ל־TogglePause, ומציג חלונית בזמן ההשהיה:
public class PauseToggle : MonoBehaviour
{
public GameObject pausePanel;
bool paused;
public void TogglePause()
{
paused = !paused;
Time.timeScale = paused ? 0f : 1f;
pausePanel.SetActive(paused);
}
}לא הכול נעצר. Update() ו־LateUpdate() עדיין נקראות בכל פריים, כאשר Time.deltaTime הוא 0; yield return null בקורוטינה עדיין חוזר בפריים הבא, והממשק עדיין מגיב ללחיצות, וכך הכפתור יכול לסיים את ההשהיה. גם המקשים עדיין נקלטים: צפרדע שקופצת בלחיצה על Space בתוך Update() הייתה קולטת את הלחיצה בזמן ההשהיה וקופצת בצעד הפיזיקה הראשון אחריה. הסקריפט שלה מדלג על בדיקת המקשים כשהזמן עומד:
void Update()
{
if (Time.timeScale == 0f) return; // מושהה: התעלם מהמקשים
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
}
}Time.timeScale חל על המשחק כולו, ולא על סצנה אחת: אם טוענים סצנה אחרת כשהערך הוא 0, הסצנה החדשה מתחילה בהשהיה. כפתור בתפריט שמפעיל מחדש שלב או יוצא ממנו מחזיר קודם את הערך ל־1.
אתגר
בינוניהוסף לתחום הטניס תפריט השהיה. הסצנה מחברת את הלחצנים Pause ו-Resume.
- ב-
PauseMenu.cs, הפונקציהPause()מגדירה אתTime.timeScale = 0f;וקוראת ל-panel.SetActive(true);. - הפונקציה
Resume()מגדירה אתTime.timeScale = 1f;וקוראת ל-panel.SetActive(false);. - ב-
BallMachine.cs, הוסף אתif (Time.timeScale == 0f) return;מעל בדיקת Space בתוךUpdate().
לחץ על "שחק", הגש כדור והשהה: הוא ייתקע באוויר. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class PauseMenu : MonoBehaviour
{
public GameObject panel;
public void Pause()
{
// עצור את זמן המשחק והצג את החלונית
}
public void Resume()
{
// זמן המשחק שוב מתקדם במהירות רגילה, והחלונית מוסתרת
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעותתרגלו בעצמכם: Unity אונליין