[SOLVED] Third person jump

is there a tutorial for jumping on third person?

Hi @Unavailable,

So, you can take the default third person controller example from the Tutorials page and add jumping by binding a keyboard key (e.g. KEY_SPACE) to a method that applies an impulse upward (applyImpulse).

Search for jumping in the forum you will find a lot of similar posts.

Two things you will have to take care:

  • Add a jumping animation that starts at the same time
  • Play the animation once without looping it until the character falls back to the floor or on another object (check for collision).
if (this.app.keyboard.wasPressed(pc.KEY_SPACE)) {
        if (this.jumping.state === false) {
            this.entity.rigidbody.applyImpulse(0, this.jumpPower, 0);
            this.jumping.state = true;
    } else if (this.jumping.state === true) {
        if (this._checkBelow() !== null) {
            this.jumping.state = false;

PlayerMovement.prototype._checkBelow = function() {
    return this.app.systems.rigidbody.raycastFirst(this.entity.getPosition(), this.raycastPlayerBase.getPosition());

I’ve added this but can only jump 1 times

So, try debugging your _checkBelow method, what does it return and when does it run?

I think what you are looking for isn’t if there is a floor below the character (raycasts have infinite length) but if you are touching it. What I would do in that method is get the result of that raycast and check the distance from the object it returned. If it’s smaller than a margin it means the player is touching it.

Also you need to change the ray direction to start from the player’s position and shoot straight down:

var start = this.entity.getPosition();
var end = start.clone();
end.y -= 10; // put here any number larger than the max jump height
var result = this.app.systems.rigidbody.raycastFirst(start, end);

// now check the distance from the result, if there is one (homework!)
1 Like

thanks it worked. but why when I press SPACEBAR many times my character can jump many times like flying

Make sure that you don’t allow a second jump before the previous hasn’t finished.

thank you it worked

1 Like

Is there any way you could paste the script in for this? Im trying to follow what you did but its not working.


Maybe the script from my example project can help you as well.