पिछले एपुअल के ट्यूटोरियल में शीर्षक "हाउ टू क्रिएट ए बेसिक यूनिटी प्लेटफॉर्म गेम" (और इसके भाग 2) , हमने एक साधारण HTML5-आधारित ब्राउज़र गेम बनाने के लिए एकता और अंतर्निहित WebGL प्लग-इन का उपयोग किया – इसी तरह के इस ट्यूटोरियल में, हम जानेंगे कि कैसे एक बुनियादी Android . बनाया जाए एकता का उपयोग कर खेल।
आवश्यकताएं:
- एकता
- एक अच्छा टेक्स्ट एडिटर जैसे NotePad++ (वैकल्पिक लेकिन अनुशंसित)
- एंड्रॉइड एसडीके
एकता लॉन्च करें और एक नया प्रोजेक्ट बनाएं। इसे 2डी प्रोजेक्ट बनाएं।
परिचित होने के लिए कई पैनल हैं - पदानुक्रम पैनल जिसमें हमारे सभी दृश्य तत्व शामिल होंगे (दृश्य =जो भी "स्तर" आप वर्तमान में काम कर रहे हैं)। फिर गेम टैब है जिसका उपयोग संपादक के अंदर आपके गेम को खेलने/परीक्षण करने के लिए किया जाता है, और दाईं ओर आपके पास इंस्पेक्टर पैनल है, जहां आप प्रकाश, भौतिकी आदि जैसी विभिन्न चीजों को संपादित करेंगे।
पहली चीज जो हम करना चाहते हैं वह है एक स्प्राइट बनाना - यह हमारा मुख्य चरित्र होगा (जिसे हम नियंत्रित करते हैं)। आप या तो अपना खुद का स्प्राइट बना सकते हैं, जैसे आंखों के साथ एक वर्ग बनाएं, या आप इंटरनेट से स्प्राइट ले सकते हैं - बस सुनिश्चित करें कि यह एक .PNG फ़ाइल (पारदर्शी पृष्ठभूमि) है।
अपने स्प्राइट को मुख्य दृश्य विंडो (सबसे बड़ी विंडो) पर खींचें और छोड़ें - यह बाईं ओर पदानुक्रम पैनल पर भी दिखाई देगा।
इसलिए अब हम कुछ प्लेटफ़ॉर्म बनाएंगे - ये साधारण वर्ग हो सकते हैं, क्योंकि हम दीवारों और अन्य प्लेटफ़ॉर्म बनाने के लिए इनका आसानी से आकार बदल सकेंगे।
तो बस एक नया वर्ग "स्प्राइट" बनाएं और इसे सीन विंडो पर ड्रैग और ड्रॉप करें जैसे आपने अपने स्प्राइट कैरेक्टर के साथ किया था।
अब हमें अपने मुख्य चरित्र को भौतिकी देने के लिए एकता को निर्देश देने की आवश्यकता है - अपने मुख्य स्प्राइट चरित्र पर क्लिक करें (इसे दृश्य विंडो में नीले रंग में हाइलाइट किया जाना चाहिए), फिर इंस्पेक्टर पैनल पर, "गेमऑब्जेक्ट्स" देखें।
"घटक जोड़ें> भौतिकी 2D> RigidBody2D" पर क्लिक करें। यह स्वचालित रूप से आपके स्प्राइट में भौतिकी जोड़ देगा, जिसे अन्यथा आपको किसी अन्य SDK में स्वयं स्क्रिप्ट करना पड़ता।
हम मुख्य स्प्राइट चरित्र को नियंत्रण से बाहर घूमने से रोकना चाहते हैं - इसलिए इंस्पेक्टर पैनल में बाधाएं टैब ढूंढें (मुख्य स्प्राइट अभी भी दृश्य विंडो में हाइलाइट किया गया है), और "फ्रीज रोटेशन जेड" के लिए बॉक्स को चेक करें।पी>
यदि आप "चलाएं" बटन दबाते हैं, तो आपका मुख्य स्प्राइट चरित्र आसमान से गिरना चाहिए और बस अंतहीन रूप से गिरना चाहिए - हम बाद में इसका ध्यान रखेंगे, लेकिन ध्यान दें कि हम भौतिकी को आसानी से कैसे लागू कर पाए। हमने जो भौतिकी लागू की है, वे उस आकार पर निर्भर हैं जिस पर उन्हें लागू किया जा रहा है - इसलिए यदि आप एक ही भौतिकी को एक गोले पर लागू करते हैं, उदाहरण के लिए, यह चारों ओर घूमेगा।
हम चरित्र को घूमने और चारों ओर घूमने से रोकने के लिए अपने अभिविन्यास को भी ठीक करना चाहते हैं। चयनित खिलाड़ी के साथ इंस्पेक्टर में 'बाधाएं' खोजें और रोटेशन Z को फ़्रीज़ करने के लिए बॉक्स पर टिक करें। अब फिर से खेलें पर क्लिक करें और आपको पता चलेगा कि आपका खिलाड़ी अब आसमान से अपने अनंत कयामत की ओर गिर रहा है।
हमारे मुख्य स्प्राइट चरित्र को अंतहीन रूप से गिरने से रोकने के लिए, हमें एक कोलाइडर जोड़ने की आवश्यकता होगी। यह मूल रूप से केवल एक आकृति की ठोस रूपरेखा है जिसे हम मुख्य स्प्राइट चरित्र में जोड़ देंगे। अपने मुख्य स्प्राइट चरित्र को हाइलाइट करें, "घटक जोड़ें> भौतिकी 2D> BoxCollider2D पर क्लिक करें।
अब आपके द्वारा पहले बनाए गए प्लेटफॉर्म के साथ ठीक वैसा ही करें। आपका मुख्य स्प्राइट चरित्र अब मंच से "टकरा" जाना चाहिए और वहीं रहना चाहिए।
तो अब हम यह सुनिश्चित करना चाहते हैं कि कैमरा आपके मुख्य स्प्राइट कैरेक्टर का अनुसरण करेगा - दृश्य के अंदर, पहले से ही एक कैमरा ऑब्जेक्ट होना चाहिए। आप इसे के ऊपर खींचना चाहते हैं मुख्य स्प्राइट चरित्र।
यदि आप एक 3D आधारित धावक . बना रहे हैं तो यह विशेष रूप से महत्वपूर्ण है , स्लोप जैसा कुछ जहां आपको प्राथमिक गेम ऑब्जेक्ट (आपका मुख्य स्प्राइट कैरेक्टर) के पीछे लगातार रहने के लिए कैमरे की आवश्यकता होती है।
अब पदानुक्रम पैनल पर जाएं और GameObjects की सूची में, आप कैमरे को नीचे खींचना चाहते हैं मुख्य स्प्राइट कैरेक्टर (प्लेयर गेमऑब्जेक्ट)। यह मुख्य स्प्राइट चरित्र को 'अभिभावक' . बना देगा कैमरे का। इसलिए जब भी प्लेयर गेमऑब्जेक्ट स्क्रीन के चारों ओर घूमता है, कैमरा को उसका अनुसरण करना चाहिए।
तो इस गेम ट्यूटोरियल के लिए, हम बस एक बुनियादी अंतहीन रनर टाइप गेम बनाने जा रहे हैं, रन 3 जैसा कुछ, जहां आपका मुख्य पात्र स्क्रीन पर दौड़ेगा और बाधाओं को चकमा देगा (या "गेम ओवर" यदि आप एक बाधा को मारते हैं"। इसमें कुछ लिपियों की आवश्यकता होगी, जिनमें से अधिकांश इस गाइड में उपलब्ध कराई जाएंगी।
"एसेट्स" फ़ोल्डर पर राइट क्लिक करें और एक नया फ़ोल्डर बनाएं - इसे नाम दें स्क्रिप्ट . अब इस नए फोल्डर पर राइट क्लिक करें और "क्रिएट> सी# स्क्रिप्ट" को हिट करें और इसे PlayerControls नाम दें। . यह स्क्रिप्ट हमारे मुख्य स्प्राइट चरित्र के व्यवहार को परिभाषित करने वाली है।
जब आप इस नई स्क्रिप्ट पर डबल क्लिक करते हैं, तो यह चाहिए विजुअल स्टूडियो में खोलें - वैकल्पिक रूप से (और मेरी व्यक्तिगत प्राथमिकता), आप इसे नोटपैड ++ जैसी किसी चीज़ में संपादित कर सकते हैं।
स्क्रिप्ट फ़ाइल में पहले से ही इसके अंदर "बॉयलर प्लेट" कोड होना चाहिए - मूल रूप से यह स्क्रिप्ट है जिसे अकेला छोड़ दिया जाना चाहिए या बस आपकी आवश्यकताओं के लिए समायोजित किया जाना चाहिए, और यह हमें बहुत समय बचाएगा। इसलिए हम एक नई वस्तु जोड़ने जा रहे हैं।
लाइन के ऊपर शून्य प्रारंभ ():
सार्वजनिक Rigidbody2D आरबी;
अगला बिट कोड जिसे हमें जोड़ने की आवश्यकता है वह स्टार्ट () के भीतर जाएगा, और इसका उपयोग कठोर शरीर को खोजने के लिए किया जाता है - मूल रूप से, हम एकता को उस भौतिकी का पता लगाने का निर्देश दे रहे हैं जिसे हमने गेमऑब्जेक्ट्स (हमारा मुख्य स्प्राइट कैरेक्टर) से जोड़ा है, और स्टार्ट () एक नई वस्तु या स्क्रिप्ट बनने पर निष्पादित होने जा रहा है।
तो आगे, भौतिकी वस्तु का पता लगाएं।
rb = GetComponent<Rigidbody2D>();
और आप इस लाइन को Update()
. के अंदर जोड़ देंगेrb.velocity = new Vector2(3, rb.velocity.y);
जो अपडेट() करता है वह लगातार रीफ्रेश होता है, इसलिए वहां जोड़ा गया कोई भी कोड लगातार चलता रहेगा (जब तक कि ऑब्जेक्ट नष्ट न हो जाए)। तो हमने जो किया है वह स्क्रिप्ट को निर्देश देता है कि हम चाहते हैं कि कठोर व्यक्ति के पास Y अक्ष (rb.velocity.y) पर समान गति का उपयोग करके एक नया वेक्टर हो, लेकिन क्षैतिज अक्ष पर 3 की गति के साथ। भविष्य में, आप 'FixedUpdate()' . का भी उपयोग कर सकते हैं जो समान है लेकिन अलग है, क्योंकि वहां आप स्क्रिप्ट के अपडेट/रीफ्रेश राशि को नियंत्रित कर सकते हैं।
स्क्रिप्ट को सेव करें और वापस यूनिटी में जाएं, फिर इसे हाइलाइट करने के लिए अपने मुख्य स्प्राइट कैरेक्टर पर क्लिक करें। इंस्पेक्टर पैनल में, ऐड कंपोनेंट> स्क्रिप्ट्स पर जाएं और उस स्क्रिप्ट को जोड़ें जिसे हमने अभी सेव किया है। अब जब आप प्ले बटन पर क्लिक करते हैं, तो मुख्य स्प्राइट कैरेक्टर को लगातार प्लेटफॉर्म किनारे की ओर बढ़ना चाहिए।
खिलाड़ी इनपुट नियंत्रण बनाना
इसलिए क्योंकि यह बाधाओं के साथ एक अंतहीन धावक शैली का खेल है, हमें खिलाड़ी के लिए 'जंप' बटन जैसे नियंत्रण जोड़ने की जरूरत है।
स्क्रिप्ट को पहले से फिर से खोलें, और हम यह अतिरिक्त कोड जोड़ने जा रहे हैं:
if (Input.GetMouseButtonDown(0)) { rb.velocity = new Vector2(rb.velocity.x, 5); }
आप इसे अपडेट() विधि के अंदर रखने जा रहे हैं, और यह मूल रूप से एकता को बताता है कि जब खिलाड़ी अपने माउस बटन पर क्लिक करता है (जिसे एंड्रॉइड पर स्क्रीन टैप के रूप में अनुवादित किया जाएगा), मुख्य स्प्राइट चरित्र "कूद जाएगा" " हवा में। ऐसा इसलिए है क्योंकि हमने Y अक्ष पर 5 के मान के साथ एक वेग जोड़ा है (एक उच्च मान का अर्थ निश्चित रूप से एक ऊंची छलांग होगा)।
यदि आप कोडिंग से बहुत परिचित नहीं हैं, तो हमने यदि . का उपयोग किया है कथन क्योंकि यदि मूल रूप से एक "करो या न करो" प्रकार का निर्देश है - इसका शाब्दिक अर्थ है यदि ऐसा होता है, तो यह आदेश करें . इसलिए यदि खिलाड़ी माउस पर क्लिक नहीं कर रहा है (या अपनी Android स्क्रीन पर टैप कर रहा है) तो जाहिर है कि स्क्रिप्ट नहीं चलेगी।
आगे बढ़ें और "चलाएं" बटन पर क्लिक करें और सुनिश्चित करें कि यह जारी रखने से पहले सही ढंग से काम करता है।
इसके बाद, हम अपनी बाधाओं (जो मुख्य चरित्र स्प्राइट को "नष्ट" कर सकते हैं), एक गेम स्कोर और एक "गेम ओवर" मेनू जोड़ने जा रहे हैं।
यदि आपने अब तक खेल का परीक्षण किया है, तो हमारे पास अब तक की एकमात्र समस्या यह है कि हमारे द्वारा बनाए गए "जंप" बटन को दबाने से चरित्र कूद जाएगा, भले ही वे जमीन पर हों या नहीं - यह मूल रूप से फ्लैपी बर्ड्स है, न कि एक धावक जैसा हम चाहते हैं। लेकिन हम इसे ठीक करने जा रहे हैं।
स्क्रिप्ट में, इस बिट कोड को ऊपर add जोड़ें अपडेट () विधि:
public Transform groundCheck; public Transform startPosition; public float groundCheckRadius; public LayerMask whatIsGround; private bool onGround; And then add this next line to the Update method above the if statement: onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround); And next you will change this following line to include “&& onGround” if (Input.GetMouseButtonDown(0) && onGround) { So our entire script should basically look like this: 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); } } }
हमने जो किया है उसे समझाने के लिए, हमने एक नया "ट्रांसफॉर्म" बनाया है, जिसका अर्थ है खेल की दुनिया में एक स्थान। हमने इसकी त्रिज्या निर्धारित की है और हम एकता को यह जांचने का निर्देश दे रहे हैं कि त्रिज्या हमारी "जमीन" परत के साथ अतिव्यापी है या नहीं - और इसलिए यदि हमारा त्रिज्या "जमीन" के साथ समन्वयित है, तो हमारा चरित्र कूदने में सक्षम होना चाहिए, और यदि हम 'पहले से ही एक छलांग से हवा में हैं, हमें फिर से कूदने में सक्षम नहीं होना चाहिए। मूल रूप से, जमीन पर सत्य होगा यदि ग्राउंडचेक . नाम का रूपांतरण जमीन की परत के साथ अतिव्यापी है। उम्मीद है कि यह समझ में आता है।
इसलिए स्क्रिप्ट को सेव करें और यूनिटी में वापस जाएं, और आप देखेंगे कि प्लेयर को हाइलाइट करने के बाद इंस्पेक्टर में और विकल्प जोड़े गए हैं। ये सार्वजनिक चर हैं और हम इन्हें अपनी पसंद के अनुसार समायोजित कर सकते हैं।
अब पदानुक्रम पर राइट-क्लिक करें और एक नई खाली वस्तु बनाएं, और इसे खींचें ताकि मुख्य चरित्र के नीचे मुख्य दृश्य विंडो में स्प्राइट हो - इस खाली वस्तु को उस स्थान पर रखें जहां हम चाहते हैं कि फर्श का पता लगाया जाए। ऑब्जेक्ट का नाम बदलकर "चेक ग्राउंड" कर दें, और फिर इसे प्लेयर के गेम ऑब्जेक्ट के नीचे खींचें जैसे हमने पहले कैमरे के साथ किया था (ऑब्जेक्ट्स के बीच माता-पिता-बच्चे संबंध बनाने के लिए)। अब खाली वस्तु कैमरे की तरह मुख्य चरित्र स्प्राइट का अनुसरण करेगी, और यह लगातार फर्श की दूरी की जांच करेगी। कैम
अब मुख्य चरित्र स्प्राइट का चयन करें और इंस्पेक्टर पैनल पर जाएं - चेक ग्राउंड ऑब्जेक्ट को "ग्राउंडचेक" नामक स्थान पर खींचें। 'रूपांतरण' स्थिति इस नई वस्तु की स्थिति के बराबर होनी चाहिए, और जहां यह "त्रिज्या" कहती है, इसे 0.1 बनाएं।
हमें जमीन की परत को परिभाषित करने की जरूरत है। बस जमीनी इलाके का चयन करें और इंस्पेक्टर में, "लेयर:डिफॉल्ट" (यह एक ड्रॉपडाउन बॉक्स है) के लिए बटन ढूंढें और "परत जोड़ें" चुनें।
अब हमारे प्लेटफॉर्म के लिए लेयर के रूप में "ग्राउंड" चुनें, और गेम विंडो में किसी भी अन्य प्लेटफॉर्म के लिए इसे दोहराएं। जहां हमारे मुख्य चरित्र स्प्राइट ऑब्जेक्ट पर "व्हाट्स ग्राउंड" लिखा हो, वहां भी ग्राउंड लेयर चुनें।
हमने जो किया है वह खिलाड़ी स्क्रिप्ट को एक जांच करने का निर्देश देता है - अगर स्क्रीन पर छोटा बिंदु परत से मेल खाने वाली किसी भी चीज़ के साथ ओवरलैप कर रहा है, चरित्र तभी कूदेगा जब यह सच हो।
टकराव और गेम मेनू पर खेल खत्म
तो इसे पूरा करने के लिए, हम जो अंतिम चीजें करना चाहते हैं वे हैं A:बाधाओं से टकराने का परिणाम खेल खत्म हो जाता है, और B:फिर से खेलें बटन के साथ एक "गेम ओवर" मेनू स्क्रीन बनाएं।
आप मूल रूप से क्या करना चाहते हैं:
- एक खिलाड़ीजोड़ें ऑब्जेक्ट करें और एक कठोर शरीर . असाइन करें और एक टकराव इसके लिए अपनी पसंद का।
- एक दुश्मन जोड़ें ऑब्जेक्ट करें और एक कठोर शरीर . असाइन करें और एक टकराव इसे अपनी पसंद का। (और वैकल्पिक, “दुश्मन” टैग add जोड़ें इसे)
- एक नई C# स्क्रिप्ट बनाएं और इसे एक घटक के रूप में खिलाड़ी . में जोड़ें (या खिलाड़ी से जुड़ी किसी भी स्क्रिप्ट का उपयोग करें, यदि आपके पास पहले से ही एक स्क्रिप्ट है तो नई बनाने की कोई आवश्यकता नहीं है)
- इसे अपनी स्क्रिप्ट में जोड़ें:
void OnCollisionEnter(Collision coll){ Debug.Log("Collision"); //Check to see if it even registers a collision, if it works you can remove this line if(coll.gameobject.tag == "Enemy"){ //sees if the object your player collided with has a tag called "Enemy", this can be replaced with if(coll.gameobject.name == ... but using a tag is an easy way to do it. //Add your code here, like: Application.LoadLevel("GameOver"); Debug.Log("Working"); //if working, you can remove this line. }
उस उदाहरण स्क्रिप्ट के साथ खेलें - कुछ परीक्षण और त्रुटि के साथ, आप इसे ठीक वही कर पाएंगे जो हमें चाहिए।
अब यह देखने के लिए कि Play बटन के साथ GameOver "स्तर" कैसे बनाया जाए, Appual की मार्गदर्शिका का अंतिम भाग देखें "एक बुनियादी एकता प्लेटफ़ॉर्म गेम पीटी कैसे बनाएं। 2"।