एकता में एक सरल सी # एआई बनाना

छवि

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

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

ट्रेनिंग


पहले हमें एक 3D प्रोजेक्ट बनाने की आवश्यकता है। चित्र 1 में दिखाए गए अनुसार, एकता प्रारंभ करने के बाद विंडो के शीर्ष पर स्थित नया बटन पर क्लिक करें।


चित्र 1: एक नई परियोजना का निर्माण

अपने AI प्रोजेक्ट को नाम दें और सुनिश्चित करें कि यह एक 3D प्रोजेक्ट है। प्रोजेक्ट को संग्रहीत करने के लिए कंप्यूटर पर जगह चुनने के बाद, चित्र 2 में दिखाए गए तल पर प्रोजेक्ट बटन पर क्लिक करें।


चित्र 2: प्रोजेक्ट सेटअप स्क्रीन

प्रोजेक्ट बनाने के बाद, हमें सबसे पहले अपने काम को व्यवस्थित करने के लिए एसेट्स विंडो में फ़ोल्डर्स सेट करने होंगे। एसेट्स विंडो पर राइट-क्लिक करें और नया फ़ोल्डर बनाने के लिए Create → Folder चुनें। इस फ़ोल्डर को नाम दें सामग्री । फिर एक दूसरा फोल्डर बनाएं और इसे Scripts नाम दें। चित्र 3 दिखाता है कि उसे कैसा दिखना चाहिए।


चित्र 3: एक नया फ़ोल्डर बनाना

इस सब के बाद, एसेट्स विंडो को चित्र 4 में दिखाए गए की तरह दिखना चाहिए।


चित्र 4: एसेट्स विंडो।

इसके बाद, एक मंजिल बनाएं, जिस पर सभी ऑब्जेक्ट खड़े होंगे। पदानुक्रम विंडो में, एक प्लेन ऑब्जेक्ट बनाने के लिए Create → 3D ऑब्जेक्ट → प्लेन का चयन करें जिसे फर्श के रूप में उपयोग किया जाएगा।


चित्र 5: एक प्लेन ऑब्जेक्ट बनाना।

इस फ्लोर ऑब्जेक्ट को नाम दें और इसके एक्स स्केल मान को 7, और जेड स्केल वैल्यू को 3 में बदलें। उसके बाद, चयनित फ्लोर ऑब्जेक्ट के साथ इंस्पेक्टर विंडो को चित्र 6 में दिखाया गया होना चाहिए।


चित्र 6: फ़्लोर ऑब्जेक्ट के गुणों को सेट करना।

अब हमें तल के लिए एक नई सामग्री बनाने की आवश्यकता है जो इसे बाकी वस्तुओं से अलग कर सके जो दृश्य में रखी जाएगी। एसेट्स विंडो के मटीरियल फोल्डर में, एसेट्स विंडो पर राइट क्लिक करके और क्रिएट → मटेरियल को चुनकर एक नई सामग्री बनाएं


चित्र 7: नई सामग्री बनाना

समाप्त होने पर, सामग्री तल का नाम दें।


चित्र 8: तल सामग्री।

चयनित मंजिल के साथ इंस्पेक्टर विंडो के शीर्ष पर, एक रंग बीनने का चयन करें।


चित्रा 9: एक रंग बीनने का चयन।

बेशक, आप फर्श के लिए किसी भी रंग का चयन कर सकते हैं, लेकिन इस उदाहरण में मैंने लाल-भूरे रंग को चुना, जैसा कि चित्र 10 में दिखाया गया है।


चित्रा 10: रंग बीनने वाला।

पदानुक्रम विंडो में फ़्लोर ऑब्जेक्ट का चयन करें, और मेश रेंडरर घटक में, सामग्री के बगल में छोटे तीर का चयन करें।


चित्र 11: एक सामग्री परिवर्तन के लिए तैयारी करना।

निरीक्षक विंडो में मेष रेंडरर घटक के तत्व 0 क्षेत्र के लिए एसेट्स विंडो से फर्श सामग्री खींचें।


चित्र 12: फर्श की सामग्री को मंजिल वस्तु की सामग्री के रूप में परिभाषित करना।

