התחלת השלב מחדש
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 18 מתוך 60.
הדרך המהירה ביותר לאפס שלב היא לטעון אותו שוב. SceneManager.GetActiveScene() מחזירה את הסצנה הפתוחה כרגע, וה-name שלה (או ה-buildIndex שלה) הוא הערך ש-LoadScene מקבלת. כפתור ההפעלה מחדש הזה בחלונית סיום המשחק קורא לפונקציה:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}Unity משמידה את הסצנה הפתוחה ובונה אותה מחדש מקובץ הסצנה. כל אובייקט חוזר למקום שהסצנה הציבה אותו בו, כולל ארגז שהשחקן הפיל, וכל שדה מקבל שוב את הערך שלו ב-Inspector, והפונקציות Awake ו-Start רצות שוב. אין צורך בשום קוד כדי להחזיר את הדברים למקומם אחד אחד. מכיוון שהכפתור מבקש את הסצנה הפעילה במקום שם כמו "Level3", אותו סקריפט מפעיל מחדש כל שלב שבו הוא נמצא.
שדה static אינו חלק מהסצנה: הוא שייך למחלקה, ולכן טעינה מחדש משאירה אותו כפי שהיה. private static float bestTime; שומר על הזמן הטוב ביותר בין הפעלות מחדש, בעוד private float time; רגיל מתחיל שוב מ-0 עם הסצנה החדשה. גם GameManager.Instance הוא סטטי: אחרי טעינה מחדש הוא מצביע על GameManager שהושמד, עד שהפונקציה Awake של החדש מגדירה אותו.
אתגר
קלנפילה צריכה להפעיל מחדש את השלב שבו נמצא השחקן ולספור את הנפילה.
- הוסף
using UnityEngine.SceneManagement;ושנה את המונה ל־private static int falls;, כדי שהערך שלו יישמר לאחר טעינה מחדש. - ב־
Update(), כאשרplayer.position.y < fallY, בצעfalls++;וטען אתSceneManager.GetActiveScene().name.
לחץ על „שחק” וצעד מעבר לקצה בשני השלבים: Falls: 1, ואז Falls: 2. לאחר מכן לחץ על „בדיקה”.
נסו בעצמכם
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// מתחת ל-fallY: יש לספור את הנפילה ולהתחיל מחדש את השלב שבו השחקן נמצא
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעותתרגלו בעצמכם: Unity אונליין