Unity - "Dynamic" 对象池化

Unity - "Dynamic" Object pooling

我正在为 android 制作一款小游戏,目前使用的是池化系统,例如对于敌人,射弹等

至于现在,我在玩游戏时异步加载关卡,这意味着冒险进入新区域时不会加载场景。

池在新游戏开始或旧存档加载时创建。它工作正常但留下一个问题!播放时没有加载场景,除了开始时没有时间填充池。由于玩家可能一次玩完所有游戏,这意味着需要加载和实例化所有池化对象。

我意识到 "Dynamically" 填充池有点错过池化的整个想法,但我很好奇人们想出了什么解决方案。在 10 级之前实例化 1 级的敌人似乎很浪费。

干杯:)

为了扩展我的评论,我做了一个示例,您可以将其实施到您的代码中。启用、禁用和 OnLevelFinishedLoading 应该进入您的 Level/SceneManager class 的某处。

每当您加载新场景时,这应该会流入池中的对象。

void OnEnable()
{   
    SceneManager.sceneLoaded += OnLevelFinishedLoading;
}

void OnDisable()
{  
    SceneManager.sceneLoaded -= OnLevelFinishedLoading;
}

void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
{
    StartCoroutine(StartPoolingNextLevel(yourObjectPooler));
}

private IEnumerator StartPoolingNextLevel(YourObjectPoolerClass yourObjectPooler)
{
    for (int i = 0; i < yourObjectPooler.AmountToPool; i++)
    {
        yourObjectPooler.PoolItem(); // psuedo code
        yield return new WaitForEndOfFrame();
    }
}