ऑफस्क्रीन AI को संभालने का अच्छा तरीका?


16

उदाहरण के लिए:

  • बता दें कि दुनिया में 10 कमरे हैं।
  • और मान लें कि दुनिया में 10 संस्थाओं का निवास है।
  • और प्रत्येक इकाई का अपना "दैनिक दिनचर्या" होता है, जहाँ वह कमरे में कुछ क्रियाएं करता है और साथ ही कमरों के बीच नेविगेट भी कर सकता है।

यह देखते हुए कि खिलाड़ी एक समय में केवल एक कमरे में हो सकता है, अन्य संस्थाओं द्वारा अन्य कमरों में प्रदर्शन कर रहे कार्यों का ट्रैक रखने का एक अच्छा तरीका क्या है?

  1. सबसे सीधा विकल्प प्रत्येक फ्रेम पर 10 संस्थाओं में से प्रत्येक पर जांच करना, उनकी स्थिति / स्थिति की जांच करना और यह निर्धारित करना है कि इकाई उस कमरे में होनी चाहिए या नहीं जहां खिलाड़ी किसी भी समय में स्थित है। (हालांकि यह वास्तव में संसाधन भारी लगता है विशेष रूप से कमरे / इकाई राशि में वृद्धि हुई है।)
  2. एक अन्य विकल्प उस समय का ट्रैक रखना है जो खेल की शुरुआत के बाद से पारित हो गया है, फिर प्रत्येक संस्था यह जांचती है कि उसका पैटर्न खिलाड़ी के कमरे के साथ है या नहीं और अगर यह समय के खिलाफ जांच करता है या नहीं इकाई को इस विशेष समय में एक ही कमरे में रहने वाला माना जाता है, ऐसी संस्थाएं जिनका पैटर्न वर्तमान कमरे के खिलाड़ी के साथ प्रतिच्छेद नहीं करता है, तब तक कुछ भी नहीं होता है जब तक कि खिलाड़ी एक कमरे में प्रवेश नहीं करता है, जो उनके पैटर्न को प्रतिच्छेद करता है और केवल उसी बिंदु पर गणना करता है या नहीं। उन्हें प्रस्तुत करना चाहिए। (लेकिन अगर वे कमरे के साथ बातचीत करते हैं, तो उन्हें हमेशा उन कमरों की स्थिति की जांच करनी होगी जो उस समय में अपने स्थान को निर्धारित करने के लिए अपने मार्ग को अवरुद्ध करते हैं, जो कि महान नहीं है।)

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

थोड़ी देर बुद्धिशीलता के बाद मैं तीसरे विकल्प पर आया, लेकिन मैं सोच रहा था कि क्या शायद इन चीजों को संभालने का कोई बेहतर या बेहतर तरीका है?


1
यह सवाल मुझे एक देव-ब्लॉग की याद दिलाता है जिसे मैंने प्रोजेक्ट ज़ॉम्बीड नामक गेम के लिए पढ़ा था।
सुमुरै

जवाबों:


12

एक बहुत ही सरल दृष्टिकोण "एआई लेवल ऑफ डिटेल" का उपयोग करना है। मोटे तौर पर, इसका मतलब है कि आप एआई को अधिक बार अपडेट करते हैं, यह खिलाड़ी / कैमरे के करीब है। आप एआई गणनाओं की जटिलता को भी कम कर सकते हैं जो कि बाहर, एस्प के हैं। पथ-खोज के लिए। आखिरकार, अगर खिलाड़ी चरित्र को अच्छी तरह से या बिल्कुल भी नहीं देख सकता है, तो चरित्र को उच्चतम सटीकता पर अनुकरण करने के लिए एक टन प्रयास करने का कोई मतलब नहीं है।

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

बड़े और अधिक जटिल खेल समान दृष्टिकोण का उपयोग कर सकते हैं (और है)। वे मुकाबला गणना को सरल बना सकते हैं, पथ-प्रदर्शक के बजाय टेलीपोर्ट वर्णों को उन्हें खोजने की आवश्यकता है जब उन्हें स्थानांतरित करने की आवश्यकता होती है, आदि।

यदि आपका गेम इतना बड़ा है कि आप हर समय पूरी चीज को मेमोरी में नहीं रख सकते हैं, तो एक अच्छा समाधान तो कमरे के सहेजे गए डेटा में अंतिम अपडेट समय को स्टोर करना है, और जब इसके सिमुलेशन (इसके सबसे कम रिज़ॉल्यूशन पर) फिर से खेलना शुरू करें इसे वापस लोड किया गया है।

यदि आप एआई से उम्मीद करते हैं कि शेड्यूल पर "सोए हुए" क्षेत्रों से "लाइव" क्षेत्रों में सो जाएं, तो आप या तो उन क्षेत्रों के लिए सुपर-लो-फ़िडेलिटी डेटा बनाना चाहेंगे जो हर समय स्मृति में रहें (उदाहरण के लिए, बस मोटे नवमेश विस्तार स्तर और प्रमुख वस्तु / वर्ण स्थान) या आप समय-समय पर उन क्षेत्रों में चक्र करना चाहेंगे (जैसे, X "सो" क्षेत्रों में स्मृति और सिमुलेशन में असीम अपडेट के साथ कम निष्ठा और फिर राउंड-रॉबिन उन सभी के माध्यम से " सो "क्षेत्रों में जो प्रमुख सक्रिय NPCs हैं, उतराई और लोडिंग क्षेत्रों जैसा कि आप ऐसा करते हैं)।


1

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

जब आप एक कमरे को अपडेट करते हैं, तो एनपीसी पदों को अद्यतन किया जाना चाहिए और वे सभी क्रियाएं जो उन्होंने की हैं, जो कमरे के साथ बातचीत करते हैं क्योंकि अंतिम अद्यतन को भी संभाला जाना चाहिए, अंतिम रूप से अगले आवश्यक अद्यतन का समय चेक / होना चाहिए।

यदि एक इकाई एक कमरे से दूसरे कमरे में जाती है, तो यह उदाहरण दूसरे कमरे में संग्रहीत किया जाना चाहिए और इकाई का अगला अपडेट को भी अपडेट किया जाना चाहिए।

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

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