फ़्लोर ऑब्जेक्ट के साथ समाप्त होने के बाद, हमें दीवार क्षेत्र के चारों ओर बनाने की आवश्यकता है ताकि खिलाड़ी किनारे से न गिर सके। एक नया विमान बनाने के लिए वापस → 3D ऑब्जेक्ट → प्लेन पर जाएं। हम इस वॉल प्लेन को कॉल करते हैं और इसे फ़्लोर के समान आयामों पर सेट करते हैं, अर्थात, X स्केल 7 के मान के साथ और Z स्केल 3 के मान के साथ। इसके बाद तीन और दीवारें बनाएं, एक ऑब्जेक्ट चुनें और तीन बार Ctrl + D दबाएं। उसके बाद, दीवारों को चारों ओर रखें। तालिका में डेटा के अनुसार लिंग।

नाम
स्थिति X
स्थिति Y
स्थिति z
रोटेशन x
रोटेशन z
दीवार
-35
21
0
0
-90
दीवार (1)-1
11
-15
90
0
दीवार (2)
-1
11
13.5
-90
0
दीवार (3)
34
21
0
0
90

तालिका 1: सभी वॉल ऑब्जेक्ट की स्थिति और घुमाव।

यह सब पूरा करने के बाद, आपको कैमरे की स्थिति बदलने की आवश्यकता है ताकि यह ऊपर से फर्श पर दिखे। मुख्य कैमरा ऑब्जेक्ट का चयन करें और Y स्थिति को 30, Z स्थिति से 0, और X रोटेशन से 80 तक सेट करें।


चित्र 13: कैमरा ऑब्जेक्ट सेट करना।

दृश्य तैयार किया गया है, इसलिए खिलाड़ी के चरित्र को बनाने का समय आ गया है। पदानुक्रम विंडो में, एक गोला वस्तु बनाने के लिए → 3D वस्तु → क्षेत्र बनाएँ पर क्लिक करें । इस ऑब्जेक्ट प्लेयर को नाम दें, और उसके बाद इंस्पेक्टर विंडो के नीचे दिए गए कंपोनेंट बटन पर क्लिक करें।


चित्र 14: एक नया घटक जोड़ना।

अब ऋग्वेद को खोजो । उसके बाद, सूची से रिगिडोबो घटक चुनें और प्लेयर ऑब्जेक्ट में रिगिडॉडी जोड़ें।


चित्र 15: रिगिडो घटक को जोड़ना।

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


चित्र 16: एक नया टैग परिभाषित करना।

हमें खिलाड़ी की स्थिति निर्धारित करने की आवश्यकता है ताकि वह फ़्लोर ऑब्जेक्ट के अधीन न हो। उदाहरण में, मैंने खिलाड़ी को ऊपरी बाएँ कोने में X स्थिति के साथ 26, Y स्थिति 1 के बराबर, और Z स्थिति -9 के बराबर रखा।


चित्र 17: खिलाड़ी प्लेसमेंट।

हमारे भविष्य के कोड को सही तरीके से काम करने के लिए, हमें, निश्चित रूप से, इसे ऑब्जेक्ट में संलग्न करना होगा। पदानुक्रम विंडो पर वापस जाएं और इस समय बनाएँ → 3D ऑब्जेक्ट → क्यूब चुनें । इस गार्ड क्यूब को कॉल करें, इसमें इंस्पेक्टर विंडो में एड कंपोनेंट बटन का उपयोग करके रिगिडोबो घटक और नवमेश एजेंट घटक को जोड़ें । इसके बाद, इसे दृश्य के ऊपरी बाएं कोने में कहीं रखें। उसके बाद, गार्ड ऑब्जेक्ट की इंस्पेक्टर विंडो इस तरह दिखाई देगी:


चित्र 18: इंस्पेक्टर विंडो में गार्ड ऑब्जेक्ट।

और यह ऑब्जेक्ट इस तरह स्थित होना चाहिए:


चित्र 19: गार्ड ऑब्जेक्ट का प्लेसमेंट।

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

  • 9 पर स्केल एक्स
  • 0.5 पर स्केल वाई
  • 9 पर स्केल जेड

उसके बाद, लुकर को स्थिति दें ताकि यह फर्श के मध्य ऊपरी भाग में स्थित हो, जैसा कि चित्र 20 में दिखाया गया है।


चित्र 20: लुकर का स्थान।

