I'm following along with a retro FPS tutorial and whenever I finish the player movement portion my character falls through the ground. I've followed the instructions word for word and the guy giving the tutorial has no issue. Here's the character's code
extends KinematicBody
export var mouse_sens = 0.5
onready var camera = $Camera
onready var character_mover = $CharacterMover
func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
character_mover.init(self)
func _process(_delta):
if Input.is_action_just_pressed("exit"):
get_tree().quit()
var move_vec = Vector3()
if Input.is_action_pressed("move_forward"):
move_vec += Vector3.FORWARD
if Input.is_action_pressed("move_backword"):
move_vec += Vector3.BACK
if Input.is_action_pressed("move_left"):
move_vec += Vector3.LEFT
if Input.is_action_pressed("move_right"):
move_vec += Vector3.RIGHT
character_mover.set_move_vec(move_vec)
if Input.is_action_just_pressed("jump"):
character_mover.jump()
func _input(event):
if event is InputEventMouseMotion:
rotation_degrees.y -= mouse_sens * event.relative.x
camera.rotation_degrees.x -= mouse_sens * event.relative.y
camera.rotation_degrees.x = clamp(camera.rotation_degrees.x, -90, 90)
And the movement code itself:
extends Spatial
var body_to_move : KinematicBody = null
export var move_accel = 4
export var max_speed = 25
var drag = 0.0
export var jump_force = 30
export var gravity = 60
var pressed_jump = false
var move_vec : Vector3
var velocity : Vector3
var snap_vec : Vector3
export var ignore_rotation = false
signal movement_info
var frozen = false
func _ready():
drag = float(move_accel) / max_speed
func init(_body_to_move: KinematicBody):
body_to_move = _body_to_move
func jump():
pressed_jump = true
func set_move_vec(_move_vec: Vector3):
move_vec = _move_vec.normalized()
func _physics_process(delta):
if frozen:
return
var cur_move_vec = move_vec
if !ignore_rotation:
cur_move_vec = cur_move_vec.rotated(Vector3.UP,body_to_move.rotation.y)
velocity += move_accel * cur_move_vec - velocity * Vector3(drag, 0, drag) + gravity * Vector3.DOWN * delta
velocity = body_to_move.move_and_slide_with_snap(velocity, snap_vec, Vector3.UP)
var grounded = body_to_move.is_on_floor()
if grounded:
velocity.y = -0.01
if grounded and pressed_jump:
velocity.y = jump_force
snap_vec = Vector3.ZERO
else:
snap_vec = Vector3.DOWN
pressed_jump = false
emit_signal("movement_info")
func freeze():
frozen = true
func unfreeze():
frozen = false
Any help is greatly appreciated