Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Стан виконання
Зміни та Додатки
Змінна isStateFinished:
Це булева змінна, яка вказує, чи завершено виконання стану.
Метод FinishState:
Це новий віртуальний метод, який встановлює isStateFinished
в true
.
Віртуальний означає, що похідні класи можуть перевизначити цей метод, якщо їм потрібно виконати додаткові дії при завершенні стану.
Чому були внесені ці зміни
Зміни вводять змінну isStateFinished
для відстеження завершення стану та метод FinishState
для стандартизації сигналізації про завершення стану, дозволяючи похідним класам додавати власну логіку при завершенні стану.
Стан Бігу
Давайте розглянемо клас RunState
, який успадковується від класу State
. Цей клас відповідає за обробку поведінки бігу нашого ворога. Ми зосередимося на додатках та змінах, внесених до цього класу.
Конструктор:
public RunState(Rigidbody2D rb, Animator animator, Transform p, float speed)
;
Цей конструктор ініціалізує RunState
з необхідними компонентами: Rigidbody2D
для руху, Animator
для анімацій, Transform
для відстеження гравця та speed
для визначення швидкості, з якою ворог біжить;
Метод StartState:
public override void StartState()
;
Цей метод встановлює isStateFinished
на false
і запускає анімацію бігу, встановлюючи булевий параметр "run" в аніматорі на true
.
Метод UpdateState:
public override void UpdateState(float DeltaTime)
;
Цей метод оновлює позицію та орієнтацію ворога на основі позиції гравця;
Він коригує масштаб ворога, щоб він дивився на гравця, обчислює швидкість на основі швидкості та застосовує цю швидкість до Rigidbody2D
.
Метод EndState:
public override void EndState()
Цей метод зупиняє анімацію бігу, встановлюючи булевий параметр "run" в аніматорі на false
.
Як це працює для нашого ворога
- Рух і анімація:
Використовуючи Rigidbody2D
та Animator
, RunState
забезпечує плавний рух ворога та відповідні анімації. Це робить поведінку візуально та фізично реалістичною;
- Відстеження позиції гравця:
Transform
гравця дозволяє ворогу завжди рухатися до гравця, що є важливим для поведінки переслідування або бігу;
- Обробка напрямку:
Коригування scale.x
на основі позиції гравця забезпечує правильне обличчя ворога до гравця під час бігу, додаючи до реалістичності;
- Динамічні оновлення стану:
Метод UpdateState
викликається кожного кадру для безперервного коригування руху та напрямку ворога на основі позиції гравця, роблячи ворога чутливим та динамічним.
Ініціалізація ворога
Пояснення
Ініціалізація стану:
Змінні idle
та runState
ініціалізуються з їх відповідними станами. Змінна idle
є екземпляром IdleState
з переданим аніматором, тоді як runState
є екземпляром RunState
, що включає Rigidbody2D
, Animator
, Transform
для гравця та значення швидкості.
Ініціалізація StateManager:
stateManager = new StateManager(idle);
StateManager
ініціалізується зі станом idle
як початковим станом.
Визначення Переходів:
- FarAwayTransition:
FarAwayTransition = new Transition(() => { return (ThresholdDistance < Vector2.Distance(transform.position, player.position)); }, new StatePourcentage(runState, 50f), new StatePourcentage(dashState, 50f));
;
Цей перехід перевіряє, чи гравець знаходиться далі, ніж ThresholdDistance
;
- toIdleTransition:
toIdleTransition = new Transition(() => { return stateManager.GetCurrentState().isStateFinished; }, new StatePourcentage(idle, 100));
Цей перехід перевіряє, чи поточний стан завершено. Якщо так, він переходить до стануidle
з ймовірністю 100%. - finishRunning:
finishRunning = new Transition(() => { return (ThresholdDistance >= Vector2.Distance(transform.position, player.position)); }, new StatePourcentage(idle, 100));
Цей перехід перевіряє, чи гравець знаходиться ближче, ніжThresholdDistance
. Якщо так, він переходить до стануidle
з ймовірністю 100%.
Додавання Переходів до StateManager:
Ці рядки додають визначені переходи до stateManager
.
Чому Ми Зробили Це Так
Динамічні Зміни Стану:
Переходи дозволяють ворогу динамічно змінювати свою поведінку на основі позиції гравця та статусу завершення поточного стану, роблячи ворога більш чутливим та інтерактивним у ігровому середовищі.
Умовні Переходи:
Використання умов (як перевірка відстані або завершення стану) забезпечує, що переходи станів відбуваються логічно та відповідно, підвищуючи реалістичність ігрового процесу.
Переходи на Основі Ймовірності:
Використання StatePourcentage
дозволяє здійснювати переходи на основі ймовірності, додаючи елемент непередбачуваності та різноманітності в поведінку ворога.
Дякуємо за ваш відгук!