Атаки Гравця
Gizmos
private void OnDrawGizmos()
{
Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
private void OnDrawGizmos()
: Оголошення методу для зворотного виклику OnDrawGizmos, що означає, що Unity автоматично викликає цей метод під час візуалізації Gizmos у вікні Scene;Gizmos.DrawLine(...)
: Цей код малює лінію за допомогою Gizmos. Приймає дві точки як аргументи для визначення лінії;transform.position
: Поточна позиція GameObject, до якого прикріплено цей скрипт;((Vector2)transform.position + 4f * Vector2.right * localScale.x)
: Обчислює другу точку лінії. Додає до поточної позиції GameObject (transform.position
) вектор, що простягається на 4 одиниці вправо (4f * Vector2.right
).localScale.x
використовується для коригування довжини та напрямку лінії залежно від масштабу GameObject по осі x.
Загалом цей код малює лінію у вікні Scene від поточної позиції GameObject
до точки, що знаходиться на 4 одиниці вправо, з довжиною та напрямком, скоригованими відповідно до масштабу GameObject
по осі x. Ми будемо використовувати це для візуалізації кожної зони атаки гравця.
Скрипт атаки
bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;
private void Start()
{
isAttacking = false;
range = 0f;
}
public void StartAttacking(float attackRange)
{
isAttacking = true;
range = attackRange;
}
public void EndAttacking()
{
isAttacking = false;
range = 0f;
}
private void Update()
{
if (isAttacking)
{
RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
if (rayCastHit)
{
Debug.Log(rayCastHit.transform.name);
isAttacking = false;
}
}
}
Під час ініціалізації атаки викликається функція StartAttacking
, яка приймає дальність атаки як параметр. Оскільки кожна атака має різну дальність, атака починається та встановлюється відповідна дальність.
У функції Update
, коли гравець атакує, створюється RayCast, який починається з позиції гравця, рухається у напрямку, в якому він дивиться, на відстань, що дорівнює дальності атаки, і фільтрує лише enemyLayer
.
Якщо ми влучаємо у ворога, наразі будемо виводити його ім’я для налагодження, але в майбутньому отримаємо його здоров’я та завдамо йому шкоди.
Додатково маємо функцію EndAttacking
, яка завершить нашу атаку.
Події анімації
Додавання подій
У вікні Animation в Unity можна додавати події до анімаційних кліпів на певних кадрах. Клацніть правою кнопкою миші по кривій анімації або ключовому кадру, щоб додати подію анімації та вказати функцію й додаткові параметри.
Визначення функцій
Функції, які викликаються подіями анімації, мають бути публічними. Система Animation Event у Unity підтримує необов'язкові параметри типу float і string, автоматично викликаючи вказані функції під час відтворення анімації для синхронізації анімацій із логікою ігрового процесу та запуску різних дій.
Дякуємо за ваш відгук!