Зміст курсу
Бійцівська гра в Unity
Бійцівська гра в Unity
Завершити анімацію гравця
Анімація стрибка
Для стрибка ми будемо мати дві анімації: оскільки гравець буде стрибати, а потім падати, нам потрібно створити дві анімації для цього. Перехід між ними буде базуватися на "y швидкості" гравця; якщо 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
}
Цей рядок перевіряє, чи натиснута клавіша Пробіл (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, вказуючи, що гравець завершив стрибок і падіння та змінить свою анімацію на стан спокою.
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);
Цей рядок випускає промінь вниз від позиції ніг гравця (playerFeet.position
), щоб визначити, чи гравець знаходиться на землі. Він повертає true, якщо промінь перетинається з будь-яким колайдером у шарі землі на відстані до 0.1 одиниці, відповідно оновлюючи змінну isGrounded
.
Дякуємо за ваш відгук!