Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

VehicleWheel3D

继承: Node3D < Node < Object

用于 VehicleBody3D 的 3D 物理体,能够模拟车轮的行为。

描述

作为 VehicleBody3D 子节点使用的节点,能够模拟车辆其中一个车轮的行为。这个节点还充当了碰撞器,能够检测车轮是否与某个表面接触。

注意:该类存在已知问题,并非旨在提供逼真的 3D 车辆物理效果。如果想要高级车辆物理,可能必须使用其他 PhysicsBody3D 类来编写自己的物理整合函数。

教程

属性

float

brake

0.0

float

damping_compression

0.83

float

damping_relaxation

0.88

float

engine_force

0.0

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

方法

Node3D

get_contact_body ( ) const

float

get_rpm ( ) const

float

get_skidinfo ( ) const

bool

is_in_contact ( ) const


属性说明

float brake = 0.0

  • void set_brake ( float value )

  • float get_brake ( )

通过施加制动力使车轮减速。车轮只有在与表面接触时才会减速。使车辆充分减速所需的力,取决于车辆的 RigidBody3D.mass。对于质量被设置为 1000 的车辆,尝试使用 25 - 30 范围内的值进行紧急制动。


float damping_compression = 0.83

  • void set_damping_compression ( float value )

  • float get_damping_compression ( )

当弹簧被压缩时,应用在弹簧上的阻尼。这个值应该在 0.0(无阻尼)和 1.0 之间。0.0 的值意味着汽车将持续弹跳,因为弹簧将保持其能量。普通汽车 0.3 左右,赛车 0.5 左右比较好。


float damping_relaxation = 0.88

  • void set_damping_relaxation ( float value )

  • float get_damping_relaxation ( )

放松时施加在弹簧上的阻尼。这个值应该在 0.0(无阻尼)和 1.0 之间。这个值应该总是比 damping_compression 属性稍高。对于 damping_compression 值 0.3,尝试放松值为 0.5。


float engine_force = 0.0

  • void set_engine_force ( float value )

  • float get_engine_force ( )

通过施加引擎力使车轮加速。车轮只有在与表面接触时才会加速。车辆的 RigidBody3D.mass 对车辆的加速度有影响。对于质量被设置为 1000 的车辆,请尝试使用 25 - 50 范围内的加速度值。

注意:模拟没有考虑齿轮的影响,如果想要模拟齿轮,需要为其添加逻辑。

负值将导致车轮倒转。


float steering = 0.0

  • void set_steering ( float value )

  • float get_steering ( )

车轮的转向角,单位:弧度。将该属性设置为非零值将导致车辆在移动时转向。


float suspension_max_force = 6000.0

  • void set_suspension_max_force ( float value )

  • float get_suspension_max_force ( )

弹簧所能承受的最大力。该值应高于 VehicleBody3DRigidBody3D.mass 的四分之一,否则该弹簧无法承载车辆的重量。大约 3 到 4 倍这个数字的值通常会获得良好的结果。


float suspension_stiffness = 5.88

  • void set_suspension_stiffness ( float value )

  • float get_suspension_stiffness ( )

这个值定义了悬架的刚度。越野车使用低于 50 的值,赛车使用 50 至 100 的值,像一级方程式赛车则尝试 200 左右的值。


float suspension_travel = 0.2

  • void set_suspension_travel ( float value )

  • float get_suspension_travel ( )

这是悬架可以移动的距离。由于Godot 的单位相当于米,所以保持这个设置相对较低。根据汽车的类型,试试 0.1 和 0.3 之间的值。


bool use_as_steering = false

  • void set_use_as_steering ( bool value )

  • bool is_used_as_steering ( )

如果为 true,当汽车转向时这个轮子会转动。该值与 VehicleBody3D.steering 结合使用,如果使用的是各个车轮的 steering 值,则该值将被忽略。


bool use_as_traction = false

  • void set_use_as_traction ( bool value )

  • bool is_used_as_traction ( )

如果为 true,该车轮会将引擎力传递到地面以推动车辆前进。该值与 VehicleBody3D.engine_force 结合使用,如果使用的是各个车轮的 engine_force 值,则该值将被忽略。


float wheel_friction_slip = 10.5

  • void set_friction_slip ( float value )

  • float get_friction_slip ( )

这决定了这个轮子的抓地力有多大。它与车轮所接触的表面的摩擦力设置相结合。0.0 意味着没有抓地力,1.0 是正常抓地力。对于漂移车的设置,尝试将后轮的抓地力设置得比前轮略低,或者使用较低的数值来模拟轮胎的磨损。

在开始时最好将其设置为 1.0。


float wheel_radius = 0.5

  • void set_radius ( float value )

  • float get_radius ( )

轮子的半径,单位是米。


float wheel_rest_length = 0.15

  • void set_suspension_rest_length ( float value )

  • float get_suspension_rest_length ( )

这是轮子从原点下降的距离,以米为单位。不要把这个设置为 0.0,然后把车轮移到位置上,而是把车轮的原点(Godot 中的小工具)移到车轮触底时的位置,然后使用剩余长度将轮子向下移动到汽车静止时它应该所处位置。


float wheel_roll_influence = 0.1

  • void set_roll_influence ( float value )

  • float get_roll_influence ( )

该值会影响车辆的滚动。如果将所有车轮都设置为 1.0,车辆将抵抗车身侧倾,而值为 0.0 则容易翻车。


方法说明

Node3D get_contact_body ( ) const

如果接触的实体节点在树中有效,则返回接触的实体节点,如 Node3D。目前,不支持 GridMap,因此该节点将始终为 PhysicsBody3D 类型。

如果车轮没有与表面接触,或者接触的实体不是 PhysicsBody3D,则返回 null


float get_rpm ( ) const

返回轮子的旋转速度,单位为每分钟转数。


float get_skidinfo ( ) const

返回一个介于 0.0 和 1.0 之间的值,表示这个轮子是否打滑。0.0 表示打滑(车轮失去了抓地力,例如冰雪地形),1.0 表示不打滑(车轮有充分的抓地力,例如干燥的沥青路)。


bool is_in_contact ( ) const

如果轮子与表面接触,返回 true