Computer >> कंप्यूटर ट्यूटोरियल >  >> समस्या निवारण >> Android

Unity के साथ बेसिक Android गेम कैसे बनाएं

पिछले Appual's ट्यूटोरियल "How to Create a Basic Unity Platform Game" (और इसका भाग 2) में, हमने Unity और बिल्ट-इन WebGL प्लगइन का उपयोग करके एक साधारण HTML5-आधारित ब्राउज़र गेम बनाने पर चर्चा की - इस समान ट्यूटोरियल में, हम Android गेम बनाने के लिए Unity का उपयोग करने पर जाएंगे।

आवश्यकताएं:

  • Unity
  • NotePad++ जैसा एक अच्छा टेक्स्ट एडिटर (वैकल्पिक लेकिन अनुशंसित)
  • Android SDK

यदि आपके पास पहले से नहीं है, तो आपको Unity SDK और Android SDK दोनों को डाउनलोड और इंस्टॉल करके शुरू करना चाहिए। हमें Android SDK की आवश्यकता है ताकि हम गेम के APK को Android वातावरण के अंदर टेस्ट कर सकें।

Unity लॉन्च करें और एक नया प्रोजेक्ट बनाएं। इसे 2D प्रोजेक्ट बनाएं।

कई पैनल्स हैं जिनसे परिचित होना है - Hierarchy पैनल जिसमें हमारे सभी सीन एलिमेंट्स होंगे (सीन = आप वर्तमान में जिस "लेवल" पर काम कर रहे हैं)। फिर Game टैब है जिसका उपयोग एडिटर के अंदर रहते हुए अपने गेम को खेलने / टेस्ट करने के लिए किया जाता है, और दाईं ओर आपके पास Inspector पैनल है जहां आप लाइटिंग, फिजिक्स आदि जैसी विभिन्न चीजों को एडिट करेंगे।

पहली चीज जो हम करना चाहते हैं वह है एक स्प्राइट बनाना - यह हमारा मुख्य पात्र होगा (जिसे हम नियंत्रित करते हैं)। आप या तो अपना खुद का स्प्राइट बना सकते हैं, जैसे आंखों वाला एक वर्ग बनाएं, या आप इंटरनेट से एक स्प्राइट ले सकते हैं - बस सुनिश्चित करें कि यह एक .PNG फ़ाइल है (पारदर्शी पृष्ठभूमि)।

अपने स्प्राइट को मेन सीन विंडो (सबसे बड़ी विंडो) पर ड्रैग और ड्रॉप करें - यह बाईं ओर Hierarchy पैनल पर भी दिखाई देगा।

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

तो बस एक नया वर्ग "स्प्राइट" बनाएं और इसे अपने स्प्राइट पात्र की तरह ही सीन विंडो पर ड्रैग और ड्रॉप करें।

अब हमें Unity को अपने मुख्य पात्र को फिजिक्स देने का निर्देश देने की आवश्यकता है - अपने मुख्य स्प्राइट पात्र पर क्लिक करें (यह सीन विंडो में नीले रंग में हाइलाइट हो जाना चाहिए), फिर Inspector पैनल पर, "GameObjects" देखें।

"Add Component > Physics 2D > RigidBody2D" पर क्लिक करें। यह स्वचालित रूप से आपके स्प्राइट में फिजिक्स जोड़ देगा, जिसे आपको अन्यथा किसी अन्य SDK में स्वयं स्क्रिप्ट करना पड़ता।

Unity के साथ बेसिक Android गेम कैसे बनाएं

हम मुख्य स्प्राइट पात्र को नियंत्रण से बाहर घूमने से रोकना चाहते हैं - इसलिए Inspector पैनल में Constraints टैब ढूंढें (मुख्य स्प्राइट अभी भी सीन विंडो में हाइलाइटेड), और "Freeze Rotation Z" के लिए बॉक्स चेक करें।

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

