Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity'de DontDestroyOnLoad() Metodu: Sahneler Arası Nesneleri Koruma

Paylaşan: Unity Eğitim 14 September 2025 3 dakika okuma 141 görüntülenme

Unity oyun motorunda, oyununuz farklı sahnelerden oluşur. Oyuncunun ilerlemesiyle farklı sahneler yüklenir ve boşaltılır. Ancak, bazı oyun nesnelerinin tüm sahnelerde mevcut kalması gerekebilir. Örneğin, oyun müziği, oyun yöneticisi veya oyun skorunu takip eden bir nesne, oyun boyunca devamlı aktif olmalıdır. İşte bu noktada DontDestroyOnLoad() metodu devreye girer.

DontDestroyOnLoad() Metodu Nedir?


DontDestroyOnLoad(), Unity'de bir oyun nesnesini sahneler arasında yok olmasını engellemek için kullanılan bir metottur. Bu metod, belirtilen oyun nesnesini, yeni bir sahne yüklendiğinde bile aktif tutar. Bu, oyunun sürekliliğini sağlamak ve oyun verilerini kaybetmemek için oldukça önemlidir.

Kullanım Şekli


DontDestroyOnLoad() metodu, UnityEngine namespace'i içerisinde bulunur ve kullanımı oldukça basittir. Metoda, korunmasını istediğiniz oyun nesnesinin GameObject referansını parametre olarak vermeniz yeterlidir.
using UnityEngine;

public class GameManager : MonoBehaviour
{
void Start()
{
DontDestroyOnLoad(gameObject);
}
}


Yukarıdaki kod örneğinde, GameManager script'i bağlı olan GameObject, tüm sahnelerde aktif kalacaktır. Start() metodu içerisinde DontDestroyOnLoad(gameObject) satırı çalıştırılarak bu sağlanır. gameObject, script'in bağlı olduğu GameObject'i temsil eder.

Önemli Notlar ve İpuçları


DontDestroyOnLoad() metodunu kullanırken dikkat etmeniz gereken bazı noktalar vardır:

1. Tek Bir Örnek (Singleton Pattern):


DontDestroyOnLoad()'ı kullanırken, aynı script'in birden fazla örneğinin sahnelerde bulunmaması önemlidir. Bu durum, beklenmedik davranışlara ve hatalara yol açabilir. Singleton tasarım deseni kullanarak, script'inizin sadece bir örneğinin oluşturulmasını sağlayabilirsiniz.
using UnityEngine;

public class GameManager : MonoBehaviour
{
private static GameManager _instance;

public static GameManager Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<GameManager>();
if (_instance == null)
{
GameObject obj = new GameObject("GameManager");
_instance = obj.AddComponent<GameManager>();
}
DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
}

void Start()
{
// ...
}
}


2. Performans:


DontDestroyOnLoad() ile koruduğunuz nesneler, her sahnede bellekta kalır. Çok fazla nesneyi bu şekilde korumak, oyun performansınızı olumsuz etkileyebilir. Sadece gerçekten gerekli nesneleri korumaya özen gösterin.

3. Temizleme:


Oyununuz bittiğinde veya gerekli olmadığında, DontDestroyOnLoad() ile korunan nesneleri manuel olarak yok etmeniz gerekebilir. Bunun için, Destroy() metodunu kullanabilirsiniz. Oyun bittiğinde bir temizlik fonksiyonu çağırıp, bu nesneleri yok edebilirsiniz.

Örnek Senaryo: Oyun Müziği


Oyun müziğini tüm sahnelerde çalmak istediğinizi varsayalım. Bu durumda, müzik çalar script'inizde DontDestroyOnLoad() kullanabilirsiniz:
using UnityEngine;

public class MusicPlayer : MonoBehaviour
{
void Start()
{
DontDestroyOnLoad(gameObject);
}
}


Bu kod, müzik çalar oyun nesnesini tüm sahnelerde aktif tutacaktır. [YOUTUBE_VIDEO_BURAYA]

Sonuç


DontDestroyOnLoad() metodu, Unity oyun geliştirmede sahneler arasında veri tutmak için güçlü bir araçtır. Ancak, performans ve singleton pattern kullanımı gibi önemli noktaları göz önünde bulundurmak gerekir. Bu rehber ile DontDestroyOnLoad() metodunu daha etkili bir şekilde kullanabilirsiniz.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!