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Стан виконання

Зміни та Додатки

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

Що відбувається з `animator`, коли викликається метод `StartState` у класі `RunState`?

Що відбувається з animator, коли викликається метод StartState у класі RunState?

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

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

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

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

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