हम अपने ओरिएंटेशन को ठीक करना भी चाहते हैं ताकि पात्र घूमे और फ्रीव्हील न करे। प्लेयर चुने हुए इंस्पेक्टर में 'constraints' ढूंढें और रोटेशन Z को फ्रीज करने के लिए बॉक्स को टिक करें। अब फिर से प्ले पर क्लिक करें और आपको अपना प्लेयर अब आकाश से अपने अनंत विनाश की ओर गिरता हुआ मिलना चाहिए।

अपने मुख्य स्प्राइट पात्र को अंतहीन रूप से गिरने से रोकने के लिए, हमें एक कोलाइडर जोड़ने की आवश्यकता है। यह मूल रूप से एक आकार की ठोस रूपरेखा है जिसे हम मुख्य स्प्राइट पात्र में जोड़ेंगे। अपने मुख्य स्प्राइट पात्र को हाइलाइट करें, "Add Component > Physics 2D > BoxCollider2D" पर क्लिक करें।

अब पहले बनाए गए प्लेटफॉर्म के साथ भी वही सटीक चीज करें। आपका मुख्य स्प्राइट पात्र अब प्लेटफॉर्म के साथ "टकराना" चाहिए और वहीं रहना चाहिए।

तो अब हम यह सुनिश्चित करना चाहते हैं कि कैमरा आपके मुख्य स्प्राइट पात्र का अनुसरण करेगा - सीन के अंदर, पहले से ही एक कैमरा ऑब्जेक्ट होना चाहिए। आप इसे मुख्य स्प्राइट पात्र के ऊपर ड्रैग करना चाहते हैं।

यह विशेष रूप से महत्वपूर्ण है यदि आप 3D आधारित रनर बना रहे हैं, जैसे Slope जहां आपको कैमरे को प्राथमिक गेम ऑब्जेक्ट (आपके मुख्य स्प्राइट पात्र) के पीछे लगातार रहने की आवश्यकता होती है।

Unity के साथ बेसिक Android गेम कैसे बनाएं

अब Hierarchy पैनल पर जाएं और GameObjects की सूची में, आप कैमरे को मुख्य स्प्राइट पात्र (Player GameObject) के नीचे ड्रैग करना चाहते हैं। यह मुख्य स्प्राइट पात्र को कैमरे का 'पैरेंट' बना देगा। इसलिए जब भी Player GameObject स्क्रीन के चारों ओर घूमता है, कैमरा उसका अनुसरण करना चाहिए।

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

"Assets" फोल्डर पर राइट क्लिक करें और एक नया फोल्डर बनाएं - इसे Scripts नाम दें। अब इस नए फोल्डर पर राइट क्लिक करें और "Create > C# Script" दबाएं और इसे PlayerControls नाम दें। यह स्क्रिप्ट हमारे मुख्य स्प्राइट पात्र के व्यवहार को परिभाषित करने जा रही है।

जब आप इस नई स्क्रिप्ट पर डबल क्लिक करते हैं, तो यह चाहिए Visual Studio में खुल जाए - वैकल्पिक रूप से (और मेरी व्यक्तिगत पसंद), आप इसे NotePad++ जैसे किसी चीज़ में संपादित कर सकते हैं।

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

void Start(): लाइन के ऊपर:

Unity के साथ बेसिक Android गेम कैसे बनाएं

public Rigidbody2D rb;

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

तो अगला, फिजिक्स ऑब्जेक्ट का पता लगाएं।

rb = GetComponent<Rigidbody2D>();

और आप इस लाइन को Update() के अंदर जोड़ेंगे

rb.velocity = new Vector2(3, rb.velocity.y);

Update() क्या करता है वह लगातार रीफ्रेश करता है, इसलिए उसमें जोड़ा गया कोई भी कोड लगातार चलेगा (जब तक ऑब्जेक्ट नष्ट नहीं हो जाता)। तो हमने स्क्रिप्ट को निर्देश दिया है कि हम चाहते हैं कि रिजिडबॉडी का एक नया वेक्टर Y अक्ष (rb.velocity.y) पर समान गति का उपयोग करे, लेकिन क्षैतिज अक्ष पर 3 की गति हो। भविष्य में, आप 'FixedUpdate()' का भी उपयोग कर सकते हैं जो समान लेकिन अलग है, क्योंकि वहां आप स्क्रिप्ट के अपडेट / रीफ्रेश मात्रा को नियंत्रित कर सकते हैं।

