Unity C# Ненужная задержка в выполнении кода

Рейтинг: -1Ответов: 1Опубликовано: 20.04.2023

Пишу свой контроллер автомобиля. Но функции кода обрабатываются с задержкой. Отпускаю кнопку газа, машина некоторое время продолжает получать крутящий момент. После торможения начинаю газовать, опять же пару секунд никакой реакции на нажатие кнопки.

Видео, как это работает: YouTube

Код:

using System.Collections.Generic;
using UnityEngine;

public class VCC_MAIN : MonoBehaviour
{
    [Header("Wheels Data")]
    public VCC_WHEEL FLWheel;
    public VCC_WHEEL FRWheel;
    public VCC_WHEEL RLWheel;
    public VCC_WHEEL RRWheel;
    public List<WheelCollider> drivableWC;

    [Header("Engine Data")]
    public float maxSpeed;
    public float engineTorque;
    public float brakePower;

    [Header("Rig Data")]
    public Transform centerOfMass;

    [Header("Debug Data")]
    public float verticalInput;
    public float currSpeed;
    [HideInInspector] public Rigidbody rig;
    
    private void Awake()
    {
        rig = GetComponent<Rigidbody>();
        rig.centerOfMass = transform.InverseTransformPoint(centerOfMass.transform.position);

        drivableWC.Add(RLWheel.GetComponent<WheelCollider>());
        drivableWC.Add(RRWheel.GetComponent<WheelCollider>());
    }
    
    private void FixedUpdate()
    {
        verticalInput = Mathf.Round(Input.GetAxis("Vertical"));

        currSpeed = Mathf.Round(rig.velocity.magnitude * 3.6f);

        if (verticalInput != 0 && currSpeed < maxSpeed)
        {
            ApplyTorque(engineTorque);
            ApplyBrake(0);
        }
        else if (verticalInput == 0)
        {
            ApplyTorque(0);
            ApplyBrake(brakePower / 100f);
        }
    }

    private void ApplyTorque(float torque)
    {
        drivableWC[0].motorTorque = torque * verticalInput;
        drivableWC[1].motorTorque = torque * verticalInput;
    }

    private void ApplyBrake(float brake)
    {
        drivableWC[0].brakeTorque = brake;
        drivableWC[1].brakeTorque = brake;
    }
}

Пробовал и в void Update запускать его, и Input.GetAxisRow, не помогло...

Ответы

▲ 0

Попробуй verticalInput = Input.GetAxis("Horizontal") в FixedUpdate