הילוך איטי
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-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 בעצמה. הסקריפט הזה מאט את המשחק כל עוד מקש הרווח לחוץ:
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.
לחצו על Play, לחצו על Space וצפו בשביט עובר דרך האזור, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// הילוך איטי כל עוד משהו נמצא בתוך האזור
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות