【问题标题】:How to tell if a co routine has already been played?如何判断一个coroutine是否已经播放?
【发布时间】:2019-04-03 11:24:07
【问题描述】:

如果对象上的 alpha 为黑色,我想播放一个 coroutine,如果 alpha 为白色,我想播放一个不同的 coroutine。这将从公共 void 调用。

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

 public void fade()

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

    StartCoroutine(OPTION1());


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

    StartCoroutine(OPTION2());

}

【问题讨论】:

  • 为什么不直接在 Visual Studio 中设置断点并进行调试
  • 您能添加您的代码以及到目前为止您尝试过的内容吗?
  • 好的,介意给我们一个更具体的例子来说明你想要做什么吗?让协程根据颜色的 alpha 值做不同的事情似乎很简单,你只是想阻止它多次执行吗?如果是这样,为什么不使用条件,以确保它不会再次发生,例如if(ran == false) { ran = true; doCoroutinestuff();}
  • 我刚刚用一些代码更新了这个问题。代码示例是我正在尝试做的,但我不知道如何正确编写它。

标签: c# unity3d coroutine


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2012-05-19
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多