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
Створити Менеджер Стану

Стан:

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

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

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

Пояснення

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

Стан Бездіяльності

Пояснення

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

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

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

Виберіть правильну відповідь

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

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

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

Секція 3. Розділ 3
We're sorry to hear that something went wrong. What happened?
some-alt