自动填充滑块有时不是100%

时间:2017-06-26 07:19:04

标签: c# unity3d slider

我使用此功能填充从零到最大的滑块:

IEnumerator FillBar() {
    float runtime = manualTime;
    for(float f = 0; f <= runtime; f += Time.deltaTime) {
        manualSlider.value = Mathf.Lerp(0, 1000, f/runtime);
        yield return null;
    }}

但无论我是否使用“整数”,它或者经常停在998(+/-几个)而没有整数它停在998.XXXX 我有一个解决方案来“欺骗”该问题,并在“填满”此代码后手动重置它

    IEnumerator FillBar() {
    float runtime = manualTime;
    for(float f = 0; f <= runtime; f += Time.deltaTime) {
        manualSlider.value = Mathf.Lerp(0, 1000, f/runtime);
        yield return null;
    }
    manualSlider.value = 0;
    //stuff happening here
}

我面临的问题是我想使用完整的滑块值作为滑块填充时发生的事件的触发器,但是当它从未达到1000时(我甚至只尝试过1次。同样的问题) 对此有一个很好的解决方法吗?

1 个答案:

答案 0 :(得分:1)

当您使用Time.deltaTime插值时很少会达到全部值。 插值结束时,您需要将滑块捕捉到最大值。

请尝试使用此协程:

IEnumerator FillBar(float _time) {
    float _elapsedTime = 0;

    while(_elapsedTime < _time)
    {
        manualSlider.value = Mathf.Lerp(manualSlider.value, 1, (_elapsedTime/_time));
        _elapsedTime += Time.deltaTime;

        yield return null;
    }

    manualSlider.value = 1;
}