Table of Contents

Class VehicleWheel3D

Namespace
Godot
Assembly
GodotSharp.dll

A node used as a child of a VehicleBody3D parent to simulate the behavior of one of its wheels. This node also acts as a collider to detect if the wheel is touching a surface.

Note: This class has known issues and isn't designed to provide realistic 3D vehicle physics. If you want advanced vehicle physics, you may need to write your own physics integration using another PhysicsBody3D class.

public class VehicleWheel3D : Node3D, IDisposable
Inheritance
VehicleWheel3D
Implements
Inherited Members

Constructors

VehicleWheel3D()

public VehicleWheel3D()

Properties

Brake

Slows down the wheel by applying a braking force. The wheel is only slowed down if it is in contact with a surface. The force you need to apply to adequately slow down your vehicle depends on the Mass of the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 30 range for hard braking.

public float Brake { get; set; }

Property Value

float

DampingCompression

The damping applied to the spring when the spring is being compressed. This value should be between 0.0 (no damping) and 1.0. A value of 0.0 means the car will keep bouncing as the spring keeps its energy. A good value for this is around 0.3 for a normal car, 0.5 for a race car.

public float DampingCompression { get; set; }

Property Value

float

DampingRelaxation

The damping applied to the spring when relaxing. This value should be between 0.0 (no damping) and 1.0. This value should always be slightly higher than the DampingCompression property. For a DampingCompression value of 0.3, try a relaxation value of 0.5.

public float DampingRelaxation { get; set; }

Property Value

float

EngineForce

Accelerates the wheel by applying an engine force. The wheel is only sped up if it is in contact with a surface. The Mass of the vehicle has an effect on the acceleration of the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 50 range for acceleration.

Note: The simulation does not take the effect of gears into account, you will need to add logic for this if you wish to simulate gears.

A negative value will result in the wheel reversing.

public float EngineForce { get; set; }

Property Value

float

Steering

The steering angle for the wheel, in radians. Setting this to a non-zero value will result in the vehicle turning when it's moving.

public float Steering { get; set; }

Property Value

float

SuspensionMaxForce

The maximum force the spring can resist. This value should be higher than a quarter of the Mass of the VehicleBody3D or the spring will not carry the weight of the vehicle. Good results are often obtained by a value that is about 3× to 4× this number.

public float SuspensionMaxForce { get; set; }

Property Value

float

SuspensionStiffness

This value defines the stiffness of the suspension. Use a value lower than 50 for an off-road car, a value between 50 and 100 for a race car and try something around 200 for something like a Formula 1 car.

public float SuspensionStiffness { get; set; }

Property Value

float

SuspensionTravel

This is the distance the suspension can travel. As Godot units are equivalent to meters, keep this setting relatively low. Try a value between 0.1 and 0.3 depending on the type of car.

public float SuspensionTravel { get; set; }

Property Value

float

UseAsSteering

If true, this wheel will be turned when the car steers. This value is used in conjunction with Steering and ignored if you are using the per-wheel Steering value instead.

public bool UseAsSteering { get; set; }

Property Value

bool

UseAsTraction

If true, this wheel transfers engine force to the ground to propel the vehicle forward. This value is used in conjunction with EngineForce and ignored if you are using the per-wheel EngineForce value instead.

public bool UseAsTraction { get; set; }

Property Value

bool

WheelFrictionSlip

This determines how much grip this wheel has. It is combined with the friction setting of the surface the wheel is in contact with. 0.0 means no grip, 1.0 is normal grip. For a drift car setup, try setting the grip of the rear wheels slightly lower than the front wheels, or use a lower value to simulate tire wear.

It's best to set this to 1.0 when starting out.

public float WheelFrictionSlip { get; set; }

Property Value

float

WheelRadius

The radius of the wheel in meters.

public float WheelRadius { get; set; }

Property Value

float

WheelRestLength

This is the distance in meters the wheel is lowered from its origin point. Don't set this to 0.0 and move the wheel into position, instead move the origin point of your wheel (the gizmo in Godot) to the position the wheel will take when bottoming out, then use the rest length to move the wheel down to the position it should be in when the car is in rest.

public float WheelRestLength { get; set; }

Property Value

float

WheelRollInfluence

This value affects the roll of your vehicle. If set to 1.0 for all wheels, your vehicle will resist body roll, while a value of 0.0 will be prone to rolling over.

public float WheelRollInfluence { get; set; }

Property Value

float

Methods

GetContactBody()

Returns the contacting body node if valid in the tree, as Node3D. At the moment, GridMap is not supported so the node will be always of type PhysicsBody3D.

Returns null if the wheel is not in contact with a surface, or the contact body is not a PhysicsBody3D.

public Node3D GetContactBody()

Returns

Node3D

GetRpm()

Returns the rotational speed of the wheel in revolutions per minute.

public float GetRpm()

Returns

float

GetSkidinfo()

Returns a value between 0.0 and 1.0 that indicates whether this wheel is skidding. 0.0 is skidding (the wheel has lost grip, e.g. icy terrain), 1.0 means not skidding (the wheel has full grip, e.g. dry asphalt road).

public float GetSkidinfo()

Returns

float

HasGodotClassMethod(in godot_string_name)

Check if the type contains a method with the given name. This method is used by Godot to check if a method exists before invoking it. Do not call or override this method.

protected override bool HasGodotClassMethod(in godot_string_name method)

Parameters

method godot_string_name

Name of the method to check for.

Returns

bool

HasGodotClassSignal(in godot_string_name)

Check if the type contains a signal with the given name. This method is used by Godot to check if a signal exists before raising it. Do not call or override this method.

protected override bool HasGodotClassSignal(in godot_string_name signal)

Parameters

signal godot_string_name

Name of the signal to check for.

Returns

bool

InvokeGodotClassMethod(in godot_string_name, NativeVariantPtrArgs, out godot_variant)

Invokes the method with the given name, using the given arguments. This method is used by Godot to invoke methods from the engine side. Do not call or override this method.

protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)

Parameters

method godot_string_name

Name of the method to invoke.

args NativeVariantPtrArgs

Arguments to use with the invoked method.

ret godot_variant

Value returned by the invoked method.

Returns

bool

IsInContact()

Returns true if this wheel is in contact with a surface.

public bool IsInContact()

Returns

bool