在继续循环之前等待事件结束

时间:2016-10-24 16:18:27

标签: c# for-loop events unity3d coroutine

所以我已经被困在这一部分一段时间了。 我正在写一个项目,我有大约12轮相同的测试。 所以我基本上只想在每次使用不同的头像时使用相同的功能。

有一个事件会触发,当它触发时会调用一个名为FinishTest的函数 我希望循环只有在FinishTest被触发并结束时才会继续。

for (int i = 0;  i < numberOfAvatars; i++) {
    StartTest(avatars[i]); // This is not really relevent to the question
    //Wait until the FinishTest event is finished before continuing the loop
}

当我的模型和某个对象之间存在触发器时,将激活FinishTest。 在startTest之前,FinishTest没有办法完成,因为StartTest basiccly会对模型进行实例化,因此我认为必须有一些方法可以确保StartTest在FinishTest之前完成。

功能内部并不重要,但为什么不呢:

private void  StartTest(GameObject avatar) {
        Instantiate(avatar, new Vector3(2f,2f,2f), Quaterion.identity));
}

private void FinishTest()
{
    testsResults[testNumber] = new TestResult(avatarsName, holdingObject); 
       testsResults[testNumber].setTimeUntilAvatarGotShot(string.Format("{0:F2}",timer) 

}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

bool TestFinished;
IEnumerator RunTest() {
    for (int i = 0;  i < numberOfAvatars; i++) {
        TestFinished = false;
        StartTest(avatars[i]); // This is not really relevent to the question

        //Wait until the FinishTest event is finished before continuing the loop
        while (!TestFinished) yield return null;
    }
}

private void FinishTest()
{
    testsResults[testNumber] = new TestResult(avatarsName, holdingObject); 
    testsResults[testNumber].setTimeUntilAvatarGotShot(string.Format("{0:F2}",timer);
    TestFinished = true;
}

然后你StartCoroutine(RunTest())代码中的某个地方。