+1 vote

Hello!
I created a 3D character using kinematic body(3D) . Now i want to make my character jump and then fall on the ground(gravity). See the code

``````extends KinematicBody

var velocity = Vector3.ZERO
var gravity = 100
func _physics_process(delta):
if Input.is_action_ just_pressed("jump"):
velocity.y = 10
velocity.y += gravity *delta
move_and_slide(velocity)
``````

with this code my player jumps but it does not fall back instead it gets stucked in the middle.Now i want to know how to add gravity -

in Engine

What you see happens because you are only adding gravity when you jumped, so the gravity is not added when already on air. Also, move and slide is only being called inside the if where you jump... try something like this:

``````extends KinematicBody

var velocity = Vector3.ZERO
var gravity = 100
func _physics_process(delta):
if Input.is_action_ just_pressed("jump") and is_on_floor():
velocity.y = 10

velocity.y += gravity *delta
velocity = move_and_slide(velocity, Vector3.UP)
``````

Note that i moved the last two lines outside the if, and also, added a check to see if the body is on floor before jumping, to avoid jumping in middle air. Also, you should update velocity with `move_and_slide` so gravity doesnt sum up while on floor.

Edited as people in comments noted it was missing up direction

by (3,394 points)
edited by

hello!
thanks for your answer but now it is going upward without any Input press and it is not stopping.

Thanks!
I have figured out this problem . Thank you for solution

Yiu are welcome! If the answer worked for you, you may select it so others can see its solved!

``````velocity = move_and_slide(velocity, Vector3.UP)
``````

isonfloor() will always return false if the up direction isnt specified

p7f