Непонятная работа 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