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

Абстрактні методи:

public abstract void StartState(); public abstract void EndState(); — це абстрактні методи. Абстрактний метод не має тіла (реалізації) тут і повинен бути реалізований будь-яким не абстрактним класом, який наслідує цей клас State.

Віртуальний метод:

public virtual void UpdateState() {} — це віртуальний метод. Віртуальний метод має реалізацію (у цьому випадку порожнє тіло {}), але може бути перевизначений похідними класами, якщо їм потрібна інша поведінка.

Як це працює для нашого ворога

Наслідування стану:

Клас State буде наслідуватися іншими конкретними станами. Наприклад, можуть бути класи IdleState, AttackState та PatrolState, які наслідують від State. Кожен з цих станів реалізує власні версії методів StartState(), UpdateState() та EndState().

Поведінка ворога:

Поведінка ворога керується за допомогою станів: StartState() ініціалізує стан, UpdateState() оновлює поведінку під час стану, а EndState() виконує очищення після завершення стану.

Використання абстрактного класу: Оголошення State абстрактним класом гарантує, що всі конкретні стани реалізують необхідні методи, структуруючи поведінку ворога та спрощуючи керування станами без змін у скрипті ворога.

Менеджер станів:

csharp

Пояснення

Конструктор public StateManager(State startingState) ініціалізує StateManager із початковим станом. Він встановлює currentState у startingState та викликає currentState.StartState(), щоб ініціалізувати його.

Метод ChangeState, public void ChangeState(State newState), змінює стан ворога. Він викликає currentState.EndState() для завершення поточного стану, встановлює currentState у новий стан і потім викликає currentState.StartState() для ініціалізації нового стану.

Метод UpdateStates, public void UpdateStates(), оновлює поточний стан, викликаючи currentState.UpdateState(), щоб виконати дії, пов’язані з цим станом.

Як це працює для нашого ворога

Коли ми створюємо StateManager для нашого ворога, конструктор ініціалізує початковий стан. Коли ворог повинен змінити свою поведінку, викликається метод ChangeState, який завершує поточний стан за допомогою EndState(), встановлює новий стан і ініціалізує його через StartState(). Під час гри метод UpdateStates викликається багаторазово для виконання дій поточного стану через UpdateState().

Приклад робочого процесу:

Ворог починає у стані IdleState, при цьому створюється StateManager і викликається IdleState.StartState() для налаштування поведінки очікування. Коли ворог виявляє гравця, викликається ChangeState(new AttackState()), що завершує поведінку очікування через IdleState.EndState(). Поточний стан встановлюється у AttackState, і AttackState.StartState() ініціює поведінку атаки. Кожного кадру викликається UpdateStates(), і якщо поточний стан — це AttackState, AttackState.UpdateState() обробляє дії атаки.

Завдяки класу StateManager ми можемо легко організовано керувати різними поведінками нашого ворога та перемикатися між ними.

Стан очікування

csharp

Пояснення

Конструктор public IdleState(Animator animator) приймає об'єкт Animator як параметр і присвоює його змінній класу animator. Метод StartState, public override void StartState(), встановлює булевий параметр "idle" в аніматорі у значення true, що запускає анімацію очікування. Метод EndState, public override void EndState(), встановлює параметр "idle" у значення false, зупиняючи анімацію очікування.

Як це працює для нашого ворога

Коли ворог переходить у IdleState, метод StartState() встановлює параметр "idle" в аніматорі у значення true, запускаючи анімацію очікування, що створює вигляд бездіяльності ворога. Коли ворог залишає IdleState, метод EndState() встановлює параметр "idle" у значення false, зупиняючи анімацію очікування та готуючи ворога до переходу в інший стан, наприклад, руху або атаки.

Приклад робочого процесу

StateManager встановлює стан ворога на IdleState, викликаючи IdleState.StartState(), щоб встановити параметр аніматора "idle" у значення true, запускаючи анімацію простою. При зміні поведінки ворога StateManager викликає IdleState.EndState(), встановлюючи параметр "idle" у значення false та зупиняючи анімацію простою. Далі StateManager переводить ворога у новий стан, наприклад, AttackState або PatrolState.

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

question mark

Який метод викликається для оновлення поточного стану у класі StateManager?

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

course content

Зміст курсу

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

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

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

book
Створення Менеджера Станів

