How do I restrict the movement to the horizontal axes?

Godot Version

4.0

Question

Hi, I’m trying to make a simple game, and I want my character to only move left and right. I’ve been looking for the right script, but I only found this one:

func _physics_process(delta):
var direction = Input.get_vector(“ui_left”,“ui_right”,“ui_up”,“ui_down”
velocity = direction * 200
move_and_slide()

If you have any ideas, let me know.

The horizontal axis is the x axis, vertical is y. You could take this script and make velocity.y = 0 before move_and_slide() to remove most vertical movement. The name of the function move_and_slide() might hint at how one could slide up a slope, but that is up to your level design.

1 Like

Let’s say you got the difficult one. Character 3D.
Right click. Select attach Script.
Make your selection like this.
jd9

You’re only going to get this in the script.

extends CharacterBody3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5

# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _physics_process(delta):
	# Add the gravity.
	if not is_on_floor():
		velocity.y -= gravity * delta

	# Handle Jump.
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = JUMP_VELOCITY

	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
	var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
	if direction:
		velocity.x = direction.x * SPEED
		velocity.z = direction.z * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
		velocity.z = move_toward(velocity.z, 0, SPEED)

	move_and_slide()
1 Like

Thanks!! It works fine for me rn.

1 Like