如何判断是否已经播放了协同例程?

时间:2019-04-03 11:24:08

标签: c# unity3d coroutine

如果对象上的Alpha是黑色,我想播放一个协例程,如果Alpha是白色,我想播放另一个协例程。这将从公共场所调用。

所以基本上,我有一个对象,当单击另一个对象时,它会淡入。现在,当单击另一个对象时,我希望该对象淡出,但前提是它已经淡入。

 public void fade()

{
    if objectname.material.color = (1f, 1f, 1f, 0f);

    StartCoroutine(OPTION1());


    if objectname.material.color = (1f, 1f, 1f, 1f);

    StartCoroutine(OPTION2());

}

1 个答案:

答案 0 :(得分:1)

由于每个对象都是唯一的(不是静态的,并且每个实例都是共享的),因此您可以添加一个属性来防止任何类型的递归或重复调用...内部设置标志并在完成时清除...类似

private bool _isFading;

public void fade()
{
    // Is the fading already doing its thing?  If so, get out
    if( _isFading )
       return;
    // nope, not yet, first time in, set flag to prevent subsequent calls
    // against this same object
    _isFading = true;

    if objectname.material.color = (1f, 1f, 1f, 0f);
       StartCoroutine(OPTION1());

    if objectname.material.color = (1f, 1f, 1f, 1f);
       StartCoroutine(OPTION2());

    // reset now that the fading is complete
    _isFading = false;
}