如何在lateUpdate中调用Coroutine

时间:2016-07-06 15:21:27

标签: c# unity3d unity5 coroutine

我喜欢coroutines。它们就像自我维持代码,但问题是它们在统一框架中的特定时间被调用。根据{{​​3}},大多数协同程序在更新后但在动画之前调用。我希望有一个协程类型系统,可以在内部动画更新之后但在场景渲染之前调用。这是因为我在动画之后编辑3D模型变换(不依赖于动画)。这该怎么做?我在C#工作。

1 个答案:

答案 0 :(得分:2)

正如您自己提供的链接所述,这是不可能的。引擎以其工作方式工作,这不能从“脚本级别”改变。

但是,如果你坚持使用协同程序,那么你可以做的就是让它们“准备执行你的代码”,并将工作留给LateUpdate()。 要做到这一点,你应该做一些事情(有点伪代码,因为它未经测试)

bool hasToUpdate = false; //class variable

private void LateUpdate() {
    if (hasToUpdate == false) { return; } //I don't like "!" or leave "{}"
    //do the stuff you want to do between 'game logic' and 'rendering'
    //the thing you most probably do now in your coroutine code
    hasToUpdate = false;
}

private void YourCoroutine() {
    //if happened what you want / there was the expected
    //user interaction, yield returned, etc, set class variables
    //to the proper value (if there's anything like that), etc:
    //i.e. move out values from coroutine code to class
    //level and set calculated values you need to set, then:
    hasToUpdate = true;
}

这样,你的协程任务就会按照你想要的方式和你想要的方式执行,但即使这应该有效,但对我来说感觉“有点笨拙”。

反正。如果没有您的具体问题或没有您的代码,很难说出更多信息,但我希望这会有所帮助。欢呼声。