Стан Ривка
Контролер Аніматора
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
забезпечує швидкий і точний ривок у напрямку гравця. Використання параметрів аніматора гарантує правильну синхронізацію анімацій ворога з його рухами, забезпечуючи плавний і реалістичний ігровий досвід.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.33
Стан Ривка
Свайпніть щоб показати меню
Контролер Аніматора
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
забезпечує швидкий і точний ривок у напрямку гравця. Використання параметрів аніматора гарантує правильну синхронізацію анімацій ворога з його рухами, забезпечуючи плавний і реалістичний ігровий досвід.
Дякуємо за ваш відгук!