我遇到了关于函数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之间的其他数字。
答案 0 :(得分:0)
Unity仅使用单个线程。 Update
将从0到99运行,然后一旦完成,它将执行挂起的InvokeRepeating。请参阅Execution Order
在Update函数返回后运行正常的协同程序更新。协程是一个可以暂停执行(yield)的函数,直到给定的YieldInstruction结束。
如果要让它们“同时”运行,则需要使用System.Threading
命名空间中的类。但是,如果您不在“Unity线程”中,则无法触摸Unity控制并向UI公开的任何内容,您将需要找到unity specific threading library以使代码再次在UI线程上运行。< / p>