Непонятная работа VehicleBody в Godot 4

Код управления автомобилем:

func _physics_process(delta):
    var direction = Input.get_action_strength("w") - Input.get_action_strength("s")
    var steer_input = Input.get_action_strength("a") - Input.get_action_strength("d")
    var is_braking = Input.is_action_pressed("stop")

    # Целевая скорость
    var target_speed = direction * max_speed
    var local_velocity = global_transform.basis.inverse() * linear_velocity
    var speed_diff = target_speed - local_velocity.z
    current_engine_force = clamp(speed_diff * acceleration, -acceleration, acceleration)

    # Плавный поворот
    steer_target = steer_input * MAX_STEER_ANGLE
    steer_current = lerp(steer_current, steer_target, steer_smoothness * delta)

    # Ручной тормоз
    current_brake_force = brake_strength if is_braking else 0.0

    # Применяем силы ко всем колесам
    front_left_wheel.engine_force = current_engine_force / 2
    front_right_wheel.engine_force = current_engine_force / 2
    front_left_wheel.brake = current_brake_force
    front_right_wheel.brake = current_brake_force
    back_left_wheel.brake = current_brake_force
    back_right_wheel.brake = current_brake_force
    steering = steer_current

Если я заменю строки

front_left_wheel.engine_force = current_engine_force / 2
front_right_wheel.engine_force = current_engine_force / 2

на

engine_force = current_engine_force / 2

то тормоза перестанут работать, но машина все еще сможет ехать.

Почему это так работает?


Ответы (1 шт):

Автор решения: helloworld

Причина была в том что когда на колесо передается engine force оно не может тормозить. перед торможением нужно задать этому force значение 0

→ Ссылка