My kinematicbody walks infinitely

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Rares123
extends KinematicBody
var speed=10

var mouse_sensitivity=0.5
var direction=Vector3.ZERO
onready var head=$Head
func _ready():
	if Input.is_action_pressed("ui_cancel"):
		Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _input(event):
	if event is InputEventMouseMotion:
		rotate_y(deg2rad(-event.relative.x*mouse_sensitivity))
		head.rotate_x(deg2rad(-event.relative.y*mouse_sensitivity))
		head.rotation.x=clamp(head.rotation.x,deg2rad(-90),deg2rad(90))
func _process(delta):
	Vector3.ZERO
	if Input.is_action_pressed("mf"):
		direction-=transform.basis.z
	elif Input.is_action_pressed("b"):
		direction+=transform.basis.z
	direction=direction.normalized()
	move_and_slide(direction*speed,Vector3.UP)
:bust_in_silhouette: Reply From: Nitsuga

You have to put direction = Vector3.ZERO before adding or subtracting an direction or it will continue to increase or decrease eternally.

func _process(delta):
direction  = Vector3.ZERO
if Input.is_action_pressed("mf"):
    direction-=transform.basis.z
elif Input.is_action_pressed("b"):
    direction+=transform.basis.z
direction=direction.normalized()
move_and_slide(direction*speed,Vector3.UP)