लुकर को एक अनूठी सामग्री देने का सही समय है ताकि आप देख सकें कि यह टालने लायक है। संपत्ति विंडो के सामग्री फ़ोल्डर में, राइट-क्लिक करें और एक नई सामग्री बनाएं। इसे लुकर नाम दें और इसे एक चमकदार लाल रंग दें। उसके बाद, इस सामग्री को अपने रंग को बदलने के लिए लुकर ऑब्जेक्ट की सामग्री के रूप में नामित करें। उसके बाद, दृश्य को इस तरह दिखना चाहिए:


चित्र 21: नई सामग्री के साथ लुकर ऑब्जेक्ट।

हमारे लिए एकमात्र चीज गार्ड के लिए एक नेविगेशन जाल बनाना है, जिस पर वह चल सकता है। एकता संपादक के शीर्ष पर एक विंडो मेनू है। चित्र 22 में दिखाए गए नेविगेशन विंडो को खोलने के लिए विंडो → नेविगेशन चुनें।


चित्र 22: नेविगेशन विंडो।

पदानुक्रम में फ़्लोर ऑब्जेक्ट का चयन करें, और फिर नेविगेशन विंडो में, नेविगेशन स्टेटिक चेक बॉक्स का चयन करें।


चित्र 23: नेविगेशन स्थैतिक

इसके बाद, विंडो के शीर्ष पर Bake विकल्प चुनें।


चित्र 24: बेक मेनू पर जाएँ।

बेक मेनू खुलता है, जिसमें आप हमारे द्वारा बनाए जा रहे नेविगेशन जाल के गुणों को बदल सकते हैं। हमारे उदाहरण में, कुछ भी बदलने की जरूरत नहीं है। बस निचे दाईं ओर Bake बटन पर क्लिक करें।


चित्र 25: एक नया नेविगेशन जाल बनाना।

इस बिंदु पर, एकता आपको दृश्य को बचाने के लिए कहेगी। इसे सहेजें, जिसके बाद एक नेविगेशन जाल बनाया जाएगा। अब दृश्य इस तरह होगा:


चित्र 26: जोड़े गए नेविगेशन जाल के साथ वर्तमान दृश्य।

अब एकता में सब कुछ कॉन्फ़िगर किया गया है, इसलिए यह परियोजना के काम करने के लिए आवश्यक स्क्रिप्ट बनाने का समय है। एसेट्स विंडो में, राइट-क्लिक करें और Create → C # Script चुनें । इस स्क्रिप्ट का नाम प्लेयरगार्ड और लुकर के साथ स्क्रिप्ट बनाते हुए इस ऑपरेशन को दो बार दोहराएं।


चित्र 27: एक नई लिपि बनाना।

उसके बाद, एसेट्स विंडो में लिपियों फ़ोल्डर इस तरह दिखेगा:


चित्रा 28: लिपियों फ़ोल्डर।

सबसे पहले, हम प्लेयर स्क्रिप्ट कोड लिखना शुरू करेंगे। Visual Studio को खोलने और कोड बनाना शुरू करने के लिए एसेट्स विंडो में प्लेयर स्क्रिप्ट पर डबल-क्लिक करें।

कोड


प्लेयर स्क्रिप्ट काफी सरल है, यह सब उपयोगकर्ता को बॉल ऑब्जेक्ट को स्थानांतरित करने देता है। कक्षा की घोषणा के तहत, हमें उस रिगिडोबो घटक का लिंक प्राप्त करना होगा जो हमने पहले परियोजना में बनाया था।

private Rigidbody rb; 

उसके ठीक बाद, स्टार्ट फंक्शन में, हम एकता को आरबी प्लेयर प्लेयर के मौजूदा रिगिडबॉडी घटक को आरबी पर सेट करने के लिए कमांड करते हैं।

 rb = GetComponent<Rigidbody>(); 

उसके बाद, प्लेयर स्क्रिप्ट इस तरह दिखाई देगी:


चित्र 29: इस समय प्लेयर स्क्रिप्ट।

