Kenney Starter Kit Racing

Topology
SHARED AUTHORITY

Overview

This sample takes the open-source Starter Kit Racing by Kenney and adds online multiplayer with Photon Fusion. Players connect to a shared room, each spawning a vehicle on a separate lane. Vehicle physics are replicated Fusion and use forecast prediction locally on every client.

Multiplayer gameplay
Multiplayer gameplay

Download

VersionRelease DateDownload
3.0.03月 27, 2026Fusion Godot Starter Kit Racing

Rolling Sphere Physics

The original Kenney demo uses a clever trick for vehicle physics: instead of simulating individual wheels, each vehicle is a single RigidBody3D with a rolling sphere collider. The visible car model is a child that follows the sphere and aligns itself to the ground via a RayCast3D.

Rolling sphere diagram
Rolling sphere diagram

This approach is simple and stable. Steering is applied as angular velocity on the sphere, acceleration as a linear force, and ground alignment is handled by the raycast normal. The result feels like arcade kart racing without any of the complexity of a full wheel-based suspension model.

Key physics settings on the VehicleSphere (RigidBody3D):

Property Value Purpose
mass 1000 Heavy enough for stable ground contact
gravity_scale 1.5 Snappier landings after jumps
angular_damp 4.0 Prevents excessive spin after collisions
linear_damp 0.1 Light air resistance for natural deceleration

Physics Replication with Forecast Prediction

Each vehicle uses Fusion's forecast replication mode to keep remote vehicles smooth and in sync over the same timing reference. Between network updates, remote clients predict where the vehicle should be using its velocity and small corrections adjust any drift. When the next update arrives, new data can be used to further correct, and so on.

Root node position, rotation, linear velocity and angular velocity are synced automatically by the FusionReplicator in AUTO mode. Besides this, only three other properties are replicated per vehicle:

Property Description
net_input_x Steering input (-1 to 1)
net_input_z Throttle/brake input (-1 to 1)
net_yaw Vehicle heading in radians

This keeps bandwidth minimal - the three custom properties plus the auto-synced physics state give every client enough information to run a smooth local simulation.

Network Setup

The multiplayer integration is minimal by design.

Connecting: A reusable FusionConnectUI widget handles connection and room management.
Players join a room and the UI displays connection status, RTT and local player ID.

Spawning: A FusionSpawner in the main scene spawns a vehicle for each player when they join the room.
Vehicles are positioned in separate lanes based on player_id to avoid spawn collisions.

GDScript

func _on_room_joined():
    vehicle = vehicle_spawner.spawn()
    vehicle.position = Vector3(player_id * 4.0, 2.0, 0.0)
Scene tree
Scene tree

Authority: Each player has authority over their own vehicle. Only the authority owner reads input and updates the replicated properties. Remote clients receive these values and both run the same physics locally, with forecast smoothing handling any discrepancy.

Controls

Key Action
W Accelerate
S Brake / Reverse
A Steer left
D Steer right

Gamepad is also supported (left stick for steering, triggers for throttle and brake).

3rd Party Assets

Back to top