आप फ़ेसर / बॉक्स 2 डी जैसे 2 डी भौतिकी इंजन के भीतर एआई पथ का अनुसरण कैसे करते हैं?


12

मैं एक 2d ऊपर नीचे खेल को आगे बढ़ाने की प्रक्रिया में हूँ, जो मैं फ़र्जीर की तरह एक उचित कठोर शरीर भौतिकी इंजन में काम कर रहा हूँ। अब तक, मैंने सिर्फ अपना खुद का भौतिकी कोड एक साथ हैक किया था, जहां जरूरत थी।

मैं यहां चीजों को करने का उचित तरीका सीखने की कोशिश कर रहा हूं।

भौतिकी इंजन के अंदर कठोर शरीर बना लेने के बाद, अपने AI को एक निर्धारित पथ का अनुसरण करने का उचित तरीका क्या है?

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

लेकिन अब वे कठोर शरीर हैं और टक्करों और उन ताकतों के अधीन हैं जो उन्हें मार सकते हैं और उन्हें रास्ते से भगा सकते हैं।

इसलिए एआई को स्थानांतरित करने के लिए मेरा मानना ​​है कि मुझे अब आवेगों / ताकतों को लागू करना चाहिए? मुझे अब प्रत्येक फ़्रेम को अपनी स्थिति को मैन्युअल रूप से सेट नहीं करना चाहिए।

इसलिए मुझे लगता है कि मुझे एक नियतात्मक दुनिया से जाने की जरूरत है जहां मैं एआई को गैर-नियतात्मक दुनिया के लिए एक पथ का सख्ती से पालन करने के लिए मजबूर करता हूं जहां वे हिट होने पर किसी भी दिशा में दस्तक दे सकते हैं और मैं उन्हें रास्ते में अगले नोड की ओर इशारा करता हूं उन्हें स्थानांतरित करने के लिए।

क्या वह सही है? क्या यह है कि अन्य लोग इसे कैसे करते हैं?

यह कुछ सवालों को उठाता है कि फिर अपने एआई को दृश्यों के कोनों पर अटकने से कैसे बचें, क्योंकि वे एक सटीक मार्ग नहीं चल रहे हैं, आप लोग उस प्रकार की चीज़ को कैसे संभालते हैं?

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

किसी भी सलाह के लिए धन्यवाद दोस्तों।


1
+1 मुझे इस बारे में जानने में भी काफी दिलचस्पी है।
डेविड गौवेया

जवाबों:


7

स्टीयरिंग व्यवहार एक भौतिकी-इंजन के साथ संयोजन में बहुत अच्छी तरह से काम करते हैं, क्योंकि वे आमतौर पर इस तरह से लागू होते हैं कि वे एक "स्टीयरिंग बल" लौटाते हैं जिसे फिर आपके भौतिकी-शरीर पर लागू किया जा सकता है।

एक इकाई के एक मार्ग का अनुसरण करने के लिए, आप इस्तेमाल कर सकते हैं शोध पथ नोड से पथ नोड पर जाने के लिए (से बचने overshoot करने के लिए सुनिश्चित कर लें) और उसके बाद का उपयोग आगमन अपने पथ का अंतिम नोड पर।

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


अद्भुत लेख, साझा करने के लिए धन्यवाद। मेरा दिन बचाया।
रिकार्डो सांचेज-साज

0

मैं कहूंगा कि आप सही रास्ते पर हैं, आप इस लेख को देखना चाहते हैं:

http://www.policyalmanac.org/games/aStarTutorial.htm

यह ए * एल्गोरिथ्म का उपयोग करके कुछ बुनियादी टकराव से बचाव और पथ-खोज की व्याख्या करता है।

संपादित करें:

यदि आपको वास्तव में केवल उसी चीज़ की आवश्यकता है जो आपकी वस्तुओं को सही दिशा में स्थानांतरित करने का सबसे अच्छा तरीका है, तो आपको अपने बल के पथ-खोज एल्गोरिथ्म का उपयोग करके प्राप्त किए गए सर्वोत्तम पथ की दिशा में इंगित करते हुए एक बल (कहते हैं, MoveForce या कुछ और) का उपयोग करना चाहिए। पसंद


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

जब मैं इसे फिर से पढ़ता हूँ तो मैं आपकी बात को देखता हूँ, बीमार मेरे जवाब को संपादित करता है
अनाम:

:) मैंने चीजों को स्पष्ट करने के लिए शीर्षक को बदल दिया। निश्चित रूप से पथ खोजने के बजाय निम्नलिखित पथ में रुचि रखते हैं।
टेरीबी

