Tạo hệ thống chiến đấu cận chiến trong Unity

Chiến đấu cận chiến trong trò chơi đề cập đến chiến đấu tầm gần trong đó người chơi sử dụng vũ khí hoặc cơ thể của chính mình để tấn công kẻ thù. Kiểu chiến đấu này rất quan trọng trong nhiều thể loại trò chơi, bao gồm trò chơi phiêu lưu hành động, nhập vai và chiến đấu. Hệ thống cận chiến tăng thêm chiều sâu cho lối chơi, mang đến cho người chơi trải nghiệm sống động và chân thực khác với chiến đấu tầm xa. Việc triển khai hệ thống cận chiến trong Unity liên quan đến việc viết kịch bản, hoạt ảnh và phát hiện va chạm để đảm bảo cơ chế chiến đấu mượt mà và nhạy bén.

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn các bước để tạo hệ thống chiến đấu cận chiến cơ bản trong Unity, phù hợp cho người mới bắt đầu. Chúng tôi sẽ đề cập đến việc thiết lập nhân vật người chơi, tạo hoạt ảnh tấn công cận chiến, viết kịch bản logic tấn công và triển khai phát hiện va chạm để đăng ký các lần truy cập.

Tầm quan trọng của cận chiến trong trò chơi

Chiến đấu cận chiến là điều cần thiết trong một số loại trò chơi vì một số lý do:

  • Lối chơi nhập vai: Chiến đấu cận chiến có thể tạo ra trải nghiệm chơi game căng thẳng và hấp dẫn, khiến người chơi cảm thấy gắn kết hơn với hành động.
  • Đa dạng: Việc thêm chiến đấu cận chiến vào một trò chơi chủ yếu có tính năng chiến đấu tầm xa sẽ mang lại sự đa dạng và giữ cho lối chơi luôn mới mẻ và thú vị.
  • Xây dựng nhân vật và thế giới: Chiến đấu cận chiến có thể phản ánh khả năng của nhân vật và bối cảnh của trò chơi, nâng cao cốt truyện tổng thể và xây dựng thế giới.
  • Chiều sâu chiến lược: Người chơi phải xem xét vị trí, thời gian và lựa chọn vũ khí, thêm các lớp chiến lược vào lối chơi.

Thiết lập nhân vật người chơi

  1. Tạo một dự án mới: Mở Unity và tạo một dự án 3D mới.
  2. Thêm Nhân vật người chơi: Nhập hoặc tạo mô hình 3D cho nhân vật người chơi của bạn. Bạn có thể sử dụng nội dung miễn phí từ Unity Asset Store nếu cần.
  3. Thiết lập Bộ điều khiển hoạt hình: Tạo Bộ điều khiển hoạt hình để xử lý hoạt ảnh của người chơi. Nhập các hoạt ảnh cần thiết (nhàn rỗi, đi bộ, tấn công) và thiết lập các trạng thái hoạt ảnh và chuyển tiếp.

Tạo hoạt ảnh tấn công cận chiến

  1. Nhập hoạt ảnh tấn công:
    • Tải xuống hoặc tạo hoạt ảnh tấn công cho nhân vật của bạn.
    • Nhập các hoạt ảnh này vào Unity và thêm chúng vào Bộ điều khiển hoạt hình của bạn.
  2. Thiết lập chuyển tiếp hoạt ảnh:
    • Tạo chuyển tiếp giữa trạng thái không hoạt động, đi bộ và tấn công trong Bộ điều khiển hoạt hình.
    • Sử dụng các tham số như 'isAttacking' để kiểm soát các chuyển đổi này.

Viết kịch bản logic tấn công

Chúng tôi sẽ viết tập lệnh C# xử lý logic tấn công cận chiến của người chơi, bao gồm kích hoạt hoạt ảnh tấn công và phát hiện các đòn đánh.

  1. Tạo một tập lệnh mới:
    • Nhấp chuột phải vào cửa sổ Project, chọn 'Create -> C# Script' và đặt tên là 'PlayerCombat'.
  2. Triển khai tập lệnh:
    • Bấm đúp vào tập lệnh để mở tập lệnh đó trong trình soạn thảo mã ưa thích của bạn (ví dụ: Visual Studio Code).
    using UnityEngine;
    
    public class PlayerCombat : MonoBehaviour
    {
        public Animator animator;
        public Transform attackPoint;
        public float attackRange = 0.5f;
        public LayerMask enemyLayers;
        public int attackDamage = 40;
        public float attackRate = 2f;
        private float nextAttackTime = 0f;
    
        void Update()
        {
            if (Time.time >= nextAttackTime)
            {
                if (Input.GetButtonDown("Fire1"))
                {
                    Attack();
                    nextAttackTime = Time.time + 1f / attackRate;
                }
            }
        }
    
        void Attack()
        {
            animator.SetTrigger("Attack");
    
            // Detect enemies in range of the attack
            Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRange, enemyLayers);
    
            // Damage them
            foreach (Collider enemy in hitEnemies)
            {
                enemy.GetComponent().TakeDamage(attackDamage);
            }
        }
    
        void OnDrawGizmosSelected()
        {
            if (attackPoint == null)
                return;
    
            Gizmos.DrawWireSphere(attackPoint.position, attackRange);
        }
    }
  3. Gán tập lệnh:
    • Đính kèm tập lệnh 'PlayerCombat' vào nhân vật người chơi của bạn.
    • Đặt 'Animator', 'Attack Point' và các trường khác trong Thanh tra.