स्क्रिप्ट सेव करें और Unity में वापस जाएं, फिर अपने मुख्य स्प्राइट पात्र को हाइलाइट करने के लिए क्लिक करें। Inspector पैनल में, Add Component > Scripts पर जाएं और हमारे द्वारा अभी सेव की गई स्क्रिप्ट जोड़ें। अब जब आप Play बटन पर क्लिक करते हैं, तो मुख्य स्प्राइट पात्र को प्लेटफॉर्म किनारे की ओर लगातार चलना चाहिए।

प्लेयर इनपुट कंट्रोल्स बनाना

तो क्योंकि यह बाधाओं के साथ एक एंडलेस रनर स्टाइल गेम है, हमें प्लेयर के लिए कंट्रोल्स जोड़ने की आवश्यकता है जैसे 'जंप' बटन।

पहले से स्क्रिप्ट को फिर से खोलें, और हम यह अतिरिक्त कोड जोड़ने जा रहे हैं:

if (Input.GetMouseButtonDown(0)) { rb.velocity = new Vector2(rb.velocity.x, 5); }

आप इसे Update() मेथड के अंदर रखने जा रहे हैं, और यह मूल रूप से Unity को बताता है कि जब प्लेयर अपने माउस बटन पर क्लिक करता है (जो Android पर स्क्रीन टैप के रूप में अनुवादित होगा), तो मुख्य स्प्राइट पात्र हवा में "जंप" करेगा। ऐसा इसलिए है क्योंकि हमने Y अक्ष पर 5 के मान के साथ एक वेग जोड़ा है (एक उच्च मान का अर्थ उच्च जंप होगा, निश्चित रूप से)।

यदि आप कोडिंग से बहुत परिचित नहीं हैं, तो हमने एक If स्टेटमेंट का उपयोग किया क्योंकि If मूल रूप से एक "करो या मत करो" प्रकार का निर्देश है - यह सचमुच कह रहा है यदि यह होता है, तो यह कमांड करो। तो यदि प्लेयर माउस पर क्लिक नहीं कर रहा है (या अपने Android स्क्रीन पर टैप नहीं कर रहा है) तो जाहिर है स्क्रिप्ट नहीं चलेगी।

आगे बढ़ें और Play बटन पर क्लिक करें और जारी रखने से पहले सुनिश्चित करें कि यह सही ढंग से काम करता है।

अगला, हम अपनी बाधाओं को जोड़ने जा रहे हैं (जो मुख्य पात्र स्प्राइट को "नष्ट" कर सकते हैं), एक गेम स्कोर, और एक "गेम ओवर" मेनू।

यदि आपने अब तक गेम टेस्ट किया है, तो अब तक हमारे पास एकमात्र समस्या यह है कि हमारे द्वारा बनाया गया "जंप" बटन दबाने से पात्र जंप करेगा चाहे वे ग्राउंडेड हों या नहीं - यह मूल रूप से Flappy Birds है, और हम जैसा रनर चाहते हैं वैसा नहीं। लेकिन हम इसे ठीक करने जा रहे हैं।

स्क्रिप्ट में, Update() मेथड के ऊपर कोड का यह भाग जोड़ें:

public Transform groundCheck; public Transform startPosition; public float groundCheckRadius; public LayerMask whatIsGround; private bool onGround; और फिर Update मेथड में if स्टेटमेंट के ऊपर यह अगली लाइन जोड़ें: onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround); और अगली आप इस निम्नलिखित लाइन को "&& onGround" शामिल करने के लिए बदल देंगे if (Input.GetMouseButtonDown(0) && onGround) { तो हमारी पूरी स्क्रिप्ट मूल रूप से इस तरह दिखनी चाहिए: public class PlayerControls : MonoBehaviour { public Rigidbody2D rb; public Transform groundCheck; public Transform startPosition; public float groundCheckRadius; public LayerMask whatIsGround; private bool onGround; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { rb.velocity = new Vector2(3, rb.velocity.y); onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround); if (Input.GetMouseButtonDown(0) && onGround) { rb.velocity = new Vector2(rb.velocity.x, 5); } } }