0

@Davidluzgouveia ने गुमनाम पोस्ट पर जो टिप्पणी की, उसे देखते हुए, मैं अपना प्रोजेक्ट लाऊंगा। पथ निम्नलिखित और पथ खोज हालांकि बहुत अलग हैं। पाथ फाइंडिंग इस बात की अधिक है कि एनोनिमस के बारे में क्या पोस्ट किया गया था, और पाथ फाइंडिंग के लिए मैं दिज्क्स्ट्रा के एल्गोरिथ्म में देखूंगा। निम्नलिखित पथ के लिए मैं अपनी पसंद का भौतिकी इंजन पूरी तरह से उपयोग करता हूं। जिस तरह से मैंने इसे स्थापित किया है वह यह है कि प्रत्येक स्थान पर एक इकाई वर्ग चलता है, इसे 2 डी ऑफसेट के माध्यम से उपवर्ग में स्थापित किया जाता है, हाँ वे 2 डी हैं और 3 डी नहीं हैं क्योंकि यह उस तरह से है जैसे मैंने अपने भौतिकी को अपने खेल में स्थापित किया है। ।

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

वैसे भी, आपको इस कैप्सूल ऑब्जेक्ट पर बल लागू करना चाहिए, और इसे हर समय जमीन के ऊपर मंडराते रहना चाहिए। यह कहना नहीं है कि यह किसी भी उच्च नहीं जा सकता, बस यह किसी भी कम नहीं जा सकता। इसका कारण यह है कि मुझे (मेरे मामले में) हॉवर करने की आवश्यकता है क्योंकि एक कठोर शरीर और रैगडोल भौतिकी इंजन में, मेरी इकाइयों के पैर प्रक्रियात्मक रूप से एनिमेटेड हैं। इसलिए कैप्सूल में एक साधारण बल लगाने से, मेरी इकाई के पैर अपने आप ही अपने आप को बदल देंगे। उनके पास अपने अलग-अलग गुरुत्वाकर्षण अनुप्रयोग भी होंगे! यह क्या करता है यह अनुमति देता है कि यदि मेरा चरित्र तिरछा है, तो एक पैर दूसरे की तुलना में कम ऊंचाई पर हो सकता है।

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

विशेष रूप से 2 डी: आपको अभी भी एक मुख्य बिंदु, या बस किसी प्रकार का संदर्भ होना चाहिए, इंजन के चारों ओर धकेलने के लिए जो एक इकाई के आंदोलन के लिए है। आप प्रत्येक इकाई को एक पथप्रदर्शक उपवर्ग दे सकते हैं जिसमें कुछ स्थान हैं जहाँ उसे जाने की आवश्यकता है, आप इसे स्तर कोड में निर्दिष्ट कर सकते हैं, (जैसे स्थान 1 (x, y) स्थान 2 (x, y) आदि) सबसे अच्छा तरीका है (I don 'पता नहीं है कि आप किस तरह के खेल पर काम कर रहे हैं) संभवतः स्तर में स्थानों को निर्दिष्ट करना होगा और यह होगा कि प्रत्येक इकाई उन्हें स्तर द्वारा निर्दिष्ट क्रम में संसाधित करेगी और प्रत्येक स्थान पर पहुंचने के बाद, इसे बदलकर इसे वांछित स्थान से बदल देगी। अगले एक के लिए इसे पाने की जरूरत है।

ऐसे कई तरीके हैं जिनसे आप संशोधित कर सकते हैं, जैसे कि प्रत्येक इकाई के लिए पहली जगह के स्थानों की सूची, क्योंकि इसका मतलब यह नहीं होगा कि सभी इकाइयों को समान स्थानों पर जाना होगा। हालाँकि, उसी तरह, आप इसे लेवल कोड में भी कर सकते हैं (Unit1.location1 (x, y) unit1.location2 (x, y) grunt.l1 (x, y) knight.loc3 (x, y) जो कुछ)

बस कुछ विचार! मेरा सुझाव है कि आप 3D संस्करण पढ़ें भले ही यह कम प्रासंगिक हो।

संपादित करें: मैंने किसी को भी, जो इसे पढ़ सकता है, दोनों के लिए सिर्फ आपूर्ति करने का फैसला किया (हां यह सच है) .... (मैंने मूल रूप से केवल आपके प्रश्न को स्किम किया था और यह महसूस नहीं किया कि जब तक मैं इसे फिर से नहीं लिखूंगा>>

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