Unity3D में भौतिकी-आधारित कैरेक्टर कंट्रोलर को कोड कैसे करें

Unity3D में भौतिकी-आधारित कैरेक्टर कंट्रोलर को कोड कैसे करें
आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं। अधिक पढ़ें।

एक चरित्र नियंत्रक आपके खेल में सरल आंदोलन भौतिकी को लागू करने में आपकी सहायता कर सकता है।





आप कई कोणों से Unity3D चरित्र नियंत्रकों से संपर्क कर सकते हैं। यदि आप शक्तिशाली कक्षाओं और कार्यों के साथ एक पुस्तकालय का उपयोग करते हैं, तो भौतिकी-आधारित चरित्र नियंत्रक बनाना आपके खेल के विकास को शुरू करने के लिए एक मजेदार जगह हो सकती है।





चरण 1: प्लेयर और टेरेन ऑब्जेक्ट्स के साथ एक दृश्य बनाएं

  एकता चरित्र नियंत्रक 3 डी अंतरिक्ष

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





इलाके के लिए एक 3डी विमान वस्तु

आपके दृश्य में जोड़ने वाली पहली वस्तु एक विमान है। पदानुक्रम फलक के अंदर राइट-क्लिक करें, होवर करें 3डी वस्तु , और चुनें विमान सूची से। आप एक बड़ा परीक्षण क्षेत्र प्रदान करने के लिए विमान के आकार को समायोजित कर सकते हैं, लेकिन इसके लिए आपको कुछ और करने की आवश्यकता नहीं है।

क्यूब ऑब्जेक्ट प्लेयर मॉडल

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



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

आप पा सकते हैं मुफ्त एकता संपत्ति ऑनलाइन अपने प्रोजेक्ट को विकसित करने के लिए।





आपके कंप्यूटर से एक या अधिक प्रोटोकॉल गायब हैं

एक तीसरे व्यक्ति का कैमरा

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

एक त्वरित परीक्षण

जबकि आपके दृश्य में अभी तक कोई कोड नहीं है, आप अब तक किए गए कार्य का परीक्षण कर सकते हैं। दबाएं खेलें अपने खेल को लोड करने के लिए स्क्रीन के शीर्ष पर बटन। आपको क्यूब को गिरते हुए और प्लेन के ऊपर लैंड करते हुए देखना चाहिए, और क्यूब के गिरते ही कैमरा को उसका पीछा करना चाहिए।





चरण 2: एक सी # फ़ाइल सेट अप करें

अब एक C# फाइल बनाने का समय आ गया है ताकि आप कुछ मूवमेंट की प्रोग्रामिंग शुरू कर सकें। प्रोजेक्ट सेक्शन में जाएं, राइट-क्लिक करें, क्रिएट पर होवर करें और लिस्ट में से फोल्डर चुनें। फोल्डर को नाम दें Scripts या ऐसा ही कुछ।

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

क्या इच्छा से खरीदना सुरक्षित है
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

चरण 3: वेग के साथ आगे और पीछे की गति बनाने के लिए C# का उपयोग करें

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

 public Rigidbody rigidbody; 
public float speed;

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

 void Start() { 
    rigidbody = GetComponent < Rigidbody > ();
}

अब आप कुछ कोड जोड़ सकते हैं जो आपके प्लेयर मॉडल को आगे बढ़ाएंगे। यह कोड अच्छा और सरल है; आपको बस दो if स्टेटमेंट चाहिए, एक फॉरवर्ड मूवमेंट के लिए, और एक बैकवर्ड मूविंग के लिए। आप यह निर्धारित करने के लिए Input.GetKey का उपयोग कर सकते हैं कि कोई कुंजी कब दबाई जा रही है। इस स्थिति में, आप W और S कुंजियों के प्रेस की तलाश कर रहे हैं।

इनमें से किसी भी कुंजी को दबाने से कठोर पिंड का उपयोग करके घन कठोर शरीर में एक बल जुड़ जाता है। AddForce। आप गति चर द्वारा इसकी Z-अक्ष स्थिति (transform.forward) को गुणा करके अतिरिक्त बल की दिशा और गति की गणना कर सकते हैं। बैकवर्ड मोशन के लिए आपके उपयोग के लिए कोई ट्रांसफ़ॉर्म.बैकवर्ड क्लास नहीं है, लेकिन यह ट्रांसफ़ॉर्म.फ़ॉरवर्ड को -1 से गुणा करके प्राप्त किया जा सकता है।

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

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

