首先,我想做的是:
delegate IEnumerator EnemySpawningRoutine();
EnemySpawningRoutine[] enemySpawners = new EnemySpawningRoutine[] {
() => {
//variables
//spawn
yield return new WaitForSeconds(3f);
//complex stuff
//more spawning
},
() => {
//same as above
}
};
IEnumerator EnemySpawningRoutine() {
IEnumerator currentSpawnRoutine;
while(isGameRunning) {
currentSpawnRoutine = //choose one of enemySpawners
StartCoroutine(currentSpawnRoutine);
yield return new WaitUntil(() => {
//return true if all enemies are dead or something like that.
});
}
}不幸的是,这似乎是不可能的,因为在委托或匿名函数中不支持产量返回功能。
在没有匿名IEnumerators的情况下,还有另一种方法可以达到与上面相同的效果吗?
发布于 2022-07-25 04:13:08
也许你喜欢这样:
public IEnumerator Co_Test(params Action[] action)
{
action();
yield return action;
}然后像这样使用:
StartCoroutine(Co_Test(() =>
{
//first function
}, () =>
{
//socond
}, and as much as you want...));您可以在旁边使用“等待”函数,如下所示:
public IEnumerator Co_Test(Func<bool> b, params Action[] actions)
{
yield return new WaitUntil(b);
foreach (var action in actions)
{
action();
}
yield return actions;
}并使用它:
StartCoroutine(Co_Test(new Func<bool>(() =>
{
if (Enemies.isAllDead) return true;
else return false;
})
,() =>
{
//it wait until the above Func return true;
}));https://stackoverflow.com/questions/53670894
复制相似问题