Birlik'te tekil nesneler oluşturmak için, özellikle GameManager
bir tekil tonu somutlaştırmak ve onaylamak için farklı yaklaşımlar kullandığı anlaşılan birkaç video ve eğitim gördüm .
Buna doğru ya da tercih edilen bir yaklaşım var mı?
Karşılaştığım iki ana örnek:
İlk
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
_instance = GameObject.FindObjectOfType<GameManager>();
}
return _instance;
}
}
void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
İkinci
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
instance = new GameObject("Game Manager");
instance.AddComponent<GameManager>();
}
return _instance;
}
}
void Awake()
{
_instance = this;
}
}
İkisi arasında görebildiğim ana fark şudur:
İlk yaklaşım, oyun GameManager
geliştirme sırasında sahnelerin boyutunda büyürken, bunun yalnızca gerçekleşmesine rağmen (ya da sadece bir kez olması gerektiği gibi) bir zaman bulmak için oyun nesnesi yığınında gezinmeye çalışacaktır .
Ayrıca, birinci yaklaşım, uygulama sahneyi değiştirdiğinde nesnenin sahneler arasında kalmasını sağlayan nesnenin silinmemesini işaretler. İkinci yaklaşım buna uygun görünmüyor.
İkinci yaklaşım, örneğin alıcıda boş olduğu durumda tuhaf görünüyor, yeni bir GameObject oluşturacak ve buna bir GameManger bileşeni atayacaktır. Ancak, bu ilk önce bu GameManager bileşenini sahnede bir nesneye zaten ekli olmadan çalıştırılamaz, bu yüzden bu bana biraz karışıklık yaratıyor.
Tavsiye edilecek başka yaklaşımlar ya da yukarıdaki ikisinin bir melezi var mı? Singleton'larla ilgili birçok video ve ders var, ancak ikisi arasında bir karşılaştırma yapmak çok zor, o yüzden ikisi arasında bir karşılaştırma yapmak zor, hangisinin en iyi / tercih edilen yaklaşım olduğu sonucuna varılıyor.
GameManager
gerektiğiyle ilgili bir soru değil, nesnenin sadece bir örneğinin olmasını ve bunu uygulamanın en iyi yolunun nasıl sağlanacağını garanti ediyor.