How to Make an FPS Controller in Godot

Welcome to the step-by-step tutorial on creating an FPS (First Person Shooter) controller in Godot Engine! In this tutorial, we'll walk you through the process of building your own FPS controller from scratch, providing detailed instructions and working code examples.

Step 1: Setting Up the Project

Start by creating a new project in Godot Engine. Choose a suitable name and location for your project, then click "Create". Once your project is set up, navigate to the "Scene" tab and create a new scene for your FPS controller.

Step 2: Adding Player Character

Add a player character to your scene by creating a new "KinematicBody" or "RigidBody" node. This node will represent the player in the game world. Attach a camera node to the player character to provide the first-person perspective.

Step 3: Implementing Player Movement

Implement player movement using GDScript. Capture input events such as keyboard presses or mouse movements to move the player character forward, backward, left, and right. Apply movement using the player character's "move_and_slide()" function.

func _process(delta):
    var direction = Vector3()
    if Input.is_action_pressed("move_forward"):
        direction.z -= 1
    if Input.is_action_pressed("move_backward"):
        direction.z += 1
    if Input.is_action_pressed("move_left"):
        direction.x -= 1
    if Input.is_action_pressed("move_right"):
        direction.x += 1
    direction = direction.normalized() * speed
    direction.y = -9.8
    move_and_slide(direction, Vector3.UP)

Step 4: Adding Mouse Look

Implement a mouse look to allow the player to look around using the mouse. Capture mouse movement events and rotate the camera node accordingly to simulate the first-person perspective.

func _input(event):
    if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
        var sensitivity = 0.2
        var rotation = -event.relative.x * sensitivity
        rotation.y += -event.relative.y * sensitivity
        rotation.x = clamp(rotation.x, -90, 90)

Step 5: Implementing Shooting

Add shooting functionality to the FPS controller. Capture input events to detect when the player presses the fire button. Instantiate a projectile object and apply velocity in the direction the player is facing to simulate shooting.

Step 6: Testing and Tweaking

Test your FPS controller in the game environment to ensure smooth movement, accurate mouse look, and responsive shooting mechanics. Tweak parameters such as movement speed, mouse sensitivity, and shooting mechanics as needed to fine-tune the gameplay experience.


You've completed the step-by-step guide on creating an FPS controller in Godot Engine. This tutorial provided detailed instructions and working code examples for setting up the project, adding player characters, implementing player movement, mouse look, shooting mechanics, and testing the FPS controller. Now, continue exploring Godot's features and customize your FPS controller to create immersive first-person shooter games!

Suggested Articles
Understanding Nodes, Scenes, and Scripts in Godot
The Game-Changer in Game Development
Top Code Snippets for Godot Engine
Godot Networking Basics
Understanding Physics Joints in Godot
Implementing Save Systems in Godot
Illuminating Your 2D Game World in Godot