WheelCollider

继承: Item3D < Item < Object

用于模拟车轮行为的3D物理体。

描述

一个节点,用作父节点的子节点,用于模拟其一个车轮的行为。该节点还充当碰撞器以检测车轮是否接触表面。

注意:这个类有已知的问题,不是为了提供逼真的3D车辆物理而设计的。如果你想要高级的车辆物理,你可能需要使用另一个PhysicsBulkBase类编写你自己的物理集成。

属性

方法


属性说明

float brake = 0.0 🔗

通过施加制动力来减慢车轮。只有当车轮与表面接触时,车轮才会减慢。充分减慢车辆所需的力取决于车辆的RigidBulk.mass。对于质量设置为1000的车辆,尝试在25-30范围内进行硬制动。


float damping_compression = 0.83 🔗

  • void set_damping_compression(value: float)

  • float get_damping_compression()

当悬挂弹簧被压缩时施加的阻尼,意思是当车轮相对于车辆向上移动时。它以牛顿秒每毫米(N😍s/mm)或兆克每秒(Mg/s)为单位测量。这个值应该在0.0(无阻尼)和1.0之间,但可能更多。0.0的值意味着随着弹簧保持能量,汽车将继续弹跳。对于普通汽车来说,这个值很好,大约是0.3,对于赛车来说是0.5。


float damping_relaxation = 0.88 🔗

  • void set_damping_relaxation(value: float)

  • float get_damping_relaxation()

回弹或伸展时施加于悬挂弹簧的阻尼,意指车轮相对于车辆向下移动时的阻尼。以牛顿秒每毫米(N😍s/mm),或兆克每秒(Mg/s)为单位测量。该值应介于0.0(无阻尼)和1.0之间,但可能更多。该值应始终略高于damping_compression属性。对于0.3的damping_compression值,尝试0.5的松弛值。


float engine_force = 0.0 🔗

  • void set_engine_force(value: float)

  • float get_engine_force()

通过施加发动机力来加速车轮。只有当车轮与表面接触时,车轮才会加速。车辆的RigidBulk.mass对车辆的加速度有影响。对于质量设置为1000的车辆,尝试25-50范围内的加速度值。

注意:模拟不考虑齿轮的影响,如果您希望模拟齿轮,则需要为此添加逻辑。

负值将导致车轮倒车。


float steering = 0.0 🔗

  • void set_steering(value: float)

  • float get_steering()

车轮的转向角度,以弧度为单位。将其设置为非零值将导致车辆在移动时转弯。


float suspension_max_force = 6000.0 🔗

  • void set_suspension_max_force(value: float)

  • float get_suspension_max_force()

弹簧所能抵抗的最大力,该值应高于VehicleBulkRigidBulk.mass的四分之一,否则弹簧将无法承载车辆的重量。良好的结果往往是由大约3×到4×这个数字的值获得的。


float suspension_stiffness = 5.88 🔗

  • void set_suspension_stiffness(value: float)

  • float get_suspension_stiffness()

悬架的刚度,以牛顿每毫米(N/mm)或兆克每秒平方(Mg/s²)为单位。越野车使用低于50的值,赛车使用50到100之间的值,对于一级方程式赛车,尝试200左右的值。


float suspension_travel = 0.2 🔗

  • void set_suspension_travel(value: float)

  • float get_suspension_travel()

这是悬架可以行驶的距离。由于i3D单位相当于米,因此保持此设置相对较低。根据汽车类型,尝试0.1到0.3之间的值。


bool use_as_steering = false 🔗

  • void set_use_as_steering(value: bool)

  • bool is_used_as_steering()

如果true,则此车轮将在汽车转向时转动。此值与VehicleBulk.steering结合使用,如果您使用的是每轮steering值,则忽略此值。


bool use_as_traction = false 🔗

  • void set_use_as_traction(value: bool)

  • bool is_used_as_traction()

如果true,则此车轮将发动机力传递到地面以推动车辆前进。该值与VehicleBulk.engine_force结合使用,如果您使用的是每轮engine_force值,则忽略该值。


float wheel_friction_slip = 10.5 🔗

  • void set_friction_slip(value: float)

  • float get_friction_slip()

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

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


float wheel_radius = 0.5 🔗

  • void set_radius(value: float)

  • float get_radius()

车轮的半径以米为单位。


float wheel_rest_length = 0.15 🔗

  • void set_suspension_rest_length(value: float)

  • float get_suspension_rest_length()

这是车轮从原点降低的距离(以米为单位)。不要将其设置为0.0并将车轮移动到位,而是将车轮的原点(i3D中的小发明)移动到车轮触底时的位置,然后使用静止长度将车轮向下移动到汽车静止时应该处于的位置。


float wheel_roll_influence = 0.1 🔗

  • void set_roll_influence(value: float)

  • float get_roll_influence()

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


方法说明

Item3D get_contact_body() const 🔗

如果在树中有效,则返回联系人主体节点,作为Item3D。目前,不支持GridMap,因此节点将始终是PhysicsBulkBase类型。

如果车轮未与表面接触,或者接触体不是PhysicsBulkBase,则返回null


Vector3 get_contact_normal() const 🔗

如果车轮接触,则返回悬架在世界空间中碰撞的法线。如果车轮没有与任何东西接触,则返回一个向量,该向量直接沿着悬架轴指向世界空间中的车辆。


Vector3 get_contact_point() const 🔗

如果车轮接触,则返回悬架在世界空间中的碰撞点。如果车轮没有接触任何东西,则返回车轮在世界空间中光线投射的最大点,由wheel_rest_length+wheel_radius定义。


float get_rpm() const 🔗

返回车轮的转速,单位为每分钟转数。


float get_skidinfo() const 🔗

返回一个介于0.0和1.0之间的值,该值指示此车轮是否打滑。0.0打滑(车轮失去抓地力,例如结冰的地形),1.0表示不打滑(车轮完全抓地力,例如干燥的柏油路)。


bool is_in_contact() const 🔗

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