Как использовать новую систему ввода Unity, как применить высоту прыжка в зависимости от того, как долго нажата кнопка п ⇐ C#
Как использовать новую систему ввода Unity, как применить высоту прыжка в зависимости от того, как долго нажата кнопка п
Я работаю с новой системой ввода, и сейчас у меня есть простой код для прыжка:
void OnJump (кнопка InputValue) { isGrounded = groundCheck.IsTouchingLayers(LayerMask.GetMask("Ground")); если (button.isPressed && isGrounded) { rb.velocity += новый Vector2 (0f, jumpForce); } } Это работает, но очень жестко: каждый раз при нажатии кнопки происходит прыжок на одну и ту же высоту.
Что я могу сделать, чтобы игрок подпрыгивал на высоту в зависимости от того, как долго была нажата кнопка?
Для примера рассмотрим весь контроллер игрока:
с использованием System.Collections; использование UnityEngine; использование UnityEngine.InputSystem; открытый класс PlayerController: MonoBehaviour { [SerializeField] float moveSpeed = 10f; [SerializeField] float jumpForce = 15f; [SerializeField] Rigidbody2D rb; [SerializeField] Collider2D groundCheck; Вектор2 moveInput; bool isMoving; bool isGrounded; недействительное обновление() { Бегать(); Подбросить(); } void OnMove (значение InputValue) { moveInput = value.Get(); } void OnJump (кнопка InputValue) { isGrounded = groundCheck.IsTouchingLayers(LayerMask.GetMask("Ground")); если (button.isPressed && isGrounded) { rb.velocity += новый Vector2 (0f, jumpForce); } } недействительный запуск() { Vector2 runVelocity = новый Vector2(moveInput.x * moveSpeed, rb.velocity.y); rb.velocity = runVelocity; } недействительный Флип() { isMoving = Mathf.Abs(rb.velocity.x) > Mathf.Epsilon; если (isMoving) { Transform.localScale = новый Vector2(Mathf.Sign(rb.velocity.x), 1f); } } } Я новичок, поэтому все, что я пробовал, возможно, было реализовано неправильно.
Я прочитал руководство Unity по физике твердого тела и попробовал вместо использования нового Vector2 для определения скорости использовать AddForce. Я не уверен, что применил это правильно.
Я работаю с новой системой ввода, и сейчас у меня есть простой код для прыжка:
void OnJump (кнопка InputValue) { isGrounded = groundCheck.IsTouchingLayers(LayerMask.GetMask("Ground")); если (button.isPressed && isGrounded) { rb.velocity += новый Vector2 (0f, jumpForce); } } Это работает, но очень жестко: каждый раз при нажатии кнопки происходит прыжок на одну и ту же высоту.
Что я могу сделать, чтобы игрок подпрыгивал на высоту в зависимости от того, как долго была нажата кнопка?
Для примера рассмотрим весь контроллер игрока:
с использованием System.Collections; использование UnityEngine; использование UnityEngine.InputSystem; открытый класс PlayerController: MonoBehaviour { [SerializeField] float moveSpeed = 10f; [SerializeField] float jumpForce = 15f; [SerializeField] Rigidbody2D rb; [SerializeField] Collider2D groundCheck; Вектор2 moveInput; bool isMoving; bool isGrounded; недействительное обновление() { Бегать(); Подбросить(); } void OnMove (значение InputValue) { moveInput = value.Get(); } void OnJump (кнопка InputValue) { isGrounded = groundCheck.IsTouchingLayers(LayerMask.GetMask("Ground")); если (button.isPressed && isGrounded) { rb.velocity += новый Vector2 (0f, jumpForce); } } недействительный запуск() { Vector2 runVelocity = новый Vector2(moveInput.x * moveSpeed, rb.velocity.y); rb.velocity = runVelocity; } недействительный Флип() { isMoving = Mathf.Abs(rb.velocity.x) > Mathf.Epsilon; если (isMoving) { Transform.localScale = новый Vector2(Mathf.Sign(rb.velocity.x), 1f); } } } Я новичок, поэтому все, что я пробовал, возможно, было реализовано неправильно.
Я прочитал руководство Unity по физике твердого тела и попробовал вместо использования нового Vector2 для определения скорости использовать AddForce. Я не уверен, что применил это правильно.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение