首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行时更改延迟产生[C#]

在运行时更改延迟产生[C#]
EN

Stack Overflow用户
提问于 2017-03-23 13:33:40
回答 1查看 365关注 0票数 1

这是问题所在的代码:

代码语言:javascript
运行
复制
public class EnemySpawnScript : MonoBehaviour {
    private float previousEnemyDelay = 0;

    public void enemySpawn (GameObject player, LevelData level){
        //loop every enemy inside the level to instantiate them. EnemyDataSpawn has got some infos about every enemy
        foreach (EnemyDataSpawn enemyDataSpawn in level.enemyDataSpawner) {
            StartCoroutine (InstantiateObject (player,enemyDataSpawn));
        }
    }

    IEnumerator InstantiateObject (GameObject player, EnemyDataSpawn enemyDataSpawn)
    {
        //this handles the delay of the spawn of every enemy. 
        previousEnemyDelay += enemyDataSpawn.delay;
        //here is the problem if i want to stop enemies to spawn and then continue to spawn them again.
        yield return new WaitForSeconds (previousEnemyDelay);
        //after waiting, i do something.
}

如果我只想在enemyDataSpawn中指定的延迟之后实例化每个敌人(我没有编写“实例化敌人”部分(我使用对象池来实现这一点),就可以使用此代码),它位于IEnumerator内部的屈服之后,因为这对我的问题并不重要。问题是,对于每种敌人,我都有一个整数(称为maxOnScreen),如果同名的活跃敌人的数量等于maxOnScreen,那么我想停止实例化每一个其他敌人,直到一个敌人(其活动数等于maxOnScreen)被停用或销毁为止。如果一个敌人不再被激活,而同名的活跃敌人的数量不再等于maxOnScreen,那么我想像我的实际代码那样再次实例化列表中的下一个敌人。我不知道如何用IEnumerator实现这一点,所以我的问题是:用IEnumerator实现这个目标是可能的吗?或者我应该使用其他一些方法?

简单的例子:有7个敌人活跃,3个命名为“坏士兵”,4个命名为“好士兵”。好士兵的maxOnScreen变量是"4“,所以我不希望其他敌人会实例化,除非其中一个”好士兵“被摧毁/停用。如果活跃的“好士兵”总数是3(比maxOnScreen还少),我想游戏继续产卵剩余的敌人产卵。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 13:45:45

你可以使用一个单独的敌人-产卵协同线,而不是发射每一个你想要产卵的敌人的协同线。通过这种方式,你可以很容易地控制何时产卵,何时推迟产卵:

代码语言:javascript
运行
复制
public class EnemySpawnScript : MonoBehaviour {

public void enemySpawn (GameObject player, LevelData level){
    StartCoroutine(InstantiateObjects(player, level.enemyDataSpawner));
    }

    IEnumerator InstantiateObjects (GameObject player, IEnumerable<EnemyDataSpawn> enemyDataSpawnList){

        foreach(var enemyDataSpawn in enemyDataSpawnList){

            while( /* too many enemies of enemyDataSpawn type */ ) {
                yield return new WaitForSeconds(enemyDataSpawn.delay);
            }
            // instantiate enemyDataSpawn
        }

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

https://stackoverflow.com/questions/42977591

复制
相关文章

相似问题

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