Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计数器达到某个数值后,运行IEnumerator函数_C#_Unity3d_Scripting_Ienumerator - Fatal编程技术网

C# 计数器达到某个数值后,运行IEnumerator函数

C# 计数器达到某个数值后,运行IEnumerator函数,c#,unity3d,scripting,ienumerator,C#,Unity3d,Scripting,Ienumerator,全部!我试图在计数器达到某个数字时运行一个进程 我目前在更新功能中有这部分代码: if (counter == 17) { // must call process here } 这就是我想要运行的流程 private void CallProcess() { StartCoroutine(StartProcess()); } 这是IEnumerator的全部代码 private IEnumerator StartProcess() {

全部!我试图在计数器达到某个数字时运行一个进程

我目前在更新功能中有这部分代码:

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;
        }
      }

    }

当我在我的更新bc中调用CallProcess()时,我遇到了一些问题,它会被一次又一次地调用。任何关于如何修改代码的建议都将不胜感激。

不要在更新中调用Start例程。相反,将布尔值包装到属性中,这样当它被更改或设置时,您也可以调用StartCustomer

假设计数器就是设置它的那个:

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是否完成,因为您的协同程序在继续之前已经在等待它完成

如果您需要检查进程1中的某些内容,以便运行进程2,下面是一个解决方案:

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
}

不要在更新中调用StartCustomer。相反,将布尔值包装到属性中,这样当它被更改或设置时,您也可以调用StartCustomer

假设计数器就是设置它的那个:

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是否完成,因为您的协同程序在继续之前已经在等待它完成

如果您需要检查进程1中的某些内容,以便运行进程2,下面是一个解决方案:

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
}

为什么不像您使用
process1\u done
那样使用bool呢?就像@SwiftingDuster说的那样,bool是一个启动过程,为什么不使用bool呢?在
CallProcess()
中输入调用ie时关闭
isStartingProcess
,并在协同程序结束时再次启用它,这应该可以解决问题。我已经尝试了if(counter==17){isStartProcess=true}if(isProcess true){CallProcess();}但是它似乎都是重叠的。为什么不像你用
process1\u done
那样使用bool呢?就像@SwiftingDuster说的那样,bool是一个启动过程,为什么不使用bool呢?在
CallProcess()
中输入调用ie时关闭
isStartingProcess
,并在协同程序结束时再次启用它,这应该可以解决问题。我已经尝试了if(counter==17){isStartProcess=true}if(isProcess true){CallProcess();},但它似乎是重叠的。感谢您的澄清!让我试试这个,谢谢你的澄清!让我很快试试这个