Crearea unui sistem de luptă corp la corp în Unity

Lupta corp la corp în jocuri se referă la lupte la distanță scurtă în care jucătorii folosesc arme sau propriile lor corpuri pentru a ataca inamicii. Acest tip de luptă este crucial în multe genuri de jocuri, inclusiv în jocurile de acțiune-aventura, jocurile de rol și jocurile de luptă. Sistemele corp la corp adaugă profunzime jocului, oferind jucătorilor o experiență viscerală și captivantă care diferă de lupta la distanță. Implementarea unui sistem corp la corp în Unity implică scripting, animație și detectarea coliziunilor pentru a asigura o mecanică de luptă fluidă și receptivă.

În acest articol, vă vom ghida prin pașii pentru a crea un sistem de luptă corp la corp de bază în Unity, potrivit pentru începători. Vom acoperi configurarea personajului jucătorului, crearea de animații de atac corp la corp, scriptarea logicii atacului și implementarea detectării coliziunilor pentru a înregistra loviturile.

Importanța luptei corp la corp în jocuri

Lupta corp la corp este esențială în anumite tipuri de jocuri din mai multe motive:

  • Gameplay captivant: Lupta la sferturi scurte poate crea experiențe de joc intense și captivante, făcând jucătorii să se simtă mai conectați la acțiune.
  • Varietate: Adăugarea luptei corp la corp la un joc care include în principal luptă la distanță oferă varietate și menține jocul proaspăt și interesant.
  • Construirea personajului și a lumii: Lupta corp la corp poate reflecta abilitățile personajului și decorul jocului, îmbunătățind narațiunea generală și construirea lumii.
  • Adâncime strategică: Jucătorii trebuie să ia în considerare poziționarea, sincronizarea și alegerea armei, adăugând straturi de strategie în joc.

Configurarea personajului jucătorului

  1. Creați un proiect nou: Deschideți Unity și creați un nou proiect 3D.
  2. Adăugați un personaj jucător: importați sau creați un model 3D pentru personajul dvs. de jucător. Puteți folosi active gratuite de la Unity Asset Store dacă este necesar.
  3. Configurați Controlerul Animator: Creați un Controler Animator pentru a gestiona animațiile jucătorului. Importați animațiile necesare (inactiv, mers, atac) și configurați stările și tranzițiile animației.

Crearea de animații de atac la corp

  1. Importați animații de atac:
    • Descărcați sau creați animații de atac pentru personajul dvs.
    • Importați aceste animații în Unity și adăugați-le la Controlerul Animator.
  2. Configurați tranziții de animație:
    • Creați tranziții între stările inactiv, mers pe jos și atac în Controlerul Animator.
    • Utilizați parametri precum 'isAttacking' pentru a controla aceste tranziții.

Scriptarea logicii de atac

Vom scrie un script C# care se ocupă de logica atacului corp la corp a jucătorului, inclusiv declanșarea animației de atac și detectarea loviturilor.

  1. Creați un script nou:
    • Faceți clic dreapta în fereastra Proiect, selectați 'Create -> C# Script' și denumește-l 'PlayerCombat'.
  2. Implementarea scriptului:
    • Faceți dublu clic pe script pentru a-l deschide în editorul de cod preferat (de exemplu, 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. Atribuirea Scriptului:
    • Atașați scriptul 'PlayerCombat' la personajul dvs. de jucător.
    • Setați câmpurile 'Animator', 'Attack Point' și alte câmpuri din Inspector.

Implementarea logicii inamicului

  1. Creați un script inamic:
    • Faceți clic dreapta în fereastra Proiect, selectați 'Create -> C# Script' și denumește-l 'Enemy'.
    • Faceți dublu clic pe script pentru a-l deschide în editorul de cod preferat.
    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. Atribuirea Scriptului:
    • Atașați scriptul 'Enemy' la obiectele inamice.

Adăugarea de feedback vizual și audio

Îmbunătățirea experienței de luptă corp la corp cu feedback vizual și audio este crucială pentru satisfacția jucătorului. Iată cum să o faci:

  1. Adăugați efecte Hit:
    • Creați efecte de particule pentru atunci când un atac lovește un inamic.
    • Instanțiați aceste efecte în metoda 'Attack' când un inamic este lovit.
  2. Adăugați efecte sonore:
    • Importă efecte sonore pentru atac și impact.
    • Utilizați componenta 'AudioSource' pentru a reda aceste sunete în timpul atacurilor și când inamicii sunt loviți.
    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);
        }
    }

Concluzie

Implementarea unui sistem de luptă corp la corp în Unity poate îmbunătăți semnificativ experiența de joc, în special în genurile în care lupta la sferturi scurte este esențială. Urmând acest ghid, puteți crea un sistem de bază corp la corp, complet cu animații, logica de atac și detectarea coliziunilor. Pe măsură ce vă simțiți mai confortabil cu Unity, puteți perfecționa și mai mult sistemul pentru a se potrivi nevoilor dvs.