आप
void Start() {
levelManager = GameObject.FindObjectOfType<LevelManager>();
}
है कि अक्सर उपयोग करने के लिए नहीं करना चाहती। हालांकि start
पर विशेष रूप से आपके प्रश्न का उत्तर करने के लिए निम्न दो कार्य वास्तव में बहुत समानता नहीं है। एक बाहरी कॉल है, दूसरा एक इंटीरियर है।
तो क्या फर्क है?
GameObject.FindObjectOfType
एक दृश्य विस्तृत खोज के अधिक है और एक जवाब प्राप्त करने की इष्टतम तरीका नहीं है। दरअसल, एकता ने सार्वजनिक रूप से कहा कि इसकी सुपर धीमी Unity3D API Reference - FindObjectOfType
GetComponent<LevelManager>();
एक स्थानीय कॉल है। मतलब यह है कि जो भी फाइल इस कॉल को बना रही है वह केवल गेमऑब्जेक्ट को ही खोजेगी जो इसे संलग्न है। तो इंस्पेक्टर में, फ़ाइल केवल उसी इंस्पेक्टर विंडो में अन्य चीजें खोजेगी। जैसे कि मेश रेंडरर, मेष फ़िल्टर, आदि या वह बच्चों को ऑब्जेक्ट करता है। मेरा मानना है कि इसके लिए एक अलग कॉल है, हालांकि।
इसके अलावा, आप अन्य GameObject के घटकों का उपयोग करने के लिए इस का उपयोग करें यदि आप उन्हें पहली संदर्भ (नीचे दिखाई देते हैं) कर सकते हैं।
समाधान:
मैं awake
समारोह में एक tag
खोज करने की सिफारिश करेंगे।
private LevelManager levelManager;
void Awake() {
levelManager = GameObject.FindGameObjectWithTag ("manager").GetComponent<LevelManager>();
}
टैग जोड़कर उस पर स्क्रिप्ट LevelManager
साथ GameObject टैग करने के लिए मत भूलना। (GameObject क्लिक करें, निरीक्षक के शीर्ष पर हैं, और Tag- क्लिक करें> जोड़ें टैग
आप ऐसा कर सकते हैं, या
public LevelManager levelManager;
करना और निरीक्षक में बॉक्स में GameObject खींचें।
या तो विकल्प काफी एक GameObject.FindObjectOfType
कर से बेहतर है।
आशा है कि यह
@ क्रिप्टोस, 'ऑब्जेक्ट' से आपका क्या मतलब है? 'GetComponent
दिलचस्प बात यह है कि 'GetComponent
@ क्रिप्टोस, मुझे लगता है कि 'ट्रांसफॉर्म' एक विशेष प्रकार का घटक है, क्योंकि आप इसे हटा नहीं सकते हैं, इसलिए शायद यही 'GetComponent' द्वारा छोड़ा जाता है। शायद कोई भी GetComponent