मैं प्रति इकाई एक प्रकार के एक घटक को तोड़ने के बिना प्रति इकाई कई जाल का उपयोग कैसे कर सकता हूं?


11

हम बस एक पदानुक्रम आधारित गेम इंजन से घटक आधारित गेम इंजन पर स्विच कर रहे हैं। मेरी समस्या यह है कि जब मैं एक मॉडल को लोड करता हूं जिसमें मेषों का एक पदानुक्रम होता है, और जिस तरह से मैं समझता हूं, वह यह है कि एक घटक आधारित प्रणाली में एक इकाई में एक ही प्रकार के कई घटक नहीं हो सकते हैं, लेकिन मुझे प्रत्येक के लिए "meshComponent" की आवश्यकता है एक मॉडल में जाल। तो मैं इस समस्या को कैसे हल कर सकता हूं।

इस साइट पर उन्होंने एक घटक आधारित गेम इंजन लागू किया: http://cowboyprogramming.com/2007/01/05/evolve-your-irachy/


मुझे लगता है कि यह बहुत स्थानीय है।
19

4
मुझे लगता है कि यह एक सामान्य प्रश्न है। क्या एक गेम ऑब्जेक्ट में एक ही घटक के कई उदाहरण हो सकते हैं?
मथियास होल्ज़ल

हाँ, यह हो सकता था, अगर उससे ऐसा ही पूछा जाता। मेरे लिए ऐसा लगता है जैसे वह एक बहुत ही विशिष्ट समस्या के उत्तर की तलाश में था।
जकोरा

4
"... एक घटक आधारित प्रणाली में इकाई में एक ही प्रकार के कई घटक नहीं हो सकते ..." - क्यों नहीं?
डेन

मुझे नहीं लगता कि यह बहुत स्थानीय है। उदाहरण के लिए, UE3 में SkeletalMeshActorकेवल एक ही है SkeletalMeshComponent। यह एक सामान्य समस्या है जिसे कई अलग-अलग तरीकों से संबोधित किया जा सकता है।
सैम होसेवर

जवाबों:


13

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


इसलिए मेरे पास इकाईयों का एक पदानुक्रम है और इन इकाईयों के पास पोटेंशियल हैं और इनग्रहीटर से जुड़े हुए हैं। यह तब भी एक घटक आधारित खेल इंजन =) है
माथियास हॉल्ज़ल

@ MathiasHölzl एक सवाल है? इस तरह की पदानुक्रम OOP में समस्याग्रस्त पदानुक्रम के समान नहीं है। यह सिर्फ एक चित्रमय पदानुक्रम है, बच्चे एंटिटीज अपने माता-पिता से कार्यक्षमता प्राप्त नहीं करेंगे और आपको परेशानी देंगे, यह आमतौर पर वैसे भी किया जाता है (रेंडर करने के लिए सामान का एक पेड़)। तुम भी अपनी समस्या के लिए Asakeron जवाब के साथ जा सकते हैं, मेष की एक सूची होने, मुझे नहीं लगता कि यह कैसे समस्याग्रस्त है। शायद मैं आपके सवाल को नहीं समझ पा रहा हूँ?
ल्यूक बी।

-1 यकीन नहीं है कि अगर वास्तव में जाने का रास्ता है। अगर आपको क्या चाहिए तो एक घटक है जो कि मेषों के पदानुक्रम को संभालता है, तो क्यों नहीं ModelComponentइसमें मेषों का एक पदानुक्रम होता है? इस समस्या के लिए गलत समाधान की तरह लगता है कि बस के लिए एक इकाई विभाजन। देखें असकरन और बाइट 56 के जवाब।
लॉरेंट कौविदो

@LaurentCouvidou मैं यह नहीं देखता कि एक से अधिक एंटिटी का उपयोग करना गलत क्यों होगा, यह मेरे लिए एक अच्छा समाधान की तरह लगता है। मैं सिर्फ मेषों की सूची रखने के लिए एक अलग विकल्प देना चाहता था, हालांकि मैं मानता हूं कि मेषों की एक सूची भी एक अच्छा समाधान होगी।
ल्यूक बी।

@LukeB। क्योंकि मेष का यह समूह एक पूरे के रूप में एक इकाई के अनुरूप हो सकता है, इस तरह के एआई, ध्वनि, भौतिकी पर निर्भर घटकों के साथ ... ऐसा करने से आप एक दृश्य ग्राफ और इसके सभी quirks के साथ समाप्त होते हैं।
लॉरेंट कौविदौ

8

आपके meshComponent में meshes की एक सूची हो सकती है। मुझे यकीन नहीं है कि आप अपने इंजन को कैसे लागू कर रहे हैं, लेकिन एक प्रणाली आसानी से सभी मेषों पर पुनरावृति कर सकती है और बस उन्हें आकर्षित कर सकती है।