अब आप गेम लॉन्च करने और अपने कोड का परीक्षण करने के लिए प्ले बटन का उपयोग कर सकते हैं। लेकिन रुकें! वहाँ एक समस्या; आपका क्यूब सीधे आगे बढ़ने के बजाय लुढ़कने वाला है। क्यूब के इंस्पेक्टर के पास वापस जाएं, रिगिडबॉडी कंपोनेंट ढूंढें, और गेम को फिर से लॉन्च करने से पहले X और Z अक्ष पर फ्रीज रोटेशन के लिए बॉक्स को टिक करें। अब यह काम करना चाहिए।

चरण 4: टॉर्क के साथ लेफ्ट और राइट टर्निंग बनाने के लिए C# का उपयोग करें

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

 public float torque;

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

प्रत्येक if कथन में पहला कदम Input.GetAxis विधि का उपयोग करके मोड़ की दिशा निर्धारित करना है और परिणाम को एक फ्लोट चर के लिए निर्दिष्ट करना है। इसके बाद, घन के टॉर्क, टर्न और Z अक्ष को गुणा करके घन चरित्र मॉडल में घूर्णी बल लगाने के लिए रिजिडबॉडी का उपयोग करें। AddTorque।

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

अपना कोड सेव करें और इसका परीक्षण करने के लिए यूनिटी पर वापस जाएं। आप क्यूब का चयन करके और अपनी स्क्रिप्ट में कठोर पिंड के द्रव्यमान, ड्रैग और टॉर्क चर को संपादित करके अपने प्लेयर मॉडल रोटेशन की गति और रैंप-अप समय को समायोजित कर सकते हैं। यह उदाहरण परियोजना 1 द्रव्यमान, 1 ड्रैग और 2 टॉर्क पर आधारित है।

चरण 5: प्रोग्राम जंपिंग के लिए C# का उपयोग करें

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

 private bool isJumping = false;

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

 if (!isJumping) { 
}

दूसरे मूवमेंट if स्टेटमेंट्स में समान स्थिति जोड़ना खिलाड़ी को कूदने के दौरान हिलने से रोकेगा।

 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

इस जंपिंग इफ स्टेटमेंट के भीतर, आपको एक और इफ स्टेटमेंट की जरूरत है, इस बार जंप बटन के कीप्रेस की जांच करने के लिए। isJumping वेरिएबल को ट्रू पर सेट करना इस if स्टेटमेंट में सबसे पहले किया जाने वाला काम है, इसके बाद क्यूब पर वर्तमान में लागू बलों को हटाने के लिए एकrigidbody.angularVelocity डिक्लेरेशन बनाया जाता है।

एक्सबॉक्स वन को अलग कैसे करें

अब आप रिजिडबॉडी का उपयोग कर सकते हैं। AddForce घोषणा घन को उसके Z अक्ष पर बल जोड़ने के लिए, एक छलांग के ऊपर की ओर गति का निर्माण करती है। अंत में, 0.8 सेकंड के बाद एक अलग फ़ंक्शन को कॉल करने के लिए इनवोक घोषणा का उपयोग करने का समय आ गया है।

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

यह फ़ंक्शन isJumping चर को वापस गलत पर सेट करता है ताकि एक बार फिर से गति/कूदना संभव हो, और 0.8 सेकंड की देरी इसे बहुत जल्दी ट्रिगर होने से रोकती है।

 void Move_Setter() { 
    isJumping = false;
}

चरण 6: अपने चरित्र नियंत्रक कोड का परीक्षण करें

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

एकता चरित्र नियंत्रक बनाना

एकता में एक चरित्र नियंत्रक बनाते समय आप कई अलग-अलग दृष्टिकोणों में से चुन सकते हैं। भौतिकी का उपयोग करना एक विकल्प है, लेकिन यदि आप चाहें तो अंतर्निहित चरित्र नियंत्रक प्रणाली का भी उपयोग कर सकते हैं।

इस तरह के विभिन्न विकल्पों की खोज करना यूनिटी जैसे टूल के बारे में जानने का एक शानदार तरीका है।