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
Додавання Частинок

Пояснення змін у методі Update

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

Метод Update у скрипті ворога тепер містить логіку для оновлення менеджера станів, забезпечення повороту ворога у бік гравця, а також обробку окремого випадку, коли ворог перебуває у стані DeathState. Ця логіка була додана, щоб запобігти подальшому повороту ворога у бік гравця після його смерті.

Компоненти методу

Оновлення StateManager

stateManager.UpdateStates(Time.deltaTime)

Цей рядок оновлює менеджер станів, передаючи час, що минув з останнього кадру (Time.deltaTime). Це гарантує, що поточний стан оновлюється коректно кожного кадру.

Перевірка DeathState

if (stateManager.GetCurrentState() is DeathState) return;

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

Поворот у бік гравця

Наступні рядки забезпечують, що ворог завжди повернутий у бік гравця:

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

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

Цей рядок перевіряє, чи координата x ворога більша за координату x гравця:

  • Якщо так, scale.x встановлюється у -1, ворог повертається вліво;
  • Якщо ні, scale.x встановлюється у 1, ворог повертається вправо.

transform.localScale = scale;

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

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

Обробка стану смерті

Додавання перевірки на DeathState гарантує, що ворог не продовжує оновлювати свою поведінку або орієнтацію після смерті. Це важливо для підтримки логіки гри та запобігання неочікуваним діям після того, як ворог має стати неактивним.

Централізована логіка

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

Пояснення обробки смерті ворога

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

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

    public override void EndState()
    {
    }
}

Клас DeathState — це окремий стан, який відповідає за поведінку ворога під час його смерті.

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

Обробка поведінки при смерті

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

Інтеграція анімації

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

Створення частинок при смерті ворога

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Цей код демонструє, як ворог обробляє свою смерть, коли його здоров'я досягає нуля. Відбувається перехід у стан DeathState та відтворюється ефект частинок смерті.

Розбір коду

Перевірка здоров'я

if (health <= 0)

Ця умова перевіряє, чи здоров'я ворога знизилося до нуля або нижче.

Перехід до DeathState

stateManager.ChangeState(deathState)

Цей рядок переводить ворога у стан DeathState за допомогою StateManager.

Створення частинок смерті

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Цей рядок створює екземпляр ефекту частинок смерті на позиції ворога. deathParticles — це префаб, який містить систему частинок для ефекту смерті. Quaternion.identity гарантує, що частинки не мають обертання.

Відтворення частинок смерті

deathParticle.Play()

Цей рядок запускає створений ефект частинок.

Знищення частинок смерті

Destroy(deathParticle.gameObject, 5)

Цей рядок планує знищення ефекту частинок GameObject через 5 секунд, щоб він не залишався у грі назавжди.

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

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

Візуальні ефекти: Відтворення ефекту частинок смерті надає гравцеві візуальний зворотний зв'язок, покращуючи ігровий досвід.

question mark

Що відбувається з системою частинок, коли здоров'я менше або дорівнює нулю?

Select the correct answer

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

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

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

Секція 4. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

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

course content

Зміст курсу

Бійцівська гра в Unity

Бійцівська гра в Unity

1. Система анімації Unity
2. Поведінка гравця
3. Поведінка Ворога
4. Покращення гри
5. Покращення гри Flappy Bird

book
Додавання Частинок

Пояснення змін у методі Update

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

Метод Update у скрипті ворога тепер містить логіку для оновлення менеджера станів, забезпечення повороту ворога у бік гравця, а також обробку окремого випадку, коли ворог перебуває у стані DeathState. Ця логіка була додана, щоб запобігти подальшому повороту ворога у бік гравця після його смерті.

Компоненти методу

Оновлення StateManager

stateManager.UpdateStates(Time.deltaTime)

Цей рядок оновлює менеджер станів, передаючи час, що минув з останнього кадру (Time.deltaTime). Це гарантує, що поточний стан оновлюється коректно кожного кадру.

Перевірка DeathState

if (stateManager.GetCurrentState() is DeathState) return;

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

Поворот у бік гравця

Наступні рядки забезпечують, що ворог завжди повернутий у бік гравця:

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

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

Цей рядок перевіряє, чи координата x ворога більша за координату x гравця:

  • Якщо так, scale.x встановлюється у -1, ворог повертається вліво;
  • Якщо ні, scale.x встановлюється у 1, ворог повертається вправо.

transform.localScale = scale;

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

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

Обробка стану смерті

Додавання перевірки на DeathState гарантує, що ворог не продовжує оновлювати свою поведінку або орієнтацію після смерті. Це важливо для підтримки логіки гри та запобігання неочікуваним діям після того, як ворог має стати неактивним.

Централізована логіка

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

Пояснення обробки смерті ворога

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

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

    public override void EndState()
    {
    }
}

Клас DeathState — це окремий стан, який відповідає за поведінку ворога під час його смерті.

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

Обробка поведінки при смерті

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

Інтеграція анімації

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

Створення частинок при смерті ворога

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Цей код демонструє, як ворог обробляє свою смерть, коли його здоров'я досягає нуля. Відбувається перехід у стан DeathState та відтворюється ефект частинок смерті.

Розбір коду

Перевірка здоров'я

if (health <= 0)

Ця умова перевіряє, чи здоров'я ворога знизилося до нуля або нижче.

Перехід до DeathState

stateManager.ChangeState(deathState)

Цей рядок переводить ворога у стан DeathState за допомогою StateManager.

Створення частинок смерті

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Цей рядок створює екземпляр ефекту частинок смерті на позиції ворога. deathParticles — це префаб, який містить систему частинок для ефекту смерті. Quaternion.identity гарантує, що частинки не мають обертання.

Відтворення частинок смерті

deathParticle.Play()

Цей рядок запускає створений ефект частинок.

Знищення частинок смерті

Destroy(deathParticle.gameObject, 5)

Цей рядок планує знищення ефекту частинок GameObject через 5 секунд, щоб він не залишався у грі назавжди.

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

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

Візуальні ефекти: Відтворення ефекту частинок смерті надає гравцеві візуальний зворотний зв'язок, покращуючи ігровий досвід.

question mark

Що відбувається з системою частинок, коли здоров'я менше або дорівнює нулю?

Select the correct answer

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

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

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

Секція 4. Розділ 1
some-alt