मैं वही बना रहा हूं जो अनिवार्य रूप से मेरा अपना प्रीफैब सिस्टम है। गेम ऑब्जेक्ट्स को मानव पठनीय डेटा फ़ाइल द्वारा परिभाषित किया जाता है। मैं एक खाली गेम ऑबजेक्ट बनाना चाहता हूं, इसे डेटा फ़ाइल में परिभाषित घटकों के साथ लोड करूं और इसे तैयार कर Instantiate()
कॉल का इंतजार करूं । हालाँकि, जब भी मैं GameObject go = new GameObject()
एक नए गेम ऑब्जेक्ट का उपयोग करता हूं दृश्य में जोड़ा जाता है।
प्रीफ़ैब्स में निर्मित एकता का उपयोग करते हुए, मैं एक प्रीफ़ैब को गेमऑबजेक्ट के रूप में लोड कर सकता हूं, और यह दृश्य में नहीं जोड़ा गया है। (नीचे उदाहरण देखें)
इसके पीछे तर्क यह है कि मैं एक सूची में शामिल होना चाहूंगा जिसमें GameObjects शामिल हैं, कुछ एकता प्रीफैब लोड करने और मेरे कस्टम प्रीफैब सिस्टम द्वारा बनाए गए अन्य द्वारा लोड किए गए हैं। यह रन समय पर होने की जरूरत है, और एकता संपादक को शामिल नहीं कर सकता (क्योंकि आदर्श रूप से अंत उपयोगकर्ता अपने स्वयं के डेटा फ़ाइलों को परिभाषित करने में सक्षम होंगे)।
मैं एक नया गेमऑबजेक्ट कैसे बना सकता हूं, बिना यूनिटी स्वचालित रूप से मेरे लिए इसे तत्काल तैयार कर सकता है?
उदाहरण के लिए, मैं इस तरह से कॉल कर सकता हूं:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
और मुझे GameObjects की एक सूची मिलेगी, जिसमें से कोई भी कॉल किए जाने पर दृश्य में नहीं जोड़ा जाता है। अनिवार्य रूप से, मैं LoadAll
अपने स्वयं के प्रीफैब्स के लिए एक विधि बना रहा हूं , और इसी तरह, जब कॉल किया जाता है तो मैं गेमऑब्जेक्ट्स को तुरंत नहीं करना चाहता हूं।
Destroy
गेमऑबजेक्ट पर कॉल करने का एकमात्र तरीका है । जो इसे दृश्य से हटाता है और इसे जारी करता है, जिससे यह अनुपयोगी हो जाता है।
go.SetActive(false)
एक वस्तु पूल की तरह कुछ बनाने का सबसे अच्छा तरीका है। यह वही नहीं है जो आप चाहते हैं, लेकिन शायद आपके पास निष्क्रिय वस्तुओं का एक छोटा समूह हो सकता है जो बाद में आपके कस्टम इंस्टेंटेशन के लिए क्लोन किया जाता है।