Not Floored and gravity increments when I'm stuck between on a wall and an edge

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By KramchayDig

I discovered a problem when I’m standing between on an edge and a wall the gravity increments and I get stuck in there movement controls becomes stiff by the force of the gravity still falling. I waited for the gravity to increment and later destroy the cube. I printed the velocity output on run time.

enter image description here

I made 2 code for the player controls and the obstacle a code to destroy to see the player would fall hard by the immense gravity values still increment.

Code for the Player:

extends KinematicBody

var velocity = Vector3(0,0,0)

export var SPEED : float = 8

const UP = Vector3(0,1,0)


func _physics_process(delta):

var g = Vector3(0,-39.8,0)

velocity += g * delta

if Input.is_action_pressed("right") and Input.is_action_pressed("left"):
	velocity.x = 0
elif Input.is_action_pressed("right"):
	velocity.x = SPEED
elif Input.is_action_pressed("left"):
	velocity.x = -SPEED
else:
	velocity.x = lerp(velocity.x,0,.75)

if Input.is_action_pressed("forward") and Input.is_action_pressed("backward"):
	velocity.z = 0
elif Input.is_action_pressed("backward"):
	velocity.z = SPEED
elif Input.is_action_pressed("forward"):
	
	velocity.z = -SPEED
else:
	velocity.z = lerp(velocity.z,0,.75)

if is_on_floor():
	if Input.is_action_pressed("jump"):
		velocity.y = 18
		pass
	pass

velocity = move_and_slide(velocity, UP)
print(velocity)

pass

Code for the Obstacle cube:

extends StaticBody

func _process(delta):

if(Input.is_action_just_pressed("ui_up")):
	queue_free()
	pass

pass

hope to find answers for this problem it could be simple.

:bust_in_silhouette: Reply From: Dlean Jeans
  • Add a max_falling_speed:
    velocity.y = min(velocity.y, max_falling_speed)
  • Or only apply gravity if airborne:
    if not is_on_floor():
        velocity += g * delta
  • Or reset the vertical speed if on the ground:
    if is_on_floor():
        velocity.y = 0
  1. I don’t want the gravity to have a max falling speed I want it to continually increment
  2. Tried and doesn’t work
  3. That’s the problem it doesn’t tell you it’s on floor so the gravity still increment

KramchayDig | 2019-07-04 05:34

I got it now. 2 and 3 is from the same problem.

With the first solution, you can still have gradual falling but it just stops accelerating at a set point.
Unless it’s a mechanic or something, don’t design levels like that. It’s just unnecessarily creating problems for yourself.
Alternatively, consider using a cylinder shape.

Dlean Jeans | 2019-07-04 09:16

There’s no solution for the capsule? Maybe their capsule collision shape must have some bugs in the engine I assumed. Probably report it to the Godot devs. In the 2D world I did the same thing between a wall and an edge the gravity still falls but it doesn’t increment gravity so I don’t get any stiff movement controls and I can walk back up to the platform. At some point in the 3D world when I run the game again the problem was supposed to be gone I was able to walk around, movement didn’t became stiff and gravity became natural but again I ran the game the problem came back and it’s not going away anymore. I want to use a capsule shaped collision so I can walk to edges perhaps my solution with a capsule is I’ll avoid placing these kind of obstacles so happening won’t come into play.

KramchayDig | 2019-07-04 12:17