यह समझाने के लिए कि हमने क्या किया है, हमने एक नया "ट्रांसफॉर्म" बनाया है, जिसका अर्थ है गेम वर्ल्ड के स्पेस में एक पोजीशन। हमने इसकी त्रिज्या सेट की है और हम Unity को निर्देश दे रहे हैं कि क्या त्रिज्या हमारे "ग्राउंड" लेयर के साथ ओवरलैप हो रही है - और इसलिए यदि हमारी त्रिज्या "ग्राउंड" के साथ सिंक हो जाती है, तो हमारा पात्र जंप करने में सक्षम होना चाहिए, और यदि हम पहले से ही जंप से हवा में हैं, तो हमें फिर से जंप करने में सक्षम नहीं होना चाहिए। मूल रूप से, onGround सच होगा यदि groundCheck नामक ट्रांसफॉर्म ग्राउंड लेयर के साथ ओवरलैप हो रहा है। उम्मीद है कि यह समझ में आता है।

तो स्क्रिप्ट सेव करें और Unity में वापस जाएं, और आप देखेंगे कि प्लेयर को हाइलाइट करने के बाद Inspector में अधिक विकल्प जोड़े गए हैं। ये पब्लिक वेरिएबल्स हैं और हम इन्हें अपनी पसंद के अनुसार समायोजित कर सकते हैं।

अब Hierarchy पर राइट-क्लिक करें और एक नया खाली ऑब्जेक्ट बनाएं, और इसे मेन सीन विंडो में मुख्य पात्र स्प्राइट के नीचे खींचें - इस खाली ऑब्जेक्ट को वहां रखें जहां हम फर्श का पता लगाना चाहते हैं। ऑब्जेक्ट का नाम "Check Ground" रखें, और फिर इसे पहले कैमरे की तरह प्लेयर के गेम ऑब्जेक्ट के नीचे खींचें (ऑब्जेक्ट्स के बीच पैरेंट-चाइल्ड संबंध बनाने के लिए)। अब खाली ऑब्जेक्ट मुख्य पात्र स्प्राइट का अनुसरण करेगा, ठीक कैमरे की तरह, और यह लगातार फर्श की दूरी की जांच करेगा।cam

अब मुख्य पात्र स्प्राइट का चयन करें और Inspector पैनल पर जाएं - Check Ground ऑब्जेक्ट को "groundCheck" नामक स्थान में खींचें। 'ट्रांसफॉर्म' पोजीशन इस नए ऑब्जेक्ट की पोजीशन के बराबर होनी चाहिए, और जहां यह "Radius" कहता है, इसे 0.1 बनाएं।

हमें ग्राउंड लेयर को परिभाषित करने की आवश्यकता है। बस ग्राउंड टेरेन का चयन करें और Inspector में, "Layer: Default" के लिए बटन ढूंढें (यह एक ड्रॉपडाउन बॉक्स है) और "Add Layer" चुनें।

अब हमारे प्लेटफॉर्म के लिए लेयर के रूप में "ground" चुनें, और गेम विंडो में किसी अन्य प्लेटफॉर्म के लिए इसे दोहराएं। जहां यह हमारे मुख्य पात्र स्प्राइट ऑब्जेक्ट पर "What is Ground" कहता है, वहां भी ग्राउंड लेयर चुनें।

हमने प्लेयर स्क्रिप्ट को एक चेक करने का निर्देश दिया है - यदि स्क्रीन पर छोटा बिंदु लेयर से मेल खाने वाली किसी भी चीज़ के साथ ओवरलैप हो रहा है, तो पात्र केवल तभी जंप करेगा जब यह सच हो।

टक्कर पर गेम ओवर और गेम मेनू

