- Home /
Character Controller sticky head.... Help!?
Hello everyone,
So I have my character (capsule atm) with a character controller and a player script which has all the movement including running and jumping.
The issue i'm having is when there is an object with a collider above my player. If I jump up into the object my players head gets stuck onto this object for about 0.5/1 seconds and then falls. Whilst hes stuck i can move for a split second. If i jump at the edge of the object it will hit his head and move outwards and up and then fall.
I was wondering if anyone knew how to fix this. I've looked around but cant find anything.
Here is my script;
private CharacterController _playerController;
[SerializeField] private float _walkSpeed = 3.5F;
[SerializeField] private float _sprintSpeed = 5.25F;
[SerializeField] private float _walkBackSpeed = 2.5F;
[SerializeField] private float _jumpSpeed = 6.5F;
[SerializeField] private float _gravity = 20f;
[SerializeField] private bool _sprintToggle = false;
private Vector3 moveDirection = Vector3.zero;
void Start()
{
_playerController = GetComponent<CharacterController>();
}
void Update()
{
PlayerMovement();
}
private void PlayerMovement()
{
if (_playerController.isGrounded)
{
/*===============================================================================================
MOVEMENT LOGIC
===============================================================================================*/
float horizontalInput = hInput.GetAxis("Horizontal");
float verticalInput = hInput.GetAxis("Vertical");
var speed = _walkSpeed;
moveDirection = new Vector3(horizontalInput, 0, verticalInput);
/*===============================================================================================
SPEED LOGIC
===============================================================================================*/
// TODO: create sprint toggle button on menu and if activated, allow speed toggle only.
if (_sprintToggle)
{
}
if (hInput.GetButton("Run") && verticalInput > 0)
{
speed = _sprintSpeed;
}
else
{
speed = _walkSpeed;
}
if (verticalInput < 0)
{
speed = _walkBackSpeed;
}
moveDirection *= speed;
moveDirection = transform.TransformDirection(moveDirection);
/*===============================================================================================
JUMP LOGIC
===============================================================================================*/
if (hInput.GetButton("Jump"))
{
moveDirection.y = _jumpSpeed;
}
}
moveDirection.y -= _gravity * Time.deltaTime;
_playerController.Move(moveDirection * Time.deltaTime);
}
Answer by raffreitas98 · Jun 04, 2018 at 10:57 PM
Managed to fix it with;
private bool _isJumping;
private void ResetJump()
{
_isJumping = false;
}
if (hInput.GetButton("Jump") && !_isJumping)
{
_isJumping = true;
_moveDirection.y = _jumpSpeed;
Invoke("ResetJump", 0.5f);
}
Your answer
Follow this Question
Related Questions
How do I fix my player jumping code? 2 Answers
[C#] Jump on slopes 1 Answer
Character Controller problem 0 Answers
Character motor movement and jump 1 Answer
Let Character Controller jump. 0 Answers