Menu
CoddyTech

שחק שוב

שיעור 12 מתוך 14 בקורס משחק Unity: נחש בתלת־ממד של Coddy.

כשהנחש מת, מופיע חלון Game Over עם כפתור Play Again. החלון נמצא ב-HUD ומוסתר בתחילת המשחק, ו-SetActive(true) מציג אותו. הנחש יודע מתי הוא מת, ו-GameManager מנהל את המסכים, לכן Die() קוראת ל-GameOver() ציבורית ב-GameManager.

Play Again מתחיל מחדש באמצעות טעינה מחדש של הסצנה. כל האובייקטים חוזרים כפי שהם בסצנה: הנחש בתא הראשון שלו עם שני מקטעים, הניקוד הוא 0, והחלון מוסתר. כפתור Retry במשחק מרוצים מחובר באותה דרך:

void Start()
{
    retryButton.onClick.AddListener(Retry);
}

void Retry()
{
    SceneManager.LoadScene("Track1");
}

טעינה לפי שם מקשרת את הכפתור לסצנה אחת. SceneManager.GetActiveScene().buildIndex היא הסצנה שפועלת, ולכן טעינה שלה מפעילה מחדש את הסצנה שבה נמצא הכפתור. בסצנה החדשה יש GameManager חדש, שה-Awake() שלו מגדיר שוב את Instance, כך שהנחש החדש מתקשר עם ה-GameManager החדש.

challenge icon

אתגר

בינוני

ל-HUD יש GameOverPanel מוסתר עם PlayAgainButton, והסצנה מגדירה את שניהם ב-GameManager.

  1. ב-GameManager, הוסף using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; ו-public Button playAgainButton;.
  2. כתוב public void GameOver(), שמציג את הלוח.
  3. כתוב void PlayAgain(), שטוען שוב את הסצנה הפעילה, וב-Start() הגדר שהכפתור יקרא לו.
  4. ב-Die() של Snake, קרא ל-GameOver().

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

נסו בעצמכם

using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    public TMP_Text scoreText;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        scoreText.text = "Score: 0";
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        scoreText.text = "Score: " + score;
        MoveFood();
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
quiz iconבחנו את עצמכם

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

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