अब जब आरबी मान असाइन किया गया है, तो हमें एरो कीज दबाने पर प्लेयर ऑब्जेक्ट को ले जाने की जरूरत है। ऑब्जेक्ट को स्थानांतरित करने के लिए, हम भौतिकी का उपयोग करेंगे, जब उपयोगकर्ता तीर कुंजी दबाएगा तो ऑब्जेक्ट पर बल लागू होगा। ऐसा करने के लिए, अद्यतन फ़ंक्शन में बस निम्नलिखित कोड जोड़ें:

 if (Input.GetKey(KeyCode.UpArrow)) rb.AddForce(Vector3.forward * 20); if (Input.GetKey(KeyCode.DownArrow)) rb.AddForce(Vector3.back * 20); if (Input.GetKey(KeyCode.LeftArrow)) rb.AddForce(Vector3.left * 20); if (Input.GetKey(KeyCode.RightArrow)) rb.AddForce(Vector3.right * 20); 

इसके साथ हमने प्लेयर स्क्रिप्ट पूरी कर ली है। तैयार स्क्रिप्ट इस तरह दिखाई देगी:


चित्र 30: तैयार प्लेयर स्क्रिप्ट।

अपना काम बचाओ और एकता में लौटो। इस बार, एसेट्स विंडो में गार्ड स्क्रिप्ट का चयन करें। गार्ड कोड को काम करने के लिए, आपको स्क्रिप्ट के शीर्ष पर उपयोग निर्माण को जोड़ना होगा।

 using UnityEngine.AI; 

इसके बाद, कक्षा की घोषणा के तुरंत बाद निम्नलिखित चर घोषित करें।

 public GameObject player; private NavMeshAgent navmesh; 

प्लेयर ऑब्जेक्ट को गार्ड ऑब्जेक्ट के प्लेयर चर के मान के रूप में उपयोग किया जाता है। यह बाद में काम आएगा जब हम खिलाड़ी का पीछा करने के लिए गार्ड ऑब्जेक्ट को कमांड करेंगे। फिर नवमेश चर को वस्तु के नवमेश अंश को प्राप्त करने के लिए घोषित किया जाता है। हम इसका उपयोग बाद में करेंगे जब गार्ड खिलाड़ी का पीछा करना शुरू करता है जब वह सीखता है कि खिलाड़ी लुकर ऑब्जेक्ट को छू रहा है। प्रारंभ फ़ंक्शन में, हमें ऑब्जेक्ट के घटक NavMesh एजेंट के लिए नवमेश चर का मान सेट करने की आवश्यकता है:

 navmesh = GetComponent<NavMeshAgent>(); 

फिर, अपडेट फ़ंक्शन में, हम कोड की एक पंक्ति जोड़ते हैं:

 navmesh.destination = player.transform.position; 

यह लाइन गार्ड ऑब्जेक्ट के लिए गंतव्य सेट करती है। हमारे मामले में, यह प्लेयर ऑब्जेक्ट की वर्तमान स्थिति को ले जाएगा और इस बिंदु पर ले जाएगा। ऑपरेशन के बाद, ऑब्जेक्ट लगातार खिलाड़ी का पीछा करेगा। सवाल यह है कि, प्रतिक्रिया प्रक्रिया कैसे की जाती है? यह गार्ड स्क्रिप्ट में एन्कोडेड नहीं होगा, बल्कि लुकर स्क्रिप्ट में होगा। लुकर स्क्रिप्ट पर जाने से पहले, अपने गार्ड स्क्रिप्ट कोड को सत्यापित करने के लिए चित्र 31 को देखें।


चित्र 31: तैयार गार्ड लिपि।

लुकर के अंदर , हमें फिर से निम्नलिखित चर घोषित करने की आवश्यकता है:

 public GameObject guard; private float reset = 5; private bool movingDown; 

उसके बाद, हम प्रारंभ फ़ंक्शन पर टिप्पणी करते हैं, जिसकी हमें इस स्क्रिप्ट में आवश्यकता नहीं है। चलो अपडेट फ़ंक्शन पर जाएं और निम्नलिखित कोड जोड़ें:

 if (movingDown == false) transform.position -= new Vector3(0, 0, 0.1f); else transform.position += new Vector3(0, 0, 0.1f); if (transform.position.z > 10) movingDown = false; else if (transform.position.z < -10) movingDown = true; reset -= Time.deltaTime; if (reset < 0) { guard.GetComponent<Guard>().enabled = false; GetComponent<SphereCollider>().enabled = true; } 

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


चित्र 32: लुकर स्क्रिप्ट।

