Unity'de DontDestroyOnLoad() Metodu: Sahneler Arası Nesneleri Koruma
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.
Yorumlar (0)
İlk yorumu siz yapın!