Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Додавання Частинок
Пояснення змін у методі 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
забезпечує коректне керування поведінкою ворога при смерті та виконання відповідної логіки для цього стану.
Візуальні ефекти: Відтворення ефекту частинок смерті надає гравцеві візуальний зворотний зв'язок, покращуючи ігровий досвід.
Дякуємо за ваш відгук!