यूनिटी में तीरंदाजी यांत्रिकी का क्रियान्वयन

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

1. धनुष और बाण की स्थापना

शुरू करने के लिए, हमें एक सरल धनुष और तीर सेटअप की आवश्यकता होगी। आप या तो अपना खुद का मॉडल बना सकते हैं या Unity Asset Store से एसेट डाउनलोड कर सकते हैं। इस ट्यूटोरियल के लिए, हम मान लेंगे कि आपके पास धनुष और तीर के लिए एक 3D मॉडल तैयार है।

2. धनुष और बाण स्क्रिप्ट बनाएँ

हम धनुष को खींचने, निशाना लगाने और चलाने की कार्यक्षमता को संभालने के लिए एक BowAndArrow स्क्रिप्ट बनाएंगे।

using UnityEngine;

public class BowAndArrow : MonoBehaviour
{
    public GameObject arrowPrefab; // Reference to the arrow prefab
    public Transform bowString; // Reference to the bowstring for drawing
    public Transform spawnPoint; // Point where the arrow will be spawned
    public float drawSpeed = 2f; // Speed at which the bowstring is drawn
    public float maxDrawDistance = 3f; // Maximum draw distance for the bowstring
    public float arrowForce = 50f; // Force applied to the arrow when shot

    private float drawDistance = 0f; // Current draw distance of the bowstring

    void Update()
    {
        // Draw the bowstring when holding the fire button
        if (Input.GetButton("Fire1"))
        {
            DrawBow();
        }

        // Shoot the arrow when the fire button is released
        if (Input.GetButtonUp("Fire1") && drawDistance > 0f)
        {
            ShootArrow();
        }
    }

    void DrawBow()
    {
        // Increase the draw distance while holding the fire button
        drawDistance = Mathf.Clamp(drawDistance + drawSpeed * Time.deltaTime, 0, maxDrawDistance);
        bowString.localPosition = new Vector3(0, drawDistance, 0);
    }

    void ShootArrow()
    {
        // Instantiate and shoot the arrow
        GameObject arrow = Instantiate(arrowPrefab, spawnPoint.position, spawnPoint.rotation);
        Rigidbody arrowRb = arrow.GetComponent();
        arrowRb.AddForce(spawnPoint.forward * arrowForce * drawDistance, ForceMode.VelocityChange);

        // Reset the bowstring
        drawDistance = 0f;
        bowString.localPosition = Vector3.zero;
    }
}

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

3. एरो प्रीफ़ैब बनाएँ

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

  1. दृश्य में एक नया गेमऑब्जेक्ट बनाएं, फिर तीर का एक 3D मॉडल जोड़ें (या तो आपका अपना मॉडल या Unity एसेट स्टोर से एक एसेट)।
  2. भौतिकी-आधारित गति के लिए तीर में एक रिगिडबॉडी घटक जोड़ें।
  3. अन्य ऑब्जेक्ट्स के साथ टकराव को संभालने के लिए एक कोलाइडर घटक (जैसे BoxCollider या CapsuleCollider) जोड़ें।
  4. इस गेमऑब्जेक्ट को प्रोजेक्ट विंडो में खींचकर प्रीफ़ैब बनाएं।

4. धनुष पर निशाना साधते हुए

धनुष को निशाना लगाने के लिए, आप माउस या दाएं अंगूठे (गेमपैड के लिए) का उपयोग करके एक सरल तंत्र लागू कर सकते हैं। इस उदाहरण में, हम खिलाड़ी को माउस का उपयोग करके निशाना लगाने के लिए धनुष को घुमाने की अनुमति देंगे।

using UnityEngine;

public class BowAiming : MonoBehaviour
{
    public float rotationSpeed = 5f; // Speed at which the bow rotates

    void Update()
    {
        // Rotate the bow based on mouse movement
        float horizontal = Input.GetAxis("Mouse X");
        float vertical = Input.GetAxis("Mouse Y");

        transform.Rotate(Vector3.up * horizontal * rotationSpeed);
        transform.Rotate(Vector3.left * vertical * rotationSpeed);
    }
}

