Opprette et nærkampsystem i Unity

Nærkamp i spill refererer til nærkamp der spillere bruker våpen eller sin egen kropp for å angripe fiender. Denne typen kamp er avgjørende i mange spillsjangre, inkludert action-eventyr, rollespill og kampspill. Nærkampsystemer gir dybde til spillingen, og gir spillerne en visceral og oppslukende opplevelse som skiller seg fra kamper med avstand. Implementering av et nærkampsystem i Unity involverer skripting, animasjon og kollisjonsdeteksjon for å sikre jevn og responsiv kampmekanikk.

I denne artikkelen vil vi guide deg gjennom trinnene for å lage et grunnleggende nærkampsystem i Unity, egnet for nybegynnere. Vi vil dekke å sette opp spillerkarakteren, lage nærkampangrepsanimasjoner, skripting av angrepslogikken og implementere kollisjonsdeteksjon for å registrere treff.

Viktigheten av nærkamp i spill

Nærkamp er viktig i visse typer spill av flere grunner:

  • Oppslukende gameplay: Nærkamp kan skape intense og engasjerende spillopplevelser, noe som får spillere til å føle seg mer knyttet til handlingen.
  • Variety: Å legge til nærkamp til et spill som primært har avstandskamp gir variasjon og holder spillingen frisk og interessant.
  • Character and World Building: Nærkamper kan gjenspeile karakterens evner og spillets setting, og forbedre den generelle fortellingen og verdensbyggingen.
  • Strategisk dybde: Spillere må vurdere posisjonering, timing og våpenvalg, og legge til lag med strategi til spillingen.

Sette opp spillerkarakteren

  1. Opprett et nytt prosjekt: Åpne Unity og lag et nytt 3D-prosjekt.
  2. Legg til en spillerkarakter: Importer eller lag en 3D-modell for spillerkarakteren din. Du kan bruke gratis eiendeler fra Unity Asset Store om nødvendig.
  3. Sett opp Animator Controller: Lag en Animator Controller for å håndtere spillerens animasjoner. Importer de nødvendige animasjonene (tomgang, gå, angrep) og sett opp animasjonstilstandene og overgangene.

Lage nærkampangrepsanimasjoner

  1. Importer angrepsanimasjoner:
    • Last ned eller lag angrepsanimasjoner for karakteren din.
    • Importer disse animasjonene til Unity og legg dem til animatorkontrolleren.
  2. Sett opp animasjonsoverganger:
    • Lag overganger mellom tomgangs-, gang- og angrepstilstander i Animator-kontrolleren.
    • Bruk parametere som 'isAttacking' for å kontrollere disse overgangene.

Skriver angrepslogikken

Vi vil skrive et C#-skript som håndterer spillerens nærkampangrepslogikk, inkludert å utløse angrepsanimasjonen og oppdage treff.

  1. Lag et nytt skript:
    • Høyreklikk i prosjektvinduet, velg 'Create -> C# Script', og gi det navnet 'PlayerCombat'.
  2. Skriptimplementering:
    • Dobbeltklikk på skriptet for å åpne det i din foretrukne kodeeditor (f.eks. 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. Tilordne skriptet:
    • Fest 'PlayerCombat'-skriptet til spillerkarakteren din.
    • Still inn 'Animator', 'Attack Point' og andre felt i Inspektøren.

Implementering av fiendtlig logikk

  1. Lag et fiendeskript:
    • Høyreklikk i prosjektvinduet, velg 'Create -> C# Script', og gi det navnet 'Enemy'.
    • Dobbeltklikk på skriptet for å åpne det i ditt foretrukne koderedigeringsprogram.
    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. Tilordne skriptet:
    • Fest 'Enemy'-skriptet til fiendens objekter.

Legge til visuell og lydtilbakemelding

Å forbedre nærkampopplevelsen med visuell og lydtilbakemelding er avgjørende for spillernes tilfredshet. Slik gjør du det:

  1. Legg til treffeffekter:
    • Lag partikkeleffekter for når et angrep treffer en fiende.
    • Instantier disse effektene i 'Attack'-metoden når en fiende blir truffet.
  2. Legg til lydeffekter:
    • Importer lydeffekter for angrep og treff.
    • Bruk 'AudioSource'-komponenten til å spille disse lydene under angrep og når fiender blir truffet.
    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);
        }
    }

Konklusjon

Implementering av et nærkampsystem i Unity kan forbedre spillopplevelsen betraktelig, spesielt i sjangre der nærkamp er avgjørende. Ved å følge denne veiledningen kan du lage et grunnleggende nærkampsystem, komplett med animasjoner, angrepslogikk og kollisjonsdeteksjon. Etter hvert som du blir mer komfortabel med Unity, kan du avgrense systemet ytterligere for å passe dine behov.