运行 IEnumerator 在计数器达到特定数字后起作用
Run IEnumerator functions once counter hits certain number
全部!我正在尝试 运行 一个进程,一旦我的计数器达到某个数字。
我目前的更新函数中有这部分代码:
if (counter == 17)
{
// must call process here
}
这是我想要的流程运行
private void CallProcess()
{
StartCoroutine(StartProcess());
}
这是 IEnumerator 的完整代码
private IEnumerator StartProcess()
{
yield return StartCoroutine (Process1()); //once done, a bool here is set to true
if (proccess1_done)
{
yield return StartCoroutine (Process2());
if (process2_done)
{
process1_done = false;
process2_done = false;
}
}
}
我在更新中调用 CallProcess() 时遇到问题,因为它被一遍又一遍地调用。任何关于我应该如何修改我的代码的建议将不胜感激。
更新时不要调用StartCoroutine。相反,将布尔值包装在 属性 中,这样当它被更改或设置时,您还可以调用 StartCoroutine。
假设计数器是设置它的那个:
private IEnumerator coroutine = null;
private int counter = 0;
public int Counter
{
get{ return this.counter; }
set
{
this.counter = value;
if(this.counter == conditionValue)
{
if(this.coroutine != null){ return; } // already running
this.coroutine = StartProcess();
StartCoroutine(this.coroutine); }
}
}
以及您的协程:
private IEnumerator StartProcess()
{
yield return StartCoroutine (Process1());
yield return StartCoroutine (Process2());
}
您真的不需要检查流程 1 是否已完成,因为您的协程在继续之前已经在等待它完成。
如果您需要为进程 2 到 运行 检查进程 1 中的某些内容,这是一个解决方案:
private IEnumerator StartProcess()
{
bool condition = false;
yield return StartCoroutine (Process1(ref condition));
if(condition == false){ yield break; }
yield return StartCoroutine (Process2());
this.coroutine = null;
}
private IEnumerator Process1(ref bool condition)
{
// some code
yield return null;
// more code
condition = true; // or false
}
全部!我正在尝试 运行 一个进程,一旦我的计数器达到某个数字。
我目前的更新函数中有这部分代码:
if (counter == 17)
{
// must call process here
}
这是我想要的流程运行
private void CallProcess()
{
StartCoroutine(StartProcess());
}
这是 IEnumerator 的完整代码
private IEnumerator StartProcess()
{
yield return StartCoroutine (Process1()); //once done, a bool here is set to true
if (proccess1_done)
{
yield return StartCoroutine (Process2());
if (process2_done)
{
process1_done = false;
process2_done = false;
}
}
}
我在更新中调用 CallProcess() 时遇到问题,因为它被一遍又一遍地调用。任何关于我应该如何修改我的代码的建议将不胜感激。
更新时不要调用StartCoroutine。相反,将布尔值包装在 属性 中,这样当它被更改或设置时,您还可以调用 StartCoroutine。
假设计数器是设置它的那个:
private IEnumerator coroutine = null;
private int counter = 0;
public int Counter
{
get{ return this.counter; }
set
{
this.counter = value;
if(this.counter == conditionValue)
{
if(this.coroutine != null){ return; } // already running
this.coroutine = StartProcess();
StartCoroutine(this.coroutine); }
}
}
以及您的协程:
private IEnumerator StartProcess()
{
yield return StartCoroutine (Process1());
yield return StartCoroutine (Process2());
}
您真的不需要检查流程 1 是否已完成,因为您的协程在继续之前已经在等待它完成。
如果您需要为进程 2 到 运行 检查进程 1 中的某些内容,这是一个解决方案:
private IEnumerator StartProcess()
{
bool condition = false;
yield return StartCoroutine (Process1(ref condition));
if(condition == false){ yield break; }
yield return StartCoroutine (Process2());
this.coroutine = null;
}
private IEnumerator Process1(ref bool condition)
{
// some code
yield return null;
// more code
condition = true; // or false
}