- Home /
Jump height increasing after touching walls
I've looked over a dozen answers related to this problem, nothing's worked so far. When my player jumps against a wall, its next jump will be enormous, 2x - 4x its normal height. Regular jumping around works 99% of the time, but I can force the glitch to happen reliably by pressing against a wall with a collider, jumping a couple times, and then moving away and jumping again.
I've tried switching the call for movement/ jumping in my controller to Fixed Update, and I've added a Rigidbody onto the wall and turned it to kinematic; which are the two main fixes I've found online so far. Neither worked. Advice?
My code on the player:
public void Move(Vector2 input)
{
float acceleration = 0;
//check if there is key input & translate that to player movement
if (input.sqrMagnitude > 0.01f)
{
m_velocityDirection.x = input.x;
m_velocityDirection.z = input.y;
m_velocityDirection.y = 0;
m_velocityDirection = m_velocityDirection.normalized;
acceleration = MaxSpeed / AccelerationTime;
}
else
{
acceleration = -MaxSpeed / DecelerationTime;
}
//actually move the player
m_velocityMagnitude = Mathf.Clamp(m_velocityMagnitude + acceleration * Time.deltaTime, 0, MaxSpeed);
this.transform.position = this.transform.position + (m_velocityDirection * m_velocityMagnitude * Time.deltaTime);
}
public bool IsGrounded()
{
//check raycast to see if player is on the ground
Vector3 newpos = new Vector3(m_rigidbody.position.x, m_rigidbody.position.y + 0.75f, m_rigidbody.position.z);
RaycastHit hit;
if (Physics.SphereCast(newpos, 0.5f, Vector3.down, out hit, 1))
{
return true;
}
else
{
return false;
}
}
public void Jump()
{
if (IsGrounded() == true)
{
//use my custom gravity when jumping
gravity = Physics.gravity;
gravity.y = -(2 * JumpHeight) / Mathf.Pow((JumpUpTime / 2), 2);
Physics.gravity = gravity;
m_velocityDirection.y = -gravity.y * (JumpUpTime / 2);
//jump the player
m_rigidbody.AddForce(new Vector3(0, m_velocityDirection.y, 0), ForceMode.Impulse);
}
Player controller (also on player):
void Update () {
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
if (input.sqrMagnitude < 0.1f)
{
playerMove.Move(Vector2.zero);
} else
{
playerMove.Move(input);
}
if (Input.GetButtonDown("Jump"))
{
playerMove.Jump();
}
}
Your answer
Follow this Question
Related Questions
How to change variable in another script after colliding? 2 Answers
Check bool from multiple instances of the same script 0 Answers
How do i stop infinite Jumping in the air 1 Answer
Help needed making fake 3D collision in a beat em up style 2D project 1 Answer
Issue With Input.GetKey and IENumerator in Grabbing Script 1 Answer