InvokeRepeating与Update无关

时间:2016-06-27 15:51:36

标签: c# unity5

我遇到了关于函数InvokeRepeating()的问题,它们没有并行工作。我在Update()中使用for循环来遍历100浮点数组,并每隔1秒比较InvokeRepeating()中的数字。如果给出的数字小于Update()中的数字,它将显示在控制台中。

但每次我看到控制台中的InvokeRepeating()都是99。这是我的代码的一部分

void Update () {
    foreach(int f in test){
      target = f;
      Debug.Log (target);
    }
}

void AccXFunction(int time, float x){
     InvokeRepeating ("AccXR", 0.2f, 0.8F);
}

void AccXR(){
    float tempAccX = float.Parse(
           GameObject.FindGameObjectWithTag("AccX")
          .GetComponent<Text>()
          .text);
    accEvent.AddListener (accXAction);
    if (tempAccX < 99) {
        Debug.Log ("Hi, got it, the" + target);
    } 
    else 
    {
        Debug.Log ("Func0 " + tempAccX);
    }
}

以下是控制台中的结果:只有99而不是0到98之间的其他数字。

1 个答案:

答案 0 :(得分:0)

Unity仅使用单个线程。 Update将从0到99运行,然后一旦完成,它将执行挂起的InvokeRepeating。请参阅Execution Order

页面
  

在Update函数返回后运行正常的协同程序更新。协程是一个可以暂停执行(yield)的函数,直到给定的YieldInstruction结束。

如果要让它们“同时”运行,则需要使用System.Threading命名空间中的类。但是,如果您不在“Unity线程”中,则无法触摸Unity控制并向UI公开的任何内容,您将需要找到unity specific threading library以使代码再次在UI线程上运行。< / p>