Saya telah melihat beberapa video dan tutorial untuk membuat objek singleton di Unity, terutama untuk a GameManager
, yang tampaknya menggunakan pendekatan berbeda untuk membuat instance dan memvalidasi singleton.
Apakah ada pendekatan yang benar, atau lebih tepatnya, lebih disukai untuk ini?
Dua contoh utama yang saya temui adalah:
Pertama
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);
}
}
Kedua
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;
}
}
Perbedaan utama yang bisa saya lihat antara keduanya adalah:
Pendekatan pertama akan mencoba untuk menavigasi tumpukan objek game untuk menemukan contoh GameManager
yang walaupun ini hanya terjadi (atau seharusnya hanya terjadi) sekali tampaknya bisa sangat tidak dioptimalkan sebagai adegan tumbuh dalam ukuran selama pengembangan.
Juga, pendekatan pertama menandai objek yang tidak akan dihapus ketika aplikasi mengubah adegan, yang memastikan bahwa objek tetap ada di antara adegan. Pendekatan kedua tampaknya tidak mematuhi ini.
Pendekatan kedua tampak aneh karena dalam kasus di mana instance adalah null dalam pengambil, itu akan membuat GameObject baru dan menetapkan komponen GameManger untuk itu. Namun, ini tidak dapat berjalan tanpa terlebih dahulu komponen GameManager ini telah dilampirkan ke sebuah objek dalam adegan, jadi ini menyebabkan saya kebingungan.
Apakah ada pendekatan lain yang akan direkomendasikan, atau gabungan dari keduanya di atas? Ada banyak video dan tutorial mengenai lajang, tetapi semuanya sangat berbeda sehingga sulit untuk menarik perbandingan antara keduanya dan dengan demikian, kesimpulan yang mana yang merupakan pendekatan terbaik / disukai.
GameManager
harus dilakukan, melainkan bagaimana memastikan hanya ada satu contoh objek dan cara terbaik untuk menegakkannya.