首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名协同

匿名协同
EN

Stack Overflow用户
提问于 2018-12-07 13:48:29
回答 1查看 815关注 0票数 0

首先,我想做的是:

代码语言:javascript
复制
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的情况下,还有另一种方法可以达到与上面相同的效果吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-25 04:13:08

也许你喜欢这样:

代码语言:javascript
复制
public IEnumerator Co_Test(params Action[] action)
{
    action();
    yield return action;
}

然后像这样使用:

代码语言:javascript
复制
StartCoroutine(Co_Test(() =>
    {
        //first function
    }, () =>
    {
        //socond
    }, and as much as you want...));

您可以在旁边使用“等待”函数,如下所示:

代码语言:javascript
复制
public IEnumerator Co_Test(Func<bool> b, params Action[] actions)
{
    yield return new WaitUntil(b);
        foreach (var action in actions)
        {
            action();
        }
    yield return actions;
}

并使用它:

代码语言:javascript
复制
StartCoroutine(Co_Test(new Func<bool>(() =>
        {
            if (Enemies.isAllDead) return true;
            else return false;
            
        })
    ,() =>
    {
        //it wait until the above Func return true;

    }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53670894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档