एक विस्तृत विवरण के लिए, मैं जेसन ग्रेगरी द्वारा एक और केवल बाइबल गेम इंजन आर्किटेक्चर को पढ़ने की सलाह देता हूं । मुझे लगता है कि यह इस विषय के बारे में सबसे पूर्ण काम है क्योंकि यह प्रकाशित हुआ था। यह न केवल C ++ भाग को संभालता है, बल्कि हर गेम इंजन प्रोग्रामर के पीछे के सिद्धांत / वास्तुकला को भी महत्वपूर्ण बनाता है। यह भाषा का एक अच्छा प्रारंभिक बिंदु है जो स्वतंत्र है। अवलोकन करने के लिए कि हम किस बारे में बात कर रहे हैं, यह पुस्तक की छवि है
मुझे इस सवाल का जवाब देने की कोशिश करने दीजिए।
जो भी आप इसे लिखते हैं वह कोड होगा :-) अनुभव के वर्षों के बाद, आपको जो कुछ भी चाहिए उसे लिखें और आपको इसकी आवश्यकता है या जो आपको आवश्यक है उसका उपयोग करें।
सॉफ्टवेयर के आर्किटेक्चर से अन्य शब्दों के साथ टर्म्स इंजन और फ्रेमवर्क आता है। तो चलो मूल शब्दों के साथ शुरू करें und को ऊपर की ओर बढ़ने देता है।
पुस्तकालय
विशिष्ट उदाहरण: गणितीय गणना (वेक्टर, मैट्रिक्स, ...) या छवि (jpeg या png) लाइब्रेरी के लिए सभी बुनियादी प्रकार और फ़ंक्शन प्रदान करने वाली एक गणित लाइब्रेरी jpeg या png छवियों को लिखने के लिए कार्यक्षमता प्रदान करती है।
यूनिटी 3 डी मैथ में मैथ्स लाइब्रेर है।
सिद्धांत: एक लाइब्रेर एक विषय (जैसे गणित) के आसपास समर्पित विशेषताएं प्रदान करता है और मांग पर प्रोग्रामर द्वारा बुलाया जाता है ।
कुछ पूर्वावलोकन: वहाँ हो सकता है पुस्तकालयों धारण ढांचा उर्फ एक रूपरेखा पुस्तकालय जा रहा है।
ढांचा
सिद्धांत: एक ढांचा नियंत्रण के विलोम का परिचय देता है । इसका मतलब यह है कि डेवलपर ज्यादातर समय ढांचे के तरीकों को नहीं कहता है, लेकिन फ्रेमवर्क डेवलपर के कोड को कॉल करता है। अपवाद तब होते हैं जब आपको अपने कोड में फ्रेमवर्क लाइब्रेरी को एकीकृत करना होता है और फ्रेमवर्क शुरू करना होता है। एक फ्रेमवर्क लाइब्रेरी एक समर्पित उपयोग के साथ एक फ्रेमवर्क के लिए सभी तरीकों और कार्यों और इंटरफेस प्रदान करता है। तो एक पुस्तकालय में रूपरेखा हो सकती है।
विशिष्ट उदाहरण: एकता 3 डी मोनोबीहॉर अवेक, स्टार्ट, ऑनअपडेट जैसे तरीके प्रदान करता है। डेवलपर इन तरीकों को लागू करता है और फिर इन तरीकों को (गेम ऑब्जेक्ट मैनेजमेंट) फ्रेमवर्क द्वारा बुलाया जाता है (यह नियंत्रण का व्युत्क्रम है) । तरीकों OnCollisionEnter, OnCollisionExit के साथ भी ऐसा ही है। वे एक ही मोनोबेहवियर में हैं, लेकिन मैं शर्त लगाता हूं कि उन्हें भौतिकी के ढांचे द्वारा बुलाया जाएगा।
एक पूर्वावलोकन: इंजन, रनटाइम, संपादक, एसडीके
चूंकि शब्द इंजन हमेशा अस्पष्ट था और अभी भी है (और यह आगे के तकनीकी विकास के साथ बेहतर नहीं होता है) कुछ पूर्वावलोकन विवरण।
इंजन शब्द का उपयोग कई चीजों के लिए किया जाता है और यह विशिष्ट रूप से नहीं कहा जा सकता है कि कौन सा सही है। 2004 में जब मैंने पहली बार खेल इंजन के साथ संपर्क किया था तो यह बहुत अस्पष्ट था। आपके पास कुछ प्रकार के कोड लोड करने वाले पूर्वनिर्धारित डेटा के अर्थ में एक गेम इंजन था और आप गेम खेलते हैं। चूंकि यह पूर्वनिर्धारित डेटा को लोड करता है उन्हें डेटा-संचालित इंजन कहा जाता था। आप उन्हें एक बार संकलित करते हैं और बाहरी डेटा अलग-अलग गेम हो सकते हैं, बिना इसे फिर से जमा किए। किसी समय यह रनटाइम की तरह ही था।
संपादक स्पष्ट है। यह आपको इंजन / रनटाइम द्वारा पूर्वनिर्धारित डेटा को परिभाषित करने देता है।
एक संपादक वाले इंजन को एसडीके (जैसे हैमर एसडीके) कहा जाता था।
तब समर्पित इंजन थे। एक phyiscs इंजन, रेंडरिंग इंजन, साउंड इंजन, गेमबजेक्ट मैनेजमेंट इंजन, नेटवर्क इंजन, ....
मेरी व्यक्तिगत राय में वे इंजन नहीं हैं (विशेष रूप से एक रेंडर इंजन आईएस गेम इंजन नहीं है क्योंकि यह केवल रेंडर करता है)। जब मैं Google गेम इंजन देता हूं तो परिणाम में 90% शुद्ध रेंडर इंजन होते हैं जो गेम इंजन नहीं हैं। मैं उन सभी को पुस्तकालयों को कॉल करूंगा लेकिन चूंकि वे पूर्वनिर्धारित डेटा लोड कर सकते हैं इसलिए वे डेटा-संचालित इंजन से मेल खाते हैं।
अंतिम संक्षिप्त पक्ष नोट करने से पहले हम विवरण में प्राप्त करते हैं: मैंने सफलतापूर्वक कंप्यूटर विज्ञान में स्नातकोत्तर डिग्री प्राप्त की है। मेरे मास्टर थीसिस ने "खेल इंजन के मूल को कैसे विकसित किया जाए" विषय को संभाला। कोड का वह भाग जो अन्य सभी इंजनों के साथ एक साथ जुड़ता है, गेम ऑब्जेक्ट मैनेजमेंट, गेम लूप इत्यादि करता है ...
मैंने अपनी मास्टर थीसिस को एक (लघु) पुस्तक के रूप में प्रकाशित किया। खरीदार / पाठक से अमेज़ॅन पर एकमात्र टिप्पणी (कुछ वर्षों के बाद): यह गेम इंजन के बारे में नहीं है। चूंकि मैंने सफलतापूर्वक स्नातक किया है और इसलिए 3 अनुभवी प्रोग्रामर (गेम और इंटरैक्टिव अनुप्रयोगों के लिए समर्पित उनमें से 2) के खिलाफ मेरी थीसिस का बचाव किया है। मुझे लगता है कि मैंने एक गेम इंजन लिखा है।
संपादक
आसान: आपको डेटा को उस प्रारूप में परिभाषित करने देता है, जिसके लिए अन्य भागों की आवश्यकता होती है और इसलिए उन फ़ाइलों को हाथ से लिखने या उन्हें बनाने के लिए बाहरी उपकरणों का उपयोग करने की मांग को समाप्त करता है।
यह यूनिटी 3 डी संपादक करता है।
क्रम
यह शब्द अक्सर इंजन के साथ समान रूप से उपयोग किया जाता है (जो सही या गलत हो सकता है)।
रनटाइम जनरेट किए गए डेटा को निष्पादित करता है और उसे डेटा के साथ क्या करना है। जैसे आप खेल दिखाते हैं और आपको खेल खेलने देते हैं। यह कोई भी डेटा नहीं बनाता है (शायद गेम को बचाने के अलावा) इस अर्थ में कि आप गेम को खुद से संशोधित नहीं कर सकते।
यूनिटी वेब प्लेयर / एक रनटाइम था, जिससे आप एक वेबब्रोसर के भीतर यूनिटी गेम खेलते हैं।
आप एक ही रनटाइम के साथ कई अलग-अलग गेम लोड और निष्पादित कर सकते हैं।
यूनिटी 3 डी स्क्रिप्टिंग एपीआई के मामले में कार्यक्षमता के बीच एक कटौती है जो खेल और कार्यक्षमता में काम करेगी जो केवल संपादक के भीतर काम करेगी।
एसडीके
इस शब्द को अक्सर रूपरेखा भी कहा जाता है ।
इसके बाद एक SDK प्रोग्रामर्स के लिए एडिटर, IDE (इंटीग्रेटेड डेवलपर इनवायरमेंट), डेटाफॉर्मेट्स के लिए एक्सपोर्टर्स और रनटाइम / इंजन जैसे टूल्स का बंडल रहा है।
तो एक एसडीके / फ्रेमवर्क आपको एक पूर्वनिर्धारित वर्कफ़्लो और उपयोगिताओं के साथ प्रदान करता है और आपको एक (अच्छी तरह से डिज़ाइन किया गया) तरीका दिखाता है कि आप कैसे (आसानी से) गेम बना सकते हैं।
मूल रूप से एकता 3 डी इंजन गलत होगा क्योंकि यह एसडीके दिशा में अधिक फिट होगा। लेकिन चूँकि एकता और भी अधिक नया शब्द / परिभाषा है, इसलिए इसे मिलान करने की आवश्यकता है।
वैसे भी, दूसरे कार्यकाल को शुरू करने के लिए, एक एसडीके / फ्रेमवर्क आपको एक पूर्वनिर्धारित खेल विकास पाइपलाइन प्रदान करता है (न केवल एक परिसंपत्ति पाइपलाइन, लेकिन शायद, यूनिटी की तरह, संपत्ति के लिए एक पाइपलाइन, तर्क, बिल्ड, तैनाती, ....)
इंजन
हर चीज के लिए उपयोग किए जाने वाले व्यंग्य, क्योंकि हर कोई न केवल एक पुस्तकालय, एक रूपरेखा या एक खेल लिखकर शांत होना चाहता है, बल्कि एक पूर्ण इंजन लिखना बेहतर है। कटाक्ष
आइए इसे ट्रिगर करें:
एक इंजन
- कोड / सॉफ्टवेयर का एक टुकड़ा है
- इसका उद्देश्य कई परियोजनाओं में पुन: उपयोग किया जाना है (आप केवल एक गेम के लिए एक गेम इंजन भी लिख सकते हैं)
- पुन: उपयोग होने के लिए खेल इंजन खेल विशिष्ट भाग से पुन: प्रयोज्य भाग को अलग करता है
- पुन: प्रयोज्य होने के लिए (यह पुन: उपयोग करने के लिए कैसे किया जाता है पर निर्भर करता है) डेटा चालित इंजन की तरह अलग - अलग स्वाद हैं बाहरी डेटा लोड करना
एक इंजन में कई अन्य इंजन शामिल हो सकते हैं (क्योंकि आजकल सब कुछ इंजन कहलाता है)। एक खेल इंजन शामिल कर सकते हैं
- रेंडरिंग करने वाला एक रेंडर इंजन (AGAIN: God, damn, hell: कोड केवल रेंडरिंग कर रहा है गेम इंजन नहीं है)
- एक भौतिकी इंजन भौतिकी कर रहा है (यह एक भौतिकी इंजन है, खेल इंजन नहीं है)
- AI सामान को संभालने वाला AI इंजन (यह AI इंजन है और गेम इंजन नहीं)
- एक नेटवर्क इंजन (जैसे RakNet) नेटवर्क सामान कर रहा है (यह एक नेटवर्क इंजन है, गेम इंजन नहीं)
- एक ऑडियो इंजन ऑडियो सामान (यह एक ऑडियो इंजन है और गेम इंजन नहीं है)
एक घटक आधारित खेल वस्तु प्रबंधन मॉडल में एक साथ सब कुछ बंद करने के लिए एक प्लग-इन आधारित रूपरेखा प्रदान करने वाले कोर इंजन पर आधारित एक आवेदन के लिए एक उदाहरण। प्रत्येक उप-सांग (ऑडियो प्रदान करना) एक मॉड्यूल है जिसे गेम इंजन में प्लग के रूप में जोड़ा जाता है। प्रत्येक घटक एक पनडुब्बी / मॉड्यूल का हिस्सा हो सकता है। और (घटक आधारित) गेम ऑब्जेक्ट प्रबंधन अलग मॉड्यूल के बीच कनेक्टिंग लिंक है।
खेल इंजन के लिए निकटतम निश्चितता
एक गेम इंजन आपके गेम के स्रोत कोड का हिस्सा है जो सभी कार्यक्षमता प्रदान करता है जिसका उद्देश्य कई गेमों के लिए पुन: उपयोग किया जाना है और आपको अपने गेम को कोड और निष्पादित करना है। इसलिए यह कोड के अन्य सभी भागों (रेंडरिंग, ऑडियो, फिजिक्स, गेम ऑब्जेक्ट मैनेजमेंट, नेटवर्किंग) का एक साथ सुराग देता है जो या तो लाइब्रेरी, फ्रेमवर्क या डेडिकेटेड इंजन (रेंडरिंग, फिजिक्स, ...) हैं।
खेल इंजन बीच में गड़बड़ है।