using UnityEngine;
public class CarController : MonoBehaviour
{
public float enginePower = 150f; // Мощность двигателя
public float maxRPM = 7000f; // Максимальные обороты
public float minRPM = 1000f; // Минимальные обороты
public int maxGear = 5; // Максимальное количество передач
public float[] gearRatios; // Соотношения для каждой передачи
private int currentGear = 1;
private float currentRPM = 0f;
void Start()
{
// Инициализация настроек передач
gearRatios = new float[maxGear] { 3.5f, 2.5f, 1.8f, 1.0f, 0.8f };
}
void Update()
{
HandleInput();
UpdateRPM();
ShiftGears();
ApplyEngineForce();
}
void HandleInput()
{
// Получаем ввод от пользователя
float input = Input.GetAxis("Vertical"); // Используем клавиши W/S или стрелки
if (input > 0)
{
// Увеличить скорость
currentRPM += enginePower * Time.deltaTime;
}
else if (input < 0)
{
// Уменьшить скорость
currentRPM -= enginePower * Time.deltaTime * 0.5f; // Редукция заднего хода
}
currentRPM = Mathf.Clamp(currentRPM, 0, maxRPM);
}
void UpdateRPM()
{
// Обновляем обороты в зависимости от передачи и мощности
currentRPM = currentRPM * gearRatios[currentGear - 1];
currentRPM = Mathf.Clamp(currentRPM, minRPM, maxRPM);
}
void ShiftGears()
{
// Автоматическое переключение передач
if (currentRPM >= maxRPM && currentGear < maxGear)
{
currentGear++;
}
else if (currentRPM <= minRPM && currentGear > 1)
{
currentGear--;
}
}
void ApplyEngineForce()
{
// Здесь можно прикрепить силу к автомобилю
Rigidbody rb = GetComponent<Rigidbody>();
float torque = enginePower * gearRatios[currentGear - 1];
rb.AddForce(transform.forward * torque * Time.deltaTime, ForceMode.Acceleration);
}
}