Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
VehicleWheel3D
用于 VehicleBody3D 的 3D 物理体,能够模拟车轮的行为。
描述
作为 VehicleBody3D 子节点使用的节点,能够模拟车辆其中一个车轮的行为。这个节点还充当了碰撞器,能够检测车轮是否与某个表面接触。
注意:该类存在已知问题,并非旨在提供逼真的 3D 车辆物理效果。如果想要高级车辆物理,可能必须使用其他 PhysicsBody3D 类来编写自己的物理整合函数。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
get_contact_body() const |
|
get_contact_normal() const |
|
get_contact_point() const |
|
get_rpm() const |
|
get_skidinfo() const |
|
is_in_contact() const |
属性说明
通过施加制动力使车轮减速。车轮只有在与表面接触时才会减速。使车辆充分减速所需的力,取决于车辆的 RigidBody3D.mass。对于质量被设置为 1000 的车辆,尝试使用 25 - 30 范围内的值进行紧急制动。
float damping_compression = 0.83
🔗
悬挂弹簧处于压缩状态时施加的阻尼,此时的车轮在相对于车辆向上移动。单位为牛顿·秒每毫米(N⋅s/mm)或兆克每秒(Mg/s)。这个值应该在 0.0(无阻尼)和 1.0 之间,但也可能更高。值为 0.0 表示汽车会持续弹跳,因为弹簧能够保持能量。普通汽车设为 0.3 左右、赛车设为 0.5 左右比较好。
float damping_relaxation = 0.88
🔗
悬挂弹簧回弹或伸展时施加的阻尼,此时的车轮在相对于车辆向下移动。单位为牛顿·秒每毫米(N⋅s/mm)或兆克每秒(Mg/s)。这个值应该在 0.0(无阻尼)和 1.0 之间,但也可能更高。这个值应该始终略高于 damping_compression 属性。对于 damping_compression 值为 0.3 的情况,请尝试将放松值设为 0.5。
通过施加引擎力使车轮加速。车轮只有在与表面接触时才会加速。车辆的 RigidBody3D.mass 对车辆的加速度有影响。对于质量被设置为 1000 的车辆,请尝试使用 25 - 50 范围内的加速度值。
注意:模拟没有考虑齿轮的影响,如果想要模拟齿轮,需要为其添加逻辑。
负值将导致车轮倒转。
车轮的转向角,单位:弧度。将该属性设置为非零值将导致车辆在移动时转向。
float suspension_max_force = 6000.0
🔗
弹簧所能承受的最大力。该值应高于 VehicleBody3D 的 RigidBody3D.mass 的四分之一,否则该弹簧无法承载车辆的重量。大约 3 到 4 倍这个数字的值通常会获得良好的结果。
float suspension_stiffness = 5.88
🔗
悬挂的刚度,测量单位为牛顿每毫米(N/mm)或兆克每平方秒(Mg/s²)。越野车使用低于 50 的值,赛车使用 50 到 100 之间的值,类似于一级方程式赛车的车辆请尝试使用 200 左右的值。
float suspension_travel = 0.2
🔗
这是悬架可以移动的距离。由于Godot 的单位相当于米,所以保持这个设置相对较低。根据汽车的类型,试试 0.1 和 0.3 之间的值。
bool use_as_steering = false
🔗
如果为 true
,当汽车转向时这个轮子会转动。该值与 VehicleBody3D.steering 结合使用,如果使用的是各个车轮的 steering 值,则该值将被忽略。
bool use_as_traction = false
🔗
如果为 true
,该车轮会将引擎力传递到地面以推动车辆前进。该值与 VehicleBody3D.engine_force 结合使用,如果使用的是各个车轮的 engine_force 值,则该值将被忽略。
float wheel_friction_slip = 10.5
🔗
这决定了这个轮子的抓地力有多大。它与车轮所接触的表面的摩擦力设置相结合。0.0 意味着没有抓地力,1.0 是正常抓地力。对于漂移车的设置,尝试将后轮的抓地力设置得比前轮略低,或者使用较低的数值来模拟轮胎的磨损。
在开始时最好将其设置为 1.0。
轮子的半径,单位是米。
float wheel_rest_length = 0.15
🔗
这是轮子从原点下降的距离,以米为单位。不要把这个设置为 0.0,然后把车轮移到位置上,而是把车轮的原点(Godot 中的小工具)移到车轮触底时的位置,然后使用剩余长度将轮子向下移动到汽车静止时它应该所处位置。
float wheel_roll_influence = 0.1
🔗
该值会影响车辆的滚动。如果将所有车轮都设置为 1.0,车辆将抵抗车身侧倾,而值为 0.0 则容易翻车。
方法说明
Node3D get_contact_body() const 🔗
如果接触的实体节点在树中有效,则返回接触的实体节点,如 Node3D。目前,不支持 GridMap,因此该节点将始终为 PhysicsBody3D 类型。
如果车轮没有与表面接触,或者接触的实体不是 PhysicsBody3D,则返回 null
。
Vector3 get_contact_normal() const 🔗
如果轮子与物体接触,则返回悬挂碰撞的法线,使用世界空间。如果轮子没有与任何物体接触,则返回一个指向悬挂轴方向、朝向车辆的向量,使用世界空间。
Vector3 get_contact_point() const 🔗
如果轮子与物体接触,则返回悬挂的碰撞点,使用世界空间。如果轮子没有与任何物体接触,则返回轮子射线投射的最大点,使用世界空间,该点由 wheel_rest_length + wheel_radius
定义。
返回轮子的旋转速度,单位为每分钟转数。
返回一个介于 0.0 和 1.0 之间的值,表示这个轮子是否打滑。0.0 表示打滑(车轮失去了抓地力,例如冰雪地形),1.0 表示不打滑(车轮有充分的抓地力,例如干燥的沥青路)。
如果轮子与表面接触,返回 true
。