Thực hiện logic của kẻ thù

  1. Tạo một tập lệnh kẻ thù:
    • Nhấp chuột phải vào cửa sổ Project, chọn 'Create -> C# Script' và đặt tên là 'Enemy'.
    • Bấm đúp vào tập lệnh để mở nó trong trình soạn thảo mã ưa thích của bạn.
    using UnityEngine;
    
    public class Enemy : MonoBehaviour
    {
        public int maxHealth = 100;
        int currentHealth;
    
        void Start()
        {
            currentHealth = maxHealth;
        }
    
        public void TakeDamage(int damage)
        {
            currentHealth -= damage;
    
            if (currentHealth <= 0)
            {
                Die();
            }
        }
    
        void Die()
        {
            // Add death animation or effects
            Destroy(gameObject);
        }
    }
  2. Gán tập lệnh:
    • Đính kèm tập lệnh 'Enemy' vào đối tượng kẻ thù của bạn.

Thêm phản hồi bằng hình ảnh và âm thanh

Nâng cao trải nghiệm chiến đấu cận chiến bằng phản hồi hình ảnh và âm thanh là rất quan trọng để mang lại sự hài lòng cho người chơi. Đây là cách thực hiện:

  1. Thêm hiệu ứng đánh:
    • Tạo hiệu ứng hạt khi tấn công trúng kẻ thù.
    • Tạo ra các hiệu ứng này theo phương pháp 'Attack' khi kẻ địch bị tấn công.
  2. Thêm hiệu ứng âm thanh:
    • Nhập hiệu ứng âm thanh cho đòn tấn công và tác động của đòn đánh.
    • Sử dụng thành phần 'AudioSource' để phát những âm thanh này trong khi tấn công và khi kẻ thù bị tấn công.
    using UnityEngine;
    
    public class PlayerCombat : MonoBehaviour
    {
        public Animator animator;
        public Transform attackPoint;
        public float attackRange = 0.5f;
        public LayerMask enemyLayers;
        public int attackDamage = 40;
        public float attackRate = 2f;
        private float nextAttackTime = 0f;
        public AudioClip attackSound;
        public AudioClip hitSound;
        private AudioSource audioSource;
        public GameObject hitEffect;
    
        void Start()
        {
            audioSource = GetComponent();
        }
    
        void Update()
        {
            if (Time.time >= nextAttackTime)
            {
                if (Input.GetButtonDown("Fire1"))
                {
                    Attack();
                    nextAttackTime = Time.time + 1f / attackRate;
                }
            }
        }
    
        void Attack()
        {
            animator.SetTrigger("Attack");
            audioSource.PlayOneShot(attackSound);
    
            // Detect enemies in range of the attack
            Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRange, enemyLayers);
    
            // Damage them and play hit effect
            foreach (Collider enemy in hitEnemies)
            {
                enemy.GetComponent().TakeDamage(attackDamage);
                audioSource.PlayOneShot(hitSound);
                Instantiate(hitEffect, enemy.transform.position, Quaternion.identity);
            }
        }
    
        void OnDrawGizmosSelected()
        {
            if (attackPoint == null)
                return;
    
            Gizmos.DrawWireSphere(attackPoint.position, attackRange);
        }
    }

Phần kết luận

Việc triển khai hệ thống chiến đấu cận chiến trong Unity có thể nâng cao đáng kể trải nghiệm chơi trò chơi, đặc biệt ở các thể loại mà cận chiến là cần thiết. Bằng cách làm theo hướng dẫn này, bạn có thể tạo một hệ thống cận chiến cơ bản, hoàn chỉnh với hoạt ảnh, logic tấn công và phát hiện va chạm. Khi bạn cảm thấy thoải mái hơn với Unity, bạn có thể tinh chỉnh thêm hệ thống để phù hợp với nhu cầu của mình.