unity3d
GameObjects को ढूंढना और एकत्र करना
खोज…
वाक्य - विन्यास
- सार्वजनिक स्थैतिक गेम ऑबजेक्ट फाइंड (स्ट्रिंग नाम);
- सार्वजनिक स्थैतिक GameObject FindGameObjectWithTag (स्ट्रिंग टैग);
- सार्वजनिक स्थिर GameObject [] FindGameObjectsWithTag (स्ट्रिंग टैग);
- सार्वजनिक स्थैतिक वस्तु FindObjectOfType (प्रकार प्रकार);
- सार्वजनिक स्थैतिक वस्तु [] FindObjectsOfType (प्रकार प्रकार);
टिप्पणियों
किस विधि का उपयोग करें
रनटाइम पर GameObjects की तलाश करते समय सावधान रहें, क्योंकि यह संसाधन की खपत हो सकती है। विशेष रूप से: FindObjectOfType या Find in Update, FixedUpdate या अधिक सामान्यतः एक विधि में प्रति फ्रेम एक या अधिक समय नहीं चलाएं।
- रनटाइम विधियों को कॉल करें
FindObjectOfType
और केवल तभीFind
जब आवश्यक हो -
FindGameObjectWithTag
में अन्य स्ट्रिंग आधारित विधियों की तुलना में बहुत अच्छा प्रदर्शन है। एकता पूरे दृश्य के बजाय टैग की गई वस्तुओं और प्रश्नों पर अलग टैब रखती है। - संपादक में बनाए गए "स्थिर" GameObjects (जैसे UI तत्व और प्रीफ़ैब्स) के लिए संपादक में क्रमिक GameObject संदर्भ का उपयोग करें
- अपनी सूची के GameObjects या अपने आप को प्रबंधित करने वाली सारणियों में रखें
- सामान्य तौर पर, यदि आप एक ही प्रकार के बहुत सारे GameObjects को इंस्टेंट करते हैं, तो ऑब्जेक्ट पूलिंग पर एक नज़र डालें
- महंगी खोज विधियों को बार-बार चलाने से बचने के लिए अपने खोज परिणामों को कैश करें।
गहराई तक जा रहे हैं
एकता के साथ आने वाले तरीकों के अलावा, अपनी खुद की खोज और संग्रह विधियों को डिजाइन करना अपेक्षाकृत आसान है।
FindObjectsOfType()
मामले में, आप अपनी स्क्रिप्ट कोstatic
संग्रह में स्वयं की सूची रख सकते हैं। दृश्य से वस्तुओं की खोज और निरीक्षण करने की तुलना में वस्तुओं की तैयार सूची को पुनरावृत्त करना कहीं अधिक तेज़ है।या एक स्क्रिप्ट बनाएं जो एक स्ट्रिंग आधारित
Dictionary
में उनके उदाहरणों को संग्रहीत करता है, और आपके पास एक सरल टैगिंग सिस्टम है जिस पर आप विस्तार कर सकते हैं।
GameObject के नाम से खोजा जा रहा है
var go = GameObject.Find("NameOfTheObject");
पेशेवरों | विपक्ष |
---|---|
प्रयोग करने में आसान | प्रदर्शन दृश्य में गेमबॉजेक्ट की संख्या के साथ गिरावट |
स्ट्रिंग कमजोर संदर्भ हैं और उपयोगकर्ता की त्रुटियों के लिए संदिग्ध हैं |
GameObject के टैग द्वारा खोजा जा रहा है
var go = GameObject.FindGameObjectWithTag("Player");
पेशेवरों | विपक्ष |
---|---|
दोनों एकल वस्तुओं और संपूर्ण समूहों को खोजना संभव है | स्ट्रिंग कमजोर संदर्भ हैं और उपयोगकर्ता की त्रुटियों के लिए संदिग्ध हैं। |
अपेक्षाकृत तेज और कुशल | कोड पोर्टेबल नहीं है क्योंकि स्क्रिप्ट्स में टैग हार्ड कोडेड हैं। |
संपादन मोड में स्क्रिप्ट में सम्मिलित किया गया
[SerializeField]
GameObject[] gameObjects;
पेशेवरों | विपक्ष |
---|---|
शानदार प्रदर्शन | वस्तु संग्रह स्थिर है |
पोर्टेबल कोड | केवल एक ही दृश्य से GameObjects को संदर्भित कर सकते हैं |
MonoBehaourour स्क्रिप्ट द्वारा GameObjects ढूँढना
ExampleScript script = GameObject.FindObjectOfType<ExampleScript>();
GameObject go = script.gameObject;
FindObjectOfType()
यदि कोई नहीं मिला है, तोnull
देता है।
पेशेवरों | विपक्ष |
---|---|
जोर से टाइप किया हुआ | मूल्यांकन करने के लिए आवश्यक गेमबॉजेक्ट की संख्या के साथ प्रदर्शन में गिरावट होती है |
दोनों एकल वस्तुओं और संपूर्ण समूहों को खोजना संभव है |
बाल वस्तुओं से नाम से GameObjects खोजें
Transform tr = GetComponent<Transform>().Find("NameOfTheObject");
GameObject go = tr.gameObject;
यदि कोई नहीं मिला है, तो रिटर्न
null
Find
पेशेवरों | विपक्ष |
---|---|
सीमित, अच्छी तरह से परिभाषित खोज क्षेत्र | स्ट्रिंग्स कमजोर संदर्भ हैं |