How do I restrict the movement to the horizontal axes?

Godot Version



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

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.

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
		velocity.x = move_toward(velocity.x, 0, SPEED)
		velocity.z = move_toward(velocity.z, 0, SPEED)

1 Like

Thanks!! It works fine for me rn.

1 Like