Unity协程没有运行到最后

时间:2017-01-14 11:40:59

标签: c# unity3d coroutine

我对协程有一个奇怪的问题。

基本上当我鼠标悬停在精灵上时,只要鼠标指针在它上面就会淡入和淡出,这样可以正常工作,但是当鼠标退出精灵时我希望精灵淡出直到其alpha值达到0。

要做到这一点,并且因为与鼠标悬停在对撞机上时每个帧调用的OnMouseOver函数不同,我使用在我的OnMouseExit函数中调用的协程。

下面的代码是我使用的,但是只要鼠标退出精灵,精灵的alpha就会立即设置为0,不会消失,我不知道为什么,因此我的帖子。

你会注意到在OnMouseExit函数中最后一行被注释掉了,我试图用两种方法调用协同程序,它会被调用两次,但在任一调用中都不会发生淡出。

43 32 56 12 4

此致

Crouz

1 个答案:

答案 0 :(得分:0)

您需要Coroutine函数中的计数器变量从0fade_speed计数。您可以使用whileTime.deltaTime循环中增加此变量。当该变量为> = fade_speed时,退出while循环。要在整个循环中获得新颜色,可以执行new Color(1, 1, 1, Mathf.Lerp(startingAlpha, 0, counter / fade_speed));。

您的新FadeOut功能:

IEnumerator FadeOut(float alpha_start)
{
    //This will start decreasing from where it is
    float startingAlpha = sprite.color.a;

    float counter = 0;

    while (counter < fade_speed)
    {
        counter = counter + Time.deltaTime;
        sprite.color = new Color(1, 1, 1, Mathf.Lerp(startingAlpha, 0, counter / fade_speed));
        yield return null;
    }
}