Использование Mathf.SmoothDamp () в сопрограмме занимает больше времени, чем ожидалось - PullRequest
1 голос
/ 19 января 2020

Я использую SmoothDamp в сопрограмме для постепенного изменения размера коллайдера персонажа, когда персонаж воспроизводит анимацию приседания:

void OnRifleIdleToCrouchStart(){
    float idleToCrouchVelocity = -0.01f;
    IEnumerator idleToCrouchColl = smoothHeightChange(idleToCrouchVelocity, 1.45f, 1.2f, 0.38f); //smoothTime is .38 since speed for idle to crouch is 2
    StartCoroutine(idleToCrouchColl);
}

IEnumerator smoothHeightChange(float idleToCrouchVelocity, float targetHeight, float targetCenterY, float smoothTime){
    Debug.Log("smoothHeightChange START " + Time.time);
    while(Math.Round(controller.height, 2) > targetHeight)
    {
        float idleToCrouchVelocityCenter = idleToCrouchVelocity * -1f;
        float newHeight = Mathf.SmoothDamp(controller.height, targetHeight, ref idleToCrouchVelocity, smoothTime);
        float newCenterY = Mathf.SmoothDamp(controller.center.y, targetCenterY, ref idleToCrouchVelocityCenter, smoothTime);
        controller.height = newHeight;
        controller.center = new Vector3(controller.center.x, newCenterY, controller.center.z);

        yield return new WaitForEndOfFrame();
    }
    Debug.Log("smoothHeightChange FINISH " + Time.time);
}

Я ожидал, что присед займет длительность smoothTime (0,38 секунды ) но сравнение времени начала и окончания показывает, что на самом деле это занимает около 2 секунд. Я подозреваю, что это потому, что я жду конца каждого кадра в сопрограмме, и SmoothDamp предполагает, что это делается каждый кадр. Поэтому мое значение smoothDamp должно быть меньше 0,38 пропорционально времени, оставшемуся в каждом кадре в течение анимации. Но я не уверен, какое значение мне следует изменить с помощью smoothDamp, так как временные рамки кадра, вероятно, различаются в каждом кадре в течение анимации (~ 40 кадров). Как мне выполнить рефакторинг сопрограммы, для завершения которой требуется длина smoothDamp?

Спасибо!

...