我在联合公司工作,我有一个大剧本。在脚本的某个时候,一个协同线,foo将被启动。我希望这个协同器运行另一个IEnumerator函数,bar,但我不希望bar作为协同器开始。相反,我需要foo开始运行,可能会运行几次,调用bar,直到bar完成运行,然后继续运行。目前,我不得不让bar IEnumerable去做:
void Start () {
StartCoroutine(foo());
}
IEnumerator foo () {
//Do something up here
foreach (int x in bar()) {
yield return null; //Wait for bar to yield break
}
//Do more stuff down here
yield break;
}
IEnumerable bar () {
for (int x=0; x < 5; x++) {
//Do Something 5 Times
yield return x;
}
yield break;
}我一直在找,但我找不到合适的方法。当然会有超过10个这样的"bar“函数,所以我不想每次调用一个for循环。如何以这种方式调用其他IEnuerator函数?
发布于 2013-08-21 17:42:13
像这样的事怎么样:
class Program
{
public class CoroutineThing
{
public IEnumerator foo()
{
//Do something up here
var nTimesInvoked = 0;
while (bar(nTimesInvoked++))
yield return null; //Wait for bar to yield break
//Do more stuff down here
yield break;
}
bool bar(int nTimesInvoked)
{
if (nTimesInvoked < 5)
{
Console.WriteLine("Bar: {0}", nTimesInvoked);
// Do something;
}
return nTimesInvoked < 4;
}
}
public static void Main(params string[] args)
{
var cor = new CoroutineThing();
var nFoo = 0;
var e = cor.foo();
while (e.MoveNext())
{
nFoo++;
Console.WriteLine("{0} times foo", nFoo);
}
Console.ReadLine();
}
}https://stackoverflow.com/questions/18364005
复制相似问题