Учебное пособие по 2D-атакам в ближнем бою для Unity
Unity Engine предоставляет обширную платформу для создания как 2D, так и 3D-игр. Одним из основополагающих элементов во многих экшн-играх является атака в ближнем бою. В 2D-среде такая атака часто состоит из того, что персонаж размахивает оружием или наносит удар, и ее можно выполнить с помощью комбинации анимации Unity, физики и инструментов сценариев.
Предварительные условия
- Unity Двигатель установлен и настроен.
- Базовое знакомство с интерфейсом Unity и 2D-пространством.
1. Настройка проекта и сцены
- Создайте новый 2D-проект Unity (если еще этого не сделали).
- Импортируйте или создайте спрайт персонажа. Поместите его в сцену.
2. Настройка анимации атаки ближнего боя
- В окне проекта щелкните правой кнопкой мыши и создайте "Animator Controller". Назовите его "CharacterAnimator".
- Назначьте этот аниматор персонажу, выбрав персонажа и перетащив аниматор на компонент "Animator".
- Откройте окно «Анимация». Выбрав персонажа, создайте новую анимацию с именем "MeleeAttack".
- Для простоты предположим, что эта атака представляет собой быстрый удар. Анимируйте спрайт, чтобы имитировать это действие.
3. Создание хитбокса атаки
- Добавьте пустой GameObject в качестве дочернего элемента персонажа. Это будет хитбокс для атаки.
- Прикрепите и "Box Collider 2D" к пустому GameObject. Отрегулируйте его размер и положение так, чтобы оно соответствовало месту удара персонажа во время удара.
- Деактивируйте хитбокс, сняв флажок "Active". Это гарантирует, что он активируется только во время анимации атаки.
4. Сценарий логики атаки
- Создайте новый скрипт, назовите его "MeleeAttack" и вставьте в него приведенный ниже код:
'MeleeAttack.cs'
using UnityEngine;
public class MeleeAttack : MonoBehaviour
{
private Animator animator;
private BoxCollider2D hitbox;
private void Start()
{
animator = GetComponent<Animator>();
hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
{
animator.SetTrigger("MeleeAttack");
Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
}
}
void ActivateHitbox()
{
hitbox.gameObject.SetActive(true);
}
void DeactivateHitbox()
{
hitbox.gameObject.SetActive(false);
}
}
- Прикрепите скрипт "MeleeAttack" к главному персонажу.
- Настройте время активации и деактивации хитбокса на основе animation.
- Назначьте коллайдер хитбокса Hitbox переменная.
5. Обработка столкновений
- Измените теги игровых объектов противника на "Enemy".
- Создайте новый скрипт, назовите его "Hitbox" и вставьте в него приведенный ниже код:
'Hitbox.cs'
using UnityEngine;
public class Hitbox : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Enemy"))
{
// Damage or destroy the enemy.
Destroy(collision.gameObject);
}
}
}
- Прикрепите скрипт "Hitbox" к объекту хитбокса.
Вопросы для решения:
- Как хитбокс узнает, когда активироваться во время анимации?: хитбокс активируется функцией 'Invoke' в скрипте 'MeleeAttack.cs'. Время можно отрегулировать в зависимости от кадра, в котором должна произойти атака.
- Что произойдет, если хитбокс столкнется с несколькими врагами одновременно? : Используя предоставленный скрипт 'Hitbox', каждый враг с тегом "Enemy", который сталкивается с хитбоксом, будет уничтожен. Настройте сценарий для управления уроном или другими эффектами.
- Можно ли изменить кнопку атаки с помощью клавиши «Пробел»? : Да, в сценарии 'MeleeAttack.cs' строка if ('Input.GetKeyDown(KeyCode.Space)') проверяет нажатие клавиши «Пробел».. Замените 'KeyCode.Space' на другое значение 'KeyCode', чтобы изменить кнопку атаки.
Заключение
В этом руководстве представлены базовые принципы реализации 2D-атаки в ближнем бою в Unity. Такие улучшения, как добавление звуковых эффектов, визуальная обратная связь и уточнение логики обнаружения попаданий, могут еще больше улучшить впечатления от атак в ближнем бою.