एकता के लिए 2डी कैरेक्टर नियंत्रक

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

Sharp Coder वीडियो प्लेयर

में 2D प्लेटफ़ॉर्मर कैरेक्टर कंट्रोलर बनाने के लिए Unity, नीचे दिए गए चरणों का पालन करें।

नियंत्रक भौतिकी-आधारित होगा और Rigidbody2D घटक का उपयोग करेगा।

कदम

  • अपने 2डी लेवल के साथ दृश्य खोलें (सुनिश्चित करें कि लेवल स्प्राइट में 2डी कोलाइडर जुड़े हुए हैं, ताकि खिलाड़ी गिर न जाए)
  • एक नया गेमऑब्जेक्ट बनाएं और उसे कॉल करें "Player"
  • एक और गेमऑब्जेक्ट बनाएं, इसे कॉल करें "player_sprite" और इसमें स्प्राइट रेंडरर घटक जोड़ें
  • अपने स्प्राइट को असाइन करें "player_sprite" और इसे "Player" ऑब्जेक्ट के अंदर ले जाएं

  • एक नई स्क्रिप्ट बनाएं, उसे नाम दें "CharacterController2D" और उसके अंदर नीचे दिया गया कोड पेस्ट करें:

कैरेक्टरकंट्रोलर2डी.सी.एस

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(CapsuleCollider2D))]

public class CharacterController2D : MonoBehaviour
{
    // Move player in 2D space
    public float maxSpeed = 3.4f;
    public float jumpHeight = 6.5f;
    public float gravityScale = 1.5f;
    public Camera mainCamera;

    bool facingRight = true;
    float moveDirection = 0;
    bool isGrounded = false;
    Vector3 cameraPos;
    Rigidbody2D r2d;
    CapsuleCollider2D mainCollider;
    Transform t;

    // Use this for initialization
    void Start()
    {
        t = transform;
        r2d = GetComponent<Rigidbody2D>();
        mainCollider = GetComponent<CapsuleCollider2D>();
        r2d.freezeRotation = true;
        r2d.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
        r2d.gravityScale = gravityScale;
        facingRight = t.localScale.x > 0;

        if (mainCamera)
        {
            cameraPos = mainCamera.transform.position;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // Movement controls
        if ((Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D)) && (isGrounded || Mathf.Abs(r2d.velocity.x) > 0.01f))
        {
            moveDirection = Input.GetKey(KeyCode.A) ? -1 : 1;
        }
        else
        {
            if (isGrounded || r2d.velocity.magnitude < 0.01f)
            {
                moveDirection = 0;
            }
        }

        // Change facing direction
        if (moveDirection != 0)
        {
            if (moveDirection > 0 && !facingRight)
            {
                facingRight = true;
                t.localScale = new Vector3(Mathf.Abs(t.localScale.x), t.localScale.y, transform.localScale.z);
            }
            if (moveDirection < 0 && facingRight)
            {
                facingRight = false;
                t.localScale = new Vector3(-Mathf.Abs(t.localScale.x), t.localScale.y, t.localScale.z);
            }
        }

        // Jumping
        if (Input.GetKeyDown(KeyCode.W) && isGrounded)
        {
            r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
        }

        // Camera follow
        if (mainCamera)
        {
            mainCamera.transform.position = new Vector3(t.position.x, cameraPos.y, cameraPos.z);
        }
    }

    void FixedUpdate()
    {
        Bounds colliderBounds = mainCollider.bounds;
        float colliderRadius = mainCollider.size.x * 0.4f * Mathf.Abs(transform.localScale.x);
        Vector3 groundCheckPos = colliderBounds.min + new Vector3(colliderBounds.size.x * 0.5f, colliderRadius * 0.9f, 0);
        // Check if player is grounded
        Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCheckPos, colliderRadius);
        //Check if any of the overlapping colliders are not player collider, if so, set isGrounded to true
        isGrounded = false;
        if (colliders.Length > 0)
        {
            for (int i = 0; i < colliders.Length; i++)
            {
                if (colliders[i] != mainCollider)
                {
                    isGrounded = true;
                    break;
                }
            }
        }

        // Apply movement velocity
        r2d.velocity = new Vector2((moveDirection) * maxSpeed, r2d.velocity.y);

        // Simple debug
        Debug.DrawLine(groundCheckPos, groundCheckPos - new Vector3(0, colliderRadius, 0), isGrounded ? Color.green : Color.red);
        Debug.DrawLine(groundCheckPos, groundCheckPos - new Vector3(colliderRadius, 0, 0), isGrounded ? Color.green : Color.red);
    }
}
  • ऑब्जेक्ट में कैरेक्टरकंट्रोलर2डी स्क्रिप्ट संलग्न करें "Player" (आप देखेंगे कि इसमें रिगिडबॉडी2डी और कैप्सूलकोलाइडर2डी नामक अन्य घटक भी जोड़े गए हैं)
  • कैप्सूलकोलाइडर2डी आयामों में तब तक बदलाव करें जब तक वे प्लेयर स्प्राइट से मेल न खा जाएं
  • सुनिश्चित करें कि कोई चाइल्ड कोलाइडर नहीं है और कैप्सूलकोलाइडर2डी इस प्लेयर से जुड़ा एकमात्र कोलाइडर है

कैरेक्टरकंट्रोलर2डी स्क्रिप्ट में मुख्य कैमरा वैरिएबल असाइन करने का एक विकल्प है जो प्लेयर का अनुसरण करने वाला कोई भी कैमरा हो सकता है:

2डी कैरेक्टर कंट्रोलर अब तैयार है!

सुझाए गए लेख
एकता के लिए प्लेयर 3डी और 2डी वॉल जंप ट्यूटोरियल
यूनिटी में 2डी प्लेटफ़ॉर्मर कैरेक्टर कंट्रोलर में डबल जंप सपोर्ट जोड़ना
एकता के लिए हेलीकाप्टर नियंत्रक
एकता के लिए हवाई जहाज नियंत्रक
एकता के लिए संवाद प्रणाली
एकता के लिए टॉर्च ट्यूटोरियल
एकता के लिए 3डी वर्म नियंत्रक ट्यूटोरियल