Menu
CoddyTech

Bölümü Yeniden Başlatma

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 18 / 56.

Bir seviyeyi sıfırlamanın en hızlı yolu onu yeniden yüklemektir. SceneManager.GetActiveScene() şu anda açık olan sahneyi döndürür ve onun name (veya buildIndex) değeri, LoadScene’in aldığı değerdir. Oyun bitti panelindeki bu Yeniden Başlat düğmesi şunu çağırır:

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unity açık sahneyi yok eder ve sahne dosyasından yeniden oluşturur. Devrilen bir sandık da dahil olmak üzere her nesne sahnenin onu yerleştirdiği konuma geri döner, her alan Inspector değerini yeniden alır ve Awake ile Start tekrar çalışır. Hiçbir kodun nesneleri tek tek eski hâline getirmesi gerekmez. Düğme, "Level3" gibi bir ad yerine etkin sahneyi istediği için aynı betik yerleştirildiği her seviyeyi yeniden başlatır.

static bir alan sahnenin parçası değildir: sınıfa aittir, bu nedenle yeniden yükleme onu olduğu gibi bırakır. private static float bestTime; en iyi süreyi yeniden başlatmalar boyunca korurken, normal bir private float time; yeni sahneyle birlikte yeniden 0’dan başlar. GameManager.Instance da static’tir: yeniden yüklemeden sonra yeni GameManager’ın Awake’i onu ayarlayana kadar yok edilmiş GameManager’ı gösterir.

challenge icon

Görev

Kolay

İki seviye, Level1 ve Level2; her birinde LevelRestart betiğini barındıran bir Level nesnesi bulunuyor. Ok tuşları Player'ı hareket ettirir ve Level1'deki altın blok Level2'yi yükler (ikisi de hazır). LevelRestart.cs dosyasını tamamla:

  • Oyuncu fallY değerinin (-3) altına düştüğünde falls değerini 1 artır ve oyuncunun bulunduğu seviyeyi yeniden başlat: Level2'de düşerse Level2 yeniden başlar.
  • falls oyun boyunca gerçekleşen her düşüşü sayar, bu nedenle yeniden yüklemeden sonra da korunmalıdır. Start zaten bunu Falls: 1 olarak gösterir.

Play'e bas, her iki seviyede de bir kenardan düş ve ardından Check'e bas.

Kendin dene

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 değerinin altına düştüğünde: düşüşü say ve oyuncunun bulunduğu bölümü yeniden başlat
    }
}
quiz iconKendini test et

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

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler