Hey, apologies if this has already been asked, couldn’t find anyone with the same issue anywhere.
I’m creating a 2.5d platformer using a Character Controller. I have implemented a jumping system which was seemingly working but I now have noticed that at times the jumping mechanic simply doesn’t go off when it should. When it doesn’t activate I have to press “Space” to jump around 5 - 8 times before it realises it should have.
my code is as follows. For reference the grounded bool does nothing, I was using it to attempt to debug. The grounded bool activated correctly but the jump still did nothing.
Vector3 moveDirection;
private float _speed = 10f;
[SerializeField]
float _speedHolder = 10f;
[SerializeField]
private float _dashSpeed = 45f;
float _dashspeedDecrease = 20f;
[SerializeField]
private float _jumpHeight = 15f;
[SerializeField]
private float _gravity = 1f;
private float _yVelocity;
Abilities _Abilities;
MovingPlatform _movingPlatform;
UIManager _uiManager;
public Vector3 LastCheckPoint;
CharacterController _controller;
[SerializeField]
GameObject GoldTextPrefab;
[SerializeField]
bool Reset;
[SerializeField]
bool grounded;
void Start()
{
_movingPlatform = GameObject.Find("Moving_Platform").GetComponent<MovingPlatform>();
_controller = GetComponent<CharacterController>();
_uiManager = GameObject.Find("UI_Manager").GetComponent<UIManager>();
_Abilities = GetComponent<Abilities>();
}
void Update()
{
float HorizontalInput = Input.GetAxis("Horizontal");
Vector3 direction = new Vector3(HorizontalInput, 0, 0);
Vector3 velocity = direction * _speed;
Vector3 dashDirection = new Vector3(_dashSpeed, 0, 0);
if (_controller.isGrounded == true)
{
grounded = true;
_Abilities.DoubleJump = true;
_Abilities.canDash = true;
_yVelocity = 0f;
if (Input.GetKeyDown(KeyCode.Space))
{
grounded = false;
_yVelocity = _jumpHeight;
Debug.Log("jump");
}
_speed = _speedHolder;
}
else
{
if (Input.GetKeyDown(KeyCode.Space) && _Abilities.DoubleJump == true && _Abilities.DoubleJumpPurchased == true)
{
_Abilities.DoubleJump = false;
if (_yVelocity < 0f)
{
_yVelocity = 0f;
}
_yVelocity += _jumpHeight;
}
_yVelocity -= _gravity;
}
if (Input.GetKeyDown(KeyCode.LeftShift) && _Abilities.canDash == true && _Abilities.DashPurchased)
{
_Abilities.Dash = true;
_Abilities.canDash = false;
_speed = _dashSpeed;
}
if (_Abilities.Dash == true)
{
_speed -= Time.deltaTime * _dashspeedDecrease;
if (_speed <= _speedHolder)
{
_Abilities.Dash = false;
_speed = _speedHolder;
}
}
velocity.y = _yVelocity;
_controller.Move(velocity * Time.deltaTime);
if (transform.position.y <= -25)
{
Reset = true;
}
if (Reset == true)
{
Reset = false;
ResetPosition();
DecreaseLives(1);
Debug.Log("pos resetting");
}