2015-09-12 11 views
5

Unity3d में आपके पास MonoBehaviour कक्षा है, जो सभी स्क्रिप्ट के लिए सामान्य आधार वर्ग है। एक स्क्रिप्ट को लागू करते समय, किसी को Awake() या Start() या Update() जैसी विधियों को कार्यान्वित करना होगा।MonoBehaviour विधियों को ओवरराइड करने के लिए क्यों लागू नहीं किया गया है?

हालांकि, इन तरीकों MonoBehaviour कक्षा में virtual या abstract के रूप में लागू नहीं कर रहे हैं ताकि एक आसानी से कर सकते थे override उन्हें; वास्तव में वे बिल्कुल लागू नहीं किए जाते हैं। क्षण में लिखने वाला तरीका एक नई विधि है जिसे कक्षा पहले से नहीं थी।

इन विधियों को बेस क्लास (MonoBehaviour) में virtual या abstract के रूप में क्यों लागू नहीं किया गया है?

उत्तर

6

यदि आप दस्तावेज़ीकरण की जांच करते हैं तो आप देखेंगे कि उन सभी 'कार्यों' को 'संदेश' अनुभाग में सूचीबद्ध किया गया है; MonoBehaviour Doc

तो इसका मतलब है कि 'कार्य' (जैसे, प्रारंभ, चालू या जागृत), वे विधियों के रूप में लागू नहीं किए गए हैं बल्कि एक संदेश के रूप में लागू नहीं किए गए हैं।

अब, मोनोबेवियर Behaviour से विरासत में आता है, जो Component से प्राप्त होता है जिसमें SendMessage विधि है। संदेश/विधि मौजूद है या नहीं, तो यह विधि मूल रूप से त्रुटि/रिपोर्ट करने के विकल्प के साथ एक संदेश/विधि को कॉल करती है। नाम संदेश/विधि का पैरामीटर एक स्ट्रिंग है, इसलिए वे वहां प्रतिबिंब का उपयोग कर रहे हैं।

दृश्यों के पीछे एकता की तरह लगता है कि यह संदेश यह देखने के लिए लागू किए गए थे कि क्या उन्हें कॉल करना है या नहीं। इस UnityAnswer के अनुसार:

एकता मुख्य रूप से C++ लिखा है और इसलिए अधिकांश जादू मूल कोड में होता है। एकता निर्धारित करने के लिए प्रतिबिंब का उपयोग करती है, आपकी स्क्रिप्ट संकलित करने के बाद, आपके द्वारा कार्यान्वित किए गए "ईवेंट" और के बारे में याद रखें कि इस वर्ग के लिए। एकता केवल अपडेट/लेटअपडेट/ ओएनजीआईआई को लागू होने पर कॉल करती है।

तो, संक्षिप्त जवाब यह है कि वे 'वास्तविक' विधियां नहीं हैं जिन्हें आपको ओवरराइड करना है, वे संदेश हैं जिन्हें केवल लागू किए जाने पर ही बुलाया जाता है।

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

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