Skip to content
Open
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
4 changes: 4 additions & 0 deletions automated_updates_data.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@
{
"date": "2026-02-24",
"summary": "Fixed custom behavior lifecycle method names (onStepPreEvents/onStepPostEvents → doStepPreEvents/doStepPostEvents) and updated collisions doc to reference Physics 2 instead of deprecated Physics behavior"
},
{
"date": "2026-02-26",
"summary": "Filled in Physics 3D 'Concepts used in Physics' placeholder with body types, collision shapes, key properties, layers/masks, forces/impulses, and world scale; improved Network docs with async clarification, HTTP methods, content-type guidance, and error handling; fixed tilemap typo"
}
]
}
14 changes: 9 additions & 5 deletions docs/gdevelop5/all-features/network/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@ Games and applications work similarly to send or get data to a server:
* they send a request to a specific address (also called an endpoint). Optionally, the request can include parameters.
* the server sends back a response. The set of all requests that are handled by a server is sometimes called an API.

In addition to the address and the parameters, HTTP requests can have a "verb" associated as well. Requests to get data or fetch a webpage are usually "GET" requests. Requests to post data are usually "POST" requests.
In addition to the address and the parameters, HTTP requests can have a "verb" (also called a method) associated with them. Requests to get data or fetch a webpage are usually "GET" requests. Requests to create data are usually "POST" requests. Other common methods include PUT (replace data), PATCH (partially update data), and DELETE (remove data).

