【问题标题】:Coroutine doesnt run on second try?协程在第二次尝试时不运行?
【发布时间】:2018-10-21 09:11:23
【问题描述】:

目前,我的 OnGUI 函数上有这个过程:

void OnGUI ()
{
   // process here that adds item on list
    Counter = list.Count();
}

我有这段代码在更改计数器值时运行一个函数。

private IEnumerator coroutine = null;
private int counter = 0;
private int limit = 5;
public int Counter 
{
    get{ return this.counter; }
    set
    {
         this.counter =  value;
         if(this.counter == limit)
         { 
             if(this.coroutine != null){ return; } // already running
             this.coroutine = StartProcess();
             StartCoroutine(this.coroutine); }
    }
}

StartProcess 包含这个:

StartProcess ()
{
  yield return StartCorotuine (Process1);
  yield return StartCorotuine (Process2);
}

在我第一次运行时一切正常,但在我第二次运行时,即使满足我的条件,我的 Counter 函数似乎也不再运行?

【问题讨论】:

  • 你在哪里把它设置回null? if(this.coroutine != null){ return; } // already running
  • 啊,我明白了。所以我应该在'yield return StartCoroutine(Process2);'之后添加'coroutine = null'。对吗?
  • 您应该为您的代码做正确的事情。似乎您不想在运行时启动另一个,但只有您知道为什么要这样写。
  • 是的,你需要在 StartProcess 结束时重置 coroutine = null

标签: unity3d coroutine ienumerator


【解决方案1】:

当协程完成时,指向它的指针仍然有效,它不会重置为 null,你可以为死协程保留一个处理程序,只需在末尾添加 =null 就可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2020-07-13
    相关资源
    最近更新 更多