Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Стан Люті
csharp
Пояснення до класу RageState
Клас RageState
— це окремий стан, який керує поведінкою ворога під час входу в режим люті. Цей клас наслідує від класу State
і містить методи для запуску, оновлення та завершення стану люті. Також містить дії для додавання здоров'я та зміни шкоди атаки, коли ворог перебуває у режимі люті.
Опис класу та змінних-членів
Опис класу:
public class RageState : State
Цей клас наслідує від класу State
, тобто повинен реалізовувати абстрактні методи, визначені у State
.
Змінні-члени:
Animator animator;
Керує анімаціями.
System.Action addHealth;
Дія для додавання здоров'я ворогу.
System.Action changingAttackDmg;
Дія для зміни шкоди атаки ворога.
Конструктор
Конструктор ініціалізує RageState
необхідними компонентами: Animator
для анімацій і двома діями для додавання здоров'я та зміни шкоди атаки. Він присвоює ці значення відповідним змінним-членам.
Метод StartState
Цей метод встановлює isStateFinished
у значення false
, активує анімацію люті, встановлюючи булевий параметр "rage" в аніматорі у true
, і викликає changingAttackDmg
для збільшення шкоди ворога.
Метод UpdateState
Цей метод викликається кожного кадру та викликає addHealth
для постійного додавання здоров'я ворогу під час перебування у стані люті.
Метод EndState
Цей метод зупиняє анімацію люті, встановлюючи булевий параметр "rage" в аніматорі у значення false
.
Чому ми зробили саме так
Покращена поведінка ворога;
RageState
покращує поведінку ворога, збільшуючи його шкоду від атак і постійно додаючи здоров'я, що робить ворога складнішим для гравця;
Використання дій (System.Action
) дозволяє гнучко та модульно змінювати атрибути ворога.
Динамічний та захоплюючий ігровий процес:
Завдяки входженню ворога у стан люті, ігровий процес стає більш динамічним і захоплюючим, оскільки гравець має адаптуватися до сильнішого та витривалішого ворога.
Як це працює в контексті
Вхід у стан люті: Коли ворог входить у RageState
, викликається метод StartState
, який запускає анімацію люті та збільшує шкоду від атак ворога.
Під час люті: Метод UpdateState
викликається кожного кадру. Він постійно додає здоров'я ворогу, ускладнюючи його поразку для гравця.
Вихід зі стану люті: Коли ворог залишає RageState
, викликається метод EndState
, який зупиняє анімацію люті.
Завдяки такій структурі RageState
ворог може стати значно сильнішим і витривалішим, що створює більший виклик для гравця та покращує загальний ігровий досвід.
Ініціалізація стану люті
csharp
Пояснення
Ініціалізація RageState:
rage = new RageState(animator, (...) => {...}, (...) => {...});
Створює новий екземпляр RageState
з іменем rage
;
Аніматор:
animator
: Передає аніматор для керування анімаціями;
Збільшення здоров'я:
() => { health += 10f * Time.deltaTime; }
Лямбда-функція, яка збільшує здоров'я на 10
одиниць за секунду;
Зміна шкоди атаки:
() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); }
Лямбда-функція, яка змінює шкоду атаки attack1
на 15
, а attack2
— на 25
.
Перехід у стан люті
csharp
rageTransition
— це перехід, який переводить ворога у стан RageState
, коли виконуються певні умови. Цей перехід призначений для того, щоб зробити ворога більш небезпечним, коли його здоров'я опускається нижче певного порогу, і він ще не увійшов у стан люті.
Визначення переходу
Умова:
Перехід перевіряє, чи здоров'я ворога менше або дорівнює 40, і чи ворог ще не увійшов у стан люті (haveRaged
має значення false
).
Якщо обидві умови виконуються, змінна haveRaged
встановлюється у true
, щоб ворог переходив у стан люті лише один раз, і повертається true
для активації переходу.
State Pourcentage:
Перехід використовує new StatePourcentage(rage, 100f)
, щоб вказати, що при виконанні умови ворог перейде у RageState
з імовірністю 100%.
Чому ми зробили саме так
Активація потужної поведінки: rageTransition
дозволяє ворогу ставати сильнішим, коли його здоров'я критично низьке, підвищуючи складність для гравця. Цей перехід гарантує, що ворог входить у стан люті лише один раз, запобігаючи повторним переходам у цей стан.
Динамічний і складний ігровий процес: Введення стану люті при критичному рівні здоров'я робить ігровий процес більш динамічним і складним, змушуючи гравця адаптувати свою стратегію.
Як це працює в контексті
Перевірка здоров'я: Під час гри, коли ворог отримує ушкодження, його здоров'я відстежується. Коли здоров'я ворога знижується до 40 або нижче і він ще не перейшов у стан люті, виконується умова rageTransition
.
Активація стану люті: Після виконання цієї умови, haveRaged
встановлюється у значення true
, і перехід до RageState
відбувається з імовірністю 100%.
Вхід у стан люті: Ініціюється RageState
, що підвищує шкоду від атак ворога та постійно додає здоров'я, роблячи ворога значно складнішим для перемоги.
Дякуємо за ваш відгук!