【发布时间】:2016-06-02 17:43:24
【问题描述】:
试图弄清楚协程是否是正确的方法。
我有 3 个不同的类来执行操作;我希望这 3 个类按任意顺序完成它们的工作,一旦全部完成 3 个,我就可以进入下一个循环并再次调用这 3 个类中的方法以重新开始。
现在,我在每个类中都有一个方法来完成这项工作;在主类中,我创建了一个协程,这是我的程序的主循环。 协程的条件是 3 个类中的所有 3 个方法都必须在一个产生返回 void 的 while 循环中完成。这是协程的简化版本:
IEnumerator void loopFunction()
{
while (!classA.method() && !classB.method() && !classC.method())
{
yeld return void;
}
// do some updates
// start all over again
}
这会正确实施还是我应该使用不同的方法?目标是有一个每 X 秒执行一次的循环,并且只有在其中的所有方法都完成时才开始一个新的循环。
编辑:
在浏览时我发现实际上可以使用多线程,即旧的“System.Threading”方式,因为 Unity 仅支持 Net 3.5。
线程似乎是另一个可行的选择;虽然我听说 Unity 本身不是线程安全的,所以我不确定您是否可以将协程内部不同类中的函数作为单独的线程运行。
【问题讨论】:
-
这些循环是否以任何方式直接与 Unity 交互?
-
每个函数只是在后台计算值; AI 在主循环中的 FSM 中运行,以避免任何形式的灾难性锁定。一类是控制器,它更新视图(主 UI);这会被视为直接互动吗?我正在使用新的 GUI (4.6+)