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
Стан Люті

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

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

course content

Зміст курсу

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

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

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

book
Стан Люті

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

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

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

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

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