/*■■■PUBLIC■■■*/
    /// <summary>
    /// 速度を増減させる処理
    /// </summary>
    /// <param name="engineSpeed"></param>
    /// <param name="accel"></param>
    /// <returns></returns>
    public float CalcEngineSpeed(float engineSpeed, float accel)
    {
        accel = Mathf.Clamp01(accel);
        bool isNeutral = (mCurrentGear.Value == GearState.NEUTRAL);
        bool isReverse = (mCurrentGear.Value == GearState.REVERSE);
        bool isStop    = (Mathf.Approximately(engineSpeed, 0.0f));

        if (isNeutral)
        {
            accel = 0.0f;
        }

        /*ギア変更後速度が現在の最高速度より高い場合、accelを0にする*/
        if (!isReverse && engineSpeed > mMaxSpeed)
        {
            accel = 0.0f;
        }

        /*ギアがニュートラル"でない"かつ、エンジン回転数が0以下だった場合、
         * 値を代入する。0だと動かなくなる為*/
        if (!isNeutral && isStop)
        {
            engineSpeed = VehicleSettings.EngineSettings.LOWEST_ENGINE_SPEED;
        }

        //回転数上げる処理。リバースギアのときはアクセル踏むと逆に進む
        if (!isReverse)
        {
            engineSpeed += SpeedCalculator.CalcRotToAdd(engineSpeed, mAccPow, accel, mNeedSpeed);
        }
        else
        {
            engineSpeed -= SpeedCalculator.CalcRotToAdd(engineSpeed, mAccPow, accel, mNeedSpeed);
        }

        //アクセルにあわせて回転数の限界を調節する処理

        /*リバースギアに入れた時に減速が早すぎる為。
         * engine brakeの値を0にするとリバースギアで下がったら止まらなくなる*/
        if (!(isReverse && (engineSpeed > 0.0f)))
        {
            engineSpeed = SpeedLimitController.EngineBrake(engineSpeed, accel, mMaxSpeed, mEngineBrakePow);
        }

        //ギアを下げたとき最大回転数をlerpで逓減する処理
        mCurrentMaxSpeed = SpeedLimitController.DecreaseMaxSpeed(mMaxSpeed, mPreMaxSpeed, mCurrentMaxSpeed, mEngineSettings.DecreaseSpeed);

        //ペナルティ用
        Penalty();

        mCurrentMaxSpeed = Mathf.Abs(mCurrentMaxSpeed);
        //範囲内に収める処理
        return(Mathf.Clamp(engineSpeed, mLowestSpeed, mCurrentMaxSpeed));
    }