Menu
CoddyTech

מתרסקים ומתחילים מחדש

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

challenge icon

אתגר

בינוני

התנגשות מסיימת את הריצה, וכפתור מתחיל את הריצה הבאה. שמור על כל מה שנוסף בשיעורים הקודמים. על המשטח יש GameOverPanel מוסתר עם RestartButton שכותרתו Run again, והסצנה ממלאת שני שדות חדשים ב-GameManager: gameOverPanel ו-restartButton. ל-Runner יש Rigidbody קינמטי, ולכן הוא מקבל הודעות הפעלה של טריגר מהמכשולים.

ב-GameManager:

  • מעל המחלקה, הכרז על public enum GameState { Playing, GameOver }, והוסף למחלקה שדה public GameState state שמתחיל ב-Playing.
  • הוסף using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; ו-public Button restartButton;.
  • מתודה ציבורית GameOver() משנה את state ל-GameOver, משנה את speed ל-0, וכך עוצרת את כל המכשולים, ומציגה את הלוח.
  • Update() לא עושה דבר אלא אם המצב הוא Playing, ולכן המהירות והמרחק נעצרים.
  • ב-Start(), הגדר את restartButton כך שיטען מחדש את הסצנה שפועלת.

ב-Runner: כשנכנסים לטריגר שמתויג Obstacle, קוראים ל-GameManager.Instance.GameOver(). כל עוד המצב אינו Playing, החצים לא עושים דבר.

ב-Spawner: אל תיצור מכשולים כל עוד המצב אינו Playing.

לחץ על Play, התרסק ורוץ שוב, ואז לחץ על Check.

נסו בעצמכם

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public float speed = 10f;
    public float speedUp = 0.5f;
    public float maxSpeed = 20f;
    public TMP_Text distanceText;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
        distance += speed * Time.deltaTime;
        distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
    }
}

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