Menu
CoddyTech

Tekrar Oyna

Coddy'nin Unity'de 3D Yılan Oyunu 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

HUD'da PlayAgainButton içeren gizli bir GameOverPanel bulunur ve sahne her ikisini de GameManager üzerinde ayarlar.

  1. GameManager içinde using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; ve public Button playAgainButton; ekle.
  2. Paneli gösteren public void GameOver() metodunu yaz.
  3. Etkin sahneyi yeniden yükleyen void PlayAgain() metodunu yaz ve Start() içinde düğmenin bu metodu çağırmasını sağla.
  4. Snake'in Die() metodunda GameOver() çağır.

Play'e bas, çarp, tekrar oyna, ardından Check'e bas.

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'de 3D Yılan Oyunu bölümündeki tüm dersler