Как сделать двойной прыжок
Всем привет друзья! Пытаюсь сделать двойной прыжок как на видео Chameleon Run 2:45 min time code
-Первый длинный если долго зажать пробел
-Второй прыжок просто тапаешь и он просто прыгает один раз, т.е. как добавочный прыжок.
Реализовал всю логику, но она мне не нравится, хочу более экспертного мнения, как такое можно реализовать:
public class PlayerJumper : MonoBehaviour
{
[SerializeField] private float _secondJumpFroce;
[SerializeField] private float _firstJumpForce;
[SerializeField] private float _maxHeightOfJump;
[SerializeField] private Vector3 _normalizedDirection;
private Rigidbody _rigidbody;
private bool _canJumpInAir = true;
private float _jumpKeystrokeAmount = 0;
private void Awake()
{
_rigidbody = GetComponent<Rigidbody>();
}
private void Update()
{
//second time jump
if (Input.GetKeyDown(KeyCode.Space) && _jumpKeystrokeAmount == 1)
{
//set velocity.y to zero so
//we dont need to overcome Y force (which has negative value) when second jump
if (_rigidbody.velocity.y < 0)
{
_rigidbody.velocity = new Vector3(_rigidbody.velocity.x, 0);
}
_rigidbody.AddForce(Vector3.up * _secondJumpFroce, ForceMode.VelocityChange);
}
if (Input.GetKeyDown(KeyCode.Space))
{
_jumpKeystrokeAmount++;
}
}
private void FixedUpdate()
{
//first time jump
if (Input.GetKey(KeyCode.Space) && _jumpKeystrokeAmount == 1 && _canJumpInAir == true)
{
_rigidbody.AddForce(_normalizedDirection * _firstJumpForce, ForceMode.Impulse);
//JumpHeight limitation
if (_rigidbody.velocity.y >= _maxHeightOfJump)
{
_canJumpInAir = false;
}
}
}
private void OnCollisionEnter(Collision collision)
{
_canJumpInAir = true;
_jumpKeystrokeAmount = 0;
}
}