Створення системи ближнього бою в Unity

Рукопашний бій в іграх стосується бою на близькій відстані, де гравці використовують зброю або власні тіла, щоб атакувати ворогів. Цей тип бою є вирішальним у багатьох ігрових жанрах, включаючи пригодницькі бойовики, рольові ігри та файтинг. Системи ближнього бою додають геймплею глибини, забезпечуючи гравцям інтуїтивний і захоплюючий досвід, який відрізняється від дистанційного бою. Реалізація системи рукопашного бою в Unity включає сценарії, анімацію та виявлення зіткнень, щоб забезпечити плавну та чутливу механіку бою.

У цій статті ми розповімо вам, як створити базову систему рукопашного бою в Unity, яка підходить для новачків. Ми розглянемо налаштування персонажа гравця, створення анімації атаки ближнього бою, написання сценарію логіки атаки та впровадження виявлення зіткнень для реєстрації влучень.

Важливість ближнього бою в іграх

Рукопашний бій необхідний у певних типах ігор з кількох причин:

  • Захоплюючий ігровий процес: ближній бій може створити напружений і захоплюючий ігровий процес, змушуючи гравців відчувати себе більш пов’язаними з подією.
  • Різноманітність: Додавання рукопашного бою до гри, яка в основному включає дистанційний бій, забезпечує різноманітність і зберігає ігровий процес свіжим і цікавим.
  • Персонаж і світобудова: Рукопашний бій може відображати здібності персонажа та налаштування гри, покращуючи загальний наратив і світобудову.
  • Стратегічна глибина: гравці повинні враховувати розташування, час і вибір зброї, додаючи рівні стратегії до ігрового процесу.

Налаштування персонажа гравця

  1. Створіть новий проект: відкрийте Unity і створіть новий 3D-проект.
  2. Додайте персонажа гравця: імпортуйте або створіть 3D-модель для свого персонажа гравця. За потреби ви можете використовувати безкоштовні ресурси з Unity Asset Store.
  3. Налаштуйте контролер анімації: створіть контролер анімації для керування анімаціями гравця. Імпортуйте необхідні анімації (бездіяльність, ходьба, атака) і налаштуйте стани та переходи анімації.

Створення анімації атаки ближнього бою

  1. Імпорт анімації атаки:
    • Завантажте або створіть анімацію атаки для свого персонажа.
    • Імпортуйте ці анімації в Unity і додайте їх до свого контролера Animator.
  2. Налаштувати анімаційні переходи:
    • Створюйте переходи між станами очікування, ходьби та атаки в контролері Animator.
    • Для керування цими переходами використовуйте такі параметри, як 'isAttacking'.

Створення сценарію логіки атаки

Ми напишемо сценарій на C#, який оброблятиме логіку атаки гравця в ближньому бою, включаючи запуск анімації атаки та виявлення влучень.

  1. Створіть новий сценарій:
    • Клацніть правою кнопкою миші у вікні проекту, виберіть 'Create -> C# Script' і назвіть його 'PlayerCombat'.
  2. Реалізація сценарію:
    • Двічі клацніть сценарій, щоб відкрити його у бажаному редакторі коду (наприклад, 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. Призначення сценарію:
    • Прикріпіть сценарій 'PlayerCombat' до персонажа гравця.
    • Установіть 'Animator', 'Attack Point' та інші поля в інспекторі.

Реалізація ворожої логіки

  1. Створіть ворожий сценарій:
    • Клацніть правою кнопкою миші у вікні проекту, виберіть 'Create -> C# Script' і назвіть його 'Enemy'.
    • Двічі клацніть сценарій, щоб відкрити його у бажаному редакторі коду.
    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. Призначення сценарію:
    • Прикріпіть сценарій 'Enemy' до своїх ворожих об’єктів.

Додавання візуального та звукового відгуку

Покращення досвіду рукопашного бою за допомогою візуального та звукового зворотного зв’язку має вирішальне значення для задоволення гравців. Ось як це зробити:

  1. Додайте хіт-ефекти:
    • Створюйте ефекти частинок, коли атака вражає ворога.
    • Створюйте ці ефекти за допомогою методу 'Attack', коли ворог отримує удар.
  2. Додайте звукові ефекти:
    • Імпортуйте звукові ефекти для атаки та ударів.
    • Використовуйте компонент 'AudioSource', щоб відтворювати ці звуки під час атак і при ударах по ворогам.
    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);
        }
    }

Висновок

Впровадження системи рукопашного бою в Unity може значно покращити ігровий процес, особливо в жанрах, де важливий ближній бій. Дотримуючись цього посібника, ви можете створити базову систему ближнього бою з анімацією, логікою атаки та виявленням зіткнень. Коли ви навчитесь використовувати Unity, ви зможете вдосконалити систему відповідно до своїх потреб.