Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions movement/3d_fps/all.texture_profiles
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
path_settings {
path: "**"
profile: "Default"
}
profiles {
name: "Default"
platforms {
os: OS_ID_GENERIC
formats {
format: TEXTURE_FORMAT_RGBA
compression_level: BEST
compression_type: COMPRESSION_TYPE_DEFAULT
}
mipmaps: false
max_texture_size: 0
premultiply_alpha: true
}
}
Binary file added movement/3d_fps/collection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
53 changes: 53 additions & 0 deletions movement/3d_fps/example.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
tags: movement
title: First-person 3D camera and movement
brief: Control a first-person camera using WASD and mouse to look with cursor lock.
author: Defold Foundation
scripts: character_controller.script
thumbnail: collection.png
---

This example shows how to build a simple first-person controller for a 3D scene. You can look around with the mouse and move on the XZ plane using the keyboard (WSAD).

## What you'll learn?
- How to implement a FPP camera with mouse to look around.
- How to lock/unlock the mouse cursor for immersive camera control.
- How to move on a simple XZ plane logic with keyboard input.

## Controls
| Input | Action |
|------------------------|------------------------------------------------------|
| Left mouse click | Lock the cursor and enable mouse look |
| Mouse movement | Rotate camera |
| `Esc` | Unlock the cursor |
| `W`/`S`/`A`/`D` | Move forward/backward/left/right on the ground plane |

## How it works?
When the cursor is locked, the script reads mouse movement deltas and rotates the camera accordingly. Movement is normalized to keep a consistent speed in all directions and is clamped within a square area so you cannot wander off the demo scene.

Example collection consists of 3 main parts:

- `character` - The player character game object includes:
- A *script* `character_controller.script` component that implements mouse look, cursor lock/unlock, and WASD movement.
- A *camera* component configured with perspective projection.

- `scene` - the models used to create a basic 3D environment:
- Ground plane scaled to form a walkable area with prototype texture
- Walls built from simple cube models with prototype textures
- Some decorative trees

- `gui` - An on-screen GUI with short instructions.

![](collection.png)

### Assets
Tree models with textures by Kay Louseberg: https://kaylousberg.itch.io/kaykit-forest
Prototype textures for Defold by Visionaire: https://github.com/Thevisionaire1/3Deforms

## Script

Tuning parameters are defined at the top of `character_controller.script`:
- `look_sensitivity` (degrees per pixel) controls how fast the camera rotates
- `move_speed` (world units per second) controls walking speed
- `move_limit` (half-size in world units) clamps movement within bounds

Loading