BowAiming स्क्रिप्ट माउस की X और Y हरकतों के आधार पर धनुष को घुमाती है। इससे खिलाड़ी धनुष को किसी भी दिशा में निशाना लगा सकता है। आप धनुष की हरकत को माउस इनपुट के प्रति कम या ज़्यादा संवेदनशील बनाने के लिए rotationSpeed को एडजस्ट कर सकते हैं।

5. तीर की उड़ान और टक्कर जोड़ना

तीर की उड़ान को रिगिडबॉडी घटक द्वारा नियंत्रित किया जाता है, जो तीर चलाने पर बल लगाता है। तीर को अधिक यथार्थवादी बनाने के लिए, आप टकरावों और ट्रिगर घटनाओं का पता लगाने के लिए Arrow स्क्रिप्ट जोड़ सकते हैं, जैसे कि दुश्मनों को नुकसान पहुँचाना या सतहों पर चिपकना।

using UnityEngine;

public class Arrow : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        // Check for collision with an enemy or other object
        if (collision.gameObject.CompareTag("Enemy"))
        {
            // Handle damage or effects here
            Debug.Log("Arrow hit the enemy!");
            Destroy(gameObject); // Destroy the arrow on impact
        }
        else
        {
            // Destroy arrow if it hits something else
            Destroy(gameObject, 2f); // Arrow disappears after 2 seconds
        }
    }
}

Arrow स्क्रिप्ट अन्य वस्तुओं के साथ टकराव का पता लगाती है। यदि तीर किसी दुश्मन को मारता है, तो आप नुकसान या अन्य प्रभाव ट्रिगर कर सकते हैं। अभी के लिए, यह केवल एक संदेश लॉग करता है और तीर को नष्ट कर देता है। आप इस स्क्रिप्ट को नुकसान पहुँचाने, विशेष प्रभाव बनाने या तीर को वस्तुओं से चिपकाने के लिए विस्तारित कर सकते हैं।

6. ड्रा स्ट्रेंथ के लिए UI का क्रियान्वयन

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

  1. दृश्य में एक UI स्लाइडर बनाएँ.
  2. स्लाइडर के मान को BowAndArrow स्क्रिप्ट में drawDistance से लिंक करें।
using UnityEngine;
using UnityEngine.UI;

public class BowAndArrow : MonoBehaviour
{
    public Slider drawStrengthSlider; // Reference to the UI slider

    void Update()
    {
        if (Input.GetButton("Fire1"))
        {
            DrawBow();
            drawStrengthSlider.value = drawDistance / maxDrawDistance; // Update the slider
        }

        if (Input.GetButtonUp("Fire1") && drawDistance > 0f)
        {
            ShootArrow();
            drawStrengthSlider.value = 0f; // Reset the slider after shooting
        }
    }
}

यह दृश्य रूप से प्रदर्शित करेगा कि खिलाड़ी ने drawDistance के आधार पर स्लाइडर के मान को अपडेट करके धनुष को कितना खींचा है।

7. परीक्षण और फाइन-ट्यूनिंग

अब, गेम खेलें और धनुष और बाण यांत्रिकी का परीक्षण करें। निम्नलिखित सुनिश्चित करें:

  • धनुष की डोरी आसानी से खींची जाती है और गोली चलाने के बाद पुनः स्थापित हो जाती है।
  • तीर सही दिशा में चलता है और टकरावों पर प्रतिक्रिया करता है।
  • लक्ष्य निर्धारण प्रणाली अपेक्षा के अनुरूप काम करती है और प्रतिक्रियाशील है।

आप अपने इच्छित गेमप्ले अनुभव से मेल खाने के लिए drawSpeed, arrowForce, और rotationSpeed जैसे मानों को ठीक कर सकते हैं।

निष्कर्ष

हमने Unity में एक सरल लेकिन प्रभावी तीरंदाजी प्रणाली लागू की, जिसमें धनुष, तीर यांत्रिकी, निशाना लगाना और शूटिंग शामिल है। हमने ड्रॉ ताकत दिखाने के लिए एक UI तत्व भी शामिल किया। इस प्रणाली को अधिक जटिल तीरंदाजी अनुभव के लिए तीर के प्रकार, दुश्मन की प्रतिक्रिया और विशेष प्रभावों जैसी अतिरिक्त सुविधाओं के साथ विस्तारित किया जा सकता है।

लिंक
Unity 6