Jumping with Character Controller?!

So I am currently developing a parkour system for my game. I have used the Unity default First Person Controller for almost a year now, and I recently realized that I had to make my own character controlling system for my parkour system. Basically, I am using a Character Controller to do this. Here is the code that I am using:
var speed : float = 6.0;
var jumpSpeed : float = 100.0;
var gravity : float = 25.0;
private var moveDirection : Vector3 = Vector3.zero;

function PlayerController(){
	var controller : CharacterController = GetComponent(CharacterController);
	moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
	moveDirection = transform.TransformDirection(moveDirection);
	moveDirection *= speed;
	if (controller.isGrounded) {
		if (Input.GetButtonDown ("Jump")) {
			moveDirection.y = jumpSpeed;
		}
	}
	moveDirection.y -= gravity * Time.deltaTime;
	controller.Move(moveDirection * Time.deltaTime);
}

Now this works fine in terms of moving, but for jumping, not so much. I want my game to have somewhat realistic gravity, so I turned it up in the Unity Editor to 125. This makes a pretty realistic gravity effect, but the jumping screws up then. Basically, I would have to put the jumpSpeed to like 100 for the character to actually move up, and when it does it almost teleports up and then falls down. What I need is a good jumping fade, like the First Person Controller that Unity comes with.

Any help is appreciated,

  • william9518

I fixed it.

 var speed : float = 6.0;
    var jumpSpeed : float = 100.0;
    var gravity : float = 25.0;
    private var moveDirection : Vector3 = Vector3.zero;
    private var vSpeed : float = 0;
    
    function PlayerController(){
    	var controller : CharacterController = GetComponent(CharacterController);
    	moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
    	moveDirection = transform.TransformDirection(moveDirection);
    	moveDirection *= speed;
    	if (controller.isGrounded) {
    		vSpeed = -1;
    		if (Input.GetButtonDown ("Jump")) {
    			vSpeed = jumpSpeed;
    		}
    	}
    	vSpeed -= gravity * Time.deltaTime;
    	moveDirection.y = vSpeed;
    	controller.Move(moveDirection * Time.deltaTime);
    	Debug.Log("Grounded: " + controller.isGrounded + " vSpeed: " + vSpeed);
    }