मैंने एकता में सिंगलटन ऑब्जेक्ट्स बनाने के लिए कई वीडियो और ट्यूटोरियल देखे हैं, मुख्य रूप से ए के लिए GameManager
, जो एक सिंगलटन को त्वरित और मान्य करने के लिए विभिन्न तरीकों का उपयोग करते हुए दिखाई देते हैं।
क्या इसके लिए कोई सही, या बल्कि पसंदीदा तरीका है?
मैंने जिन दो मुख्य उदाहरणों का सामना किया है वे हैं:
प्रथम
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);
}
}
दूसरा
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;
}
}
मुख्य अंतर मैं दोनों के बीच देख सकता हूं:
पहला दृष्टिकोण गेम ऑब्जेक्ट स्टैक को नेविगेट करने का प्रयास करेगा, GameManager
जिसका एक उदाहरण खोजने के लिए भले ही यह केवल (या केवल होना चाहिए) एक बार ऐसा लगता है कि यह बहुत ही अनपेक्षित हो सकता है क्योंकि विकास के दौरान आकार में दृश्य बढ़ते हैं।
इसके अलावा, पहला दृष्टिकोण ऑब्जेक्ट को हटा दिया जाता है जब एप्लिकेशन दृश्य बदलता है, जो यह सुनिश्चित करता है कि ऑब्जेक्ट दृश्यों के बीच कायम है। दूसरा दृष्टिकोण इसका पालन नहीं करता है।
दूसरा दृष्टिकोण अजीब लगता है क्योंकि इस मामले में जहां सूचक में आवृत्ति शून्य है, यह एक नया गेमऑबजेक्ट बनाएगा और इसके लिए एक गेममैंगर घटक असाइन करेगा। हालाँकि, यह पहली बार नहीं चल सकता है यह GameManager घटक पहले से ही दृश्य में एक वस्तु से जुड़ा हुआ है, इसलिए यह मुझे कुछ भ्रम पैदा कर रहा है।
क्या कोई अन्य दृष्टिकोण है जिसकी सिफारिश की जाएगी, या उपरोक्त दोनों का एक संकर? सिंगल के बारे में बहुत सारे वीडियो और ट्यूटोरियल हैं, लेकिन वे सभी इतने भिन्न हैं कि दोनों के बीच किसी भी तुलना को खींचना मुश्किल है और इस प्रकार, एक निष्कर्ष जिसके लिए सबसे अच्छा / पसंदीदा दृष्टिकोण है।
GameManager
चाहिए, बल्कि यह सुनिश्चित करने के लिए कि वस्तु का केवल एक उदाहरण और इसे लागू करने का सबसे अच्छा तरीका क्या है।