- 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