एक घटक-आधारित इकाई वास्तुकला में "सिस्टम" की भूमिका क्या है?


177

मैं इकाई घटकों और प्रणालियों के बारे में बहुत कुछ पढ़ रहा हूं और सोचा है कि एक इकाई का विचार सिर्फ एक आईडी होने के नाते काफी दिलचस्प है।

हालाँकि मुझे नहीं पता कि यह पूरी तरह से घटक पहलू या सिस्टम पहलू के साथ कैसे काम करता है। एक घटक कुछ प्रासंगिक प्रणाली द्वारा प्रबंधित एक डेटा ऑब्जेक्ट है। एक टक्कर प्रणाली कुछ BoundsComponent का उपयोग करता है ताकि टकराव हुआ हो, यह निर्धारित करने के लिए एक स्थानिक डेटा संरचना के साथ।

अब तक सभी अच्छे हैं, लेकिन क्या होगा यदि कई प्रणालियों को एक ही घटक तक पहुंच की आवश्यकता हो? डेटा कहाँ रहना चाहिए? एक इनपुट सिस्टम BoundsComponent संस्थाओं को संशोधित कर सकता है, लेकिन भौतिकी प्रणाली (ओं) को उसी घटक तक पहुंच की आवश्यकता होती है, जैसा कि कुछ रेंडरिंग सिस्टम करता है।

इसके अलावा, संस्थाओं का निर्माण कैसे किया जाता है? मेरे द्वारा पढ़े जाने वाले फायदों में से एक इकाई निर्माण में लचीलापन है। क्या सिस्टम आंतरिक रूप से एक घटक से बंधा हुआ है? अगर मैं कुछ नए घटक शुरू करना चाहता हूं, तो क्या मुझे एक नई प्रणाली शुरू करनी है या किसी मौजूदा को संशोधित करना है?

एक और बात जो मैंने अक्सर पढ़ी है, वह यह है कि किसी इकाई का 'प्रकार' किस घटक से प्रभावित होता है। अगर मेरी इकाई सिर्फ एक आईडी है तो मैं कैसे जान सकता हूं कि मेरी रोबोट इकाई को स्थानांतरित करने या प्रदान करने की आवश्यकता है और इस प्रकार कुछ प्रणाली द्वारा संशोधित किया गया है?

लंबी पोस्ट के लिए क्षमा करें (या कम से कम यह मेरे फोन स्क्रीन से ऐसा लगता है)!

जवाबों:


336

इकाई घटक प्रणालियों का प्रतिनिधित्व करने और उन्हें लागू करने के तरीकों की एक भीड़ है, लेकिन यहां एक तरीके की व्याख्या है। ध्यान रखें कि इकाई / घटक / सिस्टम आर्किटेक्चर की कोई ठोस परिभाषा नहीं है, इसलिए यह केवल एक कार्यान्वयन है।

मैं इकाई / घटक / सिस्टम आर्किटेक्चर के लिए एक सादृश्य शुरू करने जा रहा हूं जो मदद कर सकता है। आइए एक कुंजी की तरह एक इकाई के बारे में सोचें।

सत्ता

इकाई कुंजी

कीज़ के दांत (गहरे नीले) भी होते हैं। हमारी इकाई कुंजी के दांत घटक हैं जो इसे बनाते हैं। आप अपनी आईडी के अलावा संस्थाओं को बता सकते हैं, भले ही उनके दांत समान हों। तो क्या चाबियाँ में फिट? ताले। ताले हमारी व्यवस्थाएं हैं। उदाहरण के लिए, एक आंदोलन प्रणाली।

प्रणाली

आंदोलन प्रणाली ताला

ताला केवल तभी काम करता है जब हमारी कुंजी में स्थिति और वेग दोनों के लिए दांत हों। यह प्रणाली केवल उन्हीं इकाइयों को संसाधित करती है जिनमें एक स्थिति और एक वेग होता है। यह सेट अप करने के कई तरीके हैं कि ये सिस्टम कैसे पहचानते हैं कि किन संस्थाओं को प्रोसेस करना है, लेकिन एक तरीका है एक का उपयोग करना long। प्रत्येक बिट एक घटक प्रकार के लिए आरक्षित है। हमारे उदाहरण के लिए एक 64 बिट लंबे के बजाय 4 बिट प्रकार मानने देता है। हमारे उदाहरण इकाई में सभी उपलब्ध घटक होंगे। तो यह कुंजी होगी 1111। फिर, सिस्टम किसी भी निकाय की तलाश कर रहा है जिसमें ए 11--। ( -प्रतिनिधित्व परवाह नहीं है, क्योंकि आंदोलन परवाह नहीं है अगर वहाँ एक प्रेत या स्वास्थ्य है)। यह एक साधारण ANDऑपरेशन के साथ एक इकाई की जांच कर सकता है । इसलिए हमारे इकाई अगर मेल खाता है ((1111 & 1100) == 1100)। अगर मैं तुम्हें वहाँ खो दिया है तो बिटवाइज़ ऑपरेशन के बारे में कुछ और जाँच करें ।

