Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Створити Менеджер Стану
Стан:
Абстрактні методи:
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
, ми можемо забезпечити плавний вхід і вихід ворога з бездіяльності, роблячи його більш динамічним і реалістичним. Ця структура також полегшує додавання або зміну поведінки бездіяльності ворога без впливу на інші частини коду ворога.
Дякуємо за ваш відгук!