Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Стан Ривка | Поведінка Ворога
Бійцівська гра в Unity

bookСтан Ривка

Контролер Аніматора

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Призначення AnimatorController

Клас AnimatorController призначений для керування та виклику поведінки ворога через події аніматора. Це забезпечує плавну інтеграцію переходів анімацій і змін станів, гарантує відповідність поведінки ворога його анімаціям.

Визначення класу та член-змінна

Визначення класу: public class AnimatorController : MonoBehaviour визначає клас, що наслідує від MonoBehaviour, дозволяючи прикріпити його до об'єкта GameObject у Unity.

Член-змінна: [SerializeField] Enemy enemy; — це серіалізоване поле, яке дозволяє прив'язати об'єкт Enemy до AnimatorController безпосередньо через інспектор Unity. Змінна enemy є посиланням на скрипт ворога, який містить функції для керування його поведінкою.

Методи

Метод FinishMovement: public void FinishMovement(): Цей метод викликає enemy.FinishMovement(). Призначений для виклику подією аніматора, що сигналізує про завершення анімації руху.

Метод EndCurrentState: public void EndCurrentState(): Цей метод викликає enemy.EndCurrentState(). Призначений для виклику подією аніматора для сигналізації завершення поточного стану.

Інтеграція з подіями аніматора

Події аніматора: Події аніматора — це спеціальні події, які можна розміщувати на часових шкалах анімацій у Animator Unity. Ці події можуть викликати функції у скриптах, що прикріплені до того ж GameObject або його дочірніх об'єктів.

Як це працює: Під час анімації, наприклад бігу чи атаки, у певних точках часової шкали можуть спрацьовувати події.

Dash State

public class DashState : State
{
    Rigidbody2D rb;
    Animator animator;
    Transform player;
    float speed;
    Vector2 scale;
    Vector2 velocity;

    bool stopDashing = false;

    public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
    {
        this.animator = animator;
        player = p;
        this.speed = DashSpeed;
        this.rb = rb;
        scale = rb.transform.localScale;
        velocity = new Vector2();
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("dash", true);
        stopDashing = false;
    }

    public override void FinishMovement()
    {
        stopDashing = true;
    }

    public override void UpdateState(float deltaTime)
    {
        if (stopDashing) return;

        scale.x = rb.position.x > player.position.x ? -1 : 1;
        rb.transform.localScale = scale;

        velocity.x = scale.x * speed;
        rb.velocity = velocity;
    }

    public override void EndState()
    {
        animator.SetBool("dash", false);
    }
}

Пояснення класу DashState

Клас DashState — це окремий стан, який відповідає за поведінку ривка ворога. Цей клас наслідує від класу State і містить методи для запуску, оновлення та завершення стану ривка, а також для обробки події завершення руху.

Конструктор

Конструктор ініціалізує DashState необхідними компонентами: Rigidbody2D для руху, Animator, Transform для гравця та швидкістю ривка. Встановлює початковий масштаб і ініціалізує вектор швидкості.

Метод StartState

Цей метод встановлює isStateFinished у значення false та запускає анімацію ривка, встановлюючи булевий параметр "dash" в аніматорі у true. Також скидає прапорець stopDashing у false.

Метод FinishMovement

Цей метод встановлює stopDashing у значення true, що зупиняє дію ривка в методі UpdateState.

Метод UpdateState

Цей метод оновлює позицію та орієнтацію ворога відповідно до позиції гравця. Якщо stopDashing дорівнює true, метод завершується достроково, припиняючи подальші оновлення. Він змінює масштаб ворога для розвороту у бік гравця, обчислює швидкість на основі параметра швидкості та застосовує цю швидкість до Rigidbody2D.

Метод EndState

Цей метод зупиняє анімацію ривка, встановлюючи булевий параметр "dash" в аніматорі у значення false.

Чому ми зробили саме так

Флаг stopDashing дозволяє точно контролювати момент зупинки ривка, що робить поведінку ворога більш чутливою до ігрових подій. Постійне оновлення позиції та напрямку ворога у стані DashState забезпечує швидкий і точний ривок у напрямку гравця. Використання параметрів аніматора гарантує правильну синхронізацію анімацій ворога з його рухами, забезпечуючи плавний і реалістичний ігровий досвід.

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

