Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Стан Люті | Поведінка Ворога
Бійцівська гра в Unity
course content

Зміст курсу

Бійцівська гра в Unity

Бійцівська гра в Unity

1. Система анімації Unity
2. Поведінка гравця
3. Поведінка Ворога
4. Покращення гри
5. Покращення гри Flappy Bird

bookСтан Люті

Пояснення класу 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 таким чином, ми забезпечуємо, що ворог може стати значно потужнішим та стійкішим, надаючи гравцю більший виклик та покращуючи загальний ігровий досвід.

Ініціалізація стану люті

Пояснення

Ініціалізація RageState:

rage = new RageState(animator, (...) => {...}, (...) => {...}); Створює новий екземпляр RageState з назвою rage;

Аніматор:

animator: Передає аніматор для керування анімаціями;

Збільшення здоров'я:

() => { health += 10f * Time.deltaTime; } Лямбда-функція, яка збільшує здоров'я на 10 одиниць за секунду;

Зміна шкоди від атаки:

() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); } Лямбда-функція, яка змінює шкоду від атаки attack1 на 15 та attack2 на 25.

Перехід у Лють

rageTransition — це перехід, який переводить ворога в RageState, коли виконуються певні умови. Цей перехід розроблений для того, щоб зробити ворога більш грізним, коли його здоров'я падає нижче певного порогу і він ще не увійшов у стан люті.

Визначення Переходу

Умова:

Перехід перевіряє, чи здоров'я ворога менше або дорівнює 40 і чи ворог ще не увійшов у стан люті (haveRaged є false). Якщо обидві умови виконуються, він встановлює haveRaged у true, щоб забезпечити вхід ворога в стан люті лише один раз, і повертає true, щоб викликати перехід.

Відсоток Стану:

Перехід використовує new StatePourcentage(rage, 100f), щоб вказати, що коли умова виконана, ворог перейде в RageState з ймовірністю 100%.

Чому Ми Зробили Це Так

Виклик Потужної Поведінки: rageTransition дозволяє ворогу стати більш потужним, коли його здоров'я критично низьке, збільшуючи виклик для гравця. Цей перехід забезпечує вхід ворога в стан люті лише один раз, запобігаючи повторним переходам у стан люті.

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

Як Це Працює в Контексті

Перевірка Здоров'я: Під час гри, коли ворог отримує пошкодження, його здоров'я контролюється. Коли здоров'я ворога падає до 40 або нижче і він ще не увійшов у стан люті, умова rageTransition виконується.

Виклик Стану Люті: Як тільки умова виконується, haveRaged встановлюється у true, і перехід до RageState викликається з ймовірністю 100%.

Вхід у Стан Люті: RageState ініціюється, збільшуючи шкоду атаки ворога і постійно додаючи здоров'я, що робить ворога значно важчим для перемоги.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 8
some-alt