Твой Профессор
Профи
(676)
4 дня назад
Значит, смотри. Сразу обращу внимание, что крутящий момент надо масштабировать в соответствии с тем, на какой передаче находится машина. Например, на первой передаче крутящий момент должен быть умножен на коэффициент передачи (например, 3.5 для первой передачи).
Немного (сильно) исправленный код будет у тебя выглядеть вот так:
public float EnginePower = 400f; // Максимальная мощность двигателя в ваттах
public float MaxTorque = 300f; // Максимальный крутящий момент в Нм на максимальных оборотах (например, 4000 RPM)
public float MaxRpm = 6000f; // Максимальные обороты двигателя
public float IdleRpm = 800f; // Обороты на холостом ходу
public BlackWheelCollider[] wheels; // Массив колесных коллайдеров
private void Update() {
HandleEngine();
ApplyEngineTorque();
}
private void HandleEngine() {
if (Engine) {
Speed = GetComponent<Rigidbody>().velocity.magnitude;
if (Input.GetKey(KeyCode.W)) { // если нажат газ
Gaz = true;
Rpm += GazCorrectionsUp * Time.deltaTime;
Rpm = Mathf.Min(Rpm, MaxRpm);
} else {
Gaz = false;
Rpm -= GazCorrectionsDown * Time.deltaTime;
Rpm = Mathf.Max(Rpm, IdleRpm);
}
}
}
private void ApplyEngineTorque() {
float currentTorque = 0;
if (Clutch == 0 && currentGear == 1 && Gaz) {
// Рассчитываем крутящий момент на основе мощности и оборотов
currentTorque = (EnginePower / MaxRpm) * Rpm;
// Ограничиваем крутящий момент по максимальному
currentTorque = Mathf.Min(currentTorque, MaxTorque);
// Применяем крутящий момент к колесам
foreach (WheelCollider wheel in wheels) {
wheel.motorTorque = currentTorque;
}
} else {
// Если газ не нажат или сцепление включено, обнуляем крутящий момент
foreach (WheelCollider wheel in wheels) {
wheel.motorTorque = 0;
}
}
}
Смотри, еще скажу о том, что добавлять коэффициенты для разных передач. Например, на первой передаче у тебя может быть 3.5, на второй — 2.5 и так далее. Именно это значение следует умножить на currentTorque при передаче на колёса.
Глянь, что ты правильно инициализируешь wheels массив с колесами, чтобы скрипт работал корректно. Также можешь заменить BlackWheelCollider на тип своего коллайдера, если он отличается.
EngineTorque - Это мощность двигателя
Rpm - Обороты двигателя
Bool Gaz - проверка нажат ли газ
CurrentGear - передача
Clutch - сцепление
Реализовано так,что при нажатии на газ активируется bool Gaz и обороты (Rpm) растут
Далее пишу что если передача 1 и газ активен то приравнивал к колёсным коллайдерам обороты двигателя,эффект не тот,но и понять не могу как указать саму мощность двигателя для тяги ?