bookСтан Ривка

Контролер Аніматора

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Призначення AnimatorController

Клас AnimatorController призначений для керування та виклику поведінки ворога через події аніматора. Це забезпечує плавну інтеграцію переходів анімацій і змін станів, гарантує відповідність поведінки ворога його анімаціям.

Визначення класу та член-змінна

Визначення класу: public class AnimatorController : MonoBehaviour визначає клас, що наслідує від MonoBehaviour, дозволяючи прикріпити його до об'єкта GameObject у Unity.

Член-змінна: [SerializeField] Enemy enemy; — це серіалізоване поле, яке дозволяє прив'язати об'єкт Enemy до AnimatorController безпосередньо через інспектор Unity. Змінна enemy є посиланням на скрипт ворога, який містить функції для керування його поведінкою.

Методи

Метод FinishMovement: public void FinishMovement(): Цей метод викликає enemy.FinishMovement(). Призначений для виклику подією аніматора, що сигналізує про завершення анімації руху.

Метод EndCurrentState: public void EndCurrentState(): Цей метод викликає enemy.EndCurrentState(). Призначений для виклику подією аніматора для сигналізації завершення поточного стану.

Інтеграція з подіями аніматора

Події аніматора: Події аніматора — це спеціальні події, які можна розміщувати на часових шкалах анімацій у Animator Unity. Ці події можуть викликати функції у скриптах, що прикріплені до того ж GameObject або його дочірніх об'єктів.

Як це працює: Під час анімації, наприклад бігу чи атаки, у певних точках часової шкали можуть спрацьовувати події.

Dash State

public class DashState : State
{
    Rigidbody2D rb;
    Animator animator;
    Transform player;
    float speed;
    Vector2 scale;
    Vector2 velocity;

    bool stopDashing = false;

    public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
    {
        this.animator = animator;
        player = p;
        this.speed = DashSpeed;
        this.rb = rb;
        scale = rb.transform.localScale;
        velocity = new Vector2();
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("dash", true);
        stopDashing = false;
    }

    public override void FinishMovement()
    {
        stopDashing = true;
    }

    public override void UpdateState(float deltaTime)
    {
        if (stopDashing) return;

        scale.x = rb.position.x > player.position.x ? -1 : 1;
        rb.transform.localScale = scale;

        velocity.x = scale.x * speed;
        rb.velocity = velocity;
    }

    public override void EndState()
    {
        animator.SetBool("dash", false);
    }
}

Пояснення класу DashState

Клас DashState — це окремий стан, який відповідає за поведінку ривка ворога. Цей клас наслідує від класу State і містить методи для запуску, оновлення та завершення стану ривка, а також для обробки події завершення руху.

Конструктор

Конструктор ініціалізує DashState необхідними компонентами: Rigidbody2D для руху, Animator, Transform для гравця та швидкістю ривка. Встановлює початковий масштаб і ініціалізує вектор швидкості.

Метод StartState

Цей метод встановлює isStateFinished у значення false та запускає анімацію ривка, встановлюючи булевий параметр "dash" в аніматорі у true. Також скидає прапорець stopDashing у false.

Метод FinishMovement

Цей метод встановлює stopDashing у значення true, що зупиняє дію ривка в методі UpdateState.

Метод UpdateState

Цей метод оновлює позицію та орієнтацію ворога відповідно до позиції гравця. Якщо stopDashing дорівнює true, метод завершується достроково, припиняючи подальші оновлення. Він змінює масштаб ворога для розвороту у бік гравця, обчислює швидкість на основі параметра швидкості та застосовує цю швидкість до Rigidbody2D.

Метод EndState

Цей метод зупиняє анімацію ривка, встановлюючи булевий параметр "dash" в аніматорі у значення false.

Чому ми зробили саме так

Флаг stopDashing дозволяє точно контролювати момент зупинки ривка, що робить поведінку ворога більш чутливою до ігрових подій. Постійне оновлення позиції та напрямку ворога у стані DashState забезпечує швидкий і точний ривок у напрямку гравця. Використання параметрів аніматора гарантує правильну синхронізацію анімацій ворога з його рухами, забезпечуючи плавний і реалістичний ігровий досвід.

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

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

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

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