1
एक जाल में परिवर्तन, भौतिक, ग्राफिक जैसे घटक भी हैं ...
मथियास होल्ज़ल

1
तो एक जाल एक इकाई है? या सब कुछ एक घटक है? जिस तरह से मैं इसे देखता हूं, ट्रांसफ़ॉर्म, फिजिक और ग्राफिक को इकाई में घटक होना चाहिए न कि मेष में, एक जाली सिर्फ एक वर्णन है।
ल्यूक बी।

1
हाँ, यह एक घटक होना चाहिए लेकिन घटकों में घटक नहीं हो सकते हैं ताकि मॉडल के पदानुक्रम को लागू करना कठिन हो।
मथियास होल्ज़ल

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

4

मैं मेष वस्तुओं की सूची के साथ अपना जाल घटक बनाऊंगा। प्रत्येक जाल वस्तु में एक ऑफसेट के साथ जाल डेटा होता है। ड्राइंग करते समय, ड्राइंग सिस्टम स्थिति घटक से स्थिति लेता है, फिर प्रत्येक घटक को स्थिति + ऑफसेट पर मेष घटक में खींचता है।

आप अपने जाल घटक के अंदर कई जाल हो सकते हैं, जबकि अभी भी प्रति इकाई एकल जाल घटक के साथ कह रहे हैं।


1

TLDR: घटक बनाने के लिए कई जाल से मिलकर शुरू होता है।

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

मैंने अपनी परियोजना के लिए इस बारे में बहुत सोचा और मुझे लगता है कि इष्टतम समाधान ग्राफिक्सकॉमपॉइंट को एक उच्च स्तर का घटक बनाने के लिए है, जिसमें पारंपरिक 'मॉडल' ऑब्जेक्ट की कार्यक्षमता का बहुत कुछ शामिल है - क्योंकि यह कार्यक्षमता वैकल्पिक नहीं है! उन बहुभुजों को प्रस्तुत करने के लिए बफर डेटा की तुलना में बहुत अधिक है और शेडर की आवश्यकता है, जैसे:

  • स्थिति जिसका आपने उल्लेख किया है
  • स्किनिंग / एनिमेशन डेटा
  • वर्तमान पास (उदाहरण के लिए दो पास अल्फा का उपयोग करते हुए)
  • छाया ढलाई की जानकारी (यदि आप कर रहे हैं)
  • सामग्री को कैसे और कब अपडेट करना है, इस बारे में जानकारी
  • कार्यशीलता में कमी

और कण प्रणाली, बिलबोर्ड आदि पर विचार किए बिना सिर्फ 3 डी संपत्ति के लिए, लेकिन यह सब केवल ग्राफिक्स / प्रतिपादन कोड के लिए उचित है - यह भौतिकी, ध्वनि या पटकथा को प्रभावित नहीं करता है, इसलिए यह समझ में आता है कि इसमें बैठना चाहिए ग्राफिक्स / प्रतिपादन घटक।

मैं इसके साथ समाप्त हुआ:

Model : Entity, IHasGraphicsComponent, IHasSkeleton, IHasAnimationStore     //This is the 'game object' - it is passed to the GraphicsController
    ModelComponent : GraphicsComponent                      //This is the actual graphics component, used by the GraphicsController in the context of the game object.
        ModelComponentPart : GraphicsComponent              //This is also a graphics component
            Mesh                                        //These are implementation details
            Material
        ModelComponentPart : GraphicsComponent
            Mesh
            Material
    Skeleton
    Animations

इसमें:

  • मॉडल किसी भी खेल की संपत्ति है जिसमें एक ग्राफिक्स घटक है।

  • ModelComponent पारंपरिक मॉडल के अनुरूप है और वास्तव में, 3D संपत्तियों के लिए है। ग्राफिक्सकम्पोनेंट कंट्रोलर (यदि आप मॉडल-व्यू-कंट्रोलर पैटर्न का उपयोग करते हैं) यह पता लगाने के लिए जिम्मेदार है कि यह किस प्रकार की ग्राफिक्स संपत्ति है और इसे सही तरीके से ड्राइंग करें (ध्यान दें कि मॉडलकंपोनेंट ग्राफिक्सकंपोनेंट का एक उपवर्ग है)।

सादगी और पीछे की संगतता के लिए खान में कुछ समझौते भी हुए थे, जैसे कि प्रत्येक GraphicsComponent भी एक Entity है, और Entity सीधे स्थिति डेटा संग्रहीत करता है इसलिए इसकी केवल एक ही स्थान पर गणना की जाती है, लेकिन विचार एक ही है: GraphicsComponent हैंडल क्या है आइटम को आकर्षित करने की आवश्यकता है - सभी की आवश्यकता है - न कि केवल क्या जो कि मॉड्यूलर से आता है।

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