VehicleWheel3D

Hereda: Node3D < Node < Object

Un cuerpo físico 3D para un VehicleBody3D que simula el comportamiento de una rueda.

Descripción

Un nodo usado como hijo de un padre VehicleBody3D para simular el comportamiento de una de sus ruedas. Este nodo también actúa como un colisionador para detectar si la rueda está tocando una superficie.

Nota: Esta clase tiene problemas conocidos y no está diseñada para proporcionar una física de vehículos 3D realista. Si quieres una física de vehículos avanzada, puede que tengas que escribir tu propia integración de física usando otra clase PhysicsBody3D.

Tutoriales

Propiedades

float

brake

0.0

float

damping_compression

0.83

float

damping_relaxation

0.88

float

engine_force

0.0

PhysicsInterpolationMode

physics_interpolation_mode

2 (overrides Node)

float

steering

0.0

float

suspension_max_force

6000.0

float

suspension_stiffness

5.88

float

suspension_travel

0.2

bool

use_as_steering

false

bool

use_as_traction

false

float

wheel_friction_slip

10.5

float

wheel_radius

0.5

float

wheel_rest_length

0.15

float

wheel_roll_influence

0.1

Métodos

Node3D

get_contact_body() const

Vector3

get_contact_normal() const

Vector3

get_contact_point() const

float

get_rpm() const

float

get_skidinfo() const

bool

is_in_contact() const


Descripciones de Propiedades

float brake = 0.0 🔗

Ralentiza la rueda aplicando una fuerza de frenado. La rueda sólo se ralentiza si está en contacto con una superficie. La fuerza que debe aplicar para desacelerar adecuadamente su vehículo depende de la RigidBody3D.mass del vehículo. Para un vehículo con una masa fijada en 1000, intente un valor en el rango de 25 - 30 para un frenado fuerte.


float damping_compression = 0.83 🔗

  • void set_damping_compression(value: float)

  • float get_damping_compression()

La amortiguación aplicada al resorte de la suspensión cuando se comprime, es decir, cuando la rueda se mueve hacia arriba en relación al vehículo. Se mide en Newton-segundos por milímetro (N⋅s/mm), o megagramos por segundo (Mg/s). Este valor debe estar entre 0.0 (sin amortiguación) y 1.0, pero puede ser mayor. Un valor de 0.0 significa que el coche seguirá rebotando mientras el resorte mantiene su energía. Un buen valor para esto es de alrededor de 0.3 para un coche normal, y 0.5 para un coche de carreras.


float damping_relaxation = 0.88 🔗

  • void set_damping_relaxation(value: float)

  • float get_damping_relaxation()

La amortiguación aplicada al resorte de la suspensión al rebotar o extenderse, es decir, cuando la rueda se mueve hacia abajo en relación con el vehículo. Se mide en Newton-segundos por milímetro (N⋅s/mm), o megagramos por segundo (Mg/s). Este valor debe estar entre 0.0 (sin amortiguación) y 1.0, pero puede ser mayor. Este valor siempre debe ser ligeramente superior a la propiedad damping_compression. Para un valor de damping_compression de 0.3, intenta un valor de relajación de 0.5.


float engine_force = 0.0 🔗

  • void set_engine_force(value: float)

  • float get_engine_force()

Acelera la rueda aplicando una fuerza del motor. La rueda sólo se acelera si está en contacto con una superficie. La RigidBody3D.mass del vehículo tiene un efecto en la aceleración del vehículo. Para un vehículo con una masa establecida en 1000, prueba un valor en el rango de 25 - 50 para la aceleración.

Nota: La simulación no tiene en cuenta el efecto de los engranajes, tendrás que añadir la lógica para esto si deseas simular los engranajes.

Un valor negativo hará que la rueda se invierta.


float steering = 0.0 🔗

  • void set_steering(value: float)

  • float get_steering()

El ángulo de dirección de la rueda, en radianes. Establecer este valor a uno distinto de cero hará que el vehículo gire cuando se esté moviendo.


float suspension_max_force = 6000.0 🔗

  • void set_suspension_max_force(value: float)

  • float get_suspension_max_force()

La fuerza máxima que el resorte puede resistir. Este valor debe ser superior a una cuarta parte de la RigidBody3D.mass del VehicleBody3D o el resorte no soportará el peso del vehículo. A menudo se obtienen buenos resultados con un valor que es aproximadamente 3× a 4× este número.


float suspension_stiffness = 5.88 🔗

  • void set_suspension_stiffness(value: float)

  • float get_suspension_stiffness()

