Question by
Soundlag · Feb 06, 2016 at 06:10 PM ·
charactercontrollerjumpcharacter controller
Why won't my character jump smoothly?
I used this script for player movement and jumping.
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float _walkSpeed;
[SerializeField]
private float _runSpeed;
[SerializeField]
private float _crouchSpeed;
[SerializeField]
private float _jumpSpeed;
[SerializeField]
private float _gravityMultiplier;
[SerializeField]
private float _mouseLookSensitivity;
[SerializeField]
private float _stickToGroundForce;
private Camera _camera;
private CharacterController _character;
private Vector3 _moveDirection = Vector3.zero;
private bool _jump;
private bool _isJumping;
private bool _isWalking;
private bool _isRunning;
private bool _isCrouching;
private bool _previouslyGrounded;
//______________________________________________________________________________
// Function: Awake
#region Function
void Awake()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
#endregion
//______________________________________________________________________________
// Function: Start
#region Function
void Start()
{
_camera = Camera.main;
_character = GetComponent<CharacterController>();
_isJumping = false;
_isRunning = false;
_isCrouching = false;
}
#endregion
//______________________________________________________________________________
// Function: Update
#region Function
void Update()
{
if (Input.GetKeyUp(KeyCode.Escape))
UnlockCursor();
LookAtMouse();
if (!_jump)
{
_jump = Input.GetButtonDown("Jump");
}
_previouslyGrounded = _character.isGrounded;
}
#endregion
//______________________________________________________________________________
// Function: FixedUpdate
#region Function
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
_moveDirection = new Vector3(h, 0, v);
_moveDirection = transform.TransformDirection(_moveDirection);
float speed = GetSpeed();
_moveDirection *= speed;
if (_character.isGrounded)
{
_moveDirection.y = -_stickToGroundForce;
if (_jump)
{
_moveDirection.y = _jumpSpeed;
_jump = false;
_isJumping = true;
}
}
else
{
_moveDirection += Physics.gravity*_gravityMultiplier*Time.fixedDeltaTime;
}
_character.Move(_moveDirection * Time.fixedDeltaTime);
}
#endregion
//______________________________________________________________________________
// Function: LookAtMouse
#region Function
private void LookAtMouse()
{
Vector2 mouseDelta = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y")) * _mouseLookSensitivity;
_camera.transform.eulerAngles += new Vector3(-mouseDelta.y, 0, 0);
transform.eulerAngles += new Vector3(0, mouseDelta.x, 0);
}
#endregion
//______________________________________________________________________________
// Function: GetSpeed
#region Function
private float GetSpeed()
{
float speed;
_isRunning = Input.GetKey(KeyCode.LeftShift);
if (_isRunning)
_isCrouching = false;
speed = !_isRunning ? _walkSpeed : _runSpeed;
if (Input.GetKeyDown(KeyCode.LeftControl))
{
_isCrouching = !_isCrouching;
}
speed = _isCrouching ? _crouchSpeed : speed;
return speed;
}
#endregion
//______________________________________________________________________________
// Function: UnlockCursor
#region Function
private void UnlockCursor()
{
if (Cursor.lockState == CursorLockMode.Locked)
{
Cursor.lockState = CursorLockMode.None;
}
else
{
Cursor.lockState = CursorLockMode.None;
}
Cursor.visible = !Cursor.visible;
}
#endregion
}
After I hit space to jump, it just moves to its highest point without any transition in between. Then it slowly falls to the ground. How can I fix this?
Comment
Your answer
Follow this Question
Related Questions
Jump logic issues 0 Answers
I have a problem in the jump system. 1 Answer
Character controller aplly gravity in FixedUpdate with my own gravity in Update 1 Answer
how to jump in a 2D game 2 Answers
CharacterController getting stuck on slope corners 0 Answers