Завершення Анімації Гравця
Анімація стрибка
Для стрибка ми використаємо дві анімації: оскільки гравець спочатку стрибає, а потім падає, потрібно створити дві анімації для цього. Перехід між ними буде базуватися на "y-швидкості" гравця; якщо y додатна — він стрибає, якщо від’ємна — падає. Значення y-швидкості можна отримати з компонента Rigidbody2D, прикріпленого до гравця.
animator.SetFloat("JumpingForce", rb.velocity.y);
Цей код присвоює значення параметру переходу між стрибком і падінням.
Пояснення коду
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && animator.GetBool("isAttacking") == false)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
animator.SetBool("isJumping", true);
}
if (animator.GetBool("isJumping") == true && rb.velocity.y < 0 && isGrounded)
{
animator.SetBool("isJumping", false);
}
animator.SetFloat("JumpingForce", rb.velocity.y);
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && animator.GetBool("isAttacking") == false)
{
// Code to execute when the conditions are met
}
Цей рядок перевіряє, чи натиснута клавіша Space (Input.GetKeyDown(KeyCode.Space)
), чи гравець знаходиться на землі (isGrounded
), і чи гравець не атакує в даний момент (animator.GetBool("isAttacking") == false
). Якщо всі умови виконуються, виконується наступний блок коду.
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
Цей рядок додає вгору силу до компонента Rigidbody (rb
), прикріпленого до гравця, імітуючи стрибок. Сила прикладається у напрямку вгору (Vector2.up
) з величиною, визначеною jumpForce
, і застосовується імпульсивно (ForceMode2D.Impulse
).
animator.SetBool("isJumping", true);
Цей рядок встановлює булевий параметр "isJumping" у компоненті Animator у значення true, що активує анімацію стрибка.
if (animator.GetBool("isJumping") == true && rb.velocity.y < 0 && isGrounded)
{
// Code to execute when the conditions are met
}
Цей рядок перевіряє, чи гравець наразі стрибає (animator.GetBool("isJumping") == true
), вертикальна швидкість гравця від'ємна (rb.velocity.y < 0
), і гравець знаходиться на землі (isGrounded
). Якщо всі умови виконуються, буде виконано наступний блок коду.
animator.SetBool("isJumping", false);
Цей рядок встановлює булевий параметр "isJumping" у компоненті Animator у значення false, що вказує на завершення стрибка та падіння гравця, після чого анімація зміниться на стан очікування (idle).
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);
Цей рядок виконує випромінювання променя вниз від позиції ніг гравця (playerFeet.position
), щоб визначити, чи знаходиться гравець на землі. Повертає true, якщо промінь перетинає будь-який колайдер шару ground на відстані до 0.1 одиниці, відповідно оновлюючи змінну isGrounded
.
Дякуємо за ваш відгук!