जैसा कि आप देख सकते हैं, सिस्टम में बाहरी संसाधनों तक पहुंच है। वे समय, ग्राफिक्स, ध्वनि और इतने पर पहुंच सकते हैं। वे बस छोटे प्रोसेसर हैं जो एक समय में एक कुंजी लेते हैं, और डेटा को संसाधित करते हैं। आप देखते हैं कि आंदोलन प्रणाली वेग, डेल्टा समय और स्थिति लेती है; फिर कुछ गणना करता है और परिणाम को वापस स्थिति में संग्रहीत करता है।

इकाई कुंजी वास्तव में उत्पन्न करना आसान है। आप उन्हें अपनी इच्छानुसार जोड़ या हटा सकते हैं। इकाई परवाह नहीं करता है, यह घटकों को समूह और धारण करने का एक तरीका है। घटकों की अन्योन्याश्रितता नहीं है। निकटतम घटक एक दूसरे के साथ बातचीत करने के लिए मिलते हैं, जब एक सिस्टम उन पर काम करता है और एक से दूसरे को अपडेट करने के लिए डेटा का उपयोग करता है, जैसे हमारे आंदोलन उदाहरण।

आइडिया को ठोस बनाने में मदद करने के लिए एक और प्रणाली पर नज़र डालें:

ड्राइंग सिस्टम लॉक

यह हमारी ड्राइंग प्रणाली है। यह मेल खाने वाले घटकों की तलाश करता है 1-1-। यह निकाय मेल खाता है क्योंकि: ((1111 & 1010) == 1010)इसके अलावा, आप देख सकते हैं कि यह सिस्टम स्क्रीन को सूचना को आउटपुट करता है, इसकी स्थिति में इकाई स्प्राइट को खींचकर।

ठीक है, एक और। आइए दूसरी इकाई को देखें और देखें कि यह अब तक हमारे उदाहरण में कैसे फिट हो सकती है।

गैर जंगम इकाई कुंजी

जैसा कि आप देख सकते हैं, इस इकाई में इससे जुड़े कम घटक हैं। इसके पास मौजूद घटकों को देखकर ऐसा लगता है कि यह एक चट्टान की तरह एक स्थिर वस्तु हो सकती है। यह सिर्फ एक स्थिति और एक प्रेत है। यह नहीं चल रहा है और यह किसी भी स्वास्थ्य परिवर्तन से प्रभावित होने वाला नहीं है। यह इकाई 1010 की कुंजी का उत्पादन करेगी। तो इस इकाई पर कौन से सिस्टम काम करते हैं? चलो देखते है:

हमारी आंदोलन प्रणाली के खिलाफ: ((1010 & 1100) != 1100)नहीं। ऐसा लगता है कि आंदोलन प्रणाली को इस इकाई की परवाह नहीं है, क्योंकि इसमें आवश्यक घटक नहीं हैं।

हमारे ड्राइंग सिस्टम के खिलाफ: ((1010 & 1010) == 1010)अरे, यह एक मैच है। यह इकाई ड्राइंग सिस्टम द्वारा संचालित की जाएगी। ड्राइंग सिस्टम परिभाषित स्थिति में स्प्राइट को आकर्षित करेगा।


उम्मीद है कि आप देख सकते हैं कि अब एक और सिस्टम जोड़ना कितना आसान होगा जो हमारे घटकों को ले जाएगा और उन पर काम करेगा। मुझे यह सुनिश्चित करने दें कि मैंने आपके प्रश्नों को संबोधित किया है:

क्या होगा यदि कई सिस्टम को एक ही कंपोनेंट तक पहुँच की आवश्यकता हो? डेटा कहाँ रहना चाहिए?

