Menu
CoddyTech

Yeniden Oyna

Coddy'nin Unity Oyunu: 3D Yılan kursunda ders 12 / 14.

Yılan öldüğünde, Yeniden Oyna düğmesinin bulunduğu bir Oyun Bitti paneli açılır. Panel HUD'dadır ve başlangıçta gizlidir; SetActive(true) onu gösterir. Yılan ne zaman öldüğünü bilir ve ekranların yönetimi GameManager'a aittir; bu yüzden Die(), GameManager üzerindeki genel GameOver() metodunu çağırır.

Yeniden Oyna, sahneyi yeniden yükleyerek oyunu baştan başlatır. Her nesne, sahnede bulunduğu hâliyle geri gelir: yılan ilk hücresinde ve iki parçalıdır, puan 0'dır, panel gizlidir. Bir yarış oyunundaki Yeniden Dene düğmesi de aynı şekilde bağlanır:

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

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

Adla yükleme, düğmeyi tek bir sahneye bağlar. SceneManager.GetActiveScene().buildIndex, çalışmakta olan sahnedir; bu nedenle sahnenin yüklenmesi, düğmenin bulunduğu sahneyi yeniden başlatır. Yeni sahnede yeni bir GameManager bulunur ve onun Awake() metodu Instance'ı yeniden ayarlar; böylece yeni yılan yeni GameManager ile iletişim kurar.

challenge icon

Görev

Orta

Ölmek, Oyun Bitti panelini gösterir ve Yeniden Oyna yeni bir oyun başlatır.

  1. GameManager içinde using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; ve public Button playAgainButton; ekle.
  2. public void GameOver() paneli gösterir; void PlayAgain() etkin sahneyi yeniden yükler ve Start(), bunu playAgainButton.onClick'e ekler.
  3. Snake'in Die() işlevi GameManager.Instance.GameOver() işlevini çağırır.

“Oyna”'ya bas, çarp ve Yeniden Oyna'ya tıkla: yeni bir oyun başlar. Ardından “Kontrol et”.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity Oyunu: 3D Yılan bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground