Unity3d। एकता 3 डी छात्र से सबक (B04-B08)

शुभ दोपहर

आप पिछले पाठ को संबंधित विषय में पा सकते हैं।

अब कोष्ठक (अंत में) में प्रत्येक पोस्ट में पाठ संख्याओं को इंगित किया जाएगा। संख्या की शुरुआत में पत्र अनुभाग (बी-बिगिनर, आई - इंटरमीडिएट) को इंगित करता है।

पुनश्च: यदि आपने पिछले पाठ नहीं लिए हैं, तो मैं उन्हें लेने की सलाह देता हूं, क्योंकि बाद में कभी-कभी उन्हें देखें।




मूल पाठ 04 - वस्तुओं को नष्ट करना




पाठ इस बात का वर्णन करता है कि विनाश कमांड का उपयोग करके वस्तुओं को दृश्य से कैसे हटाया जाए।

एक खाली दृश्य बनाएं और इसमें एक गोला ( GameObject-> Create Other-> Sphere ) और एक क्यूब ( GameObject-> क्रिएट अदर-> क्यूब ) जोड़ें। हम क्यूब को "बॉक्स" कहेंगे। नीचे दिए गए चित्र में दिखाए अनुसार वस्तुओं को रखें।
B0400

एक C # स्क्रिप्ट ( प्रोजेक्ट व्यू-> क्रिएट-> C # स्क्रिप्ट ) जोड़ें और इसे विनाशक नाम दें। जैसा कि पहले ही उल्लेख किया गया है, C # स्क्रिप्ट बनाते समय, Uniti एक फ्रेमवर्क बनाता है जिसमें कनेक्टेड लाइब्रेरी और स्टार्ट () और अपडेट () विधियों के साथ मुख्य वर्ग (स्क्रिप्ट द्वारा प्रयुक्त ) होता है। बेसिक लेसन 02 (इनपुट बेसिक्स) में , अपडेट () पद्धति का उपयोग किया गया था, जिसे हर फ्रेम कहा जाता है। इस मामले में, हम स्टार्ट () विधि का उपयोग करेंगे, जो दृश्य लोड करने के तुरंत बाद चलती है। प्रारंभ () विधि निकाय में नष्ट () फ़ंक्शन जोड़ें और गेमऑब्जेक्ट को इसमें पास करें, यह दर्शाता है कि स्क्रिप्ट को उस वस्तु को नष्ट करना चाहिए जिसमें यह एक घटक है:

//  Start()  ,      Start() { //        Destroy(gameObject); } 


क्षेत्र में एक स्क्रिप्ट जोड़ें। ऐसा करने के कई तरीके हैं। दृश्य में दृश्य पर प्रोजेक्ट दृश्य से स्क्रिप्ट खींचें।
B0401

या पदानुक्रम में किसी वस्तु का नाम।
B0402

आप एक गोले का चयन भी कर सकते हैं और घटक मेनू ( घटक-> लिपियों-> विनाशक ) के माध्यम से एक स्क्रिप्ट जोड़ सकते हैं या केवल चयनित ऑब्जेक्ट के इंस्पेक्टर दृश्य में स्क्रिप्ट को खींचकर।
B0404

गुंजाइश फिर से चुनें और सुनिश्चित करें कि आपकी स्क्रिप्ट घटकों के बीच मौजूद है।
B0403

प्ले पर क्लिक करें और आप देखेंगे कि दृश्य लोड करने के तुरंत बाद, गोला गायब हो जाता है।
B0404_1

आइए अब एक और वस्तु को नष्ट करने की कोशिश करते हैं। ऐसा करने के लिए, हमें गेमऑब्जेक्ट क्लास के स्टैटिक मेथड फाइंड की जरूरत है। निम्नलिखित के साथ प्रारंभ () विधि में कोड बदलें:
 //     Box     –   Destroy(GameObject.Find(“Box”)); 


अनुवाद के लेखक से ध्यान दें : कृपया ध्यान दें कि दूसरे मामले में हम एक स्थैतिक फ़ंक्शन को कॉल करके मान पास करते हैं, इसलिए हम वर्ग नाम ( G ameObject - एक बड़े अक्षर के साथ) लिखते हैं, जबकि पहले हम इस वर्ग के ऑब्जेक्ट को पास करते हैं ( g ameObject - एक छोटे से पत्र)। अन्यथा, संकलक एक त्रुटि फेंक देगा:

error CS0176: Static member `UnityEngine.GameObject.Find(string)' cannot be accessed with an instance reference, qualify it with a type name instead

जो इस प्रकार है:
"UnityEngine.GameObject.Find (स्ट्रिंग) के स्थिर सदस्य को एक उदाहरण (वर्ग) के संदर्भ में एक्सेस नहीं किया जा सकता है, इसके बजाय इसे एक प्रकार के नाम से परिभाषित (कॉल) करें।"

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

क्या होगा यदि हमें वस्तु को तुरंत नष्ट करने की आवश्यकता नहीं है, लेकिन कुछ समय बाद? यह नष्ट फ़ंक्शन के दूसरे पैरामीटर के लिए मान पास करके किया जा सकता है:
 //   Box  3     Destroy(GameObject.Find(“Box”), 3); 


प्ले दबाएं और सुनिश्चित करें कि पूरे दृश्य लोड होने के बाद घन 3 सेकंड गायब हो जाता है।

मूल पाठ से लिंक करें

अतिरिक्त सामग्री:

नष्ट करने के लिए मदद () आधिकारिक Unity3d स्क्रिप्ट संदर्भ से फ़ंक्शन



मूल पाठ 05 - वस्तु निर्माण को लागू करना




सबक बताता है कि प्रीफ़ैब और इंस्टेंटिएट कमांड (तात्कालिकता) का उपयोग करके दृश्य में वस्तुओं को वास्तविक समय (रनटाइम) में कैसे बनाया जाए

यदि आप दृश्य में वस्तुओं को जोड़ना चाहते हैं जब दृश्य पहले से ही भरा हुआ है, तो आपको स्क्रिप्ट का उपयोग करने की आवश्यकता है, या तुरंत () कमांड।

बेस लेसन 03 (प्रीफैब्स) से दृश्य डाउनलोड करें या वही नया बनाएं। हमारे सीन में एक प्रीफैब बाउंसीबॉक्स है।
B0500

प्ले पर क्लिक करें और सुनिश्चित करें कि क्यूब अभी भी गिर रहा है और सतहों से दूर धकेल रहा है।
अब सीन से BouncyBox इंस्टेंस को हटा दें।
B0501

उसके बाद, एक खाली ऑब्जेक्ट (याद रखें, GameObject-> विंडोज पर खाली या Ctrl + Shift + N बनाएँ , Macm पर Cmd + Shift + N )। इसे उसी स्थान पर रखें जहाँ BouncyBox इंस्टेंस हुआ करता था।
B0502_1

C # स्क्रिप्ट बनाएं और इसे Crait कहें। आइए स्क्रिप्ट को संपादित करना शुरू करें। चलो GameObject प्रकार का एक खुला ( सार्वजनिक ) चर प्राप्त करें और इसे Prefab कॉल करें। सार्वजनिक संशोधक को निर्दिष्ट किया जाना चाहिए यदि, उदाहरण के लिए, आप इंस्पेक्टर व्यू के माध्यम से एक चर के मूल्य को पास करना चाहते हैं। उसके बाद, प्रारंभ () फ़ंक्शन के शरीर में, एक और GameObject (नाम का उदाहरण ) बनाएं और इसे स्टैटिक इंस्टैंट () फ़ंक्शन का उपयोग करके मान के साथ प्रारंभ करें

 public GameObject thePrefab; void Start () { GameObject instance = new GameObject(); instance = Instantiate(thePrefab, transform.position, transform.rotation) as GameObject; } 


इंस्टेंटिअट () विधि पर अधिक विस्तार से विचार करें।
 Instantiate(GameObject original, Vector3 position, Quaternion rotation) 

विधि दी गई स्थिति वेक्टर और रोटेशन चतुर्धातुक के साथ मूल वस्तु को क्लोन करती है।
टाइप वेक्टर 3 एक नियमित 3-घटक वेक्टर है ( आर 3 से वेक्टर के समान)।
क्वाटरनियन प्रकार एक चतुर्धातुक है जो किसी वस्तु के रोटेशन को परिभाषित करता है।

स्क्रिप्ट को खाली ऑब्जेक्ट में जोड़ें ( GameObject नाम)। मुझे याद है कि चूंकि Prefab को सार्वजनिक संशोधक के साथ घोषित किया गया है, आप इसका प्रारंभिक मान सीधे इंस्पेक्टर व्यू (संबंधित घटक में, अर्थात् , हमारे मामले में, यह गेमऑबजेक्ट का निर्माता है ) में सेट कर सकते हैं। हमारे प्रीफ़ैब को उस स्थान पर खींचें जहां मूल्य इंगित किया गया है (या दाईं ओर सर्कल पर क्लिक करके सूची से इसे चुनें)।
B0503

Play दबाएं और देखें कि हमारा जंपिंग क्यूब दृश्य पर दिखाई दिया है।
B0504

लेकिन हमारा घन बस ऊपर और नीचे कूदता है, क्योंकि इसमें रोटेशन का प्रारंभिक कोण नहीं होता है। GameObject का चयन करें और इसे एक मामूली कोण पर घुमाएं।

अब, Play पर क्लिक करके, आप देखेंगे कि क्यूब गिरता है और विभिन्न कोणों पर पुनरावृत्त होता है।
B0505

मूल पाठ से लिंक करें

अतिरिक्त सामग्री:

आधिकारिक Unity3d स्क्रिप्ट संदर्भ से तत्काल () फ़ंक्शन का विवरण

आधिकारिक Unity3d स्क्रिप्ट संदर्भ से ट्रांसफॉर्म वर्ग का विवरण



बेसिक लेसन 06 - सिंपल टाइमर




यह पाठ बताता है कि स्क्रिप्ट का उपयोग करते हुए यूनिट में कैसे
Time.deltaTime और प्रकार फ़्लोट के एक चर का उपयोग करके एक साधारण टाइमर बनाएं।


हम पिछले पाठ के दृश्य का उपयोग करेंगे (एक खाली गेम ऑब्जेक्ट के साथ,
प्रीफैब इंस्टेंस उत्पन्न करना, अर्थात बाउंसी बॉक्स )।
B0600

एक C # स्क्रिप्ट बनाएं और इसे टाइमर कहें। चर myTimer जोड़ें, और निम्नलिखित कोड लिखें।

 public float myTimer = 5.0f; void Update() { //Time.delaTime -  (),       (read only) myTimer -= Time.deltaTime; if (myTimer <= 0.0f) { Debug.Log("GAME OVER"); } } 


स्क्रिप्ट को सहेजें और एकता पर वापस जाएं। GameObject में एक स्क्रिप्ट जोड़ें।
B0601

मुझे आपको याद दिलाना है, क्योंकि चूंकि myTimer को सार्वजनिक घोषित किया जाता है , तो इंस्पेक्टर व्यू में आप इसका प्रारंभिक मूल्य बदल सकते हैं।

Play पर क्लिक करें। जैसे ही myTimer का मान शून्य पर गिरता है, स्टेटस बार में आपको लाइन GAME OVER दिखाई देगी। MyTimer वैरिएबल का मान गिरता रहेगा (इसे इंस्पेक्टर व्यू में देखा जा सकता है)।
B0602

यह सुनिश्चित करने के लिए कि myTimer वैरिएबल शून्य से नीचे नहीं आता है, हम अपडेट () फ़ंक्शन में एक और शाखा जोड़ते हैं, जिसके परिणामस्वरूप हमें निम्नलिखित कोड मिलता है:
 void Update () { if(myTimer > 0){ myTimer -= Time.deltaTime; }else if(myTimer <= 0){ Debug.Log("GAME OVER"); } } 


Play पर क्लिक करें और myTimer चर के व्यवहार की निगरानी करें। जब इसका मूल्य शून्य के करीब होगा, तब यह बदलना बंद हो जाएगा।
B0603

मूल पाठ से लिंक करें

अतिरिक्त सामग्री:

आधिकारिक यूनिटी 3 डी स्क्रिप्ट गाइड से Time.deltaTime के बारे में जानकारी



बेसिक लेसन 07 - द बेसिक्स ऑफ मोशन




पाठ का वर्णन करता है कि ट्रांसफॉर्मेट का उपयोग करके ऑब्जेक्ट्स को कैसे स्थानांतरित किया जाए।

घन, कैमरा और प्रकाश स्रोत के साथ एक दृश्य बनाएँ।
B0700

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

 void Update () { transform.Translate(new Vector3(0.0f, 0.0f, 1.0f)); //      Oz } 


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

हमारी स्क्रिप्ट को सहेजें और इसे हमारे घन में जोड़ें। Play पर क्लिक करें और देखें कि क्यूब ओज की धुरी के साथ कैसे उड़ जाता है।

B0701

उदाहरण के लिए, Time.deltaTime द्वारा हमारे वेक्टर को गुणा करके, गति की गति को कम करें:

 transform.Translate(new Vector3(0.0f, 0.0f, 1.0f) * Time.deltaTime); 


प्ले पर क्लिक करें और सुनिश्चित करें कि क्यूब बिल्कुल धीमी गति से चलना शुरू करता है।

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

 public float speed = 5.0f; void Update () { transform.Translate(new Vector3(0.0f, 0.0f, speed) * Time.deltaTime); } 


आइए स्क्रिप्ट को सहेजें और सुनिश्चित करें कि स्पीड चर इंस्पेक्टर व्यू में मूव घटक में दिखाई दिया है।
B0702

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

नोट : वेक्टर 3 अभिव्यक्ति (0.0f, 0.0f, 1.0f) के लिए एक छोटी (लेकिन जाहिर तौर पर थोड़ा धीमा है, अगर सही नहीं है, तो कृपया सही है) वेक्टर 3।forfor प्रविष्टि।

आवरण से कोड का एक टुकड़ा:
 public static Vector3 forward { get { return new Vector3(0.0f, 0.0f, 1.0f); } } 


मूल पाठ से लिंक करें

अतिरिक्त सामग्री:


आधिकारिक Unity3d स्क्रिप्ट संदर्भ से ट्रांस्फ़ॉर्म.ट्रांसलेट विधि पर जानकारी

Time.deltaTime जानकारी आधिकारिक Unity3d स्क्रिप्ट संदर्भ से



बेसिक लेसन 08 - स्ट्रेंथ मूवमेंट की मूल बातें।




पाठ का वर्णन है कि भौतिक शरीर (रिगिडॉडी) को स्थानांतरित करने के लिए बल के आवेदन का उपयोग कैसे करें।

यदि आपके पास मंच पर एक रिगिडोबो घटक के साथ एक ऑब्जेक्ट है, तो आपको बल एप्लिकेशन का उपयोग करके इसके लिए गति निर्धारित करने की आवश्यकता है (इस प्रकार सभी गति गणना भौतिक गेम इंजन में स्थानांतरित कर दी जाती है)। अन्यथा, आप ऑब्जेक्ट की भौतिकी के साथ संघर्ष करना शुरू कर सकते हैं। हम अभी भी बेस 03 से दृश्य का उपयोग कर रहे हैं।

B0800

एक सी # स्क्रिप्ट बनाएं और इसे फोर्स कहें। प्रारंभ () विधि में, हम रिफ़ीडो घटक (हमारी वस्तु से संबद्ध ) के AddForce () विधि को कहते हैं और इसे लागू बल वेक्टर 3 (0.0f, 0.0f, शक्ति) के वेक्टर को पास करते हैं। कक्षा में, हम नाम पॉवर और 500.0f के डिफ़ॉल्ट मान के साथ फ्लोट का एक वैरिएबल बनाएंगे :

 public float power = 500.0f; void Start () { rigidbody.AddForce(new Vector3(0.0f, 0.0f, power)); } 


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

मूल पाठ से लिंक करें

अतिरिक्त सामग्री:


आधिकारिक यूनिटी 3 डी लिपि संदर्भ से रिगीबॉडी श्रेणी की जानकारी

आधिकारिक Unity3d स्क्रिप्ट संदर्भ से AddForce विधि पर जानकारी

पुनश्च: एक अच्छा और उपयोगी सप्ताहांत है

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


All Articles