GDevelop provides the action called "Send a request to a web page". You can specify the host and the path to the API/web page to be called (for example, if your "endpoint" is `https://mygame.com/api/store-score`, the host is `https://mygame.com` and the path is `/api/store-score` (don't forget the slash /)). You can also specify the content of the request (the parameter that will be received by the server).
GDevelop provides the action called "Send a request to a web page". You can specify the host and the path to the API/web page to be called (for example, if your "endpoint" is `https://mygame.com/api/store-score`, the host is `https://mygame.com` and the path is `/api/store-score` (don't forget the slash /)). You can also specify the HTTP method (GET, POST, PUT, DELETE, PATCH…), the content of the request, an optional content type (for example `application/json`), and two variables: one to receive the response body, and one to capture any error.

When the server sends the response, it is saved in a variable so that you can read what was sent.
!!! note

This action is **asynchronous**: the game continues running while the request is in progress. The response variable is populated once the server replies. To react to the response, check the variable in your events on subsequent frames (for example, with a condition "Value of variable ≠ empty string" or by checking the error variable is empty).

If the request fails or the server returns an HTTP status ≥ 400, the error variable is set to the HTTP status code. If the request could not be sent at all (no network, CORS issue, etc.), it is set to `"REQUEST_NOT_SENT"`. Always check the error variable when your game logic depends on the result.

## How to format the content

Expand All @@ -28,9 +32,9 @@ When the server sends the response, it is saved in a variable so that you can re
You can send data from a variable, for example:
`"score=" + VariableString(Score) + "&playerName=" + VariableString(Name)`

* For POST requests, it depends on what is expected by the server, but most of the time the server expects JSON formatted text.
* For POST requests, it depends on what is expected by the server, but most of the time the server expects JSON formatted text. In this case, also set the **content type** to `application/json` in the action.

You can either construct it yourself:
You can either construct the JSON yourself:
`"{\"score\": " + VariableString(Score) + " }"` (note the use of backslash before the quote `\"`, to allow the quote to be used inside a text) or use the expression to convert a variable structure to JSON: `ToJSON(VariableWithData)` (see more about this below).

## Converting variables to JSON and back to variables
Expand Down
54 changes: 51 additions & 3 deletions docs/gdevelop5/behaviors/physics3d/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ When you want objects to be kicked out and fall, you should set the **Type** to

## Move platforms or enemies

Platforms and enemies usually loop on the same path. They must not fall be pushed by other objects.
Platforms and enemies usually loop on the same path. They must not fall or be pushed by other objects.
Objects with the **Kinematic** type won't be moved according to physics rules. They can only be moved by changing their **linear velocity** and **angular velocity**. They can interact with other objects but only these other objects will move.
The [3D ellipse movement](/gdevelop5/extensions/physics-ellipse-movement3d/) behavior allow to easily move objects on ellipses or smoothly back and forth in one direction.

Expand Down Expand Up @@ -158,8 +158,56 @@ The **max engine torque** allows to climb slopes faster.

## Concepts used in Physics

This section is being written and will be available soon.
In the meantime, you can refer to the descriptions for the [2D Physics Engine](/gdevelop5/behaviors/physics2/) as most concepts are the same.
### Body types

Every 3D physics object has a **Type** that determines how it interacts with the physics simulation:

- **Static**: Never moves. Use it for floors, walls, and fixed obstacles. Other objects can collide with it but it cannot be pushed or affected by forces.
- **Dynamic**: Fully simulated — affected by gravity, forces, impulses, and collisions. Use it for objects that should fall, roll, or be knocked around.
- **Kinematic**: Moves only when you explicitly set its linear or angular velocity. It can push Dynamic objects on contact, but it is never pushed back. Use it for moving platforms, elevators, and enemies following a path.

### Collision shapes

The **Shape** property defines the collision volume used by the physics engine. Simpler shapes are faster and more stable than complex ones:

- **Box**: A rectangular prism. You can set custom width, height, and depth. Good default choice for most objects.
- **Sphere**: A perfect sphere defined by a radius. Very performant and stable, great for balls or rounded objects.
- **Capsule**: A cylinder with hemispherical caps, defined by a radius and height. Recommended for characters — it slides smoothly over steps and slopes without getting stuck.
- **Cylinder**: A flat-ended cylinder with radius and height.
- **Mesh**: Uses the actual geometry of the 3D model as the collision shape. Only works with **Static** objects and is useful for complex terrain or buildings.

All shapes can have a custom **size offset** and a **position offset** (shapeOffsetX/Y/Z) to fine-tune the collision volume independently from the visual representation.

### Key physics properties

| Property | Description |
|---|---|
| **Density** | Determines the object's mass relative to its volume. Higher density = heavier object. |
| **Mass override** | Set a fixed mass in kilograms, ignoring density. Use `0` to rely on density instead. |
| **Friction** | Resistance to sliding between two surfaces in contact. Combined as `sqrt(A × B)`. |
| **Restitution** | Bounciness on collision. `0` = no bounce, `1` = perfectly elastic. Combined as `max(A, B)`. |
| **Linear damping** | Slows down linear movement over time (simulates air resistance). |
| **Angular damping** | Slows down rotation over time. |
| **Gravity scale** | Multiplier applied to world gravity for this object. `0` = no gravity, `2` = twice as strong. |
| **Fixed rotation** | Prevents the object from rotating due to physics forces. |
| **Bullet** | Enables more accurate collision detection for fast-moving objects (at a performance cost). |

### Collision layers and masks

Objects can be assigned to **layers** and given **masks** to filter which objects they collide with:

- An object only collides with another if at least one of its **layers** matches one of the other object's **masks**, and vice versa.
- This allows creating groups of objects that ignore each other (for example, projectiles from the same team, or ghost objects that pass through walls).

### Forces and impulses

- **Forces** are applied continuously every frame and accelerate an object gradually. Use them for things like a rocket thruster.
- **Impulses** apply an instant velocity change. Use them for a single event like a jump or an explosion.
- **Torques** and **angular impulses** work the same way, but for rotation.

### World scale

The **world scale** (pixels per meter) converts between GDevelop's pixel coordinates and the physics engine's real-world meters. The default is **100 pixels = 1 meter**. Setting a realistic scale is especially important for vehicles and character movement, as it ensures gravity, friction, and collision forces feel natural.


## Reference
Expand Down
2 changes: 1 addition & 1 deletion docs/gdevelop5/objects/tilemap/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ GDevelop supports a subset of Tiled and LDtk features:

- Click the **Layers** button or press **L** on the keyboard. The **Project Layers** window will display.
- Click the plus **+** button to add a new layer. A selection menu will display.
* While there are many layer types, this tutorial will only cover the standard Tiles layer. Entities are not imported at this time, whiel IntGrid and Auto-Layers are much more advanced and should be learned about at [ldtk.io](https://ldtk.io)
* While there are many layer types, this tutorial will only cover the standard Tiles layer. Entities are not imported at this time, while IntGrid and Auto-Layers are much more advanced and should be learned about at [ldtk.io](https://ldtk.io)
- Click the **Tiles** option.
- Within the **Layer identifier** field, type a name.
- Select the desired tileset from the dropdown list.
Expand Down