आमतौर पर, सिस्टम एक के बाद एक काम करते हैं। वे सभी संस्थाओं को संसाधित करते हैं जो उनकी आवश्यकताओं से मेल खाते हैं, फिर अगली प्रणाली भी ऐसा ही करती है। डेटा इकाई के साथ रहता है। सिस्टम में कुछ भी संग्रहीत नहीं होना चाहिए, यह सिर्फ एक ताला है जो चालू हो जाता है, कुंजी वह है जहां जानकारी रहती है और लॉक से लॉक तक चलती है।

संस्थाओं का निर्माण कैसे किया जाता है? क्या सिस्टम आंतरिक रूप से एक घटक से बंधा हुआ है? अगर मैं कुछ नए घटक शुरू करना चाहता हूं, तो क्या मुझे एक नई प्रणाली शुरू करनी है या किसी मौजूदा को संशोधित करना है?

एंटिटी सिर्फ घटकों के बैग हैं। उनके पास एक विशिष्ट आईडी और घटकों की एक सूची है। सिस्टम केवल ऊपर वर्णित तरीके से घटकों से बंधा हुआ है। आपके पास उन प्रणालियों के बिना घटक हो सकते हैं जो उन पर काम करते हैं, लेकिन यह बहुत व्यर्थ है। इसी प्रकार आपके पास ऐसे सिस्टम हो सकते हैं जो ऐसे घटकों की तलाश में हों जिनके पास कोई संस्था नहीं है। यह कम व्यर्थ है, क्योंकि वे बस एक ऐसी इकाई के बनने की प्रतीक्षा कर रहे होंगे जो उनके लॉक से मेल खाती हो। तो, हाँ, यदि आप एक नया घटक शुरू करते हैं, तो आप एक ऐसी प्रणाली बनाना चाहेंगे जो उस घटक का उपयोग करे। अन्यथा आप सिर्फ एक ताला के लिए अपनी कुंजी में दांत जोड़ रहे हैं जो मौजूद नहीं है।

अगर मेरी इकाई सिर्फ एक आईडी है तो मैं कैसे जान सकता हूं कि मेरी रोबोट इकाई को स्थानांतरित करने या प्रदान करने की आवश्यकता है और इस प्रकार कुछ प्रणाली द्वारा संशोधित किया गया है?

मुझे लगता है कि मैं एक longकुंजी के विचार से इसका उत्तर देता हूं जो एक इकाई में निहित घटकों को परिभाषित करता है। तुम्हें पता है क्योंकि चाबी ताला फिट बैठता है।

ओह! वह एक लंबी पोस्ट थी! (या कम से कम मेरे बड़े मॉनिटर से ऐसा लगता है।)


23
यह मुख्य उपमा अब पूरे विचार को समझने में मददगार है। कमाल का विचार! अपने अंतिम पैराग्राफ पर लोल :)
बायो 595

16
+1 इकाई-घटक प्रणाली की सबसे बड़ी और सबसे अच्छी व्याख्या के लिए मैंने कभी देखा है। : हे!
नाइट ६६६

7
मेरे से -1 - इसलिए नहीं कि यह एक बुरा दृष्टिकोण है, बल्कि इसलिए कि इसे दृष्टिकोण के रूप में चित्रित किया जा रहा है। फिर भी कई प्रणालियाँ हैं जहाँ घटकों और सेवाओं को अलग नहीं किया जाता है (जैसे कि एकता में), और सिस्टम के लिए सरल तरीके हैं जिससे यह पता लगाया जा सके कि किन संस्थाओं को संसाधित करना है (बस इकाई बनने पर उन्हें जोड़ें)।
काइलोटन

37
@Kylotan मैं कहता हूं " यह निर्धारित करने के कई तरीके हैं कि ये सिस्टम कैसे पहचानते हैं कि कौन सी संस्थाओं को संसाधित करना है, लेकिन एक का उपयोग करने का तरीका long " इसके अतिरिक्त, मैं आमतौर पर उन उत्तरों के लिए डाउन वोट आरक्षित करता हूं जो उपयोगी नहीं हैं (होवर पाठ के रूप में) कहते हैं)। मुझे लगता है कि अगर आप उन सभी उत्तरों के लिए बहुत समय लगाते हैं, जो आपने उन सभी उत्तरों के लिए किए हैं, जो उन विषयों को संबोधित नहीं करते हैं, जिन्हें उन्होंने संबोधित किया है।
MichaelHouse

9
समझ लिया। gamedev.stackexchange.com/a/4966/1101
Kylotan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.