# How do I restrict the movement to the horizontal axes?

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.

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):
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