- Home /
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
Answer by william9518 · Nov 20, 2013 at 02:20 AM
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);
     }
 
Your answer
 
 
             Follow this Question
Related Questions
Best way to implement jump method for character controller 1 Answer
Player Inconsistent Jumps 0 Answers
Why won't this jump code work? 1 Answer
Jumping not always work 2 Answers
,How to disable autojumping when holding spacebar? 4 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                