Membuat Sistem Pertarungan Melee di Unity

Pertarungan jarak dekat dalam game mengacu pada pertarungan jarak dekat di mana pemain menggunakan senjata atau tubuh mereka sendiri untuk menyerang musuh. Jenis pertarungan ini sangat penting dalam banyak genre game, termasuk game aksi-petualangan, permainan peran, dan pertarungan. Sistem jarak dekat menambah kedalaman gameplay, memberikan pemain pengalaman mendalam dan mendalam yang berbeda dari pertarungan jarak jauh. Menerapkan sistem jarak dekat di Unity melibatkan pembuatan skrip, animasi, dan deteksi tabrakan untuk memastikan mekanisme pertarungan yang mulus dan responsif.

Pada artikel ini, kami akan memandu Anda melalui langkah-langkah membuat sistem pertarungan jarak dekat dasar di Unity, cocok untuk pemula. Kami akan membahas pengaturan karakter pemain, membuat animasi serangan jarak dekat, membuat skrip logika serangan, dan menerapkan deteksi tabrakan untuk mencatatkan serangan.

Pentingnya Pertarungan Jarak Dekat dalam Game

Pertarungan jarak dekat sangat penting dalam jenis permainan tertentu karena beberapa alasan:

  • Gameplay Immersive: Pertarungan jarak dekat dapat menciptakan pengalaman gameplay yang intens dan menarik, membuat pemain merasa lebih terhubung dengan aksinya.
  • Variasi: Menambahkan pertarungan jarak dekat ke game yang utamanya menampilkan pertarungan jarak jauh akan memberikan variasi dan menjaga gameplay tetap segar dan menarik.
  • Karakter dan Pembangunan Dunia: Pertarungan jarak dekat dapat mencerminkan kemampuan karakter dan latar permainan, meningkatkan keseluruhan narasi dan pembangunan dunia.
  • Kedalaman Strategis: Pemain harus mempertimbangkan posisi, waktu, dan pilihan senjata, menambahkan lapisan strategi ke gameplay.

Menyiapkan Karakter Pemain

  1. Buat Proyek Baru: Buka Unity dan buat proyek 3D baru.
  2. Tambahkan Karakter Pemain: Impor atau buat model 3D untuk karakter pemain Anda. Anda dapat menggunakan aset gratis dari Unity Asset Store jika diperlukan.
  3. Siapkan Pengontrol Animator: Buat Pengontrol Animator untuk menangani animasi pemain. Impor animasi yang diperlukan (idle, walk, serang) dan atur status animasi dan transisi.

Membuat Animasi Serangan Jarak Dekat

  1. Impor Animasi Serangan:
    • Unduh atau buat animasi serangan untuk karakter Anda.
    • Impor animasi ini ke Unity dan tambahkan ke Pengontrol Animator Anda.
  2. Siapkan Transisi Animasi:
    • Buat transisi antara status idle, walk, dan serangan di Pengontrol Animator.
    • Gunakan parameter seperti 'isAttacking' untuk mengontrol transisi ini.

Membuat Skrip Logika Serangan

Kami akan menulis skrip C# yang menangani logika serangan jarak dekat pemain, termasuk memicu animasi serangan dan mendeteksi serangan.

  1. Buat Skrip Baru:
    • Klik kanan di jendela Proyek, pilih 'Create -> C# Script', dan beri nama 'PlayerCombat'.
  2. Implementasi Skrip:
    • Klik dua kali skrip untuk membukanya di editor kode pilihan Anda (misalnya, 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. Menugaskan Skrip:
    • Lampirkan skrip 'PlayerCombat' ke karakter pemain Anda.
    • Atur 'Animator', 'Attack Point', dan bidang lainnya di Inspektur.

Menerapkan Logika Musuh

  1. Buat Skrip Musuh:
    • Klik kanan di jendela Proyek, pilih 'Create -> C# Script', dan beri nama 'Enemy'.
    • Klik dua kali skrip untuk membukanya di editor kode pilihan Anda.
    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. Menugaskan Skrip:
    • Lampirkan skrip 'Enemy' ke objek musuh Anda.

Menambahkan Umpan Balik Visual dan Audio

Meningkatkan pengalaman pertarungan jarak dekat dengan umpan balik visual dan audio sangat penting untuk kepuasan pemain. Berikut cara melakukannya:

  1. Tambahkan Efek Pukulan:
    • Membuat efek partikel ketika serangan mengenai musuh.
    • Buat instance efek ini dalam metode 'Attack' saat musuh terkena.
  2. Tambahkan Efek Suara:
    • Impor efek suara untuk serangan dan dampak pukulan.
    • Gunakan komponen 'AudioSource' untuk memainkan suara ini selama serangan dan saat musuh terkena serangan.
    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);
        }
    }

Kesimpulan

Menerapkan sistem pertarungan jarak dekat di Unity dapat meningkatkan pengalaman bermain game secara signifikan, terutama dalam genre yang mengutamakan pertarungan jarak dekat. Dengan mengikuti panduan ini, Anda dapat membuat sistem jarak dekat dasar, lengkap dengan animasi, logika serangan, dan deteksi tabrakan. Saat Anda sudah lebih nyaman dengan Unity, Anda dapat menyempurnakan sistem lebih lanjut agar sesuai dengan kebutuhan Anda.