Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Відправлення Снаряда
csharp
Клас Projectile
відповідає за керування поведінкою снарядів, які ворог може запускати у гравця. Цей клас налаштовує напрямок і швидкість снаряда, оновлює його рух і обробляє зіткнення.
Метод Setup
csharp
Призначення: Цей метод встановлює початковий стан снаряда.
Параметри: Приймає параметр Vector2 direction
для визначення напрямку руху снаряда.
Дії: Встановлює напрямок снаряда, отримує компонент Rigidbody2D
, прикріплений до снаряда, повертає снаряд у напрямку руху та планує його знищення через 6 секунд, щоб уникнути нескінченного існування.
Метод Update
csharp
Призначення: Оновлює рух снаряда.
Дії: Встановлює швидкість Rigidbody2D
, щоб перемістити снаряд у заданому напрямку з вказаною швидкістю.
Метод OnTriggerEnter2D
csharp
Призначення: Обробляє зіткнення з іншими об'єктами.
Параметри: Приймає параметр Collider2D collision
для виявлення зіткнень.
Дії: Виводить у лог ім'я об'єкта, з яким зіткнувся снаряд, перевіряє, чи снаряд зіткнувся з об'єктом з тегом "Player", і якщо об'єкт має компонент, що реалізує інтерфейс IGetAttacked
, викликає метод GetAttacked
для нанесення шкоди. Після влучання у гравця снаряд знищується.
Чому реалізовано саме так
Модульність і повторне використання: Клас Projectile
розроблений як модульний і придатний до повторного використання для будь-якого типу снарядів, які може використовувати ворог. Завдяки встановленню напрямку та швидкості можна створювати різні снаряди з різною поведінкою.
Ефективне керування рухом: Використання компонента Rigidbody2D
для руху забезпечує відповідність снаряда фізичній системі Unity, що дає плавний і реалістичний рух.
Виявлення зіткнень і обробка шкоди: Метод OnTriggerEnter2D
дозволяє снаряду виявляти зіткнення з гравцем і коректно завдавати шкоди, забезпечуючи ефективну взаємодію між снарядом і гравцем.
Клас SendProjectileState
csharp
Клас SendProjectileState
— це окремий стан, який відповідає за поведінку ворога під час запуску снаряда. Цей клас наслідується від класу State
та містить методи для початку, завершення та ініціалізації дії атаки снарядом.
Конструктор
Конструктор ініціалізує SendProjectileState
за допомогою Animator
для анімацій та дії для запуску снаряда. Він присвоює ці значення відповідним змінним-членам.
Метод StartState
Цей метод встановлює isStateFinished
у значення false
та запускає анімацію снаряда, встановлюючи булевий параметр "projectil" в аніматорі у true
.
Метод StartAction
Цей метод викликає sendProjectileFunc
, яка виконує дію, визначену для запуску снаряда. Зазвичай цей метод викликається подією аніматора для синхронізації запуску снаряда з анімацією.
Метод EndState
Цей метод зупиняє анімацію снаряда, встановлюючи булевий параметр "projectil" в аніматорі у false
.
Чому ми зробили саме так
Модульність і повторне використання:
Клас SendProjectileState
розроблений як модульний, що дозволяє гнучко інтегрувати різні поведінки запуску снарядів за допомогою System.Action
.
Інтеграція з анімацією: Використовуючи параметри аніматора, стан забезпечує синхронізацію запуску снаряда з відповідною анімацією, що створює плавний і реалістичний досвід.
Функція запуску снаряда
csharp
Метод SendProjectile
відповідає за створення та запуск снаряда у напрямку до гравця. Цей метод обчислює напрямок від ворога до гравця, створює снаряд і налаштовує його рух у розрахованому напрямку.
Визначення методу та компоненти
Визначення методу:
void SendProjectile()
: Цей метод не повертає значення та призначений для запуску снаряда.
Компоненти:
Vector2 direction = (player.position - transform.position).normalized;
Цей рядок обчислює напрямок від ворога до гравця шляхом віднімання позиції ворога від позиції гравця. Частина .normalized
гарантує, що вектор напрямку має довжину 1, тобто є одиничним вектором, який лише вказує напрямок.
Instantiate(projectile, projectileSendingPosition.position, Quaternion.identity).Setup(direction);
Цей рядок створює новий екземпляр снаряда у вказаній позиції (projectileSendingPosition.position
) без обертання (Quaternion.identity
). Метод Setup
викликається для створеного снаряда, щоб задати його напрямок.
Зв'язок з Unity Animator
Ми викликаємо функцію StartAction
за допомогою подій аніматора. Це дозволяє нам вказати точний кадр у анімації ворога, на якому має бути відправлений снаряд. Оскільки анімація складається з багатьох кадрів, важливо визначити точний момент для цієї дії.
Дякуємо за ваш відгук!