Стан:

csharp

Абстрактні методи:

public abstract void StartState(); public abstract void EndState(); — це абстрактні методи. Абстрактний метод не має тіла (реалізації) тут і повинен бути реалізований будь-яким не абстрактним класом, який наслідує цей клас State.

Віртуальний метод:

public virtual void UpdateState() {} — це віртуальний метод. Віртуальний метод має реалізацію (у цьому випадку порожнє тіло {}), але може бути перевизначений похідними класами, якщо їм потрібна інша поведінка.

Як це працює для нашого ворога

Наслідування стану:

Клас State буде наслідуватися іншими конкретними станами. Наприклад, можуть бути класи IdleState, AttackState та PatrolState, які наслідують від State. Кожен з цих станів реалізує власні версії методів StartState(), UpdateState() та EndState().

Поведінка ворога:

Поведінка ворога керується за допомогою станів: StartState() ініціалізує стан, UpdateState() оновлює поведінку під час стану, а EndState() виконує очищення після завершення стану.

Використання абстрактного класу: Оголошення State абстрактним класом гарантує, що всі конкретні стани реалізують необхідні методи, структуруючи поведінку ворога та спрощуючи керування станами без змін у скрипті ворога.

Менеджер станів:

csharp

Пояснення

Конструктор public StateManager(State startingState) ініціалізує StateManager із початковим станом. Він встановлює currentState у startingState та викликає currentState.StartState(), щоб ініціалізувати його.

Метод ChangeState, public void ChangeState(State newState), змінює стан ворога. Він викликає currentState.EndState() для завершення поточного стану, встановлює currentState у новий стан і потім викликає currentState.StartState() для ініціалізації нового стану.

Метод UpdateStates, public void UpdateStates(), оновлює поточний стан, викликаючи currentState.UpdateState(), щоб виконати дії, пов’язані з цим станом.

Як це працює для нашого ворога

Коли ми створюємо StateManager для нашого ворога, конструктор ініціалізує початковий стан. Коли ворог повинен змінити свою поведінку, викликається метод ChangeState, який завершує поточний стан за допомогою EndState(), встановлює новий стан і ініціалізує його через StartState(). Під час гри метод UpdateStates викликається багаторазово для виконання дій поточного стану через UpdateState().

Приклад робочого процесу:

Ворог починає у стані IdleState, при цьому створюється StateManager і викликається IdleState.StartState() для налаштування поведінки очікування. Коли ворог виявляє гравця, викликається ChangeState(new AttackState()), що завершує поведінку очікування через IdleState.EndState(). Поточний стан встановлюється у AttackState, і AttackState.StartState() ініціює поведінку атаки. Кожного кадру викликається UpdateStates(), і якщо поточний стан — це AttackState, AttackState.UpdateState() обробляє дії атаки.

Завдяки класу StateManager ми можемо легко організовано керувати різними поведінками нашого ворога та перемикатися між ними.

Стан очікування

csharp

Пояснення

Конструктор public IdleState(Animator animator) приймає об'єкт Animator як параметр і присвоює його змінній класу animator. Метод StartState, public override void StartState(), встановлює булевий параметр "idle" в аніматорі у значення true, що запускає анімацію очікування. Метод EndState, public override void EndState(), встановлює параметр "idle" у значення false, зупиняючи анімацію очікування.

Як це працює для нашого ворога

Коли ворог переходить у IdleState, метод StartState() встановлює параметр "idle" в аніматорі у значення true, запускаючи анімацію очікування, що створює вигляд бездіяльності ворога. Коли ворог залишає IdleState, метод EndState() встановлює параметр "idle" у значення false, зупиняючи анімацію очікування та готуючи ворога до переходу в інший стан, наприклад, руху або атаки.

Приклад робочого процесу

StateManager встановлює стан ворога на IdleState, викликаючи IdleState.StartState(), щоб встановити параметр аніматора "idle" у значення true, запускаючи анімацію простою. При зміні поведінки ворога StateManager викликає IdleState.EndState(), встановлюючи параметр "idle" у значення false та зупиняючи анімацію простою. Далі StateManager переводить ворога у новий стан, наприклад, AttackState або PatrolState.

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

question mark

Який метод викликається для оновлення поточного стану у класі StateManager?

Select the correct answer

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

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

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

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