2016-01-26 2 views
5

मेरे पास यूनिटी 3 डी में केवल एक छोटा सा अनुभव है, लेकिन मैंने देखा है कि MonoBehaviour से प्राप्त कक्षाओं में पूर्वनिर्धारित हस्ताक्षर वाले कार्य हो सकते हैं जिन्हें विशेष तरीके से बुलाया जाएगा। उदाहरण के लिए, यदि मैं लिखता हूं:एकता अपनी विधियों को कैसे निष्पादित करती है?

void Update() 
{ 
    //some code 
} 

इस विधि को प्रत्येक फ्रेम कहा जाएगा।

मुझे कल्पना है कि एकता के अंदर एक अंतहीन लूप है जो दृश्य पर प्रत्येक ऑब्जेक्ट के लिए Update विधि प्रत्येक फ्रेम को कॉल करता है। लेकिन यह कैसे पता चलता है कि वस्तु वास्तव में Update विधि कार्यान्वयन प्रदान करती है? यह स्पष्ट होगा कि UpdateMonoBehaviour कक्षा में किसी विधि के लिए ओवरराइड था, लेकिन वाक्यविन्यास (और तथ्य यह है कि आप किसी भी एक्सेस संशोधक के साथ इस तरह के तरीकों को लागू कर सकते हैं) का निर्धारण नहीं कर रहा है। क्या वहां कुछ प्रतिबिंब जादू हो रहा है?

+0

संक्षिप्त उत्तरकर्ता वे उन "अर्ध-कार्यों" को संभालने के लिए प्रीप्रोकैसिंग जादू का उपयोग करते हैं। आप कई स्पष्टीकरण गूगल कर सकते हैं। कभी भी खेल इंजन फ्रेम-आधारित सिस्टम नहीं भूल जाते हैं, यह सब कुछ अलग है! – Fattie

उत्तर

7

http://blogs.unity3d.com/2015/12/23/1k-update-calls/

नहीं है, एकता एक जादू विधि हर बार यह एक फोन करने की जरूरत है खोजने के लिए System.Reflection उपयोग नहीं करता।

इसके बजाय, पहली बार दिए गए प्रकार का एक MonoBehaviour अंतर्निहित स्क्रिप्ट स्क्रिप्टिंग रनटाइम (या तो मोनो या IL2CPP) क्या यह कोई जादू तरीकों परिभाषित है के माध्यम से निरीक्षण किया जाता एक्सेस किया जाता है और इस जानकारी कैश किया गया है। यदि एक मोनोबेवियर की एक विशिष्ट विधि है तो यह उचित सूची में जोड़ा गया है, उदाहरण के लिए यदि किसी स्क्रिप्ट में अद्यतन विधि परिभाषित है, तो इसे स्क्रिप्ट की एक सूची में जोड़ा जाता है जिसे प्रत्येक फ्रेम अद्यतन करने की आवश्यकता होती है।

खेल के दौरान यूनिटी सिर्फ इन सूचियों के माध्यम से पुनरावृत्त करता है और इसके तरीकों को निष्पादित करता है - यह सरल है। इसके अलावा, इससे कोई फर्क नहीं पड़ता कि आपकी अपडेट विधि सार्वजनिक या निजी है।

+0

बिल्कुल वही जो मैं चाहता था! आपका बहुत बहुत धन्यवाद! – bashis

+0

मुझे खुशी है कि मैं मदद कर सकता हूं। चीयर्स। बीटीडब्ल्यू इस ब्लॉग आलेख में अधिक जानकारी रखने वाली जानकारी है। –

+0

तो, यह पता चला है कि वे वास्तव में * करते हैं * कुछ प्रकार के प्रतिबिंब का उपयोग करते हैं, बस 'सिस्टम। रिफ्लेक्शन' नहीं। – bashis

संबंधित मुद्दे