कोलाडर की बात करें: यह एक संघर्ष कोड बनाने का समय है जो लुकर टाइमर को रीसेट करता है और इसमें गार्ड स्क्रिप्ट शामिल है। अद्यतन फ़ंक्शन में, निम्न कोड बनाएँ:

 private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Player") { guard.GetComponent<Guard>().enabled = true; reset = 5; GetComponent<SphereCollider>().enabled = false; } } 

OnCollisionEnter एकता स्वचालित रूप से इसे टक्कर कोड के रूप में पहचानती है, और इसलिए जब किसी अन्य वस्तु के साथ टकराव होता है, तो इसे निष्पादित करता है। हमारे मामले में, यह पहले यह देखने के लिए जांचता है कि क्या टकराने वाली वस्तु में प्लेयर टैग है या नहीं। यदि नहीं, तो यह बाकी कोड को अनदेखा करता है। अन्यथा, यह गार्ड स्क्रिप्ट को चालू करता है, रीसेट टाइमर को 5 (यानी, पांच सेकंड) पर सेट करता है, और इसके कोलाइडर को निष्क्रिय करता है ताकि खिलाड़ी अभी भी ऑब्जेक्ट के माध्यम से आगे बढ़ सके और गलती से लुकर ऑब्जेक्ट में फंस न जाए। समारोह चित्र 33 में दिखाया गया है।


चित्र 33: लुकर के लिए टकराव कोड

यह सब प्रोजेक्ट कोड तैयार है! प्रोजेक्ट पूरा करने से पहले आप कुछ और चीजें कर सकते हैं। सभी काम बचाओ और एकता में लौटो।

प्रोजेक्ट पूरा हो रहा है


परियोजना को पूरा करने के लिए, हमें बस लिपियों को संबंधित वस्तुओं से जोड़ना होगा और कई चर निर्धारित करने होंगे। सबसे पहले, नेविगेशन विंडो से इंस्पेक्टर विंडो पर जाएं:


चित्र 34: इंस्पेक्टर विंडो में संक्रमण

उसके बाद, प्लेयर ऑब्जेक्ट के साथ शुरू करते हैं। इसे पदानुक्रम विंडो में चुनें, और फिर इंस्पेक्टर विंडो के निचले भाग में घटक जोड़ें बटन पर क्लिक करें और प्लेयर स्क्रिप्ट जोड़ें। यह प्लेयर ऑब्जेक्ट को पूरा करता है।


चित्र 35: प्लेयर स्क्रिप्ट घटक

इसके बाद, गार्ड ऑब्जेक्ट चुनें। पहले की तरह, ऑब्जेक्ट को गार्ड स्क्रिप्ट संलग्न करें। इस बार हमें गार्ड को बताने की जरूरत है कि खिलाड़ी कौन है। ऐसा करने के लिए, गार्ड स्क्रिप्ट घटक के प्लेयर फ़ील्ड में पदानुक्रम से प्लेयर ऑब्जेक्ट खींचें, जैसा कि चित्र 36 में दिखाया गया है।


चित्र 36: प्लेयर को प्लेयर फ़ील्ड का मान बनाना।

हमें गार्ड स्क्रिप्ट को भी अक्षम करना होगा। हमारी परियोजना में, गार्ड अपनी स्क्रिप्ट को चालू करने के बाद खिलाड़ी का पीछा करेगा। खिलाड़ी के लुकर ऑब्जेक्ट को छूने के बाद ही इस गार्ड स्क्रिप्ट को शामिल किया जाना चाहिए। आपको बस इतना करना चाहिए कि घटक में गार्ड (स्क्रिप्ट) पाठ के आगे स्थित बॉक्स को अनचेक करें:


चित्र 37: गार्ड स्क्रिप्ट को अक्षम करना।

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


चित्रा 38: एक परियोजना का परीक्षण।

प्लेयर ऑब्जेक्ट को लुकर ऑब्जेक्ट पर ले जाने का प्रयास करें (याद रखें कि चलती तीर के साथ किया गया है!)। ध्यान दें कि इसके बाद, गार्ड ऑब्जेक्ट खिलाड़ी का पीछा करना शुरू कर देगा। वह लगभग 5 सेकंड के लिए पीछा जारी रखेगा, जिसके बाद वह हार मान लेगा।


चित्रा 39: कार्रवाई में एक पूरी तरह से पूरा प्रोजेक्ट।

निष्कर्ष


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

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

Source: https://habr.com/ru/post/hi419641/


All Articles