तो इसे पूरा करने के लिए, अंतिम चीजें जो हम करना चाहते हैं वे हैं A: बाधाओं के साथ टकराने पर गेम ओवर होना, और B: एक प्ले अगेन बटन के साथ "गेम ओवर" मेनू स्क्रीन बनाना।

आप मूल रूप से यह करना चाहते हैं:

  1. एक Player ऑब्जेक्ट जोड़ें और अपनी पसंद का एक रिजिडबॉडी और एक कोलाइडर असाइन करें।
  2. एक Enemy ऑब्जेक्ट जोड़ें और अपनी पसंद का एक रिजिडबॉडी और एक कोलाइडर असाइन करें। (और वैकल्पिक, इसमें "Enemy" टैग जोड़ें)
  3. एक नया C# स्क्रिप्ट बनाएं और इसे Player के कंपोनेंट के रूप में जोड़ें (या Player से जुड़ी किसी भी स्क्रिप्ट का उपयोग करें, यदि आपके पास पहले से एक है तो नया बनाने की आवश्यकता नहीं है)
  4. अपनी स्क्रिप्ट में यह जोड़ें:
void OnCollisionEnter(Collision coll){ Debug.Log("Collision"); //चेक करें कि क्या यह टक्कर भी रजिस्टर करता है, अगर यह काम करता है तो आप इस लाइन को हटा सकते हैं if(coll.gameobject.tag == "Enemy"){ //देखता है कि जिस ऑब्जेक्ट से आपका प्लेयर टकराया है उसमें "Enemy" नामक टैग है, इसे if(coll.gameobject.name == ... से बदला जा सकता है लेकिन टैग का उपयोग करना एक आसान तरीका है। //अपना कोड यहां जोड़ें, जैसे: Application.LoadLevel("GameOver"); Debug.Log("Working"); //अगर काम कर रहा है, तो आप इस लाइन को हटा सकते हैं। }

उस उदाहरण स्क्रिप्ट के साथ खेलें - कुछ ट्रायल और एरर के साथ, आप इसे ठीक वही करने के लिए प्राप्त करेंगे जो हमें चाहिए।

अब प्ले बटन के साथ GameOver "लेवल" बनाने का तरीका देखने के लिए, Appual's गाइड "How to Create a Basic Unity Platform Game Pt. 2" के अंतिम खंड को देखें।

  1. Android पर अपना Telegram अकाउंट सेट करने की चरण-दर-चरण गाइड Android पर अपना Telegram अकाउंट सेट करने की चरण-दर-चरण गाइड

    Telegram दुनिया भर में 500 मिलियन से अधिक सक्रिय उपयोगकर्ताओं के साथ लोकप्रिय ऑनलाइन इंस्टेंट मैसेजिंग सेवाओं में से एक है। यह WhatsApp, Google Messages, Signal, आदि जैसे अन्य ऑनलाइन मैसेजिंग ऐप्स का एक बढ़िया विकल्प है। हाल के वर्षों में, कई लोगों ने इसकी अधिक मजेदार और उपयोगी सुविधाओं के कारण इस ए

  1. एंड्रॉइड पर किसी भी गेम को हैक कैसे करें एंड्रॉइड पर किसी भी गेम को हैक कैसे करें

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

  1. Learn Math App से बेसिक गणित में महारत हासिल करें: संख्याओं पर विजय पाने का मजेदार, आकर्षक तरीका Learn Math App से बेसिक गणित में महारत हासिल करें: संख्याओं पर विजय पाने का मजेदार, आकर्षक तरीका

    गणित से डरते हैं? हां! मैं भी नंबरों और उनसे आप क्या कर सकते हैं, उससे डरता रहा हूं। लेकिन गणित से दूर रहना समाधान नहीं है और न ही हम इसे अपने बच्चों को सिखा सकते हैं। Systweak द्वारा Learn Math App पेश करते हैं, एक मजेदार ऐप जो आपके बच्चों को गणित में रुचि विकसित करने और कुछ कूल ट्रिक्स सीखने में म