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 / 60.

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; name (veya buildIndex) değeri ise 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. Her nesne, oyuncunun devirdiği bir sandık da dahil olmak üzere, sahnenin yerleştirdiği konuma geri döner; her alan Inspector'daki değerini yeniden alır ve Awake ile Start yeniden çalışır. Nesneleri tek tek eski hâline getirecek bir kod yazmak 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 de statiktir: yeniden yüklemeden sonra, yenisinin Awake yöntemi onu ayarlayana kadar yok edilmiş GameManager'ı gösterir.

challenge icon

Görev

Kolay

Düşme, oyuncunun bulunduğu bölümü yeniden başlatmalı ve düşme sayısını artırmalıdır.

  1. using UnityEngine.SceneManagement; ekle ve sayacı private static int falls; olarak değiştir; böylece yeniden yükleme sayacı korur.
  2. Update() içinde, player.position.y < fallY olduğunda falls++; işlemini yap ve SceneManager.GetActiveScene().name değerini yükle.

“Oyna” düğmesine bas ve her iki bölümde de bir kenardan yürü: önce Falls: 1, ardından Falls: 2. Sonra “Kontrol et” düğmesine 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
    }
}

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

Kendi başına pratik yap: Unity playground