मैं एक खेल में खिलाड़ी और दुश्मन एआई को लागू करना शुरू कर रहा हूं, लेकिन मैं इस बात को लेकर उलझन में हूं कि घटक-आधारित गेम आर्किटेक्चर में इसे सबसे अच्छा कैसे लागू किया जाए।
कहो कि मेरे पास एक निम्नलिखित खिलाड़ी का चरित्र है जो स्थिर हो सकता है, दौड़ सकता है और तलवार झूल सकता है। एक खिलाड़ी को स्थिर और चलने वाले राज्य दोनों से स्विंग तलवार राज्य में स्थानांतरित किया जा सकता है, लेकिन फिर खिलाड़ी को खड़े या दौड़ने फिर से शुरू करने से पहले स्विंग को पूरा करना होगा। स्विंग के दौरान, खिलाड़ी घूम नहीं सकता।
जैसा कि मैंने देखा है, मेरे पास दो कार्यान्वयन दृष्टिकोण हैं:
- सभी खिलाड़ी तर्क युक्त एक एआई-घटक बनाएं (या तो वास्तविक घटक से हटा दिया गया या प्लेयरएआईसीओम्पोनेंट के रूप में एम्बेडेड है)। मैं आसानी से खिलाड़ी इकाई बनाने के लिए अलग-अलग घटकों के बीच युग्मन बनाए बिना राज्य प्रतिबंधों को कैसे लागू कर सकता हूं। हालाँकि, AI- घटक को तोड़ा नहीं जा सकता। यदि मेरे पास है, उदाहरण के लिए, एक दुश्मन जो केवल खड़े हो सकते हैं और चारों ओर घूम सकते हैं या केवल घूम सकते हैं और कभी-कभी एक तलवार को स्विंग कर सकते हैं, मुझे नए एआई-घटक बनाने होंगे।
- घटकों में व्यवहार को तोड़ना, प्रत्येक एक विशिष्ट राज्य की पहचान करना। फिर मुझे एक स्टैंडकॉमपॉइंट, वॉककंपोनेंट और स्विंगकॉमपॉइंट मिल जाता है। संक्रमण नियमों को लागू करने के लिए, मुझे प्रत्येक घटक को युगल करना होगा। स्विंग की अवधि के लिए SwingComponent को StandComponent और WalkComponent को अक्षम करना होगा। जब मेरे पास एक दुश्मन होता है जो केवल चारों ओर खड़ा होता है, तो कभी-कभी तलवार को झूलते हुए, मुझे यह सुनिश्चित करना होगा कि SwingComponent केवल WalkComponent को निष्क्रिय करता है यदि यह मौजूद है। यद्यपि यह बेहतर मिक्स-एंड-मैचिंग घटकों के लिए अनुमति देता है, यह एक निरंतरता दुःस्वप्न का कारण बन सकता है क्योंकि हर बार एक निर्भरता जुड़ने के बाद, मौजूदा घटकों को चरित्र पर निर्भरता स्थानों को नई आवश्यकताओं के साथ अच्छी तरह से खेलने के लिए अद्यतन किया जाना चाहिए।
आदर्श स्थिति यह होगी कि एक डिजाइनर इंजन या स्क्रिप्ट कोड की एक भी लाइन को छूने के बिना, एक कंटेनर में घटकों को खींचकर नए दुश्मन / खिलाड़ी बना सकता है। हालांकि मुझे यकीन नहीं है कि स्क्रिप्ट कोडिंग से बचा जा सकता है, मैं इसे यथासंभव सरल रखना चाहता हूं।
इसे सभी में समेटना: क्या मुझे सभी एआई लॉजिक को एक घटक में रखना चाहिए या यूनिट वेरिएंट बनाने के लिए प्रत्येक लॉजिक स्टेट को अलग-अलग घटकों में तोड़ना चाहिए?
संपादित करें : मुझे संदेह है कि पहली और दूसरी स्थिति के साथ मेरा क्या मतलब था, इस बारे में कुछ भ्रम है। मैंने नीचे दिए गए चित्र में इसे समझाने की कोशिश की है।
व्यक्तिगत राज्यों और इकाई के बीच संबंध पर ध्यान दें। पहली स्थिति में, इकाई में रखे जाने से पहले एक एआई घटक पूर्व-निर्मित होता है। एक डिजाइनर केवल प्रोग्रामर द्वारा उपलब्ध कराए गए एआईसीओम्पोर्टर के एक अलग सेट से चयन कर सकता है। दूसरी स्थिति में विभिन्न घटकों के समान स्तर पर अलग-अलग राज्य हैं। एक डिजाइनर अब एक प्रोग्रामर के हस्तक्षेप के बिना अद्वितीय एआई के साथ एक इकाई बना सकता है।
सवाल यह है कि क्या घटक-आधारित इकाई में AI को संरचित करने के लिए ये केवल दो विकल्प हैं और यदि हां, तो अधिकतम लचीलापन क्या होगा?