La rigidez de la suspensión, medida en Newtons por milímetro (N/mm), o megagramos por segundo al cuadrado (Mg/s²). Utiliza un valor inferior a 50 para un coche todoterreno, un valor entre 50 y 100 para un coche de carreras y prueba algo alrededor de 200 para algo como un coche de Fórmula 1.


float suspension_travel = 0.2 🔗

  • void set_suspension_travel(value: float)

  • float get_suspension_travel()

Esta es la distancia que puede recorrer la suspensión. Como las unidades Godot equivalen a metros, mantén este ajuste relativamente bajo. Prueba con un valor entre 0,1 y 0,3 dependiendo del tipo de coche.


bool use_as_steering = false 🔗

  • void set_use_as_steering(value: bool)

  • bool is_used_as_steering()

Si es true, esta rueda se girará cuando el coche se dirija. Este valor se utiliza junto con VehicleBody3D.steering y se ignora si estás utilizando el valor por rueda steering en su lugar.


bool use_as_traction = false 🔗

  • void set_use_as_traction(value: bool)

  • bool is_used_as_traction()

Si es true, esta rueda transfiere la fuerza del motor al suelo para impulsar el vehículo hacia adelante. Este valor se utiliza junto con VehicleBody3D.engine_force y se ignora si estás utilizando el valor por rueda engine_force en su lugar.


float wheel_friction_slip = 10.5 🔗

  • void set_friction_slip(value: float)

  • float get_friction_slip()

Esto determina cuánto agarre tiene esta rueda. Se combina con el ajuste de la fricción de la superficie con la que la rueda está en contacto. 0.0 significa que no hay agarre, 1.0 es el agarre normal. Para una configuración de coche a la deriva, intente ajustar el agarre de las ruedas traseras ligeramente más bajo que el de las ruedas delanteras, o utiliza un valor más bajo para simular el desgaste de los neumáticos.

Lo mejor es ajustarlo a 1.0 al comenzar.


float wheel_radius = 0.5 🔗

  • void set_radius(value: float)

  • float get_radius()

El radio de la rueda en metros.


float wheel_rest_length = 0.15 🔗

  • void set_suspension_rest_length(value: float)

  • float get_suspension_rest_length()

Esta es la distancia en metros a la que se baja la rueda desde su punto de origen. No lo pongas a 0.0 y mueve la rueda a su posición, en su lugar mueve el punto de origen de tu rueda (el gizmo en Godot) a la posición que la rueda tomará al descender, luego usa la longitud de reposo para mover la rueda hacia abajo a la posición en la que debería estar cuando el auto esté en reposo.


float wheel_roll_influence = 0.1 🔗

  • void set_roll_influence(value: float)

  • float get_roll_influence()

Este valor afecta al balanceo de tu vehículo. Si se establece en 1.0 para todas las ruedas, tu vehículo resistirá el balanceo de la carrocería, mientras que un valor de 0.0 será propenso a volcar.


Descripciones de Métodos

Node3D get_contact_body() const 🔗

Devuelve el nodo del cuerpo en contacto si es válido en el árbol, como Node3D. Por el momento, GridMap no es compatible, por lo que el nodo siempre será de tipo PhysicsBody3D.

Devuelve null si la rueda no está en contacto con una superficie, o si el cuerpo en contacto no es un PhysicsBody3D.


Vector3 get_contact_normal() const 🔗

Devuelve la normal de la colisión de la suspensión en el espacio del mundo si la rueda está en contacto. Si la rueda no está en contacto con nada, devuelve un vector que apunta directamente a lo largo del eje de la suspensión hacia el vehículo en el espacio del mundo.


Vector3 get_contact_point() const 🔗

Devuelve el punto de la colisión de la suspensión en el espacio del mundo si la rueda está en contacto. Si la rueda no está en contacto con nada, devuelve el punto máximo del raycast de la rueda en el espacio del mundo, que se define por wheel_rest_length + wheel_radius.


float get_rpm() const 🔗

Devuelve la velocidad de rotación de la rueda en revoluciones por minuto.


float get_skidinfo() const 🔗

Devuelve un valor entre 0.0 y 1.0 que indica si esta rueda está patinando. 0.0 es patinar (la rueda ha perdido el agarre, por ejemplo, en un terreno helado), 1.0 significa no patinar (la rueda tiene un agarre total, por ejemplo, en una carretera de asfalto seco).


bool is_in_contact() const 🔗

Devuelve true si esta rueda está en contacto con una superficie.