首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity -“动态”对象池

Unity -“动态”对象池
EN

Stack Overflow用户
提问于 2019-04-29 16:13:48
回答 1查看 539关注 0票数 0

我正在为android做一个小游戏,目前正在使用一个池化系统,例如用于敌人,投射物等。

至于现在,我在你玩游戏的时候异步加载关卡,这意味着当你冒险进入一个新的区域时,没有加载场景。

启动新游戏或加载旧保存时,会创建池。它工作得很好,但留下了一个问题!在游戏中没有加载场景的情况下,除了在开始时,没有时间填充池。由于玩家可能会在一次会议中玩完所有游戏,这意味着需要加载和实例化所有池化对象。

我意识到“动态地”填充一个池子在一开始就有点错过了池化的整个想法,但我很好奇人们想出了什么解决方案。在级别1实例化敌人,直到级别10才能看到使用,这看起来很浪费。

干杯:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 19:46:30

为了扩展我的评论,我做了一个例子,你可以在你的代码中实现。enable、disable和OnLevelFinishedLoading应该包含在您的Level/SceneManager类中。

无论何时加载新场景,这都应该是池化对象中的流。

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55899337

复制
相关文章

相似问题

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