यूनिटी में उन्नत खिलाड़ी आंदोलन

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

परिदृश्य की स्थापना

कोडिंग में उतरने से पहले, आइए एक प्लेयर ऑब्जेक्ट और एक कैमरा के साथ एक बुनियादी दृश्य सेट करें:

  1. एक नया Unity प्रोजेक्ट बनाएं.
  2. पदानुक्रम में, एक 3D क्यूब बनाएं, इसका नाम बदलकर Player करें, और इसे एक वर्ण जैसा दिखने के लिए स्केल करें (उदाहरण के लिए, X: 1, Y: 2, Z: 1)।
  3. प्लेयर में Rigidbody घटक जोड़ें और सुचारू भौतिकी के लिए Interpolate गुण को Interpolate पर सेट करें।
  4. एक कैप्सूल कोलाइडर घटक जोड़ें, प्लेयर मॉडल से मेल खाने के लिए इसकी ऊंचाई और त्रिज्या समायोजित करें।
  5. एक खाली गेमऑब्जेक्ट बनाएं, इसे CameraRig नाम दें, और इसमें Camera जोड़ें। कैमरे को प्लेयर के पीछे और थोड़ा ऊपर रखें।
  6. CameraRig को प्लेयर ऑब्जेक्ट का चाइल्ड बनाएं ताकि उसकी गतिविधियों का अनुसरण किया जा सके।

उन्नत खिलाड़ी आंदोलन को लागू करना

हम एक स्क्रिप्ट लागू करेंगे जो बुनियादी गति, दौड़ना, झुकना और सुचारू कैमरा रोटेशन को संभालेगी।

प्लेयरमूवमेंट स्क्रिप्ट

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float walkSpeed = 5f;
    public float sprintSpeed = 10f;
    public float crouchSpeed = 2.5f;
    public float jumpForce = 5f;
    public float gravity = 20f;

    public Transform cameraTransform;
    public float lookSensitivity = 2f;
    public float maxLookAngle = 80f;

    private Rigidbody rb;
    private float currentSpeed;
    private bool isCrouching = false;
    private bool isGrounded = false;

    private void Start()
    {
        rb = GetComponent();
        rb.freezeRotation = true; // Prevent the Rigidbody from rotating
    }

    private void Update()
    {
        HandleMovement();
        HandleJumping();
        HandleCrouching();
        HandleCameraRotation();
    }

    private void HandleMovement()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 move = transform.right * moveHorizontal + transform.forward * moveVertical;
        move = move.normalized * currentSpeed * Time.deltaTime;

        Vector3 velocity = rb.velocity;
        velocity.x = move.x;
        velocity.z = move.z;
        rb.velocity = velocity;
    }

    private void HandleJumping()
    {
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);
        }
    }

    private void HandleCrouching()
    {
        if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            isCrouching = !isCrouching;
            currentSpeed = isCrouching ? crouchSpeed : walkSpeed;
            transform.localScale = new Vector3(1, isCrouching ? 0.5f : 1, 1);
        }

        if (Input.GetKey(KeyCode.LeftShift) && !isCrouching)
        {
            currentSpeed = sprintSpeed;
        }
        else if (!isCrouching)
        {
            currentSpeed = walkSpeed;
        }
    }

    private void HandleCameraRotation()
    {
        float mouseX = Input.GetAxis("Mouse X") * lookSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * lookSensitivity;

        Vector3 rotation = cameraTransform.localEulerAngles;
        rotation.y += mouseX;
        rotation.x -= mouseY;
        rotation.x = Mathf.Clamp(rotation.x, -maxLookAngle, maxLookAngle);

        cameraTransform.localEulerAngles = rotation;
    }

    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
        }
    }

    private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = false;
        }
    }
}

मुख्य विशेषताएं और स्पष्टीकरण

गति एवं चालन नियंत्रण

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

जंपिंग

HandleJumping विधि ऊपर की ओर बल लगाती है जब खिलाड़ी जंप बटन (डिफ़ॉल्ट: स्पेस बार) दबाता है, बशर्ते कि खिलाड़ी ग्राउंडेड हो। ग्राउंड डिटेक्शन को "Ground" टैग की गई वस्तुओं के साथ टकराव की जाँच करके नियंत्रित किया जाता है।

कैमरा नियंत्रण

कैमरे के घुमाव को माउस का उपयोग करके नियंत्रित किया जाता है, जो कैमरे की स्थिति के आधार पर प्रथम-व्यक्ति या तृतीय-व्यक्ति परिप्रेक्ष्य प्रदान करता है। अत्यधिक झुकाव को रोकने के लिए लुक एंगल को क्लैंप किया जाता है, जो खिलाड़ियों को भ्रमित कर सकता है।

निष्कर्ष

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

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

लिंक
Unity 6