CodeBlanks Logo Icon CodeBlanks

DontDestroyOnLoad

DontDestroyOnLoad ile nesneleri sahne değişiminde korumayı öğrenirsin.

DontDestroyOnLoad nedir?

Varsayılan olarak Single modda yeni bir sahneye geçildiğinde önceki sahnedeki tüm GameObject'ler yok edilir. DontDestroyOnLoad(gameObject); fonksiyonu, çağrıldığı nesneyi bu temizlikten muaf tutarak sonraki sahnelerde yaşamasını (persist) sağlar.

void Awake() {
    // Bu nesne sahne geçişlerinde hayatta kalır
    DontDestroyOnLoad(gameObject);
}

Müzik çalar nesneleri veya oyuncu profil verilerini tutan yöneticiler bu sayede sahne değiştikçe kesintiye uğramaz.

Singleton Deseni ve Kalıcı Yöneticiler

DontDestroyOnLoad kullanılan nesneler eski sahneye geri dönüldüğünde çift kopya (duplicate) oluşturabilir. Bunu engellemek için Singleton tasarım deseni kurularak nesneden yalnızca bir adet bulunması garanti altına alınır.

public static GameManager Instance;

void Awake() {
    if (Instance == null) {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    } else {
        Destroy(gameObject); // İkinci kopyayı yok et
    }
}

Böylece oyun verileri tüm sahnelerde merkezi ve hatasız olarak yönetilir.

Uygulama Yönetici ve kalıcılık durumunu yazdır

managerName değişkenine "GameManager", status değişkenine "DontDestroyOnLoad" ata. Ekrana Manager: GameManager | Status: DontDestroyOnLoad yazdır.

Başlangıç kodu

Player.cs
using System;

class Program
{
    static void Main()
    {
        // managerName ve status değerlerini tanımlayıp yazdır
    }
}

Örnek çözüm

Player.cs
using System;

class Program
{
    static void Main()
    {
        string managerName = "GameManager";
        string status = "DontDestroyOnLoad";
        Console.WriteLine("Manager: " + managerName + " | Status: " + status);
    }
}

Beklenen çıktı

Manager: GameManager | Status: DontDestroyOnLoad

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir GameObject'in sahne geçişi yapıldığında silinmeyip bir sonraki sahnede de varlığını sürdürmesi için hangi fonksiyon çağrılır?

  • DestroyImmediate(gameObject);
  • SceneManager.KeepAlive(gameObject);
  • DontDestroyOnLoad(gameObject); Doğru cevap
  • Object.PersistForever(gameObject);

Açıklama: DontDestroyOnLoad(), belirtilen nesneyi sahne geçişlerindeki otomatik bellek temizliğinden koruyan yerleşik Unity metodudur.

2 Nesneyi sahne temizliğinden koru

Soru
____(gameObject);
Cevap
DontDestroyOnLoad(gameObject);

Açıklama: Bir nesneyi sahne geçişlerinde korumak için DontDestroyOnLoad fonksiyonu çağrılır.

3 Kalıcılık kavramları

Kavram Anlamı
DontDestroyOnLoad Nesneyi sahne geçişinde koruyan metot
Singleton Tek örnek kalmasını sağlayan desen
GameManager Oyun verisi ve akışını taşıyan yönetici
Persist Nesnenin geçişlerde bellekte kalması

Orta seviye bölümündeki tüm dersler